24282 1 年之前
父节点
当前提交
f65754fc03

+ 46 - 0
sd-business/src/main/java/com/sd/business/controller/work/WorkOrderController.java

@@ -0,0 +1,46 @@
+package com.sd.business.controller.work;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.sd.business.entity.work.dto.WorkOrderSelectDto;
+import com.sd.business.entity.work.vo.WorkOrderVo;
+import com.sd.business.service.work.WorkOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 生产工单 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-01-02
+ */
+@RestController
+@RequestMapping("/workOrder")
+public class WorkOrderController {
+
+    @Autowired
+    private WorkOrderService workOrderService;
+
+    /**
+     * 生产工单分页
+     */
+    @PostMapping("/page")
+    public Page<WorkOrderVo> page(@RequestBody WorkOrderSelectDto dto) {
+        return workOrderService.getPage(dto);
+    }
+
+    /**
+     * 生产工单明细
+     */
+    @PostMapping("/detail")
+    public WorkOrderVo detail(@RequestBody BaseSelectDto dto) {
+        return workOrderService.detail(dto.getId());
+    }
+
+}

+ 16 - 0
sd-business/src/main/java/com/sd/business/entity/order/po/OrderSku.java

@@ -6,6 +6,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * <p>
@@ -130,4 +131,19 @@ public class OrderSku extends BasePo {
      */
     private String featureCode;
 
+    /**
+     * 工单id
+     */
+    private Long workOrderId;
+
+    /**
+     * 排单时间
+     */
+    private Date schedulingTime;
+
+    /**
+     * 生产批次号
+     */
+    private Integer productionBatchNumber;
+
 }

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/work/dto/WorkOrderDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.work.dto;
+
+import com.sd.business.entity.work.po.WorkOrder;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 生产工单新增编辑入参实体
+ *
+ * @author
+ * @since 2024-01-02
+ */
+@Getter
+@Setter
+public class WorkOrderDto extends WorkOrder {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/work/dto/WorkOrderSelectDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.work.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 生产工单列表查询入参实体
+ *
+ * @author
+ * @since 2024-01-02
+ */
+@Getter
+@Setter
+public class WorkOrderSelectDto extends BaseSelectDto {
+
+}

+ 66 - 0
sd-business/src/main/java/com/sd/business/entity/work/enums/WorkOrderFixationSpecEnum.java

@@ -0,0 +1,66 @@
+package com.sd.business.entity.work.enums;
+
+import com.ruoyi.common.exception.ServiceException;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.math.BigDecimal;
+
+@Getter
+@AllArgsConstructor
+public enum WorkOrderFixationSpecEnum {
+
+    SKU_SPEC(new BigDecimal("0.3"), new BigDecimal("0.4"), 354),
+    ;
+
+    /**
+     * 长
+     */
+    private final BigDecimal length;
+
+    /**
+     * 宽
+     */
+    private final BigDecimal width;
+
+    /**
+     * 最大数量
+     */
+    private final int maxNum;
+
+    /**
+     * 是否是固定排版
+     */
+    public static boolean isFixation(BigDecimal length, BigDecimal width) {
+        if (length == null) {
+            throw new ServiceException("未知长度");
+        }
+        if (width == null) {
+            throw new ServiceException("未知宽度");
+        }
+
+        for (WorkOrderFixationSpecEnum value : values()) {
+            if (value.length.compareTo(length) == 0 && value.width.compareTo(width) == 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static WorkOrderFixationSpecEnum getEnum(BigDecimal length, BigDecimal width) {
+        if (length == null) {
+            throw new ServiceException("未知长度");
+        }
+        if (width == null) {
+            throw new ServiceException("未知宽度");
+        }
+
+        for (WorkOrderFixationSpecEnum value : values()) {
+            if (value.length.compareTo(length) == 0 && value.width.compareTo(width) == 0) {
+                return value;
+            }
+        }
+        throw new ServiceException("未知固定排版规格");
+    }
+
+}

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

@@ -0,0 +1,83 @@
+package com.sd.business.entity.work.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 生产工单
+ * </p>
+ *
+ * @author
+ * @since 2024-01-02
+ */
+@Getter
+@Setter
+@TableName("work_order")
+public class WorkOrder extends BasePo {
+
+    /**
+     * 编号
+     */
+    private String code;
+
+    /**
+     * 生产批次号
+     */
+    private Integer productionBatchNumber;
+
+    /**
+     * 1固定尺寸排版 2随机排版
+     */
+    private Integer type;
+
+    /**
+     * 固定尺寸排版最多排版个数
+     */
+    private Integer fixationMaxNum;
+
+    /**
+     * 固定尺寸排版规格参数
+     */
+    private String fixationSpec;
+
+    /**
+     * 主材bom规格id
+     */
+    private Long masterBomSpecId;
+
+    /**
+     * 打印纸bom规格id
+     */
+    private Long printingPaperBomSpecId;
+
+    /**
+     * 地垫数量
+     */
+    private Integer orderSkuNum;
+
+    /**
+     * 利用率
+     */
+    private BigDecimal useRatio;
+
+    /**
+     * 最大长度
+     */
+    private BigDecimal maxLength;
+
+    /**
+     * 是否同步生产
+     */
+    private Integer syncProduction;
+
+    /**
+     * 是否铺满
+     */
+    private Integer integrity;
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/work/vo/WorkOrderVo.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.work.vo;
+
+import com.sd.business.entity.work.po.WorkOrder;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 生产工单列表查询返回值实体
+ *
+ * @author
+ * @since 2024-01-02
+ */
+@Getter
+@Setter
+public class WorkOrderVo extends WorkOrder {
+
+}

+ 16 - 0
sd-business/src/main/java/com/sd/business/mapper/work/WorkOrderMapper.java

@@ -0,0 +1,16 @@
+package com.sd.business.mapper.work;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sd.business.entity.work.po.WorkOrder;
+
+/**
+ * <p>
+ * 生产工单 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-01-02
+ */
+public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
+
+}

+ 39 - 0
sd-business/src/main/java/com/sd/business/service/work/WorkOrderService.java

@@ -0,0 +1,39 @@
+package com.sd.business.service.work;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.entity.work.dto.WorkOrderSelectDto;
+import com.sd.business.entity.work.po.WorkOrder;
+import com.sd.business.entity.work.vo.WorkOrderVo;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 生产工单 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-02
+ */
+public interface WorkOrderService extends BaseService<WorkOrder> {
+
+    /**
+     * 生产工单分页
+     */
+    Page<WorkOrderVo> getPage(WorkOrderSelectDto dto);
+
+    /**
+     * 生产工单明细
+     */
+    WorkOrderVo detail(Long id);
+
+    /**
+     * 排单
+     */
+    void scheduling(List<OrderSku> list);
+
+
+}

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

@@ -0,0 +1,133 @@
+package com.sd.business.service.work.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.exception.ServiceException;
+import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.entity.work.dto.WorkOrderSelectDto;
+import com.sd.business.entity.work.enums.WorkOrderFixationSpecEnum;
+import com.sd.business.entity.work.po.WorkOrder;
+import com.sd.business.entity.work.vo.WorkOrderVo;
+import com.sd.business.mapper.work.WorkOrderMapper;
+import com.sd.business.service.sku.SkuSpecService;
+import com.sd.business.service.work.WorkOrderService;
+import com.sd.framework.util.Assert;
+import com.sd.framework.util.sql.Sql;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 生产工单 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-02
+ */
+@Service
+public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService {
+
+    @Autowired
+    private SkuSpecService skuSpecService;
+
+    @Override
+    public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
+
+        Page<WorkOrderVo> page = Sql.create(WorkOrderVo.class)
+                .selectAll(WorkOrder.class)
+                .from(WorkOrder.class)
+                .orderByDesc(WorkOrder::getId)
+                .page(dto);
+
+        return page;
+    }
+
+    @Override
+    public WorkOrderVo detail(Long id) {
+
+        WorkOrderVo vo = Sql.create(WorkOrderVo.class)
+                .selectAll(WorkOrder.class)
+                .from(WorkOrder.class)
+                .eq(WorkOrder::getId, id)
+                .one();
+
+        Assert.notNull(vo, "未知数据");
+
+        return vo;
+    }
+
+    @Override
+    public void scheduling(List<OrderSku> list) {
+
+        if (list.isEmpty()) {
+            return;
+        }
+
+        // 固定排版订单
+        List<OrderSku> fixationList = new ArrayList<>();
+
+        // 不固定排版订单
+        List<OrderSku> notFixationList = new ArrayList<>();
+
+        List<Long> skuSpecIdList = list.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
+        Map<Long, SkuSpec> skuSpecMap = skuSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, skuSpecIdList));
+
+        for (OrderSku orderSku : list) {
+            Long skuSpecId = orderSku.getSkuSpecId();
+            SkuSpec skuSpec = skuSpecMap.get(skuSpecId);
+            boolean fixation = WorkOrderFixationSpecEnum.isFixation(skuSpec.getLength(), skuSpec.getWidth());
+
+            if (fixation) {
+                fixationList.add(orderSku);
+            } else {
+                notFixationList.add(orderSku);
+            }
+
+        }
+
+        // 固定排版
+        fixationScheduling(skuSpecMap, fixationList);
+
+    }
+
+    /**
+     * 固定排版
+     */
+    private void fixationScheduling(Map<Long, SkuSpec> skuSpecMap, List<OrderSku> list) {
+
+        if (list.isEmpty()) {
+            return;
+        }
+
+        // 根据固定排版规则区分
+        Map<WorkOrderFixationSpecEnum, List<OrderSku>> map = list.stream().collect(Collectors.groupingBy(
+                item -> {
+                    SkuSpec skuSpec = skuSpecMap.get(item.getSkuSpecId());
+                    if (skuSpec == null) {
+                        throw new ServiceException("未知Sku规格");
+                    }
+                    return WorkOrderFixationSpecEnum.getEnum(skuSpec.getLength(), skuSpec.getWidth());
+                }
+        ));
+
+        map.forEach(this::doFixationScheduling);
+
+    }
+
+    /**
+     * 固定排版
+     */
+    private void doFixationScheduling(WorkOrderFixationSpecEnum workOrderFixationSpecEnum, List<OrderSku> list) {
+
+
+    }
+
+}

+ 5 - 0
sd-business/src/main/resources/mapper/work/WorkOrderMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sd.business.mapper.work.WorkOrderMapper">
+
+</mapper>

+ 14 - 13
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -220,6 +220,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
                 || Objects.equals(orderInfo.getStatus(), OrderStatusEnum.IN_PRODUCTION.getKey())
                 || Objects.equals(orderInfo.getStatus(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey())
                 || Objects.equals(orderInfo.getStatus(), OrderStatusEnum.HAVE_BEEN_SHIPPED.getKey())) {
+
             // 万里牛状态异常:订单关闭的订单类型修改为无理由并生成对账单
             if (Objects.equals(orderInfo.getStatus(), OrderStatusEnum.IN_PRODUCTION.getKey())
                     && wlnOrder.getInteger("process_status") == 10
@@ -669,19 +670,6 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         if (!updateOrderList.isEmpty()) {
             orderInfoService.updateBatchById(updateOrderList);
         }
-        if (!saveStatementOrderList.isEmpty()) {
-            saveStatementOrderList.forEach(item -> {
-
-                // 生成对账单
-                StatementOfAccountDto statement = new StatementOfAccountDto();
-                statement.setDepartmentId(item.getDepartmentId());
-                statement.setOrderIdList(Collections.singletonList(item.getId()));
-                statementOfAccountService.add(statement);
-
-                // 生产入库
-                inventoryFinishedService.productionWarehousing(Collections.singletonList(item.getId()));
-            });
-        }
         if (!saveOrderSkuList.isEmpty()) {
             orderSkuService.saveBatch(saveOrderSkuList);
         }
@@ -694,7 +682,20 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         if (!orderPackageBomList.isEmpty()) {
             orderPackageBomService.saveBatch(orderPackageBomList);
         }
+        if (!saveStatementOrderList.isEmpty()) {
+            saveStatementOrderList.forEach(item -> {
 
+                // 生成对账单
+                StatementOfAccountDto statement = new StatementOfAccountDto();
+                statement.setDepartmentId(item.getDepartmentId());
+                statement.setOrderIdList(Collections.singletonList(item.getId()));
+                statementOfAccountService.add(statement);
+
+                // 生产入库
+                inventoryFinishedService.productionWarehousing(Collections.singletonList(item.getId()));
+
+            });
+        }
     }
 
     /**