tao.mo

Merge branch 'master' of D:\workspace\iClear-api with conflicts.

This diff is collapsed. Click to expand it.
1 +package com.erry.iclear.dateInterface.api;
2 +
3 +import com.erry.iclear.dateInterface.api.request.HsCodeParam;
4 +import com.erry.iclear.dateInterface.api.response.ResultHsCode;
5 +import com.erry.iclear.dateInterface.service.HsCodeService;
6 +import com.erry.iclear.dateInterface.util.StringUtil;
7 +import io.swagger.annotations.ApiOperation;
8 +import lombok.extern.slf4j.Slf4j;
9 +import org.springframework.beans.factory.annotation.Autowired;
10 +import org.springframework.web.bind.annotation.*;
11 +import javax.servlet.http.HttpServletRequest;
12 +
13 +/**
14 + * @author Administrator
15 + */
16 +@RestController
17 +@RequestMapping("/hscode")
18 +@Slf4j
19 +public class HsCodeInterface {
20 +
21 + @Autowired
22 + HsCodeService hsCodeService;
23 +
24 + @ApiOperation(value = "接收HsCode临时数据", httpMethod = "POST", notes = "ex: http://192.168.1.71:8080/hscode/hscodeRequest")
25 + @PostMapping("/hscodeRequest")
26 + @ResponseBody
27 + public ResultHsCode hscodeRequest(HttpServletRequest request
28 + , @RequestBody HsCodeParam hscode) {
29 + log.info("接收到请求数据hscode:【"+hscode.getHscode()+"】");
30 + String appId = (String) request.getHeader("Appid");
31 + String appkey = (String) request.getHeader("Appkey");
32 + String timeStamp = (String) request.getHeader("TimeStamp");
33 + String token = (String) request.getHeader("token");
34 +
35 + if(!StringUtil.isEmpty(hscode.getHscode())){
36 + ResultHsCode resultHsCode = hsCodeService.findHsCodeListByCode(hscode.getHscode());
37 + return resultHsCode;
38 + }else{
39 + //如果没有传hscode需要限制10分钟只能只能查询一次
40 + ResultHsCode resultHsCode = hsCodeService.findAllHsCodeList();
41 + return resultHsCode;
42 + }
43 + }
44 +}
...\ No newline at end of file ...\ No newline at end of file
1 +package com.erry.iclear.dateInterface.api.request;
2 +
3 +import io.swagger.annotations.ApiModel;
4 +import lombok.Data;
5 +
6 +import java.io.Serializable;
7 +
8 +/**
9 + * 请求hscode参数
10 + * mt
11 + * 2022年2月10日16:06:40
12 + */
13 +@ApiModel(value = "hscode", description = "需要查询的hscode列表")
14 +@Data
15 +public class HsCodeParam implements Serializable {
16 + private static final long serialVersionUID = 786697399667065141L;
17 + String hscode;
18 +}
1 +package com.erry.iclear.dateInterface.api.response;
2 +
3 +
4 +import com.erry.iclear.dateInterface.api.request.BasfcReceipt;
5 +import com.erry.iclear.dateInterface.entity.HsCode;
6 +import lombok.AllArgsConstructor;
7 +import lombok.Data;
8 +
9 +import java.io.Serializable;
10 +import java.util.List;
11 +
12 +@Data
13 +@AllArgsConstructor
14 +public class ResultHsCode implements Serializable {
15 + //成功标识
16 + private Boolean success = true;
17 + //结果编码
18 + private String code;
19 + //错误信息
20 + private String msg;
21 + //HsCode信息
22 + private List<HsCode> hsCodeResultList;
23 +}
1 package com.erry.iclear.dateInterface.config; 1 package com.erry.iclear.dateInterface.config;
2 2
3 +import com.erry.iclear.dateInterface.interceptor.HsCodeInterceptor;
3 import com.erry.iclear.dateInterface.interceptor.SignInterceptor; 4 import com.erry.iclear.dateInterface.interceptor.SignInterceptor;
4 import org.springframework.context.annotation.Configuration; 5 import org.springframework.context.annotation.Configuration;
5 import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 6 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
...@@ -13,7 +14,7 @@ public class InterceptorConfig implements WebMvcConfigurer { ...@@ -13,7 +14,7 @@ public class InterceptorConfig implements WebMvcConfigurer {
13 14
14 @Override 15 @Override
15 public void addInterceptors(InterceptorRegistry registry) { 16 public void addInterceptors(InterceptorRegistry registry) {
16 -
17 registry.addInterceptor(new SignInterceptor()).addPathPatterns("/customs/*"); 17 registry.addInterceptor(new SignInterceptor()).addPathPatterns("/customs/*");
18 + registry.addInterceptor(new HsCodeInterceptor()).addPathPatterns("/hscode/*");
18 } 19 }
19 } 20 }
......
This diff is collapsed. Click to expand it.
1 +package com.erry.iclear.dateInterface.entity;
2 +
3 +
4 +import lombok.Data;
5 +
6 +import javax.persistence.*;
7 +import java.io.Serializable;
8 +import java.util.Date;
9 +
10 +/**
11 + * @author Administrator
12 + */
13 +@Entity
14 +@Table(name = "T_ICLEAR_API_HSCODE_LOG")
15 +@Data
16 +public class IClearApiHsCodeLog implements Serializable {
17 +
18 + private static final long serialVersionUID = 8299265671871200609L;
19 + @Id
20 + @GeneratedValue(strategy = GenerationType.IDENTITY)
21 + @Column(name = "MSGID", insertable = false, nullable = false)
22 + private Long msgId;
23 +
24 + @Column(name = "APPID")
25 + private String appId;
26 +
27 + @Column(name= "APPKEY")
28 + private String appKey;
29 +
30 + @Column(name= "CODE")
31 + private String code;
32 +
33 + @Column(name= "CREATE_TIME")
34 + private Date createTime;
35 +
36 + @Column(name= "RECEIVE_RESULT")
37 + private String receiveResult;
38 +
39 + @Column(name= "ERROR_CODE")
40 + private String errorCode;
41 +
42 + @Column(name= "RESPONSE_TIME")
43 + private Date responseTime;
44 +
45 + @Column(name= "SPEND_TIME")
46 + private Long spendTime;
47 +}
1 +package com.erry.iclear.dateInterface.interceptor;
2 +
3 +import com.erry.iclear.dateInterface.api.response.ResultHsCode;
4 +import com.erry.iclear.dateInterface.api.response.ResultRS;
5 +import com.erry.iclear.dateInterface.common.Constant;
6 +import com.erry.iclear.dateInterface.util.SHA256Util;
7 +import lombok.extern.slf4j.Slf4j;
8 +import org.apache.commons.lang3.StringUtils;
9 +import org.springframework.stereotype.Component;
10 +import org.springframework.web.servlet.ModelAndView;
11 +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
12 +
13 +import javax.servlet.http.HttpServletRequest;
14 +import javax.servlet.http.HttpServletResponse;
15 +import java.io.IOException;
16 +import java.io.PrintWriter;
17 +import java.util.Enumeration;
18 +import java.util.HashMap;
19 +
20 +/**
21 + * @author Administrator
22 + */
23 +@Component
24 +@Slf4j
25 +public class HsCodeInterceptor extends HandlerInterceptorAdapter {
26 +
27 + @Override
28 + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
29 + String appId = (String) request.getHeader("Appid");
30 + String appkey = (String) request.getHeader("Appkey");
31 + String timeStamp = (String) request.getHeader("TimeStamp");
32 + String token = (String) request.getHeader("token");
33 +
34 + //TODO 增加请求路径是否在权限里的判断
35 + //String uri = request.getRequestURI();
36 +
37 + if(StringUtils.isBlank(appId)){
38 + this.returnJson(response,false,"10016","Appid 不能为空");
39 + return false;
40 + }
41 +
42 + if(StringUtils.isBlank(appkey)){
43 + this.returnJson(response,false,"10017","Appkey 不能为空");
44 + return false;
45 + }
46 +
47 + if(StringUtils.isBlank(timeStamp)){
48 + this.returnJson(response,false,"10018","TimeStamp 不能为空");
49 + return false;
50 + }
51 +
52 + if(StringUtils.isBlank(token)){
53 + this.returnJson(response,false,"10013","token 不能为空");
54 + return false;
55 + }
56 +
57 + HashMap<String,String> secretMap = Constant.appIdSecurityCache.get(appId);
58 + if(secretMap==null){
59 + this.returnJson(response,false,"10001","系统异常,该appId没有注册");
60 + return false;
61 + }
62 +
63 + String secretInSys = secretMap.get(appkey);
64 + if (StringUtils.isBlank(secretInSys)) {
65 + this.returnJson(response,false,"10002","系统异常,该appId没有当前Appkey的权限");
66 + return false;
67 + }
68 +
69 + String sha256Str = SHA256Util.getSHA256String(appId+appkey+secretInSys+timeStamp);
70 + if(!token.equals(sha256Str)){
71 + this.returnJson(response,false,"10014","Token验证失败");
72 + return false;
73 + }
74 + return true;
75 + }
76 +
77 + @Override
78 + public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
79 + }
80 +
81 + @Override
82 + public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
83 + }
84 +
85 + private void returnJson(HttpServletResponse response,Boolean success ,String code,String msg){
86 + PrintWriter writer = null;
87 + response.setCharacterEncoding("UTF-8");
88 + response.setContentType("application/json; charset=utf-8");
89 + try {
90 + writer = response.getWriter();
91 + ResultHsCode resultHsCode = new ResultHsCode(success,code,msg,null);
92 + writer.print(resultHsCode);
93 + } catch (IOException e){
94 + log.error("拦截器输出流异常"+e);
95 + } finally {
96 + if(writer != null){
97 + writer.close();
98 + }
99 + }
100 + }
101 +
102 +}
...\ No newline at end of file ...\ No newline at end of file
1 +package com.erry.iclear.dateInterface.repository;
2 +
3 +import com.erry.iclear.dateInterface.entity.HsCode;
4 +import org.springframework.data.jpa.repository.JpaRepository;
5 +import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6 +import org.springframework.data.jpa.repository.Modifying;
7 +import org.springframework.data.jpa.repository.Query;
8 +import org.springframework.stereotype.Repository;
9 +
10 +import java.util.List;
11 +
12 +
13 +/**
14 + * 商品信息表 Repository
15 + * Created by xujin 2019/7/08.
16 + */
17 +@Repository
18 +public interface HsCodeRepository extends JpaSpecificationExecutor<HsCode>, JpaRepository<HsCode, Long> {
19 + /**
20 + *
21 + * 根据hscode编码查询最新一条hscode信息
22 + * @param code
23 + * @return
24 + */
25 + @Query(nativeQuery = true,value = "select top 1 * from T_CC_HS_CODE where VALIDATE=1 and SKU_CODE =?1 order by id desc ")
26 + public HsCode findHsCodeByCode(String code);
27 +
28 + /**
29 + * 根据hscode编码查询对应的hscode
30 + * @param skuCodeList
31 + * @return
32 + */
33 + @Query(nativeQuery = true, value = "select * from [dbo].[T_CC_HS_CODE] where VALIDATE=1 and SKU_CODE in ?1")
34 + List<HsCode> findHsCodeListByCode(List<String> skuCodeList);
35 +
36 + /**
37 + * 查询所有有效hscode
38 + * @return
39 + */
40 + @Query(nativeQuery = true,value = "select * from T_CC_HS_CODE where VALIDATE=1")
41 + public List<HsCode> findAllHsCodeList();
42 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -13,6 +13,7 @@ import com.erry.iclear.dateInterface.entity.ChmConsignmentDetail; ...@@ -13,6 +13,7 @@ import com.erry.iclear.dateInterface.entity.ChmConsignmentDetail;
13 import com.erry.iclear.dateInterface.entity.DeclearTask; 13 import com.erry.iclear.dateInterface.entity.DeclearTask;
14 import com.erry.iclear.dateInterface.repository.ChmConsignmentRepository; 14 import com.erry.iclear.dateInterface.repository.ChmConsignmentRepository;
15 import com.erry.iclear.dateInterface.repository.DeclearTaskRepository; 15 import com.erry.iclear.dateInterface.repository.DeclearTaskRepository;
16 +import com.erry.iclear.dateInterface.repository.HsCodeRepository;
16 import com.erry.iclear.dateInterface.repository.ReceiptMessageRepository; 17 import com.erry.iclear.dateInterface.repository.ReceiptMessageRepository;
17 import com.erry.iclear.dateInterface.util.DateUtils; 18 import com.erry.iclear.dateInterface.util.DateUtils;
18 import com.erry.iclear.dateInterface.util.JsonToJava; 19 import com.erry.iclear.dateInterface.util.JsonToJava;
...@@ -47,6 +48,8 @@ public class ApiService { ...@@ -47,6 +48,8 @@ public class ApiService {
47 String customsUrl; 48 String customsUrl;
48 @Value("${api.address.complete-msg-url}") 49 @Value("${api.address.complete-msg-url}")
49 String completeMsgUrl; 50 String completeMsgUrl;
51 + @Value("${api.address.basf-hscode-url}")
52 + String basfHscodeUrl;
50 53
51 @Autowired 54 @Autowired
52 ReceiptMessageRepository receiptMessageRepository; 55 ReceiptMessageRepository receiptMessageRepository;
...@@ -63,6 +66,9 @@ public class ApiService { ...@@ -63,6 +66,9 @@ public class ApiService {
63 @Autowired 66 @Autowired
64 ChmConsignmentDetailService consignmentDetailService; 67 ChmConsignmentDetailService consignmentDetailService;
65 68
69 + @Autowired
70 + private HsCodeRepository hsCodeRepository;
71 +
66 /** 72 /**
67 * 获取token信息 73 * 获取token信息
68 * @return 74 * @return
......
1 +package com.erry.iclear.dateInterface.service;
2 +
3 +import com.erry.iclear.dateInterface.api.response.ResultHsCode;
4 +import com.erry.iclear.dateInterface.entity.HsCode;
5 +import com.erry.iclear.dateInterface.repository.HsCodeRepository;
6 +import lombok.extern.slf4j.Slf4j;
7 +import org.springframework.beans.factory.annotation.Autowired;
8 +import org.springframework.stereotype.Service;
9 +import java.util.Arrays;
10 +import java.util.List;
11 +
12 +/**
13 + * hscode service
14 + * mt
15 + * 2022年2月10日16:26:34
16 + */
17 +@Service
18 +@Slf4j
19 +public class HsCodeService {
20 + @Autowired
21 + HsCodeRepository hsCodeRepository;
22 + /**
23 + * 根据hscode编码查询对应的hscode
24 + * @param hscode
25 + * @return
26 + */
27 + public ResultHsCode findHsCodeListByCode(String hscode){
28 + ResultHsCode resultHsCode = new ResultHsCode(Boolean.FALSE,"","",null);
29 + try{
30 + String[] hscodeArrays = hscode.split(",");
31 + if(hscodeArrays.length > 100){
32 + resultHsCode.setCode("30100");
33 + resultHsCode.setMsg("hscode编码个数超过100个");
34 + return resultHsCode;
35 + }
36 + List<String> skuCodeList = Arrays.asList(hscodeArrays);
37 + List<HsCode> hsCodeList = this.hsCodeRepository.findHsCodeListByCode(skuCodeList);
38 + //如果未查找到对应的hscode则构造一条未找到数据返回
39 + skuCodeList.forEach(code ->{
40 + boolean exist = false;
41 + for (HsCode hsCode : hsCodeList) {
42 + if(hsCode.getSkuCode().equals(code)){
43 + exist = true;
44 + }
45 + }
46 + //如果不存在则构造一条不存在数据
47 + if(!exist){
48 + HsCode hsCode = new HsCode();
49 + hsCode.setSkuCode(code);
50 + hsCode.setRemark("未找到对应hscode数据");
51 + hsCodeList.add(hsCode);
52 + }
53 + });
54 + resultHsCode.setSuccess(Boolean.TRUE);
55 + resultHsCode.setCode("0");
56 + resultHsCode.setMsg("操作成功");
57 + resultHsCode.setHsCodeResultList(hsCodeList);
58 + }catch(Exception ex){
59 + log.error(ex.getMessage());
60 + ex.printStackTrace();
61 + resultHsCode.setSuccess(Boolean.FALSE);
62 + resultHsCode.setCode("30101");
63 + resultHsCode.setMsg("数据查询异常");
64 + }
65 + return resultHsCode;
66 + }
67 +
68 + /**
69 + * 查询所有有效hscode
70 + * @return
71 + */
72 + public ResultHsCode findAllHsCodeList(){
73 + ResultHsCode resultHsCode = new ResultHsCode(Boolean.FALSE,"","",null);
74 + try{
75 + List<HsCode> hsCodeList = this.hsCodeRepository.findAllHsCodeList();
76 + resultHsCode.setSuccess(Boolean.TRUE);
77 + resultHsCode.setCode("0");
78 + resultHsCode.setMsg("操作成功");
79 + resultHsCode.setHsCodeResultList(hsCodeList);
80 + }catch(Exception ex){
81 + log.error(ex.getMessage());
82 + ex.printStackTrace();
83 + resultHsCode.setSuccess(Boolean.FALSE);
84 + resultHsCode.setCode("30101");
85 + resultHsCode.setMsg("数据查询异常");
86 + }
87 + return resultHsCode;
88 + }
89 +}
1 package com.erry.iclear.dateInterface.task; 1 package com.erry.iclear.dateInterface.task;
2 2
3 +import com.alibaba.fastjson.JSONObject;
3 import com.erry.iclear.dateInterface.api.response.TokenResult; 4 import com.erry.iclear.dateInterface.api.response.TokenResult;
4 import com.erry.iclear.dateInterface.common.Constants; 5 import com.erry.iclear.dateInterface.common.Constants;
6 +import com.erry.iclear.dateInterface.entity.HsCode;
7 +import com.erry.iclear.dateInterface.repository.HsCodeRepository;
5 import com.erry.iclear.dateInterface.service.ApiService; 8 import com.erry.iclear.dateInterface.service.ApiService;
6 import lombok.extern.slf4j.Slf4j; 9 import lombok.extern.slf4j.Slf4j;
7 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
......