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 e1956d3..4a9d707 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 @@ -93,7 +93,7 @@ public interface ISxWorkOrderExtService { * @param workOrderStatus 状态 * @param orderNoList 工单号 */ - void updateWorkOrderStatus(Integer workOrderStatus, List orderNoList); + List updateWorkOrderStatus(Integer workOrderStatus, List orderNoList); GenerateWorkOrderDto getMesWorkOrderDetail(String orderNo); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/BomTakeEffectController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/BomTakeEffectController.java index 9887459..ec454c3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/BomTakeEffectController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/BomTakeEffectController.java @@ -2,7 +2,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IBomTakeEffectService; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.BomTakeEffectModel; -import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WmsBomTotalModel; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -13,8 +12,6 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; - /** * 文件描述 * diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/JobBookingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/JobBookingController.java index 558a2f7..fab71bb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/JobBookingController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/JobBookingController.java @@ -3,7 +3,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IJobBookingService; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesJobBookingPart; import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesPackageExt; -import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOverModel; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; 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 3b2fbb7..3fe680a 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 @@ -38,7 +38,6 @@ public class SxWorkOrderExtController extends MesPcnBaseController { @Autowired private ISxWorkOrderExtService workOrderExtService; - @ApiOperation("生成工单") @PostMapping("generate") public ResultBean generateWorkOrder(@RequestBody GenerateWorkOrderDto workOrderDto){ @@ -62,8 +61,6 @@ public class SxWorkOrderExtController extends MesPcnBaseController { } - - @ApiOperation("调整工单") @PostMapping("adjust") public ResultBean adjustWorkOrder(@RequestBody GenerateWorkOrderDto generateWorkOrderDto){ @@ -95,9 +92,6 @@ public class SxWorkOrderExtController extends MesPcnBaseController { } } - - - @PutMapping(value = "/update-order-status") @ApiOperation(value = "生产工单状态批量调整") public ResultBean updateWorkOrderStatus(@RequestBody RequestModel requestModel) { @@ -112,8 +106,9 @@ public class SxWorkOrderExtController extends MesPcnBaseController { ValidatorBean.checkNotNull(workOrderStatus, "工单状态不能为空"); ValidatorBean.checkNotNull(orderNoList, "工单号不能为空"); - workOrderExtService.updateWorkOrderStatus(workOrderStatus, orderNoList); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + return ResultBean.success("操作成功") + .setResultList(workOrderExtService.updateWorkOrderStatus(workOrderStatus, orderNoList)) + .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/busi/jx/TorqueManageCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/jx/TorqueManageCheckController.java index 2a56007..384a214 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/jx/TorqueManageCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/jx/TorqueManageCheckController.java @@ -33,7 +33,6 @@ public class TorqueManageCheckController extends MesPcnBaseController { @Autowired private ITorqueManageCheckService personCheckDetailService; - /** * 查询扭矩管理点检作业明细 * @@ -56,7 +55,7 @@ public class TorqueManageCheckController extends MesPcnBaseController { /** * 修改明细数据 * - * @param personCheckDetail + * @param torqueManageTaskDetail * @return */ @PutMapping(value = "/detail/update") @@ -76,7 +75,7 @@ public class TorqueManageCheckController extends MesPcnBaseController { /** * 修改顶部明细数据 * - * @param personCheckDetail + * @param torqueManageTaskDetail * @return */ @PutMapping(value = "/detail/update-top-data") diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/BomTakeEffectService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/BomTakeEffectService.java index 88230b4..f1056d8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/BomTakeEffectService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/BomTakeEffectService.java @@ -3,14 +3,15 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IBomTakeEffectService; import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxPcnHttpService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesBomTakeEffectRecord; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesPartExt; -import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt; +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.BomTakeEffectModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.WmsBomTotalModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesBomPendingPartRepository; import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesBomTakeEffectRecordRepository; import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.MesPartExtRepository; 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; @@ -32,10 +33,9 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** @@ -57,10 +57,19 @@ public class BomTakeEffectService implements IBomTakeEffectService { private MesBomTakeEffectRecordRepository bomTakeEffectRecordRepository; @Autowired private MesPartExtRepository partExtRDao; + @Autowired + private IJxProduceSnMcRecordService jxProduceSnMcRecordService; + @Autowired + private MesBomPendingPartRepository bomPendingPartRepository; @Override public MesProduceSnExt queryProduceSnBySn(String serialNumber, String organizeCode) { - return produceSnExtService.getProduceSnExtBySn(organizeCode, serialNumber); + + MesProduceSnMcRecord produceSnMcRecordDb = jxProduceSnMcRecordService.getProduceSnMcRecordDb(organizeCode, serialNumber); + + if (produceSnMcRecordDb == null) return produceSnExtService.getProduceSnExtByProductSn(organizeCode, serialNumber); + + return produceSnExtService.getProduceSnExtByProductSn(organizeCode, produceSnMcRecordDb.getProductSn()); } @Override @@ -91,26 +100,129 @@ public class BomTakeEffectService implements IBomTakeEffectService { } @Override - public void doEffect(BomTakeEffectModel bomTakeEffectModel) throws IOException { + public void doEffect(BomTakeEffectModel bomTakeEffectModel){ + String organizeCode = bomTakeEffectModel.getOrganizeCode(); - List wmsBomTotalModels = bomTakeEffectModel.getWmsBomTotalModels(); String userName = bomTakeEffectModel.getUserInfo(); String partNo = bomTakeEffectModel.getPartNo(); - String workOrderNo = bomTakeEffectModel.getWorkOrderNo(); - String partNameRdd = bomTakeEffectModel.getPartNameRdd(); - String productSn = bomTakeEffectModel.getProductSn(); - //String jsonWmsBomTotalList = JSON.toJSONString(wmsBomTotalModels); + BaseResultBean bomEffectResultBean = doWmsBomEffect(organizeCode, partNo); + + if (null != bomEffectResultBean && bomEffectResultBean.success) { + + log.info("BOM生效 --- doEffect --- WMS-BOM生效成功!"); + + List bomListByDb = queryOldPartBom(organizeCode, partNo); + + // 保存待BOM生效成品 + saveBomPendingPart(bomTakeEffectModel, organizeCode, bomListByDb); + + // 删除旧BOM数据 + deleteOldBom(bomListByDb); + + // 保存新Bom数据 + saveNewPartBom(bomTakeEffectModel.getWmsBomTotalModels(), userName); + + // 插入BOM生效记录表 + saveBomEffectRecord(organizeCode, userName, partNo, bomTakeEffectModel.getWorkOrderNo(), bomTakeEffectModel.getProductSn()); + } + + } + + private void deleteOldBom(List bomListByDb) { + bomRepository.deleteAll(bomListByDb); + } + + private void saveBomPendingPart(BomTakeEffectModel bomTakeEffectModel, String organizeCode, List bomListByDb) { + + List oldItemPartNoList = getItemPartNoList(bomListByDb); + + removeSamePartByNewBom(oldItemPartNoList, bomTakeEffectModel.getWmsBomTotalModels()); + + removeRecordedPart(oldItemPartNoList, organizeCode); + + saveBomPendingPart(oldItemPartNoList, bomTakeEffectModel); + + updateBomPendingPartByPartByPartNo(bomTakeEffectModel.getPartNo(), bomTakeEffectModel.getOrganizeCode(), bomTakeEffectModel.getUserInfo()); + + } + + private List getItemPartNoList(List bomListByDb) { + return CollectionUtils.isEmpty(bomListByDb) ? null : + bomListByDb.stream().map(MesBom::getItemPartNo).collect(Collectors.toList()); + } + + private void saveBomPendingPart(List oldItemPartNoList, BomTakeEffectModel bomTakeEffectModel) { + + if (CollectionUtils.isEmpty(oldItemPartNoList)) return; + + List mesBomList = queryBomByItemPartNo(bomTakeEffectModel.getOrganizeCode(), oldItemPartNoList); + + if (CollectionUtils.isEmpty(mesBomList)) return; + + mesBomList = removeCurPartBom(bomTakeEffectModel, mesBomList); + + if (CollectionUtils.isEmpty(mesBomList)) return; + + List bomPendingPartList = new ArrayList<>(mesBomList.size()); + + for (MesBom mesBom : mesBomList) { + MesBomPendingPart bomPendingPart = new MesBomPendingPart(); + BeanUtils.copyProperties(mesBom, bomPendingPart , MesPcnExtConstWords.ID, MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME); + ConvertBean.serviceModelInitialize(bomPendingPart, bomTakeEffectModel.getUserInfo()); + bomPendingPart.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + bomPendingPart.setIsReminded(MesPcnExtEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + bomPendingPart.setIsTookEffect(MesPcnExtEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + bomPendingPartList.add(bomPendingPart); + } + + bomPendingPartRepository.saveAll(bomPendingPartList); + } + + private void updateBomPendingPartByPartByPartNo(String partNo, String organizeCod, String userInfo) { + + bomPendingPartRepository.updateByProperties( + new String[]{MesPcnExtConstWords.PART_NO, "isTookEffect", MesPcnExtConstWords.ORGANIZE_CODE, + MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED}, + new Object[]{partNo, MesPcnExtEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), organizeCod, + CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}, + new String[]{"isTookEffect", "isReminded", MesPcnExtConstWords.SYSTEM_SYNC_STATUS, + MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME}, + new Object[]{MesPcnExtEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), MesPcnExtEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), + MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue(), userInfo, TimeTool.getNowTime(true)}); + + } + + private List removeCurPartBom(BomTakeEffectModel bomTakeEffectModel, List mesBomList) { + return mesBomList.stream().filter(o -> !o.getPartNo().equals(bomTakeEffectModel.getPartNo())) + .collect(Collectors.toList()); + } + + private void removeRecordedPart(List oldItemPartNoList, String organizeCode) { + + if (CollectionUtils.isEmpty(oldItemPartNoList)) return; + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + packBean.addColumnQuery("isReminded", " and ( model." + "isReminded" + " = :m_" + "isReminded", MesPcnExtEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + packBean.addColumnQuery("isTookEffect", " or model." + "isTookEffect" + " = :m_" + "isTookEffect" + " )", MesPcnExtEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + List bomPendingPartDbListByNotRemind = bomPendingPartRepository.findByHqlWhere(packBean); + + List itemPartNoList = bomPendingPartDbListByNotRemind.stream().map(MesBomPendingPart::getItemPartNo).distinct().collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(itemPartNoList)) oldItemPartNoList.removeAll(itemPartNoList); + } + + private void removeSamePartByNewBom(List oldItemPartNoList, List wmsBomTotalModels) { + + if (CollectionUtils.isEmpty(wmsBomTotalModels) || CollectionUtils.isEmpty(oldItemPartNoList)) return; + + List newItemPartNoList = wmsBomTotalModels.stream().map(WmsBomTotalModel::getItemPartNo).collect(Collectors.toList()); + + oldItemPartNoList.removeAll(newItemPartNoList); + } + + private BaseResultBean doWmsBomEffect(String organizeCode, String partNo) { String bomEffectRequestUrl = pcnHttpService.getRequestUrl(organizeCode, MesPcnExtConstWords.BOM_TASK_EFFECT); - /*log.info("PCN获取MES接口路径:{}", bomEffectRequestUrl); - for (int i = 0; i < wmsBomTotalModels.size(); i++) { - wmsBomTotalModels.get(i).setModifyUser(userName); - wmsBomTotalModels.get(i).setModifyDatetime(TimeTool.getNowTime(true)); - wmsBomTotalModels.get(i).setCreateUser(userName); - wmsBomTotalModels.get(i).setCreateDatetime(TimeTool.getNowTime(true)); - }*/ - //Map params = new HashMap<>(); - // params.put("wmsBomTotalModels", jsonWmsBomTotalList); Map params = new HashMap<>(); params.put(MesPcnExtConstWords.PART_NO, partNo); params.put(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode); @@ -128,45 +240,63 @@ public class BomTakeEffectService implements IBomTakeEffectService { .setErrorDetail("HTTP调用mes Bom生效接口失败,请联系管理员") .build(); } + return bomEffectResultBean; + } - if (null != bomEffectResultBean && bomEffectResultBean.success) { - log.info("MES进行BOM数据更新"); - //先删除bom表 该父物料下的BOM + private void saveNewPartBom(List wmsBomTotalModels, String userName) { + List mesBomList = new ArrayList<>(); + + for (WmsBomTotalModel wmsBomTotalModel : wmsBomTotalModels) { + MesBom bom = new MesBom(); + BeanUtils.copyProperties(wmsBomTotalModel, bom, "id"); + bom.setUnit(wmsBomTotalModel.getUNIT()); + bom.setBomCode(wmsBomTotalModel.getBomNum()); + ConvertBean.serviceModelInitialize(bom, userName); + mesBomList.add(bom); + } + + bomRepository.saveAll(mesBomList); + } + + private List queryOldPartBom(String organizeCode, String partNo) { + return bomRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PART_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), partNo}); + } + + private List queryBomByItemPartNo(String organizeCode, List itemPartNo) { + + List bomList = new ArrayList<>(); + + int batchHandleNum = 100; + + for (int i = 0; i < itemPartNo.size(); i += batchHandleNum) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(partNo, MesPcnExtConstWords.PART_NO, packBean); - List bomListByDb = bomRepository.findByHqlWhere(packBean); - bomRepository.deleteAll(bomListByDb); - //再插入MesBom表 - List mesBomList = new ArrayList<>(); - - for (int i = 0; i < wmsBomTotalModels.size(); i++) { - MesBom bom = new MesBom(); - BeanUtils.copyProperties(wmsBomTotalModels.get(i), bom, "id"); - bom.setUnit(wmsBomTotalModels.get(i).getUNIT()); - bom.setBomCode(wmsBomTotalModels.get(i).getBomNum()); - ConvertBean.serviceModelInitialize(bom, userName); - mesBomList.add(bom); - } - bomRepository.saveAll(mesBomList); - //插入BOM生效记录表 - MesBomTakeEffectRecord bomTakeEffectRecord = new MesBomTakeEffectRecord(); - bomTakeEffectRecord.setWorkOrderNo(workOrderNo); - bomTakeEffectRecord.setPartNo(partNo); - - MesPartExt partExt = partExtRDao.getByProperty( - new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, MesPcnExtConstWords.PART_NO}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), partNo}); - if (null != partExt) { - bomTakeEffectRecord.setPartName(partExt.getPartName()); - } - bomTakeEffectRecord.setTakeEffectTime(TimeTool.getNowTime(true)); - bomTakeEffectRecord.setTaskUser(userName); - bomTakeEffectRecord.setProductSn(productSn); - bomTakeEffectRecord.setOrganizeCode(organizeCode); - ConvertBean.serviceModelInitialize(bomTakeEffectRecord, userName); - bomTakeEffectRecordRepository.save(bomTakeEffectRecord); + DdlPreparedPack.getInPackList(itemPartNo, MesPcnExtConstWords.ITEM_PART_NO, packBean); + List bomTempList = bomRepository.findByHqlWhere(packBean); + bomList.addAll(bomTempList); } + return bomList; + } + + private void saveBomEffectRecord(String organizeCode, String userName, String partNo, String workOrderNo, String productSn) { + MesBomTakeEffectRecord bomTakeEffectRecord = new MesBomTakeEffectRecord(); + bomTakeEffectRecord.setWorkOrderNo(workOrderNo); + bomTakeEffectRecord.setPartNo(partNo); + + MesPartExt partExt = partExtRDao.getByProperty( + new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, MesPcnExtConstWords.PART_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), partNo}); + if (null != partExt) { + bomTakeEffectRecord.setPartName(partExt.getPartName()); + } + bomTakeEffectRecord.setTakeEffectTime(TimeTool.getNowTime(true)); + bomTakeEffectRecord.setTaskUser(userName); + bomTakeEffectRecord.setProductSn(productSn); + bomTakeEffectRecord.setOrganizeCode(organizeCode); + ConvertBean.serviceModelInitialize(bomTakeEffectRecord, userName); + bomTakeEffectRecordRepository.save(bomTakeEffectRecord); } } 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 b3e82a7..ba0c993 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 @@ -18,7 +18,6 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.ConvertUtil; import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; import cn.estsh.i3plus.platform.common.tool.MathOperation; -import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -136,9 +135,7 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService { private SxProductOffLineRepository productOffLineRepository; @Autowired - private SxProductOffLineExtRepository productOffLineExtRepository; - - + private MesBomPendingPartRepository bomPendingPartRepository; @Resource(name = MesPcnExtConstWords.REDIS_RES_PCN) private ImppRedis redisMesPcn; @@ -729,11 +726,161 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService { */ @Override @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void updateWorkOrderStatus(Integer workOrderStatus, List orderNoList) { + public List updateWorkOrderStatus(Integer workOrderStatus, List orderNoList) { + String organizeCode = AuthUtil.getOrganize().getOrganizeCode(); String userInfo = AuthUtil.getSessionUser().getUserName(); //获取所有数据 + List workOrderExtList = getMesWorkOrderExts(orderNoList, organizeCode); + + checkOperateOrderValid(workOrderStatus, workOrderExtList); + + // 一个工单号下的多个工单 + for (MesWorkOrderExt workOrderExt : workOrderExtList) { + Integer lastWorkOrderStatus = null; + + switch (MesPcnExtEnumUtil.WORK_ORDER_STATUS.getByValue(workOrderStatus)) { + case OPEN: + // 启动 + // 校验当前工单是否能够启动并获取上次工单状态 + lastWorkOrderStatus = checkOpenOrderValid(organizeCode, workOrderExt, lastWorkOrderStatus); + + // 生成点检单 + doGenerateCheckOrder(workOrderStatus, organizeCode, userInfo, workOrderExt, lastWorkOrderStatus); + + break; + + case PAUSE: + // 暂停 + // 校验工单是否是启动状态 + checkPauseOrderValid(workOrderExt); + + // 暂停记录工单日志 + pauseRecordOrderNo(workOrderExt); + + break; + + case REMOVE: + // 删除 + // 校验当前工单是否能够删除 + checkRemoveOrderValid(organizeCode, userInfo, workOrderExt); + + break; + } + + // 更改工单状态 + saveMesWorkOrderExt(workOrderStatus, userInfo, workOrderExt, lastWorkOrderStatus); + + } + + return openOrderInformNeedBomEffectPart(workOrderExtList, userInfo); + + } + + private List openOrderInformNeedBomEffectPart(List workOrderExtList, String userInfo) { + + if (CollectionUtils.isEmpty(workOrderExtList)) return null; + + List workOrderExtListWithOpen = workOrderExtList.stream().filter(o -> o.getWorkOrderStatus() == MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue()).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(workOrderExtListWithOpen)) return null; + + Map> workOrderExtMapByPartNo = workOrderExtListWithOpen.stream().collect(Collectors.groupingBy(MesWorkOrderExt::getPartNo)); + + List bomPendingPartDbList = queryBomPendingPart(workOrderExtList.get(0).getOrganizeCode(), new ArrayList<>(workOrderExtMapByPartNo.keySet())); + + if (CollectionUtils.isEmpty(bomPendingPartDbList)) return null; + + Map> bomPendingPartMap = bomPendingPartDbList.stream().collect(Collectors.groupingBy(MesBomPendingPart::getPartNo)); + + List informList = new ArrayList<>(); + + for (Map.Entry> entry : bomPendingPartMap.entrySet()) { + List workOrderExtListByPartNo = workOrderExtMapByPartNo.get(entry.getKey()); + List bomPendingPartList = entry.getValue(); + + for (MesWorkOrderExt workOrderExt : workOrderExtListByPartNo) { + + for (MesBomPendingPart bomPendingPart : bomPendingPartList) { + + bomPendingPart.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + bomPendingPart.setIsReminded(MesPcnExtEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + ConvertBean.serviceModelUpdate(bomPendingPart, userInfo); + + informList.add(String.format("工单[%s]对应成品[%s],有对应子物料[%s],对应BOM版本号[%s],对应有效开始期[%s],结束日期[%s],待BOM生效", + workOrderExt.getOrderNo(), entry.getKey(), bomPendingPart.getItemPartNo(), + bomPendingPart.getBomVersion(), bomPendingPart.getEffStartTime(), bomPendingPart.getEffEndTime())); + } + } + + } + + bomPendingPartRepository.saveAll(bomPendingPartDbList); + + return informList; + } + + private List queryBomPendingPart(String organizeCode, List partNoList) { + if (CollectionUtils.isEmpty(partNoList) || StringUtils.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, MesPcnExtConstWords.PART_NO, packBean); + DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), "isReminded", packBean); + return bomPendingPartRepository.findByHqlWhere(packBean); + } + + private Integer checkOpenOrderValid(String organizeCode, MesWorkOrderExt workOrderExt, Integer lastWorkOrderStatus) { + if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus()) { + //调用启动工单附属启动的方法 + //校验是否存在已经启动的工单 + List landedOrderList = getWorkOrderListByCenterAndStatus(organizeCode, workOrderExt.getWorkCenterCode(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue()); + + if (CollectionUtils.isEmpty(landedOrderList)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("生产线[%s]暂无下达状态的工单,请刷新界面重试", workOrderExt.getWorkCenterCode()) + .build(); + } + + if (!landedOrderList.get(0).getOrderNo().equals(workOrderExt.getOrderNo())) { + throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单[%s]的工单序号不是生产线[%s]下工单中最小的序号", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()) + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .build(); + } + + if (MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo()) + .build(); + } + } else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() == workOrderExt.getWorkOrderStatus()) { + //更改未暂停前状态 + //获取暂停前的状态 + lastWorkOrderStatus = getLastWorkOrderStatus(organizeCode, workOrderExt); + + if (lastWorkOrderStatus == MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() && + MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus()) + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo()) + .build(); + + } else + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单[%s]状态为[%s],不能启动", + workOrderExt.getOrderNo(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus())) + .build(); + return lastWorkOrderStatus; + } + + private List getMesWorkOrderExts(List orderNoList, String organizeCode) { List workOrderExtList = new ArrayList<>(); for (String orderNo : orderNoList) { MesWorkOrderExt workOrderExt = getWorkOrderExtByOrderNo(organizeCode, orderNo); @@ -746,7 +893,23 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService { } workOrderExtList.add(workOrderExt); } + return workOrderExtList; + } + + private void checkPauseOrderValid(MesWorkOrderExt workOrderExt) { + boolean isCreate = MesPcnExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue() == workOrderExt.getWorkOrderStatus(); + boolean isLanded = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus(); + boolean isOpen = MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderExt.getWorkOrderStatus(); + if (!isCreate && !isLanded && !isOpen) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单[%s]的状态不是启动,下达,创建状态,不能暂停", workOrderExt.getOrderNo()) + .build(); + } + } + private void checkOperateOrderValid(Integer workOrderStatus, List workOrderExtList) { Map> listMap = workOrderExtList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderExt::getWorkOrderStatus)); if (listMap.size() > 1) { throw ImppExceptionBuilder.newInstance() @@ -769,216 +932,104 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService { } } } + } - // 一个工单号下的多个工单 - for (MesWorkOrderExt workOrderExt : workOrderExtList) { - Integer lastWorkOrderStatus = null; - //启动 - if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderStatus) { - if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus()) { - //调用启动工单附属启动的方法 - //校验是否存在已经启动的工单 - List landedOrderList = getWorkOrderListByCenterAndStatus(organizeCode, workOrderExt.getWorkCenterCode(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue()); - if (CollectionUtils.isEmpty(landedOrderList)) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("生产线[%s]暂无下达状态的工单,请刷新界面重试", workOrderExt.getWorkCenterCode()) - .build(); - } - if (!landedOrderList.get(0).getOrderNo().equals(workOrderExt.getOrderNo())) { - throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单[%s]的工单序号不是生产线[%s]下工单中最小的序号", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode()) - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .build(); - } - - if (MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus()) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo()) - .build(); - } - } else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() == workOrderExt.getWorkOrderStatus()) { - //更改未暂停前状态 - //获取暂停前的状态 - List workOrderLogList = workOrderLogExtService.getWorkOrderLogList(organizeCode, workOrderExt.getOrderNo()); - if (CollectionUtils.isEmpty(workOrderLogList)) { - throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单号[%s]缺失履历信息,操作失败", workOrderExt.getOrderNo()) - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .build(); - } - workOrderLogList = workOrderLogList.stream().sorted(Comparator.comparing(MesWorkOrderLog::getModifyDatetime).reversed()).collect(Collectors.toList()); - lastWorkOrderStatus = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue(); - for (MesWorkOrderLog workOrderLog : workOrderLogList) { - if (null == workOrderLog) { - continue; - } - if (workOrderLog.getWorkOrderStatus() != MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue()) { - lastWorkOrderStatus = workOrderLog.getWorkOrderStatus(); - break; - } - } - - if (lastWorkOrderStatus == MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue()) { - if (MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus()) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo()) - .build(); - } - } - }else { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单[%s]状态为[%s],不能启动", - workOrderExt.getOrderNo(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus())) - .build(); - } + private void checkRemoveOrderValid(String organizeCode, String userInfo, MesWorkOrderExt workOrderExt) { + if (workOrderExt.getCompleteQty() > 0) { + throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单号【%s】的完成数量大于0,不能删除", workOrderExt.getOrderNo()) + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorSolution("校验生产工单表数据") + .build(); + } else if(workOrderExt.getCompleteQty() == 0){ + // 要自动解绑已绑定的关键件 看一下是什么 + DdlPackBean packBeanBind = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(),MesPcnExtConstWords.WORK_ORDER_NO,packBeanBind); + List prodBindRecordExtList = prodBindRecordExtRepository.findByHqlWhere(packBeanBind); + prodBindRecordExtList.forEach(p -> { + p.setActionType(MesPcnExtEnumUtil.MES_ACTION_TYPE.UNTYING.getValue()); + ConvertBean.serviceModelUpdate(p, userInfo); + new ConvertBeanExt(p).convertBean(p); + }); + if (!CollectionUtils.isEmpty(prodBindRecordExtList)) prodBindRecordExtRepository.saveAll(prodBindRecordExtList); + } + } - if (workOrderExt.getWorkOrderType() != MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() && - MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderStatus && - (null == lastWorkOrderStatus || MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == lastWorkOrderStatus)) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - List mesAffiliatedStartConfigs = affiliatedStartConfigRepository.findByHqlWhere(ddlPackBean); - int totalConfigSize = CollectionUtils.isEmpty(mesAffiliatedStartConfigs) ? 0 : mesAffiliatedStartConfigs.size(); - log.info("总配置类信息" + mesAffiliatedStartConfigs + "总配置数量" + totalConfigSize); - for (MesAffiliatedStartConfig mesAffiliatedStartConfig : mesAffiliatedStartConfigs) { - try { - log.info("点检启动配置类信息" + mesAffiliatedStartConfig); - IWorkOrderStartService workOrderStartService = (IWorkOrderStartService) SpringContextsUtil.getBean(mesAffiliatedStartConfig.getAffiliatedStartClass()); - log.info(workOrderStartService.getClass().getName() + "点检开始执行调用"); - workOrderStartService.doGenCheckOrder(workOrderExt, userInfo); - log.info(workOrderStartService.getClass().getName() + "点检开始执行结束"); - } catch (Exception e) { - log.error("点检开始执行异常" + e.getMessage()); - StackTraceElement[] stackTrace = e.getStackTrace(); - log.error(Arrays.toString(stackTrace)); - } - } - } - } else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() == workOrderStatus) { - //暂停 - //校验工单是否是启动状态 - boolean isCreate = MesPcnExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue() == workOrderExt.getWorkOrderStatus(); - boolean isLanded = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus(); - boolean isOpen = MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderExt.getWorkOrderStatus(); - if (!isCreate && !isLanded && !isOpen) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单[%s]的状态不是启动,下达,创建状态,不能暂停", workOrderExt.getOrderNo()) - .build(); + private void doGenerateCheckOrder(Integer workOrderStatus, String organizeCode, String userInfo, MesWorkOrderExt workOrderExt, Integer lastWorkOrderStatus) { + if (workOrderExt.getWorkOrderType() != MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() && + MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderStatus && + (null == lastWorkOrderStatus || MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == lastWorkOrderStatus)) { + + List mesAffiliatedStartConfigs = getMesAffiliatedStartConfigs(organizeCode); + int totalConfigSize = CollectionUtils.isEmpty(mesAffiliatedStartConfigs) ? 0 : mesAffiliatedStartConfigs.size(); + log.info("总配置类信息:" + mesAffiliatedStartConfigs + "总配置数量:" + totalConfigSize); + for (MesAffiliatedStartConfig mesAffiliatedStartConfig : mesAffiliatedStartConfigs) { + try { + log.info("点检启动配置类信息" + mesAffiliatedStartConfig); + IWorkOrderStartService workOrderStartService = (IWorkOrderStartService) SpringContextsUtil.getBean(mesAffiliatedStartConfig.getAffiliatedStartClass()); + log.info(workOrderStartService.getClass().getName() + "点检开始执行调用"); + workOrderStartService.doGenCheckOrder(workOrderExt, userInfo); + log.info(workOrderStartService.getClass().getName() + "点检开始执行结束"); + } catch (Exception e) { + log.error("点检开始执行异常" + e.getMessage()); + StackTraceElement[] stackTrace = e.getStackTrace(); + log.error(Arrays.toString(stackTrace)); } - 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(); + private Integer getLastWorkOrderStatus(String organizeCode, MesWorkOrderExt workOrderExt) { - //redisMesPcn.putObject(workCenterWoPauseKey, workOrderExt.getOrderNo()); + List workOrderLogList = getMesWorkOrderLogs(organizeCode, workOrderExt); - redisMesPcn.putObject(key, workOrderExt.getOrderNo(), MesPcnEnumUtil.EXPIRE_TIME.ONE_MIN.getValue()); + workOrderLogList = workOrderLogList.stream().sorted(Comparator.comparing(MesWorkOrderLog::getModifyDatetime).reversed()).collect(Collectors.toList()); - } else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue() == workOrderStatus) { - /*//关闭 - //校验工单是否是暂停状态 - if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() != workOrderExt.getWorkOrderStatus()) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单[%s]的状态不是暂停状态,不能关闭", workOrderExt.getOrderNo()) - .build(); - }*/ - } else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue() == workOrderStatus) { - //完成 - //校验工单是否是暂停状态 - //修改返工工单状态 - //if(workOrderExt.getWorkOrderType() == MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue()) { - // - // List waterPurifierCodeList = !Optional.ofNullable(waterPurifierCode).isPresent() || StringUtils.isEmpty(waterPurifierCode.getCfgValue()) ? new ArrayList<>() : Arrays.asList(waterPurifierCode.getCfgValue().split(MesPcnExtConstWords.COMMA)); - // if(CollectionUtils.isEmpty(waterPurifierCodeList) || !waterPurifierCodeList.contains(workOrderExt.getWorkCenterCode())){ - // // 手动点击完成工单,存在未下线条码 - // if(!workOrderExt.getQty().equals(workOrderExt.getCompleteQty())) { - // List produceSnRepairList = queryProduceSnRepairList(organizeCode, workOrderExt.getOrderNo()); - // if(!CollectionUtils.isEmpty(produceSnRepairList)) { - // // 未下线条码 - // produceSnRepairList = produceSnRepairList.stream().filter(o -> StringUtils.isEmpty(o.getOutWorkCenterTime())).collect(Collectors.toList()); - // - // if(!CollectionUtils.isEmpty(produceSnRepairList)){ - // List serialNumberList = produceSnRepairList.stream().map(MesProduceSnRepair::getSerialNumber).collect(Collectors.toList()); - // - // updateProduceSnRepair(organizeCode, serialNumberList); - // - // updatePackage(organizeCode, serialNumberList); - // - // unbindReworkRangeList(organizeCode, workOrderExt, serialNumberList, userInfo); - // - // clearProdBindRecord(organizeCode, workOrderExt, TimeTool.getNowTime(true), serialNumberList, userInfo); - // } - // } - // } - // - // //reworkOrderRepository.updateByProperties(new String[]{MesPcnExtConstWords.REWORK_ORDER_NO}, new Object[]{workOrderExt.getOrderNo()}, - // // new String[]{ MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME}, - // // new Object[]{MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue(), MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue(), AuthUtil.getSessionUser().getUserName(), TimeTool.getNowTime(true)}); - // } - //} - /*if (MesExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() != mesWorkOrder.getWorkOrderStatus()) { - throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单号【%s】的工单状态不是暂停状态,不能完成", mesWorkOrder.getOrderNo()) - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorSolution("校验生产工单表数据") - .build(); - }*/ - } else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.REMOVE.getValue() == workOrderStatus) { - //删除 - //校验工单是否是暂停状态 - /*if (MesExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() != mesWorkOrder.getWorkOrderStatus()) { - *//*if (MesExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue() != mesWorkOrder.getWorkOrderStatus()){ - throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单号【%s】的工单状态不是暂停或启动状态,不能删除", mesWorkOrder.getOrderNo()) - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorSolution("校验生产工单表数据") - .build(); - }*//* - }*/ - if (workOrderExt.getCompleteQty() > 0){ - throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("工单号【%s】的完成数量大于0,不能删除", workOrderExt.getOrderNo()) - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorSolution("校验生产工单表数据") - .build(); - }else if(workOrderExt.getCompleteQty() == 0){ - // 要自动解绑已绑定的关键件 看一下是什么 - DdlPackBean packBeanBind = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(),MesPcnExtConstWords.WORK_ORDER_NO,packBeanBind); - List prodBindRecordExtList = prodBindRecordExtRepository.findByHqlWhere(packBeanBind); - prodBindRecordExtList.forEach(p -> { - p.setActionType(MesPcnExtEnumUtil.MES_ACTION_TYPE.UNTYING.getValue()); - ConvertBean.serviceModelUpdate(p, userInfo); - new ConvertBeanExt(p).convertBean(p); - }); - if (!CollectionUtils.isEmpty(prodBindRecordExtList)) prodBindRecordExtRepository.saveAll(prodBindRecordExtList); - } + Integer initLastWorkOrderStatus = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue(); + for (MesWorkOrderLog workOrderLog : workOrderLogList) { + if (null == workOrderLog) { + continue; } - - if (null == lastWorkOrderStatus) { - workOrderExt.setWorkOrderStatus(workOrderStatus); - } else { - workOrderExt.setWorkOrderStatus(lastWorkOrderStatus); + if (workOrderLog.getWorkOrderStatus() != MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue()) { + initLastWorkOrderStatus = workOrderLog.getWorkOrderStatus(); + break; } - ConvertBean.serviceModelUpdate(workOrderExt, userInfo); - workOrderExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); - new ConvertBeanExt(workOrderExt).convertBean(workOrderExt); - MesWorkOrderExt mesWorkOrderDb = workOrderExtRepository.save(workOrderExt); - - //生产工单日志 - this.insertMesWorkOrderLog(mesWorkOrderDb); } + return initLastWorkOrderStatus; + } + + private void pauseRecordOrderNo(MesWorkOrderExt workOrderExt) { + String key = new StringJoiner(MesPcnExtConstWords.COLON).add("MES-PAUSE-ORDER").add(workOrderExt.getOrderNo()).toString(); + redisMesPcn.putObject(key, workOrderExt.getOrderNo(), MesPcnEnumUtil.EXPIRE_TIME.ONE_MIN.getValue()); + } + private MesWorkOrderExt saveMesWorkOrderExt(Integer workOrderStatus, String userInfo, MesWorkOrderExt workOrderExt, Integer lastWorkOrderStatus) { + workOrderExt.setWorkOrderStatus(lastWorkOrderStatus == null ? workOrderStatus : lastWorkOrderStatus); + ConvertBean.serviceModelUpdate(workOrderExt, userInfo); + workOrderExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + new ConvertBeanExt(workOrderExt).convertBean(workOrderExt); + MesWorkOrderExt mesWorkOrderDb = workOrderExtRepository.save(workOrderExt); + //生产工单日志 + this.insertMesWorkOrderLog(mesWorkOrderDb); + return mesWorkOrderDb; + } + + private List getMesAffiliatedStartConfigs(String organizeCode) { + List mesAffiliatedStartConfigs = affiliatedStartConfigRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + return mesAffiliatedStartConfigs; + } + + private List getMesWorkOrderLogs(String organizeCode, MesWorkOrderExt workOrderExt) { + List workOrderLogList = workOrderLogExtService.getWorkOrderLogList(organizeCode, workOrderExt.getOrderNo()); + if (CollectionUtils.isEmpty(workOrderLogList)) { + throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单号[%s]缺失履历信息,操作失败", workOrderExt.getOrderNo()) + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .build(); + } + return workOrderLogList; } private List queryProduceSnRepairList(String organizeCode, String orderNo) { @@ -1055,7 +1106,7 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService { //} //DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - //DdlPreparedPack.getStringEqualPack(mesWorkOrder.getOrderNo(), MesExtConstWords.REWORK_ORDER_NO, packBean); + //DdlPreparedPack.getStringEqualPack(mesWorkOrder.getOrderNo(), MesPcnExtConstWords.REWORK_ORDER_NO, packBean); //List reworkRangeList = reworkRangeRepository.findByHqlWhere(packBean); // //reworkRangeList = reworkRangeList.stream().filter(o -> serialNumberList.contains(o.getSerialNumber())).collect(Collectors.toList()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/bu/oqc/BuQmsOqcBySnExecAmountService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/bu/oqc/BuQmsOqcBySnExecAmountService.java index ebe39a2..701ddcb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/bu/oqc/BuQmsOqcBySnExecAmountService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/bu/oqc/BuQmsOqcBySnExecAmountService.java @@ -169,6 +169,7 @@ class SxBuOqcHandlerFactory { } Map prodMap = new HashMap<>(); + prodMap.put(MesPcnExtConstWords.WORK_ORDER_NO, produceSn.getLastWorkOrderNo()); prodMap.put(MesPcnExtConstWords.SERIAL_NUMBER, produceSn.getSerialNumber()); prodMap.put(MesPcnExtConstWords.PRODUCT_SN, produceSn.getProductSn()); prodMap.put(MesPcnExtConstWords.PACKAGENO, produceSn.getPackageNo()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxOqcManageService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxOqcManageService.java index e3a3562..ae06075 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxOqcManageService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxOqcManageService.java @@ -1355,7 +1355,7 @@ public class JxOqcManageService implements IJxOqcManageService { prodMapList.add(0, snOp.get()); } - private List> checkProdMapListBySn4CheckUnqualified(List> prodMapList, JxOqcManageModel result) { + private List> checkProdMapListBySn4CheckUnqualified(List> prodMapList, JxOqcManageModel result, SxBuOqcDataModel dataFromPcn) { if (CollectionUtils.isEmpty(prodMapList)) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) @@ -1380,9 +1380,19 @@ public class JxOqcManageService implements IJxOqcManageService { .build(); } + if ((!dataFromPcn.getShiftCode().equals(result.getShiftCode())) || (!dataFromPcn.getWorkTime().equals(result.getWorkTime()))) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("检验单不合格:当前扫描条码[%s]作业时间[%s]班次代码[%s]与检验单[%s]作业时间[%s]班次代码[%s]不一致,操作失败", result.getProductSn(), dataFromPcn.getWorkTime(), dataFromPcn.getShiftCode(), result.getOqcNo(), result.getWorkTime(), result.getShiftCode()) + .build(); + } + prodMapList = prodMapList.stream().filter(o -> (null != o && !result.getProductSn().equals(o.get(MesPcnExtConstWords.PRODUCT_SN)))).collect(Collectors.toList()); - prodMapList = prodMapList.stream().filter(o -> (null != o && snOp.get().get(MesPcnExtConstWords.OUT_WC_TIME).compareTo(o.get(MesPcnExtConstWords.OUT_WC_TIME)) >= 0)).collect(Collectors.toList()); + prodMapList = prodMapList.stream().filter(o -> (null != o && + snOp.get().get(MesPcnExtConstWords.OUT_WC_TIME).compareTo(o.get(MesPcnExtConstWords.OUT_WC_TIME)) >= 0) + ).collect(Collectors.toList()); if (CollectionUtils.isEmpty(prodMapList)) prodMapList = new ArrayList<>(); @@ -1493,11 +1503,6 @@ public class JxOqcManageService implements IJxOqcManageService { //检验条码明细 List oqcCheckPackageDetailList = oqcCheckService.getOqcCheckPackageDetailListByOqcNo(model.getOrganizeCode(), model.getOqcNo()); - if (StringUtils.isEmpty(model.getSn())) { - oqcCheckPackageDetailList.stream().map(MesOqcCheckPackageDetail::getProductSn).collect(Collectors.toList()); - model.getSn(); - } - //检验条码中间表明细 List oqcCheckPackageIfList = oqcCheckService.getOqcCheckPackageIfListByOqcNo(model.getOrganizeCode(), model.getOqcNo()); @@ -1524,7 +1529,7 @@ public class JxOqcManageService implements IJxOqcManageService { return; } - JxOqcManageModel result = new JxOqcManageModel(oqcCheckDb.getOrganizeCode(), paramModel.getUserId(), paramModel.getUserInfo(), oqcCheckDb.getOqcNoType()); + JxOqcManageModel result = new JxOqcManageModel(oqcCheckDb.getOrganizeCode(), paramModel.getUserId(), paramModel.getUserInfo(), oqcCheckDb.getOqcNoType(), paramModel.getSn(), paramModel.getWorkOrderNo(), oqcCheckDb.getShiftCode(), oqcCheckDb.getWorkTime(), oqcCheckDb.getOqcNo()); //获取PCN工单条码物料产量信息 SxBuOqcDataModel dataFromPcn = getBuOqcDataModel(result, MesPcnExtEnumUtil.OQC_MANAGE_ACTION_TYPE.SERIAL_NUMBER.getExecClass()); @@ -1538,7 +1543,7 @@ public class JxOqcManageService implements IJxOqcManageService { prodMapList = (CollectionUtils.isEmpty(prodMapList) || CollectionUtils.isEmpty(snList)) ? prodMapList : prodMapList.stream().filter(o -> (null != o && !snList.contains(o.get(MesPcnExtConstWords.PRODUCT_SN)))).collect(Collectors.toList()); - prodMapList = checkProdMapListBySn4CheckUnqualified(prodMapList, result); + prodMapList = checkProdMapListBySn4CheckUnqualified(prodMapList, result, dataFromPcn); //获取产量统计出货检验 MesOutPutStatisticsOqc outPutStatisticsOqc = outPutStatisticsOqcRepository.getByProperty( diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesBomPendingPart.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesBomPendingPart.java new file mode 100644 index 0000000..74a83fa --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesBomPendingPart.java @@ -0,0 +1,108 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.bean; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.annotations.ColumnDefault; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * @Description: + * @Author: xiangming.liao + * @Date: 2021/01/14 20:03 + * @Modify: + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@EqualsAndHashCode(callSuper = true) +@Table(name = "MES_BOM_PENDING_PART", indexes = { + @Index(columnList = "SYSTEM_SYNC_STATUS"), + @Index(columnList = "PART_NO"), + @Index(columnList = "ITEM_PART_NO"), + @Index(columnList = "PART_NO,IS_TOOK_EFFECT"), + @Index(columnList = "IS_REMIND,IS_TOOK_EFFECT") +}) +@Api("MES_BOM待生效成品表") +public class MesBomPendingPart extends BaseBean implements Serializable { + + private static final long serialVersionUID = 7689475809123434963L; + + @Column(name = "PART_NO") + @ApiParam("父零件号") + private String partNo; + + @Column(name = "PART_NAME") + @ApiParam("父零件名称") + private String partName; + + @Column(name = "UNIT") + @ApiParam("单位") + private String unit; + + @Column(name = "QTY" ) + @ColumnDefault("0") + @ApiParam(value = "数量",example = "0") + private Double qty; + + @Column(name = "ITEM_PART_NO") + @ApiParam("子零件编码") + private String itemPartNo; + + @Column(name = "ITEM_PART_NAME") + @ApiParam("子零件名称") + private String itemPartName; + + @Column(name = "ITEM_UNIT") + @ApiParam("子零件单位") + private String itemUnit; + + @Column(name = "ITEM_QTY") + @ColumnDefault("0") + @ApiParam(value = "子零件数量",example = "0") + private Double itemQty; + + @Column(name = "BOM_VERSION") + @ApiParam("BOM版本") + private String bomVersion; + + @Column(name = "EFF_START_TIME") + @ApiParam("生效时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private String effStartTime; + + @Column(name = "EFF_END_TIME") + @ApiParam("失效时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private String effEndTime; + + @Column(name = "IS_REMIND") + @ApiParam("是否已提醒") + @ColumnDefault("2") + @AnnoOutputColumn(refClass = MesPcnExtEnumUtil.TRUE_OR_FALSE.class, refForeignKey = "value", value = "description") + private Integer isReminded; + + @Column(name = "IS_TOOK_EFFECT") + @ApiParam("是否已生效") + @ColumnDefault("2") + @AnnoOutputColumn(refClass = MesPcnExtEnumUtil.TRUE_OR_FALSE.class, refForeignKey = "value", value = "description") + private Integer isTookEffect; + + @Column(name = "SYSTEM_SYNC_STATUS") + @ColumnDefault("2") + @ApiParam(value = "系统同步标志") + public Integer systemSyncStatus = 2; +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesEquipmentCheckDetail.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesEquipmentCheckDetail.java index 190d918..5f1f7f7 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesEquipmentCheckDetail.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/MesEquipmentCheckDetail.java @@ -137,4 +137,8 @@ public class MesEquipmentCheckDetail extends BaseBean implements Serializable { @ApiParam("结果值") private String resultValue; + @Column(name = "PROBE_NO") + @ApiParam("探头号") + private String probeNo; + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/BomTakeEffectModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/BomTakeEffectModel.java index 26669bb..7752ce1 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/BomTakeEffectModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/BomTakeEffectModel.java @@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiParam; import lombok.Data; -import javax.persistence.Column; import java.util.List; /** @@ -16,6 +15,7 @@ import java.util.List; @Data @ApiModel("BOM生效model") public class BomTakeEffectModel { + @ApiParam("WmsBomTotal集合") private List wmsBomTotalModels; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/WmsBomTotalModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/WmsBomTotalModel.java index b609cf1..503a66f 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/WmsBomTotalModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/WmsBomTotalModel.java @@ -5,7 +5,6 @@ import io.swagger.annotations.ApiParam; import lombok.Data; import org.hibernate.annotations.ColumnDefault; -import javax.persistence.Column; import java.io.Serializable; /** diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxOqcManageModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxOqcManageModel.java index 2a7d24c..6bd2f01 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxOqcManageModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/jx/JxOqcManageModel.java @@ -186,6 +186,18 @@ public class JxOqcManageModel implements Serializable { this.oqcNoType = oqcNoType; } + public JxOqcManageModel(String organizeCode, String userId, String userInfo, Integer oqcNoType, String productSn, String workOrderNo, String shiftCode, String workTime, String oqcNo) { + this.organizeCode = organizeCode; + this.userId = userId; + this.userInfo = userInfo; + this.oqcNoType = oqcNoType; + this.productSn = productSn; + this.workOrderNo = workOrderNo; + this.shiftCode = shiftCode; + this.workTime = workTime; + this.oqcNo = oqcNo; + } + public JxOqcManageModel(String organizeCode, String userId, String userInfo, String sn, String idStr) { this.organizeCode = organizeCode; this.userId = userId; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesBomPendingPartRepository.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesBomPendingPartRepository.java new file mode 100644 index 0000000..ffe4a60 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/repository/MesBomPendingPartRepository.java @@ -0,0 +1,15 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.repository; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesBomPendingPart; +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import org.springframework.stereotype.Repository; + +/** + * @author xinwang.yi + * @version 1.0 + * @date 2023/11/16 9:17 + **/ +@Repository +public interface MesBomPendingPartRepository extends BaseRepository { + +} 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 3d26822..e0992b9 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 @@ -555,6 +555,15 @@ public class MesPcnExtEnumUtil { return tmp; } + + public static WORK_ORDER_STATUS getByValue(int value) { + for (WORK_ORDER_STATUS valueType : values()) { + if (valueType.getValue() == value) { + return valueType; + } + } + return null; + } } /**