24282 1 рік тому
батько
коміт
80baa65b12

+ 0 - 24
sd-business/src/main/java/com/sd/business/controller/order/OrderPackageBomController.java

@@ -1,24 +0,0 @@
-package com.sd.business.controller.order;
-
-import com.sd.business.service.order.OrderPackageBomService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * <p>
- * 订单sku bom 关联 前端控制器
- * </p>
- *
- * @author
- * @since 2023-12-11
- */
-@RestController
-@RequestMapping("/orderPackageBom")
-public class OrderPackageBomController {
-
-    @Autowired
-    private OrderPackageBomService orderPackageBomService;
-
-}

+ 0 - 24
sd-business/src/main/java/com/sd/business/controller/order/OrderSkuBomController.java

@@ -1,24 +0,0 @@
-package com.sd.business.controller.order;
-
-import com.sd.business.service.order.OrderSkuBomService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * <p>
- * 订单sku bom 关联 前端控制器
- * </p>
- *
- * @author
- * @since 2023-12-11
- */
-@RestController
-@RequestMapping("/orderSkuBom")
-public class OrderSkuBomController {
-
-    @Autowired
-    private OrderSkuBomService orderSkuBomService;
-
-}

+ 6 - 0
sd-business/src/main/java/com/sd/business/entity/work/po/WorkOrder.java

@@ -73,6 +73,12 @@ public class WorkOrder extends BasePo {
     private BigDecimal schedulingNum;
 
     /**
+     * 使用面积
+     */
+    @NotNull(message = "使用面积不能为空")
+    private BigDecimal usedArea;
+
+    /**
      * 利用率
      */
     @NotNull(message = "利用率不能为空")

+ 55 - 1
sd-business/src/main/java/com/sd/business/service/order/impl/OrderInfoServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.file.utils.ObsFileUtil;
@@ -51,6 +52,9 @@ import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
 import com.sd.business.entity.warehouse.constant.WarehouseConstant;
+import com.sd.business.entity.work.constant.MaterialsConstant;
+import com.sd.business.entity.work.po.WorkOrder;
+import com.sd.business.entity.work.po.WorkOrderDetail;
 import com.sd.business.mapper.order.OrderInfoMapper;
 import com.sd.business.service.bom.BomService;
 import com.sd.business.service.bom.BomSpecService;
@@ -65,6 +69,8 @@ import com.sd.business.service.price.PriceBillingStandardDetailService;
 import com.sd.business.service.price.PriceBillingStandardService;
 import com.sd.business.service.sku.SkuSpecLinkService;
 import com.sd.business.service.sku.SkuSpecService;
+import com.sd.business.service.work.WorkOrderDetailService;
+import com.sd.business.service.work.WorkOrderService;
 import com.sd.business.service.work.impl.WorkOrderServiceImpl;
 import com.sd.business.util.CodeEnum;
 import com.sd.framework.util.Assert;
@@ -144,6 +150,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
     @Autowired
     private HttpServletResponse response;
 
+    @Autowired
+    private WorkOrderService workOrderService;
+
+    @Autowired
+    private WorkOrderDetailService workOrderDetailService;
+
     @Override
     public Page<OrderInfoVo> getPage(OrderInfoSelectDto dto) {
 
@@ -364,9 +376,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
         if (Objects.equals(orderInfo.getDelFlag(), StatusConstant.NOT_DELETED)
                 && orderInfo.getStatus() > OrderStatusEnum.SCHEDULING.getKey()) {
-            throw new ServiceException("订单已生产,无法删除");
+            throw new ServiceException("订单已排单生产,无法删除");
         }
 
+        // 删除订单重新排单
+        reschedule(id);
+
         List<Long> orderSkuIdList = orderSkuService.listObject(BaseIdPo::getId, q -> q.eq(OrderSku::getOrderId, id));
 
         removeById(id);
@@ -842,4 +857,43 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         }).collect(Collectors.toList());
     }
 
+    /**
+     * 重新排单
+     */
+    private void reschedule(Long id) {
+        // 获取所有已排订单
+        List<WorkOrderDetail> list = workOrderDetailService.list(q -> q.eq(WorkOrderDetail::getOrderInfoId, id));
+        if (list.isEmpty()) {
+            return;
+        }
+
+        workOrderDetailService.remove(q -> q.eq(WorkOrderDetail::getOrderInfoId, id));
+
+        Map<Long, List<WorkOrderDetail>> map = list.stream().collect(Collectors.groupingBy(WorkOrderDetail::getWorkOrderId));
+
+        // 获取工单
+        List<WorkOrder> workOrderList = workOrderService.list(q -> q.in(BaseIdPo::getId, map.keySet()));
+        Map<Long, WorkOrder> workOrderMap = workOrderList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+
+        map.forEach((workOrderId, workOrderDetailList) -> {
+            WorkOrder workOrder = workOrderMap.get(workOrderId);
+            BigDecimal masterLength = ObjectUtil.defaultIfNull(workOrder.getMasterLength(), new BigDecimal(MaterialsConstant.MASTER_LENGTH));
+
+            BigDecimal deleteUsedArea = workOrderDetailList.stream().map(item -> item.getBleedingLength().multiply(item.getBleedingWidth())).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            Map<String, Object> maxLengthMap = workOrderDetailService.getMap(Wrappers.<WorkOrderDetail>query()
+                    .select("ifnull(max(y+length),0) maxLength")
+                    .eq("work_order_id", workOrderId));
+
+            workOrder.setSchedulingNum(workOrder.getSchedulingNum().subtract(new BigDecimal(workOrderDetailList.size())));
+            workOrder.setUsedArea(workOrder.getUsedArea().subtract(deleteUsedArea));
+            workOrder.setUseRatio(workOrder.getUsedArea().multiply(new BigDecimal(100))
+                    .divide(masterLength.multiply(new BigDecimal(MaterialsConstant.MASTER_WIDTH)), 2, RoundingMode.HALF_UP));
+            workOrder.setMaxLength((BigDecimal) maxLengthMap.get("maxLength"));
+        });
+
+        workOrderService.updateBatchById(workOrderList);
+
+    }
+
 }

+ 3 - 0
sd-business/src/main/java/com/sd/business/service/work/impl/WorkOrderServiceImpl.java

@@ -420,6 +420,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         }
 
         workOrder.setSchedulingNum(fixationStrategy.getSchedulingNum());
+        workOrder.setUsedArea(fixationStrategy.getUsedArea());
         workOrder.setUseRatio(fixationStrategy.getUseRatio());
         workOrder.setMaxLength(fixationStrategy.getMaxLength());
 
@@ -500,7 +501,9 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         workOrder.setType(2);
         workOrder.setMasterBomSpecId(bomSpecId);
         workOrder.setPrintingPaperBomSpecId(printingPaperBomSpecId);
+
         workOrder.setSchedulingNum(new BigDecimal(placeItemList.size()));
+        workOrder.setUsedArea(BigDecimal.valueOf(solve.getTotal()));
         workOrder.setUseRatio(BigDecimal.valueOf(solve.getUseRatio() * 100));
         workOrder.setMaxLength(BigDecimal.valueOf(solve.getMaxLength()));
         workOrder.setSyncProduction(StatusConstant.NO);