add - API模块、SAP物料接口

master
yinq 2 years ago
parent cdf764338a
commit 748baeaff1

@ -79,6 +79,12 @@
<artifactId>aucma-base</artifactId>
</dependency>
<!-- API接口-->
<dependency>
<groupId>com.aucma</groupId>
<artifactId>aucma-api</artifactId>
</dependency>
</dependencies>
<build>

@ -1,7 +1,7 @@
# 开发环境配置
server:
# 服务器的HTTP端口默认为8080
port: 8080
port: 6061
servlet:
# 应用的访问路径
context-path: /
@ -16,6 +16,12 @@ server:
# Tomcat启动初始化的线程数默认值10
min-spare: 100
# SAP接口
sap:
# URL前缀
prefix: http://soaqas.aucma.com:8011
# 数据源配置
spring:
# 文件上传

@ -16,6 +16,11 @@ server:
# Tomcat启动初始化的线程数默认值10
min-spare: 100
# SAP接口
sap:
# URL前缀
prefix: http://10.11.43.111:81
# 数据源配置
spring:
# 文件上传

@ -16,6 +16,11 @@ server:
# Tomcat启动初始化的线程数默认值10
min-spare: 100
# SAP接口
sap:
# URL前缀
prefix: http://10.11.43.111:81
# 数据源配置
spring:
# 文件上传

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>aucma</artifactId>
<groupId>com.aucma</groupId>
<version>3.8.6</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>aucma-api</artifactId>
<description>
API接口
</description>
<dependencies>
<!-- 基础数据-->
<dependency>
<groupId>com.aucma</groupId>
<artifactId>aucma-base</artifactId>
</dependency>
</dependencies>
</project>

@ -0,0 +1,53 @@
package com.aucma.api.controller;
import com.aucma.api.domain.dto.SAPPortDto;
import com.aucma.api.domain.dto.WERKSDto;
import com.aucma.api.service.ISAPPortService;
import com.aucma.base.domain.BaseMaterialInfo;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
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;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author YinQ
* @create 2023-09-26 14:29
*/
@RestController
@RequestMapping("/sap/port")
public class SAPPortController extends BaseController {
@Autowired
private ISAPPortService sapPortService;
/**
* SAP
* @param paramMap
* @return
*/
@PostMapping("/getSAPMaterialData")
public AjaxResult getSAPMaterialData(@RequestBody Map paramMap) {
SAPPortDto sapPortDto = new SAPPortDto();
sapPortDto.setStartDate(String.valueOf(paramMap.get("NDATE")));
sapPortDto.setEndDate(String.valueOf(paramMap.get("EDATE")));
HashMap<String,List<HashMap<String,String>>> werksMap = (HashMap<String,List<HashMap<String,String>>>)paramMap.get("WERKS");
WERKSDto werksDto = new WERKSDto();
werksDto.setItem(werksMap.get("item"));
sapPortDto.setFactoryCodes(werksDto);
List<BaseMaterialInfo> materialVoList = sapPortService.getSAPMaterialData(sapPortDto);
return AjaxResult.success(materialVoList);
}
}

@ -0,0 +1,58 @@
package com.aucma.api.domain.dto;
import com.aucma.common.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @Author YinQ
* @create 2023-09-26 14:46
*/
public class SAPPortDto {
private static final long serialVersionUID = 1L;
/**
*
*/
@JsonProperty(value = "NDATE")
private String startDate;
/**
*
*/
@JsonProperty(value = "EDATE")
private String endDate;
/**
*
*/
@JsonProperty(value = "WERKS")
private WERKSDto factoryCodes;
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public WERKSDto getFactoryCodes() {
return factoryCodes;
}
public void setFactoryCodes(WERKSDto factoryCodes) {
this.factoryCodes = factoryCodes;
}
}

@ -0,0 +1,33 @@
package com.aucma.api.domain.dto;
import java.util.HashMap;
import java.util.List;
/**
* @Author YinQ
* @create 2023-09-26 15:13
*/
public class WERKSDto {
/**
* Map
*/
List<HashMap<String, String>> item;
public List<HashMap<String, String>> getItem() {
return item;
}
public void setItem(List<HashMap<String, String>> item) {
this.item = item;
}
@Override
public String toString() {
return "WERKSDto{" +
"item=" + item +
'}';
}
}

