فهرست منبع

亿道EIS增加MESHelper DLL 烧录数据接口

xiaost 3 سال پیش
والد
کامیت
b52c7fc399

+ 34 - 0
src/main/java/com/uas/eis/controller/MESHelperController.java

@@ -0,0 +1,34 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.sdk.entity.ApiResult;
+import com.uas.eis.sdk.resp.ApiResponse;
+import com.uas.eis.service.MESHelperService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author xiaost
+ * @date 2022/8/16 11:35
+ **/
+@RestController
+@RequestMapping("/MES/helper")
+public class MESHelperController {
+    @Autowired
+    private MESHelperService mesHelperService;
+
+    @RequestMapping(value="/dllMain")
+    public ApiResult<Map<Object,Object>> DLLMain(HttpServletRequest request, String data){
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        String accessKey = request.getHeader("AccessKey");
+        String requestId = request.getHeader("RequestId");
+        Map<Object,Object> map = mesHelperService.DLLMain(accessKey,requestId,data);
+        return ApiResponse.successRsp(requestId,map);
+    }
+
+}

+ 7 - 0
src/main/java/com/uas/eis/core/WebAppConfig.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.uas.eis.core.support.ApiSignLoginInterceptor;
 import com.uas.eis.core.support.DataSourceInterceptor;
 import com.uas.eis.core.support.LoginInterceptor;
+import com.uas.eis.core.support.MesHelperApiLoginInterceptor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.converter.HttpMessageConverter;
@@ -30,10 +31,16 @@ public class WebAppConfig extends WebMvcConfigurationSupport{
 		return new ApiSignLoginInterceptor();
 	}
 
+	@Bean
+	public MesHelperApiLoginInterceptor mesHelperApiLoginInterceptor(){
+		return new MesHelperApiLoginInterceptor();
+	}
+
 	@Override
 	public void addInterceptors(InterceptorRegistry registry){
 		registry.addInterceptor(apiSignLoginInterceptor()).addPathPatterns("/api/**","/mes/**")
 				.excludePathPatterns("/login", "/erp/**");
+		registry.addInterceptor(mesHelperApiLoginInterceptor()).addPathPatterns("/MES/helper/**");
 		//registry.addInterceptor(loginInterceptor()).addPathPatterns("/**").excludePathPatterns("/EIS/login");
 		registry.addInterceptor(new DataSourceInterceptor()).addPathPatterns("/*/**");
 	}

+ 97 - 0
src/main/java/com/uas/eis/core/support/MesHelperApiLoginInterceptor.java

@@ -0,0 +1,97 @@
+package com.uas.eis.core.support;
+
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.entity.ErrorMessage;
+import com.uas.eis.exception.ApiSystemException;
+import com.uas.eis.sdk.entity.ApiResult;
+import com.uas.eis.utils.MD5Util;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
+import java.util.*;
+
+@Service
+public class MesHelperApiLoginInterceptor extends HandlerInterceptorAdapter {
+
+    @Autowired
+    private BaseDao baseDao;
+
+    // 签名超时时长,默认时间为5分钟,ms
+    private static final int SIGN_EXPIRED_TIME = 60 * 60 * 1000;
+    private static final String ACCESS_KEY = "AccessKey";
+    private static final String ACCESS_SECRET = "AccessSecret";
+    private static final String TIMESTAMP_KEY = "Timestamp";
+    private static final String SIGN_KEY = "Signature";
+    private static final String RequestId = "RequestId";
+    private static Map<String,String> tokenConfig = TokenProperties.getAllProperty();
+
+
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        String accessKey = request.getHeader(ACCESS_KEY);
+        String accessSecret = request.getHeader(ACCESS_SECRET);
+        String requestId = request.getHeader(RequestId);
+
+        // 检查KEY是否合理
+        if (StringUtils.isEmpty(accessKey) || StringUtils.isEmpty(accessSecret)) {
+            throw new ApiSystemException(new ApiResult(ErrorMessage.ACCESSKEY_ILLEGAL,requestId));
+        }
+
+        //改用中心账套表取账户密码
+        SqlRowList rs = baseDao.queryForRowSet("select AE_SECRET from APIEMPLOYEE where AE_KEY=?",accessKey);
+        if(rs.next()){
+            if(!accessSecret.equals(rs.getString("AE_SECRET"))) {
+                throw new ApiSystemException(new ApiResult(ErrorMessage.ACCESSSECRET_ERROR,requestId));
+            }
+        }else{
+            throw new ApiSystemException(new ApiResult(ErrorMessage.ACCESSKEY_ERROR,requestId));
+        }
+
+        return true;
+    }
+
+    private boolean verificationSign(HttpServletRequest request, String accessKey, String accessSecret) throws UnsupportedEncodingException {
+        Enumeration<?> pNames = request.getHeaderNames();
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put(ACCESS_KEY,request.getHeader(ACCESS_KEY));
+        params.put(RequestId,request.getHeader(RequestId));
+        params.put(TIMESTAMP_KEY,request.getHeader(TIMESTAMP_KEY));
+        String originSign = request.getHeader(SIGN_KEY);
+        String sign = createSign(params, accessSecret);
+        System.out.println(sign);
+
+        return sign.equals(originSign);
+    }
+
+    private String createSign(Map<String, Object> params, String accessSecret) throws UnsupportedEncodingException {
+        Set<String> keysSet = params.keySet();
+        Object[] keys = keysSet.toArray();
+        Arrays.sort(keys);
+        StringBuilder temp = new StringBuilder();
+        boolean first = true;
+        for (Object key : keys) {
+            if (first) {
+                first = false;
+            } else {
+                temp.append("&");
+            }
+            temp.append(key).append("=");
+            Object value = params.get(key);
+            String valueString = "";
+            if (null != value) {
+                valueString = String.valueOf(value);
+            }
+            temp.append(valueString);
+        }
+        temp.append("&").append(ACCESS_SECRET).append("=").append(accessSecret);
+        System.out.println(temp);
+        System.out.println(MD5Util.encrypt32Up(temp.toString()));
+       // System.out.println(MD5Util.getEncryption(temp.toString()));
+        return MD5Util.encrypt32Up(temp.toString()).toUpperCase();
+    }
+}

