增加BTO缺失字段

tags/yfai-mes-ext-v1.0
administrator 11 months ago
parent ebeeabeb7f
commit 76628d0151

@ -38,7 +38,7 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
//1. 根据 organizeCode 和 groupCodeList 查询零件生产组 //1. 根据 organizeCode 和 groupCodeList 查询零件生产组
List<MesPartProdGroup> mesPartProdGroups = mesPartProdGroupService.findMesPartProdGroups(organizeCode, groupCodeList); List<MesPartProdGroup> mesPartProdGroups = mesPartProdGroupService.findMesPartProdGroups(organizeCode, groupCodeList);
for (MesPartProdGroup prodGroup : mesPartProdGroups) { for (MesPartProdGroup prodGroup : mesPartProdGroups) {
//2. 根据生产组的infoPointId 获取 过点信息TM_BAS_INFO_POINT //2. 根据生产组的infoPointCode 获取 过点信息MES_CUSTOMER_MESSAGE_POINT
MesCustomerMessagePoint messagePoint = mesCustomerMessagePointService.getPointByCode(prodGroup.getCustInfoPoint(),organizeCode); MesCustomerMessagePoint messagePoint = mesCustomerMessagePointService.getPointByCode(prodGroup.getCustInfoPoint(),organizeCode);
if (messagePoint == null){ if (messagePoint == null){
log.info("客户的信息点{}不存在",prodGroup.getCustInfoPoint()); log.info("客户的信息点{}不存在",prodGroup.getCustInfoPoint());

@ -2,16 +2,17 @@ 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.api.base.strategy.IRoundnessStrategy;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesCustSoftInfoServiceImpl; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesCustSoftInfoServiceImpl;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; 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.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo;
import cn.estsh.i3plus.pojo.mes.repository.IMesProdGroupPartBtoCountRepository; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.MesPartSapRepository; import cn.estsh.i3plus.pojo.mes.repository.*;
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.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -20,7 +21,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -52,98 +55,158 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
@Autowired @Autowired
private MesCustSoftInfoServiceImpl custSoftInfoService; private MesCustSoftInfoServiceImpl custSoftInfoService;
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private MesWorkCenterRepository mesWorkCenterRao;
@Autowired
private MesShiftRepository mesShiftRao;
@Override @Override
public void execute(MesPartProdGroup partProdGroup, List<MesCustSortInfo> sortInfoList, List<MesPartProdGroupDetail> details) { public void execute(MesPartProdGroup partProdGroup, List<MesCustSortInfo> sortInfoList, List<MesPartProdGroupDetail> details) {
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Long createSeq = Long.parseLong(dateFormat.format(new Date())); Long createSeq = Long.parseLong(dateFormat.format(new Date()));
//遍历零件生产组零件,过滤出 try {
for (MesPartProdGroupDetail detail : details) { //遍历零件生产组零件,过滤出
//根据detail.id 获取 for (MesPartProdGroupDetail detail : details) {
MesProdGroupPartBtoCount btoCountInfo = getByGroupPartId(detail.getId(), detail.getOrganizeCode()); //根据detail.id 获取
//历史累计差异 MesProdGroupPartBtoCount btoCountInfo = getByGroupPartId(detail.getId(), detail.getOrganizeCode());
double btoCount = btoCountInfo.getCurrentQty(); //历史累计差异
//获取圆整数量 double btoCount = btoCountInfo.getCurrentQty();
double roundQty = detail.getRoundQty(); //获取圆整数量
List<MesCustSortInfo> sortInfos = sortInfoList.stream().filter(info -> info.getCustPartNo().equals(detail.getCustPartNo())).collect(Collectors.toList()); double roundQty = detail.getRoundQty();
if (sortInfos.isEmpty()) { List<MesCustSortInfo> sortInfos = sortInfoList.stream().filter(info -> info.getCustPartNo().equals(detail.getCustPartNo())).collect(Collectors.toList());
continue; if (sortInfos.isEmpty()) {
} continue;
//本次排序需要的数量 }
Double qty = sortInfoList.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get() * detail.getProductPartQty(); //本次排序需要的数量
qty -= btoCount; double qty = sortInfos.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get() * detail.getProductPartQty();
//倍数 qty -= btoCount;
int multiple; //倍数
//如果上次累计的差异值大于当前排序信息累计值,则不需要生成加工单 int multiple;
if (qty <= 0) { //如果上次累计的差异值大于当前排序信息累计值,则不需要生成加工单
multiple = 0; if (qty <= 0) {
} else { multiple = 0;
//看看多少倍乘以圆整数量就是需求数QTY就是多累积数 } else {
multiple = (int) Math.round(Math.ceil(Math.ceil(qty / roundQty))); //看看多少倍乘以圆整数量就是需求数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();
//工单号生成规则 【工厂号+yyyyMMdd+5位流水】
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO);
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel,"JOB", detail.getOrganizeCode(), 1).getResultList();
mesWorkOrder.setWorkOrderNo(resultList.get(0));
mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.BTO.getValue());
mesWorkOrder.setWorkOrderSeq(createSeq.toString());
mesWorkOrder.setProduceSeq(createSeq);
mesWorkOrder.setCustPartNo(sortInfos.get(0).getCustPartNo());
//标识 -空
//状态 --- 根据零件发运组看是自动发布
if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
}{
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
}
//车型大类-空
mesWorkOrder.setOrganizeCode(detail.getOrganizeCode());
//erpWorkCenter 需要根据产线查询 组织模型
DdlPackBean workCenterPackBean = DdlPackBean.getDdlPackBean(detail.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(detail.getWorkCenterCode(),"workCenterCode",workCenterPackBean);
List<MesWorkCenter> centerList = mesWorkCenterRao.findByHqlWhere(workCenterPackBean);
if (!centerList.isEmpty()){
mesWorkOrder.setErpWorkCenter(centerList.get(0).getErpWorkCenter());
}
//产线
mesWorkOrder.setWorkCenterCode(detail.getWorkCenterCode());
//工位
mesWorkOrder.setWorkCellCode(detail.getWorkCellCode());
//生产日期,计划时间
List<MesCustSortInfo> sortInfosSorted = sortInfos.stream().sorted(Comparator.comparing(MesCustSortInfo::getMatchTime)).collect(Collectors.toList());
// 10. 根据工厂,产线,planStartTime 获取班次名称
String matchTime = sortInfosSorted.get(0).getMatchTime();
// 计划开始时间 工单创建时间(获取到的时间)
mesWorkOrder.setPlanStartTime(matchTime);
//计划结束时间 工单创建时间(获取到的时间)
mesWorkOrder.setPlanEndTime(matchTime);
// 生产时间 工单获取计划开始时间日期
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date parse = format.parse(matchTime);
String productTime = format.format(parse);
mesWorkOrder.setProductTime(productTime);
// 11. 是否将生成日期减一天
// 班次 根据产线+计划时间匹配班次
DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(detail.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(detail.getWorkCenterCode(),"workCenterCode",shiftPackBean);
List<MesShift> shiftList = mesShiftRao.findByHqlWhere(shiftPackBean);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(matchTime);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hours = calendar.get(Calendar.HOUR_OF_DAY);
int minutes = calendar.get(Calendar.MINUTE);
int shiftTime = Integer.parseInt(hours+""+minutes);
for (MesShift shift : shiftList) {
int startTime = Integer.parseInt(shift.getStartTime() );
int endTime = Integer.parseInt(shift.getEndTime() );
if (shiftTime >= startTime && shiftTime <= endTime) {
mesWorkOrder.setShiftName(shift.getShiftName());
mesWorkOrder.setShiftCode(shift.getShiftCode());
break;
}
}
// 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);
}
//获取生产零件信息
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(); } catch (ParseException e) {
mesWorkOrder.setProductVersion(productVersion); throw new RuntimeException(e);
// 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);
}
} }
} }

@ -23,8 +23,9 @@ public class WebServiceServerIns {
maximoParamModel.setAssetNum(meterInfo.getASSETNUM()); maximoParamModel.setAssetNum(meterInfo.getASSETNUM());
maximoParamModel.setBaseMeasureUnitId(meterInfo.getBASEMEASUREUNITID()); maximoParamModel.setBaseMeasureUnitId(meterInfo.getBASEMEASUREUNITID());
maximoParamModel.setMeterName(meterInfo.getMETERNAME()); maximoParamModel.setMeterName(meterInfo.getMETERNAME());
maximoParamModel.setSiteId(meterInfo.getSITEID());
MaximoServiceImpl bean = (MaximoServiceImpl) SpringContextsUtil.getBean("maximoServiceImpl"); MaximoServiceImpl bean = (MaximoServiceImpl) SpringContextsUtil.getBean("maximoServiceImpl");
return bean.doAssetMainData(maximoParamModel); return bean.doMeterMainData(maximoParamModel);
} }
} }

Loading…
Cancel
Save