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 index 8a78ff0..090521f 100644 --- 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 @@ -39,7 +39,7 @@ public interface IMesReworkTaskService { void doAssemblySnRepeat(MesReworkTaskRequestModel requestModel); - void reworkSuccess(MesReworkTaskRequestModel requestModel); + void doReworkSuccess(MesReworkTaskRequestModel requestModel); MesProduceSnPrintModel doPrint(MesReworkTaskRequestModel requestModel); 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 index 3aebb98..cfc5ab7 100644 --- 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 @@ -17,5 +17,5 @@ import java.util.List; public interface IMesJisShippingService { @ApiOperation(value = "构筑发运报工数据") - List getJisShipping(MesShippingOrderManagement orderManagement, List orderManagementDetailList, String org); + List getJisShipping(MesShippingOrderManagement orderManagement, List orderManagementDetailList,String userName); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPartPullService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPartPullService.java new file mode 100644 index 0000000..b864aca --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPartPullService.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description: + * @CreateDate 2024/09/12 + * @Author gsz + */ +public interface IMesPartPullService { + + @ApiOperation(value = "查询拉动组") + List queryMesPartPull(MesPartPull mesPartPull); +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java index 1ce8025..c0967f4 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnPrintService.java @@ -2,8 +2,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; import io.swagger.annotations.ApiOperation; +import java.util.List; + public interface IMesProduceSnPrintService { @ApiOperation(value = "查询包装信息") @@ -14,4 +17,7 @@ public interface IMesProduceSnPrintService { @ApiOperation(value = "打印") MesProduceSnPrintModel doPrint(MesProduceSnPrintModel mesProduceSnPrintModel); + + @ApiOperation(value = "装配件查询") + List findMesProductionAssembly(MesProductionAssembly mesProductionAssembly); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPullingOrderInfoService.java new file mode 100644 index 0000000..484ec2b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPullingOrderInfoService.java @@ -0,0 +1,24 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import io.swagger.annotations.ApiOperation; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @CreateDate 2024/09/12 + * @Author gsz + */ +public interface IMesPullingOrderInfoService { + + @ApiOperation(value = "查询拉动单") + ListPager queryMesPullingOrderInfoByPager(MesPullingOrderInfo mesPullingOrderInfo, Pager pager); + + void doMesPullingOrderInfoScan(MesPullingOrderInfo mesPullingOrderInfo, String userName); + + List doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo, String userName); +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java index 1626c33..04fcafd 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java @@ -1,11 +1,14 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; +import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description : * @Reference : @@ -27,6 +30,9 @@ public interface IMesSortShippingCheckService { @ApiOperation(value = "查询发运单-自动推单") MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org); + @ApiOperation("保存发运数据") + List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName); + void update(MesShippingOrderManagement item); void updateDetail(MesShippingOrderManagementDetail item); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingLogService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingLogService.java new file mode 100644 index 0000000..42076b0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingLogService.java @@ -0,0 +1,33 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage; + +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.MesRecyclablePackageBindingLog; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 回收包装绑定LOG + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/13 10:04 + * @Modify: + **/ +public interface IMesRecyclablePackageBindingLogService { + + @ApiOperation("写入操作记录(创建)") + MesRecyclablePackageBindingLog insertCreate(MesRecyclablePackageBinding mesRecyclablePackageBinding); + + @ApiOperation("写入操作记录(关箱)") + MesRecyclablePackageBindingLog insertClose(MesRecyclablePackageBinding mesRecyclablePackageBinding); + + @ApiOperation("写入操作记录(绑定)") + MesRecyclablePackageBindingLog insertBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail); + + @ApiOperation("写入操作记录(解绑)") + MesRecyclablePackageBindingLog insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail); + + @ApiOperation("写入操作记录(解绑)") + void insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List mesRecyclablePackageBindingDetail); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPartPullController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPartPullController.java new file mode 100644 index 0000000..4c5bf7a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPartPullController.java @@ -0,0 +1,47 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPartPullService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; +import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 拉动组 + */ +@Api("拉动组") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN+ "/mesPartPull") +public class MesPartPullController { + + @Autowired + private IMesPartPullService mesPartPullService; + + @GetMapping(value = "/query") + @ApiOperation(value = "查询拉动组") + public ResultBean queryMesPartPull(MesPartPull mesPartPull) { + try { + mesPartPull.setOrganizeCode(mesPartPull.getOrganizeCode()); + List partInspectionList= mesPartPullService.queryMesPartPull(mesPartPull); + return ResultBean.success("查询成功").setResultList(partInspectionList); + + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java index 3b6e679..ed0ac1f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnPrintService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -97,4 +98,20 @@ public class MesProduceSnPrintController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + @GetMapping("/mes-production-assembly/find") + @ApiOperation(value = "装配件查询") + public ResultBean findMesProductionAssembly(MesProductionAssembly mesProductionAssembly) { + try { + ValidatorBean.checkNotNull(mesProductionAssembly.getAssemblySn(), "装配件条码条码不能为空"); + ValidatorBean.checkNotNull(mesProductionAssembly.getOrganizeCode(), "工厂代码不能为空"); + return ResultBean.success("查询成功") + .setMsg(String.format("装配件【%s】条码查询成功!!!", mesProductionAssembly.getAssemblySn())) + .setResultList(mesProduceSnPrintService.findMesProductionAssembly(mesProductionAssembly)); + } 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/MesPullingOrderInfoController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java new file mode 100644 index 0000000..0400409 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java @@ -0,0 +1,97 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.*; +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 org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 拉动单 + */ +@Api("拉动单扫描工位端") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN+ "/mesPullingOrderInfo") +public class MesPullingOrderInfoController { + + @Autowired + private IMesPullingOrderInfoService mesPullingOrderInfoService; + + @Autowired + private IMesTemplateService mesTemplateService; + @GetMapping(value = "/query-pager") + @ApiOperation(value = "查询拉动单") + public ResultBean queryMesProdShiftRecord(MesPullingOrderInfo mesPullingOrderInfo, Pager pager) { + try { + mesPullingOrderInfo.setOrganizeCode(mesPullingOrderInfo.getOrganizeCode()); + ListPager partInspectionListPager = mesPullingOrderInfoService.queryMesPullingOrderInfoByPager(mesPullingOrderInfo, pager); + return ResultBean.success("查询成功").setListPager(partInspectionListPager); + + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + @PostMapping(value = "/doScan") + @ApiOperation(value = "拉动单扫描") + public ResultBean doMesPullingOrderInfoScan(@RequestBody MesPullingOrderInfo mesPullingOrderInfo) { + try { + if (StringUtils.isEmpty(mesPullingOrderInfo.getPullingOrderNo())) { + throw new ImppBusiException("拉动单号不能为空"); + } + mesPullingOrderInfoService.doMesPullingOrderInfoScan(mesPullingOrderInfo, !StringUtils.isEmpty(mesPullingOrderInfo.getModifyUser())?mesPullingOrderInfo.getModifyUser(): AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("拉动单扫描成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + @PostMapping(value = "/doPrint") + @ApiOperation(value = "打印未打印拉动单后修改状态") + public ResultBean doMesPullingOrderInfoPrint(@RequestBody MesPullingOrderInfo mesPullingOrderInfo) { + try { + if (StringUtils.isEmpty(mesPullingOrderInfo.getWorkCenterCode())) { + throw new ImppBusiException("产线不能为空"); + } + List pullingOrderInfos = mesPullingOrderInfoService.doMesPullingOrderInfoPrint(mesPullingOrderInfo, AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("拉动单打印成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(pullingOrderInfos); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + @GetMapping("/template") + @ApiOperation(value = "查询打印模板和明细") + public ResultBean queryMesLabelTemplate(MesLabelTemplate labelTemplate ) { + try { + ValidatorBean.checkNotNull(labelTemplate.getTemplateCode(), "打印模板不能为空"); + ValidatorBean.checkNotNull(labelTemplate.getOrganizeCode(), "工厂代码不能为空"); + return ResultBean.success("查询成功").setResultObject(mesTemplateService.getMesLabelTemplate(labelTemplate.getTemplateCode(), labelTemplate.getOrganizeCode())); + + } 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/MesReworkTaskController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java index 33e1321..97d3b31 100644 --- 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 @@ -148,11 +148,11 @@ public class MesReworkTaskController { @PostMapping("/reworkSuccess") @ApiOperation(value = "返工成功") - public ResultBean reworkSuccess(@RequestBody MesReworkTaskRequestModel requestModel) { + public ResultBean doReworkSuccess(@RequestBody MesReworkTaskRequestModel requestModel) { // 数据校验 //ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空"); try { - mesReworkTaskService.reworkSuccess(requestModel); + mesReworkTaskService.doReworkSuccess(requestModel); return ResultBean.success("返工成功"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java index cb15499..2104a06 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java @@ -62,7 +62,7 @@ public class MesSortShippingCheckController { // 数据校验 ValidatorBean.checkNotNull(shippingOrderManagement.getShippingCode(), "发运单不能为空"); shippingOrderManagement.setOrganizeCode(organizeCode); - ConvertBean.serviceModelUpdate(shippingOrderManagement,!StringUtils.isEmpty(shippingOrderManagement.getModifyUser()) ? shippingOrderManagement.getModifyUser() : AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(shippingOrderManagement, userInfo); MesSortShippingCheckModel model = sortShippingCheckService.doShippingOrderNoQuery(shippingOrderManagement); return ResultBean.success("查询成功").setResultObject(model); } catch (ImppBusiException imppException) { 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 index b571944..a82f7af 100644 --- 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 @@ -130,6 +130,9 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { @Autowired private IMesProductVersionService mesProductVersionService; + @Autowired + private MesQmsScrapRepository mesQmsScrapRepository; + @Override public ListPager queryReworkTask(MesReworkTask mesReworkTask, Pager pager) { String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode(); @@ -252,7 +255,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { } @Override - public void reworkSuccess(MesReworkTaskRequestModel requestModel) { + public void doReworkSuccess(MesReworkTaskRequestModel requestModel) { MesReworkTask mesReworkTask = getMesReworkTask(requestModel); /** @@ -262,13 +265,27 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { if (!CollectionUtils.isEmpty(reworkTaskDetails)) { MesPcnException.throwFlowException("还有位置未返工完成,请检查"); } + MesPartInspection mesPartInspection = null; + if (!StringUtils.isEmpty(mesReworkTask.getId())){ + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesReworkTask.getId(), "reworkTaskId", packBean); + mesPartInspection = mesPartInspectionRepository.getByProperty(packBean); + if (!StringUtils.isEmpty(mesReworkTask.getId())){ + if(!CollectionUtils.isEmpty(requestModel.getAssemblyModelList())){ + mesPartInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.DISASSEMBLY.getValue()); + } + mesPartInspection.setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(mesPartInspection, requestModel.getUserName()); + mesPartInspectionRepository.update(mesPartInspection); + } + } if (MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue() == mesReworkTask.getType()) { mesReworkTask.setReworkedQty(requestModel.getReworkedQty()); mesReworkTask.setScrapQty(requestModel.getScrapQty()); } else { //拆解 if(!CollectionUtils.isEmpty(requestModel.getAssemblyModelList())){ - doAssemblyDisassembly(requestModel, mesReworkTask.getSn()); + doAssemblyDisassembly(requestModel, mesReworkTask.getSn(),Objects.isNull(mesPartInspection)?"":mesPartInspection.getResponsibleParty()); } if (MesExtEnumUtil.NC_TYPE.REWORK.getValue() == requestModel.getType()) { @@ -284,16 +301,6 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { mesReworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()); ConvertBean.serviceModelUpdate(mesReworkTask,requestModel.getUserName()); mesReworkTaskRepository.save(mesReworkTask); - if (!StringUtils.isEmpty(mesReworkTask.getId())){ - DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(mesReworkTask.getId(), "reworkTaskId", packBean); - MesPartInspection mesPartInspection = mesPartInspectionRepository.getByProperty(packBean); - if (!StringUtils.isEmpty(mesReworkTask.getId())){ - mesPartInspection.setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelUpdate(mesPartInspection, requestModel.getUserName()); - mesPartInspectionRepository.update(mesPartInspection); - } - } } @Override @@ -333,7 +340,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { snList.add(sn); mesProduceSnPrintModel.getMesProduceSnList().addAll(snList); //发送新老条码关系给WMS - createMove(requestModel.getSn(),sn.getProductSn(),organizeCode,requestModel.getUserName()); + doCreateMove(requestModel.getSn(),sn.getProductSn(),organizeCode,requestModel.getUserName()); //更新条码 ConvertBean.serviceModelUpdate(sn,requestModel.getUserName()); mesProduceSnRepository.update(sn); @@ -556,15 +563,17 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { public void recursionAssemblySnTree(List assemblyTree, MesReworkTaskRequestModel requestModel,long pid) { for (MesProductionAssemblyModel assembly : assemblyTree) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(assembly.getAssemblySn(), "productSn", packBean); - DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(), "assemblyStatus", packBean); - List mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean); assembly.setPid(pid); - if (!CollectionUtils.isEmpty(mesProductionAssemblies)) { - assembly.setChildren(parseArray(mesProductionAssemblies)); - recursionAssemblySnTree(assembly.getChildren(), requestModel, assembly.getId()); + if(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getValue() == assembly.getMatchType() && !StringUtils.isEmpty(assembly.getAssemblySn())){ + DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(assembly.getAssemblySn(), "productSn", packBean); + DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(), "assemblyStatus", packBean); + List mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(mesProductionAssemblies)) { + assembly.setChildren(parseArray(mesProductionAssemblies)); + recursionAssemblySnTree(assembly.getChildren(), requestModel, assembly.getId()); + } } } } @@ -603,14 +612,16 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { mesProduceSnRepository.update(oldProduceSn); } - private void doAssemblyDisassembly(MesReworkTaskRequestModel requestModel, String productSn) { + private void doAssemblyDisassembly(MesReworkTaskRequestModel requestModel, String productSn,String responsibleParty) { + //报废目标库位 + String destLocateNo = getDestLocateNo(requestModel.getOrganizeCode(), productSn); //总成拆解 - doProductReportReversal(requestModel,productSn); + doProductReportReversal(requestModel,productSn,destLocateNo); //装配件数据处理 - recursionCheck(requestModel.getAssemblyModelList(), requestModel.getOrganizeCode(), requestModel.getUserName(),mesConfigService.getCfgValue(requestModel.getOrganizeCode(), MesPcnExtConstWords.DISASSEMBLY_DEST_LOCATE)); + doRecursionCheck(requestModel.getAssemblyModelList(), requestModel.getOrganizeCode(), requestModel.getUserName(),destLocateNo,responsibleParty); } - private void doProductReportReversal(MesReworkTaskRequestModel requestModel, String productSn) { + private void doProductReportReversal(MesReworkTaskRequestModel requestModel, String productSn,String locateNo) { //更新条码状态为总成拆解 MesProduceSn produceSnDb = getMesProduceSn(requestModel.getOrganizeCode(), productSn); produceSnDb.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_DISASSEMBLY.getValue()); @@ -632,7 +643,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { mesWorkOrderService.doProductReportReversal(mesWorkOrderDb,productVersion, requestModel.getUserName()); //移库 requestModel.setSn(produceSnDb.getProductSn()); - createMove(requestModel,getDestLocateNo(requestModel.getOrganizeCode(), produceSnDb.getProductSn()),productVersion.getReceiveInventoryPoint(),mesWorkOrderDb.getErpWorkCenter(),mesWorkOrderDb.getPartNo()); + doCreateMove(requestModel,locateNo,productVersion.getReceiveInventoryPoint(),mesWorkOrderDb.getErpWorkCenter(),mesWorkOrderDb.getPartNo()); } private MesProductVersion getProductVersion(MesWorkOrder mesWorkOrderDb) { @@ -643,7 +654,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { return mesProductVersion; } - public void recursionCheck(List assemblyModelList,String organizeCode,String userName,String destLocate){ + public void doRecursionCheck(List assemblyModelList,String organizeCode,String userName,String destLocate,String responsibleParty){ for (MesProductionAssemblyModel assemblyModel : assemblyModelList) { //勾选 if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { @@ -652,10 +663,16 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { updateOldSn(organizeCode,assemblyModel.getAssemblySn(), userName, MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()); } //对于已勾选报废的子件,对于有零件号的项,产生移库(产线的材料库位->报废库(系统参数配置))。移库数量为报废时的明细数量; - createMove(getMesWorkCenter(organizeCode, assemblyModel.getWorkCenterCode()),destLocate, assemblyModel,userName); + if(!StringUtils.isEmpty(assemblyModel.getAssemblyPartNo())){ + //移库 + doCreateMove(getMesWorkCenter(organizeCode, assemblyModel.getWorkCenterCode()),destLocate, assemblyModel,userName); + //报废 + doCreateScrap(assemblyModel,userName,responsibleParty,organizeCode); + } + //循环处理数据 if(!CollectionUtils.isEmpty(assemblyModel.getChildren())){ - recursionCheck(assemblyModel.getChildren(),organizeCode,userName,destLocate); + doRecursionCheck(assemblyModel.getChildren(),organizeCode,userName,destLocate,responsibleParty); } } else if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { //装配解绑 @@ -754,7 +771,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { private MesWorkCenter getMesWorkCenter(String organizeCode, String workCenterCode) { MesWorkCenter workCenterDb = prodOrgExtService.getWorkCenterDb(organizeCode,workCenterCode); - if(Objects.isNull(workCenterDb)) MesPcnException.throwFlowException("产线【%s】信息不存在", workCenterCode); + if(Objects.isNull(workCenterDb)) MesPcnException.throwFlowException(String.format("产线【%s】信息不存在", workCenterCode)); return workCenterDb; } @@ -835,7 +852,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { mesProduceSnRepository.update(produceSn); } - private MesMove createMove(String oldSn, String sn, String organizeCode, String userName) { + private MesMove doCreateMove(String oldSn, String sn, String organizeCode, String userName) { MesMove move = new MesMove(); move.setOrganizeCode(organizeCode); move.setFactoryCode(organizeCode); @@ -848,7 +865,23 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { return moveRepository.insert(move); } - private void createMove(MesWorkCenter mesWorkCenter, String destLocate, MesProductionAssemblyModel assemblyModel,String userName) { + private void doCreateScrap(MesProductionAssemblyModel assemblyModel,String userName,String responsibleParty,String organizeCode) { + //新增一条数据到报废表中 + MesQmsScrap mesQmsScrap = new MesQmsScrap(); + mesQmsScrap.setOrganizeCode(organizeCode); + mesQmsScrap.setAsnNo(""); + mesQmsScrap.setSource("MES"); + mesQmsScrap.setRejectQty(assemblyModel.getScrapQty().intValue()); + mesQmsScrap.setPartNo(assemblyModel.getAssemblyPartNo()); + mesQmsScrap.setPartName(assemblyModel.getAssemblyPartName()); + mesQmsScrap.setDefectTypeName("拆解报废"); + mesQmsScrap.setReponsibilityId(responsibleParty); + mesQmsScrap.setNcJudger(userName); + ConvertBean.serviceModelInitialize(mesQmsScrap, userName); + mesQmsScrapRepository.insert(mesQmsScrap); + } + + private void doCreateMove(MesWorkCenter mesWorkCenter, String destLocate, MesProductionAssemblyModel assemblyModel,String userName) { MesMove move = new MesMove(); move.setMatnr(assemblyModel.getAssemblyPartNo()); move.setOrganizeCode(mesWorkCenter.getOrganizeCode()); @@ -865,7 +898,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { moveRepository.insert(move); } - private void createMove(MesReworkTaskRequestModel requestModel,String srcLocate, String destLocate,String workCenterCode,String partNo) { + private void doCreateMove(MesReworkTaskRequestModel requestModel,String srcLocate, String destLocate,String workCenterCode,String partNo) { MesPartSap mesPartSap = mesPartService.getMesPartSapByPartNo(partNo, requestModel.getOrganizeCode()); MesMove move = new MesMove(); move.setMatnr(mesPartSap.getPartNo()); 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/MesJisShippingServiceImpl.java similarity index 77% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingService.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesJisShippingServiceImpl.java index f14cd5d..94cc0b0 100644 --- 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/MesJisShippingServiceImpl.java @@ -10,7 +10,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; -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; @@ -30,7 +29,7 @@ import java.util.UUID; **/ @Service @Slf4j -public class MesJisShippingService implements IMesJisShippingService { +public class MesJisShippingServiceImpl implements IMesJisShippingService { @Autowired private IMesPartShippingGroupService mesPartShippingGroupService; @@ -38,8 +37,10 @@ public class MesJisShippingService implements IMesJisShippingService { @Autowired private IMesConfigService configService; - public List getJisShipping(MesShippingOrderManagement orderManagement, List orderManagementDetailList, String org) { - MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, orderManagement.getShippingGroupCode()); + public List getJisShipping(MesShippingOrderManagement orderManagement, List orderManagementDetailList,String userName) { + MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(orderManagement.getOrganizeCode(), orderManagement.getShippingGroupCode()); + String warerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WARERHOUSE") : mesPartShippingGroup.getSrcWarerhouse(); + String erpWarehous = configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WAREHOUS"); List jisShippingList = new ArrayList<>(); orderManagementDetailList.forEach(k -> { MesJisShipping jisShipping = new MesJisShipping(); @@ -47,8 +48,8 @@ public class MesJisShippingService implements IMesJisShippingService { BeanUtils.copyProperties(k, jisShipping, "id"); jisShipping.setFactoryCode(orderManagement.getCustOrganizeCode()); jisShipping.setShippingTime(TimeTool.getNowTime(true)); - jisShipping.setErpWarerhouse(mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(org, "ERP_WARERHOUSE"): mesPartShippingGroup.getSrcWarerhouse()); - jisShipping.setErpWarehous(configService.getCfgValue(org, "ERP_WAREHOUS")); + jisShipping.setErpWarerhouse(warerhouse); + jisShipping.setErpWarehous(erpWarehous); jisShipping.setDock(orderManagement.getSendDockCode()); jisShipping.setCusCode(orderManagement.getCustCode()); jisShipping.setCusDock(orderManagement.getCustDockCode()); @@ -59,7 +60,7 @@ public class MesJisShippingService implements IMesJisShippingService { jisShipping.setShippingOrderCode(orderManagement.getShippingCode()); jisShipping.setFid(UUID.randomUUID().toString()); jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE); - ConvertBean.serviceModelInitialize(jisShipping, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(jisShipping, userName); jisShippingList.add(jisShipping); }); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartPullService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartPullService.java new file mode 100644 index 0000000..51859b7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartPullService.java @@ -0,0 +1,43 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPartPullService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; +import cn.estsh.i3plus.pojo.mes.repository.*; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + + +@Service +@Slf4j +public class MesPartPullService implements IMesPartPullService { + public static final Logger LOGGER = LoggerFactory.getLogger(MesPartPullService.class); + + @Autowired + private MesPartPullRepository mesPartPullRDao; + @Autowired + private MesPartPullDetailRepository mesPartPullDetailRDao; + @Autowired + private MesWorkOrderPartRepository workOrderPartRepository; + @Autowired + private MesWorkCenterRepository mesWorkCenterRepository; + + @Override + public List queryMesPartPull(MesPartPull bean) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); + + packBean.setOrderByStr(bean.orderBy()); + + return mesPartPullRDao.findByHqlWhere(packBean); + + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java index 05764d7..bbf41be 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnPrintService.java @@ -68,6 +68,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { @Autowired private MesCustomerPartRepository mesCustomerPartRDao; + @Autowired + private MesProductionAssemblyRepository mesProductionAssemblyRepository; @Autowired private IConfigService configService; @@ -216,4 +218,21 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService { MesCustomerPart mesCustomerPart = mesCustomerPartRDao.getByProperty(ddlPackBean); return mesCustomerPart; } + + @Override + public List findMesProductionAssembly(MesProductionAssembly requestModel) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(requestModel.getAssemblySn(), "assemblySn", packBean); + if (!StringUtils.isEmpty(requestModel.getPartNo())) { + DdlPreparedPack.getStringEqualPack(requestModel.getPartNo(), "partNo", packBean); + } + if (!StringUtils.isEmpty(requestModel.getAssemblyPartNo())) { + DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean); + } + List mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(mesProductionAssemblies)) { + MesPcnException.throwMesBusiException("扫描的装配件条码【%s】条码不存在,请扫描其他的装配件!!!",requestModel.getAssemblySn()); + } + return mesProductionAssemblies; + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java new file mode 100644 index 0000000..24b1a30 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java @@ -0,0 +1,170 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +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.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + + +@Service +@Slf4j +public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { + public static final Logger LOGGER = LoggerFactory.getLogger(MesPullingOrderInfoService.class); + @Autowired + private MesPullingOrderInfoRepository mesPullingOrderInfoRepository; + @Autowired + private MesPullingOrderPartInfoRepository mesPullingOrderPartInfoRepository; + @Autowired + private MesPartPullRepository mesPartPullRDao; + @Autowired + private MesPartPullDetailRepository mesPartPullDetailRDao; + @Autowired + private MesWorkOrderPartRepository workOrderPartRepository; + + @Autowired + private MesWorkCenterRepository mesWorkCenterRepository; + @Autowired + private MesPullingOrderExtendsRepository mesPullingOrderExtendsRepository; + + @Override + public ListPager queryMesPullingOrderInfoByPager(MesPullingOrderInfo bean, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + setPackQueryBean(bean, packBean); + if (!StringUtil.isEmpty(bean.orderBy())) { + packBean.setOrderByStr(bean.orderBy()); + } else { + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + } + // + if (!StringUtil.isEmpty(bean.getCreateDatetime())) { + DdlPreparedPack.getStringBiggerPack(bean.getCreateDatetime(), "createDatetime", packBean); + } + pager = PagerHelper.getPager(pager, mesPullingOrderInfoRepository.findByHqlWhereCount(packBean)); + + List resultList = mesPullingOrderInfoRepository.findByHqlWherePage(packBean, pager); + + return new ListPager<>(resultList, pager); + } + + protected void setPackQueryBean(MesPullingOrderInfo bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getPullOrderType(), "pullOrderType", packBean); + DdlPreparedPack.getNumEqualPack(bean.getPrintStatus(), "printStatus", packBean); + //已确认、已扫描、已发送设备 + if (StringUtil.isEmpty(bean.getPullOrderStatus())) { + DdlPreparedPack.getInPackList(Arrays.asList( + MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(), + MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue(), + MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()), "pullOrderStatus", packBean); + } else { + DdlPreparedPack.getNumEqualPack(bean.getPullOrderStatus(), "pullOrderStatus", packBean); + } + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + } + + @Override + public void doMesPullingOrderInfoScan(MesPullingOrderInfo bean, String userName) { + //校验是不是第一行数据 + DdlPackBean packBeanOne = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBeanOne); + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBeanOne); + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBeanOne); +// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(), "pullOrderStatus", packBeanOne); + MesPullingOrderInfo mesPullingOrderInfo = mesPullingOrderInfoRepository.getByProperty(packBeanOne); + if (StringUtil.isEmpty(mesPullingOrderInfo)) { + MesPcnException.throwMesBusiException("扫描拉动单号【%s】查询数据为空", bean.getPullingOrderNo()); + } + if (mesPullingOrderInfo.getPullOrderStatus() != MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue()) { + MesPcnException.throwMesBusiException("扫描拉动单号【%s】拉动单状态不是【已确认】", bean.getPullingOrderNo()); + } + + //强过码 如果强过为true 不校验顺序 直接扫描完成修改状态为已扫描 todo + if ((!Objects.isNull(bean.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == bean.getIsPass())) { + mesPullingOrderInfo.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue()); + ConvertBean.serviceModelUpdate(mesPullingOrderInfo, userName); + mesPullingOrderInfoRepository.update(mesPullingOrderInfo); + } else { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getPullOrderType(), "pullOrderType", packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(), "pullOrderStatus", packBean); +// if (!StringUtil.isEmpty(bean.orderBy())) { +// packBean.setOrderByStr(bean.orderBy()); +// } else { + //顺序校验 根据未扫描单号 1 、2 、3,如果没有强过码 必须先扫1 再扫2 + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"pullingOrderNo"}, packBean); +// } + List pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(pullingOrderInfos)) { + //按照排序 依次扫描,如果扫描不按照顺序 报错 + MesPullingOrderInfo pullingOrderInfo = pullingOrderInfos.get(0); + if (pullingOrderInfo.getPullOrderStatus().equals(mesPullingOrderInfo.getPullOrderStatus())) { + mesPullingOrderInfo.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue()); + ConvertBean.serviceModelUpdate(mesPullingOrderInfo, userName); + mesPullingOrderInfoRepository.update(mesPullingOrderInfo); + } else { + MesPcnException.throwMesBusiException("扫描拉动单号【%s】SPS排序单校验顺序错误", bean.getPullingOrderNo()); + } + } else { + MesPcnException.throwMesBusiException("扫描拉动单号产线拉动组【%s】数据为空", bean.getPullingOrderNo()); + } + } + + } + + @Override + public List doMesPullingOrderInfoPrint(MesPullingOrderInfo bean, String userName) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + //多选 + if(!StringUtil.isEmpty(bean.getPullCode())){ + DdlPreparedPack.getInPackList(Arrays.asList(bean.getPullCode().split(",")), "pullCode", packBean); + } + if(!StringUtil.isEmpty(bean.getWorkCenterCode())){ + DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkCenterCode().split(",")), "workCenterCode", packBean); + } + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), "printStatus", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + List pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(pullingOrderInfos)) { + //把查出来的拉动单打印并修改打印状态为已打印 + for (MesPullingOrderInfo pullingOrderInfo : pullingOrderInfos) { + //查询拉动组明细 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(pullingOrderInfo.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(pullingOrderInfo.getPullingOrderNo(), "pullingOrderNo", partPackBean); + List pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(pullingOrderPartInfos)) { + pullingOrderInfo.setPartCount(pullingOrderPartInfos.size()); + pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos); + } + + pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + ConvertBean.serviceModelUpdate(pullingOrderInfo, userName); + } + mesPullingOrderInfoRepository.saveAll(pullingOrderInfos); + } + return pullingOrderInfos; + } +} 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 5c2ddcd..36e9902 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,7 +1,7 @@ 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.api.busi.IMesSortShippingCheckService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel; @@ -11,6 +11,7 @@ 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.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; @@ -48,21 +49,23 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS @Autowired private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; @Autowired - private MesProduceSnRepository produceSnRepository; - @Autowired - private IMesJisShippingService jisShippingService; - @Autowired private MesJisShippingRepository jisShippingRepository; @Autowired private MesPartShippingGroupService mesPartShippingGroupService; + @Autowired + private IMesSortShippingCheckService mesSortShippingCheckService; + + @Override public MesShippingLoadingCheckModel doLoadingOrderNoQuery(MesLoadingList loadingList) { //校验装车单 MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode(),loadingList.getIsPass(),loadingList.getModifyUser()); - + if(Objects.isNull(loadingListResult)){ + return null; + } //若生成装车单,则一定有装车单明细 DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(loadingListResult.getId(), "pid", orderDetailPackBean); @@ -141,7 +144,8 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS //MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode,model.getIsPass(),userInfo); //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 - if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){ + //1 跳过 + if(!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,model.getIsPass())){ Optional loadingListDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst(); if(loadingListDetailOptional.isPresent()){ MesLoadingListDetail loadingListDetail = loadingListDetailOptional.get(); @@ -222,12 +226,8 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS vehiclesOrderDetailList.forEach(k -> { if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() == k.getStatus()){ k.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.PUBLISHED.getValue()); // todo 不改变为发运状态 - }else if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue() == k.getStatus()){ - //关闭发运单明细 - closeOrder(loadingList, k, userInfo); } k.setSystemSyncStatus(CommonEnumUtil.FALSE); -// k.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); todo 不改变为发运状态 ConvertBean.serviceModelUpdate(k, userInfo); }); @@ -259,10 +259,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS loadingListDetail.setStatus(status); //根据是否启动记忆判断 若启用记忆,则根据保存数据库 if (Objects.equals(loadingList.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { - //关闭跳过的单据 - if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue() == status){ - closeOrder(loadingList, loadingListDetail, userName); - } //若装车单状态为创建或发布已生成ASN 则写入开始扫描时间 if (loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() || loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() || @@ -279,18 +275,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS } } - private void closeOrder(MesLoadingList loadingList, MesLoadingListDetail loadingListDetail, String userName) { - //关闭发运单明细 -// List idList = new ArrayList<>(); -// idList.add(loadingList.getId()); -// List mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(),idList); -// if(!CollectionUtils.isEmpty(mesShippingOrderManagementList)){ -// closeShippingOrderDetails(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.SHIP_PASS, mesShippingOrderManagementList.stream().filter(t-> loadingListDetail.getShippingCode().equals(t.getShippingCode())).map(MesShippingOrderManagement::getId).collect(Collectors.toList())); -// } -// //关闭发运单 -// closeShippingOrder(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.SHIP_PASS, mesShippingOrderManagementList.stream().filter(t-> loadingListDetail.getShippingCode().equals(t.getShippingCode())).map(MesShippingOrderManagement::getId).collect(Collectors.toList())); - } - private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) { MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode); if(Objects.isNull(shippingGroup)){ @@ -326,6 +310,17 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getDescription(), MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getDescription())); } + //跳过 + if (Objects.equals(MesPcnExtConstWords.THREE, isPass)) { + //跳过的单据和明细,系统默认是完成的 + loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue()); + loadingList.setRemark(MesPcnExtConstWords.SHIP_PASS); + ConvertBean.serviceModelUpdate(loadingList, userName); + vehiclesOrderRepository.update(loadingList); + //明细跳过 + updateLoadingList(loadingList, userName); + return null; + } //增加发运顺序卡控,查询是否存在小于当前装车单对应的seq,且发运状态在(“创建”,“已确认”,“已生成ASN”,“装车中”)的装车单数据 List loadingListStatusList = new ArrayList<>(); loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue()); @@ -333,7 +328,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getValue()); loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue()); List statusList = new ArrayList<>(); - statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue()); statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue()); statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.ASN.getValue()); //最后一个扫描完成的装车单信息 @@ -352,14 +346,11 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS DdlPreparedPack.getInPackList(loadingListStatusList, "status", orderPackBean); boolean exit = vehiclesOrderRepository.isExitByHql(orderPackBean); if (exit) { - //强过 - if((!Objects.isNull(isPass) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isPass)){ - //updateLoadingListClose(loadingListStatusList,loadingList,userName); - DdlPackBean packBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(loadingList.getId(), "id",packBean); - vehiclesOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","remark"}, - new Object[]{userName, TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean); - + //1强过 + if((!Objects.isNull(isPass) && Objects.equals(MesPcnExtConstWords.ONE,isPass))) { + loadingList.setRemark(MesPcnExtConstWords.STRONGER_PASS); + ConvertBean.serviceModelUpdate(loadingList,userName); + vehiclesOrderRepository.update(loadingList); }else { throw new ImppBusiException(String.format("【%s】装车单对应排序【%s】前存在未扫描发运的装车单,请检查数据!", orderCode, loadingList.getSeq())); @@ -385,68 +376,61 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS vehiclesOrderDetailRepository.update(item); } - - private void updateLoadingListClose(List loadingListStatusList,MesLoadingList loadingList,String userName){ - List mesLoadingList = getMesLoadingListList(loadingListStatusList, loadingList); - if(CollectionUtils.isEmpty(mesLoadingList)) return; - List idList = mesLoadingList.stream().map(MesLoadingList::getId).distinct().collect(Collectors.toList()); + private void updateLoadingList(MesLoadingList loadingList, String userName) { + List mesLoadingListDetailList = getMesLoadingListList(loadingList.getId(), loadingList.getOrganizeCode()); + if (CollectionUtils.isEmpty(mesLoadingListDetailList)) return; + List shippingCodeList = mesLoadingListDetailList.stream().map(MesLoadingListDetail::getShippingCode).distinct().collect(Collectors.toList()); //关闭装发运单明细 - List mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), idList); - if(!CollectionUtils.isEmpty(mesShippingOrderManagementList)){ - closeShippingOrderDetails(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.STRONGER_PASS, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); + List mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), shippingCodeList); + if (!CollectionUtils.isEmpty(mesShippingOrderManagementList)) { + //发送数据给wms + for (MesShippingOrderManagement mesShippingOrderManagement : mesShippingOrderManagementList) { + jisShippingRepository.saveAll(mesSortShippingCheckService.getMesJisShippings(mesShippingOrderManagement, userName)); + } + //关闭发运单明细 + closeShippingOrderDetails(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); } //关闭发运单 - closeShippingOrder(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.STRONGER_PASS, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); - //关闭装车单明细 - closeLoadingDetails(loadingList.getOrganizeCode(), userName, idList); - //关闭装车单 - closeLoadingOrder(loadingList.getOrganizeCode(), userName, idList); + closeShippingOrder(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); + //明细跳过 + updateLoadingDetails(loadingList.getOrganizeCode(), userName, loadingList.getId()); } - private void closeShippingOrderDetails(String organizeCode, String userName,String remark, List idList) { - if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; + private void closeShippingOrderDetails(String organizeCode, String userName, List idList) { + if (CollectionUtils.isEmpty(idList) || StringUtils.isEmpty(organizeCode)) return; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList, "pid",packBean); - shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, - new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),remark}, packBean); + DdlPreparedPack.getInPackList(idList, "pid", packBean); + shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status", "remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean); } - private List getMesShippingOrderManagementList(String organizeCode, List idList) { + private List getMesShippingOrderManagementList(String organizeCode, List shippingCodeList) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList,"loadingListId",packBean); + DdlPreparedPack.getInPackList(shippingCodeList, "shippingCode", packBean); return shippingOrderManagementRepository.findByHqlWhere(packBean); } - private void closeShippingOrder(String organizeCode, String userName,String remark, List idList) { - if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; + private void closeShippingOrder(String organizeCode, String userName, List idList) { + if (CollectionUtils.isEmpty(idList) || StringUtils.isEmpty(organizeCode)) return; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList, "id",packBean); - shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, - new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),remark}, packBean); + DdlPreparedPack.getInPackList(idList, "id", packBean); + shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status", "remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean); } - private void closeLoadingDetails(String organizeCode, String userName, List idList) { - if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; + private List getMesLoadingListList(long id, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList, "pid",packBean); - vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, - new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + DdlPreparedPack.getNumEqualPack(id, "pid", packBean); + DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(), "status", packBean); + return vehiclesOrderDetailRepository.findByHqlWhere(packBean); } - private void closeLoadingOrder(String organizeCode, String userName, List idList) { - if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; + private void updateLoadingDetails(String organizeCode, String userName, long id) { + if (StringUtil.isEmptyAndNull(id) || StringUtils.isEmpty(organizeCode)) return; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList, "id",packBean); - vehiclesOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, - new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.MES_LOADING_STATUS.CLOSED.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); - } - - private List getMesLoadingListList(List loadingListStatusList, MesLoadingList loadingList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); - DdlPreparedPack.getStringSmallerNotEqualPack(loadingList.getSeq(), "seq", packBean); - DdlPreparedPack.getStringEqualPack(loadingList.getPartShippingGroupCode(),"partShippingGroupCode",packBean); - DdlPreparedPack.getInPackList(loadingListStatusList, "status", packBean); - return vehiclesOrderRepository.findByHqlWhere(packBean); + DdlPreparedPack.getNumEqualPack(id, "pid", packBean); + vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status", "remark"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean); } } 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 2a127ee..3b094c5 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 @@ -98,6 +98,17 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService MesExtEnumUtil.SHIPPING_ORDER_STATUS.valueOfDescription(orderManagement.getStatus()), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription())); } + //跳过 + if (Objects.equals(MesPcnExtConstWords.THREE, shippingOrderManagement.getIsPass())) { + //跳过的单据和明细,系统默认是完成的 + orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()); + orderManagement.setRemark(MesPcnExtConstWords.SHIP_PASS); + ConvertBean.serviceModelUpdate(orderManagement, shippingOrderManagement.getModifyUser()); + vehiclesOrderRepository.update(orderManagement); + //明细跳过 + updateShippingOrderDetails(orderManagement.getOrganizeCode(), shippingOrderManagement.getModifyUser(), orderManagement.getId()); + return null; + } //校验发运单扫描顺序 List statusForCheckList = new ArrayList<>(); @@ -106,8 +117,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue()); List status = new ArrayList<>(); - status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); - status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue()); status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()); status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.LOADING.getValue()); status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICSING.getValue()); @@ -129,12 +138,11 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService DdlPreparedPack.getInPackList(statusForCheckList, "status", orderManagementPackBean); boolean exists = shippingOrderManagementRepository.isExitByHql(orderManagementPackBean); if (exists) { - if((!Objects.isNull(shippingOrderManagement.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == shippingOrderManagement.getIsPass())){ - //updateLoadingListClose(statusForCheckList,orderManagement,shippingOrderManagement.getModifyUser()); - DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "id",packBean); - shippingOrderManagementRepository.updateByProperties(new String[]{"forceFlag","modifyUser", "modifyDatetime","remark"}, - new Object[]{MesPcnExtConstWords.STRONGER_PASS,shippingOrderManagement.getModifyUser(), TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean); + //1强过 + if((!Objects.isNull(shippingOrderManagement.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,shippingOrderManagement.getIsPass()))){ + orderManagement.setRemark(MesPcnExtConstWords.STRONGER_PASS); + ConvertBean.serviceModelUpdate(orderManagement,shippingOrderManagement.getModifyUser()); + vehiclesOrderRepository.update(orderManagement); }else{ throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单,请检查数据!", orderManagement.getShippingCode(), orderManagement.getSeq())); @@ -143,20 +151,20 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据! if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) { - - if (StringUtils.isEmpty(orderManagement.getOrderCode()) ) { + //查询装车单明细 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(orderManagement.getShippingCode(),"shippingCode",packBean); + MesLoadingListDetail listDetail = listDetailRepository.getByProperty(packBean); + if(Objects.isNull(listDetail)){ throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没绑定装车单号,请检查数据!", shippingOrderManagement.getShippingCode())); } - - - DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(orderManagement.getOrderCode(), "orderCode", orderDetailPackBean); - MesLoadingList loadingList = listRepository.getByProperty(orderDetailPackBean); - if (StringUtils.isEmpty(loadingList)) { + packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean); + MesLoadingList loadingList = listRepository.getByProperty(packBean); + if(Objects.isNull(loadingList)){ throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没生成装车单,请检查数据!", shippingOrderManagement.getShippingCode())); } - //判断是否先装车 if (Objects.equals(orderManagement.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) { @@ -215,7 +223,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, orderManagement.getShippingGroupCode()); //根据条码找到对应的物料号,若物料号一致,则修改扫描flg,将flg改为true. //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 - if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){ + //1 跳过 + if(!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,model.getIsPass())){ Optional shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); if(shippingOrderManagementDetailOptional.isPresent()){ MesShippingOrderManagementDetail mesShippingOrderManagementDetail = shippingOrderManagementDetailOptional.get(); @@ -551,7 +560,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){ //保存当前发运单明细报工 - jisShippingRepository.saveAll(getMesJisShippings(organizeCode, orderManagement)); + jisShippingRepository.saveAll(getMesJisShippings(orderManagement,userInfo)); }else{ //查询装车单明细 DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -570,7 +579,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService List shippingOrderManagementList = shippingOrderManagementRepository.findByHqlWhere(jisBean); for (MesShippingOrderManagement mesShippingOrderManagement : shippingOrderManagementList) { //保存当前发运单明细报工 - jisShippingRepository.saveAll(getMesJisShippings(organizeCode, mesShippingOrderManagement)); + jisShippingRepository.saveAll(getMesJisShippings(mesShippingOrderManagement,userInfo)); } if(!StringUtil.isEmpty(vehiclesOrderDetail)){ @@ -587,12 +596,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } - private List getMesJisShippings(String organizeCode, MesShippingOrderManagement mesShippingOrderManagement) { - DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + public List getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName) { + DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean); List shippingOrderManagementDetails = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean); //当前装车单所有发运单明细 需要报工的数据 - return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails, organizeCode); + return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails,userName); } @Override @@ -607,48 +616,11 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService shippingOrderManagementDetailRepository.update(item); } - private void updateLoadingListClose(List loadingListStatusList,MesShippingOrderManagement orderManagement,String userName){ - List mesShippingOrderManagementList = getMesLoadingListList(loadingListStatusList, orderManagement); - if(CollectionUtils.isEmpty(mesShippingOrderManagementList)) return; - List idList = mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).distinct().collect(Collectors.toList()); - //关闭发运单明细 - closeShippingOrderDetails(orderManagement.getOrganizeCode(), userName, idList); - //关闭发运单 - closeShippingOrder(orderManagement.getOrganizeCode(), userName, idList); - //更新装车单明细 - updateLoadingDetails(orderManagement.getOrganizeCode(), userName, idList); - } - - private List getMesLoadingListList(List statusForCheckList, MesShippingOrderManagement orderManagement) { - if(StringUtils.isEmpty(orderManagement.getShippingGroupCode()) || StringUtils.isEmpty(orderManagement.getSeq())) return null; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); - DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", packBean); - DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(),"shippingGroupCode",packBean); - DdlPreparedPack.getInPackList(statusForCheckList, "status", packBean); - return shippingOrderManagementRepository.findByHqlWhere(packBean); - } - - private void closeShippingOrderDetails(String organizeCode, String userName, List idList) { - if(CollectionUtils.isEmpty(idList) || StringUtils.isEmpty(organizeCode)) return; + private void updateShippingOrderDetails(String organizeCode, String userName, long id) { + if(StringUtils.isEmpty(id) || StringUtils.isEmpty(organizeCode)) return; DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList, "pid",packBean); + DdlPreparedPack.getNumEqualPack(id, "pid",packBean); shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, - new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(), MesPcnExtConstWords.STRONGER_PASS}, packBean); - } - - private void closeShippingOrder(String organizeCode, String userName, List idList) { - if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList, "id",packBean); - shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, - new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); - } - - private void updateLoadingDetails(String organizeCode, String userName, List idList) { - if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(idList, "shippingId",packBean); - vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, - new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingLogServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingLogServiceImpl.java new file mode 100644 index 0000000..d507b4b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingLogServiceImpl.java @@ -0,0 +1,97 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackage; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingLogService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +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.MesRecyclablePackageBindingLog; +import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingLogRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import groovy.util.logging.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 : 回收包装绑定LOG + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/13 9:18 + * @Modify: + **/ +@Service +@Slf4j +public class MesRecyclablePackageBindingLogServiceImpl implements IMesRecyclablePackageBindingLogService { + + @Autowired + private MesRecyclablePackageBindingLogRepository mesRecyclablePackageBindingLogRepository; + + @Override + public MesRecyclablePackageBindingLog insertCreate(MesRecyclablePackageBinding mesRecyclablePackageBinding) { + return insert(mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.CREATE); + } + + @Override + public MesRecyclablePackageBindingLog insertClose(MesRecyclablePackageBinding mesRecyclablePackageBinding) { + return insert(mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.CLOSE); + } + + @Override + public MesRecyclablePackageBindingLog insertBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) { + return insert(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.BINDING); + } + + @Override + public MesRecyclablePackageBindingLog insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) { + return insert(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.UN_BINDING); + } + + @Override + public void insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List mesRecyclablePackageBindingDetailList) { + List logList = new ArrayList<>(); + MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog; + for (MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail : mesRecyclablePackageBindingDetailList) { + mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog(); + BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME); + //明细数据填充 + mesRecyclablePackageBindingLog.setPackageSn(mesRecyclablePackageBindingDetail.getProductSn()); + mesRecyclablePackageBindingLog.setPartNo(mesRecyclablePackageBindingDetail.getPartNo()); + mesRecyclablePackageBindingLog.setPartName(mesRecyclablePackageBindingDetail.getPartName()); + mesRecyclablePackageBindingLog.setQty(mesRecyclablePackageBindingDetail.getQty()); + mesRecyclablePackageBindingLog.setOrderCode(mesRecyclablePackageBindingDetail.getOrderCode()); + mesRecyclablePackageBindingLog.setLotNumber(mesRecyclablePackageBindingDetail.getLotNumber()); + mesRecyclablePackageBindingLog.setModifyType(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.UN_BINDING.getValue()); + ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBindingDetail.getModifyUser()); + logList.add(mesRecyclablePackageBindingLog); + } + mesRecyclablePackageBindingLogRepository.saveAll(logList); + } + + public MesRecyclablePackageBindingLog insert(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE modifyType) { + MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog(); + BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME); + mesRecyclablePackageBindingLog.setModifyType(modifyType.getValue()); + ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBinding.getModifyUser()); + return mesRecyclablePackageBindingLogRepository.insert(mesRecyclablePackageBindingLog); + } + + + public MesRecyclablePackageBindingLog insert(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE modifyType) { + MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog(); + BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME); + //明细数据填充 + mesRecyclablePackageBindingLog.setPackageSn(mesRecyclablePackageBindingDetail.getProductSn()); + mesRecyclablePackageBindingLog.setPartNo(mesRecyclablePackageBindingDetail.getPartNo()); + mesRecyclablePackageBindingLog.setPartName(mesRecyclablePackageBindingDetail.getPartName()); + mesRecyclablePackageBindingLog.setQty(mesRecyclablePackageBindingDetail.getQty()); + mesRecyclablePackageBindingLog.setOrderCode(mesRecyclablePackageBindingDetail.getOrderCode()); + mesRecyclablePackageBindingLog.setLotNumber(mesRecyclablePackageBindingDetail.getLotNumber()); + mesRecyclablePackageBindingLog.setModifyType(modifyType.getValue()); + ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBindingDetail.getModifyUser()); + return mesRecyclablePackageBindingLogRepository.insert(mesRecyclablePackageBindingLog); + } +} 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 index 32bfa83..1727335 100644 --- 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 @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackag import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingLogService; 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; @@ -56,6 +57,9 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac @Autowired private IMesPartService mesPartService; + @Autowired + private IMesRecyclablePackageBindingLogService mesRecyclablePackageBindingLogService; + @Override public List findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid) { if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) { @@ -192,23 +196,25 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac //查询包装零件 List packagePartList = mesRecyclablePackageService.checkMesRecyclablePackagePart(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackage.getPackageTypeCode()); //条码信息 - MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel,packagePartList); + MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel, packagePartList); //记录绑定明细 - insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn); + MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn); //更新数量 mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); //自动关箱 - if (!Objects.isNull(packageType.getCheckPartNoFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packageType.getCheckPartNoFlag() && getMesRecyclablePackagePart(packagePartList,mesRecyclablePackage.getPackageTypeCode(), mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) { + if (!Objects.isNull(packageType.getCheckPartNoFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packageType.getCheckPartNoFlag() && getMesRecyclablePackagePart(packagePartList, mesRecyclablePackage.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); + //记录日志 + mesRecyclablePackageBindingLogService.insertBinding(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail); return mesRecyclablePackageBinding; } - private MesRecyclablePackagePart getMesRecyclablePackagePart(List packagePartList,String packageTypeCode, String partNo) { + private MesRecyclablePackagePart getMesRecyclablePackagePart(List packagePartList, String packageTypeCode, String partNo) { Optional packagePart = packagePartList.stream().filter(t -> t.getPartNo().equals(partNo)).findFirst(); - if(!packagePart.isPresent()){ + if (!packagePart.isPresent()) { MesPcnException.throwMesBusiException("回用包装类型【%s】零件【%s】数据不存在", packageTypeCode, partNo); } return packagePart.get(); @@ -221,12 +227,12 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac } } - private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,List mesRecyclablePackagePartList) { + private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List mesRecyclablePackagePartList) { List produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn()); if (CollectionUtils.isEmpty(produceSnList)) { //外协件校验 MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList.stream().filter(t -> !Objects.isNull(t.getProductSnCheckType()) && MesExtEnumUtil.PRODUCT_SN_CHECK_TYPE.PRODUCT_SN_CHECK_TYPE_20.getValue() == t.getProductSnCheckType()).collect(Collectors.toList())); - if(Objects.isNull(mesRecyclablePackagePart)){ + if (Objects.isNull(mesRecyclablePackagePart)) { MesPcnException.throwMesBusiException("条码【%s】不存在", mesRecyclablePackageBindingModel.getProductSn()); } //封装数据 @@ -243,7 +249,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List mesRecyclablePackagePartList) { //外协件 MesRecyclablePackagePart checkPassRecyclablePackagePart = null; - if(!CollectionUtils.isEmpty(mesRecyclablePackagePartList)){ + if (!CollectionUtils.isEmpty(mesRecyclablePackagePartList)) { for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) { // 校验正则表达式 if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) { @@ -255,11 +261,11 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac return checkPassRecyclablePackagePart; } - private boolean checkRule(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,String rule) { + private boolean checkRule(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, String rule) { return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn(), rule, rule).get(MesPcnExtConstWords.RESULT); } - private void insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) { + private MesRecyclablePackageBindingDetail insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) { MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = new MesRecyclablePackageBindingDetail(); mesRecyclablePackageBindingDetail.setOrganizeCode(mesRecyclablePackageBinding.getOrganizeCode()); mesRecyclablePackageBindingDetail.setPid(mesRecyclablePackageBinding.getId()); @@ -271,7 +277,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac mesRecyclablePackageBindingDetail.setLotNumber(mesProduceSn.getLotNo()); mesRecyclablePackageBindingDetail.setSubType(Objects.isNull(mesProduceSn.getId()) ? MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_20.getValue() : MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_10.getValue()); ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingDetail, userName); - mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail); + return mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail); } private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { @@ -284,6 +290,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO); mesRecyclablePackageBinding.setFid(UUID.randomUUID().toString()); ConvertBean.serviceModelInitialize(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); + mesRecyclablePackageBindingLogService.insertCreate(mesRecyclablePackageBinding); return mesRecyclablePackageBindingRepository.insert(mesRecyclablePackageBinding); } @@ -293,18 +300,37 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac } //删除数据 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); + List bindingDetailList = findRecyclablePackageBindingDetailList(mesRecyclablePackageBindingModel, mesRecyclablePackageBinding); + for (MesRecyclablePackageBindingDetail detail : bindingDetailList) { + detail.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + detail.setSystemSyncDatetime(MesPcnExtConstWords.EMPTY); + ConvertBean.serviceModelUpdate(detail, mesRecyclablePackageBindingModel.getUserName()); + } + mesRecyclablePackageBindingDetailRepository.saveAll(bindingDetailList); //更新数量 mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); + if (mesRecyclablePackageBinding.getTotalQty() <= MesPcnExtConstWords.ZERO) { + mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.UNPACKED.getValue()); + } ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); + //记录日志 + mesRecyclablePackageBindingLogService.insertUnBinding(mesRecyclablePackageBinding, bindingDetailList); return mesRecyclablePackageBinding; } + private List findRecyclablePackageBindingDetailList(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, MesRecyclablePackageBinding mesRecyclablePackageBinding) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesRecyclablePackageBindingModel.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesRecyclablePackageBinding.getId(), "pid", packBean); + DdlPreparedPack.getInPackArray(mesRecyclablePackageBindingModel.getDetailsIds(), "id", packBean); + List bindingDetailList = mesRecyclablePackageBindingDetailRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(bindingDetailList)) { + MesPcnException.throwMesBusiException("请选择数据信息不存在"); + } + return bindingDetailList; + } + private MesRecyclablePackageBinding updateClosePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() == mesRecyclablePackageBinding.getStatus()) { @@ -317,6 +343,8 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue()); ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); + //记录日志 + mesRecyclablePackageBindingLogService.insertClose(mesRecyclablePackageBinding); return mesRecyclablePackageBinding; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/processmethod/MesProcessMethodSourceBoxInOutServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/processmethod/MesProcessMethodSourceBoxInOutServiceImpl.java new file mode 100644 index 0000000..1e89236 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/processmethod/MesProcessMethodSourceBoxInOutServiceImpl.java @@ -0,0 +1,15 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.processmethod; + +import groovy.util.logging.Slf4j; +import org.springframework.stereotype.Service; +/** + * @Description : 原箱进原箱出 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/12 21:24 + * @Modify: + **/ +@Service +@Slf4j +public class MesProcessMethodSourceBoxInOutServiceImpl { +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProcessMethodSourceBoxInOutStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProcessMethodSourceBoxInOutStepService.java new file mode 100644 index 0000000..54d036f --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProcessMethodSourceBoxInOutStepService.java @@ -0,0 +1,201 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService; +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.context.MesProductionPsInContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail; +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.util.MesExtEnumUtil; +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.*; +import java.util.stream.Collectors; + +/** + * @Description : 原箱进原箱出 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/12 11:20 + * @Modify: + **/ +@Slf4j +@Service("mesProcessMethodSourceBoxInOutStepService") +public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Autowired + private IConfigService configService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()){ + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + } + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文生产扫/读信息:可回用包装条码 + List equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean); + if (CollectionUtils.isEmpty(equipVariableCollectContextList)){ + return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!"); + } + + //清除本次已获取得到的可回用包装条码信息 + productionDispatchContextStepService.removeScanRecyclablePackageContext(reqBean); + + //从上下文中取出工位对象 + MesWorkCell workCell = productionProcessContext.getWorkCell(); + + List productionPsInContextList = new ArrayList<>(); + + if (!sourceBoxInOut(reqBean, equipVariableCollectContextList, stepResult, productionPsInContextList, workCell).isCompleted()) { + return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + } + + //获取进料主条码数据信息 + List productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean); + if (!CollectionUtils.isEmpty(productionPsInContext)) { + productionPsInContextList.addAll(productionPsInContext); + } + + //保存进料主条码数据 + productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("可回用包装条码%s状态成功!", equipVariableCollectContextList.iterator().next().getEquipVariableValue())); + } + + + public StepResult sourceBoxInOut(StationRequestBean reqBean, List equipVariableCollectContextList, StepResult stepResult, List productionPsInContextList, MesWorkCell workCell) { + //获取包装绑定主表 + MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue()); + if (Objects.isNull(recyclablePackageBinding)) + return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]信息不存在", equipVariableCollectContextList.iterator().next().getEquipVariableValue())); + //校验状态 + if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() != recyclablePackageBinding.getStatus()) { + return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]状态不为[已关箱]", equipVariableCollectContextList.iterator().next().getEquipVariableValue())); + } + //获取绑定明细信息 + List bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId()); + + if (CollectionUtils.isEmpty(bindingDetailList)) + return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]明细信息不存在", equipVariableCollectContextList.iterator().next().getEquipVariableValue())); + //查询条码信息 + Map> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList())); + for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) { + //外协件 + if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())) { + for (int i = 0; i < bindingDetail.getQty(); i++) { + productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource())); + } + //自制件 + } else { + createProductionPsInContext(reqBean, stepResult, workCell, equipVariableCollectContextList.iterator().next(), produceSnMap.get(bindingDetail.getProductSn()), productionPsInContextList); + } + } + return stepResult; + } + + + private StepResult createProductionPsInContext(StationRequestBean reqBean, StepResult stepResult, MesWorkCell workCell, + MesEquipVariableCollectContext equipVariableCollectContext, List produceSnList, List productionPsInContextList) { + + String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY; + + List unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) { + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size())); + } + + if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) { + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), + unknowList.stream().filter(Objects::nonNull).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)))); + } + + produceSnList = produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); + + MesProduceSn produceSn = produceSnList.get(0); + + if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()))); + + if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()))); + + //正常条码 + if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { + + productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); + + return stepResult; + } + + //未知条码【工序为空 代表新做的工序没有加工完成】 + if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { + + productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + + return stepResult; + } + + //未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】 + if (StringUtils.isEmpty(produceSn.getProcessCode())) { + + productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + + return stepResult; + } + + //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 + productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); + + return stepResult; + + } + + private Boolean checkAllowUnknowCenterCfg(StationRequestBean reqBean) { + List configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode()); + if (CollectionUtils.isEmpty(configList)) return true; + List allowUnknowCenterList = Arrays.asList(configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(MesPcnExtConstWords.COMMA)).split(MesPcnExtConstWords.COMMA)); + return CollectionUtils.isEmpty(allowUnknowCenterList) || !allowUnknowCenterList.contains(reqBean.getWorkCenterCode()); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageMatchStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageMatchStepService.java deleted file mode 100644 index a5f0f59..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageMatchStepService.java +++ /dev/null @@ -1,226 +0,0 @@ -//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -// -//import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; -//import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -//import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; -//import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; -//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -//import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; -//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -//import cn.estsh.i3plus.pojo.mes.bean.*; -//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding; -//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail; -//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.model.StepResult; -//import cn.estsh.i3plus.pojo.mes.repository.MesStationRepository; -//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -//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.*; -//import java.util.stream.Collectors; -//import java.util.stream.Stream; -// -///** -// * @Description : 可回用包装条码匹配工步 -// * @Reference : -// * @Author : junsheng.li -// * @CreateDate 2024/9/12 11:20 -// * @Modify: -// **/ -//@Slf4j -//@Service("mesRecyclablePackageMatchStepService") -//public class MesRecyclablePackageMatchStepService extends BaseStepService { -// -// @Autowired -// private IMesProductionProcessContextStepService productionProcessContextStepService; -// -// @Autowired -// private IMesProductionDispatchContextStepService productionDispatchContextStepService; -// -// @Autowired -// private IMesStationService mesStationService; -// -// @Autowired -// private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService; -// -// @Autowired -// private IMesProduceSnExtService produceSnExtService; -// -// @Autowired -// private IConfigService configService; -// -// @Override -// public StepResult execute(StationRequestBean reqBean) { -// -// StationResultBean resultBean = new StationResultBean(); -// -// StepResult stepResult = StepResult.getSuccessComplete(); -// -// //获取上下文信息 -// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); -// -// //配置错误 抛出异常 -// if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); -// -// //存储生产过程上下文对象 -// productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); -// -// //获取上下文生产扫/读信息:可回用包装条码 -// List equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean); -// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!"); -// -// //清除本次已获取得到的可回用包装条码信息 -// productionDispatchContextStepService.removeScanRecyclablePackageContext(reqBean); -// -// //从上下文中取出设备信息 -// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); -// -// //根据设备代码获取点位信息 -// MesStation station = mesStationService.getMesStationByEquipmentCode(reqBean.getOrganizeCode(),cellEquipContext.getEquipmentCode()); -// if (Objects.isNull(station) || Objects.isNull(station.getProcessMethod())) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]站点信息未维护", cellEquipContext.getEquipmentCode())); -// -// //加工模式 -// switch (MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfType(station.getProcessMethod())){ -// case STATION_TYPE_10: -// case STATION_TYPE_20: -// case STATION_TYPE_30: -// case STATION_TYPE_40:{ -// //获取包装绑定主表 -// MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue()); -// if(Objects.isNull(recyclablePackageBinding)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue())); -// //获取绑定明细信息 -// List bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId()); -// if(CollectionUtils.isEmpty(bindingDetailList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]明细信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue())); -// //查询条码信息 -// Map> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList())); -// List productionPsInContextList = new ArrayList<>(); -// for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) { -// //外协件 -// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())){ -// for (int i = 0; i < bindingDetail.getQty(); i++) { -// //查询物料信息 -// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource())); -// } -// //自制件 -// }else{ -// createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList); -// } -// -// -// } -// -// -// };break; -// default:stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "站点加工模式未实现!");break; -// } -// -// -// for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextList) { -// if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue; -// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(equipVariableCollectContext.getEquipVariableValue())) -// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource())); -// else createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList); -// } -// -// //获取上下文产出零件信息 -// List cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); -// -// //非扫描场景 清除历史产出零件信息 -// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) removeBusiData(reqBean); -// //保存上下文产出零件信息 -// productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); -// -// //存储展示组件MODULE_CONTENT内容 -// productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); -// -// //当前工位使用的设备 -// MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); -// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0) -// return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()), -// stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, -// String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size())); -// -// -// String workOrderStr = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString(); -// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderStr), stepResult, String.format("当前%s加工单%s验证工单状态成功%s!", -// MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(equipVariableCollectContextList.get(0).getMessageSource()), workOrderStr, -// MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() ? String.format(",当前加工单个数[%s]已满足腔数", productionPartContextList.size()) : MesPcnExtConstWords.EMPTY)); -// -// } -// -// -// private StepResult createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, -// MesWorkCell workCell, MesEquipVariableCollectContext equipVariableCollectContext, List produceSnList, List productionPsInContextList) { -// -// String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY; -// -// List unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList()); -// -// if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) { -// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size())); -// } -// -// if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) { -// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), -// unknowList.stream().filter(Objects::nonNull).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)))); -// } -// -// produceSnList = produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); -// -// MesProduceSn produceSn = produceSnList.get(0); -// -// if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0) -// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()))); -// -// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0) -// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()))); -// -// //正常条码 -// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { -// -// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); -// -// return stepResult; -// } -// -// //未知条码【工序为空 代表新做的工序没有加工完成】 -// if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { -// -// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); -// -// return stepResult; -// } -// -// //未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】 -// if (StringUtils.isEmpty(produceSn.getProcessCode())) { -// -// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); -// -// return stepResult; -// } -// -// //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 -// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); -// -// return stepResult; -// -// } -// -// private Boolean checkAllowUnknowCenterCfg(StationRequestBean reqBean) { -// List configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode()); -// if (CollectionUtils.isEmpty(configList)) return true; -// List allowUnknowCenterList = Arrays.asList(configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(MesPcnExtConstWords.COMMA)).split(MesPcnExtConstWords.COMMA)); -// return CollectionUtils.isEmpty(allowUnknowCenterList) || !allowUnknowCenterList.contains(reqBean.getWorkCenterCode()); -// } -// -//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java index 321f106..9ecd366 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageReadStepService.java @@ -8,14 +8,17 @@ 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.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +import cn.estsh.i3plus.pojo.mes.bean.MesStation; 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.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -58,6 +61,9 @@ public class MesRecyclablePackageReadStepService extends BaseStepService { @Autowired private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; + @Autowired + private IMesStationService mesStationService; + @Override public void title(StationRequestBean reqBean) { this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); @@ -149,7 +155,11 @@ public class MesRecyclablePackageReadStepService extends BaseStepService { //根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态 equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); - return stepResult; + //根据设备代码获取点位信息 + MesStation station = mesStationService.getMesStationByEquipmentCode(reqBean.getOrganizeCode(),cellEquipContext.getEquipmentCode()); + if (Objects.isNull(station) || Objects.isNull(station.getProcessMethod())) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]站点信息未维护", cellEquipContext.getEquipmentCode())); + + return ((IStepService) SpringContextsUtil.getBean(MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfStrategyClass(station.getProcessMethod()))).executeInState(reqBean); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionRecyclablePackageContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionRecyclablePackageContext.java new file mode 100644 index 0000000..7670d01 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionRecyclablePackageContext.java @@ -0,0 +1,59 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; + +/** + * 生产过程上下文对象-可回用包装 + */ +@Data +public class MesProductionRecyclablePackageContext implements Serializable { + + private static final long serialVersionUID = 4337949265011880288L; + + @ApiParam("组织代码") + private String organizeCode; + + @ApiParam("工单号") + private String workOrderNo; + + @ApiParam(name = "包条码") + private String packageSn; + + @ApiParam(name = "包类型") + private String packageTypeCode; + + @ApiParam("零件条码ID") + private Long id; + + @ApiParam("零件条码") + private String productSn; + + @ApiParam("零件号") + private String partNo; + + @ApiParam("零件名称") + private String partName; + + public MesProductionRecyclablePackageContext() { + } + + + public MesProductionRecyclablePackageContext(String organizeCode, String packageSn, String packageTypeCode) { + this.organizeCode = organizeCode; + this.packageSn = packageSn; + this.packageTypeCode = packageTypeCode; + } + + + public MesProductionRecyclablePackageContext copy(MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) { + this.partName = mesRecyclablePackageBindingDetail.getPartName(); + this.partNo = mesRecyclablePackageBindingDetail.getPartNo(); + this.productSn = mesRecyclablePackageBindingDetail.getProductSn(); + return this; + } + +} 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 318ceee..7d271c0 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 @@ -65,6 +65,8 @@ public class MesPcnExtConstWords { public static final String USER_INFO = "userInfo"; // 同步标志 public static final String SYSTEM_SYNC_STATUS = "systemSyncStatus"; + // 同步时间 + public static final String SYSTEM_SYNC_DATE_TIME = "systemSyncDatetime"; // 零件编码 public static final String PART_NO = "partNo"; // 零件名称 @@ -294,6 +296,8 @@ public class MesPcnExtConstWords { public static final Integer ZERO = 0; // 1 public static final Integer ONE = 1; + // 3 + public static final Integer THREE = 3; // 中括号 public static final String SQUARE_BRACKETS = "[]"; // & @@ -433,6 +437,8 @@ public class MesPcnExtConstWords { //强过 public static final String SHIP_PASS = "跳过"; public static final String STRONGER_PASS = "强过"; + //SPS强过配置code + public static final String SPS_STRONGER_PASS = "SPS_STRONGER_PASS"; //发运解析条码最大长度 public static final String MAX_SHIPPING_BARCODE_LENGTH = "MAX_SHIPPING_BARCODE_LENGTH"; diff --git a/pom.xml b/pom.xml index 300c220..8a4dcfd 100644 --- a/pom.xml +++ b/pom.xml @@ -29,12 +29,12 @@ INFO true UTF-8 - + 1.0.1-YZ 1.0.0-yfai 1.0.0.1-patch - 1.0.0-yfai + 1.0.1-yfai 2.17.1