工单相关问题修复

tags/yfai-mes-ext-v1.0
jun 11 months ago
parent 53bcf4fa40
commit 45d07effe3

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
/**
@ -9,5 +10,5 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
*/
public interface IMesWorkOrderLogService extends IBaseMesService<MesWorkOrderLog> {
void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder);
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWcEquipmentService;
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.util.MesConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -14,10 +15,6 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
/**
* @Description :
@ -84,45 +81,18 @@ public class MesWcEquipmentServiceImpl extends BaseMesService<MesWcEquipment> im
new Object[]{mesWcEquipment.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
CommonEnumUtil.IS_VAILD.VAILD.getValue(), mesWcEquipment.getEquipmentCode()});
if (null == mesEquipmentDb) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("设备代码【%s】无效", mesWcEquipment.getEquipmentCode())
.build();
MesException.throwMesBusiException("设备代码【%s】无效", mesWcEquipment.getEquipmentCode());
}
//查询设备已关联数据
List<MesWcEquipment> mesWcEquipments = baseRDao.findByProperty(
new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, "equipmentCode"},
new Object[]{mesWcEquipment.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
mesWcEquipment.getEquipmentCode()});
if (!CollectionUtils.isEmpty(mesWcEquipments)) {
for (MesWcEquipment wc : mesWcEquipments) {
boolean isCheck = true;
//更新时校验设备是否已经绑定该工位需要判断ID
if (!StringUtils.isEmpty(mesWcEquipment.getId()) && mesWcEquipment.getId().equals(wc.getId())) {
isCheck = false;
}
if (isCheck) {
//校验设备是否已经绑定该工位
if (mesWcEquipment.getWorkCellCode().equals(wc.getWorkCellCode())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode())
.setErrorDetail("工位代码【%s】与设备代码【%s】已经绑定不能重复绑定"
, mesWcEquipment.getWorkCellCode(), mesWcEquipment.getEquipmentCode())
.build();
}
}
//校验设备是否已经绑定其他生产线
if (wc.getId() !=mesWcEquipment.getId() && !mesWcEquipment.getWorkCenterCode().equals(wc.getWorkCenterCode())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode())
.setErrorDetail("不能绑定!设备代码【%s】已经绑定生产线代码【%s】", mesWcEquipment.getEquipmentCode(), wc.getWorkCenterCode())
.build();
}
}
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWcEquipment.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWcEquipment.getEquipmentCode(),"equipmentCode",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWcEquipment.getWorkCellCode(),"workCellCode",ddlPackBean);
DdlPreparedPack.getNumNOEqualPack(mesWcEquipment.getId(),"id",ddlPackBean);
if (baseRDao.isExitByHql(ddlPackBean)) {
MesException.throwMesBusiException("工位代码【%s】与设备代码【%s】已经绑定不能重复绑定"
, mesWcEquipment.getWorkCellCode(), mesWcEquipment.getEquipmentCode());
}
}

@ -1,13 +1,20 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderLogService;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class MesWorkOrderLogService extends BaseMesService<MesWorkOrderLog> implements IMesWorkOrderLogService {
@Override
public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) {
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id");
baseRDao.insert(workOrderLog);
}
}

@ -39,7 +39,7 @@ import java.util.stream.Collectors;
@Slf4j
public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements IMesWorkOrderService {
@Autowired
private MesWorkOrderLogService workOrderLogService;
private IMesWorkOrderLogService workOrderLogService;
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
@ -110,11 +110,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelInitialize(copyMesWorkOrder, bean.getCreateUser());
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(copyMesWorkOrder, workOrderLog, "id");
baseRDao.insert(copyMesWorkOrder);
workOrderLogService.insert(workOrderLog);
workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder);
return bean;
} else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
//生成工单号
@ -138,9 +135,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelInitialize(bean, bean.getCreateUser());
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(bean, workOrderLog, "id");
workOrderLogService.insert(workOrderLog);
workOrderLogService.saveMesWorkOrderLog(bean);
bean = baseRDao.insert(bean);
return bean;
}
@ -155,10 +150,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesExtEnumUtil.ORDER_TYPE.SORT.getDescription()));
}
} else {
//工单数量只能比原来的大
if (bean.getQty() < result.getQty()) {
MesException.throwMesBusiException(String.format("工单数量不能小于工单源数量【%s】",
result.getQty()));
//更新工单数量
if (!bean.getQty().equals(result.getQty()) && result.getWorkOrderStatus() > MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) {
MesException.throwMesBusiException(String.format("工单状态为【%s】不允许更新工单数量", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(result.getWorkOrderStatus())));
}else{
result.setQty(bean.getQty());
result.setUnCompleteQty(MathOperation.sub(bean.getQty(),result.getReportedQty()));
}
}
//在加工的工单不能修改物料信息
@ -169,29 +166,14 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
result.setQty(bean.getQty());
//更新已汇报
if (bean.getReportedQty() >= 0) {
result.setReportedQty(bean.getReportedQty());
}
if (bean.getUnCompleteQty() >= 0) {
result.setUnCompleteQty(bean.getUnCompleteQty());
}
if (bean.getAdjustQty() > 0) {
result.setAdjustQty(bean.getAdjustQty());
}
//更新状态
if (bean.getWorkOrderStatus() > 0) {
if(result.getWorkOrderStatus().intValue() != bean.getWorkOrderStatus().intValue()){
result.setWorkOrderStatus(bean.getWorkOrderStatus());
}
//修改工单,工单标识需要改为未同步
result.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelInitialize(result, AuthUtil.getSessionUser().getUserName());
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(result, workOrderLog, "id");
workOrderLogService.insert(workOrderLog);
baseRDao.update(result);
updateMesWorkOrder(result);
return result;
}
@ -338,6 +320,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (StringUtil.isEmpty(item.getProduceTime())) {
item.setProduceTime(TimeTool.getToday());
}
item.setUnCompleteQty(item.getQty());
}
@ -428,49 +411,49 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
@Override
protected void onUpdateBean(MesWorkOrder item) {
}
@Override
public void doProductReport(MesWorkOrder mesWorkOrder) {
MesWorkOrder mesWorkOrderDb = baseRDao.getById(mesWorkOrder.getId());
if (Objects.isNull(mesWorkOrderDb)) {
MesException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId());
}
//查询物料信息
MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode());
//查询产线信息
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkCenterCode(), "workCenterCode", ddlPackBean);
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getWorkCenterCode(), "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesWorkCenter)) {
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrder.getWorkCenterCode());
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode());
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder);
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb);
//物料+生产版本获取bom信息
List<MesBom> mesBoms = getBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//报工类型
if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) {
mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getReportedQty()));
if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrderDb.getReportType()) {
mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty()));
//更新工单状态
double unCompleteQty = MathOperation.sub(mesWorkOrder.getQty(), mesWorkOrder.getReportedQty());
mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
if (mesWorkOrder.getReportedQty() > mesWorkOrder.getQty()) {
double unCompleteQty = MathOperation.sub(mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty());
mesWorkOrderDb.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
if (mesWorkOrderDb.getReportedQty() > mesWorkOrderDb.getQty()) {
MesException.throwMesBusiException("工单报工数量【%s】大于工单数量【%s】,不允许报工",
mesWorkOrder.getReportedQty(), mesWorkOrder.getQty());
} else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrder.getQty())) {
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty());
} else if (Objects.equals(mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty())) {
mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
} else {
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
}
} else {
//冲销数量大于工单完成数量报错
if (MathOperation.add(mesWorkOrder.getNum(),mesWorkOrder.getAdjustQty()) > mesWorkOrder.getReportedQty()) {
if (MathOperation.add(mesWorkOrder.getNum(),mesWorkOrderDb.getAdjustQty()) > mesWorkOrderDb.getReportedQty()) {
MesException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销",
mesWorkOrder.getNum(), mesWorkOrder.getReportedQty());
mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty());
}
//报工调整数量加-
mesWorkOrder.setAdjustQty((MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getAdjustQty())));
mesWorkOrderDb.setAdjustQty((MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getAdjustQty())));
}
update(mesWorkOrder);
//更新工单
updateMesWorkOrder(mesWorkOrderDb);
//生成条码
List<String> resultList = getStringList(mesWorkOrder);
@ -652,7 +635,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//更新工单
update(mesWorkOrder);
updateMesWorkOrder(mesWorkOrder);
//保存报工记录
if (CollectionUtils.isNotEmpty(mesProductOffLineList)) {
mesProductOffLineService.insertBatch(mesProductOffLineList);
@ -691,6 +675,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
mesProductOffLineService.insertBatch(mesProductOffLineList);
}
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder) {
ConvertBean.serviceModelUpdate(mesWorkOrder, AuthUtil.getSessionUser().getUserName());
baseRDao.update(mesWorkOrder);
//保存记录
workOrderLogService.saveMesWorkOrderLog(mesWorkOrder);
}
private MesProductOffLine getMesProductOffLine(WmsProductModel model, MesPart mesPart, MesProductVersion mesProductVersion, MesBom mesBom) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(mesPart.getPartNo());

Loading…
Cancel
Save