Kaynağa Gözat

生产工单

24282 1 yıl önce
ebeveyn
işleme
82c5c4d722
25 değiştirilmiş dosya ile 339 ekleme ve 652 silme
  1. 0 37
      sd-business/src/main/java/com/sd/business/controller/production/ProductionTaskController.java
  2. 0 17
      sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionTaskDto.java
  3. 0 17
      sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionTaskSelectDto.java
  4. 0 69
      sd-business/src/main/java/com/sd/business/entity/production/po/ProductionTask.java
  5. 16 1
      sd-business/src/main/java/com/sd/business/entity/production/po/ProductionWorkOrder.java
  6. 5 2
      sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionOrderScheduleVo.java
  7. 0 75
      sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionTaskVo.java
  8. 4 3
      sd-business/src/main/java/com/sd/business/flow/OrderFlow.java
  9. 0 26
      sd-business/src/main/java/com/sd/business/mapper/production/ProductionTaskMapper.java
  10. 8 0
      sd-business/src/main/java/com/sd/business/mapper/production/ProductionWorkOrderMapper.java
  11. 2 8
      sd-business/src/main/java/com/sd/business/service/board/impl/DailyBoardServiceImpl.java
  12. 10 10
      sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java
  13. 0 45
      sd-business/src/main/java/com/sd/business/service/production/ProductionTaskService.java
  14. 16 0
      sd-business/src/main/java/com/sd/business/service/production/ProductionWorkOrderService.java
  15. 28 49
      sd-business/src/main/java/com/sd/business/service/production/impl/ProductionOrderServiceImpl.java
  16. 0 167
      sd-business/src/main/java/com/sd/business/service/production/impl/ProductionTaskServiceImpl.java
  17. 71 2
      sd-business/src/main/java/com/sd/business/service/production/impl/ProductionWorkOrderServiceImpl.java
  18. 46 61
      sd-business/src/main/java/com/sd/business/service/production/impl/StockPreparationServiceImpl.java
  19. 0 32
      sd-business/src/main/resources/mapper/production/ProductionTaskMapper.xml
  20. 22 6
      sd-business/src/main/resources/mapper/production/ProductionWorkOrderMapper.xml
  21. 1 0
      sd-business/src/main/resources/mapper/production/StockPreparationMapper.xml
  22. 42 0
      sd-mq/src/main/java/com/sd/mq/entity/WorkOrderDetail.java
  23. 17 0
      sd-mq/src/main/java/com/sd/mq/entity/WorkOrderMessage.java
  24. 21 0
      sd-mq/src/main/java/com/sd/mq/enums/WorkOrderStatusEnum.java
  25. 30 25
      sd-wln/src/main/java/com/sd/wln/service/impl/WlnStatementOfAccountImpl.java

+ 0 - 37
sd-business/src/main/java/com/sd/business/controller/production/ProductionTaskController.java

@@ -1,37 +0,0 @@
-package com.sd.business.controller.production;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sd.business.entity.production.dto.ProductionTaskSelectDto;
-import com.sd.business.entity.production.vo.ProductionTaskVo;
-import com.sd.business.service.production.ProductionTaskService;
-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 2023-07-19
- */
-@RestController
-@RequestMapping("/productionTask")
-public class ProductionTaskController {
-
-    @Autowired
-    private ProductionTaskService productionTaskService;
-
-    /**
-     * 生产任务分页
-     */
-    @PostMapping("/page")
-    public Page<ProductionTaskVo> page(@RequestBody ProductionTaskSelectDto dto) {
-        return productionTaskService.getPage(dto);
-    }
-
-}

+ 0 - 17
sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionTaskDto.java

@@ -1,17 +0,0 @@
-package com.sd.business.entity.production.dto;
-
-import com.sd.business.entity.production.po.ProductionTask;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 生产任务新增编辑入参实体
- *
- * @author
- * @since 2023-07-19
- */
-@Getter
-@Setter
-public class ProductionTaskDto extends ProductionTask {
-
-}

+ 0 - 17
sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionTaskSelectDto.java

@@ -1,17 +0,0 @@
-package com.sd.business.entity.production.dto;
-
-import com.ruoyi.common.core.domain.BaseSelectDto;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 生产任务列表查询入参实体
- *
- * @author
- * @since 2023-07-19
- */
-@Getter
-@Setter
-public class ProductionTaskSelectDto extends BaseSelectDto {
-
-}

+ 0 - 69
sd-business/src/main/java/com/sd/business/entity/production/po/ProductionTask.java

@@ -1,69 +0,0 @@
-package com.sd.business.entity.production.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.ruoyi.common.core.domain.BasePo;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * <p>
- * 生产任务
- * </p>
- *
- * @author
- * @since 2023-07-19
- */
-@Getter
-@Setter
-@TableName("production_task")
-public class ProductionTask extends BasePo {
-
-    /**
-     * 订单id
-     */
-    private Long orderId;
-
-    /**
-     * sku规格id
-     */
-    private Long skuSpecId;
-
-    /**
-     * bom规格id
-     */
-    private Long bomSpecId;
-
-    /**
-     * 工艺产线id
-     */
-    private Long craftProductionLineId;
-
-    /**
-     * 加工面板 字典:charge_item
-     */
-    private String machinedPanel;
-
-    /**
-     * 打印 1单面 2 双面
-     */
-    private Integer printType;
-
-    /**
-     * 生产数量
-     */
-    private BigDecimal productionQuantity;
-
-    /**
-     * 完成数量
-     */
-    private BigDecimal completeQuantity;
-
-    /**
-     * 完成时间
-     */
-    private Date completeTime;
-
-}

+ 16 - 1
sd-business/src/main/java/com/sd/business/entity/production/po/ProductionWorkOrder.java