@ -0,0 +1,58 @@
package com.aucma.api.domain.vo;
import com.aucma.api.domain.dto.WERKSDto;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.HashMap;
import java.util.List;
/**
*
*
* @Author YinQ
* @create 2023-09-27 13:37
*/
public class SAPResultVo {
@JsonProperty(value = "O_TAB")
private HashMap<String, List<HashMap<String, String>>> O_TAB;
@JsonProperty(value = "WERKS")
private String WERKS;
@JsonProperty(value = "O_RETURN")
private WERKSDto O_RETURN;
public HashMap<String, List<HashMap<String, String>>> getO_TAB() {
return O_TAB;
}
public void setO_TAB(HashMap<String, List<HashMap<String, String>>> o_TAB) {
O_TAB = o_TAB;
}
public String getWERKS() {
return WERKS;
}
public void setWERKS(String WERKS) {
this.WERKS = WERKS;
}
public WERKSDto getO_RETURN() {
return O_RETURN;
}
public void setO_RETURN(WERKSDto o_RETURN) {
O_RETURN = o_RETURN;
}
@Override
public String toString() {
return "SAPResultVo{" +
"O_TAB=" + O_TAB +
", WERKS='" + WERKS + '\'' +
", O_RETURN=" + O_RETURN +
'}';
}
}

@ -0,0 +1,27 @@
package com.aucma.api.service;
import com.aucma.api.domain.dto.SAPPortDto;
import com.aucma.base.domain.BaseMaterialInfo;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author YinQ
* @create 2023-09-26 14:33
*/
@Service("SAPPort")
public interface ISAPPortService {
/**
* SAP
* @param sapPortDto
* @return
*/
List<BaseMaterialInfo> getSAPMaterialData(SAPPortDto sapPortDto);
}

@ -0,0 +1,32 @@
package com.aucma.api.service;
import com.aucma.api.domain.vo.SAPResultVo;
import com.aucma.base.domain.BaseDeviceLedger;
import com.aucma.base.domain.BaseMaterialInfo;
import java.util.ArrayList;
/**
* @Author YinQ
* @create 2023-09-27 15:07
*/
public interface ISAPPutStorageService {
/**
*
* @param resultVo
* @return
*/
public ArrayList<BaseMaterialInfo> insertSAPMaterialInfo(SAPResultVo resultVo);
/**
*
* @param resultVo
* @return
*/
public ArrayList<BaseDeviceLedger> insertSAPDeviceLedger(SAPResultVo resultVo);
}

