Merge remote-tracking branch 'origin/master-order-20240830' into test

This commit is contained in:
10001392 2024-09-02 14:12:34 +08:00
commit a616106b70
17 changed files with 514 additions and 31 deletions

View File

@ -284,6 +284,19 @@ public class MaterialExcelService {
excelEnt.setProcessState(MaterialProcessStateEnum.WAIT_SUBMIT.getValue()); excelEnt.setProcessState(MaterialProcessStateEnum.WAIT_SUBMIT.getValue());
if (ObjectUtil.isNotEmpty(excelEnt.getMaterialName())) { if (ObjectUtil.isNotEmpty(excelEnt.getMaterialName())) {
excelEnt.setMaterialDescEn(query21MaterialDescEn(excelEnt.getMaterialName().split(" ")[0])); 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<String> descDbExites = dbExitstDesc.stream().map(MaterialMainEntity::getMaterialDesc).collect(Collectors.toList()); List<String> descDbExites = dbExitstDesc.stream().map(MaterialMainEntity::getMaterialDesc).collect(Collectors.toList());
throw new NflgBusinessException(STATE.ParamErr, StrUtil.join(",", descDbExites).concat("图号+名称在数据库中已存在")); throw new NflgBusinessException(STATE.ParamErr, StrUtil.join(",", descDbExites).concat("图号+名称在数据库中已存在"));
} }
// 检查英文描述不能为空
List<MaterialSelfExcelDTO> emptyMaterialDescEnList = datas.stream()
.filter(item -> !"201301".equals(item.getMaterialCategoryCode()) && ObjectUtil.isEmpty(item.getMaterialDescEn()))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(emptyMaterialDescEnList)) {
List<String> emptyDescEnList = emptyMaterialDescEnList.stream().map(MaterialSelfExcelDTO::getMaterialName).collect(Collectors.toList());
throw new NflgBusinessException(STATE.ParamErr, StrUtil.join(",", emptyDescEnList).concat("未匹配到英文描述"));
}
List<MaterialMainEntity> result = Convert.convert(new TypeReference<List<MaterialMainEntity>>() { List<MaterialMainEntity> result = Convert.convert(new TypeReference<List<MaterialMainEntity>>() {
}, datas); }, datas);

View File

@ -1202,14 +1202,14 @@ public class MaterialMainService extends ServiceImpl<MaterialMainMapper, Materia
*/ */
public void initPic(MaterialMainVO data) { public void initPic(MaterialMainVO data) {
MaterialFilesEntity file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0) MaterialFilesEntity file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0)
.eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialNo()).one(); .eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialNo()).orderByDesc(MaterialFilesEntity::getCreatedTime).last(" limit 1").one();
if (Objects.isNull(file)) { if (Objects.isNull(file)) {
file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0) file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0)
.eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialCategoryCode()).one(); .eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialCategoryCode()).orderByDesc(MaterialFilesEntity::getCreatedTime).last(" limit 1").one();
} }
if (Objects.isNull(file)) { if (Objects.isNull(file)) {
file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0) file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0)
.eq(MaterialFilesEntity::getMaterialOrCategoryNo, String.valueOf(data.getRowId())).one(); .eq(MaterialFilesEntity::getMaterialOrCategoryNo, String.valueOf(data.getRowId())).orderByDesc(MaterialFilesEntity::getCreatedTime).last(" limit 1").one();
} }
if (!Objects.isNull(file)) { if (!Objects.isNull(file)) {
data.setPicUrl(file.getFileUrl()); data.setPicUrl(file.getFileUrl());
@ -1223,14 +1223,14 @@ public class MaterialMainService extends ServiceImpl<MaterialMainMapper, Materia
*/ */
public void initPic2(MaterialMainVO data) { public void initPic2(MaterialMainVO data) {
MaterialFilesEntity file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0) MaterialFilesEntity file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0)
.eq(MaterialFilesEntity::getMaterialOrCategoryNo, String.valueOf(data.getRowId())).one(); .eq(MaterialFilesEntity::getMaterialOrCategoryNo, String.valueOf(data.getRowId())).orderByDesc(MaterialFilesEntity::getCreatedTime).last(" limit 1").one();
if (Objects.isNull(file)) { if (Objects.isNull(file)) {
file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0) file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0)
.eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialNo()).one(); .eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialNo()).orderByDesc(MaterialFilesEntity::getCreatedTime).last(" limit 1").one();
} }
if (Objects.isNull(file)) { if (Objects.isNull(file)) {
file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0) file = materialFilesService.lambdaQuery().eq(MaterialFilesEntity::getFileType, 0)
.eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialCategoryCode()).one(); .eq(MaterialFilesEntity::getMaterialOrCategoryNo, data.getMaterialCategoryCode()).orderByDesc(MaterialFilesEntity::getCreatedTime).last(" limit 1").one();
} }
if (!Objects.isNull(file)) { if (!Objects.isNull(file)) {
data.setPicUrl(file.getFileUrl()); data.setPicUrl(file.getFileUrl());

View File

@ -101,4 +101,16 @@ public class ProductionOrderApi extends BaseApi {
return ResultVO.success(); return ResultVO.success();
} }
/**
* 从SAP获取生产订单
*
* @param query Query 查询实体
* @return 所有数据
*/
@PostMapping("syncProductionOrderFromSap")
@ApiOperation("从SAP获取生产订单")
public ResultVO<String> syncProductionOrderFromSap(@RequestBody ProductionOrderQuery query) {
return productionOrderService.syncProductionOrderFromSap(query);
}
} }

