From fa3dfc210ea34c980c93a6f48a7fb5443b2f3c5b Mon Sep 17 00:00:00 2001 From: 10001392 <1055202292@qq.com> Date: Mon, 2 Sep 2024 11:19:49 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bomnew/api/user/ProductionOrderApi.java | 12 ++ .../pojo/entity/ProductionOrderEntity.java | 12 +- .../bomnew/pojo/vo/ProductionOrderVO.java | 22 +-- .../service/ProductionOrderService.java | 153 +++++++++++++++++- .../mapper/master/ProductionOrderMapper.xml | 4 +- 5 files changed, 179 insertions(+), 24 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/ProductionOrderApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/ProductionOrderApi.java index abfd0c32..2020ac23 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/ProductionOrderApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/ProductionOrderApi.java @@ -101,4 +101,16 @@ public class ProductionOrderApi extends BaseApi { return ResultVO.success(); } + /** + * 从SAP获取生产订单 + * + * @param query Query 查询实体 + * @return 所有数据 + */ + @PostMapping("syncProductionOrderFromSap") + @ApiOperation("从SAP获取生产订单") + public ResultVO syncProductionOrderFromSap(@RequestBody ProductionOrderQuery query) { + return productionOrderService.syncProductionOrderFromSap(query); + } + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderEntity.java index 0ed04227..e8ec851b 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderEntity.java @@ -53,12 +53,12 @@ public class ProductionOrderEntity implements Serializable { @ApiModelProperty(value = "物料编码") private String materialNo; - /** - * 物料描述 - */ - @TableField(value = "material_desc") - @ApiModelProperty(value = "物料描述") - private String materialDesc; +// /** +// * 物料描述 +// */ +// @TableField(value = "material_desc") +// @ApiModelProperty(value = "物料描述") +// private String materialDesc; /** * 数量 diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderVO.java index 4e3bb671..218057ad 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderVO.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; @Data @Accessors(chain = true) @ApiModel(value="com-nflg-product-bomnew-pojo-new-vo-ProductionOrderVO") -public class ProductionOrderVO implements Serializable { +public class ProductionOrderVO extends BaseMaterialVO implements Serializable { /** * 行ID 雪花 @@ -33,17 +33,17 @@ public class ProductionOrderVO implements Serializable { @ApiModelProperty(value = "生产订单号") private String productionOrder; - /** - * 物料编码 - */ - @ApiModelProperty(value = "物料编码") - private String materialNo; +// /** +// * 物料编码 +// */ +// @ApiModelProperty(value = "物料编码") +// private String materialNo; - /** - * 物料描述 - */ - @ApiModelProperty(value = "物料描述") - private String materialDesc; +// /** +// * 物料描述 +// */ +// @ApiModelProperty(value = "物料描述") +// private String materialDesc; /** * 数量 diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ProductionOrderService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ProductionOrderService.java index efe33968..577d04b3 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ProductionOrderService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ProductionOrderService.java @@ -3,8 +3,8 @@ package com.nflg.product.bomnew.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; -import cn.hutool.core.lang.TypeReference; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -12,7 +12,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.bomnew.mapper.master.ProductionOrderMapper; -import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; +import com.nflg.product.bomnew.pojo.dto.sap.SapReqParams; +import com.nflg.product.bomnew.pojo.dto.sap.SapResult; import com.nflg.product.bomnew.pojo.entity.ProductionOrderEntity; import com.nflg.product.bomnew.pojo.entity.ProductionOrderItemEntity; import com.nflg.product.bomnew.pojo.query.ProductionOrderQuery; @@ -20,26 +21,41 @@ import com.nflg.product.bomnew.pojo.query.ProductionOrderSaveQuery; import com.nflg.product.bomnew.pojo.vo.ProductionOrderItemVO; import com.nflg.product.bomnew.pojo.vo.ProductionOrderVO; import com.nflg.product.bomnew.util.VUtils; +import lombok.extern.slf4j.Slf4j; +import nflg.product.common.constant.STATE; +import nflg.product.common.vo.ResultVO; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; +import java.time.format.DateTimeFormatter; +import java.util.*; /** * @author makejava */ +@Slf4j @Service public class ProductionOrderService extends ServiceImpl { @Resource private ProductionOrderItemService productionOrderItemService; + @Resource + SapService sapService; + + @Resource + private MaterialMainService materialMainService; + public IPage getListByPage(ProductionOrderQuery query){ - Page page=new Page<>(query.getPage(),query.getPageSize()); - return this.getBaseMapper().getListByPage(page,query); + Page page = new Page<>(query.getPage(),query.getPageSize()); + Page listByPage = this.getBaseMapper().getListByPage(page, query); + if (CollUtil.isNotEmpty(listByPage.getRecords())) { + materialMainService.intiMaterialInfo(listByPage.getRecords()); + } + return listByPage; } public List getItemList(Long rowId) { @@ -144,4 +160,129 @@ public class ProductionOrderService extends ServiceImpl syncProductionOrderFromSap(ProductionOrderQuery query) { + SapReqParams params = new SapReqParams(); + // 接口名 + params.setFunName("ZMDM_PP_ORD_SYNC"); + if (ObjectUtil.isNotEmpty(query.getProductionOrder())) { + Map>> inputTables = new HashMap<>(); + Map aufnrMap = new HashMap<>(1); + aufnrMap.put("AUFNR", "0000" + query.getProductionOrder()); + List> inputList = Collections.singletonList(aufnrMap); + inputTables.put("INPUT", inputList); + params.setInputTables(inputTables); + } + Map inputParams = new HashMap<>(); + if (ObjectUtil.isNotEmpty(query.getStartDate())) { + inputParams.put("I_BDATE", query.getStartDate()); + } + if (ObjectUtil.isNotEmpty(query.getEndDate())) { + inputParams.put("I_EDATE", query.getEndDate()); + } + params.setInputParams(inputParams); + log.info("从SAP获取生产订单--参数:" + JSON.toJSONString(params)); + try { + SapResult sapResult = sapService.doSapFun(params); +// System.out.println("sapResult"); +// System.out.println(sapResult); + if (!sapResult.isSuccess()) { + return ResultVO.error(STATE.Error, "接口连接失败"); + } + Map exportMap = sapResult.getExportMap(); + if (CollUtil.isNotEmpty(exportMap) && !"S".equals(exportMap.get("E_TYPE"))) { + log.error("从SAP获取生产订单失败: {}", exportMap.get("E_MSG")); + return ResultVO.error("从SAP获取生产订单失败: {}", exportMap.get("E_MSG")); + } + Map>> outTablesMap = sapResult.getOutTablesMap(); + log.info("从SAP获取生产订单--返回数据:" + JSON.toJSONString(outTablesMap)); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", java.util.Locale.US); + // 生产订单抬头 + if (outTablesMap.containsKey("HEAD")) { + /** + * FTRMI=Wed Aug 07 00:00:00 CST 2024, 实际下达日期 + * AENAM=MM014, 最后更改人 + * WERKS=1010, 工厂 + * AEDAT=Wed Aug 07 00:00:00 CST 2024, 更改订单主文件日期 + * SBMNG=1.000, 基本数量 + * GMEIN=ST, 基本计量单位 + * STLBEZ=000000002120230002, 物料号 + * GAMNG=1.000, 订单数量总计 + * AUTYP=10, 订单类型 + * AUFNR=000010435564, 订单号 + * RSNUM=0001308129, 预留/相关需求的编号 + * ERFZEIT=Thu Jan 01 21:59:00 CST 1970, 创建的时间 + * SBMEH=ST, 基本计量单位 + * ERDAT=Tue Jan 02 00:00:00 CST 2024, 创建日期 + * AEZEIT=Thu Jan 01 09:57:04 CST 1970, 更改在 + * ERNAM=PANF 输入者 + */ + List> headList = outTablesMap.get("HEAD"); + if (CollUtil.isNotEmpty(headList)) { + List saveList = new ArrayList<>(); + for (Map head : headList) { + if (ObjectUtil.isEmpty(head.get("AUFNR"))) { + continue; + } + String productionOrder = head.get("AUFNR").toString().replaceAll("^0+", ""); + // 生产订单号存在则跳过 + List exists = this.lambdaQuery().eq(ProductionOrderEntity::getProductionOrder, productionOrder).list(); + if (CollUtil.isNotEmpty(exists)) { + continue; + } + ProductionOrderEntity save = new ProductionOrderEntity(); + save.setRowId(IdWorker.getId()); + save.setFactory(ObjectUtil.isNotEmpty(head.get("WERKS")) ? head.get("WERKS").toString() : ""); + save.setProductionOrder(productionOrder); + save.setMaterialNo(ObjectUtil.isNotEmpty(head.get("STLBEZ")) ? head.get("STLBEZ").toString().replaceAll("^0+", "") : ""); + save.setNum(ObjectUtil.isNotEmpty(head.get("GAMNG")) ? new BigDecimal(head.get("GAMNG").toString()) : null); + save.setUnit(ObjectUtil.isNotEmpty(head.get("GMEIN")) ? head.get("GMEIN").toString() : ""); + save.setOrderType(ObjectUtil.isNotEmpty(head.get("AUTYP")) ? head.get("AUTYP").toString() : ""); + save.setLongText(""); + save.setContractNo(""); + save.setFindId(""); + save.setCreatedBy(ObjectUtil.isNotEmpty(head.get("ERNAM")) ? head.get("ERNAM").toString() : ""); + save.setCreatedTime(ObjectUtil.isNotEmpty(head.get("ERDAT")) ? LocalDateTime.parse(head.get("ERDAT").toString(), dateTimeFormatter) : null); + save.setUpdatedBy(ObjectUtil.isNotEmpty(head.get("AENAM")) ? head.get("AENAM").toString() : ""); + save.setUpdatedTime(ObjectUtil.isNotEmpty(head.get("AEDAT")) ? LocalDateTime.parse(head.get("AEDAT").toString(), dateTimeFormatter) : null); + saveList.add(save); + } + this.saveBatch(saveList); + } + } + // 生产订单明细(暂时不需要处理) + if (outTablesMap.containsKey("ITEM")) { + /** + * CHARG=, 批号 + * BAUGR=000000002120230002, 高层次组装的物料号 + * WERKS=1010, 工厂 + * LGORT=0022, 库存地点 + * BDMNG=1.000, 需求量 + * MEINS=ST, 基本计量单位 + * ENMNG=0.000, 提货数 + * AUFNR=000010435564, 订单号 + * RSNUM=0001308129, 预留/相关需求的编号 + * NOMAT=, 后继/原始物料 + * POSNR=0010, BOM 项目号 + * NOMNG=0.000, 需求数量 + * RSPOS=0001, 预留/相关需求的项目编号 + * DUMPS=, 虚拟项目标识 + * PRVBE=, 供应区域 + * POSTP=L, 项目类别(物料单) + * BDTER=Tue Jan 02 00:00:00 CST 2024, 组件的需求日期 + * SORTF=, 排序字符串 + * MATNR=000000002100330331 物料号 + */ + } + } catch (Exception e) { + e.printStackTrace(); + log.error("从SAP获取生产订单报错: {}", e.getMessage()); + return ResultVO.error("从SAP获取生产订单报错: {}", e.getMessage()); + } + return ResultVO.success(); + } } diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderMapper.xml index adc45d05..40514421 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderMapper.xml @@ -36,7 +36,9 @@