@@ -41,7 +41,22 @@ public class ProductionWorkOrder extends BasePo {
     private Long skuSpecId;
 
     /**
-     * 状态 0待生产 1已扫描 2生产中 3生产完成 4生产异常
+     * bom规格id
+     */
+    private Long bomSpecId;
+
+    /**
+     * 打印 1单面 2 双面
+     */
+    private Integer printType;
+
+    /**
+     * 加工面板 字典:charge_item
+     */
+    private String machinedPanel;
+
+    /**
+     * 状态 0待投产 1已扫描 2生产中 3生产完成 4生产异常 5重新排单
      */
     private Integer status;
 

+ 5 - 2
sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionOrderScheduleVo.java

@@ -1,6 +1,5 @@
 package com.sd.business.entity.production.vo;
 
-import lombok.Builder;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -8,7 +7,6 @@ import java.math.BigDecimal;
 
 @Getter
 @Setter
-@Builder
 public class ProductionOrderScheduleVo {
 
     /**
@@ -17,6 +15,11 @@ public class ProductionOrderScheduleVo {
     private Long orderId;
 
     /**
+     * 订单明细id
+     */
+    private Long orderSkuId;
+
+    /**
      * sku id
      */
     private Long skuId;

+ 0 - 75
sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionTaskVo.java

@@ -1,75 +0,0 @@
-package com.sd.business.entity.production.vo;
-
-import com.sd.business.entity.production.po.ProductionTask;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.Date;
-
-/**
- * 生产任务列表查询返回值实体
- *
- * @author
- * @since 2023-07-19
- */
-@Getter
-@Setter
-public class ProductionTaskVo extends ProductionTask {
-
-    /**
-     * 设计图
-     */
-    private String blueprint;
-
-    /**
-     * bom图
-     */
-    private String mainImgUrl;
-
-    /**
-     * 订单号
-     */
-    private String orderCode;
-
-    /**
-     * 万里牛单号
-     */
-    private String orderWlnCode;
-
-    /**
-     * sku品号
-     */
-    private String skuSpecCode;
-
-    /**
-     * sku品名
-     */
-    private String skuSpecName;
-
-    /**
-     * bom品号
-     */
-    private String bomSpecCode;
-
-    /**
-     * bom品号
-     */
-    private String bomSpecName;
-
-    /**
-     * 下单时间
-     */
-    private Date wlnCreateTime;
-
-    /**
-     * 交期
-     */
-    private Date deliveryTime;
-
-    /**
-     * 工艺路线
-     */
-    private String craftProductionLine;
-
-
-}

+ 4 - 3
sd-business/src/main/java/com/sd/business/flow/OrderFlow.java

@@ -13,7 +13,7 @@ import com.sd.business.entity.order.po.OrderFlowExample;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.service.order.OrderFlowExampleService;
 import com.sd.business.service.order.OrderService;
-import com.sd.business.service.production.ProductionTaskService;
+import com.sd.business.service.production.ProductionWorkOrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -32,7 +32,7 @@ public class OrderFlow extends FlowDelegate {
     private OrderFlowExampleService orderFlowExampleService;
 
     @Autowired
-    private ProductionTaskService productionTaskService;
+    private ProductionWorkOrderService productionWorkOrderService;
 
     @Override
     public String getFlowKey() {
@@ -76,9 +76,10 @@ public class OrderFlow extends FlowDelegate {
                 .set(BasePo::getUpdateTime, new Date())
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
         );
+
         if (!isExist) {
             // 生成生产任务和工单
-            productionTaskService.addTaskAndWorkOrder(businessId);
+            productionWorkOrderService.add(businessId);
         }
 
         orderFlowExampleService.update(q -> q.eq(OrderFlowExample::getOrderId, businessId)

+ 0 - 26
sd-business/src/main/java/com/sd/business/mapper/production/ProductionTaskMapper.java

@@ -1,26 +0,0 @@
-package com.sd.business.mapper.production;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.sd.business.entity.production.po.ProductionTask;
-import com.sd.business.entity.production.vo.ProductionTaskVo;
-import org.apache.ibatis.annotations.Param;
-
-
-/**
- * <p>
- * 生产任务 Mapper 接口
- * </p>
- *
- * @author
- * @since 2023-07-19
- */
-public interface ProductionTaskMapper extends BaseMapper<ProductionTask> {
-
-    /**
-     * 生产任务分页
-     */
-    Page<ProductionTaskVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductionTask> wrapper);
-
-}

+ 8 - 0
sd-business/src/main/java/com/sd/business/mapper/production/ProductionWorkOrderMapper.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
+import com.sd.business.entity.production.vo.ProductionOrderScheduleVo;
 import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -23,4 +26,9 @@ public interface ProductionWorkOrderMapper extends BaseMapper<ProductionWorkOrde
      */
     Page<ProductionWorkOrderVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductionWorkOrder> wrapper);
 
+    /**
+     * 生产进度
+     */
+    List<ProductionOrderScheduleVo> getProductionOrderScheduleList(@Param("ew") IWrapper<Object> wrapper);
+
 }

+ 2 - 8
sd-business/src/main/java/com/sd/business/service/board/impl/DailyBoardServiceImpl.java

@@ -18,12 +18,10 @@ import com.sd.business.entity.in.po.InOutStorageBom;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderSku;
 import com.sd.business.entity.outbound.po.OutboundOrder;
-import com.sd.business.entity.production.po.ProductionTask;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.statement.po.StatementOfAccount;
 import com.sd.business.service.board.DailyBoardService;
-import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.department.DepartmentService;
 import com.sd.business.service.in.InOutStorageBomService;
 import com.sd.business.service.in.InOutStorageService;
@@ -46,6 +44,7 @@ import static java.util.Comparator.comparing;
 
 @Service
 public class DailyBoardServiceImpl implements DailyBoardService {
+
     @Autowired
     private InOutStorageService inOutStorageService;
 
@@ -68,15 +67,11 @@ public class DailyBoardServiceImpl implements DailyBoardService {
     private OrderSkuService orderSkuService;
 
     @Autowired
-    private BomSpecService bomSpecService;
-
-    @Autowired
     private DepartmentService departmentService;
 
     @Autowired
     private StatementOfAccountService statementOfAccountService;
 
-
     @Override
     public List<DailyBoardOutStorageBomVo> getProductionOutStorageList(DailyBoardSelectDto dto) {
         Date beginDate = DateUtil.beginOfDay(dto.getBeginDate());
@@ -224,8 +219,7 @@ public class DailyBoardServiceImpl implements DailyBoardService {
             }
         }
         // 筛选出有差异的bom数据
-        List<OrderBomDifferenceVo> differenceVoList = differenceMap.values().stream().filter(item -> !item.getOrderWlnCodes().isEmpty()).collect(Collectors.toList());
-        return differenceVoList;
+        return differenceMap.values().stream().filter(item -> !item.getOrderWlnCodes().isEmpty()).collect(Collectors.toList());
     }
 
     @Override

+ 10 - 10
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -52,7 +52,7 @@ import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.order.*;
 import com.sd.business.service.price.PriceBillingStandardDetailService;
 import com.sd.business.service.price.PriceBillingStandardService;
-import com.sd.business.service.production.ProductionTaskService;
+import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.business.util.CodeEnum;
@@ -122,9 +122,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     private ISysUserService sysUserService;
 
     @Autowired
-    private ProductionTaskService productionTaskService;
-
-    @Autowired
     private ISysRoleService roleService;
 
     @Autowired
@@ -133,6 +130,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     @Autowired
     private InventoryFinishedService inventoryFinishedService;
 
+    @Autowired
+    private ProductionWorkOrderService productionWorkOrderService;
+
     @Override
     public Page<OrderInfoVo> getPage(OrderSelectDto dto) {
         IWrapper<OrderInfo> wrapper = getWrapper();
@@ -356,8 +356,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 && ObjectUtil.equals(orderDto.getType(), 2)
                 && ObjectUtil.isEmpty(orderSkuBomList)) {
             orderDto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
-            // 生成生产任务和工单
-            productionTaskService.addTaskAndWorkOrder(orderDto.getId());
+            // 生成工单
+            productionWorkOrderService.add(orderDto.getId());
             this.update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, orderDto.getId()));
         }
 
@@ -461,8 +461,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 && ObjectUtil.equals(dto.getType(), 2)
                 && ObjectUtil.isEmpty(orderSkuBomList)) {
             dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
-            // 生成生产任务和工单
-            productionTaskService.addTaskAndWorkOrder(dto.getId());
+            // 生成工单
+            productionWorkOrderService.add(dto.getId());
             this.update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
         }
 
