dev
yxw 2 years ago
parent 7e1a17ba6e
commit af0be4abaa

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProcessCell;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.RepairRequestModel;
import cn.estsh.i3plus.pojo.mes.bean.MesDefect;
import io.swagger.annotations.ApiOperation;
@ -32,7 +31,7 @@ public interface IQualityDecisionService {
* @return
*/
@ApiOperation(value = "扫描条码验证", notes = "扫描条码验证")
MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode, String workCenterCode);
Map<String, Object> doCheckSerialNumber(String serialNumber, String organizeCode, String workCenterCode);
/**
*
@ -47,7 +46,7 @@ public interface IQualityDecisionService {
* @param repairRequestModel
* @return
*/
@ApiOperation(value = "新增不良明细数据", notes = "新增不良明细数据")
@ApiOperation(value = "冻结-新增不良明细数据", notes = "冻结-新增不良明细数据")
void insertMesBadCellAndDetail(RepairRequestModel repairRequestModel);
/**

@ -206,4 +206,12 @@ public interface ISxWorkOrderExtService {
*/
@ApiOperation(value = "根据工单号集合获取工单信息", notes = "根据工单号集合获取工单信息")
List<MesWorkOrder> queryMesWorkOrderByOrderNoList(List<String> workOrderNoList, String organizeCode);
/**
*
* @param workOrderNo
* @param qty
*/
@ApiOperation(value = "手动报工", notes = "手动报工")
void doManualReport(String workOrderNo, Double qty, String organizeCode, String userName);
}

@ -0,0 +1,11 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi.jx;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesSubassemblyRemadeRecord;
import io.swagger.annotations.ApiOperation;
public interface IJxSubassemblyRemadeRecordService {
@ApiOperation(value = "根据工单号和包装条码查询返工组件包装信息", notes = "根据工单号和包装条码查询返工组件包装信息")
MesSubassemblyRemadeRecord getSubassemblyRemadeRecordByWoAndPo(String workOrderNo, String packageNo, String organizeCode);
}

