质量判定修改:增加字段“是否解冻”

dev
yxw 2 years ago
parent f693497858
commit 896eaa63b6

@ -23,7 +23,16 @@ public interface IQualityDecisionService {
* @return
*/
@ApiOperation(value = "扫描条码验证", notes = "扫描条码验证")
MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode,String workCenterCode);
Map<String, Object> doCheckSerialNumberExt(String serialNumber, String organizeCode, String workCenterCode);
/**
*
* @param serialNumber
* @param organizeCode
* @return
*/
@ApiOperation(value = "扫描条码验证", notes = "扫描条码验证")
MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode, String workCenterCode);
/**
*
@ -42,6 +51,14 @@ public interface IQualityDecisionService {
void insertMesBadCellAndDetail(RepairRequestModel repairRequestModel);
/**
*
* @param repairRequestModel
* @return
*/
@ApiOperation(value = "解冻", notes = "解冻")
void doUnfreeze(RepairRequestModel repairRequestModel);
/**
*
* @param organizeCode
* @param workCenterCode 线

@ -2,19 +2,21 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IQualityDecisionService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxSyncBusiService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesBadCell;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesBadCellDetail;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.RepairRequestModel;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.impp.framework.base.controller.MesPcnBaseController;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.LocaleUtils;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -43,11 +45,11 @@ public class QualityController extends MesPcnBaseController {
* @return
*/
@GetMapping(value = "/check-serial-number/do")
@ApiOperation(value = "查询单据作业")
public ResultBean doCheckSerialNumber(String serialNumber, String organizeCode,String workCenterCode) {
@ApiOperation(value = "校验条码是否存在")
public ResultBean doCheckSerialNumber(String serialNumber, String organizeCode, String workCenterCode) {
try {
return ResultBean.success("查询成功")
.setResultObject(qualityDecisionService.doCheckSerialNumber(serialNumber, organizeCode,workCenterCode))
.setResultObject(qualityDecisionService.doCheckSerialNumberExt(serialNumber, organizeCode, workCenterCode))
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
@ -109,6 +111,22 @@ public class QualityController extends MesPcnBaseController {
}
/**
*
*/
@PostMapping(value = "/do-unfreeze")
@ApiOperation(value = "解冻")
public ResultBean doUnfreeze(RepairRequestModel repairRequestModel) {
try {
qualityDecisionService.doUnfreeze(repairRequestModel);
return ResultBean.success("解冻成功!").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
/**
*
*
* @param workCenterCode

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IQualityDecisionService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxRepairWorkService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IWorkCenterExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnRepairService;
@ -66,48 +67,123 @@ public class QualityDecisionService implements IQualityDecisionService {
private IWorkCenterExtService workCenterExtService;
@Autowired
private ISxRepairWorkService repairWorkService;
@Autowired
private MesProcessCellRepository mesProcessCellRDao;
@Autowired
private MesProduceSnMcRecordRepository produceSnMcRecordRepository;
@Autowired
private MesBadCellDetailRepository badCellDetailRepository;
@Autowired
private MesRepairRecordExtRepository repairRecordExtRepository;
@Override
public MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode,String workCenterCode) {
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, serialNumber);
public Map<String, Object> doCheckSerialNumberExt(String serialNumber, String organizeCode, String workCenterCode) {
if(produceSnExt == null){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("条码信息不存在,请检查")
.build();
Map<String, Object> resultMap = new HashMap<>();
MesProduceSnExt produceSnExt = doCheckSerialNumber(serialNumber, organizeCode, workCenterCode);
if (produceSnExt.getOperateType() == MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue()) {
resultMap.put("isFreeze", false);
} else {
resultMap.put("isFreeze", false);
}
if(produceSnExt.getSnStatus() == MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
resultMap.put("object", produceSnExt);
return resultMap;
}
@Override
public MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode, String workCenterCode) {
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.MANAGE_CODE, MesPcnExtConstWords.SN_STATUS},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), serialNumber, MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.CREATE.getValue()});
MesProduceSnExt produceSnExt = null;
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnMcRecordDb.getSerialNumber());
}
// 先查询条码信息,判断最终工单号字段与工单号字段是否一致,一致的话判断生产线跟条码信息的生产线是否一致,工单不一样的话,根据最终工单号与条码查询返工条码表,判断生产线是否一致
if(produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())){
if(!workCenterCode.equals(produceSnExt.getWorkCenterCode())){
if(produceSnExt == null){
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(organizeCode, serialNumber);
if (produceSnRepair == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber, produceSnExt.getWorkCenterCode(), workCenterCode)
.build();
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
}else {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySnAndOrderNo(organizeCode, serialNumber,produceSnExt.getLastWorkOrderNo());
if(null!=produceSnRepair && !workCenterCode.equals(produceSnRepair.getWorkCenterCode())){
if (!StringUtils.isEmpty(produceSnRepair.getOutWorkCenterTime())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作", produceSnRepair.getSerialNumber())
.build();
}
if(null != produceSnRepair && !workCenterCode.equals(produceSnRepair.getWorkCenterCode())){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber,produceSnRepair.getWorkCenterCode(), workCenterCode)
.build();
}
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnRepair.getSerialNumber());
} else {
if(produceSnExt.getSnStatus() == MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
// 先查询条码信息,判断最终工单号字段与工单号字段是否一致,一致的话判断生产线跟条码信息的生产线是否一致,工单不一样的话,根据最终工单号与条码查询返工条码表,判断生产线是否一致
if (produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
if (!workCenterCode.equals(produceSnExt.getWorkCenterCode())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber, produceSnExt.getWorkCenterCode(), workCenterCode)
.build();
}
} else {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySnAndOrderNo(organizeCode, serialNumber, produceSnExt.getLastWorkOrderNo());
if (produceSnRepair == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
if (null != produceSnRepair && !workCenterCode.equals(produceSnRepair.getWorkCenterCode())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber,produceSnRepair.getWorkCenterCode(), workCenterCode)
.build();
}
}
}
return produceSnExt;
}
@ -148,25 +224,11 @@ public class QualityDecisionService implements IQualityDecisionService {
.build();
}
String workOrderNo;
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(repairRequestModel.getOrganizeCode(), repairRequestModel.getSerialNumber());
if (null == produceSnExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]不存在", repairRequestModel.getSerialNumber())
.build();
}
MesProduceSnExt produceSnExt = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(repairRequestModel.getOrganizeCode(), repairRequestModel.getSerialNumber());
if (null == produceSnRepair) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", repairRequestModel.getSerialNumber(), produceSnExt.getLastWorkOrderNo())
.build();
}
workOrderNo = produceSnRepair.getWorkOrderNo();
workOrderNo = produceSnExt.getLastWorkOrderNo();
} else {
workOrderNo = produceSnExt.getWorkOrderNo();
}
@ -241,6 +303,71 @@ public class QualityDecisionService implements IQualityDecisionService {
}
@Override
public void doUnfreeze(RepairRequestModel repairRequestModel) {
MesProduceSnExt produceSnExt = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
List<MesBadCellDetail> badCellDetailList = repairWorkService.getMesBadCellDetailBySerialNumber(produceSnExt.getSerialNumber(), repairRequestModel.getOrganizeCode());
boolean isCompleteRepair = CollectionUtils.isEmpty(badCellDetailList) ? false : badCellDetailList.stream().filter(o -> o.getRepairStatus() == MesPcnExtEnumUtil.MES_REPAIR_STATUS.REPAIRED.getValue()).collect(Collectors.toList()).size() > 0 ;
if (produceSnExt.getSnStatus() != MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("当前条码状态为[%s],不为[%s]", MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSnExt.getSnStatus()), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getDescription())
.build();
}
if (produceSnExt.getQcStatus() != MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("当前条码状态为[%s],不为[%s]", MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSnExt.getSnStatus()), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getDescription())
.build();
}
if (!isCompleteRepair) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("未维修完成")
.build();
}
produceSnExt.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.QUALIFIED.getValue());
produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue());
ConvertBean.serviceModelUpdate(produceSnExt, repairRequestModel.getModifyUser());
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
produceSnExtRepository.save(produceSnExt);
List<MesBadCellDetail> badCellDetailBySerialNumberList = repairWorkService.getMesBadCellDetailBySerialNumber(produceSnExt.getSerialNumber(), produceSnExt.getOrganizeCode());
List<MesRepairRecordExt> repairRecordBySerialNumberList = repairWorkService.getMesRepairRecordBySerialNumber(produceSnExt.getSerialNumber(), produceSnExt.getOrganizeCode());
if (!CollectionUtils.isEmpty(badCellDetailBySerialNumberList)) {
for (MesBadCellDetail badCellDetail : badCellDetailBySerialNumberList) {
badCellDetail.setIsFreeze(MesPcnExtEnumUtil.IS_UNFREEZE.BIND.getValue());
ConvertBean.serviceModelUpdate(badCellDetail, repairRequestModel.getModifyUser());
}
badCellDetailRepository.saveAll(badCellDetailBySerialNumberList);
}
if (!CollectionUtils.isEmpty(repairRecordBySerialNumberList)) {
for (MesRepairRecordExt repairRecordExt : repairRecordBySerialNumberList) {
repairRecordExt.setIsFreeze(MesPcnExtEnumUtil.IS_UNFREEZE.BIND.getValue());
ConvertBean.serviceModelUpdate(repairRecordExt, repairRequestModel.getModifyUser());
}
repairRecordExtRepository.saveAll(repairRecordBySerialNumberList);
}
}
@Override
public MesProcessCell getMesProcessCell(String workCenterCode, String workCellCode, String organizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
@ -248,5 +375,4 @@ public class QualityDecisionService implements IQualityDecisionService {
return mesProcessCellRDao.getByProperty(packBean);
}
}

@ -93,6 +93,10 @@ public class MesBadCellDetail extends BaseBean implements Serializable {
@ApiParam("维修状态")
private Integer repairStatus = 20;
@Column(name = "IS_FREEZE")
@ApiParam("是否解冻")
private Integer isFreeze = 20;
@Column(name = "SERIAL_NUMBER")
@ApiParam("过程条码")
private String serialNumber;

@ -1,5 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.bean;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
@ -69,10 +71,12 @@ public class MesProduceSnMcRecord extends BaseBean implements Serializable {
@Column(name = "SN_STATUS")
@ApiParam("条码状态")
@AnnoOutputColumn(refClass = MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.class, refForeignKey = "value", value = "description")
private Integer snStatus;
@Column(name = "QC_STATUS")
@ApiParam("质量状态")
@AnnoOutputColumn(refClass = MesPcnExtEnumUtil.MC_RECORD_SN_QC_STATUS.class, refForeignKey = "value", value = "description")
private Integer qcStatus;
}

@ -115,4 +115,8 @@ public class MesRepairRecordExt extends MesRepairRecord implements Serializable
@ApiParam("不良类型描述")
private String defectTypeName;
@Column(name = "IS_FREEZE")
@ApiParam("是否解冻")
private Integer isFreeze = 20;
}

Loading…
Cancel
Save