| | |
| | | import org.jeecg.modules.base.service.IShiftService; |
| | | import org.jeecg.modules.lsw.entity.LswMaterial; |
| | | import org.jeecg.modules.lsw.entity.LswMaterialInbound; |
| | | import org.jeecg.modules.lsw.entity.LswMaterialInventory; |
| | | import org.jeecg.modules.lsw.enums.MaterialCategoryEnum; |
| | | import org.jeecg.modules.lsw.enums.MaterialInboundCategory; |
| | | import org.jeecg.modules.lsw.enums.MaterialInventoryStatusEnum; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialInboundService; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialInventoryService; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialService; |
| | | import org.jeecg.modules.mes.entity.*; |
| | | import org.jeecg.modules.mes.enums.ReportCategoryEnum; |
| | | import org.jeecg.modules.mes.mapper.MesWorkReportingMapper; |
| | | import org.jeecg.modules.mes.service.*; |
| | | import org.jeecg.modules.mes.utils.CommonUtils; |
| | |
| | | import java.time.temporal.ChronoField; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * @Description: 工单报工 |
| | |
| | | private IInspectionPlanItemService inspectionPlanItemService; |
| | | @Autowired |
| | | private IMesMaterialConsumptionDetailService mesMaterialConsumptionDetailService; |
| | | @Autowired |
| | | private ILswMaterialInventoryService lswMaterialInventoryService; |
| | | |
| | | @Override |
| | | public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) { |
| | |
| | | //拼接成品报工托号 |
| | | String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4"); |
| | | String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4; |
| | | mesWorkReporting.setPalletNumber(finishedPalletNumber).setReportType("FINISHED"); |
| | | mesWorkReporting.setPalletNumber(finishedPalletNumber).setReportType(ReportCategoryEnum.FINISHED.name()); |
| | | break; |
| | | case INNER_FLANGE: |
| | | case OUTER_FLANGE: |
| | |
| | | Shift shift = shiftService.getById(workOrder.getShiftId()); |
| | | String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6"); |
| | | String halfPalletNumber = factory.getFactoryCode() + material.getMaterialNumber() + date + shift.getShiftCode() + palletNumber6; |
| | | mesWorkReporting.setPalletNumber(halfPalletNumber).setReportType("HALF"); |
| | | mesWorkReporting.setPalletNumber(halfPalletNumber).setReportType(ReportCategoryEnum.HALF.name()); |
| | | break; |
| | | case BLANK: |
| | | //热处理报工 |
| | | consumptionDetailList = heatTreatmentReport(mesWorkReporting, workOrder, lineSideWarehouse); |
| | | mesWorkReporting.setReportType(ReportCategoryEnum.HEATTREATMENT.name()); |
| | | |
| | | } |
| | | //新增报工记录 |
| | | save(mesWorkReporting); |
| | |
| | | return mesWorkReporting; |
| | | } |
| | | |
| | | //热处理报工 |
| | | private List<MesMaterialConsumptionDetail> heatTreatmentReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) { |
| | | //1、入库热处理毛坯到对应线边库,热处理前后物料编码不发生变化,只需要更新热处理标识,所以此处不能直接调用线边库的入库方法,需要直接更新物料库存信息中的热处理标识字段 |
| | | LswMaterialInventory materialInventory = lswMaterialInventoryService.list(new LambdaQueryWrapper<LswMaterialInventory>() |
| | | .eq(LswMaterialInventory::getWarehouseId, lineSideWarehouse.getId()) |
| | | .eq(LswMaterialInventory::getInventoryStatus, MaterialInventoryStatusEnum.OUTBOUND.name()) |
| | | .eq(LswMaterialInventory::getHeatTreatmentFlag, CommonConstant.STATUS_0) |
| | | .apply("EXISTS (SELECT 1 FROM lsw_material t WHERE t.id = lsw_material_inventory.material_id AND t.material_number = {0} " + |
| | | "AND t.del_flag = {1} AND t.material_status = {2})", workOrder.getMaterialNumber(), CommonConstant.DEL_FLAG_0, CommonConstant.STATUS_1)) |
| | | .stream().findFirst().orElse(null); |
| | | if (materialInventory == null) { |
| | | throw new JeecgBootException("线边库无该物料库存信息!"); |
| | | } |
| | | if (materialInventory.getQuantity().compareTo(mesWorkReporting.getQuantity()) != 0) { |
| | | throw new JeecgBootException("报工数量不符合整批次数量要求!"); |
| | | } |
| | | materialInventory.setHeatTreatmentFlag(CommonConstant.STATUS_1); |
| | | materialInventory.setInventoryStatus(MaterialInventoryStatusEnum.NORMAL.name()); |
| | | lswMaterialInventoryService.updateById(materialInventory); |
| | | //2、更新该批次号得上料记录 |
| | | MesMaterialLoading materialLoading = mesMaterialLoadingService.list(new LambdaQueryWrapper<MesMaterialLoading>() |
| | | .eq(MesMaterialLoading::getFactoryId, workOrder.getFactoryId()) |
| | | .eq(MesMaterialLoading::getWarehouseId, lineSideWarehouse.getId()) |
| | | .eq(MesMaterialLoading::getMaterialNumber, workOrder.getMaterialNumber()) |
| | | .eq(MesMaterialLoading::getBatchNumber, materialInventory.getBatchNumber())) |
| | | .stream().findFirst().orElse(null); |
| | | if (materialLoading == null) { |
| | | throw new JeecgBootException("未找到该批次号的上料记录!"); |
| | | } |
| | | materialLoading.setRemainingQuantity(BigDecimal.ZERO); |
| | | mesMaterialLoadingService.updateById(materialLoading); |
| | | //热处理报工,批次号取库存的整批批次号 |
| | | mesWorkReporting.setBatchNumber(materialInventory.getBatchNumber()); |
| | | //3、记录消耗明细 |
| | | MesMaterialConsumptionDetail materialConsumptionDetail = new MesMaterialConsumptionDetail() |
| | | .setWorkOrderId(workOrder.getId()) |
| | | .setFactoryId(workOrder.getFactoryId()) |
| | | .setLoadingId(materialLoading.getId()) |
| | | .setQuantity(mesWorkReporting.getQuantity()); |
| | | return Collections.singletonList(materialConsumptionDetail); |
| | | } |
| | | |
| | | //半成品(内法兰、外法兰)、成品报工 |
| | | private List<MesMaterialConsumptionDetail> productReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) { |
| | | //1、入库 半成品/成品 到对应线边库 |