@ -4,19 +4,15 @@ 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.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.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;
@ -88,7 +84,7 @@ public class QualityController extends MesPcnBaseController {
* @return
*/
@PostMapping(value = "/mes-bad-cell-and-detail/insert")
@ApiOperation(value = "新增不良明细数据")
@ApiOperation(value = "冻结-新增不良明细数据")
public ResultBean insertMesBadCellAndDetail(@RequestBody List<MesBadCellDetail> mesBadCellDetailList,
String serialNumber, String organizeCode, String workCenterCode,
String workCellCode, String processCode, String userName) {
@ -102,7 +98,7 @@ public class QualityController extends MesPcnBaseController {
repairRequestModel.setProcessCode(processCode);
repairRequestModel.setModifyUser(userName);
sxSyncBusiService.doRepairOrQualityDecision(repairRequestModel, 1);
return ResultBean.success("新增成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
return ResultBean.success("冻结成功!").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {

@ -265,9 +265,7 @@ public class SxRepairWorkController extends MesPcnBaseController {
.notNull(MesPcnExtConstWords.REPAIR_NAME, mesRepairRecord.getRepairName())
.notNull(MesPcnExtConstWords.DEFECT_RECORD_ID, mesRepairRecord.getDefectRecordId())
.notNull(MesPcnExtConstWords.WORK_CELL_CODE, mesRepairRecord.getWorkCellCode())
.notNull(MesPcnExtConstWords.BAD_PART_NO, mesRepairRecord.getBadPartNo())
.notNull(MesPcnExtConstWords.QTY, mesRepairRecord.getQty())
.notNull(MesPcnExtConstWords.BAD_PART_NAME, mesRepairRecord.getBadPartName());
.notNull(MesPcnExtConstWords.QTY, mesRepairRecord.getQty());
sxRepairWorkService.insertMesRepairRecord(mesRepairRecord);
return ResultBean.success(LocaleUtils.getLocaleRes(LocaleUtils.getLocaleRes("操作成功")))
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
@ -293,9 +291,7 @@ public class SxRepairWorkController extends MesPcnBaseController {
.notNull(MesPcnExtConstWords.REPAIR_NAME, mesRepairRecord.getRepairName())
.notNull(MesPcnExtConstWords.DEFECT_RECORD_ID, mesRepairRecord.getDefectRecordId())
.notNull(MesPcnExtConstWords.WORK_CELL_CODE, mesRepairRecord.getWorkCellCode())
.notNull(MesPcnExtConstWords.BAD_PART_NO, mesRepairRecord.getBadPartNo())
.notNull(MesPcnExtConstWords.QTY, mesRepairRecord.getQty())
.notNull(MesPcnExtConstWords.BAD_PART_NAME, mesRepairRecord.getBadPartName());
.notNull(MesPcnExtConstWords.QTY, mesRepairRecord.getQty());
sxRepairWorkService.updateMesRepairRecord(mesRepairRecord);
return ResultBean.success(LocaleUtils.getLocaleRes("修改成功")).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
@ -364,9 +360,7 @@ public class SxRepairWorkController extends MesPcnBaseController {
.notNull(MesPcnExtConstWords.REPAIR_JUDGE, mesRepairRecord.getRepairJudge())
.notNull(MesPcnExtConstWords.REPAIR_CODE, mesRepairRecord.getRepairCode())
.notNull(MesPcnExtConstWords.REPAIR_NAME, mesRepairRecord.getRepairName())
.notNull(MesPcnExtConstWords.BAD_PART_NO, mesRepairRecord.getBadPartNo())
.notNull(MesPcnExtConstWords.QTY, mesRepairRecord.getQty())
.notNull(MesPcnExtConstWords.BAD_PART_NAME, mesRepairRecord.getBadPartName());
.notNull(MesPcnExtConstWords.QTY, mesRepairRecord.getQty());
}
sxSyncBusiService.doRepairOrQualityDecision(requestModel, 3);
return ResultBean.success(LocaleUtils.getLocaleRes(LocaleUtils.getLocaleRes("操作成功")))

@ -4,8 +4,10 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.GenerateWorkOrderDto;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WorkOrderQueryDto;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.RequestModel;
import cn.estsh.impp.framework.base.controller.MesPcnBaseController;
@ -15,10 +17,13 @@ import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.StringJoiner;
import java.util.concurrent.TimeUnit;
/**
* @author yumingxing
@ -134,19 +139,50 @@ public class SxWorkOrderExtController extends MesPcnBaseController {
}
}
//绑定关键件;缺件记录;打包;装托
// @PostMapping(value = "/package-sn-unbind")
// @ApiOperation(value = "包装条码解绑")
// public ResultBean packageSnUnbind(String packageSn) {
// try {
// workOrderExtService.packageSnUnbind(packageSn, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName());
// return ResultBean.success("包装条码解绑成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } catch (ImppBusiException imppException) {
// LOGGER.error(imppException.getErrorMsg() + "{}", imppException.getErrorDetail(), imppException);
// return ResultBean.fail(imppException);
// } catch (Exception e) {
// return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
// }
// }
@PostMapping(value = "/do-manual-report")
@ApiOperation(value = "手动报工")
public ResultBean doManualReport(String workOrderNo, Double qty, String organizeCode, String userName) {
String key = new StringJoiner(MesPcnExtConstWords.COLON).add("MES")
.add(organizeCode).add("MANUAL-REPORT-WORK").add(workOrderNo).toString();
RLock lock = (RLock) redisMesPcn.getFairLock(key);
try {
ValidatorBean.checkNotNull(workOrderNo, "工单号不能为空");
ValidatorBean.checkNotNull(qty, "报工数量不能为空");
ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空");
ValidatorBean.checkNotNull(userName, "用户名不能为空");
try {
if (!lock.tryLock(20, 180, TimeUnit.SECONDS)) {
LOGGER.info("PCN对工单进行手动报工操作:尝试锁定JOB:工厂代码[{}]等待超时,超时原因:当前JOB正在执行不能并发操作", organizeCode);
return ResultBean.fail(ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.QMS.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("PCN对工单进行手动报工操作:尝试锁定工单[%s]等待超时,请重试!超时原因:相同工单不能并发操作", workOrderNo)
.build());
}
} catch (Exception e) {
LOGGER.info("PCN对工单进行手动报工操作:尝试锁定JOB:工厂代码[{}]等待超时,超时原因:当前JOB正在执行不能并发操作,失败原因:[{}]", organizeCode, e.getMessage());
return ResultBean.fail(ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.QMS.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("PCN对工单进行手动报工操作:尝试锁定工单[%s]操作失败,请重试!失败原因:[%s]", workOrderNo, e.getMessage())
.build());
}
workOrderExtService.doManualReport(workOrderNo, qty, organizeCode, userName);
return ResultBean.success("手动报工成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException imppException) {
LOGGER.error(imppException.getErrorMsg() + "{}", imppException.getErrorDetail(), imppException);
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) lock.unlock();
}
}
}

@ -0,0 +1,50 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base.jx;
import cn.estsh.i3plus.ext.mes.pcn.api.base.bu.IMesBusiConfigService;
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.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
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.*;
/**
* @Author: wangjie
* @CreateDate: 2021/01/19 15:37
* @Description:
**/
@RestController
@RequestMapping(CommonConstWords.BASE_URL_MES_PCN)
@Api(tags = "业务配置控制层")
public class SxBusiConcfigController {
@Autowired
private IMesBusiConfigService busiConfigService;
@GetMapping(value = "/busi-config/get-cfg")
@ApiOperation(value = "按条件分页查询业务配置信息")
public ResultBean getBusiConfigMap(String cfgCode, String organizeCode) {
try {
if (StringUtils.isEmpty(cfgCode)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("入参缺失必要参数配置代码[cfgCode]")
.build();
}
return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultMap(busiConfigService.getConfigMap(organizeCode, cfgCode));
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -35,7 +35,7 @@ public class OrderJobDao implements IOrderJobDao {
hql.append("SELECT new "+ MesOrderJobModel.class.getName()+"(")
.append("moj.id,moj.taskType,moj.orderType,moj.orderNo,moj.workCenterCode,moj.shiftCode,moj.workOrderNo,")
.append("moj.orderStatus,moj.orderDate,moj.generateTime,moj.complateTime,mwoe.partNo,mwoe.partNameRdd,")
.append("moj.organizeCode,moj.isValid,moj.isDeleted,moj.createUser,moj.createDatetime,moj.modifyUser,moj.modifyDatetime)")
.append("moj.organizeCode,moj.isValid,moj.isDeleted,moj.createUser,moj.createDatetime,moj.modifyUser,moj.modifyDatetime, moj.serialNumber)")
.append(" FROM MesOrderJob AS moj ")
.append(" LEFT JOIN MesWorkOrderExt mwoe ")
.append(" ON moj.workOrderNo=mwoe.orderNo ")

@ -25,9 +25,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -50,8 +54,6 @@ public class MesOrderJobService implements IMesOrderJobService {
@Autowired
private MesProjectTourDetailRepository projectTourDetailRDao;
@Autowired
private MesQManageTaskDetailRepository qManageTaskDetailRDao;
@Autowired
private MesExteriorScratchProofDetailRepository exteriorScratchProofDetailRDao;
@Autowired
private MesPersonCheckDetailRepository personCheckDetailRDao;
@ -254,19 +256,30 @@ public class MesOrderJobService implements IMesOrderJobService {
DdlPreparedPack.getInPackList(statusList, "orderStatus", packBean);
List<MesOrderJob> mesOrderJobs = mesOrderJobRDao.findByHqlWhere(packBean);
//if (!CollectionUtils.isEmpty(mesOrderJobs)) {
// for (MesOrderJob orderJob : mesOrderJobs) {
// if(orderJob.getOrderType() == MesPcnExtEnumUtil.MES_OR_ORDER_TYPE.Q_MANAGE.getValue() && orderJob.getCheckType().equals(MesPcnExtEnumUtil.MES_Q_MANAGER_CHECK_TYPE.MONTH_CHECK.getValue())) continue;
// packBean = DdlPackBean.getDdlPackBean(mesOrderJob.getOrganizeCode());
// DdlPreparedPack.getStringEqualPack(orderJob.getWorkOrderNo(), "orderNo", packBean);
//
// MesWorkOrder mesWorkOrder = mesWorkOrderRDao.getByProperty(packBean);
// if (mesWorkOrder != null) {
// orderJob.setPartNo(mesWorkOrder.getPartNo());
// orderJob.setPartNameRdd(mesWorkOrder.getPartNameRdd());
// }
// }
//}
if (!CollectionUtils.isEmpty(mesOrderJobs)) {
List<String> workOrderNoList = mesOrderJobs.stream().map(MesOrderJob::getWorkOrderNo).collect(Collectors.toList());
Map<String, MesWorkOrder> workOrderMapByOrderNo = new HashMap<>();
if (!CollectionUtils.isEmpty(workOrderNoList)) {
DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(mesOrderJob.getOrganizeCode());
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.ORDER_NO, workPackBean);
List<MesWorkOrder> workOrderList = mesWorkOrderRDao.findByHqlWhere(workPackBean);
workOrderMapByOrderNo = workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getOrderNo, Function.identity(), (x, y) -> y));
}
for (MesOrderJob orderJob : mesOrderJobs) {
if (!StringUtils.isEmpty(orderJob.getWorkOrderNo())) {
MesWorkOrder workOrder = workOrderMapByOrderNo.get(orderJob.getWorkOrderNo());
orderJob.setPartNo(workOrder.getPartNo());
orderJob.setPartNameRdd(workOrder.getPartNameRdd());
}
}
}
return mesOrderJobs;
}

@ -864,6 +864,15 @@ public class ModulePackageTaskService implements IModulePackageTaskService {
private Boolean scanPackageConfirm(MesPackageRecord packageRecord, String organizeCode, String workOrderNo, String modifyUser, MesWorkOrderExt workOrderExt, String workCenterCode) {
String partNo = packageRecord.getPartNo();
String ctNo = packageRecord.getCtNo();
if (StringUtils.isEmpty(ctNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("条码为空")
.build();
}
//不存在则根据条码查询包装表
MesPackageExt mesPackageExtByDb = getMesPackageByBarCode(ctNo, organizeCode, workCenterCode, workOrderNo);
if (null == mesPackageExtByDb) {

@ -5,7 +5,11 @@ 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;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnMcRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ProduceSnExtModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.RepairRequestModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.ConvertBeanExt;
@ -25,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.testng.annotations.AfterSuite;
import java.util.HashMap;
import java.util.List;
@ -49,6 +54,9 @@ public class QualityDecisionService implements IQualityDecisionService {
private MesProduceSnExtRepository produceSnExtRepository;
@Autowired
private IJxProduceSnMcRecordService produceSnMcRecordService;
@Autowired
private MesDefectRepository mesDefectRDao;
@Autowired
@ -67,9 +75,6 @@ public class QualityDecisionService implements IQualityDecisionService {
private IWorkCenterExtService workCenterExtService;
@Autowired
private ISxRepairWorkService repairWorkService;
@Autowired
private MesProcessCellRepository mesProcessCellRDao;
@Autowired
@ -81,15 +86,24 @@ public class QualityDecisionService implements IQualityDecisionService {
@Autowired
private MesRepairRecordExtRepository repairRecordExtRepository;
@Autowired
private IJxProduceSnExtService jxProduceSnExtService;
public static final int MANAGE_CODE = 10;
public static final int SERIAL_NUMBER = 20;
public static final int PRODUCT_SN = 30;
@Override
public Map<String, Object> doCheckSerialNumberExt(String serialNumber, String organizeCode, String workCenterCode) {
Map<String, Object> resultMap = new HashMap<>();
MesProduceSnExt produceSnExt = doCheckSerialNumber(serialNumber, organizeCode, workCenterCode);
Map<String, Object> map = doCheckSerialNumber(serialNumber, organizeCode, workCenterCode);
if (produceSnExt.getOperateType() == MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue()) {
resultMap.put("isFreeze", false);
ProduceSnExtModel produceSnExt = map.containsKey("snModel") ? (ProduceSnExtModel) map.get("snModel") : null;
if (produceSnExt.getQcStatus() == MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue()) {
resultMap.put("isFreeze", true);
} else {
resultMap.put("isFreeze", false);
}
@ -100,62 +114,54 @@ public class QualityDecisionService implements IQualityDecisionService {
}
@Override
public MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode, String workCenterCode) {
public Map<String, Object> 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.LINE_ON.getValue()});
boolean isFinalCheckAfterSn = false;
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordService.getProduceSnMcRecordDb(organizeCode, serialNumber);
ProduceSnExtModel produceSnExtModel = new ProduceSnExtModel();
MesProduceSnExt produceSnExt = null;
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnMcRecordDb.getSerialNumber());
}
if (produceSnExt == null) {
if(produceSnExt == null){
BeanUtils.copyProperties(produceSnMcRecordDb, produceSnExtModel, MesPcnExtConstWords.ID);
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(organizeCode, serialNumber);
} else {
BeanUtils.copyProperties(produceSnExt, produceSnExtModel, MesPcnExtConstWords.ID);
if (produceSnRepair == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
produceSnExtModel.setSerialNumber(produceSnMcRecordDb.getManageCode());
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())){
} else {
produceSnExt = produceSnExtService.getProduceSnExtByProductSn(organizeCode, serialNumber);
if (produceSnExt == null) {
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)
.setErrorDetail("条码信息不存在,请检查")
.build();
}
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnRepair.getSerialNumber());
} else {
if(produceSnExt.getSnStatus() == MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()){
if(produceSnExt.getSnStatus() > MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
BeanUtils.copyProperties(produceSnExt, produceSnExtModel, MesPcnExtConstWords.ID);
// 先查询条码信息,判断最终工单号字段与工单号字段是否一致,一致的话判断生产线跟条码信息的生产线是否一致,工单不一样的话,根据最终工单号与条码查询返工条码表,判断生产线是否一致
if (produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
if (!workCenterCode.equals(produceSnExt.getWorkCenterCode())) {
if(!workCenterCode.equals(produceSnExt.getWorkCenterCode())){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
@ -164,26 +170,113 @@ public class QualityDecisionService implements IQualityDecisionService {
}
} else {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySnAndOrderNo(organizeCode, serialNumber, produceSnExt.getLastWorkOrderNo());
if (produceSnRepair == null) {
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("条码信息不存在,请检查")
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber, produceSnRepair.getWorkCenterCode(), workCenterCode)
.build();
}
if (null != produceSnRepair && !workCenterCode.equals(produceSnRepair.getWorkCenterCode())) {
produceSnExtModel.setWorkOrderNo(produceSnRepair.getWorkOrderNo());
produceSnExtModel.setWorkTime(produceSnRepair.getWorkTime());
produceSnExtModel.setShiftCode(produceSnRepair.getShiftCode());
isFinalCheckAfterSn = true;
}
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("snModel", produceSnExtModel);
resultMap.put("sn", produceSnExt);
resultMap.put("mcRecord", produceSnMcRecordDb);
resultMap.put("isFinalCheckAfterSn", isFinalCheckAfterSn);
return resultMap;
}
private String getWorkOrderNo(String workOrderNo, RepairRequestModel model) {
// 10-管理码20-过程条码30-产品条码
Integer snType = 0;
String querySn = null;
if (StringUtils.isEmpty(model.getProductSn())) {
if (StringUtils.isEmpty(model.getSerialNumber())) {
if (!StringUtils.isEmpty(model.getManageCode())) {
snType = MANAGE_CODE;
querySn = model.getManageCode();
}
} else {
snType = SERIAL_NUMBER;
querySn = model.getSerialNumber();
}
} else {
snType = PRODUCT_SN;
querySn = model.getProductSn();
}
if (StringUtils.isEmpty(querySn)) {
switch (snType) {
case MANAGE_CODE:
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.MANAGE_CODE, MesPcnExtConstWords.SN_STATUS},
new Object[]{model.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), querySn, MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.LINE_ON.getValue()});
if (produceSnMcRecordDb == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("管理码[%s]不存在", querySn)
.build();
}
workOrderNo = produceSnMcRecordDb.getWorkOrderNo();
break;
case SERIAL_NUMBER:
MesProduceSnExt produceSnExtBySn = produceSnExtService.getProduceSnExtBySn(model.getOrganizeCode(), querySn);
if (produceSnExtBySn == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("过程条码[%s]不存在", querySn)
.build();
}
workOrderNo = produceSnExtBySn.getLastWorkOrderNo();
break;
case PRODUCT_SN:
MesProduceSnExt produceSnExtByProductSn = produceSnExtService.getProduceSnExtByProductSn(model.getOrganizeCode(), querySn);
if (produceSnExtByProductSn == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]不存在", querySn)
.build();
}
workOrderNo = produceSnExtByProductSn.getLastWorkOrderNo();
break;
default:
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)
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("入参缺少生产工单号")
.build();
}
}
} else {
if (StringUtils.isEmpty(workOrderNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("入参缺少生产工单号")
.build();
}
}
return produceSnExt;
return workOrderNo;
}
@Override
@ -214,6 +307,36 @@ public class QualityDecisionService implements IQualityDecisionService {
@Override
public void insertMesBadCellAndDetail(RepairRequestModel repairRequestModel) {
List<MesBadCellDetail> badCellDetailList = getMesBadCellDetails(repairRequestModel);
Map<String, Object> map = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
ProduceSnExtModel produceSnExtModel = map.containsKey("snModel") ? (ProduceSnExtModel) map.get("snModel") : null;
MesProduceSnExt produceSnExt = map.containsKey("sn") ? (MesProduceSnExt) map.get("sn") : null;
MesProduceSnMcRecord produceSnMcRecordDb = map.containsKey("mcRecord") ? (MesProduceSnMcRecord) map.get("mcRecord") : null;
String workOrderNo;
if (StringUtils.isEmpty(produceSnExtModel.getLastWorkOrderNo())) {
workOrderNo = produceSnExtModel.getWorkOrderNo();
} else {
workOrderNo = produceSnExtModel.getLastWorkOrderNo();
}
MesWorkCenterExt workCenterExt = getMesWorkCenterExt(repairRequestModel);
insertBadCell(repairRequestModel, badCellDetailList, workOrderNo, produceSnExtModel, workCenterExt);
insertBadCellDetail(repairRequestModel, badCellDetailList, produceSnExtModel, produceSnExt, produceSnMcRecordDb, workCenterExt);
saveProduceSnMcRecordDb(repairRequestModel, produceSnMcRecordDb);
updateProduceSnQcAndOptionType(repairRequestModel, produceSnExt);
}
private List<MesBadCellDetail> getMesBadCellDetails(RepairRequestModel repairRequestModel) {
List<MesBadCellDetail> badCellDetailList = repairRequestModel.getMesDefectRecordList();
if (CollectionUtils.isEmpty(badCellDetailList)) {
throw ImppExceptionBuilder.newInstance()
@ -222,16 +345,62 @@ public class QualityDecisionService implements IQualityDecisionService {
.setErrorDetail("入参缺少不良明细数据")
.build();
}
String workOrderNo;
return badCellDetailList;
}
MesProduceSnExt produceSnExt = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
private void updateProduceSnQcAndOptionType(RepairRequestModel repairRequestModel, MesProduceSnExt produceSnExt) {
if ((produceSnExt != null) && (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()))) {
produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue());
produceSnExt.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue());
jxProduceSnExtService.clearProduceSnProcess(produceSnExt);
ConvertBean.serviceModelUpdate(produceSnExt, repairRequestModel.getModifyUser());
produceSnExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
produceSnExtRepository.save(produceSnExt);
}
}
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
workOrderNo = produceSnExt.getLastWorkOrderNo();
} else {
workOrderNo = produceSnExt.getWorkOrderNo();
private void saveProduceSnMcRecordDb(RepairRequestModel repairRequestModel, MesProduceSnMcRecord produceSnMcRecordDb) {
if (produceSnMcRecordDb != null) {
produceSnMcRecordDb.setQcStatus(MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.FALSE.getValue());
produceSnMcRecordDb.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue());
ConvertBean.serviceModelUpdate(produceSnMcRecordDb, repairRequestModel.getModifyUser());
produceSnMcRecordRepository.save(produceSnMcRecordDb);
}
}
private void insertBadCellDetail(RepairRequestModel repairRequestModel, List<MesBadCellDetail> badCellDetailList, ProduceSnExtModel produceSnExtModel, MesProduceSnExt produceSnExt, MesProduceSnMcRecord produceSnMcRecordDb, MesWorkCenterExt workCenterExt) {
for (MesBadCellDetail mesBadCellDetail : badCellDetailList) {
MesBadCellDetail badCellDetail = new MesBadCellDetail();
BeanUtils.copyProperties(mesBadCellDetail, badCellDetail, MesPcnExtConstWords.ID);
badCellDetail.setWorkTime(workCenterExt.getWorkTime());
badCellDetail.setShiftCode(workCenterExt.getShiftCode());
// 产品条码为空说明是试制条码
if (produceSnExt == null) {
if (!StringUtils.isEmpty(produceSnExtModel.getManageCode())) badCellDetail.setManageCode(produceSnExtModel.getManageCode());
if (produceSnMcRecordDb != null) badCellDetail.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
} else {
if (!StringUtils.isEmpty(produceSnExt.getSerialNumber())) badCellDetail.setSerialNumber(produceSnExt.getSerialNumber());
if (!StringUtils.isEmpty(produceSnExt.getProductSn())) badCellDetail.setProductSn(produceSnExt.getProductSn());
if (!StringUtils.isEmpty(produceSnExt.getTrayNo())) badCellDetail.setManageCode(produceSnExt.getTrayNo());
if (produceSnMcRecordDb != null) badCellDetail.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
}
badCellDetail.setWorkCellCode(repairRequestModel.getWorkCellCode());
badCellDetail.setRepairStatus(MesPcnExtEnumUtil.MES_REPAIR_STATUS.NO_REPAIR.getValue());
badCellDetail.setApprovalStatus(MesPcnExtEnumUtil.BAD_CELL_DETAIL_APPROVAL_STATUS.UN_APPROVAL.getValue());
ConvertBean.serviceModelInitialize(badCellDetail, repairRequestModel.getModifyUser());
badCellDetail.setDefectActionTime(badCellDetail.getCreateDatetime());
mesBadCellDetailRDao.insert(badCellDetail);
}
}
private MesWorkCenterExt getMesWorkCenterExt(RepairRequestModel repairRequestModel) {
MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
if (null == workCenterExt) {
throw ImppExceptionBuilder.newInstance()
@ -247,7 +416,10 @@ public class QualityDecisionService implements IQualityDecisionService {
.setErrorDetail("生产线[%s]未启动班次", repairRequestModel.getWorkCenterCode())
.build();
}
return workCenterExt;
}
private void insertBadCell(RepairRequestModel repairRequestModel, List<MesBadCellDetail> badCellDetailList, String workOrderNo, ProduceSnExtModel produceSnExtModel, MesWorkCenterExt workCenterExt) {
MesBadCell mesBadCell = badCellRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID,
MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.WORK_TIME, MesPcnExtConstWords.SHIFT_CODE, MesPcnExtConstWords.WORK_CELL_CODE},
@ -260,8 +432,8 @@ public class QualityDecisionService implements IQualityDecisionService {
new Object[]{repairRequestModel.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), repairRequestModel.getProcessCode()});
mesBadCell = new MesBadCell();
mesBadCell.setOrganizeCode(repairRequestModel.getOrganizeCode());
mesBadCell.setPartNo(produceSnExt.getPartNo());
mesBadCell.setPartNameRdd(produceSnExt.getPartNameRdd());
mesBadCell.setPartNo(produceSnExtModel.getPartNo());
mesBadCell.setPartNameRdd(produceSnExtModel.getPartNameRdd());
mesBadCell.setWorkCenterCode(repairRequestModel.getWorkCenterCode());
mesBadCell.setWorkCellCode(repairRequestModel.getWorkCellCode());
mesBadCell.setProcessCode(repairRequestModel.getProcessCode());
@ -277,52 +449,30 @@ public class QualityDecisionService implements IQualityDecisionService {
ConvertBean.serviceModelUpdate(mesBadCell, repairRequestModel.getModifyUser());
badCellRepository.save(mesBadCell);
}
//新增不良明细数据
MesBadCellDetail badCellDetail;
for(MesBadCellDetail mesBadCellDetail : badCellDetailList){
badCellDetail = new MesBadCellDetail();
BeanUtils.copyProperties(mesBadCellDetail, badCellDetail, MesPcnExtConstWords.ID);
badCellDetail.setWorkTime(workCenterExt.getWorkTime());
badCellDetail.setShiftCode(workCenterExt.getShiftCode());
badCellDetail.setSerialNumber(repairRequestModel.getSerialNumber());
badCellDetail.setWorkCellCode(repairRequestModel.getWorkCellCode());
badCellDetail.setRepairStatus(MesPcnExtEnumUtil.MES_REPAIR_STATUS.NO_REPAIR.getValue());
badCellDetail.setApprovalStatus(MesPcnExtEnumUtil.BAD_CELL_DETAIL_APPROVAL_STATUS.UN_APPROVAL.getValue());
ConvertBean.serviceModelInitialize(badCellDetail, repairRequestModel.getModifyUser());
badCellDetail.setDefectActionTime(badCellDetail.getCreateDatetime());
mesBadCellDetailRDao.insert(badCellDetail);
}
produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue());
ConvertBean.serviceModelUpdate(produceSnExt, repairRequestModel.getModifyUser());
produceSnExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
produceSnExtRepository.save(produceSnExt);
}
@Override
public void doUnfreeze(RepairRequestModel repairRequestModel) {
MesProduceSnExt produceSnExt = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
Map<String, Object> map = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
List<MesBadCellDetail> badCellDetailList = repairWorkService.getMesBadCellDetailBySerialNumber(produceSnExt.getSerialNumber(), repairRequestModel.getOrganizeCode());
ProduceSnExtModel produceSnExtModel = map.containsKey("snModel") ? (ProduceSnExtModel) map.get("snModel") : null;
boolean isCompleteRepair = CollectionUtils.isEmpty(badCellDetailList) ? false : badCellDetailList.stream().filter(o -> o.getRepairStatus() == MesPcnExtEnumUtil.MES_REPAIR_STATUS.REPAIRED.getValue()).collect(Collectors.toList()).size() > 0 ;
MesProduceSnExt produceSnExt = map.containsKey("sn") ? (MesProduceSnExt) map.get("sn") : null;
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();
}
MesProduceSnMcRecord produceSnMcRecordDb = map.containsKey("mcRecord") ? (MesProduceSnMcRecord) map.get("mcRecord") : null;
boolean isFinalCheckAfterSn = map.containsKey("isFinalCheckAfterSn");
List<MesBadCellDetail> badCellDetailList = getMesBadCellDetails(repairRequestModel, isFinalCheckAfterSn, produceSnExtModel, produceSnExt);
if (produceSnExt.getQcStatus() != MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue()) {
boolean isCompleteRepair = CollectionUtils.isEmpty(badCellDetailList) ? false : badCellDetailList.stream().filter(o -> o.getRepairStatus() == MesPcnExtEnumUtil.MES_REPAIR_STATUS.REPAIRED.getValue()).collect(Collectors.toList()).size() > 0 ;
if (produceSnExtModel.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())
.setErrorDetail("当前条码状态为[%s],不为[%s]", MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSnExtModel.getSnStatus()), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getDescription())
.build();
}
@ -334,36 +484,84 @@ public class QualityDecisionService implements IQualityDecisionService {
.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);
if ((produceSnExt != null) && (!StringUtils.isEmpty(produceSnExt.getSerialNumber()))) {
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());
if (produceSnMcRecordDb != null) {
produceSnMcRecordDb.setQcStatus(MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.TRUE.getValue());
ConvertBean.serviceModelUpdate(produceSnMcRecordDb, repairRequestModel.getModifyUser());
produceSnMcRecordRepository.save(produceSnMcRecordDb);
}
List<MesRepairRecordExt> repairRecordBySerialNumberList = repairWorkService.getMesRepairRecordBySerialNumber(produceSnExt.getSerialNumber(), produceSnExt.getOrganizeCode());
List<MesRepairRecordExt> repairRecordBySerialNumberList = getMesRepairRecordExts(isFinalCheckAfterSn, repairRequestModel.getOrganizeCode(), repairRequestModel.getSerialNumber(), produceSnExtModel, produceSnExt);
if (!CollectionUtils.isEmpty(badCellDetailBySerialNumberList)) {
for (MesBadCellDetail badCellDetail : badCellDetailBySerialNumberList) {
badCellDetail.setIsFreeze(MesPcnExtEnumUtil.IS_UNFREEZE.BIND.getValue());
if (!CollectionUtils.isEmpty(badCellDetailList)) {
for (MesBadCellDetail badCellDetail : badCellDetailList) {
badCellDetail.setIsUnfreeze(MesPcnExtEnumUtil.IS_UNFREEZE.YES.getValue());
ConvertBean.serviceModelUpdate(badCellDetail, repairRequestModel.getModifyUser());
}
badCellDetailRepository.saveAll(badCellDetailBySerialNumberList);
badCellDetailRepository.saveAll(badCellDetailList);
}
if (!CollectionUtils.isEmpty(repairRecordBySerialNumberList)) {
for (MesRepairRecordExt repairRecordExt : repairRecordBySerialNumberList) {
repairRecordExt.setIsFreeze(MesPcnExtEnumUtil.IS_UNFREEZE.BIND.getValue());
repairRecordExt.setIsUnfreeze(MesPcnExtEnumUtil.IS_UNFREEZE.YES.getValue());
ConvertBean.serviceModelUpdate(repairRecordExt, repairRequestModel.getModifyUser());
}
repairRecordExtRepository.saveAll(repairRecordBySerialNumberList);
}
}
private List<MesRepairRecordExt> getMesRepairRecordExts(boolean isFinalCheckAfterSn, String organizeCode, String querySn, ProduceSnExtModel produceSnExtModel, MesProduceSnExt produceSnExt) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
// lastWorkOrderNo 为空 代表为试制上线管理码
if (StringUtils.isEmpty(produceSnExtModel.getLastWorkOrderNo())) {
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(querySn, MesPcnExtConstWords.MANAGE_CODE, packBean);
} else if (produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
if (isFinalCheckAfterSn) {
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
} else {
DdlPreparedPack.getStringEqualPack(produceSnExt.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getSerialNumber(), MesPcnExtConstWords.SERIAL_NUMBER, packBean);
}
} else {
DdlPreparedPack.getStringEqualPack(produceSnExt.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
}
DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.IS_UNFREEZE.NO.getValue(), MesPcnExtConstWords.IS_UNFREEZE, packBean);
packBean.setOrderByStr(" order by createDatetime desc ");
return repairRecordExtRepository.findByHqlWhere(packBean);
}
private List<MesBadCellDetail> getMesBadCellDetails(RepairRequestModel repairRequestModel, boolean isFinalCheckAfterSn, ProduceSnExtModel produceSnExtModel, MesProduceSnExt produceSnExt) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(repairRequestModel.getOrganizeCode());
if (StringUtils.isEmpty(produceSnExtModel.getLastWorkOrderNo())) {
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getSerialNumber(), MesPcnExtConstWords.MANAGE_CODE, packBean);
} else if (produceSnExtModel.getLastWorkOrderNo().equals(produceSnExtModel.getWorkOrderNo())){
if (isFinalCheckAfterSn) {
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
} else {
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getSerialNumber(), MesPcnExtConstWords.SERIAL_NUMBER, packBean);
}
} else {
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExtModel.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
}
DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.IS_UNFREEZE.NO.getValue(), MesPcnExtConstWords.IS_UNFREEZE, packBean);
packBean.setOrderByStr(" order by createDatetime desc ");
return badCellDetailRepository.findByHqlWhere(packBean);
}
@Override

@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService;
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;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnMcRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ProduceSnExtModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.RepairRequestModel;
@ -100,6 +101,9 @@ public class SxRepairWorkService implements ISxRepairWorkService {
private ISxWorkOrderExtService workOrderExtService;
@Autowired
private IJxProduceSnMcRecordService produceSnMcRecordService;
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
@ -117,107 +121,250 @@ public class SxRepairWorkService implements ISxRepairWorkService {
@Autowired
private MesReplacementTravelRepository replacementTravelRepository;
@Autowired
private MesProduceSnMcRecordRepository produceSnMcRecordRepository;
@Override
public ProduceSnExtModel getProduceSnFrozenBySn(String serialNumber, String organizeCode) {
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, serialNumber);
if (produceSnExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]在系统中不存在", serialNumber)
.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],不是不合格或报废状态",
MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.valueOfDescription(produceSnExt.getQcStatus()))
.build();
}
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordService.getProduceSnMcRecordDb(organizeCode, serialNumber);
MesProduceSnExt produceSnExt = null;
ProduceSnExtModel produceSnExtModel = new ProduceSnExtModel();
BeanUtils.copyProperties(produceSnExt, produceSnExtModel, MesPcnExtConstWords.ID);
MesProduceSnRepair produceSnRepair;
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(organizeCode, serialNumber);
if (null == produceSnRepair) {
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnMcRecordDb.getSerialNumber());
if (produceSnExt != null) {
BeanUtils.copyProperties(produceSnExt, produceSnExtModel, MesPcnExtConstWords.ID);
} else {
BeanUtils.copyProperties(produceSnMcRecordDb, produceSnExtModel, MesPcnExtConstWords.ID);
}
produceSnExtModel.setManageCode(produceSnMcRecordDb.getManageCode());
}
if (produceSnExt == null) {
produceSnExt = produceSnExtService.getProduceSnExtByProductSn(organizeCode, serialNumber);
if (produceSnExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", serialNumber, produceSnExt.getLastWorkOrderNo())
.setErrorDetail("扫描条码[%s]不存在,", serialNumber)
.build();
}
produceSnExtModel.setWorkOrderNo(produceSnRepair.getWorkOrderNo());
produceSnExtModel.setWorkTime(produceSnRepair.getWorkTime());
produceSnExtModel.setShiftCode(produceSnRepair.getShiftCode());
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],不是不合格或报废状态",
MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.valueOfDescription(produceSnExt.getQcStatus()))
.build();
}
if(produceSnExt.getSnStatus() > MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
BeanUtils.copyProperties(produceSnExt, produceSnExtModel, MesPcnExtConstWords.ID);
if (!produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySnAndOrderNo(organizeCode, serialNumber, produceSnExt.getLastWorkOrderNo());
produceSnExtModel.setWorkOrderNo(produceSnRepair.getWorkOrderNo());
produceSnExtModel.setWorkTime(produceSnRepair.getWorkTime());
produceSnExtModel.setShiftCode(produceSnRepair.getShiftCode());
}
} else {
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],不是不合格或报废状态",
MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.valueOfDescription(produceSnExt.getQcStatus()))
.build();
}
// 先查询条码信息,判断最终工单号字段与工单号字段是否一致
if (!produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
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();
}
produceSnExtModel.setWorkOrderNo(produceSnRepair.getWorkOrderNo());
produceSnExtModel.setWorkTime(produceSnRepair.getWorkTime());
produceSnExtModel.setShiftCode(produceSnRepair.getShiftCode());
}
}
if (produceSnExtModel.getQcStatus() != null) produceSnExtModel.setQcStatusName(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.valueOfDescription(produceSnExtModel.getQcStatus()));
if (produceSnExtModel.getSnStatus() != null) produceSnExtModel.setSnStatusName(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSnExtModel.getSnStatus()));
if (!StringUtils.isEmpty(produceSnExtModel.getManageCode())) {
produceSnExtModel.setSerialNumber(produceSnExtModel.getManageCode());
} else if(!StringUtils.isEmpty(produceSnExtModel.getProductSn())) {
produceSnExtModel.setSerialNumber(produceSnExtModel.getProductSn());
}
return produceSnExtModel;
}
@Override
public List<MesBadCellDetail> getMesBadCellDetailBySerialNumber(String serialNumber, String organizeCode) {
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, serialNumber);
if (null == produceSnExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]不存在", serialNumber)
.build();
}
MesProduceSnRepair produceSnRepair = null;
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(organizeCode, serialNumber);
if (null == produceSnRepair) {
// 是否为已过终检条码
boolean isFinalCheckAfterSn = false;
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordService.getProduceSnMcRecordDb(organizeCode, serialNumber);
MesProduceSnExt produceSnExt = null;
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnMcRecordDb.getSerialNumber());
if (produceSnExt == null) {
produceSnExt = new MesProduceSnExt();
BeanUtils.copyProperties(produceSnMcRecordDb, produceSnExt, MesPcnExtConstWords.ID, MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME);
}
} else {
produceSnExt = produceSnExtService.getProduceSnExtByProductSn(organizeCode, serialNumber);
if (produceSnExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
if(produceSnExt.getSnStatus() > MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", serialNumber, produceSnExt.getLastWorkOrderNo())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
isFinalCheckAfterSn = true;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(serialNumber, MesPcnExtConstWords.SERIAL_NUMBER, packBean);
if (null == produceSnRepair) {
// lastWorkOrderNo 为空 代表为试制上线管理码
if (StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo())) {
DdlPreparedPack.getStringEqualPack(produceSnExt.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(String.valueOf(produceSnMcRecordDb.getId()), MesPcnExtConstWords.THIRD_PARTY_PID, packBean);
} else if (produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())){
if (isFinalCheckAfterSn) {
DdlPreparedPack.getStringEqualPack(produceSnExt.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
} else {
DdlPreparedPack.getStringEqualPack(produceSnExt.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getSerialNumber(), MesPcnExtConstWords.SERIAL_NUMBER, packBean);
}
} else {
DdlPreparedPack.getStringEqualPack(produceSnRepair.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
}
DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.IS_UNFREEZE.NO.getValue(), MesPcnExtConstWords.IS_UNFREEZE, packBean);
packBean.setOrderByStr(" order by createDatetime desc ");
return badCellDetailRepository.findByHqlWhere(packBean);
}
@Override
public List<MesRepairRecordExt> getMesRepairRecordBySerialNumber(String serialNumber, String organizeCode) {
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, serialNumber);
if (null == produceSnExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]不存在", serialNumber)
.build();
}
MesProduceSnRepair produceSnRepair = null;
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(organizeCode, serialNumber);
if (null == produceSnRepair) {
// 是否为已过终检条码
boolean isFinalCheckAfterSn = false;
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordService.getProduceSnMcRecordDb(organizeCode, serialNumber);
MesProduceSnExt produceSnExt = null;
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnMcRecordDb.getSerialNumber());
if (produceSnExt == null) {
produceSnExt = new MesProduceSnExt();
BeanUtils.copyProperties(produceSnMcRecordDb, produceSnExt, MesPcnExtConstWords.ID, MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME);
}
} else {
produceSnExt = produceSnExtService.getProduceSnExtByProductSn(organizeCode, serialNumber);
if (produceSnExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", serialNumber, produceSnExt.getLastWorkOrderNo())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
}
if(produceSnExt.getSnStatus() > MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
isFinalCheckAfterSn = true;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(serialNumber, MesPcnExtConstWords.SERIAL_NUMBER, packBean);
if (null == produceSnRepair) {
// lastWorkOrderNo 为空 代表为试制上线管理码
if (StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo())) {
DdlPreparedPack.getStringEqualPack(produceSnExt.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(String.valueOf(produceSnMcRecordDb.getId()), MesPcnExtConstWords.THIRD_PARTY_PID, packBean);
} else if (produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())){
if (isFinalCheckAfterSn) {
DdlPreparedPack.getStringEqualPack(produceSnExt.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
} else {
DdlPreparedPack.getStringEqualPack(produceSnExt.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getSerialNumber(), MesPcnExtConstWords.SERIAL_NUMBER, packBean);
}
} else {
DdlPreparedPack.getStringEqualPack(produceSnRepair.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getLastWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(produceSnExt.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
}
DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.IS_UNFREEZE.NO.getValue(), MesPcnExtConstWords.IS_UNFREEZE, packBean);
packBean.setOrderByStr(" order by createDatetime desc ");
return repairRecordExtRepository.findByHqlWhere(packBean);
}
@ -225,7 +372,7 @@ public class SxRepairWorkService implements ISxRepairWorkService {
@Override
public List<MesWorkCenterExt> queryWorkCenter(String organizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(String.valueOf(MesPcnExtEnumUtil.LINE_TYPE.COMPONENT_LINE.getValue()), MesPcnExtConstWords.LINE_TYPE, packBean);
DdlPreparedPack.getNumNOEqualPack(String.valueOf(MesPcnExtEnumUtil.LINE_TYPE.ONTOLOGY_LINE.getValue()), MesPcnExtConstWords.LINE_TYPE, packBean);
return workCenterExtRepository.findByHqlWhere(packBean);
}
@ -304,55 +451,54 @@ public class SxRepairWorkService implements ISxRepairWorkService {
@Override
public void insertMesBadCellDetail(MesBadCellDetail mesBadCellDetail) {
String workOrderNo = mesBadCellDetail.getOrderNo();
MesProduceSnMcRecord produceSnMcRecordDb = null;
MesProduceSnExt produceSnExt = null;
// 条码不为空则为本体返修
if (!StringUtils.isEmpty(mesBadCellDetail.getSerialNumber())) {
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(mesBadCellDetail.getOrganizeCode(), mesBadCellDetail.getSerialNumber());
if (null == produceSnExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]不存在", mesBadCellDetail.getSerialNumber())
.build();
}
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(mesBadCellDetail.getOrganizeCode(), mesBadCellDetail.getSerialNumber());
if (null == produceSnRepair) {
produceSnMcRecordDb = produceSnMcRecordService.getProduceSnMcRecordDb(mesBadCellDetail.getOrganizeCode(), mesBadCellDetail.getSerialNumber());
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(mesBadCellDetail.getOrganizeCode(), produceSnMcRecordDb.getSerialNumber());
if (produceSnExt == null) {
produceSnExt = new MesProduceSnExt();
BeanUtils.copyProperties(produceSnMcRecordDb, produceSnExt, MesPcnExtConstWords.ID, MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME);
}
} else {
produceSnExt = produceSnExtService.getProduceSnExtByProductSn(mesBadCellDetail.getOrganizeCode(), mesBadCellDetail.getSerialNumber());
if (produceSnExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", mesBadCellDetail.getSerialNumber(), produceSnExt.getLastWorkOrderNo())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
workOrderNo = produceSnRepair.getWorkOrderNo();
} else {
workOrderNo = produceSnExt.getWorkOrderNo();
}
mesBadCellDetail.setWorkCenterCode(produceSnExt.getWorkCenterCode());
} else {
if (StringUtils.isEmpty(workOrderNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("入参缺少生产工单号")
.build();
if(produceSnExt.getSnStatus() > MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
}
}
MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(mesBadCellDetail.getOrganizeCode(), mesBadCellDetail.getWorkCenterCode());
if (null == workCenterExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线代码[%s]无效", mesBadCellDetail.getWorkCenterCode())
.build();
}
if (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线[%s]未启动班次", mesBadCellDetail.getWorkCenterCode())
.build();
workOrderNo = StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) ? produceSnExt.getWorkOrderNo() : produceSnExt.getLastWorkOrderNo();
}
MesWorkCenterExt workCenterExt = getMesWorkCenterExt(mesBadCellDetail.getOrganizeCode(), mesBadCellDetail.getWorkCenterCode());
List<MesDefect> mesDefectList = mesBadCellDetail.getMesDefectList();
if (!CollectionUtils.isEmpty(mesDefectList)) {
MesBadCell badCell = badCellRepository.getByProperty(
@ -365,7 +511,7 @@ public class SxRepairWorkService implements ISxRepairWorkService {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("根据产品条码[%s]基于生产日期[%s]班次[%s]上未在工位[%s]执行质量判定作业",
.setErrorDetail("根据条码[%s]基于生产日期[%s]班次[%s]上未在工位[%s]执行质量判定作业",
mesBadCellDetail.getSerialNumber(), workCenterExt.getWorkTime(), workCenterExt.getShiftCode(), mesBadCellDetail.getWorkCellCode())
.build();
} else {
@ -416,7 +562,15 @@ public class SxRepairWorkService implements ISxRepairWorkService {
badCellDetail.setDefectCode(mesDefect.getDefectCode());
badCellDetail.setDefectName(mesDefect.getDefectName());
badCellDetail.setRepairStatus(MesPcnExtEnumUtil.MES_REPAIR_STATUS.NO_REPAIR.getValue());
badCellDetail.setSerialNumber(mesBadCellDetail.getSerialNumber());
// 不为空则为本体 为空则为组件
if (!StringUtils.isEmpty(mesBadCellDetail.getSerialNumber())) {
if (!StringUtils.isEmpty(produceSnExt.getSerialNumber())) badCellDetail.setSerialNumber(produceSnExt.getSerialNumber());
if (!StringUtils.isEmpty(produceSnExt.getProductSn())) badCellDetail.setProductSn(produceSnExt.getProductSn());
if (!StringUtils.isEmpty(produceSnExt.getTrayNo())) badCellDetail.setManageCode(produceSnExt.getTrayNo());
if (produceSnMcRecordDb != null) badCellDetail.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
}
badCellDetail.setApprovalStatus(MesPcnExtEnumUtil.BAD_CELL_DETAIL_APPROVAL_STATUS.UN_APPROVAL.getValue());
badCellDetail.setOrganizeCode(mesBadCellDetail.getOrganizeCode());
ConvertBean.serviceModelInitialize(badCellDetail, mesBadCellDetail.getModifyUser());
@ -426,6 +580,25 @@ public class SxRepairWorkService implements ISxRepairWorkService {
}
}
private MesWorkCenterExt getMesWorkCenterExt(String organizeCode, String workCenterCode) {
MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(organizeCode, workCenterCode);
if (null == workCenterExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线代码[%s]无效", workCenterCode)
.build();
}
if (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线[%s]未启动班次", workCenterCode)
.build();
}
return workCenterExt;
}
@Override
public void insertMesRepairRecord(MesRepairRecordExt repairRecord) {
MesRepairRecordExt repairRecordExt = new MesRepairRecordExt();
@ -496,54 +669,64 @@ public class SxRepairWorkService implements ISxRepairWorkService {
Map<String, Long> defectCodeMap = new HashMap<>();
String workOrderNo = repairRecordList.get(0).getWorkOrderNo();
if (!StringUtils.isEmpty(badCellDetailList.get(0).getSerialNumber())) {
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(requestModel.getOrganizeCode(), badCellDetailList.get(0).getSerialNumber());
if (null == produceSnExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]不存在", badCellDetailList.get(0).getSerialNumber())
.build();
}
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(requestModel.getOrganizeCode(), produceSnExt.getSerialNumber());
if (null == produceSnRepair) {
MesBadCellDetail mesBadCellDetail = badCellDetailList.get(0);
MesProduceSnMcRecord produceSnMcRecordDb = null;
ProduceSnExtModel produceSnExtModel = new ProduceSnExtModel();
MesProduceSnExt produceSnExt = null;
// 条码不为空则为本体返修
if (!StringUtils.isEmpty(mesBadCellDetail.getSerialNumber())) {
produceSnMcRecordDb = produceSnMcRecordService.getProduceSnMcRecordDb(requestModel.getOrganizeCode(), mesBadCellDetail.getSerialNumber());
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(requestModel.getOrganizeCode(), produceSnMcRecordDb.getSerialNumber());
if (produceSnExt == null) {
produceSnExt = new MesProduceSnExt();
BeanUtils.copyProperties(produceSnMcRecordDb, produceSnExt, MesPcnExtConstWords.ID, MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME);
} else {
BeanUtils.copyProperties(produceSnExt, produceSnExtModel, MesPcnExtConstWords.ID);
produceSnExtModel.setManageCode(produceSnExt.getTrayNo());
}
} else {
produceSnExt = produceSnExtService.getProduceSnExtByProductSn(requestModel.getOrganizeCode(), mesBadCellDetail.getSerialNumber());
if (produceSnExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", produceSnExt.getSerialNumber(), produceSnExt.getLastWorkOrderNo())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
workOrderNo = produceSnRepair.getWorkOrderNo();
} else {
workOrderNo = produceSnExt.getWorkOrderNo();
}
} else {
if (StringUtils.isEmpty(workOrderNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("入参缺少生产工单号")
.build();
if(produceSnExt.getSnStatus() > MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
BeanUtils.copyProperties(produceSnExt, produceSnExtModel, MesPcnExtConstWords.ID);
}
}
MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(requestModel.getOrganizeCode(), badCellDetailList.get(0).getWorkCenterCode());
if (null == workCenterExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线代码[%s]无效", badCellDetailList.get(0).getWorkCenterCode())
.build();
}
if (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线[%s]未启动班次", badCellDetailList.get(0).getWorkCenterCode())
.build();
workOrderNo = StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) ? produceSnExt.getWorkOrderNo() : produceSnExt.getLastWorkOrderNo();
}
MesWorkCenterExt workCenterExt = getMesWorkCenterExt(requestModel.getOrganizeCode(), badCellDetailList.get(0).getWorkCenterCode());
MesBadCell badCell = badCellRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID,
MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.WORK_TIME, MesPcnExtConstWords.SHIFT_CODE, MesPcnExtConstWords.WORK_CELL_CODE},
@ -605,7 +788,22 @@ public class SxRepairWorkService implements ISxRepairWorkService {
badCellDetail.setDefectCode(detail.getDefectCode());
badCellDetail.setDefectName(detail.getDefectName());
badCellDetail.setRepairStatus(MesPcnExtEnumUtil.MES_REPAIR_STATUS.REPAIRED.getValue());
badCellDetail.setSerialNumber(detail.getSerialNumber());
// 产品条码为空说明是试制条码
if (produceSnExt == null) {
if (!StringUtils.isEmpty(produceSnExtModel.getManageCode())) badCellDetail.setManageCode(produceSnExtModel.getManageCode());
if (produceSnMcRecordDb != null) badCellDetail.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
} else {
if (!StringUtils.isEmpty(produceSnExt.getSerialNumber())) badCellDetail.setSerialNumber(produceSnExt.getSerialNumber());
if (!StringUtils.isEmpty(produceSnExt.getProductSn())) badCellDetail.setProductSn(produceSnExt.getProductSn());
if (!StringUtils.isEmpty(produceSnExt.getTrayNo())) badCellDetail.setManageCode(produceSnExt.getTrayNo());
if (produceSnMcRecordDb != null) badCellDetail.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
}
badCellDetail.setApprovalStatus(MesPcnExtEnumUtil.BAD_CELL_DETAIL_APPROVAL_STATUS.UN_APPROVAL.getValue());
badCellDetail.setOrganizeCode(requestModel.getOrganizeCode());
ConvertBean.serviceModelInitialize(badCellDetail, requestModel.getModifyUser());
@ -623,6 +821,22 @@ public class SxRepairWorkService implements ISxRepairWorkService {
repairRecordExt.setWorkTime(workCenterExt.getWorkTime());
repairRecordExt.setShiftCode(workCenterExt.getShiftCode());
repairRecordExt.setWorkOrderNo(workOrderNo);
// 产品条码为空说明是试制条码
if (produceSnExt == null) {
if (!StringUtils.isEmpty(produceSnExtModel.getManageCode())) repairRecordExt.setManageCode(produceSnExtModel.getManageCode());
if (produceSnMcRecordDb != null) repairRecordExt.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
} else {
if (!StringUtils.isEmpty(produceSnExt.getSerialNumber())) repairRecordExt.setSerialNumber(produceSnExt.getSerialNumber());
if (!StringUtils.isEmpty(produceSnExt.getManageCode())) repairRecordExt.setManageCode(produceSnExt.getManageCode());
if (!StringUtils.isEmpty(produceSnExt.getProductSn())) repairRecordExt.setProductSn(produceSnExt.getProductSn());
if ((produceSnMcRecordDb != null) && (!StringUtils.isEmpty(produceSnMcRecordDb.getId()))) repairRecordExt.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
}
ConvertBean.serviceModelInitialize(repairRecordExt, requestModel.getModifyUser());
new ConvertBeanExt(repairRecordExt).convertBean(repairRecordExt);
repairRecordExtRepository.insert(repairRecordExt);
@ -631,48 +845,84 @@ public class SxRepairWorkService implements ISxRepairWorkService {
@Override
public void updateRepairComplete(String serialNumber, String organizeCode, String modifyUser) {
String workOrderNo;
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, serialNumber);
if (null == produceSnExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产品条码[%s]无效", serialNumber)
.build();
}
if (MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue() == produceSnExt.getQcStatus()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产品条码[%s]质量状态为合格,不能执行维修完成操作", serialNumber)
.build();
}
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(organizeCode, serialNumber);
if (null == produceSnRepair) {
// 是否为已过终检条码
boolean isFinalCheckAfterSn = false;
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordService.getProduceSnMcRecordDb(organizeCode, serialNumber);
MesProduceSnExt produceSnExt = null;
if(produceSnMcRecordDb != null){
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnMcRecordDb.getSerialNumber());
if (produceSnExt == null) {
produceSnExt = new MesProduceSnExt();
BeanUtils.copyProperties(produceSnMcRecordDb, produceSnExt, MesPcnExtConstWords.ID, MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME);
}
} else {
produceSnExt = produceSnExtService.getProduceSnExtByProductSn(organizeCode, serialNumber);
if (produceSnExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", serialNumber, produceSnExt.getLastWorkOrderNo())
.setErrorDetail("条码信息不存在,请检查")
.build();
}
workOrderNo = produceSnRepair.getWorkOrderNo();
} else {
workOrderNo = produceSnExt.getWorkOrderNo();
if(produceSnExt.getSnStatus() > MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
.build();
}
isFinalCheckAfterSn = true;
}
String workOrderNo = StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) ? produceSnExt.getWorkOrderNo() : produceSnExt.getWorkOrderNo();
MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(organizeCode, workOrderNo);
if (null == workOrderExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产品条码[%s]关联的工单号[%s]无效", serialNumber, workOrderNo)
.setErrorDetail("条码[%s]关联的工单号[%s]无效", serialNumber, workOrderNo)
.build();
}
List<MesBadCellDetail> badCellDetailList = badCellDetailRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.SERIAL_NUMBER},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, serialNumber});
List<MesBadCellDetail> badCellDetailList;
// lastWorkOrderNo 为空 代表为试制上线管理码
if (StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo())) {
badCellDetailList = badCellDetailRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.THIRD_PARTY_PID},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, StringUtils.isEmpty(produceSnMcRecordDb.getId())});
} else if (produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())){
if (isFinalCheckAfterSn) {
badCellDetailList = badCellDetailRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.PRODUCT_SN},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, produceSnExt.getProductSn()});
} else {
badCellDetailList = badCellDetailRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.SERIAL_NUMBER},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, produceSnExt.getSerialNumber()});
}
} else {
badCellDetailList = badCellDetailRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.PRODUCT_SN},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, produceSnExt.getProductSn()});
}
badCellDetailList = CollectionUtils.isEmpty(badCellDetailList) ? null :
badCellDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getRepairStatus()) && MesPcnExtEnumUtil.MES_REPAIR_STATUS.NO_REPAIR.getValue() == o.getRepairStatus())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(badCellDetailList)) {
@ -683,23 +933,15 @@ public class SxRepairWorkService implements ISxRepairWorkService {
.build();
}
MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(organizeCode, produceSnExt.getWorkCenterCode());
if (null == workCenterExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线代码[%s]无效", produceSnExt.getWorkCenterCode())
.build();
}
if (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线[%s]未启动班次", produceSnExt.getWorkCenterCode())
.build();
MesWorkCenterExt workCenterExt = getMesWorkCenterExt(organizeCode, produceSnExt.getWorkCenterCode());
if (produceSnMcRecordDb != null) {
produceSnMcRecordDb.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.QUALIFIED.getValue());
ConvertBean.serviceModelUpdate(produceSnMcRecordDb, modifyUser);
produceSnMcRecordRepository.save(produceSnMcRecordDb);
}
produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue());
produceSnExt.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.QUALIFIED.getValue());
ConvertBean.serviceModelUpdate(produceSnExt, modifyUser);
produceSnExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
@ -716,6 +958,10 @@ public class SxRepairWorkService implements ISxRepairWorkService {
repairTask.setRepairNo(orderNoList.get(0));
repairTask.setWorkOrderNo(workOrderNo);
repairTask.setSerialNumber(serialNumber);
if (!StringUtils.isEmpty(produceSnExt.getManageCode())) repairTask.setManageCode(produceSnExt.getManageCode());
if (!StringUtils.isEmpty(produceSnExt.getSerialNumber())) repairTask.setSerialNumber(produceSnExt.getSerialNumber());
if (!StringUtils.isEmpty(produceSnExt.getProductSn())) repairTask.setProductSn(produceSnExt.getProductSn());
if (produceSnMcRecordDb != null ) repairTask.setThirdPartyPid(String.valueOf(produceSnMcRecordDb.getId()));
repairTask.setRepairQty(new Double(1));
repairTask.setWorkCenterCode(produceSnExt.getWorkCenterCode());
repairTask.setPartNo(produceSnExt.getPartNo());
@ -726,6 +972,35 @@ public class SxRepairWorkService implements ISxRepairWorkService {
repairTask.setRepairDate(repairTask.getCreateDatetime());
repairTask.setRepairUser(modifyUser);
repairTaskRepository.insert(repairTask);
// 解绑关键件
int unbindKeyResult = 0;
if (isFinalCheckAfterSn) {
unbindKeyResult = prodBindRecordExtRepository.updateByProperties(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED,
MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.IS_BIND_KEY, MesPcnExtConstWords.ACTION_TYPE},
new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
produceSnExt.getProductSn(), MesPcnExtEnumUtil.MES_IS_BIND_KEY.IS_BIND_KEY.getValue(), MesPcnExtEnumUtil.MES_ACTION_TYPE.BIND.getValue()},
new String[]{MesPcnExtConstWords.ACTION_TYPE, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME},
new Object[]{MesPcnExtEnumUtil.MES_ACTION_TYPE.UNTYING.getValue(), modifyUser, TimeTool.getNowTime(true)});
} else {
unbindKeyResult = prodBindRecordExtRepository.updateByProperties(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED,
MesPcnExtConstWords.THIRD_PARTY_PID, MesPcnExtConstWords.IS_BIND_KEY, MesPcnExtConstWords.ACTION_TYPE},
new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
String.valueOf(produceSnMcRecordDb.getId()), MesPcnExtEnumUtil.MES_IS_BIND_KEY.IS_BIND_KEY.getValue(), MesPcnExtEnumUtil.MES_ACTION_TYPE.BIND.getValue()},
new String[]{MesPcnExtConstWords.ACTION_TYPE, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME},
new Object[]{MesPcnExtEnumUtil.MES_ACTION_TYPE.UNTYING.getValue(), modifyUser, TimeTool.getNowTime(true)});
}
log.info("updateRepairComplete --- 解绑关键件结果:{}" , unbindKeyResult);
// 清空条码履历
//produceSnTravelExtRepository.updateByProperties(new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED,
// MesPcnExtConstWords.SERIAL_NUMBER}, new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
// serialNumber},
// new String[]{MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME},
// new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), modifyUser, TimeTool.getNowTime(true)});
}
/**
@ -784,21 +1059,7 @@ public class SxRepairWorkService implements ISxRepairWorkService {
.build();
}
MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(organizeCode, workOrderExt.getWorkCenterCode());
if (null == workCenterExt) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线代码[%s]无效", workOrderExt.getWorkCenterCode())
.build();
}
if (StringUtils.isEmpty(workCenterExt.getShiftCode()) || StringUtils.isEmpty(workCenterExt.getWorkTime())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("生产线[%s]未启动班次", workOrderExt.getWorkCenterCode())
.build();
}
MesWorkCenterExt workCenterExt = getMesWorkCenterExt(organizeCode, workOrderExt.getWorkCenterCode());
workOrderExt.setRepairQty(StringUtils.isEmpty(workOrderExt.getRepairQty()) ? defectQty : MathOperation.add(workOrderExt.getRepairQty(), defectQty));
ConvertBean.serviceModelUpdate(workOrderExt, modifyUser);

@ -88,6 +88,9 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
private MesWorkCenterRepository workCenterRepository;
@Autowired
private MesWorkCenterExtRepository workCenterExtRepository;
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
@ -112,10 +115,10 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
private MesPackageExtRepository packageExtRepository;
@Autowired
private MesPackageRecordRepository packageRecordRepository;
private IShiftExtService shiftExtService;
@Autowired
private MesBusiConfigRepository busiConfigRepository;
private MesPackageRecordRepository packageRecordRepository;
@Autowired
private MesProduceSnRepairRepository produceSnRepairRepository;
@ -126,6 +129,17 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
@Autowired
private MesPackageDetailRepository packageDetailRepository;
@Autowired
private MesManualReportTravelRepository mesManualReportTravelRepository;
@Autowired
private SxProductOffLineRepository productOffLineRepository;
@Autowired
private SxProductOffLineExtRepository productOffLineExtRepository;
@Resource(name = MesPcnExtConstWords.REDIS_RES_PCN)
private ImppRedis redisMesPcn;
@ -858,7 +872,13 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
.build();
}
String key = new StringJoiner(MesPcnExtConstWords.COLON).add("MES-PAUSE-ORDER").add(workOrderExt.getOrderNo()).toString();
String workCenterWoPauseKey = new StringJoiner(MesPcnExtConstWords.COLON).add("MES-PAUSE-ORDER").add(workOrderExt.getWorkCenterCode()).toString();
redisMesPcn.putObject(workCenterWoPauseKey, workOrderExt.getOrderNo());
redisMesPcn.putObject(key, workOrderExt.getOrderNo(), MesPcnEnumUtil.EXPIRE_TIME.ONE_MIN.getValue());
} else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue() == workOrderStatus) {
/*//关闭
//校验工单是否是暂停状态
@ -1437,4 +1457,217 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.ORDER_NO, packBean);
return workOrderRepository.findByHqlWhere(packBean);
}
@Override
public void doManualReport(String workOrderNo, Double qty, String organizeCode, String userName) {
MesWorkOrderExt workOrder = getMesWorkOrderExt(workOrderNo, organizeCode);
MesWorkCenterExt workCenterExt = getMesWorkCenterExt(organizeCode, workOrder);
String shiftName = getMesShiftName(organizeCode, workOrder, workCenterExt);
MesPartExt partExt = getMesPartExt(workOrderNo, organizeCode, workOrder);
double sumQty = getSumQty(qty, workOrder);
saveWorkOrderExt(userName, workOrder, sumQty);
insertManualReportTravel(organizeCode, userName, workOrder, qty, workCenterExt, shiftName);
insertSxProductOffLine(workOrderNo, qty, organizeCode, userName, workOrder, partExt);
}
private double getSumQty(Double qty, MesWorkOrderExt workOrder) {
double sumQty = workOrder.getCompleteQty() + qty;
if (sumQty > workOrder.getQty()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("报工数量[%s]与当前完工数量[%s]之和[%s]大于工单计划数量[%s]", workOrder.getCompleteQty(), qty, sumQty, workOrder.getQty())
.build();
}
return sumQty;
}
private void saveWorkOrderExt(String userName, MesWorkOrderExt workOrder, double sumQty) {
workOrder.setCompleteQty(sumQty);
if (workOrder.getQty().compareTo(workOrder.getCompleteQty()) == 0) {
//工单完成
workOrder.setWorkOrderStatus(MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue());
insertMesWorkOrderLog(workOrder);
}
ConvertBean.serviceModelUpdate(workOrder, userName);
new ConvertBeanExt(workOrder).convertBean(workOrder);
workOrderExtRepository.save(workOrder);
}
private MesWorkOrderExt getMesWorkOrderExt(String workOrderNo, String organizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo, MesPcnExtConstWords.ORDER_NO, packBean);
MesWorkOrderExt workOrder = workOrderExtRepository.getByProperty(packBean);
if (workOrder == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工单[%s]不存在", workOrder.getOrderNo())
.build();
}
if (workOrder.getWorkOrderStatus() == MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue() || workOrder.getWorkOrderStatus() == MesPcnExtEnumUtil.WORK_ORDER_STATUS.REMOVE.getValue()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工单状态已为[%s],无法操作", MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))
.build();
}
if (workOrder.getWorkOrderStatus() != MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工单[%s]未启动", workOrder.getOrderNo())
.build();
}
return workOrder;
}
private MesWorkCenterExt getMesWorkCenterExt(String organizeCode, MesWorkOrderExt workOrder) {
MesWorkCenterExt workCenterExt = workCenterExtService.getWorkCenterExtByWorkCenterCode(organizeCode, workOrder.getWorkCenterCode());
if (workCenterExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产线[%s]不存在", workOrder.getWorkCenterCode())
.build();
}
if (StringUtils.isEmpty(workCenterExt.getWorkTime())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产线[%s]未启动班次", workOrder.getWorkCenterCode())
.build();
}
return workCenterExt;
}
private MesPartExt getMesPartExt(String workOrderNo, String organizeCode, MesWorkOrderExt workOrder) {
MesPartExt partExt = partExtService.getPartExt(organizeCode, workOrder.getPartNo());
if (partExt == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("物料[%s]不存在", workOrder.getPartNo())
.build();
}
if (partExt.getIsManualReport() == null || MesPcnExtEnumUtil.IS_MANUAL_REPORT.NO.getValue() == partExt.getIsManualReport() ) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工单[%s]关联物料[%s]不支持手动报工", workOrderNo, partExt.getPartNo())
.build();
}
return partExt;
}
private String getMesShiftName(String organizeCode, MesWorkOrderExt workOrder, MesWorkCenterExt workCenterExt) {
MesShift shift = getMesShift(organizeCode, workOrder, workCenterExt);
return shift.getShiftName();
}
private MesShift getMesShift(String organizeCode, MesWorkOrderExt workOrder, MesWorkCenterExt workCenterExt) {
MesShift shift = shiftExtService.getShiftByShiftCodeAndCenterCode(organizeCode, workOrder.getWorkCenterCode(), workCenterExt.getShiftCode());
if (shift == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产线[%s]班次[%s]不存在", workOrder.getWorkCenterCode(), workOrder.getShiftCode())
.build();
}
return shift;
}
private void insertManualReportTravel(String organizeCode, String userName, MesWorkOrderExt workOrder, Double qty, MesWorkCenterExt workCenterExt, String shiftName) {
MesManualReportTravel manualReportTravel = new MesManualReportTravel();
BeanUtils.copyProperties(workOrder, manualReportTravel,MesPcnExtConstWords.ID, MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME);
manualReportTravel.setOrganizeCode(organizeCode);
manualReportTravel.setReportQty(qty);
manualReportTravel.setWorkOrderNo(workOrder.getOrderNo());
manualReportTravel.setWorkCenterName(workCenterExt.getWorkCenterName());
manualReportTravel.setShiftCode(workCenterExt.getShiftCode());
manualReportTravel.setShiftName(shiftName);
manualReportTravel.setWorkTime(workCenterExt.getWorkTime());
manualReportTravel.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
ConvertBean.serviceModelInitialize(manualReportTravel, userName);
mesManualReportTravelRepository.save(manualReportTravel);
}
private void insertSxProductOffLine(String workOrderNo, Double qty, String organizeCode, String userName, MesWorkOrderExt workOrder, MesPartExt partExt) {
SxProductOffLine productOffLine = new SxProductOffLine();
productOffLine.setWorkOrderNo(workOrderNo);
productOffLine.setPartNo(workOrder.getPartNo());
productOffLine.setPartName(workOrder.getPartNameRdd());
productOffLine.setQty(qty);
productOffLine.setWorkCenterCode(workOrder.getWorkCenterCode());
productOffLine.setErpWarehouse(workOrder.getErpWarehouse());
//取物料信息中的类型
if (null != partExt) {
productOffLine.setUnit(partExt.getUnit());
productOffLine.setProdType(getProdType(partExt.getCategoryCode1()));
productOffLine.setProdType(Integer.parseInt(partExt.getCategoryCode1()));
}
if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == workOrder.getWorkOrderType()) {
productOffLine.setSnType(MesPcnExtEnumUtil.PRODUCE_SN_TYPE.REWORK_SN.getValue());
} else if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.STANDARD_ORDER.getValue() == workOrder.getWorkOrderType() ) {
productOffLine.setSnType(MesPcnExtEnumUtil.PRODUCE_SN_TYPE.STANDARD_SN.getValue());
} else {
productOffLine.setSnType(MesPcnExtEnumUtil.PRODUCE_SN_TYPE.ATTEMPT_SN.getValue());
}
productOffLine.setSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
MesWorkCenterExt workCenterExt = getWorkCenterExtByWorkCenterCode(workOrder.getWorkCenterCode(), organizeCode);
productOffLine.setShiftCode(workCenterExt.getShiftCode());
productOffLine.setLotNo(workCenterExt.getWorkTime());
productOffLine.setPartNo(partExt.getPartNo());
productOffLine.setIsWaterPurifier(MesPcnExtEnumUtil.IS_WATER_PURIFIER.NO.getValue());
productOffLine.setOrganizeCode(organizeCode);
ConvertBean.serviceModelUpdate(productOffLine, userName);
productOffLineRepository.insert(productOffLine);
}
private MesWorkCenterExt getWorkCenterExtByWorkCenterCode(String workCenterCode, String organizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
return workCenterExtRepository.getByProperty(packBean);
}
private Integer getProdType(String categoryCode1) {
if (StringUtils.isEmpty(categoryCode1)) {
return null;
} else {
try {
return Integer.valueOf(categoryCode1);
} catch (NumberFormatException e) {
return null;
}
}
}
}

