Selaa lähdekoodia

fix: 物流同步定时任务

xdd 2 kuukautta sitten
vanhempi
commit
32acf88037

+ 19 - 9
fs-admin/src/main/java/com/fs/task/StoreTask.java

@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
@@ -98,36 +99,45 @@ public class StoreTask {
     @Autowired
     private IFsStoreOrderStatusService orderStatusService;
 
+    @Autowired
+    private IFsExpressService expressService;
     /**
      * 发货任务
      */
     @QuartzRunnable(name = "发货任务")
+    @Transactional
     public void deliveryOp() {
-        Set<String> orders = redisTemplate.keys(DELIVERY + ":*");
-        for (String extndOrderId : orders) {
-            String orderCode = (String) redisTemplate.opsForValue().get(extndOrderId);
+        List<FsStoreOrder> list = orderService.selectDeliverPenddingData();
+
+        for (FsStoreOrder order: list) {
+            String orderCode = order.getOrderCode();
             ErpOrderQueryRequert request = new ErpOrderQueryRequert();
-            String[] extendOrder = extndOrderId.split(":");
-            request.setCode(extendOrder[1]);
+            request.setCode(order.getExtendOrderId());
             ErpOrderQueryResponse response = erpOrderService.getOrder(request);
             if (CollectionUtils.isNotEmpty(response.getOrders())) {
                 for (ErpOrderQuery orderQuery : response.getOrders()) {
                     if (CollectionUtils.isNotEmpty(orderQuery.getDeliverys())) {
                         // 部分发货或者全部发货
                         if (ObjectUtils.equals(orderQuery.getDelivery_state(), 1) || ObjectUtils.equals(orderQuery.getDelivery_state(), 2)) {
-                            // 订单状态变更
-                            FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderCode(orderCode);
+
                             orderStatusService.create(order.getId(), OrderLogEnum.DELIVERY_GOODS.getValue(),
                                     OrderLogEnum.DELIVERY_GOODS.getDesc());
-                            //更新商订单状态 删除REDIS
-                            redisCache.deleteObject(DELIVERY + ":" + extendOrder[1]);
 
                             for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
+
+                                FsExpress express=expressService.selectFsExpressByOmsCode(delivery.getExpress_code());
+                                if(express == null){
+                                    logger.warn("当前express_code: {} 不存在!",delivery.getExpress_code());
+                                    continue;
+                                }
+
                                 if (delivery.getDelivery()) {
                                     orderService.deliveryOrder(orderCode, delivery.getMail_no(),
                                             delivery.getExpress_code(), delivery.getExpress_name());
                                 }
                             }
+
+                            logger.info("订单 {} 发货信息同步成功",order.getOrderCode());
                         }
                     }
                 }

+ 77 - 0
fs-admin/src/test/java/com/fs/store/controller/FsStorePaymentControllerTest.java

@@ -2,14 +2,19 @@ package com.fs.store.controller;
 
 import com.fs.FSAdminApplication;
 import com.fs.common.core.domain.R;
+import com.fs.huifuPay.dto.*;
 import com.fs.store.domain.FsCouponSchedule;
 import com.fs.store.domain.FsMiniprogramSubNotifyTask;
 import com.fs.store.domain.FsStorePayment;
+import com.fs.store.domain.TzConfigInfoDTO;
 import com.fs.store.enums.IcgProcessStatusEnum;
 import com.fs.store.mapper.FsMiniprogramSubNotifyTaskMapper;
 import com.fs.store.service.IFsCouponScheduleService;
 import com.fs.store.service.IFsStorePaymentService;
 import com.fs.task.MiniProgramSubTask;
+import com.fs.task.StoreTask;
+import com.fs.tzBank.TzBankService;
+import com.fs.tzBank.utils.TzConfigUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
@@ -23,6 +28,7 @@ import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.Date;
@@ -98,6 +104,77 @@ public class FsStorePaymentControllerTest {
         fsCouponScheduleService.insertFsCouponSchedule(fsCouponSchedule);
     }
 
+    @Autowired
+    private TzBankService tzBankService;
+
+    /**
+     * 手动退款
+     */
+    @Test
+    public void refund(){
+        String[] data = new String[]{
+                "1909799684457627648"
+//                "1909589366116712448",
+//                "1909522277674778624",
+//                "1909492344919425024",
+//                "1909466851759357952",
+//                "1909427177938485248",
+//                "1909400759435264000",
+//                "1909368705347747840",
+//                "1909337288844771328",
+//                "1909330401881489408"
+        };
+        TzConfigInfoDTO tzConfigInfoDTO = TzConfigUtils.getConfig();
+
+        for (String datum : data) {
+            FsStorePayment payment = fsStorePaymentService.selectFsStorePaymentByCode(datum);
+
+
+            RequestDTO<TzPayRefundDTO> requestDTO = new RequestDTO<TzPayRefundDTO>();
+            TzPayRefundDTO tzPayRefundDTO = new TzPayRefundDTO();
+            tzPayRefundDTO.setOldPayOutOrderNo(payment.getPayCode());
+            tzPayRefundDTO.setRefundOrderNo(payment.getPayCode());
+            tzPayRefundDTO.setPlatMerCstNo(tzConfigInfoDTO.getPlatMerCstNo());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+            tzPayRefundDTO.setTrxSendTime(sdf.format(new Date()));
+            tzPayRefundDTO.setRefundOrdTransAmt(payment.getPayMoney());
+            tzPayRefundDTO.setNotifyURL(tzConfigInfoDTO.getRefundNotifyUrl());
+            requestDTO.setReqBody(tzPayRefundDTO);
+            requestDTO.setReqHeader(TzReqHeaderDTO.getInstance(payment.getPayCode()));
+
+            TzReqResultDTO<TzRefundNotifyDTO> resultDTO;
+
+            try {
+
+                resultDTO = tzBankService.payRefund(requestDTO);
+                TzRefundNotifyDTO body = resultDTO.getBody();
+                String refundOrdStatus = body.getRefundOrdStatus();
+                log.info("退款支付单号:{} 返回结果:{}",datum, resultDTO);
+                if("90".equals(refundOrdStatus) || "50".equals(refundOrdStatus)) {
+                    payment.setRefundMoney(payment.getRefundMoney());
+                    payment.setStatus(-1);
+                    payment.setRefundTime(new Date());
+                    fsStorePaymentService.updateFsStorePayment(payment);
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            } finally {
+
+            }
+        }
+        // 退款将定时发放优惠券的状态设置为已退款
+//                fsCouponScheduleService.setScheduleCouponRefund(String.valueOf(payment.getOrderId()));
+
+    }
+
+    @Autowired
+    private StoreTask storeTask;
+
+    @Test
+    public void deliveryOp(){
+        storeTask.deliveryOp();
+    }
+
     @Test
     public void issueCoupon() throws Exception {
         fsCouponScheduleService.issueCoupon();

+ 9 - 9
fs-service-system/src/main/java/com/fs/store/mapper/FsExpressMapper.java

@@ -6,15 +6,15 @@ import org.apache.ibatis.annotations.Select;
 
 /**
  * 快递公司Mapper接口
- * 
+ *
  * @author fs
  * @date 2022-03-15
  */
-public interface FsExpressMapper 
+public interface FsExpressMapper
 {
     /**
      * 查询快递公司
-     * 
+     *
      * @param id 快递公司ID
      * @return 快递公司
      */
@@ -22,7 +22,7 @@ public interface FsExpressMapper
 
     /**
      * 查询快递公司列表
-     * 
+     *
      * @param fsExpress 快递公司
      * @return 快递公司集合
      */
@@ -30,7 +30,7 @@ public interface FsExpressMapper
 
     /**
      * 新增快递公司
-     * 
+     *
      * @param fsExpress 快递公司
      * @return 结果
      */
@@ -38,7 +38,7 @@ public interface FsExpressMapper
 
     /**
      * 修改快递公司
-     * 
+     *
      * @param fsExpress 快递公司
      * @return 结果
      */
@@ -46,7 +46,7 @@ public interface FsExpressMapper
 
     /**
      * 删除快递公司
-     * 
+     *
      * @param id 快递公司ID
      * @return 结果
      */
@@ -54,14 +54,14 @@ public interface FsExpressMapper
 
     /**
      * 批量删除快递公司
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
     public int deleteFsExpressByIds(Long[] ids);
     @Select("select * from fs_express where code=#{code} limit limit 1 ")
     FsExpress selectFsExpressByCode(String code);
-    @Select("select * from fs_express where oms_code=#{omsCode} ")
+    @Select("select * from fs_express where oms_code=#{omsCode} and ifnull(is_del,0)=0 limit 1")
     FsExpress selectFsExpressByOmsCode(String omsCode);
     @Select("select * from fs_express where name=#{deliveryName} limit 1 ")
     FsExpress selectFsExpressByName(String deliveryName);

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderMapper.java

@@ -1095,4 +1095,7 @@ public interface FsStoreOrderMapper
             "tui_money DESC "+
             "</script>"})
     List<FsUserShareVO> SelectUserTuiMoneyStatisticsList(@Param("maps") CompanyStatisticsParam param);
+
+    List<FsStoreOrder> selectDeliverPendingData();
+
 }

+ 6 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderService.java

@@ -285,4 +285,10 @@ public interface IFsStoreOrderService
 
     List<FsStoreOrder> selectFsOutDateOrder();
 
+    /**
+     * 获取待发货数据
+     * @return
+     */
+    List<FsStoreOrder> selectDeliverPenddingData();
+
 }

+ 5 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -1618,6 +1618,11 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         return Collections.emptyList();
     }
 
+    @Override
+    public List<FsStoreOrder> selectDeliverPenddingData() {
+        return fsStoreOrderMapper.selectDeliverPendingData();
+    }
+
     @Override
     @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
     //类型1支付回调 类型2货到付款

+ 3 - 0
fs-service-system/src/main/resources/mapper/store/FsStoreOrderMapper.xml

@@ -465,5 +465,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) t
         GROUP BY t.type
     </select>
+    <select id="selectDeliverPendingData" resultType="com.fs.store.domain.FsStoreOrder">
+        select * from fs_store_order where extend_order_id is not null and `status`=1
+    </select>
 
 </mapper>