From 9dc8ad01fa1a620c73652831168177732427a85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Thu, 30 May 2024 14:39:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=B7=A5=E9=9C=80=E6=B1=82=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesReworkTaskService.java | 40 +++ .../controller/busi/MesReworkTaskController.java | 133 ++++++++++ .../serviceimpl/base/MesReworkTaskServiceImpl.java | 286 +++++++++++++++++++++ .../station/MesProductionNoSortModuleService.java | 26 +- .../step/MesMouldRecordGenerateStepService.java | 99 +++++++ .../mes/pcn/apiservice/util/MesPcnException.java | 71 +++++ .../ext/mes/pcn/pojo/model/MesReworkTaskModel.java | 36 +++ .../pcn/pojo/model/MesReworkTaskRequestModel.java | 44 ++++ 8 files changed, 722 insertions(+), 13 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/MesPcnException.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskModel.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java new file mode 100644 index 0000000..012a7aa --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java @@ -0,0 +1,40 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.base; + + +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesShift; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; +import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description: 查询返工单 + * @Author: zxw + * @Date: 2024/5/25 18:16 + * @Modify: + */ +public interface IMesReworkTaskService { + + + @ApiOperation(value = "查询返工单") + ListPager queryReworkTask(MesReworkTask mesReworkTask, Pager pager); + + @ApiOperation(value = "查询返工单") + MesReworkTaskModel queryReworkTaskModel(MesReworkTaskRequestModel requestModel); + + void reworkRecord(long detailId); + + List assemblyQuery(MesReworkTaskRequestModel requestModel); + + void assemblySnRepeat(MesReworkTaskRequestModel requestModel); + + void reworkSuccess(MesReworkTaskRequestModel requestModel); + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java new file mode 100644 index 0000000..37bbb22 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java @@ -0,0 +1,133 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesReworkTaskService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesShift; +import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; +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.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Description: 返工单 + * @Author: zxw + * @Date: 2024/5/25 18:16 + * @Modify: + */ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/reworkTask") +public class MesReworkTaskController { + + @Autowired + private IMesReworkTaskService mesReworkTaskService; + + @GetMapping("/query-pager") + @ApiOperation(value = "查询所有返工单") + public ResultBean queryReworkTaskByPager(MesReworkTask reworkTask, Pager pager) { + try { + reworkTask.setOrganizeCode(AuthUtil.getOrganizeCode()); + ListPager mesReworkTaskListPager = mesReworkTaskService.queryReworkTask(reworkTask, pager); + return ResultBean.success("查询成功").setListPager(mesReworkTaskListPager); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/queryBySn") + @ApiOperation(value = "根据条码查询返工详情") + public ResultBean queryBySn(MesReworkTaskRequestModel requestModel) { + try { + requestModel.setOrganizeCode(AuthUtil.getOrganizeCode()); + MesReworkTaskModel mesReworkTaskModel = mesReworkTaskService.queryReworkTaskModel(requestModel); + return ResultBean.success("查询成功").setResultObject(mesReworkTaskModel); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/reworkRecord") + @ApiOperation(value = "返工") + public ResultBean reworkRecord(long[] inspectionDetailIds) { + try { + for (long inspectionDetailId : inspectionDetailIds) { + mesReworkTaskService.reworkRecord(inspectionDetailId); + } + return ResultBean.success("返工成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/assemblyQuery") + @ApiOperation(value = "装配件查询") + public ResultBean assemblyQuery(MesReworkTaskRequestModel requestModel) { + // 数据校验 + ValidatorBean.checkNotNull(requestModel.getCustSn(), "客户条码不能为空"); + ValidatorBean.checkNotNull(requestModel.getPartNo(), "零件号不能为空"); + try { + List mesProductionRecords = mesReworkTaskService.assemblyQuery(requestModel); + return ResultBean.success("返工成功").setResultObject(mesProductionRecords); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/assemblySnRepeat") + @ApiOperation(value = "装配件替换") + public ResultBean assemblySnRepeat(MesReworkTaskRequestModel requestModel) { + try { + // 数据校验 + ValidatorBean.checkNotNull(requestModel.getCustSn(), "客户条码不能为空"); + ValidatorBean.checkNotNull(requestModel.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(requestModel.getSn(), "替换条码不能为空"); + ValidatorBean.checkNotNull(requestModel.getDetailId(), "缺陷位置id不能为空"); + + mesReworkTaskService.assemblySnRepeat(requestModel); + return ResultBean.success("返工成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/reworkSuccess") + @ApiOperation(value = "返工成功") + public ResultBean reworkSuccess(MesReworkTaskRequestModel requestModel) { + // 数据校验 + ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空"); + try { + mesReworkTaskService.reworkSuccess(requestModel); + 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/base/MesReworkTaskServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java new file mode 100644 index 0000000..c765c61 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java @@ -0,0 +1,286 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesReworkTaskService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +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.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; +import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; +import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +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 lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +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.List; +import java.util.Objects; +import java.util.stream.Collectors; + + +/** + * @Description: 查询返工单 + * @Author: zxw + * @Date: 2024/5/21 14:16 + * @Modify: + */ +@Service +@Slf4j +public class MesReworkTaskServiceImpl implements IMesReworkTaskService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MesReworkTaskServiceImpl.class); + + + @Autowired + private MesReworkTaskRepository mesReworkTaskRepository; + @Autowired + private MesPartTypePictureRepository mesPartTypePictureRepository; + + @Autowired + private MesPartRepository mesPartRepository; + + @Autowired + private MesPartInspectionRepository mesPartInspectionRepository; + + @Autowired + private MesPartInspectionDetailRepository mesPartInspectionDetailRepository; + + @Autowired + private MesReworkTaskDetailRepository mesReworkTaskDetailRepository; + + @Autowired + private MesProductionAssemblyRepository mesProductionAssemblyRepository; + + @Autowired + private MesProduceSnRepository mesProduceSnRepository; + + @Override + public ListPager queryReworkTask(MesReworkTask mesReworkTask, Pager pager) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode()); + if (mesReworkTask.getSn() != null) { + DdlPreparedPack.getStringEqualPack(mesReworkTask.getSn(), "sn", packBean); + } + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue(), "status", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + + pager = PagerHelper.getPager(pager, mesReworkTaskRepository.findByHqlWhereCount(packBean)); + + List resultList = mesReworkTaskRepository.findByHqlWherePage(packBean, pager); + + return new ListPager<>(resultList, pager); + } + + + @Override + public MesReworkTaskModel queryReworkTaskModel(MesReworkTaskRequestModel requestModel){ + /** + * 获取返工单信息 + */ + MesReworkTask res = getMesReworkTask(requestModel); + + /** + * 获取返工单信息 + */ + List reworkTaskDetails = getMesReworkTaskDetail(res); + /** + * 获取零件图片信息 + */ + MesPartTypePicture mesPartTypePicture = getMesPartTypePicture(res); + /** + * 获取缺陷记录 + */ + MesPartInspection mesPartInspection = getMesPartInspection(res); + /** + * 获取零件缺陷明细列表 + */ + List mesPartInspectionDetails = getMesPartInspectionDetail(reworkTaskDetails); + + /** + * 组装返回信息 + */ + MesReworkTaskModel mesReworkTaskModel = MesReworkTaskModel.builder() + .reworkOrder(res.getReworkOrder()) + .sn(res.getSn()) + .mesPartTypePicture(mesPartTypePicture) + .mesPartInspection(mesPartInspection) + .mesPartInspectionDetails(mesPartInspectionDetails).build(); + + + return mesReworkTaskModel; + } + + @Override + public void reworkRecord(long detailId) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(detailId, "partInspectionDetailId", packBean); + + MesReworkTaskDetail mesReworkTaskDetail = mesReworkTaskDetailRepository.getByProperty(packBean); + if (mesReworkTaskDetail == null) { + MesPcnException.throwFlowException("返工单详情不存在"); + } + mesReworkTaskDetail.setStatus(MesExtEnumUtil.REWORK_TASK_DETAIL_STATUS.REWORK_TASK_DETAIL_STATUS_20.getValue()); + mesReworkTaskDetailRepository.save(mesReworkTaskDetail); + + } + + + @Override + public List assemblyQuery(MesReworkTaskRequestModel requestModel) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(requestModel.getCustSn(), "custSn", packBean); + DdlPreparedPack.getStringEqualPack(requestModel.getPartNo(), "partNo", packBean); + if (!StringUtils.isEmpty(requestModel.getAssemblyPartNo())) { + DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean); + } + if (!Objects.isNull(requestModel.getAssemblyPartStatus())) { + DdlPreparedPack.getNumEqualPack(requestModel.getAssemblyPartStatus(), "assemblyStatus", packBean); + } + + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"assemblyStatus"}, packBean); + + List mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(mesProductionAssemblies)) { + MesPcnException.throwFlowException("装配件信息不存在"); + } + return mesProductionAssemblies; + } + + @Override + public void reworkSuccess(MesReworkTaskRequestModel requestModel) { + + MesReworkTask mesReworkTask = getMesReworkTask(requestModel); + /** + * 获取返工单信息 + */ + List reworkTaskDetails = getMesReworkTaskDetail(mesReworkTask); + if (!CollectionUtils.isEmpty(reworkTaskDetails)) { + MesPcnException.throwFlowException("还有位置未返工完成,请检查"); + } + mesReworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()); + mesReworkTaskRepository.update(mesReworkTask); + } + + @Override + public void assemblySnRepeat(MesReworkTaskRequestModel requestModel) { + + try { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "sn", packBean); + MesProduceSn mesProduceSn = mesProduceSnRepository.getByProperty(packBean); + if (mesProduceSn == null) { + MesPcnException.throwFlowException("条码信息不存在"); + } + requestModel.setAssemblyPartNo(mesProduceSn.getPartNo()); + requestModel.setAssemblyPartStatus(MesExtEnumUtil.ASSEMBLY_PART_STATUS.ASSEMBLY_PART_STATUS_10.getValue()); + List mesProductionAssemblies = assemblyQuery(requestModel); + if (CollectionUtils.isEmpty(mesProductionAssemblies)) { + MesPcnException.throwFlowException("未匹配到该条码的零件号"); + } + // 需要变更之前的记录 + MesProductionAssembly mesProductionAssembly = mesProductionAssemblies.get(0); + mesProductionAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_PART_STATUS.ASSEMBLY_PART_STATUS_20.getValue()); + + + // 需要新增一条替换条码的记录 + MesProductionAssembly mesProductionRepeatAssembly = new MesProductionAssembly(); + BeanUtils.copyProperties(mesProductionAssembly, mesProductionRepeatAssembly); + mesProductionRepeatAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_PART_STATUS.ASSEMBLY_PART_STATUS_10.getValue()); + mesProductionRepeatAssembly.setId(null); + + mesProductionAssembly.setRepeatAssemblySn(requestModel.getSn()); + mesProductionAssemblyRepository.update(mesProductionAssembly); + + mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly); + /** + * 需要更新NC标记后进入的表明细状态为已处理 + */ + reworkRecord(requestModel.getDetailId()); + } catch (Exception e) { + log.error("替换条码异常", e); + } + + } + + + private MesPartInspection getMesPartInspection(MesReworkTask mesReworkTask) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesReworkTask.getSn(), "sn", packBean); + + MesPartInspection mesPartInspection = mesPartInspectionRepository.getByProperty(packBean); + if (mesPartInspection == null) { + throw new ImppBusiException("返工单信息不存在"); + } + return mesPartInspection; + } + + private List getMesPartInspectionDetail(List reworkTaskDetails) { + + List ids = reworkTaskDetails.stream().map(MesReworkTaskDetail::getPartInspectionDetailId).collect(Collectors.toList()); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(reworkTaskDetails.get(0).getOrganizeCode()); + DdlPreparedPack.getInPackList(ids, "id", packBean); + + return mesPartInspectionDetailRepository.findByHqlWhere(packBean); + } + + private MesPartTypePicture getMesPartTypePicture(MesReworkTask mesReworkTask) { + DdlPackBean partBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesReworkTask.getPartNo(), "partNo", partBean); + MesPart mesPart = mesPartRepository.getByProperty(partBean); + if (mesPart == null) { + MesPcnException.throwFlowException(String.format("零件信息不存在,根据物料号查询[%s]", mesReworkTask.getPartNo())); + } + + DdlPackBean pictureBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPart.getPartTypeCode(), "partTypeCode", pictureBean); + MesPartTypePicture mesPartTypePicture = mesPartTypePictureRepository.getByProperty(pictureBean); + if (mesPartTypePicture == null) { + throw new ImppBusiException(String.format("图片信息不存在,根据物料号查询[%s]", mesReworkTask.getPartNo())); + } + return mesPartTypePicture; + } + + private MesReworkTask getMesReworkTask(MesReworkTaskRequestModel requestModel) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(requestModel.getSn(), "sn", packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue(), "status", packBean); + + MesReworkTask res = mesReworkTaskRepository.getByProperty(packBean); + if (res == null) { + throw new ImppBusiException("返工单信息不存在"); + } + return res; + } + private List getMesReworkTaskDetail(MesReworkTask mesReworkTask) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesReworkTask.getId(), "pid", packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_DETAIL_STATUS.REWORK_TASK_DETAIL_STATUS_10.getValue(), "status", packBean); + + List res = mesReworkTaskDetailRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(res)) { + throw new ImppBusiException("返工单详情信息不存在"); + } + return res; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index 97d3ae9..eff2f63 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -5,9 +5,11 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.util.PojoAttrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,6 +36,8 @@ public class MesProductionNoSortModuleService extends BaseModuleService { */ StationResultBean resultBean = getStationResultBean(reqBean); + StationResultBean resultBean1 = getStationResultBean1(reqBean); + //TODO 获取 头部上下文 信息 // productionProcessContextStepService.getProductionProcessContext(); @@ -120,6 +124,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()); resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue()); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); + resultBean.setDataAttrList(packDataAttrList()); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); List> stationKvBeansList = new ArrayList<>(); @@ -163,25 +168,20 @@ public class MesProductionNoSortModuleService extends BaseModuleService { stationKvBeans1.add(stationKvBean6); stationKvBeansList.add(stationKvBeans1); - List stationKvBeans3 = new ArrayList<>(); - StationKvBean stationKvBean7 = new StationKvBean(); - stationKvBean7.setKey("shiftCode"); - stationKvBean7.setName("班次"); - stationKvBean7.setValue("白班"); - stationKvBeans3.add(stationKvBean7); - StationKvBean stationKvBean8 = new StationKvBean(); - stationKvBean8.setKey("shiftGroup"); - stationKvBean8.setName("班组"); - stationKvBean8.setValue("注塑2班"); - stationKvBeans3.add(stationKvBean8); - - resultBean.setResultObj(stationKvBeans3); + //resultBean.setResultObj(stationKvBeans3); resultBean.setResultList(stationKvBeansList); return resultBean; } + private List packDataAttrList() { + List attrBeanList = new ArrayList<>(); + PojoAttrUtil.loadPojoAttrs(attrBeanList, "index", "序号",true); + PojoAttrUtil.loadPojoAttrs(attrBeanList, "custPartNo", "客户零件号", true); + PojoAttrUtil.loadPojoAttrs(attrBeanList, "orderNo", "工单号", true); + return attrBeanList; + } @Override public boolean execStateModule(StationRequestBean reqBean, List states, Map wcpcMap) { return true; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java new file mode 100644 index 0000000..1612fab --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldRecordGenerateStepService.java @@ -0,0 +1,99 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.repository.IMesMouldMappingCfgRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProdMouldRecordRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; + +/** + * @Description : 生成开模记录工步 + * @Author : zxw + **/ +@Slf4j +@Service("mesMouldRecordGenerateStepService") +public class MesMouldRecordGenerateStepService extends BaseStepService { + + @Autowired + private MesProdMouldRecordRepository mesProdMouldRecordRepository; + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesMouldMappingCfgRepository mesMouldMappingCfgRepository; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); + List mesProduceSns = productionProcessContext.getProduceSnDataList(); + + List mesProdMouldRecords = new ArrayList<>(); + for (MesProduceSn mesProduceSn : mesProduceSns) { + MesCellEquipContext mesCellEquipContext = productionProcessContext.getCurCellEquip(); + + String equipmentCode = mesCellEquipContext.getEquipmentCode(); + + String mouldNo = ""; + if (productionProcessContext.getFirstMouldNo() != null) { + mouldNo = productionProcessContext.getFirstMouldNo().getEquipVariableValue(); + } else if (productionProcessContext.getFirstMouldNo() == null && productionProcessContext.getMouldNo() != null) { + mouldNo = productionProcessContext.getMouldNo().getEquipVariableValue(); + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getStringEqualPack(equipmentCode, "equipmentCode", packBean); + DdlPreparedPack.getStringEqualPack(mouldNo, "mouldNo", packBean); + MesMouldMappingCfg mesMouldMappingCfg = mesMouldMappingCfgRepository.getByProperty(packBean); + //配置错误 抛出异常 + if (mesMouldMappingCfg == null) execExpSendMsgAndThrowEx(reqBean, resultBean, + String.format("请检查模具映射关系维护,根据设备[%s],模具号[%s]", equipmentCode, mouldNo)); + + + MesProdMouldRecord mesProductionRecord = getMesProdMouldRecord(mesCellEquipContext, mouldNo, mesMouldMappingCfg); + mesProdMouldRecords.add(mesProductionRecord); + } + + mesProdMouldRecordRepository.saveAll(mesProdMouldRecords); + + return StepResult.getSuccessComplete(); + } + + private MesProdMouldRecord getMesProdMouldRecord(MesCellEquipContext mesCellEquipContext, String mouldNo, MesMouldMappingCfg mesMouldMappingCfg) { + MesProdMouldRecord mesProdMouldRecord = new MesProdMouldRecord(); + mesProdMouldRecord.setEquipId(mesCellEquipContext.getEquipId()); + mesProdMouldRecord.setMeterName(mesMouldMappingCfg.getMeterName()); + mesProdMouldRecord.setAssetNum(mesMouldMappingCfg.getAssetNum()); + mesProdMouldRecord.setEquipmentCode(mesCellEquipContext.getEquipmentCode()); + return mesProdMouldRecord; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/MesPcnException.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/MesPcnException.java new file mode 100644 index 0000000..94aed72 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/util/MesPcnException.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.util; + +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; + +/** + * @Description : 抛出异常的工具类,用于简化抛出异常的代码 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/5/8 17:16 + * @Modify: + **/ +public class MesPcnException { + + /** + * 抛出业务系统异常 + * @param errorDetail 异常信息 + * @param errorSolution 异常的解决方案 + * @throws ImppBusiException + */ + public static void throwFlowException(String errorDetail, String errorSolution) + throws ImppBusiException { + + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail(errorDetail) + .setErrorSolution(errorSolution) + .build(); + } + + /** + * 抛出业务系统异常 + * @param errorDetail 异常信息 + * @throws ImppBusiException + */ + public static void throwFlowException(String errorDetail) + throws ImppBusiException { + + throwFlowException(errorDetail, ""); + } + + /** + * WMS 抛出业务异常 + * @param errorCode 错误代码 + * @param errorDetail 错误详情 + * @param errorSoluction 解决办法 + */ + public static void throwBusiException(String errorCode,String errorDetail,String errorSoluction,Object...args){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(errorCode) + .setErrorDetail(errorDetail,args) + .setErrorSolution(errorSoluction) + .build(); + } + /** + * 抛异常 + * + * @param + */ + public static void throwMesBusiException(String errorDetailString, Object... args) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail(errorDetailString,args) + .build(); + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskModel.java new file mode 100644 index 0000000..4666aec --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskModel.java @@ -0,0 +1,36 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +@Builder +public class MesReworkTaskModel { + /** + * 条码 + */ + private String sn; + /** + * 返工单 + */ + private String reworkOrder; + /** + * 返工单零件对应的图片信息 + */ + private MesPartTypePicture mesPartTypePicture; + /** + * 缺陷信息 + */ + private MesPartInspection mesPartInspection; + /** + * 缺陷明细 + */ + private List mesPartInspectionDetails; + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java new file mode 100644 index 0000000..2e89b5c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java @@ -0,0 +1,44 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +public class MesReworkTaskRequestModel { + + /** + * 条码 + */ + private String sn; + /** + * 条码 + */ + private String custSn; + /** + * 返工单 + */ + private String reworkOrder; + + /** + * 零件号 + */ + private String partNo; + /** + * + */ + private String assemblyPartNo; + /** + * + */ + private String organizeCode; + + private Integer assemblyPartStatus; + + private Long detailId; + +}