Browse Source

add 所有衣服入厂后,订单更新

xuhaifeng 2 months ago
parent
commit
b76db38a80

+ 0 - 1
yiqi-admin/src/main/java/com/yiqi/admin/controller/core/GoodsInfoController.java

@@ -64,7 +64,6 @@ public class GoodsInfoController extends BaseController {
     /**
      * 查询商品管理列表
      */
-    @PreAuthorize("@ss.hasPermi('goods:commonGoods:list')")
     @GetMapping("/list")
     @ApiOperation(value = "查询商品管理列表")
     public TableDataInfo list(GoodsInfoQueryVO goodsInfoQueryVO) {

+ 0 - 1
yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderClothController.java

@@ -300,7 +300,6 @@ public class OrderClothController extends BaseController {
         orderDelivery.setStoreId(orderCloth.getOrgId());
         orderDelivery.setDeliveryManId(deliveryManId);
         orderDeliveryService.save(orderDelivery);
-
         return R.ok();
     }
 

+ 2 - 0
yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderClothItemController.java

@@ -321,6 +321,8 @@ public class OrderClothItemController extends BaseController {
             orderClothItemVO.setOrderClothAdjuncts(Arrays.asList(orderClothAdjunct));
             orderClothItemVO.setFlowStatus(orderClothAdjunct.getFlowStatus());
         }
+        //判断所有衣服的状态,更新订单状态
+        orderClothService.checkAllOrderStatus(orderClothItem.getOrderId());
         orderClothItemVO.setOrgName(sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda()
                 .eq(SysOrg::getId, orderClothItemVO.getOrgId())
                 .eq(SysOrg::getSourceType, orderClothItemVO.getSourceType()), false).getName());

+ 0 - 2
yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderRechargeController.java

@@ -56,7 +56,6 @@ public class OrderRechargeController extends BaseController {
     /**
      * 查询充值订单列表
      */
-    @PreAuthorize("@ss.hasPermi('recharge:order:list')")
     @GetMapping("/list")
     @ApiOperation(value = "查询充值订单列表")
     public TableDataInfo list(OrderRechargeQueryDTO orderRechargeQueryDTO) {
@@ -83,7 +82,6 @@ public class OrderRechargeController extends BaseController {
     /**
      * 获取充值订单详细信息
      */
-    @PreAuthorize("@ss.hasPermi('recharge:order:query')")
     @GetMapping(value = "/{id}")
     @ApiOperation(value = "获取充值订单详细信息")
     public AjaxResult getInfo(@PathVariable("id") Long id) {

+ 53 - 0
yiqi-admin/src/main/java/com/yiqi/task/ClothOrderStatusChangeTask.java

@@ -0,0 +1,53 @@
+package com.yiqi.task;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.yiqi.common.core.redis.RedisUtils;
+import com.yiqi.common.utils.DateUtils;
+import com.yiqi.delay.DelayMessage;
+import com.yiqi.delay.DelayQueueCache;
+import com.yiqi.delay.impl.DelayTaskRunService;
+import com.yiqi.lock.RedisLockUtil;
+import com.yiqi.order.domain.OrderCloth;
+import com.yiqi.order.service.IOrderClothService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+
+/**
+ * @author douya
+ * @description 订单状态变更逻辑
+ * @date 2022/5/19
+ */
+@Component
+@Slf4j
+public class ClothOrderStatusChangeTask {
+
+    protected final Logger logger = LoggerFactory.getLogger(ClothOrderStatusChangeTask.class);
+
+    @Resource
+    private DelayQueueCache delayQueueCache;
+
+    @Resource
+    private RedisUtils redisUtils;
+
+    @Resource
+    private IOrderClothService orderClothService;
+
+    /**
+     * 订单状态变更逻辑,每5分钟执行一次,扫描任务,如果到期则执行任务
+     * 所有衣服 入厂 -> 变成清洗中
+     */
+    public void run() {
+        log.info("*****订单状态变更逻辑开始执行*****");
+        orderClothService.checkAllOrderStatus(null);
+    }
+}

+ 7 - 0
yiqi-common/src/main/java/com/yiqi/order/service/IOrderClothItemService.java

@@ -119,4 +119,11 @@ public interface IOrderClothItemService extends IService<OrderClothItem> {
      * @param flawStatus
      */
     void updateAllClothItemStatusByOrderId(Long clothOrderId, String flawStatus);
+
+    /**
+     * 判断所有的衣服是否已经符合订单状态
+     * @param clothOrderId
+     * @return
+     */
+    Boolean checkClothItemStatus(Long clothOrderId, String flawStatus);
 }

+ 4 - 1
yiqi-common/src/main/java/com/yiqi/order/service/IOrderClothService.java

@@ -148,5 +148,8 @@ public interface IOrderClothService extends IService<OrderCloth> {
 
     OrderClothFactoryClothQueryVO listPayFinancialStatisticsByClothOrderFactory(OrderFinancialFactoryClothQueryDTO orderFinancialFactoryClothQueryDTO);
 
-
+    /**
+     * 检测订单状态 (对所有订单进行判断)
+     */
+    void checkAllOrderStatus(Long orderClothId);
 }

+ 2 - 12
yiqi-core/src/main/java/com/yiqi/core/service/impl/ClothHangerDetailServiceImpl.java

@@ -169,18 +169,8 @@ public class ClothHangerDetailServiceImpl extends ServiceImpl<ClothHangerDetailM
         orderClothItemService.updateById(orderClothItem);
 
         // 当衣服全部上挂后 是否需要自动更新订单状态= 7 待取衣
-        long countNOHanger = orderClothItemService.count(new QueryWrapper<OrderClothItem>().lambda()
-                        .eq(OrderClothItem::getOrderNo, orderClothItem.getOrderNo())
-                        .eq(OrderClothItem::getFlowStatus, ClothOrderFlowStatus.outFactory.getCode()));
-        if (countNOHanger == 0){
-            orderClothService.update(new UpdateWrapper<OrderCloth>().lambda()
-                    .set(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_WASH.getCode())
-                    .set(OrderCloth::getUpdateById,SecurityUtils.getLoginUser().getUserId())
-                    .set(OrderCloth::getUpdateBy,SecurityUtils.getLoginUser().getUsername())
-                    .set(OrderCloth::getUpdateTime,DateUtils.getNowDate())
-                    .eq(OrderCloth::getOrderNo, orderClothItem.getOrderNo()));
-        }
-
+        //判断所有衣服的状态,更新订单状态
+        orderClothService.checkAllOrderStatus(orderClothItem.getOrderId());
         orderClothItemFlowRecordService.addRecord(orderClothItem, orderClothItem.getFlowStatus());
         return 1;
     }

+ 9 - 0
yiqi-core/src/main/java/com/yiqi/order/mapper/OrderClothItemMapper.java

@@ -115,4 +115,13 @@ public interface OrderClothItemMapper extends BaseMapper<OrderClothItem> {
      * @return
      */
     int updateAllClothItemStatusByOrderId(@Param("clothOrderId") Long clothOrderId, @Param("flawStatus") String flawStatus);
+
+    /**
+     * 检查订单 clothes item
+     *
+     * @param clothOrderId
+     * @param flawStatus
+     * @return
+     */
+    List<OrderClothItem> checkClothItemStatus(@Param("clothOrderId") Long clothOrderId, @Param("flawStatus") String flawStatus);
 }

+ 13 - 1
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderClothItemServiceImpl.java

@@ -67,7 +67,7 @@ public class OrderClothItemServiceImpl extends ServiceImpl<OrderClothItemMapper,
 
     @Override
     public OrderClothItemCountStatisticVO getUnFinishedOrderClothCountGroupByStatus(Long factoryId, Long storeId) {
-        return baseMapper.getUnFinishedOrderClothCountGroupByStatus( factoryId,  storeId);
+        return baseMapper.getUnFinishedOrderClothCountGroupByStatus(factoryId, storeId);
     }
 
     @Override
@@ -348,5 +348,17 @@ public class OrderClothItemServiceImpl extends ServiceImpl<OrderClothItemMapper,
         baseMapper.updateAllClothItemStatusByOrderId(clothOrderId, flawStatus);
     }
 
+    @Override
+    public Boolean checkClothItemStatus(Long clothOrderId, String flawStatus) {
+        Boolean result = true;
+        List<OrderClothItem> orderClothItems = baseMapper.checkClothItemStatus(clothOrderId, flawStatus);
+        for (OrderClothItem orderClothItem : orderClothItems) {
+            if (Integer.valueOf(orderClothItem.getFlowStatus()) < Integer.valueOf(flawStatus)) {
+                result = false;
+            }
+        }
+        return result;
+    }
+
 
 }

+ 53 - 0
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderClothServiceImpl.java

@@ -1313,6 +1313,59 @@ public class OrderClothServiceImpl extends ServiceImpl<OrderClothMapper, OrderCl
         return orderClothFactoryClothQueryVO;
     }
 
+    @Override
+    public void checkAllOrderStatus(Long orderClothId) {
+        LambdaQueryWrapper<OrderCloth> queryWrapper = new QueryWrapper<OrderCloth>().lambda()
+                .eq(OrderCloth::getDelFlag, DeleteStatus.OK.getCode())
+                .eq(orderClothId != null, OrderCloth::getId, orderClothId)
+                .ne(OrderCloth::getRefundStatus, OrderRefundStatus.REFUND_SUCCESS.getCode());
+        //查询一个月内的数据
+        queryWrapper.ge(BaseEntity::getCreateTime, DateUtils.addDays(new Date(), -20));
+        // 1. 查询洗衣订单
+        List<String> orderStatuss = CollUtil.newArrayList(
+                ClothOrderStatusType.WAIT_FACTORY.getCode(),
+                ClothOrderStatusType.WASHING.getCode(),
+                ClothOrderStatusType.HAS_WASH.getCode()
+        );
+        queryWrapper.in(OrderCloth::getOrderStatus, orderStatuss);
+        List<OrderCloth> orderCloths = baseMapper.selectList(queryWrapper);
+        for (OrderCloth orderCloth : orderCloths) {
+            if (orderCloth.getOrderStatus().equals(ClothOrderStatusType.WAIT_FACTORY.getCode())) {
+                //待入厂,判断所有的衣服和附件是否都已经入厂,如果都入厂,则改变状态
+                Boolean res = orderClothItemService.checkClothItemStatus(orderCloth.getId(), ClothOrderFlowStatus.inFactory.getCode());
+                if (res) {
+                    OrderCloth orderClothUpdate = new OrderCloth();
+                    orderClothUpdate.setId(orderCloth.getId());
+                    orderClothUpdate.setOrderStatus(ClothOrderStatusType.WASHING.getCode());
+                    orderClothUpdate.setUpdateTime(new Date());
+                    baseMapper.updateById(orderClothUpdate);
+                }
+            }
+            if (orderCloth.getOrderStatus().equals(ClothOrderStatusType.WASHING.getCode())) {
+                //待入厂,判断所有的衣服和附件是否都已经入厂,如果都入厂,则改变状态
+                Boolean res = orderClothItemService.checkClothItemStatus(orderCloth.getId(), ClothOrderFlowStatus.outFactory.getCode());
+                if (res) {
+                    OrderCloth orderClothUpdate = new OrderCloth();
+                    orderClothUpdate.setId(orderCloth.getId());
+                    orderClothUpdate.setOrderStatus(ClothOrderStatusType.HAS_WASH.getCode());
+                    orderClothUpdate.setUpdateTime(new Date());
+                    baseMapper.updateById(orderClothUpdate);
+                }
+            }
+            if (orderCloth.getOrderStatus().equals(ClothOrderStatusType.HAS_WASH.getCode())) {
+                //待入厂,判断所有的衣服和附件是否都已经入厂,如果都入厂,则改变状态
+                Boolean res = orderClothItemService.checkClothItemStatus(orderCloth.getId(), ClothOrderFlowStatus.hangering.getCode());
+                if (res) {
+                    OrderCloth orderClothUpdate = new OrderCloth();
+                    orderClothUpdate.setId(orderCloth.getId());
+                    orderClothUpdate.setOrderStatus(ClothOrderStatusType.WAITING_FOR_HANG.getCode());
+                    orderClothUpdate.setUpdateTime(new Date());
+                    baseMapper.updateById(orderClothUpdate);
+                }
+            }
+        }
+    }
+
     private void handleMtdDataByClothOrder(OrderFinancialQueryVO orderFinancialQueryVO) {
         List<OrderClothFinancialVO> MtdData = baseMapper.listFinancialStatisticsByClothOrderMTD(SecurityUtils.getLoginUser().getOrgId(), SecurityUtils.getLoginUser().getSourceType());
         this.buildClothData(orderFinancialQueryVO, MtdData);

+ 3 - 0
yiqi-core/src/main/resources/mapper/order/OrderClothItemMapper.xml

@@ -651,6 +651,9 @@
         -->
         order by item.id desc
     </select>
+    <select id="checkClothItemStatus" resultType="com.yiqi.order.domain.OrderClothItem">
+        select order_id, flow_status, order_no from order_cloth_item where order_id = #{orderId} and flow_status != #{flowStatus}
+    </select>
 
     <update id="updateAllClothItemStatusByOrderId">
         update order_cloth_item