|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.*;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
|
|
|
|
@ -31,7 +32,9 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@Slf4j
|
|
|
|
@ -64,7 +67,16 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
private MesCustomerPartRepository mesCustomerPartRDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesPartSapService iMesPartSapService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesMoveRuleService mesMoveRuleService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProdRuleNosortCfgService mesProdRuleNosortCfgService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesPartSapService mesPartSapService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesMoveRepository mesMoveRDao;
|
|
|
|
|
@Override
|
|
|
|
|
public MesWorkOrder insert(MesWorkOrder bean) {
|
|
|
|
|
//插入前构造数据
|
|
|
|
@ -327,13 +339,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//校验零件生产组信息
|
|
|
|
|
// MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail();
|
|
|
|
|
// mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode());
|
|
|
|
|
// mesPartProdGroupDetail.setPartNo(item.getPartNo());
|
|
|
|
|
// mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode());
|
|
|
|
|
// List<MesPartProdGroup> mesPartProdGroup = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail);
|
|
|
|
|
|
|
|
|
|
//校验零件生产组信息
|
|
|
|
|
if(StringUtil.isEmpty(item.getPartProdGroupCode())){
|
|
|
|
|
MesPartProdGroup mesPartProdGroup = getMesPartProdGroup(item);
|
|
|
|
|
item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode());
|
|
|
|
|
item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//排序工单数量为1
|
|
|
|
|
item.setQty(1d);
|
|
|
|
@ -387,6 +399,19 @@ 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.setOrganizeCode(item.getOrganizeCode());
|
|
|
|
|
List<MesPartProdGroup> mesPartProdGroupList = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail);
|
|
|
|
|
if(CollectionUtils.isEmpty(mesPartProdGroupList)){
|
|
|
|
|
MesException.throwMesBusiException("生产线代码【%s】零件号【%s】对应的零件生产组信息没有维护");
|
|
|
|
|
}
|
|
|
|
|
MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.iterator().next();
|
|
|
|
|
return mesPartProdGroup;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void getCustomerPart(MesWorkOrder item) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "erpPartNo", ddlPackBean);
|
|
|
|
@ -476,23 +501,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrder.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
//获取生产版本
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder);
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean);
|
|
|
|
|
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesBoms)) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在",
|
|
|
|
|
mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion());
|
|
|
|
|
}
|
|
|
|
|
List<MesBom> mesBoms = getMesBoms(mesWorkOrder, mesPart, mesProductVersion);
|
|
|
|
|
//报工类型
|
|
|
|
|
if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) {
|
|
|
|
|
mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getReportedQty()));
|
|
|
|
@ -525,45 +536,267 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
update(mesWorkOrder);
|
|
|
|
|
|
|
|
|
|
//生成条码
|
|
|
|
|
// todo
|
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN);
|
|
|
|
|
genSerialNoModel.setPartNo(mesWorkOrder.getPartNo());
|
|
|
|
|
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList();
|
|
|
|
|
List<String> resultList = getStringList(mesWorkOrder);
|
|
|
|
|
|
|
|
|
|
//保存数据
|
|
|
|
|
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
|
|
|
|
|
MesProductOffLine newMesProductOffLine;
|
|
|
|
|
for (String sn : resultList) {
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
|
|
|
|
|
newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName());
|
|
|
|
|
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
newMesProductOffLine.setItemPartName(mesBom.getItemPartName());
|
|
|
|
|
newMesProductOffLine.setItemQty(mesBom.getItemQty());
|
|
|
|
|
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setQty(1d);
|
|
|
|
|
newMesProductOffLine.setReportSn(sn);
|
|
|
|
|
newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion());
|
|
|
|
|
newMesProductOffLine.setSerialNumber(sn);
|
|
|
|
|
newMesProductOffLine.setUnit(mesBom.getUnit());
|
|
|
|
|
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
|
|
|
|
|
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
|
|
|
|
|
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(mesWorkCenter.getErpWorkCenter());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
|
|
|
|
|
mesProductOffLineList.add(newMesProductOffLine);
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,false));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
mesProductOffLineService.insertBatch(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doProductReportExt(MesWorkOrder mesWorkOrderNew) {
|
|
|
|
|
MesWorkOrder mesWorkOrder = baseRDao.getById(mesWorkOrderNew.getId());
|
|
|
|
|
if(Objects.isNull(mesWorkOrder)){
|
|
|
|
|
MesException.throwMesBusiException("工单id为【%s】工单信息不存在",mesWorkOrderNew.getId());
|
|
|
|
|
}
|
|
|
|
|
//查询物料信息
|
|
|
|
|
MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
|
|
|
|
|
if(mesWorkOrderNew.getNum() <= 0){
|
|
|
|
|
MesException.throwMesBusiException("工单报工数量不能为0,不允许报工");
|
|
|
|
|
}
|
|
|
|
|
//报工类型
|
|
|
|
|
//报工
|
|
|
|
|
if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) {
|
|
|
|
|
mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrderNew.getNum(), mesWorkOrder.getReportedQty()));
|
|
|
|
|
} else {
|
|
|
|
|
//冲销数量大于工单完成数量报错
|
|
|
|
|
if (mesWorkOrderNew.getNum() > mesWorkOrder.getReportedQty()) {
|
|
|
|
|
MesException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销",
|
|
|
|
|
mesWorkOrderNew.getNum(), mesWorkOrder.getReportedQty());
|
|
|
|
|
}
|
|
|
|
|
//报工调整数量加-
|
|
|
|
|
mesWorkOrder.setAdjustQty((MathOperation.add(mesWorkOrderNew.getNum(), mesWorkOrder.getAdjustQty())));
|
|
|
|
|
//已汇报数量减一
|
|
|
|
|
mesWorkOrder.setReportedQty(MathOperation.sub(mesWorkOrder.getReportedQty(), mesWorkOrderNew.getNum()));
|
|
|
|
|
}
|
|
|
|
|
//更新工单状态
|
|
|
|
|
double unCompleteQty = MathOperation.sub(mesWorkOrder.getQty(), mesWorkOrder.getReportedQty());
|
|
|
|
|
mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
|
|
|
|
|
if (mesWorkOrder.getReportedQty() > mesWorkOrder.getQty()) {
|
|
|
|
|
MesException.throwMesBusiException("工单报工数量大于工单数量【%s】,不允许报工", mesWorkOrder.getQty());
|
|
|
|
|
} else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrder.getQty())) {
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.process.getValue());
|
|
|
|
|
}
|
|
|
|
|
//获取生产版本
|
|
|
|
|
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder);
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = getMesBoms(mesWorkOrder, mesPart, mesProductVersion);
|
|
|
|
|
//生成条码
|
|
|
|
|
List<String> resultList = getStringList(mesWorkOrderNew);
|
|
|
|
|
//保存数据
|
|
|
|
|
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
|
|
|
|
|
List<MesMove> mesMoveList = new ArrayList<>();
|
|
|
|
|
boolean isReport = false;
|
|
|
|
|
boolean isMove = false;
|
|
|
|
|
//排序工单
|
|
|
|
|
if(MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()){
|
|
|
|
|
//报工类型
|
|
|
|
|
if (MesExtEnumUtil.REPORT_TYPE.WRITE_OFF.getValue() == mesWorkOrder.getReportType()) {
|
|
|
|
|
MesException.throwMesBusiException("工单【%s】为排序工单不允许冲销",mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
}
|
|
|
|
|
//排序加工规则
|
|
|
|
|
MesProdRuleSortCfg mesProdRuleSortCfg = getMesProdRuleSortCfg(mesWorkOrder);
|
|
|
|
|
if(MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue() == mesProdRuleSortCfg.getReportType()){
|
|
|
|
|
isReport = true;
|
|
|
|
|
} else if (MesExtEnumUtil.MES_REPORT_TYPE.MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
|
|
|
|
|
isMove = true;
|
|
|
|
|
}else if (MesExtEnumUtil.MES_REPORT_TYPE.REPORT_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
|
|
|
|
|
isReport = true;
|
|
|
|
|
isMove = true;
|
|
|
|
|
}else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
|
|
|
|
|
customerSupplyMove(mesWorkOrder, mesProductVersion, mesBoms, resultList, mesProductOffLineList, mesMoveList);
|
|
|
|
|
}else{
|
|
|
|
|
log.info("工单{}排序加工规则报工类型未维护",mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() != mesProdRuleSortCfg.getReportType()){
|
|
|
|
|
//查询SAP物料信息
|
|
|
|
|
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
|
|
|
|
|
for (String sn : resultList) {
|
|
|
|
|
//成品汇报
|
|
|
|
|
if(isReport){
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,false));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//成品移库
|
|
|
|
|
if(isMove){
|
|
|
|
|
MesMove move = createMove(mesPartSap, mesProdRuleSortCfg.getSrcErpLocation(), mesProdRuleSortCfg.getDestErpLocation(), mesWorkOrder.getOrganizeCode(), 1d);
|
|
|
|
|
move.setMatnr(mesWorkOrder.getPartNo());
|
|
|
|
|
mesMoveList.add(move);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
|
|
|
|
|
MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(),mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode());
|
|
|
|
|
if( CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesProdRuleNoSortCfg.getReportType()){
|
|
|
|
|
for (String sn : resultList) {
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom,false));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
log.info("工单{}排序规则不属于排序工单和非排序工单",mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//更新工单
|
|
|
|
|
update(mesWorkOrder);
|
|
|
|
|
//保存报工记录
|
|
|
|
|
if(CollectionUtils.isNotEmpty(mesProductOffLineList)){
|
|
|
|
|
mesProductOffLineService.insertBatch(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
//保存移库记录
|
|
|
|
|
if(CollectionUtils.isNotEmpty(mesMoveList)){
|
|
|
|
|
mesMoveRDao.saveAll(mesMoveList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, List<String> resultList, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList) {
|
|
|
|
|
boolean isItemMove;
|
|
|
|
|
boolean isItemReport;
|
|
|
|
|
MesMoveRule moveRule;
|
|
|
|
|
//查询零件生产组的移库规则
|
|
|
|
|
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));
|
|
|
|
|
List<String> itemPartNoList = mesBoms.stream().map(MesBom::getItemPartNo).collect(Collectors.toList());
|
|
|
|
|
//子物料SAP下发信息
|
|
|
|
|
Map<String, List<MesPartSap>> mesPartSapMap = getPartSapMap(mesWorkOrder, itemPartNoList);
|
|
|
|
|
//获取物料信息
|
|
|
|
|
Map<String, List<MesPart>> itemPartMap = getItemPartMap(mesWorkOrder, itemPartNoList);
|
|
|
|
|
for (String sn : resultList) {
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
isItemReport = false;
|
|
|
|
|
isItemMove = false;
|
|
|
|
|
moveRule = null;
|
|
|
|
|
if(itemPartMap.containsKey(mesBom.getItemPartNo())){
|
|
|
|
|
MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next();
|
|
|
|
|
if(!StringUtil.isEmpty(itemPart.getPartEds()) && mesMoveRuleMap.containsKey(itemPart.getPartEds())){
|
|
|
|
|
moveRule = mesMoveRuleMap.get(itemPart.getPartEds()).iterator().next();
|
|
|
|
|
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
|
|
|
|
|
isItemMove = true;
|
|
|
|
|
isItemReport = true;
|
|
|
|
|
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT.getValue() == moveRule.getReportType()) {
|
|
|
|
|
isItemReport = true;
|
|
|
|
|
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) {
|
|
|
|
|
isItemMove = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//汇报
|
|
|
|
|
if(isItemReport){
|
|
|
|
|
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,true));
|
|
|
|
|
}
|
|
|
|
|
//移库
|
|
|
|
|
if(isItemMove){
|
|
|
|
|
MesPartSap mesPartSap = null;
|
|
|
|
|
if(mesPartSapMap.containsKey(mesBom.getItemPartNo())){
|
|
|
|
|
mesPartSap = mesPartSapMap.get(mesBom.getItemPartNo()).iterator().next();
|
|
|
|
|
}
|
|
|
|
|
MesMove move = createMove(mesPartSap, moveRule.getErpSrcLocateNo(), moveRule.getErpDestLocateNo(), mesBom.getOrganizeCode(), mesBom.getItemQty());
|
|
|
|
|
move.setMatnr(mesBom.getItemPartNo());
|
|
|
|
|
mesMoveList.add(move);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
|
|
|
|
|
List<MesPartSap> mesPartSapList = mesPartSapService.findMesPartSapByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode());
|
|
|
|
|
Map<String, List<MesPartSap>> mesPartSapMap = mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo));
|
|
|
|
|
return mesPartSapMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesPart>> getItemPartMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
|
|
|
|
|
List<MesPart> itemPartList = iMesPartService.findMesPartByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode());
|
|
|
|
|
Map<String, List<MesPart>> itemPartMap = itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo));
|
|
|
|
|
return itemPartMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProdRuleSortCfg getMesProdRuleSortCfg(MesWorkOrder mesWorkOrder) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"reportPartNo",ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkCenterCode(),"workCenterCode",ddlPackBean);
|
|
|
|
|
MesProdRuleSortCfg mesProdRuleSortCfg = mesProdRuleSortCfgRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if(Objects.isNull(mesProdRuleSortCfg)){
|
|
|
|
|
MesException.throwMesBusiException("产线【%s】物料【%s】排序加工规则未维护", mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
return mesProdRuleSortCfg;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<String> getStringList(MesWorkOrder mesWorkOrder) {
|
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN);
|
|
|
|
|
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList();
|
|
|
|
|
return resultList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesBom> getMesBoms(MesWorkOrder mesWorkOrder, MesPart mesPart, MesProductVersion mesProductVersion) {
|
|
|
|
|
DdlPackBean ddlPackBean;
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean);
|
|
|
|
|
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesBoms)) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在",
|
|
|
|
|
mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion());
|
|
|
|
|
}
|
|
|
|
|
return mesBoms;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
|
|
|
|
|
String sn, MesBom mesBom,boolean isItemReport) {
|
|
|
|
|
MesProductOffLine newMesProductOffLine;
|
|
|
|
|
newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
if(!isItemReport){
|
|
|
|
|
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
|
|
|
|
|
newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newMesProductOffLine.setReportSn(sn);
|
|
|
|
|
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
newMesProductOffLine.setItemPartName(mesBom.getItemPartName());
|
|
|
|
|
newMesProductOffLine.setItemQty(mesBom.getItemQty());
|
|
|
|
|
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setQty(1d);
|
|
|
|
|
newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion());
|
|
|
|
|
newMesProductOffLine.setSerialNumber(sn);
|
|
|
|
|
newMesProductOffLine.setUnit(mesBom.getUnit());
|
|
|
|
|
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
|
|
|
|
|
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
|
|
|
|
|
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
|
|
|
|
|
return newMesProductOffLine;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode) {
|
|
|
|
|
List<Integer> statusList = new ArrayList<>();
|
|
|
|
|
statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
|
|
|
|
@ -581,4 +814,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
DdlPreparedPack.getInPackList(statusList, "workOrderStatus", packBean);
|
|
|
|
|
return mesWorkOrderRDao.findByHqlWhere(packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesMove createMove(MesPartSap mesPart , String source, String target, String org,double qty) {
|
|
|
|
|
MesMove move = new MesMove();
|
|
|
|
|
if(!Objects.isNull(mesPart)){
|
|
|
|
|
move.setMeins(mesPart.getUnit());
|
|
|
|
|
}
|
|
|
|
|
move.setOrganizeCode(org);
|
|
|
|
|
move.setFactoryCode(org);
|
|
|
|
|
move.setLgort(source);
|
|
|
|
|
move.setUmlgo(target);
|
|
|
|
|
move.setMenge(qty);
|
|
|
|
|
move.setPostDate(TimeTool.getToday());
|
|
|
|
|
move.setPostTime(TimeTool.getTimeShortWithColon());
|
|
|
|
|
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
return move;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|