From e531d140aef8f331deedb093a00a21645bc13b61 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 15 Oct 2024 14:48:23 +0800 Subject: [PATCH] =?UTF-8?q?CBR,=E6=8E=92=E5=BA=8F=E6=8A=A5=E5=B7=A5?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/apiservice/dao/IMesProdRuleSortCfgDao.java | 17 ++ .../daoimpl/MesProdRuleSortCfgDaoImpl.java | 43 +++++ ...ecordImpl.java => MesProductionRecordImpl.java} | 2 +- .../busi/MesJisShippingServiceImpl.java | 2 +- .../serviceimpl/busi/MesWorkOrderService.java | 192 ++++++++++----------- 5 files changed, 157 insertions(+), 99 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesProdRuleSortCfgDao.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesProdRuleSortCfgDaoImpl.java rename modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/{MesMesProductionRecordImpl.java => MesProductionRecordImpl.java} (97%) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesProdRuleSortCfgDao.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesProdRuleSortCfgDao.java new file mode 100644 index 0000000..9b6c529 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/dao/IMesProdRuleSortCfgDao.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.dao; + +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 排序加工规则 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/10/15 13:28 + * @Modify: + **/ +public interface IMesProdRuleSortCfgDao { + + @ApiOperation("查询排序加工规则") + MesProdRuleSortCfg getMesProdRuleSortCfg(String organizeCode, String partNo, String workCenterCode); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesProdRuleSortCfgDaoImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesProdRuleSortCfgDaoImpl.java new file mode 100644 index 0000000..7669bc3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesProdRuleSortCfgDaoImpl.java @@ -0,0 +1,43 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.daoimpl; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdRuleSortCfgDao; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg; +import groovy.util.logging.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; + +/** + * @Description : 排序加工规则 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/10/15 13:29 + * @Modify: + **/ +@Service +@Slf4j +public class MesProdRuleSortCfgDaoImpl implements IMesProdRuleSortCfgDao { + + @Autowired + private EntityManager entityManager; + + @Override + public MesProdRuleSortCfg getMesProdRuleSortCfg(String organizeCode, String partNo, String workCenterCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(workCenterCode)) return null; + StringBuilder hql = new StringBuilder(); + hql.append(" select sortCfg from MesProdRuleSortCfg sortCfg where 1=1"); + hql.append(" and sortCfg.organizeCode = :organizeCode and sortCfg.isValid = :isValid and sortCfg.isDeleted = :isDeleted "); + hql.append(" and sortCfg.workCenterCode = :workCenterCode and (sortCfg.productPartNo = :partNo or sortCfg.reportPartNo =:partNo)"); + Query hqlQuery = entityManager.createQuery(hql.toString(), MesProdRuleSortCfg.class); + hqlQuery.setParameter("organizeCode", organizeCode); + hqlQuery.setParameter("isValid", CommonEnumUtil.VALID); + hqlQuery.setParameter("isDeleted", CommonEnumUtil.FALSE); + hqlQuery.setParameter("workCenterCode", workCenterCode); + hqlQuery.setParameter("partNo", partNo); + return (MesProdRuleSortCfg) hqlQuery.getSingleResult(); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesMesProductionRecordImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesProductionRecordImpl.java similarity index 97% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesMesProductionRecordImpl.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesProductionRecordImpl.java index 690f8ab..0818163 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesMesProductionRecordImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/MesProductionRecordImpl.java @@ -25,7 +25,7 @@ import java.util.stream.Stream; **/ @Service @Slf4j -public class MesMesProductionRecordImpl implements IMesProductionRecordDao { +public class MesProductionRecordImpl implements IMesProductionRecordDao { @Autowired private EntityManager entityManager; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java index 94cc0b0..b9732d6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java @@ -55,7 +55,7 @@ public class MesJisShippingServiceImpl implements IMesJisShippingService { jisShipping.setCusDock(orderManagement.getCustDockCode()); jisShipping.setCustOrderNo(orderManagement.getOrderCode()); jisShipping.setSerialNumber(k.getBarcode()); - jisShipping.setQuantityPerCar(1); + jisShipping.setQuantityPerCar(1d); jisShipping.setOffTime(TimeTool.getNowTime(true)); jisShipping.setShippingOrderCode(orderManagement.getShippingCode()); jisShipping.setFid(UUID.randomUUID().toString()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index ce3564b..fbbe6df 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdRuleSortCfgDao; import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProductionRecordDao; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; @@ -132,6 +133,12 @@ public class MesWorkOrderService implements IMesWorkOrderService { @Autowired private MesMoveRepository mesMoveRepository; + @Autowired + private MesJisShippingRepository mesJisShippingRepository; + + @Autowired + private IMesProdRuleSortCfgDao mesProdRuleSortCfgDao; + @Override public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { @@ -256,8 +263,6 @@ public class MesWorkOrderService implements IMesWorkOrderService { } oldMesWorkOrder.setNum(mesWorkOrderList.size()); oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); - //更新SAP计划完成数量 - saveMesProductPlan(oldMesWorkOrder, false, true); //更新工单状态 double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); @@ -618,15 +623,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //throw new ImppBusiException(String.format("未找到匹配的加工单")); } //获取生产版本 - ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean); -// DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - LOGGER.error(String.format("物料【%s】生产版本信息不存在", productionRecord.getPartNo())); - throw new ImppBusiException(String.format("物料【%s】生产版本信息不存在", productionRecord.getPartNo())); - } + MesProductVersion mesProductVersion = getProductVersion(organizeCode, productionRecord.getPartNo(), oldMesWorkOrder.getProductVersion()); //查询物料信息 DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(organizeCode); @@ -653,9 +650,6 @@ public class MesWorkOrderService implements IMesWorkOrderService { double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); } - //更新SAP计划完成数量 - saveMesProductPlan(oldMesWorkOrder, false, true); - //更新工单状态 if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) { @@ -686,7 +680,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { })); if(MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == productionRecord.getReportType()){ for (Map.Entry> entry : map.entrySet()) { - mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0))); + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0),productionRecord.getProductSn(),false)); } } else if (MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == productionRecord.getReportType()) { customerSupplyMove(productionRecord,oldMesWorkOrder, mesProductVersion, mesBoms, productionRecord.getProductSn(), mesProductOffLineList, mesMoveList,userName); @@ -696,6 +690,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { } if(!CollectionUtils.isEmpty(mesProductOffLineList)){ + mesProductOffLineList.forEach(item -> item.setBomTotalSize(mesProductOffLineList.size())); mesProductOffLineRDao.saveAll(mesProductOffLineList); } @@ -718,21 +713,30 @@ public class MesWorkOrderService implements IMesWorkOrderService { LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo()); } - List mesMoveList = new ArrayList<>(); - private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom) { + private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom,String reportSn,boolean isItemReport) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); - newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); - newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName()); + newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName()); + newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + if (isItemReport) { + //装配费没有bom情况 + if (mesBom.getPartNo().equals(oldMesWorkOrder.getPartNo())) { + newMesProductOffLine.setReportPartNo(mesBom.getItemPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesBom.getItemPartName()); + } + newMesProductOffLine.setReportSn(reportSn); + newMesProductOffLine.setSerialNumber(reportSn); + } else { + newMesProductOffLine.setReportSn(productionRecord.getProductSn()); + newMesProductOffLine.setSerialNumber(productionRecord.getSerialNumber()); + } newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); newMesProductOffLine.setItemQty(mesBom.getItemQty()); - newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); - newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); newMesProductOffLine.setQty(1d); - newMesProductOffLine.setReportSn(productionRecord.getProductSn()); newMesProductOffLine.setBomVersion(oldMesWorkOrder.getProductVersion()); - newMesProductOffLine.setSerialNumber(productionRecord.getSerialNumber()); newMesProductOffLine.setUnit(mesBom.getUnit()); newMesProductOffLine.setBomCode(mesBom.getBomCode()); newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); @@ -1040,7 +1044,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //查询产线信息 MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb); //获取生产版本 - MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb); + MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty())); @@ -1122,6 +1126,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //排序汇报 List mesProductOffLineList = new ArrayList<>(); List mesMoveList = new ArrayList<>(); + List shippingList = new ArrayList<>(); boolean isReport = false; boolean isMove = false; for (String orderNo : model.getMesProductionRecordMap().keySet()) { @@ -1142,7 +1147,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { isReport = true; isMove = true; } else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == record.getReportType()) { - customerSupplyMove(model, workOrder, record, mesProductVersion, findMesWorkOrderPartList(model.getMesWorkOrderPartMap(), record.getWorkOrderNo()), mesProductOffLineList, mesMoveList); + customerSupplyMove(model, workOrder, record, mesProductVersion, findMesWorkOrderPartList(model.getMesWorkOrderPartMap(), record.getWorkOrderNo()), mesProductOffLineList, mesMoveList,shippingList); } else { MesPcnException.throwMesBusiException("工单:%s汇报类型报工类型未维护", record.getWorkOrderNo()); } @@ -1154,19 +1159,25 @@ public class MesWorkOrderService implements IMesWorkOrderService { mesProductOffLineList.add(getMesProductOffLine(model, record, workOrder, mesProductVersion, mesWorkOrderPart,false)); } } - //todo 来源目标获取成品移库 + //移库 if (isMove) { - mesMoveList.add(createMove(getMesPartSap(model.getMesPartSapMap(), record.getReportPartNo()), record, "SrcErpLocation", "destErpLocation", workOrder.getErpWorkCenter(), 1d, MesExtEnumUtil.MOVE_TYPE.FINISH_PRODUCTS_MOVE.getValue(),userName)); + MesProdRuleSortCfg mesProdRuleSortCfg = getMesProdRuleSortCfg(organizeCode, record); + mesMoveList.add(createMove(getMesPartSap(model.getMesPartSapMap(), record.getReportPartNo()), record, mesProdRuleSortCfg.getSrcErpLocation(), mesProdRuleSortCfg.getDestErpLocation(), workOrder.getErpWorkCenter(), 1d, MesExtEnumUtil.MOVE_TYPE.FINISH_PRODUCTS_MOVE.getValue(),userName)); } } //保存报工记录 试制单不报工 if (CollectionUtils.isNotEmpty(mesProductOffLineList)) { + mesProductOffLineList.forEach(item -> item.setBomTotalSize(mesProductOffLineList.size())); mesProductOffLineRDao.saveAll(mesProductOffLineList); } //保存移库记录 if (CollectionUtils.isNotEmpty(mesMoveList)) { mesMoveRepository.saveAll(mesMoveList); } + //保存发运记录 + if (CollectionUtils.isNotEmpty(shippingList)) { + mesJisShippingRepository.saveAll(shippingList); + } //更新加工记录 productionRecordService.updateProductionRecord(model.getMesProductionRecordMap().get(orderNo), userName, MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue(), ""); //更新工单汇报数量 @@ -1186,10 +1197,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { } } - private MesProductVersion getProductVersion(MesWorkOrder mesWorkOrderDb) { - MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); + private MesProductVersion getProductVersion(String organizeCode,String partNo,String productVersion) { + MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersion(organizeCode,partNo,productVersion); if (null == mesProductVersion) { - MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getProductVersion()); + MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion); } return mesProductVersion; } @@ -1202,70 +1213,6 @@ public class MesWorkOrderService implements IMesWorkOrderService { return mesWorkCenter; } - private void saveMesProductPlan(MesWorkOrder bean, boolean isInsert, boolean isReport) { - if (StringUtil.isEmpty(bean.getPlanOrderNo())) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(bean.getPlanStartTime(), "planStartDate", ddlPackBean); - DdlPreparedPack.getStringEqualPack(bean.getPlanEndTime(), "planEndDate", ddlPackBean); - MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); - if (null == mesProductPlan) { - MesProductPlan mesPlanOrder = new MesProductPlan(); - mesPlanOrder.setPlanOrderNo(""); - mesPlanOrder.setPlanQty(bean.getQty()); - mesPlanOrder.setPlanPartNo(bean.getPartNo()); - mesPlanOrder.setCompleteQty(0d); - mesPlanOrder.setUncompleteQty(bean.getQty()); - mesPlanOrder.setUnit(bean.getUnit()); - mesPlanOrder.setPlanStartDate(bean.getPlanStartTime()); - mesPlanOrder.setPlanEndDate(bean.getPlanEndTime()); - mesPlanOrder.setPartMappingWorkCenterCode(bean.getErpWorkCenter()); - mesPlanOrder.setPlanOrganizeCode(bean.getOrganizeCode()); - mesPlanOrder.setOrganizeCode(bean.getOrganizeCode()); - ConvertBean.serviceModelInitialize(mesPlanOrder, bean.getCreateUser()); - mesProductPlanRDao.insert(mesPlanOrder); - } else { - if (isInsert) { - mesProductPlan.setPlanQty(MathOperation.add(mesProductPlan.getPlanQty(), bean.getQty())); - } else { - //报工 - if (isReport) { - mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); - //报工调整 - } else { - mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); - } - } - mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); - ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); - mesProductPlanRDao.update(mesProductPlan); - } - } else { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(bean.getPlanOrderNo(), "planOrderNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean); - MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean); - if (null == mesProductPlan) { - throw new ImppBusiException(String.format("SAP计划单号【%s】物料【%s】,不存在", bean.getPlanOrderNo(), bean.getPartNo())); - } - if (!isInsert) { - if (Objects.isNull(mesProductPlan.getCompleteQty())) { - mesProductPlan.setCompleteQty(0d); - } - //报工 - if (isReport) { - mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum())); - //报工调整 - } else { - mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum())); - } - mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty())); - ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser()); - mesProductPlanRDao.update(mesProductPlan); - } - } - } - @Override public List insertMesWorkOrder(List mesProductionRecordList, List mesShiftList, String organizeCode, String userName) { List mesWorkOrderList = new ArrayList<>(); @@ -1496,7 +1443,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { return model; } - private void customerSupplyMove(MesWorkOrderSortReportModel model, MesWorkOrder workOrder, MesProductionRecord record, MesProductVersion mesProductVersion, List mesWorkOrderPartList, List mesProductOffLineList, List mesMoveList) { + private void customerSupplyMove(MesWorkOrderSortReportModel model, MesWorkOrder workOrder, MesProductionRecord record, MesProductVersion mesProductVersion, List mesWorkOrderPartList, List mesProductOffLineList, List mesMoveList,List shippingList) { boolean isItemMove; boolean isItemReport; MesMoveRule moveRule; @@ -1517,6 +1464,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { isItemReport = true; } else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) { isItemMove = true; + } else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.SHIPPING.getValue() == moveRule.getReportType()) { + shippingList.add(getMesJisShipping(model.getOrganizeCode(), workOrder.getWorkOrderNo(), workOrder.getCustCode(), record.getProductSn(), moveRule.getErpSrcLocateNo(), orderPart, model.getUserName())); } else { MesPcnException.throwMesBusiException("客供品移库零件【%s】在零件生产组【%s】的移库规则中,汇报类型未维护", orderPart.getPartNo(), workOrder.getPartProdGroupCode()); } @@ -1547,8 +1496,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { isItemReport = false; isItemMove = false; moveRule = null; + MesPart itemPart = null; if (itemPartMap.containsKey(mesBom.getItemPartNo())) { - MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); + itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) { moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next(); if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) { @@ -1563,7 +1513,21 @@ public class MesWorkOrderService implements IMesWorkOrderService { } //汇报 if (isItemReport) { - mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom)); + String reportSn = String.valueOf(snowflakeIdMaker.nextId()); + MesProductVersion itemVersion = getProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion()); + List bomList = null; + try { + bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); + } catch (Exception e) { + } + //bom下的子节汇报 + if (!CollectionUtils.isEmpty(bomList)) { + for (MesBom bom : bomList) { + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, bom, reportSn, true)); + } + } else { + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, mesBom, reportSn, true)); + } } //移库 if (isItemMove) { @@ -1577,6 +1541,12 @@ public class MesWorkOrderService implements IMesWorkOrderService { mesMoveList.add(move); } } + //bom下的子节汇报,总成也需要汇报 + if (!CollectionUtils.isEmpty(mesProductOffLineList)) { + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom, productionRecord.getProductSn(), false)); + } + } } private Map> getPartSapMap(MesWorkOrder mesWorkOrder, List itemPartNoList) { @@ -1647,6 +1617,34 @@ public class MesWorkOrderService implements IMesWorkOrderService { return mesWorkOrderPartRepository.findByHqlWhere(packBean); } + private MesProdRuleSortCfg getMesProdRuleSortCfg(String organizeCode, MesProductionRecord record) { + MesProdRuleSortCfg mesProdRuleSortCfg = mesProdRuleSortCfgDao.getMesProdRuleSortCfg(organizeCode, record.getReportPartNo(), record.getWorkCenterCode()); + if(Objects.isNull(mesProdRuleSortCfg)){ + MesPcnException.throwMesBusiException("汇报零件:%s 产线:%s排序加工规则不存在", record.getReportPartNo(), record.getWorkCenterCode()); + } + return mesProdRuleSortCfg; + } + + private MesJisShipping getMesJisShipping(String organizeCode, String workOrderNo,String custCode, String productSn, String srcLocateNo, MesWorkOrderPart orderPart,String userName) { + MesJisShipping jisShipping = new MesJisShipping(); + jisShipping.setPartNo(orderPart.getPartNo()); + jisShipping.setUnit(orderPart.getItemUnit()); + jisShipping.setOrganizeCode(organizeCode); + jisShipping.setFactoryCode(organizeCode); + jisShipping.setShippingTime(TimeTool.getNowTime(true)); + jisShipping.setErpWarerhouse(srcLocateNo); + jisShipping.setCusCode(custCode); + jisShipping.setCustOrderNo(workOrderNo); + jisShipping.setShippingOrderCode(workOrderNo); + jisShipping.setSerialNumber(productSn); + jisShipping.setQuantityPerCar(orderPart.getItemQty()); + jisShipping.setOffTime(TimeTool.getNowTime(true)); + jisShipping.setFid(UUID.randomUUID().toString()); + jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelInitialize(jisShipping, userName); + return jisShipping; + } + private MesProductOffLine getMesProductOffLine(MesWorkOrderSortReportModel model, MesProductionRecord record, MesWorkOrder workOrder, MesProductVersion mesProductVersion, MesWorkOrderPart mesWorkOrderPart,boolean isItemReport) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); if(!isItemReport){