diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IQualityDecisionService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IQualityDecisionService.java index c0c9dbe..eaa6781 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IQualityDecisionService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IQualityDecisionService.java @@ -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 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); /** diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/ISxWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/ISxWorkOrderExtService.java index 53810a7..f3b8875 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/ISxWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/ISxWorkOrderExtService.java @@ -206,4 +206,12 @@ public interface ISxWorkOrderExtService { */ @ApiOperation(value = "根据工单号集合获取工单信息", notes = "根据工单号集合获取工单信息") List queryMesWorkOrderByOrderNoList(List workOrderNoList, String organizeCode); + + /** + * 手动报工 + * @param workOrderNo 工单号 + * @param qty 工单号 + */ + @ApiOperation(value = "手动报工", notes = "手动报工") + void doManualReport(String workOrderNo, Double qty, String organizeCode, String userName); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxSubassemblyRemadeRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxSubassemblyRemadeRecordService.java new file mode 100644 index 0000000..10cb1a9 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxSubassemblyRemadeRecordService.java @@ -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); + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/QualityController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/QualityController.java index 0ddf9a1..db3d907 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/QualityController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/QualityController.java @@ -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 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) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxRepairWorkController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxRepairWorkController.java index abec793..b3102f8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxRepairWorkController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxRepairWorkController.java @@ -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("操作成功"))) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxWorkOrderExtController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxWorkOrderExtController.java index 3db15c1..3b2fbb7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxWorkOrderExtController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/SxWorkOrderExtController.java @@ -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(); + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/jx/SxBusiConcfigController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/jx/SxBusiConcfigController.java new file mode 100644 index 0000000..4815633 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/jx/SxBusiConcfigController.java @@ -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); + } + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/OrderJobDao.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/OrderJobDao.java index c09373c..73a4a9c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/OrderJobDao.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/daoimpl/OrderJobDao.java @@ -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 ") diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrderJobService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrderJobService.java index 092241a..f5bdee4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrderJobService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesOrderJobService.java @@ -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 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 workOrderNoList = mesOrderJobs.stream().map(MesOrderJob::getWorkOrderNo).collect(Collectors.toList()); + + Map workOrderMapByOrderNo = new HashMap<>(); + + if (!CollectionUtils.isEmpty(workOrderNoList)) { + + DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(mesOrderJob.getOrganizeCode()); + DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.ORDER_NO, workPackBean); + List 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; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ModulePackageTaskService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ModulePackageTaskService.java index 6f5615b..4bd943b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ModulePackageTaskService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ModulePackageTaskService.java @@ -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) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/QualityDecisionService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/QualityDecisionService.java index 9185734..d686b4f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/QualityDecisionService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/QualityDecisionService.java @@ -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 doCheckSerialNumberExt(String serialNumber, String organizeCode, String workCenterCode) { Map resultMap = new HashMap<>(); - MesProduceSnExt produceSnExt = doCheckSerialNumber(serialNumber, organizeCode, workCenterCode); + Map 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 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 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 badCellDetailList = getMesBadCellDetails(repairRequestModel); + + Map 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 getMesBadCellDetails(RepairRequestModel repairRequestModel) { List 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 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 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 map = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode()); - List 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 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 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 repairRecordBySerialNumberList = repairWorkService.getMesRepairRecordBySerialNumber(produceSnExt.getSerialNumber(), produceSnExt.getOrganizeCode()); + List 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 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 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 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxRepairWorkService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxRepairWorkService.java index 9851068..c4bef2b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxRepairWorkService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxRepairWorkService.java @@ -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 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 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 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 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 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 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 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); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxWorkOrderExtService.java index a0b2ec3..c5c766e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/SxWorkOrderExtService.java @@ -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; + } + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/bu/BuFirstOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/bu/BuFirstOrderService.java index 5d93930..19d717c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/bu/BuFirstOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/bu/BuFirstOrderService.java @@ -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 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"); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java index d455e31..6073558 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/FristItemOrderService.java @@ -114,19 +114,19 @@ public class FristItemOrderService implements IWorkOrderStartService { } List 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 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 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); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeCtNoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeCtNoService.java index 9c67fcf..4da927a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeCtNoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeCtNoService.java @@ -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); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeDispatchService.java index 5b07413..bc2c129 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeDispatchService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeDispatchService.java @@ -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; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadePackageNoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadePackageNoService.java index f1302fb..cabf09b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadePackageNoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadePackageNoService.java @@ -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); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeService.java index f3e2e87..b9dd4fb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/SxSubassemblyRemadeService.java @@ -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); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java index a656ef6..87d50bb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java @@ -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()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java index c2cbcb5..67331ef 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyRepairService.java @@ -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()) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java index f593f27..0871263 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyStandardService.java @@ -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()) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxSubassemblyRemadeRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxSubassemblyRemadeRecordService.java new file mode 100644 index 0000000..450a4c7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxSubassemblyRemadeRecordService.java @@ -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()}); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/SxNoumenonRepairCheckSnStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/SxNoumenonRepairCheckSnStepService.java index d0427b5..53f8a97 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/SxNoumenonRepairCheckSnStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/step/SxNoumenonRepairCheckSnStepService.java @@ -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); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesRepairTask.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesRepairTask.java index d8c29b2..5e79f67 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesRepairTask.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesRepairTask.java @@ -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") diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ProduceSnExtModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ProduceSnExtModel.java index c3ca1d6..976c649 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ProduceSnExtModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/ProduceSnExtModel.java @@ -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; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/RepairRequestModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/RepairRequestModel.java index 1c3d5c5..bfd7518 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/RepairRequestModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/RepairRequestModel.java @@ -84,4 +84,10 @@ public class RepairRequestModel { @ApiParam("过程条码") private String serialNumber; + @ApiParam("产品条码") + private String productSn; + + @ApiParam("管理码") + private String manageCode; + } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/SxSubassemblyRemadeDetailModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/SxSubassemblyRemadeDetailModel.java index 067acf1..5365efe 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/SxSubassemblyRemadeDetailModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/SxSubassemblyRemadeDetailModel.java @@ -19,6 +19,9 @@ public class SxSubassemblyRemadeDetailModel implements Serializable { private static final long serialVersionUID = -2611302779539355901L; + @ApiParam("返工组件包装id") + private Long id; + @ApiParam("扫描条码") private String sn; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java index 2b2d243..ec12c90 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java @@ -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; + } + } + }