@ -1,25 +1,35 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base.bu;
import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxPcnHttpService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.bu.IBuFirstOrderService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WmsSnInfoModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesFirstOrderDetailRepository;
import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesOrderJobRepository;
import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnExtRepository;
import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesProduceSnMcRecordRepository;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.i3plus.mes.pcn.util.PcnHttpUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
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.impp.framework.boot.exception.ImppExceptionBuilder;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @Author: xiangming.liao
@ -40,7 +50,10 @@ public class BuFirstOrderService implements IBuFirstOrderService {
private MesFirstOrderDetailRepository mesFirstOrderDetailRDao;
@Autowired
private MesProduceSnExtRepository produceSnExtRepository;
private MesProduceSnMcRecordRepository produceSnMcRecordRepository;
@Autowired
private ISxPcnHttpService pcnHttpService;
@Override
public void doCheckSerialNumber(String serialNumber, String orderNo, String workOrderNo, String organizeCode, String modifyUser) {
@ -54,11 +67,20 @@ public class BuFirstOrderService implements IBuFirstOrderService {
}
//扫描管理码
MesProduceSnExt produceSnExt = produceSnExtRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.SERIAL_NUMBER, MesPcnExtConstWords.WORK_ORDER_NO},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), serialNumber, workOrderNo});
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.LINE_ON.getValue()});
if (produceSnMcRecordDb == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("管理码[%s]不存在或未上线", serialNumber)
.build();
}
if (produceSnExt == null) {
if (!produceSnMcRecordDb.getWorkOrderNo().equals(workOrderNo)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
@ -66,9 +88,22 @@ public class BuFirstOrderService implements IBuFirstOrderService {
.build();
}
//MesProduceSnExt produceSnExt = produceSnExtRepository.getByProperty(
// new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.SERIAL_NUMBER, MesPcnExtConstWords.WORK_ORDER_NO},
// new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), serialNumber, workOrderNo});
//
//if (produceSnExt == null) {
// throw ImppExceptionBuilder.newInstance()
// .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
// .setErrorDetail("管理码[%s]不存在于当前工单中", serialNumber)
// .build();
//}
MesOrderJob orderJobDb = orderJobRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ORDER_NO},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), orderNo});
if (null == orderJobDb) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
@ -94,18 +129,26 @@ public class BuFirstOrderService implements IBuFirstOrderService {
.build();
}
if (workOrderExt.getWorkOrderType() != MesPcnExtEnumUtil.WORK_ORDER_TYPE.STANDARD_ORDER.getValue()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("工单号[%s]不为正常工单", workOrderNo)
.build();
}
MesOrderJob orderJobExist = orderJobRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.SERIAL_NUMBER},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), serialNumber});
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), produceSnMcRecordDb.getSerialNumber()});
if (null != orderJobExist) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产品条码[%s]已经绑定单据[%s],不可再次执行绑定", serialNumber, orderJobExist.getOrderNo())
.setErrorDetail("条码[%s]已经绑定单据[%s],不可再次执行绑定", serialNumber, orderJobExist.getOrderNo())
.build();
}
orderJobDb.setSerialNumber(serialNumber);
orderJobDb.setSerialNumber(produceSnMcRecordDb.getSerialNumber());
ConvertBean.serviceModelUpdate(orderJobDb, modifyUser);
orderJobRepository.save(orderJobDb);
}
@ -175,21 +218,45 @@ public class BuFirstOrderService implements IBuFirstOrderService {
}
}
if (mesFirstOrderDetail.getManageType().equals(MesPcnExtEnumUtil.Q_MANAGE_MANAGE_TYPE.RESULT_TYPE.getValue()) && !StringUtils.isEmpty(mesFirstOrderDetail.getImportanceSafePartNo()) && StringUtils.isEmpty(mesFirstOrderDetail.getCheckResult())){
if (!mesFirstOrderDetail.getImportanceSafePartNo().equals(mesFirstOrderDetail.getCheckValue())) {
MesProduceSnExt produceSnExt = produceSnExtRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PRODUCT_SN},
new Object[]{mesFirstOrderDetail.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
MesPcnExtEnumUtil.IS_VAILD.VAILD.getValue(), mesFirstOrderDetail.getCheckValue()});
if (mesFirstOrderDetail.getManageType().equals(MesPcnExtEnumUtil.Q_MANAGE_MANAGE_TYPE.RESULT_TYPE.getValue()) && !StringUtils.isEmpty(mesFirstOrderDetail.getImportanceSafePartNo())){
if (!mesFirstOrderDetail.getImportanceSafePartNo().equals(mesFirstOrderDetail.getResultValue())) {
String requestUrl = pcnHttpService.getRequestUrl(mesFirstOrderDetail.getOrganizeCode(), MesPcnExtConstWords.FIND_PART_NO);
Map<String, String> params = new HashMap<>();
params.put(MesPcnExtConstWords.SN, mesFirstOrderDetail.getResultValue());
params.put(MesPcnExtConstWords.ORGANIZE_CODE, mesFirstOrderDetail.getOrganizeCode());
WmsSnInfoModel wmsSnInfoModel = null;
try {
String data = PcnHttpUtil.doGet(requestUrl, params);
BaseResultBean baseResultBean = null;
if (produceSnExt == null || !produceSnExt.getPartNo().equals(mesFirstOrderDetail.getImportanceSafePartNo())) {
if (!StringUtils.isEmpty(data)) {
baseResultBean = JsonUtilTool.decode(data, BaseResultBean.class);
} else {
log.error("updateMesFirstOrderDetail --- HTTP[{}]调用主接口失败", requestUrl);
}
log.error("updateMesFirstOrderDetail --- Q管理校验物料时获取WMS数据[{}]", data);
if (null != baseResultBean && baseResultBean.success) {
LinkedHashMap resultObject = (LinkedHashMap) baseResultBean.getResultObject();
wmsSnInfoModel= JsonUtilTool.decode(JSONObject.toJSONString(resultObject), WmsSnInfoModel.class);
}
if (wmsSnInfoModel == null) {
log.error("updateMesFirstOrderDetail --- Q管理校验物料时获取WMS数据失败 HTTP[{}]调用主接口 无法获取此条码信息", requestUrl);
}
} catch (UnsupportedEncodingException e) {
log.error("updateMesFirstOrderDetail --- Q管理校验物料时获取WMS数据失败 HTTP[{}]调用主接口失败", requestUrl);
}
if ((wmsSnInfoModel == null) || (!wmsSnInfoModel.getPartNo().equals(mesFirstOrderDetail.getImportanceSafePartNo()))) {
log.info("updateMesFirstOrderDetail --- 条码为空或条码的重要安全部品编码不一致");
mesFirstOrderDetail.setCheckValue("20");
mesFirstOrderDetail.setCheckResult("20");
} else {
mesFirstOrderDetail.setCheckValue("10");
mesFirstOrderDetail.setCheckResult("10");
}
} else {
mesFirstOrderDetail.setCheckValue("20");
mesFirstOrderDetail.setCheckResult("10");
}
}

@ -114,19 +114,19 @@ public class FristItemOrderService implements IWorkOrderStartService {
}
List<String> processCodeList = new ArrayList<>(processCodeMap.keySet());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderExt.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.MES_OR_ORDER_TYPE.WORK_ORDER_FIRST.getValue(), MesPcnExtConstWords.ORDER_TYPE, packBean);
DdlPreparedPack.getStringEqualPack(workOrderExt.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(workCenterExt.getShiftCode(), MesPcnExtConstWords.SHIFT_CODE, packBean);
DdlPreparedPack.getStringEqualPack(workCenterExt.getWorkTime(), MesPcnExtConstWords.WORK_TIME, packBean);
DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
List<MesOrderJob> orderJobList = orderJobRepository.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(orderJobList)) {
msg = String.format("Q管理生成单据:工单[%s]已经生成过首检单", workOrderExt.getOrderNo());
log.info(msg);
checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo);
return;
}
//DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderExt.getOrganizeCode());
//DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.MES_OR_ORDER_TYPE.WORK_ORDER_FIRST.getValue(), MesPcnExtConstWords.ORDER_TYPE, packBean);
//DdlPreparedPack.getStringEqualPack(workOrderExt.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
//DdlPreparedPack.getStringEqualPack(workCenterExt.getShiftCode(), MesPcnExtConstWords.SHIFT_CODE, packBean);
//DdlPreparedPack.getStringEqualPack(workCenterExt.getWorkTime(), MesPcnExtConstWords.WORK_TIME, packBean);
//DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
//List<MesOrderJob> orderJobList = orderJobRepository.findByHqlWhere(packBean);
//if (!CollectionUtils.isEmpty(orderJobList)) {
// msg = String.format("Q管理生成单据:工单[%s]已经生成过首检单", workOrderExt.getOrderNo());
// log.info(msg);
// checkErrorLogService.insertCheckErrorLog(checkErrorLog, msg, userInfo);
// return;
//}
DdlPackBean packBean1 = DdlPackBean.getDdlPackBean(workOrderExt.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workOrderExt.getPartNo(), MesPcnExtConstWords.PART_NO, packBean1);

