From 2ef4f1e2f07c2abf1622793169b388f0831815b0 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 7 Sep 2024 19:50:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=99=E5=8C=85=E7=BB=91=E5=AE=9A=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesRecyclablePackageBindingService.java | 37 +++ .../IMesRecyclablePackageService.java | 34 +++ .../MesRecyclablePackageBindingController.java | 65 +++++ .../MesRecyclablePackageBindingServiceImpl.java | 275 +++++++++++++++++++++ .../MesRecyclablePackageServiceImpl.java | 91 +++++++ .../model/MesRecyclablePackageBindingModel.java | 34 +++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 5 + 7 files changed, 541 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/recyclablepackage/MesRecyclablePackageBindingController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageServiceImpl.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesRecyclablePackageBindingModel.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java new file mode 100644 index 0000000..80a1931 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesRecyclablePackageBindingModel; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 料箱绑定 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/7 10:27 + * @Modify: + **/ +public interface IMesRecyclablePackageBindingService { + + @ApiOperation("查询回收包装绑定明细") + List findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid); + + @ApiOperation("查询回收包装绑定明细数量") + int findMesRecyclablePackageBindingDetailByPidCount(String organizeCode, long pid); + + @ApiOperation("查询回收包装绑定明细") + List findMesRecyclablePackageBindingDetailByProductSn(String organizeCode, String productSn); + + @ApiOperation("查询回收包装绑定") + MesRecyclablePackageBinding getMesRecyclablePackageBindingByPackageSn(String organizeCode, String packageSn); + + @ApiOperation("查询回收包装绑定明细") + List findMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel); + + @ApiOperation("扫描信息") + MesRecyclablePackageBinding doScan(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageService.java new file mode 100644 index 0000000..8daedd4 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageService.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 回收包装 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/7 10:27 + * @Modify: + **/ +public interface IMesRecyclablePackageService { + + @ApiOperation("查询回收包装") + MesRecyclablePackage getMesRecyclablePackageByPackageSn(String organizeCode, String packageSn); + + @ApiOperation("校验回收包装") + MesRecyclablePackage checkMesRecyclablePackage(String organizeCode, String packageSn); + + @ApiOperation("查询回收包装零件") + List findMesRecyclablePackagePartByPackageTypeCode(String organizeCode, String packageTypeCode); + + @ApiOperation("查询回收包装零件") + MesRecyclablePackagePart getMesRecyclablePackagePartByPackageTypeCodeAndPartNo(String organizeCode, String packageTypeCode, String partNo); + + @ApiOperation("查询回收包装类型") + MesRecyclablePackageType getMesRecyclablePackageTypeByPackageTypeCode(String organizeCode, String packageTypeCode); + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/recyclablepackage/MesRecyclablePackageBindingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/recyclablepackage/MesRecyclablePackageBindingController.java new file mode 100644 index 0000000..8f94b5a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/recyclablepackage/MesRecyclablePackageBindingController.java @@ -0,0 +1,65 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi.recyclablepackage; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesRecyclablePackageBindingModel; +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.*; + +/** + * @Description : 料箱绑定 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/6 16:35 + * @Modify: + **/ + +@RestController +@Api(tags = "料箱绑定") +@RequestMapping(MesCommonConstant.MES_YANFEN + "/recyclable-package-binding") +@Slf4j +public class MesRecyclablePackageBindingController { + + @Autowired + private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService; + + + @GetMapping("/recyclable-package-binding-detail/query") + @ApiOperation(value = "查询绑定信息") + public ResultBean findMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + + try { + ValidatorBean.checkNotNull(mesRecyclablePackageBindingModel.getPackageSn(), "包条码不能为空"); + ValidatorBean.checkNotNull(mesRecyclablePackageBindingModel.getOrganizeCode(), "工厂代码不能为空"); + return ResultBean.success("查询成功").setResultList(mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping("/doScan") + @ApiOperation(value = "扫描信息") + public ResultBean doScan(@RequestBody MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + + try { + ValidatorBean.checkNotNull(mesRecyclablePackageBindingModel.getPackageSn(), "包条码不能为空"); + ValidatorBean.checkNotNull(mesRecyclablePackageBindingModel.getOrganizeCode(), "工厂代码不能为空"); + ValidatorBean.checkNotNull(mesRecyclablePackageBindingModel.getType(), "操作类型不能为空"); + ValidatorBean.checkNotNull(mesRecyclablePackageBindingModel.getUserName(), "操作人不能为空"); + return ResultBean.success("操作成功").setResultObject(mesRecyclablePackageBindingService.doScan(mesRecyclablePackageBindingModel)); + } 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/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java new file mode 100644 index 0000000..f123fda --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java @@ -0,0 +1,275 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackage; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesRecyclablePackageBindingModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +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.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; +import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @Description : 料箱绑定 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/7 10:20 + * @Modify: + **/ +@Service +@Slf4j +public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePackageBindingService { + + @Autowired + private IMesRecyclablePackageService mesRecyclablePackageService; + + @Autowired + private MesRecyclablePackageBindingRepository mesRecyclablePackageBindingRepository; + + @Autowired + private MesRecyclablePackageBindingDetailRepository mesRecyclablePackageBindingDetailRepository; + + @Autowired + private IMesProduceSnExtService mesProduceSnExtService; + + @Autowired + private IMesPartService mesPartService; + + @Override + public List findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) { + return null; + } + return mesRecyclablePackageBindingDetailRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PID}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), pid}); + + } + + @Override + public int findMesRecyclablePackageBindingDetailByPidCount(String organizeCode, long pid) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) { + return MesPcnExtConstWords.ZERO; + } + return mesRecyclablePackageBindingDetailRepository.findByPropertyCount( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PID}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), pid}); + + } + + @Override + public List findMesRecyclablePackageBindingDetailByProductSn(String organizeCode, String productSn) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(productSn)) { + return null; + } + return mesRecyclablePackageBindingDetailRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PRODUCT_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn}); + } + + @Override + public MesRecyclablePackageBinding getMesRecyclablePackageBindingByPackageSn(String organizeCode, String packageSn) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(packageSn)) { + return null; + } + return mesRecyclablePackageBindingRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageSn}); + } + + @Override + public List findMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + //回收包装绑定 + MesRecyclablePackageBinding mesRecyclablePackageBinding = getMesRecyclablePackageBindingByPackageSn(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); + if (Objects.isNull(mesRecyclablePackageBinding)) { + return null; + } + //回收包装绑定明细 + return findMesRecyclablePackageBindingDetailByPid(mesRecyclablePackageBinding.getOrganizeCode(), mesRecyclablePackageBinding.getId()); + } + + @Override + public MesRecyclablePackageBinding doScan(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + MesRecyclablePackageBinding mesRecyclablePackageBinding = null; + switch (mesRecyclablePackageBindingModel.getType()) { + //扫描包条码 + case 10: + mesRecyclablePackageBinding = doScanPackageSn(mesRecyclablePackageBindingModel); + break; + //扫描零件条码 + case 20: + mesRecyclablePackageBinding = doScanProductSn(mesRecyclablePackageBindingModel); + break; + //清空 + case 30: + mesRecyclablePackageBinding = deletedMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel, true); + break; + //删除 + case 40: + mesRecyclablePackageBinding = deletedMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel, false); + break; + //关箱 + case 50: + mesRecyclablePackageBinding = updateClosePackageBinding(mesRecyclablePackageBindingModel); + break; + default: + MesPcnException.throwMesBusiException("扫描类型【%s】不存在", mesRecyclablePackageBindingModel.getType()); + break; + } + return mesRecyclablePackageBinding; + + } + + private MesRecyclablePackageBinding doScanPackageSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + //校验包装 + MesRecyclablePackage mesRecyclablePackage = mesRecyclablePackageService.checkMesRecyclablePackage(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); + //绑定主表信息 + MesRecyclablePackageBinding mesRecyclablePackageBinding = getMesRecyclablePackageBindingByPackageSn(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); + if (Objects.isNull(mesRecyclablePackageBinding)) { + //保存包装 + mesRecyclablePackageBinding = insertMesRecyclablePackageBinding(mesRecyclablePackageBindingModel, mesRecyclablePackage.getPackageTypeCode()); + } + return mesRecyclablePackageBinding; + } + + private MesRecyclablePackageBinding doScanProductSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + ValidatorBean.checkNotNull(mesRecyclablePackageBindingModel.getProductSn(), "零件条码不能为空"); + //校验箱 + MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); + if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() == mesRecyclablePackageBinding.getStatus()) { + MesPcnException.throwMesBusiException("包条码【%s】已关箱", mesRecyclablePackageBinding.getPackageSn()); + } + //校验零件条码是否扫描 + checkIsScan(mesRecyclablePackageBindingModel); + //条码信息 + MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel); + //记录绑定明细 + insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn); + //更新数量 + mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); + //自动关箱 + if (getRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackageBinding.getPackageTypeCode(), mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) { + mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue()); + } + ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); + mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); + return mesRecyclablePackageBinding; + } + + private void checkIsScan(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + List detailByProductSn = findMesRecyclablePackageBindingDetailByProductSn(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn()); + if (!CollectionUtils.isEmpty(detailByProductSn)) { + MesPcnException.throwMesBusiException("零件条码【%s】已绑定,请勿重复绑定", mesRecyclablePackageBindingModel.getProductSn()); + } + } + + private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + List produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn()); + if (CollectionUtils.isEmpty(produceSnList)) { + MesPcnException.throwMesBusiException("条码【%s】信息不存在", mesRecyclablePackageBindingModel.getProductSn()); + } + return produceSnList.stream().sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()).iterator().next(); + } + + private MesRecyclablePackagePart getRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, String packageTypeCode, String partNo) { + MesPartSap mesPartSapByPartNo = mesPartService.getMesPartSapByPartNo(partNo, mesRecyclablePackageBindingModel.getOrganizeCode()); + MesRecyclablePackagePart recyclablePackagePart = mesRecyclablePackageService.getMesRecyclablePackagePartByPackageTypeCodeAndPartNo(mesRecyclablePackageBindingModel.getOrganizeCode(), packageTypeCode, mesPartSapByPartNo.getPartNo()); + if (Objects.isNull(recyclablePackagePart)) { + MesPcnException.throwMesBusiException("条码【%s】找不到对应的零件", mesRecyclablePackageBindingModel.getProductSn()); + } + return recyclablePackagePart; + } + + private void insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) { + MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = new MesRecyclablePackageBindingDetail(); + mesRecyclablePackageBindingDetail.setOrganizeCode(mesRecyclablePackageBinding.getOrganizeCode()); + mesRecyclablePackageBindingDetail.setPid(mesRecyclablePackageBinding.getId()); + mesRecyclablePackageBindingDetail.setProductSn(mesProduceSn.getProductSn()); + mesRecyclablePackageBindingDetail.setPartNo(mesProduceSn.getPartNo()); + mesRecyclablePackageBindingDetail.setPartName(mesProduceSn.getPartName()); + mesRecyclablePackageBindingDetail.setQty(MesPcnExtConstWords.ONE); + mesRecyclablePackageBindingDetail.setStatus(MesPcnExtConstWords.ZERO); + mesRecyclablePackageBindingDetail.setLotNumber(mesProduceSn.getLotNo()); + ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingDetail, userName); + mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail); + } + + private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, String packageTypeCode) { + MesRecyclablePackageBinding mesRecyclablePackageBinding = new MesRecyclablePackageBinding(); + mesRecyclablePackageBinding.setOrganizeCode(mesRecyclablePackageBindingModel.getOrganizeCode()); + mesRecyclablePackageBinding.setPackageSn(mesRecyclablePackageBindingModel.getPackageSn()); + mesRecyclablePackageBinding.setHangerPackageSn(mesRecyclablePackageBindingModel.getPackageSn()); + mesRecyclablePackageBinding.setPackageTypeCode(packageTypeCode); + mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.UNCLOSED.getValue()); + mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO); + mesRecyclablePackageBinding.setFid(UUID.randomUUID().toString()); + ConvertBean.serviceModelInitialize(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); + return mesRecyclablePackageBindingRepository.insert(mesRecyclablePackageBinding); + } + + private MesRecyclablePackageBinding deletedMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, boolean deleteAll) { + if (!deleteAll && (Objects.isNull(mesRecyclablePackageBindingModel.getDetailsIds()) || mesRecyclablePackageBindingModel.getDetailsIds().length <= 0)) { + MesPcnException.throwMesBusiException("请选择要删除的数据"); + } + //删除数据 + MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesRecyclablePackageBindingModel.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesRecyclablePackageBinding.getId(), "pid", packBean); + DdlPreparedPack.getInPackArray(mesRecyclablePackageBindingModel.getDetailsIds(), "id", packBean); + mesRecyclablePackageBindingDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "isDeleted"}, + new Object[]{mesRecyclablePackageBindingModel.getUserName(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}, packBean); + //更新数量 + mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); + ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); + mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); + return mesRecyclablePackageBinding; + } + + private MesRecyclablePackageBinding updateClosePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { + MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); + if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() == mesRecyclablePackageBinding.getStatus()) { + MesPcnException.throwMesBusiException("包条码【%s】已关,不能重复关箱,请重新扫描", mesRecyclablePackageBinding.getPackageSn()); + } + if (findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBinding.getOrganizeCode(), mesRecyclablePackageBinding.getId()) <= MesPcnExtConstWords.ZERO) { + MesPcnException.throwMesBusiException("包条码【%s】明细不能为空,请扫描零件明细", mesRecyclablePackageBinding.getPackageSn()); + } + //更新未关箱状态 + mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue()); + ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); + mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); + return mesRecyclablePackageBinding; + } + + private MesRecyclablePackageBinding getPackageBinding(String organizeCode, String packageSn) { + MesRecyclablePackageBinding mesRecyclablePackageBinding = getMesRecyclablePackageBindingByPackageSn(organizeCode, packageSn); + if (Objects.isNull(mesRecyclablePackageBinding)) { + MesPcnException.throwMesBusiException("回收包装【%s】绑定信息不存在", packageSn); + } + return mesRecyclablePackageBinding; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageServiceImpl.java new file mode 100644 index 0000000..31686ad --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageServiceImpl.java @@ -0,0 +1,91 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackage; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; +import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackagePartRepository; +import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageRepository; +import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageTypeRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +/** + * @Description : 回收包装 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/7 10:20 + * @Modify: + **/ +@Service +@Slf4j +public class MesRecyclablePackageServiceImpl implements IMesRecyclablePackageService { + + @Autowired + private MesRecyclablePackageRepository mesRecyclablePackageRepository; + + @Autowired + private MesRecyclablePackagePartRepository mesRecyclablePackagePartRepository; + + @Autowired + private MesRecyclablePackageTypeRepository mesRecyclablePackageTypeRepository; + + @Override + public MesRecyclablePackage getMesRecyclablePackageByPackageSn(String organizeCode, String packageSn) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(packageSn)) { + return null; + } + return mesRecyclablePackageRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageSn}); + } + + @Override + public MesRecyclablePackage checkMesRecyclablePackage(String organizeCode, String packageSn) { + MesRecyclablePackage recyclablePackage = this.getMesRecyclablePackageByPackageSn(organizeCode, packageSn); + if (Objects.isNull(recyclablePackage)) { + MesPcnException.throwMesBusiException("包条码【%s】信息不存在", packageSn); + } + return recyclablePackage; + } + + @Override + public List findMesRecyclablePackagePartByPackageTypeCode(String organizeCode, String packageTypeCode) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(packageTypeCode)) { + return null; + } + return mesRecyclablePackagePartRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_TYPE_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageTypeCode}); + + } + + @Override + public MesRecyclablePackagePart getMesRecyclablePackagePartByPackageTypeCodeAndPartNo(String organizeCode, String packageTypeCode, String partNo) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(packageTypeCode) || StringUtil.isEmptyAndNull(partNo)) { + return null; + } + return mesRecyclablePackagePartRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_TYPE_CODE, MesPcnExtConstWords.PART_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageTypeCode, partNo}); + + } + + @Override + public MesRecyclablePackageType getMesRecyclablePackageTypeByPackageTypeCode(String organizeCode, String packageTypeCode) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(packageTypeCode)) { + return null; + } + return mesRecyclablePackageTypeRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_TYPE_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageTypeCode}); + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesRecyclablePackageBindingModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesRecyclablePackageBindingModel.java new file mode 100644 index 0000000..123c618 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesRecyclablePackageBindingModel.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import io.swagger.annotations.ApiParam; +import lombok.Builder; +import lombok.Data; + +/** + * @Description : 料箱绑定 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/6 16:37 + * @Modify: + **/ +@Data +@Builder +public class MesRecyclablePackageBindingModel { + @ApiParam("操作人") + private String userName; + + @ApiParam("工厂代码") + private String organizeCode; + + @ApiParam("包条码") + private String packageSn; + + @ApiParam("零件条码") + private String productSn; + + @ApiParam("操作类型") + private Integer type; + + @ApiParam("删除明细ID") + private Long[] detailsIds; +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index f4d53c5..03207a3 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -181,6 +181,11 @@ public class MesPcnExtConstWords { public static final String CAR_MODEL_CODE = "carModelCode"; // 客户订单号 public static final String CUST_ORDER_NO = "custOrderNo"; + //包条码 + public static final String PACKAGE_SN = "packageSn"; + //包类型 + public static final String PACKAGE_TYPE_CODE = "packageTypeCode"; + // 客制化条码长度:通用 public static final Integer CUSTOMER_SN_LENGTH_GM = 58;