@@ -580,8 +580,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 && ObjectUtil.equals(dto.getType(), 2)
                 && ObjectUtil.isEmpty(orderSkuBomList)) {
             dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
-            // 生成生产任务和工单
-            productionTaskService.addTaskAndWorkOrder(dto.getId());
+            // 生成工单
+            productionWorkOrderService.add(dto.getId());
             this.update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
         }
 

+ 0 - 45
sd-business/src/main/java/com/sd/business/service/production/ProductionTaskService.java

@@ -1,45 +0,0 @@
-package com.sd.business.service.production;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.service.BaseService;
-import com.sd.business.entity.production.dto.ProductionTaskDto;
-import com.sd.business.entity.production.dto.ProductionTaskSelectDto;
-import com.sd.business.entity.production.po.ProductionTask;
-import com.sd.business.entity.production.vo.ProductionTaskVo;
-
-import java.util.Date;
-import java.util.List;
-
-
-/**
- * <p>
- * 生产任务 服务类
- * </p>
- *
- * @author
- * @since 2023-07-19
- */
-public interface ProductionTaskService extends BaseService<ProductionTask> {
-
-    /**
-     * 生产任务分页
-     */
-    Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto);
-
-
-    /**
-     * 根据订单生成生产任务和工单
-     * @param orderId
-     */
-    void addTaskAndWorkOrder(Long orderId);
-
-    /**
-     * 完成生产任务
-     */
-    void completeTask(Long orderId, Date completeTime);
-
-    /**
-     * 批量完成生产任务
-     */
-    void completeTaskBatch(List<ProductionTaskDto> productionTaskDtoList);
-}

+ 16 - 0
sd-business/src/main/java/com/sd/business/service/production/ProductionWorkOrderService.java

@@ -4,8 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
 import com.sd.business.entity.production.dto.ProductionWorkOrderSelectDto;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
+import com.sd.business.entity.production.vo.ProductionOrderScheduleVo;
 import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
 
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * <p>
@@ -22,4 +26,16 @@ public interface ProductionWorkOrderService extends BaseService<ProductionWorkOr
      */
     Page<ProductionWorkOrderVo> getPage(ProductionWorkOrderSelectDto dto);
 
+    /**
+     * 获取生产进度
+     */
+    Map<Long, List<ProductionOrderScheduleVo>> getProductionOrderScheduleMap(List<Long> orderIdList);
+
+    /**
+     * 添加工单
+     *
+     * @param orderId 订单id
+     */
+    void add(Long orderId);
+
 }

+ 28 - 49
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionOrderServiceImpl.java

@@ -23,9 +23,12 @@ import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderPackageBom;
 import com.sd.business.entity.order.po.OrderSku;
-import com.sd.business.entity.production.dto.*;
 import com.sd.business.entity.order.po.OrderSkuProductionCost;
-import com.sd.business.entity.production.po.ProductionTask;
+import com.sd.business.entity.production.dto.ProductionExceedReceiveDto;
+import com.sd.business.entity.production.dto.ProductionOrderDto;
+import com.sd.business.entity.production.dto.RapidPackagingDto;
+import com.sd.business.entity.production.dto.SetTagDto;
+import com.sd.business.entity.production.po.ProductionWorkOrder;
 import com.sd.business.entity.production.vo.ProductionOrderDetailVo;
 import com.sd.business.entity.production.vo.ProductionOrderScheduleVo;
 import com.sd.business.entity.production.vo.ProductionOrderVo;
@@ -38,14 +41,14 @@ import com.sd.business.service.inventory.InventoryFinishedService;
 import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.order.OrderPackageBomService;
 import com.sd.business.service.order.OrderService;
-import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.order.OrderSkuProductionCostService;
+import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.production.ProductionOrderService;
-import com.sd.business.service.production.ProductionTaskService;
-import com.sd.business.service.sku.SkuService;
+import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.statement.StatementOfAccountService;
 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;
@@ -62,15 +65,9 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
     private ProductionOrderMapper productionOrderMapper;
 
     @Autowired
-    private ProductionTaskService productionTaskService;
-
-    @Autowired
     private SkuSpecService skuSpecService;
 
     @Autowired
-    private SkuService skuService;
-
-    @Autowired
     private OrderService orderService;
 
     @Autowired
@@ -97,6 +94,9 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
     @Autowired
     private InventoryFinishedService inventoryFinishedService;
 
