tao.mo

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

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