@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IPackageExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxSubassemblyRemadeStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxSubassemblyRemadeRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesSubassemblyRemadeRecord;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.SxSubassemblyRemadeDetailModel;
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
import lombok.extern.slf4j.Slf4j;
@ -20,6 +22,9 @@ public class SxSubassemblyRemadeCtNoService extends SxSubassemblyRemadeDispatchS
@Autowired
private IPackageExtService packageExtService;
@Autowired
private IJxSubassemblyRemadeRecordService subassemblyRemadeRecordService;
private static final String SN_TYPE = "容器";
@Override
@ -29,9 +34,13 @@ public class SxSubassemblyRemadeCtNoService extends SxSubassemblyRemadeDispatchS
checkPackage(organizeCode, sn, packageDb, SN_TYPE);
MesSubassemblyRemadeRecord subassemblyRemadeRecordDb = subassemblyRemadeRecordService.getSubassemblyRemadeRecordByWoAndPo(workOrderNo, packageDb.getPackageNo(), organizeCode);
checkSubassemblyRemadeRecord(sn, subassemblyRemadeRecordDb, SN_TYPE);
checkPart(organizeCode, sn, packageDb, workOrderNo, partNo, SN_TYPE);
return packDetail(sn, packageDb, workCenterCode, workOrderNo);
return packDetail(sn, subassemblyRemadeRecordDb);
}
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IPartExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IPackageExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesSubassemblyRemadeRecord;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.SxSubassemblyRemadeDetailModel;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -12,6 +13,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@ -58,6 +60,16 @@ public class SxSubassemblyRemadeDispatchService {
}
}
public void checkSubassemblyRemadeRecord(String sn, MesSubassemblyRemadeRecord subassemblyRemadeRecordDb, String msg) {
if (null == subassemblyRemadeRecordDb) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("扫描的%s条码[%s]不存在数据", msg, sn)
.build();
}
}
public void checkPart(String organizeCode, String sn, MesPackage packageDb, String workOrderNo, String partNo, String msg) {
MesPart partDb = partExtService.getPart(organizeCode, packageDb.getPartNo());
if (null == partDb) {
@ -86,20 +98,22 @@ public class SxSubassemblyRemadeDispatchService {
}
}
public SxSubassemblyRemadeDetailModel packDetail(String sn, MesPackage packageDb, String workCenterCode, String workOrderNo) {
public SxSubassemblyRemadeDetailModel packDetail(String sn, MesSubassemblyRemadeRecord subassemblyRemadeRecordDb) {
SxSubassemblyRemadeDetailModel detail = new SxSubassemblyRemadeDetailModel();
//detail.setPackageNo(packageDb.getPackageNo());
//detail.setCtNo(packageDb.getCtNo());
//detail.setLotNo(packageDb.getLotNo());
//detail.setPartNo(packageDb.getPartNo());
//detail.setPartNameRdd(packageDb.getPartNameRdd());
//detail.setInitWorkCenterCode(packageDb.getWorkCenterCode());
//detail.setInitWorkOrderNo(packageDb.getWorkOrderNo());
//detail.setInitQty(packageDb.getQty());
//detail.setWorkCenterCode(workCenterCode);
//detail.setWorkOrderNo(workOrderNo);
//detail.setQty(packageDb.getQty());
BeanUtils.copyProperties(subassemblyRemadeRecordDb, detail);
detail.setSn(sn);
detail.setPackageNo(packageDb.getPackageNo());
detail.setCtNo(packageDb.getCtNo());
detail.setLotNo(packageDb.getLotNo());
detail.setPartNo(packageDb.getPartNo());
detail.setPartNameRdd(packageDb.getPartNameRdd());
detail.setInitWorkCenterCode(packageDb.getWorkCenterCode());
detail.setInitWorkOrderNo(packageDb.getWorkOrderNo());
detail.setInitQty(packageDb.getQty());
detail.setWorkCenterCode(workCenterCode);
detail.setWorkOrderNo(workOrderNo);
detail.setQty(packageDb.getQty());
detail.setScanDatetime(TimeTool.getNowTime(true));
return detail;
}

@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IPackageExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxSubassemblyRemadeStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxSubassemblyRemadeRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesSubassemblyRemadeRecord;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.SxSubassemblyRemadeDetailModel;
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
import lombok.extern.slf4j.Slf4j;
@ -20,6 +22,9 @@ public class SxSubassemblyRemadePackageNoService extends SxSubassemblyRemadeDisp
@Autowired
private IPackageExtService packageExtService;
@Autowired
private IJxSubassemblyRemadeRecordService subassemblyRemadeRecordService;
private static final String SN_TYPE = "包装";
@Override
@ -29,9 +34,13 @@ public class SxSubassemblyRemadePackageNoService extends SxSubassemblyRemadeDisp
checkPackage(organizeCode, sn, packageDb, SN_TYPE);
MesSubassemblyRemadeRecord subassemblyRemadeRecordDb = subassemblyRemadeRecordService.getSubassemblyRemadeRecordByWoAndPo(workOrderNo, sn, organizeCode);
checkSubassemblyRemadeRecord(sn, subassemblyRemadeRecordDb, SN_TYPE);
checkPart(organizeCode, sn, packageDb, workOrderNo, partNo, SN_TYPE);
return packDetail(sn, packageDb, workCenterCode, workOrderNo);
return packDetail(sn, subassemblyRemadeRecordDb);
}
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.base.*;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxSubassemblyRemadeRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesOutPutStatistics;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesSubassemblyRemadeRecord;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkCenterExt;
@ -77,6 +78,9 @@ public class SxSubassemblyRemadeService implements ISxSubassemblyRemadeService {
private MesSubassemblyRemadeRecordRepository subassemblyRemadeRecordRepository;
@Autowired
private IJxSubassemblyRemadeRecordService jxSubassemblyRemadeRecordService;
@Autowired
private MesWorkOrderRepository workOrderRepository;
@Autowired
@ -254,7 +258,7 @@ public class SxSubassemblyRemadeService implements ISxSubassemblyRemadeService {
//根据条码获取条码信息
SxSubassemblyRemadeDetailModel detail = ((ISxSubassemblyRemadeStrategyService) SpringContextsUtil.
getBean(getClazz(model.getOrganizeCode(), partDb.getCategoryCode2()))).
getBean(getClazz(model.getOrganizeCode()))).
querySubassemblyRemadeSn(model.getOrganizeCode(), model.getSn(), model.getWorkOrderNo(), partDb.getPartNo(), model.getWorkCenterCode());
//验证条码是否已经绑定此返工工单
@ -310,9 +314,9 @@ public class SxSubassemblyRemadeService implements ISxSubassemblyRemadeService {
}
}
private String getClazz(String organizeCode, String categoryCode2) {
private String getClazz(String organizeCode) {
//获取实现方法
String clazz = MesPcnExtEnumUtil.ORG_ZJ_REMADE_METHOD_CFG.valueOfCalss(getConfig(organizeCode), categoryCode2);
String clazz = MesPcnExtEnumUtil.ORG_ZJ_REMADE_METHOD_CFG.BU.getOutSideClass();
if (StringUtils.isEmpty(clazz)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
@ -559,25 +563,29 @@ public class SxSubassemblyRemadeService implements ISxSubassemblyRemadeService {
if (null == detail) {
continue;
}
MesSubassemblyRemadeRecord record = new MesSubassemblyRemadeRecord();
if (detail.getId() == null) continue;
MesSubassemblyRemadeRecord record = subassemblyRemadeRecordRepository.getById(detail.getId());
//MesSubassemblyRemadeRecord record = new MesSubassemblyRemadeRecord();
record.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
record.setSn(detail.getSn());
record.setPackageNo(detail.getPackageNo());
record.setCtNo(detail.getCtNo());
record.setLotNo(detail.getLotNo());
record.setQty(detail.getQty());
record.setInitWorkOrderNo(detail.getInitWorkOrderNo());
record.setInitWorkCenterCode(detail.getInitWorkCenterCode());
record.setInitQty(detail.getInitQty());
record.setWorkOrderNo(modelCached.getWorkOrderNo());
record.setWorkCenterCode(modelCached.getWorkCenterCode());
record.setPartNo(modelCached.getPartNo());
record.setPartNameRdd(modelCached.getPartNameRdd());
//record.setSn(detail.getSn());
//record.setPackageNo(detail.getPackageNo());
//record.setCtNo(detail.getCtNo());
//record.setLotNo(detail.getLotNo());
//record.setQty(detail.getQty());
//record.setInitWorkOrderNo(detail.getInitWorkOrderNo());
//record.setInitWorkCenterCode(detail.getInitWorkCenterCode());
//record.setInitQty(detail.getInitQty());
//record.setWorkOrderNo(modelCached.getWorkOrderNo());
//record.setWorkCenterCode(modelCached.getWorkCenterCode());
//record.setPartNo(modelCached.getPartNo());
//record.setPartNameRdd(modelCached.getPartNameRdd());
record.setWorkTime(workCenterExt.getWorkTime());
record.setShiftCode(workCenterExt.getShiftCode());
record.setOrganizeCode(modelCached.getOrganizeCode());
ConvertBean.serviceModelInitialize(record, userInfo);
subassemblyRemadeRecordRepository.insert(record);
subassemblyRemadeRecordRepository.save(record);
}
workOrder.setCompleteQty(completeQty);

@ -136,6 +136,7 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
produceSnMcRecord.setWorkCenterCode(params.getWorkCenterCode());
produceSnMcRecord.setWorkOrderNo(params.getOrderModel().getOrderNo());
produceSnMcRecord.setSnStatus(MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.LINE_ON.getValue());
produceSnMcRecord.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.QUALIFIED.getValue());
produceSnMcRecord.setLineOnStatus(MesPcnExtEnumUtil.MC_RECORD_LINE_ON_STATUS.FALSE.getValue());
produceSnMcRecord.setQcStatus(MesPcnExtEnumUtil.MC_RECORD_QC_STATUS.TRUE.getValue());
produceSnMcRecord.setOrganizeCode(params.getOrganizeCode());

@ -35,7 +35,7 @@ public class JxProdBusiStrategyRepairService implements IJxProdBusiStrategyServi
if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo()))
return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo()));
if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus())
if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus() && !StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode()))
return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus())));
if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType())