+    @Autowired
+    private ProductionWorkOrderService productionWorkOrderService;
+
     @Override
     public Page<ProductionOrderVo> getPage(ProductionOrderDto dto) {
 
@@ -112,41 +112,15 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
 
         Page<ProductionOrderVo> page = productionOrderMapper.getPage(dto.getPage(), wrapper);
         List<ProductionOrderVo> records = page.getRecords();
-        if (records.size() == 0) {
+        if (records.isEmpty()) {
             return page;
         }
 
         // 赋值进度
         List<Long> orderIdList = records.stream().map(ProductionOrderVo::getOrderId).collect(Collectors.toList());
-        List<ProductionTask> productionTaskList = productionTaskService.list(q -> q.in(ProductionTask::getOrderId, orderIdList));
-
-        List<ProductionOrderScheduleVo> productionOrderScheduleVoList = productionTaskList.stream()
-                .map(item -> ProductionOrderScheduleVo.builder()
-                        .orderId(item.getOrderId())
-                        .skuSpecId(item.getSkuSpecId())
-                        .productionQuantity(item.getProductionQuantity())
-                        .completeQuantity(item.getCompleteQuantity())
-                        .build())
-                .collect(Collectors.toList());
-
-        skuSpecService.attributeAssign(productionOrderScheduleVoList, ProductionOrderScheduleVo::getSkuSpecId,
-                (item, skuSpec) -> {
-                    item.setSkuId(skuSpec.getSkuId());
-                    item.setSkuSpecCode(skuSpec.getCode());
-                    item.setSkuSpecName(skuSpec.getName());
-                });
-
-        skuService.attributeAssign(productionOrderScheduleVoList, ProductionOrderScheduleVo::getSkuId,
-                (item, sku) -> {
-                    item.setSkuName(sku.getName());
-                });
-
-        Map<Long, List<ProductionOrderScheduleVo>> productionOrderScheduleVoMap = productionOrderScheduleVoList
-                .stream().collect(Collectors.groupingBy(ProductionOrderScheduleVo::getOrderId));
-
+        Map<Long, List<ProductionOrderScheduleVo>> map = productionWorkOrderService.getProductionOrderScheduleMap(orderIdList);
         for (ProductionOrderVo record : records) {
-            record.setProductionOrderScheduleVoList(
-                    productionOrderScheduleVoMap.getOrDefault(record.getOrderId(), Collections.emptyList()));
+            record.setProductionOrderScheduleVoList(map.getOrDefault(record.getOrderId(), Collections.emptyList()));
         }
 
         return page;
@@ -191,8 +165,16 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
                 .set(BasePo::getUpdateTime, date));
 
-        // 订单生产完成时,生产任务一键完成,并生成对账单
-        productionTaskService.completeTask(orderId, date);
+        // 订单生产完成时,一键完成生产任务
+        productionWorkOrderService.update(q -> q
+                .eq(ProductionWorkOrder::getOrderId, orderId)
+                .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()));
@@ -226,10 +208,7 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
             throw new ServiceException("操作失败,订单sku超领明细列表不能为空");
         }
         Map<Long, BigDecimal> map = exceedReceiveSkuList.stream().collect(Collectors.toMap(
-                        OrderSkuDto::getBomSpecId,
-                        OrderSkuDto::getQuantity,
-                        BigDecimal::add
-                ));
+                OrderSkuDto::getBomSpecId, OrderSkuDto::getQuantity, BigDecimal::add));
         boolean result = inventoryService.lockStorage(map, WarehouseConstant.SEMI_FINISHED_PRODUCT);
         if (!result) {
             throw new ServiceException("库存不足,超领失败!");
@@ -268,7 +247,7 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
         inStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
         inStorageDto.setRemark("订单:" + orderInfo.getCode()
                 + (StrUtil.isBlank(orderInfo.getWlnCode()) ? StringPool.EMPTY : "(" + orderInfo.getWlnCode() + ")")
-                +"超领报废入库");
+                + "超领报废入库");
         inStorageDto.setInOutStorageBomList(inOutStorageBomList);
         inOutStorageService.add(inStorageDto);
         // 人为损坏, 新增订单生产成本的材料成本