+ 15 - 1
src/main/java/com/uas/eis/dao/BaseDao.java

@@ -534,7 +534,21 @@ public class BaseDao{
 		rs.setResultList(jdbcTemplate.queryForList(sql));
 		return rs;
 	}
-	
+
+	/**
+	 * 查询结果集
+	 *
+	 * @param sql
+	 *            查询语句
+	 * @param arg
+	 *            参数
+	 */
+	public SqlRowList queryForRowSet(String sql, Object arg) {
+		SqlRowList rs = new SqlRowList();
+		rs.setResultList(getJdbcTemplate().queryForList(sql, arg));
+		return rs;
+	}
+
 	/**
 	 * @param tableName
 	 *            对应要查询的表

+ 6 - 1
src/main/java/com/uas/eis/entity/ErrorMessage.java

@@ -13,7 +13,12 @@ public enum ErrorMessage {
     TIMEOUT_ILLEGAL("1003","请求超时"),
     REQUESTID_ILLEGAL("1004","随机字符串不合法"),
     SIGNATURE_ILLEGAL("1005","签名错误"),
-    BUSINESS_ILLEGAL("2001","业务异常");
+    BUSINESS_ILLEGAL("2001","业务异常"),
+    BUSINESS_TYPENULL("2002","类型不能为空"),
+    BUSINESS_TYPEILLEGAL("2003","类型不在范围内"),
+    BUSINESS_DATAILLEGAL("2004","业务数据为空"),
+    ACCESSSECRET_ERROR("1002","密码不正确"),
+    ACCESSKEY_ERROR("1001","用户名不存在");
 
     private String code;
     private String message;

+ 48 - 0
src/main/java/com/uas/eis/entity/HelperType.java

@@ -0,0 +1,48 @@
+package com.uas.eis.entity;
+
+/**
+ * Created by xiaost 2022-08-17
+ * MES对接写号定义类型与代码
+ */
+public enum HelperType {
+    CHECKROUTEPASSED("CHECKROUTEPASSED","检测XXX") , ; //自行往后增加枚举类型
+
+    private String code;
+    private String name;
+
+    HelperType(String  code, String name){
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * 根据code 获取 类型
+     * @param code
+     * @return
+     */
+    public static HelperType getTypeByCode(String code){
+        for (HelperType helperType:values()) {
+            if (helperType.getCode().equals(code)) {
+                return helperType;
+            }
+        }
+        return null;
+    }
+
+}

+ 20 - 0
src/main/java/com/uas/eis/sdk/entity/ApiResult.java

@@ -1,5 +1,6 @@
 package com.uas.eis.sdk.entity;
 
+import com.uas.eis.entity.ErrorMessage;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -70,4 +71,23 @@ public class ApiResult<T> {
                 ", data=" + data +
                 '}';
     }
+
+    public ApiResult(String code, String message,String requestId,T data){
+        this.code = code;
+        this.message = message;
+        this.requestId = requestId;
+        this.data = data;
+    }
+
+    public ApiResult(String code, String message,String requestId){
+        this.code = code;
+        this.message = message;
+        this.requestId = requestId;
+    }
+
+    public ApiResult(ErrorMessage errorMessage, String requestId){
+        this.code = errorMessage.getCode();
+        this.message = errorMessage.getMessage();
+        this.requestId = requestId;
+    }
 }

