排序手工插单逻辑修改

tags/yfai-mes-ext-v2.3
jun 6 months ago
parent 02ce42cec9
commit 03288a28c8

@ -19,4 +19,7 @@ public interface IMesProduceSnService extends IBaseMesService<MesProduceSn> {
@ApiOperation(value = "查询条码信息")
List<MesProduceSn> findMesProduceSnList(String organizeCode, List<String> snList);
@ApiOperation("根据客户条码查询产品条码表")
MesProduceSn getMesProduceSnByCustSn(String organizeCode, String custSn);
}

@ -2,6 +2,9 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
@ -11,4 +14,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
* @Modify:
**/
public interface IMesWorkOrderAssemblyService extends IBaseMesService<MesWorkOrderAssembly> {
@ApiOperation("根据工单号查询排序线排产装配目视项")
List<MesWorkOrderAssembly> findMesWorkOrderAssembly(String workOrderNo, String organizeCode);
}

@ -5,6 +5,9 @@ import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description:
@ -16,4 +19,7 @@ public interface IMesWorkOrderLogService extends IBaseMesService<MesWorkOrderLog
void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder, MesExtEnumUtil.WORK_ORDER_LOG_TYPE type,double qty);
ListPager queryMesWorkOrderLogByPage(MesWorkOrderLog mesWorkOrderLog, Pager pager);
@ApiOperation("根据工单号查询生产工单日志")
List<MesWorkOrderLog> findMesWorkOrderLog(String workOrderNo, String organizeCode);
}

@ -2,6 +2,9 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
@ -11,4 +14,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
* @Modify:
**/
public interface IMesWorkOrderPartService extends IBaseMesService<MesWorkOrderPart> {
@ApiOperation("根据工单号查询工单零件")
List<MesWorkOrderPart> findMesWorkOrderPart(String workOrderNo, String organizeCode);
}

@ -18,4 +18,7 @@ public interface IMesWorkOrderToWmsService extends IBaseMesService<MesWorkOrderT
@ApiOperation(value = "发送工单给Wms")
List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList);
@ApiOperation("根据工单号查询工单发送给WMS数据")
List<MesWorkOrderToWms> findMesWorkOrderToWms(String workOrderNo, String organizeCode);
}

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report;
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesYfReportDao;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditionModel;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
@ -124,7 +123,7 @@ public class MesYfReportDaoImpl implements IMesYfReportDao {
Query countQuery = entityManager.createQuery("select count(1) " + commonHql);
setParameter(mesGeneralExportReportModel, countQuery);
//数据
Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesGeneralExportReportModel)).toString(), MesShippingOrderManagementDetailModel.class);
Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesGeneralExportReportModel)).toString(), MesGeneralExportReportModel.class);
setParameter(mesGeneralExportReportModel, dataQuery);
if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager);
@ -150,7 +149,7 @@ public class MesYfReportDaoImpl implements IMesYfReportDao {
model.setOrderByParam("createDatetime");
model.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue());
}
return orderBy.append(" order by d.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString();
return orderBy.append(" order by assembly.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString();
}
private String getCommonHql(MesGeneralExportReportModel model) {

@ -45,13 +45,8 @@ public class MesCutSchemeEquipmentServiceImpl extends BaseMesService<MesCutSchem
@Override
protected void setPackQueryBean(MesCutSchemeEquipment bean, DdlPackBean packBean) {
String cutCode = bean.getCutCode();
if (!StringUtils.isEmpty(cutCode)) {
DdlPreparedPack.getStringLikerPack(cutCode, "packageTypeCode", packBean);
}
String equipmentName = bean.getEquipmentName();
if (!StringUtils.isEmpty(equipmentName)) {
DdlPreparedPack.getStringLikerPack(equipmentName, "equipmentName", packBean);
}
DdlPreparedPack.getStringLikerPack(bean.getCutCode(), "cutCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipmentCode(), "equipmentCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipmentName(), "equipmentName", packBean);
}
}

@ -1,6 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeFgService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
@ -27,4 +30,9 @@ public class MesCutSchemeFgServiceImpl extends BaseMesService<MesCutSchemeFg> im
ValidatorBean.checkNotNull(item.getId(), "主键不能为空");
ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空");
}
@Override
protected void setPackQueryBean(MesCutSchemeFg bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean);
}
}

