Browse Source

新增完成订单接口

fgd 1 year ago
parent
commit
db55bfd2a7

+ 8 - 0
sd-business/src/main/java/com/sd/business/controller/production/ProductionOrderController.java

@@ -57,4 +57,12 @@ public class ProductionOrderController {
         productionOrderService.rapidPackaging(dto);
     }
 
+    /**
+     * 完成订单
+     */
+    @PostMapping("/finishOrder")
+    public void finishOrder(@RequestBody BaseSelectDto dto) {
+        productionOrderService.finishOrder(dto.getId());
+    }
+
 }

+ 6 - 0
sd-business/src/main/java/com/sd/business/service/production/ProductionOrderService.java

@@ -29,4 +29,10 @@ public interface ProductionOrderService {
      * 一键包装
      */
     void rapidPackaging(RapidPackagingDto dto);
+
+    /**
+     * 完成订单
+     * @param id
+     */
+    void finishOrder(Long id);
 }

+ 42 - 0
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionOrderServiceImpl.java

@@ -34,6 +34,7 @@ import com.sd.framework.util.Assert;
 import com.sd.mq.enums.WorkOrderStatusEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.function.Function;
@@ -162,6 +163,47 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void finishOrder(Long id) {
+        OrderInfo orderInfo = orderService.getById(id);
+        if (orderInfo == null) {
+            throw new ServiceException("未找到订单");
+        }
+        if (!orderInfo.getStatus().equals(OrderStatusEnum.IN_PRODUCTION.getKey())) {
+            throw new ServiceException("订单已被处理");
+        }
+
+        Date date = new Date();
+        orderService.update(q -> q
+                .eq(BaseIdPo::getId, id)
+                .set(OrderInfo::getStatus, OrderStatusEnum.COMPLETION_PRODUCTION.getKey())
+                .set(OrderInfo::getShippingTime, date)
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+                .set(BasePo::getUpdateTime, date));
+
+        // 订单生产完成时,一键完成生产任务
+        productionWorkOrderService.update(q -> q
+                .eq(ProductionWorkOrder::getOrderId, id)
+                .notIn(ProductionWorkOrder::getStatus, WorkOrderStatusEnum.PRODUCTION_ANOMALY.getKey(), WorkOrderStatusEnum.RESCHEDULE.getKey())
+                .set(ProductionWorkOrder::getStatus, WorkOrderStatusEnum.PRODUCTION_COMPLETION.getKey())
+                .set(ProductionWorkOrder::getCompleteTime, date)
+                .set(BasePo::getUpdateTime, date)
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId()));
+
+        // 生成对账单
+        StatementOfAccountDto statement = new StatementOfAccountDto();
+        statement.setDepartmentId(orderInfo.getDepartmentId());
+        statement.setOrderIdList(Collections.singletonList(orderInfo.getId()));
+        statementOfAccountService.add(statement);
+
+        // 生产入库
+        inventoryFinishedService.productionWarehousing(Collections.singletonList(id));
+
+        // 库存销售出库
+        inventoryFinishedService.saleOutOfWarehouse(Collections.singletonList(id));
+    }
+
     private List<ProductionOrderDetailVo.SkuSpec> getSkuSpecList(Long orderId) {
 
         // 获取订单sku规格