瀏覽代碼

完成订单

24282 1 年之前
父節點
當前提交
bf2b62fa16

+ 9 - 0
sd-business/src/main/java/com/sd/business/controller/production/ProductionWorkOrderController.java

@@ -1,6 +1,7 @@
 package com.sd.business.controller.production;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.sd.business.entity.production.dto.ProductionWorkOrderSelectDto;
 import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
 import com.sd.business.service.production.ProductionWorkOrderService;
@@ -34,4 +35,12 @@ public class ProductionWorkOrderController {
         return productionWorkOrderService.getPage(dto);
     }
 
+    /**
+     * 完成工单
+     */
+    @PostMapping("/complete")
+    public void complete(@RequestBody BaseSelectDto dto) {
+        productionWorkOrderService.complete(dto);
+    }
+
 }

+ 1 - 47
sd-business/src/main/java/com/sd/business/listener/AddWorkOrderListener.java

@@ -2,11 +2,7 @@ package com.sd.business.listener;
 
 import com.alibaba.fastjson2.JSON;
 import com.rabbitmq.client.Channel;
-import com.sd.business.entity.order.enums.OrderStatusEnum;
-import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
-import com.sd.business.service.inventory.InventoryFinishedService;
-import com.sd.business.service.order.OrderService;
 import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.mq.config.WorkOrderConfig;
 import com.sd.mq.entity.EditWorkOrderMessage;
@@ -21,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
-import java.util.Collections;
 import java.util.Objects;
 
 /**
@@ -34,12 +29,6 @@ public class AddWorkOrderListener {
     @Autowired
     private ProductionWorkOrderService productionWorkOrderService;
 
-    @Autowired
-    private InventoryFinishedService inventoryFinishedService;
-
-    @Autowired
-    private OrderService orderService;
-
     @RabbitListener(bindings = {
             @QueueBinding(value = @Queue(WorkOrderConfig.EDIT_WORK_ORDER_QUEUE_NAME), exchange = @Exchange(WorkOrderConfig.DIRECT_EXCHANGE_NAME))
     })
@@ -86,7 +75,7 @@ public class AddWorkOrderListener {
                         productionWorkOrderService.updateById(productionWorkOrder);
 
                         // 查询订单所有工单是否完成,若完成,修改订单状态为已完成
-                        completeOrder(productionWorkOrder.getOrderId());
+                        productionWorkOrderService.completeOrder(productionWorkOrder.getOrderId());
                     }
                     break;
 
@@ -100,7 +89,6 @@ public class AddWorkOrderListener {
                     break;
             }
 
-
             channel.basicAck(deliveryTag, true);
 
         } catch (Exception e) {
@@ -110,38 +98,4 @@ public class AddWorkOrderListener {
 
     }
 
-    /**
-     * 查询订单所有工单是否完成,若完成,修改订单状态为已完成
-     */
-    private void completeOrder(Long orderId) {
-
-        // 存在待投产、已扫描、生产中、生产异常的工单,则订单位完成
-        long count = productionWorkOrderService.count(q -> q
-                .in(ProductionWorkOrder::getStatus,
-                        WorkOrderStatusEnum.TO_BE_PRODUCED.getKey(),
-                        WorkOrderStatusEnum.SCANNED.getKey(),
-                        WorkOrderStatusEnum.IN_PRODUCTION.getKey(),
-                        WorkOrderStatusEnum.PRODUCTION_ANOMALY.getKey())
-                .last("limit 1")
-        );
-
-        if (count != 0) {
-            return;
-        }
-
-        // 订单已完成或已发货跳过
-        OrderInfo orderInfo = orderService.getById(orderId);
-        if (Objects.equals(orderInfo.getStatus(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey())
-                || Objects.equals(orderInfo.getStatus(), OrderStatusEnum.HAVE_BEEN_SHIPPED.getKey())) {
-            return;
-        }
-
-        // 生产入库
-        inventoryFinishedService.productionWarehousing(Collections.singletonList(orderId));
-
-        // 更新订单状态已完成
-        orderInfo.setStatus(OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
-        orderService.updateById(orderInfo);
-    }
-
 }

+ 13 - 0
sd-business/src/main/java/com/sd/business/service/production/ProductionWorkOrderService.java

@@ -1,6 +1,7 @@
 package com.sd.business.service.production;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.core.service.BaseService;
 import com.sd.business.entity.production.dto.ProductionWorkOrderSelectDto;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
@@ -45,4 +46,16 @@ public interface ProductionWorkOrderService extends BaseService<ProductionWorkOr
      */
     void sendMq(List<ProductionWorkOrder> list);
 
+    /**
+     * 完成工单
+     */
+    void complete(BaseSelectDto dto);
+
+    /**
+     * 若完成所有工单,则完成订单
+     *
+     * @param orderId 订单id
+     */
+    void completeOrder(Long orderId);
+
 }

+ 50 - 0
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionWorkOrderServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.artwork.po.ArtworkLibrary;
@@ -18,6 +19,7 @@ import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.mapper.production.ProductionWorkOrderMapper;
 import com.sd.business.service.artwork.ArtworkLibraryService;
+import com.sd.business.service.inventory.InventoryFinishedService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.production.ProductionWorkOrderService;
@@ -58,6 +60,9 @@ public class ProductionWorkOrderServiceImpl extends ServiceImpl<ProductionWorkOr
     @Autowired
     private ArtworkLibraryService artworkLibraryService;
 
+    @Autowired
+    private InventoryFinishedService inventoryFinishedService;
+
     @Override
     public Page<ProductionWorkOrderVo> getPage(ProductionWorkOrderSelectDto dto) {
         IWrapper<ProductionWorkOrder> wrapper = getWrapper();
@@ -209,5 +214,50 @@ public class ProductionWorkOrderServiceImpl extends ServiceImpl<ProductionWorkOr
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void complete(BaseSelectDto dto) {
+        ProductionWorkOrder productionWorkOrder = getById(dto.getId());
+        productionWorkOrder.setCompleteTime(new Date());
+        productionWorkOrder.setStatus(WorkOrderStatusEnum.PRODUCTION_COMPLETION.getKey());
+        updateById(productionWorkOrder);
+
+        completeOrder(productionWorkOrder.getOrderId());
+    }
+
+    /**
+     * 查询订单所有工单是否完成,若完成,修改订单状态为已完成
+     */
+    @Override
+    public void completeOrder(Long orderId) {
+
+        // 存在待投产、已扫描、生产中、生产异常的工单,则订单位完成
+        long count = count(q -> q
+                .in(ProductionWorkOrder::getStatus,
+                        WorkOrderStatusEnum.TO_BE_PRODUCED.getKey(),
+                        WorkOrderStatusEnum.SCANNED.getKey(),
+                        WorkOrderStatusEnum.IN_PRODUCTION.getKey(),
+                        WorkOrderStatusEnum.PRODUCTION_ANOMALY.getKey())
+                .last("limit 1")
+        );
+
+        if (count != 0) {
+            return;
+        }
+
+        // 订单已完成或已发货跳过
+        OrderInfo orderInfo = orderService.getById(orderId);
+        if (Objects.equals(orderInfo.getStatus(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey())
+                || Objects.equals(orderInfo.getStatus(), OrderStatusEnum.HAVE_BEEN_SHIPPED.getKey())) {
+            return;
+        }
+
+        // 生产入库
+        inventoryFinishedService.productionWarehousing(Collections.singletonList(orderId));
+
+        // 更新订单状态已完成
+        orderInfo.setStatus(OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
+        orderService.updateById(orderInfo);
+    }
 
 }