From 6dcb5e83bad99a4cc1d2295d83718d25aee68633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LML=E4=B8=B6?= Date: Sun, 12 May 2024 10:07:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A8=E9=87=8F=20=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=20NC=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/pcn/api/busi/IMesConfigService.java | 19 ++ .../mes/pcn/api/busi/IMesDefectRecordService.java | 20 ++ .../pcn/api/busi/IMesInputDefectRecordService.java | 30 ++ .../mes/pcn/api/busi/IMesJisShippingService.java | 20 ++ .../mes/pcn/api/busi/IMesNcProcessingService.java | 23 ++ .../busi/MesInputDefectRecordController.java | 86 ++++++ .../controller/busi/MesNcProcessingController.java | 68 ++++ .../serviceimpl/busi/MesConfigService.java | 43 +++ .../serviceimpl/busi/MesDefectRecordService.java | 72 +++++ .../busi/MesInputDefectRecordService.java | 341 +++++++++++++++++++++ .../serviceimpl/busi/MesJisShippingService.java | 68 ++++ .../serviceimpl/busi/MesNcProcessingService.java | 234 ++++++++++++++ .../busi/MesShippingLoadingCheckService.java | 11 +- .../busi/MesSortShippingCheckService.java | 66 +++- .../pcn/pojo/model/MesInputDefectRecordModel.java | 38 +++ .../pcn/pojo/model/MesNcProcessingDefectModel.java | 28 ++ .../mes/pcn/pojo/model/MesNcProcessingModel.java | 36 +++ .../ext/mes/pcn/pojo/util/MesPcnExtEnumUtil.java | 83 +++++ 18 files changed, 1272 insertions(+), 14 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesDefectRecordService.java create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesConfigService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesDefectRecordService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesInputDefectRecordModel.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingDefectModel.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingModel.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java new file mode 100644 index 0000000..61935a7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesConfigService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import io.swagger.annotations.ApiOperation; + +/** + * @Description: + * @CreateDate: 2021/9/9 下午3:24 + * @Author: simon.song + */ +public interface IMesConfigService { + @ApiOperation(value = "获取配置表模板代码") + String getCfgValue(String org, String key); + + @ApiOperation(value = "获取配置表模板代码") + MesConfig getCfgValueByCode(String key); + + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesDefectRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesDefectRecordService.java new file mode 100644 index 0000000..eb14254 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesDefectRecordService.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-04-26 15:37 + * @Modify: + **/ +public interface IMesDefectRecordService { + + @ApiOperation("完成质检 保存不良记录") + void saveDefect(String organizeCode, String userName, List recordList); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java new file mode 100644 index 0000000..ccb7be0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesInputDefectRecordService.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesInputDefectRecordModel; +import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesPartTypeDefect; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-04-26 15:37 + * @Modify: + **/ +public interface IMesInputDefectRecordService { + + + @ApiOperation(value = "扫描产品条码") + public MesInputDefectRecordModel queryProduceSn(String serialNumber, Integer sides, String org); + + @ApiOperation(value = "零件类型缺陷类型对应关系信息") + public List queryPartTypeDefect(String serialNumber, String defectLocationCode, boolean flg, Integer sides, String org); + + @ApiOperation(value = "零件类型缺陷类型对应关系信息") + public void saveDefectRecord(List defectRecordList, String org); + + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java new file mode 100644 index 0000000..4d06fcd --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesJisShippingService.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; +import cn.estsh.i3plus.pojo.mes.bean.MesShippingOrderManagementDetail; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-10 14:36 + * @Modify: + **/ +public interface IMesJisShippingService { + + @ApiOperation(value = "构筑发运报工数据") + public List getJisShipping(List orderManagementDetailList, String org); +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java new file mode 100644 index 0000000..73e5153 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesNcProcessingService.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingModel; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-04-26 15:37 + * @Modify: + **/ +public interface IMesNcProcessingService { + + + @ApiOperation(value = "扫描产品条码") + public MesNcProcessingModel queryProduceSn(String serialNumber, String org); + + @ApiOperation(value = "NC处理") + public void saveNc(String serialNumber,String person, Integer type, String org); + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java new file mode 100644 index 0000000..b62fd8c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesInputDefectRecordController.java @@ -0,0 +1,86 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesInputDefectRecordService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +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 cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@Api(tags = "缺陷记录页面") +@RequestMapping(MesCommonConstant.MES_YANFEN + "/defect_record") +@Slf4j +public class MesInputDefectRecordController { + + @Autowired + private IMesInputDefectRecordService inputDefectRecordService; + + + @GetMapping("/query-loading-order") + @ApiOperation(value = "查询产品条码") + public ResultBean queryProduceSn(String serialNumber, Integer sides) { + + try { + // 数据校验 + ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空"); + ValidatorBean.checkNotNull(sides, "正反面不能为空"); + +// return ResultBean.success("查询成功").setResultObject(inputDefectRecordService.queryProduceSn(serialNumber, sides, "2031")); + return ResultBean.success("查询成功").setResultObject(inputDefectRecordService.queryProduceSn(serialNumber, sides, AuthUtil.getOrganizeCode())); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/query-part-type-defect") + @ApiOperation(value = "查询零件类型缺陷类型对应关系") + public ResultBean queryPartTypeDefect(String partNo, String defectLocationCode, boolean flg, Integer sides) { + + try { + // 数据校验 + ValidatorBean.checkNotNull(partNo, "物料号不能为空"); + ValidatorBean.checkNotNull(defectLocationCode, "位置不能为空"); + ValidatorBean.checkNotNull(sides, "正反面不能为空"); + +// return ResultBean.success("查询成功").setResultList(inputDefectRecordService.queryPartTypeDefect(partNo, defectLocationCode, flg, sides, "2031")); + return ResultBean.success("查询成功").setResultList(inputDefectRecordService.queryPartTypeDefect(partNo, defectLocationCode, flg, sides, AuthUtil.getOrganizeCode())); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping("/save-defect-record") + @ApiOperation(value = "完成质检-保存不良记录") + public ResultBean saveDefectRecord(@RequestBody List defectRecordList) { + + try { + // 数据校验 + ValidatorBean.checkNotNull(defectRecordList, "选择不良数据不能为空"); + +// inputDefectRecordService.saveDefectRecord(defectRecordList, "2031"); + inputDefectRecordService.saveDefectRecord(defectRecordList, AuthUtil.getOrganizeCode()); + return ResultBean.success("查询成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } 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/controller/busi/MesNcProcessingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java new file mode 100644 index 0000000..e709085 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesNcProcessingController.java @@ -0,0 +1,68 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +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 cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +@RestController +@Api(tags = "NC处理页面") +@RequestMapping(MesCommonConstant.MES_YANFEN + "/nc-processing") +@Slf4j +public class MesNcProcessingController { + + @Autowired + private IMesNcProcessingService ncProcessingService; + + + @GetMapping("/query") + @ApiOperation(value = "查询产品条码") + public ResultBean queryProduceSn(String serialNumber) { + + try { + // 数据校验 + ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空"); + + return ResultBean.success("查询成功").setResultObject(ncProcessingService.queryProduceSn(serialNumber, AuthUtil.getOrganizeCode())); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping("/save-nc") + @ApiOperation(value = "NC处理") + public ResultBean saveNc(@RequestBody String serialNumber, String person, Integer type) { + + try { + // 数据校验 + ValidatorBean.checkNotNull(serialNumber, "产品条码不能为空"); + + String description = MesPcnExtEnumUtil.NC_TYPE.valueOfDescription(type); + if (StringUtils.isEmpty(description)) { + throw new ImppBusiException(String.format("【%s】类型不存在,请检查数据", type)); + + } + + ncProcessingService.saveNc(serialNumber, person, type, AuthUtil.getOrganizeCode()); + return ResultBean.success("查询成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } 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/serviceimpl/busi/MesConfigService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesConfigService.java new file mode 100644 index 0000000..b36166c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesConfigService.java @@ -0,0 +1,43 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description: + * @CreateDate: 2021/9/9 下午3:25 + * @Author: simon.song + */ +@Service +@Slf4j +public class MesConfigService implements IMesConfigService { + @Autowired + private MesConfigRepository configRepository; + + @Override + public String getCfgValue(String org, String key) { + MesConfig config = configRepository.getByProperty( + new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, + new Object[]{key, org, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); + + if (config == null) { + throw ImppExceptionBuilder.newInstance().setErrorCode(cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail(String.format("配置表数据不存在,请维护key【%s】", key)) + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .build(); + } + return config.getCfgValue(); + } + + @Override + public MesConfig getCfgValueByCode(String cfgCode) { + return this.configRepository.getByProperty(new String[]{"isDeleted", "isValid", "cfgCode"}, + new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode}); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesDefectRecordService.java new file mode 100644 index 0000000..fa210e1 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesDefectRecordService.java @@ -0,0 +1,72 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesDefectRecordService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.mes.bean.MesDefectRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.repository.MesDefectRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-09 10:54 + * @Modify: + **/ + +@Service +@Slf4j +public class MesDefectRecordService implements IMesDefectRecordService { + + @Autowired + private MesWorkOrderRepository workOrderRepository; + @Autowired + private MesDefectRecordRepository defectRecordRepository; + + @Override + public void saveDefect(String organizeCode, String userName, List recordList) { +// //校验工单 +// MesWorkOrder workOrder = checkQty(recordList); + + recordList.forEach(r -> { + r.setId(null); +// r.setOrderId(workOrder.getId()); +// r.setOrderNo(workOrder.getOrderNo()); + r.setOrganizeCode(organizeCode); + //更新工单表报废数量 +// workOrder.setRepairQty(workOrder.getRepairQtyVal() + r.getQty()); + ConvertBean.serviceModelInitialize(r, userName); + }); + defectRecordRepository.saveAll(recordList); + +// ConvertBean.serviceModelUpdate(workOrder, userName); +// workOrderExtRepository.update(workOrder); + } + +// public MesWorkOrder checkQty(List recordList) { +// MesDefectRecord recordExt = recordList.stream().findFirst().get(); +// MesWorkOrder workOrder = workOrderRepository.getById(recordExt.getWorkOrderNo()); +// if (workOrder == null) { +// throw ImppExceptionBuilder.newInstance() +// .setErrorDetail("工单ID【%s】不存在", recordExt.getOrderId()) +// .build(); +// } +// //获取不良总数 +// double total = recordList.stream().filter(r -> r.getQty() != null).mapToDouble(MesDefectRecordMagna::getQty).sum(); +// if (total > workOrder.getQty()) { +// throw ImppExceptionBuilder.newInstance() +// .setErrorDetail("不良数量总数不能大于工单数") +// .build(); +// } +// return workOrder; +// } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java new file mode 100644 index 0000000..56e5fd4 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -0,0 +1,341 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesInputDefectRecordService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesInputDefectRecordModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +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.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ResultBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-09 10:54 + * @Modify: + **/ + +@Service +@Slf4j +public class MesInputDefectRecordService implements IMesInputDefectRecordService { + + @Autowired + private MesProduceSnRepository produceSnRepository; + + @Autowired + private MesPartRepository partRepository; + + @Autowired + private MesPartTypePictureRepository partTypePictureRepository; + + @Autowired + private MesLocationConfigRepository locationConfigRepository; + @Autowired + private MesDefectAlarmConfigRepository defectAlarmConfigRepository; + @Autowired + private MesPartTypeDefectRepository partTypeDefectRepository; + @Autowired + private MesDefectRecordRepository defectRecordRepository; + + @Autowired + private MesDefectRecordService defectRecordService; + + @Autowired + private MesMoveRepository moveRepository; + + @Autowired + private IMesConfigService configService; + + @Autowired + private ISyncFuncService syncFuncService; + + @Override + public MesInputDefectRecordModel queryProduceSn(String serialNumber, Integer sides, String org) { + + //检查条码 + MesProduceSn produceSn = checkProduceSn(serialNumber, org); + + //检查物料 + MesPart part = checkPart(produceSn, org); + + //todo 图片暂时放空 + //检查零件类型与图片对应关系 + MesPartTypePicture partTypePicture = checkPartTypePicture(part, org); + + //位置 + List locationConfigList = checkLocationConfig(org); + List locationCodeList = locationConfigList.stream().map(k -> k.getDefectLocationCode()).collect(Collectors.toList()); + + //查询零件类型缺陷类型对应关系 + List partTypeDefectList = checkPartTypeDefect(part, org); + List partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectCode()).collect(Collectors.toList()); + + //查询预警数量 + List alarmConfigList = queryDefectAlarmConfigByLocationCodeList(part, sides, locationCodeList, partTypeDefectCodeList, org); + + //根据不良类型+位置 若有数据,则表示需要标黄 + Map alarmConfigMap = alarmConfigList.stream().collect(Collectors.toMap(k -> k.getDefectLocationCode(), k -> k)); + +// //位置是否标黄Map,key:位置,value:标黄标识 +// Map map = new HashMap<>(); +// alarmConfigMap.forEach((k, v) -> { +// //若有这个位置则标黄 +// if (!map.containsKey(k)) { +// map.put(k, true); +// } +// +// }); + + locationConfigList.forEach(k -> { + if (alarmConfigMap.containsKey(k.getDefectLocationCode())) { + k.setIsflg(true); + } + }); + + MesInputDefectRecordModel model = new MesInputDefectRecordModel(); +// model.setMap(map); + model.setPart(part); + model.setPartTypePicture(partTypePicture); + model.setLocationConfigList(locationConfigList); + return model; + } + + @Override + public List queryPartTypeDefect(String partNo, String defectLocationCode, boolean flg, Integer sides, String org) { + + //检查物料 + MesPart part = checkPartByPartNo(partNo, org); + + //查询零件类型缺陷类型对应关系 + List partTypeDefectList = checkPartTypeDefect(part, org); + + //flg==true 则是标黄的位置,需要查询位置下具体需要标黄的缺陷类型 + if (!StringUtils.isEmpty(flg) && flg) { + + List partTypeDefectCodeList = partTypeDefectList.stream().map(k -> k.getDefectCode()).collect(Collectors.toList()); + + //查询预警数量 + List alarmConfigList = queryDefectAlarmConfig(part, sides, defectLocationCode, partTypeDefectCodeList, org); + + //根据不良类型 合计预警数量 + Map alarmConfigMap = alarmConfigList.stream().collect(Collectors.toMap(k -> k.getDefectCode(), k -> k)); + + //位置是否标黄Map,key:不良类型,value:标黄标识 + Map map = new HashMap<>(); + alarmConfigMap.forEach((k, v) -> { + //若有这个不良类型则标黄 + if (!map.containsKey(k)) { + map.put(k, true); + } + }); + + //找到标黄的缺陷类型 标识置为true + partTypeDefectList.forEach(k -> { + if (map.containsKey(k.getDefectCode())) { + k.setFlg(true); + } + }); + } + + return partTypeDefectList; + } + + @Override + public void saveDefectRecord(List defectRecordList, String org) { + + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(defectRecordList.get(0).getPartNo(), "partNo", packBean); + MesPart part = partRepository.getByProperty(packBean); + + //保存数据 + defectRecordService.saveDefect(org, AuthUtil.getSessionUser().getUserName(), defectRecordList); + + GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM"); + serialNoModel.setPartNo(part.getPartNo()); + ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1); + String zrsum = ""; + if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) { + zrsum = (rb.getResultList().get(0)).toString(); + } + + MesMove move = new MesMove(); + move.setOrganizeCode(org); + move.setFactoryCode(org); + move.setLgort(configService.getCfgValue(org, "LGORT")); + move.setUmlgo(configService.getCfgValue(org, "UMLGO")); + move.setMenge(defectRecordList.size()); + move.setMeins(part.getUnit()); + move.setZrsum(zrsum); + ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName()); + moveRepository.save(move); + } + + private MesProduceSn checkProduceSn(String serialNumber, String org) { + //根据扫描的条码查询条码是否存在 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(serialNumber, "serialNumber", packBean); + MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); + + //若不存在则提示条码不存在 + if (StringUtils.isEmpty(produceSn)) { + throw new ImppBusiException(String.format("【%s】此条码不存在,请检查数据", serialNumber)); + } + + //根据条码状态判断 是不是已下线条码 + //若不是已下线的条码则提示 条码状态 请选择已下线的条码 + if (produceSn.getSnStatus() != MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择【%s】状态的条码", serialNumber, produceSn.getSnStatus(), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue())); + } + + //todo + //是否需要判断条码质量状态 +// if() + return produceSn; + } + + private MesPart checkPart(MesProduceSn produceSn, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(produceSn.getPartNo(), "partNo", packBean); + MesPart part = partRepository.getByProperty(packBean); + + //若不存在则提示物料信息不存在 + if (StringUtils.isEmpty(part)) { + throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号不存在,请检查数据", produceSn.getSerialNumber(), produceSn.getPartNo())); + } + + //根据条码查询零件类型(partType) + if (StringUtils.isEmpty(part.getPartTypeCode())) { + throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号未维护零件类型,请检查数据", produceSn.getSerialNumber(), produceSn.getPartNo())); + } + + + return part; + } + + private MesPart checkPartByPartNo(String partNo, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean); + MesPart part = partRepository.getByProperty(packBean); + + return part; + } + + private MesPartTypePicture checkPartTypePicture(MesPart part, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean); + MesPartTypePicture partTypePicture = partTypePictureRepository.getByProperty(packBean); + + //若不存在则提示零件类别不存在 + if (StringUtils.isEmpty(partTypePicture)) { + throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别不存在,请检查数据", part.getPartNo(), part.getPartTypeCode())); + } + //若不存在则提示未维护正面图片 + if (StringUtils.isEmpty(partTypePicture.getFrontPictureName())) { + throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护正面图片,请检查数据", part.getPartNo(), part.getPartTypeCode())); + } + //若不存在则提示未维护反面图片 + if (StringUtils.isEmpty(partTypePicture.getBackPictureName())) { + throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护反面图片,请检查数据", part.getPartNo(), part.getPartTypeCode())); + } + + return partTypePicture; + } + + private List checkLocationConfig(String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"rowLocation", "columnLocation"}, packBean); + List configList = locationConfigRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(configList)) { + throw new ImppBusiException(String.format("未配置位置,请检查数据")); + } + + return configList; + } + + private List checkPartTypeDefect(MesPart part, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean); + List partTypeDefectList = partTypeDefectRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(partTypeDefectList)) { + throw new ImppBusiException(String.format("未配置【%s】零件类型缺陷类型对应关系,请检查数据", part.getPartTypeCode())); + } + + return partTypeDefectList; + } + + private List queryDefectAlarmConfigByLocationCodeList(MesPart part, Integer sides, List locationCodeList, List partTypeDefectCodeList, + String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(part.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean); + DdlPreparedPack.getNumEqualPack(sides, "frontAndBackSides", packBean); + DdlPreparedPack.getInPackList(locationCodeList, "defectLocationCode", packBean); + DdlPreparedPack.getInPackList(partTypeDefectCodeList, "defectCode", packBean); + List alarmConfigList = defectAlarmConfigRepository.findByHqlWhere(packBean); + + return alarmConfigList; + } + + private List queryDefectAlarmConfig(MesPart part, Integer sides, String locationCode, List partTypeDefectCodeList, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(part.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean); + DdlPreparedPack.getNumEqualPack(sides, "frontAndBackSides", packBean); + DdlPreparedPack.getStringEqualPack(locationCode, "defectLocation", packBean); + DdlPreparedPack.getInPackList(partTypeDefectCodeList, "defectCode", packBean); + List alarmConfigList = defectAlarmConfigRepository.findByHqlWhere(packBean); + + return alarmConfigList; + } + + private void queryDefectRecordByToDaySumQty(Map map, MesPart part, Integer sides, String locationCode, String partTypeDefectCode, Integer count, + String org) { + + if (map.containsKey(locationCode)) { + return; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(part.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean); + DdlPreparedPack.getNumEqualPack(sides, "frontAndBackSides", packBean); + DdlPreparedPack.getStringEqualPack(locationCode, "defectLocation", packBean); + DdlPreparedPack.getStringEqualPack(partTypeDefectCode, "defectCode", packBean); + DdlPreparedPack.timeBuilder(TimeTool.getToday(), TimeTool.getToday(), "createDatetime", packBean, true); + int defectCount = defectRecordRepository.findByHqlWhereCount(packBean); + + if (defectCount >= count) { + map.put(locationCode, true); + } + + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingService.java new file mode 100644 index 0000000..99f7a8f --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingService.java @@ -0,0 +1,68 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; +import cn.estsh.i3plus.pojo.mes.bean.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-10 14:38 + * @Modify: + **/ +@Service +@Slf4j +public class MesJisShippingService implements IMesJisShippingService { + + @Autowired + private MesShippingOrderManagementRepository shippingOrderManagementRepository; + @Autowired + private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; + + public List getJisShipping(List orderManagementDetailList, String org) { + + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(orderManagementDetailList.get(0).getLoadingOrderNo(), "shippingOrderNo", packBean); + MesShippingOrderManagement originBean = shippingOrderManagementRepository.getByProperty(packBean); + + DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(originBean.getShippingOrderNo(), "shippingOrderNo", detailPackBean); + List detailDeleteList = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean); + + List jisShippingList = new ArrayList<>(); + orderManagementDetailList.forEach(k -> { + MesJisShipping jisShipping = new MesJisShipping(); + BeanUtils.copyProperties(originBean, jisShipping, "id"); + BeanUtils.copyProperties(k, jisShipping, "id"); + jisShipping.setFactoryCode(originBean.getCustPlantCode()); + jisShipping.setShippingTime(TimeTool.getNowTime(true)); + jisShipping.setDock(originBean.getSendDockCode()); + jisShipping.setCusDock(originBean.getCustDockCode()); + jisShipping.setCustOrderNo(k.getCustOrderNo()); + jisShipping.setSerialNumber(k.getBarcode()); + jisShipping.setQuantityPerCar(detailDeleteList.size()); + jisShipping.setShippingOrderCode(originBean.getShippingOrderNo()); + ConvertBean.serviceModelInitialize(jisShipping, AuthUtil.getSessionUser().getUserName()); + jisShippingList.add(jisShipping); + }); + + return jisShippingList; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java new file mode 100644 index 0000000..3377306 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesNcProcessingService.java @@ -0,0 +1,234 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNcProcessingService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingDefectModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNcProcessingModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +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.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ResultBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-10 15:59 + * @Modify: + **/ +@Service +@Slf4j +public class MesNcProcessingService implements IMesNcProcessingService { + + @Autowired + private MesDefectRecordRepository defectRecordRepository; + + @Autowired + private MesPartRepository partRepository; + + @Autowired + private MesPartTypePictureRepository partTypePictureRepository; + + @Autowired + private MesPartTypeDefectRepository partTypeDefectRepository; + + @Autowired + private MesLocationConfigRepository locationConfigRepository; + + @Autowired + private IMesConfigService configService; + + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private MesMoveRepository moveRepository; + + @Override + public MesNcProcessingModel queryProduceSn(String serialNumber, String org) { + + + //检查不良条码 + List defectRecordList = queryDefectRecord(serialNumber, org); + + //检查物料 + MesPart part = checkPart(defectRecordList, org); + + //todo 图片暂时放空 + //检查零件类型与图片对应关系 + MesPartTypePicture partTypePicture = checkPartTypePicture(part, org); + + //位置 + List locationConfigList = checkLocationConfig(org); + + Map defectRecordMap = defectRecordList.stream().collect(Collectors.toMap(k -> k.getDefectLocation(), k -> k)); + + + Map> defectMap = defectRecordList.stream().collect(Collectors.groupingBy(k -> k.getDefectCode())); + + //位置是否标黄Map,key:位置,value:标黄标识 + locationConfigList.forEach(k -> { + if (defectRecordMap.containsKey(k.getDefectLocationCode())) { + k.setIsflg(true); + } + }); + + List defectModelList = new ArrayList<>(); + defectMap.forEach((k, v) -> { + MesNcProcessingDefectModel model = new MesNcProcessingDefectModel(); + model.setDefectCode(k); + model.setQty(v.size()); + model.setDefectName(v.get(0).getDefectName()); + defectModelList.add(model); + }); + + MesNcProcessingModel model = new MesNcProcessingModel(); + model.setDefectModelList(defectModelList); + model.setPartTypePicture(partTypePicture); + model.setLocationConfigList(locationConfigList); + return model; + } + + @Override + public void saveNc(String serialNumber, String person, Integer type, String org) { + + //检查不良条码 + List defectRecordList = queryDefectRecord(serialNumber, org); + + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(defectRecordList.get(0).getPartNo(), "partNo", packBean); + MesPart part = partRepository.getByProperty(packBean); + + GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM"); + serialNoModel.setPartNo(part.getPartNo()); + ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1); + String zrsum = ""; + if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) { + zrsum = (rb.getResultList().get(0)).toString(); + } + + if (type == MesPcnExtEnumUtil.NC_TYPE.REWORK.getValue()) { + MesMove move = new MesMove(); + move.setOrganizeCode(org); + move.setFactoryCode(org); + move.setLgort(configService.getCfgValue(org, "LGORT")); + move.setUmlgo(configService.getCfgValue(org, "UMLGO")); + move.setMenge(defectRecordList.size()); + move.setMeins(part.getUnit()); + move.setZrsum(zrsum); + ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName()); + moveRepository.save(move); + } + + defectRecordList.forEach(k -> { + k.setNcType(type); + k.setPerson(person); + ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName()); + }); + + defectRecordRepository.saveAll(defectRecordList); + } + + private MesPart checkPart(List defectRecordList, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(defectRecordList.get(0).getPartNo(), "partNo", packBean); + MesPart part = partRepository.getByProperty(packBean); + + //若不存在则提示物料信息不存在 + if (StringUtils.isEmpty(part)) { + throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号不存在,请检查数据", defectRecordList.get(0).getSerialNumber(), defectRecordList.get(0).getPartNo())); + } + + //根据条码查询零件类型(partType) + if (StringUtils.isEmpty(part.getPartTypeCode())) { + throw new ImppBusiException(String.format("【%s】此条码对应【%s】物料号未维护零件类型,请检查数据", defectRecordList.get(0).getSerialNumber(), defectRecordList.get(0).getPartNo())); + } + + + return part; + } + + + private List queryDefectRecord(String serialNumber, String org) { + + //查询扫描的条码 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(serialNumber, "serialNumber", packBean); + List defectRecordList = defectRecordRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(defectRecordList)) { + throw new ImppBusiException(String.format("【%s】此条码不存在可疑品记录,请检查数据", serialNumber)); + } + + + return defectRecordList; + } + + private MesPartTypePicture checkPartTypePicture(MesPart part, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean); + MesPartTypePicture partTypePicture = partTypePictureRepository.getByProperty(packBean); + + //若不存在则提示零件类别不存在 + if (StringUtils.isEmpty(partTypePicture)) { + throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别不存在,请检查数据", part.getPartNo(), part.getPartTypeCode())); + } + //若不存在则提示未维护正面图片 + if (StringUtils.isEmpty(partTypePicture.getFrontPictureName())) { + throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护正面图片,请检查数据", part.getPartNo(), part.getPartTypeCode())); + } + //若不存在则提示未维护反面图片 + if (StringUtils.isEmpty(partTypePicture.getBackPictureName())) { + throw new ImppBusiException(String.format("【%s】物料号对应的【%s】零件类别未维护反面图片,请检查数据", part.getPartNo(), part.getPartTypeCode())); + } + + return partTypePicture; + } + + private List checkPartTypeDefect(MesPart part, String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(part.getPartTypeCode(), "partTypeCode", packBean); + List partTypeDefectList = partTypeDefectRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(partTypeDefectList)) { + throw new ImppBusiException(String.format("未配置【%s】零件类型缺陷类型对应关系,请检查数据", part.getPartTypeCode())); + } + + return partTypeDefectList; + } + + private List checkLocationConfig(String org) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"rowLocation", "columnLocation"}, packBean); + List configList = locationConfigRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(configList)) { + throw new ImppBusiException(String.format("未配置位置,请检查数据")); + } + + return configList; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java index 628ae23..68a483d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingLoadingCheckService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel; @@ -46,6 +47,10 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; @Autowired private MesProduceSnRepository produceSnRepository; + @Autowired + private IMesJisShippingService jisShippingService; + @Autowired + private MesJisShippingRepository jisShippingRepository; @Resource(name = MesPcnConstWords.REDIS_RES_PCN) private ImppRedis redisMesPcn; @@ -232,7 +237,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS List orderManagementDetailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderManagementPackBean); //条码 - List snList = orderManagementDetailList.stream().map(k -> k.getSn()).collect(Collectors.toList()); + List snList = orderManagementDetailList.stream().map(k -> k.getBarcode()).collect(Collectors.toList()); DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getInPackList(snList, "serialNumber", producePackBean); List produceSnList = produceSnRepository.findByHqlWhere(producePackBean); @@ -251,6 +256,10 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS k.setShippingStatus(MesPcnExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); }); + List jisShippingList = jisShippingService.getJisShipping(orderManagementDetailList, org); + + //保存当前发运单明细报工 + jisShippingRepository.saveAll(jisShippingList); shippingOrderManagementRepository.saveAll(orderManagementList); shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList); produceSnRepository.saveAll(produceSnList); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java index fff1f29..3c1c1b8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesSortShippingCheckService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; @@ -49,6 +50,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService @Autowired private MesLoadingVehiclesOrderDetailRepository vehiclesOrderDetailRepository; + @Autowired + private MesJisShippingRepository jisShippingRepository; + + @Autowired + private IMesJisShippingService jisShippingService; + @Resource(name = MesPcnConstWords.REDIS_RES_PCN) private ImppRedis redisMesPcn; @@ -145,7 +152,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); } - detail.setSn(produceSn.getSerialNumber()); + detail.setBarcode(produceSn.getSerialNumber()); break; } } @@ -183,7 +190,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService if (detail.getPartNo().equals(produceSn.getPartNo())) { scanFlg = true; detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); - detail.setSn(produceSn.getSerialNumber()); + detail.setBarcode(produceSn.getSerialNumber()); break; } } @@ -238,7 +245,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService MesPcnExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue())); } - Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getSn()) && k.getSn().equals(model.getSn())).findFirst(); + Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); if (optional.isPresent()) { throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); } @@ -304,8 +311,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue()); Optional optional1 = model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst(); - detail.setSn(optional1.get().getSn()); - snList.add(optional1.get().getSn()); + detail.setBarcode(optional1.get().getBarcode()); + snList.add(optional1.get().getBarcode()); } DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org); @@ -320,6 +327,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //修改当前发运单明细状态 orderManagementDetailList.forEach(k -> k.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue())); + //当前发运单明细 需要报工的数据 + List jisShippingList = jisShippingService.getJisShipping(orderManagementDetailList, org); + //修改当前发运单明细条码状态 produceSnList.forEach(k -> k.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue())); @@ -341,7 +351,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //此发运单所在装车单对应剩余发运单 DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getStringNoEqualPack(model.getShippingOrderNo(), "shippingOrderNo", orderManagementPackBean); - DdlPreparedPack.getStringEqualPack(orderManagement.getLoadingOrderNo(), "shippingOrderNo", orderManagementPackBean); + DdlPreparedPack.getStringEqualPack(orderManagement.getLoadingOrderNo(), "loadingOrderNo", orderManagementPackBean); List orderManagementtSurplusList = shippingOrderManagementRepository.findByHqlWhere(orderManagementPackBean); orderManagementtSurplusList.forEach(k -> k.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue())); @@ -350,12 +360,20 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService orderManagementDetailSurplusList.forEach(k -> k.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue())); //剩余发运单明细的条码 - List snSurplusList = orderManagementDetailSurplusList.stream().map(k -> k.getSn()).collect(Collectors.toList()); + List snSurplusList = orderManagementDetailSurplusList.stream().map(k -> k.getBarcode()).collect(Collectors.toList()); producePackBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getInPackList(snSurplusList, "serialNumber", producePackBean); List produceSnSurplusList = produceSnRepository.findByHqlWhere(producePackBean); produceSnSurplusList.forEach(k -> k.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue())); + //剩余发运单明细 需要报工的数据 + List jisShippingSurplusList = jisShippingService.getJisShipping(orderManagementDetailSurplusList, org); + + + //保存当前发运单明细报工 + jisShippingRepository.saveAll(jisShippingList); + //保存剩余发运单明细报工 + jisShippingRepository.saveAll(jisShippingSurplusList); //保存剩余发运单 shippingOrderManagementRepository.saveAll(orderManagementtSurplusList); @@ -390,8 +408,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue()); Optional optional1 = model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst(); - detail.setSn(optional1.get().getSn()); - snList.add(optional1.get().getSn()); + detail.setBarcode(optional1.get().getBarcode()); + snList.add(optional1.get().getBarcode()); } DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org); @@ -419,8 +437,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue()); Optional optional1 = model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst(); - detail.setSn(optional1.get().getSn()); - snList.add(optional1.get().getSn()); + detail.setBarcode(optional1.get().getBarcode()); + snList.add(optional1.get().getBarcode()); } DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org); @@ -451,19 +469,41 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService detail.setStatus(MesPcnExtEnumUtil.SHIPPING_ORDER_STATUS.VERIFICATION_COMPLETED.getValue()); Optional optional1 = model.getDetailList().stream().filter(k -> k.getShippingOrderNo().equals(detail.getShippingOrderNo())).findFirst(); - detail.setSn(optional1.get().getSn()); - snList.add(optional1.get().getSn()); + detail.setBarcode(optional1.get().getBarcode()); + snList.add(optional1.get().getBarcode()); } DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getInPackList(snList, "serialNumber", producePackBean); List produceSnList = produceSnRepository.findByHqlWhere(producePackBean); produceSnList.forEach(k -> k.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue())); + //当前发运单明细 需要报工的数据 + List jisShippingList = jisShippingService.getJisShipping(orderManagementDetailList, org); + produceSnRepository.saveAll(produceSnList); shippingOrderManagementRepository.save(orderManagement); shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList); + + + //保存当前发运单明细报工 + jisShippingRepository.saveAll(jisShippingList); } } +// private List getJisShipping(List orderManagementDetailList, String org) { +// +// List shippingList = new ArrayList<>(); +// for (MesShippingOrderManagementDetail detail : orderManagementDetailList) { +// MesJisShipping jisShipping = new MesJisShipping(); +// jisShipping.setOrganizeCode(org); +// jisShipping.setSerialNumber(detail.getSn()); +// jisShipping.setPartNo(detail.getPartNo()); +// ConvertBean.serviceModelInitialize(jisShipping, AuthUtil.getSessionUser().getUserName()); +// shippingList.add(jisShipping); +// } +// +// return shippingList; +// } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesInputDefectRecordModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesInputDefectRecordModel.java new file mode 100644 index 0000000..d802dc5 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesInputDefectRecordModel.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesLocationConfig; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-09 18:08 + * @Modify: + **/ +@Data +public class MesInputDefectRecordModel { + + + @ApiParam("位置") + List locationConfigList; + + + @ApiParam("图片") + private MesPartTypePicture partTypePicture; + + @ApiParam("物料") + private MesPart part; + + + @ApiParam("位置是否标黄Map") + private Map map; + + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingDefectModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingDefectModel.java new file mode 100644 index 0000000..0e712b0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingDefectModel.java @@ -0,0 +1,28 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-09 18:08 + * @Modify: + **/ +@Data +public class MesNcProcessingDefectModel { + + + @ApiParam("缺陷类型") + private String defectCode; + + + @ApiParam("缺陷描述") + private String defectName; + + @ApiParam("缺陷描述") + private Integer qty; + + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingModel.java new file mode 100644 index 0000000..66297bd --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNcProcessingModel.java @@ -0,0 +1,36 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesLocationConfig; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : + * @CreateDate : 2024-05-09 18:08 + * @Modify: + **/ +@Data +public class MesNcProcessingModel { + + + @ApiParam("位置") + List locationConfigList; + + + @ApiParam("图片") + private MesPartTypePicture partTypePicture; + + @ApiParam("缺陷列表") + private List defectModelList; + + @ApiParam("物料") + private MesPart part; + + +} 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 dc9bd72..824dd69 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 @@ -256,4 +256,87 @@ public class MesPcnExtEnumUtil { } + /** + * 缺陷告警配置-正面反面 + */ + @JsonFormat( + shape = JsonFormat.Shape.OBJECT + ) + public static enum DEFECT_ALARM_CONFIG_SIDES { + + FRONT(10, "正面"), + BACK(20, "反面"); + + private int value; + private String description; + + private DEFECT_ALARM_CONFIG_SIDES(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 int getValue() { + return this.value; + } + + public String getDescription() { + return this.description; + } + } + + /** + * NC处理-类型 + */ + @JsonFormat( + shape = JsonFormat.Shape.OBJECT + ) + public static enum NC_TYPE { + + NORMAL(10, "转正常"), + REWORK(20, "返工"), + SCRAP(30, "报废"), + RELEASE(40, "放行"); + + private int value; + private String description; + + private NC_TYPE(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 int getValue() { + return this.value; + } + + public String getDescription() { + return this.description; + } + } + + }