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/controller/base/ExtProdOrgController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java index 06536f0..054b419 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java @@ -7,7 +7,6 @@ import cn.estsh.i3plus.ext.mes.api.busi.IEquipmentExtService; import cn.estsh.i3plus.ext.mes.api.busi.IProdExtOrgService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; -import cn.estsh.i3plus.mes.api.iservice.base.IProdOrgService; import cn.estsh.i3plus.mes.apiservice.util.MesCommConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; 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/MesCustomerCarModelDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerCarModelDetailService.java index e4be9be..5195092 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerCarModelDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerCarModelDetailService.java @@ -21,14 +21,14 @@ public class MesCustomerCarModelDetailService 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/MesCustomerPartService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java index 8b75c33..7548b83 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartService.java @@ -94,7 +94,7 @@ public class MesCustomerPartService extends BaseMesService impl if (CollectionUtils.isEmpty(mesCustomerCarModelDetails)) { return new ArrayList<>(); } - List customerPartNoList = mesCustomerCarModelDetails.stream().map(MesCustomerCarModelDetail::getCustomerPartNo).collect(Collectors.toList()); + List customerPartNoList = mesCustomerCarModelDetails.stream().map(MesCustomerCarModelDetail::getCustPartNo).collect(Collectors.toList()); ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode()); DdlPreparedPack.getInPackList(customerPartNoList, "custPartNo", ddlPackBean); return baseRDao.findByHqlWhere(ddlPackBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDefectWarnConfigService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDefectWarnConfigService.java index 6c3cf88..cea3e0f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDefectWarnConfigService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesDefectWarnConfigService.java @@ -129,7 +129,7 @@ public class MesDefectWarnConfigService 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 70251c1..5b92cb9 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,9 +81,9 @@ 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 = Math.toIntExact(result.getProduceSeq()); + produceSeq = (long) Math.toIntExact(result.getProduceSeq()); } //生成工单号 @@ -111,9 +111,9 @@ 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 = Math.toIntExact(result.getProduceSeq()); + produceSeq = (long) Math.toIntExact(result.getProduceSeq()); } bean.setProduceSeq((long) (produceSeq + 1)); GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); @@ -259,10 +259,10 @@ public class MesWorkOrderService extends BaseMesService implements @Override protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getWorkOrderNo(), "workOrderNo", packBean); - DdlPreparedPack.getStringLikerPack(bean.getPartNameRdd(), "partNameRdd", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partNameRdd", packBean); DdlPreparedPack.getStringLikerPack(bean.getCreateUser(), "createUser", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); - DdlPreparedPack.getStringEqualPack(bean.getCustomerPartNo(), "customerPartNo", packBean); + DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "customerPartNo", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", packBean); @@ -354,7 +354,7 @@ public class MesWorkOrderService extends BaseMesService implements if (StringUtil.isEmpty(item.getPlanStartTime()) || StringUtil.isEmpty(item.getPlanEndTime())) { packPlanTime(item); } - if(StringUtil.isEmpty(item.getCustomerPartNo())){ + if(StringUtil.isEmpty(item.getCustPartNo())){ getCustomerPart(item); } //校验物料生产版本是否存在 @@ -368,7 +368,7 @@ public class MesWorkOrderService extends BaseMesService implements MesProductVersion mesProductVersion = getMesProductVersion(item, mesWorkCenter); item.setProductVersion(mesProductVersion.getProductVersion()); } - if(StringUtil.isEmpty(item.getCustomerPartNo())){ + if(StringUtil.isEmpty(item.getCustPartNo())){ getCustomerPart(item); } //拼接 @@ -378,7 +378,7 @@ public class MesWorkOrderService extends BaseMesService implements } //物料名称不存在,从物料信息中获取 MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode()); - item.setPartNameRdd(mesPart.getPartName()); + item.setPartName(mesPart.getPartName()); item.setUnit(mesPart.getUnit()); //生产时间新增取当天 if(StringUtil.isEmpty(item.getProduceTime())){ @@ -392,7 +392,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringEqualPack(item.getPartNo(), "erpPartNo", ddlPackBean); MesCustomerPart customerPart = mesCustomerPartRDao.getByProperty(ddlPackBean); if(!Objects.isNull(customerPart)){ - item.setCustomerPartNo(customerPart.getCustPartNo()); + item.setCustPartNo(customerPart.getCustPartNo()); item.setCustomerPartName(customerPart.getCustPartName()); } } @@ -537,7 +537,7 @@ public class MesWorkOrderService extends BaseMesService implements for (MesBom mesBom : mesBoms) { newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo()); - newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartNameRdd()); + newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName()); newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); newMesProductOffLine.setItemQty(mesBom.getItemQty()); 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..d4f292f --- /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.setPartName(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); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesCustomerCarModelExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesCustomerCarModelExcelService.java index 4fc7f9c..d65e190 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesCustomerCarModelExcelService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesCustomerCarModelExcelService.java @@ -322,10 +322,10 @@ public class MesCustomerCarModelExcelService implements IExcelImportService { MesCustomerCarModelDetail modelDetail = new MesCustomerCarModelDetail(); modelDetail.setOrganizeCode(organizeCode); - modelDetail.setCustomerPartNo(customerPartNo); + modelDetail.setCustPartNo(customerPartNo); modelDetail.setPartNo(partNo); modelDetail.setSupperPartNo(supperPartNo); - modelDetail.setQty(Integer.parseInt(qty)); +// modelDetail.setQty(Integer.parseInt(qty)); ConvertBean.serviceModelInitialize(modelDetail, AuthUtil.getSessionUser().getUserName()); modelDetailList.add(modelDetail); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesPartPtrExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesPartPtrExcelService.java index c326046..ce267cc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesPartPtrExcelService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/MesPartPtrExcelService.java @@ -334,19 +334,19 @@ public class MesPartPtrExcelService implements IExcelImportService { partPtr.setEndTime(endTime); partPtr.setPrtVehicleCount(Integer.parseInt(prtVehicleCount)); partPtr.setPrtVehicleActualCount(Integer.parseInt(prtVehicleActualCount)); - partPtr.setSourcePartNo(sourcePartNo); - partPtr.setTargetPartNo(targetPartNo); + partPtr.setSrcPartNo(sourcePartNo); + partPtr.setDestPartNo(targetPartNo); partPtr.setIsCustomerSendPrtInfo(Integer.parseInt(isCustomerSendPrtInfo)); partPtr.setSeqInfoPrtPart(seqInfoPrtPart); partPtr.setPtrProjectNo(ptrProjectNo); - partPtr.setTargetPartNoSnRuleCode(targetPartNoSnRuleCode); + partPtr.setReplacePartSnRule(targetPartNoSnRuleCode); partPtr.setPartTypeCode(Integer.parseInt(partTypeCode)); partPtr.setIsInterPrt(Integer.parseInt(isInterPrt)); - partPtr.setVisualSingleDisplayItem(visualSingleDisplayItem); + partPtr.setVisualItem(visualSingleDisplayItem); partPtr.setStartSeq(startSeq); - partPtr.setVisualSingleReplacePosition(visualSingleReplacePosition); - partPtr.setHardwareVersionNo(hardwareVersionNo); - partPtr.setSoftwareVersionNo(softwareVersionNo); + partPtr.setVisualReplaceIndex(visualSingleReplacePosition); + partPtr.setHardwareVersion(hardwareVersionNo); + partPtr.setSoftVersion(softwareVersionNo); partPtr.setStatus(Integer.parseInt(status)); partPtr.setMemo(memo); partPtrList.add(partPtr);