diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBallTrackRuleService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBallTrackRuleService.java new file mode 100644 index 0000000..0bf2053 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBallTrackRuleService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesBallTrackRule; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/24 15:36 + * @Modify: + **/ +public interface IMesBallTrackRuleService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java index 69faa66..67600e1 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBomService.java @@ -54,5 +54,15 @@ public interface IMesBomService extends IBaseMesService { @ApiOperation(value = "递归查询bom数据") List findBomList(String organizeCode, MesPart mesPart, String bomVersion); + /** + * 根据生产版本和零件号查询bom + * @param organizeCode + * @param bomVersion + * @param partNo + * @return + */ + MesBom findBom(String organizeCode, String bomVersion,String partNo); + @ApiOperation(value = "bom反向查询") + List queryMesBomReverse(MesBom mesBom); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java index 651cb54..682417c 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesBtoJobService.java @@ -16,4 +16,11 @@ public interface IMesBtoJobService { * @param groupCodeList */ void doCreateBto(String organizeCode, List groupCodeList); + + /** + * 武汉JIS按照零件生产组生成工单、零件清单、装配清单; 按包装圆整 + * @param organizeCode + * @param groupCodeList + */ + void doWhJisWorkOrder(String organizeCode, List groupCodeList); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java index 99f8fd1..7550fe6 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Objects; /** * @Description: @@ -39,4 +40,7 @@ public interface IMesConfigService { @ApiOperation(value = "更新配置") void update(MesConfig mesConfig,String userName); + @ApiOperation(value = "数据校验") + Boolean checkCfgValue(String organizeCode, String configCode, String value); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java index e062b64..22ac6b6 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerCarModelDetailService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.api.base; -import cn.estsh.i3plus.pojo.mes.bean.MesBom; import cn.estsh.i3plus.pojo.mes.bean.MesCustomerCarModelDetail; /** diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java index 357bdeb..74d74d8 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesCustomerCarModelDetail; import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -14,4 +15,7 @@ public interface IMesCustomerPartService extends IBaseMesService findMesCustomerPart(MesCustomerCarModelDetail mesPartProdGroupDetail); + @ApiOperation("根据零件号获取客户零件关系") + List findMesCustomerPartByPartNo(String organizeCode,List partNoList); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartTypeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartTypeService.java new file mode 100644 index 0000000..021dd14 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCustomerPartTypeService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPartType; + +/** + * @Description : 客户零件类型 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 17:27 + * @Modify: + **/ +public interface IMesCustomerPartTypeService extends IBaseMesService { +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutLengthModifyTypeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutLengthModifyTypeService.java new file mode 100644 index 0000000..2548c7b --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutLengthModifyTypeService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutLengthModifyType; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 9:47 + * @Modify: + **/ +public interface IMesCutLengthModifyTypeService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentDetailService.java new file mode 100644 index 0000000..5edde70 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentDetailService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentDetail; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 17:03 + * @Modify: + **/ +public interface IMesCutSchemeEquipmentDetailService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentProcessParamService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentProcessParamService.java new file mode 100644 index 0000000..30e66a3 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentProcessParamService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentProcessParam; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 16:51 + * @Modify: + **/ +public interface IMesCutSchemeEquipmentProcessParamService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentService.java new file mode 100644 index 0000000..4306696 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeEquipmentService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipment; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:52 + * @Modify: + **/ +public interface IMesCutSchemeEquipmentService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeFgService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeFgService.java new file mode 100644 index 0000000..c4c3286 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeFgService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:52 + * @Modify: + **/ +public interface IMesCutSchemeFgService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeMaterialService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeMaterialService.java new file mode 100644 index 0000000..daae478 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeMaterialService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeMaterial; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:35 + * @Modify: + **/ +public interface IMesCutSchemeMaterialService extends IBaseMesService{ + + + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeService.java new file mode 100644 index 0000000..90109d4 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCutSchemeService.java @@ -0,0 +1,12 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesCutScheme; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesCutSchemeService extends IBaseMesService { + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java index effa39d..b08eb00 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java @@ -14,4 +14,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; public interface IMesLabelTemplateService extends IBaseMesService { ListPager queryMesLabelTemplateAndParamListByPager(MesLabelTemplate labelTemplate, Pager pager); + + MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleDetailService.java new file mode 100644 index 0000000..8eaa1f9 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleDetailService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRuleDetail; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:48 + * @Modify: + **/ +public interface IMesPartPackageRuleDetailService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleService.java new file mode 100644 index 0000000..8e9b6b2 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartPackageRuleService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRule; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:36 + * @Modify: + **/ +public interface IMesPartPackageRuleService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java index ec73196..3ef1ea1 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; import java.util.List; +import java.util.Map; /** * @Description: @@ -28,4 +29,6 @@ public interface IMesPartProdGroupService extends IBaseMesService findDetailByCode(String partGroupCode,String organizeCode); + + Map getMesPartProdGroupMap(String organizeCode, List partProdGroupCodeList); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java index 9ba1234..2a72a5b 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdRuleSortCfgService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.api.base; -import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg; /** diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java index 9aa6a4e..5da2525 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java @@ -19,4 +19,7 @@ public interface IMesProduceSnService extends IBaseMesService { @ApiOperation(value = "查询条码信息") List findMesProduceSnList(String organizeCode, List snList); + + @ApiOperation("根据客户条码查询产品条码表") + MesProduceSn getMesProduceSnByCustSn(String organizeCode, String custSn); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java index dfe30e0..340c80e 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductOffLineService.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 生产汇报 @@ -11,5 +14,9 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine; **/ public interface IMesProductOffLineService extends IBaseMesService{ + @ApiOperation("根据汇报条码查询报工数据") + List findMesProductOffLineByProductSn(String productSn, String organizeCode); + @ApiOperation("根据加工记录ID查询报工数据") + List findMesProductOffLineByRecordId(String recordId, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java index 72a837c..ee6e410 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; +import io.swagger.annotations.ApiOperation; /** * @Description: @@ -13,4 +14,7 @@ public interface IMesProductVersionService extends IBaseMesService queryMesProductVersionByPagerExt(MesProductVersion mesProductVersion, Pager pager); + @ApiOperation("根据物料生产版本查询生产版本") + MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java new file mode 100644 index 0000000..ee603d5 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesPullingOrderInfoService extends IBaseMesService { + + Map doSPSForEquipment( String assemblyLine, String pullingGroupCode,String organizeCode ); + + void doCreatePullOrderByPullGroupAndWorkOrder(String organizeCode,Integer pageSize, String userName); + + List doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo, String userName); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderPartInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderPartInfoService.java new file mode 100644 index 0000000..63cc6d7 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderPartInfoService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderPartInfo; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesPullingOrderPartInfoService extends IBaseMesService { + + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackagePartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackagePartService.java new file mode 100644 index 0000000..058ab54 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackagePartService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 13:40 + * @Modify: + **/ +public interface IMesRecyclablePackagePartService extends IBaseMesService{ + + + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageService.java new file mode 100644 index 0000000..dab4972 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageService.java @@ -0,0 +1,14 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:02 + * @Modify: + **/ +public interface IMesRecyclablePackageService extends IBaseMesService{ + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageTypeService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageTypeService.java new file mode 100644 index 0000000..703b131 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesRecyclablePackageTypeService.java @@ -0,0 +1,14 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; + +/** + * @Description : 回收物包装类型 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/13 17:36 + * @Modify: + **/ +public interface IMesRecyclablePackageTypeService extends IBaseMesService{ + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java index 3c77082..d035341 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiOperation; @@ -23,4 +24,7 @@ public interface IMesShippingOrderManagementDetailService extends IBaseMesServic @ApiOperation("发运退回") void doShippingBack(Long[] idList,String organizeCode,String userName); + + @ApiOperation("查询发运零件子零件明细") + ListPager queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesStationService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesStationService.java new file mode 100644 index 0000000..73fb308 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesStationService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesStation; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 14:45 + * @Modify: + **/ +public interface IMesStationService extends IBaseMesService{ +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java index 9a46397..1a6d438 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java @@ -4,6 +4,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -17,4 +19,7 @@ public interface IMesWorkCenterService extends IBaseMesService { @ApiOperation(value = "根据生产线代码查询生产线信息的ERP生产线代码") String getErpWorkCenterCode(String organizeCode, String workCenterCode); + @ApiOperation(value = "根据产线代码集合查询产线信息集合") + List queryMesWorkCenterList(List workCenterCodeList, String organizeCode); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java new file mode 100644 index 0000000..0ba3cd9 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderAssemblyService.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.api.base; + + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 工单装配件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:42 + * @Modify: + **/ +public interface IMesWorkOrderAssemblyService extends IBaseMesService { + + @ApiOperation("根据工单号查询排序线排产装配目视项") + List findMesWorkOrderAssembly(String workOrderNo, String organizeCode); + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java new file mode 100644 index 0000000..3650596 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; +import io.swagger.annotations.ApiOperation; + +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @CreateDate 2024/04/16 + * @Author mingliang.li + */ +public interface IMesWorkOrderCutService extends IBaseMesService { + + @ApiOperation("生成裁片工单") + void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, + String userName, Integer editionNumber); + + @ApiOperation("分页查询裁片工单明细") + ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + + //@ApiOperation("分页查询裁片工单明细") + //ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + + @ApiOperation("发布裁片工单") + void doReleaseCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); + + @ApiOperation("打印裁片工单") + List> doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); + + @ApiOperation("重新打印-修改同步状态为未同步") + void doUpdatePrintStatus(List cutWorkOrderIds, String organizeCode, String userName); + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java index bb3e200..1470608 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderLogService.java @@ -5,6 +5,9 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description: @@ -16,4 +19,7 @@ public interface IMesWorkOrderLogService extends IBaseMesService findMesWorkOrderLog(String workOrderNo, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java new file mode 100644 index 0000000..2c17a75 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderPartService.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.api.base; + + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 工单零件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:42 + * @Modify: + **/ +public interface IMesWorkOrderPartService extends IBaseMesService { + + @ApiOperation("根据工单号查询工单零件") + List findMesWorkOrderPart(String workOrderNo, String organizeCode); + + @ApiOperation("根据工单号查询工单零件") + List findMesWorkOrderPart(List workOrderNoList, String organizeCode); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index d7c9353..b374e04 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; /** * @Description: @@ -36,7 +37,8 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("ccscTest") List queryMesWorkOrderProcessToSap(String organizeCode); - MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo); + @ApiOperation("查询工单信息") + MesWorkOrder getMesWorkOrder(String workOrderNo,String organizeCode); @ApiOperation("反向冲销") void doReportWorkReversal(WmsProductModel model); @@ -44,6 +46,16 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("重新打开") void doReopen(Long[] ids,String userName,String organizeCode); + @ApiOperation("新增工单打印队列") + void doSaveWorkOrderPrintQueue(MesWorkOrder workOrder); + + @ApiOperation("装配目视单补打") + List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName); + + @ApiOperation("装配目视单预览") + List> doShowWorkOrderPrint(String partNo, String workCenterCode, String partProdGroupCode, + String carModelCode, String organizeCode, String userName); + List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); List getPreDayReportMesProduceSn(String organizeCode ,List mesProductionRecordList ); @@ -52,4 +64,7 @@ public interface IMesWorkOrderService extends IBaseMesService { void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); + @ApiOperation("MES工单推送给WMS") + void doSendMesWorkOrderToWms(String organizeCode,Integer pageSize,String userName); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java index e394bb4..21387f3 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java @@ -17,5 +17,8 @@ import java.util.List; public interface IMesWorkOrderToWmsService extends IBaseMesService { @ApiOperation(value = "发送工单给Wms") - List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList); + List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList, String userName, boolean flag); + + @ApiOperation("根据工单号查询工单发送给WMS数据") + List findMesWorkOrderToWms(String workOrderNo, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java new file mode 100644 index 0000000..8b9505c --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesCreateWorkOrder.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPartSap; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; + +public interface IMesCreateWorkOrder { + /** + * 武汉按包装圆整事务管理 + * @param partProdGroup + * @param mesPartProdGroupDetail + * @param partSap + * @param sortInfo + */ + void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq); + + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java new file mode 100644 index 0000000..abd53fc --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesEarlyWarningKanBan; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; +import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; + +import java.text.ParseException; +import java.util.List; + +public interface IMesEarlyWarningService { + + /** + * 查询出需要轮询组的id 和 轮询的时间(切换组时查询一下) + * 如果idList 数量为1,时间则是定时刷新时间 + * + * 添加新的组时需要查询一下 + */ + List getEarlyWarningList(String organizeCode); + + /** + * 保存配置 + * @param model + */ + void saveEarlyWarning(MesEarlyWarningKanBanModel model); + + /** + * 更新配置 + * @param earlyWarning + */ + void updateEarlyWarning(MesEarlyWarningKanBan earlyWarning); + + /** + * 软删配置 + */ + void deleteEarlyWarning(Long id, String organizeCode,String userName); + + /** + * 获取看板数据 + * @param id + */ + MesEarlyWarningKanBan getKanbanData(Long id,String organizeCode); + + /** + * 获取看板数据 + * @param id + */ + MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException; + + /** + * 保存截图 + * @param model + */ + void savePicture(KanBanPictureModel model); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesOfflineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesOfflineService.java new file mode 100644 index 0000000..9515fab --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesOfflineService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import java.util.List; + +public interface IMesOfflineService { + + /** + * 创建离线排序加工规则 + * 每个总成零件维护一个 + */ + void doCreateSortRuleCfgOfflineData(String organizeCode, List groupCodeList); + + /** + * 生成指定零件生产组的拉动单模板 + * 创建离线排序拉动规则 + * 每个总成零件维护一个 + */ + void doCreatePullOrderOfflineData(String organizeCode, List pullCodeList,List partProdCodeList); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java new file mode 100644 index 0000000..5ec38be --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSortRuleCfgOfflineService.java @@ -0,0 +1,26 @@ +package cn.estsh.i3plus.ext.mes.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPullDetail; + +import java.util.List; + +public interface IMesSortRuleCfgOfflineService { + /** + * 清空原始表 + */ + void deleteSortRuleOffline(String organizeCode); + + + void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo,String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail); + + + void deletePullOffline(String organizeCode); + + void deletePullDetailOffline(String organizeCode); + + + void doCreatePullOffline(String custPartNo, String erpPartNo,String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java index b3dea35..9a234c5 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IProdExtOrgService.java @@ -256,6 +256,14 @@ public interface IProdExtOrgService { @ApiOperation(value = "更新工位参数配置状态(启用、禁用)") int updateMesWorkCellParamCfgStatusById(Long id, int status, String userName); + /** + * 根据配置新增工位按钮 + * @param organizeCode + * @param id + */ + @ApiOperation(value = "新增工位按钮") + void insertWorkCellModuleByCfg(String organizeCode, String id); + /*************MES工位参数配置服务*****end***********/ } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java index 54b1da3..5471e21 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/board/IMesYfBoardService.java @@ -1,7 +1,11 @@ package cn.estsh.i3plus.ext.mes.api.busi.board; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesGepicsInspectionInfoModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardConditionModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -31,4 +35,7 @@ public interface IMesYfBoardService { MesWorkCenterBoardResultModel queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel); + @ApiOperation("查询V107Melos数据监控") + ListPager queryGepicsInspectionInfo(MesGepicsInspectionInfoModel infoModel, Pager pager); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IAssemblyPartReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IAssemblyPartReportService.java new file mode 100644 index 0000000..3cb2e9f --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IAssemblyPartReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.AssemblyPartReportModel; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:20 + * @Modify: + **/ +public interface IAssemblyPartReportService { + ListPager queryReport(AssemblyPartReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java index ae548a6..8888d56 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java @@ -5,8 +5,11 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultM import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesCokpitKanbanData; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; @@ -48,4 +51,13 @@ public interface IMesYfReportService { @ApiOperation("产品加工记录") ListPager queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager); + + @ApiOperation("看板数据") + ListPager queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager); + + @ApiOperation("通用导出报表") + ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager); + + @ApiOperation("通用发运报表查询") + ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IProductInspectionSubReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IProductInspectionSubReportService.java new file mode 100644 index 0000000..2a97fb6 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IProductInspectionSubReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesQmsSuspicious; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:50 + * @Modify: + **/ +public interface IProductInspectionSubReportService { + ListPager queryReport(MesQmsSuspicious model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IShipmentDetailReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IShipmentDetailReportService.java new file mode 100644 index 0000000..d65d089 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IShipmentDetailReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel; + +/** + * @Description : 发运明细报表 接口 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:49 + * @Modify: + **/ +public interface IShipmentDetailReportService { + ListPager queryReport(ShippingReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/ISuspiciousItemBarcodeReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/ISuspiciousItemBarcodeReportService.java new file mode 100644 index 0000000..cdea57a --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/ISuspiciousItemBarcodeReportService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.SuspiciousItemBarcodeReportModel; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:27 + * @Modify: + **/ +public interface ISuspiciousItemBarcodeReportService { + ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/pom.xml b/modules/i3plus-ext-mes-apiservice/pom.xml index 339ba20..a5c5eae 100644 --- a/modules/i3plus-ext-mes-apiservice/pom.xml +++ b/modules/i3plus-ext-mes-apiservice/pom.xml @@ -19,11 +19,11 @@ org.apache.cxf cxf-spring-boot-starter-jaxws - - com.huaweicloud - esdk-obs-java-bundle - 3.23.9 - + + + + + impp.framework diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShippingWh.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShippingWh.groovy new file mode 100644 index 0000000..4a8363b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShippingWh.groovy @@ -0,0 +1,46 @@ +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService +import cn.estsh.i3plus.platform.common.tool.TimeTool +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired + +/** + * @Description : MES2PISCES-发运单武汉工厂 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/18 20:37 + * @Modify: + * */ +class MesToPiscesMesJisShippingWh { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesToPiscesMesJisShippingWh.class) + + @Autowired + private ISyncFuncService syncFuncService; + + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { + if (srcData == null || srcData.size() == 0) { + return srcData + } + String organizeCode = mapper.getOrganizeCode(); + //TRANS_ID赋值 + if (mapper.getDestColumnMapping().contains("TRANS_ID")) { + Date date = new Date(); + GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel("COKIPIT_PISCES_TRANS_ID"); + orderSeqSerialNoModel.setYear(MesExtEnumUtil.YEAR_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getYear(date)))) + orderSeqSerialNoModel.setMonth(MesExtEnumUtil.MONTH_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getMonth(date)))) + orderSeqSerialNoModel.setDay(TimeTool.getDay(date)) + List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(organizeCode), "MES2PISCES发运单", organizeCode, srcData.size()).getResultList(); + int index = 0; + for (Map rowMap : srcData) { + rowMap.put("TRANS_ID", resultList.get(index)); + index++; + } + } + return new ArrayList<>(srcData); + } + +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy index 6b0c7b7..ec1d06f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy @@ -53,7 +53,9 @@ class MesToPiscesMesLoadingListDetail { if (!StringUtils.isEmpty(rowMap.get("pid"))) { long id = Long.parseLong(String.valueOf(rowMap.get("pid"))); if (Objects.isNull(mesLoadingListMap) || !mesLoadingListMap.containsKey(id)) { - mesLoadingListMap.put(id, mesLoadingListRepository.getById(id)) + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",packBean) + mesLoadingListMap.put(id, mesLoadingListRepository.getByProperty(packBean)) } MesLoadingList mesLoadingList = mesLoadingListMap.get(id) if (!Objects.isNull(mesLoadingList)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy index 7c6a304..fa4269e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy @@ -51,7 +51,9 @@ class MesToPiscesMesShippingDetail { if (!StringUtils.isEmpty(rowMap.get("pid"))) { long id = Long.parseLong(String.valueOf(rowMap.get("pid"))); if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(id)) { - mesProductionRecordMap.put(id, mesShippingRepository.getById(id)) + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",packBean) + mesProductionRecordMap.put(id, mesShippingRepository.getByProperty(packBean)) } MesShippingOrderManagement mesProductionRecord = mesProductionRecordMap.get(id) if (!Objects.isNull(mesProductionRecord)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy index 1f08b4d..9f9e46e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy @@ -47,10 +47,11 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesProduceSn)) { rowMap.put("ASSEMBLY_BARCODE_ID", mesProduceSn.getId()) } else { + rowMap.put("ASSEMBLY_BARCODE_ID", 0) LOGGER.info("条码:{}信息不存在", String.valueOf(rowMap.get("assembly_sn"))) } }else{ - rowMap.put("ASSEMBLY_BARCODE_ID", null) + rowMap.put("ASSEMBLY_BARCODE_ID", 0) } //条码 if (!StringUtils.isEmpty(rowMap.get("product_sn"))) { @@ -58,21 +59,25 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesProduceSn)) { rowMap.put("BARCODE_ID", mesProduceSn.getId()) } else { + rowMap.put("BARCODE_ID", 0) LOGGER.info("条码:{}信息不存在", String.valueOf(rowMap.get("product_sn"))) } }else{ - rowMap.put("BARCODE_ID", null) + rowMap.put("BARCODE_ID", 0) } //加工记录表 if (!StringUtils.isEmpty(rowMap.get("production_record_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("production_record_id"))); if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(id)) { - mesProductionRecordMap.put(id, mesProductionRecordRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesProductionRecordMap.put(id, mesProductionRecordRepository.getByProperty(ddlPackBean)) } MesProductionRecord mesProductionRecord = mesProductionRecordMap.get(id) if (!Objects.isNull(mesProductionRecord)) { rowMap.put("PRODUCTION_LOG_FID", mesProductionRecord.getFid()) } else { + rowMap.put("PRODUCTION_LOG_FID", null) LOGGER.info("加工记录id:{},信息不存在", String.valueOf(rowMap.get("production_record_id"))) } }else{ @@ -84,6 +89,7 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesEquipment)) { rowMap.put("EQUIPMENT_FID", mesEquipment.getFid()) } else { + rowMap.put("EQUIPMENT_FID", null) LOGGER.info("设备代码:{}信息不存在", String.valueOf(rowMap.get("equipment_code"))) } }else{ diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy index a7158af..1c8bb30 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesRawPartCharging.groovy @@ -1,3 +1,5 @@ +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack import cn.estsh.i3plus.pojo.mes.bean.MesRawPackage import cn.estsh.i3plus.pojo.mes.bean.MesRawPackageDetail import cn.estsh.i3plus.pojo.mes.bean.MesRawPackagePart @@ -37,12 +39,15 @@ class MesToPiscesRawPartCharging { Map mesRawPackageMap = new HashMap<>(); Map mesRawPackageDetailMap = new HashMap<>(); Map mesRawPackagePartMap = new HashMap<>(); + String organizeCode = mapper.getOrganizeCode(); for (Map rowMap : srcData) { //原材料容器 if (!StringUtils.isEmpty(rowMap.get("package_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("package_id"))); if (Objects.isNull(mesRawPackageMap) || !mesRawPackageMap.containsKey(id)) { - mesRawPackageMap.put(id, mesRawPackageRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesRawPackageMap.put(id, mesRawPackageRepository.getByProperty(ddlPackBean)) } MesRawPackage mesRawPackage = mesRawPackageMap.get(id) if (!Objects.isNull(mesRawPackage)) { @@ -59,7 +64,9 @@ class MesToPiscesRawPartCharging { if (!StringUtils.isEmpty(rowMap.get("package_detail_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("package_detail_id"))); if (Objects.isNull(mesRawPackageDetailMap) || !mesRawPackageDetailMap.containsKey(id)) { - mesRawPackageDetailMap.put(id, mesRawPackageDetailRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesRawPackageDetailMap.put(id, mesRawPackageDetailRepository.getByProperty(ddlPackBean)) } MesRawPackageDetail mesRawPackageDetail = mesRawPackageDetailMap.get(id) if (!Objects.isNull(mesRawPackageDetail)) { @@ -74,7 +81,9 @@ class MesToPiscesRawPartCharging { if (!StringUtils.isEmpty(rowMap.get("package_part_id"))) { long id = Long.parseLong(String.valueOf(rowMap.get("package_part_id"))); if (Objects.isNull(mesRawPackagePartMap) || !mesRawPackagePartMap.containsKey(id)) { - mesRawPackagePartMap.put(id, mesRawPackagePartRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesRawPackagePartMap.put(id, mesRawPackagePartRepository.getByProperty(ddlPackBean)) } MesRawPackagePart mesRawPackagePart = mesRawPackagePartMap.get(id) if (!Objects.isNull(mesRawPackagePart)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy index eeaadee..8183b1a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductionAssembly.groovy @@ -1,8 +1,10 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack import cn.estsh.i3plus.pojo.mes.bean.MesEquipment +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository +import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired @@ -22,11 +24,15 @@ class PiscesToMesProductionAssembly { @Autowired private MesEquipmentRepository mesEquipmentRepository; + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { if (srcData == null || srcData.size() == 0) { return srcData } Map mesEquipmentMap = new HashMap<>(); + Map mesProductionRecordMap = new HashMap<>(); String organizeCode = mapper.getOrganizeCode(); for (Map rowMap : srcData) { //获取设备名称&设备代码 @@ -39,6 +45,18 @@ class PiscesToMesProductionAssembly { LOGGER.info("EQUIPMENT_FID:{}信息不存在", String.valueOf(rowMap.get("EQUIPMENT_FID"))) } } + + if (!StringUtils.isEmpty(rowMap.get("PRODUCTION_LOG_FID"))) { + MesProductionRecord record = getMesProductionRecord(organizeCode, String.valueOf(rowMap.get("PRODUCTION_LOG_FID")), mesProductionRecordMap) + if (!Objects.isNull(record)) { + rowMap.put("PRODUCTION_RECORD_ID", record.getId()) + } else { + LOGGER.info("加工记录FID:{}信息不存在", String.valueOf(rowMap.get("PRODUCTION_LOG_FID"))) + rowMap.put("PRODUCTION_RECORD_ID", 0) + } + } else { + rowMap.put("PRODUCTION_RECORD_ID", 0) + } } return srcData; } @@ -51,4 +69,13 @@ class PiscesToMesProductionAssembly { } return mesEquipmentMap.get(equipmentFid); } + + private MesProductionRecord getMesProductionRecord(String organizeCode, String fid, Map mesProductionRecordMap) { + if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(fid)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(fid, "fid", ddlPackBean); + mesProductionRecordMap.put(fid, mesProductionRecordRepository.getByProperty(ddlPackBean)) + } + return mesProductionRecordMap.get(fid); + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy index 9192253..db2f0c6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesWorkOrder.groovy @@ -57,7 +57,9 @@ class PiscesToMesWorkOrder { if (!StringUtils.isEmpty(rowMap.get("PRODUCT_GROUP_ID"))) { long id = Long.parseLong(String.valueOf(rowMap.get("PRODUCT_GROUP_ID"))) if (Objects.isNull(mesPartProdGroupMap) || !mesPartProdGroupMap.containsKey(id)) { - mesPartProdGroupMap.put(id, mesPartProdGroupRepository.getById(id)) + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean) + mesPartProdGroupMap.put(id, mesPartProdGroupRepository.getByProperty(ddlPackBean)) } MesPartProdGroup mesPartProdGroup = mesPartProdGroupMap.get(id) if (!Objects.isNull(mesPartProdGroup)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java index 4ae6482..fcffabd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.apiservice.aspect; -import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import org.aspectj.lang.JoinPoint; @@ -80,24 +79,22 @@ public class MesRepositoryAspect { @After("controllerPointcut()") public void after(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); - if (methodName.startsWith("updateByProperties")) { + if (methodName.equals("updateByProperties")) { try { Object[] args = joinPoint.getArgs(); Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); if (args.length == 4) { if (args[2].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); + method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}); } else { - method.invoke(joinPoint.getTarget(), args[0], args[1], "modifyDatetime", TimeTool.getNowTime(true)); method.invoke(joinPoint.getTarget(), args[0], args[1], "systemSyncStatus", CommonEnumUtil.FALSE); } } else if (args.length == 3) { if (args[0].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}, args[2]); + method.invoke(joinPoint.getTarget(), new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}, args[2]); } else { - method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); } } @@ -110,10 +107,9 @@ public class MesRepositoryAspect { if (args.length == 3) { Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); if (args[1].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), args[0], new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); + method.invoke(joinPoint.getTarget(), args[0], new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}); } else { - method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java index f0077f0..1f7b19d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/HuaWeiCloudObsConfig.java @@ -1,44 +1,44 @@ -package cn.estsh.i3plus.ext.mes.apiservice.config; - -import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil; -import com.obs.services.ObsClient; -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @Description : HuaWeiCloudObsConfig - * @Author :gsz - * @Date 2024/6/11 13:28 - * @Modify - **/ -@Configuration -public class HuaWeiCloudObsConfig { - - @Value("${huaweiobs.bucketName}") - @Getter - private String bucketName; - - @Value("${huaweiobs.ak}") - @Getter - private String ak; - - @Value("${huaweiobs.sk}") - @Getter - private String sk; - - @Value("${huaweiobs.endPoint}") - @Getter - private String endPoint; - - @Bean - public ObsClient getObsClient() { - ObsClient obsClient = new ObsClient(ak, sk, endPoint); - return obsClient; - } - @Bean - public HuaWeiOBSUtil huaWeiOBSUtil() { - return new HuaWeiOBSUtil(bucketName, ak, sk, endPoint); - } -} +//package cn.estsh.i3plus.ext.mes.apiservice.config; +// +//import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil; +//import com.obs.services.ObsClient; +//import lombok.Getter; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +///** +// * @Description : HuaWeiCloudObsConfig +// * @Author :gsz +// * @Date 2024/6/11 13:28 +// * @Modify +// **/ +//@Configuration +//public class HuaWeiCloudObsConfig { +// +// @Value("${huaweiobs.bucketName}") +// @Getter +// private String bucketName; +// +// @Value("${huaweiobs.ak}") +// @Getter +// private String ak; +// +// @Value("${huaweiobs.sk}") +// @Getter +// private String sk; +// +// @Value("${huaweiobs.endPoint}") +// @Getter +// private String endPoint; +// +// @Bean +// public ObsClient getObsClient() { +// ObsClient obsClient = new ObsClient(ak, sk, endPoint); +// return obsClient; +// } +// @Bean +// public HuaWeiOBSUtil huaWeiOBSUtil() { +// return new HuaWeiOBSUtil(bucketName, ak, sk, endPoint); +// } +//} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java index 2600083..ebff3a7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java @@ -21,6 +21,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.config; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServer; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerIns; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerSPS; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.apache.cxf.transport.servlet.CXFServlet; @@ -63,4 +64,10 @@ public class WebServiceConfig { endpoint.publish("/mes-service-instrument"); return endpoint; } + @Bean + public Endpoint endpointSpsEqu() { + EndpointImpl endpoint = new EndpointImpl(bus, new WebServiceServerSPS()); + endpoint.publish("/mes-service-spsEqu"); + return endpoint; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java index 4ef7d1b..8453c29 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/ExtProdOrgController.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.api.busi.IEquipmentExtService; import cn.estsh.i3plus.ext.mes.api.busi.IProdExtOrgService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.apiservice.util.MesCommConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -16,7 +17,10 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesArea; +import cn.estsh.i3plus.pojo.mes.bean.MesWcEquipment; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.ProdOrgExtModel; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -30,9 +34,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** * @Description: @@ -388,4 +394,17 @@ public class ExtProdOrgController extends MesBaseController { } } + @PostMapping(value = "/work-cell-module/by-cfg/inset") + @ApiOperation(value = "根据配置新增工位按钮") + public ResultBean insertWorkCellModuleByCfg(@RequestBody Map params) { + try { + if (!CollectionUtils.isEmpty(params)) prodOrgService.insertWorkCellModuleByCfg((String) params.get(MesExtConstWords.ORGANIZE_CODE), (String) params.get(MesExtConstWords.ID)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBallTrackRuleController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBallTrackRuleController.java new file mode 100644 index 0000000..f92860f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBallTrackRuleController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesBallTrackRule; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/24 15:35 + * @Modify: + **/ +@Api("辊道设备配置接口") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesBallTrackRule") +public class MesBallTrackRuleController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java index 4527383..a3212fd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesBomController.java @@ -13,6 +13,7 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -108,4 +109,21 @@ public class MesBomController extends BaseMesController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @PostMapping(value = "/reverseQuery") + @ApiOperation(value = "bom反向查询") + public ResultBean queryMesBomReverse(MesBom bom) { + try { + ValidatorBean.checkNotNull(bom.getPartNo(), "父零件号不能为空"); + ValidatorBean.checkNotNull(bom.getEffStartTime(), "生效时间不能为空"); + ValidatorBean.checkNotNull(bom.getNum(), "层数不能为空"); + bom.setOrganizeCode(AuthUtil.getOrganizeCode()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(bomService.queryMesBomReverse(bom)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCustomerPartTypeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCustomerPartTypeController.java new file mode 100644 index 0000000..9687050 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCustomerPartTypeController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPartType; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 客户零件类型 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 17:35 + * @Modify: + **/ +@Api(description = "客户零件类型") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCustomerPartType") +public class MesCustomerPartTypeController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutLengthModifyTypeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutLengthModifyTypeController.java new file mode 100644 index 0000000..9d950bc --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutLengthModifyTypeController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutLengthModifyType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 9:45 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutLengthModifyType") +public class MesCutLengthModifyTypeController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeController.java new file mode 100644 index 0000000..2f57f81 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeController.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutScheme; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 裁片工单 + */ +@Api("裁片工单信息") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCutScheme") +public class MesCutSchemeController extends BaseMesController{ + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentController.java new file mode 100644 index 0000000..88ac35a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipment; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片设备配置维护主表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:20 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeEquipment") +public class MesCutSchemeEquipmentController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentDetailController.java new file mode 100644 index 0000000..47c553f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentDetailController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentDetail; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片设备配置维护明细表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 17:02 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeEquipmentDetail") +public class MesCutSchemeEquipmentDetailController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentProcessParamController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentProcessParamController.java new file mode 100644 index 0000000..fdb5e8f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeEquipmentProcessParamController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentProcessParam; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片设备配置维护设备加工表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 16:49 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeEquipmentProcessParam") +public class MesCutSchemeEquipmentProcessParamController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeFgController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeFgController.java new file mode 100644 index 0000000..4a67516 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeFgController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片方案成品 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:50 + * @Modify: + **/ +@RestController +@RequestMapping( MesCommonConstant.MES_YANFEN + "/mesCutSchemeFg") +public class MesCutSchemeFgController extends BaseMesController{ + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeMaterialController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeMaterialController.java new file mode 100644 index 0000000..364ba9f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesCutSchemeMaterialController.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeMaterial; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 裁片方案原材料 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:27 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCutSchemeMaterial") +public class MesCutSchemeMaterialController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java index cad3ccd..95f8749 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesMediaFileCfgController.java @@ -1,39 +1,17 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesMediaFileCfgService; -import cn.estsh.i3plus.ext.mes.apiservice.config.HuaWeiCloudObsConfig; -import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.icloud.core.sdk.ICoreSysFileCloud; -import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesMediaFileCfg; import cn.estsh.i3plus.pojo.mes.repository.MesMediaFileCfgRepository; -import cn.estsh.impp.framework.boot.exception.ImppBusiException; -import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.fileservice.ImppFileService; -import cn.estsh.impp.framework.boot.util.ResultBean; -import com.obs.services.ObsClient; -import com.obs.services.exception.ObsException; -import com.obs.services.model.*; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** * @Description: 媒体文件维护 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleController.java new file mode 100644 index 0000000..6530b67 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRule; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:35 + * @Modify: + **/ +@Api("包装组零件规则") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPartPackageRule") +public class MesPartPackageRuleController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleDetailController.java new file mode 100644 index 0000000..0d0c2b0 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartPackageRuleDetailController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRuleDetail; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:47 + * @Modify: + **/ +@Api("包装组零件规则明细") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPartPackageRuleDetail") +public class MesPartPackageRuleDetailController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java new file mode 100644 index 0000000..f897c68 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ResultBean; +import 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.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 拉动单 + */ +@Api("拉动单") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPullingOrderInfo") +public class MesPullingOrderInfoController extends BaseMesController { + @Autowired + private IMesPullingOrderInfoService mesPullingOrderInfoService; + + @GetMapping(value = "/doRePrint") + @ApiOperation(value = "拉动单补打") + public ResultBean doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo) { + try { + if (StringUtils.isEmpty(mesPullingOrderInfo.getPullingOrderNo())) { + 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); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java new file mode 100644 index 0000000..1cf731a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderPartInfo; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 拉动单 + */ +@Api("拉动单") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPullingOrderPartInfo") +public class MesPullingOrderPartInfoController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageController.java new file mode 100644 index 0000000..b5927da --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 回收包装 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:00 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesRecyclablePackage") +public class MesRecyclablePackageController extends BaseMesController { + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackagePartController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackagePartController.java new file mode 100644 index 0000000..58f59d2 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackagePartController.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 回收包装零件 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:57 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesRecyclablePackagePart") +public class MesRecyclablePackagePartController extends BaseMesController{ + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageTypeController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageTypeController.java new file mode 100644 index 0000000..6452180 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesRecyclablePackageTypeController.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 回收包装类型 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/13 17:14 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesRecyclablePackageType") +public class MesRecyclablePackageTypeController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java index f04f835..62010e7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -68,5 +69,36 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle } } + @GetMapping(value = "/ship-part/query-item-part") + @ApiOperation(value = "发运零件子零件明细") + public ResultBean queryDetailMesWorkOrderPart(MesWorkOrderPart detail, Pager pager) { + try { + + detail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setListPager(shippingOrderManagementDetailService.queryDetailMesWorkOrderPart(detail,pager)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @GetMapping(value = "/ship-order/query-item-part") + @ApiOperation(value = "发运单子零件明细") + public ResultBean queryMesShippingOrderManagementDetail(MesWorkOrderPart detail, Pager pager) { + try { + + detail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setListPager(shippingOrderManagementDetailService.queryDetailMesWorkOrderPart(detail,pager)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java new file mode 100644 index 0000000..eb3b007 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesStationController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesStation; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 14:40 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN+"/mesStation") +public class MesStationController extends BaseMesController{ +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderAssemblyController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderAssemblyController.java new file mode 100644 index 0000000..26119cd --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderAssemblyController.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 工单装配件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:40 + * @Modify: + **/ +@Api(description = "工单装配件") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrderAssembly") +public class MesWorkOrderAssemblyController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index ba4ff54..6c68dea 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -7,17 +7,14 @@ import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; -import cn.estsh.i3plus.mes.apiservice.util.DateUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.platform.common.tool.TimeTool; 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.MesConfig; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -30,15 +27,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; @Api(description = "工单主页面") @RestController @@ -172,7 +166,6 @@ public class MesWorkOrderController extends BaseMesController { try { ValidatorBean.checkNotNull(model.getOrganizeCode(),"工厂代码不能为空"); ValidatorBean.checkNotNull(model.getQty(),"数量不能为空"); - ValidatorBean.checkNotNull(model.getSn(),"条码不能为空"); ValidatorBean.checkNotNull(model.getPartNo(),"零件号不能为空"); mesWorkOrderService.doReportWorkReversal(model); @@ -184,6 +177,63 @@ public class MesWorkOrderController extends BaseMesController { } } + @PostMapping(value = "/save-work-print-queue") + @ApiOperation(value = "新增打印工单打印队列") + public ResultBean doSaveWorkOrderPrintQueue(@RequestBody MesWorkOrder workOrder) { + try { + + ValidatorBean.checkNotNull(workOrder.getOrganizeCode(),"工厂代码不能为空"); + + mesWorkOrderService.doSaveWorkOrderPrintQueue(workOrder); + return ResultBean.success("工单打印队列新增成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/work-order-reprint") + @ApiOperation(value = "装配目视单补打") + public ResultBean doReprintWorkOrder(Long[] ids) { + try { + + ValidatorBean.checkNotNull(ids,"工单不能为空"); + + return ResultBean.success("装配目视单补打成功") + .setResultObject(mesWorkOrderService.doReprintWorkOrder(ids, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName())) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/show-work-order") + @ApiOperation(value = "装配目视单预览查询") + public ResultBean doShowWorkOrderPrint(String partNo, String workCenterCode, String partProdGroupCode, String carModelCode, String organizeCode, String userName ) { + try { + + ValidatorBean.checkNotNull(workCenterCode, "产线不能为空"); + ValidatorBean.checkNotNull(partProdGroupCode, "生产组代码不能为空"); + ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空"); + ValidatorBean.checkNotNull(userName, "操作人不能为空"); + if (StringUtil.isEmpty(partNo) && StringUtil.isEmpty(carModelCode)) { + MesException.throwMesBusiException("物料号和车型代码不能同时为空"); + } + + return ResultBean.success("装配目视单预览查询成功") + .setResultList(mesWorkOrderService.doShowWorkOrderPrint(partNo, workCenterCode, partProdGroupCode, carModelCode, organizeCode, userName)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/reopen") @ApiOperation(value = "重新打开") public ResultBean doReopen(Long[] ids) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java new file mode 100644 index 0000000..344cd69 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -0,0 +1,119 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +/** + * 裁片工单 + */ +@Api("裁片工单信息") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrderCut") +public class MesWorkOrderCutController extends BaseMesController{ + + @Autowired + private IMesWorkOrderCutService workOrderCutService; + + @PostMapping(value = "/generate") + @ApiOperation(value = "裁片工单生成", notes = "裁片工单生成") + public ResultBean doGenerateCutWorkOrder(Long[] workOrderIds, String cutCode, String remark, Integer editionNumber) { + try { + + ValidatorBean.checkNotNull(workOrderIds, "工单不存在"); + ValidatorBean.checkNotNull(cutCode, "裁片方案不存在"); + + workOrderCutService.doGenerateCutWorkOrder(Arrays.asList(workOrderIds), cutCode, remark, + AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName(), editionNumber); + return ResultBean.success("生成成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/detail/query") + @ApiOperation(value = "分页查询裁片工单明细", notes = "分页查询裁片工单明细") + public ResultBean queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager) { + try { + workOrderCutDetail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + return ResultBean.success("生成成功") + .setListPager(workOrderCutService.queryWorkOrderCutDetailByPager(workOrderCutDetail, pager)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/release") + @ApiOperation(value = "裁片工单发布", notes = "裁片工单发布") + public ResultBean doReleaseCutWorkOrder(String[] cutWorkOrderNos) { + try { + + ValidatorBean.checkNotNull(cutWorkOrderNos, "裁片工单不存在"); + + workOrderCutService.doReleaseCutWorkOrder(Arrays.asList(cutWorkOrderNos), AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("发布成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/print") + @ApiOperation(value = "裁片工单打印", notes = "裁片工单打印") + public ResultBean print(String[] cutWorkOrderNos) { + try { + + ValidatorBean.checkNotNull(cutWorkOrderNos, "裁片工单不存在"); + + return ResultBean.success("打印成功") + .setResultObject(workOrderCutService.doPrintCutWorkOrder(Arrays.asList(cutWorkOrderNos), + AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName())) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/update-print-status") + @ApiOperation(value = "修改裁片工单打印状态", notes = "修改裁片工单打印状态") + public ResultBean doUpdatePrintStatus(String[] cutWorkOrderIds) { + try { + + ValidatorBean.checkNotNull(cutWorkOrderIds, "裁片工单不存在"); + + workOrderCutService.doUpdatePrintStatus(Arrays.asList(cutWorkOrderIds), AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("发布成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderPartController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderPartController.java new file mode 100644 index 0000000..1fd5082 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderPartController.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 工单零件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:40 + * @Modify: + **/ +@Api(description = "工单零件") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrderPart") +public class MesWorkOrderPartController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/board/MesBusiBoardController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/board/MesBusiBoardController.java new file mode 100644 index 0000000..b41b1b3 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/board/MesBusiBoardController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.board; + +import cn.estsh.i3plus.ext.mes.api.busi.board.IMesYfBoardService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesGepicsInspectionInfoModel; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 报表 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/10/11 13:58 + * @Modify: + **/ +@Api("报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/board") +public class MesBusiBoardController { + + @Autowired + private IMesYfBoardService mesYfBoardService; + + @ApiOperation(value = "查询V107Melos数据", notes = "查询V107Melos数据") + @PostMapping("/query-gepics-inspection-info") + public ResultBean queryGepicsInspectionInfo(@RequestBody MesGepicsInspectionInfoModel infoModel, Pager pager){ + try { + ValidatorBean.beginValid(infoModel) + .notNull("organizeCode", infoModel.getOrganizeCode()); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(mesYfBoardService.queryGepicsInspectionInfo(infoModel,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java new file mode 100644 index 0000000..19bec4d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java @@ -0,0 +1,121 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MesEarlyWarningServiceImpl; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesEarlyWarningKanBan; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; +import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; +import cn.estsh.impp.framework.boot.util.ResultBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.text.ParseException; +import java.util.List; + +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/earlyWarningKanBan") +public class MesEarlyWarningKanBanController { + + @Autowired + private MesEarlyWarningServiceImpl mesEarlyWarningService; + + /** + * 获取所有的线末大屏配置 + * + * @param organizeCode + * @return + */ + @GetMapping(path = "/list/{organizeCode}") + public ResultBean getEarlyWarningList(@PathVariable String organizeCode) { + List list; + try { + list = mesEarlyWarningService.getEarlyWarningList(organizeCode); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功").setResultList(list); + } + + /** + * 保存配置 + * + * @param model + * @return + */ + @PostMapping(path = "/save") + public ResultBean saveEarlyWarningList(@RequestBody MesEarlyWarningKanBanModel model) { + try { + mesEarlyWarningService.saveEarlyWarning(model); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功"); + } + + /** + * 更新配置 + * + * @param earlyWarning + */ + @PostMapping(path = "/update") + public ResultBean updateEarlyWarning(@RequestBody MesEarlyWarningKanBan earlyWarning) { + try { + mesEarlyWarningService.updateEarlyWarning(earlyWarning); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("更新成功"); + } + + /** + * 软删配置 + */ + @GetMapping(path = "/delete/{id}/{organizeCode}/{userName}") + public ResultBean deleteEarlyWarning(@PathVariable Long id, @PathVariable String organizeCode, @PathVariable String userName) { + try { + mesEarlyWarningService.deleteEarlyWarning(id, organizeCode, userName); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("删除成功"); + } + + + /** + * 获取看板配置 + */ + @GetMapping(path = "/get/{id}/{organizeCode}") + public ResultBean getKanbanData(@PathVariable Long id, @PathVariable String organizeCode) { + MesEarlyWarningKanBan kanbanData = null; + try { + kanbanData = mesEarlyWarningService.getKanbanData(id, organizeCode); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + + return ResultBean.success("查询成功").setResultObject(kanbanData); + } + + + @GetMapping(path = "/getData/{id}/{organizeCode}") + public ResultBean getData(@PathVariable Long id, @PathVariable String organizeCode) { + MesKanBanShowModel data = null; + try { + data = mesEarlyWarningService.doGetData(id, organizeCode); + } catch (Exception e) { + ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功").setResultObject(data); + } + + @PostMapping(path = "/save/picture") + public ResultBean savePicture(@RequestBody KanBanPictureModel kanBanPicture){ + try { + mesEarlyWarningService.savePicture(kanBanPicture); + } catch (Exception e) { + throw new RuntimeException(e); + } + return ResultBean.success("保存成功"); + } +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index 819c147..75c7d15 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesEquipment; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; @@ -76,6 +77,8 @@ public class MesWhiteListController extends MesBaseController { private MesEquipmentRepository mesEquipmentRDao; @Autowired + private IMesPullingOrderInfoService pullingOrderInfoService; + @Autowired private IMesDowntimeRecordService downtimeRecordService; @PostMapping(value = "/meter/main-data") @ApiOperation(value = "Maximo仪表主数据", notes = "Maximo仪表主数据") @@ -277,4 +280,30 @@ public class MesWhiteListController extends MesBaseController { } return ResultBean.success("执行成功"); } + @GetMapping(value = "/doCreatePullOrder") + @ApiOperation(value = "根据拉动组和生产工单产生拉动单") + public ResultBean doCreatePullOrder(String organizeCode, Integer pageSize) { + //统计数据 + try { + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,pageSize,"test"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + return ResultBean.success("执行成功"); + } + + @GetMapping(value = "/mesWorkOrderSendToWmsJob") + @ApiOperation(value = "MES工单推送给WMS JOB") + public ResultBean doSendMesWorkOrderToWms(String organizeCode, Integer pageSize) { + try { + mesWorkOrderService.doSendMesWorkOrderToWms(organizeCode, pageSize, MesExtConstWords.JOB); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/AssemblyPartReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/AssemblyPartReportController.java new file mode 100644 index 0000000..da017d9 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/AssemblyPartReportController.java @@ -0,0 +1,46 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IAssemblyPartReportService; +import cn.estsh.i3plus.ext.mes.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.model.report.AssemblyPartReportModel; +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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @Description : 装配件报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:17 + * @Modify: + **/ +@Api("装配件报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/assembly-part-report") +public class AssemblyPartReportController { + + @Autowired + private IAssemblyPartReportService assemblyPartReportService; + + @ApiOperation(value = "装配件报表") + @PostMapping("/queryReport") + public ResultBean queryReport(AssemblyPartReportModel model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = assemblyPartReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java index ff543c0..1d74350 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java @@ -7,13 +7,12 @@ import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.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.MesCokpitKanbanData; import cn.estsh.i3plus.pojo.mes.bean.MesDowntimeRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; -import cn.estsh.i3plus.pojo.mes.model.report.MesDowntimeRecordResModel; -import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; -import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; +import cn.estsh.i3plus.pojo.mes.model.report.*; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -25,6 +24,7 @@ import org.apache.commons.collections.CollectionUtils; import org.drools.core.rule.Collect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -148,4 +148,49 @@ public class MesBusiReportController extends MesBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + + @ApiOperation(value = "看板数据", notes = "看板数据") + @PostMapping("/mesCokpitKanbanData/query") + public ResultBean queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager) { + try { + ValidatorBean.beginValid(kanbanData) + .notNull("organizeCode", kanbanData.getOrganizeCode()); + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryMesCokpitKanbanData(kanbanData,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @ApiOperation(value = "通用导出报表查询", notes = "通用导出报表查询") + @PostMapping("/generalExport/query") + public ResultBean queryGeneralExport(MesGeneralExportReportModel model, Pager pager) { + try { + ValidatorBean.beginValid(model) + .notNull("organizeCode", model.getOrganizeCode()); + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryGeneralExport(model,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @ApiOperation(value = "通用发运报表查询", notes = "通用发运报表查询") + @PostMapping("/generalShipping/query") + public ResultBean queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager) { + try { + ValidatorBean.beginValid(model) + .notNull("organizeCode", model.getOrganizeCode()); + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryGeneralShipping(model,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ProductInspectionSubReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ProductInspectionSubReportController.java new file mode 100644 index 0000000..309d10b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ProductInspectionSubReportController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IProductInspectionSubReportService; +import cn.estsh.i3plus.ext.mes.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.MesQmsSuspicious; +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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:48 + * @Modify: + **/ +@Api("检验产品数据子报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/product-inspection-sub-report") +public class ProductInspectionSubReportController { + + @Autowired + private IProductInspectionSubReportService productInspectionSubReportService; + + @ApiOperation(value = "检验产品数据子报表") + @PostMapping("/queryReport") + public ResultBean queryReport(MesQmsSuspicious model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = productInspectionSubReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ShipmentDetailReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ShipmentDetailReportController.java new file mode 100644 index 0000000..d00f851 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/ShipmentDetailReportController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IShipmentDetailReportService; +import cn.estsh.i3plus.ext.mes.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.model.report.ShippingReportModel; +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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 发运明细报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:47 + * @Modify: + **/ +@Api("发运明细报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/shipment-detail-Report") +public class ShipmentDetailReportController { + + @Autowired + private IShipmentDetailReportService shipmentDetailReportService; + + @ApiOperation(value = "发运明细报表") + @PostMapping("/queryReport") + public ResultBean queryReport(ShippingReportModel model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = shipmentDetailReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/SuspiciousItemBarcodeReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/SuspiciousItemBarcodeReportController.java new file mode 100644 index 0000000..085e40d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/SuspiciousItemBarcodeReportController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.ISuspiciousItemBarcodeReportService; +import cn.estsh.i3plus.ext.mes.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.model.report.SuspiciousItemBarcodeReportModel; +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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description :可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 18:53 + * @Modify: + **/ +@Api("可疑品条码信息报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/suspicious-item-barcode-report") +public class SuspiciousItemBarcodeReportController { + + @Autowired + private ISuspiciousItemBarcodeReportService suspiciousItemBarcodeReportService; + + @ApiOperation(value = "查询可疑品条码信息报表") + @PostMapping("/queryReport") + public ResultBean queryReport(SuspiciousItemBarcodeReportModel model, Pager pager) { + try { + model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + ListPager result = suspiciousItemBarcodeReportService.queryReport(model,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(result); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java index 5286f1a..fa3c515 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java @@ -60,9 +60,8 @@ public class Pisces1Properties { * 注册客户定制数据源 */ LOGGER.info("【客户定制化:pisces1数据源加载...】"); - DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), - this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); - return piscesDataSource; + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces2Properties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces2Properties.java new file mode 100644 index 0000000..9c4de80 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces2Properties.java @@ -0,0 +1,67 @@ +package cn.estsh.i3plus.ext.mes.apiservice.cus_suit; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +/** + * @Description : pisces2数据源配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 11:29 + * @Modify: + **/ +@Configuration +public class Pisces2Properties { + + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + /*********************** + * pisces2数据源配置 + */ + @Value("${impp.pisces2.datasource.isopen}") + @Getter + private boolean piscesIsOpen; + + @Value("${impp.pisces2.datasource.driver-class-name}") + @Getter + private String piscesDriverClassName; + + @Value("${impp.pisces2.datasource.alias}") + @Getter + private String piscesDsAlias; + + @Value("${impp.pisces2.datasource.jdbc-url}") + @Getter + private String piscesDsJdbcUrl; + + @Value("${impp.pisces2.datasource.username}") + @Getter + private String piscesDsUsername; + + @Value("${impp.pisces2.datasource.password}") + @Getter + private String piscesDsPassword; + + @Bean(name = "pisces2DataSource") + @ConditionalOnExpression("'${impp.pisces2.datasource.isopen:false}' == 'true'") + public DynamicDataSourceProxy initPiscesCustomerSet(){ + LOGGER.info("【初始化客户定制化...】"); + + /** + * 注册客户定制数据源 + */ + LOGGER.info("【客户定制化:pisces2数据源加载...】"); + + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces3Properties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces3Properties.java new file mode 100644 index 0000000..be81436 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces3Properties.java @@ -0,0 +1,67 @@ +package cn.estsh.i3plus.ext.mes.apiservice.cus_suit; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +/** + * @Description : pisces3数据源配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 11:29 + * @Modify: + **/ +@Configuration +public class Pisces3Properties { + + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + /*********************** + * pisces3数据源配置 + */ + @Value("${impp.pisces3.datasource.isopen}") + @Getter + private boolean piscesIsOpen; + + @Value("${impp.pisces3.datasource.driver-class-name}") + @Getter + private String piscesDriverClassName; + + @Value("${impp.pisces3.datasource.alias}") + @Getter + private String piscesDsAlias; + + @Value("${impp.pisces3.datasource.jdbc-url}") + @Getter + private String piscesDsJdbcUrl; + + @Value("${impp.pisces3.datasource.username}") + @Getter + private String piscesDsUsername; + + @Value("${impp.pisces3.datasource.password}") + @Getter + private String piscesDsPassword; + + @Bean(name = "pisces3DataSource") + @ConditionalOnExpression("'${impp.pisces3.datasource.isopen:false}' == 'true'") + public DynamicDataSourceProxy initPiscesCustomerSet(){ + LOGGER.info("【初始化客户定制化...】"); + + /** + * 注册客户定制数据源 + */ + LOGGER.info("【客户定制化:pisces3数据源加载...】"); + + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java index 2677039..9a9f997 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java @@ -60,9 +60,8 @@ public class PiscesProperties { * 注册客户定制数据源 */ LOGGER.info("【客户定制化:pisces数据源加载...】"); - DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), - this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); - return piscesDataSource; + return DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(), this.getPiscesDsUsername(), this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java index 7053b64..4e89a43 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.dao; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import io.swagger.annotations.ApiOperation; @@ -18,10 +19,13 @@ import java.util.List; public interface IMesShippingOrderManagementDetailDao { int queryOrderDetailGroupByPartCount(MesShippingOrderManagementDetail detail); + int queryDetailGroupByPartNo(MesWorkOrderPart detail); List queryOrderDetailGroupByPartInfo(MesShippingOrderManagementDetail detail, Pager pager); + List queryOrderDetailGroupByPartInfo(MesWorkOrderPart detail, Pager pager); @ApiOperation("查询发运单明细") ListPager queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager); + List queryMesShippingOrderManagementDetail(MesWorkOrderPart bean); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IAssemblyPartReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IAssemblyPartReportDao.java new file mode 100644 index 0000000..eed77fa --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IAssemblyPartReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.AssemblyPartReportModel; + +/** + * @Description : 装配件查询 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:21 + * @Modify: + **/ +public interface IAssemblyPartReportDao { + ListPager queryReport(AssemblyPartReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java index cc405ab..98dda94 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IMesYfReportDao.java @@ -4,6 +4,11 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditi import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 报表-数据方法 @@ -22,4 +27,10 @@ public interface IMesYfReportDao { */ ListPager queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager); + @ApiOperation("通用导出报表") + ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager); + + @ApiOperation("通用发运报表查询") + ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager, List shippingGroupList); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IProductInspectionSubReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IProductInspectionSubReportDao.java new file mode 100644 index 0000000..7a98f3b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IProductInspectionSubReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesQmsSuspicious; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:51 + * @Modify: + **/ +public interface IProductInspectionSubReportDao { + ListPager queryReport(MesQmsSuspicious model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IShipmentDetailReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IShipmentDetailReportDao.java new file mode 100644 index 0000000..6bffa26 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/IShipmentDetailReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel; + +/** + * @Description : 发运明细报表 Dao + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:53 + * @Modify: + **/ +public interface IShipmentDetailReportDao { + ListPager queryReport(ShippingReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/ISuspiciousItemBarcodeReportDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/ISuspiciousItemBarcodeReportDao.java new file mode 100644 index 0000000..415c67c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/report/ISuspiciousItemBarcodeReportDao.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao.report; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.SuspiciousItemBarcodeReportModel; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:45 + * @Modify: + **/ +public interface ISuspiciousItemBarcodeReportDao { + ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index 3cbd941..e196c50 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -6,6 +6,8 @@ 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.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -20,6 +22,7 @@ import javax.persistence.Query; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @Description :SAP生产计划 @@ -187,4 +190,146 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde commonHql.append(" and m.publishTime <= :publishTimeEnd "); return commonHql.toString(); } + @Override + public List queryMesShippingOrderManagementDetail(MesWorkOrderPart detail ) { + StringBuffer hql = new StringBuffer("" + + " SELECT " + + " SUBSTRING_INDEX(sd.bar_code, ',', 1) AS bar_code, " + + " sd.plan_qty, " + + " sd.actual_qty, " + + " s.shipping_code, " + + " sd.part_no " + + " from mes_shipping_detail sd " + + " left join mes_shipping s on s.id=sd.pid " + + " WHERE sd.status in (20) " +//todo 发运 20 + " and sd.bar_code != '' and sd.bar_code is not NULL "); + hql.append(" and sd.organize_code = :organizeCode "); + hql.append(" and sd.is_deleted = :isDeleted "); + hql.append(" and sd.is_valid = :isValid "); + + if (!StringUtil.isEmpty(detail.getShippingCode())){ + hql.append(" and s.shipping_code = '"+detail.getShippingCode()+"' "); + } + if (!StringUtil.isEmpty(detail.getTotalPartNo())){ + hql.append(" and sd.part_no = '"+detail.getTotalPartNo()+"' "); + } + if (!StringUtil.isEmpty(detail.getWorkOrderNo())){ + hql.append(" and sd.bar_code like '"+detail.getWorkOrderNo()+"%' "); + } + + Query query = entityManager.createNativeQuery(hql.toString()); + query.setParameter("organizeCode", detail.getOrganizeCode()); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + List list = query.getResultList(); + List modelList = new ArrayList<>(); + + for (Object result : list) { + Object[] cells = (Object[]) result; + MesShippingOrderManagementDetail model = new MesShippingOrderManagementDetail(); + model.setBarcode(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setPlanQty(StringUtils.isEmpty(cells[1]) ? 1 : Double.parseDouble(String.valueOf(cells[1]))); + model.setActualQty(StringUtils.isEmpty(cells[2]) ? 1 : Integer.parseInt(String.valueOf(cells[2]))); + model.setShippingCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); + model.setPartNo(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + modelList.add(model); + } + + return modelList; + } + @Override + public int queryDetailGroupByPartNo(MesWorkOrderPart detail) { + + StringBuffer hql = new StringBuffer("select count(1)" + + " from mes_work_order_part wop " + + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " ); + hql.append(" WHERE wop.organize_code = :organizeCode "); + hql.append(" and wop.is_deleted = :isDeleted "); + hql.append(" and wop.is_valid = :isValid "); + if (!StringUtil.isEmpty(detail.getModifyDateTimeStart())){ + hql.append(" and wo.shipping_time >= '"+detail.getModifyDateTimeStart()+"' "); + } + if (!StringUtil.isEmpty(detail.getModifyDateTimeEnd())){ + hql.append(" and wo.shipping_time <= '"+detail.getModifyDateTimeEnd()+"' "); + } + if (!StringUtil.isEmpty(detail.getPartNo())){ + hql.append(" and wop.part_no ='"+detail.getPartNo()+"' "); + } + if (!StringUtil.isEmpty(detail.getWorkCenterCode())){ + hql.append(" and wop.work_center_code ='"+detail.getWorkCenterCode()+"' "); + } + hql.append(" and wop.work_order_no in (:codeList) "); + + Query query = entityManager.createNativeQuery(hql.toString()); + query.setParameter("organizeCode", detail.getOrganizeCode()); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("codeList", detail.getShippingDetails().stream().map(MesShippingOrderManagementDetail::getBarcode).collect(Collectors.toList())); + + + List list = query.getResultList(); + + if (CollectionUtils.isEmpty(list)) { + return 0; + } + + return list.size(); + } + @Override + public List queryOrderDetailGroupByPartInfo(MesWorkOrderPart detail, Pager pager) { + + StringBuffer hql = new StringBuffer("" + + "SELECT " + + " wo.work_center_code, " + + " wop.part_no, " + + " wop.part_name, " + + " wop.item_qty, " + + " wo.shipping_time, " + + " wop.work_order_no " + + " from mes_work_order_part wop " + + " left join mes_work_order wo on wop.work_order_no=wo.work_order_no " ); + hql.append(" WHERE wop.organize_code = :organizeCode "); + hql.append(" and wop.is_deleted = :isDeleted "); + hql.append(" and wop.is_valid = :isValid "); + if (!StringUtil.isEmpty(detail.getModifyDateTimeStart())){ + hql.append(" and wo.shipping_time >= '"+detail.getModifyDateTimeStart()+"' "); + } + if (!StringUtil.isEmpty(detail.getModifyDateTimeEnd())){ + hql.append(" and wo.shipping_time <= '"+detail.getModifyDateTimeEnd()+"' "); + } + if (!StringUtil.isEmpty(detail.getPartNo())){ + hql.append(" and wop.part_no ='"+detail.getPartNo()+"' "); + } + if (!StringUtil.isEmpty(detail.getWorkCenterCode())){ + hql.append(" and wop.work_center_code ='"+detail.getWorkCenterCode()+"' "); + } + hql.append(" and wop.work_order_no in (:codeList) "); + + Query query = entityManager.createNativeQuery(hql.toString()); + query.setParameter("organizeCode", detail.getOrganizeCode()); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("codeList", detail.getShippingDetails().stream().map(MesShippingOrderManagementDetail::getBarcode).collect(Collectors.toList())); + + + query.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize()); + + List list = query.getResultList(); + List modelList = new ArrayList<>(); + + for (Object result : list) { + Object[] cells = (Object[]) result; + MesWorkOrderPart model = new MesWorkOrderPart(); + model.setWorkCenterCode(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setPartNo(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); + model.setPartName(StringUtils.isEmpty(cells[2]) ? "" : String.valueOf(cells[2])); + model.setItemQty(StringUtils.isEmpty(cells[3]) ? 1 : Double.parseDouble(String.valueOf(cells[3]))); + model.setShippingTime(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + model.setWorkOrderNo(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); + modelList.add(model); + } + + return modelList; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java new file mode 100644 index 0000000..b6da623 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/AssemblyPartReportDaoImpl.java @@ -0,0 +1,203 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IAssemblyPartReportDao; +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.mes.model.report.AssemblyPartReportModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 装配件查询 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:21 + * @Modify: + **/ +@Service +public class AssemblyPartReportDaoImpl implements IAssemblyPartReportDao { + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(AssemblyPartReportModel model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + dataQueryHql.append("SELECT new ").append(AssemblyPartReportModel.class.getName()).append("("); + dataQueryHql.append("mes_production_assembly.serialNumber AS serialNumber,"); + dataQueryHql.append("mes_production_assembly.workCenterCode AS workCenterCode,"); + dataQueryHql.append("mes_production_assembly.workCellCode AS workCellCode,"); + dataQueryHql.append("mes_production_assembly.partNo AS partNo,"); + dataQueryHql.append("mes_production_assembly.partName AS partName,"); + dataQueryHql.append("mes_production_assembly.matchType AS matchType,"); + dataQueryHql.append("mes_production_assembly.matchRule AS matchRule,"); + dataQueryHql.append("mes_production_assembly.assemblyPartNo AS assemblyPartNo,"); + dataQueryHql.append("mes_production_assembly.assemblyPartName AS assemblyPartName,"); + dataQueryHql.append("mes_production_assembly.assemblySn AS assemblySn,"); + dataQueryHql.append("mes_production_assembly.productSn AS productSn,"); + dataQueryHql.append("mes_production_assembly.isSkip AS isSkip,"); + dataQueryHql.append("mes_production_assembly.createDatetime AS createDatetime,"); + dataQueryHql.append("mes_production_assembly.createUser AS createUser,"); + dataQueryHql.append("mes_production_record.workOrderNo AS workOrderNo,"); + dataQueryHql.append("mes_production_record.lotNo AS lotNo,"); + dataQueryHql.append("mes_equipment.equipmentName AS equipmentName,"); + dataQueryHql.append("mes_equipment.equipId AS equipId "); + dataQueryHql.append(") "); + + StringBuilder countQueryHql= new StringBuilder(); + countQueryHql.append("select count(1)"); + + StringBuilder commonQueryHql = new StringBuilder(); + commonQueryHql.append("FROM MesProductionAssembly mes_production_assembly "); + commonQueryHql.append("JOIN MesProductionRecord mes_production_record ON mes_production_assembly.productionRecordId = mes_production_record.id "); + commonQueryHql.append("JOIN MesEquipment mes_equipment ON mes_production_record.equipmentCode = mes_equipment.equipmentCode "); + commonQueryHql.append("WHERE 1=1 "); + commonQueryHql.append("AND mes_production_assembly.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_production_record.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_equipment.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_production_assembly.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_production_record.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_equipment.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_production_assembly.isValid = :isValid "); + commonQueryHql.append("AND mes_production_record.isValid = :isValid "); + commonQueryHql.append("AND mes_equipment.isValid = :isValid "); + // like 条码 + if(!StringUtils.isEmpty(model.getSerialNumber())){ + commonQueryHql.append("AND mes_production_assembly.serialNumber like :serialNumber "); + } + // = 装配件条码确认规则 + if (!StringUtils.isEmpty(model.getMatchRule())){ + commonQueryHql.append("AND mes_production_assembly.matchRule = :matchRule "); + } + // like 零件号 + if(!StringUtils.isEmpty(model.getPartNo())){ + commonQueryHql.append("AND mes_production_assembly.partNo like :partNo "); + } + //like 主零件号 + if(!StringUtils.isEmpty(model.getPartName())){ + commonQueryHql.append("AND mes_production_assembly.partName like :partName "); + } + //like 装配零件号 + if(!StringUtils.isEmpty(model.getAssemblyPartNo())){ + commonQueryHql.append("AND mes_production_assembly.assemblyPartNo like :assemblyPartNo "); + } + //like 装配件零件名称 + if(!StringUtils.isEmpty(model.getAssemblyPartName())){ + commonQueryHql.append("AND mes_production_assembly.assemblyPartName like :assemblyPartName "); + } + //like 装配条码 + if(!StringUtils.isEmpty(model.getAssemblySn())){ + commonQueryHql.append("AND mes_production_assembly.assemblySn like :assemblySn "); + } + // = 是否跳过 + if(model.getIsSkip() != null){ + commonQueryHql.append("AND mes_production_assembly.isSkip = :isSkip "); + } + //like 创建人 + if(!StringUtils.isEmpty(model.getCreateUser())){ + commonQueryHql.append("AND mes_production_assembly.createUser like :createUser "); + } + //范围时间 创建时间 + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + commonQueryHql.append("AND mes_production_assembly.createDatetime between :createDateTimeStart and :createDateTimeEnd "); + } + //like 产线 + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + commonQueryHql.append("AND mes_production_assembly.workCenterCode like :workCenterCode "); + } + //like 工位编号 + if(!StringUtils.isEmpty(model.getWorkCellCode())){ + commonQueryHql.append("AND mes_production_assembly.workCellCode like :workCellCode "); + } + if (model.getMatchType()!=null){ + commonQueryHql.append("AND mes_production_assembly.matchRule = :matchRule "); + } + //like 加工单号 + if(!StringUtils.isEmpty(model.getWorkOrderNo())){ + commonQueryHql.append("AND mes_production_record.workOrderNo like :workOrderNo "); + } + //like 设备名称 + if(!StringUtils.isEmpty(model.getEquipmentName())){ + commonQueryHql.append("AND mes_equipment.equipmentName like :equipmentName "); + } + if (model.getEquipId()!=null){ + commonQueryHql.append("AND mes_equipment.equipId = :equipId "); + } + commonQueryHql.append("ORDER BY mes_production_assembly.createDatetime DESC "); + + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), AssemblyPartReportModel.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + //本次查询满足条件的总数 + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + //查询本页数据 + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + private void setQueryParams(Query dataQuery, AssemblyPartReportModel model) { + dataQuery.setParameter("organizeCode", model.getOrganizeCode()); + dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + if(!StringUtils.isEmpty(model.getSerialNumber())){ + dataQuery.setParameter("serialNumber", model.getSerialNumber() + "%"); + } + if (model.getMatchType()!=null){ + dataQuery.setParameter("matchType", model.getMatchType()); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + dataQuery.setParameter("partNo", model.getPartNo() + "%"); + } + if(!StringUtils.isEmpty(model.getPartName())){ + dataQuery.setParameter("partName", model.getPartName() + "%"); + } + if(!StringUtils.isEmpty(model.getAssemblyPartNo())){ + dataQuery.setParameter("assemblyPartNo", model.getAssemblyPartNo() + "%"); + } + if(!StringUtils.isEmpty(model.getAssemblyPartName())){ + dataQuery.setParameter("assemblyPartName", model.getAssemblyPartName() + "%"); + } + if(!StringUtils.isEmpty(model.getAssemblySn())){ + dataQuery.setParameter("assemblySn", model.getAssemblySn() + "%"); + } + if(model.getIsSkip() != null){ + dataQuery.setParameter("isSkip", model.getIsSkip()); + } + if(!StringUtils.isEmpty(model.getCreateUser())){ + dataQuery.setParameter("createUser", model.getCreateUser() + "%"); + } + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + dataQuery.setParameter("createDateTimeStart", model.getCreateDateTimeStart()); + dataQuery.setParameter("createDateTimeEnd", model.getCreateDateTimeEnd()); + } + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + dataQuery.setParameter("workCenterCode", model.getWorkCenterCode() + "%"); + } + if(!StringUtils.isEmpty(model.getWorkCellCode())){ + dataQuery.setParameter("workCellCode", model.getWorkCellCode() + "%"); + } + if (model.getMatchType()!=null){ + dataQuery.setParameter("matchRule", model.getMatchRule()); + } + if(!StringUtils.isEmpty(model.getWorkOrderNo())){ + dataQuery.setParameter("workOrderNo", model.getWorkOrderNo() + "%"); + } + if(!StringUtils.isEmpty(model.getEquipmentName())){ + dataQuery.setParameter("equipmentName", model.getEquipmentName() + "%"); + } + if (model.getEquipId()!=null){ + dataQuery.setParameter("equipId", model.getEquipId()); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java index 970fbe6..806652d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/MesYfReportDaoImpl.java @@ -7,13 +7,21 @@ 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.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.persistence.EntityManager; import javax.persistence.Query; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : 报表-数据方法实现 @@ -107,4 +115,135 @@ public class MesYfReportDaoImpl implements IMesYfReportDao { return new ListPager<>(resultList, pager); } + @Override + public ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager) { + StringBuilder dataHql = new StringBuilder(); + dataHql.append(" select new ").append(MesGeneralExportReportModel.class.getName()).append("(workOrder.organizeCode,workOrder.workCenterCode,workOrder.id,workOrder.workOrderNo,workOrder.custSn,partType.partTypeName,assembly.assemblySn,assembly.createDatetime,workOrder.shippingTime)"); + //共用HQL + String commonHql = getGeneralExportCommonHql(mesGeneralExportReportModel); + //行数 + Query countQuery = entityManager.createQuery("select count(1) " + commonHql); + setGeneralExportParameter(mesGeneralExportReportModel, countQuery); + //数据 + Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getGeneralExportOrderBy(mesGeneralExportReportModel)).toString(), MesGeneralExportReportModel.class); + setGeneralExportParameter(mesGeneralExportReportModel, dataQuery); + if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + if (count <= 0) return new ListPager<>(new ArrayList<>(), pager); + pager = PagerHelper.getPager(pager, count); + dataQuery.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize()); + return new ListPager<>(dataQuery.getResultList(), pager); + } + + + @Override + public ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager, List shippingGroupList) { + StringBuilder dataHql = new StringBuilder(); + dataHql.append(" select new ").append(MesGeneralShippingReportModel.class.getName()).append("(s.id,s.status,s.shippingCode,wo.workCenterCode,s.seq,wo.custOrderNo,sd.partNo,wo.custPartNo,wo.carModelCode,cgg.upperColour,s.endScanTime,sr.startCarNo,sr.endCarNo,sr.expectedArrivalTime,sr.createDatetime)"); + //共用HQL + String commonHql = getGeneralShippingCommonHql(model, shippingGroupList); + //行数 + Query countQuery = entityManager.createQuery("select count(1) " + commonHql); + setGeneralShippingParameter(model, countQuery, shippingGroupList); + //数据 + Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getGeneralShippingOrderBy(model)).toString(), MesGeneralShippingReportModel.class); + setGeneralShippingParameter(model, dataQuery, shippingGroupList); + if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + if (count <= 0) return new ListPager<>(new ArrayList<>(), pager); + pager = PagerHelper.getPager(pager, count); + dataQuery.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize()); + return new ListPager<>(dataQuery.getResultList(), pager); + } + + private void setGeneralExportParameter(MesGeneralExportReportModel model, Query query) { + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("organizeCode", model.getOrganizeCode()); + query.setParameter("workOrderStatus", Stream.of(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(),MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue(),MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()).collect(Collectors.toList())); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) query.setParameter("shippingTimeStart", model.getShippingTimeStart()); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) query.setParameter("shippingTimeEnd", model.getShippingTimeEnd()); + } + + private String getGeneralExportOrderBy(MesGeneralExportReportModel model) { + StringBuilder orderBy = new StringBuilder(); + if (StringUtils.isEmpty(model.getOrderByParam()) || StringUtils.isEmpty(model.getAscOrDesc())) { + model.setOrderByParam("createDatetime"); + model.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue()); + } + return orderBy.append(" order by assembly.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString(); + } + + private String getGeneralExportCommonHql(MesGeneralExportReportModel model) { + StringBuilder commonHql = new StringBuilder(); + commonHql.append(" from MesWorkOrderAssembly orderAssembly left join MesWorkOrder workOrder on orderAssembly.workOrderNo = workOrder.workOrderNo and workOrder.organizeCode = :organizeCode and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid"); + commonHql.append(" left join MesProductionAssembly assembly on workOrder.custSn = assembly.custSn and orderAssembly.organizeCode=:organizeCode and orderAssembly.isDeleted=:isDeleted and orderAssembly.isValid=:isValid "); + commonHql.append(" left join MesProdRuleSortCfg sortCfg on orderAssembly.pid = sortCfg.id and sortCfg.organizeCode = :organizeCode and sortCfg.isDeleted=:isDeleted and sortCfg.isValid=:isValid"); + commonHql.append(" left join MesPartType partType on sortCfg.partTypeCode = partType.partTypeCode and partType.organizeCode = :organizeCode and partType.isDeleted=:isDeleted and partType.isValid=:isValid"); + commonHql.append(" where orderAssembly.organizeCode=:organizeCode and orderAssembly.isDeleted=:isDeleted and orderAssembly.isValid=:isValid and workOrder.organizeCode = :organizeCode"); + commonHql.append(" and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid and assembly.organizeCode = :organizeCode and assembly.isDeleted=:isDeleted and assembly.isValid=:isValid"); + commonHql.append(" and sortCfg.organizeCode = :organizeCode and sortCfg.isDeleted=:isDeleted and sortCfg.isValid=:isValid and partType.organizeCode = :organizeCode and partType.isDeleted=:isDeleted and partType.isValid=:isValid "); + commonHql.append(" and partType.assemblyDescription = '通用追溯' and workOrder.workOrderStatus in (:workOrderStatus) "); + if (!StringUtils.isEmpty(model.getWorkCenterCode())) commonHql.append(" and workOrder.workCenterCode like '%").append(model.getWorkCenterCode()).append("%' "); + if (!StringUtils.isEmpty(model.getCustSn())) commonHql.append(" and orderAssembly.custSn like '%").append(model.getCustSn()).append("%' "); + if (!StringUtils.isEmpty(model.getAssemblySn())) commonHql.append(" and orderAssembly.assemblySn like '%").append(model.getAssemblySn()).append("%' "); + if (!StringUtils.isEmpty(model.getWorkOrderNo())) commonHql.append(" and workOrder.workOrderNo like '%").append(model.getWorkOrderNo()).append("%' "); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) commonHql.append(" and workOrder.shippingTime >= :shippingTimeStart "); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) commonHql.append(" and workOrder.shippingTime <= :shippingTimeEnd "); + return commonHql.toString(); + } + + private void setGeneralShippingParameter(MesGeneralShippingReportModel model, Query query, List shippingGroupList) { + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("organizeCode", model.getOrganizeCode()); + if(!CollectionUtils.isEmpty(shippingGroupList)) query.setParameter("shippingGroupList", shippingGroupList); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) query.setParameter("shippingTimeStart", model.getShippingTimeStart()); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) query.setParameter("shippingTimeEnd", model.getShippingTimeEnd()); + if (!StringUtils.isEmpty(model.getArrivalTimeStart())) query.setParameter("arrivalTimeStart", model.getArrivalTimeStart()); + if (!StringUtils.isEmpty(model.getArrivalTimeEnd())) query.setParameter("arrivalTimeEnd", model.getArrivalTimeEnd()); + if (!StringUtils.isEmpty(model.getReceivingTimeStart())) query.setParameter("receivingTimeStart", model.getReceivingTimeStart()); + if (!StringUtils.isEmpty(model.getReceivingTimeEnd())) query.setParameter("receivingTimeEnd", model.getReceivingTimeEnd()); + } + + private String getGeneralShippingOrderBy(MesGeneralShippingReportModel model) { + StringBuilder orderBy = new StringBuilder(); + if (StringUtils.isEmpty(model.getOrderByParam()) || StringUtils.isEmpty(model.getAscOrDesc())) { + model.setOrderByParam("createDatetime"); + model.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue()); + } + return orderBy.append(" order by s.").append(model.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == model.getAscOrDesc() ? "desc" : "asc").toString(); + } + + private String getGeneralShippingCommonHql(MesGeneralShippingReportModel model, List shippingGroupList) { + StringBuilder commonHql = new StringBuilder(); + commonHql.append(" from MesShippingOrderManagement s left join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid "); + commonHql.append(" left join MesWorkOrder wo on sd.logicSeq = wo.workOrderSeq and wo.organizeCode = :organizeCode and wo.isDeleted=:isDeleted and wo.isValid=:isValid "); + commonHql.append(" left join MesCimGmGepics cgg on cgg.csnNo = wo.custOrderNo and cgg.organizeCode = :organizeCode and cgg.isDeleted=:isDeleted and cgg.isValid=:isValid and cgg.barcode !='' and cgg.barcode is not null "); + commonHql.append(" left join MesSupplyclientRunsheet sr on s.shippingCode = sr.runSheetNo and sr.organizeCode = :organizeCode and sr.isDeleted=:isDeleted and sr.isValid=:isValid "); + commonHql.append(" where s.organizeCode = :organizeCode and s.isDeleted=:isDeleted and s.isValid=:isValid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid and wo.organizeCode = :organizeCode and wo.isDeleted=:isDeleted and wo.isValid=:isValid"); + if(!CollectionUtils.isEmpty(shippingGroupList)) commonHql.append(" and s.shippingGroupCode in (:shippingGroupList)"); + if (!StringUtils.isEmpty(model.getShippingCode())) commonHql.append(" and s.shippingCode like '%").append(model.getShippingCode()).append("%' "); + if (!StringUtils.isEmpty(model.getWorkCenterCode())) commonHql.append(" and wo.workCenterCode like '%").append(model.getWorkCenterCode()).append("%' "); + if (!StringUtils.isEmpty(model.getSeq())) commonHql.append(" and s.seq like '%").append(model.getSeq()).append("%' "); + if (!StringUtils.isEmpty(model.getCustOrderCode())) commonHql.append(" and wo.custOrderNo like '%").append(model.getCustOrderCode()).append("%' "); + if (!StringUtils.isEmpty(model.getPartNo())) commonHql.append(" and sd.partNo like '%").append(model.getPartNo()).append("%' "); + if (!StringUtils.isEmpty(model.getCustPartNo())) commonHql.append(" and wo.custPartNo like '%").append(model.getCustPartNo()).append("%' "); + if (!StringUtils.isEmpty(model.getVehicleNo())) commonHql.append(" and wo.carModelCode like '%").append(model.getVehicleNo()).append("%' "); + if (!StringUtils.isEmpty(model.getUpperColour())) commonHql.append(" and cgg.upperColour like '%").append(model.getUpperColour()).append("%' "); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) commonHql.append(" and s.endScanTime >= :shippingTimeStart "); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) commonHql.append(" and s.endScanTime <= :shippingTimeEnd "); + if (!StringUtils.isEmpty(model.getStartCarNo())) commonHql.append(" and sr.startCarNo like '%").append(model.getStartCarNo()).append("%' "); + if (!StringUtils.isEmpty(model.getEndCarNo())) commonHql.append(" and sr.endCarNo like '%").append(model.getEndCarNo()).append("%' "); + if (!StringUtils.isEmpty(model.getArrivalTimeStart())) commonHql.append(" and sr.expectedArrivalTime >= :arrivalTimeStart "); + if (!StringUtils.isEmpty(model.getArrivalTimeEnd())) commonHql.append(" and sr.expectedArrivalTime <= :arrivalTimeEnd "); + if (!StringUtils.isEmpty(model.getShippingTimeStart())) commonHql.append(" and s.endScanTime >= :shippingTimeStart "); + if (!StringUtils.isEmpty(model.getShippingTimeEnd())) commonHql.append(" and s.endScanTime <= :shippingTimeEnd "); + if (!StringUtils.isEmpty(model.getReceivingTimeStart())) commonHql.append(" and sr.createDatetime >= :receivingTimeStart "); + if (!StringUtils.isEmpty(model.getReceivingTimeEnd())) commonHql.append(" and sr.createDatetime <= :receivingTimeEnd "); + return commonHql.toString(); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java new file mode 100644 index 0000000..c201a3b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ProductInspectionSubReportDaoImpl.java @@ -0,0 +1,100 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IProductInspectionSubReportDao; +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.mes.bean.MesQmsSuspicious; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:51 + * @Modify: + **/ +@Service +public class ProductInspectionSubReportDaoImpl implements IProductInspectionSubReportDao { + + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(MesQmsSuspicious model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + StringBuilder countQueryHql= new StringBuilder(); + StringBuilder commonQueryHql = new StringBuilder(); + dataQueryHql.append("select new ") + .append(MesQmsSuspicious.class.getName()).append(" ( "); + dataQueryHql.append("mes_qms_suspicious.inspectionDate AS inspectionDate,"); + dataQueryHql.append("mes_qms_suspicious.partNo AS partNo,"); + dataQueryHql.append("mes_qms_suspicious.partName AS partName,"); + dataQueryHql.append("mes_qms_suspicious.inspectionQty AS inspectionQty,"); + dataQueryHql.append("mes_qms_suspicious.qualifiedQty AS qualifiedQty,"); + dataQueryHql.append("mes_qms_suspicious.unqualifiedQty AS unqualifiedQty,"); + dataQueryHql.append("mes_qms_suspicious.misjudgmentQty AS misjudgmentQty,"); + dataQueryHql.append("mes_qms_suspicious.scrappedQty AS scrappedQty,"); + dataQueryHql.append("mes_qms_suspicious.reworkQualified AS reworkQualified,"); + dataQueryHql.append("mes_qms_suspicious.reworkScrapped AS reworkScrapped,"); + dataQueryHql.append("mes_qms_suspicious.reworkQty AS reworkQty,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE (qualifiedQty / inspectionQty * 100) END AS firstPassRate,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE (unqualifiedQty / inspectionQty * 100) END AS defectRate,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE ((qualifiedQty + misjudgmentQty + reworkQualified) / inspectionQty * 100) END AS finalPassRate,"); + dataQueryHql.append("CASE WHEN inspectionQty = 0 THEN 0 ELSE ((scrappedQty + reworkScrapped) / inspectionQty * 100) END AS finalScrapRate,"); + dataQueryHql.append("mes_qms_suspicious.organizeCode AS organizeCode"); + dataQueryHql.append(") "); + + countQueryHql.append("select count(1) "); + + commonQueryHql.append("FROM MesQmsSuspicious mes_qms_suspicious "); + commonQueryHql.append("WHERE 1=1 "); + commonQueryHql.append("AND mes_qms_suspicious.organizeCode = :organizeCode "); + commonQueryHql.append("AND mes_qms_suspicious.isDeleted = :isDeleted "); + commonQueryHql.append("AND mes_qms_suspicious.isValid = :isValid "); + if (!StringUtils.isEmpty(model.getInspectionStartDate()) && !StringUtils.isEmpty(model.getInspectionEndDate())){ + commonQueryHql.append("AND mes_qms_suspicious.createDatetime BETWEEN :inspectionStartDate AND :inspectionEndDate "); + } + if(!StringUtils.isEmpty(model.getPartName())){ + commonQueryHql.append("AND mes_qms_suspicious.partName like :partName "); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + commonQueryHql.append("AND mes_qms_suspicious.partNo like :partNo "); + } + + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), MesQmsSuspicious.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + private void setQueryParams(Query dataQuery, MesQmsSuspicious model) { + dataQuery.setParameter("organizeCode", model.getOrganizeCode()); + dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + if (!StringUtils.isEmpty(model.getInspectionStartDate()) && !StringUtils.isEmpty(model.getInspectionEndDate())){ + dataQuery.setParameter("inspectionStartDate", model.getInspectionStartDate()); + dataQuery.setParameter("inspectionEndDate", model.getInspectionEndDate()); + } + if(!StringUtils.isEmpty(model.getPartName())){ + dataQuery.setParameter("partName", model.getPartName() + "%"); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + dataQuery.setParameter("partNo", model.getPartNo() + "%"); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java new file mode 100644 index 0000000..9278513 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/ShipmentDetailReportDaoImpl.java @@ -0,0 +1,176 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IShipmentDetailReportDao; +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.mes.model.report.ShippingReportModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 发运明细报表 Dao实现 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:53 + * @Modify: + **/ +@Service +public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao { + + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(ShippingReportModel model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + StringBuilder countQueryHql = new StringBuilder(); + StringBuilder commonQueryHql = new StringBuilder(); + + dataQueryHql.append("select new ").append(ShippingReportModel.class.getName()).append(" ( "); + + // 添加所有需要查询的字段 + dataQueryHql.append("momd.createDatetime AS createDate,"); + dataQueryHql.append("momd.createUser AS createUser,"); + dataQueryHql.append("momd.isValid AS isValid,"); + dataQueryHql.append("momd.isDeleted AS isDeleted,"); + dataQueryHql.append("momd.modifyDatetime AS modifyDate,"); + dataQueryHql.append("momd.modifyUser AS modifyUser,"); + dataQueryHql.append("momd.organizeCode AS organizeCode,"); + dataQueryHql.append("momd.actualQty AS actualQty,"); + dataQueryHql.append("momd.custInfoSeq AS custInfoSeq,"); + dataQueryHql.append("momd.custOrderNo AS custOrderNo,"); + dataQueryHql.append("momd.custPartNo AS custPartNo,"); + dataQueryHql.append("momd.logicSeq AS logicSeq,"); + dataQueryHql.append("momd.paidQty AS paidQty,"); + dataQueryHql.append("momd.partName AS partName,"); + dataQueryHql.append("momd.partNo AS partNo,"); + dataQueryHql.append("momd.planQty AS planQty,"); + dataQueryHql.append("momd.status AS dStatus,"); + dataQueryHql.append("momd.supplierCode AS supplierCode,"); + dataQueryHql.append("momd.unit AS dUnit,"); + dataQueryHql.append("momd.barcode AS barCode,"); + dataQueryHql.append("momd.vin AS vin,"); + dataQueryHql.append("momd.assyCode AS assyCode,"); + dataQueryHql.append("momd.carSerialCode AS carSerialCode,"); + + dataQueryHql.append("ms.checkSeqCode AS checkSeqCode,"); + dataQueryHql.append("ms.custCode AS custCode,"); + dataQueryHql.append("ms.custDockCode AS custDockCode,"); + dataQueryHql.append("ms.custOrganizeCode AS custOrganizeCode,"); + dataQueryHql.append("ms.custName AS custName,"); + dataQueryHql.append("ms.custOrganizeName AS custOrganizeName,"); + dataQueryHql.append("ms.dateSource AS dateSource,"); + dataQueryHql.append("ms.endScanTime AS endScanTime,"); + dataQueryHql.append("ms.lastPrintTime AS lastPrintTime,"); + dataQueryHql.append("ms.lastPrintUser AS lastPrintUser,"); + dataQueryHql.append("ms.printCount AS printCount,"); + dataQueryHql.append("ms.publishFlag AS publishFlag,"); + dataQueryHql.append("ms.publishTime AS publishTime,"); + dataQueryHql.append("ms.rackNo AS rackNo,"); + dataQueryHql.append("ms.roadProcess AS roadProcess,"); + dataQueryHql.append("ms.sendDockCode AS sendDockCode,"); + dataQueryHql.append("ms.seq AS seq,"); + dataQueryHql.append("ms.shippingGroupName AS shippingGroupName,"); + dataQueryHql.append("ms.shippingCode AS shippingCode,"); + dataQueryHql.append("ms.shippingType AS shippingType,"); + dataQueryHql.append("ms.startScanTime AS startScanTime,"); + dataQueryHql.append("ms.status AS status,"); + dataQueryHql.append("ms.shippingGroupCode AS shippingGroupCode,"); + dataQueryHql.append("ms.orderCode AS orderCode,"); + dataQueryHql.append("ms.planArriveEndTime AS planArriveEndTime,"); + dataQueryHql.append("ms.scanSeqWay AS scanSeqWay"); + dataQueryHql.append(")"); + + countQueryHql.append("select count(1) "); + + commonQueryHql.append(" FROM MesShippingOrderManagement as ms "); + commonQueryHql.append("JOIN MesShippingOrderManagementDetail as momd "); + commonQueryHql.append("ON ms.id = momd.pid "); + commonQueryHql.append("WHERE 1=1 "); + commonQueryHql.append("AND momd.organizeCode = :organizeCode "); + commonQueryHql.append("AND ms.organizeCode = :organizeCode "); + commonQueryHql.append("AND momd.isDeleted = :isDeleted "); + commonQueryHql.append("AND momd.isValid = :isValid "); + commonQueryHql.append("AND ms.isDeleted = :isDeleted "); + commonQueryHql.append("AND ms.isValid = :isValid "); + + // 动态添加其他查询条件 + if (!StringUtils.isEmpty(model.getShippingCode())) { + commonQueryHql.append("AND ms.shippingCode like :shippingCode "); + } + if (!StringUtils.isEmpty(model.getPartNo())) { + commonQueryHql.append("AND momd.partNo like :partNo "); + } + if (!StringUtils.isEmpty(model.getCustPartNo())) { + commonQueryHql.append("AND momd.custPartNo like :custPartNo "); + } + if (!StringUtils.isEmpty(model.getShippingType())) { + commonQueryHql.append("AND ms.shippingType = :shippingType "); + } + if (!StringUtils.isEmpty(model.getCustCode())) { + commonQueryHql.append("AND ms.custCode like :custCode "); + } + if (!StringUtils.isEmpty(model.getStartScanTimeStart()) && !StringUtils.isEmpty(model.getStartScanTimeEnd())) { + commonQueryHql.append("AND ms.startScanTime between :startScanTimeStart and :startScanTimeEnd "); + } + if (!StringUtils.isEmpty(model.getEndScanTimeStart()) && !StringUtils.isEmpty(model.getEndScanTimeEnd())) { + commonQueryHql.append("AND ms.endScanTime between :endScanTimeStart and :endScanTimeEnd "); + } + if (!StringUtils.isEmpty(model.getPublishTimeStart()) && !StringUtils.isEmpty(model.getPublishTimeEnd())) { + commonQueryHql.append("AND ms.publishTime between :publishTimeStart and :publishTimeEnd "); + } + + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), ShippingReportModel.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + + private void setQueryParams(Query dataQuery, ShippingReportModel model) { + dataQuery.setParameter("organizeCode", model.getOrganizeCode()); + dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + if (!StringUtils.isEmpty(model.getShippingCode())) { + dataQuery.setParameter("shippingCode", model.getShippingCode() + "%"); + } + if (!StringUtils.isEmpty(model.getPartNo())) { + dataQuery.setParameter("partNo", model.getPartNo() + "%"); + } + if (!StringUtils.isEmpty(model.getCustPartNo())) { + dataQuery.setParameter("custPartNo", model.getCustPartNo() + "%"); + } + if (!StringUtils.isEmpty(model.getShippingType())) { + dataQuery.setParameter("shippingType", model.getShippingType()); + } + if (!StringUtils.isEmpty(model.getCustCode())) { + dataQuery.setParameter("custCode", model.getCustCode() + "%"); + } + if (!StringUtils.isEmpty(model.getStartScanTimeStart()) && !StringUtils.isEmpty(model.getStartScanTimeEnd())) { + dataQuery.setParameter("startScanTimeStart", model.getStartScanTimeStart()); + dataQuery.setParameter("startScanTimeEnd", model.getStartScanTimeEnd()); + } + if (!StringUtils.isEmpty(model.getEndScanTimeStart()) && !StringUtils.isEmpty(model.getEndScanTimeEnd())) { + dataQuery.setParameter("endScanTimeStart", model.getEndScanTimeStart()); + dataQuery.setParameter("endScanTimeEnd", model.getEndScanTimeEnd()); + } + if (!StringUtils.isEmpty(model.getPublishTimeStart()) && !StringUtils.isEmpty(model.getPublishTimeEnd())) { + dataQuery.setParameter("publishTimeStart",model.getPublishTimeStart()); + dataQuery.setParameter("publishTimeEnd", model.getPublishTimeEnd()); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java new file mode 100644 index 0000000..aad04ae --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/report/SuspiciousItemBarcodeReportDaoImpl.java @@ -0,0 +1,181 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.ISuspiciousItemBarcodeReportDao; +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.mes.model.report.SuspiciousItemBarcodeReportModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:46 + * @Modify: + **/ +@Service +public class SuspiciousItemBarcodeReportDaoImpl implements ISuspiciousItemBarcodeReportDao { + + @Autowired + private EntityManager entityManager; + + @Override + public ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager) { + StringBuilder dataQueryHql = new StringBuilder(); + StringBuilder countQueryHql= new StringBuilder(); + StringBuilder commonQueryHql = new StringBuilder(); + dataQueryHql.append("select new ") + .append(SuspiciousItemBarcodeReportModel.class.getName()).append(" ( "); + dataQueryHql.append("mpd.id as id, "); + dataQueryHql.append("mpd.organizeCode as organizeCode, "); + dataQueryHql.append("mpd.defectLocation as defectLocation, "); + dataQueryHql.append("mpd.frontBack as frontBack, "); + dataQueryHql.append("mpd.status as status, "); + dataQueryHql.append("mpd.defectTypeCode as defectTypeCode, "); + dataQueryHql.append("mpd.defectTypeName as defectTypeName, "); + dataQueryHql.append("mp.sourceType as sourceType, "); + dataQueryHql.append("mp.workCenterCode as workCenterCode, "); + dataQueryHql.append("mp.sn as sn, "); + dataQueryHql.append("mp.lotNo as lotNo, "); + dataQueryHql.append("mp.partNo as partNo, "); + dataQueryHql.append("mp.partName as partName, "); + dataQueryHql.append("mp.qty as qty, "); + dataQueryHql.append("mp.inspectionDate as inspectionDate, "); + dataQueryHql.append("mp.inspectionStatus as inspectionStatus, "); + dataQueryHql.append("mp.ncStatus as ncStatus, "); + dataQueryHql.append("mp.shiftCode as shiftCode, "); + dataQueryHql.append("mpd.systemSyncStatus as systemSyncStatus, "); + dataQueryHql.append("mpd.systemSyncDatetime as systemSyncDatetime"); + dataQueryHql.append(") "); + + countQueryHql.append("select count(1) "); + commonQueryHql.append("FROM MesPartInspectionDetail mpd "); + commonQueryHql.append("LEFT JOIN MesPartInspection mp ON mpd.pid = mp.id "); + commonQueryHql.append("WHERE mpd.organizeCode = :organizeCode "); + commonQueryHql.append("AND mp.organizeCode = :organizeCode "); + commonQueryHql.append("AND mpd.isDeleted = :isDeleted "); + commonQueryHql.append("AND mp.isDeleted = :isDeleted "); + commonQueryHql.append("AND mpd.isValid = :isValid "); + commonQueryHql.append("AND mp.isValid = :isValid "); + + + // like 缺陷位置 + if(!StringUtils.isEmpty(model.getDefectLocation())){ + commonQueryHql.append("AND mpd.defectLocation like :defectLocation "); + } + // = 方向 + if(!StringUtils.isEmpty(model.getFrontBack())){ + commonQueryHql.append("AND mpd.frontBack = :frontBack "); + } + // = nc状态 + if(!StringUtils.isEmpty(model.getNcStatus())){ + commonQueryHql.append("AND mp.ncStatus = :ncStatus "); + } + // like 缺陷代码 + if(!StringUtils.isEmpty(model.getDefectTypeCode())){ + commonQueryHql.append("AND mpd.defectTypeCode like :defectTypeCode "); + } + //like 缺陷名称 + if(!StringUtils.isEmpty(model.getDefectTypeName())){ + commonQueryHql.append("AND mpd.defectTypeName like :defectTypeName "); + } + //like 产线代码 + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + commonQueryHql.append("AND mp.workCenterCode like :workCenterCode "); + } + //like 条码 + if(!StringUtils.isEmpty(model.getSn())){ + commonQueryHql.append("AND mp.sn like :sn "); + } + //like 零件号 + if(!StringUtils.isEmpty(model.getPartNo())){ + commonQueryHql.append("AND mp.partNo like :partNo "); + } + //like 零件名称 + if(!StringUtils.isEmpty(model.getPartName())){ + commonQueryHql.append("AND mp.partName like :partName "); + } + //范围时间 检验日期 + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + commonQueryHql.append("AND mpd.createDatetime between :createDateTimeStart and :createDateTimeEnd "); + } + //= 检验状态 + if (!StringUtils.isEmpty(model.getInspectionStatus())){ + commonQueryHql.append("AND mpd.inspectionStatus = :inspectionStatus "); + } + //like 班次代码 + if (!StringUtils.isEmpty(model.getShiftCode())){ + commonQueryHql.append("AND mp.shiftCode like :shiftCode "); + } + Query dataQuery = entityManager.createQuery(dataQueryHql.append(commonQueryHql).toString(), SuspiciousItemBarcodeReportModel.class); + setQueryParams(dataQuery, model); + Query countQuery = entityManager.createQuery(countQueryHql.append(commonQueryHql).toString()); + setQueryParams(countQuery, model); + + //本次查询满足条件的总数 + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + pager = PagerHelper.getPager(pager, count); + //查询本页数据 + dataQuery.setMaxResults(pager.getPageSize()); + dataQuery.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize()); + List resultList = dataQuery.getResultList(); + return new ListPager<>(resultList, pager); + } + + private void setQueryParams(Query query, SuspiciousItemBarcodeReportModel model) { + query.setParameter("organizeCode", model.getOrganizeCode()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue()); + + // like 缺陷位置 + if(!StringUtils.isEmpty(model.getDefectLocation())){ + query.setParameter("defectLocation", model.getDefectLocation() + "%"); + } + // =方向 + if(!StringUtils.isEmpty(model.getFrontBack())){ + query.setParameter("frontBack", model.getFrontBack()); + } + // =nc状态 + if(!StringUtils.isEmpty(model.getNcStatus())){ + query.setParameter("ncStatus", model.getNcStatus()); + } + // like 缺陷代码 + if(!StringUtils.isEmpty(model.getDefectTypeCode())){ + query.setParameter("defectTypeCode", model.getDefectTypeCode() + "%"); + } + //like 缺陷名称 + if(!StringUtils.isEmpty(model.getDefectTypeName())){ + query.setParameter("defectTypeName", model.getDefectTypeName() + "%"); + } + if(!StringUtils.isEmpty(model.getWorkCenterCode())){ + query.setParameter("workCenterCode", model.getWorkCenterCode() + "%"); + } + if(!StringUtils.isEmpty(model.getSn())){ + query.setParameter("sn", model.getSn() + "%"); + } + if(!StringUtils.isEmpty(model.getPartNo())){ + query.setParameter("partNo", model.getPartNo() + "%"); + } + if(!StringUtils.isEmpty(model.getPartName())){ + query.setParameter("partName", model.getPartName() + "%"); + } + if (!StringUtils.isEmpty(model.getCreateDateTimeStart()) && !StringUtils.isEmpty(model.getCreateDateTimeEnd())){ + query.setParameter("createDateTimeStart", model.getCreateDateTimeStart()); + query.setParameter("createDateTimeEnd", model.getCreateDateTimeEnd()); + } + if (!StringUtils.isEmpty(model.getInspectionStatus())){ + query.setParameter("inspectionStatus", model.getInspectionStatus()); + } + if (!StringUtils.isEmpty(model.getShiftCode())){ + query.setParameter("shiftCode", model.getShiftCode()+"%"); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java index bab7d30..ae9843c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java @@ -53,6 +53,11 @@ public class MesSAPDbAdapter { @Resource(name = "pisces1DataSource") private DynamicDataSourceProxy pisces1DataSourceProxy; + @Resource(name = "pisces2DataSource") + private DynamicDataSourceProxy pisces2DataSourceProxy; + + @Resource(name = "pisces3DataSource") + private DynamicDataSourceProxy pisces3DataSourceProxy; @Value("${sync.redis.time:1800}") private Integer redisTime; @@ -82,7 +87,9 @@ public class MesSAPDbAdapter { DynamicDataSourceProxy sapDataSourceProxy, DynamicDataSourceProxy mesDataSourceProxy, DynamicDataSourceProxy piscesDataSourceProxy, - DynamicDataSourceProxy pisces1DataSourceProxy) throws Exception { + DynamicDataSourceProxy pisces1DataSourceProxy, + DynamicDataSourceProxy pisces2DataSourceProxy, + DynamicDataSourceProxy pisces3DataSourceProxy) throws Exception { WmsSAPDbWriter wmsSAPDbWriter = null; @@ -110,6 +117,22 @@ public class MesSAPDbAdapter { wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces1DataSourceProxy); } + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES22MES.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(pisces2DataSourceProxy, mesDataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES2.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces2DataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES32MES.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(pisces3DataSourceProxy, mesDataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES3.getCode())) { + wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces3DataSourceProxy); + } + // new 的对象需要手工注入 bean if (SpringContextsUtil.getApplicationContext() != null) { @@ -140,7 +163,9 @@ public class MesSAPDbAdapter { DynamicDataSourceProxy sapDataSourceProxy, DynamicDataSourceProxy mesDataSourceProxy, DynamicDataSourceProxy piscesDataSourceProxy, - DynamicDataSourceProxy pisces1DataSourceProxy) { + DynamicDataSourceProxy pisces1DataSourceProxy, + DynamicDataSourceProxy pisces2DataSourceProxy, + DynamicDataSourceProxy pisces3DataSourceProxy) { WmsSAPDbReader wmsSAPDbReader = null; @@ -168,6 +193,22 @@ public class MesSAPDbAdapter { wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); } + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES22MES.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(pisces2DataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES2.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES32MES.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(pisces3DataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES3.getCode())) { + wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); + } + // if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.WMS2MES.getName())) { // wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); // } @@ -220,11 +261,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); reader.setSrcConn(this.srcConn); @@ -381,11 +422,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy,pisces2DataSourceProxy,pisces3DataSourceProxy); reader.setSrcConn(this.srcConn); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/SpsInfo.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/SpsInfo.java new file mode 100644 index 0000000..9ba3468 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/SpsInfo.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.model; + +import lombok.Data; + +/** + * @Description : SpsInfo + * @Author :gsz + * @Date 2024/8/30 9:16 + * @Modify + **/ +@Data +public class SpsInfo { + //产线 + private String assemblyLine; + //拉动单号 + private String pullingGroupCode; + //工厂号 + private String organizeCode ; + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java new file mode 100644 index 0000000..7f24937 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java @@ -0,0 +1,68 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : 根据拉动组和生产工单产生拉动单JOB + * @Reference : + * @Author : gsz + * @CreateDate 2024/9/4 10:01 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("根据拉动组和生产工单产生拉动单JOB") +public class MesCreatePullOrderByPullGroupAndWorkOrderJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesCreatePullOrderByPullGroupAndWorkOrderJob.class); + + private static final long serialVersionUID = -321526601595924818L; + + @Autowired + private IMesPullingOrderInfoService pullingOrderInfoService; + + @Value("${server.port}") + private String serverPort; + @Value("${impp.server.ip}") + private String ip; + + public MesCreatePullOrderByPullGroupAndWorkOrderJob() { + super(MesCreatePullOrderByPullGroupAndWorkOrderJob.class, "根据拉动组和生产工单产生拉动单JOB"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + + List wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class); + if (!CollectionUtils.isEmpty(wmsJobParamModelList)) { + for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) { + try { + long startTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- start", wmsJobParamModel.getOrganizeCode()); + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), MesExtConstWords.JOB); + long endTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- end --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + } catch (Exception e) { + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); + } + } + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java new file mode 100644 index 0000000..f9bfb14 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderOfflineJob.java @@ -0,0 +1,58 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * @Description : 根据拉动组和生产工单产生拉动单JOB + * @Reference : + * @Author : gsz + * @CreateDate 2024/9/4 10:01 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@ApiOperation("离线生产所有总成零件的拉动单模板") +@Component +public class MesCreatePullOrderOfflineJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesCreatePullOrderOfflineJob.class); + + @Autowired + private IMesOfflineService mesOfflineService; + + + public MesCreatePullOrderOfflineJob() { + super(MesCreatePullOrderOfflineJob.class, "离线生产所有总成零件的拉动单模板"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + Map paramMap = (Map) JSONObject.parse(this.getJobParam()); + try { + String organizeCode = (String) paramMap.get("organizeCode"); + List pullCodeList = (List) paramMap.get("pullCodeList"); + List partProdCodeList = (List) paramMap.get("partProdCodeList"); + mesOfflineService.doCreatePullOrderOfflineData(organizeCode,pullCodeList,partProdCodeList); + } catch (Exception e) { + LOGGER.error("离线生产所有总成零件的拉动单模板:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java new file mode 100644 index 0000000..fe6b06b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreateSortRuleCfgOfflineJob.java @@ -0,0 +1,59 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.persistence.Column; +import java.util.List; +import java.util.Map; + +/** + * @Description : 根据拉动组和生产工单产生拉动单JOB + * @Reference : + * @Author : gsz + * @CreateDate 2024/9/4 10:01 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@ApiOperation("生产所有总成零件的装配件模板") +@Component +public class MesCreateSortRuleCfgOfflineJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesCreateSortRuleCfgOfflineJob.class); + + + @Autowired + private IMesOfflineService mesOfflineService; + + + public MesCreateSortRuleCfgOfflineJob() { + super(MesCreateSortRuleCfgOfflineJob.class, "生产所有总成零件的装配件模板"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + Map paramMap = (Map) JSONObject.parse(this.getJobParam()); + try { + String organizeCode = (String) paramMap.get("organizeCode"); + List groupCodeList = (List) paramMap.get("partProdCodeList"); + mesOfflineService.doCreateSortRuleCfgOfflineData(organizeCode,groupCodeList); + } catch (Exception e) { + LOGGER.error("生产所有总成零件的装配件模板:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java index a3a9b67..e8de73e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesDefectAlarmConfigJob.java @@ -58,22 +58,7 @@ public class MesDefectAlarmConfigJob extends BaseMesScheduleJob { throw new IllegalArgumentException("jobc参数为空,请检查参数"); } - Map paramMap = new HashMap<>(); - - try { - paramMap = (Map) JSONObject.parse(jobParam); - } catch (Exception e) { - LOGGER.error("参数格式不是JSON"); - return; - - } - - if (CollectionUtils.isEmpty(paramMap)) { - LOGGER.error("检测数据同步定时任务,没有配置参数"); - return; - } - - List organizeCodeList = (List) paramMap.get("org"); + String[] organizeCodeList = jobParam.split(","); for (String organizeCode : organizeCodeList) { @@ -83,7 +68,6 @@ public class MesDefectAlarmConfigJob extends BaseMesScheduleJob { } catch (Exception e) { LOGGER.error("SAP接口表数据同步作业任务结束e:{}", e.toString()); - //sendErrorMessage(e.toString()); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java index 44aba01..79432b2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java @@ -92,8 +92,7 @@ public class MesSendOutTimeReworkOrderEmailJob extends BaseMesScheduleJob { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_STATUS.CREATE.getValue(), "status", packBean); packBean.setWhereAppend(packBean.getWhereAppend() + " and model.createDatetime <= '" + TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -minutes)) + "'"); - List mesReworkTaskList = mesReworkTaskRepository.findByHqlWhere(packBean); - return mesReworkTaskList; + return mesReworkTaskRepository.findByHqlWhere(packBean); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java new file mode 100644 index 0000000..e38a2eb --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWhJisCreateOrderJob.java @@ -0,0 +1,82 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesBtoJobService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +/* +入参 +{ + "organizeCode": "CK01", + "partGroupCode": [ + "CK01-Code", + "CK02-Code" + ] + +} + */ + +/** + * @Description : BTO生成工单 + * @Reference : + * @Author : castle + * @CreateDate : 2024-05-10 11:03 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@Component +@ApiOperation("武汉JIS生成工单") +public class MesWhJisCreateOrderJob extends BaseMesScheduleJob { + public static final Logger LOGGER = LoggerFactory.getLogger(MesWhJisCreateOrderJob.class); + + @Autowired + private IMesBtoJobService btoJobService; + + public MesWhJisCreateOrderJob() { + super(MesWhJisCreateOrderJob.class, "武汉JIS生成工单"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + String jobParam = this.getJobParam(); + + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + Map paramMap; + try { + paramMap = (Map) JSONObject.parse(jobParam); + } catch (Exception e) { + LOGGER.error("参数格式不是JSON"); + return; + + } + if (CollectionUtils.isEmpty(paramMap)) { + LOGGER.error("武汉JIS生成工单,没有配置参数"); + return; + } + String organizeCode = (String) paramMap.get("organizeCode"); + List groupCodeList = (List) paramMap.get("groupCode"); + btoJobService.doWhJisWorkOrder(organizeCode, groupCodeList); + LOGGER.info("武汉JIS生成工单 ----- end"); + + } catch (Exception e) { + LOGGER.error("武汉JIS生成工单e:{}", Arrays.toString(e.getStackTrace())); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java new file mode 100644 index 0000000..09565bf --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : MES工单推送给WMS + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/13 16:40 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("MES工单推送给WMS JOB") +public class MesWorkOrderSendToWmsJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderSendToWmsJob.class); + + private static final long serialVersionUID = -321526601595924818L; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + public MesWorkOrderSendToWmsJob() { + super(MesWorkOrderSendToWmsJob.class, "MES工单推送给WMS JOB"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + + List wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class); + if (!CollectionUtils.isEmpty(wmsJobParamModelList)) { + for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) { + try { + long startTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- start", wmsJobParamModel.getOrganizeCode()); + mesWorkOrderService.doSendMesWorkOrderToWms(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), MesExtConstWords.JOB); + long endTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- end --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + } catch (Exception e) { + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); + } + } + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java index 8a0dc15..eff4af9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java @@ -83,7 +83,7 @@ public class MesWorkOrderUpdateQtyJob extends BaseMesScheduleJob { Map> map = recordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getWorkOrderNo)); List orders = new ArrayList<>(); map.forEach((k,v) -> { - MesWorkOrder workOrder = mesWorkOrderService.getWorkOrder(organizeCode, k); + MesWorkOrder workOrder = mesWorkOrderService.getMesWorkOrder(k,organizeCode); List productionRecords = getUnReportMesProduceSn(organizeCode, workOrder.getWorkOrderNo()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java index d124c48..8718c09 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/BaseMesService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IBaseMesService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -120,15 +121,16 @@ public abstract class BaseMesService implements IBaseMesServ public void deleteWeaklyById(Long id, String userName) { onDeleteId(id); //baseRDao.deleteWeaklyById(id, userName); - baseRDao.updateByProperties("id", id,new String[]{"isDeleted","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.VALID,userName,TimeTool.getNowTime(true)}); + baseRDao.updateByProperties(new String[]{"organizeCode", "id"}, new Object[]{AuthUtilExt.getOrganizeCode(), id}, new String[]{"isDeleted", "modifyUser", "modifyDatetime"}, new Object[]{CommonEnumUtil.VALID, userName, TimeTool.getNowTime(true)}); } @Override public void deleteWeaklyByIds(Long[] ids, String userName) { + String organizeCode = AuthUtilExt.getOrganizeCode(); for (Long id : ids) { onDeleteId(id); //baseRDao.deleteWeaklyById(id, userName); - baseRDao.updateByProperties("id", id,new String[]{"isDeleted","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.VALID,userName,TimeTool.getNowTime(true)}); + baseRDao.updateByProperties(new String[]{"organizeCode", "id"}, new Object[]{organizeCode, id}, new String[]{"isDeleted", "modifyUser", "modifyDatetime"}, new Object[]{CommonEnumUtil.VALID, userName, TimeTool.getNowTime(true)}); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java new file mode 100644 index 0000000..c382d0d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBallTrackRuleServiceImpl.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesBallTrackRuleService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesBallTrackRule; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/24 15:37 + * @Modify: + **/ +@Service +@Slf4j +public class MesBallTrackRuleServiceImpl extends BaseMesService implements IMesBallTrackRuleService { + + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + @Override + protected void setPackQueryBean(MesBallTrackRule bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getBallTrackType(), "ballTrackType", packBean); + DdlPreparedPack.getStringLikerPack(bean.getBallTrackName(), "ballTrackName", packBean); + } + + @Override + protected void onInsertBean(MesBallTrackRule item) { + ValidatorBean.checkNotNull(item.getBallTrackName(), "轨道名称不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + ValidatorBean.checkNotNull(item.getBallTrackType(), "轨道类型不能为空"); + ValidatorBean.checkNotNull(item.getEquipVariableValue(), "轨道变量值不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + if (!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码不存在"); + } + } + + @Override + protected void onUpdateBean(MesBallTrackRule item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getBallTrackName(), "轨道名称不能为空"); + ValidatorBean.checkNotNull(item.getBallTrackType(), "轨道类型不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + ValidatorBean.checkNotNull(item.getEquipVariableValue(), "轨道变量值不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean); + if (!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码不存在"); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index d530985..efe5087 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesBomService; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesBomDao; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.model.MesBomTreeModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.MesConstWords; @@ -198,6 +199,54 @@ public class MesBomService extends BaseMesService implements IMesBomServ return new ArrayList<>(summaryBomMap.values()); } + @Override + public MesBom findBom(String organizeCode, String bomVersion, String partNo) { + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", bomPackBean); + List bomList = this.baseRDao.findByHqlTopWhere(bomPackBean,1); + return bomList.isEmpty() ? null : bomList.get(0); + } + + @Override + public List queryMesBomReverse(MesBom mesBom) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesBom.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesBom.getPartNo(), "itemPartNo", packBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", packBean); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean); + List mesBomList = baseRDao.findByHqlWhere(packBean); + if(CollectionUtils.isEmpty(mesBomList)){ + return new ArrayList<>(); + } + List resultMesBomList = new ArrayList<>(); + Map> mesBomMap = mesBomList.stream().collect(Collectors.groupingBy(bom -> bom.getPartNo() + bom.getItemPartNo())); + for (String partNoKey : mesBomMap.keySet()) { + MesBom bom = mesBomMap.get(partNoKey).get(MesExtConstWords.ZERO); + resultMesBomList.add(bom); + //按照层数递归上一次 + bomReverse(resultMesBomList,bom.getPartNo(),bom.getOrganizeCode(),mesBom.getNum()-1); + } + return resultMesBomList; + } + + private void bomReverse(List resultMesBomList,String partNo,String organizeCode, Integer num) { + if(num == MesExtConstWords.ZERO) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "itemPartNo", packBean); + DdlPreparedPack.getStringEqualPack("X", "partType", packBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", packBean); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean); + List mesBomList = baseRDao.findByHqlWhere(packBean); + if(CollectionUtils.isEmpty(mesBomList)) return; + Map> mesBomMap = mesBomList.stream().collect(Collectors.groupingBy(bom -> bom.getPartNo() + bom.getItemPartNo())); + for (String partNoKey : mesBomMap.keySet()) { + MesBom bom = mesBomMap.get(partNoKey).get(MesExtConstWords.ZERO); + resultMesBomList.add(bom); + //按照层数递归上一次 + bomReverse(resultMesBomList,bom.getPartNo(),bom.getOrganizeCode(),num-1); + } + } + /** * 递归展开 BOM * diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java index 2eee721..326de45 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java @@ -47,6 +47,7 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { @Autowired private MesPartProdGroupWindowTimeRepository windowTimeRao; + @Override public void doCreateBto(String organizeCode, List groupCodeList) { //1. 根据 organizeCode 和 groupCodeList 查询零件生产组 @@ -63,6 +64,10 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { } List details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode); + if (details.isEmpty()){ + log.info("当前零件生产组:{}没有详情",prodGroup.getPartProdGroupCode()); + return; + } List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); @@ -93,6 +98,38 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { } } + @Override + public void doWhJisWorkOrder(String organizeCode, List groupCodeList) { + //1.校验零件生产组是否有 -- return + List mesPartProdGroups = mesPartProdGroupService.findMesPartProdGroups(organizeCode, groupCodeList); + if (mesPartProdGroups.isEmpty()){ + log.info("当前配置的零件生产组代码:{},查询不到零件生产组信息",groupCodeList); + } + //2.循环遍历零件生产组 + for (MesPartProdGroup prodGroup : mesPartProdGroups) { + //2. 根据生产组的infoPointCode 获取 过点信息MES_CUSTOMER_MESSAGE_POINT + MesCustomerMessagePoint messagePoint = mesCustomerMessagePointService.getPointByCode(prodGroup.getCustInfoPoint(),organizeCode); + if (messagePoint == null){ + log.info("客户的信息点{}不存在",prodGroup.getCustInfoPoint()); + continue; + } + List details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode); + List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); + List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); + if (sortInfoList.isEmpty()){ + log.info("当前零件生产组:{},信息点为:{}没有排序信息",prodGroup.getPartProdGroupCode(),prodGroup.getCustInfoPoint()); + continue; + } + //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 + String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundMethod()); + IRoundnessStrategy roundnessStrategy = (IRoundnessStrategy)SpringContextsUtil.getBean(roundnessService); + roundnessStrategy.execute(prodGroup,sortInfoList, details); + } + + + } + + private void updateCustsort(String organizeCode, List mesPartProdGroups) { List allDetails = new ArrayList<>(); for (MesPartProdGroup prodGroup : mesPartProdGroups) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java index 2e9a4f7..66a0499 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -17,6 +18,7 @@ import org.springframework.util.StringUtils; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -106,4 +108,10 @@ public class MesConfigService implements IMesConfigService { configRepository.update(mesConfig); } + @Override + public Boolean checkCfgValue(String organizeCode, String configCode, String value) { + MesConfig config = getCfgValueByCode(organizeCode, configCode); + return !Objects.isNull(config) && !StringUtil.isEmpty(config.getCfgValue()) && !StringUtil.isEmpty(value) && config.getCfgValue().equals(value); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java index 1e29e2e..9f08f5c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerOriganzeService.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerOriganzeService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -15,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Objects; /** * @author yinxiao @@ -77,7 +80,12 @@ public class MesCustomerOriganzeService extends BaseMesService impl } List customerPartNoList = mesCustomerCarModelDetails.stream().map(MesCustomerCarModelDetail::getCustPartNo).collect(Collectors.toList()); ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode()); - DdlPreparedPack.getInPackList(customerPartNoList, "custPartNo", ddlPackBean); + if (customerPartNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(customerPartNoList.get(MesExtConstWords.ZERO), "custPartNo", ddlPackBean); + } else { + DdlPreparedPack.getInPackList(customerPartNoList, "custPartNo", ddlPackBean); + } return baseRDao.findByHqlWhere(ddlPackBean); } + @Override + public List findMesCustomerPartByPartNo(String organizeCode, List partNoList) { + if(StringUtils.isEmpty(organizeCode) || Objects.isNull(partNoList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (partNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(partNoList.get(MesExtConstWords.ZERO), "erpPartNo", packBean); + } else { + DdlPreparedPack.getInPackList(partNoList, "erpPartNo", packBean); + } + return baseRDao.findByHqlWhere(packBean); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java new file mode 100644 index 0000000..db569e9 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerPartTypeServiceImpl.java @@ -0,0 +1,61 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartTypeService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPartType; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +/** + * @Description : 客户零件类型 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/5 17:25 + * @Modify: + **/ +@Service +@Slf4j +public class MesCustomerPartTypeServiceImpl extends BaseMesService implements IMesCustomerPartTypeService { + + @Override + protected void onInsertBean(MesCustomerPartType item) { + checkData(item); + } + + @Override + protected void onUpdateBean(MesCustomerPartType item) { + checkData(item); + } + + @Override + protected void setPackQueryBean(MesCustomerPartType bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getPartTypeCode(), "partTypeCode", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartTypeName(), "partTypeName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getCustPartNo(), "custPartNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getCustPartName(), "custPartName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getCustCode(), "custCode", packBean); + } + + private void checkData(MesCustomerPartType item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getPartTypeCode(), "零件类型代码不能为空"); + ValidatorBean.checkNotNull(item.getCustPartNo(), "客户物料号不能为空"); + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartTypeCode(), "partTypeCode", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getCustPartNo(), "custPartNo", seriesPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean); + boolean flg = baseRDao.isExitByHql(seriesPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("类型【%s】客户零件【%s】数据已存在,请检查数据", item.getPartTypeCode(), item.getCustPartNo()) + .build(); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerService.java index ae31779..ddfd11e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustomerService.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -15,6 +17,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Objects; + /** * @author yinxiao * @date 2023-2023/6/2 10:54 @@ -72,7 +76,12 @@ public class MesCustomerService extends BaseMesService implements I } protected void onDeleteId(Long id) { - MesCustomer mesCustomer = baseRDao.getById(id); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(AuthUtilExt.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(id,"id",ddlPackBean); + MesCustomer mesCustomer = baseRDao.getByProperty(ddlPackBean); + if(Objects.isNull(mesCustomer)){ + MesException.throwMesBusiException("ID【%s】客户信息不存在",id); + } //校验客户物料是否存在 DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesCustomer.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesCustomer.getCustCode(), "custCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java new file mode 100644 index 0000000..774799d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutLengthModifyTypeServiceImpl.java @@ -0,0 +1,31 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutLengthModifyTypeService; +import cn.estsh.i3plus.pojo.mes.bean.MesCutLengthModifyType; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/20 9:47 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutLengthModifyTypeServiceImpl extends BaseMesService implements IMesCutLengthModifyTypeService { + + + @Override + protected void onInsertBean(MesCutLengthModifyType item) { + ValidatorBean.checkNotNull(item.getReasonName(), "原因名称不能为空"); + } + + @Override + protected void onUpdateBean(MesCutLengthModifyType item) { + ValidatorBean.checkNotNull(item.getId(), "主键不能为空"); + ValidatorBean.checkNotNull(item.getReasonName(), "原因名称不能为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java new file mode 100644 index 0000000..0bca433 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentDetailServiceImpl.java @@ -0,0 +1,43 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentDetailService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentDetail; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 17:04 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeEquipmentDetailServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentDetailService { + + @Override + protected void setPackQueryBean(MesCutSchemeEquipmentDetail bean, DdlPackBean packBean) { + Long pid = bean.getPid(); + if (pid != null) { + DdlPreparedPack.getNumEqualPack(pid, "pid", packBean); + } + } + + @Override + protected void onInsertBean(MesCutSchemeEquipmentDetail item) { + ValidatorBean.checkNotNull(item.getName(), "名称不能为空"); + ValidatorBean.checkNotNull(item.getValue(), "值不能为空"); + + } + + @Override + protected void onUpdateBean(MesCutSchemeEquipmentDetail item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getName(), "名称不能为空"); + ValidatorBean.checkNotNull(item.getValue(), "值不能为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java new file mode 100644 index 0000000..6a414a7 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentProcessParamServiceImpl.java @@ -0,0 +1,51 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentProcessParamService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipmentProcessParam; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 16:51 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeEquipmentProcessParamServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentProcessParamService { + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + + @Override + protected void setPackQueryBean(MesCutSchemeEquipmentProcessParam bean, DdlPackBean packBean) { + Long pid = bean.getPid(); + if (pid != null) { + DdlPreparedPack.getNumEqualPack(pid, "pid", packBean); + } + } + + @Override + protected void onInsertBean(MesCutSchemeEquipmentProcessParam item) { + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + if(!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwMesBusiException("设备代码不存在", item.getEquipmentCode()); + } + } + + @Override + protected void onUpdateBean(MesCutSchemeEquipmentProcessParam item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java new file mode 100644 index 0000000..58aa8fd --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeEquipmentServiceImpl.java @@ -0,0 +1,52 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeEquipmentService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeEquipment; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:55 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeEquipmentServiceImpl extends BaseMesService implements IMesCutSchemeEquipmentService { + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + + @Override + protected void onInsertBean(MesCutSchemeEquipment item) { + ValidatorBean.checkNotNull(item.getCutCode(), "裁片代码不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", ddlPackBean); + if(!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + throw new RuntimeException("设备代码不存在"); + } + } + + @Override + protected void onUpdateBean(MesCutSchemeEquipment item) { + ValidatorBean.checkNotNull(item.getId(), "主键不能为空"); + ValidatorBean.checkNotNull(item.getCutCode(), "裁片代码不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备代码不能为空"); + } + + @Override + protected void setPackQueryBean(MesCutSchemeEquipment bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getCutCode(), "cutCode", packBean); + DdlPreparedPack.getStringLikerPack(bean.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getStringLikerPack(bean.getEquipmentName(), "equipmentName", packBean); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeFgServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeFgServiceImpl.java new file mode 100644 index 0000000..86780a8 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeFgServiceImpl.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeFgService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 15:04 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeFgServiceImpl extends BaseMesService implements IMesCutSchemeFgService { + + @Override + protected void onInsertBean(MesCutSchemeFg item) { + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } + + @Override + protected void onUpdateBean(MesCutSchemeFg item) { + ValidatorBean.checkNotNull(item.getId(), "主键不能为空"); + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } + + @Override + protected void setPackQueryBean(MesCutSchemeFg bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java new file mode 100644 index 0000000..d368e77 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeMaterialServiceImpl.java @@ -0,0 +1,40 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeMaterialService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeMaterial; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/18 13:37 + * @Modify: + **/ +@Slf4j +@Service +public class MesCutSchemeMaterialServiceImpl extends BaseMesService implements IMesCutSchemeMaterialService { + + + @Override + protected void onInsertBean(MesCutSchemeMaterial item) { + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } + + + @Override + protected void onUpdateBean(MesCutSchemeMaterial item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getCutCode(), "裁片方案代码不能为空"); + } + + @Override + protected void setPackQueryBean(MesCutSchemeMaterial bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java new file mode 100644 index 0000000..8506c1c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCutSchemeService.java @@ -0,0 +1,94 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCutSchemeService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesCutSchemeService extends BaseMesService implements IMesCutSchemeService { + + @Autowired + private MesWorkCenterRepository workCenterRepository; + + protected void setPackQueryBean(MesCutScheme bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); + DdlPreparedPack.getStringEqualPack(bean.getCutName(), MesExtConstWords.CUT_NAME, packBean); + } + + @Override + public void setBeanModel(List list) { + if(CollectionUtils.isEmpty(list)){ + return; + } + List workCenterCodeList = list.stream().map(MesCutScheme::getWorkCenterCode).filter(t -> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); + Map beanMap = CollectionUtils.isEmpty(workCenterCodeList) ? null : BeanMapUtilsExt.getBeanMap(workCenterRepository, MesExtConstWords.WORK_CENTER_CODE, list.iterator().next().getOrganizeCode(), workCenterCodeList); + if(!CollectionUtils.isEmpty(beanMap)){ + list.forEach(t->{ + if (beanMap.containsKey(t.getWorkCenterCode())) { + t.setWorkCenterName(beanMap.get(t.getWorkCenterCode()).getWorkCenterName()); + } + }); + } + } + + protected void onInsertBean(MesCutScheme item) { + ValidatorBean.checkNotNull(item.getCutCode(),"裁片方案代码不能为空"); + ValidatorBean.checkNotNull(item.getCutName(),"裁片方案名称不能为空"); + } + + + protected void onUpdateBean(MesCutScheme item) { + + // 数据校验 + //ValidatorBean.checkNotNull(item.getDefectTypeCode(), "缺陷类型代码不能为空"); + //ValidatorBean.checkNotNull(item.getDefectTypeName(), "缺陷类型名称不能为空"); + // + //DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + //DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", packBean); + //DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", packBean); + //boolean flg = baseRDao.isExitByHql(packBean); + //if (flg) { + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + // .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + // .setErrorDetail("【%s】缺陷类型代码已经存在,请检查数据", item.getDefectTypeCode()) + // .build(); + //} + } + @Override + public void validateImport(List beanList) { + + //for (MesCutScheme item : beanList) { + // // 数据校验 + // ValidatorBean.checkNotNull(item.getDefectTypeCode(), "缺陷类型代码不能为空"); + // ValidatorBean.checkNotNull(item.getDefectTypeName(), "缺陷类型名称不能为空"); + // + // DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + // DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", packBean); + // boolean flg = baseRDao.isExitByHql(packBean); + // if (flg) { + // throw ImppExceptionBuilder.newInstance() + // .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + // .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + // .setErrorDetail("【%s】缺陷类型代码已经存在,请检查数据", item.getDefectTypeCode()) + // .build(); + // } + //} + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java index 6a96e42..a6d5f45 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java @@ -174,8 +174,7 @@ public class MesEquipmentVariableService extends BaseMesService getClientHandleId(int size, String organizeCode, String userName) { GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.CLIENT_HANDLE_ID); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList(); - return resultList; + return syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList(); } private MesEquipment getMesEquipment(String organizeCode,String equipmentCode) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java index e9b2f6b..9ce81aa 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java @@ -9,9 +9,9 @@ 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.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam; -import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder; import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateParamRepository; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.util.CollectionUtils; @@ -63,4 +63,20 @@ public class MesLabelTemplateServiceImpl extends BaseMesService(resultList, pager); } + + @Override + public MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { + if(StringUtil.isEmpty(templateCode) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(templateCode, MesExtConstWords.TEMPLATE_CODE, templatePackBean); + MesLabelTemplate mesLabelTemplate = baseRDao.getByProperty(templatePackBean); + if (mesLabelTemplate != null) { + //级联获取labelTemplateParam + DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesLabelTemplate.getTemplateCode(), "templateCode", templateParamPackBean); + List params = mesLabelTemplateParamRDao.findByHqlWhere(templateParamPackBean); + mesLabelTemplate.setLabelTemplateParamList(params); + } + return mesLabelTemplate; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java index ea283ff..3b6f0b2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -15,7 +17,6 @@ import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.repository.MesLoadingListDetailRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupRepository; import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -36,28 +37,24 @@ import java.util.Objects; @Slf4j public class MesLoadingListService extends BaseMesService implements IMesLoadingListService { - @Autowired private MesLoadingListDetailService detailService; - - @Autowired - private MesPartShippingGroupRepository partShippingGroupRepository; @Autowired private MesShippingOrderManagementRepository shippingOrderManagementRepository; @Autowired private MesLoadingListDetailRepository listDetailRepository; - + @Autowired + private IMesPartShippingGroupService mesPartShippingGroupService; @Autowired private ISyncFuncService syncFuncService; - @Override public MesLoadingList insert(MesLoadingList bean) { //插入前构造并校验数据 onInsertBean(bean); MesShippingOrderManagement shippingOrderManagement = bean.getShippingOrderNoList().get(0); - MesPartShippingGroup partShippingGroup = partShippingGroupRepository.getById(shippingOrderManagement.getPartShippingGroupId()); + MesPartShippingGroup partShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(shippingOrderManagement.getOrganizeCode(),shippingOrderManagement.getShippingGroupCode()); if (StringUtils.isEmpty(partShippingGroup)) { throw ImppExceptionBuilder.newInstance() @@ -156,9 +153,11 @@ public class MesLoadingListService extends BaseMesService implem @Override public void deleteWeaklyByIds(Long[] ids, String userName) { - + String organizeCode = AuthUtilExt.getOrganizeCode(); for (Long id : ids) { - MesLoadingList bean = baseRDao.getById(id); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id,"id",packBean); + MesLoadingList bean = baseRDao.getByProperty(packBean); if (StringUtils.isEmpty(bean)) continue; DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(bean.getId(), "pid", detailPackBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java index 34a656e..185a7e4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java @@ -1,13 +1,25 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPackingDefineService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomer; import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; +import cn.estsh.i3plus.pojo.mes.repository.MesCustomerRepository; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 包装定义维护 @@ -20,6 +32,25 @@ import org.springframework.stereotype.Service; @Slf4j public class MesPackingDefineServiceImpl extends BaseMesService implements IMesPackingDefineService { + @Autowired + private MesCustomerRepository customerRepository; + + @Override + public void setBeanModel(List list) { + if(CollectionUtils.isEmpty(list)){ + return; + } + List custCodeList = list.stream().filter(o -> !StringUtils.isEmpty(o.getCustCode())).map(MesPackingDefine::getCustCode).filter(t -> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); + Map beanMap = CollectionUtils.isEmpty(custCodeList) ? new HashMap<>() : BeanMapUtilsExt.getBeanMap(customerRepository, MesExtConstWords.CUST_CODE, list.iterator().next().getOrganizeCode(), custCodeList); + if(!CollectionUtils.isEmpty(beanMap)){ + list.forEach(t->{ + if (!StringUtils.isEmpty(t.getCustCode()) && beanMap.containsKey(t.getCustCode())) { + t.setCustName(beanMap.get(t.getCustCode()).getCustName()); + } + }); + } + } + @Override protected void setPackQueryBean(MesPackingDefine bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getPackCode(), "packCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleDetailServiceImpl.java new file mode 100644 index 0000000..ec1a8db --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleDetailServiceImpl.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPartPackageRuleDetailService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRuleDetail; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:51 + * @Modify: + **/ +@Service +@Slf4j +public class MesPartPackageRuleDetailServiceImpl extends BaseMesService implements IMesPartPackageRuleDetailService { + + + @Override + protected void setPackQueryBean(MesPartPackageRuleDetail bean, DdlPackBean packBean) { + DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean); + } + + @Override + protected void onInsertBean(MesPartPackageRuleDetail item) { + ValidatorBean.checkNotNull(item.getPartNo(),"零件号为空"); + } + + @Override + protected void onUpdateBean(MesPartPackageRuleDetail item) { + ValidatorBean.checkNotNull(item.getId(),"id不能为空"); + ValidatorBean.checkNotNull(item.getPartNo(),"零件号为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleServiceImpl.java new file mode 100644 index 0000000..b7b52b6 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPackageRuleServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPartPackageRuleService; +import cn.estsh.i3plus.pojo.mes.bean.MesPartPackageRule; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/25 9:37 + * @Modify: + **/ +@Service +@Slf4j +public class MesPartPackageRuleServiceImpl extends BaseMesService implements IMesPartPackageRuleService { + + @Override + protected void onInsertBean(MesPartPackageRule item) { + ValidatorBean.checkNotNull(item.getPackagePartNo(),"包覆零件号为空"); + } + + @Override + protected void onUpdateBean(MesPartPackageRule item) { + ValidatorBean.checkNotNull(item.getId(),"id不能为空"); + ValidatorBean.checkNotNull(item.getPackagePartNo(),"包覆零件号为空"); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java index d24c483..7999816 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupDetailService.java @@ -23,6 +23,7 @@ public class MesPartProdGroupDetailService extends BaseMesService im public List findMesPartProdGroup(MesPartProdGroupDetail mesPartProdGroupDetail){ DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getPartNo(),"partNo",ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getProductPartNo(),"productPartNo",ddlPackBean); DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(),"workCenterCode",ddlPackBean); List mesPartProdGroupDetails = mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean); if(CollectionUtils.isEmpty(mesPartProdGroupDetails)){ @@ -58,6 +59,14 @@ public class MesPartProdGroupService extends BaseMesService im return mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean); } + @Override + public Map getMesPartProdGroupMap(String organizeCode, List partProdGroupCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partProdGroupCodeList, MesExtConstWords.PART_PROD_GROUP_CODE, packBean); + List partProdGroupList = baseRDao.findByHqlWhere(packBean); + return CollectionUtils.isEmpty(partProdGroupList) ? null : partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x, y) -> y)); + } + protected void setPackQueryBean(MesPartProdGroup bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupCode(), "partProdGroupCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java index 73d4df1..19f10fc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; 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.MesPartPullDetail; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; @@ -16,7 +17,52 @@ import java.util.List; @Service @Slf4j public class MesPartPullDetailService extends BaseMesService implements IMesPartPullDetailService { + @Override + protected void onInsertBean(MesPartPullDetail item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); + //43112 MES:PC拉动单页面问题 6.同一拉动组-根据工位代码&零件号做唯一校验 + if (!StringUtil.isEmpty(item.getWorkCellCode())&&!StringUtil.isEmpty(item.getPartNo())){ + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", partPackBean); + boolean flg = baseRDao.isExitByHql(partPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("拉动组【%s】零件号【%s】工位【%s】已经存在,请检查数据", + item.getPullCode(), item.getPartNo(), item.getWorkCellCode()) + .build(); + } + } + } + @Override + protected void onUpdateBean(MesPartPullDetail item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); +// ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); + + //同一拉动组-根据工位代码&零件号做唯一校验 + if (!StringUtil.isEmpty(item.getWorkCellCode())&&!StringUtil.isEmpty(item.getPartNo())){ + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", partPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(),"id",partPackBean); + boolean flg = baseRDao.isExitByHql(partPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("拉动组【%s】零件号【%s】工位【%s】已经存在,请检查数据", + item.getPullCode(), item.getPartNo(), item.getWorkCellCode()) + .build(); + } + } + } protected void setPackQueryBean(MesPartPullDetail bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getPullCode(), "pullCode", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCellCode(), "workCellCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java index fd0b691..ff14373 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartService.java @@ -83,7 +83,7 @@ public class MesPartService extends BaseMesService implements IMesPartS @Override public ListPager queryMesPartByPagerExt(MesPart mesPart, Pager pager) { - DdlPackBean partQueryPackBean = DdlPackBean.getDdlPackBean(); + DdlPackBean partQueryPackBean = DdlPackBean.getDdlPackBean(mesPart.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesPart.getIsValid(), "isValid", partQueryPackBean); DdlPreparedPack.getStringLikerPack(mesPart.getPartNo(), "partNo", partQueryPackBean); DdlPreparedPack.getStringLikerPack(mesPart.getPartName(), "partName", partQueryPackBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java index f8e9b39..b99f108 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java @@ -31,8 +31,8 @@ public class MesProdRuleNosortCfgService extends BaseMesService implements IMesProdRuleSortCfgService { protected void setPackQueryBean(MesProdRuleSortCfg bean, DdlPackBean packBean) { - DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); - DdlPreparedPack.getStringEqualPack(bean.getAssemblyPartNo(), "assemblyPartNo", packBean); - DdlPreparedPack.getStringLikerPack(bean.getAssemblyPartName(), "assemblyPartName", packBean); - + DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), MesExtConstWords.WORK_CELL_CODE, packBean); + DdlPreparedPack.getStringEqualPack(bean.getProcessCode(), MesExtConstWords.PROCESS_CODE, packBean); + DdlPreparedPack.getStringEqualPack(bean.getCraftCode(), MesExtConstWords.CRAFT_CODE, packBean); + DdlPreparedPack.getStringLikerPack(bean.getAssemblyPartNo(), MesExtConstWords.ASSEMBLY_PART_NO, packBean); + DdlPreparedPack.getStringLikerPack(bean.getAssemblyPartName(), MesExtConstWords.ASSEMBLY_PART_NAME, packBean); } @Override @@ -34,52 +37,27 @@ public class MesProdRuleSortCfgService extends BaseMesService beanList) { for (MesProdRuleSortCfg item : beanList) { - // 数据校验 - //ValidatorBean.checkNotNull(item.getInPartNo(), "进件零件号不能为空"); - ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线不能为空"); - ValidatorBean.checkNotNull(item.getWorkCellCode(), "工位不能为空"); - ValidatorBean.checkNotNull(item.getAssemblyPartNo(), "零件号不能为空"); - - DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", seriesPackBean); - DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", seriesPackBean); - DdlPreparedPack.getStringEqualPack(item.getAssemblyPartNo(), "assemblyPartNo", seriesPackBean); - - - boolean flg = baseRDao.isExitByHql(seriesPackBean); - if (flg) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("该排序加工规则已存在,请检查数据") - .build(); - } + onInsertBean(item); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java index d474b1a..e9108d2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java @@ -48,4 +48,11 @@ public class MesProduceSnServiceImpl extends BaseMesService implem } return produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); } + + @Override + public MesProduceSn getMesProduceSnByCustSn(String organizeCode, String custSn) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custSn, "custSn", packBean); + return baseRDao.getByProperty(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java index c9fa3af..1590805 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductOffLineServiceImpl.java @@ -1,9 +1,15 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesProductOffLineService; +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.MesProductOffLine; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import org.springframework.stereotype.Service; +import java.util.List; + /** * @Description : 生产汇报 * @Reference : @@ -14,4 +20,25 @@ import org.springframework.stereotype.Service; @Service public class MesProductOffLineServiceImpl extends BaseMesService implements IMesProductOffLineService { + @Override + public List findMesProductOffLineByProductSn(String productSn, String organizeCode) { + if(StringUtil.isEmpty(productSn) || StringUtil.isEmpty(organizeCode)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productSn,"reportSn",packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue(),"reportType",packBean); + return baseRDao.findByHqlWhere(packBean); + } + + @Override + public List findMesProductOffLineByRecordId(String recordId, String organizeCode) { + if(StringUtil.isEmpty(recordId) || StringUtil.isEmpty(organizeCode)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(recordId,"productionRecordId",packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue(),"reportType",packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java index 26e518a..8f98f96 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java @@ -5,7 +5,9 @@ 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.MesProductVersion; import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository; import lombok.extern.slf4j.Slf4j; @@ -33,7 +35,7 @@ public class MesProductVersionService extends BaseMesService @Override public ListPager queryMesProductVersionByPagerExt(MesProductVersion mesProductVersion, Pager pager) { - DdlPackBean productVersionQueryPackBean = DdlPackBean.getDdlPackBean(); + DdlPackBean productVersionQueryPackBean = DdlPackBean.getDdlPackBean(mesProductVersion.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesProductVersion.getIsValid(), "isValid", productVersionQueryPackBean); DdlPreparedPack.getStringLikerPack(mesProductVersion.getProductVersion(), "productVersion", productVersionQueryPackBean); DdlPreparedPack.getStringLikerPack(mesProductVersion.getPartNo(), "partNo", productVersionQueryPackBean); @@ -44,4 +46,14 @@ public class MesProductVersionService extends BaseMesService List mesProductVersions = mesProductVersionRepository.findByHqlWherePage(productVersionQueryPackBean, pager); return new ListPager<>(mesProductVersions, pager); } + + @Override + public MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion) { + if (StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(partNo)) return null; + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, ddlPackBean); + return baseRDao.getByProperty(ddlPackBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java new file mode 100644 index 0000000..4d7d44b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -0,0 +1,370 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +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.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesPullingOrderInfoService extends BaseMesService 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 MesWorkOrderRepository mesWorkOrderRepository; + @Autowired + private ICoreUtilCloud sysOrderNoRuleCloud; + @Autowired + private MesWorkCenterRepository mesWorkCenterRepository; + @Autowired + private MesPullingOrderExtendsRepository mesPullingOrderExtendsRepository; + @Autowired + private IMesPrintedSnLogRepository snLogRao; + @Autowired + private IMesCustomerPartService mesCustomerPartService; + @Autowired + private IMesWorkOrderPartService mesWorkOrderPartService; + 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); + DdlPreparedPack.getNumEqualPack(bean.getPullOrderStatus(), "pullOrderStatus", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + } + + @Override + public void validateImport(List beanList) { + + for (MesPullingOrderInfo item : beanList) { + // 数据校验 + ValidatorBean.checkNotNull(item.getPullCode(), "拉动组代码不能为空"); + ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线代码不能为空"); + + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkOrderNo(), "workOrderNo", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", seriesPackBean); + boolean flg = baseRDao.isExitByHql(seriesPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单【%s】拉动组代码【%s】已经存在,请检查数据", item.getWorkOrderNo(), item.getPullCode()) + .build(); + } + } + } + + @Override + public void doCreatePullOrderByPullGroupAndWorkOrder(String organizeCode,Integer pageSize, String userName) { + //1.拉动组集合+拉动组明细集合pullingGroupList+ pullingpartlist + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + List pulliGroupList = mesPartPullRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(pulliGroupList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->{}拉动组不存在", organizeCode); + return; + } + Map> pullCodeMap = pulliGroupList.stream().collect(Collectors.groupingBy(MesPartPull::getPullCode)); + + DdlPackBean ddlPackBeanDetail = DdlPackBean.getDdlPackBean(organizeCode); + List pullDetailList = mesPartPullDetailRDao.findByHqlWhere(ddlPackBeanDetail); + if (CollectionUtils.isEmpty(pullDetailList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->{}拉动组明细不存在", organizeCode); + return; + } + Map> partPullDetailListMap = pullDetailList.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPartNo)); + //2.客户物料集合 [PART_NO] in 拉动组明细物料集合 + //3.产线数据 +// DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", workPackBean); +// List mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean); +// if (CollectionUtils.isEmpty(mesWorkCenterList)) { +// LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},拉动组对应产线信息不存在-->{}", organizeCode, workCenterList); +// return; +// } +// Map> workCenterListMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); + List workCenterList = pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).distinct().collect(Collectors.toList()); + + //4.生产工单 在加工状态 [PULLING_STATUS] =0 未创建 + List workOrderList = getMesWorkOrderList(organizeCode, pageSize, workCenterList); + if (CollectionUtils.isEmpty(workOrderList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线信息没有【未创建】【在加工】状态的工单-->{}", organizeCode, workCenterList); + return; + } + Map> workOrderListMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo)); + + List mesWorkOrderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()),organizeCode); + if (CollectionUtils.isEmpty(mesWorkOrderPartList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList())); + return; + } + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件mesWorkOrderPartList-->{}", organizeCode, mesWorkOrderPartList); + //5.取工单零件和拉动组交集,根据拉动主表对应的类型 生成相应的拉动单和拉动单明细 + Map> workOrderNoListMap = mesWorkOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getWorkOrderNo)); + //6、获取客户物料信息 + List mesCustomerPartByPartNoList = mesCustomerPartService.findMesCustomerPartByPartNo(organizeCode, partPullDetailListMap.keySet().stream().distinct().collect(Collectors.toList())); + Map> customerPartMap = CollectionUtils.isEmpty(mesCustomerPartByPartNoList) ? null : mesCustomerPartByPartNoList.stream().collect(Collectors.groupingBy(MesCustomerPart::getErpPartNo)); + + List mesPullingOrderInfoList = new ArrayList<>(); + List mesPullingOrderPartInfoList = new ArrayList<>(); + List mesPullingOrderExtendsList = new ArrayList<>(); + List workOrderNoList = new ArrayList<>(); + for (Map.Entry> stringListEntry : workOrderNoListMap.entrySet()) { + //需要生成拉动单的工单号 对应工单 + List mesWorkOrders = workOrderListMap.get(stringListEntry.getKey()); + MesWorkOrder mesWorkOrder = mesWorkOrders.get(0); + + //工单对应的工单零件号 + List workOrderParts = stringListEntry.getValue(); + //待生成的拉动组明细 + List pullDetailListNew = new ArrayList<>(); + for (MesWorkOrderPart workOrderPart : workOrderParts) { + if (!CollectionUtils.isEmpty(partPullDetailListMap.get(workOrderPart.getPartNo()))) { + pullDetailListNew.addAll(partPullDetailListMap.get(workOrderPart.getPartNo())); + } + } + if (CollectionUtils.isEmpty(pullDetailListNew)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线-->{}对应的工单号-->{}没有需要生成拉动单零件", + organizeCode, mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getWorkOrderNo()); + continue; + } + Map> workOrderPartListMap = workOrderParts.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //生成拉动单 如果是多个拉动组的话都要产生拉动单 + Map> pullCodeListMap = pullDetailListNew.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPullCode)); + for (Map.Entry> stringListEntryDetail : pullCodeListMap.entrySet()) { + String pullCode = stringListEntryDetail.getKey(); + List mesPartPulls = pullCodeMap.get(pullCode); + MesPartPull mesPartPull = mesPartPulls.get(0); + //拉动组明细拉动单号对应拉动组 如果拉动组产线跟工单产线不一致 不生成 + if (mesWorkOrder.getWorkCenterCode().equals(mesPartPull.getWorkCenterCode())){ + List mesPartPullDetails = stringListEntryDetail.getValue(); + //拉动组号+年月日+工单后5位 + String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime("yyMMdd") + + mesWorkOrder.getWorkOrderNo().substring(mesWorkOrder.getWorkOrderNo().length()-5); + MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo(); + pullingOrder.setOrganizeCode(organizeCode); + pullingOrder.setPullingOrderNo(orderNo); + pullingOrder.setPullOrderType(mesPartPull.getPullOrderType()); + pullingOrder.setPullGroupFid(mesPartPull.getId()); + pullingOrder.setCustOrderNo(StringUtil.isEmpty(mesWorkOrder.getCustOrderNo()) ? "" : mesWorkOrder.getCustOrderNo()); + pullingOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + pullingOrder.setWorkOrderSeq(StringUtil.isEmpty(mesWorkOrder.getWorkOrderSeq()) ? "" : mesWorkOrder.getWorkOrderSeq()); + pullingOrder.setIsPrint(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + pullingOrder.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + pullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue()); + pullingOrder.setWorkCenterCode(mesPartPull.getWorkCenterCode()); + pullingOrder.setPullCode(mesPartPull.getPullCode()); + pullingOrder.setPartNo(mesWorkOrder.getPartNo()); + pullingOrder.setPartName(mesWorkOrder.getPartName()); + pullingOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + pullingOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); + pullingOrder.setProductSeq(StringUtil.isEmpty(mesWorkOrder.getProductSeq()) ? 0L : mesWorkOrder.getProductSeq()); + pullingOrder.setOrderFlag(StringUtil.isEmpty(mesWorkOrder.getOrderFlag())?"":mesWorkOrder.getOrderFlag().substring(0,1)); + + ConvertBean.serviceModelInitialize(pullingOrder, userName); + mesPullingOrderInfoList.add(pullingOrder); + + for (MesPartPullDetail partInfo : mesPartPullDetails) { + MesPullingOrderPartInfo pullingOrderPartInfo = new MesPullingOrderPartInfo(); + pullingOrderPartInfo.setOrganizeCode(organizeCode); + pullingOrderPartInfo.setPullCode(partInfo.getPullCode()); + pullingOrderPartInfo.setPullingOrderNo(pullingOrder.getPullingOrderNo()); + pullingOrderPartInfo.setWorkOrderNo(pullingOrder.getWorkOrderNo()); + pullingOrderPartInfo.setWorkOrderSeq(pullingOrder.getWorkOrderSeq()); + pullingOrderPartInfo.setCustOrderNo(pullingOrder.getCustOrderNo()); + pullingOrderPartInfo.setPartNo(partInfo.getPartNo()); + pullingOrderPartInfo.setPartName(partInfo.getPartName()); + MesWorkOrderPart mesWorkOrderPart = workOrderPartListMap.get(partInfo.getPartNo()).get(0); + pullingOrderPartInfo.setPullQty(mesWorkOrderPart.getItemQty()); + pullingOrderPartInfo.setCustOrderNo(pullingOrder.getCustOrderNo()); + pullingOrderPartInfo.setWorkOrderSeq(pullingOrder.getWorkOrderSeq()); + pullingOrderPartInfo.setWaterSeq(pullingOrder.getProductSeq()); + pullingOrderPartInfo.setWorkCellCode(mesWorkOrderPart.getWorkCellCode()); + pullingOrderPartInfo.setEquipment(partInfo.getEquipment()); + pullingOrderPartInfo.setLocation(partInfo.getPullAddr());//todo + pullingOrderPartInfo.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1,未送料为0 + pullingOrderPartInfo.setCustPartNo(!Objects.isNull(customerPartMap) && customerPartMap.containsKey(partInfo.getPartNo()) ? customerPartMap.get(partInfo.getPartNo()).iterator().next().getCustPartNo() : ""); + if (partInfo.getScanValidationType() == 10) { + pullingOrderPartInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()); + } else { + pullingOrderPartInfo.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode()); + } + pullingOrderPartInfo.setCarSeries(partInfo.getCarSeries()); + pullingOrderPartInfo.setOrderFlag(pullingOrder.getOrderFlag()); + + ConvertBean.serviceModelInitialize(pullingOrderPartInfo, userName); + mesPullingOrderPartInfoList.add(pullingOrderPartInfo); + } + //7.拉动组+加工单号+生成拉动单状态的对应关系中间表,每次新增都要记录 + MesPullingOrderExtends mesPullingOrderExtends= new MesPullingOrderExtends(); + mesPullingOrderExtends.setOrganizeCode(organizeCode); + mesPullingOrderExtends.setPullCode(pullingOrder.getPullCode()); + mesPullingOrderExtends.setPullingOrderNo(pullingOrder.getPullingOrderNo()); + mesPullingOrderExtends.setWorkOrderNo(pullingOrder.getWorkOrderNo()); + mesPullingOrderExtends.setPullOrderStatus(pullingOrder.getPullOrderStatus()); + ConvertBean.serviceModelInitialize(mesPullingOrderExtends, userName); + mesPullingOrderExtendsList.add(mesPullingOrderExtends); + } + + } + //6.产生拉动单后更新工单拉动状态为已拉动 + workOrderNoList.add(mesWorkOrder.getWorkOrderNo()); + + } + //数据持久化 + if (!CollectionUtils.isEmpty(mesPullingOrderInfoList)) { + mesPullingOrderInfoRepository.saveAll(mesPullingOrderInfoList); + } + if (!CollectionUtils.isEmpty(mesPullingOrderPartInfoList)) { + mesPullingOrderPartInfoRepository.saveAll(mesPullingOrderPartInfoList); + } + if (!CollectionUtils.isEmpty(mesPullingOrderExtendsList)) { + mesPullingOrderExtendsRepository.saveAll(mesPullingOrderExtendsList); + } + //更新拉动状态 + if (!CollectionUtils.isEmpty(workOrderNoList)) { + updateMesWorkOrder(organizeCode, userName, workOrderNoList); + } + } + + private List getMesWorkOrderList(String organizeCode, Integer pageSize, List workCenterList) { + DdlPackBean packBeanWorkOrder = DdlPackBean.getDdlPackBean(organizeCode); + if (workCenterList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workCenterList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_CENTER_CODE, packBeanWorkOrder); + } else { + DdlPreparedPack.getInPackList(workCenterList, MesExtConstWords.WORK_CENTER_CODE, packBeanWorkOrder); + } + DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder); + DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue(), "pullingStatus", packBeanWorkOrder); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBeanWorkOrder); + return mesWorkOrderRepository.findByHqlTopWhere(packBeanWorkOrder, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize); + } + + private void updateMesWorkOrder(String organizeCode, String userName, List workOrderNoList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + } + mesWorkOrderRepository.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "pullingStatus"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue()}, packBean); + } + + @Override + public Map doSPSForEquipment(String assemblyLine, String pullingGroupCode, String organizeCode) { + Map resultMap = new HashMap(); + //查询拉动单状态为已扫描=20的 拉动单 + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(pullingGroupCode, "pullCode", seriesPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_PULL_ORDER_TYPE.SPS_PULL.getValue(), "pullOrderType", seriesPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue(), "pullOrderStatus", seriesPackBean); +// DdlPreparedPack.getStringEqualPack(assemblyLine, "workCenterCode", seriesPackBean); + seriesPackBean.setWhereAppend(seriesPackBean.getWhereAppend() + " order by modifyDatetime desc"); + + MesPullingOrderInfo mesPullingOrder = baseRDao.getByProperty(seriesPackBean); + if (StringUtil.isEmpty(mesPullingOrder)) { + resultMap.put("success", false); + String message = "SPS拉动数据已扫描数据为空,请检查拉动单数据"; + resultMap.put("message", message); + return resultMap; + } + //更新主表状态 源系统为25配料完成 现在-【已发送设备-30】 + mesPullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()); + ConvertBean.serviceModelUpdate(mesPullingOrder, "WS.SPS"); + baseRDao.update(mesPullingOrder); + String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; + //查询拉动组明细 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(mesPullingOrder.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPullingOrder.getPullingOrderNo(), "pullingOrderNo", partPackBean); + List pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(pullingOrderPartInfos)) { + mesPullingOrder.setPartList(pullingOrderPartInfos); + } + resultMap.put("orderInfo", JSONObject.toJSONString(mesPullingOrder)); + resultMap.put("success", true); + resultMap.put("message", message); + + + return resultMap; + } + @Override + public List doMesPullingOrderInfoPrint(MesPullingOrderInfo bean, String userName) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean); +// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), "printStatus", packBean); + List pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(pullingOrderInfos)) { + //把查出来的拉动单打印并修改打印状态为已打印 + List snLogList = new ArrayList<>(); + for (MesPullingOrderInfo pullingOrderInfo : pullingOrderInfos) { + //查询拉动组明细 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(pullingOrderInfo.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(pullingOrderInfo.getPullingOrderNo(), "pullingOrderNo", partPackBean); + List pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + if (!org.springframework.util.CollectionUtils.isEmpty(pullingOrderPartInfos)) { + pullingOrderInfo.setPartCount(pullingOrderPartInfos.size()); + pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos); + } + + pullingOrderInfo.setPrintTime(TimeTool.getNowTime(true)); + pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + pullingOrderInfo.setIsPrint(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + ConvertBean.serviceModelUpdate(pullingOrderInfo, userName); + + //10-12 打印补打拉动单新增log表 + MesPrintedSnLog snLog = new MesPrintedSnLog(); + snLog.setBarcode(pullingOrderInfo.getPullingOrderNo()); + snLog.setCustPartNo(pullingOrderInfo.getCustPartNo()); + snLog.setWorkOrderNo(pullingOrderInfo.getWorkOrderNo()); + snLog.setPartNo(pullingOrderInfo.getPartNo()); + snLog.setPartName(pullingOrderInfo.getPartName()); + ConvertBean.serviceModelInitialize(snLog, userName); + snLog.setOrganizeCode(bean.getOrganizeCode()); + snLogList.add(snLog); + + } + mesPullingOrderInfoRepository.saveAll(pullingOrderInfos); + //保存打印条码记录 + snLogRao.saveAll(snLogList); + } + return pullingOrderInfos; + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java new file mode 100644 index 0000000..f2ef7df --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderPartInfoService.java @@ -0,0 +1,56 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderPartInfoService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderPartInfo; +import cn.estsh.i3plus.pojo.mes.repository.MesPullingOrderPartInfoRepository; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class MesPullingOrderPartInfoService extends BaseMesService implements IMesPullingOrderPartInfoService { + + + protected void setPackQueryBean(MesPullingOrderPartInfo bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean); + DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + } + @Override + public void validateImport(List beanList) { + + for (MesPullingOrderPartInfo item : beanList) { + // 数据校验 + ValidatorBean.checkNotNull(item.getPullCode(), "拉动组代码不能为空"); + ValidatorBean.checkNotNull(item.getPartNo(), "物料代码不能为空"); + + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkOrderNo(), "workOrderNo", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", seriesPackBean); + boolean flg = baseRDao.isExitByHql(seriesPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("工单【%s】拉动组代码【%s】物料号【%s】已经存在,请检查数据", + item.getWorkOrderNo(), item.getPullCode(), item.getPartNo()) + .build(); + } + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java index b067db4..d2018a6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java @@ -182,7 +182,9 @@ public class MesQmsSuspiciousService extends BaseMesService im } //计算返工数量 if (mesPartInspection.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()) { - MesReworkTask reworkTask = mesReworkTaskRepository.getById(mesPartInspection.getReworkTaskId()); + packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartInspection.getReworkTaskId(),"id",packBean); + MesReworkTask reworkTask = mesReworkTaskRepository.getByProperty(packBean); if (!StringUtil.isEmpty(reworkTask)) { //返工是否完成 if (reworkTask.getStatus() == MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackagePartServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackagePartServiceImpl.java new file mode 100644 index 0000000..afd0fce --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackagePartServiceImpl.java @@ -0,0 +1,60 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesRecyclablePackagePartService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackagePart; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 13:45 + * @Modify: + **/ +@Slf4j +@Service +public class MesRecyclablePackagePartServiceImpl extends BaseMesService implements IMesRecyclablePackagePartService { + + + @Override + protected void onInsertBean(MesRecyclablePackagePart item) { + ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("零件号【%s】已存在", item.getPartNo()); + } + } + + @Override + protected void setPackQueryBean(MesRecyclablePackagePart bean, DdlPackBean packBean) { + String packageTypeCode = bean.getPackageTypeCode(); + if (!StringUtils.isEmpty(packageTypeCode)) { + DdlPreparedPack.getStringLikerPack(packageTypeCode, "packageTypeCode", packBean); + } + String partNo = bean.getPartNo(); + if (!StringUtils.isEmpty(partNo)) { + DdlPreparedPack.getStringLikerPack(partNo, "partNo", packBean); + } + } + + @Override + protected void onUpdateBean(MesRecyclablePackagePart item) { + ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", seriesPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(),"id",seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("零件号【%s】已存在", item.getPartNo()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageServiceImpl.java new file mode 100644 index 0000000..393ebe4 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageServiceImpl.java @@ -0,0 +1,61 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesRecyclablePackageService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackage; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/14 10:03 + * @Modify: + **/ +@Slf4j +@Service +public class MesRecyclablePackageServiceImpl extends BaseMesService implements IMesRecyclablePackageService { + + @Override + protected void onInsertBean(MesRecyclablePackage item) { + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageSn(), "包条码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageSn(), "packageSn", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("回收包装条码【%s】已存在", item.getPackageSn()); + } + } + + @Override + protected void onUpdateBean(MesRecyclablePackage item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageSn(), "包条码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageSn(), "packageSn", ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("回收包装条码【%s】已存在", item.getPackageSn()); + } + } + + @Override + protected void setPackQueryBean(MesRecyclablePackage bean, DdlPackBean packBean) { + String packageTypeCode = bean.getPackageTypeCode(); + if (!StringUtils.isEmpty(packageTypeCode)) { + DdlPreparedPack.getStringLikerPack(packageTypeCode, "packageTypeCode", packBean); + } + String packageSn = bean.getPackageSn(); + if (!StringUtils.isEmpty(packageSn)) { + DdlPreparedPack.getStringLikerPack(packageSn, "packageSn", packBean); + } + } + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageTypeServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageTypeServiceImpl.java new file mode 100644 index 0000000..691ec4b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRecyclablePackageTypeServiceImpl.java @@ -0,0 +1,70 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesRecyclablePackageTypeService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageType; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/13 17:38 + * @Modify: + **/ +@Slf4j +@Service +public class MesRecyclablePackageTypeServiceImpl extends BaseMesService implements IMesRecyclablePackageTypeService { + + + + @Override + protected void onInsertBean(MesRecyclablePackageType item) { + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeName(), "包描述不能为空"); + ValidatorBean.checkNotNull(item.getRuleType(),"规则类型不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageTypeCode(), "packageTypeCode", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode( ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("回收包装类型已存在{}", item.getPackageTypeCode()) + .build(); + } + } + + @Override + protected void setPackQueryBean(MesRecyclablePackageType bean, DdlPackBean packBean) { + String packageTypeCode = bean.getPackageTypeCode(); + if (!StringUtils.isEmpty(packageTypeCode)) { + DdlPreparedPack.getStringLikerPack(packageTypeCode, "packageTypeCode", packBean); + } + } + + @Override + protected void onUpdateBean(MesRecyclablePackageType item) { + ValidatorBean.checkNotNull(item.getId(), "id不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeCode(), "包类型不能为空"); + ValidatorBean.checkNotNull(item.getPackageTypeName(), "包描述不能为空"); + ValidatorBean.checkNotNull(item.getRuleType(),"规则类型不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPackageTypeCode(), "packageTypeCode", ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode( ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("回收包装类型已存在{}", item.getPackageTypeCode()) + .build(); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java index 3919fe0..f98a89c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java @@ -12,9 +12,12 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderPart; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +39,9 @@ public class MesShippingOrderManagementDetailService extends BaseMesService queryDetailGroupByPartNo(MesShippingOrderManagementDetail bean, Pager pager) { @@ -106,4 +112,32 @@ public class MesShippingOrderManagementDetailService extends BaseMesService queryDetailMesWorkOrderPart(MesWorkOrderPart bean, Pager pager) { + List modelList=new ArrayList<>(); + List shippingDetails = shippingOrderManagementDetailDao.queryMesShippingOrderManagementDetail(bean); + if (CollectionUtils.isEmpty(shippingDetails)){ + return new ListPager<>(modelList, pager); + } + bean.setShippingDetails(shippingDetails); + int count = shippingOrderManagementDetailDao.queryDetailGroupByPartNo(bean); + pager = PagerHelper.getPager(pager, count); + + modelList = shippingOrderManagementDetailDao.queryOrderDetailGroupByPartInfo(bean, pager); + //查询发运明细 + if (!CollectionUtils.isEmpty(modelList)){ + Map> collect = shippingDetails.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getBarcode)); + for (MesWorkOrderPart mesWorkOrderPart : modelList) { + if (!CollectionUtils.isEmpty(collect.get(mesWorkOrderPart.getWorkOrderNo()))){ + MesShippingOrderManagementDetail managementDetail = collect.get(mesWorkOrderPart.getWorkOrderNo()).get(0); + mesWorkOrderPart.setItemQty(mesWorkOrderPart.getItemQty()*managementDetail.getPlanQty()); + mesWorkOrderPart.setShippingCode(managementDetail.getShippingCode()); + mesWorkOrderPart.setTotalPartNo(managementDetail.getPartNo()); + } + } + } + + return new ListPager<>(modelList, pager); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index a803ccb..ea22990 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.*; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -73,8 +74,10 @@ public class MesShippingOrderManagementService extends BaseMesService { - k.setActualQty(0); - k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.PUBLISHED.getValue()); - ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName()); - - //若扫描过的条码 则恢复条码 - if (!StringUtils.isEmpty(k.getBarcode())) { - - DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(k.getBarcode(), "productSn", packBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); - MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); - - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + if(!CollectionUtils.isEmpty(detailDeleteList)){ + //修改当前发运单明细状态 + detailDeleteList.forEach(k -> { + k.setActualQty(0); + k.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.PUBLISHED.getValue()); ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName()); - produceSnRepository.save(produceSn); - - } - - }); - - baseRDao.save(originBean); - detailService.updates(detailDeleteList); + //若扫描过的条码 则恢复条码 + if (!StringUtils.isEmpty(k.getBarcode())) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(k.getBarcode(), "productSn", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); + if(!Objects.isNull(produceSn)){ + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName()); + produceSnRepository.update(produceSn); + } + } + }); + detailService.updates(detailDeleteList); + } + baseRDao.update(originBean); + } - } @Override + @Override public void saveShippingRelease(MesShippingOrderManagement bean) { - - MesShippingOrderManagement originBean = baseRDao.getById(bean.getId()); + MesShippingOrderManagement originBean = getMesShippingOrderManagement(bean.getOrganizeCode(),bean.getId()); originBean.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()); originBean.setPublishTime(TimeTool.getNowTime(true)); @@ -401,4 +401,14 @@ public class MesShippingOrderManagementService extends BaseMesService implements IMesStationService { + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + @Override + protected void setPackQueryBean(MesStation bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getStation(), "station", packBean); + DdlPreparedPack.getNumEqualPack(bean.getStationType(), "stationType", packBean); + DdlPreparedPack.getStringLikerPack(bean.getEquipmentCode(), "equipmentCode", packBean); + } + + @Override + protected void onInsertBean(MesStation item) { + ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(),"equipmentCode",ddlPackBean); + if (!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码不存在"); + } + } + + @Override + protected void onUpdateBean(MesStation item) { + ValidatorBean.checkNotNull(item.getId(),"主键不能为空"); + ValidatorBean.checkNotNull(item.getStation(),"站点不能为空"); + ValidatorBean.checkNotNull(item.getStationType(),"站点类型不能为空"); + ValidatorBean.checkNotNull(item.getEquipmentCode(),"设备代码不能为空"); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(),"equipmentCode",ddlPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(),"id",ddlPackBean); + if (!mesEquipmentRepository.isExitByHql(ddlPackBean)){ + MesException.throwBusiException("设备代码不存在"); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWcEquipmentServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWcEquipmentServiceImpl.java index a2f79af..981ee22 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWcEquipmentServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWcEquipmentServiceImpl.java @@ -53,7 +53,9 @@ public class MesWcEquipmentServiceImpl extends BaseMesService im ValidatorBean.checkNotNull(item.getWorkCellCode(), "工作单元代码不能为空"); ValidatorBean.checkNotNull(item.getWorkCenterCode(), "工作中心代码不能为空"); //校验数据是否存在 - MesWcEquipment mesWcEquipmentDb = baseRDao.getById(item.getId()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(item.getId(),"id",ddlPackBean); + MesWcEquipment mesWcEquipmentDb = baseRDao.getByProperty(ddlPackBean); if (null == mesWcEquipmentDb || CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesWcEquipmentDb.getIsDeleted()) { MesException.throwMesBusiException("数据不存在"); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java index 4b848e3..12b13f2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java @@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.util.List; + @Service @Slf4j public class MesWorkCenterService extends BaseMesService implements IMesWorkCenterService { @@ -41,4 +43,13 @@ public class MesWorkCenterService extends BaseMesService implemen return null != workCenterDb ? workCenterDb.getErpWorkCenter() : null; } + @Override + public List queryMesWorkCenterList(List workCenterCodeList, String organizeCode) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workCenterCodeList, MesExtConstWords.WORK_CENTER_CODE, packBean); + return workCenterRepository.findByHqlWhere(packBean); + + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java new file mode 100644 index 0000000..ce5e2ae --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderAssemblyServiceImpl.java @@ -0,0 +1,39 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderAssemblyService; +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.MesWorkOrderAssembly; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 工单装配件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:44 + * @Modify: + **/ +@Service +@Slf4j +public class MesWorkOrderAssemblyServiceImpl extends BaseMesService implements IMesWorkOrderAssemblyService { + + @Override + protected void setPackQueryBean(MesWorkOrderAssembly bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue(),CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"processSeq","routeSeq"}, packBean); + } + + @Override + public List findMesWorkOrderAssembly(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java new file mode 100644 index 0000000..c5462d3 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -0,0 +1,468 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesLabelTemplateService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesWorkOrderCutService extends BaseMesService implements IMesWorkOrderCutService { + + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private MesWorkOrderCutRepository workOrderCutRepository; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + @Autowired + private MesCutSchemeFgRepository cutSchemeFgRepository; + + @Autowired + private MesCutSchemeRepository cutSchemeRepository; + + @Autowired + private MesCutSchemeMaterialRepository cutSchemeMaterialRepository; + + @Autowired + private MesWorkOrderCutMaterialRepository workOrderCutMaterialRepository; + + @Autowired + private MesWorkOrderCutDetailRepository workOrderCutDetailRepository; + + @Autowired + private IMesPrintedSnLogRepository printedSnLogRepository; + + @Autowired + private IMesLabelTemplateService mesLabelTemplateService; + + protected void setPackQueryBean(MesWorkOrderCut bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean); + if (!StringUtils.isEmpty(bean.getCreateDateTimeStart()) || !StringUtils.isEmpty(bean.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder( + bean.getCreateDateTimeStart(), + bean.getCreateDateTimeEnd(), + MesExtConstWords.CREATE_DATE_TIME, packBean, true); + } + DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), MesExtConstWords.WORK_ORDER_STATUS, packBean); + } + + @Override + public void doGenerateCutWorkOrder(List workOrderIds, String cutCode, String remark, String organizeCode, + String userName, Integer editionNumber) { + + List workOrderList = getMesWorkOrders(workOrderIds, organizeCode); + + Map> workOrderListMapByPartNo = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); + + MesCutScheme cutScheme = getMesCutScheme(cutCode, organizeCode); + + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCode, organizeCode); + + List cutSchemeFgList = getMesCutSchemeFgs(cutCode, organizeCode); + + // 校验工单物料是否已在成品配置中进行维护 + checkWorkOrderPartValid(workOrderList, cutSchemeFgList); + + // 裁片工单生成版数 + editionNumber = editionNumber == null ? 1 : editionNumber; + + // 记录工单剩余未完成数量 + Map workOrderUnCompleteMap = new HashMap<>(); + // 记录当前裁片工单 每个工单的计划数量 + Map workOrderQtyMap = new HashMap<>(); + List workOrderCutDetailtList = new ArrayList<>(); + List workOrderCuttList = new ArrayList<>(); + List workOrderCutMaterialList = new ArrayList<>(); + + // 校验工单未完成数量是否满足计划数量 + checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap, workOrderQtyMap); + + // 预计生成裁片工单数量 + for (int count = 0; count < editionNumber; count++) { + MesWorkOrderCut workOrderCut = new MesWorkOrderCut(); + ConvertBean.serviceModelInitialize(workOrderCut, userName); + workOrderCut.setCutCode(cutScheme.getCutCode()); + workOrderCut.setCutName(cutScheme.getCutName()); + workOrderCut.setWorkCenterCode(cutScheme.getWorkCenterCode()); + workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()); + workOrderCut.setRemark(remark); + + String cutWorkOrderNo = doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName); + + log.info("裁片工单号:{}", cutWorkOrderNo); + + workOrderCut.setCutWorkOrderNo(cutWorkOrderNo); + workOrderCut.setOrganizeCode(organizeCode); + workOrderCut.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + workOrderCuttList.add(workOrderCut); + + for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) { + MesWorkOrderCutMaterial workOrderCutMaterial = new MesWorkOrderCutMaterial(); + BeanUtils.copyProperties(cutSchemeMaterial, workOrderCutMaterial, MesExtConstWords.ID); + ConvertBean.serviceModelInitialize(workOrderCutMaterial, userName); + workOrderCutMaterial.setOrganizeCode(organizeCode); + workOrderCutMaterial.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo()); + workOrderCutMaterial.setSystemSyncStatus(CommonEnumUtil.FALSE); + workOrderCutMaterialList.add(workOrderCutMaterial); + } + + for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { + List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); + for (MesWorkOrder workOrder : workOrders) { + MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail(); + ConvertBean.serviceModelInitialize(detail, userName); + detail.setOrganizeCode(organizeCode); + detail.setCutWorkOrderNo(cutWorkOrderNo); + detail.setPartNo(workOrder.getPartNo()); + detail.setPartName(workOrder.getPartName()); + detail.setWorkOrderNo(workOrder.getWorkOrderNo()); + detail.setRemark(cutSchemeFg.getRemark()); + detail.setQty(workOrderQtyMap.get(workOrder.getWorkOrderNo())); + workOrderCutDetailtList.add(detail); + } + } + } + + workOrderCutMaterialRepository.saveAll(workOrderCutMaterialList); + workOrderCutDetailRepository.saveAll(workOrderCutDetailtList); + workOrderCutRepository.saveAll(workOrderCuttList); + + String nowTime = TimeTool.getNowTime(true); + workOrderList.forEach(o -> { + o.setUnCompleteQty(workOrderUnCompleteMap.get(o.getWorkOrderNo())); + o.setModifyUser(userName); + o.setModifyDatetime(nowTime); + o.setSystemSyncStatus(CommonEnumUtil.FALSE); + }); + + workOrderRepository.saveAll(workOrderList); + + } + + @Override + public ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderCutDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workOrderCutDetail.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + pager = PagerHelper.getPager(pager, workOrderCutDetailRepository.findByHqlWhereCount(packBean)); + List list = workOrderCutDetailRepository.findByHqlWherePage(packBean, pager); + return new ListPager<>(list, pager); + } + + private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, + MesCutScheme cutScheme, List cutSchemeFgList, + Map workOrderUnCompleteMap, Map workOrderQtyMap) { + for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { + + List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); + + //MesWorkOrder workOrder = workOrders.get(0); + + //if (workOrders.size() > 1) + // MesException.throwMesBusiException("零件号【%s】存在多个工单", cutSchemeFg.getPartNo()); + + if (!CollectionUtils.isEmpty(workOrders)) workOrders.sort(Comparator.comparing(MesWorkOrder::getUnCompleteQty)); + + // 成品配置计划数量 * 版数 = 裁片工单该成品总消耗数量 + Double totalQty = MathOperation.mul(cutSchemeFg.getQty(), editionNumber); + Double srcTotalQty = totalQty.doubleValue(); + Double unCompleteQty = 0.0; + List needWorkOrderNoList = new ArrayList<>(); + for (MesWorkOrder order : workOrders) { + + if (!order.getWorkCenterCode().equals(cutScheme.getWorkCenterCode())) + MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", + order.getWorkCenterCode(), cutScheme.getWorkCenterCode()); + + if (unCompleteQty.compareTo(srcTotalQty) >= 0) + MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量汇总【%s】已满足产成总数【%s】!请取消勾选工单【%s】", + order.getWorkCenterCode(), needWorkOrderNoList, cutScheme.getWorkCenterCode(), + workOrders.subList(needWorkOrderNoList.size(), workOrders.size())); + + unCompleteQty = MathOperation.add(unCompleteQty, order.getUnCompleteQty()); + + needWorkOrderNoList.add(order.getWorkOrderNo()); + + if (order.getUnCompleteQty().compareTo(totalQty) >= 0) { + workOrderUnCompleteMap.put(order.getWorkOrderNo(), MathOperation.sub(order.getUnCompleteQty(), totalQty)); + workOrderQtyMap.put(order.getWorkOrderNo(), totalQty); + totalQty = 0.0; + } else { + workOrderUnCompleteMap.put(order.getWorkOrderNo(), 0.0); + workOrderQtyMap.put(order.getWorkOrderNo(), order.getUnCompleteQty()); + totalQty = MathOperation.sub(totalQty, order.getUnCompleteQty()); + } + + } + + if (totalQty.compareTo(unCompleteQty) > 0) { + List workOrderNoList = workOrders.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()); + MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量【%s】不满足产成总数【%s】!", + cutSchemeFg.getPartNo(), workOrderNoList, unCompleteQty, totalQty); + } + + } + } + + private List getMesWorkOrders(List workOrderIds, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderIds, MesExtConstWords.ID, packBean); + List workOrderList = workOrderRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(workOrderList)) { + MesException.throwMesBusiException("工单信息不存在"); + } + + List workOrderIdDbList = workOrderList.stream().map(MesWorkOrder::getId).collect(Collectors.toList()); + + for (Long workOrderId : workOrderIds) { + if (!workOrderIdDbList.contains(workOrderId)) { + MesException.throwMesBusiException("工单信息ID【%s】不存在", workOrderId); + } + } + + for (MesWorkOrder mesWorkOrder : workOrderList) { + if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() && mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) { + MesException.throwMesBusiException("工单【%s】状态【%s】无法生成裁片工单", mesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(mesWorkOrder.getWorkOrderStatus())); + } + } + return workOrderList; + } + + private MesCutScheme getMesCutScheme(String cutCode, String organizeCode) { + MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); + + if (cutScheme == null) + MesException.throwMesBusiException("裁片方案【%s】无效", cutCode); + return cutScheme; + } + + private static void checkWorkOrderPartValid(List workOrderList, List cutSchemeFgList) { + List partNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()); + List fgPartNoList = cutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList()); + + partNoList.removeAll(fgPartNoList); + + if (!CollectionUtils.isEmpty(partNoList)) MesException.throwMesBusiException("零件号【%s】未在裁片方案成品配置中维护", partNoList); + } + + private List getMesCutSchemeFgs(String cutCode, String organizeCode) { + List cutSchemeFgList = getCutSchemeFgList(cutCode, organizeCode); + + if (CollectionUtils.isEmpty(cutSchemeFgList)) MesException.throwMesBusiException("裁片方案【%s】缺少裁片方案成品配置", cutCode); + return cutSchemeFgList; + } + + private List getMesCutSchemeMaterials(String cutCode, String organizeCode) { + List cutSchemeMaterialList = getCutSchemeMaterialList(cutCode, organizeCode); + + if (CollectionUtils.isEmpty(cutSchemeMaterialList)) MesException.throwMesBusiException("裁片方案【%s】缺少原材料配置", cutCode); + return cutSchemeMaterialList; + } + + @Override + public void doReleaseCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName) { + + if (CollectionUtils.isEmpty(cutWorkOrderNos)) MesException.throwMesBusiException("裁片工单为空"); + + List workOrderCuts = new ArrayList<>(); + + for (String cutWorkOrderNo : cutWorkOrderNos) { + + if (StringUtils.isEmpty(cutWorkOrderNos)) MesException.throwMesBusiException("裁片工单为空"); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutWorkOrderNo, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + MesWorkOrderCut workOrderCutDb = workOrderCutRepository.getByProperty(packBean); + + if (workOrderCutDb == null) MesException.throwMesBusiException("裁片工单不存在", cutWorkOrderNo); + + if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()) MesException.throwMesBusiException("裁片工单【%】状态不为【%s】,当前状态为【%s】", cutWorkOrderNo, MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue(), MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus())); + + workOrderCuts.add(workOrderCutDb); + + } + + for (MesWorkOrderCut workOrderCut : workOrderCuts) { + workOrderCut.setWorkOrderStatus(MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue()); + ConvertBean.serviceModelUpdate(workOrderCut, userName); + } + + workOrderCutRepository.saveAll(workOrderCuts); + } + + @Override + public List> doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutWorkOrderNos, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + List workOrderCutDbList = workOrderCutRepository.findByHqlWhere(packBean); + + List cutWorkOrderNoDbList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutWorkOrderNo) + .distinct().collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(cutWorkOrderNoDbList)) MesException.throwMesBusiException("裁片工单不存在"); + + cutWorkOrderNos = new ArrayList<>(cutWorkOrderNos); + + cutWorkOrderNos.removeAll(cutWorkOrderNoDbList); + + if (!CollectionUtils.isEmpty(cutWorkOrderNos)) + MesException.throwMesBusiException("裁片工单【%s】不存在", cutWorkOrderNos); + + workOrderCutDbList.forEach(o -> { + if (o.getPrintStatus() == MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()) + MesException.throwMesBusiException("裁片工单【%s】已打印过标签,无法再次打印", o.getCutWorkOrderNo()); + }); + + // 返回结果 + List> resultMapList = new ArrayList<>(); + + List cutCodeList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutCode) + .distinct().collect(Collectors.toList()); + + // 根据裁片方案代码分组裁片工单 + Map> workOrderCutMapByCutCode = workOrderCutDbList.stream().collect( + Collectors.groupingBy(MesWorkOrderCut::getCutCode)); + + // 获取裁片方案 + List mesCutSchemes = queryCutSchemeList(cutCodeList, organizeCode); + + // 根据裁片方案代码分组 + Map cutSchemeMapByTemplate = mesCutSchemes.stream().collect( + Collectors.toMap(MesCutScheme::getTemplateCode, Function.identity(), (x, y) -> y)); + + for (Map.Entry entry : cutSchemeMapByTemplate.entrySet()) { + + MesCutScheme cutScheme = entry.getValue(); + List workOrderCutList = workOrderCutMapByCutCode.get(cutScheme.getCutCode()); + + MesLabelTemplate labelTemplate = mesLabelTemplateService.getLabelTemplate(cutScheme.getTemplateCode(), organizeCode); + + //模板信息丢失抛出异常 + if (labelTemplate == null) + MesException.throwBusiException("请检查裁片方案,裁片方案[%s]模板代码[%s]无效!", cutScheme.getCutCode(), cutScheme.getTemplateCode()); + + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + + //模板信息丢失抛出异常 + if (StringUtils.isEmpty(methodCode)) + MesException.throwBusiException("裁片方案[%s]模板代码[%s]方法类为空,请配置!", cutScheme.getCutCode(), labelTemplate.getTemplateCode()); + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setSourceData(workOrderCutList); + mesProduceSnPrintModel.setPrinter(cutScheme.getPrinter()); + + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, null); + + resultMapList.addAll(printModel.getPrintContextList()); + + } + + List printedSnLogList = new ArrayList<>(); + workOrderCutDbList.forEach(o -> { + o.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + o.setPrintTime(TimeTool.getNowTime(true)); + ConvertBean.serviceModelUpdate(o, userName); + o.setSystemSyncStatus(CommonEnumUtil.FALSE); + + MesPrintedSnLog printedSnLog = new MesPrintedSnLog(); + printedSnLog.setOrganizeCode(organizeCode); + printedSnLog.setCutWorkOrderNo(o.getCutWorkOrderNo()); + printedSnLog.setBarcode(o.getCutWorkOrderNo()); + printedSnLog.setProductDate(TimeTool.getNowTime(MesExtConstWords.DATE_FORMAT)); + ConvertBean.serviceModelInitialize(printedSnLog, userName); + printedSnLogList.add(printedSnLog); + + }); + + workOrderCutRepository.saveAll(workOrderCutDbList); + + printedSnLogRepository.saveAll(printedSnLogList); + + + return resultMapList; + + } + + @Override + public void doUpdatePrintStatus(List cutWorkOrderIds, String organizeCode, String userName) { + + for (String cutWorkOrderId : cutWorkOrderIds) { + workOrderCutRepository.updateByProperties( + new String[]{MesExtConstWords.ID, MesExtConstWords.ORGANIZE_CODE}, + new Object[]{Long.parseLong(cutWorkOrderId), organizeCode}, + new String[]{MesExtConstWords.IS_DELETED, MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME, MesExtConstWords.SYSTEM_SYNC_STATUS, MesExtConstWords.PRINT_STATUS}, + new Object[]{CommonEnumUtil.VALID,userName,TimeTool.getNowTime(true), CommonEnumUtil.FALSE, MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()}); + } + + } + + private String doGenerateSerialNo(String cutCode, String organizeCode, String userName) { + return syncFuncService.syncSerialNo( + new GenSerialNoModel(MesExtConstWords.CUT_WORK_ORDER_NO_FUL).dynamicRule(cutCode).year(TimeTool.pareDateToString(MesExtConstWords.DATE_FORMAT_YY, new Date())).organizeCode(organizeCode), + userName, organizeCode, 1).getResultList().get(0).toString(); + } + + private MesCutScheme getCutScheme(String cutCode, String organizeCode) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeRepository.getByProperty(packBean); + + } + + private List queryCutSchemeList(List cutCodeList, String organizeCode) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeRepository.findByHqlWhere(packBean); + + } + + private List getCutSchemeFgList(String cutCode, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeFgRepository.findByHqlWhere(packBean); + } + + private List getCutSchemeMaterialList(String cutCode, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeMaterialRepository.findByHqlWhere(packBean); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java index 500cd23..a80ec8b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderLogService.java @@ -2,9 +2,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderLogService; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; +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.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog; @@ -134,4 +136,12 @@ public class MesWorkOrderLogService extends BaseMesService impl return new ListPager(mesWorkOrderLogList, pager); } + + @Override + public List findMesWorkOrderLog(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java new file mode 100644 index 0000000..f604f1f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderPartServiceImpl.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +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.MesWorkOrderPart; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.util.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 工单零件 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/19 16:44 + * @Modify: + **/ +@Service +@Slf4j +public class MesWorkOrderPartServiceImpl extends BaseMesService implements IMesWorkOrderPartService { + + @Override + protected void setPackQueryBean(MesWorkOrderPart bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); + } + + @Override + public List findMesWorkOrderPart(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } + + @Override + public List findMesWorkOrderPart(List workOrderNoList, String organizeCode) { + if (CollectionUtils.isEmpty(workOrderNoList) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + } + return baseRDao.findByHqlWhere(packBean); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index b6d314c..9fea662 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1,10 +1,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.*; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.apiservice.util.DateUtil; @@ -13,6 +16,7 @@ import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -22,25 +26,27 @@ import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; import cn.estsh.i3plus.pojo.mes.repository.*; -import cn.estsh.i3plus.pojo.mes.repository.shipping.MesWorkOrderToWmsRepository; import cn.estsh.i3plus.pojo.mes.util.DateUtilExt; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.CaseInsensitiveMap; import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; @Service @Slf4j @@ -60,20 +66,14 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private IMesWorkOrderDao mesWorkOrderDao; @Autowired - private MesWorkOrderRepository mesWorkOrderRDao; - @Autowired private MesWorkCenterRepository mesWorkCenterRDao; @Autowired private MesShiftRepository mesShiftRDao; @Autowired - private MesProductPlanRepository mesProductPlanRDao; - @Autowired private IMesPartProdGroupService mesPartProdGroupService; @Autowired private MesCustomerPartRepository mesCustomerPartRDao; @Autowired - private IMesPartSapService iMesPartSapService; - @Autowired private IMesMoveRuleService mesMoveRuleService; @Autowired private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao; @@ -103,8 +103,6 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private MesWorkOrderLogRepository mesWorkOrderLogRepository; @Autowired - private MesWorkOrderToWmsRepository mesWorkOrderToWmsRDao; - @Autowired private MesBomRepository mesBomRDao; @Autowired private MesPartRepository mesPartRDao; @@ -121,60 +119,101 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private MesWorkOrderToSapRepository mesWorkOrderToSapRepository; + @Autowired + private MesPrintQueueRepository printQueueRepository; + + @Autowired + private MesCustomerCarModelRepository customerCarModelRepository; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRepository; + + @Autowired + private IMesLabelTemplateService labelTemplateService; + + @Autowired + private IMesPartProdGroupService partProdGroupService; + + @Autowired + private IMesPrintedSnLogRepository printedSnLogRepository; + + @Autowired + private SnowflakeIdMaker snowflakeIdMaker; + + @Autowired + private MesPartPtrRepository partPtrRao; + + @Autowired + private MesPartPtrDetailRepository partPtrDetailRao; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private IMesWorkOrderAssemblyService mesWorkOrderAssemblyService; + + @Autowired + private IMesWorkOrderPartService mesWorkOrderPartService; + + @Autowired + private IMesProduceSnService mesProduceSnService; + + @Autowired + private IMesConfigService mesConfigService; + + @Autowired + private IMesProductVersionService mesProductVersionService; + @Override public MesWorkOrder insert(MesWorkOrder bean) { + // 数据校验 + ValidatorBean.checkNotNull(bean.getWorkOrderType(), "工单类型不能为空"); + ValidatorBean.checkNotNull(bean.getWorkCenterCode(), "产线不能为空"); + ValidatorBean.checkNotNull(bean.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(bean.getShiftCode(), "班次不能为空"); //校验产线与工位的关系 boolean relationResult = checkWorkCenterPartRelation(bean.getWorkCenterCode(), bean.getPartNo()); if (!relationResult && (StringUtil.isEmpty(bean.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag()))){ MesException.throwMesBusiException(String.format("工单产线【%s】与工单零件【%s】没有维护产线零件关系",bean.getWorkCenterCode(),bean.getPartNo())); } - //获取相同类型 相同标识 生产序号最大值的 - DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", orderPackBean); - DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", orderPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"produceSeq"}, orderPackBean); - MesWorkOrder result = baseRDao.getByProperty(orderPackBean); - - //插入前构造数据 - onInsertBean(bean); - - //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 + //排序生成个数 默认1,数量为生成工单的个数 + Double generateQty = bean.getQty(); + MesWorkCenter mesWorkCenter = workCenterService.getWorkCenterDb(bean.getOrganizeCode(), bean.getWorkCenterCode()); + if (Objects.isNull(mesWorkCenter)) { + MesException.throwMesBusiException("产线【%s】不存在", bean.getWorkCenterCode()); + } + bean.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); + bean.setAreaCode(mesWorkCenter.getAreaCode()); + //客户物料信息 + if (StringUtil.isEmpty(bean.getCustPartNo())) { + getCustomerPart(bean); + } + //排序 if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - produceSeq = (long) Math.toIntExact(result.getProduceSeq()); - } - MesWorkOrder copyMesWorkOrder = new MesWorkOrder(); - BeanUtils.copyProperties(bean, copyMesWorkOrder); - copyMesWorkOrder.setProduceSeq((long) (produceSeq + 1)); - copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelInitialize(copyMesWorkOrder, bean.getCreateUser()); - - baseRDao.insert(copyMesWorkOrder); - workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty()); - return bean; - } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - produceSeq = (long) Math.toIntExact(result.getProduceSeq()); - } - bean.setProduceSeq(produceSeq + 1); - GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); - List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); - bean.setWorkOrderSeq(resultList.get(0)); + insertSortWorkOrderNo(bean, mesWorkCenter); + //生成数量大于1 + if (generateQty > 1) { + insertBatchWorkOrder(bean, generateQty); + } + //非排序 + } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { + insertUnSortWorkOrder(bean, mesWorkCenter); + //bto + } else { + insertBtoWorkOrder(bean); } - bean.setQty(bean.getQty()); - bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelInitialize(bean, bean.getCreateUser()); - - workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); - bean = baseRDao.insert(bean); return bean; } @Override public MesWorkOrder update(MesWorkOrder bean) { - MesWorkOrder result = baseRDao.getById(bean.getId()); + MesWorkOrder result = getMesWorkOrder(bean.getWorkOrderNo(),bean.getOrganizeCode()); //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 if (result.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { if (!Objects.equals(bean.getQty(), result.getQty())) { @@ -198,20 +237,25 @@ public class MesWorkOrderService extends BaseMesService implements } } + boolean isSavePrintQueue = false; + //更新状态 if (result.getWorkOrderStatus().intValue() != bean.getWorkOrderStatus().intValue()) { - result.setWorkOrderStatus(bean.getWorkOrderStatus()); - if (result.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.CREATE.getValue() - && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { - //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(result); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(result.getPartNo(), result.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsService.saveMesWorkOrderToWms(result, bomList)); + + // 发布时创建工单打印队列 + if (!Objects.equals(bean.getWorkOrderStatus(), result.getWorkOrderStatus()) && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + isSavePrintQueue = true; + } + //排序工单 关闭工单对列表 + if (!Objects.equals(bean.getWorkOrderStatus(), result.getWorkOrderStatus()) && MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue() == bean.getWorkOrderStatus() && MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == bean.getWorkOrderType()) { + closeMesQueueOrder(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName()); } + result.setWorkOrderStatus(bean.getWorkOrderStatus()); } + updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); + if (isSavePrintQueue) insertPrintQueue(result); + return result; } @@ -219,12 +263,16 @@ public class MesWorkOrderService extends BaseMesService implements @Override protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getWorkOrderNo(), "workOrderNo", packBean); - DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partNameRdd", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); DdlPreparedPack.getStringLikerPack(bean.getCreateUser(), "createUser", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); - DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); + DdlPreparedPack.getStringLikerPack(bean.getVinCode(), "vinCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", packBean); + if (!StringUtil.isEmpty(bean.getWorkOrderStatusQuery())) { + DdlPreparedPack.getInPackList(Arrays.stream(bean.getWorkOrderStatusQuery().split(MesExtConstWords.COMMA)).map(Integer::parseInt).collect(Collectors.toList()), "workOrderStatus", packBean); + } else DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", packBean); DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(), "createDatetime", packBean); DdlPreparedPack.getStringSmallerPack(bean.getCreateDateTimeEnd(), "createDatetime", packBean); @@ -232,7 +280,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(), "planStartTime", packBean); DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(), "planEndTime", packBean); DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(), "planEndTime", packBean); - packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,workOrderNo asc "); + packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,productSeq asc,workOrderNo asc "); } @Override @@ -248,192 +296,247 @@ public class MesWorkOrderService extends BaseMesService implements if (CollectionUtils.isEmpty(mesWorkCenterList)) { return; } - Map mesWorkCenterMap = mesWorkCenterList.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName)); + Map> mesWorkCenterMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); mesWorkOrderList.forEach(t -> { - t.setWorkCenterName(mesWorkCenterMap.get(t.getWorkCenterCode())); + t.setWorkCenterName(mesWorkCenterMap.containsKey(t.getWorkCenterCode()) ? mesWorkCenterMap.get(t.getWorkCenterCode()).iterator().next().getWorkCenterName() : ""); }); } - @Override - protected void onInsertBean(MesWorkOrder item) { - - // 数据校验 - ValidatorBean.checkNotNull(item.getWorkOrderType(), "工单类型不能为空"); - ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线不能为空"); - ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); - ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); - - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", ddlPackBean); - MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesWorkCenter)) { - MesException.throwMesBusiException("产线【%s】不存在", item.getWorkCenterCode()); - } - item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); - //客户物料信息 - if (StringUtil.isEmpty(item.getCustPartNo())) { - getCustomerPart(item); - } - //生成工单号 - List orderList=new ArrayList<>(); - if(item.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()){ + private String getOrderNo(MesWorkOrder item) { + String orderNo; + if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()){ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + orderNo = item.getOrganizeCode() + item.getOrderFlag() + item.getShiftCode() + serialNo; + }else if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()){ GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO); genSerialNoModel.setPartNo(item.getWorkCenterCode()); - orderList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList(); + orderNo = (String)syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList().get(0); }else { GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO); - orderList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList(); + orderNo = (String)syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(item.getOrganizeCode()), item.getCreateUser(), item.getOrganizeCode(), 1).getResultList().get(0); } - String orderNo = orderList.get(0); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); if (baseRDao.isExitByHql(orderPackBean)) { MesException.throwMesBusiException("单号流水码生成重复"); } - item.setWorkOrderNo(orderNo); - //校验标识 - //若工单类型为排序 - List saveMesWorkOrderToWms = new ArrayList<>(); - if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); - //校验产线类型和工单类型是否匹配 - if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) { - MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择排序产线", mesWorkCenter.getWorkCenterCode(), - MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); - } - //若工单类型为排序 标识为 N E P S - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识", - item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() - , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); - } - //校验VIN号是否重复 - if (!StringUtil.isEmpty(item.getVinCode())) { - //校验vin号是否重复 - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getVinCode(), "vinCode", ddlPackBean); - if (baseRDao.isExitByHql(ddlPackBean)) { - MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode()); + return orderNo; + } + + private void insertMesWorkOrder(MesWorkOrder item, List orderPartList) { + /** + * 总成拆bom,变成子零件 + * 替换子零件,通过替换后的零件,去找排序工艺 + */ + Map ptrRuleListMap = new HashMap<>(); + //是否修改为P单 + boolean isModifyPOrder = false; + //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + if (!CollectionUtils.isEmpty(orderPartList)){ + Map orderPartMap = orderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + //先替换客户的ptr信息 + String ptrInfo = item.getPtrInfo(); + if (!StringUtils.isEmpty(ptrInfo)) { + List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); + if (!ptrInfoList.isEmpty()){ + List custPartPtrList = getCustPartPtrList(ptrInfoList, item.getOrganizeCode()); + for (MesPartPtr mesPartPtr : custPartPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode()); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + } + } } } - //排序工单数量为1 - item.setQty(1d); - //发送工单给WMS - sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); - } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { - ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); - if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { - MesException.throwMesBusiException("生产数量不能小于等于0"); - } - //校验产线类型和工单类型是否匹配 - if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { - MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择非排序产线", mesWorkCenter.getWorkCenterCode(), - MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); - } - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识", - item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() - , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); - } - item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //非试制单 - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); - //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(item); - item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList)); - } - } else { - ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空"); - ValidatorBean.checkNotNull(item.getPlanEndTime(), "计划结束时间不能为空"); - if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { - MesException.throwMesBusiException("生产数量不能小于等于0"); + List partNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + List partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList); + //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 + + for (MesPartPtr mesPartPtr : partPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + String srcPartNo = mesPartPtr.getSrcPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode()); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr, item.getModifyUser()); + partPtrRao.update(mesPartPtr); + DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(),"totalPartNo",partPtrDetailPackBean); + List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); + if (!partPtrDetailList.isEmpty()){ + MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail, item.getModifyUser()); + partPtrDetailRao.update(mesPartPtrDetail); + } + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 + } } - //发送工单给WMS - sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); } - //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode()); - item.setPartName(mesPart.getPartName()); - item.setUnit(mesPart.getUnit()); - //生产时间新增取当天 - if (StringUtil.isEmpty(item.getProduceTime())) { - item.setProduceTime(TimeTool.getToday()); + + // 生成装配件清单 + if (isModifyPOrder){ + item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + } + + if (!CollectionUtils.isEmpty(orderPartList)) { + for (MesWorkOrderPart orderPart : orderPartList) { + orderPart.setOrganizeCode(item.getOrganizeCode()); + orderPart.setWorkOrderNo(item.getWorkOrderNo()); + ConvertBean.saveOrUpdate(orderPart, item.getModifyUser()); + } + workOrderPartRao.saveAll(orderPartList); } - item.setUnCompleteQty(item.getQty()); - item.setFid(UUID.randomUUID().toString()); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); + List assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode()); + if (!CollectionUtils.isEmpty(assemblyList)) { + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ + orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); + } + orderAssembly.setPartNo(item.getPartNo()); + orderAssembly.setPartName(item.getPartName()); + orderAssembly.setWorkOrderNo(item.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); + orderAssembly.setOrganizeCode(item.getOrganizeCode()); + orderAssembly.setProductSn(item.getWorkOrderNo()); + orderAssembly.setAreaCode(item.getAreaCode()); + ConvertBean.saveOrUpdate(orderAssembly, item.getCreateUser()); + } + workOrderAssemblyRepository.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + BeanUtils.copyProperties(item,mesQueueOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); + mesQueueOrder.setSerialNumber(item.getWorkOrderNo()); + mesQueueOrder.setProductSn(item.getWorkOrderNo()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + ConvertBean.saveOrUpdate(mesQueueOrder, item.getCreateUser()); + queueOrderRao.insert(mesQueueOrder); + } } + + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(item.getWorkOrderNo()); + mesProduceSn.setCustSn(item.getCustSn()); + mesProduceSn.setWorkOrderNo(item.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(item.getOrganizeCode()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(item.getCustCode()); + mesProduceSn.setCustPartNo(item.getCustPartNo()); + mesProduceSn.setPartNo(item.getPartNo()); + mesProduceSn.setPartName(item.getPartName()); + mesProduceSn.setShiftCode(item.getShiftCode()); + mesProduceSn.setWorkCenterCode(item.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(item.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(item.getAreaCode()); + ConvertBean.saveOrUpdate(mesProduceSn, item.getCreateUser()); + mesProduceSnRao.insert(mesProduceSn); } - private void sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List saveMesWorkOrderToWms) { + private List autoPublish(MesWorkOrder item) { //非试制单 - List bomList = null; + MesProductVersion mesProductVersion = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(item, mesWorkCenter); + mesProductVersion = getMesProductVersion(item.getOrganizeCode(),item.getPartNo()); item.setProductVersion(mesProductVersion.getProductVersion()); - //获取bom信息 - bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); } //是否自动发布 - isAuto(item, saveMesWorkOrderToWms, bomList); + return isAuto(item, mesProductVersion); } - private void isAuto(MesWorkOrder item, List saveMesWorkOrderToWms, List bomList) { + private List isAuto(MesWorkOrder item,MesProductVersion mesProductVersion) { MesPartProdGroup mesPartProdGroup = null; if(StringUtil.isEmpty(item.getPartProdGroupCode())){ mesPartProdGroup = getMesPartProdGroup(item); - item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); - item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); }else{ DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); mesPartProdGroup = mesPartProdGroupRDao.getByProperty(ddlPackBean); if(Objects.isNull(mesPartProdGroup)){ - MesException.throwMesBusiException("生产线组【%s】信息不存在",item.getPartProdGroupCode()); + MesException.throwMesBusiException("零件生产组【%s】信息不存在",item.getPartProdGroupCode()); } } + item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + item.setCustCode(mesPartProdGroup.getCustCode()); //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //发送工单信息给WMS - if(!Objects.isNull(bomList)){ - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList)); - } + // 创建工单打印队列 + insertPrintQueue(item); } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } + + // 打散bom + List workOrderPartList = new ArrayList<>(); + if (mesPartProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && !Objects.isNull(mesProductVersion)) { + workOrderPartList = dismantleBom(findBomList(item.getOrganizeCode(), iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode()),mesProductVersion.getAlternativePartList()), item.getQty(), item.getOrganizeCode(), item.getWorkCellCode(), item.getWorkOrderNo()); + } + return workOrderPartList; + } + + private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder) { + + if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) return null; + + if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) return null; + + MesPrintQueue printQueue = new MesPrintQueue(); + BeanUtils.copyProperties(workOrder, printQueue, MesExtConstWords.ID); + printQueue.setPrintQueueType(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()); + printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + return printQueueRepository.save(printQueue); } private MesPartProdGroup getMesPartProdGroup(MesWorkOrder item) { MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail(); mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode()); - mesPartProdGroupDetail.setPartNo(item.getPartNo()); + mesPartProdGroupDetail.setProductPartNo(item.getPartNo()); mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode()); List mesPartProdGroupList = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail); if (CollectionUtils.isEmpty(mesPartProdGroupList)) { MesException.throwMesBusiException("生产线代码【%s】零件号【%s】对应的零件生产组信息没有维护", item.getWorkCenterCode(), item.getPartNo()); } - MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.iterator().next(); - return mesPartProdGroup; + return mesPartProdGroupList.iterator().next(); } private void getCustomerPart(MesWorkOrder item) { @@ -445,33 +548,6 @@ public class MesWorkOrderService extends BaseMesService implements } } - private MesProductVersion checkMesProductVersion(MesWorkOrder item) { - DdlPackBean ddlPackBean; - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(item.getProductVersion(), "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getProductVersion()); - } - return mesProductVersion; - } - - private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) { - DdlPackBean ddlPackBean; - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); - ddlPackBean.setOrderByStr(" order by createDatetime desc "); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { - MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(), - mesWorkCenter.getErpWorkCenter()); - } - return mesProductVersion; - } - private void packPlanTime(MesWorkOrder item, Map> mesShiftMap) { ValidatorBean.checkNotNull(item.getPlanDate(), "计划日期不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); @@ -504,6 +580,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("时间格式异常"); } item.setProduceTime(item.getPlanDate()); + item.setProductTime(item.getProduceTime()); } @Override @@ -520,7 +597,7 @@ public class MesWorkOrderService extends BaseMesService implements public void saveMesWorkOrderExcel(List mesWorkOrderList) { MesWorkOrder next = mesWorkOrderList.iterator().next(); //属性校验&字段填充 - List mesWorkOrderToWmsList = checkData(mesWorkOrderList, next.getOrganizeCode()); + checkData(mesWorkOrderList, next.getOrganizeCode()); //BTO序号 List seqList = new ArrayList<>(); if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == next.getWorkOrderType()) { @@ -534,34 +611,38 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(item.getWorkOrderStatus(), "workOrderStatus", orderPackBean); DdlPreparedPack.getStringEqualPack(item.getOrderFlag(), "orderFlag", orderPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"produceSeq"}, orderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); MesWorkOrder result = baseRDao.getByProperty(orderPackBean); //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - produceSeq = (long) Math.toIntExact(result.getProduceSeq()); + Long productSeq = 0L; + if (null != result && result.getProductSeq() != null) { + productSeq = (long) Math.toIntExact(result.getProductSeq()); } MesWorkOrder copyMesWorkOrder = new MesWorkOrder(); BeanUtils.copyProperties(item, copyMesWorkOrder); - copyMesWorkOrder.setProduceSeq((long) (produceSeq + 1)); + copyMesWorkOrder.setProductSeq(productSeq + 1); copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); ConvertBean.serviceModelInitialize(copyMesWorkOrder, item.getCreateUser()); index++; baseRDao.insert(copyMesWorkOrder); //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(item, workOrderLog, "id"); + BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); + + // 如果工单为发布状态则新增打印队列 + insertPrintQueue(copyMesWorkOrder); + continue; } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { - Long produceSeq = 0L; - if (null != result && result.getProduceSeq() != null) { - //produceSeq = (long) Math.toIntExact(result.getProduceSeq()); - produceSeq = result.getProduceSeq(); + Long productSeq = 0L; + if (null != result && result.getProductSeq() != null) { + //productSeq = (long) Math.toIntExact(result.getProductSeq()); + productSeq = result.getProductSeq(); } - item.setProduceSeq(produceSeq + 1); + item.setProductSeq(productSeq + 1); item.setWorkOrderSeq(seqList.get(index)); } item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); @@ -570,20 +651,16 @@ public class MesWorkOrderService extends BaseMesService implements index++; //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(item, workOrderLog, "id"); + BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); } - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(mesWorkOrderToWmsList)) { - mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList); - } //保存工单记录 if (CollectionUtils.isNotEmpty(mesWorkOrderLogList)) { workOrderLogService.insertBatch(mesWorkOrderLogList); } } - private List checkData(List mesWorkOrderList, String organizeCode) { + private void checkData(List mesWorkOrderList, String organizeCode) { MesWorkOrder next = mesWorkOrderList.iterator().next(); String nowDate = TimeTool.getNowTime(true); //获取产线信息 @@ -605,7 +682,6 @@ public class MesWorkOrderService extends BaseMesService implements try { mesCustomerPartMap = BeanMapUtilsExt.getBeanMap(mesCustomerPartRDao, "erpPartNo", organizeCode, partNoList, "客户物料信息"); } catch (Exception e) { - mesCustomerPartMap = null; } //获取物料信息 Map mesPartSapMap = BeanMapUtilsExt.getBeanMap(mesPartSapRDao, "partNo", organizeCode, partNoList, "物料信息"); @@ -641,15 +717,10 @@ public class MesWorkOrderService extends BaseMesService implements if (baseRDao.isExitByHql(orderPackBean)) { MesException.throwMesBusiException("单号已存在"); } - - //BOM信息 - Map> mesBomMap = new HashMap<>(); //vin号 Map vinCodeMap = new HashMap<>(); //零件生产组 Map mesPartProdGroupMap = new HashMap<>(); - //发送wms数据 - List mesWorkOrderToWmsList = new ArrayList<>(); int index = 0; for (MesWorkOrder item : mesWorkOrderList) { item.setWorkOrderNo(orderList.get(index)); @@ -685,6 +756,7 @@ public class MesWorkOrderService extends BaseMesService implements //生产时间新增取当天 if (StringUtil.isEmpty(item.getProduceTime())) { item.setProduceTime(TimeTool.getToday()); + item.setProductTime(item.getProduceTime()); } //若工单类型为排序 if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { @@ -718,8 +790,8 @@ public class MesWorkOrderService extends BaseMesService implements } //排序工单数量为1 item.setQty(1d); - //发送wms数据 - sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); + //自动发布 + autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter); } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); @@ -739,11 +811,22 @@ public class MesWorkOrderService extends BaseMesService implements , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); } + //根据产线代码获取生产组信息 + MesPartProdGroup mesPartProdGroup = null; + if (mesPartProdGroupMap.containsKey(mesWorkCenter.getWorkCenterCode())) { + mesPartProdGroup = mesPartProdGroupMap.get(mesWorkCenter.getWorkCenterCode()); + } else { + mesPartProdGroup = getMesPartProdGroup(mesWorkCenter.getOrganizeCode(), mesWorkCenter.getWorkCenterCode()); + mesPartProdGroupMap.put(mesWorkCenter.getWorkCenterCode(), mesPartProdGroup); + } + if (!Objects.isNull(mesPartProdGroup)) { + item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + } //拼接时间 packPlanTime(item, mesShiftMap); //状态已发布 item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - List mesBomList = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); //校验物料生产版本是否存在 @@ -757,16 +840,6 @@ public class MesWorkOrderService extends BaseMesService implements } MesProductVersion mesProductVersion = versionList.iterator().next(); item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) { - mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList()); - } else { - //获取bom信息 - mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList); - } - //发送工单信息给WMS - mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList)); } } else { ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空"); @@ -774,19 +847,17 @@ public class MesWorkOrderService extends BaseMesService implements if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { MesException.throwMesBusiException("生产数量不能小于等于0"); } - //发送wms数据 - sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); + //自动发布 + autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter); } item.setUnCompleteQty(item.getQty()); item.setFid(UUID.randomUUID().toString()); index++; } - return mesWorkOrderToWmsList; } - private void sendToWms(Map> mesProductVersionMap, Map> mesBomMap, Map mesPartProdGroupMap, List mesWorkOrderToWmsList, MesWorkOrder item, MesWorkCenter mesWorkCenter) { + private void autoPublish(Map> mesProductVersionMap, Map mesPartProdGroupMap, MesWorkOrder item, MesWorkCenter mesWorkCenter) { //发送工单信息给WMS - List mesBomList = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ //获取生产版本 List mesProductVersions = mesProductVersionMap.get(item.getPartNo()); @@ -796,19 +867,12 @@ public class MesWorkOrderService extends BaseMesService implements } MesProductVersion mesProductVersion = mesProductVersions.iterator().next(); item.setProductVersion(mesProductVersion.getProductVersion()); - if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) { - mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList()); - } else { - //获取bom信息 - mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList); - } } //是否自动发布 - isAuto(mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesBomList); + isAuto(mesPartProdGroupMap, item); } - private void isAuto(Map mesPartProdGroupMap, List mesWorkOrderToWmsList, MesWorkOrder item, List mesBomList) { + private void isAuto(Map mesPartProdGroupMap, MesWorkOrder item) { //校验零件生产组信息 MesPartProdGroup mesPartProdGroup; if (mesPartProdGroupMap.containsKey(item.getWorkCenterCode() + item.getPartNo())) { @@ -822,10 +886,6 @@ public class MesWorkOrderService extends BaseMesService implements //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //发送工单信息给WMS - if(!Objects.isNull(mesBomList)){ - mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList)); - } } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } @@ -845,17 +905,14 @@ public class MesWorkOrderService extends BaseMesService implements @Override public void doProductReport(MesWorkOrder mesWorkOrder) { - MesWorkOrder mesWorkOrderDb = baseRDao.getById(mesWorkOrder.getId()); + MesWorkOrder mesWorkOrderDb = getMesWorkOrder(mesWorkOrder.getWorkOrderNo(),mesWorkOrder.getOrganizeCode()); mesWorkOrderDb.setDescription(mesWorkOrder.getDescription()); - if (Objects.isNull(mesWorkOrderDb)) { - MesException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId()); - } //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode()); //查询产线信息 MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode()); //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //报工类型 @@ -897,7 +954,7 @@ public class MesWorkOrderService extends BaseMesService implements updateMesWorkOrder(mesWorkOrderDb,(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) ? MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT : MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum()); //试制单不报工 if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ - String sn = getStringList(mesWorkOrder); + String sn = getStringList(mesWorkOrder.getOrganizeCode()); //保存数据 List mesProductOffLineList = new ArrayList<>(); String nowTime = StringUtil.isEmpty(mesWorkOrder.getDescription())?TimeTool.getNowTime(true):mesWorkOrder.getDescription(); @@ -911,10 +968,7 @@ public class MesWorkOrderService extends BaseMesService implements @Override public void doProductReportExt(MesWorkOrder mesWorkOrderNew) { - MesWorkOrder mesWorkOrder = baseRDao.getById(mesWorkOrderNew.getId()); - if (Objects.isNull(mesWorkOrder)) { - MesException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrderNew.getId()); - } + MesWorkOrder mesWorkOrder = getMesWorkOrder(mesWorkOrderNew.getWorkOrderNo(),mesWorkOrderNew.getOrganizeCode()); //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); if (mesWorkOrderNew.getNum() <= 0) { @@ -944,7 +998,8 @@ public class MesWorkOrderService extends BaseMesService implements } else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrder.getQty())) { mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else { - mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + mesWorkOrder.setWorkOrderStatus(mesWorkOrder.getWorkOrderStatus()==MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()? + MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue():MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); } mesWorkOrder.setCompleteQty(mesWorkOrder.getReportedQty()); } else { @@ -957,16 +1012,17 @@ public class MesWorkOrderService extends BaseMesService implements } } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //生成条码 - String sn = getStringList(mesWorkOrderNew); + String sn = getStringList(mesWorkOrderNew.getOrganizeCode()); //保存数据 List mesProductOffLineList = new ArrayList<>(); List mesMoveList = new ArrayList<>(); boolean isReport = false; boolean isMove = false; + String nowTime = TimeTool.getNowTime(true); //排序工单 if (MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()) { //报工类型 @@ -983,7 +1039,7 @@ public class MesWorkOrderService extends BaseMesService implements isReport = true; isMove = true; } else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) { - customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList); + customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,true); } else { log.info("工单{}排序加工规则报工类型未维护", mesWorkOrder.getWorkOrderNo()); return; @@ -994,7 +1050,6 @@ public class MesWorkOrderService extends BaseMesService implements MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); //成品汇报 if (isReport) { - String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size())); } @@ -1009,11 +1064,11 @@ public class MesWorkOrderService extends BaseMesService implements } else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) { MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == mesProdRuleNoSortCfg.getReportType()) { - String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size())); } - + }else if(MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleNoSortCfg.getReportType()) { + customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,false); } } else { log.info("工单{}排序规则不属于排序工单和非排序工单", mesWorkOrder.getWorkOrderNo()); @@ -1025,7 +1080,11 @@ public class MesWorkOrderService extends BaseMesService implements //保存报工记录 试制单不报工 if (CollectionUtils.isNotEmpty(mesProductOffLineList) && (Objects.isNull(mesWorkOrder.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag()))) { - mesProductOffLineList.forEach(t->t.setBomTotalSize(mesProductOffLineList.size())); + mesProductOffLineList.forEach(t->{ + if(Objects.isNull(t.getBomTotalSize())){ + t.setBomTotalSize(mesProductOffLineList.size()); + } + }); mesProductOffLineService.insertBatch(mesProductOffLineList); } //保存移库记录 @@ -1039,6 +1098,10 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(), "workOrderType", ddlPackBean); DdlPreparedPack.getStringSmallerNotEqualPack(TimeTool.getToday(), "planStartTime", ddlPackBean); + //非排序的试制工单(P单)不自动关单(芜湖) + if (mesConfigService.checkCfgValue(organizeCode, MesExtConstWords.CLOSE_P_WORK_ORDER, MesExtConstWords.ONE_STR)) { + DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue(), "orderFlag", ddlPackBean); + } DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue(), "workOrderStatus", ddlPackBean); List mesWorkOrderList = baseRDao.findByHqlWhere(ddlPackBean); if(CollectionUtils.isEmpty(mesWorkOrderList)){ @@ -1068,19 +1131,27 @@ public class MesWorkOrderService extends BaseMesService implements @Override public void doReportWorkReversal(WmsProductModel model) { + log.info("WMS发运调用MES接口CRB负报工请求数据:{}", JSONObject.toJSONString(model)); //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(model.getPartNo(), model.getOrganizeCode()); - //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(model); - //获取bom - List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //保存数据 List mesProductOffLineList = new ArrayList<>(); String nowTime = TimeTool.getNowTime(true); - for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom,nowTime,mesBoms.size())); + if (StringUtil.isEmpty(model.getSn())) { + //获取生产版本 + MesProductVersion mesProductVersion = getMesProductVersion(model.getOrganizeCode(),model.getPartNo()); + //获取bom + List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); + //生成流水码 + model.setSn(getStringList(model.getOrganizeCode())); + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom,nowTime,mesBoms.size())); + } + } else { + //按照条码查询之前报工数据 + mesProductOffLineList.addAll(getMesProductOffLineList(model, nowTime)); } - mesProductOffLineService.insertBatch(mesProductOffLineList); + mesProductOffLineRDao.saveAll(mesProductOffLineList); } @Override @@ -1107,9 +1178,203 @@ public class MesWorkOrderService extends BaseMesService implements mesCcscTaskService.insertMesCcscTask(organizeCode,mesWorkOrderList); } + @Override + public void doSaveWorkOrderPrintQueue(MesWorkOrder workOrder) { + if (workOrder == null) return; + + if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { + log.info("doSaveWorkOrderPrintQueue --- 工单:{} 为非排序,无需新增打印队列", workOrder.getWorkOrderNo()); + return; + } + + if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + log.info("doSaveWorkOrderPrintQueue --- 工单:{} 不为{},无需新增打印队列", workOrder.getWorkOrderNo(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getDescription()); + return; + } + + insertPrintQueue(workOrder); + + } + + @Override + public List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName) { + + // 根据id 获取工单数据 + List mesWorkOrderList = getMesWorkOrderList(ids, organizeCode); + + return packPrintResultMap(organizeCode, mesWorkOrderList, userName,false); + + } + + private List> packPrintResultMap(String organizeCode, List mesWorkOrderList, String userName,Boolean isShow) { + // 根据工单号对工单分组 + Map workOrderMapByWorkOrderNo = mesWorkOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); + + // 产线代码集合 + List workCenterCodeList = mesWorkOrderList.stream().map(MesWorkOrder::getWorkCenterCode).distinct().collect(Collectors.toList()); + + // 根据产线代码节后获取产线信息集合 + List mesWorkCenters = workCenterService.queryMesWorkCenterList(workCenterCodeList, organizeCode); + + // 产线名称集合 + Map workCenterNameMap = CollectionUtils.isEmpty(mesWorkCenters) ? null : mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); + + // 生产零件号 + List partProdGroupCodeList = mesWorkOrderList.stream().map(MesWorkOrder::getPartProdGroupCode).distinct().collect(Collectors.toList()); + + // 根据零件生产组代码分组 + Map partProdGroupMap = partProdGroupService.getMesPartProdGroupMap(organizeCode, partProdGroupCodeList); + + // 客户车型配置名称MAP + Map carModelMapByCode = getMesCustomerCarModelMap(organizeCode, mesWorkOrderList); + + // 工单装配件 + Map> workOrderAssemblyMapByWorkOrderNo = getWorkOrderAssemblyMapByWorkOrderNo(organizeCode, workOrderMapByWorkOrderNo); + + // 返回结果 + List> resultMapList = new ArrayList<>(); + + // 条码打印 + List printedSnLogList = new ArrayList<>(); + + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { + + if (mesWorkOrder == null) { + log.info("doReprintWorkOrder --- 工单为空 暂不输出打印"); + continue; + } + + mesWorkOrder.setWorkCenterName(!Objects.isNull(workCenterNameMap) && workCenterNameMap.containsKey(mesWorkOrder.getWorkCenterCode()) ? workCenterNameMap.get(mesWorkOrder.getWorkCenterCode()) : ""); + + MesPartProdGroup mesPartProdGroup = !Objects.isNull(partProdGroupMap) && partProdGroupMap.containsKey(mesWorkOrder.getPartProdGroupCode()) ? partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()) : null; + + if (mesPartProdGroup == null) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】不存在", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); + } + + String printTemplate = mesPartProdGroup.getPrintTemplate(); + + if (StringUtils.isEmpty(printTemplate)) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); + } + + MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(isShow ? printTemplate + "_SHOW" : printTemplate, organizeCode); + //模板信息丢失抛出异常 + if (Objects.isNull(labelTemplate) || StringUtils.isEmpty(labelTemplate.getMethodCode())) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode()); + } + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + Map modelMap = new HashMap<>(); + modelMap.put("mesWorkOrder", mesWorkOrder); + modelMap.put("mesPartProdGroup", mesPartProdGroup); + + MesCustomerCarModel customerCarModel = !Objects.isNull(carModelMapByCode) && carModelMapByCode.containsKey(mesWorkOrder.getCarModelCode()) ? carModelMapByCode.get(mesWorkOrder.getCarModelCode()) : null; + if (customerCarModel != null) { + modelMap.put("mesCustomerCarModel", customerCarModel); + } + List workOrderAssemblyListByWorkOrderNo = !Objects.isNull(workOrderAssemblyMapByWorkOrderNo) && workOrderAssemblyMapByWorkOrderNo.containsKey(mesWorkOrder.getWorkOrderNo()) ? workOrderAssemblyMapByWorkOrderNo.get(mesWorkOrder.getWorkOrderNo()) : null; + + if (!CollectionUtils.isEmpty(workOrderAssemblyListByWorkOrderNo)) { + modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyListByWorkOrderNo); + } + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setSourceData(modelMap); + mesProduceSnPrintModel.setPrinter(mesPartProdGroup.getPrinter()); + + MesProduceSnPrintModel snPrintModel = null; + try { + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null); + } catch (BeansException e) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】策略类【%s】执行异常", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()); + } + + MesPrintedSnLog printedSnLog = new MesPrintedSnLog(); + printedSnLog.setOrganizeCode(mesWorkOrder.getOrganizeCode()); + printedSnLog.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + printedSnLog.setCustPartNo(mesWorkOrder.getCustPartNo()); + ConvertBean.serviceModelInitialize(printedSnLog, userName); + printedSnLogList.add(printedSnLog); + + resultMapList.addAll(snPrintModel.getPrintContextList()); + + } + + if (!CollectionUtils.isEmpty(printedSnLogList)) printedSnLogRepository.saveAll(printedSnLogList); + + return resultMapList; + } + + @Override + public List> doShowWorkOrderPrint(String partNo, String workCenterCode, String partProdGroupCode, + String carModelCode, String organizeCode, String userName) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, packBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(partProdGroupCode, MesExtConstWords.PART_PROD_GROUP_CODE, packBean); + DdlPreparedPack.getStringEqualPack(carModelCode, MesExtConstWords.CAR_MODEL_CODE, packBean); + packBean.setOrderByStr(" order by createDatetime desc "); + MesWorkOrder workOrder = workOrderRepository.getByProperty(packBean); + if (Objects.isNull(workOrder)) { + MesException.throwMesBusiException("零件【%s】产线【%s】生产组【%s】车型【%s】的工单不存在", partNo, workCenterCode, partProdGroupCode, carModelCode); + } + + List workOrderList = new ArrayList<>(); + workOrderList.add(workOrder); + + return packPrintResultMap(organizeCode, workOrderList, userName,true); + } + + private Map getMesCustomerCarModelMap(String organizeCode, List workOrderList) { + List carModelCodeList = workOrderList.stream().map(MesWorkOrder::getCarModelCode).distinct().collect(Collectors.toList()); + // 客户车型配置 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(carModelCodeList, MesExtConstWords.CAR_MODEL_CODE, packBean); + List customerCarModelList = customerCarModelRepository.findByHqlWhere(packBean); + + return CollectionUtils.isEmpty(customerCarModelList) ? null : customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); + } + + private Map> getWorkOrderAssemblyMapByWorkOrderNo(String organizeCode, Map workOrderMapByWorkOrderNo) { + List workOrderNoList = workOrderMapByWorkOrderNo.keySet().stream().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + List workOrderAssemblyList = workOrderAssemblyRepository.findByHqlWhere(packBean); + return CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); + } + + private List getMesProductOffLineList(WmsProductModel model, String nowTime) { + //查询报工数据 + List oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByProductSn(model.getSn(), model.getOrganizeCode()); + if (CollectionUtils.isEmpty(oldProductOffLineList)) { + MesException.throwMesBusiException("条码【%s】未查询到报工数据", model.getSn()); + } + //oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByRecordId(oldProductOffLineList.iterator().next().getProductionRecordId(), model.getOrganizeCode()); + List newProductOffLineList = new ArrayList<>(oldProductOffLineList.size()); + oldProductOffLineList.forEach(item -> { + MesProductOffLine mesProductOffLine = new MesProductOffLine(); + BeanUtils.copyProperties(item, mesProductOffLine, MesExtConstWords.ID); + mesProductOffLine.setReportType(MesExtEnumUtil.REPORT_TYPE.CBR.getValue()); + mesProductOffLine.setOrderNo(model.getShipOrderNo()); + mesProductOffLine.setCustNo(model.getCustNo()); + mesProductOffLine.setCustOrder(model.getCustOrderNo()); + mesProductOffLine.setDescription(nowTime); + mesProductOffLine.setStgeLoc(item.getAlort()); + mesProductOffLine.setSystemSyncStatus(CommonEnumUtil.FALSE); + mesProductOffLine.setSystemSyncDatetime(""); + ConvertBean.serviceModelInitialize(mesProductOffLine, model.getUserName()); + newProductOffLineList.add(mesProductOffLine); + }); + return newProductOffLineList; + } + private List getMesWorkOrderList(Long[] ids, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackArray(ids,"id",packBean); + DdlPreparedPack.getInPackArray(ids,MesExtConstWords.ID,packBean); List mesWorkOrderList = baseRDao.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(mesWorkOrderList)) { MesException.throwMesBusiException("选择工单信息不存在"); @@ -1117,6 +1382,16 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderList; } + public MesWorkOrder getMesWorkOrder(String workOrderNo, String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + MesWorkOrder mesWorkOrder = baseRDao.getByProperty(packBean); + if (Objects.isNull(mesWorkOrder)) { + MesException.throwMesBusiException("工单【%s】信息不存在", workOrderNo); + } + return mesWorkOrder; + } + private void updateMesWorkOrder(MesWorkOrder mesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE type,double qty) { //修改工单,需要重新同步 mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); @@ -1137,7 +1412,7 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); - newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getReceiveInventoryPoint()); newMesProductOffLine.setQty(model.getQty()); newMesProductOffLine.setBomVersion(mesProductVersion.getProductVersion()); newMesProductOffLine.setSerialNumber(model.getSn()); @@ -1155,21 +1430,11 @@ public class MesWorkOrderService extends BaseMesService implements return newMesProductOffLine; } - private MesProductVersion getMesProductVersion(WmsProductModel model) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getOrderBy(null, null, ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本信息不存在", model.getPartNo()); - } - return mesProductVersion; - } - - private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List mesBoms, String sn, List mesProductOffLineList, List mesMoveList) { + private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List mesBoms, String sn, List mesProductOffLineList, List mesMoveList,String nowTime,boolean isSort) { boolean isItemMove; boolean isItemReport; MesMoveRule moveRule; + MesPart itemPart; //查询零件生产组的移库规则 List moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode()); Map> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType)); @@ -1182,8 +1447,9 @@ public class MesWorkOrderService extends BaseMesService implements isItemReport = false; isItemMove = false; moveRule = null; + itemPart = null; if (itemPartMap.containsKey(mesBom.getItemPartNo())) { - MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); + itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next(); if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) { moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next(); if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) { @@ -1197,9 +1463,24 @@ public class MesWorkOrderService extends BaseMesService implements } } //汇报 - if (isItemReport) { - String nowTime = TimeTool.getNowTime(true); - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true,nowTime,mesBoms.size())); + if (isItemReport && isSort) { + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, null)); + } else if (isItemReport) { + String reportSn = String.valueOf(snowflakeIdMaker.nextId()); + MesProductVersion itemVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion()); + List bomList = null; + try { + bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); + } catch (Exception e) { + } + //bom下的子节汇报 + if (!CollectionUtils.isEmpty(bomList)) { + for (MesBom bom : bomList) { + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true,bomList.size(), nowTime)); + } + } else { + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true,MesExtConstWords.ONE, nowTime)); + } } //移库 if (isItemMove) { @@ -1212,18 +1493,23 @@ public class MesWorkOrderService extends BaseMesService implements mesMoveList.add(move); } } + + //bom下的子节汇报,总成也需要汇报 + if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) { + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false,mesBoms.size(), nowTime)); + } + } } private Map> getPartSapMap(MesWorkOrder mesWorkOrder, List itemPartNoList) { List mesPartSapList = mesPartSapService.findMesPartSapByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode()); - Map> mesPartSapMap = mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo)); - return mesPartSapMap; + return mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo)); } private Map> getItemPartMap(MesWorkOrder mesWorkOrder, List itemPartNoList) { List itemPartList = iMesPartService.findMesPartByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode()); - Map> itemPartMap = itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo)); - return itemPartMap; + return itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo)); } private MesProdRuleSortCfg getMesProdRuleSortCfg(MesWorkOrder mesWorkOrder) { @@ -1237,30 +1523,52 @@ public class MesWorkOrderService extends BaseMesService implements return mesProdRuleSortCfg; } - private String getStringList(MesWorkOrder mesWorkOrder) { - GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(mesWorkOrder.getOrganizeCode()), mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), 1).getResultList(); + private String getStringList(String organizeCode) { + List resultList = syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).organizeCode(organizeCode), AuthUtilExt.getUserName(), organizeCode, 1).getResultList(); return resultList.iterator().next(); } - - private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(mesWorkOrder.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", mesWorkOrder.getPartNo(),mesWorkOrder.getProductVersion()); + private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, + String sn, MesBom mesBom,Double itemQty, boolean isItemReport,Integer bomSize,String nowTime) { + MesProductOffLine newMesProductOffLine = new MesProductOffLine(); + BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); + newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName()); + newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setQty(MathOperation.mul(mesWorkOrder.getNum(),itemQty)); + newMesProductOffLine.setItemQty(MathOperation.mul(newMesProductOffLine.getQty(), mesBom.getItemQty())); + if (isItemReport && mesBom.getPartNo().equals(mesWorkOrder.getPartNo())) { + newMesProductOffLine.setReportPartNo(mesBom.getItemPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesBom.getItemPartName()); + newMesProductOffLine.setItemPartNo(""); + newMesProductOffLine.setItemPartName(""); + newMesProductOffLine.setItemUnit(""); + newMesProductOffLine.setItemQty(0d); } - return mesProductVersion; + newMesProductOffLine.setReportSn(sn); + newMesProductOffLine.setSerialNumber(sn); + newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion()); + newMesProductOffLine.setUnit(mesBom.getUnit()); + newMesProductOffLine.setBomCode(mesBom.getBomCode()); + newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType()); + newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode()); + newMesProductOffLine.setReportType(mesWorkOrder.getReportType()); + newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); + newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); + newMesProductOffLine.setDescription(nowTime); + newMesProductOffLine.setBomTotalSize(bomSize); + newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString()); + ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser()); + return newMesProductOffLine; } private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, String sn, MesBom mesBom, boolean isItemReport,String nowTime,Integer bomTotalSize) { - MesProductOffLine newMesProductOffLine; - newMesProductOffLine = new MesProductOffLine(); + MesProductOffLine newMesProductOffLine = new MesProductOffLine(); if (!isItemReport) { newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName()); @@ -1319,16 +1627,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(statusList, "workOrderStatus", packBean); - return mesWorkOrderRDao.findByHqlWhere(packBean); - } - - @Override - public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) { -// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - - DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); - return mesWorkOrderRDao.getByProperty(packBean); + return baseRDao.findByHqlWhere(packBean); } private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) { @@ -1412,13 +1711,14 @@ public class MesWorkOrderService extends BaseMesService implements String orderNo = orderList.get(0); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); - if (mesWorkOrderRDao.isExitByHql(orderPackBean)) { + if (baseRDao.isExitByHql(orderPackBean)) { MesException.throwMesBusiException("单号流水码生成重复"); } item.setWorkOrderNo(orderNo); item.setPartName(mesProductionRecord.getPartName()); //生产时间新增取当天 item.setProduceTime(TimeTool.getToday()); + item.setProductTime(item.getProduceTime()); item.setUnCompleteQty(0d); item.setQty(value.stream().mapToDouble(MesProductionRecord::getQty).sum()); item.setReportedQty(item.getQty()); @@ -1427,7 +1727,6 @@ public class MesWorkOrderService extends BaseMesService implements //校验标识 //若工单类型为排序 - List saveMesWorkOrderToWms = new ArrayList<>(); if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { //校验产线类型和工单类型是否匹配 if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { @@ -1436,23 +1735,15 @@ public class MesWorkOrderService extends BaseMesService implements } //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(item); + MesProductVersion mesProductVersion = getMesProductVersion(item.getOrganizeCode(), item.getPartNo(), item.getProductVersion()); item.setProductVersion(mesProductVersion.getProductVersion()); - //获取bom信息 - List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList)); } item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); item.setFid(UUID.randomUUID().toString()); ConvertBean.serviceModelInitialize(item, userName); MesWorkOrder mesWorkOrder = workOrderRepository.insert(item); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - mesWorkOrderToWmsRDao.saveAll(saveMesWorkOrderToWms); - } + saveMesWorkOrderLog(mesWorkOrder); mesWorkOrderList.add(mesWorkOrder); } @@ -1460,22 +1751,146 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderList; } + private void insertSortWorkOrderNo(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空"); + ValidatorBean.checkNotNull(bean.getCustPartNo(), "客户物料号不能为空"); + + //校验产线类型和工单类型是否匹配 + if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) { + MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择排序产线", mesWorkCenter.getWorkCenterCode(), + MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); + } + //若工单类型为排序 标识为 N E P S + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识", + bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() + , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); + } + //校验VIN号是否重复 + if (!StringUtil.isEmpty(bean.getVinCode())) { + //校验vin号是否重复 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getVinCode(), "vinCode", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("vin号【%s】重复", bean.getVinCode()); + } + } + + //排序工单数量为1 + bean.setQty(1d); + //生成工单号 + bean.setWorkOrderNo(getOrderNo(bean)); + //自动发布 + List orderPartList = autoPublish(bean); + //顺序号 + bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); + //生成客户条码 + bean.setCustSn(getCustSn(bean.getCustPartNo(), bean.getOrganizeCode(), bean.getCreateUser())); + //生成工单零件 工单装配件 + insertMesWorkOrder(bean, orderPartList); + + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + bean.setPullingStatus(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.NOTCREATE.getValue()); + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } + + private void insertUnSortWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空"); + if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { + MesException.throwMesBusiException("生产数量不能小于等于0"); + } + //校验产线类型和工单类型是否匹配 + if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { + MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择非排序产线", mesWorkCenter.getWorkCenterCode(), + MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); + } + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识", + bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() + , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); + } + //根据产线代码获取生产组信息 + MesPartProdGroup mesPartProdGroup = getMesPartProdGroup(mesWorkCenter.getOrganizeCode(),mesWorkCenter.getWorkCenterCode()); + if(!Objects.isNull(mesPartProdGroup)){ + bean.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + bean.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + } + bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + //非试制单 + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空"); + //校验物料生产版本是否存在 + MesProductVersion mesProductVersion = getMesProductVersion(bean.getOrganizeCode(), bean.getPartNo(), bean.getProductVersion()); + bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); + } + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + bean.setWorkOrderNo(getOrderNo(bean)); + + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } - public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { - List mesWorkOrderToWmsList = new ArrayList<>(); - MesWorkOrderToWms mesWorkOrderToWms = null; - for (MesBom mesBom : mesBomList) { - mesWorkOrderToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); - mesWorkOrderToWms.setUnit(mesBom.getUnit()); - mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); - mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); - mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit()); - mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty())); - ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser()); - mesWorkOrderToWmsList.add(mesWorkOrderToWms); + private void insertBtoWorkOrder(MesWorkOrder bean) { + ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空"); + ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空"); + if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { + MesException.throwMesBusiException("生产数量不能小于等于0"); } - return mesWorkOrderToWmsList; + //顺序号 + bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); + //生成工单号 + bean.setWorkOrderNo(getOrderNo(bean)); + //自动发布 + autoPublish(bean); + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + //生成WorkOrderSeq + GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); + List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); + bean.setWorkOrderSeq(resultList.get(0)); + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); } public void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) { @@ -1496,7 +1911,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode()); } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); @@ -1541,19 +1956,79 @@ public class MesWorkOrderService extends BaseMesService implements } mesProductOffLineRDao.saveAll(mesProductOffLineList); } - private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) { - //修改工单,需要重新同步 - mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelUpdate(mesWorkOrder, userName); - workOrderRepository.update(mesWorkOrder); - //保存记录 - saveMesWorkOrderLog(mesWorkOrder); + + @Override + public void doSendMesWorkOrderToWms(String organizeCode, Integer pageSize, String userName) { + List mesWorkOrderListToWms = getMesWorkOrderListToWms(organizeCode, pageSize); + if (CollectionUtils.isEmpty(mesWorkOrderListToWms)) { + log.info("工厂:{}不存在未推送的工单", organizeCode); + } + //获取物料信息 + Map partMap = BeanMapUtilsExt.getBeanMap(mesPartRDao, "partNo", organizeCode, mesWorkOrderListToWms.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()), "物料信息"); + // 根据零件加生产版本分组 + Map> mesWorkOrderListToWmsMap = mesWorkOrderListToWms.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getPartNo()).add(t.getProductVersion()).toString())); + + List mesWorkOrderToWmsList = new ArrayList<>(); + List workOrderNoList = new ArrayList<>(); + for (Map.Entry> workOrderMap : mesWorkOrderListToWmsMap.entrySet()) { + List bomExpendList = null; + List bomList = null; + MesProductVersion productVersion = null; + try { + productVersion = getMesProductVersion(organizeCode, workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], workOrderMap.getKey().split(MesExtConstWords.COMMA)[1]); + bomList = findMesBomByPartNoAndBomVersion(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], organizeCode, productVersion.getAlternativePartList()); + } catch (ImppBusiException e) { + log.info("工厂:{} 信息{}",organizeCode,e.getErrorDetail()); + continue; + } + //数据处理 + for (MesWorkOrder workOrder : workOrderMap.getValue()) { + mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomList, userName, false)); + workOrderNoList.add(workOrder.getWorkOrderNo()); + //BOT工单只拆一层 + try { + if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == workOrder.getWorkOrderType() && partMap.containsKey(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0])) { + bomExpendList = Objects.isNull(bomExpendList) ? findBomList(organizeCode, partMap.get(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]), productVersion.getAlternativePartList()) : bomExpendList; + mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomExpendList, userName, true)); + }else { + log.info("工厂:{}BTO工单:{}物料:{}信息不存在", organizeCode, workOrder.getWorkOrderNo(), workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]); + } + } catch (ImppBusiException e) { + log.info("工单:{} BOT工单只拆一层异常:{}",workOrder.getWorkOrderNo(),e.getErrorDetail()); + } + } + } + //数据持久化 + mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList); + //更新工单状态为已同步 + updateMesWorkOrder(organizeCode, userName, workOrderNoList); + } + + private void updateMesWorkOrder(String organizeCode, String userName, List workOrderNoList) { + if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + } + baseRDao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "syncToWms"}, new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.VALID}, packBean); } + public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id"); + BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogRepository.insert(workOrderLog); } + + private List getMesWorkOrderListToWms(String organizeCode, Integer pageSize) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, "syncToWms", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBean); + return baseRDao.findByHqlTopWhere(packBean, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize); + } + public List findBomList(String organizeCode, MesPart mesPart, String bomVersion) { List bomData = new ArrayList<>(); // 递归展开 BOM @@ -1636,11 +2111,415 @@ public class MesWorkOrderService extends BaseMesService implements private boolean checkWorkCenterPartRelation(String workCenterCode,String partNo){ DdlPackBean partRelationPackBean = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode()); - //DdlPackBean partRelationPackBean = DdlPackBean.getDdlPackBean("CK01"); DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode", partRelationPackBean); DdlPreparedPack.getStringEqualPack(partNo, "partNo", partRelationPackBean); int count = partRelationRao.findByHqlWhereCount(partRelationPackBean); return count > 0; } + private String getCustSn(String partNo,String organizeCode,String userName){ + Calendar custCalendar = Calendar.getInstance(); + custCalendar.setTime(new Date()); + GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); + String prefix = partNo.substring(0, partNo.length() - 4); + String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); + custGenSerialNoModel.setPartNo(prefix+partNo4); + String year = custCalendar.get(Calendar.YEAR)+""; + custGenSerialNoModel.setYear(year.substring(2)); + custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR))); + List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, userName, organizeCode, 1).getResultList(); + // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + //截取替换为ascii码 + String snOriginal = custNumRuleList.get(0); + String[] split = snOriginal.split("%RS%"); + StringBuilder rsStr = new StringBuilder(); + for (int i = 0; i < split.length-1; i++) { + rsStr.append(split[i]).append((char) 30); + } + rsStr.append(split[split.length - 1]); + StringBuilder gsStr = new StringBuilder(); + String[] split1 = rsStr.toString().split("%GS%"); + for (int i = 0; i < split1.length-1; i++) { + gsStr.append(split1[i]).append((char) 29); + } + gsStr.append(split1[split1.length-1]); + String[] split2 = gsStr.toString().split("%EOT%"); + return split2[0]+(char)4; + } + + private List dismantleBom(List bomList, double qty,String organizeCode, String workCellCode, String workOrderNo) { + List orderPartList = new ArrayList<>(); + + //1.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + List partSapList = mesPartSapService.findMesPartSapByPartNoList(partNoList,organizeCode); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + //2.遍历bomList + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + MesException.throwMesBusiException("工厂【%s】零件号【%s】未查到零件信息", organizeCode, bom.getItemPartNo()); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkOrderNo(workOrderNo); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + return orderPartList; + } + + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); + DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) + .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) + .collect(Collectors.toList()); + return partPtrList; + } + + //根据排序信息PTR零件号 获取 ptr信息 + private List getCustPartPtrList(List ptrInfoList,String organizeCode){ + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); + return partPtrRao.findByHqlWhere(partPtrPackBean); + } + + private MesPartProdGroup getMesPartProdGroup(String organizeCode, String workCenterCode) { + if (StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(workCenterCode)) { + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean); + return mesPartProdGroupRDao.getByProperty(packBean); + } + + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, String organizeCode) { + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() !=null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum()!=null && sortCfg.getLogicNum() >0 )){ + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())){ + log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum()); + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (!StringUtils.isEmpty(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); + orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + orderAssembly.setPreCraftCode(sortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPackList(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + + private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) { + //查询数据 + List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn()); + MesPrintQueue printQueue = getMesPrintQuanOrder(workOrder.getOrganizeCode(), workOrder.getCustSn()); + //数据处理 + List newWrkOrderList = new ArrayList<>(); + List newOrderAssemblyList = new ArrayList<>(); + List newOrderPartList = new ArrayList<>(); + List newOrderLogList = new ArrayList<>(); + List newProduceSnList = new ArrayList<>(); + List newQueueOrderList = new ArrayList<>(); + List newPrintQueueList = new ArrayList<>(); + MesWorkOrderAssembly newOrderAssembly = null; + MesWorkOrderPart newOrderPart = null; + MesWorkOrderLog orderLog = null; + MesProduceSn newProduceSn = null; + MesQueueOrder newQueueOrder = null; + MesPrintQueue newPrintQueue = null; + for (int i = 1; i < generateQty; i++) { + //工单 + MesWorkOrder newWorkOrder = new MesWorkOrder(); + BeanUtils.copyProperties(workOrder, newWorkOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newWorkOrder.setWorkOrderNo(getOrderNo(newWorkOrder)); + newWorkOrder.setProductSeq(newWorkOrder.getProductSeq() + i); + newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(), workOrder.getCreateUser())); + newWorkOrder.setFid(UUID.randomUUID().toString()); + newWrkOrderList.add(newWorkOrder); + // + //工单装配件 + if (!CollectionUtils.isEmpty(orderAssemblyList)) { + for (MesWorkOrderAssembly assembly : orderAssemblyList) { + newOrderAssembly = new MesWorkOrderAssembly(); + BeanUtils.copyProperties(assembly, newOrderAssembly, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderAssembly.setProductSn(newWorkOrder.getWorkOrderNo()); + newOrderAssemblyList.add(newOrderAssembly); + } + } + //工单零件 + if (!CollectionUtils.isEmpty(orderPartList)) { + for (MesWorkOrderPart part : orderPartList) { + newOrderPart = new MesWorkOrderPart(); + BeanUtils.copyProperties(part, newOrderPart, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderPartList.add(newOrderPart); + } + } + //生产工单日志 + if (!CollectionUtils.isEmpty(orderLogList)) { + for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { + orderLog = new MesWorkOrderLog(); + BeanUtils.copyProperties(mesWorkOrderLog, orderLog, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + orderLog.setFid(UUID.randomUUID().toString()); + newOrderLogList.add(orderLog); + } + } + //生产队列主表 + if (!CollectionUtils.isEmpty(queueOrderList)) { + for (MesQueueOrder queueOrder : queueOrderList) { + newQueueOrder = new MesQueueOrder(); + BeanUtils.copyProperties(queueOrder, newQueueOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newQueueOrder.setCustSn(newWorkOrder.getCustSn()); + newQueueOrder.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setSerialNumber(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setProductSn(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setProductSeq(newWorkOrder.getProductSeq()); + newQueueOrderList.add(newQueueOrder); + } + } + //产品条码表 + if (!Objects.isNull(mesProduceSn)) { + newProduceSn = new MesProduceSn(); + BeanUtils.copyProperties(mesProduceSn, newProduceSn, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newProduceSn.setCustSn(newWorkOrder.getCustSn()); + newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo()); + newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo()); + newProduceSn.setFid(UUID.randomUUID().toString()); + newProduceSnList.add(newProduceSn); + } + //装配目视单打印 + if (!Objects.isNull(printQueue)) { + newPrintQueue = new MesPrintQueue(); + BeanUtils.copyProperties(printQueue, newPrintQueue, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newPrintQueue.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newPrintQueueList.add(newPrintQueue); + } + } + //数据持久化 + baseRDao.saveAll(newWrkOrderList); + if (!CollectionUtils.isEmpty(newOrderAssemblyList)) { + mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList); + } + if (!CollectionUtils.isEmpty(newOrderPartList)) { + mesWorkOrderPartService.insertBatch(newOrderPartList); + } + if (!CollectionUtils.isEmpty(newOrderLogList)) { + workOrderLogService.insertBatch(newOrderLogList); + } + if (!CollectionUtils.isEmpty(newQueueOrderList)) { + queueOrderRao.saveAll(newQueueOrderList); + } + if (!CollectionUtils.isEmpty(newProduceSnList)) { + mesProduceSnService.insertBatch(newProduceSnList); + } + if (!CollectionUtils.isEmpty(newPrintQueueList)) { + printQueueRepository.saveAll(newPrintQueueList); + } + } + + public List findMesQueueOrder(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return queueOrderRao.findByHqlWhere(packBean); + } + + public void closeMesQueueOrder(String workOrderNo, String organizeCode, String userName) { + if (StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + queueOrderRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status"}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.QUEUE_ORDER_STATUS.CLOSED.getValue()}, packBean); + } + + public MesPrintQueue getMesPrintQuanOrder(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return printQueueRepository.getByProperty(packBean); + } + + private Long getMaxMesWorkOrderProductSeq(MesWorkOrder bean) { + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", orderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); + MesWorkOrder workOrder = baseRDao.getByProperty(orderPackBean); + return Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0L : workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2L : workOrder.getProductSeq() + 1L; + } + + private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) { + MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion); + if (Objects.isNull(mesProductVersion)) { + MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion); + } + return mesProductVersion; + } + + private MesProductVersion getMesProductVersion(String organizeCode, String partNo) { + MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, null); + if (Objects.isNull(mesProductVersion)) { + MesException.throwMesBusiException("物料【%s】生产版本信息不存在", partNo); + } + return mesProductVersion; + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java index 45bba95..681538f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java @@ -1,8 +1,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToWmsService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; +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.MesBom; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToWms; @@ -25,20 +30,29 @@ import java.util.List; public class MesWorkOrderToWmsServiceImpl extends BaseMesService implements IMesWorkOrderToWmsService { @Override - public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList,String userName,boolean flag) { List mesWorkOrderToWmsList = new ArrayList<>(); MesWorkOrderToWms mesWorkOrderToWms = null; for (MesBom mesBom : mesBomList) { mesWorkOrderToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); + BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, MesExtConstWords.ID); mesWorkOrderToWms.setUnit(mesBom.getUnit()); + mesWorkOrderToWms.setFlag(flag ? CommonEnumUtil.VALID : CommonEnumUtil.FALSE); mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit()); mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty())); - ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser()); + ConvertBean.serviceModelInitialize(mesWorkOrderToWms, userName); mesWorkOrderToWmsList.add(mesWorkOrderToWms); } return mesWorkOrderToWmsList; } + + @Override + public List findMesWorkOrderToWms(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java index 8568d9d..9ce908d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/file/MesModuleExcelServiceImpl.java @@ -70,7 +70,9 @@ public class MesModuleExcelServiceImpl extends BaseMesService im @Override public void updateModuleExcel(MultipartFile file, MesModuleExcel mesModuleExcel) { - MesModuleExcel moduleExcelManageDb = baseRDao.getById(mesModuleExcel.getId()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesModuleExcel.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesModuleExcel.getId(),"id",ddlPackBean); + MesModuleExcel moduleExcelManageDb = baseRDao.getByProperty(ddlPackBean); if (moduleExcelManageDb == null) { MesException.throwMesBusiException("ID【%s】记录不存在", mesModuleExcel.getId()); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java new file mode 100644 index 0000000..846a005 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -0,0 +1,862 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.roundness; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService; +import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MesCreateWorkOrderImpl; +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Description : 按照包装圆整 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/2 21:22 + * @Modify: + **/ +@Service +public class MesPackageRoundnessService implements IRoundnessStrategy { + + private static final Logger log = LoggerFactory.getLogger(MesPackageRoundnessService.class); + + + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRao; + + @Autowired + private MesWorkOrderRepository mesWorkOrderRao; + + + @Autowired + private MesShiftRepository mesShiftRao; + + + @Autowired + private MesBomService mesBomService; + + @Autowired + private MesBomRepository bomRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private IMesCustSoftInfoService custSoftInfoService; + + @Autowired + private MesPartPtrRepository partPtrRao; + + @Autowired + private MesPartSapService mesPartSapService; + + @Autowired + private MesProduceSnRepository mesProduceSnRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private MesWorkOrderService mesWorkOrderService; + + @Autowired + private MesWorkCenterRepository workCenterRao; + + @Autowired + private MesPartPtrDetailRepository partPtrDetailRao; + + @Autowired + private MesCreateWorkOrderImpl mesCreateWorkOrder; + + @Override + public void execute(MesPartProdGroup partProdGroup, List sortInfoList, List details) { + try { + //是否是头部零件 + Integer isSeqInfoHeadPart = partProdGroup.getIsSeqInfoHeadPart(); + if (isSeqInfoHeadPart == null || isSeqInfoHeadPart == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { + log.info("非头零件不能按照包装圆整;零件生产组为:{}", partProdGroup.getPartProdGroupCode()); + return; + } + + Map prodGroupDetailMap = details.stream().collect(Collectors.toMap(MesPartProdGroupDetail::getCustPartNo, Function.identity())); + //1.生产组中的圆整数量 + double roundQty = Double.parseDouble(partProdGroup.getRoundQty()); + //2.排序信息中的零件合计数量 + double qty = sortInfoList.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get(); + MesCustSortInfo sortInfo; + /** + * 2024/10/24 by Castle需要根据custOrderNo升序设置productSeq + */ + log.info("castle-execute-before查询出的sortInfo数据:{}", sortInfoList); + sortInfoList = sortInfoList.stream().sorted((sortInfo1, sortInfo2) -> { + if (Long.parseLong(sortInfo1.getCustOrderCode().substring(3)) > Long.parseLong(sortInfo2.getCustOrderCode().substring(3))) { + return 1; + } + return -1; + }).collect(Collectors.toList()); + log.info("castle-execute-after查询出的sortInfo数据:{}", sortInfoList); + + //3.当数量未达到圆整包装数时 + if (qty < roundQty) { + //4.查看客户排序信息钟的最早的一条过点时间 + 生产组最晚生成时间是否已到达当前时间 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + sortInfo = sortInfoList.get(0); + //最晚延迟的时间 + int latestCreationTime = Integer.parseInt(partProdGroup.getLatestCreationTime()); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf.parse(sortInfo.getMatchTime())); + calendar.add(Calendar.MINUTE, latestCreationTime); + Date laterTime = calendar.getTime(); + + if (laterTime.after(new Date())) { + log.info("当前时间:{}没有达到最晚生成时间:{}", sdf.format(new Date()), sdf.format(laterTime)); + return; + } else { + //如果最早来的排序信息的多点时间已经超过最晚生成时间,则圆整数为当前排序信息对应的合计数 + roundQty = qty; + } + } + + //批量获取生生产序号 + /** + * 生产序号 + * 工厂-产线-9位流水号,跳号10 + */ + GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); + prodSeqSerialNoModel.setProdLocation(partProdGroup.getWorkCenterCode()); + List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(partProdGroup.getOrganizeCode()), "edi", partProdGroup.getOrganizeCode(), sortInfoList.size()).getResultList(); + + log.info("castle-execute-顺序号:{}", proSeqResultList); + //扣减qty 生成工单 + while (qty > 0) { + //临时客户排序信息中的数量计数器 + sortInfo = sortInfoList.get(0); + String seq = proSeqResultList.get(0); + long productSeq = Long.parseLong(seq.replace("MES_WORK_ORDER_SEQ_WU_HAN", "").replace(partProdGroup.getWorkCenterCode(), "")); + + double custQty = sortInfo.getQty(); + //当客户排序信息中的数量大于剩余圆整数量要Break + if (custQty > roundQty) { + log.info("单笔订单数量大于圆整数量01,车号:{}", sortInfo.getVinCode()); + return; + } + + //查找该零件是否在生产组中 + MesPartProdGroupDetail mesPartProdGroupDetail = prodGroupDetailMap.get(sortInfo.getCustPartNo()); + if (mesPartProdGroupDetail == null) { + log.info("生产组中未找到该零件:{}", sortInfo.getCustPartNo()); + return; + } + //生产零件号 + if (mesPartProdGroupDetail.getProductPartNo() == null) { + mesPartProdGroupDetail.setProductPartNo(mesPartProdGroupDetail.getPartNo()); + } + /** + * 2024/11/14 + * 不带z的零件号是装配费 + * 零件号带z是erp零件号 生产零件号 + */ + MesPartSap mesPart = this.getMesPart(mesPartProdGroupDetail.getProductPartNo(), partProdGroup.getOrganizeCode()); + + if (mesPart == null) { + log.info("{}工厂没有,零件:{}信息", partProdGroup.getOrganizeCode(), mesPartProdGroupDetail.getProductPartNo()); + return; + } + + mesCreateWorkOrder.createWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo,productSeq); +// doCreateWorkOrder(partProdGroup, mesPartProdGroupDetail, mesPart, sortInfo); + qty -= custQty; + sortInfoList.remove(sortInfo); + proSeqResultList.remove(seq); + // 更新排序信息 已完成 + custSoftInfoService.updateCustSortInfo(sortInfo); + } + + + } catch (Exception e) { + log.error("按包装圆整出错:MesPackageRoundnessService:{}", e.getMessage()); + } + } + private void doCreateWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo) throws ParseException { + + String organizeCode = partProdGroup.getOrganizeCode(); + MesWorkOrder mesWorkOrder = new MesWorkOrder(); + mesWorkOrder.setCustCode(partProdGroup.getCustCode()); + //工单版本号 + mesWorkOrder.setProductVersion("1"); + //工单类型 + mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.SORT.getValue()); + //订单序号=客户排序信息的序号 + mesWorkOrder.setWorkOrderSeq(sortInfo.getCustInfoSeq().toString()); + mesWorkOrder.setOrganizeCode(sortInfo.getOrganizeCode()); + mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); + //根据产线查找区域代码 + DdlPackBean centerPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(),"workCenterCode", centerPackBean); + List workCenterList = workCenterRao.findByHqlTopWhere(centerPackBean, 1); + if (!workCenterList.isEmpty()){ + mesWorkOrder.setAreaCode(workCenterList.get(0).getAreaCode()); + } + mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); + + //来源 + mesWorkOrder.setWorkOrderSource(sortInfo.getId().toString()); + + mesWorkOrder.setVinCode(sortInfo.getVinCode()); + mesWorkOrder.setProductTime(sortInfo.getMatchTime()); + mesWorkOrder.setProduceTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanStartTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanEndTime(sortInfo.getInfoPointTime()); + mesWorkOrder.setPtrInfo(sortInfo.getRemark()); + //客户订单号 + mesWorkOrder.setCustOrderNo(sortInfo.getCustOrderCode()); + //车型代码 + mesWorkOrder.setCarModelCode(sortInfo.getVehicleCategory()); + //车型描述 mesWorkOrder.setCarName = vehicleClassCode + + //备注取自于车型配置表中 + //todo 根据VehicleNo车型代码,sortInfo.custCode,sortInfo.CustPlantCode,organizeCode 查询表TI_CIM_VEHICLE_MODEL的 remark 作为从车型配置表中获取打印备注信息 + + mesWorkOrder.setCustPartNo(sortInfo.getCustPartNo()); +// mesWorkOrder.setCcrNo = sortInfo.CcrNo +// mesWorkOrder.AssyCode = sortInfo.AssyCode +// mesWorkOrder.setVehicleYear = sortInfo.getVehicleYear() + + // 11. 是否将生成日期减一天 + // 班次 根据产线+计划时间匹配班次 + DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); + List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = sdf.parse(sortInfo.getMatchTime()); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int hours = calendar.get(Calendar.HOUR_OF_DAY); + + int minutes = calendar.get(Calendar.MINUTE); + long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":","")); + if (!shiftList.isEmpty()) { + for (MesShift shift : shiftList) { + long startTime = Long.parseLong(shift.getStartTime().replaceAll(":", "")); + long endTime = Long.parseLong(shift.getEndTime().replaceAll(":", "")); + if (startTime < endTime){ + if (shiftTime > startTime && shiftTime < endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + }else { + if (shiftTime < startTime && shiftTime > endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + } + } + } else { + log.info("当前产线:{} 没有配置班次", mesPartProdGroupDetail.getWorkCenterCode()); + } + + //零件相关 + mesWorkOrder.setPartNo(partSap.getPartNo()); + mesWorkOrder.setPartName(partSap.getPartName()); + + //工单号生成规则 【工厂号+yyyyMMdd+5位流水】 + + + + // 13.生产版本 organizeCode + partNo + MesProductVersion prodVersion = getProdVersion(organizeCode, partSap.getPartNo()); + if (prodVersion == null) { + log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, partSap.getPartNo()); + } else { + String productVersion = prodVersion.getProductVersion(); + mesWorkOrder.setProductVersion(productVersion); + } + + // bom prodVersion.alternativePartList bom版本 + MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), partSap.getPartNo()); + if (bom != null){ + mesWorkOrder.setBomCode(bom.getBomCode()); + } + + mesWorkOrder.setQty(sortInfo.getQty()); + mesWorkOrder.setUnCompleteQty(sortInfo.getQty()); + mesWorkOrder.setUnit(partSap.getUnit()); + + if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + } else { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + } + + mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); + mesWorkOrder.setFid(UUID.randomUUID().toString()); + mesWorkOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + /** + * RS 为记录分隔符ASCII:30 + * GS 为分组符ASCII:29 + * EOT 为传输结束符ASCII:04 + * {splitRule} [)>%RS%06%GS%Y + * {splitRule} vpps= 4110000000000X + * {splitRule} %GS%P + * {partNo} 8位客户零件号 + * {splitRule} %GS%12V + * {splitRule} duns 545238347 + * {splitRule} %GS%T1A + * {yydayofyear} + * {splitRule} A2B4C + * {serialNo} 4位 步长1 + * {splitRule}%RS%%EOT% + *{spiltRule}{spiltRule}{spiltRule}{partNo}{spiltRule}{spiltRule}{spiltRule}{year}{day}{spiltRule}{serialNo}{spiltRule} + * [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + * 通用二维码组成部分('RS'为记录分隔符ASCII:30,'GS'为分组符ASCII:29,'EOT'为传输结束符ASCII:04) + * [)>+'RS'+06+'GS'+Y+vpps+'GS'+P+8位客户零件号+'GS'+12V+DUNS+'GS'+T+1位line num+1位班次号+2位年份+3位天数+1位追溯(精确追溯A,批次追溯@)+2工程更改记录+2位自定义+4位流水号+'RS'+'EOT' + * 如:[)>+'RS'+06+'GS'+Y+4110000000000X+'GS'+P+12345678+'GS'+12V+545295227+'GS'+T+1A13304A2B4C0001+'RS'+'EOT' + * + * vpps = Y00000000000000 + * 8位客户零件号=最后四位要大写 + * Duns是什么? + * 1位lineNumber是什么? 固定值 1 + * 1位班次号是什么? + * 2位年YY 24 + * 3位天-~365/366 + * 追溯 + * A--精确追溯 + * @--批次追溯 + * + * 2位工程更改记录 + * 2位供应商自定义信息 + * 4位流水号,当班班次计数,每班班次归零 + * + * WH_CUST_SN_RULE + */ + + Calendar custCalendar = Calendar.getInstance(); + custCalendar.setTime(new Date()); + GenSerialNoModel custGenSerialNoModel= new GenSerialNoModel("WH_CUST_SN_RULE"); + String partNo = mesWorkOrder.getCustPartNo(); + String prefix = partNo.substring(0, partNo.length() - 4); + String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); + custGenSerialNoModel.setPartNo(prefix+partNo4); + String year = custCalendar.get(Calendar.YEAR)+""; + custGenSerialNoModel.setYear(year.substring(2)); + custGenSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR))); + List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, "edi", organizeCode, 1).getResultList(); + // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + //截取替换为ascii码 + String snOriginal = custNumRuleList.get(0); + String[] split = snOriginal.split("%RS%"); + StringBuilder rsStr = new StringBuilder(); + for (int i = 0; i < split.length-1; i++) { + rsStr.append(split[i]).append((char) 30); + } + rsStr.append(split[split.length - 1]); + StringBuilder gsStr = new StringBuilder(); + String[] split1 = rsStr.toString().split("%GS%"); + for (int i = 0; i < split1.length-1; i++) { + gsStr.append(split1[i]).append((char) 29); + } + gsStr.append(split1[split1.length-1]); + String[] split2 = gsStr.toString().split("%EOT%"); + String sn = split2[0]+(char)4; + //保存条码 + mesWorkOrder.setCustSn(sn); + + + + // 打散bom + List workOrderPartList = new ArrayList<>(); + if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + workOrderPartList = dismantleBom(partSap.getPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); + + } + /** + * 总成拆bom,变成子零件 + * 替换子零件,通过替换后的零件,去找排序工艺 + */ + Map ptrRuleListMap = new HashMap<>(); + //是否修改为P单 + boolean isModifyPOrder = false; + //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + if (!workOrderPartList.isEmpty()){ + Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + //先替换客户的ptr信息 + String ptrInfo = mesWorkOrder.getPtrInfo(); + if (StringUtils.isNotBlank(ptrInfo)) { + List ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); + if (!ptrInfoList.isEmpty()){ + List custPartPtrList = getCustPartPtrList(ptrInfoList, organizeCode); + for (MesPartPtr mesPartPtr : custPartPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(destPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + } + } + } + } + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); + //装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号,value 是规则 + + for (MesPartPtr mesPartPtr : partPtrList) { + //根据mesPartPtr的目标零件号,找到零件信息 + String destPartNo = mesPartPtr.getDestPartNo(); + String srcPartNo = mesPartPtr.getSrcPartNo(); + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, organizeCode); + //更新物料清单 + MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo); + if (orderPart != null) { + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + orderPart.setShippingPartNo(mesPartSap.getPartNo()); + ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); + if (!isModifyPOrder){ + isModifyPOrder = true; + } + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr,"JOB"); + partPtrRao.update(mesPartPtr); + DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"totalPartNo",partPtrDetailPackBean); + List partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean); + if (!partPtrDetailList.isEmpty()){ + MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0); + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail,"JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } + //更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 + } + } + } + + + + // 生成装配件清单 + if (isModifyPOrder){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + } + /** + * 工单号修改 + * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + String orderNoWuHan=organizeCode+mesWorkOrder.getOrderFlag()+sortInfo.getCustOrderCode()+mesWorkOrder.getShiftCode() + serialNo; + mesWorkOrder.setWorkOrderNo(orderNoWuHan); + + if (!workOrderPartList.isEmpty()) { + for (MesWorkOrderPart orderPart : workOrderPartList) { + orderPart.setOrganizeCode(organizeCode); + orderPart.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); + } + workOrderPartRao.saveAll(workOrderPartList); + } + List assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); + /** + * 生产序号 + * 工厂-产线-9位流水号,跳号10 + */ + GenSerialNoModel prodSeqSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_SEQ_WU_HAN"); + prodSeqSerialNoModel.setProdLocation(mesWorkOrder.getWorkCenterCode()); + List proSeqResultList = syncFuncService.syncSerialNo(prodSeqSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String proSeqStr = proSeqResultList.get(0); + mesWorkOrder.setProductSeq(Long.parseLong(proSeqStr.replace("MES_WORK_ORDER_SEQ_WU_HAN", ""))); + mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); + mesWorkOrderRao.insert(mesWorkOrder); + + /** + * 插入工单打印队列数据 + */ + mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); + if (!assemblyList.isEmpty()) { + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){ + orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo())); + } + orderAssembly.setPartNo(mesWorkOrder.getPartNo()); + orderAssembly.setPartName(mesWorkOrder.getPartName()); + orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); + orderAssembly.setOrganizeCode(organizeCode); + orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); + } + workOrderAssemblyRao.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setOrganizeCode(organizeCode); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); + mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); + mesQueueOrder.setPartName(mesWorkOrder.getPartName()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); + mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); + mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); + mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); + mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); + ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); + queueOrderRao.insert(mesQueueOrder); + } + + } + + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); + mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(organizeCode); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); + mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); + mesProduceSn.setPartName(mesWorkOrder.getPartName()); + mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); + mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); + mesProduceSnRao.insert(mesProduceSn); + + + + } + + + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() !=null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum()!=null && sortCfg.getLogicNum() >0 )){ + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())){ + log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum()); + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); +// orderAssembly.setPartNo(orderPart.getPartNo()); +// orderAssembly.setPartName(orderPart.getPartName()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); + orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + orderAssembly.setPreCraftCode(sortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + orderAssembly.setPreCraftCode(ruleSortCfg.getPreCraftCode()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { + List orderPartList = new ArrayList<>(); + + //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList + List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + //2.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); + List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + log.info("工厂:{},零件号:{}未查到零件信息", organizeCode, bom.getItemPartNo()); + return new ArrayList<>(); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkOrderNo(workOrderNo); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + //3.遍历bomList + return orderPartList; + } + + + private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { + if (bomCode == null) { + //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode + DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1); + if (bomList == null || bomList.isEmpty()) { + return new ArrayList<>(); + } + bomCode = bomList.get(0).getBomCode(); + } + List bomResultList = new ArrayList<>(); + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean); + DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean); + List bomList = bomRao.findByHqlWhere(bomPackBean); + + for (MesBom bom : bomList) { + if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) { + getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode); + } else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } + + } + + return bomResultList; + } + + private MesPartSap getMesPart(String productPartNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo, "partNo", ddlPackBean); + List parts = mesPartSapRao.findByHqlWhere(ddlPackBean); + return parts.isEmpty() ? null : parts.get(0); + } + + private MesProductVersion getProdVersion(String organizeCode, String partNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + List mesProductVersionList = mesProductVersionRao.findByHqlWhere(ddlPackBean); + return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); + } + + + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); + DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) + .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) + .collect(Collectors.toList()); + return partPtrList; + } + //根据排序信息PTR零件号 获取 ptr信息 + private List getCustPartPtrList(List ptrInfoList,String organizeCode){ + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); + return partPtrRao.findByHqlWhere(partPtrPackBean); + + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java index c6277c1..eb2df98 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java @@ -154,7 +154,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { proSeqGenSerialNoModel.setDynamicRule("#"); List seqList = syncFuncService.syncSerialNo(proSeqGenSerialNoModel.organizeCode(detail.getOrganizeCode()), "edi", detail.getOrganizeCode(), 1).getResultList(); String prodSeqStr = seqList.get(0); - mesWorkOrder.setProduceSeq(Long.parseLong(prodSeqStr.substring(prodSeqStr.indexOf("#")+1))); + mesWorkOrder.setProductSeq(Long.parseLong(prodSeqStr.substring(prodSeqStr.indexOf("#")+1))); mesWorkOrder.setCustPartNo(sortInfos.get(0).getCustPartNo()); //标识 -空 //状态 --- 根据零件发运组看是自动发布 @@ -192,6 +192,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { Date parse = format.parse(matchTime); String productTime = format.format(parse); mesWorkOrder.setProductTime(productTime); + mesWorkOrder.setProduceTime(productTime); // 11. 是否将生成日期减一天 // 班次 根据产线+计划时间匹配班次 DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(detail.getOrganizeCode()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java index d3bce3d..5aa106f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java @@ -2,14 +2,20 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.board; import cn.estsh.i3plus.ext.mes.api.busi.board.IMesYfBoardService; import cn.estsh.i3plus.ext.mes.apiservice.dao.board.IMesYfBoardDao; +import cn.estsh.i3plus.ext.mes.pojo.model.board.MesGepicsInspectionInfoModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardConditionModel; import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics; import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import org.apache.commons.lang3.StringUtils; @@ -52,6 +58,9 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { @Autowired private MesSpotCheckOrderRepository mesSpotCheckOrderRepository; + @Autowired + private MesCimGmGepicsRepository mesCimGmGepicsRepository; + private static final String START_TIME = "START_TIME"; private static final String END_TIME = "END_TIME"; @@ -336,6 +345,25 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { return resultModel; } + @Override + public ListPager queryGepicsInspectionInfo(MesGepicsInspectionInfoModel infoModel, Pager pager) { + //查询数据 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(infoModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(infoModel.getGaRule(), "gaRule", packBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.VALID, "status", packBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.VALID, "type", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + pager = PagerHelper.getPager(pager, mesCimGmGepicsRepository.findByHqlWhereCount(packBean)); + List mesCimGmGepicsList = mesCimGmGepicsRepository.findByHqlWherePage(packBean, pager); + if(CollectionUtils.isEmpty(mesCimGmGepicsList)){ + return new ListPager<>(new ArrayList<>(),pager); + } + //数据组装 + List modelList = new ArrayList<>(mesCimGmGepicsList.size()); + mesCimGmGepicsList.forEach(item -> modelList.add(new MesGepicsInspectionInfoModel(item))); + return new ListPager<>(modelList,pager); + } + /** * 获取看板查询时间区段 * @param timeRangeIdentification 显示维度 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java new file mode 100644 index 0000000..f0136f8 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesCreateWorkOrderImpl.java @@ -0,0 +1,873 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.api.busi.IMesCreateWorkOrder; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService; +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder { + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRao; + + @Autowired + private MesWorkOrderRepository mesWorkOrderRao; + + + @Autowired + private MesShiftRepository mesShiftRao; + + + @Autowired + private MesBomService mesBomService; + + @Autowired + private MesBomRepository bomRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Autowired + private ISyncFuncService syncFuncService; + + + @Autowired + private MesPartPtrRepository partPtrRao; + + @Autowired + private MesPartSapService mesPartSapService; + + @Autowired + private MesProduceSnRepository mesProduceSnRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private MesWorkOrderService mesWorkOrderService; + + @Autowired + private MesWorkCenterRepository workCenterRao; + + @Autowired + private MesPartPtrDetailRepository partPtrDetailRao; + + @Autowired + private MesCustomerCarModelRepository mesCustomerCarModelRepository; + + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) { + + //判断vin是否已经生成了S单,如果已经生成S单 则不再生成工单 + String vinCode = sortInfo.getVinCode(); + DdlPackBean existPackBean = DdlPackBean.getDdlPackBean(sortInfo.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(vinCode, "vinCode", existPackBean); +// DdlPreparedPack.getStringEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(),"orderFlag",existPackBean); + List workOrderList = mesWorkOrderRao.findByHqlWhere(existPackBean); + if (!workOrderList.isEmpty()) { + MesWorkOrder mesWorkOrder = workOrderList.get(0); + if (mesWorkOrder.getOrderFlag().equals(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue())) { + sortInfo.setDescription("当前vin号已存在S单!"); + return; + } + sortInfo.setDescription("当前vin号已经解析过!"); + return; + } + + String organizeCode = partProdGroup.getOrganizeCode(); + MesWorkOrder mesWorkOrder = new MesWorkOrder(); + mesWorkOrder.setCustCode(partProdGroup.getCustCode()); + //工单版本号 + mesWorkOrder.setProductVersion("1"); + //工单类型 + mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.SORT.getValue()); + //订单序号=客户排序信息的序号 + mesWorkOrder.setWorkOrderSeq(sortInfo.getCustInfoSeq().toString()); + mesWorkOrder.setOrganizeCode(sortInfo.getOrganizeCode()); + mesWorkOrder.setWorkCenterCode(partProdGroup.getWorkCenterCode()); + //根据产线查找区域代码 + DdlPackBean centerPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroup.getWorkCenterCode(), "workCenterCode", centerPackBean); + List workCenterList = workCenterRao.findByHqlTopWhere(centerPackBean, 1); + if (!workCenterList.isEmpty()) { + mesWorkOrder.setAreaCode(workCenterList.get(0).getAreaCode()); + } + mesWorkOrder.setWorkCellCode(mesPartProdGroupDetail.getWorkCellCode()); + + //来源 + mesWorkOrder.setWorkOrderSource(sortInfo.getId().toString()); + + mesWorkOrder.setVinCode(sortInfo.getVinCode()); + mesWorkOrder.setProductTime(sortInfo.getMatchTime()); + mesWorkOrder.setProduceTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanStartTime(sortInfo.getMatchTime()); + mesWorkOrder.setPlanEndTime(sortInfo.getInfoPointTime()); + mesWorkOrder.setPtrInfo(sortInfo.getRemark()); + //客户订单号 + mesWorkOrder.setCustOrderNo(sortInfo.getCustOrderCode()); + //车型代码 +// mesWorkOrder.setCarModelCode(sortInfo.getVehicleCategory()); + //车型描述 mesWorkOrder.setCarName = vehicleClassCode + + //备注取自于车型配置表中 + //todo 根据VehicleNo车型代码,sortInfo.custCode,sortInfo.CustPlantCode,organizeCode 查询表TI_CIM_VEHICLE_MODEL的 remark 作为从车型配置表中获取打印备注信息 + + mesWorkOrder.setCustPartNo(sortInfo.getCustPartNo()); + // 11. 是否将生成日期减一天 + // 班次 根据产线+计划时间匹配班次 + DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(), "workCenterCode", shiftPackBean); + List shiftList = mesShiftRao.findByHqlWhere(shiftPackBean); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + try { + date = sdf.parse(sortInfo.getMatchTime()); + } catch (ParseException e) { + log.error("解析时间报错,无法转换成时间,matchTime:{}", sortInfo.getMatchTime()); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int hours = calendar.get(Calendar.HOUR_OF_DAY); + + int minutes = calendar.get(Calendar.MINUTE); + long shiftTime = Long.parseLong(String.format("%02d:%02d:00", hours, minutes).replaceAll(":", "")); + if (!shiftList.isEmpty()) { + for (MesShift shift : shiftList) { + long startTime = Long.parseLong(shift.getStartTime().replaceAll(":", "")); + long endTime = Long.parseLong(shift.getEndTime().replaceAll(":", "")); + if (startTime < endTime) { + if (shiftTime >= startTime && shiftTime < endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + } else { + if (shiftTime >= startTime || shiftTime < endTime) { + mesWorkOrder.setShiftName(shift.getShiftName()); + mesWorkOrder.setShiftCode(shift.getShiftCode()); + } + } + } + } else { + log.info("当前产线:{} 没有配置班次", mesPartProdGroupDetail.getWorkCenterCode()); + } + //零件相关 + mesWorkOrder.setPartNo(partSap.getPartNo()); + mesWorkOrder.setPartName(partSap.getPartName()); + + //工单号生成规则 【工厂号+yyyyMMdd+5位流水】 + + // 13.生产版本 organizeCode + partNo + /** + * 生产版本是根据 生产零检号查询,不是根据erp零件号查询 + */ + MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo()); + if (prodVersion == null) { + log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo()); + } else { + String productVersion = prodVersion.getProductVersion(); + mesWorkOrder.setProductVersion(productVersion); + } + + // bom prodVersion.alternativePartList bom版本 + /** + * bom也需要根据生产零件号拆分 + */ + MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo()); + if (bom != null) { + mesWorkOrder.setBomCode(bom.getBomCode()); + } else { + log.info("工厂:{},生产零件号:{}没有维护bom", organizeCode, mesPartProdGroupDetail.getProductPartNo()); + return; + } + + mesWorkOrder.setQty(sortInfo.getQty()); + mesWorkOrder.setUnCompleteQty(sortInfo.getQty()); + mesWorkOrder.setUnit(partSap.getUnit()); + + if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + } else { + mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + } + + mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesWorkOrder.setCarModelCode(sortInfo.getVehicleNo()); + mesWorkOrder.setFid(UUID.randomUUID().toString()); + mesWorkOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + /** + * RS 为记录分隔符ASCII:30 + * GS 为分组符ASCII:29 + * EOT 为传输结束符ASCII:04 + * {splitRule} [)>%RS%06%GS%Y + * {splitRule} vpps= 4110000000000X + * {splitRule} %GS%P + * {partNo} 8位客户零件号 + * {splitRule} %GS%12V + * {splitRule} duns 545238347 + * {splitRule} %GS%T1A + * {yydayofyear} + * {splitRule} A2B4C + * {serialNo} 4位 步长1 + * {splitRule}%RS%%EOT% + *{spiltRule}{spiltRule}{spiltRule}{partNo}{spiltRule}{spiltRule}{spiltRule}{year}{day}{spiltRule}{serialNo}{spiltRule} + * [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + * 通用二维码组成部分('RS'为记录分隔符ASCII:30,'GS'为分组符ASCII:29,'EOT'为传输结束符ASCII:04) + * [)>+'RS'+06+'GS'+Y+vpps+'GS'+P+8位客户零件号+'GS'+12V+DUNS+'GS'+T+1位line num+1位班次号+2位年份+3位天数+1位追溯(精确追溯A,批次追溯@)+2工程更改记录+2位自定义+4位流水号+'RS'+'EOT' + * 如:[)>+'RS'+06+'GS'+Y+4110000000000X+'GS'+P+12345678+'GS'+12V+545295227+'GS'+T+1A13304A2B4C0001+'RS'+'EOT' + * + * vpps = Y00000000000000 + * 8位客户零件号=最后四位要大写 + * Duns是什么? + * 1位lineNumber是什么? 固定值 1 + * 1位班次号是什么? + * 2位年YY 24 + * 3位天-~365/366 + * 追溯 + * A--精确追溯 + * @--批次追溯 + * + * 2位工程更改记录 + * 2位供应商自定义信息 + * 4位流水号,当班班次计数,每班班次归零 + * + * WH_CUST_SN_RULE + */ + + Calendar custCalendar = Calendar.getInstance(); + custCalendar.setTime(new Date()); + GenSerialNoModel custGenSerialNoModel = new GenSerialNoModel("WH_CUST_SN_RULE"); + String partNo = mesWorkOrder.getCustPartNo(); + String prefix = partNo.substring(0, partNo.length() - 4); + String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase(); + custGenSerialNoModel.setPartNo(prefix + partNo4); + String year = custCalendar.get(Calendar.YEAR) + ""; + custGenSerialNoModel.setYear(year.substring(2)); + custGenSerialNoModel.setDay(String.format("%03d", custCalendar.get(Calendar.DAY_OF_YEAR))); + List custNumRuleList = syncFuncService.syncSerialNo(custGenSerialNoModel, "edi", organizeCode, 1).getResultList(); + // [)>%RS%06%GS%Y,4110000000000X,%GS%P,%GS%12V,545238347,%GS%T1A,A2B4C,%RS%%EOT% + //截取替换为ascii码 + String snOriginal = custNumRuleList.get(0); + String[] split = snOriginal.split("%RS%"); + StringBuilder rsStr = new StringBuilder(); + for (int i = 0; i < split.length - 1; i++) { + rsStr.append(split[i]).append((char) 30); + } + rsStr.append(split[split.length - 1]); + StringBuilder gsStr = new StringBuilder(); + String[] split1 = rsStr.toString().split("%GS%"); + for (int i = 0; i < split1.length - 1; i++) { + gsStr.append(split1[i]).append((char) 29); + } + gsStr.append(split1[split1.length - 1]); + String[] split2 = gsStr.toString().split("%EOT%"); + String sn = split2[0] + (char) 4; + //保存条码 + mesWorkOrder.setCustSn(sn); + + // 打散bom + List workOrderPartList = new ArrayList<>(); + if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + //打散bom使用生产零件号 + workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo()); + } + + + + /** + * 总成拆bom,变成子零件 + * 替换子零件,通过替换后的零件,去找排序工艺 + * + * PTR逻辑 3种场景互斥 + * 1.如果选择了客户发送PTR信息,遇到PTR info直接转换单 + * 2.如果选择了内部PTR,需要看总成是否需要替换,生成F单 + * 3.如果两个都没有选择PTR,需要看总成是否需要替换 生成P单 + * + * isCustomerSendPrtInfo 1是客户发送ptr + * isInterPrt 1是内部ptr + */ +// Map ptrRuleListMap = new HashMap<>(); + //是否修改为P单 + boolean isModifyPOrder = false; + boolean isFOrder = false; + //查询mes_part_ptr表,根据物料清单查找ptr替换信息 + /** + * PTR生效 + * 1.有开始时间和结束时间 和 需要数量,达到其中一个就结束 + * 2.有开始时间无结束时间 和 需要数量 达到需要的数量结束 + * 3.有开始时间无结束时间,无结束数量 一直替换 + */ + /** + * 2024/11/16 + * PTR 分三种场景 --- mes_part_ptr + * 1.基于排序加工规则 mes_part_ptr 中 create_by_assembly_setting 1 true --暂时没有使用 + * 替换零件及替换装配工位 + * + * 2.不基于排序加工规则 2 false + * 替换的零件装配工位不变,只改变零件信息 + * + * 3.是否客户发送 is_cust_send_info is_customer_send_prt_info = 1 true + * 遇到就替换,不用管ptrPart的总成 + */ + //打印目视单使用 + StringBuilder descriptionStr = new StringBuilder(); + + //是否基于排序加工规则 + // boolean isCreateByAssemblySetting=false; + + //客户ptr信息 + StringBuilder ptrInfos = new StringBuilder(); + String ptrInfo = mesWorkOrder.getPtrInfo(); + List custPtrPartList = Arrays.asList(ptrInfo.split("\\|")); + boolean ptrFlag = false; + boolean fOrderFlag = false; + List assemblyList = new ArrayList<>(); + if (!workOrderPartList.isEmpty()) { + //是否基于排序加工规则--待定 + //查询装配目视项 + assemblyList = getAssemblyList(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getCarModelCode(), workOrderPartList, partProdGroup); + //ptr信息 + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + List partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList); + //遍历workOrderPartList + + for (MesWorkOrderPart orderPart : workOrderPartList) { + List ptr = partPtrList.stream().filter(item -> item.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList()); + if (ptr.isEmpty()) { + continue; + } + //判断是否是客户替换 + boolean isCust = false; + for (MesPartPtr mesPartPtr : ptr) { + if (custPtrPartList.contains(mesPartPtr.getSrcPartNo())) { + isCust = true; + break; + } + } + + MesPartPtr mesPartPtr = null; + MesPartPtrDetail mesPartPtrDetail = null; + + if (isCust) { + //查找客户发送的ptr信息 + List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && custPtrPartList.contains(item.getSrcPartNo())).collect(Collectors.toList()); + if (!custPartPtrList.isEmpty()) { + mesPartPtr = custPartPtrList.get(0); + } + } else { + //获取相同总成的ptrId 在ptr详情中 + List custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == null || item.getIsCustomerSendPrtInfo() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).collect(Collectors.toList()); + if (!custPartPtrList.isEmpty()) { + mesPartPtr = custPartPtrList.get(0); + //查询ptr总成--只有特定总成才会替换 + DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(), "ptrId", detailPartPtr); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "totalPartNo", detailPartPtr); + List ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr); + if (!ptrDetailList.isEmpty()) { + mesPartPtrDetail = ptrDetailList.get(0); + } + } + } + + if (!isCust && mesPartPtrDetail == null) { + continue; + } + + ptrFlag = true; + if (!isCust && mesPartPtr.getIsInterPrt()==CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){ + fOrderFlag = true; + } + //将工单类零件表替换位PTR条件中维护的替换零件 + MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), organizeCode); + orderPart.setPartNo(mesPartSap.getPartNo()); + orderPart.setPartName(mesPartSap.getPartName()); + //用于打印目视单 + descriptionStr.append(mesPartPtr.getMemo()); + //更新mes_part_ptr的实际数量 + 1 + mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); + ConvertBean.saveOrUpdate(mesPartPtr, "JOB"); + partPtrRao.update(mesPartPtr); + if (mesPartPtrDetail != null) { + mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); + ConvertBean.saveOrUpdate(mesPartPtrDetail, "JOB"); + partPtrDetailRao.update(mesPartPtrDetail); + } + MesWorkOrderAssembly orderAssemblyList = null; + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + String assemblyPartNo = orderAssembly.getAssemblyPartNo(); + if (StringUtils.isNotBlank(assemblyPartNo) && assemblyPartNo.equals(mesPartPtr.getSrcPartNo())){ + orderAssemblyList = orderAssembly; + } + } + if (!Objects.isNull(orderAssemblyList)){ + orderAssemblyList.setAssemblyPartNo(mesPartSap.getPartNo()); + orderAssemblyList.setAssemblyPartName(mesPartSap.getPartName()); + orderAssemblyList.setMatchRule(mesPartPtr.getReplacePartSnRule()); + ptrInfos.append("INFO|").append(mesPartPtr.getId()); + if (mesPartPtrDetail != null) { + ptrInfos.append("PART|").append(mesPartPtrDetail.getId()); + } + } + } + + } + if (ptrFlag && !fOrderFlag){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); + }else if (ptrFlag){ + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue()); + }else { + mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + } + + //获取车型remark用于目视单打印 + String remark = getCarRemark(partProdGroup.getCustCode(),mesWorkOrder.getCarModelCode(),partProdGroup.getOrganizeCode()); + mesWorkOrder.setDescription(descriptionStr.append(remark).toString()); + + /** + * 工单号修改 + * {ORG}{dynamicRule}{dynamicRule}{dynamicrule}{serialNo} + * 工厂代码+工单类型 +客户工厂代码+班次+流水号 + */ + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_ORDER_NO_WU_HAN"); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), "edi", mesPartProdGroupDetail.getOrganizeCode(), 1).getResultList(); + String serialNo = resultList.get(0).replace("MES_WORK_ORDER_NO_WU_HAN", ""); + String orderNoWuHan = organizeCode + mesWorkOrder.getOrderFlag() + sortInfo.getCustOrderCode() + mesWorkOrder.getShiftCode() + serialNo; + mesWorkOrder.setWorkOrderNo(orderNoWuHan); + + if (!workOrderPartList.isEmpty()) { + for (MesWorkOrderPart orderPart : workOrderPartList) { + orderPart.setOrganizeCode(organizeCode); + orderPart.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + ConvertBean.saveOrUpdate(orderPart, "MES-JOB"); + } + workOrderPartRao.saveAll(workOrderPartList); + mesWorkOrder.setProductSeq(productSeq); + mesWorkOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + ConvertBean.saveOrUpdate(mesWorkOrder, "MES-JOB"); + mesWorkOrderRao.insert(mesWorkOrder); + /** + * 插入工单打印队列数据 + */ + mesWorkOrderService.doSaveWorkOrderPrintQueue(mesWorkOrder); + if (!assemblyList.isEmpty()) { + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + orderAssembly.setPartNo(mesWorkOrder.getPartNo()); + orderAssembly.setPartName(mesWorkOrder.getPartName()); + orderAssembly.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); + orderAssembly.setOrganizeCode(organizeCode); + orderAssembly.setProductSn(mesWorkOrder.getWorkOrderNo()); + orderAssembly.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(orderAssembly, "MES-JOB"); + } + workOrderAssemblyRao.saveAll(assemblyList); + + List cellCodeList = assemblyList.stream().map(MesWorkOrderAssembly::getWorkCellCode).distinct().collect(Collectors.toList()); + Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); + for (String cellCode : cellCodeList) { + MesQueueOrder mesQueueOrder = new MesQueueOrder(); + mesQueueOrder.setCarModelCode(mesWorkOrder.getCarModelCode()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setOrganizeCode(organizeCode); + mesQueueOrder.setWorkCellCode(cellCode); + mesQueueOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode()); + mesQueueOrder.setPartProdGroupName(partProdGroup.getPartProdGroupName()); + mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); + mesQueueOrder.setPartNo(mesWorkOrder.getPartNo()); + mesQueueOrder.setPartName(mesWorkOrder.getPartName()); + mesQueueOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesQueueOrder.setCustSn(mesWorkOrder.getCustSn()); + mesQueueOrder.setStatus(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()); + mesQueueOrder.setProductSeq(mesWorkOrder.getProductSeq()); + mesQueueOrder.setWorkOrderSeq(mesWorkOrder.getWorkOrderSeq()); + mesQueueOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); + mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); + mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); + ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); + queueOrderRao.insert(mesQueueOrder); + } + + } + + //生成条码表 + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setProductSn(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setCustSn(mesWorkOrder.getCustSn()); + mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setOrganizeCode(organizeCode); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setCustCode(mesWorkOrder.getCustCode()); + mesProduceSn.setCustPartNo(mesWorkOrder.getCustPartNo()); + mesProduceSn.setPartNo(mesWorkOrder.getPartNo()); + mesProduceSn.setPartName(mesWorkOrder.getPartName()); + mesProduceSn.setShiftCode(mesWorkOrder.getShiftCode()); + mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + mesProduceSn.setQty(1.0); + mesProduceSn.setSerialNumber(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); + mesProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + mesProduceSn.setAreaCode(mesWorkOrder.getAreaCode()); + ConvertBean.saveOrUpdate(mesProduceSn, "MES-JOB"); + mesProduceSnRao.insert(mesProduceSn); + } + } + + private String getCarRemark(String custCode,String carModelCode,String organizeCode){ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custCode,"custCode",ddlPackBean); + DdlPreparedPack.getStringEqualPack(carModelCode,"carModelCode",ddlPackBean); + List carModelList = mesCustomerCarModelRepository.findByHqlTopWhere(ddlPackBean, 1); + if (carModelList != null && !carModelList.isEmpty()){ + return carModelList.get(0).getRemark(); + } + return ""; + } + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() !=null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum()!=null && sortCfg.getLogicNum() >0 )){ + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())){ + log.info("零件号:{}的数量:{}对应排序规则{}的逻辑数量:{}不一致",orderPart.getPartNo(),total,sortCfg.getWorkCenterCode(),sortCfg.getLogicNum()); + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)){ + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); +// orderAssembly.setPartNo(orderPart.getPartNo()); +// orderAssembly.setPartName(orderPart.getPartName()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); +// orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + }else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + + private MesProdRuleSortCfg getSortRuleCfg (String organizeCode,String workCenterCode,String partNo ){ + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getPartProdGroupCode(),"productGroupCode",prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlTopWhere(prodRuleSortPackBean,1); + + if (sortCfgList != null && !sortCfgList.isEmpty()){ + return sortCfgList.get(0); + } + return null; + } + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) { + List orderPartList = new ArrayList<>(); + + //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList + List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + //2.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + if (partNoList.isEmpty()) { + return new ArrayList<>(); + } + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); + List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + log.info("工厂:{},零件号:{}未查到零件信息", organizeCode, bom.getItemPartNo()); + return new ArrayList<>(); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkOrderNo(workOrderNo); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + //3.遍历bomList + return orderPartList; + } + + private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { + if (bomCode == null) { + //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode + DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1); + if (bomList == null || bomList.isEmpty()) { + return new ArrayList<>(); + } + bomCode = bomList.get(0).getBomCode(); + } + List bomResultList = new ArrayList<>(); + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean); + DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean); + List bomList = bomRao.findByHqlWhere(bomPackBean); + + for (MesBom bom : bomList) { + if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) { + getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode); + } else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } + + } + + return bomResultList; + } + + private MesPartSap getMesPart(String productPartNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo, "partNo", ddlPackBean); + List parts = mesPartSapRao.findByHqlWhere(ddlPackBean); + return parts.isEmpty() ? null : parts.get(0); + } + + private MesProductVersion getProdVersion(String organizeCode, String partNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getOrderBy("createDatetime",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); + List mesProductVersionList = mesProductVersionRao.findByHqlWhere(ddlPackBean); + return mesProductVersionList.isEmpty() ? null : mesProductVersionList.get(0); + } + + + private List getPartPtrList(String organizeCode,String workCenterCode, List partNoList) { + /** + * 2024/11/16 + * PTR生效 + * 1.有开始时间和结束时间 和 需要数量,达到其中一个就结束 + * 2.有开始时间无结束时间 和 需要数量 达到需要的数量结束 + * 3.有开始时间无结束时间,无结束数量 一直替换 + */ + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); + List partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); + /** + * 有开始时间 和 无结束时间 和 需要的数量,只有达到数量才结束 + */ + + DdlPackBean part1PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part1PtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part1PtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", part1PtrPackBean); + DdlPreparedPack.getIsNotNull("prtVehicleCount", part1PtrPackBean); + DdlPreparedPack.getIsNull("endTime", part1PtrPackBean); + List partPtrList1 = partPtrRao.findByHqlWhere(part1PtrPackBean); + partPtrList.addAll(partPtrList1); + + partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) + .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) + .collect(Collectors.toList()); + /** + * 有开始时间 和 无结束时间 和 无需要的数量 + */ + + DdlPackBean part2PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part2PtrPackBean); + DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part2PtrPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", part2PtrPackBean); + DdlPreparedPack.getIsNull("prtVehicleCount", part2PtrPackBean); + DdlPreparedPack.getIsNull("endTime", part2PtrPackBean); + List partPtrList2 = partPtrRao.findByHqlWhere(part2PtrPackBean); + partPtrList.addAll(partPtrList2); + return partPtrList; + } + //根据排序信息PTR零件号 获取 ptr信息 + private List getCustPartPtrList(List ptrInfoList,String organizeCode){ + DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); + return partPtrRao.findByHqlWhere(partPtrPackBean); + + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java new file mode 100644 index 0000000..556b1ef --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -0,0 +1,488 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + + +import cn.estsh.i3plus.ext.mes.api.busi.IMesEarlyWarningService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; +import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.lang.reflect.InvocationTargetException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { + + @Autowired + private MesEarlyWarningKanBanRepository earlyWarningKanBanRao; + + @Autowired + private MesCimGmGepicsRepository cimGmGepicsRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Autowired + private MesWorkOrderRepository workOrderRao; + + @Autowired + private EntityManager entityManager; + + @Autowired + private MesEarlyWarningRecordRepository earlyWarningRecordRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private MesEarlyWarningScreenRepository screenRao; + @Override + public List getEarlyWarningList(String organizeCode) { + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + return earlyWarningKanBanRao.findByHqlWhere(ddlPackBean); + } + + @Override + public void saveEarlyWarning(MesEarlyWarningKanBanModel model) { + MesEarlyWarningKanBan kanBan = new MesEarlyWarningKanBan(); + try { + BeanUtils.copyProperties(kanBan,model); + } catch (IllegalAccessException | InvocationTargetException e) { + log.error(e.getMessage()); + MesException.throwMesBusiException("类型转换出错!"+e.getMessage()); + } + ConvertBean.saveOrUpdate(kanBan,model.getCreateUser()); + earlyWarningKanBanRao.insert(kanBan); + + } + + @Override + public void updateEarlyWarning(MesEarlyWarningKanBan earlyWarning) { + ConvertBean.saveOrUpdate(earlyWarning,earlyWarning.getCreateUser()); + earlyWarningKanBanRao.insert(earlyWarning); + + } + + @Override + public void deleteEarlyWarning(Long id, String organizeCode,String userName) { + earlyWarningKanBanRao.deleteWeaklyByProperties(new String[]{"id","organizeCode"},new Object[]{id,organizeCode},userName); + } + + @Override + public MesEarlyWarningKanBan getKanbanData(Long id,String organizeCode) { + List list = earlyWarningKanBanRao.findByProperty(new String[]{"id", "organizeCode"}, new Object[]{id, organizeCode}); + if (!list.isEmpty()){ + return list.get(0); + } + return new MesEarlyWarningKanBan(); + } + + @Override + public MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException { + DdlPackBean earlyWarningKanBanPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id, "id", earlyWarningKanBanPackBean); + List list = earlyWarningKanBanRao.findByHqlTopWhere(earlyWarningKanBanPackBean, 1); + if (list.isEmpty()) { + return new MesKanBanShowModel(); + } + + MesEarlyWarningKanBan kanBan = list.get(0); + String jacInfoPoint = kanBan.getJacInfoPoint(); + int custOnlineInfo = kanBan.getCustOnlineInfo(); + String workCenterCode = kanBan.getWorkCenterCode(); + String workCellCode = kanBan.getWorkCellCode(); + //1.获取最近的20条v107信息 + List gmGepicsList = getlastDataList(1, jacInfoPoint, organizeCode, 20); + //2.获取最新的一条报文信息,取gmGepicsList的第一条 + MesCimGmGepics lastCimGmGepics = gmGepicsList.get(0); + //3.获取最新客户上线的报文 + List gmGepicsListOne = getlastDataList(custOnlineInfo, jacInfoPoint, organizeCode, 1); + MesCimGmGepics lastOne = !gmGepicsListOne.isEmpty() ?gmGepicsListOne.get(0) : null; + if (lastOne==null){ + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + mesKanBanShowModel.setWorkOrderCenter(kanBan.getWorkCenterCode()); + return mesKanBanShowModel; + } + //4.获取最新工位单号 获取工单的产线和工位的最新的工单 + MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); + //5.获取最新下线工单 + MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); + if (lastWorkOrder == null && lastOfflineOrder != null){ + lastWorkOrder = lastOfflineOrder; + } + //6.查询报警产量 & 获取开班起始时间 + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String date = sdf.format(now); + String tempStartDatetime = date + " " + kanBan.getShiftStartTime() + ":00"; + Date shiftStartTime = sdf1.parse(tempStartDatetime); + //如果小于当前时间,显示前一天的统计 + Calendar calendar = Calendar.getInstance(); + if (now.before(shiftStartTime)) { + calendar.setTime(now); + calendar.add(Calendar.DATE, -1); + } else { + calendar.setTime(shiftStartTime); + } + String realEndTime = sdf1.format(calendar.getTime()); + //7.根据条件获取工单的数量 + Integer workCounts = getWorkCounts(realEndTime, organizeCode, workCenterCode); + + //8.查询报警产量 + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(now); + + int productCount = kanBan.getProductCount(); + int productDay = kanBan.getProductDay(); + calendar1.add(Calendar.DATE,-productDay); +// List vehicleNoList = getCLWarning(sdf1.format(calendar1.getTime()), productCount,organizeCode); + List vehicleNoList = new ArrayList<>(); + //9.汇总数据 + return doGetSGMData(kanBan, gmGepicsList, lastCimGmGepics, lastOne, lastWorkOrder, lastOfflineOrder, workCounts, vehicleNoList); + } + + @Override + public void savePicture(KanBanPictureModel model) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getOrderBy("createDatetime",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); + List screenList = screenRao.findByHqlWhere(ddlPackBean); + if (!screenList.isEmpty()) { + //5分钟内只记录一次,防止前端不断刷数据 + MesEarlyWarningScreen mesEarlyWarningScreen = screenList.get(0); + try { + Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(mesEarlyWarningScreen.getCreateDatetime()); + Calendar dateC = Calendar.getInstance(); + dateC.setTime(date); + dateC.add(Calendar.MINUTE,5); + Calendar now = Calendar.getInstance(); + now.setTime(new Date()); + if (dateC.before(now)){ + return; + } + } catch (ParseException e) { + } + + } + MesEarlyWarningScreen mesEarlyWarningScreen = new MesEarlyWarningScreen(); + mesEarlyWarningScreen.setPicture(model.getPicture()); + if (model.getId() != null){ + mesEarlyWarningScreen.setRecordId(model.getId().toString()); + } + mesEarlyWarningScreen.setOrganizeCode(model.getOrganizeCode()); + ConvertBean.saveOrUpdate(mesEarlyWarningScreen, AuthUtil.getSessionUser().getUserName()); + screenRao.insert(mesEarlyWarningScreen); + } + + /** + * 获取最新20条数据 + * @param type + * @param gaRule 信息点 + * @return + */ + private List getlastDataList(int type, String gaRule,String organizeCode,Integer count){ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(type,"type",ddlPackBean); + if (!StringUtils.isEmpty(gaRule)){ + DdlPreparedPack.getStringEqualPack(gaRule,"gaRule",ddlPackBean); + } + DdlPreparedPack.getStringEqualPack(organizeCode,"organizeCode",ddlPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue(),CommonEnumUtil.ASC_OR_DESC.DESC.getValue()},new String[]{"createDatetime","rowNo"},ddlPackBean); + return cimGmGepicsRao.findByHqlTopWhere(ddlPackBean,count); + } + + /** + * 根据产线工位 查询最新的工单 + * 工单status 不是 40已关闭,90已拆解 状态 + * sort_flag 不是 E X 单 + * @param workCenterCode + * @param workCellCode + * @param organizeCode + * @return + */ + private MesWorkOrder getLastWorkOrder(String workCenterCode,String workCellCode,String organizeCode){ + //工单status 不是 40已关闭,90已拆解 状态 + //工单sort_flag 不是 E X单 + //工单order_type 类型为 排序单类型 + //工单 cust_order_code 不为空 + //工单 的id in装配件清单表中 工位等于@workCellCode 且 status = 1 + //工单 productSeq = work_order表中最大的排序信息 【work_order 的id in (装配件清单表中 工位等于@workCellCode 且 status = 1 已经装配) 产线=,order_type = 排序单,sort_flag 不为 x ,E;status not in 入参1,入参2,cust_order_code不为空】 + + // workOrderAssembly +// DdlPackBean assemblyPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",assemblyPackBean); +// DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",assemblyPackBean); +// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(),"assemblyStatus",assemblyPackBean); +// List mesWorkOrderAssemblyList = workOrderAssemblyRao.findByHqlWhere(assemblyPackBean); +// //todo 有内存溢出风险 调试一下,写hql按照分组查询出workOrderNoList +// List workOrderNoList = mesWorkOrderAssemblyList.stream().map(MesWorkOrderAssembly::getWorkOrderNo).distinct().collect(Collectors.toList()); + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); + + List orderFlagList = new ArrayList<>(); + orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()); + orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + DdlPackBean queueOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",queueOrderPackBean); + DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",queueOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue(),"status",queueOrderPackBean); + DdlPreparedPack.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean); + DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), queueOrderPackBean); + //先查对列表,找到对应产线工位的工单 + List queueOrderList = queueOrderRao.findByHqlTopWhere(queueOrderPackBean,1); + //过滤掉关闭和拆解的工单 + List orderStatusList1 = new ArrayList<>(); + orderStatusList1.add(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + orderStatusList1.add(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); + DdlPreparedPack.getInPackList(orderStatusList1,"workOrderStatus",orderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), orderPackBean); + List workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); + return !workOrderList.isEmpty() ? workOrderList.get(0) : null; + } + + private MesWorkOrder getLastOfflineOrder(String workCenterCode,String organizeCode){ + + List sortFlagList = new ArrayList<>(); + sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()); + sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); + DdlPreparedPack.getNotInPack(sortFlagList,"orderFlag",workOrderPackBean); + DdlPreparedPack.getStringNotBlanklPack("custOrderNo",workOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), workOrderPackBean); + List mesWorkOrders = workOrderRao.findByHqlTopWhere(workOrderPackBean, 1); + return mesWorkOrders.get(0); + } + + private Integer getWorkCounts(String realEndTime,String organizeCode,String workCenterCode){ + DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); + DdlPreparedPack.getStringBiggerPack(realEndTime,"offlineTime",workOrderPackBean); + DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue(),"orderFlag",workOrderPackBean); + + return workOrderRao.findByHqlWhereCount(workOrderPackBean); + } + + //报警产量 + private List getCLWarning(String date, int qty,String organizeCode) { + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); + + StringBuilder hql = new StringBuilder(); + hql.append(" select carModelCode from MesWorkOrder"); + hql.append(" where organizeCode = :organizeCode"); + hql.append(" and createDatetime <= :createDatetime"); + hql.append(" and workOrderStatus in (:workOrderStatus)"); + hql.append(" and orderFlag != :sortFlag"); + hql.append(" group by carModelCode "); + hql.append(" having count(carModelCode) <= :qty"); + Query query = entityManager.createQuery(hql.toString()); + query.setParameter("workOrderStatus",orderStatusList); + query.setParameter("organizeCode",organizeCode); + query.setParameter("createDatetime", date); + query.setParameter("qty", (long)qty); + query.setParameter("sortFlag", MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + return (List)query.getResultList(); + } + + //汇总数据 + + /** + * + * @param infoV107List 报文信息 + * @param infoDD 最新报文信息 + * @param infoKH 最新客户上线信息 + * @param workOrder 最新工单 + * @param workOrderLast 最新下线工单 + * @param workCount 工单数量 + * @param vehicleNoList 报警 + */ + private MesKanBanShowModel doGetSGMData(MesEarlyWarningKanBan kanBan,List infoV107List,MesCimGmGepics infoDD, MesCimGmGepics infoKH, MesWorkOrder workOrder,MesWorkOrder workOrderLast,int workCount,List vehicleNoList) throws ParseException { + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + //是否截图 + boolean shortCut = false; + if (infoV107List.isEmpty()){ + return mesKanBanShowModel; + } + StringBuilder errorMsg = new StringBuilder(); + for (int i = 0; i < infoV107List.size()-1; i++) { + int preCsnNo = Integer.parseInt(infoV107List.get(i+1).getCsnNo().substring(3,10)); + int curCsnNo = Integer.parseInt(infoV107List.get(i).getCsnNo().substring(3,10)); + if (curCsnNo != preCsnNo+1){ + //需要保留截图 + //需要发声音 + //需要发送记录信息 当前csnNo进行了跳号 + errorMsg.append(String.format("当前CsnNo:%d进行了跳号;\n",curCsnNo)); + } + } + if (errorMsg.length()>0){ + shortCut = true; + mesKanBanShowModel.setVoice("跳号的声音"); + } + mesKanBanShowModel.setErrorMsg(errorMsg.toString()); + + if (infoDD == null){ + return mesKanBanShowModel; + } + if (infoKH == null){ + return mesKanBanShowModel; + } + if (workOrder == null){ + return mesKanBanShowModel; + } + if (workOrderLast == null){ + return mesKanBanShowModel; + } + //据上次获取v107信息的时间 + String matchTime = infoDD.getCreateDatetime(); + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime match = LocalDateTime.parse(matchTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + long minutes = Duration.between(match,now).toMinutes(); + mesKanBanShowModel.setMinutes(minutes); + + //最新v107信息 + String v107Msg = infoDD.getCsnNo() + "@" + infoDD.getDate() + " " + infoDD.getTime(); + mesKanBanShowModel.setV107Msg(v107Msg); + //最新客户上线信息 + String infoKHCsnNo = infoKH.getCsnNo() + "@" + infoKH.getDate() + " " + infoKH.getTime(); + mesKanBanShowModel.setInfoKHCsnNo(infoKHCsnNo); + //生产线 + String workOrderCenter = kanBan.getWorkCenterName() +" " + kanBan.getWorkCenterDescription(); + mesKanBanShowModel.setWorkOrderCenter(workOrderCenter); + //供货缓冲 >= + Long supplyRedBuffer = kanBan.getSupplyRedBuffer(); + Long supplyYellowBuffer = kanBan.getSupplyYellowBuffer(); + mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); + //供货缓冲实际 + Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); + mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer); + if (realSupplyBuffer < supplyRedBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("red"); + mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); + }else if (realSupplyBuffer < supplyYellowBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("yellow"); + mesKanBanShowModel.setSupplyRedBuffer(supplyYellowBuffer); + } + //线头积单 + Long summaryWorkOrderRedCount = kanBan.getSummaryWorkOrderRedCount(); + mesKanBanShowModel.setSummaryWorkOrderRedCount(summaryWorkOrderRedCount); + //线头实际积单 + long summaryRealSupplyRealCount; + String custOrderNo = workOrder.getCustOrderNo(); + if(custOrderNo.length() >= 10){ + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrder.getCustOrderNo().length() - 7)); + }else { + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)); + } + if(summaryRealSupplyRealCount < 0){ + summaryRealSupplyRealCount = 0; + } + mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + Long summaryWorkOrderYellowCount = kanBan.getSummaryWorkOrderYellowCount(); + if (summaryRealSupplyRealCount > summaryWorkOrderRedCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("red"); + }else if (summaryRealSupplyRealCount > summaryWorkOrderYellowCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("yellow"); + } + + //成品缓冲 + Long productionRedBuffer =kanBan.getProductionRedBuffer(); + mesKanBanShowModel.setProductionRedBuffer(productionRedBuffer); + //成品实际缓冲 + Long realProductionBuffer; + if (workOrderLast.getCustOrderNo().length() >= 10){ + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) - kanBan.getOnlineAdjustNum() ; + }else { + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) - kanBan.getOnlineAdjustNum() ; + + } + if(realProductionBuffer <0){ + realProductionBuffer = 0L; + } + mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); + Long productionYellowBuffer = kanBan.getProductionYellowBuffer(); + if (realProductionBuffer < productionRedBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("RED"); + }else if (realProductionBuffer < productionYellowBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("YELLOW"); + } + //声音信息 + //private String voice; + //错误信息 + //private String errorMsg; + //截图地址 + String saveUrl = kanBan.getPictureUrl(); + mesKanBanShowModel.setShortCut(shortCut); + mesKanBanShowModel.setSaveUrl(saveUrl); + + if (kanBan.getRecord().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())){ + MesEarlyWarningRecord record = new MesEarlyWarningRecord(); + //供货缓冲实际值 + record.setRealSupplyBuffer(realSupplyBuffer); + //实际积累 + record.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + //成品缓冲 + record.setRealProductionBuffer(realProductionBuffer); + // 告警数量 + record.setWorkOrderCount((long)workCount); + record.setWorkCenterCode(workOrderCenter); + record.setGaNo(infoDD.getCsnNo()); + record.setLastGaNo(infoKH.getCsnNo()); + record.setRemark(kanBan.getId().toString()); + ConvertBean.saveOrUpdate(record,"kanban"); + earlyWarningRecordRao.insert(record); + mesKanBanShowModel.setRecordId(record.getId()); + } + mesKanBanShowModel.setTotalCount((long)workCount); + return mesKanBanShowModel; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java new file mode 100644 index 0000000..020a6c5 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesOfflineServiceImpl.java @@ -0,0 +1,110 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartService; +import cn.estsh.i3plus.ext.mes.api.busi.IMesOfflineService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartProdGroupDetailService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartProdGroupService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.MesPartPullDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPartPullRepository; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class MesOfflineServiceImpl implements IMesOfflineService { + + @Autowired + private MesSortRuleCfgOfflineServiceImpl cfgOfflineService; + + + @Autowired + private MesPartProdGroupService partProdGroupService; + + @Autowired + private MesPartProdGroupDetailService partProdGroupDetailService; + + @Autowired + private MesPartPullRepository partPullRao; + + @Autowired + private MesPartPullDetailRepository partPullDetailRao; + + @Override + public void doCreateSortRuleCfgOfflineData(String organizeCode,List groupCodeList) { + //清空表 + cfgOfflineService.deleteSortRuleOffline(organizeCode); + //2.查询零件生产组 + List partProdGroupList = partProdGroupService.findMesPartProdGroups(organizeCode,groupCodeList); + for (MesPartProdGroup mesPartProdGroup : partProdGroupList) { + String partProdGroupCode = mesPartProdGroup.getPartProdGroupCode(); + DdlPackBean detailPartProdDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroupCode,"partProdGroupCode",detailPartProdDetailPackBean); + List detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); + //3.根据客户零件表中的erp零件,是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 + for (MesPartProdGroupDetail detail : detailList) { + String erpPartNo = detail.getPartNo(); + String productPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? erpPartNo : detail.getProductPartNo(); + cfgOfflineService.doCreateSortRuleOffline(detail.getCustPartNo(), erpPartNo,productPartNo,organizeCode,mesPartProdGroup,detail); + } + } + + //4.总成零件号打散bom + + //5.打散的bom 获取排序加工规则 + + //6.装配件获取的三种条件 + + //7.保存到离线表中 + + } + + @Override + public void doCreatePullOrderOfflineData(String organizeCode, List pullCodeList,List partProdCodeList) { + //拉动组和生产零件都是按照产线配置的 一对一 + //清空表 + cfgOfflineService.deletePullOffline(organizeCode); + cfgOfflineService.deletePullDetailOffline(organizeCode); + //2.查询零件生产组 + List partProdGroupList = partProdGroupService.findMesPartProdGroups(organizeCode,partProdCodeList); + //3.获取拉动组 + DdlPackBean partPullPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(pullCodeList,"pullCode",partPullPackBean); + List mesPartPullList = partPullRao.findByHqlWhere(partPullPackBean); + Map partPullMap = mesPartPullList.stream().collect(Collectors.toMap(MesPartPull::getWorkCenterCode, Function.identity())); + //4.获取拉动组的详情 + DdlPackBean partPullDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(pullCodeList,"pullCode",partPullDetailPackBean); + List mesPartPullDetailList = partPullDetailRao.findByHqlWhere(partPullDetailPackBean); + Map> detailMapList = mesPartPullDetailList.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPullCode)); + //5.遍历零件生产组 + for (MesPartProdGroup mesPartProdGroup : partProdGroupList) { + String partProdGroupCode = mesPartProdGroup.getPartProdGroupCode(); + DdlPackBean detailPartProdDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partProdGroupCode,"partProdGroupCode",detailPartProdDetailPackBean); + List detailList = partProdGroupDetailService.findAll(detailPartProdDetailPackBean); + //3.根据客户零件表中的erp零件,是总成零件号;遍历每个客户零件号生成sortRuleCfgOff表 + for (MesPartProdGroupDetail detail : detailList) { + String erpPartNo = detail.getPartNo(); + String productPartNo = StringUtils.isBlank(detail.getProductPartNo()) ? erpPartNo : detail.getProductPartNo(); + MesPartPull mesPartPull = partPullMap.get(mesPartProdGroup.getWorkCenterCode()); + List mesPartPullDetails = detailMapList.get(mesPartPull.getPullCode()); + if (mesPartPullDetails == null) { + continue; + } + cfgOfflineService.doCreatePullOffline(detail.getCustPartNo(), erpPartNo,productPartNo,organizeCode,mesPartProdGroup,detail,partPullMap.get(mesPartProdGroup.getWorkCenterCode()), mesPartPullDetails); + } + + + } + + + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java new file mode 100644 index 0000000..45647a5 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSortRuleCfgOfflineServiceImpl.java @@ -0,0 +1,481 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.api.busi.IMesSortRuleCfgOfflineService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesProdRuleSortCfgOffline; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesPullingOrderInfoOffline; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesPullingOrderPartInfoOffline; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesProdRuleSortCfgOfflineRepository; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesPullingOrderInfoOfflineRepository; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesPullingOrderPartInfoOfflineRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineService { + + @Autowired + private MesProdRuleSortCfgOfflineRepository cfgOfflineRao; + + @Autowired + private MesProductVersionRepository mesProductVersionRDao; + + @Autowired + private MesBomService mesBomService; + + @Autowired + private MesBomRepository bomRao; + + @Autowired + private MesPartSapRepository mesPartSapRao; + + @Autowired + private MesProdRuleSortCfgRepository mesProdRuleSortCfgRao; + + @Autowired + private MesCustomerPartRepository customerPartRao; + + @Autowired + private MesCustomerCarModelRepository carModelRao; + + @Autowired + private MesPullingOrderInfoOfflineRepository partPullOrderOfflineRao; + + @Autowired + private MesPullingOrderPartInfoOfflineRepository partPullOrderDetailOfflineRao; + + @Autowired + private MesPartSapRepository partSapRao; + + + + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void deleteSortRuleOffline(String organizeCode) { + cfgOfflineRao.deleteByProperty("organizeCode", organizeCode); + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void doCreateSortRuleOffline(String custPartNo, String erpPartNo, String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail) { + /** + * 校验 cfgOfflineRao表中是否已经存在了客户零件号,如果存在则跳过 + * 防止多个零件生产组生成相同的数据 + */ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custPartNo,"custPartNo",ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesPartProdGroup.getWorkCenterCode(),"workCenterCode",ddlPackBean); + int count = cfgOfflineRao.findByHqlWhereCount(ddlPackBean); + if (count > 0){ + return; + } + MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode); + //4.总成零件号打散bom + String bomVersion = mesProductVersion.getAlternativePartList(); + MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo); + if (bom == null) { + return; + } + //5.5 获取客户零件号对应的车型配置 + /** + * 客户零件号 对应的 erp零件号 不带z + */ + MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode); + if (mesCustomerPart == null) { + return; + } + //5.打散的bom 获取排序加工规则 + List workOrderPartList = dismantleBom(productPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); + //6.装配件获取的三种条件 + String custCode = mesCustomerPart.getCustCode(); + MesCustomerCarModel mesCustomerCarModel = getMesCustomerCarModel(custPartNo, organizeCode, custCode); + if (mesCustomerCarModel == null) { + return; + } + //5.6 获取零件信息 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo,"partNo", partPackBean); + List partSapList = partSapRao.findByHqlWhere(partPackBean); + + //7.获取车型 + // 客户车型配置 +// //4.查询车型配置中的车型编号就是客户零件号 custPartNo,custPlantCode,CustCode,Plant +// DdlPackBean carModelPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(custPartNo,"custPartNo",carModelPackBean); +// DdlPreparedPack.getStringEqualPack(organizeCode,"organizeCode",carModelPackBean); +// List carModels = carModelRao.findByHqlWhere(carModelPackBean); + + + String carModelCode = mesCustomerCarModel.getCarModelCode(); + List assemblyList = getAssemblyList(detail.getWorkCenterCode(), carModelCode, workOrderPartList, mesPartProdGroup); + //7.保存到离线表中 + for (MesWorkOrderAssembly orderAssembly : assemblyList) { + MesProdRuleSortCfgOffline cfgOffline = new MesProdRuleSortCfgOffline(); + BeanUtils.copyProperties(orderAssembly, cfgOffline); + if (partSapList != null) { + cfgOffline.setPartName(partSapList.get(0).getPartName()); + } + cfgOffline.setCustPartNo(custPartNo); + cfgOffline.setCustPartName(mesCustomerPart.getCustPartName()); + cfgOffline.setPartNo(productPartNo); + cfgOffline.setRemark(mesCustomerCarModel.getCarModelName()); + cfgOffline.setOrganizeCode(organizeCode); + ConvertBean.saveOrUpdate(cfgOffline, "OFFLINE-JOB"); + cfgOfflineRao.insert(cfgOffline); + } + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void deletePullOffline(String organizeCode) { + partPullOrderOfflineRao.deleteByProperty("organizeCode", organizeCode); + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + @Override + public void deletePullDetailOffline(String organizeCode) { + partPullOrderDetailOfflineRao.deleteByProperty("organizeCode", organizeCode); + } + + @Override + public void doCreatePullOffline(String custPartNo, String erpPartNo,String productPartNo, String organizeCode, MesPartProdGroup mesPartProdGroup, MesPartProdGroupDetail detail, MesPartPull partPull, List pullDetailList) { + MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode); + //4.总成零件号打散bom + String bomVersion = mesProductVersion.getAlternativePartList(); + MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo); + if (bom == null) { + return; + } + //5.5 获取客户零件号对应的车型配置 + MesCustomerPart mesCustomerPart = getMesCustomerPart(custPartNo, erpPartNo, organizeCode); + if (mesCustomerPart == null) { + return; + } + //5.6 获取零件信息 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productPartNo,"partNo", partPackBean); + List partSapList = partSapRao.findByHqlWhere(partPackBean); + + //5.打散的bom 获取排序加工规则 + List workOrderPartList = dismantleBom(productPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode()); + + //6.过滤出需要拉动的零件号 + List partPullDetailPartNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + Map orderPartMap = workOrderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); + List pullDetails = pullDetailList.stream().filter(item -> partPullDetailPartNoList.contains(item.getPartNo())).collect(Collectors.toList()); + //7.生成拉动主单模板 MesPullingOrderPartInfoOfflineRepository + MesPullingOrderInfoOffline mesPartPullOffline = new MesPullingOrderInfoOffline(); + if (partSapList != null) { + mesPartPullOffline.setPartName(partSapList.get(0).getPartName()); + } + mesPartPullOffline.setPullCode(partPull.getPullCode()); + mesPartPullOffline.setCustPartNo(custPartNo); + mesPartPullOffline.setPartNo(productPartNo); + mesPartPullOffline.setWorkCenterCode(partPull.getWorkCenterCode()); + mesPartPullOffline.setOrganizeCode(organizeCode); + ConvertBean.saveOrUpdate(mesPartPullOffline,"SPS-OFFLINE"); + partPullOrderOfflineRao.insert(mesPartPullOffline); + //8.生成拉动单详情 + for (MesPartPullDetail pullDetail : pullDetails) { + MesPullingOrderPartInfoOffline detailOffline = new MesPullingOrderPartInfoOffline(); + detailOffline.setPid(mesPartPullOffline.getId()); + detailOffline.setPullCode(partPull.getPullCode()); + detailOffline.setCustPartNo(custPartNo); + detailOffline.setAssPartNo(productPartNo); + detailOffline.setOrganizeCode(organizeCode); + detailOffline.setPartNo(pullDetail.getPartNo()); + detailOffline.setPartName(pullDetail.getPartName()); + detailOffline.setPullQty(orderPartMap.get(pullDetail.getPartNo()).getItemQty()); + detailOffline.setWorkOrderNo(partPull.getWorkCenterCode()); + detailOffline.setWorkCellCode(pullDetail.getWorkCellCode()); + detailOffline.setEquipment(pullDetail.getEquipment()); + detailOffline.setLocation(pullDetail.getPullAddr()); + if (pullDetail.getScanValidationType() != null && pullDetail.getScanValidationType() == 10) { + detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.WHITE.getCode()); + } else { + detailOffline.setColor(MesExtEnumUtil.PART_PULL_DETAIL_COLOR.RED.getCode()); + } + detailOffline.setCarSeries(pullDetail.getCarSeries()); + + ConvertBean.saveOrUpdate(detailOffline,"SPS-OFFLINE"); + partPullOrderDetailOfflineRao.insert(detailOffline); + } + } + + //客户零件号 + private MesCustomerPart getMesCustomerPart(String custPartNo, String erpPartNo, String organizeCode) { + DdlPackBean custPartPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", custPartPackBean); + DdlPreparedPack.getStringEqualPack(erpPartNo, "erpPartNo", custPartPackBean); + List customerPartList = customerPartRao.findByHqlTopWhere(custPartPackBean, 1); + if (!customerPartList.isEmpty()) { + return customerPartList.get(0); + } + return null; + } + + //获取车型配置 + private MesCustomerCarModel getMesCustomerCarModel(String custPartNo, String organizeCode, String custCode) { + DdlPackBean carModelPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(custPartNo, "custPartNo", carModelPackBean); + DdlPreparedPack.getStringEqualPack(custCode, "custCode", carModelPackBean); + DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", carModelPackBean); + List carModels = carModelRao.findByHqlTopWhere(carModelPackBean, 1); + if (carModels.isEmpty()) { + return null; + } + return carModels.get(0); + } + + //版本号 + private MesProductVersion getMesProductVersion(String partNo, String organizeCode) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + ddlPackBean.setOrderByStr(" order by createDatetime desc "); + List mesProductVersionList = mesProductVersionRDao.findByHqlTopWhere(ddlPackBean, 1); + if (Objects.isNull(mesProductVersionList) || mesProductVersionList.isEmpty()) { + MesException.throwMesBusiException("物料【%s】对应的生产版本信息不存在", partNo); + } + return mesProductVersionList.get(0); + } + + private List dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode) { + List orderPartList = new ArrayList<>(); + + //1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList + List bomList = getPlatBom(partNo, productTime, bomCode, organizeCode); + //2.根据bomList中的subPartNo 查询零件清单 partList + List partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList()); + + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", partPackBean); + List partSapList = mesPartSapRao.findByHqlWhere(partPackBean); + Map partMap = partSapList.stream().collect(Collectors.toMap(MesPartSap::getPartNo, Function.identity())); + + + for (MesBom bom : bomList) { + MesWorkOrderPart orderPart = new MesWorkOrderPart(); + MesPartSap partSap = partMap.get(bom.getItemPartNo()); + if (partSap == null) { + return new ArrayList<>(); + } + List orderParts = orderPartList.stream().filter(item -> item.getPartNo().equals(partSap.getPartNo())).collect(Collectors.toList()); + if (!orderParts.isEmpty()) { + MesWorkOrderPart tempPart = orderParts.get(0); + tempPart.setItemQty(tempPart.getItemQty() + bom.getItemQty() * qty); + continue; + } + orderPart.setPartName(partSap.getPartName()); + orderPart.setPartNo(partSap.getPartNo()); + orderPart.setItemQty(bom.getItemQty() * qty); + orderPart.setItemUnit(partSap.getUnit()); + orderPart.setSourceId(bom.getId()); + orderPart.setShippingPartNo(partSap.getPartNo()); + orderPart.setWorkCellCode(workCellCode); + orderPartList.add(orderPart); + } + //3.遍历bomList + return orderPartList; + } + + private List getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) { + if (bomCode == null) { + //首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode + DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean); + DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean); + List bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1); + if (bomList == null || bomList.isEmpty()) { + return new ArrayList<>(); + } + bomCode = bomList.get(0).getBomCode(); + } + List bomResultList = new ArrayList<>(); + DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean); + DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean); + DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean); + List bomList = bomRao.findByHqlWhere(bomPackBean); + + for (MesBom bom : bomList) { + if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) { + getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode); + } else { + bom.setBomCode(bom.getBomCode().toLowerCase()); + bomResultList.add(bom); + } + + } + + return bomResultList; + } + + private List getAssemblyList(String workCenterCode, String vehicleNo, List workOrderPartList, MesPartProdGroup mesPartProdGroup) { + //TM_BAS_WORK_ORDER_ASSEMBLY_SETTING 对应 mes_prod_rule_sort_cfg 排序生产规则 + List workOrderAssemblyList = new ArrayList<>(); + List partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); + DdlPackBean prodRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPackBean); + DdlPreparedPack.getInPackList(partNoList, "assemblyPartNo", prodRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List sortCfgList = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPackBean); + List sortCfgListFilter = sortCfgList.stream().filter(item -> partNoList.contains(item.getAssemblyPartNo())).collect(Collectors.toList()); + Map> orderPartMap = workOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //遍历排序生产规则 + for (MesProdRuleSortCfg sortCfg : sortCfgListFilter) { + List orderPartList = orderPartMap.get(sortCfg.getAssemblyPartNo()); + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); +// MesWorkOrderPart orderPart = orderPartList.get(0); + //1.逻辑储量程序sortCfg.isLogicNum + if ((sortCfg.getIsLogicNum() != null && sortCfg.getIsLogicNum() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) && (sortCfg.getLogicNum() != null && sortCfg.getLogicNum() > 0)) { + Double total = orderPartList.stream().map(MesWorkOrderPart::getItemQty).reduce(Double::sum).get(); + if (!total.equals(sortCfg.getLogicNum())) { + continue; + } + } + //2.当排序规则的车型不为空时,则需要与参数匹配,如果不符合 则不加这个装配项 + if (StringUtils.isNotBlank(sortCfg.getVehicleNo()) && !sortCfg.getVehicleNo().equals(vehicleNo)) { + continue; + } + orderAssembly.setAssemblyPartNo(sortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(sortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(sortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(sortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(sortCfg.getDisplayRule()); + orderAssembly.setMatchRule(sortCfg.getMatchRule()); + orderAssembly.setMatchType(sortCfg.getMatchType()); + orderAssembly.setPrintType(sortCfg.getPrintType()); + orderAssembly.setProcessCode(sortCfg.getProcessCode()); + orderAssembly.setDisplaySeq(sortCfg.getDisplaySeq()); + orderAssembly.setDisplayValue(sortCfg.getDisplayValue()); + orderAssembly.setProcessSeq(sortCfg.getProcessSeq()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); + orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); +// orderAssembly.setOrderPartId(orderPart.getId().toString()); + orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); + orderAssembly.setReportType(sortCfg.getReportType()); + if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(sortCfg.getReportPartNo()); + orderAssembly.setImageFileId(sortCfg.getImageFileId()); + orderAssembly.setCraftCode(sortCfg.getCraftCode()); + orderAssembly.setCraftName(sortCfg.getCraftName()); + orderAssembly.setPartTypeCode(sortCfg.getPartTypeCode()); + orderAssembly.setShowColor(sortCfg.getShowColor()); + orderAssembly.setProductPartNo(sortCfg.getProductPartNo()); + orderAssembly.setPid(sortCfg.getId()); + orderAssembly.setWorkCenterCode(workCenterCode); + workOrderAssemblyList.add(orderAssembly); + } + + //车型不为空的逻辑--用于报工 + DdlPackBean reportRuleSortPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", reportRuleSortPackBean); + DdlPreparedPack.getStringEqualPack(vehicleNo, "vehicleNo", reportRuleSortPackBean); + DdlPreparedPack.getNotInPack(partNoList, "assemblyPartNo", reportRuleSortPackBean); + //查询当前产线的所有排序生产规则--分为当前工单清单的装配件 + List prodCfgList = mesProdRuleSortCfgRao.findByHqlWhere(reportRuleSortPackBean); + for (MesProdRuleSortCfg ruleSortCfg : prodCfgList) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + //查询所有共用的零件 且没有零件号,多用于螺钉---查询排序加工规则 + DdlPackBean prodRuleSortPublicPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroup.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", prodRuleSortPublicPackBean); + DdlPreparedPack.getIsNull("assemblyPartNo", prodRuleSortPublicPackBean); + List ruleSortCfgs = mesProdRuleSortCfgRao.findByHqlWhere(prodRuleSortPublicPackBean); + for (MesProdRuleSortCfg ruleSortCfg : ruleSortCfgs) { + MesWorkOrderAssembly orderAssembly = new MesWorkOrderAssembly(); + orderAssembly.setAssemblyPartNo(ruleSortCfg.getAssemblyPartNo()); + orderAssembly.setAssemblyPartName(ruleSortCfg.getAssemblyPartName()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setWorkCenterCode(ruleSortCfg.getWorkCenterCode()); + orderAssembly.setDisplayRule(ruleSortCfg.getDisplayRule()); + orderAssembly.setMatchRule(ruleSortCfg.getMatchRule()); + orderAssembly.setMatchType(ruleSortCfg.getMatchType()); + orderAssembly.setPrintType(ruleSortCfg.getPrintType()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setWorkCellCode(ruleSortCfg.getWorkCellCode()); + orderAssembly.setProcessCode(ruleSortCfg.getProcessCode()); + orderAssembly.setProcessName(ruleSortCfg.getProcessName()); + orderAssembly.setCraftCode(ruleSortCfg.getCraftCode()); + orderAssembly.setRouteSeq(ruleSortCfg.getRouteSeq()); + orderAssembly.setEquipmentCode(ruleSortCfg.getEquipmentCode()); + orderAssembly.setReportType(ruleSortCfg.getReportType()); + if (ruleSortCfg.getReportType() != null && ruleSortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()) { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + orderAssembly.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + } + orderAssembly.setReportPartNo(ruleSortCfg.getReportPartNo()); + orderAssembly.setProcessSeq(ruleSortCfg.getProcessSeq()); + orderAssembly.setPid(ruleSortCfg.getId()); + orderAssembly.setImageFileId(ruleSortCfg.getImageFileId()); + orderAssembly.setPartTypeCode(ruleSortCfg.getPartTypeCode()); + orderAssembly.setMaxValue(ruleSortCfg.getMaxValue()); + orderAssembly.setMinValue(ruleSortCfg.getMinValue()); + orderAssembly.setProductPartNo(ruleSortCfg.getProductPartNo()); + workOrderAssemblyList.add(orderAssembly); + } + return workOrderAssemblyList; + } + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index cc7a093..59dea45 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesEquipmentSpotCheckService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderPartService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderResultService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; @@ -190,7 +191,9 @@ public class MesSpotCheckOrderService extends BaseMesService public MesSpotCheckOrder update(MesSpotCheckOrder bean) { onUpdateBean(bean); //获取点检单 - MesSpotCheckOrder originBean = baseRDao.getById(bean.getId()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(bean.getId(), "id", ddlPackBean); + MesSpotCheckOrder originBean = baseRDao.getByProperty(ddlPackBean); if (StringUtils.isEmpty(originBean)) { throw ImppExceptionBuilder.newInstance() @@ -318,9 +321,11 @@ public class MesSpotCheckOrderService extends BaseMesService @Override public void deleteWeaklyByIds(Long[] ids, String userName) { - + String organizeCode = AuthUtilExt.getOrganizeCode(); for (Long id : ids) { - MesSpotCheckOrder bean = baseRDao.getById(id); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id, "id", ddlPackBean); + MesSpotCheckOrder bean = baseRDao.getByProperty(ddlPackBean); if (StringUtils.isEmpty(bean)) continue; if (bean.getStatus() == MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.COMPLETE.getValue() && Objects.equals(bean.getSpotCheckOrderResult(), diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java index 21e8694..e9c4896 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/ProdExtOrgService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.api.busi.IProdExtOrgService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.dao.IEquipmentExtDao; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.api.iservice.base.IEnumService; @@ -191,7 +192,7 @@ public class ProdExtOrgService implements IProdExtOrgService { .build(); } workCell.setGrade(prodOrgModel.getGrade()); - insertWorkCellModule(workCell); + insertWorkCellModuleByCfg(workCell, workCell.getModifyUser()); return workCellRepository.insert(workCell); } return null; @@ -222,7 +223,9 @@ public class ProdExtOrgService implements IProdExtOrgService { public MesArea updateMesArea(MesArea mesArea) { //对id做有效性校验 - MesArea mesAreaDb = areaRepository.getById(mesArea.getId()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(AuthUtilExt.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesArea.getId(),"id",packBean); + MesArea mesAreaDb = areaRepository.getByProperty(packBean); if (mesAreaDb == null) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) @@ -403,7 +406,7 @@ public class ProdExtOrgService implements IProdExtOrgService { ConvertBean.serviceModelUpdate(workCell, AuthUtil.getSessionUser().getUserName()); - insertWorkCellModule(workCell); + insertWorkCellModuleByCfg(workCell, workCell.getModifyUser()); return workCellRepository.save(workCell); } @@ -592,7 +595,14 @@ public class ProdExtOrgService implements IProdExtOrgService { new Object[]{status, userName, TimeTool.getNowTime(true)}); } - private void insertWorkCellModule(MesWorkCell workCell) { + @Override + public void insertWorkCellModuleByCfg(String organizeCode, String id) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(id)) return; + insertWorkCellModuleByCfg(workCellRepository.getById(Long.valueOf(id)), "系统"); + } + + private void insertWorkCellModuleByCfg(MesWorkCell workCell, String userInfo) { + if (null == workCell) return; if (StringUtils.isEmpty(workCell.getGrade()) || workCell.getGrade().compareTo(MesExtEnumUtil.WORK_CELL_GRADE.SCAN.getValue()) != 0) return; List workCellModuleList = getWorkCellModuleButtonList(workCell.getOrganizeCode(), workCell.getWorkCenterCode(), workCell.getWorkCellCode()); if (!CollectionUtils.isEmpty(workCellModuleList)) return; @@ -603,6 +613,7 @@ public class ProdExtOrgService implements IProdExtOrgService { MesWorkCellModule workCellModule = new MesWorkCellModule(); BeanUtils.copyProperties(workCell, workCellModule, MesExtConstWords.ID); workCellModule.setModuleCode(workModule.getModuleCode()); + ConvertBean.serviceModelInitialize(workCellModule, userInfo); workCellModuleRepository.insert(workCellModule); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java new file mode 100644 index 0000000..18bfb71 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java @@ -0,0 +1,25 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print; + +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; + +/** + * @Description : 根据不同的条码,封装不同的数据来源 content 是打印模板,dataList + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/6 16:39 + * @Modify: + **/ +public interface IPrintTemplateStrategyService { + + /** + * GenSerialNoModel 生成条码的规则 + * mesProduceSnPrintModel 需要的数据 + * @param model + * @param mesProduceSnPrintModel + * @return + */ + MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule); + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java new file mode 100644 index 0000000..8d85ef2 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -0,0 +1,108 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.strategy; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 装配目视单标签打印 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/17 16:43 + * @Modify: + **/ +@Component +@Slf4j +public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategyService { + + @Override + public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, MesNumberRule numberRule) { + + Map modelMap = (Map) model.getSourceData(); + + // 工单信息 + MesWorkOrder workOrder = (MesWorkOrder) modelMap.get("mesWorkOrder"); + // 零件生产组信息 + MesPartProdGroup partProdGroup = (MesPartProdGroup) modelMap.get("mesPartProdGroup"); + // 客户车型配置信息 + MesCustomerCarModel customerCarModel = modelMap.containsKey("mesCustomerCarModel") ? (MesCustomerCarModel) modelMap.get("mesCustomerCarModel") : null; + // 工单装配件信息 + List workOrderAssemblyList = modelMap.containsKey("mesWorkOrderAssemblyList") ? (List) modelMap.get("mesWorkOrderAssemblyList") : new ArrayList<>(); + workOrderAssemblyList = CollectionUtils.isEmpty(workOrderAssemblyList) ? new ArrayList<>() : workOrderAssemblyList.stream().filter(o -> o.getDisplaySeq() != null && o.getDisplaySeq() != 0).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(workOrderAssemblyList)) workOrderAssemblyList.sort(Comparator.comparing(MesWorkOrderAssembly::getDisplaySeq)); + // 返回的结果集合 + List> printDataMapList = new ArrayList<>(); + // 单个标签参数值 + Map resultMap = new HashMap<>(); + // 工单号 + resultMap.put(MesExtConstWords.WORK_ORDER_NO, workOrder.getWorkOrderNo()); + // 产线名称 + resultMap.put(MesExtConstWords.WORK_CENTER_NAME, workOrder.getWorkCenterName()); + // 车型名称 + resultMap.put(MesExtConstWords.CAR_MODEL_NAME, customerCarModel == null ? "" : customerCarModel.getCarModelName()); + // vinCode + resultMap.put(MesExtConstWords.VIN_CODE, workOrder.getVinCode()); + // vinCode 后四位 + resultMap.put(MesExtConstWords.VIN_CODE_AFTER_FOUR, workOrder.getVinCode()); + // 总成零件号 + resultMap.put(MesExtConstWords.PART_NO, workOrder.getPartNo()); + // 工单标识 + resultMap.put(MesExtConstWords.ORDER_FLAG, workOrder.getOrderFlag().equals(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()) ? MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue() : workOrder.getOrderFlag()); + // 客户订单号 + resultMap.put(MesExtConstWords.CUST_ORDER_NO, workOrder.getCustOrderNo()); + // 客户零件号 + resultMap.put(MesExtConstWords.CUST_PART_NO, workOrder.getPartNo()); + // 客户条码 + resultMap.put(MesExtConstWords.SN, workOrder.getCustSn()); + // 备注 + resultMap.put(MesExtConstWords.REMARK, workOrder.getDescription()); + // 重打印 + resultMap.put(MesExtConstWords.REPRINT, "重打印"); + // 打印时间 + resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss")); + // EDI接口时间 取工单plan_start_time + resultMap.put(MesExtConstWords.EDI_REC_TIME, workOrder.getPlanStartTime()); + + //替换总成SN + resultMap.put(MesExtConstWords.REPLACE_CSN,MesExtConstWords.CP+workOrder.getCustPartNo().substring(workOrder.getCustPartNo().length() -4)); + + // 总个数 + Integer totalCount = partProdGroup.getTotalCount(); + // 为空时显示内容 + String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); + for (Integer index = 0; index < totalCount; index++) { + String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(index).getDisplayValue(); + + resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? StringUtils.isEmpty(isNullViewContent) ? "" : null : displayValue); + } + + printDataMapList.add(resultMap); + + model.setPrintContextList(packResultMapList(model, printDataMapList)); + + return model; + } + + private List> packResultMapList(MesProduceSnPrintModel printModel, List> printTemplateDateList) { + List> resultMapList = new ArrayList<>(); + Map resultMap = new HashMap<>(); + resultMap.put(MesExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesExtConstWords.TEMPLATE_DATA, printTemplateDateList); + resultMap.put(MesExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesExtConstWords.PRINTER, printModel.getPrinter()); + resultMapList.add(resultMap); + return resultMapList; + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java new file mode 100644 index 0000000..38147d2 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/CutWorkOrderNoPrintStrategy.java @@ -0,0 +1,206 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.strategy; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 裁片工单标签打印 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/17 16:43 + * @Modify: + **/ +@Component +@Slf4j +public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyService { + + @Autowired + private MesCutSchemeFgRepository cutSchemeFgRepository; + + @Autowired + private MesCutSchemeMaterialRepository cutSchemeMaterialRepository; + + @Autowired + private MesCutSchemeEquipmentRepository cutSchemeEquipmentRepository; + + @Autowired + private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository; + + public static final int EQUIP_NUM = 1; + public static final int EQUIP_PARAM_TITLE_NUM = 4; + + @Override + public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, + MesProduceSnPrintModel model, + MesNumberRule numberRule) { + + List workOrderCutList = (List)model.getSourceData(); + List> printDataMapList = new ArrayList<>(); + + // 裁片方案代码集合 + List cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); + + + + Map> cutSchemeFgMapByCutCode = getCutSchemeFgMapByCutCode(cutCodeList,model.getOrganizeCode()); + + List cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList, model.getOrganizeCode()); + //根据裁片方案代码对裁片方案原材料分组 + Map> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode)); + + List cutSchemeEquipmentList = getMesCutSchemeEquipments(model, cutCodeList); + + cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList()); + + // 根据裁片方案代码对裁片设备信息分组 + Map> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? null : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode)); + + List cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList); + + Map> cutSchemeEquipmentDetailMapByPid = CollectionUtils.isEmpty(cutSchemeEquipmentDetailList) ? null : cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid)); + + for (MesWorkOrderCut workOrderCut : workOrderCutList) { + + List mesCutSchemeFgList = cutSchemeFgMapByCutCode.get(workOrderCut.getCutCode()); + + List mesCutSchemeMaterialList = cutSchemeMaterialMapByCutCode.get(workOrderCut.getCutCode()); + + MesCutSchemeMaterial cutSchemeMaterial = mesCutSchemeMaterialList.get(0); + + List cutSchemeEquipmentListByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentMapByCutCode) ? null : cutSchemeEquipmentMapByCutCode.get(workOrderCut.getCutCode()); + + if (!CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode)) cutSchemeEquipmentListByCutCode.sort(Comparator.comparing(MesCutSchemeEquipment::getSeq)); + + Map resultMap = new HashMap<>(); + + resultMap.put(MesExtConstWords.CUT_WORK_ORDER_NO, workOrderCut.getCutWorkOrderNo()); + resultMap.put(MesExtConstWords.CUT_NAME, workOrderCut.getCutName()); + // 原材料零件号 + resultMap.put(MesExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo()); + + // 拉料信息 START + resultMap.put(MesExtConstWords.PULLING_MATERIAL_LENGTH, getValByDouble(cutSchemeMaterial.getPullingMaterialLength())); + resultMap.put(MesExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPullingMaterialLayerNumber())); + resultMap.put(MesExtConstWords.PER_LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getPerLayerNumber())); + resultMap.put(MesExtConstWords.MATERIAL_DOSAGE, getValByDouble(cutSchemeMaterial.getMaterialDosage())); + resultMap.put(MesExtConstWords.USING_LENGTH, getValByDouble(cutSchemeMaterial.getUsingLength())); + resultMap.put(MesExtConstWords.LAYER_NUMBER, getValByDouble(cutSchemeMaterial.getLayerNumber())); + resultMap.put(MesExtConstWords.TENSION_PARAM, getValByDouble(cutSchemeMaterial.getTensionParam())); + resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyy-M-d H:mm:ss")); + // 拉料信息 END + + MesCutSchemeEquipment mesCutSchemeEquipment = CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode) ? null : cutSchemeEquipmentListByCutCode.get(0); + + List cutSchemeEquipmentDetails = mesCutSchemeEquipment == null || CollectionUtils.isEmpty(cutSchemeEquipmentDetailMapByPid) ? new ArrayList<>() : cutSchemeEquipmentDetailMapByPid.get(mesCutSchemeEquipment.getId()); + + for (int i = 0; i < EQUIP_NUM; i++) { + //设备参数值标题 + resultMap.put(MesExtConstWords.EQUIPMENT_NAME+(i+1), mesCutSchemeEquipment == null ? "" : mesCutSchemeEquipment.getEquipmentName()); + for (int l = 0; l < EQUIP_PARAM_TITLE_NUM; l++) { + if (cutSchemeEquipmentDetails.size() > l) { + //设备参数值标题1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), cutSchemeEquipmentDetails.get(l).getName()); + //设备参数值1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+(l+1), cutSchemeEquipmentDetails.get(l).getValue()); + } else { + //设备参数值标题1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+(l+1), ""); + //设备参数值1 + resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+(l+1), ""); + } + } + } + + String partValue = ""; + if (!CollectionUtils.isEmpty(mesCutSchemeFgList)) { + BigDecimal[] bigDecimals = divideAndRemainder(mesCutSchemeFgList.get(0).getQty(), mesCutSchemeFgList.get(0).getPackageQty()); + BigDecimal remainder = bigDecimals[1]; + Double boxQty = remainder.doubleValue() > 0 ? bigDecimals[0].add(new BigDecimal("1")).doubleValue() : bigDecimals[0].doubleValue(); + partValue = mesCutSchemeFgList.get(0).getPartNo() + " " + boxQty.intValue() +"箱"; + } + + //产品信息 + resultMap.put(MesExtConstWords.FG_PART_NO, partValue); + + printDataMapList.add(resultMap); + + } + + model.setPrintContextList(packResultMapList(model, printDataMapList)); + + return model; + } + + private String getValByDouble(Double val) { + return val == null ? "" : val.toString(); + } + + private Map> getCutSchemeFgMapByCutCode(List cutCodeList,String organizeCode) { + List cutSchemeFgList = getMesCutSchemeFgs(cutCodeList,organizeCode); + + //根据裁片方案代码对裁片方案成品明细分组 + return cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode)); + } + + private BigDecimal[] divideAndRemainder(Double qty, Double packageQty) { + BigDecimal dividend = new BigDecimal(qty.toString()); + BigDecimal divisor = new BigDecimal(packageQty.toString()); + return dividend.divideAndRemainder(divisor); + } + + private List getMesCutSchemeEquipmentDetails(MesProduceSnPrintModel model, List cutSchemeEquipmentList) { + if (!CollectionUtils.isEmpty(cutSchemeEquipmentList)) { + List idList = cutSchemeEquipmentList.stream().map(MesCutSchemeEquipment::getId).collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getInPackList(idList, MesExtConstWords.PID, packBean); + return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean); + } + return null; + } + + private List getMesCutSchemeEquipments(MesProduceSnPrintModel model, List cutCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeEquipmentRepository.findByHqlWhere(packBean); + } + + private List getMesCutSchemeMaterials(List cutCodeList,String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeMaterialRepository.findByHqlWhere(packBean); + } + + private List getMesCutSchemeFgs(List cutCodeList,String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean); + return cutSchemeFgRepository.findByHqlWhere(packBean); + } + + private List> packResultMapList(MesProduceSnPrintModel printModel, List> printTemplateDateList) { + List> resultMapList = new ArrayList<>(); + Map resultMap = new HashMap<>(); + resultMap.put(MesExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesExtConstWords.TEMPLATE_DATA, printTemplateDateList); + resultMap.put(MesExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesExtConstWords.PRINTER, printModel.getPrinter()); + resultMapList.add(resultMap); + return resultMapList; + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java new file mode 100644 index 0000000..f22c32c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/AssemblyPartReportServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IAssemblyPartReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IAssemblyPartReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.AssemblyPartReportModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 装配件查询 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 10:20 + * @Modify: + **/ +@Service +@Slf4j +public class AssemblyPartReportServiceImpl implements IAssemblyPartReportService { + + @Autowired + private IAssemblyPartReportDao assemblyPartReportDao; + + @Override + public ListPager queryReport(AssemblyPartReportModel model, Pager pager) { + return assemblyPartReportDao.queryReport(model,pager); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index b323582..228447d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -23,6 +23,8 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralExportReportModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesGeneralShippingReportModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportDataModel; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; import cn.estsh.i3plus.pojo.mes.repository.*; @@ -97,6 +99,10 @@ public class MesYfReportServiceImpl implements IMesYfReportService { @Autowired private MesProductionRecordRepository mesProductionRecordRepository; + + @Autowired + private MesCokpitKanbanDataRepository mesCokpitKanbanDataRepository; + @Override public ListPager queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) { ListPager mesDeviceDataQueryReportResultModelListPager = @@ -251,6 +257,34 @@ public class MesYfReportServiceImpl implements IMesYfReportService { return new ListPager<>(mesProductionRecordRepository.findByHqlWherePage(packBean, pager), pager); } + @Override + public ListPager queryMesCokpitKanbanData(MesCokpitKanbanData kanbanData, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(kanbanData.getOrganizeCode()); + DdlPreparedPack.getStringLikerPack(kanbanData.getWorkCenterCode(),"workCenterCode",packBean); + DdlPreparedPack.getStringEqualPack("GHHCS","dataLocation",packBean); + DdlPreparedPack.getStringBiggerPack(kanbanData.getDataTimeStart(), "dataTime", packBean); + DdlPreparedPack.getStringSmallerPack(kanbanData.getDataTimeEnd(), "dataTime", packBean); + pager = PagerHelper.getPager(pager, mesCokpitKanbanDataRepository.findByHqlWhereCount(packBean)); + DdlPreparedPack.getOrderBy(kanbanData.getOrderByParam(),kanbanData.getAscOrDesc(),packBean); + List mesCokpitKanbanDataList = mesCokpitKanbanDataRepository.findByHqlWherePage(packBean, pager); + return new ListPager<>(mesCokpitKanbanDataList,pager); + } + + @Override + public ListPager queryGeneralExport(MesGeneralExportReportModel mesGeneralExportReportModel, Pager pager) { + return mesYfReportDao.queryGeneralExport(mesGeneralExportReportModel,pager); + } + + @Override + public ListPager queryGeneralShipping(MesGeneralShippingReportModel model, Pager pager) { + MesConfig groupCfg = mesConfigService.getCfgValueByCode(model.getOrganizeCode(), MesExtConstWords.GENERAL_SHIPPING_PART_GROUP); + List shippingGroupList = null; + if (!Objects.isNull(groupCfg) && !StringUtil.isEmpty(groupCfg.getCfgValue())) { + shippingGroupList = Arrays.asList(groupCfg.getCfgValue().split(MesExtConstWords.COMMA)); + } + return mesYfReportDao.queryGeneralShipping(model, pager, shippingGroupList); + } + private DdlPackBean getDdlPackBeanMesProductionRecord(MesProductionRecord mesProductionRecord) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecord.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getProductSn(), "productSn", packBean); @@ -259,7 +293,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService { DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkCellCode(), "workCellCode", packBean); DdlPreparedPack.getStringBiggerPack(mesProductionRecord.getCompleteDateTimeStart(), "completeDateTime", packBean); DdlPreparedPack.getStringSmallerPack(mesProductionRecord.getCompleteDateTimeEnd(), "completeDateTime", packBean); - DdlPreparedPack.getStringEqualPack(mesProductionRecord.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getEquipmentCode(), "equipmentCode", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getEquipmentName(), "equipmentName", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getMouldNo(), "mouldNo", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getShiftGroup(), "shiftGroup", packBean); @@ -267,8 +301,8 @@ public class MesYfReportServiceImpl implements IMesYfReportService { DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportStatus(), "reportStatus", packBean); DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportType(), "reportType", packBean); DdlPreparedPack.getNumEqualPack(mesProductionRecord.getIsComplete(), "isComplete", packBean); - DdlPreparedPack.getStringEqualPack(mesProductionRecord.getIsTest(), "isTest", packBean); - DdlPreparedPack.getStringEqualPack(mesProductionRecord.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getIsTest(), "isTest", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringLikerPack(mesProductionRecord.getPartName(), "partName", packBean); return packBean; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ProductInspectionSubReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ProductInspectionSubReportServiceImpl.java new file mode 100644 index 0000000..6143458 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ProductInspectionSubReportServiceImpl.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IProductInspectionSubReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IProductInspectionSubReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesQmsSuspicious; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 检验产品数据子报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 13:50 + * @Modify: + **/ +@Service +@Slf4j +public class ProductInspectionSubReportServiceImpl implements IProductInspectionSubReportService { + + @Autowired + private IProductInspectionSubReportDao productInspectionSubReportDao; + + @Override + public ListPager queryReport(MesQmsSuspicious model, Pager pager) { + return productInspectionSubReportDao.queryReport(model,pager); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ShipmentDetailReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ShipmentDetailReportServiceImpl.java new file mode 100644 index 0000000..7e57c79 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/ShipmentDetailReportServiceImpl.java @@ -0,0 +1,29 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IShipmentDetailReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IShipmentDetailReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 发运明细报表 服务实现 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/29 9:51 + * @Modify: + **/ +@Service +@Slf4j +public class ShipmentDetailReportServiceImpl implements IShipmentDetailReportService { + + @Autowired + private IShipmentDetailReportDao shipmentDetailReportDao; + @Override + public ListPager queryReport(ShippingReportModel model, Pager pager) { + return shipmentDetailReportDao.queryReport(model,pager); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/SuspiciousItemBarcodeReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/SuspiciousItemBarcodeReportServiceImpl.java new file mode 100644 index 0000000..ea72942 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/SuspiciousItemBarcodeReportServiceImpl.java @@ -0,0 +1,29 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.ISuspiciousItemBarcodeReportService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.report.ISuspiciousItemBarcodeReportDao; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.model.report.SuspiciousItemBarcodeReportModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 可疑品条码信息报表 + * @Reference : + * @Author : PZJ + * @CreateDate : 2024/9/28 19:28 + * @Modify: + **/ +@Service +@Slf4j +public class SuspiciousItemBarcodeReportServiceImpl implements ISuspiciousItemBarcodeReportService { + + @Autowired + private ISuspiciousItemBarcodeReportDao suspiciousItemBarcodeReportDao; + @Override + public ListPager queryReport(SuspiciousItemBarcodeReportModel model, Pager pager) { + return suspiciousItemBarcodeReportDao.queryReport(model,pager); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java new file mode 100644 index 0000000..9cda9f6 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java @@ -0,0 +1,44 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice; + +import cn.estsh.i3plus.ext.mes.apiservice.model.SpsInfo; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPullingOrderInfoService; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import java.util.HashMap; +import java.util.Map; + +/** + * @Description :soapUI调用 http://10.193.30.22:8300/i3plus/mes-service-spsEqu?wsdl + * @Author :gsz + * @Date 2024/8/30 9:18 + * @Modify + **/ + +//@WebService(targetNamespace = "http://yfaiesb/services/ServiceSyncMaximoInstrument") +@WebService(targetNamespace = "http://tempuri.org/services/SyncSPSForEquipmentService") +public class WebServiceServerSPS { + public static final Logger LOGGER = LoggerFactory.getLogger(WebServiceServerSPS.class); + + @WebMethod(action = "SyncSPSForEquipmentService", operationName = "SyncSPSForEquipmentService") + public Map syncSPSForEquipment(@WebParam(name = "info") SpsInfo spsInfo) { + LOGGER.info("syncSPSForEquipment主数据:{}", spsInfo); + + MesPullingOrderInfoService bean = (MesPullingOrderInfoService) SpringContextsUtil.getBean("mesPullingOrderInfoService"); + if (StringUtil.isEmpty(spsInfo.getOrganizeCode())) { + Map resultMap = new HashMap(); + resultMap.put("success", false); + String message = "SPS拉动数据已扫描数据为空,请检查拉动单数据"; + resultMap.put("message", message); + return resultMap; + } + return bean.doSPSForEquipment("","",spsInfo.getOrganizeCode()); +// return bean.doSPSForEquipment(spsInfo.getAssemblyLine(),spsInfo.getPullingGroupCode(),spsInfo.getOrganizeCode()); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java index f95ea45..fe5a12f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanMapUtilsExt.java @@ -58,7 +58,7 @@ public class BeanMapUtilsExt { DdlPreparedPack.getOrderBy(null,null,packBean); List baseDataList = repository.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(baseDataList)) { - MesException.throwMesBusiException(remindMsg + "信息存在"); + MesException.throwMesBusiException(remindMsg + "不存在"); } return baseDataList; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java index 32568b9..01bf804 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/HuaWeiOBSUtil.java @@ -1,523 +1,523 @@ -package cn.estsh.i3plus.ext.mes.apiservice.utils; - -import com.obs.services.ObsClient; -import com.obs.services.model.*; -import groovy.util.logging.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.multipart.MultipartFile; - -import java.io.*; -import java.util.ArrayList; -import java.util.List; - -/** - * @Description : ObsUtil - * @Author :gsz - * @Date 2024/6/11 14:55 - * @Modify - **/ -@Slf4j -public class HuaWeiOBSUtil { - public static final Logger LOGGER = LoggerFactory.getLogger(HuaWeiOBSUtil.class); -// -// @Autowired -// HuaWeiCloudObsConfig obsConfig; - /** - * 文件外链过期时间,7天 - */ - private static long expire = 7 * 24 * 60 * 60; - - /** - * 文件外链访问端口 - */ - private static String port = ":443"; - - private static String bucketName; - private static String ak; - private static String sk; - private static String endPoint; - - /** - * OBS操作客户端 - */ - private static ObsClient obsClient = null; - - private static final String SEPARATOR = "/"; - - public HuaWeiOBSUtil(String bucketName, String ak, String sk, String endPoint) { - HuaWeiOBSUtil.bucketName = bucketName; - HuaWeiOBSUtil.ak = ak; - HuaWeiOBSUtil.sk = sk; - HuaWeiOBSUtil.endPoint = endPoint; - createObsClientInstance(); - } -// public HuaWeiOBSUtil(HuaWeiCloudObsConfig obsConfig) { -// HuaWeiOBSUtil.bucketName = obsConfig.getBucketName(); -// HuaWeiOBSUtil.ak = obsConfig.getAk(); -// HuaWeiOBSUtil.sk = obsConfig.getSk(); -// HuaWeiOBSUtil.endPoint = obsConfig.getEndPoint(); +//package cn.estsh.i3plus.ext.mes.apiservice.utils; +// +//import com.obs.services.ObsClient; +//import com.obs.services.model.*; +//import groovy.util.logging.Slf4j; +//import org.apache.commons.lang.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.web.multipart.MultipartFile; +// +//import java.io.*; +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * @Description : ObsUtil +// * @Author :gsz +// * @Date 2024/6/11 14:55 +// * @Modify +// **/ +//@Slf4j +//public class HuaWeiOBSUtil { +// public static final Logger LOGGER = LoggerFactory.getLogger(HuaWeiOBSUtil.class); +//// +//// @Autowired +//// HuaWeiCloudObsConfig obsConfig; +// /** +// * 文件外链过期时间,7天 +// */ +// private static long expire = 7 * 24 * 60 * 60; +// +// /** +// * 文件外链访问端口 +// */ +// private static String port = ":443"; +// +// private static String bucketName; +// private static String ak; +// private static String sk; +// private static String endPoint; +// +// /** +// * OBS操作客户端 +// */ +// private static ObsClient obsClient = null; +// +// private static final String SEPARATOR = "/"; +// +// public HuaWeiOBSUtil(String bucketName, String ak, String sk, String endPoint) { +// HuaWeiOBSUtil.bucketName = bucketName; +// HuaWeiOBSUtil.ak = ak; +// HuaWeiOBSUtil.sk = sk; +// HuaWeiOBSUtil.endPoint = endPoint; // createObsClientInstance(); // } - - public static String getBucketName() { - return bucketName; - } - - public static String getAk() { - return ak; - } - - public static String getSk() { - return sk; - } - - public static String getEndPoint() { - return endPoint; - } - - /** - * 获取OBS操作客户端 - * - * @return - */ - private static void createObsClientInstance() { - try { - if (obsClient == null) { - synchronized (ObsClient.class) { - if (obsClient == null) { - obsClient = new ObsClient(ak, sk, endPoint); - } - } - } - createBucket(bucketName, endPoint); - } catch (Exception e) { - LOGGER.error("连接华为云存储服务器异常:" + e.getMessage(), e); - } - } - - /** - * 获取上传文件的基础路径 - * - * @return url - */ - public static String getBasisUrl() { - //实示例:http协议 + 存储桶名称 + . + endPoint + port + / - return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; - } - - /** - * 获取上传文件的基础路径 - * - * @param bucketName - * @return - */ - public static String getBasisUrl(String bucketName) { - //实示例:http协议 + 存储桶名称 + . + endPoint + port + / - return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; - } - - /** - * 获取区域 - * - * @param endPoint - * @return - */ - public static String getRegion(String endPoint) { - String substring = endPoint.substring(endPoint.indexOf(".") + 1); - return substring.substring(0, substring.indexOf(".")); - } - - /** - * 获取http协议 - * - * @param endPoint - * @return - */ - public static String getHttpProtocol(String endPoint) { - return endPoint.substring(0, endPoint.indexOf(":")); - } - - /** - * 创建存储桶 - * - * @param bucketName - * @return - */ - public static void createBucket(String bucketName, String endPoint) { - if (!headBucket(bucketName)) { - CreateBucketRequest request = new CreateBucketRequest(); - // 设置存储桶名称 - request.setBucketName(bucketName); - // 设置桶区域位置,从endPoint中截取,如果Location设置的区域与endPoint中的区域不是同一个,则创建会报错 - request.setLocation(getRegion(endPoint)); - // 创建桶成功 - obsClient.createBucket(request); - } - } - - /** - * 删除存储桶 - * - * @param bucketName - * @return - */ - public static HeaderResponse deleteBucket(String bucketName) { - return obsClient.deleteBucket(bucketName); - } - - /** - * 判断存储桶是否存在 - * - * @param bucketName - * @return - */ - public static boolean headBucket(String bucketName) { - return obsClient.headBucket(bucketName); - } - - /** - * 上传字符 - * - * @param bucketName - * @param objectName - * @param content - * @return - */ - public static PutObjectResult putObjectByStr(String bucketName, String objectName, String content) { - if (StringUtils.isBlank(content)) { - return null; - } - - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes())); - } - - /** - * 上传输入流 - * - * @param bucketName - * @param objectName - * @param inputStream - * @return - */ - public static PutObjectResult putObjectByInput(String bucketName, String objectName, InputStream inputStream) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, inputStream); - } - - /** - * 上传文件输入流 - * - * @param bucketName - * @param objectName - * @param fileInputStream - * @return - */ - public static PutObjectResult putObjectByFileInput(String bucketName, String objectName, FileInputStream fileInputStream) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, fileInputStream); - } - - /** - * 通过MultipartFile,上传文件 - * - * @param bucketName - * @param objectName - * @param media - * @return - */ - public static PutObjectResult putObjectByMultipartFile(String bucketName, String objectName, MultipartFile media) throws IOException { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, media.getInputStream()); - } - - /** - * 上传本地文件 - * - * @param bucketName - * @param objectName - * @param file - * @return - */ - public static PutObjectResult putObjectByFile(String bucketName, String objectName, File file) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.putObject(bucketName, objectName, file); - } - - /** - * 下载文件到本地 - * - * @param bucketName - * @param objectName - * @param filePath - * @return - */ - public static boolean downloadObject(String bucketName, String objectName, String filePath) throws Exception { - if (StringUtils.isBlank(filePath)) { - return false; - } - //重新构建objectName - objectName = buildObjectName(objectName); - - filePath = filePath.replace("\\", SEPARATOR); - - InputStream input = null; - FileOutputStream fileOutputStream = null; - try { - // 获取对象 - ObsObject obsObject = obsClient.getObject(bucketName, objectName); - // 读取对象内容 - input = obsObject.getObjectContent(); - - if (input == null) { - return false; - } - - //获取文件夹路径 - if (filePath.contains(SEPARATOR)) { - String dir = filePath.substring(0, filePath.lastIndexOf(SEPARATOR)); - File difFile = new File(dir); - if (!difFile.exists()) { - //创建文件夹 - boolean mkdirs = difFile.mkdirs(); - } - } - - File file = new File(filePath); - fileOutputStream = new FileOutputStream(file); - - byte[] b = new byte[1024]; - int len; - while ((len = input.read(b)) != -1) { - fileOutputStream.write(b, 0, len); - } - return true; - } finally { - if (fileOutputStream != null) { - fileOutputStream.close(); - } - if (input != null) { - input.close(); - } - } - } - - /** - * 获取文件内容 - * - * @param bucketName - * @param objectName - * @return - */ - public static String getObjectContent(String bucketName, String objectName) throws IOException { - //重新构建objectName - objectName = buildObjectName(objectName); - - InputStream input = null; - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try { - ObsObject obsObject = obsClient.getObject(bucketName, objectName); - // 读取对象内容 - input = obsObject.getObjectContent(); - - byte[] b = new byte[1024]; - int len; - while ((len = input.read(b)) != -1) { - bos.write(b, 0, len); - } - - return new String(bos.toByteArray()); - } finally { - bos.close(); - if (input != null) { - input.close(); - } - } - } - - /** - * 获取文件输入流 - * - * @param bucketName - * @param objectName - * @return - */ - public static InputStream getObject(String bucketName, String objectName) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.getObject(bucketName, objectName).getObjectContent(); - } - - /** - * 指定数目和前缀列举 - * - * @param bucketName - * @param prefix - * @param maxKeys - * @return - */ - public static List listObjects(String bucketName, String prefix, Integer maxKeys) { - prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; - - ListObjectsRequest request = new ListObjectsRequest(bucketName); - // 设置列举的对象个数 - request.setMaxKeys(maxKeys); - // 设置列举的对象需要带有指定前缀 - request.setPrefix(prefix); - ObjectListing result = obsClient.listObjects(request); - - return result.getObjects(); - } - - /** - * 列举指定前缀的全部对象 - * - * @param bucketName - * @param prefix - * @return - */ - public static List listAllObjects(String bucketName, String prefix) { - prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; - - List list = new ArrayList<>(); - - ListObjectsRequest request = new ListObjectsRequest(bucketName); - // 设置列举的对象个数 - request.setMaxKeys(1000); - // 设置列举的对象需要带有指定前缀 - request.setPrefix(prefix); - - ObjectListing result; - do { - result = obsClient.listObjects(request); - request.setMarker(result.getNextMarker()); - - list.addAll(result.getObjects()); - } while (result.isTruncated()); - - return list; - } - - /** - * 删除单个对象 - * - * @param bucketName - * @param objectName - * @return - */ - public static DeleteObjectResult deleteObject(String bucketName, String objectName) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.deleteObject(bucketName, objectName); - } - - /** - * 复制对象 - * - * @param sourceBucketName - * @param sourceObjectName - * @param destBucketName - * @param destObjectName - * @return - */ - public static CopyObjectResult copyObject(String sourceBucketName, String sourceObjectName, - String destBucketName, String destObjectName) { - return obsClient.copyObject(sourceBucketName, sourceObjectName, destBucketName, destObjectName); - } - - /** - * 判断对象是否存在 - * - * @param bucketName - * @param objectName - * @return - */ - public static boolean doesObjectExist(String bucketName, String objectName) { - //重新构建objectName - objectName = buildObjectName(objectName); - - return obsClient.doesObjectExist(bucketName, objectName); - } - - /** - * 获取文件外链 - * - * @param bucketName - * @param objectName - * @param expires 单位:秒(s) - * @return - */ - public static String getSignedUrl(String bucketName, String objectName, Long expires) { - //重新构建objectName - objectName = buildObjectName(objectName); - - TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expires); - request.setBucketName(bucketName); - request.setObjectKey(objectName); - TemporarySignatureResponse response = obsClient.createTemporarySignature(request); - return response.getSignedUrl(); - } - - /** - * 获取文件外链-url有效时间默认7天 - * - * @param bucketName - * @param objectName - * @return - */ - public static String getSignedUrl(String bucketName, String objectName) { - return getSignedUrl(bucketName, objectName, expire); - } - - /** - * 重新构建objectName - * - * @param objectName - */ - private static String buildObjectName(String objectName) { - if (StringUtils.isBlank(objectName)) { - return objectName; - } - //去除开头的/ - objectName = objectName.startsWith("/") ? objectName.substring(1) : objectName; - //去除?后边的参数 - objectName = objectName.contains("?") ? objectName.substring(0, objectName.indexOf("?")) : objectName; - - return objectName; - } - - /** - * 传入文件访问外链,返回objectName - * - * @param url - * @return - */ - public static String getObjectNameByUrl(String url) { - if (StringUtils.isBlank(url)) { - return url; - } - - if (url.contains(getBasisUrl())) { - // 去除minio基础路径 - url = url.replace(getBasisUrl(), ""); - // 去除?后边的参数 - url = url.contains("?") ? url.substring(0, url.indexOf("?")) : url; - } - - return url; - } -} +//// public HuaWeiOBSUtil(HuaWeiCloudObsConfig obsConfig) { +//// HuaWeiOBSUtil.bucketName = obsConfig.getBucketName(); +//// HuaWeiOBSUtil.ak = obsConfig.getAk(); +//// HuaWeiOBSUtil.sk = obsConfig.getSk(); +//// HuaWeiOBSUtil.endPoint = obsConfig.getEndPoint(); +//// createObsClientInstance(); +//// } +// +// public static String getBucketName() { +// return bucketName; +// } +// +// public static String getAk() { +// return ak; +// } +// +// public static String getSk() { +// return sk; +// } +// +// public static String getEndPoint() { +// return endPoint; +// } +// +// /** +// * 获取OBS操作客户端 +// * +// * @return +// */ +// private static void createObsClientInstance() { +// try { +// if (obsClient == null) { +// synchronized (ObsClient.class) { +// if (obsClient == null) { +// obsClient = new ObsClient(ak, sk, endPoint); +// } +// } +// } +// createBucket(bucketName, endPoint); +// } catch (Exception e) { +// LOGGER.error("连接华为云存储服务器异常:" + e.getMessage(), e); +// } +// } +// +// /** +// * 获取上传文件的基础路径 +// * +// * @return url +// */ +// public static String getBasisUrl() { +// //实示例:http协议 + 存储桶名称 + . + endPoint + port + / +// return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; +// } +// +// /** +// * 获取上传文件的基础路径 +// * +// * @param bucketName +// * @return +// */ +// public static String getBasisUrl(String bucketName) { +// //实示例:http协议 + 存储桶名称 + . + endPoint + port + / +// return getHttpProtocol(endPoint) + "://" + bucketName + "." + endPoint.replace(getHttpProtocol(endPoint) + "://", "") + port + SEPARATOR; +// } +// +// /** +// * 获取区域 +// * +// * @param endPoint +// * @return +// */ +// public static String getRegion(String endPoint) { +// String substring = endPoint.substring(endPoint.indexOf(".") + 1); +// return substring.substring(0, substring.indexOf(".")); +// } +// +// /** +// * 获取http协议 +// * +// * @param endPoint +// * @return +// */ +// public static String getHttpProtocol(String endPoint) { +// return endPoint.substring(0, endPoint.indexOf(":")); +// } +// +// /** +// * 创建存储桶 +// * +// * @param bucketName +// * @return +// */ +// public static void createBucket(String bucketName, String endPoint) { +// if (!headBucket(bucketName)) { +// CreateBucketRequest request = new CreateBucketRequest(); +// // 设置存储桶名称 +// request.setBucketName(bucketName); +// // 设置桶区域位置,从endPoint中截取,如果Location设置的区域与endPoint中的区域不是同一个,则创建会报错 +// request.setLocation(getRegion(endPoint)); +// // 创建桶成功 +// obsClient.createBucket(request); +// } +// } +// +// /** +// * 删除存储桶 +// * +// * @param bucketName +// * @return +// */ +// public static HeaderResponse deleteBucket(String bucketName) { +// return obsClient.deleteBucket(bucketName); +// } +// +// /** +// * 判断存储桶是否存在 +// * +// * @param bucketName +// * @return +// */ +// public static boolean headBucket(String bucketName) { +// return obsClient.headBucket(bucketName); +// } +// +// /** +// * 上传字符 +// * +// * @param bucketName +// * @param objectName +// * @param content +// * @return +// */ +// public static PutObjectResult putObjectByStr(String bucketName, String objectName, String content) { +// if (StringUtils.isBlank(content)) { +// return null; +// } +// +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes())); +// } +// +// /** +// * 上传输入流 +// * +// * @param bucketName +// * @param objectName +// * @param inputStream +// * @return +// */ +// public static PutObjectResult putObjectByInput(String bucketName, String objectName, InputStream inputStream) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, inputStream); +// } +// +// /** +// * 上传文件输入流 +// * +// * @param bucketName +// * @param objectName +// * @param fileInputStream +// * @return +// */ +// public static PutObjectResult putObjectByFileInput(String bucketName, String objectName, FileInputStream fileInputStream) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, fileInputStream); +// } +// +// /** +// * 通过MultipartFile,上传文件 +// * +// * @param bucketName +// * @param objectName +// * @param media +// * @return +// */ +// public static PutObjectResult putObjectByMultipartFile(String bucketName, String objectName, MultipartFile media) throws IOException { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, media.getInputStream()); +// } +// +// /** +// * 上传本地文件 +// * +// * @param bucketName +// * @param objectName +// * @param file +// * @return +// */ +// public static PutObjectResult putObjectByFile(String bucketName, String objectName, File file) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.putObject(bucketName, objectName, file); +// } +// +// /** +// * 下载文件到本地 +// * +// * @param bucketName +// * @param objectName +// * @param filePath +// * @return +// */ +// public static boolean downloadObject(String bucketName, String objectName, String filePath) throws Exception { +// if (StringUtils.isBlank(filePath)) { +// return false; +// } +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// filePath = filePath.replace("\\", SEPARATOR); +// +// InputStream input = null; +// FileOutputStream fileOutputStream = null; +// try { +// // 获取对象 +// ObsObject obsObject = obsClient.getObject(bucketName, objectName); +// // 读取对象内容 +// input = obsObject.getObjectContent(); +// +// if (input == null) { +// return false; +// } +// +// //获取文件夹路径 +// if (filePath.contains(SEPARATOR)) { +// String dir = filePath.substring(0, filePath.lastIndexOf(SEPARATOR)); +// File difFile = new File(dir); +// if (!difFile.exists()) { +// //创建文件夹 +// boolean mkdirs = difFile.mkdirs(); +// } +// } +// +// File file = new File(filePath); +// fileOutputStream = new FileOutputStream(file); +// +// byte[] b = new byte[1024]; +// int len; +// while ((len = input.read(b)) != -1) { +// fileOutputStream.write(b, 0, len); +// } +// return true; +// } finally { +// if (fileOutputStream != null) { +// fileOutputStream.close(); +// } +// if (input != null) { +// input.close(); +// } +// } +// } +// +// /** +// * 获取文件内容 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static String getObjectContent(String bucketName, String objectName) throws IOException { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// InputStream input = null; +// ByteArrayOutputStream bos = new ByteArrayOutputStream(); +// try { +// ObsObject obsObject = obsClient.getObject(bucketName, objectName); +// // 读取对象内容 +// input = obsObject.getObjectContent(); +// +// byte[] b = new byte[1024]; +// int len; +// while ((len = input.read(b)) != -1) { +// bos.write(b, 0, len); +// } +// +// return new String(bos.toByteArray()); +// } finally { +// bos.close(); +// if (input != null) { +// input.close(); +// } +// } +// } +// +// /** +// * 获取文件输入流 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static InputStream getObject(String bucketName, String objectName) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.getObject(bucketName, objectName).getObjectContent(); +// } +// +// /** +// * 指定数目和前缀列举 +// * +// * @param bucketName +// * @param prefix +// * @param maxKeys +// * @return +// */ +// public static List listObjects(String bucketName, String prefix, Integer maxKeys) { +// prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; +// +// ListObjectsRequest request = new ListObjectsRequest(bucketName); +// // 设置列举的对象个数 +// request.setMaxKeys(maxKeys); +// // 设置列举的对象需要带有指定前缀 +// request.setPrefix(prefix); +// ObjectListing result = obsClient.listObjects(request); +// +// return result.getObjects(); +// } +// +// /** +// * 列举指定前缀的全部对象 +// * +// * @param bucketName +// * @param prefix +// * @return +// */ +// public static List listAllObjects(String bucketName, String prefix) { +// prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix; +// +// List list = new ArrayList<>(); +// +// ListObjectsRequest request = new ListObjectsRequest(bucketName); +// // 设置列举的对象个数 +// request.setMaxKeys(1000); +// // 设置列举的对象需要带有指定前缀 +// request.setPrefix(prefix); +// +// ObjectListing result; +// do { +// result = obsClient.listObjects(request); +// request.setMarker(result.getNextMarker()); +// +// list.addAll(result.getObjects()); +// } while (result.isTruncated()); +// +// return list; +// } +// +// /** +// * 删除单个对象 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static DeleteObjectResult deleteObject(String bucketName, String objectName) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.deleteObject(bucketName, objectName); +// } +// +// /** +// * 复制对象 +// * +// * @param sourceBucketName +// * @param sourceObjectName +// * @param destBucketName +// * @param destObjectName +// * @return +// */ +// public static CopyObjectResult copyObject(String sourceBucketName, String sourceObjectName, +// String destBucketName, String destObjectName) { +// return obsClient.copyObject(sourceBucketName, sourceObjectName, destBucketName, destObjectName); +// } +// +// /** +// * 判断对象是否存在 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static boolean doesObjectExist(String bucketName, String objectName) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// return obsClient.doesObjectExist(bucketName, objectName); +// } +// +// /** +// * 获取文件外链 +// * +// * @param bucketName +// * @param objectName +// * @param expires 单位:秒(s) +// * @return +// */ +// public static String getSignedUrl(String bucketName, String objectName, Long expires) { +// //重新构建objectName +// objectName = buildObjectName(objectName); +// +// TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expires); +// request.setBucketName(bucketName); +// request.setObjectKey(objectName); +// TemporarySignatureResponse response = obsClient.createTemporarySignature(request); +// return response.getSignedUrl(); +// } +// +// /** +// * 获取文件外链-url有效时间默认7天 +// * +// * @param bucketName +// * @param objectName +// * @return +// */ +// public static String getSignedUrl(String bucketName, String objectName) { +// return getSignedUrl(bucketName, objectName, expire); +// } +// +// /** +// * 重新构建objectName +// * +// * @param objectName +// */ +// private static String buildObjectName(String objectName) { +// if (StringUtils.isBlank(objectName)) { +// return objectName; +// } +// //去除开头的/ +// objectName = objectName.startsWith("/") ? objectName.substring(1) : objectName; +// //去除?后边的参数 +// objectName = objectName.contains("?") ? objectName.substring(0, objectName.indexOf("?")) : objectName; +// +// return objectName; +// } +// +// /** +// * 传入文件访问外链,返回objectName +// * +// * @param url +// * @return +// */ +// public static String getObjectNameByUrl(String url) { +// if (StringUtils.isBlank(url)) { +// return url; +// } +// +// if (url.contains(getBasisUrl())) { +// // 去除minio基础路径 +// url = url.replace(getBasisUrl(), ""); +// // 去除?后边的参数 +// url = url.contains("?") ? url.substring(0, url.indexOf("?")) : url; +// } +// +// return url; +// } +//} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-wuhan-bianyuan.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-wuhan-bianyuan.properties new file mode 100644 index 0000000..d7997dd --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-wuhan-bianyuan.properties @@ -0,0 +1,346 @@ +#\u9879\u76EE\u7AEF\u53E3 +server.port=8300 +#\u672C\u673Aip +impp.server.ip=mes +#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 +impp.console.ip=http://172.28.215.66:8010 +################ \u529F\u80FD\u914D\u7F6E1 ################ +#mes webservice\u5F00\u5173 +mes.webservice.open=true +#\u5DE5\u4F5C\u533AID,\u4E0D\u540C\u670D\u52A1\u5668\u4E0D\u540CID 0 - 31 +impp.snowflake.work.id=11 +#\u6570\u636E\u4ED3\u533AID 0 - 31 \u6709\u9ED8\u8BA4\u56FA\u5B9AID +impp.snowflake.database.id=11 +#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165 +impp.cluster.fetch=false +#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3 +#impp.cluster.regist.center=http://register:8000/eureka/ +impp.cluster.regist.center=http://172.28.215.66:8000/eureka/ +#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2 +logging.config=classpath:log4j2-spring.xml +########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## +#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 +impp.config.redis=true +#\u662F\u5426\u5F00\u542FrabbitMQ +impp.config.rabbitmq=true +#\u662F\u5426\u5F00\u542Fswagger +impp.config.swagger=true +#\u662F\u5426\u5F00\u542Fwebsocket +impp.config.websocket=true +#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1 +impp.config.fastdfs=true +impp.config.fileserver=obs + +##\u534E\u4E3AOBS\u63A5\u5165\u914D\u7F6E +#OBS\u670D\u52A1\u6240\u5728\u5730\u5740 +huaweiobs.endPoint=obs.cn-east-3.myhuaweicloud.com +#\u5B58\u50A8\u6876\u540D\u79F0 +huaweiobs.bucketName=mes-wms-obs +#\u8BBF\u95EE\u7684key +huaweiobs.ak=TPNXQ2LUMRHNYYOBO8QO +#\u8BBF\u95EE\u7684\u79D8\u94A5 +huaweiobs.sk=ppTtbisjdBxQsU124mFnubSojUsB6Wvp9KSaUAeb +#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.controller=true +#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.service=true +################ \u961F\u5217\u5904\u7406 ################ +#\u7AD9\u5185\u4FE1 +impp.mq.queue.letter=true +#\u90AE\u4EF6 +impp.mq.queue.mail=true +#\u5B9A\u65F6\u4EFB\u52A1 +impp.mq.queue.schedule=true +#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217 +impp.mq.queue.sweb.notice=true +################ FastDfs \u914D\u7F6E ################ +#tracker\u670D\u52A1\u5668ip +fastdfs.tracker_servers=172.28.215.66:22122 +# tracker\u7684http\u7AEF\u53E3 +fastdfs.http_tracker_http_port=22122 +# \u4F7F\u7528\u81EA\u5B9A\u4E49\u5DE5\u5177\u83B7\u53D6\u6587\u4EF6\u5C55\u793A\u5730\u5740 +fastdfs.http.ui.host=http://dfs.estsh.com +#\u5BC6\u7801 +#fastdfs.http.secret_key= +#\u8FDE\u63A5\u8D85\u65F6 +fastdfs.connect_timeout_in_seconds=500000 +#\u4F20\u8F93\u8D85\u65F6 +fastdfs.network_timeout_in_seconds=60000000 +fastdfs.charset=UTF-8 +# token \u9632\u76D7\u94FE\u529F\u80FD +fastdfs.http_anti_steal_token=no +################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################ +#elasticsearch ip \u591A\u4E2A\u7528\u9017\u53F7\u9694\u5F00 +elasticsearch.ip=172.28.215.66:9200 +#redisIP +redis.hostName=172.28.215.66 +#\u7AEF\u53E3\u53F7 +redis.port=6379 +#\u5982\u679C\u6709\u5BC6\u7801 +redis.password=ABCabc123!@# +##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################## rabbitMQ\u914D\u7F6E #################### +spring.rabbitmq.virtual-host=/ +spring.rabbitmq.host=172.28.215.66 +spring.rabbitmq.port=5672 +spring.rabbitmq.username=estsh +spring.rabbitmq.password=estsh123 +##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################ \u529F\u80FD\u914D\u7F6E2 ################ +#\u662F\u5426\u5F00\u542Fredis +mes.redis.open=true +#\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4 +impp.web.cross=true +################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.user.filteruri=/mes/operate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.admin.filteruri=/mes/adoperate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.saadmin.filteruri=/mes/saoperate/* +################ \u4E91\u914D\u7F6E \uFF08\u4EE5projectName\u4F5C\u4E3A\u5E94\u7528\u540D\uFF09 ################ +#\u662F\u5426\u5F00\u542F\u5FAE\u670D +eureka.client.enabled=false +#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#\u533A\u57DF\uFF08\u6E90\u7801\u4E2D\u5305\u542BdefaultZone\uFF0C\u6240\u4EE5\u9ED8\u8BA4\u4F7F\u7528defaultZone\uFF09 +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ +################ \u672C\u673A\u5FAE\u670D\u914D\u7F6E ################ +#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09 +eureka.instance.ip-address=${impp.server.ip} +#\u672C\u670D\u52A1\u5B9E\u4F8BID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#\u672C\u670D\u52A1\u4E3B\u673A\u540D +eureka.instance.hostname=${impp.server.ip} +#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518 +eureka.instance.prefer-ip-address=true +#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5 +eureka.client.healthcheck.enabled=true +################ \u68C0\u6D4B\u673A\u5236 ################ +#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A +eureka.instance.lease-expiration-duration-in-seconds=30 +#\u5FC3\u8DF3\u5468\u671F +eureka.instance.lease-renewal-interval-in-seconds=20 +#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2 +eureka.client.eureka-connection-idle-timeout-seconds=1 +#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6240\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A +eureka.client.initial-instance-info-replication-interval-seconds=1 +#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D +eureka.client.instance-info-replication-interval-seconds=1 +#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8 +eureka.client.registry-fetch-interval-seconds=1 +################ \u6253\u5F00feign\u7684\u7194\u65AD ################ +feign.hystrix.enabled=true +#\u8BFB\u53D6\u6570\u636E\u65F6\u957F +ribbon.ReadTimeout=100000000 +#\u8FDE\u63A5\u65F6\u957F +ribbon.ConnectTimeout=100000000 +#\u91CD\u8BD5 +ribbon.maxAutoRetries=2 +#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\ +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=250000000 +#\u96C6\u7FA4\u540D +eureka.instance.metadata-map.cluster=impp_cluster +################ \u94FE\u8DEF\u8FFD\u8E2A ################ +#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F +spring.zipkin.sender.type=web +#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740 +spring.zipkin.base-url=${impp.console.ip} +#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8 +spring.sleuth.sampler.probability=1.0 + +#mysql +#impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.write.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.write.datasource.username=root +#impp.write.datasource.password=ABCabc123!@# +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.read.datasource.jdbc-url=jdbc:mysql://dbslave:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.read.datasource.username=root +#impp.read.datasource.password=ABCabc123!@# +##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## +impp.schedule.open=true +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://172.28.215.65:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=root +impp.schedule.datasource.password=@E#e7@saWE!293??||367 +impp.schedule.datasource.max-connections=20 + +#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C +impp.schedule.start.after-second=20 +#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72 +impp.schedule.datasource.is-clustered=true +#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C +impp.schedule.datasource.cluster-checkin-interval=30000 +#\u7EBF\u7A0B\u6570 +impp.schedule.thread-count=10 +#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5 +impp.schedule.thread-priority=5 +################ \u6570\u636E\u6C60\u8BBE\u7F6E ################ +## \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF0C\u9ED8\u8BA4\u662F10 +spring.datasource.hikari.maximum-pool-size=100 +## \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570\u91CF +spring.datasource.hikari.minimum-idle=10 +## \u7A7A\u95F2\u8FDE\u63A5\u5B58\u6D3B\u6700\u5927\u65F6\u95F4\uFF0C\u9ED8\u8BA4600000\uFF0810\u5206\u949F\uFF09 +spring.datasource.hikari.idle-timeout=600000 +## \u6B64\u5C5E\u6027\u63A7\u5236\u6C60\u4E2D\u8FDE\u63A5\u7684\u6700\u957F\u751F\u547D\u5468\u671F\uFF0C\u503C0\u8868\u793A\u65E0\u9650\u751F\u54 +spring.datasource.hikari.max-lifetime=1800000 +## \u6570\u636E\u5E93\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4,\u9ED8\u8BA430\u79D2\uFF0C\u537330000 +spring.datasource.hikari.connection-timeout=30000 +################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect + +# sql_server +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect +# mysql +spring.datasource.validationQuery=SELECT 1 +##Sql-server## +# spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL +#ImprovedNamingStrategy / physical_naming_strategy java\u5C5E\u6027\u6620\u5C04\u5230\u6570\u636E\u5E93\u5B57\u6BB5\u65F6\u547D\u540D\u89C4\u5219 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNaming +#\u8868\u5173\u7CFBcreate,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=update +#\u662F\u5426\u663E\u793Asql +spring.jpa.show-sql=true +################ \u6388\u6743\u914D\u7F6E ################ +slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2 +slm.app.id=20190513 + +impp.global.session.timeout=-1 +impp.excel.export.defaultType=xlsx + +management.endpoints.enabled-by-default=false + + +impp.xxlJob.admin.enable=true +impp.schedule.scheduleType=xxljob +xxl.job.admin.addresses=http://172.28.215.66:10010/xxl-job-admin +### xxl-job, access token +xxl.job.accessToken= +### xxl-job executor appname +#xxl.job.executor.appname=${project.name} +xxl.job.executor.appname=i3mes-castle +### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null +xxl.job.executor.address= +### xxl-job executor server-info +xxl.job.executor.ip=10.196.76.152 +#xxl.job.executor.ip= +xxl.job.executor.port=8011 +### xxl-job executor log-path +xxl.job.executor.logpath= +### xxl-job executor log-retention-days +xxl.job.executor.logretentiondays=30 +xxl.job.basePackage=cn.estsh.i3plus.mes.apiservice.schedulejob,cn.estsh.i3plus.ext.mes.apiservice.schedulejob +xxl.job.execute.methodName=executeImppJob,execute + + +# impp.datasource.type=druidDataSource + +# #\u6700\u5927\u7EBF\u7A0B\u6570 +# spring.datasource.maximum-pool-size = 100 + +# #\u6700\u5C0F\u8FDE\u63A5\u7EBF\u7A0B\u6570 +# spring.datasource.min-idle = 50 + +# #\u521D\u59CB\u5316\u8FDE\u63A5\u6C60\u5927\u5C0F +# spring.datasource.initial-size= 50 + +# #\u63A2\u6D3B\u3001\u9A8C\u8BC1\u8FDE\u63A5\u6709\u6548\u6027\u7684\u67E5\u8BE2 +# spring.datasource.validation-query=select 1 + +# #\u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4 +# spring.datasource.max-wait=600000 + +# #\u914D\u7F6E\u4E00\u4E2A\u94FE\u63A5\u5728\u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u751F\u5B58\u65F6\u95F4 +# spring.datasource.minEvictableIdleTimeMillis=600000 + +# #\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u8FDE\u63A5\u6C60\u4E2D\u6700\u5927\u7684\u751F\u5B58\u65F6\u95F4\uFF0C\u8D85\u8FC7\u6700\u5927\u751F\u5B58\u65F6\u95F4\u4F1A\u88AB\u79FB\u9664\uFF0C\u5355\u4F4D\u6BEB\u79D2 +# spring.datasource.maxEvictableIdleTimeMillis = 1800000 + +# #\u914D\u7F6E\u95F4\u9694\u591A\u4E45\u83DC\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u6BEB\u79D2\u3002\u592A\u957F\u53EF\u80FD\u5BFC\u81F4\u65E0\u6CD5\u53CA\u65F6\u68C0\u6D4B\u5230\u8FDE\u63A5\u4E2D\u65AD +# spring.datasource.timeBetweenEvictionRunsMillis = 30000 + +# #\u914D\u7F6E\u4ECE\u8FDE\u63A5\u6C60\u83B7\u53D6\u8FDE\u63A5\u65F6\uFF0C\u5F53\u8FDE\u63A5\u7A7A\u95F2\u65F6\u95F4\u5927\u4E8EtimeBetweenEvictionRunsMillis\u65F6\uFF0C\u662F\u5426\u68C0\u67E5\u94FE\u63A5\u6709\u6548\u6027\uFF0Ctrue\u6BCF\u6B21\u90FD\u68C0\u67E5\uFF0Cfalse\u4E0D\u68C0\u67E5 +# spring.datasource.testWhileIdle = false + +# #\u914D\u7F6E\u4ECE\u8FDE\u63A5\u6C60\u83B7\u53D6\u8FDE\u63A5\u65F6\u548C\u5411\u8FDE\u63A5\u6C60\u89C4\u8303\u8FDE\u63A5\u65F6\uFF0C\u662F\u5426\u68C0\u67E5\u94FE\u63A5\u6709\u6548\u6027 +# #\u6BCF\u6B21\u83B7\u53D6\u6216\u5F52\u8FD8\u8FDE\u63A5\u90FD\u68C0\u6D4B\u592A\u9891\u7E41\uFF0C\u9664\u975E\u7279\u522B\u91CD\u8981\u6216\u7F51\u7EDC\u7279\u522B\u4E0D\u53EF\u9760\u7B49\u60C5\u51B5\uFF0C\u5EFA\u8BAE\u7528testWhileIdle + timeBetweenEvictionRunsMillis\u4EE3\u66FF +# spring.datasource.testOnBorrow = false +# spring.datasource.testOnReturn = false + +# #\u914D\u7F6E\u662F\u5426\u5B9A\u671F\u63A2\u6D3B +# spring.datasource.keepAlive = true +# #\u914D\u7F6E\u63A2\u6D3B\u95F4\u9694 +# spring.datasource.keepAliveBetweenTimeMillis=120000 + + +############################????####################################### +###spring.shardingsphere.datasource.names=master,slave +spring.shardingsphere.datasource.names=master,slave +##?? +spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.master.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.master.JdbcUrl=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.master.username=root +spring.shardingsphere.datasource.master.password=@E#e7@saWE!293??||367 + +spring.shardingsphere.datasource.master.maximum-pool-size=200 +spring.shardingsphere.datasource.master.minimum-idle=200 +spring.shardingsphere.datasource.master.idle-timeout=500000 +spring.shardingsphere.datasource.master.connection-timeout=600000 +spring.shardingsphere.datasource.master.max-lifetime=7000000 +spring.shardingsphere.datasource.master.connection-test-query=select 1 +spring.shardingsphere.datasource.master.keep-alive-time=3500000 + + +##?? +spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.slave.JdbcUrl=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.slave.username=root +spring.shardingsphere.datasource.slave.password=@E#e7@saWE!293??||367 + +spring.shardingsphere.datasource.slave.maximum-pool-size=200 +spring.shardingsphere.datasource.slave.minimum-idle=200 +spring.shardingsphere.datasource.slave.idle-timeout=500000 +spring.shardingsphere.datasource.slave.connection-timeout=600000 +spring.shardingsphere.datasource.slave.max-lifetime=7000000 +spring.shardingsphere.datasource.slave.connection-test-query=select 1 +spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + +##?????? +spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=master +spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=slave +#??datasource ???????????????? +#??? gg +#spring.shardingsphere.sharding.default-data-source-name=ds0 +#??????????sql?? +spring.shardingsphere.props.sql.show = false + +spring.shardingsphere.props.max.connections.size.per.query = 10 +#\u5355\u6570\u636E\u6E90\u914D\u7F6E +impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.write.datasource.jdbc-url=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrie +impp.write.datasource.username=root +impp.write.datasource.password=@E#e7@saWE!293??||367 +impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.read.datasource.jdbc-url=jdbc:mysql://172.28.215.65:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieva +impp.read.datasource.username=root +impp.read.datasource.password=@E#e7@saWE!293??||367 + +# #\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u7684\u6700\u5927\u4F7F\u7528\u6B21\u6570\uFF0C\u907F\u514D\u957F\u65F6\u95F4\u4F7F\u7528\u76F8\u540C\u94FE\u63A5\u9020\u6210\u670D\u52A1\u5668\u7AEF\u8D1F\u8F7D\u4E0D\u5747\u8861 +# spring.datasource.phyMaxUseCount = 1000 +impp.route.feign.name=jx diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties index 1980f4d..d72832f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u540D\u79F0 spring.application.name=i3mes #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=88,cus-88 +spring.profiles.active=docker,cus-docker ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C desc.application.name=\u751F\u4EA7\u6267\u884C\u7CFB\u7EDF diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java index 7266a5a..4b2cb21 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java @@ -40,12 +40,12 @@ public class MesCommonConstant { public static final String CCSC_TASK_NO = "CCSC_TASK_NO"; public static final String CCSC_RETEST_NO = "RETEST_%s"; - //OBS - public static final String OBS_AK = "TPNXQ2LUMRHNYYOBO8QO"; - public static final String OBS_SK = "ppTtbisjdBxQsU124mFnubSojUsB6Wvp9KSaUAeb"; - public static final String OBS_END_POINT = "obs.cn-east-3.myhuaweicloud.com"; - public static final String OBS_BUCKET_NAME = "mes-wms-obs"; - public static final String OBS_LOCATION = "cn-east-3"; +// //OBS +// public static final String OBS_AK = "TPNXQ2LUMRHNYYOBO8QO"; +// public static final String OBS_SK = "ppTtbisjdBxQsU124mFnubSojUsB6Wvp9KSaUAeb"; +// public static final String OBS_END_POINT = "obs.cn-east-3.myhuaweicloud.com"; +// public static final String OBS_BUCKET_NAME = "mes-wms-obs"; +// public static final String OBS_LOCATION = "cn-east-3"; //字体位置 public static final String FONDS_TEMP_PATH = File.separator+"usr" + File.separator+ "share" + File.separator+ "fonts" + File.separator+ "myfonts" + File.separator; @@ -58,4 +58,5 @@ public class MesCommonConstant { public static final String CLIENT_HANDLE_ID = "CLIENT_HANDLE_ID"; public static final String QC_ORDER_PRINT_TEMPLATE = "QC_ORDER_PRINT_TEMPLATE"; + public static final String MES_PULL_ORDER_NO = "MES_PULL_ORDER_NO"; } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesProduceSnPrintModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesProduceSnPrintModel.java new file mode 100644 index 0000000..18fda4d --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesProduceSnPrintModel.java @@ -0,0 +1,82 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; +import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description : 条码补打Model + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/13 15:48 + * @Modify: + **/ +@Data +public class MesProduceSnPrintModel { + + @ApiParam("工厂代码") + private String organizeCode; + + @ApiParam("物料号") + private String partNo; + + @ApiParam("物料名称") + private String partName; + + @ApiParam("条码") + private String productSn; + + @ApiParam("打印数量") + private Integer printQty; + + @ApiParam("标包数量") + private Double qty; + + @ApiParam("打印模板") + private String printTemplate; + + @ApiParam("条码规则") + private String snRule; + + @ApiParam(name = "包装规则代码") + private String packCode; + + @ApiParam(name = "用户名") + private String userName; + + @ApiParam(value = "打印机") + private String printer; + + @ApiParam("客户物料号") + private String custPartNo; + + @ApiParam(name = "包装定义维护") + List mesPackingDefineList; + + @ApiParam(name = "打印模板信息") + private MesLabelTemplate mesLabelTemplate; + + @ApiParam(name = "产品条码信息") + //private List mesProduceSnPrintDataModelList = new ArrayList<>(); + + private List mesProduceSnList = new ArrayList<>(); + + private List mesPrintedSnLogList = new ArrayList<>(); + + @ApiParam(name = "源数据 使用功能:1-裁片") + private Object sourceData; + + @ApiParam(name = "打印内容 使用功能:1-裁片") + List> printContextList = new ArrayList<>(); + + public Double getQty() { + return qty == null || qty <= 0d ? 1d : qty; + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesWorkOrderCutPrintModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesWorkOrderCutPrintModel.java new file mode 100644 index 0000000..045ca9b --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesWorkOrderCutPrintModel.java @@ -0,0 +1,27 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +/** + * @Description : 工单标签补打Model + * @Reference : + * @Author : xinwang.yi + * @CreateDate 2024/6/13 15:48 + * @Modify: + **/ +@Data +public class MesWorkOrderCutPrintModel { + + @ApiParam("工厂代码") + private String organizeCode; + + @ApiParam("裁片方案代码") + private String cutCode; + + @ApiParam("裁片方案名称") + private String cutName; + + @ApiParam("裁片工单号") + private String cutWorkOrderNo; +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesGepicsInspectionInfoModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesGepicsInspectionInfoModel.java new file mode 100644 index 0000000..6b3d918 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesGepicsInspectionInfoModel.java @@ -0,0 +1,52 @@ +package cn.estsh.i3plus.ext.mes.pojo.model.board; + +import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +/** + * @Description : 通用V107Melos数据监控Model + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/10/11 13:21 + * @Modify: + **/ +@Data +@ApiModel("通用V107Melos数据监控Model") +public class MesGepicsInspectionInfoModel { + @ApiParam("工厂代码") + private String organizeCode; + + @ApiModelProperty(name = "gaRule") + private String gaRule; + + @ApiParam("GA号") + private String gepicsCsnNo; + + @ApiParam("需求日期") + private String gepicsDate; + + @ApiParam("需求时间") + private String gepicsTime; + + @ApiParam("GA号") + private String melosCsnNo; + + @ApiParam("需求日期") + private String melosDate; + + @ApiParam("需求时间") + private String melosTime; + + public MesGepicsInspectionInfoModel(){ + + } + + public MesGepicsInspectionInfoModel(MesCimGmGepics mesCimGmGepics){ + this.gepicsCsnNo = mesCimGmGepics.getCsnNo(); + this.gepicsDate = mesCimGmGepics.getDate(); + this.gepicsTime = mesCimGmGepics.getTime(); + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 4d70267..a8431f6 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -33,6 +33,8 @@ public class MesExtConstWords { public static final String WORK_CELL_NAME = "workCellName"; // 设备代码 public static final String EQUIPMENT_CODE = "equipmentCode"; + // 设备名称 + public static final String EQUIPMENT_NAME = "equipmentName"; // 开模记录ID public static final String MOULD_RECORD_ID = "mouldRecordId"; // 设备数据变量ID @@ -87,6 +89,8 @@ public class MesExtConstWords { public static final String PROCESS_CODE = "processCode"; //工序名称 public static final String PROCESS_NAME = "processName"; + //工艺代码 + public static final String CRAFT_CODE = "craftCode"; //数量 public static final String QTY = "qty"; //完成数量 @@ -143,6 +147,10 @@ public class MesExtConstWords { public static final String CFG_KEY = "cfgKey"; //配置类型 public static final String CFG_TYPE = "cfgType"; + //装配件零件号 + public static final String ASSEMBLY_PART_NO = "assemblyPartNo"; + //装配件零件名称 + public static final String ASSEMBLY_PART_NAME = "assemblyPartName"; //时间[开始/结束]条件 public static final String START_TIME_START = "startTimeStart"; @@ -158,6 +166,12 @@ public class MesExtConstWords { public static final int ZERO = 0; //"0" public static final String ZERO_STR = "0"; + //1 + public static final int ONE = 1; + //"1" + public static final String ONE_STR = "1"; + // 10 + public static final Integer TEN = 10; //"" public static final String EMPTY = ""; //- @@ -209,6 +223,8 @@ public class MesExtConstWords { //日期类型 public static final String DATE_FORMAT_YM = "yyyy-MM"; //日期类型 + public static final String DATE_FORMAT_YY = "yy"; + //日期类型 public static final String DATE_DD_01 = "-01"; //日期类型 public static final String DATE_DD_31 = "-31"; @@ -242,4 +258,92 @@ public class MesExtConstWords { //JOB停机类型代码 public static final String MES_DOWNTIME_RECORD_JOB_TYPE = "MES_DOWNTIME_RECORD_JOB_TYPE"; + // 裁片工单号 + public static final String CUT_WORK_ORDER_NO = "cutWorkOrderNo"; + // 裁片代码 + public static final String CUT_CODE = "cutCode"; + // 裁片名称 + public static final String CUT_NAME = "cutName"; + // 裁片工单号 + public static final String CUT_WORK_ORDER_NO_FUL = "CUT_WORK_ORDER_NO"; + // 条码 + public static final String SN = "sn"; + + // 打印状态 + public static final String PRINT_STATUS = "printStatus"; + //客户编码 + public static final String CUST_CODE = "custCode"; + // 模板代码 + public static final String TEMPLATE_CODE = "templateCode"; + //打印模板 + public static final String LABEL_TEMPLATE = "labelTemplate"; + //打印模板数据 + public static final String TEMPLATE_DATA = "templateData"; + //打印机 + public static final String PRINTER = "printer"; + + //原材料 + public static final String RAW_PART_NO = "rawPartNo"; + //拉料长度 + public static final String PULLING_MATERIAL_LENGTH = "pullingMaterialLength"; + //拉料层数 + public static final String PULLING_MATERIAL_LAYER_NUMBER = "pullingMaterialLayerNumber"; + //每层套数 + public static final String PER_LAYER_NUMBER = "perLayerNumber"; + //调取长度 + public static final String USING_LENGTH = "usingLength"; + //材料用量 + public static final String MATERIAL_DOSAGE = "materialDosage"; + //层数 + public static final String LAYER_NUMBER = "layerNumber"; + //张力参数 + public static final String TENSION_PARAM = "tensionParam"; + //设备参数名称 + public static final String EQUIP_PARAM_NAME = "equipParamName"; + //设备参数值 + public static final String EQUIP_PARAM_VALUE = "equipParamValue"; + //参数 + public static final String PARAM = "param"; + //成品零件号 + public static final String FG_PART_NO = "fgPartNo"; + // 打印时间 + public static final String PRINT_TIME = "printTime"; + + // 车型名称 + public static final String CAR_MODEL_NAME = "carModelName"; + // VIN_CODE + public static final String VIN_CODE = "vinCode"; + // VIN_CODE 后四位 + public static final String VIN_CODE_AFTER_FOUR = "vinCodeAfterFour"; + // 工单标识 + public static final String ORDER_FLAG = "orderFlag"; + // 重打印 + public static final String REPRINT = "reprint"; + // EDI接收时间 + public static final String EDI_REC_TIME = "ediRecTime"; + // 装配件参数 + public static final String ASSEMBLY_PARAM = "assemblyParam"; + // 客户订单号 + public static final String CUST_ORDER_NO = "custOrderNo"; + //客户零件号 + public static final String CUST_PART_NO = "custPartNo"; + // 车型大类 + public static final String CAR_MODEL_CODE = "carModelCode"; + //零件生产组代码 + public static final String PART_PROD_GROUP_CODE = "partProdGroupCode"; + + + //客户零件号后4位置 + public static final String REPLACE_CSN = "replaceCsn"; + + public static final String CP = "CP"; + /** + * 系统参数 + */ + //通用发运报表,发运组 + public static final String GENERAL_SHIPPING_PART_GROUP = "GENERAL_SHIPPING_PART_GROUP"; + //非排序工单关闭是否关闭试制单 + public static final String CLOSE_P_WORK_ORDER = "CLOSE_P_WORK_ORDER"; + + } diff --git a/pom.xml b/pom.xml index 31ee71a..995d4a1 100644 --- a/pom.xml +++ b/pom.xml @@ -29,8 +29,8 @@ INFO true UTF-8 - 1.0.1-YZ + 1.0.0-yfai 1.0.0.1-patch 1.0.0.1-patch