tags/yfai-mes-ext-v1.0
gsz 11 months ago
commit cee870bf8c

@ -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 {
/**
* jobbto
* @param organizeCode
* @param groupCodeList
*/
void doCreateBto(String organizeCode, List<String> groupCodeList);
}

@ -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<MesCustSortInfo> {
/**
*
* @param custCode
* @param custOrganizeCode
* @param infoPointCode
* @param organizeCode
* @param custPartNoList
* @return
*/
List<MesCustSortInfo> queryCustSortInfoList(String custCode,String custOrganizeCode,String infoPointCode,String organizeCode,List<String> custPartNoList);
/**
* custSortInfo
* @param custSortInfo
*/
void updateCustSortInfo(MesCustSortInfo custSortInfo);
}

@ -9,5 +9,5 @@ import cn.estsh.i3plus.pojo.mes.bean.MesCustomerMessagePoint;
*/
public interface IMesCustomerMessagePointService extends IBaseMesService<MesCustomerMessagePoint> {
MesCustomerMessagePoint getPointByCode(String pointCode,String organizeCode);
}

@ -13,4 +13,19 @@ import java.util.List;
public interface IMesPartProdGroupService extends IBaseMesService<MesPartProdGroup> {
List<MesPartProdGroup> findMesPartProdGroup(MesPartProdGroupDetail mesPartProdGroupDetail);
/**
* code
* @param organizeCode
* @param groupCodeList
* @return
*/
List<MesPartProdGroup> findMesPartProdGroups(String organizeCode, List<String> groupCodeList);
/**
* pid
* @param partGroupCode
* @return
*/
List<MesPartProdGroupDetail> findDetailByCode(String partGroupCode,String organizeCode);
}

@ -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<MesCustSortInfo> sortInfoList, List<MesPartProdGroupDetail> details);
}

@ -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;

@ -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<String, Object> paramMap;
try {
paramMap = (Map<String, Object>) 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<String> groupCodeList = (List<String>) paramMap.get("groupCode");
btoJobService.doCreateBto(organizeCode, groupCodeList);
LOGGER.info("缺陷告警配置job结束 ----- end");
} catch (Exception e) {
LOGGER.error("SAP接口表数据同步作业任务结束e:{}", e.toString());
}
}
}

@ -87,7 +87,7 @@ public class MesBomService extends BaseMesService<MesBom> 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;

@ -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<String> groupCodeList) {
//1. 根据 organizeCode 和 groupCodeList 查询零件生产组
List<MesPartProdGroup> 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<MesPartProdGroupDetail> details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode);
List<String> custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList());
List<MesCustSortInfo> 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<MesCustSortInfo> 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<MesCustSortInfo> getCustSortInfoList(String infoPointCode, String organizeCode, Long partGroupId,String partGroupCode){
return null;
}
}

@ -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<MesCustSortInfo> implements IMesCustSoftInfoService {
@Override
public List<MesCustSortInfo> queryCustSortInfoList(String custCode, String custOrganizeCode, String infoPointCode, String organizeCode, List<String> 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);
}
}

@ -21,14 +21,14 @@ public class MesCustomerCarModelDetailService extends BaseMesService<MesCustomer
// 数据校验
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getCustomerPartNo(), "customerPartNo", roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getCustPartNo(), "customerPartNo", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("客户零件号【%s】已经存在请检查数据", item.getCustomerPartNo())
.setErrorDetail("客户零件号【%s】已经存在请检查数据", item.getCustPartNo())
.build();
}
@ -38,7 +38,7 @@ public class MesCustomerCarModelDetailService extends BaseMesService<MesCustomer
// 数据校验
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getCustomerPartNo(), "customerPartNo", roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getCustPartNo(), "customerPartNo", roadPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
@ -46,7 +46,7 @@ public class MesCustomerCarModelDetailService extends BaseMesService<MesCustomer
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("客户零件号【%s】已经存在请检查数据", item.getCustomerPartNo())
.setErrorDetail("客户零件号【%s】已经存在请检查数据", item.getCustPartNo())
.build();
}
}

@ -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<MesCustomerMessagePoint> implements IMesCustomerMessagePointService {
@ -54,4 +57,12 @@ public class MesCustomerMessagePointService extends BaseMesService<MesCustomerMe
protected void setPackQueryBean(MesCustomerMessagePoint bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getCustOrganizeCode(), "custOrganizeCode", packBean);
}
@Override
public MesCustomerMessagePoint getPointByCode(String pointCode, String organizeCode) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(pointCode, "messageNo", ddlPackBean);
List<MesCustomerMessagePoint> messagePoints = baseRDao.findByHqlWhere(ddlPackBean);
return messagePoints.isEmpty() ? null: messagePoints.get(0);
}
}

@ -94,7 +94,7 @@ public class MesCustomerPartService extends BaseMesService<MesCustomerPart> impl
if (CollectionUtils.isEmpty(mesCustomerCarModelDetails)) {
return new ArrayList<>();
}
List<String> customerPartNoList = mesCustomerCarModelDetails.stream().map(MesCustomerCarModelDetail::getCustomerPartNo).collect(Collectors.toList());
List<String> customerPartNoList = mesCustomerCarModelDetails.stream().map(MesCustomerCarModelDetail::getCustPartNo).collect(Collectors.toList());
ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode());
DdlPreparedPack.getInPackList(customerPartNoList, "custPartNo", ddlPackBean);
return baseRDao.findByHqlWhere(ddlPackBean);

@ -129,7 +129,7 @@ public class MesDefectWarnConfigService extends BaseMesService<MesDefectWarnConf
MesDefectWarnConfig config = new MesDefectWarnConfig();
config.setPartNo(part.getPartNo());
config.setPartName(part.getPartName());
// config.setPartName(part.getPartName());
config.setDefectTypeCode(defect.getDefectTypeCode());
config.setDefectTypeName(defect.getDefectTypeName());
config.setDefectLocation(model.getDefectLocation());

@ -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<MesPartProdGroup> im
return baseRDao.findByHqlWhere(ddlPackBean);
}
@Override
public List<MesPartProdGroup> findMesPartProdGroups(String organizeCode, List<String> groupCodeList) {
DdlPackBean partGroupPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(groupCodeList,"partProdGroupCode",partGroupPackBean);
return baseRDao.findByHqlWhere(partGroupPackBean);
}
@Override
public List<MesPartProdGroupDetail> 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) {

@ -81,9 +81,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> 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<MesWorkOrder> 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<MesWorkOrder> 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<MesWorkOrder> 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<MesWorkOrder> 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<MesWorkOrder> 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<MesWorkOrder> 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<MesWorkOrder> 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());

@ -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<MesCustSortInfo> sortInfoList, List<MesPartProdGroupDetail> 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<MesCustSortInfo> 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<MesCustSortInfo> 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<MesProdGroupPartBtoCount> 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<MesPartSap> 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<MesProductVersion> 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);
}
}

@ -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);

@ -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);

Loading…
Cancel
Save