tao.mo

Merge branches 'CY23-PI02-iKnowU' and 'master' of http://118.178.128.178//Fedex/iClear-api

No preview for this file type
......@@ -35,9 +35,19 @@ md5 小写 16位
IMPORTiClearExportCTest
IMPORTiClearExportCProd
FSML的Secret
md5 小写 16位
明文:
FSMLiClearExportCDev
FSMLiClearExportCTest
FSMLiClearExportCProd
IKNOWU的Secret
md5 小写 16位
明文:
IKNOWUiClearExportCDev
IKNOWUiClearExportCTest
IKNOWUiClearExportCProd
1、接口数据模型调研 2
......
INSERT INTO T_ICLEAR_API_APPINFO(APPID,APPKEY,SECURITY,CREATE_TIME,IS_ENABLE)
VALUES('IKNOWU','iClearExportIKNOWU','471590f574058007',GETDATE(),'1');
\ No newline at end of file
......@@ -15,7 +15,7 @@ import javax.servlet.http.HttpServletRequest;
import java.util.Date;
/**
* @author Administrator
* @author mt
* /hscode/hscodeRequest
*/
@RestController
......
package com.erry.iclear.dateInterface.api;
import com.erry.iclear.dateInterface.api.request.HsCodeParam;
import com.erry.iclear.dateInterface.api.request.StampParam;
import com.erry.iclear.dateInterface.api.response.ResultHsCode;
import com.erry.iclear.dateInterface.api.response.StampResult;
import com.erry.iclear.dateInterface.entity.IClearApiHsCodeLog;
import com.erry.iclear.dateInterface.enums.ErrorCodeEnum;
import com.erry.iclear.dateInterface.service.HsCodeService;
import com.erry.iclear.dateInterface.service.IClearApiHsCodeLogService;
import com.erry.iclear.dateInterface.util.FileUtils;
import com.erry.iclear.dateInterface.util.StringUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.log4j.spi.ErrorCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.Date;
/**
* @author mt
* /iknowU/stampQuery
*/
@RestController
@RequestMapping("/iknowU")
@Slf4j
public class IKnowUInterface {
@Value("${stamp_path}")
String stampPath;
@Value("${stamp_file_name}")
String stampFileName;
@Autowired
IClearApiHsCodeLogService iClearApiHsCodeLogService;
@ApiOperation(value = "抠图后的公章查询", httpMethod = "POST", notes = "ex: http://192.168.1.71:8080/iknowU/stampQuery")
@PostMapping("/stampQuery")
@ResponseBody
public StampResult stampQuery(HttpServletRequest request
, @RequestBody StampParam stampParam) {
log.info("接收到请求数据consignmentCode:【"+stampParam.getConsignmentCode()+"】");
String appId = (String) request.getHeader("Appid");
String appkey = (String) request.getHeader("Appkey");
IClearApiHsCodeLog iclearApiHsCodeLog = new IClearApiHsCodeLog();
StampResult stampResult = null;
long begin = System.currentTimeMillis();
String filePath = this.stampPath + stampParam.getConsignmentCode() + File.separator + stampFileName;
try {
iclearApiHsCodeLog.setAppId(appId);
iclearApiHsCodeLog.setAppKey(appkey);
iclearApiHsCodeLog.setCreateTime(new Date());
iclearApiHsCodeLog.setCode(stampParam.getConsignmentCode());
File file = new File(filePath);
//判断文件是否存在
if(file.exists()){
String base64Image = FileUtils.convertFileToBase64(filePath);
stampResult = new StampResult(Boolean.TRUE,ErrorCodeEnum.SUCCESS.getCode(),ErrorCodeEnum.SUCCESS.getName(),base64Image);
}else{
stampResult = new StampResult(Boolean.FALSE,ErrorCodeEnum.ERROR_10119.getCode(),ErrorCodeEnum.ERROR_10119.getName(),null);
}
}catch(Exception ex){
log.error(ex.getMessage(),ex);
stampResult = new StampResult(Boolean.FALSE,ErrorCodeEnum.ERROR_10119.getCode(),ErrorCodeEnum.ERROR_10119.getName(),null);
return stampResult;
}finally {
iclearApiHsCodeLog.setReceiveResult(stampResult.getMsg());
iclearApiHsCodeLog.setCode(filePath);
iclearApiHsCodeLog.setErrorCode(stampResult.getCode());
iclearApiHsCodeLog.setResponseTime(new Date());
long end = System.currentTimeMillis();
iclearApiHsCodeLog.setSpendTime(end-begin);
iClearApiHsCodeLogService.saveIClearApiHsCodeLog(iclearApiHsCodeLog);
}
return stampResult;
}
}
......@@ -23,7 +23,7 @@ import java.util.Date;
@Slf4j
public class VersionInterface {
//当前版本号
final String VERSION = "1.9";
final String VERSION = "2.2";
@ApiOperation(value = "获取当前API版本", httpMethod = "GET", notes = "ex: http://192.168.1.71:8080/version/version")
@GetMapping("/version")
......
package com.erry.iclear.dateInterface.api.request;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* 请求公章图样参数
* mt
* 2023年6月9日15:57:52
*/
@ApiModel(value = "stampParam", description = "需要查询的公章图样运单号")
@Data
public class StampParam implements Serializable {
private static final long serialVersionUID = 786697399667065141L;
//运单号
String consignmentCode;
}
package com.erry.iclear.dateInterface.api.response;
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 StampResult implements Serializable {
//成功标识
private Boolean success = true;
//结果编码
private String code;
//错误信息
private String msg;
//公章图样base64位字符
private String base64Image;
}
......@@ -129,10 +129,20 @@ public class HsCode extends BaseModel {
private String unitLegalFirst;
/**
* 第一(法定)计量单位编码
*/
@Column(name = "UNIT_LEGAL_FIRST_CODE")
private String unitLegalFirstCode;
/**
* 第二计量单位
*/
@Column(name = "UNIT_LEGAL_SECOND")
private String unitLegalSecond;
/**
* 第二计量单位编码
*/
@Column(name = "UNIT_LEGAL_SECOND_CODE")
private String unitLegalSecondCode;
/**
* CCC标记
......@@ -567,4 +577,5 @@ public class HsCode extends BaseModel {
", outRate=" + outRate +
'}';
}
}
......
......@@ -18,6 +18,7 @@ public enum ErrorCodeEnum {
ERROR_10017("10017","无Appkey(缺少参数)"),
ERROR_10018("10018","无TimeStamp(缺少参数)"),
ERROR_10019("10019","未指定hscode编码,10分钟之内只允许查询一次。"),
ERROR_10119("10119","根据运单号查询用户上传的公章图样失败"),
ERROR_30001("30001","数据格式不正确"),
ERROR_30002("30002","缺少必填项"),
ERROR_30003("30003","数据校验不通过"),
......@@ -28,6 +29,7 @@ public enum ErrorCodeEnum {
ERROR_30104("30104","skuCode或skuName长度超出限制"),
ERROR_30105("30105","skuCode编码最少输入4位字符,skuName最少输入2个字符");
ErrorCodeEnum(String code,String name){
this.code = code;
this.name = name;
......
......@@ -15,29 +15,26 @@ import java.util.List;
@Repository
public interface SysUserRepository extends JpaSpecificationExecutor<SysUser>, JpaRepository<SysUser, Long> {
@Query(nativeQuery = true, value = "select TOP 1 * from t_au_user where login_name = ?1 ")
public SysUser findByLoginName(String loginName);
/**
* 根据用户登录名list查询用户列表信息
* 根据登录名本地账号用户信息
*
* @param loginNames
* @param loginName
* @return
*/
@Query(nativeQuery = true, value = "select * from t_au_user where login_name IN (?1) ")
public List<SysUser> findUserListByLoginNames(List loginNames);
@Query(nativeQuery = true, value = "select top 1 * from t_au_user a where a.login_name = ?1 " +
" and a.user_source_id in( " +
" select id from dbo.T_BI_DICTIONARY_ENTRIES " +
" where dict_code='userSourceCode' and code='LOCALUSER') ")
public SysUser findUserByLoginName(String loginName);
/**
* 根据登录名查询单个用户信息
* 根据用户登录名list查询用户列表信息
*
* @param loginName
* @param loginNames
* @return
*/
@Query(nativeQuery = true, value = "select * from t_au_user where login_name = ?1")
public SysUser findUserByLoginName(String loginName);
@Query(nativeQuery = true, value = "select * from t_au_user where login_name IN (?1) ")
public List<SysUser> findUserListByLoginNames(List loginNames);
@Query(nativeQuery = true, value = "select * from t_au_user where username = ?1")
public List<SysUser> findByUserName(String userName);
......@@ -74,5 +71,4 @@ public interface SysUserRepository extends JpaSpecificationExecutor<SysUser>, Jp
*/
@Query(nativeQuery = true,value = "select ID from T_AU_USER where IS_VALID = 1 AND ORG_NAME = 'RDE' AND CONS_DISTRIBUTION = '2'")
public List<BigDecimal> findByDistribution();
}
\ No newline at end of file
......
......@@ -292,6 +292,7 @@ public class ChmConsignmentService {
result.setUpdateTime(pushTime);
if (!creator.equals("IDE-ICLEAR-API")){
SysUser sysUser = sysUserRepository.findUserByLoginName(creator);
result.setCreatorId(sysUser);
result.setCreator(sysUser.getLoginName());
}
......@@ -507,7 +508,7 @@ public class ChmConsignmentService {
ChmConsignment chmConsignmentDB=this.findChmConsignmentByConsignmentCode(chmConsignment.getConsignmentCode(), DateUtils.addDate(DateUtils.getCurrentDate(),-7));
//获取用户账号信息
SysUser sysUser = sysUserRepository.findByLoginName("CUSTOMS");
SysUser sysUser = sysUserRepository.findUserByLoginName("CUSTOMS");
//设置当前运单创建人ID
chmConsignment.setCreatorId(sysUser);
//设置创建人名称
......
......@@ -118,7 +118,7 @@ public class HsCodeService {
resultHsCode.setMsg(ErrorCodeEnum.ERROR_30105.getName());
return resultHsCode;
}
String skuCode = "%"+hscode.getSkuCode()+"%";
String skuCode = hscode.getSkuCode()+"%";
String skuName = "%"+hscode.getSkuName()+"%";
//模糊查询hscode信息
List<HsCode> hsCodeList = this.hsCodeRepository.fuzzyQueryHsCode(skuCode,skuName);
......
This diff is collapsed. Click to expand it.
......@@ -7,39 +7,41 @@ spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.jndi-name=jdbc/iclearProdTestDS
#推送海关回执
#\u63A8\u9001\u6D77\u5173\u56DE\u6267
task.pushCustomsTask=0 0/1 * * * ?
#推送完整报文
#\u63A8\u9001\u5B8C\u6574\u62A5\u6587
task.pushMawbTask=0 0/1 * * * ?
#推送失败的回执数据
#\u63A8\u9001\u5931\u8D25\u7684\u56DE\u6267\u6570\u636E
task.pushErrorReturnDate=0 0/3 * * * ?
#推送失败的申报数据
#\u63A8\u9001\u5931\u8D25\u7684\u7533\u62A5\u6570\u636E
task.pushErrorDeclareDate=0 0/3 * * * ?
#监听iclear节点是否正常定时任务间隔
#\u76D1\u542Ciclear\u8282\u70B9\u662F\u5426\u6B63\u5E38\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694
task.monitorIclearNodes=0 0/5 * * * ?
api.base-address=http://localhost:8080/Exp
#获取token账号
#\u83B7\u53D6token\u8D26\u53F7
api.token-info.username=iclear_external_ctm
#获取token密码
#\u83B7\u53D6token\u5BC6\u7801
api.token-info.password=toQu3arch6
#IClearC类提交运单地址
#IClearC\u7C7B\u63D0\u4EA4\u8FD0\u5355\u5730\u5740
api.address.iclear-submit-url=${api.base-address}/chmConsignmentController/submitConsignments
#IClear校验运单地址
#IClear\u6821\u9A8C\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url=${api.base-address}/chmConsignmentController/checkChmAndDetaliD
#IClear校验C类运单地址
#IClear\u6821\u9A8CC\u7C7B\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url-c=${api.base-address}/chmConsignmentController/checkChmAndDetaliC
#获取token地址
#\u83B7\u53D6token\u5730\u5740
api.address.token-url=https://apiuat.iclrccd-fedex.com/login
#刷新token地址
#\u5237\u65B0token\u5730\u5740
api.address.refresh-token-url=https://apiuat.iclrccd-fedex.com/user/token/refresh
#传输海关回执地址
#\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740
api.address.customs-url=https://apiuat.iclrccd-fedex.com/export/outbound/customs
#推送完整报文地址
#\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740
api.address.complete-msg-url=https://apiuat.iclrccd-fedex.com/export/outbound/mawb
#iclear应用节点是否能够正常访问
#iclear\u5E94\u7528\u8282\u70B9\u662F\u5426\u80FD\u591F\u6B63\u5E38\u8BBF\u95EE
iclear.address.url42=http://localhost:8080/Exp
iclear.address.url43=http://localhost:8080/Exp
#代理地址(刷新token、传输海关回执地址、推送完整报文地址)
stamp_path=D:/workspace/prjIClear/src/main/webapp/upload/attachment/slipType_chm/
stamp_file_name=stamp.png
#\u4EE3\u7406\u5730\u5740\uFF08\u5237\u65B0token\u3001\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740\u3001\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740\uFF09
api.address.proxy-url=cn2-proxy.apac.fedex.com
api.address.proxy-port=3128
\ No newline at end of file
......
spring.servlet.context-path=/API
spring.datasource.jndi-name=jdbc/iclearDS
#推送海关回执
#\u63A8\u9001\u6D77\u5173\u56DE\u6267
task.pushCustomsTask=0 0/1 * * * ?
#推送完整报文
#\u63A8\u9001\u5B8C\u6574\u62A5\u6587
task.pushMawbTask=0 0/1 * * * ?
#推送失败的回执数据
#\u63A8\u9001\u5931\u8D25\u7684\u56DE\u6267\u6570\u636E
task.pushErrorReturnDate=0 0/30 * * * ?
#推送失败的申报数据
#\u63A8\u9001\u5931\u8D25\u7684\u7533\u62A5\u6570\u636E
task.pushErrorDeclareDate=0 0/30 * * * ?
#监听iclear节点是否正常定时任务间隔
#\u76D1\u542Ciclear\u8282\u70B9\u662F\u5426\u6B63\u5E38\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694
task.monitorIclearNodes=0 0/5 * * * ?
api.base-address=https://declaration.fedex.com.cn/Exp
#获取token账号
#\u83B7\u53D6token\u8D26\u53F7
api.token-info.username=iclear_export_prod
#获取token密码
#\u83B7\u53D6token\u5BC6\u7801
api.token-info.password=1qaz@WSX
#IClearC类提交运单地址
#IClearC\u7C7B\u63D0\u4EA4\u8FD0\u5355\u5730\u5740
api.address.iclear-submit-url=${api.base-address}/chmConsignmentController/submitConsignments
#IClear校验运单地址
#IClear\u6821\u9A8C\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url=${api.base-address}/chmConsignmentController/checkChmAndDetaliD
#IClear校验C类运单地址
#IClear\u6821\u9A8CC\u7C7B\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url-c=${api.base-address}/chmConsignmentController/checkChmAndDetaliC
#获取token地址
#\u83B7\u53D6token\u5730\u5740
api.address.token-url=https://apictm.iclrccd-fedex.com/login
#刷新token地址
#\u5237\u65B0token\u5730\u5740
api.address.refresh-token-url=https://apictm.iclrccd-fedex.com/admin/user/token/refresh
#传输海关回执地址
#\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740
api.address.customs-url=https://apictm.iclrccd-fedex.com/export/outbound/customs
#推送完整报文地址
#\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740
api.address.complete-msg-url=https://apictm.iclrccd-fedex.com/export/outbound/mawb
#iclear应用节点是否能够正常访问
#iclear\u5E94\u7528\u8282\u70B9\u662F\u5426\u80FD\u591F\u6B63\u5E38\u8BBF\u95EE
iclear.address.url42=https://pjec0003.cndczmd.apac.fedex.com:9002/Exp/
iclear.address.url43=https://pjec0004.cndczmd.apac.fedex.com:9002/Exp/
#代理地址(刷新token、传输海关回执地址、推送完整报文地址)
stamp_path=/var/share/iclear/resources/upload/attachment/slipType_chm/
stamp_file_name=stamp.png
#\u4EE3\u7406\u5730\u5740\uFF08\u5237\u65B0token\u3001\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740\u3001\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740\uFF09
api.address.proxy-url=cn2-proxy.apac.fedex.com
api.address.proxy-port=3128
......
spring.servlet.context-path=/API
spring.datasource.jndi-name=jdbc/iclearDS
#推送海关回执
#\u63A8\u9001\u6D77\u5173\u56DE\u6267
task.pushCustomsTask=0 0/1 * * * ?
#推送完整报文
#\u63A8\u9001\u5B8C\u6574\u62A5\u6587
task.pushMawbTask=0 0/1 * * * ?
#推送失败的回执数据
#\u63A8\u9001\u5931\u8D25\u7684\u56DE\u6267\u6570\u636E
task.pushErrorReturnDate=0 0/3 * * * ?
#推送失败的申报数据
#\u63A8\u9001\u5931\u8D25\u7684\u7533\u62A5\u6570\u636E
task.pushErrorDeclareDate=0 0/3 * * * ?
#监听iclear节点是否正常定时任务间隔
#\u76D1\u542Ciclear\u8282\u70B9\u662F\u5426\u6B63\u5E38\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694
task.monitorIclearNodes=0 0/5 * * * ?
api.base-address=https://declarationuat.fedex.com.cn/Exp
#获取token账号
#\u83B7\u53D6token\u8D26\u53F7
api.token-info.username=iclear_external_ctm
#获取token密码
#\u83B7\u53D6token\u5BC6\u7801
api.token-info.password=toQu3arch6
#IClearC类提交运单地址
#IClearC\u7C7B\u63D0\u4EA4\u8FD0\u5355\u5730\u5740
api.address.iclear-submit-url=${api.base-address}/chmConsignmentController/submitConsignments
#IClear校验运单地址
#IClear\u6821\u9A8C\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url=${api.base-address}/chmConsignmentController/checkChmAndDetaliD
#IClear校验C类运单地址
#IClear\u6821\u9A8CC\u7C7B\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url-c=${api.base-address}/chmConsignmentController/checkChmAndDetaliC
#获取token地址
#\u83B7\u53D6token\u5730\u5740
api.address.token-url=https://apiuat.iclrccd-fedex.com/login
#刷新token地址
#\u5237\u65B0token\u5730\u5740
api.address.refresh-token-url=https://apiuat.iclrccd-fedex.com/user/token/refresh
#传输海关回执地址
#\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740
api.address.customs-url=https://apiuat.iclrccd-fedex.com/export/outbound/customs
#推送完整报文地址
#\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740
api.address.complete-msg-url=https://apiuat.iclrccd-fedex.com/export/outbound/mawb
#iclear应用节点是否能够正常访问
#iclear\u5E94\u7528\u8282\u70B9\u662F\u5426\u80FD\u591F\u6B63\u5E38\u8BBF\u95EE
iclear.address.url42=http://ujec0003.cndczmd.apac.fedex.com:9001/Exp/#login
iclear.address.url43=http://ujec0004.cndczmd.apac.fedex.com:9001/Exp/#login
#代理地址(刷新token、传输海关回执地址、推送完整报文地址)
stamp_path=/var/share/iclear/resources/upload/attachment/slipType_chm/
stamp_file_name=stamp.png
#\u4EE3\u7406\u5730\u5740\uFF08\u5237\u65B0token\u3001\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740\u3001\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740\uFF09
api.address.proxy-url=cn2-proxy.apac.fedex.com
api.address.proxy-port=3128
\ No newline at end of file
......
package com.erry.iclear.dateInterface;
import com.arronlong.httpclientutil.HttpClientUtil;
import com.arronlong.httpclientutil.builder.HCB;
import com.arronlong.httpclientutil.common.HttpConfig;
import com.arronlong.httpclientutil.common.HttpHeader;
import com.arronlong.httpclientutil.common.SSLs;
import com.erry.iclear.dateInterface.api.response.IClearCheckResult;
import com.erry.iclear.dateInterface.api.response.StampResult;
import com.erry.iclear.dateInterface.util.FileUtils;
import com.erry.iclear.dateInterface.util.JsonToJava;
import com.erry.iclear.dateInterface.util.SHA256Util;
import org.apache.http.Header;
/**
* 获取HSCODE接口地址
* fedex
* 2022年4月14日17:55:55
*/
public class StampRequest {
public static String url = "https://localhost:8780";
//获取HSCODE接口地址
public static String path = "/iknowU/stampQuery";
//时间戳
public static String timeStamp = "1649839249891";
//APPID
public static String appId = "DEMO1";
//APPKEY
public static String appKey = "iClearExportDemo1";
//需要申请
public static String security = "8c7f1108316abfb1";
public static void main(String[] args) throws Exception{
hscodeRequest();
}
/**
* 获取HSCODE接口地址
*/
public static void hscodeRequest() throws Exception{
//hscode 编码可修改
String json ="{\"consignmentCode\":\"aaaaaaaa\"}";
String token = SHA256Util.getSHA256String(StampRequest.appId + StampRequest.appKey + StampRequest.security + StampRequest.timeStamp);
System.out.println(token);
//消息头
Header[] headers = HttpHeader.custom()
.other("Content-Type", "application/json")
.other("Appid", StampRequest.appId)
.other("appKey", StampRequest.appKey)
.other("TimeStamp", StampRequest.timeStamp)
.other("token", token)
.build();
//客户端配置
HCB hcb = HCB.custom()
.timeout(20000)
.pool(100, 10)
.sslpv(SSLs.SSLProtocolVersion.TLSv1_2)
.ssl()
.retry(3);
//URL
String url = StampRequest.url + StampRequest.path;
//HTTP请求
HttpConfig config = HttpConfig.custom()
.headers(headers)
.url(url)
.encoding("utf-8")
.client(hcb.build())
.json(json);
String result = HttpClientUtil.post(config);
StampResult stampResult = JsonToJava.parseJson(result, StampResult.class);
FileUtils.convertBase64ToFile(stampResult.getBase64Image(),"C:\\Users\\erry-Fedex\\Desktop\\电子章","bbbbbbb.png");
}
}