forked from I3-YF/i3plus-mes-yfai
离线job生成装配件及拉动单模板
parent
e3ab160447
commit
fc9e36abcf
@ -0,0 +1,19 @@
|
||||
package cn.estsh.i3plus.ext.mes.api.busi;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IMesOfflineService {
|
||||
|
||||
/**
|
||||
* 创建离线排序加工规则
|
||||
* 每个总成零件维护一个
|
||||
*/
|
||||
void doCreateSortRuleCfgOfflineData(String organizeCode, List<String> groupCodeList);
|
||||
|
||||
/**
|
||||
* 生成指定零件生产组的拉动单模板
|
||||
* 创建离线排序拉动规则
|
||||
* 每个总成零件维护一个
|
||||
*/
|
||||
void doCreatePullOrderOfflineData(String organizeCode, List<String> pullCodeList,List<String> partProdCodeList);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package cn.estsh.i3plus.ext.mes.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPartPull;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPartPullDetail;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IMesSortRuleCfgOfflineService {
|
||||
/**
|
||||
* 清空原始表
|
||||
*/
|
||||
void deleteSortRuleOffline(String organizeCode);
|
||||
|
||||
|
||||
void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail);
|
||||
|
||||
|
||||
void deletePullOffline(String organizeCode);
|
||||
|
||||
void deletePullDetailOffline(String organizeCode);
|
||||
|
||||
|
||||
void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List<MesPartPullDetail> pullDetailList);
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService;
|
||||
import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService;
|
||||
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.DisallowConcurrentExecution;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description : 根据拉动组和生产工单产生拉动单JOB
|
||||
* @Reference :
|
||||
* @Author : gsz
|
||||
* @CreateDate 2024/9/4 10:01
|
||||
* @Modify:
|
||||
**/
|
||||
// 禁止 JOB 并发执行
|
||||
@ApiOperation("离线生产所有总成零件的拉动单模板")
|
||||
@Component
|
||||
public class MesCreatePullOrderOfflineJob extends BaseMesScheduleJob {
|
||||
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(MesCreatePullOrderOfflineJob.class);
|
||||
|
||||
@Autowired
|
||||
private IMesOfflineService mesOfflineService;
|
||||
|
||||
|
||||
public MesCreatePullOrderOfflineJob() {
|
||||
super(MesCreatePullOrderOfflineJob.class, "离线生产所有总成零件的拉动单模板");
|
||||
this.setMultiInstance(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
|
||||
Map<String,Object> paramMap = (Map<String, Object>) JSONObject.parse(jobParam);
|
||||
try {
|
||||
String organizeCode = (String) paramMap.get("organizeCode");
|
||||
List<String> pullCodeList = (List<String>) paramMap.get("pullCodeList");
|
||||
List<String> partProdCodeList = (List<String>) paramMap.get("partProdCodeList");
|
||||
mesOfflineService.doCreatePullOrderOfflineData(organizeCode,pullCodeList,partProdCodeList);
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("离线生产所有总成零件的拉动单模板:{}", e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService;
|
||||
import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService;
|
||||
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.DisallowConcurrentExecution;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description : 根据拉动组和生产工单产生拉动单JOB
|
||||
* @Reference :
|
||||
* @Author : gsz
|
||||
* @CreateDate 2024/9/4 10:01
|
||||
* @Modify:
|
||||
**/
|
||||
// 禁止 JOB 并发执行
|
||||
@ApiOperation("生产所有总成零件的装配件模板")
|
||||
@Component
|
||||
public class MesCreateSortRuleCfgOfflineJob extends BaseMesScheduleJob {
|
||||
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(MesCreateSortRuleCfgOfflineJob.class);
|
||||
|
||||
|
||||
@Autowired
|
||||
private IMesOfflineService mesOfflineService;
|
||||
|
||||
|
||||
public MesCreateSortRuleCfgOfflineJob() {
|
||||
super(MesCreateSortRuleCfgOfflineJob.class, "生产所有总成零件的装配件模板");
|
||||
this.setMultiInstance(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
|
||||
Map<String,Object> paramMap = (Map<String, Object>) JSONObject.parse(jobParam);
|
||||
try {
|
||||
String organizeCode = (String) paramMap.get("organizeCode");
|
||||
List<String> groupCodeList = (List<String>) paramMap.get("partProdCodeList");
|
||||
mesOfflineService.doCreateSortRuleCfgOfflineData(organizeCode,groupCodeList);
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("生产所有总成零件的装配件模板:{}", e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,439 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.api.busi.IMesSortRuleCfgOfflineService;
|
||||
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService;
|
||||
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
|
||||
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.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.*;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.offline.MesProdRuleSortCfgOffline;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.offline.MesPullingOrderInfoOffline;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.offline.MesPullingOrderPartInfoOffline;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.*;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.offline.MesProdRuleSortCfgOfflineRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.offline.MesPullingOrderInfoOfflineRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.offline.MesPullingOrderPartInfoOfflineRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineService {
|
||||
|
||||
@Autowired
|
||||
private MesProdRuleSortCfgOfflineRepository cfgOfflineRao;
|
||||
|
||||
@Autowired
|
||||
private MesProductVersionRepository mesProductVersionRDao;
|
||||
|
||||
@Autowired
|
||||
private MesBomService mesBomService;
|
||||
|
||||
@Autowired
|
||||
private MesBomRepository bomRao;
|
||||
|
||||
@Autowired
|
||||
private MesPartSapRepository mesPartSapRao;
|
||||
|
||||
@Autowired
|
||||
private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao;
|
||||
|
||||
@Autowired
|
||||
private MesCustomerPartRepository customerPartRao;
|
||||
|
||||
@Autowired
|
||||
private MesCustomerCarModelRepository carModelRao;
|
||||
|
||||
@Autowired
|
||||
private MesPullingOrderInfoOfflineRepository partPullOrderOfflineRao;
|
||||
|
||||
@Autowired
|
||||
private MesPullingOrderPartInfoOfflineRepository partPullOrderDetailOfflineRao;
|
||||
|
||||
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
@Override
|
||||
public void deleteSortRuleOffline(String organizeCode) {
|
||||
cfgOfflineRao.deleteByProperty("organizeCode", organizeCode);
|
||||
}
|
||||
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
@Override
|
||||
public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) {
|
||||
|
||||
MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode);
|
||||
//4.总成零件号打散bom
|
||||
String bomVersion = mesProductVersion.getAlternativePartList();
|
||||
MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo);
|
||||
if (bom == null) {
|
||||
return;
|
||||
}
|
||||
//5.5 获取客户零件号对应的车型配置
|
||||
MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode);
|
||||
if (mesCustomerPart == null) {
|
||||
return;
|
||||
}
|
||||
//5.打散的bom 获取排序加工规则
|
||||
List<MesWorkOrderPart> workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode());
|
||||
//6.装配件获取的三种条件
|
||||
String custCode = mesCustomerPart.getCustCode();
|
||||
MesCustomerCarModel mesCustomerCarModel = getMesCustomerCarModel(custPartNo, organizeCode, custCode);
|
||||
if (mesCustomerCarModel == null) {
|
||||
return;
|
||||
}
|
||||
String carModelCode = mesCustomerCarModel.getCarModelCode();
|
||||
List<MesWorkOrderAssembly> assemblyList = getAssemblyList(detail.getWorkCenterCode(), carModelCode, workOrderPartList, mesPartProdGroup);
|
||||
//7.保存到离线表中
|
||||
for (MesWorkOrderAssembly orderAssembly : assemblyList) {
|
||||
MesProdRuleSortCfgOffline cfgOffline = new MesProdRuleSortCfgOffline();
|
||||
BeanUtils.copyProperties(orderAssembly, cfgOffline);
|
||||
cfgOffline.setCustPartNo(custPartNo);
|
||||
cfgOffline.setCustPartName(mesCustomerPart.getCustPartName());
|
||||
cfgOffline.setPartNo(erpPartNo);
|
||||
cfgOffline.setVehicleNo(carModelCode);
|
||||
cfgOffline.setOrganizeCode(organizeCode);
|
||||
ConvertBean.saveOrUpdate(cfgOffline, "OFFLINE-JOB");
|
||||
cfgOfflineRao.insert(cfgOffline);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
@Override
|
||||
public void deletePullOffline(String organizeCode) {
|
||||
partPullOrderOfflineRao.deleteByProperty("organizeCode", organizeCode);
|
||||
}
|
||||
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
@Override
|
||||
public void deletePullDetailOffline(String organizeCode) {
|
||||
partPullOrderDetailOfflineRao.deleteByProperty("organizeCode", organizeCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doCreatePullOffline(String custPartNo, String erpPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List<MesPartPullDetail> pullDetailList) {
|
||||
MesProductVersion mesProductVersion = getMesProductVersion(erpPartNo, organizeCode);
|
||||
//4.总成零件号打散bom
|
||||
String bomVersion = mesProductVersion.getAlternativePartList();
|
||||
MesBom bom = mesBomService.findBom(organizeCode, bomVersion, erpPartNo);
|
||||
if (bom == null) {
|
||||
return;
|
||||
}
|
||||
//5.5 获取客户零件号对应的车型配置
|
||||
MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode);
|
||||
if (mesCustomerPart == null) {
|
||||
return;
|
||||
}
|
||||
//5.打散的bom 获取排序加工规则
|
||||
List<MesWorkOrderPart> workOrderPartList = dismantleBom(erpPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode());
|
||||
|
||||
//6.过滤出需要拉动的零件号
|
||||
List<String> partPullDetailPartNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
|
||||
Map<String, MesWorkOrderPart> orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity()));
|
||||
List<MesPartPullDetail> pullDetails = pullDetailList.stream().filter(item -> partPullDetailPartNoList.contains(item.getPartNo())).collect(Collectors.toList());
|
||||
//7.生成拉动主单模板 MesPullingOrderPartInfoOfflineRepository
|
||||
MesPullingOrderInfoOffline mesPartPullOffline = new MesPullingOrderInfoOffline();
|
||||
mesPartPullOffline.setPullCode(partPull.getPullCode());
|
||||
mesPartPullOffline.setCustPartNo(custPartNo);
|
||||
mesPartPullOffline.setPartNo(erpPartNo);
|
||||
mesPartPullOffline.setWorkCenterCode(partPull.getWorkCenterCode());
|
||||
mesPartPullOffline.setOrganizeCode(organizeCode);
|
||||
ConvertBean.saveOrUpdate(mesPartPullOffline,"SPS-OFFLINE");
|
||||
partPullOrderOfflineRao.insert(mesPartPullOffline);
|
||||
//8.生成拉动单详情
|
||||
for (MesPartPullDetail pullDetail : pullDetails) {
|
||||
MesPullingOrderPartInfoOffline detailOffline = new MesPullingOrderPartInfoOffline();
|
||||
detailOffline.setPid(mesPartPullOffline.getId());
|
||||
detailOffline.setPullCode(partPull.getPullCode());
|
||||
detailOffline.setCustPartNo(custPartNo);
|
||||
detailOffline.setAssPartNo(erpPartNo);
|
||||
detailOffline.setOrganizeCode(organizeCode);
|
||||
detailOffline.setPartNo(pullDetail.getPartNo());
|
||||
detailOffline.setPartName(pullDetail.getPartName());
|
||||
detailOffline.setPullQty(orderPartMap.get(pullDetail.getPartNo()).getItemQty());
|
||||
detailOffline.setWorkOrderNo(partPull.getWorkCenterCode());
|
||||
detailOffline.setWorkCellCode(pullDetail.getWorkCellCode());
|
||||
detailOffline.setEquipment(pullDetail.getEquipment());
|
||||
detailOffline.setLocation(pullDetail.getPullAddr());
|
||||
if (pullDetail.getScanValidationType() == 10) {
|
||||
detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode());
|
||||
} else {
|
||||
detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode());
|
||||
}
|
||||
detailOffline.setCarSeries(pullDetail.getCarSeries());
|
||||
|
||||
ConvertBean.saveOrUpdate(detailOffline,"SPS-OFFLINE");
|
||||
partPullOrderDetailOfflineRao.insert(detailOffline);
|
||||
}
|
||||
}
|
||||
|
||||
//客户零件号
|
||||
private MesCustomerPart getMesCustomerPart(String custPartNo, String erpPartNo, String organizeCode) {
|
||||
DdlPackBean custPartPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", custPartPackBean);
|
||||
DdlPreparedPack.getStringEqualPack(erpPartNo, "erpPartNo", custPartPackBean);
|
||||
List<MesCustomerPart> customerPartList = customerPartRao.findByHqlTopWhere(custPartPackBean, 1);
|
||||
if (!customerPartList.isEmpty()) {
|
||||
return customerPartList.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//获取车型配置
|
||||
private MesCustomerCarModel getMesCustomerCarModel(String custPartNo, String organizeCode, String custCode) {
|
||||
DdlPackBean carModelPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", carModelPackBean);
|
||||
DdlPreparedPack.getStringEqualPack(custCode, "custCode", carModelPackBean);
|
||||
DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", carModelPackBean);
|
||||
List<MesCustomerCarModel> carModels = carModelRao.findByHqlTopWhere(carModelPackBean, 1);
|
||||
if (carModels.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return carModels.get(0);
|
||||
}
|
||||
|
||||
//版本号
|
||||
private MesProductVersion getMesProductVersion(String partNo, String organizeCode) {
|
||||
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
|
||||
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
|
||||
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
||||
if (Objects.isNull(mesProductVersion)) {
|
||||
MesException.throwMesBusiException("物料【%s】对应的生产版本信息不存在", partNo);
|
||||
}
|
||||
return mesProductVersion;
|
||||
}
|
||||
|
||||
private List<MesWorkOrderPart> dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode) {
|
||||
List<MesWorkOrderPart> orderPartList = new ArrayList<>();
|
||||
|
||||
//1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList
|
||||
List<MesBom> bomList = getPlatBom(partNo, productTime, bomCode, organizeCode);
|
||||
//2.根据bomList中的subPartNo 查询零件清单 partList
|
||||
List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList());
|
||||
|
||||
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean);
|
||||
List<MesPartSap> partSapList = mesPartSapRao.findByHqlWhere(partPackBean);
|
||||
Map<String, MesPartSap> partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity()));
|
||||
|
||||
|
||||
for (MesBom bom : bomList) {
|
||||
MesWorkOrderPart orderPart = new MesWorkOrderPart();
|
||||
MesPartSap partSap = partMap.get(bom.getItemPartNo());
|
||||
if (partSap == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<MesWorkOrderPart> orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList());
|
||||
if (!orderParts.isEmpty()) {
|
||||
MesWorkOrderPart tempPart = orderParts.get(0);
|
||||
tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty);
|
||||
continue;
|
||||
}
|
||||
orderPart.setPartName(partSap.getPartName());
|
||||
orderPart.setPartNo(partSap.getPartNo());
|
||||
orderPart.setItemQty(bom.getItemQty() * qty);
|
||||
orderPart.setItemUnit(partSap.getUnit());
|
||||
orderPart.setSourceId(bom.getId());
|
||||
orderPart.setShippingPartNo(partSap.getPartNo());
|
||||
orderPart.setWorkCellCode(workCellCode);
|
||||
orderPartList.add(orderPart);
|
||||
}
|
||||
//3.遍历bomList
|
||||
return orderPartList;
|
||||
}
|
||||
|
||||
private List<MesBom> getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) {
|
||||
if (bomCode == null) {
|
||||
//首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode
|
||||
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean);
|
||||
DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false);
|
||||
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean);
|
||||
List<MesBom> bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1);
|
||||
if (bomList == null || bomList.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
bomCode = bomList.get(0).getBomCode();
|
||||
}
|
||||
List<MesBom> bomResultList = new ArrayList<>();
|
||||
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean);
|
||||
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
|
||||
DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean);
|
||||
DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean);
|
||||
List<MesBom> bomList = bomRao.findByHqlWhere(bomPackBean);
|
||||
|
||||
for (MesBom bom : bomList) {
|
||||
if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) {
|
||||
getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode);
|
||||
} else {
|
||||
bom.setBomCode(bom.getBomCode().toLowerCase());
|
||||
bomResultList.add(bom);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return bomResultList;
|
||||
}
|
||||
|
||||
private List<MesWorkOrderAssembly> getAssemblyList(String workCenterCode, String vehicleNo, List<MesWorkOrderPart> workOrderPartList, MesPartProdGroup mesPartProdGroup) {
|
||||
//TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则
|
||||
List<MesWorkOrderAssembly> workOrderAssemblyList = new ArrayList<>();
|
||||
List<String> partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
|
||||
DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean);
|
||||
DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean);
|
||||
//查询当前产线的所有排序生产规则--分为当前工单清单的装配件
|
||||
List<MesProdRuleSortCfg> sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean);
|
||||
List<MesProdRuleSortCfg> sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList());
|
||||
Map<String, List<MesWorkOrderPart>> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo));
|
||||
//遍历排序生产规则
|
||||
for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) {
|
||||
List<MesWorkOrderPart> orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo());
|
||||
MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly();
|
||||
// MesWorkOrderPart orderPart = orderPartList.get(0);
|
||||
//1.逻辑储量程序sortCfg.isLogicNum
|
||||
if ((sortCfg.getIsLogicNum() != null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum() != null && sortCfg.getLogicNum() > 0)) {
|
||||
Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get();
|
||||
if (!total.equals(sortCfg.getLogicNum())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
//2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项
|
||||
if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)) {
|
||||
continue;
|
||||
}
|
||||
orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo());
|
||||
orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName());
|
||||
orderAssembly.setProcessName(sortCfg.getProcessName());
|
||||
orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode());
|
||||
orderAssembly.setDisplayRule(sortCfg.getDisplayRule());
|
||||
orderAssembly.setMatchRule(sortCfg.getMatchRule());
|
||||
orderAssembly.setMatchType(sortCfg.getMatchType());
|
||||
orderAssembly.setPrintType(sortCfg.getPrintType());
|
||||
orderAssembly.setProcessCode(sortCfg.getProcessCode());
|
||||
orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq());
|
||||
orderAssembly.setDisplayValue(sortCfg.getDisplayValue());
|
||||
orderAssembly.setProcessSeq(sortCfg.getProcessSeq());
|
||||
orderAssembly.setCraftName(sortCfg.getCraftName());
|
||||
orderAssembly.setCraftCode(sortCfg.getCraftCode());
|
||||
orderAssembly.setRouteSeq(sortCfg.getRouteSeq());
|
||||
orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode());
|
||||
// orderAssembly.setOrderPartId(orderPart.getId().toString());
|
||||
orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode());
|
||||
orderAssembly.setReportType(sortCfg.getReportType());
|
||||
if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) {
|
||||
orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue());
|
||||
} else {
|
||||
orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue());
|
||||
}
|
||||
orderAssembly.setReportPartNo(sortCfg.getReportPartNo());
|
||||
orderAssembly.setImageFileId(sortCfg.getImageFileId());
|
||||
orderAssembly.setCraftCode(sortCfg.getCraftCode());
|
||||
orderAssembly.setCraftName(sortCfg.getCraftName());
|
||||
orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode());
|
||||
orderAssembly.setShowColor(sortCfg.getShowColor());
|
||||
orderAssembly.setProductPartNo(sortCfg.getProductPartNo());
|
||||
orderAssembly.setPid(sortCfg.getId());
|
||||
orderAssembly.setWorkCenterCode(workCenterCode);
|
||||
workOrderAssemblyList.add(orderAssembly);
|
||||
}
|
||||
|
||||
//车型不为空的逻辑--用于报工
|
||||
DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean);
|
||||
DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean);
|
||||
DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean);
|
||||
//查询当前产线的所有排序生产规则--分为当前工单清单的装配件
|
||||
List<MesProdRuleSortCfg> prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean);
|
||||
for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) {
|
||||
MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly();
|
||||
orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo());
|
||||
orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName());
|
||||
orderAssembly.setProcessName(ruleSortCfg.getProcessName());
|
||||
orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode());
|
||||
orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule());
|
||||
orderAssembly.setMatchRule(ruleSortCfg.getMatchRule());
|
||||
orderAssembly.setMatchType(ruleSortCfg.getMatchType());
|
||||
orderAssembly.setPrintType(ruleSortCfg.getPrintType());
|
||||
orderAssembly.setProcessCode(ruleSortCfg.getProcessCode());
|
||||
orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode());
|
||||
orderAssembly.setProcessCode(ruleSortCfg.getProcessCode());
|
||||
orderAssembly.setProcessName(ruleSortCfg.getProcessName());
|
||||
orderAssembly.setCraftCode(ruleSortCfg.getCraftCode());
|
||||
orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq());
|
||||
orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode());
|
||||
orderAssembly.setReportType(ruleSortCfg.getReportType());
|
||||
if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) {
|
||||
orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue());
|
||||
} else {
|
||||
orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue());
|
||||
}
|
||||
orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo());
|
||||
orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq());
|
||||
orderAssembly.setPid(ruleSortCfg.getId());
|
||||
orderAssembly.setImageFileId(ruleSortCfg.getImageFileId());
|
||||
orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode());
|
||||
orderAssembly.setMaxValue(ruleSortCfg.getMaxValue());
|
||||
orderAssembly.setMinValue(ruleSortCfg.getMinValue());
|
||||
orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo());
|
||||
workOrderAssemblyList.add(orderAssembly);
|
||||
}
|
||||
//查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则
|
||||
DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean);
|
||||
DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean);
|
||||
List<MesProdRuleSortCfg> ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean);
|
||||
for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) {
|
||||
MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly();
|
||||
orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo());
|
||||
orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName());
|
||||
orderAssembly.setProcessName(ruleSortCfg.getProcessName());
|
||||
orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode());
|
||||
orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule());
|
||||
orderAssembly.setMatchRule(ruleSortCfg.getMatchRule());
|
||||
orderAssembly.setMatchType(ruleSortCfg.getMatchType());
|
||||
orderAssembly.setPrintType(ruleSortCfg.getPrintType());
|
||||
orderAssembly.setProcessCode(ruleSortCfg.getProcessCode());
|
||||
orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode());
|
||||
orderAssembly.setProcessCode(ruleSortCfg.getProcessCode());
|
||||
orderAssembly.setProcessName(ruleSortCfg.getProcessName());
|
||||
orderAssembly.setCraftCode(ruleSortCfg.getCraftCode());
|
||||
orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq());
|
||||
orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode());
|
||||
orderAssembly.setReportType(ruleSortCfg.getReportType());
|
||||
if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) {
|
||||
orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue());
|
||||
} else {
|
||||
orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue());
|
||||
}
|
||||
orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo());
|
||||
orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq());
|
||||
orderAssembly.setPid(ruleSortCfg.getId());
|
||||
orderAssembly.setImageFileId(ruleSortCfg.getImageFileId());
|
||||
orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode());
|
||||
orderAssembly.setMaxValue(ruleSortCfg.getMaxValue());
|
||||
orderAssembly.setMinValue(ruleSortCfg.getMinValue());
|
||||
orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo());
|
||||
workOrderAssemblyList.add(orderAssembly);
|
||||
}
|
||||
return workOrderAssemblyList;
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue