新火炬后端单体项目初始化代码
Houjie
2 天以前 e236f121b6f6b885cea9814423b6d87b97ae7ad3
src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
@@ -17,11 +17,15 @@
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;
@@ -49,6 +53,7 @@
import java.time.temporal.ChronoField;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * @Description: 工单报工
@@ -94,6 +99,8 @@
    private IInspectionPlanItemService inspectionPlanItemService;
    @Autowired
    private IMesMaterialConsumptionDetailService mesMaterialConsumptionDetailService;
    @Autowired
    private ILswMaterialInventoryService lswMaterialInventoryService;
    @Override
    public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
@@ -158,7 +165,7 @@
                //拼接成品报工托号
                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:
@@ -168,8 +175,13 @@
                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);
@@ -186,6 +198,48 @@
        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、入库 半成品/成品 到对应线边库