@ -0,0 +1,82 @@
package com.aucma.api.service.impl;
import com.aucma.api.domain.dto.SAPPortDto;
import com.aucma.api.domain.dto.WERKSDto;
import com.aucma.api.domain.vo.SAPResultVo;
import com.aucma.api.service.ISAPPortService;
import com.aucma.api.service.ISAPPutStorageService;
import com.aucma.api.utils.SAPConstants;
import com.aucma.base.domain.BaseMaterialInfo;
import com.aucma.common.exception.base.BaseException;
import com.aucma.common.utils.StringUtils;
import com.aucma.common.utils.http.HttpUtils;
import com.aucma.system.utils.PortLogUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Author YinQ
* @create 2023-09-26 14:34
*/
@Service
public class SAPPortServiceImpl implements ISAPPortService {
@Autowired
private ISAPPutStorageService storageService;
/**
* SAP
*
* @param sapPortDto
* @return
*/
@Override
public List<BaseMaterialInfo> getSAPMaterialData(SAPPortDto sapPortDto) {
String startDate = sapPortDto.getStartDate();
String endDate = sapPortDto.getEndDate();
WERKSDto werks = sapPortDto.getFactoryCodes();
String intervalDate = "(" + startDate + "——" + endDate + ")";
if (StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate) || StringUtils.isNull(werks)) {
return null;
}
ArrayList<BaseMaterialInfo> materialVos = new ArrayList<>();
String requestParam = null;
String result = null;
try {
// 创建ObjectMapper实例 对象转JSON字符串
ObjectMapper objectMapper = new ObjectMapper();
// 格式化输出
// objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
requestParam = objectMapper.writeValueAsString(sapPortDto);
result = HttpUtils.sendHttpPost(SAPConstants.SAP_PREFIX_URL + SAPConstants.MATERIAL_URL, requestParam);
// 处理接口返回消息
// result = "{\"O_TAB\":{\"item\":[{\"MAKTX\":\"压缩机,GP14TG,R134a,ACC\",\"WERKS\":\"2004\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000125\"},{\"MAKTX\":\"压缩机,GP14TG,R134a,ACC\",\"WERKS\":\"2006\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000125\"},{\"MAKTX\":\"压缩机,NL7CLX,R404a,丹佛斯\",\"WERKS\":\"2004\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000126\"},{\"MAKTX\":\"压缩机,NL7CLX,R404a,丹佛斯\",\"WERKS\":\"2006\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000126\"},{\"MAKTX\":\"压缩机,HVY57AA,R600a,奥地利ACC\",\"WERKS\":\"2004\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000127\"},{\"MAKTX\":\"压缩机,HVY57AA,R600a,奥地利ACC\",\"WERKS\":\"2006\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000127\"},{\"MAKTX\":\"压缩机,HVY67AA,R600a,奥地利ACC\",\"WERKS\":\"2004\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000128\"},{\"MAKTX\":\"压缩机,HVY67AA,R600a,奥地利ACC\",\"WERKS\":\"2006\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000128\"},{\"MAKTX\":\"压缩机,MR22FB,R404a,ACC\",\"WERKS\":\"2004\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000129\"},{\"MAKTX\":\"压缩机,MR22FB,R404a,ACC\",\"WERKS\":\"2006\",\"MTART\":\"ROH\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-21\",\"MATNR\":\"000000003000000129\"},{\"MAKTX\":\"盖后加固体,BC/BD-127FA\",\"WERKS\":\"2004\",\"MTART\":\"HALB\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-06\",\"MATNR\":\"000000008106000102\"},{\"MAKTX\":\"SC-246,YZXGWB乳品\",\"WERKS\":\"2006\",\"MTART\":\"FERT\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-22\",\"MATNR\":\"000000009002003478\"},{\"MAKTX\":\"SD-460,YZXGW蒙牛冰品\",\"WERKS\":\"2004\",\"MTART\":\"FERT\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-22\",\"MATNR\":\"000000009000004735\"},{\"MAKTX\":\"BC-100E,特需\",\"WERKS\":\"2006\",\"MTART\":\"FERT\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-02\",\"MATNR\":\"000000009001002406\"},{\"MAKTX\":\"BD(C)-310T,特需\",\"WERKS\":\"2004\",\"MTART\":\"FERT\",\"MEINS\":\"EA\",\"UDATE\":\"2019-08-20\",\"MATNR\":\"000000009000000225\"}]},\"WERKS\":null,\"O_RETURN\":{\"item\":[{\"MESSAGE\":\"查询成功1\",\"ID\":\" 0\",\"TYPE\":\"S\"}]}}";
ObjectMapper resultMapper = new ObjectMapper();
// 将 JSON 字符串转换为 Java 对象
SAPResultVo resultVo = resultMapper.readValue(result, SAPResultVo.class);
//判断返回数据是否正确
if (StringUtils.isNull(resultVo.getO_RETURN()) || "0".equals(resultVo.getO_RETURN().getItem().get(0).get("ID"))){
throw new BaseException("处理接口返回消息错误ID不为0或O_RETURN为空");
}
//转物料实体类 保存数据
materialVos = storageService.insertSAPMaterialInfo(resultVo);
//保存接口日志
PortLogUtils.savePortLog(werks.getItem().get(0).get("WERKS"), "获取SAP物料主数据" + intervalDate, "getSAPMaterialData", requestParam, result, null);
} catch (Exception e) {
//保存接口日志
System.out.println(e.getMessage());
PortLogUtils.savePortLog(werks.getItem().get(0).get("WERKS"), "获取SAP物料主数据" + intervalDate, "getSAPMaterialData", requestParam, result, e.toString());
}
return materialVos;
}
}

