|
|
@ -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){
|
|
|
|