Merge remote-tracking branch 'origin/dev-wuhan' into dev-wuhan

tags/yfai-mes-ext-v2.3
jun 6 months ago
commit 57b20494ea

@ -14,7 +14,7 @@ public interface IMesSortRuleCfgOfflineService {
void deleteSortRuleOffline(String organizeCode); void deleteSortRuleOffline(String organizeCode);
void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail); void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo,String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail);
void deletePullOffline(String organizeCode); void deletePullOffline(String organizeCode);
@ -22,5 +22,5 @@ public interface IMesSortRuleCfgOfflineService {
void deletePullDetailOffline(String organizeCode); void deletePullDetailOffline(String organizeCode);
void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List<MesPartPullDetail> pullDetailList); void doCreatePullOffline(String custPartNo, String erpPartNo,String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List<MesPartPullDetail> pullDetailList);
} }

@ -184,6 +184,11 @@ public class MesPackageRoundnessService implements IRoundnessStrategy {
if (mesPartProdGroupDetail.getProductPartNo() == null) { if (mesPartProdGroupDetail.getProductPartNo() == null) {
mesPartProdGroupDetail.setProductPartNo(mesPartProdGroupDetail.getPartNo()); mesPartProdGroupDetail.setProductPartNo(mesPartProdGroupDetail.getPartNo());
} }
/**
* 2024/11/14
* z
* zerp
*/
MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode()); MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode());
if (mesPart == null) { if (mesPart == null) {

@ -188,18 +188,27 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
//工单号生成规则 【工厂号+yyyyMMdd+5位流水】 //工单号生成规则 【工厂号+yyyyMMdd+5位流水】
// 13.生产版本 organizeCode + partNo // 13.生产版本 organizeCode + partNo
MesProductVersion prodVersion = getProdVersion(organizeCode, partSap.getPartNo()); /**
* erp
*/
MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo());
if (prodVersion == null) { if (prodVersion == null) {
log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, partSap.getPartNo()); log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo());
} else { } else {
String productVersion = prodVersion.getProductVersion(); String productVersion = prodVersion.getProductVersion();
mesWorkOrder.setProductVersion(productVersion); mesWorkOrder.setProductVersion(productVersion);
} }
// bom prodVersion.alternativePartList bom版本 // bom prodVersion.alternativePartList bom版本
MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), partSap.getPartNo()); /**
* bom
*/
MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo());
if (bom != null){ if (bom != null){
mesWorkOrder.setBomCode(bom.getBomCode()); mesWorkOrder.setBomCode(bom.getBomCode());
}else {
log.info("工厂:{},生产零件号:{}没有维护bom", organizeCode, mesPartProdGroupDetail.getProductPartNo());
return;
} }
mesWorkOrder.setQty(sortInfo.getQty()); mesWorkOrder.setQty(sortInfo.getQty());
@ -289,7 +298,8 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
// 打散bom // 打散bom
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>(); List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); //打散bom使用生产零件号
workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo());
} }
/** /**
* bom, * bom,
@ -401,7 +411,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", "");
String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo;
mesWorkOrder.setWorkOrderNo(orderNoWuHan); mesWorkOrder.setWorkOrderNo(orderNoWuHan);
List<MesWorkOrderAssembly> assemblyList = new ArrayList<>();
if (!workOrderPartList.isEmpty()) { if (!workOrderPartList.isEmpty()) {
for (MesWorkOrderPart orderPart : workOrderPartList) { for (MesWorkOrderPart orderPart : workOrderPartList) {
orderPart.setOrganizeCode(organizeCode); orderPart.setOrganizeCode(organizeCode);
@ -409,8 +419,8 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); ConvertBean.saveOrUpdate(orderPart, "MES-JOB");
} }
workOrderPartRao.saveAll(workOrderPartList); workOrderPartRao.saveAll(workOrderPartList);
assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup);
} }
List<MesWorkOrderAssembly> assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup);
// /** // /**
// * 生产序号 // * 生产序号
// * 工厂-产线-9位流水号,跳号10 // * 工厂-产线-9位流水号,跳号10
@ -662,6 +672,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
//2.根据bomList中的subPartNo 查询零件清单 partList //2.根据bomList中的subPartNo 查询零件清单 partList
List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList());
if (partNoList.isEmpty()) {
return new ArrayList<>();
}
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean);
List<MesPartSap> partSapList = mesPartSapRao.findByHqlWhere(partPackBean); List<MesPartSap> partSapList = mesPartSapRao.findByHqlWhere(partPackBean);

@ -50,8 +50,9 @@ public class MesOfflineServiceImpl implements IMesOfflineService {
List<MesPartProdGroupDetail> detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); List<MesPartProdGroupDetail> detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean);
//3.根据客户零件表中的erp零件是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 //3.根据客户零件表中的erp零件是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表
for (MesPartProdGroupDetail detail : detailList) { for (MesPartProdGroupDetail detail : detailList) {
String erpPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? detail.getPartNo() : detail.getProductPartNo(); String erpPartNo = detail.getPartNo();
cfgOfflineService.doCreateSortRuleOffline(detail.getCustPartNo(), erpPartNo,organizeCode,mesPartProdGroup,detail); String productPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? erpPartNo : detail.getProductPartNo();
cfgOfflineService.doCreateSortRuleOffline(detail.getCustPartNo(), erpPartNo,productPartNo,organizeCode,mesPartProdGroup,detail);
} }
} }
@ -91,13 +92,14 @@ public class MesOfflineServiceImpl implements IMesOfflineService {
List<MesPartProdGroupDetail> detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); List<MesPartProdGroupDetail> detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean);
//3.根据客户零件表中的erp零件是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 //3.根据客户零件表中的erp零件是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表
for (MesPartProdGroupDetail detail : detailList) { for (MesPartProdGroupDetail detail : detailList) {
String erpPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? detail.getPartNo() : detail.getProductPartNo(); String erpPartNo = detail.getPartNo();
String productPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? erpPartNo : detail.getProductPartNo();
MesPartPull mesPartPull = partPullMap.get(mesPartProdGroup.getWorkCenterCode()); MesPartPull mesPartPull = partPullMap.get(mesPartProdGroup.getWorkCenterCode());
List<MesPartPullDetail> mesPartPullDetails = detailMapList.get(mesPartPull.getPullCode()); List<MesPartPullDetail> mesPartPullDetails = detailMapList.get(mesPartPull.getPullCode());
if (mesPartPullDetails == null) { if (mesPartPullDetails == null) {
continue; continue;
} }
cfgOfflineService.doCreatePullOffline(detail.getCustPartNo(), erpPartNo,organizeCode,mesPartProdGroup,detail,partPullMap.get(mesPartProdGroup.getWorkCenterCode()), mesPartPullDetails); cfgOfflineService.doCreatePullOffline(detail.getCustPartNo(), erpPartNo,productPartNo,organizeCode,mesPartProdGroup,detail,partPullMap.get(mesPartProdGroup.getWorkCenterCode()), mesPartPullDetails);
} }

@ -78,22 +78,25 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
@Override @Override
public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) { public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) {
MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode);
//4.总成零件号打散bom //4.总成零件号打散bom
String bomVersion = mesProductVersion.getAlternativePartList(); String bomVersion = mesProductVersion.getAlternativePartList();
MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo); MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo);
if (bom == null) { if (bom == null) {
return; return;
} }
//5.5 获取客户零件号对应的车型配置 //5.5 获取客户零件号对应的车型配置
/**
* erp z
*/
MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode); MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode);
if (mesCustomerPart == null) { if (mesCustomerPart == null) {
return; return;
} }
//5.打散的bom 获取排序加工规则 //5.打散的bom 获取排序加工规则
List<MesWorkOrderPart> workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); List<MesWorkOrderPart> workOrderPartList = dismantleBom(productPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode());
//6.装配件获取的三种条件 //6.装配件获取的三种条件
String custCode = mesCustomerPart.getCustCode(); String custCode = mesCustomerPart.getCustCode();
MesCustomerCarModel mesCustomerCarModel = getMesCustomerCarModel(custPartNo, organizeCode, custCode); MesCustomerCarModel mesCustomerCarModel = getMesCustomerCarModel(custPartNo, organizeCode, custCode);
@ -102,7 +105,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
} }
//5.6 获取零件信息 //5.6 获取零件信息
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(erpPartNo,"partNo", partPackBean); DdlPreparedPack.getStringEqualPack(productPartNo,"partNo", partPackBean);
List<MesPartSap> partSapList = partSapRao.findByHqlWhere(partPackBean); List<MesPartSap> partSapList = partSapRao.findByHqlWhere(partPackBean);
//7.获取车型 //7.获取车型
@ -146,11 +149,11 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
} }
@Override @Override
public void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List<MesPartPullDetail> pullDetailList) { public void doCreatePullOffline(String custPartNo, String erpPartNo,String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List<MesPartPullDetail> pullDetailList) {
MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode); MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode);
//4.总成零件号打散bom //4.总成零件号打散bom
String bomVersion = mesProductVersion.getAlternativePartList(); String bomVersion = mesProductVersion.getAlternativePartList();
MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo); MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo);
if (bom == null) { if (bom == null) {
return; return;
} }
@ -161,11 +164,11 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
} }
//5.6 获取零件信息 //5.6 获取零件信息
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(erpPartNo,"partNo", partPackBean); DdlPreparedPack.getStringEqualPack(productPartNo,"partNo", partPackBean);
List<MesPartSap> partSapList = partSapRao.findByHqlWhere(partPackBean); List<MesPartSap> partSapList = partSapRao.findByHqlWhere(partPackBean);
//5.打散的bom 获取排序加工规则 //5.打散的bom 获取排序加工规则
List<MesWorkOrderPart> workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); List<MesWorkOrderPart> workOrderPartList = dismantleBom(productPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode());
//6.过滤出需要拉动的零件号 //6.过滤出需要拉动的零件号
List<String> partPullDetailPartNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); List<String> partPullDetailPartNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
@ -178,7 +181,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
} }
mesPartPullOffline.setPullCode(partPull.getPullCode()); mesPartPullOffline.setPullCode(partPull.getPullCode());
mesPartPullOffline.setCustPartNo(custPartNo); mesPartPullOffline.setCustPartNo(custPartNo);
mesPartPullOffline.setPartNo(erpPartNo); mesPartPullOffline.setPartNo(productPartNo);
mesPartPullOffline.setWorkCenterCode(partPull.getWorkCenterCode()); mesPartPullOffline.setWorkCenterCode(partPull.getWorkCenterCode());
mesPartPullOffline.setOrganizeCode(organizeCode); mesPartPullOffline.setOrganizeCode(organizeCode);
ConvertBean.saveOrUpdate(mesPartPullOffline,"SPS-OFFLINE"); ConvertBean.saveOrUpdate(mesPartPullOffline,"SPS-OFFLINE");
@ -189,7 +192,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
detailOffline.setPid(mesPartPullOffline.getId()); detailOffline.setPid(mesPartPullOffline.getId());
detailOffline.setPullCode(partPull.getPullCode()); detailOffline.setPullCode(partPull.getPullCode());
detailOffline.setCustPartNo(custPartNo); detailOffline.setCustPartNo(custPartNo);
detailOffline.setAssPartNo(erpPartNo); detailOffline.setAssPartNo(productPartNo);
detailOffline.setOrganizeCode(organizeCode); detailOffline.setOrganizeCode(organizeCode);
detailOffline.setPartNo(pullDetail.getPartNo()); detailOffline.setPartNo(pullDetail.getPartNo());
detailOffline.setPartName(pullDetail.getPartName()); detailOffline.setPartName(pullDetail.getPartName());
@ -240,11 +243,11 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc "); ddlPackBean.setOrderByStr(" order by createDatetime desc ");
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); List<MesProductVersion> mesProductVersionList = mesProductVersionRDao.findByHqlTopWhere(ddlPackBean, 1);
if (Objects.isNull(mesProductVersion)) { if (Objects.isNull(mesProductVersionList) || mesProductVersionList.isEmpty()) {
MesException.throwMesBusiException("物料【%s】对应的生产版本信息不存在", partNo); MesException.throwMesBusiException("物料【%s】对应的生产版本信息不存在", partNo);
} }
return mesProductVersion; return mesProductVersionList.get(0);
} }
private List<MesWorkOrderPart> dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode) { private List<MesWorkOrderPart> dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode) {

Loading…
Cancel
Save