@ -81,7 +81,7 @@ public class JxProdBusiStrategyStandardService implements IJxProdBusiStrategySer
if (!params.getProduceSnExtDb().getLastWorkOrderNo().equals(params.getOrderModel().getOrderNo()))
return stepResult.msg(String.format("%s[%s]对应的产品条码信息关联的工单号[%s]与当前生产的工单号[%s]不一致,验证失败!", params.getScanName(), params.getScanInfo(), params.getProduceSnExtDb().getLastWorkOrderNo(), params.getOrderModel().getOrderNo()));
if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus())
if (MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue() <= params.getProduceSnExtDb().getSnStatus() && !StringUtils.isEmpty(params.getProduceSnExtDb().getProcessCode()))
return stepResult.msg(String.format("%s[%s]对应的产品条码信息当前条码状态[%s],验证失败!", params.getScanName(), params.getScanInfo(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(params.getProduceSnExtDb().getSnStatus())));
if (MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue() == params.getProduceSnExtDb().getOperateType())

@ -0,0 +1,31 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.jx;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxSubassemblyRemadeRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesSubassemblyRemadeRecord;
import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesSubassemblyRemadeRecordRepository;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @PROJECT_NAME: i3plus-mes-panasonic-jx
* @DESCRIPTION:
* @USER: xinwang.yi
* @DATE: 2023-10-31 13:59
*/
@Service
public class JxSubassemblyRemadeRecordService implements IJxSubassemblyRemadeRecordService {
@Autowired
private MesSubassemblyRemadeRecordRepository subassemblyRemadeRecordRepository;
@Override
public MesSubassemblyRemadeRecord getSubassemblyRemadeRecordByWoAndPo(String workOrderNo, String packageNo, String organizeCode) {
return subassemblyRemadeRecordRepository.getByProperty(
new String[]{MesPcnExtConstWords.WORK_ORDER_NO, MesPcnExtConstWords.PACKAGENO, MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID},
new Object[]{workOrderNo,
packageNo, organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()});
}
}

@ -118,7 +118,7 @@ public class SxNoumenonRepairCheckSnStepService extends BaseStepService {
return StepResult.getNonComplete(err);
}
if (MathOperation.compareTo(workOrderExt.getQty(), new Double(0)) <= 0) {
err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "工单[%s]计划数量[0],不能操作"), reqBean.getWorkOrderNo());
err = String.format(LocaleUtil.transferLanguage(reqBean.getUserInfo(), "工单[%s]计划数量[0],不能操作"), reqBean.getWorkOrderNo());
sendMessage(reqBean, resultBean, err, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
return StepResult.getNonComplete(err);
}