@ -9,9 +9,9 @@ import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam;
import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.util.CollectionUtils;
@ -66,6 +66,7 @@ public class MesLabelTemplateServiceImpl extends BaseMesService<MesLabelTemplate
@Override
public MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) {
if(StringUtil.isEmpty(templateCode) || StringUtil.isEmpty(organizeCode)) return null;
DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(templateCode, MesExtConstWords.TEMPLATE_CODE, templatePackBean);
MesLabelTemplate mesLabelTemplate = baseRDao.getByProperty(templatePackBean);

@ -23,6 +23,7 @@ public class MesPartProdGroupDetailService extends BaseMesService<MesPartProdGro
protected void setPackQueryBean(MesPartProdGroupDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupCode(), "partProdGroupCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getProductPartNo(), "productPartNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean);
DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean);

@ -33,6 +33,7 @@ public class MesPartProdGroupService extends BaseMesService<MesPartProdGroup> im
public List<MesPartProdGroup> findMesPartProdGroup(MesPartProdGroupDetail mesPartProdGroupDetail){
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getPartNo(),"partNo",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getProductPartNo(),"productPartNo",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(),"workCenterCode",ddlPackBean);
List<MesPartProdGroupDetail> mesPartProdGroupDetails = mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean);
if(CollectionUtils.isEmpty(mesPartProdGroupDetails)){

@ -48,4 +48,11 @@ public class MesProduceSnServiceImpl extends BaseMesService<MesProduceSn> implem
}
return produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
}
@Override
public MesProduceSn getMesProduceSnByCustSn(String organizeCode, String custSn) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(custSn, "custSn", packBean);
return baseRDao.getByProperty(packBean);
}
}

@ -4,10 +4,13 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderAssemblyService;
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.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description :
* @Reference :
@ -25,4 +28,12 @@ public class MesWorkOrderAssemblyServiceImpl extends BaseMesService<MesWorkOrder
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(),CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"processSeq","routeSeq"}, packBean);
}
@Override
public List<MesWorkOrderAssembly> findMesWorkOrderAssembly(String workOrderNo, String organizeCode) {
if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean);
return baseRDao.findByHqlWhere(packBean);
}
}

@ -2,9 +2,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderLogService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
@ -134,4 +136,12 @@ public class MesWorkOrderLogService extends BaseMesService<MesWorkOrderLog> impl
return new ListPager(mesWorkOrderLogList, pager);
}
@Override
public List<MesWorkOrderLog> findMesWorkOrderLog(String workOrderNo, String organizeCode) {
if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean);
return baseRDao.findByHqlWhere(packBean);
}
}

@ -3,10 +3,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description :
* @Reference :
@ -23,4 +26,11 @@ public class MesWorkOrderPartServiceImpl extends BaseMesService<MesWorkOrderPart
DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean);
}
@Override
public List<MesWorkOrderPart> findMesWorkOrderPart(String workOrderNo, String organizeCode) {
if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean);
return baseRDao.findByHqlWhere(packBean);
}
}