@@ -279,8 +258,8 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
             Map<Long, OrderSkuProductionCost> orderSkuProductionCostMap = orderSkuProductionCostService.mapKEntity(
                     OrderSkuProductionCost::getOrderSkuId,
                     q -> q.eq(OrderSkuProductionCost::getOrderId, orderId)
-                    .in(OrderSkuProductionCost::getOrderSkuId, orderSkuIds)
-                );
+                            .in(OrderSkuProductionCost::getOrderSkuId, orderSkuIds)
+            );
             for (OrderSkuDto orderSkuDto : exceedReceiveSkuList) {
                 BomSpec bomSpec = bomSpecMap.get(orderSkuDto.getBomSpecId());
                 OrderSkuProductionCost orderSkuProductionCost = orderSkuProductionCostMap.get(orderSkuDto.getId());

+ 0 - 167
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionTaskServiceImpl.java

@@ -1,167 +0,0 @@
-package com.sd.business.service.production.impl;
-
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.sd.business.entity.order.po.OrderInfo;
-import com.sd.business.entity.order.po.OrderSku;
-import com.sd.business.entity.production.dto.ProductionTaskDto;
-import com.sd.business.entity.production.dto.ProductionTaskSelectDto;
-import com.sd.business.entity.production.po.ProductionTask;
-import com.sd.business.entity.production.po.ProductionWorkOrder;
-import com.sd.business.entity.production.vo.ProductionTaskVo;
-import com.sd.business.entity.sku.po.Sku;
-import com.sd.business.entity.sku.po.SkuSpec;
-import com.sd.business.mapper.production.ProductionTaskMapper;
-import com.sd.business.service.order.OrderService;
-import com.sd.business.service.order.OrderSkuService;
-import com.sd.business.service.production.ProductionTaskService;
-import com.sd.business.service.production.ProductionWorkOrderService;
-import com.sd.business.service.sku.SkuService;
-import com.sd.business.service.sku.SkuSpecService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-
-/**
- * <p>
- * 生产任务 服务实现类
- * </p>
- *
- * @author
- * @since 2023-07-19
- */
-@Service
-public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper, ProductionTask> implements ProductionTaskService {
-
-    @Autowired
-    private ProductionWorkOrderService productionWorkOrderService;
-
-    @Autowired
-    private OrderService orderService;
-
-    @Autowired
-    private OrderSkuService orderSkuService;
-
-    @Autowired
-    private SkuService skuService;
-
-    @Autowired
-    private SkuSpecService skuSpecService;
-
-    @Override
-    public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
-        IWrapper<ProductionTask> wrapper = getWrapper();
-        wrapper.orderByDesc("pt", ProductionTask::getId);
-        Page<ProductionTaskVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
-        return page;
-    }
-
-    @Override
-    public void addTaskAndWorkOrder(Long orderId) {
-        OrderInfo orderInfo = orderService.getById(orderId);
-        if (orderInfo == null) {
-            throw new ServiceException("未知订单");
-        }
-
-        List<ProductionTask> productionTaskList = new ArrayList<>();
-        List<ProductionWorkOrder> productionWorkOrderList = new ArrayList<>();
-
-        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderId));
-
-        Map<String, ProductionTask> skuSpecIdProductionTaskMap = new HashMap<>();
-
-        int num = 1;
-
-        for (OrderSku orderSku : orderSkuList) {
-
-            Long skuSpecId = orderSku.getSkuSpecId();
-            Long bomSpecId = orderSku.getBomSpecId();
-            Integer printType = orderSku.getPrintType();
-            BigDecimal quantity = orderSku.getQuantity();
-
-            ProductionTask productionTask = skuSpecIdProductionTaskMap.computeIfAbsent(
-                    skuSpecId + ":" + bomSpecId + ":" + printType,
-                    item -> {
-                        SkuSpec skuSpec = skuSpecService.getById(skuSpecId);
-                        Sku sku = skuService.getById(skuSpec.getSkuId());
-
-                        ProductionTask tempProductionTask = new ProductionTask();
-                        tempProductionTask.setId(IdWorker.getId());
-                        tempProductionTask.setOrderId(orderId);
-                        tempProductionTask.setSkuSpecId(skuSpecId);
-                        tempProductionTask.setBomSpecId(bomSpecId);
-                        tempProductionTask.setCraftProductionLineId(sku.getCraftProductionLineId());
-                        tempProductionTask.setMachinedPanel(skuSpec.getMachinedPanel());
-                        tempProductionTask.setPrintType(printType);
-                        tempProductionTask.setProductionQuantity(BigDecimal.ZERO);
-                        tempProductionTask.setCompleteQuantity(BigDecimal.ZERO);
-
-                        productionTaskList.add(tempProductionTask);
-
-                        return tempProductionTask;
-                    });
-
-            productionTask.setProductionQuantity(productionTask.getProductionQuantity().add(quantity));
-
-            for (int i = 0; i < quantity.intValue(); i++) {
-                ProductionWorkOrder productionWorkOrder = new ProductionWorkOrder();
-                productionWorkOrder.setProductionTaskId(productionTask.getId());
-                productionWorkOrder.setCode(orderInfo.getCode() + String.format("-%05d", num));
-                productionWorkOrder.setStatus(0);
-                productionWorkOrderList.add(productionWorkOrder);
-                num++;
-            }
-
-        }
-
-        if (productionTaskList.size() > 0) {
-            this.saveBatch(productionTaskList);
-        }
-
-        if (productionWorkOrderList.size() > 0) {
-            productionWorkOrderService.saveBatch(productionWorkOrderList);
-        }
-    }
-
-    @Override
-    public void completeTask(Long orderId, Date completeTime) {
-        List<ProductionTask> list = this.list(q -> q.eq(ProductionTask::getOrderId, orderId));
-        if (ObjectUtil.isEmpty(list)) {
-            return;
-        }
-        List<ProductionTask> productionTaskList = list.stream().peek(item -> {
-            item.setCompleteQuantity(item.getProductionQuantity());
-            item.setCompleteTime(completeTime);
-        }).collect(Collectors.toList());
-        // 更新生产任务
-        this.updateBatchById(productionTaskList);
-    }
-
-    @Override
-    public void completeTaskBatch(List<ProductionTaskDto> productionTaskDtoList) {
-        List<ProductionTask> productionTaskList = new ArrayList<>();
-        for (ProductionTaskDto dto : productionTaskDtoList) {
-            List<ProductionTask> list = this.list(q -> q.eq(ProductionTask::getOrderId, dto.getOrderId()));
-            if (ObjectUtil.isEmpty(list)) {
-                continue;
-            }
-            List<ProductionTask> taskList = list.stream().peek(item -> {
-                item.setCompleteQuantity(item.getProductionQuantity());
-                item.setCompleteTime(dto.getCompleteTime());
-            }).collect(Collectors.toList());
-            productionTaskList.addAll(taskList);
-        }
-        if (ObjectUtil.isNotEmpty(productionTaskList)) {
-            // 更新生产任务
-            this.updateBatchById(productionTaskList);
-        }
-    }
-}

+ 71 - 2
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionWorkOrderServiceImpl.java

@@ -1,19 +1,34 @@
 package com.sd.business.service.production.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
+import com.sd.business.entity.order.po.OrderSku;
 import com.sd.business.entity.production.dto.ProductionWorkOrderSelectDto;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
+import com.sd.business.entity.production.vo.ProductionOrderScheduleVo;
 import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.mapper.production.ProductionWorkOrderMapper;
