24282 1 anno fa
parent
commit
e1aa34a034

+ 27 - 9
sd-business/src/main/java/com/sd/business/service/work/impl/WorkOrderServiceImpl.java

@@ -21,6 +21,9 @@ import com.sd.business.service.order.OrderSkuService;
 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.fixation.FixationFactory;
+import com.sd.business.service.work.impl.fixation.FixationStrategy;
+import com.sd.business.service.work.impl.fixation.TypeSettingBo;
 import com.sd.business.util.CodeEnum;
 import com.sd.business.util.packing.GA;
 import com.sd.business.util.packing.entity.PlaceItem;
@@ -267,7 +270,12 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         // 生产工单明细
         List<WorkOrderDetail> workOrderDetailList = placeItemList.stream().map(item -> {
             OrderSku orderSku = map.get(item.getId());
-            orderSku.setSchedulingNum(orderSku.getSchedulingNum().add(BigDecimal.ONE));
+
+            BigDecimal schedulingNum = orderSku.getSchedulingNum().add(BigDecimal.ONE);
+            orderSku.setSchedulingNum(schedulingNum);
+            if (schedulingNum.compareTo(BigDecimal.ZERO) == 0) {
+                orderSku.setCompleteScheduling(StatusConstant.YES);
+            }
 
             WorkOrderDetail workOrderDetail = new WorkOrderDetail();
             workOrderDetail.setWorkOrderId(workOrder.getId());
@@ -312,6 +320,8 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             return;
         }
 
+        FixationStrategy fixationStrategy = FixationFactory.get(workOrderFixationSpecEnum);
+
         // 生产工单
         WorkOrder workOrder = new WorkOrder();
         workOrder.setId(IdWorker.getId());
@@ -320,10 +330,6 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         workOrder.setFixationSpec(workOrderFixationSpecEnum.getLength() + "*" + workOrderFixationSpecEnum.getWidth());
         workOrder.setMasterBomSpecId(bomSpecId);
         workOrder.setPrintingPaperBomSpecId(printingPaperBomSpecId);
-
-        // todo 利用率 最大长度 排单数量赋值
-        //workOrder.setSchedulingNum(new BigDecimal(schedulingNum));
-
         workOrder.setSyncProduction(StatusConstant.NO);
         workOrder.setIntegrity(StatusConstant.YES);
 
@@ -343,7 +349,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
                 orderSku.setCompleteScheduling(StatusConstant.YES);
 
                 for (int i = 0; i < itemSchedulingNum; i++) {
-                    addWorkOrderDetail(workOrder, workOrderDetailList, orderSku);
+                    addWorkOrderDetail(fixationStrategy, workOrder, workOrderDetailList, orderSku);
                 }
 
                 // 重新计算需要排版数量
@@ -353,7 +359,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
                 orderSku.setCompleteScheduling(StatusConstant.NO);
 
                 for (int i = 0; i < schedulingNum; i++) {
-                    addWorkOrderDetail(workOrder, workOrderDetailList, orderSku);
+                    addWorkOrderDetail(fixationStrategy, workOrder, workOrderDetailList, orderSku);
                 }
 
                 break;
@@ -361,6 +367,8 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
 
         }
 