@ -66,14 +66,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired
private IMesWorkOrderDao mesWorkOrderDao;
@Autowired
private MesWorkOrderRepository mesWorkOrderRDao;
@Autowired
private MesWorkCenterRepository mesWorkCenterRDao;
@Autowired
private MesShiftRepository mesShiftRDao;
@Autowired
private MesProductPlanRepository mesProductPlanRDao;
@Autowired
private IMesPartProdGroupService mesPartProdGroupService;
@Autowired
private MesCustomerPartRepository mesCustomerPartRDao;
@ -148,6 +144,30 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private MesPartPtrRepository partPtrRao;
@Autowired
private MesPartPtrDetailRepository partPtrDetailRao;
@Autowired
private MesWorkOrderPartRepository workOrderPartRao;
@Autowired
private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao;
@Autowired
private MesQueueOrderRepository queueOrderRao;
@Autowired
private IMesWorkOrderAssemblyService mesWorkOrderAssemblyService;
@Autowired
private IMesWorkOrderPartService mesWorkOrderPartService;
@Autowired
private IMesProduceSnService mesProduceSnService;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
//校验产线与工位的关系
@ -157,10 +177,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//获取相同类型 相同标识 生产序号最大值的
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", orderPackBean);
DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", orderPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean);
MesWorkOrder result = baseRDao.getByProperty(orderPackBean);
Double generateQty = bean.getQty();
//插入前构造数据
onInsertBean(bean);
@ -169,7 +189,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) {
Long productSeq = 0L;
if (null != result && result.getProductSeq() != null) {
productSeq = (long) Math.toIntExact(result.getProductSeq());
productSeq = (long) Math.toIntExact(result.getProductSeq().toString().endsWith("9") ? result.getProductSeq() + 1 : result.getProductSeq());
}
MesWorkOrder copyMesWorkOrder = new MesWorkOrder();
BeanUtils.copyProperties(bean, copyMesWorkOrder);
@ -179,6 +199,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
baseRDao.insert(copyMesWorkOrder);
workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty());
//生成数量大于1
if (generateQty > 1) {
insertBatchWorkOrder(copyMesWorkOrder, generateQty);
}
return bean;
} else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) {
Long productSeq = 0L;
@ -199,6 +223,96 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return bean;
}
private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) {
//查询数据
List<MesWorkOrderAssembly> orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderPart> orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderToWms> toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
List<MesWorkOrderLog> orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode());
MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(),workOrder.getCustSn());
//数据处理
List<MesWorkOrder> newWrkOrderList = new ArrayList<>();
List<MesWorkOrderAssembly> newOrderAssemblyList = new ArrayList<>();
List<MesWorkOrderPart> newOrderPartList = new ArrayList<>();
List<MesWorkOrderToWms> newToWmsList = new ArrayList<>();
List<MesWorkOrderLog> newOrderLogList = new ArrayList<>();
List<MesProduceSn> newProduceSnList = new ArrayList<>();
MesWorkOrderAssembly newOrderAssembly = null;
MesWorkOrderPart newOrderPart = null;
MesWorkOrderToWms newOrderPartToWms = null;
MesWorkOrderLog orderLog = null;
MesProduceSn newProduceSn = null;
for (int i = 1; i < generateQty ; i++) {
//工单
MesWorkOrder newWorkOrder = new MesWorkOrder();
BeanUtils.copyProperties(workOrder,newWorkOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newWorkOrder.setWorkOrderNo(getOrderNo(workOrder));
newWorkOrder.setProductSeq(workOrder.getProductSeq()+i);
newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(),workOrder.getCreateUser()));
newWrkOrderList.add(newWorkOrder);
//工单装配件
if(!CollectionUtils.isEmpty(orderAssemblyList)){
for (MesWorkOrderAssembly assembly : orderAssemblyList) {
newOrderAssembly = new MesWorkOrderAssembly();
BeanUtils.copyProperties(assembly,newOrderAssembly,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderAssemblyList.add(newOrderAssembly);
}
}
//工单零件
if(!CollectionUtils.isEmpty(orderPartList)){
for (MesWorkOrderPart part : orderPartList) {
newOrderPart = new MesWorkOrderPart();
BeanUtils.copyProperties(part,newOrderPart,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderPartList.add(newOrderPart);
}
}
//工单发送给WMS数据
if(!CollectionUtils.isEmpty(toWmsList)){
for (MesWorkOrderToWms toWms : toWmsList) {
newOrderPartToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(toWms,newOrderPartToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newToWmsList.add(newOrderPartToWms);
}
}
//生产工单日志
if(!CollectionUtils.isEmpty(orderLogList)){
for (MesWorkOrderLog mesWorkOrderLog : orderLogList) {
orderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrderLog,orderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newOrderLogList.add(orderLog);
}
}
//产品条码表
if(!Objects.isNull(mesProduceSn)){
newProduceSn = new MesProduceSn();
BeanUtils.copyProperties(mesProduceSn,newProduceSn,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newProduceSn.setCustSn(newWorkOrder.getCustSn());
newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo());
newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo());
newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo());
newProduceSnList.add(newProduceSn);
}
}
//数据持久化
baseRDao.saveAll(newWrkOrderList);
if(!CollectionUtils.isEmpty(newOrderAssemblyList)){
mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList);
}
if(!CollectionUtils.isEmpty(newOrderPartList)){
mesWorkOrderPartService.insertBatch(newOrderPartList);
}
if(!CollectionUtils.isEmpty(newOrderLogList)){
workOrderLogService.insertBatch(newOrderLogList);
}
if(!CollectionUtils.isEmpty(newToWmsList)){
mesWorkOrderToWmsService.insertBatch(newToWmsList);
}
}
@Override
public MesWorkOrder update(MesWorkOrder bean) {
MesWorkOrder result = getMesWorkOrder(bean.getWorkOrderNo(),bean.getOrganizeCode());
@ -315,28 +429,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (StringUtil.isEmpty(item.getCustPartNo())) {
getCustomerPart(item);
}
//生成工单号
List<String> orderList=new ArrayList<>();
if(item.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()){
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO);
genSerialNoModel.setPartNo(item.getWorkCenterCode());
orderList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList();
}else {
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO);
orderList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList();
}
String orderNo = orderList.get(0);
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean);
if (baseRDao.isExitByHql(orderPackBean)) {
MesException.throwMesBusiException("单号流水码生成重复");
}
item.setWorkOrderNo(orderNo);
//校验标识
//若工单类型为排序
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) {
ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空");
ValidatorBean.checkNotNull(item.getCustPartNo(), "客户物料号不能为空");
//校验产线类型和工单类型是否匹配
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) {
MesException.throwMesBusiException("产线【%s】类型为【%s】请选择排序产线", mesWorkCenter.getWorkCenterCode(),
@ -365,7 +464,14 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//排序工单数量为1
item.setQty(1d);
//发送工单给WMS
sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms);
List<MesWorkOrderPart> orderPartList = sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms);
//生成工单号
item.setWorkOrderNo(getOrderNo(item));
//生成客户条码
item.setCustSn(getCustSn(item.getCustPartNo(), item.getOrganizeCode(),item.getCreateUser()));
//生成工单零件 工单装配件
insertMesWorkOrder(item, orderPartList);
} else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空");
if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) {
@ -405,6 +511,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//发送工单给WMS
sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms);
}
//生成工单号
if(StringUtil.isEmpty(item.getWorkOrderNo())){
item.setWorkOrderNo(getOrderNo(item));
}
//物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode());
item.setPartName(mesPart.getPartName());
@ -414,29 +524,197 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
item.setProduceTime(TimeTool.getToday());
item.setProductTime(item.getProduceTime());
}
item.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
item.setUnCompleteQty(item.getQty());
item.setFid(UUID.randomUUID().toString());
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(item.getWorkOrderNo()));
mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms);
}
}
private void sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List<MesWorkOrderToWms> saveMesWorkOrderToWms) {
private String getOrderNo(MesWorkOrder item) {
String orderNo;
if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()){
GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN");
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList();
String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", "");
orderNo = item.getOrganizeCode() + item.getOrderFlag() + item.getShiftCode() + serialNo;
}else if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()){
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO);
genSerialNoModel.setPartNo(item.getWorkCenterCode());
orderNo = (String)syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList().get(0);
}else {
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO);
orderNo = (String)syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList().get(0);
}
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean);
if (baseRDao.isExitByHql(orderPackBean)) {
MesException.throwMesBusiException("单号流水码生成重复");
}
return orderNo;
}
private void insertMesWorkOrder(MesWorkOrder item, List<MesWorkOrderPart> orderPartList) {
/**
* bom,
*
*/
Map<String,String> ptrRuleListMap = new HashMap<>();
//是否修改为P单
boolean isModifyPOrder = false;
//查询mes_part_ptr表根据物料清单查找ptr替换信息
if (!CollectionUtils.isEmpty(orderPartList)){
Map<String, MesWorkOrderPart> orderPartMap = orderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity()));
//先替换客户的ptr信息
String ptrInfo = item.getPtrInfo();
if (!StringUtils.isEmpty(ptrInfo)) {
List<String> ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|"));
if (!ptrInfoList.isEmpty()){
List<MesPartPtr> custPartPtrList = getCustPartPtrList(ptrInfoList, item.getOrganizeCode());
for (MesPartPtr mesPartPtr : custPartPtrList) {
//根据mesPartPtr的目标零件号找到零件信息
String destPartNo = mesPartPtr.getDestPartNo();
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode());
//更新物料清单
MesWorkOrderPart orderPart = orderPartMap.get(destPartNo);
if (orderPart != null) {
orderPart.setPartNo(mesPartSap.getPartNo());
orderPart.setPartName(mesPartSap.getPartName());
orderPart.setShippingPartNo(mesPartSap.getPartNo());
if (!isModifyPOrder){
isModifyPOrder = true;
}
}
}
}
}
List<String> partNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
List<MesPartPtr> partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList);
//装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号value 是规则
for (MesPartPtr mesPartPtr : partPtrList) {
//根据mesPartPtr的目标零件号找到零件信息
String destPartNo = mesPartPtr.getDestPartNo();
String srcPartNo = mesPartPtr.getSrcPartNo();
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode());
//更新物料清单
MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo);
if (orderPart != null) {
orderPart.setPartNo(mesPartSap.getPartNo());
orderPart.setPartName(mesPartSap.getPartName());
orderPart.setShippingPartNo(mesPartSap.getPartNo());
ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule());
if (!isModifyPOrder){
isModifyPOrder = true;
}
//更新mes_part_ptr的实际数量 + 1
mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1);
ConvertBean.saveOrUpdate(mesPartPtr, item.getModifyUser());
partPtrRao.update(mesPartPtr);
DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean);
DdlPreparedPack.getStringEqualPack(item.getPartNo(),"totalPartNo",partPtrDetailPackBean);
List<MesPartPtrDetail> partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean);
if (!partPtrDetailList.isEmpty()){
MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0);
mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1);
ConvertBean.saveOrUpdate(mesPartPtrDetail, item.getModifyUser());
partPtrDetailRao.update(mesPartPtrDetail);
}
//更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么
}
}
}
// 生成装配件清单
if (isModifyPOrder){
item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue());
}
if (!CollectionUtils.isEmpty(orderPartList)) {
for (MesWorkOrderPart orderPart : orderPartList) {
orderPart.setOrganizeCode(item.getOrganizeCode());
orderPart.setWorkOrderNo(item.getWorkOrderNo());
ConvertBean.saveOrUpdate(orderPart, item.getModifyUser());
}
workOrderPartRao.saveAll(orderPartList);
}
List<MesWorkOrderAssembly> assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode());
if (!CollectionUtils.isEmpty(assemblyList)) {
for (MesWorkOrderAssembly orderAssembly : assemblyList) {
if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){
orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo()));
}
orderAssembly.setPartNo(item.getPartNo());
orderAssembly.setPartName(item.getPartName());
orderAssembly.setWorkOrderNo(item.getWorkOrderNo());
orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue());
orderAssembly.setOrganizeCode(item.getOrganizeCode());
orderAssembly.setProductSn(item.getWorkOrderNo());
orderAssembly.setAreaCode(item.getAreaCode());
ConvertBean.saveOrUpdate(orderAssembly, item.getCreateUser());
}
workOrderAssemblyRepository.saveAll(assemblyList);
List<String> cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList());
Map<String, List<MesWorkOrderAssembly>> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode));
for (String cellCode : cellCodeList) {
MesQueueOrder mesQueueOrder = new MesQueueOrder();
BeanUtils.copyProperties(item,mesQueueOrder,"id");
mesQueueOrder.setWorkCellCode(cellCode);
mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq());
mesQueueOrder.setSerialNumber(item.getWorkOrderNo());
mesQueueOrder.setProductSn(item.getWorkOrderNo());
mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue());
ConvertBean.saveOrUpdate(mesQueueOrder, item.getCreateUser());
queueOrderRao.insert(mesQueueOrder);
}
}
//生成条码表
MesProduceSn mesProduceSn = new MesProduceSn();
mesProduceSn.setProductSn(item.getWorkOrderNo());
mesProduceSn.setCustSn(item.getCustSn());
mesProduceSn.setWorkOrderNo(item.getWorkOrderNo());
mesProduceSn.setOrganizeCode(item.getOrganizeCode());
mesProduceSn.setFid(UUID.randomUUID().toString());
mesProduceSn.setCustCode(item.getCustCode());
mesProduceSn.setCustPartNo(item.getCustPartNo());
mesProduceSn.setPartNo(item.getPartNo());
mesProduceSn.setPartName(item.getPartName());
mesProduceSn.setShiftCode(item.getShiftCode());
mesProduceSn.setWorkCenterCode(item.getWorkCenterCode());
mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
mesProduceSn.setQty(1.0);
mesProduceSn.setSerialNumber(item.getWorkOrderNo());
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue());
mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue());
mesProduceSn.setFid(UUID.randomUUID().toString());
mesProduceSn.setAreaCode(item.getAreaCode());
ConvertBean.saveOrUpdate(mesProduceSn, item.getCreateUser());
mesProduceSnRao.insert(mesProduceSn);
}
private List<MesWorkOrderPart> sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List<MesWorkOrderToWms> saveMesWorkOrderToWms) {
//非试制单
List<MesBom> bomList = null;
MesProductVersion mesProductVersion = null;
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) {
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(item, mesWorkCenter);
mesProductVersion = getMesProductVersion(item, mesWorkCenter);
item.setProductVersion(mesProductVersion.getProductVersion());
//获取bom信息
bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
}
//是否自动发布
isAuto(item, saveMesWorkOrderToWms, bomList);
return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion);
}
private void isAuto(MesWorkOrder item, List<MesWorkOrderToWms> saveMesWorkOrderToWms, List<MesBom> bomList) {
private List<MesWorkOrderPart> isAuto(MesWorkOrder item, List<MesWorkOrderToWms> saveMesWorkOrderToWms, List<MesBom> bomList,MesProductVersion mesProductVersion) {
MesPartProdGroup mesPartProdGroup = null;
if(StringUtil.isEmpty(item.getPartProdGroupCode())){
mesPartProdGroup = getMesPartProdGroup(item);
@ -465,6 +743,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} else {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
}
// 打散bom
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
if (mesPartProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && !Objects.isNull(mesProductVersion)) {
workOrderPartList = dismantleBom(findBomList(item.getOrganizeCode(), iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode()),mesProductVersion.getAlternativePartList()), item.getQty(), item.getOrganizeCode(), item.getWorkCellCode(), item.getWorkOrderNo());
}
return workOrderPartList;
}
private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder) {
@ -483,15 +768,14 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private MesPartProdGroup getMesPartProdGroup(MesWorkOrder item) {
MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail();
mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode());
mesPartProdGroupDetail.setPartNo(item.getPartNo());
mesPartProdGroupDetail.setProductPartNo(item.getPartNo());
mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode());
List<MesPartProdGroup> mesPartProdGroupList = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail);
if (CollectionUtils.isEmpty(mesPartProdGroupList)) {
MesException.throwMesBusiException("生产线代码【%s】零件号【%s】对应的零件生产组信息没有维护",
item.getWorkCenterCode(), item.getPartNo());
}
MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.iterator().next();
return mesPartProdGroup;
return mesPartProdGroupList.iterator().next();
}
private void getCustomerPart(MesWorkOrder item) {
@ -517,8 +801,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) {
DdlPackBean ddlPackBean;
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
//DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
@ -1256,15 +1539,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(printTemplate, organizeCode);
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (StringUtils.isEmpty(labelTemplate.getMethodCode())) {
if (Objects.isNull(labelTemplate) || StringUtils.isEmpty(labelTemplate.getMethodCode())) {
MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode());
}
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
Map<String, Object> modelMap = new HashMap<>();
modelMap.put("mesWorkOrder", mesWorkOrder);
modelMap.put("mesPartProdGroup", mesPartProdGroup);
@ -1638,7 +1918,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(statusList, "workOrderStatus", packBean);
return mesWorkOrderRDao.findByHqlWhere(packBean);
return baseRDao.findByHqlWhere(packBean);
}
private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) {
@ -1722,7 +2002,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
String orderNo = orderList.get(0);
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean);
if (mesWorkOrderRDao.isExitByHql(orderPackBean)) {
if (baseRDao.isExitByHql(orderPackBean)) {
MesException.throwMesBusiException("单号流水码生成重复");
}
item.setWorkOrderNo(orderNo);
@ -1953,4 +2233,240 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return count > 0;
}
private String getCustSn(String partNo,String organizeCode,String userName){
Calendar custCalendar = Calendar.getInstance();
custCalendar.setTime(new Date());
GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE");
String prefix = partNo.substring(0, partNo.length() - 4);
String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase();
custGenSerialNoModel.setPartNo(prefix+partNo4);
String year = custCalendar.get(Calendar.YEAR)+"";
custGenSerialNoModel.setYear(year.substring(2));
custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR)));
List<String> custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, userName, organizeCode, 1).getResultList();
// [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT%
//截取替换为ascii码
String snOriginal = custNumRuleList.get(0);
String[] split = snOriginal.split("%RS%");
StringBuilder rsStr = new StringBuilder();
for (int i = 0; i < split.length-1; i++) {
rsStr.append(split[i]).append((char) 30);
}
rsStr.append(split[split.length - 1]);
StringBuilder gsStr = new StringBuilder();
String[] split1 = rsStr.toString().split("%GS%");
for (int i = 0; i < split1.length-1; i++) {
gsStr.append(split1[i]).append((char) 29);
}
gsStr.append(split1[split1.length-1]);
String[] split2 = gsStr.toString().split("%EOT%");
return split2[0]+(char)4;
}
private List<MesWorkOrderPart> dismantleBom(List<MesBom> bomList, double qty,String organizeCode, String workCellCode, String workOrderNo) {
List<MesWorkOrderPart> orderPartList = new ArrayList<>();
//1.根据bomList中的subPartNo 查询零件清单 partList
List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList());
List<MesPartSap> partSapList = mesPartSapService.findMesPartSapByPartNoList(partNoList,organizeCode);
Map<String, MesPartSap> partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity()));
//2.遍历bomList
for (MesBom bom : bomList) {
MesWorkOrderPart orderPart = new MesWorkOrderPart();
MesPartSap partSap = partMap.get(bom.getItemPartNo());
if (partSap == null) {
MesException.throwMesBusiException("工厂【%s】零件号【%s】未查到零件信息", organizeCode, bom.getItemPartNo());
}
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.setWorkOrderNo(workOrderNo);
orderPart.setWorkCellCode(workCellCode);
orderPartList.add(orderPart);
}
return orderPartList;
}
private List<MesPartPtr> getPartPtrList(String organizeCode,String workCenterCode, List<String> partNoList) {
DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean);
DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean);
DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean);
DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean);
List<MesPartPtr> partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean);
partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0)
.filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount())
.collect(Collectors.toList());
return partPtrList;
}
//根据排序信息PTR零件号 获取 ptr信息
private List<MesPartPtr> getCustPartPtrList(List<String> ptrInfoList,String organizeCode){
DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean);
return partPtrRao.findByHqlWhere(partPtrPackBean);
}
private List<MesWorkOrderAssembly> getAssemblyList(String workCenterCode, String vehicleNo, List<MesWorkOrderPart> workOrderPartList, String organizeCode) {
//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(organizeCode);
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())){
log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum());
continue;
}
}
//2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项
if (!StringUtils.isEmpty(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);
orderAssembly.setPreCraftCode(sortCfg.getPreCraftCode());
workOrderAssemblyList.add(orderAssembly);
}
//车型不为空的逻辑--用于报工
DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode);
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());
orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode());
workOrderAssemblyList.add(orderAssembly);
}
//查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则
DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(organizeCode);
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());
orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode());
workOrderAssemblyList.add(orderAssembly);
}
return workOrderAssemblyList;
}
}

@ -3,6 +3,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToWmsService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesBom;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToWms;
@ -41,4 +44,12 @@ public class MesWorkOrderToWmsServiceImpl extends BaseMesService<MesWorkOrderToW
}
return mesWorkOrderToWmsList;
}
@Override
public List<MesWorkOrderToWms> findMesWorkOrderToWms(String workOrderNo, String organizeCode) {
if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean);
return baseRDao.findByHqlWhere(packBean);
}
}

Loading…
Cancel
Save