View File

@ -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<ProductionOrderItemSapEntity> {
}

View File

@ -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<ProductionOrderSapEntity> {
}

View File

@ -53,6 +53,13 @@ public class MaterialMainEntity implements Serializable {
@ApiModelProperty(value = "物料描述") @ApiModelProperty(value = "物料描述")
private String materialDesc; private String materialDesc;
/**
* 英文描述
*/
@TableField(value = "material_desc_en")
@ApiModelProperty(value = "英文描述")
private String materialDescEn;
/** /**
* 物料描述(简写) * 物料描述(简写)
*/ */

View File

@ -53,12 +53,12 @@ public class ProductionOrderEntity implements Serializable {
@ApiModelProperty(value = "物料编码") @ApiModelProperty(value = "物料编码")
private String materialNo; private String materialNo;
/** // /**
* 物料描述 // * 物料描述
*/ // */
@TableField(value = "material_desc") // @TableField(value = "material_desc")
@ApiModelProperty(value = "物料描述") // @ApiModelProperty(value = "物料描述")
private String materialDesc; // private String materialDesc;
/** /**
* 数量 * 数量

View File

@ -158,6 +158,13 @@ public class ProductionOrderItemEntity implements Serializable {
@ApiModelProperty(value = "提交 0否 1是") @ApiModelProperty(value = "提交 0否 1是")
private Integer submit; private Integer submit;
/**
* 操作类型0不变 1新增 2修改 3删除
*/
@TableField(value = "operate_type")
@ApiModelProperty(value = "操作类型0不变 1新增 2修改 3删除")
private Integer operateType;
/** /**
* 创建人 * 创建人
*/ */

View File

@ -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;
}

View File

@ -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;
}

View File