+        //workOrder.setSchedulingNum();
+
         // 保存数据
         TransactionUtil.execute(() -> {
             orderSkuService.updateBatchById(list);
@@ -374,13 +382,23 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     }
 
 
-    private void addWorkOrderDetail(WorkOrder workOrder, List<WorkOrderDetail> workOrderDetailList, OrderSku orderSku) {
+    private void addWorkOrderDetail(FixationStrategy fixationStrategy, WorkOrder workOrder,
+                                    List<WorkOrderDetail> workOrderDetailList, OrderSku orderSku) {
+
+        TypeSettingBo typeSettingBo = fixationStrategy.next();
+
         WorkOrderDetail workOrderDetail = new WorkOrderDetail();
         workOrderDetail.setWorkOrderId(workOrder.getId());
         workOrderDetail.setOrderInfoId(orderSku.getOrderId());
         workOrderDetail.setOrderSkuId(orderSku.getId());
 
-        // todo 赋值 x,y轴 长 宽 出血长 出现宽
+        workOrderDetail.setLength(typeSettingBo.getLength());
+        workOrderDetail.setWidth(typeSettingBo.getWidth());
+        workOrderDetail.setBleedingLength(typeSettingBo.getBleedingLength());
+        workOrderDetail.setBleedingWidth(typeSettingBo.getBleedingWidth());
+        workOrderDetail.setRotate(typeSettingBo.getHasRotate() ? StatusConstant.YES : StatusConstant.NO);
+        workOrderDetail.setX(typeSettingBo.getX());
+        workOrderDetail.setY(typeSettingBo.getY());
 
         workOrderDetailList.add(workOrderDetail);
     }

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/work/impl/fixation/FixationFactory.java

@@ -9,7 +9,7 @@ public class FixationFactory {
     private FixationFactory() {
     }
 
-    public FixationStrategy get(WorkOrderFixationSpecEnum workOrderFixationSpecEnum) {
+    public static FixationStrategy get(WorkOrderFixationSpecEnum workOrderFixationSpecEnum) {
         switch (workOrderFixationSpecEnum) {
 
             case SPEC_30_40:

+ 31 - 9
sd-business/src/main/java/com/sd/business/service/work/impl/fixation/FixationStrategy.java

@@ -4,52 +4,74 @@ import com.sd.business.entity.work.constant.MaterialsConstant;
 import lombok.Getter;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 
 public abstract class FixationStrategy {
 
     /**
      * 卷材长度
      */
+    @Getter
     protected final BigDecimal masterLength = new BigDecimal(MaterialsConstant.MASTER_LENGTH);
 
     /**
      * 卷材宽度
      */
+    @Getter
     protected final BigDecimal masterWidth = new BigDecimal(MaterialsConstant.MASTER_WIDTH);
 
     /**
      * 卷材面积
      */
+    @Getter
     protected final BigDecimal masterArea = masterLength.multiply(masterWidth);
 
     /**
-     * 是否可以继续排版
+     * 已使用面积
      */
-    protected Boolean hasNext = true;
+    @Getter
+    protected BigDecimal usedArea = BigDecimal.ZERO;
+
+    /**
+     * 排单数量
+     */
+    @Getter
+    protected BigDecimal schedulingNum = BigDecimal.ZERO;
+
+    /**
+     * 最大长度
+     */
+    @Getter
+    protected BigDecimal maxLength = BigDecimal.ZERO;
 
     /**
      * 排版参数
      */
     @Getter
-    private TypeSettingBo typeSettingBo;
+    protected TypeSettingBo typeSettingBo;
+
+    /**
+     * 是否可以继续排版
+     */
+    protected Boolean hasNext = true;
 
     /**
-     * 获取下一个排版信息
+     * 获取下一个排版参数
      */
     public abstract TypeSettingBo next();
 
     /**
-     * 是否有下一个排版信息
+     * 是否可以继续排版
      */
-    public boolean hasNext() {
+    public final boolean hasNext() {
         return this.hasNext;
     }
 
     /**
-     * 赋值下一个排版信息
+     * 获取使用率
      */
-    protected void setTypeSettingBo(TypeSettingBo typeSettingBo) {
-        this.typeSettingBo = typeSettingBo;
+    public final BigDecimal getUseRatio() {
+        return usedArea.multiply(new BigDecimal(100)).divide(masterArea, 2, RoundingMode.HALF_UP);
     }
 
 }

+ 0 - 28
sd-business/src/main/java/com/sd/business/service/work/impl/fixation/TypeSettingBo.java

@@ -5,7 +5,6 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 
 /**
  * 排版参数
@@ -15,21 +14,6 @@ import java.math.RoundingMode;
 public class TypeSettingBo {
 
     /**
-     * 卷材面积
-     */
-    private BigDecimal masterArea;
-
-    /**
-     * 已使用面积
-     */
-    private BigDecimal usedArea;
-
-    /**
-     * 排单数量
-     */
-    private BigDecimal schedulingNum;
-
-    /**
      * x轴坐标
      */
     private BigDecimal x;
@@ -50,23 +34,11 @@ public class TypeSettingBo {
     private BigDecimal width;
 
     /**
-     * 最大长度
-     */
-    private BigDecimal maxLength;
-
-    /**
      * 是否旋转
      */
     private Boolean hasRotate;
 
     /**
-     * 获取使用率
-     */
-    public final BigDecimal getUseRatio() {
-        return usedArea.multiply(new BigDecimal(100)).divide(masterArea, 2, RoundingMode.HALF_UP);
-    }
-
-    /**
      * 获取出血长度
      */
     public final BigDecimal getBleedingLength() {

+ 34 - 50
sd-business/src/main/java/com/sd/business/service/work/impl/fixation/strategy/Fixation_30_40.java

@@ -23,7 +23,7 @@ public class Fixation_30_40 extends FixationStrategy {
     private final BigDecimal bw = this.w.add(BigDecimal.valueOf((MaterialsConstant.RESERVE)));
 
     /**
-     * 不考虑旋转出血面积
+     * 出血面积
      */
     private final BigDecimal bArea = bl.multiply(bw);
 
@@ -50,6 +50,8 @@ public class Fixation_30_40 extends FixationStrategy {
             TypeSettingBo demo = fixation3040.next();
             System.out.println(JSONObject.toJSONString(demo));
         }
+
+        System.out.println(JSONObject.toJSONString(fixation3040));
     }
 
     @Override
@@ -59,15 +61,12 @@ public class Fixation_30_40 extends FixationStrategy {
             throw new ServiceException("无法继续排版");
         }
 
-        TypeSettingBo typeSettingBo = getTypeSettingBo();
-
-        if (typeSettingBo == null) {
-            typeSettingBo = new TypeSettingBo(
-                    this.masterArea, this.bArea, BigDecimal.ONE, BigDecimal.ZERO, BigDecimal.ZERO,
-                    this.l, this.w, this.bl, false);
-
-            setTypeSettingBo(typeSettingBo);
-            return typeSettingBo;
+        if (this.typeSettingBo == null) {
+            this.maxLength = this.bl;
+            this.usedArea = this.bArea;
+            this.schedulingNum = BigDecimal.ONE;
+            setNextTypeSettingBo(BigDecimal.ZERO, BigDecimal.ZERO, false);
+            return this.typeSettingBo;
         }
 
         // 对比排第一列最大高度小还是第三列最大高度小
@@ -76,23 +75,21 @@ public class Fixation_30_40 extends FixationStrategy {
         BigDecimal tempMinY3 = this.y3.add(this.bl);
 
         // 排版个数为偶数时,排第二列或者第四列
-        if (typeSettingBo.getSchedulingNum().add(BigDecimal.ONE).intValue() % 2 == 0) {
-
+        if (schedulingNum.add(BigDecimal.ONE).intValue() % 2 == 0) {
             // 如果第一列和第二列轴不相等,则排第二列
             if (this.y1.compareTo(this.y2) != 0) {
-                setNextTypeSettingBo(typeSettingBo, this.x2, this.y2, false);
+                setNextTypeSettingBo(this.x2, this.y2, false);
                 this.y2 = this.y2.add(this.bl);
             }
             // 否则排第四列
             else {
-                setNextTypeSettingBo(typeSettingBo, this.x4, this.y4, true);
+                setNextTypeSettingBo(this.x4, this.y4, true);
                 this.y4 = this.y4.add(this.bw);
             }
-
             // 判断是否还能继续排版
-            if (tempY1.compareTo(masterLength) > 0
-                    && tempY3.compareTo(masterLength) > 0
-                    && tempMinY3.compareTo(masterLength) > 0) {
+            if (tempY1.compareTo(this.masterLength) > 0
+                    && tempY3.compareTo(this.masterLength) > 0
+                    && tempMinY3.compareTo(this.masterLength) > 0) {
                 this.hasNext = false;
             }
         }
@@ -101,62 +98,49 @@ public class Fixation_30_40 extends FixationStrategy {
         else {
             // 如果第一列后高度小于等于排第三列后高度,则排第一列
             if (tempY1.compareTo(tempY3) <= 0) {
-                BigDecimal maxLength = tempY1.compareTo(this.y3) > 0 ? tempY1 : this.y3;
-                setNextTypeSettingBo(typeSettingBo, this.x1, this.y1, maxLength, false);
+                setNextTypeSettingBo(this.x1, this.y1, false);
                 this.y1 = tempY1;
+                this.maxLength = this.y1.compareTo(this.y3) > 0 ? this.y1 : this.y3;
             }
             // 否则排第三列
             else {
                 // 如果第三列高度无法旋转排版,则表示第三列第四列合并排版非选择垫子
                 if (tempY3.compareTo(masterLength) > 0) {
-                    setNextTypeSettingBo(typeSettingBo, this.x3, this.y3, false);
+                    setNextTypeSettingBo(this.x3, this.y3, false);
                     this.y3 = tempMinY3;
                     this.hasNext = false;
                 }
                 // 旋转排版
                 else {
-                    BigDecimal maxLength = this.y1.compareTo(tempY3) > 0 ? this.y1 : tempY3;
-                    setNextTypeSettingBo(typeSettingBo, this.x3, this.y3, maxLength, true);
+                    setNextTypeSettingBo(this.x3, this.y3, true);
                     this.y3 = tempY3;
+                    this.maxLength = this.y1.compareTo(y3) > 0 ? this.y1 : this.y3;
                 }
             }
         }
-        return getTypeSettingBo();
-    }
 
-    /**
-     * 赋值下一个排版参数
-     *
-     * @param typeSettingBo 当前排版参数
-     * @param x             x轴
-     * @param y             y轴
-     * @param hasRotate     是否旋转
-     */
-    private void setNextTypeSettingBo(TypeSettingBo typeSettingBo, BigDecimal x, BigDecimal y, Boolean hasRotate) {
-        setNextTypeSettingBo(typeSettingBo, x, y, typeSettingBo.getMaxLength(), hasRotate);
+        this.usedArea = this.usedArea.add(this.bArea);
+        this.schedulingNum = this.schedulingNum.add(BigDecimal.ONE);
+
+        return this.typeSettingBo;
     }
 
+
     /**
      * 赋值下一个排版参数
      *
-     * @param typeSettingBo 当前排版参数
-     * @param x             x轴
-     * @param y             y轴
-     * @param maxLength     最大长度
-     * @param hasRotate     是否旋转
+     * @param x         x轴
+     * @param y         y轴
+     * @param hasRotate 是否旋转
      */
-    private void setNextTypeSettingBo(TypeSettingBo typeSettingBo, BigDecimal x, BigDecimal y, BigDecimal maxLength, Boolean hasRotate) {
-        TypeSettingBo nextTypeSettingBo = new TypeSettingBo(
-                this.masterArea,
-                typeSettingBo.getUsedArea().add(this.bArea),
-                typeSettingBo.getSchedulingNum().add(BigDecimal.ONE),
-                x, y,
+    private void setNextTypeSettingBo(BigDecimal x, BigDecimal y, Boolean hasRotate) {
+        this.typeSettingBo = new TypeSettingBo(
+                x,
+                y,
                 hasRotate ? this.w : this.l,
                 hasRotate ? this.l : this.w,
-                maxLength,
-                hasRotate);
-
-        setTypeSettingBo(nextTypeSettingBo);
+                hasRotate
+        );
     }
 
 }