zhaoyun il y a 2 jours
Parent
commit
8a08dba623

+ 46 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/task/express/ExpressAutoCompleteTask.java

@@ -0,0 +1,46 @@
+package com.zbkj.admin.task.express;
+
+import cn.hutool.core.date.DateUtil;
+import com.zbkj.service.service.ExpressTaskService;
+import com.zbkj.service.service.SecondhandOrderTaskService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 订单自动完成Task
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Component("ExpressAutoCompleteTask")
+public class ExpressAutoCompleteTask {
+
+    //日志
+    private static final Logger logger = LoggerFactory.getLogger(ExpressAutoCompleteTask.class);
+
+    @Autowired
+    private ExpressTaskService orderTaskService;
+
+    /**
+     * 每小时同步一次数据
+     */
+    public void autoComplete() {
+        // cron : 0 0 */1 * * ?
+        logger.info("---ExpressAutoCompleteTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.date());
+        try {
+            orderTaskService.autoComplete();
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error("ExpressAutoCompleteTask.task" + " | msg : " + e.getMessage());
+        }
+    }
+
+}

+ 42 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/task/express/ExpressAutoReceiptTask.java

@@ -0,0 +1,42 @@
+package com.zbkj.admin.task.express;
+
+import cn.hutool.core.date.DateUtil;
+import com.zbkj.service.service.ExpressTaskService;
+import com.zbkj.service.service.SecondhandOrderTaskService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 系统自动确认收货Task
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Component("ExpressAutoReceiptTask")
+public class ExpressAutoReceiptTask {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ExpressAutoReceiptTask.class);
+
+    @Autowired
+    private ExpressTaskService orderTaskService;
+
+    public void autoTakeDelivery() {
+        // cron : 0 0 0 */1 * ?
+        LOGGER.info("---ExpressAutoReceiptTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.now());
+        try {
+            orderTaskService.autoTakeDelivery();
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOGGER.error("ExpressAutoReceiptTask.exception" + " | msg : " + e.getMessage());
+        }
+    }
+
+}

+ 2 - 2
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/task/secondhand/SecondHandOrderAutoReceiptTask.java

@@ -30,12 +30,12 @@ public class SecondHandOrderAutoReceiptTask {
 
     public void autoTakeDelivery() {
         // cron : 0 0 0 */1 * ?
-        LOGGER.info("---OrderAutoReceiptTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.now());
+        LOGGER.info("---SecondHandOrderAutoReceiptTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.now());
         try {
             orderTaskService.autoTakeDelivery();
         } catch (Exception e) {
             e.printStackTrace();
-            LOGGER.error("OrderAutoReceiptTask.exception" + " | msg : " + e.getMessage());
+            LOGGER.error("SecondHandOrderAutoReceiptTask.exception" + " | msg : " + e.getMessage());
         }
     }
 

+ 2 - 2
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/task/secondhand/SecondhandOrderAutoCompleteTask.java

@@ -34,12 +34,12 @@ public class SecondhandOrderAutoCompleteTask {
      */
     public void autoComplete() {
         // cron : 0 0 */1 * * ?
-        logger.info("---OrderAutoCompleteTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.date());
+        logger.info("---SecondhandOrderAutoCompleteTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.date());
         try {
             orderTaskService.autoComplete();
         } catch (Exception e) {
             e.printStackTrace();
-            logger.error("OrderAutoCompleteTask.task" + " | msg : " + e.getMessage());
+            logger.error("SecondhandOrderAutoCompleteTask.task" + " | msg : " + e.getMessage());
         }
     }
 

+ 7 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/ExpressOrderDetailService.java

@@ -14,4 +14,11 @@ public interface ExpressOrderDetailService extends IService<ExpressOrderDetail>
      */
     List<ExpressOrderDetail> getByOrderNo(String orderNo);
 
+    /**
+     * 订单收货
+     * @param orderNo 订单号
+     */
+    Boolean takeDelivery(String orderNo);
+
+
 }

+ 24 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/ExpressOrderService.java

@@ -3,6 +3,7 @@ package com.zbkj.service.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.pagehelper.PageInfo;
 import com.zbkj.common.model.express.ExpressOrder;
+import com.zbkj.common.model.secondhand.SecondHandOrder;
 import com.zbkj.common.request.OrderSearchRequest;
 import com.zbkj.common.request.OrderTabsHeaderRequest;
 import com.zbkj.common.request.express.ExpressOrderFrontListRequest;
@@ -80,4 +81,27 @@ public interface ExpressOrderService extends IService<ExpressOrder> {
      * @return
      */
     public Boolean receiving(String refundOrderNo);
+
+    List<ExpressOrder> findCanCompleteOrder(Integer autoCompleteDay);
+
+    /**
+     * 按订单号批量完成订单
+     * @param orderNoList 订单号列表
+     * @return Boolean
+     */
+    Boolean batchCompleteByOrderNo(List<String> orderNoList);
+
+    /**
+     * 订单收货
+     * @param orderNo 订单号
+     */
+    Boolean takeDelivery(String orderNo);
+
+    /**
+     * 获取待收货订单
+     * @param sendTime 发货时间
+     * @return List
+     */
+    List<ExpressOrder> findAwaitTakeDeliveryOrderList(String sendTime);
+
 }

+ 29 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/ExpressTaskService.java

@@ -0,0 +1,29 @@
+package com.zbkj.service.service;
+
+
+/**
+ * 订单任务服务 StoreOrderService 接口
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+public interface ExpressTaskService {
+    
+    /**
+     * 订单自动完成
+     */
+    void autoComplete();
+
+    /**
+     * 订单自动收货
+     */
+    void autoTakeDelivery();
+
+
+}

+ 10 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/ExpressOrderDetailServiceImpl.java

@@ -1,9 +1,11 @@
 package com.zbkj.service.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zbkj.common.model.express.ExpressOrderDetail;
+import com.zbkj.common.model.secondhand.SecondHandOrderDetail;
 import com.zbkj.service.dao.ExpressOrderDetailDao;
 import com.zbkj.service.service.ExpressOrderDetailService;
 import org.slf4j.Logger;
@@ -25,4 +27,12 @@ public class ExpressOrderDetailServiceImpl extends ServiceImpl<ExpressOrderDetai
             lqw.eq(ExpressOrderDetail::getOrderNo, orderNo);
             return dao.selectList(lqw);
     }
+
+    @Override
+    public Boolean takeDelivery(String orderNo) {
+        LambdaUpdateWrapper<ExpressOrderDetail> wrapper = Wrappers.lambdaUpdate();
+        wrapper.set(ExpressOrderDetail::getIsReceipt, true);
+        wrapper.eq(ExpressOrderDetail::getOrderNo, orderNo);
+        return update(wrapper);
+    }
 }

+ 42 - 2
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/ExpressOrderServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zbkj.service.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -18,6 +19,7 @@ import com.zbkj.common.exception.CrmebException;
 import com.zbkj.common.model.express.ExpressOrder;
 import com.zbkj.common.model.express.ExpressOrderDetail;
 import com.zbkj.common.model.order.Order;
+import com.zbkj.common.model.secondhand.SecondHandOrder;
 import com.zbkj.common.model.user.User;
 import com.zbkj.common.page.CommonPage;
 import com.zbkj.common.request.OrderSearchRequest;
@@ -276,16 +278,54 @@ public class ExpressOrderServiceImpl extends ServiceImpl<ExpressOrderDao, Expres
         if(ObjectUtil.isNull(order.getReceivingTime())) {
             order.setReceivingTime(new Date());
         }
-        order.setStatus(5);//完成
+        order.setStatus(OrderConstants.ORDER_STATUS_TAKE_DELIVERY);//已收件
         Boolean execute = transactionTemplate.execute(i -> {
             updateById(order);
-            riderOrderService.addBalance(orderNo);
+//            riderOrderService.addBalance(orderNo);
             return Boolean.TRUE;
         });
         if (!execute) throw new CrmebException("确认收件失败!");
         return execute;
     }
 
+    @Override
+    public List<ExpressOrder> findCanCompleteOrder(Integer autoCompleteDay) {
+        DateTime autoCompleteDate = DateUtil.offsetDay(DateUtil.date(), -autoCompleteDay);
+        LambdaQueryWrapper<ExpressOrder> lqw = Wrappers.lambdaQuery();
+        lqw.select(ExpressOrder::getId, ExpressOrder::getUid, ExpressOrder::getOrderNo);
+        lqw.eq(ExpressOrder::getStatus, OrderConstants.ORDER_STATUS_TAKE_DELIVERY);
+        lqw.le(ExpressOrder::getReceivingTime, autoCompleteDate);
+        return dao.selectList(lqw);
+    }
+
+    @Override
+    public Boolean batchCompleteByOrderNo(List<String> orderNoList) {
+        LambdaUpdateWrapper<ExpressOrder> wrapper = Wrappers.lambdaUpdate();
+        wrapper.set(ExpressOrder::getStatus, OrderConstants.ORDER_STATUS_COMPLETE);
+        wrapper.in(ExpressOrder::getOrderNo, orderNoList);
+        return update(wrapper);
+    }
+
+    @Override
+    public Boolean takeDelivery(String orderNo) {
+        ExpressOrder order =getByOrderNo(orderNo);
+        LambdaUpdateWrapper<ExpressOrder> wrapper = Wrappers.lambdaUpdate();
+        wrapper.set(ExpressOrder::getStatus, OrderConstants.ORDER_STATUS_TAKE_DELIVERY);
+        wrapper.set(ExpressOrder::getReceivingTime, DateUtil.date());
+        wrapper.eq(ExpressOrder::getOrderNo, orderNo);
+        wrapper.eq(ExpressOrder::getStatus, OrderConstants.ORDER_STATUS_WAIT_RECEIPT);
+        return update(wrapper);
+    }
+
+    @Override
+    public List<ExpressOrder> findAwaitTakeDeliveryOrderList(String sendTime) {
+        LambdaQueryWrapper<ExpressOrder> lqw = Wrappers.lambdaQuery();
+        lqw.eq(ExpressOrder::getStatus, OrderConstants.ORDER_STATUS_WAIT_RECEIPT);
+        lqw.le(ExpressOrder::getUpdateTime, sendTime);
+        lqw.eq(ExpressOrder::getIsDel, false);
+        return dao.selectList(lqw);
+    }
+
     /**
      * 获取订单总数(平台端)
      *

+ 117 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/ExpressTaskServiceImpl.java

@@ -0,0 +1,117 @@
+package com.zbkj.service.service.impl;
+
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.zbkj.common.constants.OrderStatusConstants;
+import com.zbkj.common.constants.SysConfigConstants;
+import com.zbkj.common.model.express.ExpressOrder;
+import com.zbkj.common.model.secondhand.SecondHandOrder;
+import com.zbkj.service.service.*;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * StoreOrderServiceImpl 接口实现
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Service
+public class ExpressTaskServiceImpl implements ExpressTaskService {
+    //日志
+    private static final Logger logger = LoggerFactory.getLogger(ExpressTaskServiceImpl.class);
+
+
+    @Autowired
+    private OrderStatusService orderStatusService;
+
+    @Autowired
+    private TransactionTemplate transactionTemplate;
+    @Autowired
+    private SystemConfigService systemConfigService;
+    @Autowired
+    private ExpressOrderDetailService orderDetailService;
+    @Autowired
+    private RiderOrderService riderOrderService;
+    @Autowired
+    private ExpressOrderService expressOrderService;
+
+    @Override
+    public void autoComplete() {
+        Integer autoCompleteDay = Integer.parseInt(systemConfigService.getValueByKey(SysConfigConstants.CONFIG_ORDER_AUTO_COMPLETE_DAY));
+        List<ExpressOrder> orderList = expressOrderService.findCanCompleteOrder(autoCompleteDay);
+        if (CollUtil.isEmpty(orderList)) {
+            logger.info("OrderTaskServiceImpl.autoComplete | size:0");
+            return;
+        }
+        List<String> orderNoList = orderList.stream().map(ExpressOrder::getOrderNo).collect(Collectors.toList());
+        Boolean execute = transactionTemplate.execute(e -> {
+            expressOrderService.batchCompleteByOrderNo(orderNoList);
+            orderNoList.forEach(orderNo -> {
+                orderStatusService.createLog(orderNo, OrderStatusConstants.ORDER_STATUS_COMPLETE, "订单已完成");
+            });
+            return Boolean.TRUE;
+        });
+        if (!execute) {
+            logger.error("取件订单自动完成:更新数据库失败,orderNoList = {}", JSON.toJSONString(orderNoList));
+        }else {
+            //后续操作放入redis
+            orderNoList.forEach(orderNo -> {
+                riderOrderService.addBalance(orderNo);
+            });
+        }
+    }
+
+    @Override
+    public void autoTakeDelivery() {
+        int day = 2;
+        String autoDay = systemConfigService.getValueByKey(SysConfigConstants.CONFIG_ORDER_AUTO_TAKE_DELIVERY_DAY);
+        if (StrUtil.isNotBlank(autoDay) && Integer.parseInt(autoDay) >= 1) {
+            day = Integer.parseInt(autoDay);
+        }
+        DateTime nowDate = DateUtil.date();
+        DateTime dateTime = DateUtil.offsetDay(nowDate, -day);
+        List<ExpressOrder> orderList = expressOrderService.findAwaitTakeDeliveryOrderList(dateTime.toString());
+        if (CollUtil.isEmpty(orderList)) {
+            return;
+        }
+        orderList = orderList.stream().filter(order -> !order.getType().equals(1)).collect(Collectors.toList());
+        if (CollUtil.isEmpty(orderList)) {
+            return;
+        }
+        List<String> orderNoList = orderList.stream().map(ExpressOrder::getOrderNo).collect(Collectors.toList());
+        Boolean execute = transactionTemplate.execute(e -> {
+            orderNoList.forEach(orderNo -> {
+                expressOrderService.takeDelivery(orderNo);
+                orderDetailService.takeDelivery(orderNo);
+                orderStatusService.createLog(orderNo, OrderStatusConstants.ORDER_STATUS_USER_TAKE_DELIVERY, OrderStatusConstants.ORDER_LOG_SYSTEM_AUTO_RECEIPT);
+            });
+            return Boolean.TRUE;
+        });
+        if (!execute) {
+            logger.error("快递自动收件操作数据数失败:订单号:{}", StringUtils.join(orderNoList, ","));
+            return;
+        }
+        //后续操作放入redis
+        orderNoList.forEach(orderNo -> {
+           // redisUtil.lPush(TaskConstants.ORDER_TASK_REDIS_KEY_AFTER_TAKE_BY_USER, orderNo);
+        });
+    }
+}

+ 2 - 2
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/RiderOrderServiceImpl.java

@@ -268,9 +268,9 @@ public class RiderOrderServiceImpl extends ServiceImpl<RiderOrderDao, RiderOrder
                 merchantOrder.setDeliveryType(OrderConstants.ORDER_DELIVERY_TYPE_TAKEOUT);
                 merchantOrderService.updateById(merchantOrder);
                 //订单记录增加
-                orderStatusService.createLog(orderNo, OrderStatusConstants.ORDER_STATUS_COMPLETE, OrderStatusConstants.ORDER_LOG_USER_RECEIPT);
+                orderStatusService.createLog(orderNo, OrderStatusConstants.ORDER_STATUS_USER_TAKE_DELIVERY, OrderStatusConstants.ORDER_LOG_USER_RECEIPT);
             }else if(riderOrder.getOrderType().equals(1)){
-                updateExpressOrder(orderNo,4);//客户已收件,待确认
+                updateExpressOrder(orderNo,OrderConstants.ORDER_STATUS_WAIT_RECEIPT);//客户待收件,待确认
             }
 
             return Boolean.TRUE;

+ 4 - 4
ydd_mer_java/crmeb-service/src/main/resources/mapper/express/ExpressOrderMapper.xml

@@ -16,16 +16,16 @@
                 and o.paid = 0 and o.status = 0 and o.cancel_status = 0 and o.is_user_del = 0
             </when>
             <when test='status == "notShipped"'>
-                and o.status  = 1 and o.cancel_status = 0  and o.is_user_del = 0
+                and o.status  in (1,2) and o.cancel_status = 0  and o.is_user_del = 0
             </when>
             <when test='status == "spike"'>
-                and o.status in (2,3) and o.cancel_status = 0 and o.is_user_del = 0
+                and o.status in (3,4) and o.cancel_status = 0 and o.is_user_del = 0
             </when>
             <when test='status == "receiving"'>
-                and o.status = 4 and o.cancel_status = 0   and o.is_user_del = 0
+                and o.status = 5 and o.cancel_status = 0   and o.is_user_del = 0
             </when>
             <when test='status == "complete"'>
-                and o.status = 5
+                and o.status = 6
             </when>
             <when test='status == "refunded"'>
                 and o.paid = 1 and o.cancel_status = 0  and o.is_user_del = 0