From 5ffbb9c45dd23cd65d5b46890cbd162ed470cde3 Mon Sep 17 00:00:00 2001 From: 10001392 <1055202292@qq.com> Date: Tue, 24 Dec 2024 14:36:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=89=A9=E6=96=99=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E3=80=91=E4=BB=8EHANA=E8=8E=B7=E5=8F=96=E7=89=A9?= =?UTF-8?q?=E6=96=99=E9=87=87=E8=B4=AD=E5=B1=9E=E6=80=A7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/user/material/MaterialMainApi.java | 9 ++ .../material/job/SaticScheduleTask.java | 11 ++ .../mapper/master/MaterialMainAttrMapper.java | 10 ++ .../pojo/entity/MaterialMainAttrEntity.java | 83 ++++++++++++++ .../material/pojo/sop/SopMaterialInfo.java | 13 +++ .../material/service/MaterialMainService.java | 108 ++++++++++++++++++ .../material/service/SapInfoService.java | 30 +++++ .../mapper/master/MaterialMainAttrMapper.xml | 4 + 8 files changed, 268 insertions(+) create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialMainAttrMapper.java create mode 100644 nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialMainAttrEntity.java create mode 100644 nflg_project_dev/material/src/main/resources/mapper/master/MaterialMainAttrMapper.xml diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java index 308d7aaa..d0bdd249 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialMainApi.java @@ -453,4 +453,13 @@ public class MaterialMainApi extends BaseApi { public void updateMaterialCurrentTwoYearsUsage() { materialMainService.doQueryCurrentTwoYearsUsage(); } + + /** + * 手动从HANA获取物料的采购属性信息 + * @throws Exception + */ + @GetMapping("syncMaterialPurchasePropInfo") + public void syncMaterialPurchasePropInfo() throws Exception { + materialMainService.syncMaterialPurchasePropInfo(); + } } diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/job/SaticScheduleTask.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/job/SaticScheduleTask.java index 9c86cb6c..d1d2b465 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/job/SaticScheduleTask.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/job/SaticScheduleTask.java @@ -160,4 +160,15 @@ public class SaticScheduleTask { public void syncEhrEmployee() { authorityUserService.syncEhrEmployee(); } + + /** + * 每天凌晨7点从HANA获取物料的采购属性信息 + * 只针对物料状态material_state为1:激活 2:禁止采购 3:售后专用 + * * 流程状态:15:已审核 100: 历史正式物料(已审核) + */ +// @Scheduled(cron = "0 0 7 * * ?") +//// @Scheduled(cron = "0 0/2 * * * ? ") // 测试使用,每2分钟 +// public void syncMaterialPurchasePropInfo() throws Exception { +// materialMainService.syncMaterialPurchasePropInfo(); +// } } diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialMainAttrMapper.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialMainAttrMapper.java new file mode 100644 index 00000000..8da1e384 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialMainAttrMapper.java @@ -0,0 +1,10 @@ +package com.nflg.product.material.mapper.master; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.product.material.pojo.entity.MaterialMainAttrEntity; + +/** + * 物料主数据-采购属性 + */ +public interface MaterialMainAttrMapper extends BaseMapper { +} diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialMainAttrEntity.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialMainAttrEntity.java new file mode 100644 index 00000000..8f9585f5 --- /dev/null +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialMainAttrEntity.java @@ -0,0 +1,83 @@ +package com.nflg.product.material.pojo.entity; + + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 物料信息附属表 + */ + +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-material-pojo-entity-MaterialMainAttrEntity") +@TableName(value = "t_material_main_attr") +public class MaterialMainAttrEntity implements Serializable { + + /** + * 行ID 雪花 + */ + @TableId(value = "row_id", type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "行ID 雪花") + private Long rowId; + + /** + * 物料编码 + */ + @TableField(value = "material_no") + @ApiModelProperty(value = "物料编码") + private String materialNo; + + @TableField(value = "factory") + @ApiModelProperty(value = "工厂") + private String factory; + + @TableField(value = "purchase_type") + @ApiModelProperty(value = "采购类型") + private String purchaseType; + + @TableField(value = "special_purchase_type") + @ApiModelProperty(value = "特殊采购类") + private String specialPurchaseType; + + @TableField(value = "plan_delivery_time") + @ApiModelProperty(value = "计划交货时间(天数)") + private String planDeliveryTime; + + /** + * 创建人 + */ + @TableField(value = "created_by" ,fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建人") + private String createdBy; + + /** + * 创建时间 + */ + @TableField(value = "created_time",fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间") + private LocalDateTime createdTime; + + /** + * 更新人 + */ + @TableField(value = "updated_by",fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "更新人") + private String updatedBy; + + /** + * 更新时间 + */ + @TableField(value = "updated_time",fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "更新时间") + private LocalDateTime updatedTime; + + private static final long serialVersionUID = 1L; + +} diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopMaterialInfo.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopMaterialInfo.java index 373daf67..9ecf4d4c 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopMaterialInfo.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/sop/SopMaterialInfo.java @@ -51,5 +51,18 @@ public class SopMaterialInfo { @ApiModelProperty("最后出库时间") private String BUDAT; + // 采购属性信息 start + @ApiModelProperty("工厂") + private String WERKS; + + @ApiModelProperty("采购类型") + private String BESKZ; + + @ApiModelProperty("特殊采购类") + private String SOBSL; + + @ApiModelProperty("计划交货时间") + private String PLIFZ; + // 采购属性信息 end } diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialMainService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialMainService.java index 9cd8b8a0..dbf828d6 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialMainService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialMainService.java @@ -25,6 +25,7 @@ import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.base.core.vo.PageVO; import com.nflg.product.material.constant.*; +import com.nflg.product.material.mapper.master.MaterialMainAttrMapper; import com.nflg.product.material.mapper.master.MaterialMainMapper; import com.nflg.product.material.pojo.dto.*; import com.nflg.product.material.pojo.entity.*; @@ -164,6 +165,9 @@ public class MaterialMainService extends ServiceImpl getSapPurchasePropInfo(List materialNos) throws Exception { + String materialNoSnippet = CollUtil.join(materialNos, "','"); + materialNoSnippet = "'".concat(materialNoSnippet).concat("'"); + String sql = " select matnr,werks,BESKZ, SOBSL, PLIFZ from \"STG_ECC\".\"MARC\" where MATNR in ( "; + sql = sql.concat(materialNoSnippet).concat(" ) "); + sql = sql.concat(" and werks = '1010' "); + + log.info("获取HANA采购属性信息"); + PreparedStatement preparedStatement = sopConnection.prepareStatement(sql); + ResultSet resultSet = preparedStatement.executeQuery(); + List sopMaterialInfos = resultSetToBean(resultSet, SopMaterialInfo.class); + + return sopMaterialInfos; + } + /** * @param resultSet * @return @@ -2939,4 +2963,88 @@ public class MaterialMainService extends ServiceImpl> result = this.getBaseMapper().getListDataMap(query, (query.getPage() - 1) * query.getPageSize(), query.getPageSize()); + + if (result == null || result.size() <= 0) { + continue; + } + + sapInfoService.materialPurchasePropInfoTask(result); + List mResult = Convert.convert(new TypeReference>() { + }, result); + if (mResult == null || mResult.size() <= 0) { + continue; + } + // 过滤掉几个字段都没有值的数据,降低数据库的负担 + List filterList = mResult.stream() + .filter(item -> Objects.nonNull(item.getPurchaseType()) || Objects.nonNull(item.getSpecialPurchaseType()) || Objects.nonNull(item.getPlanDeliveryTime())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(filterList)) { + continue; + } + this.updateMaterialPropInfo(filterList); + } + long endTime = System.currentTimeMillis(); + log.info("获取采购属性信息结束,耗时(ms): {}", (endTime - startTime)); + + } + + private void updateMaterialPropInfo(List filterList) { + if (CollUtil.isEmpty(filterList)) { + return; + } + List existsList = materialMainAttrMapper.selectList(null); + if (CollUtil.isNotEmpty(existsList)) { + for (MaterialMainAttrEntity materialMainAttrEntity : filterList) { + try { + List sameList = existsList.stream().filter(item -> item.getMaterialNo().equals(materialMainAttrEntity.getMaterialNo()) + && item.getFactory().equals(materialMainAttrEntity.getFactory())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(sameList)) { + MaterialMainAttrEntity update = sameList.get(0); + update.setPurchaseType(materialMainAttrEntity.getPurchaseType()); + update.setSpecialPurchaseType(materialMainAttrEntity.getSpecialPurchaseType()); + update.setPlanDeliveryTime(materialMainAttrEntity.getPlanDeliveryTime()); + materialMainAttrMapper.updateById(materialMainAttrEntity); + } else { + this.saveMaterialMainAttr(materialMainAttrEntity); + } + } catch (Exception e) { + log.error("物料编号:" + materialMainAttrEntity.getMaterialNo() + "修改采购属性信息异常", e); + } + } + } else { + for (MaterialMainAttrEntity materialMainAttrEntity : filterList) { + try { + this.saveMaterialMainAttr(materialMainAttrEntity); + } catch (Exception e) { + log.error("物料编号:" + materialMainAttrEntity.getMaterialNo() + "修改采购属性信息异常", e); + } + } + } + } + + private void saveMaterialMainAttr(MaterialMainAttrEntity materialMainAttrEntity) { + MaterialMainAttrEntity save = new MaterialMainAttrEntity(); + save.setRowId(IdWorker.getId()); + save.setMaterialNo(materialMainAttrEntity.getMaterialNo()); + save.setFactory(materialMainAttrEntity.getFactory()); + save.setPurchaseType(materialMainAttrEntity.getPurchaseType()); + save.setSpecialPurchaseType(materialMainAttrEntity.getSpecialPurchaseType()); + save.setPlanDeliveryTime(materialMainAttrEntity.getPlanDeliveryTime()); + materialMainAttrMapper.insert(save); + } } diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/SapInfoService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/SapInfoService.java index 90feea82..34f1dd93 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/SapInfoService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/SapInfoService.java @@ -152,4 +152,34 @@ public class SapInfoService { }); } } + + public void materialPurchasePropInfoTask(List> result) { + CompletableFuture task = CompletableFuture.runAsync(() -> { + try { + initSapPurPropInfo(result); + } catch (Exception e) { + System.out.println("获取sap采购属性错误".concat(e.getMessage())); + } + }, futureTaskPool); + task.join(); + } + + private void initSapPurPropInfo(List> data) throws Exception { + List materialNos = data.stream().map(u -> u.get("materialNo").toString()).collect(Collectors.toList()); + List sapMaterialList = materialMainService.getSapPurchasePropInfo(handlerToSapMaterialNo(materialNos)); + if (sapMaterialList != null && sapMaterialList.size() > 0) { + Map sapMaterialMp = sapMaterialList.stream().collect(Collectors.toMap(SopMaterialInfo::getMATNR, user -> user, (oldValue, newValue) -> newValue)); + data.forEach(m -> { + if (sapMaterialMp.containsKey(handlerMaterialNoToSapMaterialNo(m.get("materialNo").toString()))) { + SopMaterialInfo sapMaterialInfo = sapMaterialMp.get(handlerMaterialNoToSapMaterialNo(m.get("materialNo").toString())); + if (sapMaterialInfo != null) { + m.put("factory", sapMaterialInfo.getWERKS()); + m.put("purchaseType", sapMaterialInfo.getBESKZ()); + m.put("specialPurchaseType", sapMaterialInfo.getSOBSL()); + m.put("planDeliveryTime", sapMaterialInfo.getPLIFZ()); + } + } + }); + } + } } diff --git a/nflg_project_dev/material/src/main/resources/mapper/master/MaterialMainAttrMapper.xml b/nflg_project_dev/material/src/main/resources/mapper/master/MaterialMainAttrMapper.xml new file mode 100644 index 00000000..01f31342 --- /dev/null +++ b/nflg_project_dev/material/src/main/resources/mapper/master/MaterialMainAttrMapper.xml @@ -0,0 +1,4 @@ + + + +