diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustSoftInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustSoftInfoService.java index c3a2dbd..c79833c 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustSoftInfoService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustSoftInfoService.java @@ -24,9 +24,12 @@ public interface IMesCustSoftInfoService extends IBaseMesService queryCustSortInfoList(String custCode,String custOrganizeCode,String infoPointCode,String organizeCode,List custPartNoList); + List queryAllCustSortInfoList(String organizeCode); /** * 更新custSortInfo * @param custSortInfo */ void updateCustSortInfo(MesCustSortInfo custSortInfo); + + void updateMsgCustSortInfo(MesCustSortInfo custSortInfo); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java index 52024b2..3f074ff 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java @@ -1,9 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; -import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesAccountJob; -import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesDowntimeRecordJob; -import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesGenerateAccountJob; -import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesWorkOrderUpdateQtyJob; +import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.*; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -27,6 +24,9 @@ public class TestController { @Autowired private MesDowntimeRecordJob mesDowntimeRecordJob; + @Autowired + private MesQmsScrapJob mesQmsScrapJob; + @GetMapping("/reportOrder") @ApiOperation(value = "报工") public void reportOrder() { @@ -51,4 +51,11 @@ public class TestController { public void mesDowntimeRecordJob() { mesDowntimeRecordJob.executeMesJob(null, null); } + + + @GetMapping("/mesQmsScrap") + @ApiOperation(value = "mesQmsScrap") + public void mesQmsScrap() { + mesQmsScrapJob.executeMesJob(null, null); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java index f6d52bd..cf5764f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java @@ -20,6 +20,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; @@ -35,6 +36,7 @@ import java.util.List; **/ @DisallowConcurrentExecution @ApiOperation("MES_QMS报废品汇总Job") +@Service public class MesQmsScrapJob extends BaseMesScheduleJob { public static final Logger LOGGER = LoggerFactory.getLogger(MesQmsScrapJob.class); @@ -74,17 +76,19 @@ public class MesQmsScrapJob extends BaseMesScheduleJob { DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue(), "inspectionStatus", packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue(), "ncStatus", packBean); //查同步标识为3的数据,如果接口映射同步,则更新为1 - DdlPreparedPack.getNumEqualPack(3, "systemSyncStatus", packBean); + DdlPreparedPack.getNumNOEqualPack(1, "systemSyncStatus", packBean); DdlPreparedPack.timeBuilder( new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)) + " 00:00:00", TimeTool.getToday() + " 00:00:00", "createDatetime", packBean, true); List mesPartInspectionList = partInspectionRepository.findByHqlWhere(packBean); if (!CollectionUtils.isEmpty(mesPartInspectionList)) { + LOGGER.info("一共需要汇总{}条报废数据2", mesPartInspectionList.size()); + qmsScrapService.doQmsScrapByPartInspection(mesPartInspectionList, organizeCode); for (MesPartInspection mesPartInspection : mesPartInspectionList) { - mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); // ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB); } partInspectionRepository.saveAll(mesPartInspectionList); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java index cab65ba..326de45 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java @@ -2,17 +2,18 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesBtoJobService; import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesCustomerMessagePoint; -import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; -import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; -import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupWindowTime; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.repository.MesCustSoftInfoRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesCustomerPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupWindowTimeRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -41,7 +42,8 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { @Autowired private MesCustSoftInfoServiceImpl mesCustSoftInfoService; - + @Autowired + private MesCustSoftInfoRepository mesCustSoftInfoRepository; @Autowired private MesPartProdGroupWindowTimeRepository windowTimeRao; @@ -50,6 +52,9 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { public void doCreateBto(String organizeCode, List groupCodeList) { //1. 根据 organizeCode 和 groupCodeList 查询零件生产组 List mesPartProdGroups = mesPartProdGroupService.findMesPartProdGroups(organizeCode, groupCodeList); + // 初始找原因 + updateCustsort(organizeCode, mesPartProdGroups); + for (MesPartProdGroup prodGroup : mesPartProdGroups) { //2. 根据生产组的infoPointCode 获取 过点信息MES_CUSTOMER_MESSAGE_POINT MesCustomerMessagePoint messagePoint = mesCustomerMessagePointService.getPointByCode(prodGroup.getCustInfoPoint(),organizeCode); @@ -66,6 +71,9 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); + // List allSortInfoList = mesCustSoftInfoService.queryAllCustSortInfoList(organizeCode); + + //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundMethod()); if (sortInfoList.isEmpty()){ @@ -122,6 +130,23 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { } + private void updateCustsort(String organizeCode, List mesPartProdGroups) { + List allDetails = new ArrayList<>(); + for (MesPartProdGroup prodGroup : mesPartProdGroups) { + List details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode); + allDetails.addAll(details); + } + List allCustPartNoList = allDetails.stream().map(MesPartProdGroupDetail::getCustPartNo).distinct().collect(Collectors.toList()); + List allCustSortInfoList = mesCustSoftInfoService.queryAllCustSortInfoList(organizeCode); + for (MesCustSortInfo mesCustSortInfo : allCustSortInfoList) { + if (!allCustPartNoList.contains(mesCustSortInfo.getCustPartNo())) { + String msg = String.format("客户零件号:%s,零件号:%s,未配置零件生产组明细", mesCustSortInfo.getCustPartNo(), mesCustSortInfo.getErpPartNo()); + mesCustSortInfo.setDescription(msg); + } + } + mesCustSoftInfoRepository.saveAll(allCustSortInfoList); + } + /** * 排序信息不复用的时候 * @param infoPointCode diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java index 710c9ce..0bd8fba 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java @@ -33,10 +33,25 @@ public class MesCustSoftInfoServiceImpl extends BaseMesService } @Override + public List queryAllCustSortInfoList(String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"serviceFlag", ddlPackBean); + return baseRDao.findByHqlWhere(ddlPackBean); + } + + @Override public void updateCustSortInfo(MesCustSortInfo custSortInfo) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(custSortInfo.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(custSortInfo.getId(),"id",ddlPackBean); - baseRDao.updateByProperties(new String[]{"serviceFlag","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"edi", TimeTool.getNowTime(true)},ddlPackBean); + baseRDao.updateByPropertiesNoSync(new String[]{"serviceFlag","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"edi", TimeTool.getNowTime(true)},ddlPackBean); + + } + + @Override + public void updateMsgCustSortInfo(MesCustSortInfo custSortInfo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(custSortInfo.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(custSortInfo.getId(),"id",ddlPackBean); + baseRDao.updateByProperties(new String[]{"description","modifyUser","modifyDatetime"},new Object[]{custSortInfo.getDescription(),"edi", TimeTool.getNowTime(true)},ddlPackBean); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java index 3cc719c..3561149 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java @@ -46,6 +46,9 @@ public class MesQmsScrapService extends BaseMesService implements I //43326 电子化检验,发送给QMS的数据,按照零件号+责任人类型分组发送 Map> workOrderPartMap = mesPartInspectionList.stream().collect(Collectors.groupingBy(p -> p.getPartNo() +"="+p.getResponsibleParty())); //根据物料对可疑品分组 + List qmsScrapList = new ArrayList<>(); + log.info("一共需要汇总{}条报废数据2", workOrderPartMap.size()); + for (Map.Entry> stringListEntry : workOrderPartMap.entrySet()) { String keyPartNo = stringListEntry.getKey().split("=")[0]; List mesPartInspections = stringListEntry.getValue(); @@ -69,8 +72,10 @@ public class MesQmsScrapService extends BaseMesService implements I mesQmsScrap.setReponsibilityId(next.getResponsibleParty()); mesQmsScrap.setNcJudger(next.getModifyUser()); ConvertBean.serviceModelInitialize(mesQmsScrap, "MesScrapJob"); - - baseRDao.insert(mesQmsScrap); + qmsScrapList.add(mesQmsScrap); } + log.info("一共需要汇总{}条报废数据3", qmsScrapList.size()); + baseRDao.saveAll(qmsScrapList); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java index c33db46..eb2df98 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; @@ -112,11 +113,28 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { //看看多少倍,乘以圆整数量就是需求数,QTY就是多累积数 multiple = (int) Math.round(Math.ceil(Math.ceil(qty / roundQty))); } + if (StringUtil.isEmpty(detail.getProductPartNo())) { + String msg = String.format("零件生生产组:%s,客户零件号:%s没有配置生产零件号", detail.getPartProdGroupName(), detail.getCustPartNo()); + log.info("零件生生产组:{},客户零件号:{}s没有配置生产零件号", partProdGroup.getPartProdGroupName(), detail.getCustPartNo()); + //更新 custSortInfo 状态已解析 + for (MesCustSortInfo sortInfo : sortInfos) { + sortInfo.setDescription(msg); + custSoftInfoService.updateMsgCustSortInfo(sortInfo); + } + continue; + } //获取生产零件信息 MesPartSap mesPartSap = getMesPart(detail.getProductPartNo(), detail.getOrganizeCode()); if (mesPartSap.getId() == null) { + String msg = String.format("零件生生产组:%s,生产零件:%s找不到对应的零件信息", partProdGroup.getPartProdGroupName(), detail.getProductPartNo()); log.info("零件生生产组:{},生产零件:{}找不到对应的零件信息", partProdGroup.getPartProdGroupName(), detail.getProductPartNo()); + + //更新 custSortInfo 状态已解析 + for (MesCustSortInfo sortInfo : sortInfos) { + sortInfo.setDescription(msg); + custSoftInfoService.updateMsgCustSortInfo(sortInfo); + } continue; // throw ImppExceptionBuilder.newInstance().setErrorDetail("零件生成组零件:{}找不到对应的零件信息", detail.getProductPartNo()).build(); } @@ -152,7 +170,8 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { DdlPreparedPack.getStringEqualPack(detail.getWorkCenterCode(), "workCenterCode", workCenterPackBean); List centerList = mesWorkCenterRao.findByHqlWhere(workCenterPackBean); if (!centerList.isEmpty()) { - mesWorkOrder.setErpWorkCenter(centerList.get(0).getErpWorkCenter()); + // 2024-10-30 BTO的工作中心需要用生产版本的工作中心,而不是取的产线 + //mesWorkOrder.setErpWorkCenter(centerList.get(0).getErpWorkCenter()); } //产线 mesWorkOrder.setWorkCenterCode(detail.getWorkCenterCode()); @@ -210,6 +229,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { }else { String productVersion = prodVersion.getProductVersion(); mesWorkOrder.setProductVersion(productVersion); + mesWorkOrder.setErpWorkCenter(prodVersion.getWorkCenterCode()); } // 14.bomCode partNo + 生产版本+ organizeCode // 数量