feat: 销售订单新增的生产订单移除工艺路线与BOM,改为查询对应的部件类型
已修改4个文件
82 ■■■■■ 文件已修改
doc/君歌化工.sql 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/¾ý¸è»¯¹¤.sql
@@ -17,3 +17,15 @@
    MODIFY COLUMN `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '工序名称' AFTER `no`,
    MODIFY COLUMN `create_time` datetime NULL DEFAULT NULL COMMENT '录入时间' AFTER `dept_id`,
    MODIFY COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间' AFTER `create_time`;
ALTER TABLE `product-inventory-management-jghg`.`product_process_route_item`
    ADD COLUMN `planned_work_hours` decimal(15, 2) NULL COMMENT '计划工时' AFTER `product_order_id`,
    MODIFY COLUMN `product_route_id` bigint NULL DEFAULT 0 COMMENT '生产订单的工艺路线id' AFTER `product_order_id`;
ALTER TABLE `product-inventory-management-jghg`.`product_work_order`
    MODIFY COLUMN `product_process_route_item_id` bigint NULL DEFAULT 0 COMMENT '工艺路线项目id' AFTER `id`;
ALTER TABLE `product-inventory-management-jghg`.`product_process_route_item`
    ADD COLUMN `type`         int          NULL COMMENT '类型1-加工,2-刮板冷芯制作、3-管路组对、4-罐体连接及调试,5-测试打压,6-其他' AFTER `dept_id`,
    ADD COLUMN `planner_id`   bigint       NULL COMMENT '计划人员ID' AFTER `type`,
    ADD COLUMN `planner_name` varchar(255) NULL COMMENT '计划人员姓名' AFTER `planner_id`;
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -2480,8 +2480,7 @@
    }
    @Override
    public List<processDataProductionStatisticsDto> processDataProductionStatistics(Integer type,
                                                                                    List<Long> processIds) {
    public List<processDataProductionStatisticsDto> processDataProductionStatistics(Integer type, List<Long> processIds) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Long userId = SecurityUtils.isAdmin(loginUser.getUserId()) ? null : loginUser.getUserId();
src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@@ -48,4 +49,16 @@
    @TableField(fill = FieldFill.INSERT)
    private Long deptId;
    @ApiModelProperty("计划工时")
    private BigDecimal plannedWorkHours;
    @ApiModelProperty("部件类型")
    private Integer type;
    @ApiModelProperty("计划人员ID")
    private Long plannerId;
    @ApiModelProperty("计划人员姓名")
    private String plannerName;
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -73,6 +73,7 @@
    private ProcessRouteMapper processRouteMapper;
    private ProductProcessRouteMapper productProcessRouteMapper;
    private ProductProcessMapper productProcessMapper;
    private ProductWorkOrderMapper productWorkOrderMapper;
    private ProductionProductMainMapper productionProductMainMapper;
@@ -83,7 +84,6 @@
    private ShippingInfoServiceImpl shippingInfoService;
    private StockUtils stockUtils;
    @Autowired
@@ -276,32 +276,19 @@
        productOrder.setCompleteQuantity(BigDecimal.ZERO);//完成数量
        productOrderMapper.insert(productOrder);
        List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
                .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
                .orderByDesc(ProcessRoute::getCreateTime));
        if (processRoutes.size()>0){
            ProcessRoute processRoute = processRoutes.get(0);
            //新增生产订单工艺路线主表
        // æŸ¥è¯¢è¯¥äº§å“åž‹å·å¯¹åº”的工序
        List<ProductProcess> productProcesses = productProcessMapper.selectList(new QueryWrapper<ProductProcess>().lambda()
                .eq(ProductProcess::getProductModelId, salesLedgerProduct.getProductModelId())
                .orderByAsc(ProductProcess::getId));
        if (!CollectionUtils.isEmpty(productProcesses)) {
            ProductProcessRoute productProcessRoute = new ProductProcessRoute();
            productProcessRoute.setProductModelId(processRoute.getProductModelId());
            productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
            productProcessRoute.setProductModelId(salesLedgerProduct.getProductModelId());
            productProcessRoute.setProductOrderId(productOrder.getId());
            productProcessRoute.setBomId(processRoute.getBomId());
            productProcessRouteMapper.insert(productProcessRoute);
            //新增生产订单工艺路线子表
            List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
            // ç”Ÿæˆå½“前日期的前缀:年月日
            String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
            for (ProcessRouteItem processRouteItem : processRouteItems) {
                ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
                productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
                productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
                productProcessRouteItem.setProductOrderId(productOrder.getId());
                productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
                productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
                int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                if (insert > 0) {
                    // æŸ¥è¯¢ä»Šæ—¥å·²å­˜åœ¨çš„æœ€å¤§å·¥å•号
            // æŸ¥è¯¢ä»Šæ—¥å·²å­˜åœ¨çš„æœ€å¤§å·¥å•号,作为后续工单号的起始序号
                    ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
                    int sequenceNumber = 1; // é»˜è®¤åºå·
                    if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
@@ -315,21 +302,35 @@
                            }
                        }
                    }
            // æ–°å¢žç”Ÿäº§è®¢å•工艺路线子表 + å·¥å•
            for (int i = 0; i < productProcesses.size(); i++) {
                ProductProcess process = productProcesses.get(i);
                ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
                productProcessRouteItem.setProductModelId(salesLedgerProduct.getProductModelId());
                productProcessRouteItem.setProcessId(process.getId());
                productProcessRouteItem.setProductOrderId(productOrder.getId());
                productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
                productProcessRouteItem.setDragSort(i + 1);
                productProcessRouteItem.setIsQuality(process.getIsQuality());
                productProcessRouteItem.setPlannedWorkHours(process.getSalaryQuota());
                int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                if (insert > 0) {
                    // ç”Ÿæˆå®Œæ•´çš„工单号
                    String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
                    sequenceNumber++;
                    ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                    productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                    productWorkOrder.setProductOrderId(productOrder.getId());
                    productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
                    productWorkOrder.setWorkOrderNo(workOrderNoStr);
                    productWorkOrder.setStatus(1);
                    productWorkOrderMapper.insert(productWorkOrder);
                }
            }
            productOrder.setRouteId(processRoute.getId());
            productOrderMapper.updateById(productOrder);
        }
    }
@@ -488,6 +489,7 @@
            throw new RuntimeException("动态更新主表金额失败", e);
        }
    }
    @Override
    public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
        //获取产品最新的工艺路线