@ -48,7 +48,7 @@ public class MesRepairTask extends BaseBean implements Serializable {
private String workOrderNo;
@Column(name = "SERIAL_NUMBER")
@ApiParam("产品条码")
@ApiParam("过程条码")
private String serialNumber;
@Column(name = "WORK_CENTER_CODE")

@ -20,9 +20,15 @@ public class ProduceSnExtModel implements Serializable {
@ApiParam("id")
private Long id;
@ApiParam("产品条码")
@ApiParam("过程条码")
private String serialNumber;
@ApiParam("管理码")
private String manageCode;
@ApiParam("产品条码")
private String productSn;
@ApiParam("物料号")
private String partNo;

@ -84,4 +84,10 @@ public class RepairRequestModel {
@ApiParam("过程条码")
private String serialNumber;
@ApiParam("产品条码")
private String productSn;
@ApiParam("管理码")
private String manageCode;
}

@ -19,6 +19,9 @@ public class SxSubassemblyRemadeDetailModel implements Serializable {
private static final long serialVersionUID = -2611302779539355901L;
@ApiParam("返工组件包装id")
private Long id;
@ApiParam("扫描条码")
private String sn;

@ -3577,8 +3577,8 @@ public class MesPcnExtEnumUtil {
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum IS_UNFREEZE {
BIND(10, "已解冻"),
UNTYING(20, "未解冻");
YES(10, "已解冻"),
NO(20, "未解冻");
private int value;
private String description;
@ -3671,5 +3671,60 @@ public class MesPcnExtEnumUtil {
}
/**
*
*/
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum IS_MANUAL_REPORT {
YES(10, "是"),
NO(20, "否");
private int value;
private String description;
IS_MANUAL_REPORT(int value, String description) {
this.value = value;
this.description = description;
}
public static String valueOfDescription(int val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (values()[i].value == val) {
tmp = values()[i].description;
}
}
return tmp;
}
public static Integer descriptionOfValue(String description) {
Integer tmp = null;
for (int i = 0; i < values().length; i++) {
if (values()[i].description.equals(description)) {
tmp = values()[i].value;
}
}
return tmp;
}
public static IS_MANUAL_REPORT getByValue(int value) {
for (IS_MANUAL_REPORT codeType : values()) {
if (codeType.getValue() == value) {
return codeType;
}
}
return null;
}
public int getValue() {
return value;
}
public String getDescription() {
return description;
}
}
}

Loading…
Cancel
Save