diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialExcelService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialExcelService.java index f93925a1..5f9904ad 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialExcelService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialExcelService.java @@ -284,6 +284,19 @@ public class MaterialExcelService { excelEnt.setProcessState(MaterialProcessStateEnum.WAIT_SUBMIT.getValue()); if (ObjectUtil.isNotEmpty(excelEnt.getMaterialName())) { excelEnt.setMaterialDescEn(query21MaterialDescEn(excelEnt.getMaterialName().split(" ")[0])); + if ("201101".equals(excelEnt.getMaterialCategoryCode())) { + if (excelEnt.getMaterialName().endsWith("(发货)")) { + excelEnt.setMaterialDescEn("Deliver Goods Package"); + } else if (excelEnt.getMaterialName().endsWith("(制作)")) { + excelEnt.setMaterialDescEn("Make Package"); + } else if (excelEnt.getMaterialName().endsWith("(直发)")) { + excelEnt.setMaterialDescEn("Inventory Deliver Goods Package"); + } else if (excelEnt.getMaterialName().endsWith("(油漆)")) { + excelEnt.setMaterialDescEn("Paint Package"); + } else if (excelEnt.getMaterialName().endsWith("(发货前装配)")) { + excelEnt.setMaterialDescEn("Assembly before Shipment"); + } + } } } @@ -304,6 +317,14 @@ public class MaterialExcelService { List descDbExites = dbExitstDesc.stream().map(MaterialMainEntity::getMaterialDesc).collect(Collectors.toList()); throw new NflgBusinessException(STATE.ParamErr, StrUtil.join(",", descDbExites).concat("图号+名称在数据库中已存在")); } + // 检查英文描述不能为空 + List emptyMaterialDescEnList = datas.stream() + .filter(item -> !"201301".equals(item.getMaterialCategoryCode()) && ObjectUtil.isEmpty(item.getMaterialDescEn())) + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(emptyMaterialDescEnList)) { + List emptyDescEnList = emptyMaterialDescEnList.stream().map(MaterialSelfExcelDTO::getMaterialName).collect(Collectors.toList()); + throw new NflgBusinessException(STATE.ParamErr, StrUtil.join(",", emptyDescEnList).concat("未匹配到英文描述")); + } List result = Convert.convert(new TypeReference>() { }, datas); 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 8a0c744a..3b6727f0 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 @@ -1202,14 +1202,14 @@ public class MaterialMainService extends ServiceImpl syncProductionOrderFromSap(@RequestBody ProductionOrderQuery query) { + return productionOrderService.syncProductionOrderFromSap(query); + } + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/ProductionOrderItemSapMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/ProductionOrderItemSapMapper.java new file mode 100644 index 00000000..47372c58 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/ProductionOrderItemSapMapper.java @@ -0,0 +1,11 @@ +package com.nflg.product.bomnew.mapper.master; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.product.bomnew.pojo.entity.ProductionOrderItemSapEntity; + +/** + * @author makejava + */ +public interface ProductionOrderItemSapMapper extends BaseMapper { + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/ProductionOrderSapMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/ProductionOrderSapMapper.java new file mode 100644 index 00000000..f2a02f2a --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/ProductionOrderSapMapper.java @@ -0,0 +1,11 @@ +package com.nflg.product.bomnew.mapper.master; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.product.bomnew.pojo.entity.ProductionOrderSapEntity; + +/** + * @author makejava + */ +public interface ProductionOrderSapMapper extends BaseMapper { + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/MaterialMainEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/MaterialMainEntity.java index 7c0f0bf4..58f60ed9 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/MaterialMainEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/MaterialMainEntity.java @@ -52,7 +52,14 @@ public class MaterialMainEntity implements Serializable { @TableField(value = "material_desc") @ApiModelProperty(value = "物料描述") private String materialDesc; - + + /** + * 英文描述 + */ + @TableField(value = "material_desc_en") + @ApiModelProperty(value = "英文描述") + private String materialDescEn; + /** * 物料描述(简写) */ 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/entity/ProductionOrderItemEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderItemEntity.java index 0daae617..5e40e2cb 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderItemEntity.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderItemEntity.java @@ -158,6 +158,13 @@ public class ProductionOrderItemEntity implements Serializable { @ApiModelProperty(value = "提交 0否 1是") private Integer submit; + /** + * 操作类型:0不变 1新增 2修改 3删除 + */ + @TableField(value = "operate_type") + @ApiModelProperty(value = "操作类型:0不变 1新增 2修改 3删除") + private Integer operateType; + /** * 创建人 */ diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderItemSapEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderItemSapEntity.java new file mode 100644 index 00000000..0487499d --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderItemSapEntity.java @@ -0,0 +1,121 @@ +package com.nflg.product.bomnew.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * t_production_order_item_sap + * 生产订单明细表(SAP原始数据) + * + * @author makejava + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-bomnew-pojo-main-entity-ProductionOrderItemSapEntity") +@TableName(value = "t_production_order_item_sap") +public class ProductionOrderItemSapEntity implements Serializable { + + /** + * 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 物料号 + */ + + /** + * 行ID 雪花 + */ + @TableId(value = "row_id", type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "行ID 雪花") + private Long rowId; + + /** + * 生产订单行ID + */ + @TableField(value = "order_row_id") + @ApiModelProperty(value = "生产订单行ID") + private Long orderRowId; + + @TableField(value = "CHARG") + private String CHARG; + + @TableField(value = "BAUGR") + private String BAUGR; + + @TableField(value = "WERKS") + private String WERKS; + + @TableField(value = "LGORT") + private String LGORT; + + @TableField(value = "BDMNG") + private String BDMNG; + + @TableField(value = "MEINS") + private String MEINS; + + @TableField(value = "ENMNG") + private String ENMNG; + + @TableField(value = "AUFNR") + private String AUFNR; + + @TableField(value = "RSNUM") + private String RSNUM; + + @TableField(value = "NOMAT") + private String NOMAT; + + @TableField(value = "POSNR") + private String POSNR; + + @TableField(value = "NOMNG") + private String NOMNG; + + @TableField(value = "RSPOS") + private String RSPOS; + + @TableField(value = "DUMPS") + private String DUMPS; + + @TableField(value = "PRVBE") + private String PRVBE; + + @TableField(value = "POSTP") + private String POSTP; + + @TableField(value = "BDTER") + private String BDTER; + + @TableField(value = "SORTF") + private String SORTF; + + @TableField(value = "MATNR") + private String MATNR; + + private static final long serialVersionUID = 1L; + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderSapEntity.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderSapEntity.java new file mode 100644 index 00000000..73e86c02 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/entity/ProductionOrderSapEntity.java @@ -0,0 +1,108 @@ +package com.nflg.product.bomnew.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * t_production_order_sap + * 生产订单抬头表(SAP原始数据) + * + * @author makejava + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "com-nflg-product-bomnew-pojo-main-entity-ProductionOrderSapEntity") +@TableName(value = "t_production_order_sap") +public class ProductionOrderSapEntity implements Serializable { + + /** + * 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 输入者 + */ + + /** + * 行ID 雪花 + */ + @TableId(value = "row_id", type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "行ID 雪花") + private Long rowId; + + @TableField(value = "FTRMI") + private String FTRMI; + + @TableField(value = "AENAM") + private String AENAM; + + @TableField(value = "WERKS") + private String WERKS; + + @TableField(value = "AEDAT") + private String AEDAT; + + @TableField(value = "SBMNG") + private String SBMNG; + + @TableField(value = "GMEIN") + private String GMEIN; + + @TableField(value = "STLBEZ") + private String STLBEZ; + + @TableField(value = "GAMNG") + private String GAMNG; + + @TableField(value = "AUTYP") + private String AUTYP; + + @TableField(value = "AUFNR") + private String AUFNR; + + @TableField(value = "RSNUM") + private String RSNUM; + + @TableField(value = "ERFZEIT") + private String ERFZEIT; + + @TableField(value = "SBMEH") + private String SBMEH; + + @TableField(value = "ERDAT") + private String ERDAT; + + @TableField(value = "AEZEIT") + private String AEZEIT; + + @TableField(value = "ERNAM") + private String ERNAM; + + /** + * 处理状态 0未处理 1已处理 + */ + @TableField(value = "handle_status") + private Integer handleStatus; + + private static final long serialVersionUID = 1L; + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderItemVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderItemVO.java index df154707..0ab6d9eb 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderItemVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/ProductionOrderItemVO.java @@ -128,6 +128,12 @@ public class ProductionOrderItemVO implements Serializable { @ApiModelProperty(value = "提交 0否 1是") private Integer submit; + /** + * 操作类型:0不变 1新增 2修改 3删除 + */ + @ApiModelProperty(value = "操作类型:0不变 1新增 2修改 3删除") + private Integer operateType; + /** * 创建人 */ 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/MaterialService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java index cda22991..f87ea03f 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java @@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; @@ -206,6 +207,7 @@ public class MaterialService { ma.setProjectType(md.getProjectType()); } ma.setMaterialGetType(md.getMaterialGetType()); + this.get201101MaterialDescEn(ma); resultList.add(ma); AddMaterialMainDTO ent = new AddMaterialMainDTO(); @@ -236,6 +238,22 @@ public class MaterialService { return result; } + private void get201101MaterialDescEn(MaterialMainEntity ma) { + if ("201101".equals(ma.getMaterialCategoryCode()) && ObjectUtil.isNotEmpty(ma.getMaterialName())) { + if (ma.getMaterialName().endsWith("(发货)")) { + ma.setMaterialDescEn("Deliver Goods Package"); + } else if (ma.getMaterialName().endsWith("(制作)")) { + ma.setMaterialDescEn("Make Package"); + } else if (ma.getMaterialName().endsWith("(直发)")) { + ma.setMaterialDescEn("Inventory Deliver Goods Package"); + } else if (ma.getMaterialName().endsWith("(油漆)")) { + ma.setMaterialDescEn("Paint Package"); + } else if (ma.getMaterialName().endsWith("(发货前装配)")) { + ma.setMaterialDescEn("Assembly before Shipment"); + } + } + } + public Map batchAddMaterial(List mds) { return batchAddMaterial(mds, SessionUtil.getUser()); } 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..4d3379a0 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,43 +3,65 @@ 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.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.ProductionOrderItemSapMapper; import com.nflg.product.bomnew.mapper.master.ProductionOrderMapper; -import com.nflg.product.bomnew.pojo.entity.BomNewDQbomChildEntity; +import com.nflg.product.bomnew.mapper.master.ProductionOrderSapMapper; +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.entity.ProductionOrderSapEntity; import com.nflg.product.bomnew.pojo.query.ProductionOrderQuery; 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; + @Resource + private ProductionOrderSapMapper productionOrderSapMapper; + @Resource + private ProductionOrderItemSapMapper productionOrderItemSapMapper; 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 +166,133 @@ 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+", ""); + // 生产订单号存在且未处理则跳过 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("AUFNR", productionOrder) + .eq("handle_status", 0); + List exist = this.productionOrderSapMapper.selectList(queryWrapper); + 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/ProductionOrderItemSapMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderItemSapMapper.xml new file mode 100644 index 00000000..a88afca1 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderItemSapMapper.xml @@ -0,0 +1,4 @@ + + + + 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 @@ diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderSapMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderSapMapper.xml new file mode 100644 index 00000000..4b127a5f --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/ProductionOrderSapMapper.xml @@ -0,0 +1,4 @@ + + + +