From 9338f4870afe908c0b9ced601badd61c37fb87e0 Mon Sep 17 00:00:00 2001 From: administrator Date: Tue, 4 Jun 2024 17:53:57 +0800 Subject: [PATCH] =?UTF-8?q?bto-job=E7=AC=AC=E4=B8=80=E4=B8=AA=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AE=8C=E6=88=90=EF=BC=8C=E6=8C=89=E6=97=B6=E5=9C=86?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/api/base/IMesBtoJobService.java | 19 +++ .../ext/mes/api/base/IMesCustSoftInfoService.java | 32 ++++ .../api/base/IMesCustomerMessagePointService.java | 2 +- .../ext/mes/api/base/IMesPartProdGroupService.java | 15 ++ .../mes/api/base/strategy/IRoundnessStrategy.java | 19 +++ .../ext/mes/apiservice/schedulejob/MesBtoJob.java | 80 +++++++++ .../apiservice/serviceimpl/base/MesBomService.java | 2 +- .../serviceimpl/base/MesBtoJobServiceImpl.java | 77 +++++++++ .../base/MesCustSoftInfoServiceImpl.java | 38 +++++ .../base/MesCustomerMessagePointService.java | 11 ++ .../serviceimpl/base/MesPartProdGroupService.java | 14 ++ .../serviceimpl/base/MesWorkOrderService.java | 4 +- .../base/roundness/MesTimeRoundnessService.java | 179 +++++++++++++++++++++ 13 files changed, 488 insertions(+), 4 deletions(-) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustSoftInfoService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/strategy/IRoundnessStrategy.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesBtoJob.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java new file mode 100644 index 0000000..651cb54 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 11:47 + * @Modify: + **/ +public interface IMesBtoJobService { + /** + * 定时job生成bto工单 + * @param organizeCode + * @param groupCodeList + */ + void doCreateBto(String organizeCode, List groupCodeList); +} 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 new file mode 100644 index 0000000..c3a2dbd --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustSoftInfoService.java @@ -0,0 +1,32 @@ +package cn.estsh.i3plus.ext.mes.api.base; + + +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 20:38 + * @Modify: + **/ +public interface IMesCustSoftInfoService extends IBaseMesService { + /** + * 获取客户排序信息 + * @param custCode + * @param custOrganizeCode + * @param infoPointCode + * @param organizeCode + * @param custPartNoList + * @return + */ + List queryCustSortInfoList(String custCode,String custOrganizeCode,String infoPointCode,String organizeCode,List custPartNoList); + + /** + * 更新custSortInfo + * @param custSortInfo + */ + void updateCustSortInfo(MesCustSortInfo custSortInfo); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerMessagePointService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerMessagePointService.java index 47f7cb9..a9c6520 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerMessagePointService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerMessagePointService.java @@ -9,5 +9,5 @@ import cn.estsh.i3plus.pojo.mes.bean.MesCustomerMessagePoint; */ public interface IMesCustomerMessagePointService extends IBaseMesService { - + MesCustomerMessagePoint getPointByCode(String pointCode,String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java index 6334af6..ec73196 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java @@ -13,4 +13,19 @@ import java.util.List; public interface IMesPartProdGroupService extends IBaseMesService { List findMesPartProdGroup(MesPartProdGroupDetail mesPartProdGroupDetail); + + /** + * 根据工厂和零件生产组code获取零件生产组 + * @param organizeCode + * @param groupCodeList + * @return + */ + List findMesPartProdGroups(String organizeCode, List groupCodeList); + + /** + * 根据pid获取零件生产组详情 + * @param partGroupCode + * @return + */ + List findDetailByCode(String partGroupCode,String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/strategy/IRoundnessStrategy.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/strategy/IRoundnessStrategy.java new file mode 100644 index 0000000..1697252 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/strategy/IRoundnessStrategy.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.api.base.strategy; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; + +import java.util.List; + +/** + * @Description : 圆整策略 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 21:21 + * @Modify: + **/ +public interface IRoundnessStrategy { + + void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesBtoJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesBtoJob.java new file mode 100644 index 0000000..a1f975d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesBtoJob.java @@ -0,0 +1,80 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesBtoJobService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +/* +入参 +{ + "organizeCode": "CK01", + "partGroupCode": [ + "CK01-Code", + "CK02-Code" + ] + +} + */ +/** + * @Description : BTO生成工单 + * @Reference : + * @Author : castle + * @CreateDate : 2024-05-10 11:03 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@Component +@ApiOperation("Bto-job") +public class MesBtoJob extends BaseMesScheduleJob { + public static final Logger LOGGER = LoggerFactory.getLogger(MesBtoJob.class); + + @Autowired + private IMesBtoJobService btoJobService; + + public MesBtoJob() { + super(MesBtoJob.class, "BTO生成工单"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + String jobParam = this.getJobParam(); + + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("jobc参数为空,请检查参数"); + } + Map paramMap; + try { + paramMap = (Map) JSONObject.parse(jobParam); + } catch (Exception e) { + LOGGER.error("参数格式不是JSON"); + return; + + } + if (CollectionUtils.isEmpty(paramMap)) { + LOGGER.error("BTO生成工单,没有配置参数"); + return; + } + String organizeCode = (String) paramMap.get("organizeCode"); + List groupCodeList = (List) paramMap.get("groupCode"); + btoJobService.doCreateBto(organizeCode, groupCodeList); + LOGGER.info("缺陷告警配置job结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("SAP接口表数据同步作业任务结束e:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index 72c396e..0f67529 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -87,7 +87,7 @@ public class MesBomService extends BaseMesService implements IMesBomServ new Object[]{CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), bom.getOrganizeCode(), bom.getItemPartNo()}); recursionBomList(resultList); - bom.setChildTreeList(resultList); +// bom.setChildTreeList(resultList); } } return bomList; 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 new file mode 100644 index 0000000..00f00a1 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java @@ -0,0 +1,77 @@ +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.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.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 11:51 + * @Modify: + **/ +@Service +@Slf4j +public class MesBtoJobServiceImpl implements IMesBtoJobService { + @Autowired + private MesPartProdGroupService mesPartProdGroupService; + + @Autowired + private MesCustomerMessagePointService mesCustomerMessagePointService; + + @Autowired + private MesCustSoftInfoServiceImpl mesCustSoftInfoService; + @Override + public void doCreateBto(String organizeCode, List groupCodeList) { + //1. 根据 organizeCode 和 groupCodeList 查询零件生产组 + List mesPartProdGroups = mesPartProdGroupService.findMesPartProdGroups(organizeCode, groupCodeList); + for (MesPartProdGroup prodGroup : mesPartProdGroups) { + //2. 根据生产组的infoPointId 获取 过点信息TM_BAS_INFO_POINT + MesCustomerMessagePoint messagePoint = mesCustomerMessagePointService.getPointByCode(prodGroup.getCustInfoPoint(),organizeCode); + if (messagePoint == null){ + log.info("客户的信息点{}不存在",prodGroup.getCustInfoPoint()); + } + //3. 根据零件生产组中reuseSoftInfo 获取排序信息 + // Integer isReuseSortInfo = prodGroup.getIsReuseSortInfo(); + List details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode); + List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); + List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); + //4. 如果没有订单需要更新窗口时间 TM_BAS_PRODUCT_GROUP_WINDOW_TIME + //5. 根据零件生产组中是否有assyCode(总成类型),去校验 客户排序信息中,是否包含了零件发运组的零件 + // custsortinfolist.where(c=> partproductgroupinfo.AssCode.contains(c.AssCode)) == 0 直接返回 + List countInfo = sortInfoList.stream().filter(item -> item.getAssyCode().equals(prodGroup.getPartType())).collect(Collectors.toList()); + if (countInfo.isEmpty()){ + continue; + } + //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 + String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundType()); + IRoundnessStrategy roundnessStrategy = (IRoundnessStrategy)SpringContextsUtil.getBean(roundnessService); + roundnessStrategy.execute(prodGroup,sortInfoList, details); + } + } + + /** + * 排序信息不复用的时候 + * @param infoPointCode + * @param organizeCode + * @param partGroupId + * @return + */ + private List getCustSortInfoList(String infoPointCode, String organizeCode, Long partGroupId,String partGroupCode){ + + + return null; + } +} 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 new file mode 100644 index 0000000..eea273c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 20:39 + * @Modify: + **/ +@Service +public class MesCustSoftInfoServiceImpl extends BaseMesService implements IMesCustSoftInfoService { + @Override + public List queryCustSortInfoList(String custCode, String custOrganizeCode, String infoPointCode, String organizeCode, List custPartNoList) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custCode,"custCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(custOrganizeCode, "custOrganizeCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(infoPointCode, "infoPointCode", ddlPackBean); + DdlPreparedPack.getInPackList(custPartNoList,"custPartNo", ddlPackBean); + return baseRDao.findByHqlWhere(ddlPackBean); + } + + @Override + public void updateCustSortInfo(MesCustSortInfo custSortInfo) { + ConvertBean.saveOrUpdate(custSortInfo,"edi"); + baseRDao.update(custSortInfo); + + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerMessagePointService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerMessagePointService.java index ff73a47..59d81f7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerMessagePointService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerMessagePointService.java @@ -11,6 +11,9 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service @Slf4j public class MesCustomerMessagePointService extends BaseMesService implements IMesCustomerMessagePointService { @@ -54,4 +57,12 @@ public class MesCustomerMessagePointService extends BaseMesService messagePoints = baseRDao.findByHqlWhere(ddlPackBean); + return messagePoints.isEmpty() ? null: messagePoints.get(0); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java index a975a12..341185e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java @@ -19,6 +19,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -44,6 +45,19 @@ public class MesPartProdGroupService extends BaseMesService im return baseRDao.findByHqlWhere(ddlPackBean); } + @Override + public List findMesPartProdGroups(String organizeCode, List groupCodeList) { + DdlPackBean partGroupPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(groupCodeList,"partProdGroupCode",partGroupPackBean); + return baseRDao.findByHqlWhere(partGroupPackBean); + } + + @Override + public List findDetailByCode(String partGroupCode,String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partGroupCode,"partProdGroupCode",ddlPackBean); + return mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean); + } protected void setPackQueryBean(MesPartProdGroup bean, DdlPackBean packBean) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 1d495df..fcb36bc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -81,7 +81,7 @@ public class MesWorkOrderService extends BaseMesService implements GenSerialNoModel genSerialNoModel = new GenSerialNoModel(); //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - Integer produceSeq = 0; + Long produceSeq = 0L; if (null != result && result.getProduceSeq() != null) { produceSeq = result.getProduceSeq(); } @@ -111,7 +111,7 @@ public class MesWorkOrderService extends BaseMesService implements } else { //生成工单号 genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO); - Integer produceSeq = 0; + Long produceSeq = 0L; if (null != result && result.getProduceSeq() != null) { produceSeq = result.getProduceSeq(); } 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 new file mode 100644 index 0000000..4d655db --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java @@ -0,0 +1,179 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.roundness; + +import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesCustSoftInfoServiceImpl; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +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.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.repository.IMesProdGroupPartBtoCountRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPartSapRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Description : 按时圆整,交给spring做策略 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 21:22 + * @Modify: + **/ +@Service +public class MesTimeRoundnessService implements IRoundnessStrategy { + + private static final Logger log = LoggerFactory.getLogger(MesTimeRoundnessService.class); + @Autowired + private IMesProdGroupPartBtoCountRepository btoCountRao; + + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRao; + + @Autowired + private MesWorkOrderRepository mesWorkOrderRao; + + @Autowired + private MesCustSoftInfoServiceImpl custSoftInfoService; + + @Override + public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { + DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + Long createSeq = Long.parseLong(dateFormat.format(new Date())); + //遍历零件生产组零件,过滤出 + for (MesPartProdGroupDetail detail : details) { + //根据detail.id 获取 + MesProdGroupPartBtoCount btoCountInfo = getByGroupPartId(detail.getId(), detail.getOrganizeCode()); + //历史累计差异 + double btoCount = btoCountInfo.getCurrentQty(); + //获取圆整数量 + double roundQty = detail.getRoundQty(); + List sortInfos = sortInfoList.stream().filter(info -> info.getCustPartNo().equals(detail.getCustPartNo())).collect(Collectors.toList()); + if (sortInfos.isEmpty()) { + continue; + } + //本次排序需要的数量 + Double qty = sortInfoList.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get() * detail.getProductPartQty(); + qty -= btoCount; + //倍数 + int multiple; + //如果上次累计的差异值大于当前排序信息累计值,则不需要生成加工单 + if (qty <= 0) { + multiple = 0; + } else { + //看看多少倍,乘以圆整数量就是需求数,QTY就是多累积数 + multiple = (int) Math.round(Math.ceil(Math.ceil(qty / roundQty))); + } + + //获取生产零件信息 + MesPartSap mesPartSap = getMesPart(detail.getProductPartNo(), detail.getOrganizeCode()); + if (mesPartSap.getId() == null) { + log.info("零件生成组零件:{}找不到对应的零件信息", detail.getProductPartNo()); + throw ImppExceptionBuilder.newInstance().setErrorDetail("零件生成组零件:{}找不到对应的零件信息", detail.getProductPartNo()).build(); + } + MesWorkOrder mesWorkOrder = new MesWorkOrder(); + mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.BTO.getValue()); + mesWorkOrder.setWorkOrderSeq(createSeq.toString()); + mesWorkOrder.setProduceSeq(createSeq); + mesWorkOrder.setOrganizeCode(detail.getOrganizeCode()); + //产线 + mesWorkOrder.setWorkCenterCode(detail.getWorkCenterCode()); + //工位 + mesWorkOrder.setWorkCellCode(detail.getWorkCellCode()); + //生产日期,计划时间 + List sortInfosSorted = sortInfos.stream().sorted(Comparator.comparing(MesCustSortInfo::getMatchTime)).collect(Collectors.toList()); +// workorderinfo.ProductDate = custsortinfopartlist.Min(d => d.MatchTime.GetValueOrDefault()).ToString("yyyy-MM-dd"); +// workorderinfo.PlanStartTime = custsortinfopartlist.Min(d => d.MatchTime.GetValueOrDefault()); +// workorderinfo.PlanEndTime = custsortinfopartlist.Max(d => d.MatchTime.GetValueOrDefault()); + // 10. 根据工厂,产线,planStartTime 获取班次名称 + String matchTime = sortInfosSorted.get(0).getMatchTime(); + // 11. 是否将生成日期减一天 + // 12.零件相关 + mesWorkOrder.setPartNo(mesPartSap.getPartNo()); + mesWorkOrder.setPartNameRdd(mesPartSap.getPartName()); + // 13.生产版本 organizeCode + partNo + MesProductVersion prodVersion = getProdVersion(detail.getOrganizeCode(), mesPartSap.getPartNo()); + if (prodVersion == null) { + log.info("请配置工厂:{},partNo:{}的生产版本", detail.organizeCode, mesPartSap.getPartNo()); + } + String productVersion = prodVersion.getProductVersion(); + mesWorkOrder.setProductVersion(productVersion); + // 14.bomCode partNo + 生产版本+ organizeCode + // 数量 + double realQty = roundQty * multiple; + mesWorkOrder.setQty(realQty); + mesWorkOrder.setUnCompleteQty(realQty); + mesWorkOrder.setUnit(mesPartSap.getUnit()); + if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + mesWorkOrder.setStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + } else { + mesWorkOrder.setStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + } + mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + + //bto + btoCountInfo.setGroupPartId(detail.getId()); + btoCountInfo.setOrganizeCode(detail.getOrganizeCode()); + btoCountInfo.setRoundnessQty(roundQty); + btoCountInfo.setCurrentQty(realQty-qty); + ConvertBean.saveOrUpdate(btoCountInfo,"edi"); + btoCountRao.save(btoCountInfo); + + // 保存工单 + ConvertBean.saveOrUpdate(mesWorkOrder, "edi"); + mesWorkOrderRao.insert(mesWorkOrder); + //更新 custSortInfo 状态已解析 + for (MesCustSortInfo sortInfo : sortInfos) { + sortInfo.setServiceFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + custSoftInfoService.updateCustSortInfo(sortInfo); + } + + } + + } + + + private MesProdGroupPartBtoCount getByGroupPartId(Long groupPartId, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(groupPartId, "groupPartId", ddlPackBean); + List btoCountList = btoCountRao.findByHqlWhere(ddlPackBean); + return btoCountList.isEmpty() ? new MesProdGroupPartBtoCount() : btoCountList.get(0); + } + + private MesPartSap getMesPart(String productPartNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo, "partNo", ddlPackBean); + List parts = mesPartSapRao.findByHqlWhere(ddlPackBean); + return parts.isEmpty() ? new MesPartSap() : parts.get(0); + } + + private MesProductVersion getProdVersion(String organizeCode, String partNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + List mesProductVersionList = mesProductVersionRao.findByHqlWhere(ddlPackBean); + return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); + } + + public static void main(String[] args) { + double qty = 7.00; + double roundQty = 3.00; + int multiple = (int) Math.round(Math.ceil(Math.ceil(qty / roundQty))); + System.out.println(multiple); + } +}