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

tags/yfai-pcn-ext-v2.3
jun 7 months ago
commit 8419842a17

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.dao;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg;
import io.swagger.annotations.ApiOperation;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/15 13:28
* @Modify:
**/
public interface IMesProdRuleSortCfgDao {
@ApiOperation("查询排序加工规则")
MesProdRuleSortCfg getMesProdRuleSortCfg(String organizeCode, String partNo, String workCenterCode);
}

@ -0,0 +1,43 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdRuleSortCfgDao;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg;
import groovy.util.logging.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/10/15 13:29
* @Modify:
**/
@Service
@Slf4j
public class MesProdRuleSortCfgDaoImpl implements IMesProdRuleSortCfgDao {
@Autowired
private EntityManager entityManager;
@Override
public MesProdRuleSortCfg getMesProdRuleSortCfg(String organizeCode, String partNo, String workCenterCode) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(workCenterCode)) return null;
StringBuilder hql = new StringBuilder();
hql.append(" select sortCfg from MesProdRuleSortCfg sortCfg where 1=1");
hql.append(" and sortCfg.organizeCode = :organizeCode and sortCfg.isValid = :isValid and sortCfg.isDeleted = :isDeleted ");
hql.append(" and sortCfg.workCenterCode = :workCenterCode and (sortCfg.productPartNo = :partNo or sortCfg.reportPartNo =:partNo)");
Query hqlQuery = entityManager.createQuery(hql.toString(), MesProdRuleSortCfg.class);
hqlQuery.setParameter("organizeCode", organizeCode);
hqlQuery.setParameter("isValid", CommonEnumUtil.VALID);
hqlQuery.setParameter("isDeleted", CommonEnumUtil.FALSE);
hqlQuery.setParameter("workCenterCode", workCenterCode);
hqlQuery.setParameter("partNo", partNo);
return (MesProdRuleSortCfg) hqlQuery.getSingleResult();
}
}

