| | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.production.dto.ProcessRouteAnticlockwiseDto; |
| | | import com.ruoyi.production.dto.ProcessRouteDto; |
| | | import com.ruoyi.production.mapper.ProcessRouteItemMapper; |
| | | import com.ruoyi.production.mapper.ProcessRouteMapper; |
| | | import com.ruoyi.production.mapper.ProductOrderMapper; |
| | | import com.ruoyi.production.mapper.ProductProcessRouteMapper; |
| | | import com.ruoyi.production.pojo.ProcessRoute; |
| | | import com.ruoyi.production.pojo.ProcessRouteItem; |
| | | import com.ruoyi.production.pojo.ProductOrder; |
| | | import com.ruoyi.production.pojo.ProductProcessRoute; |
| | | import com.ruoyi.production.service.ProcessRouteService; |
| | | import com.ruoyi.production.pojo.*; |
| | | import com.ruoyi.production.service.*; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Arrays; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | @Service |
| | |
| | | |
| | | @Autowired |
| | | private ProductOrderMapper productOrderMapper; |
| | | @Autowired |
| | | private ProductStructureService productStructureService; |
| | | @Autowired |
| | | private ProcessRouteItemService processRouteItemService; |
| | | @Autowired |
| | | private ProductWorkOrderService productWorkOrderService; |
| | | @Autowired |
| | | private ProductBomService productBomService; |
| | | @Autowired |
| | | private ProductProcessRouteService productProcessRouteService; |
| | | @Autowired |
| | | private ProductProcessRouteItemService productProcessRouteItemService; |
| | | @Autowired |
| | | private ProductOrderService productOrderService; |
| | | @Autowired |
| | | private ProductProcessService productProcessService; |
| | | |
| | | @Override |
| | | public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) { |
| | |
| | | public int batchDelete(List<Long> ids) { |
| | | //先判断是否已经引用了 |
| | | List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids)); |
| | | if (productOrders.size()>0){ |
| | | if (productOrders.size() > 0) { |
| | | throw new RuntimeException("该工艺路线生产已引用,不能删除"); |
| | | } |
| | | //删除工艺路线详情 |
| | | processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids)); |
| | | return processRouteMapper.deleteBatchIds(ids); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 工艺路线反向新增 新增了bom bom子表 工艺路线 工艺路线子表 生产工艺路线主表 生产工艺路线子表 工单表 |
| | | * |
| | | * @param processRouteAnticlockwiseDtos 工艺子表 |
| | | * @param productModelId 成品规格型号id |
| | | * @param productOrderId 生产订单id |
| | | * @return |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Long processRouteAnticlockwise(List<ProcessRouteAnticlockwiseDto> processRouteAnticlockwiseDtos, Long productModelId, Long productOrderId) { |
| | | ProductOrder byId = productOrderService.getById(productOrderId); |
| | | // 1. 新增BOM |
| | | ProductBom productBom = createProductBom(productModelId); |
| | | |
| | | // 2. 新增BOM子表 |
| | | List<ProductStructure> productStructures = buildProductStructures(processRouteAnticlockwiseDtos, productBom.getId()); |
| | | productStructureService.saveBatch(productStructures); |
| | | |
| | | // 3. 新增工艺路线 |
| | | ProcessRoute processRoute = createProcessRoute(productModelId, productBom.getId()); |
| | | |
| | | // 4. 新增工艺路线子表 |
| | | List<ProcessRouteItem> processRouteItems = buildProcessRouteItems(processRouteAnticlockwiseDtos, processRoute.getId(), productModelId); |
| | | processRouteItemService.saveBatch(processRouteItems); |
| | | |
| | | // 5. 新增生产工艺路线 |
| | | ProductProcessRoute productProcessRoute = createProductProcessRoute(productModelId, productOrderId, productBom.getId(), processRoute.getProcessRouteCode()); |
| | | |
| | | // 6. 新增生产工艺路线子表 |
| | | buildProductProcessRouteItems(processRouteAnticlockwiseDtos, productProcessRoute.getId(), productModelId, productOrderId); |
| | | return processRoute.getId(); |
| | | } |
| | | |
| | | /** |
| | | * 创建产品BOM |
| | | */ |
| | | private ProductBom createProductBom(Long productModelId) { |
| | | ProductBom productBom = new ProductBom(); |
| | | productBom.setProductModelId(productModelId); |
| | | productBom.setVersion("1.0.0"); |
| | | productBomService.save(productBom); |
| | | |
| | | productBom.setBomNo("BM." + String.format("%05d", productBom.getId())); |
| | | productBomService.updateById(productBom); |
| | | |
| | | return productBom; |
| | | } |
| | | |
| | | /** |
| | | * 构建产品结构列表 |
| | | */ |
| | | private List<ProductStructure> buildProductStructures(List<ProcessRouteAnticlockwiseDto> dtos, Integer bomId) { |
| | | List<ProductStructure> structures = new ArrayList<>(dtos.size()); |
| | | for (ProcessRouteAnticlockwiseDto dto : dtos) { |
| | | ProductStructure structure = new ProductStructure(); |
| | | structure.setProductModelId(dto.getProductModelId()); |
| | | structure.setProcessId(dto.getProcessId()); |
| | | structure.setUnitQuantity(new BigDecimal(1)); |
| | | structure.setProcessRouteOpenNum(dto.getProcessRouteOpenNum()); |
| | | structure.setProcessRouteNum(dto.getProcessRouteNum()); |
| | | structure.setProcessRouteAddNum(dto.getProcessRouteAddNum()); |
| | | structure.setProcessRouteRequire(dto.getProcessRouteRequire()); |
| | | structure.setBomId(bomId); |
| | | structure.setProcessRouteName(dto.getProcessRouteName()); |
| | | structures.add(structure); |
| | | } |
| | | return structures; |
| | | } |
| | | |
| | | /** |
| | | * 创建工艺路线 |
| | | */ |
| | | private ProcessRoute createProcessRoute(Long productModelId, Integer bomId) { |
| | | ProcessRoute processRoute = new ProcessRoute(); |
| | | processRoute.setProductModelId(productModelId); |
| | | processRoute.setBomId(bomId); |
| | | processRoute.setDescription(""); |
| | | this.save(processRoute); |
| | | |
| | | processRoute.setProcessRouteCode("GYLX." + String.format("%09d", processRoute.getId())); |
| | | this.updateById(processRoute); |
| | | |
| | | return processRoute; |
| | | } |
| | | |
| | | /** |
| | | * 构建工艺路线子项列表 |
| | | */ |
| | | private List<ProcessRouteItem> buildProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long routeId, Long productModelId) { |
| | | List<ProcessRouteItem> items = new ArrayList<>(dtos.size()); |
| | | Integer num = 0; |
| | | for (ProcessRouteAnticlockwiseDto dto : dtos) { |
| | | ProcessRouteItem item = new ProcessRouteItem(); |
| | | item.setRouteId(routeId); |
| | | item.setProcessId(dto.getProcessId()); |
| | | item.setProductModelId(productModelId); |
| | | item.setProcessRouteName(dto.getProcessRouteName()); |
| | | item.setProcessRouteOpenNum(dto.getProcessRouteOpenNum()); |
| | | item.setProcessRouteNum(dto.getProcessRouteNum()); |
| | | item.setProcessRouteAddNum(dto.getProcessRouteAddNum()); |
| | | item.setProcessRouteRequire(dto.getProcessRouteRequire()); |
| | | item.setDragSort(num++); |
| | | items.add(item); |
| | | } |
| | | return items; |
| | | } |
| | | |
| | | /** |
| | | * 创建生产工艺路线 |
| | | */ |
| | | private ProductProcessRoute createProductProcessRoute(Long productModelId, Long productOrderId, Integer bomId, String processRouteCode) { |
| | | ProductProcessRoute productProcessRoute = new ProductProcessRoute(); |
| | | productProcessRoute.setProductModelId(productModelId); |
| | | productProcessRoute.setProductOrderId(productOrderId); |
| | | productProcessRoute.setBomId(bomId); |
| | | productProcessRoute.setProcessRouteCode(processRouteCode); |
| | | productProcessRouteService.save(productProcessRoute); |
| | | |
| | | return productProcessRoute; |
| | | } |
| | | |
| | | /** |
| | | * 构建生产工艺路线子项列表 |
| | | */ |
| | | private void buildProductProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long productRouteId, Long productModelId, Long productOrderId) { |
| | | ProductOrder byId = productOrderService.getById(productOrderId); |
| | | Integer num = 0; |
| | | for (ProcessRouteAnticlockwiseDto dto : dtos) { |
| | | ProductProcessRouteItem item = new ProductProcessRouteItem(); |
| | | item.setProductRouteId(productRouteId); |
| | | item.setProcessId(dto.getProcessId()); |
| | | item.setProductModelId(productModelId); |
| | | item.setProcessRouteName(dto.getProcessRouteName()); |
| | | item.setProcessRouteOpenNum(dto.getProcessRouteOpenNum()); |
| | | item.setProcessRouteNum(dto.getProcessRouteNum()); |
| | | item.setProcessRouteAddNum(dto.getProcessRouteAddNum()); |
| | | item.setProcessRouteRequire(dto.getProcessRouteRequire()); |
| | | item.setDragSort(num++); |
| | | item.setIsQuality(dto.getProductProcess().getIsQuality() != null && dto.getProductProcess().getIsQuality()); |
| | | item.setUuid(dto.getUuid()); |
| | | productProcessRouteItemService.save(item); |
| | | ProductProcess productProcess = productProcessService.getById(item.getProcessId()); |
| | | //同步新增生产工单 |
| | | ProductWorkOrder productWorkOrder = new ProductWorkOrder(); |
| | | productWorkOrder.setProductProcessRouteItemId(item.getId()); |
| | | productWorkOrder.setProductOrderId(productOrderId); |
| | | productWorkOrder.setPlanQuantity(new BigDecimal(dto.getProcessRouteNum())); |
| | | productWorkOrder.setDeviceId(dto.getDeviceId()); |
| | | productWorkOrder.setUserIds(dto.getUserIds()); |
| | | productWorkOrder.setUserNames(dto.getUserNames()); |
| | | productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder(productProcess.getName(), byId.getNpsNo())); |
| | | productWorkOrder.setStatus(1); |
| | | productWorkOrderService.save(productWorkOrder); |
| | | } |
| | | } |
| | | } |