@ -128,6 +128,12 @@ public class ProductionOrderItemVO implements Serializable {
@ApiModelProperty(value = "提交 0否 1是") @ApiModelProperty(value = "提交 0否 1是")
private Integer submit; private Integer submit;
/**
* 操作类型0不变 1新增 2修改 3删除
*/
@ApiModelProperty(value = "操作类型0不变 1新增 2修改 3删除")
private Integer operateType;
/** /**
* 创建人 * 创建人
*/ */

View File

@ -13,7 +13,7 @@ import java.time.LocalDateTime;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@ApiModel(value="com-nflg-product-bomnew-pojo-new-vo-ProductionOrderVO") @ApiModel(value="com-nflg-product-bomnew-pojo-new-vo-ProductionOrderVO")
public class ProductionOrderVO implements Serializable { public class ProductionOrderVO extends BaseMaterialVO implements Serializable {
/** /**
* 行ID 雪花 * 行ID 雪花
@ -33,17 +33,17 @@ public class ProductionOrderVO implements Serializable {
@ApiModelProperty(value = "生产订单号") @ApiModelProperty(value = "生产订单号")
private String productionOrder; private String productionOrder;
/** // /**
* 物料编码 // * 物料编码
*/ // */
@ApiModelProperty(value = "物料编码") // @ApiModelProperty(value = "物料编码")
private String materialNo; // private String materialNo;
/** // /**
* 物料描述 // * 物料描述
*/ // */
@ApiModelProperty(value = "物料描述") // @ApiModelProperty(value = "物料描述")
private String materialDesc; // private String materialDesc;
/** /**
* 数量 * 数量

View File

@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
@ -206,6 +207,7 @@ public class MaterialService {
ma.setProjectType(md.getProjectType()); ma.setProjectType(md.getProjectType());
} }
ma.setMaterialGetType(md.getMaterialGetType()); ma.setMaterialGetType(md.getMaterialGetType());
this.get201101MaterialDescEn(ma);
resultList.add(ma); resultList.add(ma);
AddMaterialMainDTO ent = new AddMaterialMainDTO(); AddMaterialMainDTO ent = new AddMaterialMainDTO();
@ -236,6 +238,22 @@ public class MaterialService {
return result; 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<String, AddVirtrualMaterialDTO> batchAddMaterial(List<AddVirtrualMaterialDTO> mds) { public Map<String, AddVirtrualMaterialDTO> batchAddMaterial(List<AddVirtrualMaterialDTO> mds) {
return batchAddMaterial(mds, SessionUtil.getUser()); return batchAddMaterial(mds, SessionUtil.getUser());
} }

View File

@ -3,43 +3,65 @@ package com.nflg.product.bomnew.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.ObjectUtil; 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.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.product.base.core.conmon.util.SessionUtil; 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.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.ProductionOrderEntity;
import com.nflg.product.bomnew.pojo.entity.ProductionOrderItemEntity; 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.ProductionOrderQuery;
import com.nflg.product.bomnew.pojo.query.ProductionOrderSaveQuery; import com.nflg.product.bomnew.pojo.query.ProductionOrderSaveQuery;
import com.nflg.product.bomnew.pojo.vo.ProductionOrderItemVO; import com.nflg.product.bomnew.pojo.vo.ProductionOrderItemVO;
import com.nflg.product.bomnew.pojo.vo.ProductionOrderVO; import com.nflg.product.bomnew.pojo.vo.ProductionOrderVO;
import com.nflg.product.bomnew.util.VUtils; 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 org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.*;
/** /**
* @author makejava * @author makejava
*/ */
@Slf4j
@Service @Service
public class ProductionOrderService extends ServiceImpl<ProductionOrderMapper, ProductionOrderEntity> { public class ProductionOrderService extends ServiceImpl<ProductionOrderMapper, ProductionOrderEntity> {
@Resource @Resource
private ProductionOrderItemService productionOrderItemService; private ProductionOrderItemService productionOrderItemService;
@Resource
SapService sapService;
@Resource
private MaterialMainService materialMainService;
@Resource
private ProductionOrderSapMapper productionOrderSapMapper;
@Resource
private ProductionOrderItemSapMapper productionOrderItemSapMapper;
public IPage<ProductionOrderVO> getListByPage(ProductionOrderQuery query){ public IPage<ProductionOrderVO> getListByPage(ProductionOrderQuery query){
Page<ProductionOrderQuery> page=new Page<>(query.getPage(),query.getPageSize()); Page<ProductionOrderQuery> page = new Page<>(query.getPage(),query.getPageSize());
return this.getBaseMapper().getListByPage(page,query); Page<ProductionOrderVO> listByPage = this.getBaseMapper().getListByPage(page, query);
if (CollUtil.isNotEmpty(listByPage.getRecords())) {
materialMainService.intiMaterialInfo(listByPage.getRecords());
}
return listByPage;
} }
public List<ProductionOrderItemVO> getItemList(Long rowId) { public List<ProductionOrderItemVO> getItemList(Long rowId) {
@ -144,4 +166,133 @@ public class ProductionOrderService extends ServiceImpl<ProductionOrderMapper, P
updateEntity.setUpdatedTime(LocalDateTime.now()); updateEntity.setUpdatedTime(LocalDateTime.now());
this.updateById(updateEntity); this.updateById(updateEntity);
} }
/**
* 从SAP获取生产订单
* @param query
*/
public ResultVO<String> syncProductionOrderFromSap(ProductionOrderQuery query) {
SapReqParams params = new SapReqParams();
// 接口名
params.setFunName("ZMDM_PP_ORD_SYNC");
if (ObjectUtil.isNotEmpty(query.getProductionOrder())) {
Map<String, List<Map<String, String>>> inputTables = new HashMap<>();
Map<String, String> aufnrMap = new HashMap<>(1);
aufnrMap.put("AUFNR", "0000" + query.getProductionOrder());
List<Map<String, String>> inputList = Collections.singletonList(aufnrMap);
inputTables.put("INPUT", inputList);
params.setInputTables(inputTables);
}
Map<String, Object> 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<String, Object> 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<String, List<Map<String, Object>>> 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<Map<String, Object>> headList = outTablesMap.get("HEAD");
if (CollUtil.isNotEmpty(headList)) {
List<ProductionOrderEntity> saveList = new ArrayList<>();
for (Map<String, Object> head : headList) {
if (ObjectUtil.isEmpty(head.get("AUFNR"))) {
continue;
}
String productionOrder = head.get("AUFNR").toString().replaceAll("^0+", "");
// 生产订单号存在且未处理则跳过
QueryWrapper<ProductionOrderSapEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("AUFNR", productionOrder)
.eq("handle_status", 0);
List<ProductionOrderSapEntity> exist = this.productionOrderSapMapper.selectList(queryWrapper);
List<ProductionOrderEntity> 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();
}
} }

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.product.bomnew.mapper.master.ProductionOrderItemSapMapper">
</mapper>

View File

@ -36,7 +36,9 @@
</sql> </sql>
<select id="getListByPage" resultType="com.nflg.product.bomnew.pojo.vo.ProductionOrderVO"> <select id="getListByPage" resultType="com.nflg.product.bomnew.pojo.vo.ProductionOrderVO">
select * from t_production_order where 1=1 select po.*, mm.material_desc materialDesc from t_production_order po
left join t_material_main mm on po.material_no = mm.material_no
where 1=1
<include refid="whr"/> <include refid="whr"/>
order by row_id desc order by row_id desc
</select> </select>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.product.bomnew.mapper.master.ProductionOrderSapMapper">
</mapper>