+ 4 - 0
src/main/java/com/uas/eis/sdk/resp/ApiResponse.java

@@ -32,6 +32,10 @@ public class ApiResponse {
         return new ApiResult<T>().setCode(code).setMessage(msg).setRequestId(requestId).setData(data);
     }
 
+    public static <T> ApiResult<T> successRsp(String requestId,T data) {
+        return successRsp("0",SUCCESS,requestId,data);
+    }
+
 
     public static <T> ApiResult<T> failRsp(String code, String msg) {
         return new ApiResult<T>().setCode(code).setMessage(msg);

+ 9 - 0
src/main/java/com/uas/eis/service/MESHelperService.java

@@ -0,0 +1,9 @@
+package com.uas.eis.service;
+
+import java.util.List;
+import java.util.Map;
+
+public interface MESHelperService {
+
+	Map<Object, Object> DLLMain(String accessKey, String requestId, String data);
+}

+ 88 - 0
src/main/java/com/uas/eis/serviceImpl/MESHelperServiceImpl.java

@@ -0,0 +1,88 @@
+package com.uas.eis.serviceImpl;
+
+import com.uas.eis.core.config.SpObserver;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.entity.ErrorMessage;
+import com.uas.eis.entity.HelperType;
+import com.uas.eis.exception.ApiSystemException;
+import com.uas.eis.sdk.entity.ApiResult;
+import com.uas.eis.service.MESDataService;
+import com.uas.eis.service.MESHelperService;
+import com.uas.eis.utils.*;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class MESHelperServiceImpl implements MESHelperService {
+
+	@Autowired
+	private BaseDao baseDao;
+
+	@Value("${spring.datasource.username}")
+	private String username;
+
+	@Override
+	public Map<Object,Object> DLLMain(String accessKey, String requestId, String data) {
+		String AE_MASTER = checkAccessKey(accessKey, requestId);
+		SpObserver.putSp(AE_MASTER);
+		Map<Object, Object> map = BaseUtil.parseFormStoreToMap(data);
+		//解析map
+		if(!StringUtil.hasText(map.get("type"))){
+			throw new ApiSystemException(new ApiResult(ErrorMessage.BUSINESS_TYPENULL,requestId));
+		}
+		if(!StringUtil.hasText(map.get("detail"))){
+			throw new ApiSystemException(new ApiResult(ErrorMessage.BUSINESS_DATAILLEGAL,requestId));
+		}
+		String type = map.get("type").toString();
+		HelperType helperType = HelperType.getTypeByCode(type);
+		if(null == helperType){
+			throw new ApiSystemException(new ApiResult(ErrorMessage.BUSINESS_TYPEILLEGAL,requestId));
+		}
+		int err = 0;
+		//返回值
+		Map<Object, Object> remap = new HashMap<Object, Object>();
+		switch(helperType){
+			case CHECKROUTEPASSED:
+                //调用方法
+				remap = CheckRoutePassed(map.get("detail"));
+			    break;
+			default:
+				err = -1;
+				break;
+		}
+        if(err == -1){
+			throw new ApiSystemException(new ApiResult(ErrorMessage.BUSINESS_TYPEILLEGAL,requestId));
+		}
+		SpObserver.putSp(username);
+		return remap;
+	}
+
+   private Map<Object,Object> CheckRoutePassed(Object data){
+	    Map<Object, Object> map = BaseUtil.parseFormStoreToMap(data.toString());
+	    //实际业务数据
+	    Map<Object, Object> rmap = new HashMap<>();
+
+		return rmap;
+   }
+
+	private String checkAccessKey(String accessKey,String requestId){
+		Object accessSecret_O = baseDao.getFieldDataByCondition("APIEMPLOYEE", "AE_SECRET", "AE_KEY='" + accessKey + "'");
+		Object AE_MASTER = baseDao.getFieldDataByCondition("APIEMPLOYEE", "AE_MASTER", "AE_KEY='" + accessKey + "'");
+		String accessSecret = accessSecret_O == null ? "" : accessSecret_O.toString();
+		// 检查KEY是否合理
+		if (StringUtils.isEmpty(accessKey) || StringUtils.isEmpty(accessSecret) || AE_MASTER== null || "".equals(AE_MASTER.toString())) {
+			ApiResult apiResult = new ApiResult(ErrorMessage.ACCESSKEY_ILLEGAL.getCode(),ErrorMessage.ACCESSKEY_ILLEGAL.getMessage(),requestId);
+			throw new ApiSystemException(apiResult);
+		}
+		return AE_MASTER.toString();
+	}
+
+}