|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesPartService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesProductOffLineService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
|
|
|
|
@ -8,20 +9,20 @@ import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.MathOperation;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.util.StringUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderToSapRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesBomRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository;
|
|
|
|
|
import cn.estsh.impp.framework.boot.auth.AuthUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ValidatorBean;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@ -41,6 +42,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
private IMesWorkOrderToSapService iMesWorkOrderToSapService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesPartService iMesPartService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProductVersionRepository mesProductVersionRDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesBomRepository mesBomRDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProductOffLineService mesProductOffLineService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesWorkOrder insert(MesWorkOrder bean) {
|
|
|
|
@ -125,27 +132,28 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
MesWorkOrder result = baseRDao.getById(bean.getId());
|
|
|
|
|
//若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1
|
|
|
|
|
if (result.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) {
|
|
|
|
|
if(!Objects.equals(bean.getQty(), result.getQty())){
|
|
|
|
|
if (!Objects.equals(bean.getQty(), result.getQty())) {
|
|
|
|
|
MesException.throwMesBusiException(String.format("工单类型为【%s】 不需要修改数量",
|
|
|
|
|
MesExtEnumUtil.ORDER_TYPE.SORT.getDescription()));
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
} else {
|
|
|
|
|
//工单数量只能比原来的大
|
|
|
|
|
if(bean.getQty() < result.getQty()){
|
|
|
|
|
if (bean.getQty() < result.getQty()) {
|
|
|
|
|
MesException.throwMesBusiException(String.format("工单数量不能小于工单源数量【%s】",
|
|
|
|
|
result.getQty()));
|
|
|
|
|
}
|
|
|
|
|
//修改状态或者指令下发需要传给SAP
|
|
|
|
|
if(!Objects.equals(bean.getQty(), result.getQty())){
|
|
|
|
|
if (!Objects.equals(bean.getQty(), result.getQty())) {
|
|
|
|
|
sendToSap = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() == bean.getWorkOrderStatus()){
|
|
|
|
|
if (MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() == bean.getWorkOrderStatus() ||
|
|
|
|
|
MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() == bean.getWorkOrderStatus()) {
|
|
|
|
|
sendToSap = true;
|
|
|
|
|
}
|
|
|
|
|
//在加工的工单不能修改物料信息
|
|
|
|
|
if(result.getWorkOrderStatus() >= MesExtEnumUtil.ORDER_STATUS.process.getValue()){
|
|
|
|
|
if(!Objects.equals(bean.getPartNo(), result.getPartNo())){
|
|
|
|
|
if (result.getWorkOrderStatus() >= MesExtEnumUtil.ORDER_STATUS.process.getValue()) {
|
|
|
|
|
if (!Objects.equals(bean.getPartNo(), result.getPartNo())) {
|
|
|
|
|
MesException.throwMesBusiException(String.format("工单状态为【%s】不允许修改物料",
|
|
|
|
|
MesExtEnumUtil.ORDER_TYPE.valueOfDescription(result.getWorkOrderStatus())));
|
|
|
|
|
}
|
|
|
|
@ -159,12 +167,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
BeanUtils.copyProperties(result, workOrderLog, "id");
|
|
|
|
|
workOrderLogService.insert(workOrderLog);
|
|
|
|
|
//关闭工单
|
|
|
|
|
if(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue() == bean.getWorkOrderStatus()){
|
|
|
|
|
if (MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue() == bean.getWorkOrderStatus()) {
|
|
|
|
|
bean.setQty(0d);
|
|
|
|
|
sendToSap = true;
|
|
|
|
|
}
|
|
|
|
|
//发送给SAP
|
|
|
|
|
if(sendToSap){
|
|
|
|
|
if (sendToSap) {
|
|
|
|
|
iMesWorkOrderToSapService.insert(bean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -174,19 +182,19 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) {
|
|
|
|
|
DdlPreparedPack.getStringLikerPack(bean.getOrderNo(),"orderNo",packBean);
|
|
|
|
|
DdlPreparedPack.getStringLikerPack(bean.getPartNameRdd(),"partNameRdd",packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getPartNo(),"partNo",packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(),"custPartNo",packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(),"workCenterCode",packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(),"workOrderStatus",packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(),"workOrderType",packBean);
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(),"createDatetime",packBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(bean.getCreateDateTimeEnd(),"createDatetime",packBean);
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(bean.getStartTimeStart(),"planStartTime",packBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(),"planStartTime",packBean);
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(),"planEndTime",packBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(),"planEndTime",packBean);
|
|
|
|
|
DdlPreparedPack.getStringLikerPack(bean.getOrderNo(), "orderNo", packBean);
|
|
|
|
|
DdlPreparedPack.getStringLikerPack(bean.getPartNameRdd(), "partNameRdd", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "partNo", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", packBean);
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(), "createDatetime", packBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(bean.getCreateDateTimeEnd(), "createDatetime", packBean);
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(bean.getStartTimeStart(), "planStartTime", packBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(), "planStartTime", packBean);
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(), "planEndTime", packBean);
|
|
|
|
|
DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(), "planEndTime", packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void onInsertBean(MesWorkOrder item) {
|
|
|
|
@ -231,7 +239,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//物料名称不存在,从物料信息中获取
|
|
|
|
|
if(StringUtil.isEmpty(item.getPartNameRdd())){
|
|
|
|
|
if (StringUtil.isEmpty(item.getPartNameRdd())) {
|
|
|
|
|
MesPart mesPart = iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode());
|
|
|
|
|
item.setPartNameRdd(mesPart.getPartName());
|
|
|
|
|
}
|
|
|
|
@ -242,4 +250,64 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doProductReport(MesWorkOrder mesWorkOrder) {
|
|
|
|
|
//查询物料信息
|
|
|
|
|
MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
|
|
|
|
|
//获取生产版本
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
|
|
|
|
|
if (null == mesProductVersion) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo());
|
|
|
|
|
}
|
|
|
|
|
//物料+生产版本获取bom信息
|
|
|
|
|
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesProductVersion.getProductVersion(), "bomVersion", ddlPackBean);
|
|
|
|
|
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesBoms)) {
|
|
|
|
|
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在",
|
|
|
|
|
mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion());
|
|
|
|
|
}
|
|
|
|
|
//更新工单状态
|
|
|
|
|
mesWorkOrder.setCompleteQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getCompleteQty()));
|
|
|
|
|
if (mesWorkOrder.getCompleteQty() >= mesWorkOrder.getQty()) {
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.process.getValue());
|
|
|
|
|
}
|
|
|
|
|
update(mesWorkOrder);
|
|
|
|
|
|
|
|
|
|
//生成条码
|
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel("REPORT_SN");
|
|
|
|
|
genSerialNoModel.setPartNo(mesWorkOrder.getPartNo());
|
|
|
|
|
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList();
|
|
|
|
|
//保存数据
|
|
|
|
|
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.getPartNameRdd());
|
|
|
|
|
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
newMesProductOffLine.setItemPartNameRdd(mesBom.getItemPartName());
|
|
|
|
|
newMesProductOffLine.setItemQty(mesBom.getItemQty());
|
|
|
|
|
newMesProductOffLine.setQty(1d);
|
|
|
|
|
newMesProductOffLine.setReportSn(sn);
|
|
|
|
|
newMesProductOffLine.setBomVersion(mesBom.getBomVersion());
|
|
|
|
|
newMesProductOffLine.setSerialNumber(sn);
|
|
|
|
|
newMesProductOffLine.setUnit(mesBom.getUnit());
|
|
|
|
|
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
|
|
|
|
|
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getOrderNo());
|
|
|
|
|
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
|
|
|
|
|
mesProductOffLineList.add(newMesProductOffLine);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
mesProductOffLineService.insertBatch(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|