+import com.sd.business.service.order.OrderService;
+import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.production.ProductionWorkOrderService;
+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.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -26,6 +41,12 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProductionWorkOrderServiceImpl extends ServiceImpl<ProductionWorkOrderMapper, ProductionWorkOrder> implements ProductionWorkOrderService {
 
+    @Autowired
+    private OrderService orderService;
+
+    @Autowired
+    private OrderSkuService orderSkuService;
+
     @Override
     public Page<ProductionWorkOrderVo> getPage(ProductionWorkOrderSelectDto dto) {
         IWrapper<ProductionWorkOrder> wrapper = getWrapper();
@@ -46,9 +67,57 @@ public class ProductionWorkOrderServiceImpl extends ServiceImpl<ProductionWorkOr
         wrapper.ge("oi", OrderInfo::getDeliveryTime, dto.getBeginTime());
         wrapper.le("oi", OrderInfo::getDeliveryTime, dto.getEndTime());
 
-        Page<ProductionWorkOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return this.baseMapper.getPage(dto.getPage(), wrapper);
+    }
+
+    @Override
+    public Map<Long, List<ProductionOrderScheduleVo>> getProductionOrderScheduleMap(List<Long> orderIdList) {
+        if (orderIdList.isEmpty()) {
+            return Collections.emptyMap();
+        }
+
+        IWrapper<Object> wrapper = IWrapper.getWrapper();
+        wrapper.in("pwo", ProductionWorkOrder::getOrderId, orderIdList);
+        wrapper.ne("pwo", ProductionWorkOrder::getStatus, WorkOrderStatusEnum.RESCHEDULE.getKey());
+        wrapper.groupBy("pwo.order_sku_id");
+        List<ProductionOrderScheduleVo> list = baseMapper.getProductionOrderScheduleList(wrapper);
+
+        return list.stream().collect(Collectors.groupingBy(ProductionOrderScheduleVo::getOrderId));
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(Long orderId) {
+        OrderInfo orderInfo = orderService.getById(orderId);
+        if (orderInfo == null) {
+            throw new ServiceException("未知订单");
+        }
+
+        List<ProductionWorkOrder> productionWorkOrderList = new ArrayList<>();
+
+        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderId));
+
+        String code = ObjectUtil.defaultIfNull(orderInfo.getWlnCode(), orderInfo.getCode());
+
+        int num = 1;
+
+        for (OrderSku orderSku : orderSkuList) {
+            BigDecimal quantity = orderSku.getQuantity();
+            for (int i = 0; i < quantity.intValue(); i++) {
+                ProductionWorkOrder productionWorkOrder = new ProductionWorkOrder();
+                productionWorkOrder.setCode(code + String.format("-%05d", num));
+                productionWorkOrder.setOrderId(orderId);
+                productionWorkOrder.setOrderSkuId(orderSku.getId());
+                productionWorkOrder.setSkuSpecId(orderSku.getSkuSpecId());
+                productionWorkOrder.setBomSpecId(orderSku.getBomSpecId());
+                productionWorkOrder.setPrintType(orderSku.getPrintType());
+                productionWorkOrder.setStatus(0);
+                productionWorkOrderList.add(productionWorkOrder);
+                num++;
+            }
+        }
 
-        return page;
+        saveBatch(productionWorkOrderList);
     }
 
 }

+ 46 - 61
sd-business/src/main/java/com/sd/business/service/production/impl/StockPreparationServiceImpl.java

@@ -1,7 +1,6 @@
 package com.sd.business.service.production.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.flow.enums.FlowStatusEnum;
 import com.ruoyi.common.constant.StatusConstant;
@@ -23,13 +22,11 @@ import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderSku;
 import com.sd.business.entity.order.po.OrderSkuBom;
 import com.sd.business.entity.production.dto.StockPreparationDto;
-import com.sd.business.entity.production.po.ProductionTask;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
 import com.sd.business.entity.production.vo.OutBomVo;
 import com.sd.business.entity.production.vo.PackageBomVo;
 import com.sd.business.entity.production.vo.StockPreparationVo;
 import com.sd.business.entity.production.vo.UncompletedVo;
-import com.sd.business.entity.sku.po.Sku;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.statement.dto.StatementOfAccountDto;
 import com.sd.business.entity.warehouse.constant.WarehouseConstant;
@@ -43,10 +40,8 @@ import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuBomService;
 import com.sd.business.service.order.OrderSkuService;
-import com.sd.business.service.production.ProductionTaskService;
 import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.production.StockPreparationService;
-import com.sd.business.service.sku.SkuService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.framework.util.Assert;
@@ -77,15 +72,9 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     private OrderSkuBomService orderSkuBomService;
 
     @Autowired
-    private ProductionTaskService productionTaskService;
-
-    @Autowired
     private ProductionWorkOrderService productionWorkOrderService;
 
     @Autowired
-    private SkuService skuService;
-
-    @Autowired
     private SkuSpecService skuSpecService;
 
     @Autowired
@@ -211,20 +200,20 @@ public class StockPreparationServiceImpl implements StockPreparationService {
         // 订单出库
         orderDelivery(list, dto);
 
-        List<ProductionTask> productionTaskList = new ArrayList<>();
         List<ProductionWorkOrder> productionWorkOrderList = new ArrayList<>();
 
-        // 生产任务、生产工单
+        // 生产工单
         Map<Long, List<StockPreparationVo>> map = list.stream().collect(Collectors.groupingBy(StockPreparationVo::getOrderId));
+        Map<Long, List<OrderSku>> orderSkuMap = orderSkuService.list(q -> q.in(OrderSku::getOrderId, map.keySet()))
+                .stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
         map.forEach((orderId, stockPreparationVoList) -> {
-            String orderCode = stockPreparationVoList.get(0).getOrderCode();
-            addTaskAndWorkOrder(orderId, orderCode, productionTaskList, productionWorkOrderList);
+            StockPreparationVo stockPreparationVo = stockPreparationVoList.get(0);
+            String orderCode = stockPreparationVo.getOrderCode();
+            String orderWlnCode = stockPreparationVo.getOrderWlnCode();
+            addWorkOrder(orderId, ObjectUtil.defaultIfNull(orderWlnCode, orderCode),
+                    orderSkuMap.getOrDefault(orderId, Collections.emptyList()), productionWorkOrderList);
         });
 
-        if (!productionTaskList.isEmpty()) {
-            productionTaskService.saveBatch(productionTaskList);
-        }
-
         if (!productionWorkOrderList.isEmpty()) {
             productionWorkOrderService.saveBatch(productionWorkOrderList);
         }
@@ -257,6 +246,9 @@ public class StockPreparationServiceImpl implements StockPreparationService {
             inventoryFinishedService.saleOutOfWarehouse(orderIds);
         }
 
+        // 把生产工单发送到mq
+        sendWorkOrderMq(productionWorkOrderList);
+
     }
 
     @Override
@@ -437,58 +429,26 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     /**
      * 添加 生产任务、工单
      */
-    private void addTaskAndWorkOrder(Long orderId,
-                                     String orderCode,
-                                     List<ProductionTask> productionTaskList,
-                                     List<ProductionWorkOrder> productionWorkOrderList) {
+    private void addWorkOrder(Long id, String code, List<OrderSku> list, List<ProductionWorkOrder> productionWorkOrderList) {
 
-        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderId));
-
-        Map<String, ProductionTask> skuSpecIdProductionTaskMap = new HashMap<>();
 
         int num = 1;
 
