|
@@ -0,0 +1,751 @@
|
|
|
|
|
+package com.fs.reward.service.impl;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import com.fs.common.core.domain.R;
|
|
|
|
|
+import com.fs.common.core.redis.RedisCache;
|
|
|
|
|
+import com.fs.common.exception.CustomException;
|
|
|
|
|
+import com.fs.common.utils.DateUtils;
|
|
|
|
|
+import com.fs.core.utils.OrderCodeUtils;
|
|
|
|
|
+import com.fs.course.domain.FsCourseRewardRound;
|
|
|
|
|
+import com.fs.course.mapper.FsCourseRewardRoundMapper;
|
|
|
|
|
+import com.fs.erp.domain.*;
|
|
|
|
|
+import com.fs.erp.dto.BaseResponse;
|
|
|
|
|
+import com.fs.erp.dto.ErpOrderQueryRequert;
|
|
|
|
|
+import com.fs.erp.dto.ErpOrderQueryResponse;
|
|
|
|
|
+import com.fs.erp.dto.ErpRefundUpdateRequest;
|
|
|
|
|
+import com.fs.erp.service.IErpOrderService;
|
|
|
|
|
+import com.fs.his.domain.*;
|
|
|
|
|
+import com.fs.his.dto.ErpRemarkDTO;
|
|
|
|
|
+import com.fs.his.enums.BusinessTypeEnum;
|
|
|
|
|
+import com.fs.his.enums.PaymentMethodEnum;
|
|
|
|
|
+import com.fs.his.enums.ShipperCodeEnum;
|
|
|
|
|
+import com.fs.his.mapper.FsStoreMapper;
|
|
|
|
|
+import com.fs.his.mapper.FsUserAddressMapper;
|
|
|
|
|
+import com.fs.his.mapper.FsUserMapper;
|
|
|
|
|
+import com.fs.his.param.PayOrderParam;
|
|
|
|
|
+import com.fs.his.service.IFsExpressService;
|
|
|
|
|
+import com.fs.his.service.IFsStorePaymentService;
|
|
|
|
|
+import com.fs.his.service.IFsUserAddressService;
|
|
|
|
|
+import com.fs.huifuPay.domain.HuiFuRefundResult;
|
|
|
|
|
+import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
|
|
|
|
|
+import com.fs.huifuPay.service.HuiFuService;
|
|
|
|
|
+import com.fs.pay.mapper.PaymentMiniProgramConfigMapper;
|
|
|
|
|
+import com.fs.reward.domain.FsRewardGoods;
|
|
|
|
|
+import com.fs.reward.domain.FsRewardGoodsOrder;
|
|
|
|
|
+import com.fs.reward.mapper.FsRewardGoodsMapper;
|
|
|
|
|
+import com.fs.reward.mapper.FsRewardGoodsOrderMapper;
|
|
|
|
|
+import com.fs.reward.param.FsRewardGoodsOrderAddParam;
|
|
|
|
|
+import com.fs.reward.param.FsRewardGoodsOrderListParam;
|
|
|
|
|
+import com.fs.reward.param.FsRewardGoodsOrderPayParam;
|
|
|
|
|
+import com.fs.reward.service.IFsRewardGoodsOrderService;
|
|
|
|
|
+import com.fs.reward.vo.FsRewardGoodsOrderVO;
|
|
|
|
|
+import com.fs.tzBankPay.TzBankService.TzBankService;
|
|
|
|
|
+import com.fs.tzBankPay.doman.*;
|
|
|
|
|
+import com.fs.wx.order.domain.FsWxExpressTask;
|
|
|
|
|
+import com.fs.wx.order.mapper.FsWxExpressTaskMapper;
|
|
|
|
|
+import com.fs.ybPay.domain.OrderResult;
|
|
|
|
|
+import com.fs.ybPay.dto.OrderQueryDTO;
|
|
|
|
|
+import com.fs.ybPay.service.IPayService;
|
|
|
|
|
+import com.github.binarywang.wxpay.service.WxPayService;
|
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
+import org.springframework.context.ApplicationEventPublisher;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
|
+import java.sql.Timestamp;
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+
|
|
|
|
|
+import static com.fs.his.utils.PhoneUtil.decryptPhone;
|
|
|
|
|
+
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+@Service
|
|
|
|
|
+public class FsRewardGoodsOrderServiceImpl extends ServiceImpl<FsRewardGoodsOrderMapper, FsRewardGoodsOrder> implements IFsRewardGoodsOrderService {
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsRewardGoodsMapper fsRewardGoodsMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsUserAddressMapper fsUserAddressMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsCourseRewardRoundMapper fsCourseRewardRoundMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsUserMapper fsUserMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsStoreMapper fsStoreMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IFsStorePaymentService storePaymentService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IPayService payService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private HuiFuService huiFuService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IFsExpressService expressService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IFsUserAddressService fsUserAddressService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ @Qualifier("JSTErpOrderServiceImpl")
|
|
|
|
|
+ private IErpOrderService jstErpOrderService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RedisCache redisCache;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsWxExpressTaskMapper fsWxExpressTaskMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsStoreMapper storeMapper;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询奖励商品订单列表
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<FsRewardGoodsOrderVO> selectFsRewardGoodsOrderVOList(FsRewardGoodsOrderListParam param) {
|
|
|
|
|
+ return baseMapper.selectFsRewardGoodsOrderVOList(param);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据id查询奖励商品订单详情
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public FsRewardGoodsOrderVO selectFsRewardGoodsOrderVOById(Long orderId) {
|
|
|
|
|
+ return baseMapper.selectFsRewardGoodsOrderVOById(orderId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 支付订单
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Map<String, Object> payment(Long userId, FsRewardGoodsOrderPayParam param) {
|
|
|
|
|
+ // 查询订单
|
|
|
|
|
+ FsRewardGoodsOrder order = baseMapper.selectById(param.getOrderId());
|
|
|
|
|
+ if (Objects.isNull(order)) {
|
|
|
|
|
+ throw new CustomException("订单不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!order.getUserId().equals(userId)) {
|
|
|
|
|
+ throw new CustomException("非法操作!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!order.getStatus().equals(1)) {
|
|
|
|
|
+ throw new CustomException("订单状态不正确!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (order.getExpiredTime().isBefore(LocalDateTime.now())) {
|
|
|
|
|
+ throw new CustomException("订单已过期!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查询用户
|
|
|
|
|
+ FsUser user = fsUserMapper.selectFsUserByUserId(userId);
|
|
|
|
|
+ if (Objects.isNull(user)) {
|
|
|
|
|
+ throw new CustomException("用户不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ FsUserAddress fsUserAddress = fsUserAddressMapper.selectFsUserAddressByAddressId(param.getAddressId());
|
|
|
|
|
+ if (Objects.isNull(fsUserAddress)) {
|
|
|
|
|
+ throw new CustomException("收货地址不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ order.setUserName(fsUserAddress.getRealName().trim());
|
|
|
|
|
+ order.setMobile(fsUserAddress.getPhone().trim());
|
|
|
|
|
+ order.setAddress(fsUserAddress.getProvince() + " " + fsUserAddress.getCity() + " " + fsUserAddress.getDistrict() + " " + fsUserAddress.getDetail());
|
|
|
|
|
+ order.setPayType(param.getPayType());
|
|
|
|
|
+ baseMapper.updateById(order);
|
|
|
|
|
+
|
|
|
|
|
+ // 如果金额为0,直接完成支付
|
|
|
|
|
+ if (order.getPayMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
+ this.payConfirm(order.getOrderSn(), "", "", "", 2, "", "");
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
|
|
+ result.put("isPay", 1);
|
|
|
|
|
+ result.put("message", "支付成功");
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 构建支付参数并使用统一支付处理
|
|
|
|
|
+ PayOrderParam payOrderParam = buildRewardPayOrderParam(param, order);
|
|
|
|
|
+ return storePaymentService.processPayment(payOrderParam);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建奖励商品支付参数
|
|
|
|
|
+ */
|
|
|
|
|
+ private PayOrderParam buildRewardPayOrderParam(FsRewardGoodsOrderPayParam param, FsRewardGoodsOrder order) {
|
|
|
|
|
+ PayOrderParam payOrderParam = new PayOrderParam();
|
|
|
|
|
+ payOrderParam.setOrderId(order.getOrderId());
|
|
|
|
|
+ payOrderParam.setOrderCode(order.getOrderSn());
|
|
|
|
|
+ payOrderParam.setAmount(order.getPayMoney());
|
|
|
|
|
+ payOrderParam.setUserId(order.getUserId());
|
|
|
|
|
+ payOrderParam.setCompanyId(null); // 奖励商品没有company概念
|
|
|
|
|
+ payOrderParam.setCompanyUserId(null);
|
|
|
|
|
+ payOrderParam.setPaymentMethod(getPaymentMethodEnum(param.getPayType()));
|
|
|
|
|
+ payOrderParam.setBusinessType(BusinessTypeEnum.REWARD_ORDER);
|
|
|
|
|
+ payOrderParam.setAppId(param.getAppId());
|
|
|
|
|
+ return payOrderParam;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据支付类型获取PaymentMethodEnum
|
|
|
|
|
+ */
|
|
|
|
|
+ private PaymentMethodEnum getPaymentMethodEnum(Integer payType) {
|
|
|
|
|
+ switch (payType) {
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ return PaymentMethodEnum.MINIAPP_WECHAT;
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ return PaymentMethodEnum.H5_WECHAT;
|
|
|
|
|
+ case 4:
|
|
|
|
|
+ return PaymentMethodEnum.ALIPAY;
|
|
|
|
|
+ case 5:
|
|
|
|
|
+ return PaymentMethodEnum.H5_ALIPAY;
|
|
|
|
|
+ default:
|
|
|
|
|
+ throw new CustomException("不支持的支付类型!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 支付回调
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R payConfirm(String orderSn, String payCode, String tradeNo, String payType, int type, String bankTransactionId, String bankSerialNo) {
|
|
|
|
|
+ log.info("进入奖励商品订单支付回调 orderSn: {}, payCode: {}, tradeNo: {}, payType: {}, type: {}",
|
|
|
|
|
+ orderSn, payCode, tradeNo, payType, type);
|
|
|
|
|
+ FsRewardGoodsOrder order = null;
|
|
|
|
|
+ if (type == 1) {
|
|
|
|
|
+ FsStorePayment storePayment = storePaymentService.selectFsStorePaymentByPaymentCode(payCode);
|
|
|
|
|
+ if (Objects.isNull(storePayment)) {
|
|
|
|
|
+ log.info("支付单号不存在 payCode: {}", payCode);
|
|
|
|
|
+ return R.error("支付单号不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (storePayment.getStatus() == 0) {
|
|
|
|
|
+ FsStorePayment paymentMap = new FsStorePayment();
|
|
|
|
|
+ paymentMap.setPaymentId(storePayment.getPaymentId());
|
|
|
|
|
+ paymentMap.setStatus(1);
|
|
|
|
|
+ paymentMap.setPayTime(new Date());
|
|
|
|
|
+ paymentMap.setTradeNo(tradeNo);
|
|
|
|
|
+ paymentMap.setBankSerialNo(bankSerialNo);
|
|
|
|
|
+ paymentMap.setBankTransactionId(bankTransactionId);
|
|
|
|
|
+ if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
|
|
|
|
|
+ paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(payType.equals(PayType.ALIPAY_BARCODE_PAYMENT.getCode())){
|
|
|
|
|
+ paymentMap.setPayTypeCode(PayType.ALIPAY_BARCODE_PAYMENT.name());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (storePayment.getPayMode().equals("yb")) {
|
|
|
|
|
+ OrderQueryDTO orderQueryDTO = new OrderQueryDTO();
|
|
|
|
|
+ orderQueryDTO.setUpOrderId(tradeNo);
|
|
|
|
|
+ OrderResult orderResult = payService.getOrder(orderQueryDTO);
|
|
|
|
|
+ paymentMap.setBankSerialNo(orderResult.getBankOrderId());
|
|
|
|
|
+ paymentMap.setBankTransactionId(orderResult.getBankTrxId());
|
|
|
|
|
+ }
|
|
|
|
|
+ log.info("更新支付记录");
|
|
|
|
|
+ storePaymentService.updateFsStorePayment(paymentMap);
|
|
|
|
|
+ order = getById(Long.parseLong(storePayment.getBusinessId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (type == 2) {
|
|
|
|
|
+ order = lambdaQuery().eq(FsRewardGoodsOrder::getOrderSn, orderSn).one();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.error("type类型错误");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (Objects.isNull(order) || !order.getStatus().equals(1)) {
|
|
|
|
|
+ return R.error("非法操作");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ order.setStatus(2); // 已支付
|
|
|
|
|
+ order.setPayTime(LocalDateTime.now());
|
|
|
|
|
+ order.setUpdateTime(LocalDateTime.now());
|
|
|
|
|
+ order.setUpdateBy("回调");
|
|
|
|
|
+ baseMapper.updateById(order);
|
|
|
|
|
+
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 推送erp
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void pushErp() {
|
|
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+
|
|
|
|
|
+ List<FsRewardGoodsOrder> noPushOrder = baseMapper.selectNoPushOrders();
|
|
|
|
|
+
|
|
|
|
|
+ Map<Long, List<FsRewardGoodsOrder>> storeGroup = noPushOrder.stream().collect(Collectors.groupingBy(FsRewardGoodsOrder::getStoreId));
|
|
|
|
|
+ storeGroup.forEach((k, v) -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ FsStore fsStore = storeMapper.selectFsStoreByStoreId(k);
|
|
|
|
|
+ List<ErpOrder> erpOrders = v.stream().map(order -> {
|
|
|
|
|
+ ErpOrder erpOrder = new ErpOrder();
|
|
|
|
|
+ erpOrder.setVip_code(order.getUserId().toString());
|
|
|
|
|
+ erpOrder.setPlatform_code(order.getOrderSn());
|
|
|
|
|
+ erpOrder.setShop_code(fsStore.getShopCode());
|
|
|
|
|
+ erpOrder.setSeller_memo(order.getRemark());
|
|
|
|
|
+ erpOrder.setBuyer_account(order.getUserName());
|
|
|
|
|
+ erpOrder.setRemark(order.getRemark());
|
|
|
|
|
+
|
|
|
|
|
+ List<ErpOrderPayment> payments = new ArrayList<>();
|
|
|
|
|
+ ErpOrderPayment payment = new ErpOrderPayment();
|
|
|
|
|
+ payment.setPay_type_code("weixin");
|
|
|
|
|
+ payment.setPayment(order.getPayMoney().doubleValue());
|
|
|
|
|
+ payment.setPaytime(Timestamp.valueOf(order.getPayTime()));
|
|
|
|
|
+ payments.add(payment);
|
|
|
|
|
+ erpOrder.setPayments(payments);
|
|
|
|
|
+
|
|
|
|
|
+ //大于100发发顺丰云配
|
|
|
|
|
+ if (order.getPayMoney().compareTo(new BigDecimal(100)) > 0) {
|
|
|
|
|
+ //发互联网医院SF.0235488558_241101
|
|
|
|
|
+ FsExpress express = expressService.selectFsExpressByOmsCode("SF.0235488558_241101");
|
|
|
|
|
+ erpOrder.setExpress_code(express.getOmsCode());
|
|
|
|
|
+ order.setDeliveryName(express.getName());
|
|
|
|
|
+ order.setDeliveryCode(express.getCode());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //发ztpdd
|
|
|
|
|
+ FsExpress express = expressService.selectFsExpressByOmsCode("CDYJFYD.400011111705_241230");
|
|
|
|
|
+ erpOrder.setExpress_code(express.getOmsCode());
|
|
|
|
|
+ order.setDeliveryName(express.getName());
|
|
|
|
|
+ order.setDeliveryCode(express.getCode());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ErpRemarkDTO remarkDTO = new ErpRemarkDTO();
|
|
|
|
|
+ remarkDTO.setTotalPrice(order.getOrderMoney());
|
|
|
|
|
+ remarkDTO.setPayPrice(order.getPayMoney());
|
|
|
|
|
+ remarkDTO.setDeliveryMoney(BigDecimal.ZERO);
|
|
|
|
|
+ remarkDTO.setPayMoney(order.getPayMoney());
|
|
|
|
|
+ remarkDTO.setCouponMoney(BigDecimal.ZERO);
|
|
|
|
|
+ remarkDTO.setOrderId(order.getOrderSn());
|
|
|
|
|
+ remarkDTO.setYdMoney(BigDecimal.ZERO);
|
|
|
|
|
+ remarkDTO.setPayTime(order.getPayTime().format(formatter));
|
|
|
|
|
+
|
|
|
|
|
+ erpOrder.setSeller_memo(erpOrder.getSeller_memo() + JSONUtil.toJsonStr(remarkDTO));
|
|
|
|
|
+ erpOrder.setRemark(erpOrder.getRemark() + JSONUtil.toJsonStr(remarkDTO));
|
|
|
|
|
+ erpOrder.setOrder_type_code("order");
|
|
|
|
|
+ erpOrder.setDeal_datetime(LocalDateTime.now().format(formatter));
|
|
|
|
|
+
|
|
|
|
|
+ List<ErpOrderItem> details = new ArrayList<>();
|
|
|
|
|
+ FsRewardGoods fsRewardGoods = JSON.parseObject(order.getGoodsJson(), FsRewardGoods.class);
|
|
|
|
|
+ ErpOrderItem item = new ErpOrderItem();
|
|
|
|
|
+ item.setItem_code(fsRewardGoods.getStoreGoodsSn().trim());
|
|
|
|
|
+ item.setPrice(fsRewardGoods.getPrice().toString());
|
|
|
|
|
+ item.setQty(1);
|
|
|
|
|
+ item.setRefund(0);
|
|
|
|
|
+ details.add(item);
|
|
|
|
|
+
|
|
|
|
|
+ erpOrder.setDetails(details);
|
|
|
|
|
+ erpOrder.setReceiver_name(order.getUserName().replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9]", ""));
|
|
|
|
|
+
|
|
|
|
|
+ String userPhone = order.getMobile().length() > 11 ? decryptPhone(order.getMobile()) : order.getMobile();
|
|
|
|
|
+ erpOrder.setReceiver_mobile(userPhone);
|
|
|
|
|
+
|
|
|
|
|
+ String[] address = order.getAddress().split(" ");
|
|
|
|
|
+ if (address.length < 3) {
|
|
|
|
|
+ String kdnAddress = fsUserAddressService.getKdnAddress(order.getAddress());
|
|
|
|
|
+ Map<String, Object> addDAta = (Map<String, Object>) JSON.parse(kdnAddress);
|
|
|
|
|
+ Map<String, String> add = (Map<String, String>) addDAta.get("Data");
|
|
|
|
|
+ erpOrder.setReceiver_province(add.get("ProvinceName"));
|
|
|
|
|
+ erpOrder.setReceiver_city(add.get("CityName"));
|
|
|
|
|
+ erpOrder.setReceiver_district(add.get("ExpAreaName"));
|
|
|
|
|
+ erpOrder.setReceiver_address(add.get("StreetName") + add.get("Address"));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ erpOrder.setReceiver_province(address[0]);
|
|
|
|
|
+ erpOrder.setReceiver_city(address[1]);
|
|
|
|
|
+ erpOrder.setReceiver_district(address[2]);
|
|
|
|
|
+ //处理地址多空隔问题
|
|
|
|
|
+ if (address.length > 3) {
|
|
|
|
|
+ StringBuilder addrs = new StringBuilder();
|
|
|
|
|
+ for (int i = 3; i < address.length; i++) {
|
|
|
|
|
+ addrs.append(address[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ erpOrder.setReceiver_address(addrs.toString());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ erpOrder.setReceiver_address(address[2]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ erpOrder.setReceiver_address(erpOrder.getReceiver_address().replace("+", "加"));
|
|
|
|
|
+ erpOrder.setReceiver_address(erpOrder.getReceiver_address().replace("\n", ""));
|
|
|
|
|
+
|
|
|
|
|
+ baseMapper.updateById(order);
|
|
|
|
|
+
|
|
|
|
|
+ return erpOrder;
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ if (!erpOrders.isEmpty()) {
|
|
|
|
|
+ jstErpOrderService.batchAddRewardOrder(erpOrders);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("推送ERP订单失败,店铺ID: {}, 订单数量: {}", k, v.size(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 同步erp信息
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void syncErpData() {
|
|
|
|
|
+ List<FsRewardGoodsOrder> extendOrderSnList = baseMapper.selectPushOrders();
|
|
|
|
|
+
|
|
|
|
|
+ Map<Long, List<FsRewardGoodsOrder>> storeGroup = extendOrderSnList.stream().collect(Collectors.groupingBy(FsRewardGoodsOrder::getStoreId));
|
|
|
|
|
+ storeGroup.forEach((k, v) -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ FsStore fsStore = storeMapper.selectFsStoreByStoreId(k);
|
|
|
|
|
+ if (!extendOrderSnList.isEmpty()) {
|
|
|
|
|
+ List<List<FsRewardGoodsOrder>> batches = Lists.partition(v, 100);
|
|
|
|
|
+ for (List<FsRewardGoodsOrder> batch : batches) {
|
|
|
|
|
+ int pageIndex = 1;
|
|
|
|
|
+ boolean has_next;
|
|
|
|
|
+
|
|
|
|
|
+ List<Long> orderIds = batch.stream().map(o -> Long.parseLong(o.getExtendOrderSn())).collect(Collectors.toList());
|
|
|
|
|
+ do {
|
|
|
|
|
+ try {
|
|
|
|
|
+ Thread.sleep(300);
|
|
|
|
|
+ } catch (InterruptedException ignored) {}
|
|
|
|
|
+
|
|
|
|
|
+ ErpOrderQueryRequert request = new ErpOrderQueryRequert();
|
|
|
|
|
+ request.setPage_size(100);
|
|
|
|
|
+ request.setPage_index(pageIndex);
|
|
|
|
|
+ request.setShop_id(fsStore.getShopCode());
|
|
|
|
|
+ request.setO_ids(orderIds); // 设置当前批次
|
|
|
|
|
+
|
|
|
|
|
+ ErpOrderQueryResponse response = jstErpOrderService.getRewardOrder(request);
|
|
|
|
|
+ has_next = response.hasNextSafe();
|
|
|
|
|
+
|
|
|
|
|
+ if (response.getOrders() != null) {
|
|
|
|
|
+ for(ErpOrderQuery orderQuery : response.getOrders()){
|
|
|
|
|
+ if(orderQuery.getDeliverys()!=null&& !orderQuery.getDeliverys().isEmpty()){
|
|
|
|
|
+ for(ErpDeliverys delivery:orderQuery.getDeliverys()){
|
|
|
|
|
+ if(delivery.getDelivery()&& StringUtils.isNotEmpty(delivery.getMail_no())){
|
|
|
|
|
+ deliveryOrder(orderQuery.getCode(),delivery.getMail_no(),delivery.getExpress_code(),delivery.getExpress_name());
|
|
|
|
|
+ redisCache.deleteObject("delivery"+":"+orderQuery.getO_id());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ pageIndex++;
|
|
|
|
|
+ } while (has_next);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("同步ERP数据失败,店铺ID: {}, 订单数量: {}", k, v.size(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 发货
|
|
|
|
|
+ */
|
|
|
|
|
+ private void deliveryOrder(String orderCode, String deliveryId, String deliverCode, String deliverName) {
|
|
|
|
|
+ FsRewardGoodsOrder order = lambdaQuery().eq(FsRewardGoodsOrder::getOrderSn, orderCode).one();
|
|
|
|
|
+ if (order == null || order.getStatus() != 2) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ FsExpress express = expressService.selectFsExpressByOmsCode(deliverCode);
|
|
|
|
|
+ if (express != null) {
|
|
|
|
|
+ order.setDeliveryName(deliverName);
|
|
|
|
|
+ order.setDeliveryCode(express.getCode());
|
|
|
|
|
+ }
|
|
|
|
|
+ order.setStatus(3);
|
|
|
|
|
+ order.setDeliverySn(deliveryId);
|
|
|
|
|
+ order.setDeliveryTime(LocalDateTime.now());
|
|
|
|
|
+ baseMapper.updateById(order);
|
|
|
|
|
+
|
|
|
|
|
+ FsStore store = fsStoreMapper.selectFsStoreByStoreId(order.getStoreId());
|
|
|
|
|
+ //订阅物流回调
|
|
|
|
|
+ String lastFourNumber = "";
|
|
|
|
|
+ if (order.getDeliveryCode().equals(ShipperCodeEnum.SF.getValue())) {
|
|
|
|
|
+ if (store != null && store.getSendPhone() != null) {
|
|
|
|
|
+ lastFourNumber = store.getSendPhone();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ lastFourNumber = order.getMobile().length() > 11 ?
|
|
|
|
|
+ decryptPhone(order.getMobile()) :
|
|
|
|
|
+ order.getMobile();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (lastFourNumber.length() == 11) {
|
|
|
|
|
+ lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ expressService.subscribeEspress(order.getOrderSn(), order.getDeliveryCode(), order.getDeliverySn(), lastFourNumber);
|
|
|
|
|
+
|
|
|
|
|
+ FsStorePayment params = new FsStorePayment();
|
|
|
|
|
+ params.setBusinessCode(order.getOrderSn());
|
|
|
|
|
+ params.setBusinessType(10);
|
|
|
|
|
+ List<FsStorePayment> fsStorePayments = storePaymentService.selectFsStorePaymentList(params);
|
|
|
|
|
+ if(CollectionUtils.isNotEmpty(fsStorePayments)){
|
|
|
|
|
+ FsStorePayment fsStorePayment = fsStorePayments.get(0);
|
|
|
|
|
+ FsWxExpressTask fsWxExpressTask = new FsWxExpressTask();
|
|
|
|
|
+ fsWxExpressTask.setUserId(order.getUserId());
|
|
|
|
|
+ fsWxExpressTask.setStatus(0);
|
|
|
|
|
+ fsWxExpressTask.setRetryCount(0);
|
|
|
|
|
+ fsWxExpressTask.setCreateTime(LocalDateTime.now());
|
|
|
|
|
+ fsWxExpressTask.setUpdateTime(LocalDateTime.now());
|
|
|
|
|
+ fsWxExpressTask.setOrderCode(order.getOrderSn());
|
|
|
|
|
+ fsWxExpressTask.setExpressCompany(Objects.nonNull(express) ? express.getCode() : "");
|
|
|
|
|
+ fsWxExpressTask.setExpressNo(deliveryId);
|
|
|
|
|
+ fsWxExpressTask.setAppid(fsStorePayment.getAppId());
|
|
|
|
|
+ fsWxExpressTaskMapper.insert(fsWxExpressTask);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取订单支付信息
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<FsStorePayment> getPayInfo(String orderSn) {
|
|
|
|
|
+ FsStorePayment params = new FsStorePayment();
|
|
|
|
|
+ params.setBusinessCode(orderSn);
|
|
|
|
|
+ params.setBusinessType(10);
|
|
|
|
|
+ return storePaymentService.selectFsStorePaymentList(params);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 取消过期未支付订单
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void cancelExpireRewardOrder() {
|
|
|
|
|
+ // 查询需要取消的订单
|
|
|
|
|
+ List<FsRewardGoodsOrder> expiredOrders = lambdaQuery()
|
|
|
|
|
+ .eq(FsRewardGoodsOrder::getStatus, 1)
|
|
|
|
|
+ .le(FsRewardGoodsOrder::getExpiredTime, LocalDateTime.now())
|
|
|
|
|
+ .list();
|
|
|
|
|
+
|
|
|
|
|
+ if (CollectionUtils.isEmpty(expiredOrders)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 批量更新订单状态
|
|
|
|
|
+ List<Long> orderIds = expiredOrders.stream()
|
|
|
|
|
+ .map(FsRewardGoodsOrder::getOrderId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ lambdaUpdate()
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getStatus, -1)
|
|
|
|
|
+ .in(FsRewardGoodsOrder::getOrderId, orderIds)
|
|
|
|
|
+ .update();
|
|
|
|
|
+
|
|
|
|
|
+ // 回滚库存
|
|
|
|
|
+ for (FsRewardGoodsOrder order : expiredOrders) {
|
|
|
|
|
+ fsRewardGoodsMapper.addStock(order.getGoodsId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ log.info("取消过期奖励商品订单数量: {}, 回滚库存完成", orderIds.size());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 完成订单
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void completeOrder() {
|
|
|
|
|
+ // 自动完成发货时间超过7天且处于已发货状态的订单
|
|
|
|
|
+ LocalDateTime sevenDaysAgo = LocalDateTime.now().minusDays(7);
|
|
|
|
|
+
|
|
|
|
|
+ // 查询需要完成的订单:状态为3(已发货)且发货时间超过7天
|
|
|
|
|
+ List<FsRewardGoodsOrder> ordersToComplete = lambdaQuery()
|
|
|
|
|
+ .eq(FsRewardGoodsOrder::getStatus, 3)
|
|
|
|
|
+ .le(FsRewardGoodsOrder::getDeliveryTime, sevenDaysAgo)
|
|
|
|
|
+ .list();
|
|
|
|
|
+
|
|
|
|
|
+ if (CollectionUtils.isEmpty(ordersToComplete)) {
|
|
|
|
|
+ log.info("没有需要自动完成的订单");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 批量更新订单状态为已完成
|
|
|
|
|
+ List<Long> orderIds = ordersToComplete.stream()
|
|
|
|
|
+ .map(FsRewardGoodsOrder::getOrderId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ lambdaUpdate()
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getStatus, 4)
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getFinishTime, LocalDateTime.now())
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getUpdateTime, LocalDateTime.now())
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getUpdateBy, "系统自动完成")
|
|
|
|
|
+ .in(FsRewardGoodsOrder::getOrderId, orderIds)
|
|
|
|
|
+ .update();
|
|
|
|
|
+
|
|
|
|
|
+ log.info("自动完成奖励商品订单数量: {}", orderIds.size());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 取消订单
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public int cancelOrder(Long orderId) {
|
|
|
|
|
+ // 查询订单信息
|
|
|
|
|
+ FsRewardGoodsOrder order = baseMapper.selectById(orderId);
|
|
|
|
|
+ if (order == null) {
|
|
|
|
|
+ throw new CustomException("订单不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 订单状态:1待支付 2已支付 3已发货 4已完成 -1已取消
|
|
|
|
|
+ Integer status = order.getStatus();
|
|
|
|
|
+
|
|
|
|
|
+ // 已取消状态,直接返回成功
|
|
|
|
|
+ if (status == -1) {
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 已完成状态,提示不可取消
|
|
|
|
|
+ if (status == 4) {
|
|
|
|
|
+ throw new CustomException("订单已完成,不可取消");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 还原库存
|
|
|
|
|
+ fsRewardGoodsMapper.addStock(order.getGoodsId());
|
|
|
|
|
+
|
|
|
|
|
+ // 待支付状态,直接修改订单状态
|
|
|
|
|
+ if (status == 1) {
|
|
|
|
|
+ return lambdaUpdate()
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getStatus, -1)
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getCancelTime, LocalDateTime.now())
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getUpdateTime, LocalDateTime.now())
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getUpdateBy, "系统取消")
|
|
|
|
|
+ .eq(FsRewardGoodsOrder::getOrderId, orderId)
|
|
|
|
|
+ .update() ? 1 : 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 已支付、已发货状态,先进行聚水潭订单取消,取消成功后再修改订单状态并退款
|
|
|
|
|
+ if (status == 2 || status == 3) {
|
|
|
|
|
+ return processShippedOrderCancellation(order);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ throw new CustomException("订单状态异常,无法取消");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 处理已发货订单的取消
|
|
|
|
|
+ */
|
|
|
|
|
+ private int processShippedOrderCancellation(FsRewardGoodsOrder order) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 先取消聚水潭订单
|
|
|
|
|
+ if (StringUtils.isNotEmpty(order.getExtendOrderSn())) {
|
|
|
|
|
+ cancelJstOrder(order);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 执行退款
|
|
|
|
|
+ processRefund(order);
|
|
|
|
|
+
|
|
|
|
|
+ // 修改订单状态
|
|
|
|
|
+ return lambdaUpdate()
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getStatus, -1)
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getCancelTime, LocalDateTime.now())
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getUpdateTime, LocalDateTime.now())
|
|
|
|
|
+ .set(FsRewardGoodsOrder::getUpdateBy, "系统取消")
|
|
|
|
|
+ .eq(FsRewardGoodsOrder::getOrderId, order.getOrderId())
|
|
|
|
|
+ .update() ? 1 : 0;
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("已发货订单取消失败,订单号:{}", order.getOrderSn(), e);
|
|
|
|
|
+ throw new CustomException("订单取消失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 取消聚水潭订单
|
|
|
|
|
+ */
|
|
|
|
|
+ private void cancelJstOrder(FsRewardGoodsOrder order) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ ErpRefundUpdateRequest requestDTO = new ErpRefundUpdateRequest();
|
|
|
|
|
+ requestDTO.setTid(order.getOrderSn());
|
|
|
|
|
+ requestDTO.setOid(order.getExtendOrderSn());
|
|
|
|
|
+ BaseResponse response = jstErpOrderService.cancelRewardOrder(requestDTO);
|
|
|
|
|
+
|
|
|
|
|
+ if (response == null || !response.getSuccess()) {
|
|
|
|
|
+ throw new CustomException("聚水潭订单取消失败");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ log.info("聚水潭订单取消成功,订单号:{},外部订单号:{}", order.getOrderSn(), order.getExtendOrderSn());
|
|
|
|
|
+
|
|
|
|
|
+ } catch (CustomException e) {
|
|
|
|
|
+ throw e;
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("聚水潭订单取消失败,订单号:{}", order.getOrderSn(), e);
|
|
|
|
|
+ throw new CustomException("聚水潭订单取消失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 处理退款
|
|
|
|
|
+ */
|
|
|
|
|
+ private void processRefund(FsRewardGoodsOrder order) {
|
|
|
|
|
+ if (order.getPayMoney() == null || order.getPayMoney().compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
|
|
+ return; // 无需退款
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ String orderType = "reward";
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 查询支付记录
|
|
|
|
|
+ FsStorePayment params = new FsStorePayment();
|
|
|
|
|
+ params.setBusinessType(10);
|
|
|
|
|
+ params.setBusinessCode(order.getOrderSn());
|
|
|
|
|
+ params.setStatus(1);
|
|
|
|
|
+ List<FsStorePayment> payments = storePaymentService.selectFsStorePaymentList(params);
|
|
|
|
|
+
|
|
|
|
|
+ if (payments != null && !payments.isEmpty()) {
|
|
|
|
|
+ FsStorePayment payment = payments.get(0);
|
|
|
|
|
+ processHfRefund(payment, orderType);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new CustomException("未找到支付明细");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ log.info("退款处理成功,订单号:{},退款金额:{}", order.getOrderSn(), order.getPayMoney());
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("退款处理失败,订单号:{}", order.getOrderSn(), e);
|
|
|
|
|
+ throw new CustomException("退款处理失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 汇付支付退款
|
|
|
|
|
+ */
|
|
|
|
|
+ private void processHfRefund(FsStorePayment payment, String orderType) {
|
|
|
|
|
+ V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
|
|
|
|
|
+ request.setOrdAmt(payment.getPayMoney().toString());
|
|
|
|
|
+ request.setOrgReqDate(new SimpleDateFormat("yyyyMMdd").format(payment.getCreateTime()));
|
|
|
|
|
+ request.setReqSeqId("refund-" + payment.getPayCode());
|
|
|
|
|
+ Map<String, Object> extendInfoMap = new HashMap<>();
|
|
|
|
|
+ extendInfoMap.put("org_req_seq_id", orderType + "-" + payment.getPayCode());
|
|
|
|
|
+ request.setExtendInfo(extendInfoMap);
|
|
|
|
|
+
|
|
|
|
|
+ HuiFuRefundResult refund = huiFuService.refund(request);
|
|
|
|
|
+ log.info("订单退款返回结果: {}" + refund);
|
|
|
|
|
+ if ((refund.getResp_code().equals("00000000") || refund.getResp_code().equals("00000100")) &&
|
|
|
|
|
+ (refund.getTrans_stat().equals("S") || refund.getTrans_stat().equals("P"))) {
|
|
|
|
|
+ // 更新支付记录状态
|
|
|
|
|
+ updatePaymentRefundStatus(payment);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new CustomException("退款请求失败" + refund.getResp_desc());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 更新支付记录退款状态
|
|
|
|
|
+ */
|
|
|
|
|
+ private void updatePaymentRefundStatus(FsStorePayment payment) {
|
|
|
|
|
+ FsStorePayment paymentMap = new FsStorePayment();
|
|
|
|
|
+ paymentMap.setPaymentId(payment.getPaymentId());
|
|
|
|
|
+ paymentMap.setStatus(-1);
|
|
|
|
|
+ paymentMap.setRefundTime(DateUtils.getNowDate());
|
|
|
|
|
+ paymentMap.setRefundMoney(payment.getPayMoney());
|
|
|
|
|
+ storePaymentService.updateFsStorePayment(paymentMap);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|