|
|
|
@ -16,6 +16,7 @@ import cn.estsh.i3plus.platform.common.tool.MathOperation;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.ListPager;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.common.Pager;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
@ -145,6 +146,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesPrintedSnLogRepository printedSnLogRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private SnowflakeIdMaker snowflakeIdMaker;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesWorkOrder insert(MesWorkOrder bean) {
|
|
|
|
|
//校验产线与工位的关系
|
|
|
|
@ -912,7 +916,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
//查询产线信息
|
|
|
|
|
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode());
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb);
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
//报工类型
|
|
|
|
@ -1012,7 +1016,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder);
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode(),mesWorkOrder.getProductVersion());
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
//生成条码
|
|
|
|
@ -1022,6 +1026,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
List<MesMove> mesMoveList = new ArrayList<>();
|
|
|
|
|
boolean isReport = false;
|
|
|
|
|
boolean isMove = false;
|
|
|
|
|
String nowTime = TimeTool.getNowTime(true);
|
|
|
|
|
//排序工单
|
|
|
|
|
if (MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
|
|
|
|
|
//报工类型
|
|
|
|
@ -1038,7 +1043,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
isReport = true;
|
|
|
|
|
isMove = true;
|
|
|
|
|
} else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
|
|
|
|
|
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList);
|
|
|
|
|
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,true);
|
|
|
|
|
} else {
|
|
|
|
|
log.info("工单{}排序加工规则报工类型未维护", mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
return;
|
|
|
|
@ -1049,7 +1054,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
|
|
|
|
|
//成品汇报
|
|
|
|
|
if (isReport) {
|
|
|
|
|
String nowTime = TimeTool.getNowTime(true);
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size()));
|
|
|
|
|
}
|
|
|
|
@ -1064,11 +1068,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
} else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
|
|
|
|
|
MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
|
|
|
|
|
if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == mesProdRuleNoSortCfg.getReportType()) {
|
|
|
|
|
String nowTime = TimeTool.getNowTime(true);
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}else if(MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleNoSortCfg.getReportType()) {
|
|
|
|
|
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,false);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
log.info("工单{}排序规则不属于排序工单和非排序工单", mesWorkOrder.getWorkOrderNo());
|
|
|
|
@ -1346,7 +1350,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
if (CollectionUtils.isEmpty(oldProductOffLineList)) {
|
|
|
|
|
MesException.throwMesBusiException("条码【%s】未查询到报工数据", model.getSn());
|
|
|
|
|
}
|
|
|
|
|
oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode());
|
|
|
|
|
//oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode());
|
|
|
|
|
oldProductOffLineList.forEach(item -> {
|
|
|
|
|
item.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue());
|
|
|
|
|
item.setOrderNo(model.getShipOrderNo());
|
|
|
|
@ -1430,10 +1434,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList) {
|
|
|
|
|
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime,boolean isSort) {
|
|
|
|
|
boolean isItemMove;
|
|
|
|
|
boolean isItemReport;
|
|
|
|
|
MesMoveRule moveRule;
|
|
|
|
|
MesPart itemPart;
|
|
|
|
|
//查询零件生产组的移库规则
|
|
|
|
|
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode());
|
|
|
|
|
Map<String, List<MesMoveRule>> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType));
|
|
|
|
@ -1446,8 +1451,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
isItemReport = false;
|
|
|
|
|
isItemMove = false;
|
|
|
|
|
moveRule = null;
|
|
|
|
|
itemPart = null;
|
|
|
|
|
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())) {
|
|
|
|
|
moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next();
|
|
|
|
|
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
|
|
|
|
@ -1461,9 +1467,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//汇报
|
|
|
|
|
if (isItemReport) {
|
|
|
|
|
String nowTime = TimeTool.getNowTime(true);
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true,nowTime,mesBoms.size()));
|
|
|
|
|
if (isItemReport && isSort) {
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size()));
|
|
|
|
|
} else if (isItemReport) {
|
|
|
|
|
String reportSn = String.valueOf(snowflakeIdMaker.nextId());
|
|
|
|
|
MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion());
|
|
|
|
|
List<MesBom> bomList = mesBomService.findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList());
|
|
|
|
|
//bom下的子节汇报
|
|
|
|
|
if (!CollectionUtils.isEmpty(bomList)) {
|
|
|
|
|
for (MesBom bom : bomList) {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, nowTime));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true, nowTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//移库
|
|
|
|
|
if (isItemMove) {
|
|
|
|
@ -1476,6 +1493,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
mesMoveList.add(move);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//bom下的子节汇报,总成也需要汇报
|
|
|
|
|
if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) {
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false, nowTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
|
|
|
|
@ -1507,18 +1531,53 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
//DdlPreparedPack.getStringEqualPack(mesWorkOrder.getErpWorkCenter(), "workCenterCode", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean);
|
|
|
|
|
private MesProductVersion getMesProductVersion(String partNo,String organizeCode,String productVersion) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrder.getPartNo(),mesWorkOrder.getProductVersion());
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo,productVersion);
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
|
|
|
|
|
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) {
|
|
|
|
|
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id");
|
|
|
|
|
newMesProductOffLine.setReportPartNo(mesBom.getPartNo());
|
|
|
|
|
newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName());
|
|
|
|
|
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setQty(MathOperation.mul(mesWorkOrder.getNum(),itemQty));
|
|
|
|
|
newMesProductOffLine.setItemQty(MathOperation.mul(newMesProductOffLine.getQty(), mesBom.getItemQty()));
|
|
|
|
|
if (isItemReport && mesBom.getPartNo().equals(mesWorkOrder.getPartNo())) {
|
|
|
|
|
newMesProductOffLine.setReportPartNo(mesBom.getItemPartNo());
|
|
|
|
|
newMesProductOffLine.setReportPartNameRdd(mesBom.getItemPartName());
|
|
|
|
|
newMesProductOffLine.setItemPartNo("");
|
|
|
|
|
newMesProductOffLine.setItemPartName("");
|
|
|
|
|
newMesProductOffLine.setItemUnit("");
|
|
|
|
|
newMesProductOffLine.setItemQty(0d);
|
|
|
|
|
}
|
|
|
|
|
newMesProductOffLine.setReportSn(sn);
|
|
|
|
|
newMesProductOffLine.setSerialNumber(sn);
|
|
|
|
|
newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion());
|
|
|
|
|
newMesProductOffLine.setUnit(mesBom.getUnit());
|
|
|
|
|
newMesProductOffLine.setBomCode(mesBom.getBomCode());
|
|
|
|
|
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType());
|
|
|
|
|
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
|
|
|
|
|
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
newMesProductOffLine.setDescription(nowTime);
|
|
|
|
|
newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString());
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser());
|
|
|
|
|
return newMesProductOffLine;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
|
|
|
|
|
String sn, MesBom mesBom, boolean isItemReport,String nowTime,Integer bomTotalSize) {
|
|
|
|
@ -1747,7 +1806,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb);
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
|
|
|
|
|