-        for (OrderSku orderSku : orderSkuList) {
-
-            Long skuSpecId = orderSku.getSkuSpecId();
-            Long bomSpecId = orderSku.getBomSpecId();
-            Integer printType = orderSku.getPrintType();
-            BigDecimal quantity = orderSku.getQuantity();
-
-            ProductionTask productionTask = skuSpecIdProductionTaskMap.computeIfAbsent(
-                    skuSpecId + ":" + bomSpecId + ":" + printType,
-                    item -> {
-                        SkuSpec skuSpec = skuSpecService.getById(skuSpecId);
-                        Sku sku = skuService.getById(skuSpec.getSkuId());
-
-                        ProductionTask tempProductionTask = new ProductionTask();
-                        tempProductionTask.setId(IdWorker.getId());
-                        tempProductionTask.setOrderId(orderId);
-                        tempProductionTask.setSkuSpecId(skuSpecId);
-                        tempProductionTask.setBomSpecId(bomSpecId);
-                        tempProductionTask.setCraftProductionLineId(sku.getCraftProductionLineId());
-                        tempProductionTask.setMachinedPanel(skuSpec.getMachinedPanel());
-                        tempProductionTask.setPrintType(printType);
-                        tempProductionTask.setProductionQuantity(BigDecimal.ZERO);
-                        tempProductionTask.setCompleteQuantity(BigDecimal.ZERO);
-
-                        productionTaskList.add(tempProductionTask);
-
-                        return tempProductionTask;
-                    });
-
-            productionTask.setProductionQuantity(productionTask.getProductionQuantity().add(quantity));
-
-            for (int i = 0; i < quantity.intValue(); i++) {
+        for (OrderSku orderSku : list) {
+            for (int i = 0; i < orderSku.getQuantity().intValue(); i++) {
                 ProductionWorkOrder productionWorkOrder = new ProductionWorkOrder();
-                productionWorkOrder.setProductionTaskId(productionTask.getId());
-                productionWorkOrder.setCode(orderCode + String.format("-%05d", num));
+                productionWorkOrder.setCode(code + String.format("-%05d", num));
+                productionWorkOrder.setOrderId(id);
+                productionWorkOrder.setOrderSkuId(orderSku.getId());
+                productionWorkOrder.setSkuSpecId(orderSku.getSkuSpecId());
+                productionWorkOrder.setBomSpecId(orderSku.getBomSpecId());
+                productionWorkOrder.setPrintType(orderSku.getPrintType());
                 productionWorkOrder.setStatus(0);
                 productionWorkOrderList.add(productionWorkOrder);
                 num++;
             }
-
         }
+
     }
 
     /**
@@ -588,4 +548,29 @@ public class StockPreparationServiceImpl implements StockPreparationService {
         inOutStorageService.add(inOutStorageDto);
     }
 
+    /**
+     * 把工单发送到mq
+     */
+    private void sendWorkOrderMq(List<ProductionWorkOrder> productionWorkOrderList) {
+
+        if (productionWorkOrderList.isEmpty()) {
+            return;
+        }
+
+//        Map<Long, ProductionTask> taskMap = productionTaskList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+//
+//        productionWorkOrderList.stream().map(item -> {
+//            Long productionTaskId = item.getProductionTaskId();
+//            ProductionTask productionTask = taskMap.get(productionTaskId);
+//
+//
+//            WorkOrderDetail workOrderDetail = new WorkOrderDetail();
+//            workOrderDetail.setWorkOrderId(item.getId());
+//
+//
+//
+//        })
+
+    }
+
 }

+ 0 - 32
sd-business/src/main/resources/mapper/production/ProductionTaskMapper.xml

@@ -1,32 +0,0 @@
-<?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.production.ProductionTaskMapper">
-
-    <select id="getPage" resultType="com.sd.business.entity.production.vo.ProductionTaskVo">
-        select pt.id,
-               bs.main_img_url,
-               oi.code     orderCode,
-               oi.wln_code orderWlnCode,
-               ss.code     skuSpecCode,
-               ss.name     skuSpecName,
-               pt.production_quantity,
-               pt.complete_quantity,
-               pt.machined_panel,
-               pt.print_type,
-               bs.code     bomSpecCode,
-               bs.name     bomSpecName,
-               oi.wln_create_time,
-               oi.delivery_time,
-               cpl.name    craftProductionLine,
-               pt.create_time,
-               pt.complete_time
-        from production_task pt
-                 left join sku_spec ss on pt.sku_spec_id = ss.id
-                 left join sku s on ss.sku_id = s.id
-                 left join bom_spec bs on ss.bom_spec_id = bs.id
-                 left join order_info oi on pt.order_id = oi.id
-                 left join craft_production_line cpl on pt.craft_production_line_id = cpl.id
-            ${ew.customSqlSegment}
-    </select>
-
-</mapper>

+ 22 - 6
sd-business/src/main/resources/mapper/production/ProductionWorkOrderMapper.xml

@@ -7,6 +7,7 @@
                pwo.production_task_id,
                pwo.code,
                pwo.status,
+               pwo.print_type,
                pwo.complete_time,
                oi.code          orderCode,
                oi.wln_code      orderWlnCode,
@@ -14,13 +15,28 @@
                ss.code          skuSpecCode,
                ss.name          skuSpecName,
                bs.code          bomSpecCode,
-               bs.name          bomSpecName,
-               pt.print_type    printType
+               bs.name bomSpecName
         from production_work_order pwo
-                 inner join production_task pt on pwo.production_task_id = pt.id
-                 inner join order_info oi on pt.order_id = oi.id
-                 inner join sku_spec ss on pt.sku_spec_id = ss.id
-                 inner join bom_spec bs on pt.bom_spec_id = bs.id
+                 inner join order_info oi on pwo.order_id = oi.id
+                 inner join sku_spec ss on pwo.sku_spec_id = ss.id
+                 inner join bom_spec bs on pwo.bom_spec_id = bs.id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="getProductionOrderScheduleList"
+            resultType="com.sd.business.entity.production.vo.ProductionOrderScheduleVo">
+        select pwo.order_id,
+               pwo.order_sku_id,
+               ss.sku_id,
+               pwo.sku_spec_id,
+               count(0)                      productionQuantity,
+               count(pwo.status = 3 or null) completeQuantity,
+               ss.code                       skuSpecCode,
+               ss.name                       skuSpecName,
+               s.name                        skuName
+        from production_work_order pwo
+                 left join sku_spec ss on pwo.sku_spec_id = ss.id
+                 left join sku s on ss.sku_id = s.id
             ${ew.customSqlSegment}
     </select>
 

+ 1 - 0
sd-business/src/main/resources/mapper/production/StockPreparationMapper.xml

@@ -13,6 +13,7 @@
                os.id           orderSkuId,
                oi.id           orderId,
                oi.code         orderCode,
