|
@@ -29,6 +29,7 @@ import com.kmall.admin.entity.vip.Mall2PointsRulesEntity;
|
|
|
import com.kmall.admin.fromcomm.dao.SysConfigDao;
|
|
|
import com.kmall.admin.fromcomm.entity.SysUserEntity;
|
|
|
import com.kmall.admin.haikong.constant.Constants;
|
|
|
+import com.kmall.admin.haikong.constant.VmcconnectUrlEnum;
|
|
|
import com.kmall.admin.haikong.dto.WareQueryStockResponseDTO;
|
|
|
import com.kmall.admin.haikong.utils.ListUtils;
|
|
|
import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceResponseVO;
|
|
@@ -207,10 +208,6 @@ public class OrderServiceImpl implements OrderService {
|
|
|
@Autowired
|
|
|
private AddressInfoService addressInfoService;
|
|
|
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private KtoEccsService ktoEccsService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private CustomsClearanceTimeliness customsClearanceTimeliness;
|
|
|
|
|
@@ -222,7 +219,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
@Autowired
|
|
|
private HaiKongProperties haiKongProperties;
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 免税mall接口工具类
|
|
|
+ */
|
|
|
@Autowired
|
|
|
private VmcShopTemplate vmcShopTemplate;
|
|
|
|
|
@@ -246,6 +245,11 @@ public class OrderServiceImpl implements OrderService {
|
|
|
*/
|
|
|
@Autowired
|
|
|
private MkActivitiesPromotionService mkActivitiesPromotionService;
|
|
|
+ /**
|
|
|
+ * 免税mall日志记录
|
|
|
+ */
|
|
|
+ @Autowired
|
|
|
+ private MallVmcSendLogDao mallVmcSendLogDao;
|
|
|
|
|
|
|
|
|
|
|
@@ -1005,6 +1009,44 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 海控还原门店商品库存
|
|
|
+ * @param stockNum
|
|
|
+ * @param storeRelaEntity
|
|
|
+ * @param orderGoodsEntity
|
|
|
+ * @param sellVolume
|
|
|
+ * @param user
|
|
|
+ */
|
|
|
+ private void resetStoreGoodsStockMall(Integer stockNum, ProductStoreRelaEntity storeRelaEntity,
|
|
|
+ OrderGoodsEntity orderGoodsEntity, BigDecimal sellVolume,SysUserEntity user) {
|
|
|
+ storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString())); // 减退库存
|
|
|
+ //库存数量 + 商品数量
|
|
|
+ storeRelaEntity.setStockNum(stockNum + orderGoodsEntity.getNumber());//库存数量
|
|
|
+ //待退款数量 - 商品数量
|
|
|
+ storeRelaEntity.setToBeRestored(storeRelaEntity.getToBeRestored() - orderGoodsEntity.getNumber());
|
|
|
+ productStoreRelaDao.update(storeRelaEntity);
|
|
|
+
|
|
|
+ String username = "system";
|
|
|
+ if (user != null) {
|
|
|
+ username = user.getUsername();
|
|
|
+ }
|
|
|
+ StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
|
|
|
+ storeMngChangeEntity.setChangeType(Dict.changeType.item_0.getItem());
|
|
|
+ storeMngChangeEntity.setChangeReason("前端退款");
|
|
|
+ storeMngChangeEntity.setGoodsId(storeRelaEntity.getGoodsId().intValue());
|
|
|
+ storeMngChangeEntity.setStoreId(storeRelaEntity.getStoreId().intValue());
|
|
|
+ storeMngChangeEntity.setMerchSn(storeRelaEntity.getMerchSn());
|
|
|
+ storeMngChangeEntity.setStoreChangeNum(orderGoodsEntity.getNumber());
|
|
|
+ storeMngChangeEntity.setStoreOriginalNum(stockNum);
|
|
|
+ storeMngChangeEntity.setStoreValidNum(stockNum + orderGoodsEntity.getNumber());
|
|
|
+ storeMngChangeEntity.setCreateTime(new Date());
|
|
|
+ storeMngChangeEntity.setModTime(new Date());
|
|
|
+ storeMngChangeEntity.setCreaterSn(username);
|
|
|
+ storeMngChangeEntity.setModerSn(username);
|
|
|
+ storeMngChangeEntity.setIsValid(0);
|
|
|
+ storeMngChangeDao.save(storeMngChangeEntity);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 查询该退款订单编号是否是推广渠道订单,是则修改渠道定时扫描状态
|
|
|
*
|
|
|
* @param orderInfo
|
|
@@ -3242,7 +3284,6 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_402.getItem())) {
|
|
|
return R.error("订单已退款");
|
|
|
}
|
|
|
-
|
|
|
if (orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
|
|
|
return R.error("订单正在准备,请稍等!");
|
|
|
}
|
|
@@ -3257,12 +3298,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
|
|
|
String payFlag = order.getPayFlag();
|
|
|
-
|
|
|
String key = "kmall_order_refund_" + order.getOrderSn();
|
|
|
if (JedisUtil.exists(key)) {
|
|
|
return R.error("订单退款操作过快,请等待!");
|
|
|
}
|
|
|
-
|
|
|
JedisUtil.set(key, System.currentTimeMillis() + "", 3);
|
|
|
if (orderInfo.getPayStatus() == Integer.parseInt(Dict.payStatus.item_3.getItem())) {
|
|
|
return R.error("订单正在退款中,请勿重复退款");
|
|
@@ -3278,32 +3317,14 @@ public class OrderServiceImpl implements OrderService {
|
|
|
cdl.await();
|
|
|
|
|
|
if (Dict.payFlag.item_weixin.getItem().equals(payFlag)) {
|
|
|
-
|
|
|
Double totalActualPrice = orderDao.getTotalActualPrice(orderInfo.getMerchOrderSn());
|
|
|
if (totalActualPrice == null) {
|
|
|
totalActualPrice = 0d;
|
|
|
}
|
|
|
if (orderInfo.getOrderStatus() != Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
|
|
|
- LOGGER.info("微信退款开始");
|
|
|
+ LOGGER.info("[微信退款开始--------orderRefund]"+order.getOrderSn());
|
|
|
WechatRefundApiResult result = WechatUtil.wxRefund(orderInfo.getOrderSn(), totalActualPrice,
|
|
|
orderInfo.getActualPrice().doubleValue());
|
|
|
- OrderRefundEntity orderRefund = new OrderRefundEntity();
|
|
|
- orderRefund.setRefundId(result.getRefund_id());
|
|
|
- orderRefund.setOutRefundNo(result.getOut_trade_no());
|
|
|
- orderRefund.setRefundMoney(BigDecimal.valueOf(Long.valueOf(result.getRefund_fee())).divide(Constant.ONE_HUNDRED));
|
|
|
- orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款处理中
|
|
|
- orderRefund.setModTime(new Date());
|
|
|
- orderRefund.setRefundTime(new Date());
|
|
|
- orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
|
|
|
- orderRefund.setUserId(user.getUserId().intValue());
|
|
|
- orderRefund.setRefundId(order.getUserId() + "");
|
|
|
- orderRefund.setCreateTime(new Date());
|
|
|
- List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn());
|
|
|
- if (list.size() > 1) {//多条订单
|
|
|
- orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款
|
|
|
- } else {
|
|
|
- orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款
|
|
|
- }
|
|
|
order.setPayStatus(Integer.parseInt(Dict.payStatus.item_5.getItem()));
|
|
|
order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
|
|
|
//修改为退款成功
|
|
@@ -3312,16 +3333,16 @@ public class OrderServiceImpl implements OrderService {
|
|
|
PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn());
|
|
|
pickUpCodeEntity.setPickUpCodeStatus("3");
|
|
|
pickUpCodeService.update(pickUpCodeEntity);
|
|
|
+ //还原库存,调用免税mall接口退款
|
|
|
+ restoreInventoryMsMall(order);
|
|
|
//新增退款记录
|
|
|
- orderRefund.setRestore(1);
|
|
|
+ OrderRefundEntity orderRefund = orderRefundLog(result.getRefund_id(),result.getOut_trade_no(),result.getRefund_fee(),order.getId(),user.getUserId(),order.getMerchOrderSn());
|
|
|
orderRefundDao.save(orderRefund);
|
|
|
- //调用免税mall接口退款
|
|
|
- restoreInventoryMsMall(order);
|
|
|
|
|
|
}
|
|
|
// 支付宝的退款代码
|
|
|
} else if (Dict.payFlag.item_alipay.getItem().equals(payFlag)) {
|
|
|
-
|
|
|
+ LOGGER.info("[支付宝退款开始--------orderRefund]"+order.getOrderSn());
|
|
|
AliPayMicropayApiResult userRefund = AliPayUtil.aliTradeRefund(order.getOrderSn(), order.getActualPrice().toString(),
|
|
|
"用户退款", order.getStoreId() + "");
|
|
|
// 是否已退款校验
|
|
@@ -3334,45 +3355,57 @@ public class OrderServiceImpl implements OrderService {
|
|
|
LOGGER.error("[支付宝退款校验出错]",e.getMessage());
|
|
|
}
|
|
|
LOGGER.info(userRefund.getSubMsg());
|
|
|
-
|
|
|
- OrderRefundEntity orderRefund = new OrderRefundEntity();
|
|
|
- orderRefund.setRefundId(userRefund.getTradeNo());
|
|
|
- orderRefund.setOutRefundNo(userRefund.getOutTradeNo());
|
|
|
- orderRefund.setRefundMoney(new BigDecimal(userRefund.getRefundFee()));
|
|
|
-
|
|
|
-
|
|
|
- orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款成功
|
|
|
- orderRefund.setModTime(new Date());
|
|
|
- orderRefund.setRefundTime(new Date());
|
|
|
- orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
|
|
|
- orderRefund.setUserId(user.getUserId().intValue());
|
|
|
- orderRefund.setRefundId(order.getUserId() + "");
|
|
|
- orderRefund.setCreateTime(new Date());
|
|
|
- List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn());
|
|
|
- if (list.size() > 1) {//多条订单
|
|
|
- orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款
|
|
|
- } else {
|
|
|
- orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
order.setPayStatus(Integer.parseInt(Dict.payStatus.item_5.getItem()));
|
|
|
order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
|
|
|
- orderDao.update(order);//修改为退款成功
|
|
|
+ //修改为退款成功
|
|
|
+ orderDao.update(order);
|
|
|
// 修改小票码
|
|
|
PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn());
|
|
|
pickUpCodeEntity.setPickUpCodeStatus("3");
|
|
|
pickUpCodeService.update(pickUpCodeEntity);
|
|
|
-
|
|
|
- //调用免税mall接口退款
|
|
|
+ //还原库存,调用免税mall接口退款
|
|
|
restoreInventoryMsMall(order);
|
|
|
- orderRefund.setRestore(1);
|
|
|
- orderRefundDao.save(orderRefund);//退款记录
|
|
|
+ //新增退款记录
|
|
|
+ OrderRefundEntity orderRefund = orderRefundLog(userRefund.getTradeNo(),userRefund.getOutTradeNo(),userRefund.getRefundFee(),order.getId(),user.getUserId(),order.getMerchOrderSn());
|
|
|
+ orderRefundDao.save(orderRefund);
|
|
|
}
|
|
|
|
|
|
return R.ok("退款成功");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增退款记录
|
|
|
+ * @param refundId
|
|
|
+ * @param OutTradeNo
|
|
|
+ * @param refundFee
|
|
|
+ * @param orderId
|
|
|
+ * @param userId
|
|
|
+ * @param merchOrderSn
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private OrderRefundEntity orderRefundLog(String refundId,String OutTradeNo,String refundFee,Long orderId,Long userId,String merchOrderSn){
|
|
|
+ OrderRefundEntity orderRefund = new OrderRefundEntity();
|
|
|
+ orderRefund.setRefundId(refundId);
|
|
|
+ orderRefund.setOutRefundNo(OutTradeNo);
|
|
|
+ orderRefund.setRefundMoney(BigDecimal.valueOf(Long.valueOf(refundFee)).divide(Constant.ONE_HUNDRED));
|
|
|
+ orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款处理中
|
|
|
+ orderRefund.setModTime(new Date());
|
|
|
+ orderRefund.setRefundTime(new Date());
|
|
|
+ orderRefund.setOrderId(orderId.intValue());
|
|
|
+ orderRefund.setUserId(userId.intValue());
|
|
|
+ orderRefund.setRefundId(userId + "");
|
|
|
+ orderRefund.setCreateTime(new Date());
|
|
|
+ Integer sum = orderDao.queryObjectByMerchOrderSnHkMall(merchOrderSn);
|
|
|
+ if (sum > 1) {//多条订单
|
|
|
+ orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款
|
|
|
+ } else {
|
|
|
+ orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款
|
|
|
+ }
|
|
|
+ orderRefund.setRestore(1);
|
|
|
+ return orderRefund;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 海控订单退款
|
|
|
* @param order
|
|
@@ -3381,36 +3414,47 @@ public class OrderServiceImpl implements OrderService {
|
|
|
Map<String, Object> map = new HashMap();
|
|
|
SysUserEntity user = ShiroUtils.getUserEntity();
|
|
|
map.put("orderId", order.getId());
|
|
|
- List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map);
|
|
|
+ //mall_order_goodsd,订单明细
|
|
|
+ List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryListHkMall(map);
|
|
|
for (OrderGoodsEntity orderGoodsEntity : orderGoodsVoList) {
|
|
|
ProductStoreRelaEntity storeRelaEntity = productStoreRelaDao
|
|
|
- .queryByGoodsIdAndStoreId(order.getStoreId().longValue(), orderGoodsEntity.getGoodsId().longValue());
|
|
|
+ .queryByGoodsIdAndStoreIdHkMall(order.getStoreId().longValue(), orderGoodsEntity.getGoodsId().longValue());
|
|
|
if (null == storeRelaEntity || null == storeRelaEntity.getSellVolume()) {
|
|
|
storeRelaEntity.setSellVolume(0);
|
|
|
}
|
|
|
+ //销售量 - 商品数量
|
|
|
BigDecimal sellVolume = new BigDecimal(storeRelaEntity.getSellVolume() - orderGoodsEntity.getNumber());//销售量
|
|
|
if (sellVolume.compareTo(Constant.ZERO) < 0) {
|
|
|
sellVolume = Constant.ZERO;
|
|
|
}
|
|
|
+
|
|
|
//还原门店库存
|
|
|
if (null != storeRelaEntity.getStockNum()) {
|
|
|
- Integer stockNum = storeRelaEntity.getStockNum();
|
|
|
- resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, "0", user);
|
|
|
+ resetStoreGoodsStockMall(storeRelaEntity.getStockNum(), storeRelaEntity, orderGoodsEntity, sellVolume, user);
|
|
|
}
|
|
|
}
|
|
|
- LOGGER.info("=======> 调用VMCShop接口开始发送退款订单数据......");
|
|
|
- String response = vmcShopTemplate.refundOrder(JacksonUtil.toJson(order.getOrderSn()));
|
|
|
- // 3. 解析响应数据
|
|
|
+ //调用免税mall接口
|
|
|
+ vmcShopMall(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *海控免税mall接口
|
|
|
+ * @param order
|
|
|
+ */
|
|
|
+ private void vmcShopMall(OrderEntity order) {
|
|
|
+ LOGGER.info("=======> [调用VMCShop接口开始发送退款订单数据]"+order.getOrderSn());
|
|
|
+ String body = JacksonUtil.toJson(order.getOrderSn());
|
|
|
+ String response = vmcShopTemplate.refundOrder(body);
|
|
|
+ //解析响应数据
|
|
|
LOGGER.info("=======> [发送退款订单数据成功,开始处理后续流程]"+response);
|
|
|
- Map<String,String> res = JSON.parseObject(response,Map.class);
|
|
|
- if("0".equals(res.get("code"))){
|
|
|
+ //Map<String,String> res = JSON.parseObject(response,Map.class);
|
|
|
|
|
|
+ saveVmcSend(order.getOrderSn(),VmcconnectUrlEnum.ORDERS_CANCEL_ORDER.getMethod(),body,response);
|
|
|
+ LOGGER.info(order.getOrderSn()+"[发送退款订单数据]"+JSON.toJSONString(order));
|
|
|
|
|
|
- }else{
|
|
|
- LOGGER.error(order.getOrderSn()+"[该订单退款失败]"+JSON.toJSONString(order));
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Transactional
|
|
|
public void toBeRestoreInventory(OrderEntity order) {
|
|
|
|
|
@@ -4331,7 +4375,43 @@ public class OrderServiceImpl implements OrderService {
|
|
|
LOGGER.info("会员【{}】的积分为0,不参加积分抵扣!", memberCode);
|
|
|
}
|
|
|
return orderTotalPrice;
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 重发订单
|
|
|
+ * @param orderSn
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public R resendOrderHkMall(String orderSn) {
|
|
|
+ LOGGER.info("=======> [调用VMCShop接口开始发送退款订单数据]"+orderSn);
|
|
|
+ String body = JacksonUtil.toJson(orderSn);
|
|
|
+ String response = vmcShopTemplate.resendOrder(body);
|
|
|
+ //解析响应数据
|
|
|
+ LOGGER.info("=======> [resendOrderHkMall---重发订单数据成功,开始处理后续流程]"+response);
|
|
|
+ //记录发送至免税Mall日志
|
|
|
+ saveVmcSend(orderSn,VmcconnectUrlEnum.ORDERS_RETRY_ORDER.getMethod(),body,response);
|
|
|
+ Map<String,String> res = JSON.parseObject(response,Map.class);
|
|
|
+ if("0".equals(res.get("code"))){
|
|
|
+ return R.ok();
|
|
|
+ }else{
|
|
|
+ return R.error(500,"重发订单失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 记录发送至免税Mall日志
|
|
|
+ * @param orderSn
|
|
|
+ * @param body
|
|
|
+ * @param response
|
|
|
+ */
|
|
|
+ private void saveVmcSend(String orderSn,String urlType,String body,String response){
|
|
|
+ MallVmcSendlogEntity mallVmcSendlogEntity = new MallVmcSendlogEntity();
|
|
|
+ mallVmcSendlogEntity.setOrderSn(orderSn);
|
|
|
+ mallVmcSendlogEntity.setVmcType(urlType);
|
|
|
+ mallVmcSendlogEntity.setRequestMsg(body);
|
|
|
+ mallVmcSendlogEntity.setResponseMsg(response);
|
|
|
+ mallVmcSendLogDao.saveVmcSend(mallVmcSendlogEntity);
|
|
|
}
|
|
|
|
|
|
/**
|