@ -25,7 +25,7 @@ import java.util.stream.Stream;
**/ **/
@Service @Service
@Slf4j @Slf4j
public class MesMesProductionRecordImpl implements IMesProductionRecordDao { public class MesProductionRecordImpl implements IMesProductionRecordDao {
@Autowired @Autowired
private EntityManager entityManager; private EntityManager entityManager;

@ -55,7 +55,7 @@ public class MesJisShippingServiceImpl implements IMesJisShippingService {
jisShipping.setCusDock(orderManagement.getCustDockCode()); jisShipping.setCusDock(orderManagement.getCustDockCode());
jisShipping.setCustOrderNo(orderManagement.getOrderCode()); jisShipping.setCustOrderNo(orderManagement.getOrderCode());
jisShipping.setSerialNumber(k.getBarcode()); jisShipping.setSerialNumber(k.getBarcode());
jisShipping.setQuantityPerCar(1); jisShipping.setQuantityPerCar(1d);
jisShipping.setOffTime(TimeTool.getNowTime(true)); jisShipping.setOffTime(TimeTool.getNowTime(true));
jisShipping.setShippingOrderCode(orderManagement.getShippingCode()); jisShipping.setShippingOrderCode(orderManagement.getShippingCode());
jisShipping.setFid(UUID.randomUUID().toString()); jisShipping.setFid(UUID.randomUUID().toString());

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdRuleSortCfgDao;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProductionRecordDao; import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProductionRecordDao;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
@ -132,6 +133,12 @@ public class MesWorkOrderService implements IMesWorkOrderService {
@Autowired @Autowired
private MesMoveRepository mesMoveRepository; private MesMoveRepository mesMoveRepository;
@Autowired
private MesJisShippingRepository mesJisShippingRepository;
@Autowired
private IMesProdRuleSortCfgDao mesProdRuleSortCfgDao;
@Override @Override
public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) {
@ -256,8 +263,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
oldMesWorkOrder.setNum(mesWorkOrderList.size()); oldMesWorkOrder.setNum(mesWorkOrderList.size());
oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty()));
//更新SAP计划完成数量
saveMesProductPlan(oldMesWorkOrder, false, true);
//更新工单状态 //更新工单状态
double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty());
@ -618,15 +623,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//throw new ImppBusiException(String.format("未找到匹配的加工单")); //throw new ImppBusiException(String.format("未找到匹配的加工单"));
} }
//获取生产版本 //获取生产版本
ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); MesProductVersion mesProductVersion = getProductVersion(organizeCode, productionRecord.getPartNo(), oldMesWorkOrder.getProductVersion());
DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean);
// DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getProductVersion(), "productVersion", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
LOGGER.error(String.format("物料【%s】生产版本信息不存在", productionRecord.getPartNo()));
throw new ImppBusiException(String.format("物料【%s】生产版本信息不存在", productionRecord.getPartNo()));
}
//查询物料信息 //查询物料信息
DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(organizeCode);
@ -653,9 +650,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty());
oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
} }
//更新SAP计划完成数量
saveMesProductPlan(oldMesWorkOrder, false, true);
//更新工单状态 //更新工单状态
if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) { if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) {
@ -686,7 +680,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
})); }));
if(MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == productionRecord.getReportType()){ if(MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == productionRecord.getReportType()){
for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) { for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0))); mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0),productionRecord.getProductSn(),false));
} }
} else if (MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == productionRecord.getReportType()) { } else if (MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == productionRecord.getReportType()) {
customerSupplyMove(productionRecord,oldMesWorkOrder, mesProductVersion, mesBoms, productionRecord.getProductSn(), mesProductOffLineList, mesMoveList,userName); customerSupplyMove(productionRecord,oldMesWorkOrder, mesProductVersion, mesBoms, productionRecord.getProductSn(), mesProductOffLineList, mesMoveList,userName);
@ -696,6 +690,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
if(!CollectionUtils.isEmpty(mesProductOffLineList)){ if(!CollectionUtils.isEmpty(mesProductOffLineList)){
mesProductOffLineList.forEach(item -> item.setBomTotalSize(mesProductOffLineList.size()));
mesProductOffLineRDao.saveAll(mesProductOffLineList); mesProductOffLineRDao.saveAll(mesProductOffLineList);
} }
@ -718,21 +713,30 @@ public class MesWorkOrderService implements IMesWorkOrderService {
LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo()); LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo());
} }
List<MesMove> mesMoveList = new ArrayList<>();
private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom) { private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom,String reportSn,boolean isItemReport) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine(); MesProductOffLine newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNo(mesBom.getPartNo());
newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName()); newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName());
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
if (isItemReport) {
//装配费没有bom情况
if (mesBom.getPartNo().equals(oldMesWorkOrder.getPartNo())) {
newMesProductOffLine.setReportPartNo(mesBom.getItemPartNo());
newMesProductOffLine.setReportPartNameRdd(mesBom.getItemPartName());
}
newMesProductOffLine.setReportSn(reportSn);
newMesProductOffLine.setSerialNumber(reportSn);
} else {
newMesProductOffLine.setReportSn(productionRecord.getProductSn());
newMesProductOffLine.setSerialNumber(productionRecord.getSerialNumber());
}
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); newMesProductOffLine.setItemPartName(mesBom.getItemPartName());
newMesProductOffLine.setItemQty(mesBom.getItemQty()); newMesProductOffLine.setItemQty(mesBom.getItemQty());
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
newMesProductOffLine.setQty(1d); newMesProductOffLine.setQty(1d);
newMesProductOffLine.setReportSn(productionRecord.getProductSn());
newMesProductOffLine.setBomVersion(oldMesWorkOrder.getProductVersion()); newMesProductOffLine.setBomVersion(oldMesWorkOrder.getProductVersion());
newMesProductOffLine.setSerialNumber(productionRecord.getSerialNumber());
newMesProductOffLine.setUnit(mesBom.getUnit()); newMesProductOffLine.setUnit(mesBom.getUnit());
newMesProductOffLine.setBomCode(mesBom.getBomCode()); newMesProductOffLine.setBomCode(mesBom.getBomCode());
newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
@ -1040,7 +1044,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//查询产线信息 //查询产线信息
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb); MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb);
//获取生产版本 //获取生产版本
MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb); MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
//物料+生产版本获取bom信息 //物料+生产版本获取bom信息
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty())); mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty()));
@ -1122,6 +1126,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//排序汇报 //排序汇报
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
List<MesMove> mesMoveList = new ArrayList<>(); List<MesMove> mesMoveList = new ArrayList<>();
List<MesJisShipping> shippingList = new ArrayList<>();
boolean isReport = false; boolean isReport = false;
boolean isMove = false; boolean isMove = false;
for (String orderNo : model.getMesProductionRecordMap().keySet()) { for (String orderNo : model.getMesProductionRecordMap().keySet()) {
@ -1142,7 +1147,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
isReport = true; isReport = true;
isMove = true; isMove = true;
} else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == record.getReportType()) { } else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == record.getReportType()) {
customerSupplyMove(model, workOrder, record, mesProductVersion, findMesWorkOrderPartList(model.getMesWorkOrderPartMap(), record.getWorkOrderNo()), mesProductOffLineList, mesMoveList); customerSupplyMove(model, workOrder, record, mesProductVersion, findMesWorkOrderPartList(model.getMesWorkOrderPartMap(), record.getWorkOrderNo()), mesProductOffLineList, mesMoveList,shippingList);
} else { } else {
MesPcnException.throwMesBusiException("工单:%s汇报类型报工类型未维护", record.getWorkOrderNo()); MesPcnException.throwMesBusiException("工单:%s汇报类型报工类型未维护", record.getWorkOrderNo());
} }
@ -1154,19 +1159,25 @@ public class MesWorkOrderService implements IMesWorkOrderService {
mesProductOffLineList.add(getMesProductOffLine(model, record, workOrder, mesProductVersion, mesWorkOrderPart,false)); mesProductOffLineList.add(getMesProductOffLine(model, record, workOrder, mesProductVersion, mesWorkOrderPart,false));
} }
} }
//todo 来源目标获取成品移库 //移库
if (isMove) { if (isMove) {
mesMoveList.add(createMove(getMesPartSap(model.getMesPartSapMap(), record.getReportPartNo()), record, "SrcErpLocation", "destErpLocation", workOrder.getErpWorkCenter(), 1d, MesExtEnumUtil.MOVE_TYPE.FINISH_PRODUCTS_MOVE.getValue(),userName)); MesProdRuleSortCfg mesProdRuleSortCfg = getMesProdRuleSortCfg(organizeCode, record);
mesMoveList.add(createMove(getMesPartSap(model.getMesPartSapMap(), record.getReportPartNo()), record, mesProdRuleSortCfg.getSrcErpLocation(), mesProdRuleSortCfg.getDestErpLocation(), workOrder.getErpWorkCenter(), 1d, MesExtEnumUtil.MOVE_TYPE.FINISH_PRODUCTS_MOVE.getValue(),userName));
} }
} }
//保存报工记录 试制单不报工 //保存报工记录 试制单不报工
if (CollectionUtils.isNotEmpty(mesProductOffLineList)) { if (CollectionUtils.isNotEmpty(mesProductOffLineList)) {
mesProductOffLineList.forEach(item -> item.setBomTotalSize(mesProductOffLineList.size()));
mesProductOffLineRDao.saveAll(mesProductOffLineList); mesProductOffLineRDao.saveAll(mesProductOffLineList);
} }
//保存移库记录 //保存移库记录
if (CollectionUtils.isNotEmpty(mesMoveList)) { if (CollectionUtils.isNotEmpty(mesMoveList)) {
mesMoveRepository.saveAll(mesMoveList); mesMoveRepository.saveAll(mesMoveList);
} }
//保存发运记录
if (CollectionUtils.isNotEmpty(shippingList)) {
mesJisShippingRepository.saveAll(shippingList);
}
//更新加工记录 //更新加工记录
productionRecordService.updateProductionRecord(model.getMesProductionRecordMap().get(orderNo), userName, MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue(), ""); productionRecordService.updateProductionRecord(model.getMesProductionRecordMap().get(orderNo), userName, MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue(), "");
//更新工单汇报数量 //更新工单汇报数量
@ -1186,10 +1197,10 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
} }
private MesProductVersion getProductVersion(MesWorkOrder mesWorkOrderDb) { private MesProductVersion getProductVersion(String organizeCode,String partNo,String productVersion) {
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersion(organizeCode,partNo,productVersion);
if (null == mesProductVersion) { if (null == mesProductVersion) {
MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getProductVersion()); MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion);
} }
return mesProductVersion; return mesProductVersion;
} }
@ -1202,70 +1213,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return mesWorkCenter; return mesWorkCenter;
} }
private void saveMesProductPlan(MesWorkOrder bean, boolean isInsert, boolean isReport) {
if (StringUtil.isEmpty(bean.getPlanOrderNo())) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bean.getPlanStartTime(), "planStartDate", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bean.getPlanEndTime(), "planEndDate", ddlPackBean);
MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean);
if (null == mesProductPlan) {
MesProductPlan mesPlanOrder = new MesProductPlan();
mesPlanOrder.setPlanOrderNo("");
mesPlanOrder.setPlanQty(bean.getQty());
mesPlanOrder.setPlanPartNo(bean.getPartNo());
mesPlanOrder.setCompleteQty(0d);
mesPlanOrder.setUncompleteQty(bean.getQty());
mesPlanOrder.setUnit(bean.getUnit());
mesPlanOrder.setPlanStartDate(bean.getPlanStartTime());
mesPlanOrder.setPlanEndDate(bean.getPlanEndTime());
mesPlanOrder.setPartMappingWorkCenterCode(bean.getErpWorkCenter());
mesPlanOrder.setPlanOrganizeCode(bean.getOrganizeCode());
mesPlanOrder.setOrganizeCode(bean.getOrganizeCode());
ConvertBean.serviceModelInitialize(mesPlanOrder, bean.getCreateUser());
mesProductPlanRDao.insert(mesPlanOrder);
} else {
if (isInsert) {
mesProductPlan.setPlanQty(MathOperation.add(mesProductPlan.getPlanQty(), bean.getQty()));
} else {
//报工
if (isReport) {
mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum()));
//报工调整
} else {
mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum()));
}
}
mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty()));
ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser());
mesProductPlanRDao.update(mesProductPlan);
}
} else {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bean.getPlanOrderNo(), "planOrderNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "planPartNo", ddlPackBean);
MesProductPlan mesProductPlan = mesProductPlanRDao.getByProperty(ddlPackBean);
if (null == mesProductPlan) {
throw new ImppBusiException(String.format("SAP计划单号【%s】物料【%s】,不存在", bean.getPlanOrderNo(), bean.getPartNo()));
}
if (!isInsert) {
if (Objects.isNull(mesProductPlan.getCompleteQty())) {
mesProductPlan.setCompleteQty(0d);
}
//报工
if (isReport) {
mesProductPlan.setCompleteQty(MathOperation.add(mesProductPlan.getCompleteQty(), bean.getNum()));
//报工调整
} else {
mesProductPlan.setCompleteQty(MathOperation.sub(mesProductPlan.getCompleteQty(), bean.getNum()));
}
mesProductPlan.setUncompleteQty(MathOperation.sub(mesProductPlan.getPlanQty(), mesProductPlan.getCompleteQty()));
ConvertBean.serviceModelUpdate(mesProductPlan, bean.getCreateUser());
mesProductPlanRDao.update(mesProductPlan);
}
}
}
@Override @Override
public List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName) { public List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName) {
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>(); List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
@ -1496,7 +1443,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return model; return model;
} }
private void customerSupplyMove(MesWorkOrderSortReportModel model, MesWorkOrder workOrder, MesProductionRecord record, MesProductVersion mesProductVersion, List<MesWorkOrderPart> mesWorkOrderPartList, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList) { private void customerSupplyMove(MesWorkOrderSortReportModel model, MesWorkOrder workOrder, MesProductionRecord record, MesProductVersion mesProductVersion, List<MesWorkOrderPart> mesWorkOrderPartList, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,List<MesJisShipping> shippingList) {
boolean isItemMove; boolean isItemMove;
boolean isItemReport; boolean isItemReport;
MesMoveRule moveRule; MesMoveRule moveRule;
@ -1517,6 +1464,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
isItemReport = true; isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) { } else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true; isItemMove = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.SHIPPING.getValue() == moveRule.getReportType()) {
shippingList.add(getMesJisShipping(model.getOrganizeCode(), workOrder.getWorkOrderNo(), workOrder.getCustCode(), record.getProductSn(), moveRule.getErpSrcLocateNo(), orderPart, model.getUserName()));
} else { } else {
MesPcnException.throwMesBusiException("客供品移库零件【%s】在零件生产组【%s】的移库规则中汇报类型未维护", orderPart.getPartNo(), workOrder.getPartProdGroupCode()); MesPcnException.throwMesBusiException("客供品移库零件【%s】在零件生产组【%s】的移库规则中汇报类型未维护", orderPart.getPartNo(), workOrder.getPartProdGroupCode());
} }
@ -1547,8 +1496,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
isItemReport = false; isItemReport = false;
isItemMove = false; isItemMove = false;
moveRule = null; moveRule = null;
MesPart itemPart = null;
if (itemPartMap.containsKey(mesBom.getItemPartNo())) { if (itemPartMap.containsKey(mesBom.getItemPartNo())) {
MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next();
if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) { if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) {
moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next(); moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next();
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) { if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
@ -1563,7 +1513,21 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
//汇报 //汇报
if (isItemReport) { if (isItemReport) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom)); String reportSn = String.valueOf(snowflakeIdMaker.nextId());
MesProductVersion itemVersion = getProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion());
List<MesBom> bomList = null;
try {
bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList());
} catch (Exception e) {
}
//bom下的子节汇报
if (!CollectionUtils.isEmpty(bomList)) {
for (MesBom bom : bomList) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, bom, reportSn, true));
}
} else {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, itemVersion, mesBom, reportSn, true));
}
} }
//移库 //移库
if (isItemMove) { if (isItemMove) {
@ -1577,6 +1541,12 @@ public class MesWorkOrderService implements IMesWorkOrderService {
mesMoveList.add(move); mesMoveList.add(move);
} }
} }
//bom下的子节汇报总成也需要汇报
if (!CollectionUtils.isEmpty(mesProductOffLineList)) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom, productionRecord.getProductSn(), false));
}
}
} }
private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) { private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
@ -1647,6 +1617,34 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return mesWorkOrderPartRepository.findByHqlWhere(packBean); return mesWorkOrderPartRepository.findByHqlWhere(packBean);
} }
private MesProdRuleSortCfg getMesProdRuleSortCfg(String organizeCode, MesProductionRecord record) {
MesProdRuleSortCfg mesProdRuleSortCfg = mesProdRuleSortCfgDao.getMesProdRuleSortCfg(organizeCode, record.getReportPartNo(), record.getWorkCenterCode());
if(Objects.isNull(mesProdRuleSortCfg)){
MesPcnException.throwMesBusiException("汇报零件:%s 产线:%s排序加工规则不存在", record.getReportPartNo(), record.getWorkCenterCode());
}
return mesProdRuleSortCfg;
}
private MesJisShipping getMesJisShipping(String organizeCode, String workOrderNo,String custCode, String productSn, String srcLocateNo, MesWorkOrderPart orderPart,String userName) {
MesJisShipping jisShipping = new MesJisShipping();
jisShipping.setPartNo(orderPart.getPartNo());
jisShipping.setUnit(orderPart.getItemUnit());
jisShipping.setOrganizeCode(organizeCode);
jisShipping.setFactoryCode(organizeCode);
jisShipping.setShippingTime(TimeTool.getNowTime(true));
jisShipping.setErpWarerhouse(srcLocateNo);
jisShipping.setCusCode(custCode);
jisShipping.setCustOrderNo(workOrderNo);
jisShipping.setShippingOrderCode(workOrderNo);
jisShipping.setSerialNumber(productSn);
jisShipping.setQuantityPerCar(orderPart.getItemQty());
jisShipping.setOffTime(TimeTool.getNowTime(true));
jisShipping.setFid(UUID.randomUUID().toString());
jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelInitialize(jisShipping, userName);
return jisShipping;
}
private MesProductOffLine getMesProductOffLine(MesWorkOrderSortReportModel model, MesProductionRecord record, MesWorkOrder workOrder, MesProductVersion mesProductVersion, MesWorkOrderPart mesWorkOrderPart,boolean isItemReport) { private MesProductOffLine getMesProductOffLine(MesWorkOrderSortReportModel model, MesProductionRecord record, MesWorkOrder workOrder, MesProductVersion mesProductVersion, MesWorkOrderPart mesWorkOrderPart,boolean isItemReport) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine(); MesProductOffLine newMesProductOffLine = new MesProductOffLine();
if(!isItemReport){ if(!isItemReport){

Loading…
Cancel
Save