@ -0,0 +1,60 @@
package com.aucma.api.service.impl;
import com.aucma.api.domain.vo.SAPResultVo;
import com.aucma.api.service.ISAPPutStorageService;
import com.aucma.base.domain.BaseDeviceLedger;
import com.aucma.base.domain.BaseMaterialInfo;
import com.aucma.base.service.IBaseDeviceLedgerService;
import com.aucma.base.service.IBaseMaterialInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* SAP
* @Author YinQ
* @create 2023-09-27 15:07
*/
public class SAPPutStorageServiceImpl implements ISAPPutStorageService {
@Autowired
private IBaseMaterialInfoService baseMaterialInfoService;
@Autowired
private IBaseDeviceLedgerService baseDeviceLedgerService;
/**
*
* @param resultVo
* @return
*/
public ArrayList<BaseMaterialInfo> insertSAPMaterialInfo(SAPResultVo resultVo){
ArrayList<BaseMaterialInfo> baseMaterialInfoArrayList = new ArrayList<>();
List<HashMap<String, String>> itemList = resultVo.getO_TAB().get("item");
for (HashMap<String, String> map : itemList) {
BaseMaterialInfo materialInfo = new BaseMaterialInfo();
materialInfo.setMaterialCode(map.get("MATNR"));
materialInfo.setMaterialName(map.get("MAKTX"));
materialInfo.setMaterialType(map.get("MTART"));
materialInfo.setPlantCode(map.get("WERKS"));
materialInfo.setMaterialUnit(map.get("MEINS"));
baseMaterialInfoService.insertBaseMaterialInfo(materialInfo);
baseMaterialInfoArrayList.add(materialInfo);
}
return baseMaterialInfoArrayList;
}
/**
*
* @param resultVo
* @return
*/
@Override
public ArrayList<BaseDeviceLedger> insertSAPDeviceLedger(SAPResultVo resultVo) {
return null;
}
}

@ -0,0 +1,47 @@
package com.aucma.api.utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @Author YinQ
* @create 2023-09-26 15:39
*/
@Component
public class SAPConstants {
/**
* SAP-URL
*/
public static String SAP_PREFIX_URL;
/**
* (MES2019)
*/
public static final String MATERIAL_URL = "/SdGetSB/SdSapGetMaterialToMesSvcRSProxy/merge";
/**
* (MES2019)
*/
public static final String PRODUCTION_ORDERS_URL = "/SdGetSB/SdSapGetPOToMesSvcRSProxy/merge";
/**
* (MES2019)
*/
public static final String EQUIPMENT_URL = "/SdGetSB/SdSapGetEQToMesSvcRSProxy/merge";
/**
* BOM(MES2019)
*/
public static final String PRODUCTS_BOM_URL = "/SdGetSB/SdSapGetBomToMesSvcRSProxy/merge";
@Value("${sap.prefix}")
public void setPrefix(String value) {
SAP_PREFIX_URL = value;
}
}

@ -35,6 +35,8 @@ public interface IBaseMaterialInfoService
*/
public int insertBaseMaterialInfo(BaseMaterialInfo baseMaterialInfo);
/**
*
*

@ -126,6 +126,12 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.20</version>
</dependency>
</dependencies>
</project>

@ -17,6 +17,9 @@ import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aucma.common.constant.Constants;
@ -24,7 +27,7 @@ import com.aucma.common.utils.StringUtils;
/**
* http
*
*
* @author ruoyi
*/
public class HttpUtils
@ -271,4 +274,31 @@ public class HttpUtils
return true;
}
}
/**
* POSTjson
* @param apiUrl
* @param jsonData
* @return
*/
public static String sendHttpPost(String apiUrl, String jsonData) {
try {
// 构建POST请求
HttpRequest request = HttpRequest.post(apiUrl)
.body(jsonData) // 设置JSON格式的请求体
.contentType("application/json"); // 设置Content-Type为application/json
// 发送POST请求
HttpResponse httpResponse = request.execute();
// 获取响应内容
return httpResponse.body();
} catch (Exception e) {
// 捕获异常并重新抛出自定义异常
throw new RuntimeException("Failed to send HTTP POST request: " + e.getMessage(), e);
}
}
}

@ -115,6 +115,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
// 开放SAP接口调试
.antMatchers(HttpMethod.POST, "/sap/port/**").permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
.and()

@ -56,7 +56,7 @@ public class SysPortLogServiceImpl implements ISysPortLogService
@Override
public int insertSysPortLog(SysPortLog sysPortLog)
{
sysPortLog.setOperationUser(getUsername());
sysPortLog.setOperationUser("SAP");
sysPortLog.setOperationTime(DateUtils.getNowDate());
return sysPortLogMapper.insertSysPortLog(sysPortLog);
}

@ -177,6 +177,13 @@
<version>${aucma.version}</version>
</dependency>
<!-- API接口-->
<dependency>
<groupId>com.aucma</groupId>
<artifactId>aucma-api</artifactId>
<version>${aucma.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -188,6 +195,7 @@
<module>aucma-generator</module>
<module>aucma-common</module>
<module>aucma-base</module>
<module>aucma-api</module>
</modules>
<packaging>pom</packaging>

Loading…
Cancel
Save