+               oi.wln_code orderWlnCode,
                os.print_type   printType,
                oi.lock_storage lockStorage
         from order_info oi

+ 42 - 0
sd-mq/src/main/java/com/sd/mq/entity/WorkOrderDetail.java

@@ -0,0 +1,42 @@
+package com.sd.mq.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class WorkOrderDetail {
+
+    /**
+     * 工单id
+     */
+    private Long workOrderId;
+
+    /**
+     * 图稿路径
+     */
+    private String fileUrl;
+
+    /**
+     * 图片路径
+     */
+    private String imgUrl;
+
+    /**
+     * 长(cm)
+     */
+    private BigDecimal length;
+
+    /**
+     * 宽(cm)
+     */
+    private BigDecimal wide;
+
+    /**
+     * 高(cm)
+     */
+    private BigDecimal hight;
+
+}

+ 17 - 0
sd-mq/src/main/java/com/sd/mq/entity/WorkOrderMessage.java

@@ -0,0 +1,17 @@
+package com.sd.mq.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class WorkOrderMessage extends BaseMessage {
+
+    /**
+     * 工单明细
+     */
+    private List<WorkOrderDetail> workOrderDetailList;
+
+}

+ 21 - 0
sd-mq/src/main/java/com/sd/mq/enums/WorkOrderStatusEnum.java

@@ -0,0 +1,21 @@
+package com.sd.mq.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum WorkOrderStatusEnum {
+
+    TO_BE_PRODUCED(0, "待投产"),
+    SCANNED(1, "已扫描"),
+    IN_PRODUCTION(2, "生产中"),
+    PRODUCTION_COMPLETION(3, "生产完成"),
+    PRODUCTION_ANOMALY(4, "生产异常"),
+    RESCHEDULE(5, "重新排单"),
+    ;
+
+    private final Integer key;
+    private final String value;
+
+}

+ 30 - 25
sd-wln/src/main/java/com/sd/wln/service/impl/WlnStatementOfAccountImpl.java

@@ -5,16 +5,19 @@ import cn.hutool.core.date.DateUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.outbound.po.OutboundOrder;
-import com.sd.business.entity.production.dto.ProductionTaskDto;
+import com.sd.business.entity.production.po.ProductionWorkOrder;
 import com.sd.business.entity.statement.po.StatementOfAccount;
 import com.sd.business.service.inventory.InventoryFinishedService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.outbound.OutboundOrderService;
-import com.sd.business.service.production.ProductionTaskService;
+import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.statement.StatementOfAccountService;
+import com.sd.mq.enums.WorkOrderStatusEnum;
 import com.sd.wln.service.WlnOutboundOrderService;
 import com.sd.wln.service.WlnStatementOfAccount;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,25 +39,21 @@ public class WlnStatementOfAccountImpl implements WlnStatementOfAccount {
     private OrderService orderService;
 
     @Autowired
-    private ProductionTaskService productionTaskService;
-
-    @Autowired
     private InventoryFinishedService inventoryFinishedService;
 
     @Autowired
     private WlnOutboundOrderService wlnOutboundOrderService;
 
+    @Autowired
+    private ProductionWorkOrderService productionWorkOrderService;
+
     @DSTransactional
     @Override
     public synchronized void createStatementOfAccount() {
 
-        // 获取万里牛出库明细
+        // 同步万里牛出库明细
         wlnOutboundOrderService.syncOutboundOrder();
 
-        List<StatementOfAccount> saveStatementOfAccountList = new ArrayList<>();
-        List<OrderInfo> editOrderInfoList = new ArrayList<>();
-        List<ProductionTaskDto> editProductionTaskList = new ArrayList<>();
-
         // 获取没绑定对账单的订单
         List<OrderInfo> orderList = orderService.list(q -> q
                 .ge(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey())
@@ -80,7 +79,9 @@ public class WlnStatementOfAccountImpl implements WlnStatementOfAccount {
         // 生成对账单
         Map<String, List<StatementOfAccount>> statementOfAccountMap = new HashMap<>();
 
-        List<Long> productionWarehousingOrderIdList = new ArrayList<>();
+        List<StatementOfAccount> saveStatementOfAccountList = new ArrayList<>();
+        List<OrderInfo> editOrderList = new ArrayList<>();
+        List<Long> orderIdList = new ArrayList<>();
 
         for (OrderInfo order : orderList) {
 
@@ -125,21 +126,24 @@ public class WlnStatementOfAccountImpl implements WlnStatementOfAccount {
             if (order.getStatus().equals(OrderStatusEnum.IN_PRODUCTION.getKey())) {
                 editOrderInfo.setStatus(OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
                 editOrderInfo.setShippingTime(map.get(order.getWlnCode()));
-                // 添加生产任务信息
-                ProductionTaskDto productionTaskDto = new ProductionTaskDto();
-                productionTaskDto.setOrderId(order.getId());
-                productionTaskDto.setCompleteTime(map.get(order.getWlnCode()));
-                editProductionTaskList.add(productionTaskDto);
-                productionWarehousingOrderIdList.add(order.getId());
+                orderIdList.add(order.getId());
             }
-            editOrderInfoList.add(editOrderInfo);
+
+            editOrderList.add(editOrderInfo);
         }
 
         // 更新订单信息
-        orderService.updateBatchById(editOrderInfoList);
-
-        // 订单生产完成时,生产任务一键完成
-        productionTaskService.completeTaskBatch(editProductionTaskList);
+        orderService.updateBatchById(editOrderList);
+
+        Date date = new Date();
+        // 订单生产完成时,一键完成生产任务
+        productionWorkOrderService.update(q -> q
+                .in(ProductionWorkOrder::getOrderId, orderIdList)
+                .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()));
 
         // 保存对账单
         if (!saveStatementOfAccountList.isEmpty()) {
@@ -147,11 +151,12 @@ public class WlnStatementOfAccountImpl implements WlnStatementOfAccount {
         }
 
         // 生产入库
-        inventoryFinishedService.productionWarehousing(productionWarehousingOrderIdList);
+        inventoryFinishedService.productionWarehousing(orderIdList);
 
         // 库存销售出库
-        List<Long> orderIdList = editOrderInfoList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
-        inventoryFinishedService.saleOutOfWarehouse(orderIdList);
+        List<Long> editOrderIdList = editOrderList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        inventoryFinishedService.saleOutOfWarehouse(editOrderIdList);
+
     }
 
 }