|
|
|
@ -1,12 +1,11 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
|
|
|
|
|
|
|
|
|
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.IMesShiftService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
|
|
|
|
|
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.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
@ -112,6 +111,12 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private SnowflakeIdMaker snowflakeIdMaker;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProdOrgExtService mesProdOrgExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProductVersionService mesProductVersionService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) {
|
|
|
|
|
|
|
|
|
@ -978,20 +983,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
//查询物料信息
|
|
|
|
|
MesPart mesPart = iMesPartService.getMesPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode());
|
|
|
|
|
//查询产线信息
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getWorkCenterCode(), "workCenterCode", ddlPackBean);
|
|
|
|
|
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (Objects.isNull(mesWorkCenter)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb);
|
|
|
|
|
//获取生产版本
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getProductVersion(), "productVersion", ddlPackBean);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
}
|
|
|
|
|
MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb);
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
List<MesBom> mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
|
|
|
|
|
mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty()));
|
|
|
|
@ -999,19 +993,15 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
double unCompleteQty = MathOperation.sub(mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty());
|
|
|
|
|
mesWorkOrderDb.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
|
|
|
|
|
if (mesWorkOrderDb.getReportedQty() > mesWorkOrderDb.getQty()) {
|
|
|
|
|
//查询产线信息
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkCenterCode(), "workCenterCode", packBean);
|
|
|
|
|
MesWorkCenter workCenter = mesWorkCenterRDao.getByProperty(packBean);
|
|
|
|
|
// 以下则是超工单逻辑
|
|
|
|
|
// 如果产线中没有配置超工单,则直接阻断
|
|
|
|
|
if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCenter.getIsCheckOrderQty())) {
|
|
|
|
|
if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCenter.getIsCheckOrderQty())) {
|
|
|
|
|
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty());
|
|
|
|
|
}
|
|
|
|
|
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
|
|
|
|
|
double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()), mesWorkOrderDb.getQty());
|
|
|
|
|
if (rate > MathOperation.div(workCenter.getOrderRate(), 100)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), workCenter.getOrderRate());
|
|
|
|
|
if (rate > MathOperation.div(mesWorkCenter.getOrderRate(), 100)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), mesWorkCenter.getOrderRate());
|
|
|
|
|
}
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
} else if (Objects.equals(mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty())) {
|
|
|
|
@ -1021,7 +1011,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty());
|
|
|
|
|
mesWorkOrderDb.setRemark(mesWorkOrder.getRemark());
|
|
|
|
|
String sn = getOrderNo(mesWorkOrder, mesPart, userName);
|
|
|
|
|
String sn = getOrderNo(mesWorkOrder.getOrganizeCode(),userName);
|
|
|
|
|
//更新工单
|
|
|
|
|
updateMesWorkOrder(mesWorkOrderDb, userName,mesWorkOrder.getNum());
|
|
|
|
|
//记录条码表&加工记录表
|
|
|
|
@ -1039,6 +1029,22 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductVersion getProductVersion(MesWorkOrder mesWorkOrderDb) {
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getProductVersion());
|
|
|
|
|
}
|
|
|
|
|
return mesProductVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesWorkCenter getMesWorkCenter(MesWorkOrder mesWorkOrderDb) {
|
|
|
|
|
MesWorkCenter mesWorkCenter = mesProdOrgExtService.getWorkCenterDb(mesWorkOrderDb.getOrganizeCode(), mesWorkOrderDb.getWorkCenterCode());
|
|
|
|
|
if (Objects.isNull(mesWorkCenter)) {
|
|
|
|
|
MesPcnException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
return mesWorkCenter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveMesProductPlan(MesWorkOrder bean, boolean isInsert, boolean isReport) {
|
|
|
|
|
if (StringUtil.isEmpty(bean.getPlanOrderNo())) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
|
|
|
|
@ -1246,10 +1252,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getOrderNo(MesWorkOrder mesWorkOrder, MesPart mesPart, String userName) {
|
|
|
|
|
if (StringUtils.isEmpty(mesPart.getProductMatchRule()))
|
|
|
|
|
MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", mesPart.getPartNo());
|
|
|
|
|
return syncFuncService.syncSerialNo(new GenSerialNoModel(mesPart.getProductMatchRule()).prodLocation(mesWorkOrder.getWorkCenterCode()).partNo(mesPart.getPartNo()).putDataMap(MesPart.class.getSimpleName(), mesPart).organizeCode(mesPart.getOrganizeCode()), userName, mesWorkOrder.getOrganizeCode(), 1).getResultList().get(0).toString();
|
|
|
|
|
private String getOrderNo(String organizeCode,String userName) {
|
|
|
|
|
return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
|
|
|
|
|