tao.mo

PI-11-HS CODE接口-01:

接口调整
新增HS CODE通用模糊查询接口,增加监管条件字段。
mt
2023年2月24日18:02:22
......@@ -25,7 +25,8 @@ public enum ErrorCodeEnum {
ERROR_30101("30101","数据查询异常(访问数据库超时或者其他数据库异常)"),
ERROR_30102("30102","hscode编码字段长度超过2000字符"),
ERROR_30103("30103","skuCode与skuName必须传递一项"),
ERROR_30104("30104","skuCode或skuName长度超出限制");
ERROR_30104("30104","skuCode或skuName长度超出限制"),
ERROR_30105("30105","skuCode编码最少输入4位字符,skuName最少输入2个字符");
ErrorCodeEnum(String code,String name){
this.code = code;
......
......@@ -98,12 +98,12 @@ public class HsCodeInterface {
long end = System.currentTimeMillis();
iclearApiHsCodeLog.setSpendTime(end-begin);
String skuCode = hscode.getSkuCode();
if(!StringUtil.isEmpty(skuCode)){
if(!StringUtil.isEmpty(skuCode) && skuCode.length() > 50){
skuCode = skuCode.substring(0,50);
}
String skuName = hscode.getSkuName();
if(!StringUtil.isEmpty(skuName)){
skuName = skuName.substring(0,50);
if(!StringUtil.isEmpty(skuName) && skuName.length() > 1000){
skuName = skuName.substring(0,1000);
}
iclearApiHsCodeLog.setCode("[skuCode="+skuCode+"],[skuName="+skuName+"]");
iClearApiHsCodeLogService.saveIClearApiHsCodeLog(iclearApiHsCodeLog);
......
......@@ -94,5 +94,8 @@ public class Constant {
public static String DECLARED_DOC_TYPE_ZERO="declaredDocType_00";
/**
* 监管条件
*/
public static final String supervise_condition = "superviseRestrict";
}
......
......@@ -41,4 +41,13 @@ public interface DictionaryEntriesRepository extends JpaRepository<DictionaryEn
@Query(nativeQuery = true, value = "SELECT * FROM T_BI_DICTIONARY_ENTRIES WHERE DICT_CODE = ?1 AND EXT6 = ?2")
public DictionaryEntries findDictionaryEntriesByDicCode(String code,String numBer);
/**
*监管条件
* @param dictCode
* @param status
* @return
*/
@Query(nativeQuery = true, value = "select CHINESE_NAME from T_BI_DICTIONARY_ENTRIES where DICT_CODE = ?1 AND STATUS=?2 order by ORDINAL")
public List<String> findDicEntByCodeList(String dictCode, Integer status);
}
......
......@@ -16,27 +16,35 @@ import java.util.List;
*/
@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")
@Query(nativeQuery = true, value = "select * from T_CC_HS_CODE where VALIDATE=1 and SKU_CODE in ?1")
List<HsCode> findHsCodeListByCode(List<String> skuCodeList);
/**
* 根据hscode编码或者商品名称进行模糊查询
* @param skuCode
* @param skuName
* @return
*/
@Query(nativeQuery = true, value = "SELECT TOP 50 * FROM T_CC_HS_CODE WHERE VALIDATE=1 and SKU_CODE LIKE ?1 AND SKUNAME LIKE ?2")
List<HsCode> fuzzyQueryHsCode(String skuCode,String skuName);
/**
* 查询所有有效hscode
* @return
*/
@Query(nativeQuery = true,value = "select * from T_CC_HS_CODE where VALIDATE=1")
public List<HsCode> findAllHsCodeList();
List<HsCode> findAllHsCodeList();
/**
* 获取监管条件数据
* @return
*/
@Query(nativeQuery = true,value = "select * from T_CC_HS_CODE where OUT_RATE <> 0 or MONITOR_CONDITION collate Chinese_PRC_CS_AI_WS LIKE ?1")
List<HsCode> findMonitorCondition(String chinsesName);
}
\ No newline at end of file
......
......@@ -3,14 +3,17 @@ package com.erry.iclear.dateInterface.service;
import com.erry.iclear.dateInterface.ErrorCodeEnum;
import com.erry.iclear.dateInterface.api.request.HsCodeParam;
import com.erry.iclear.dateInterface.api.response.ResultHsCode;
import com.erry.iclear.dateInterface.common.Constant;
import com.erry.iclear.dateInterface.entity.HsCode;
import com.erry.iclear.dateInterface.repository.DictionaryEntriesRepository;
import com.erry.iclear.dateInterface.repository.HsCodeRepository;
import com.erry.iclear.dateInterface.util.StringUtil;
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;
import java.sql.*;
import java.util.*;
/**
* hscode service
......@@ -20,8 +23,12 @@ import java.util.List;
@Service
@Slf4j
public class HsCodeService {
@Autowired
HsCodeRepository hsCodeRepository;
@Autowired
DictionaryEntriesRepository dicEntriesRepository;
/**
* 根据hscode编码查询对应的hscode
* @param hscode
......@@ -59,6 +66,8 @@ public class HsCodeService {
hsCodeList.add(hsCode);
}
});
//只能申报D类hscode监管条件hscode
this.setHscodeSupervise(hsCodeList);
resultHsCode.setSuccess(Boolean.TRUE);
resultHsCode.setCode(ErrorCodeEnum.SUCCESS.getCode());
resultHsCode.setMsg(ErrorCodeEnum.SUCCESS.getName());
......@@ -80,24 +89,43 @@ public class HsCodeService {
public ResultHsCode fuzzyQueryHsCode(HsCodeParam hscode){
ResultHsCode resultHsCode = new ResultHsCode(Boolean.FALSE,"","",null);
try{
//编码与品名都为空校验失败
if(StringUtil.isEmpty(hscode.getSkuCode()) && StringUtil.isEmpty(hscode.getSkuName())){
resultHsCode.setCode(ErrorCodeEnum.ERROR_30103.getCode());
resultHsCode.setMsg(ErrorCodeEnum.ERROR_30103.getName());
return resultHsCode;
}
//编码长度大于50校验失败
if(!StringUtil.isEmpty(hscode.getSkuCode()) && hscode.getSkuCode().length() > 50){
resultHsCode.setCode(ErrorCodeEnum.ERROR_30104.getCode());
resultHsCode.setMsg(ErrorCodeEnum.ERROR_30104.getName());
return resultHsCode;
}
//品名长度大于1000校验失败
if(!StringUtil.isEmpty(hscode.getSkuName()) && hscode.getSkuName().length() > 1000){
resultHsCode.setCode(ErrorCodeEnum.ERROR_30104.getCode());
resultHsCode.setMsg(ErrorCodeEnum.ERROR_30104.getName());
return resultHsCode;
}
List<HsCode> hsCodeList = null;
//编码长度小于4位字符校验失败
if(!StringUtil.isEmpty(hscode.getSkuName()) && hscode.getSkuName().length() < 4){
resultHsCode.setCode(ErrorCodeEnum.ERROR_30105.getCode());
resultHsCode.setMsg(ErrorCodeEnum.ERROR_30105.getName());
return resultHsCode;
}
//品名长度小于2位字符校验失败
if(!StringUtil.isEmpty(hscode.getSkuName()) && hscode.getSkuName().length() < 2){
resultHsCode.setCode(ErrorCodeEnum.ERROR_30105.getCode());
resultHsCode.setMsg(ErrorCodeEnum.ERROR_30105.getName());
return resultHsCode;
}
String skuCode = "%"+hscode.getSkuCode()+"%";
String skuName = "%"+hscode.getSkuName()+"%";
//模糊查询hscode信息
List<HsCode> hsCodeList = this.hsCodeRepository.fuzzyQueryHsCode(skuCode,skuName);
//对查询数据进行处理,标志数据是否C类限制品名
//只能申报D类hscode监管条件hscode
this.setHscodeSupervise(hsCodeList);
resultHsCode.setSuccess(Boolean.TRUE);
resultHsCode.setCode(ErrorCodeEnum.SUCCESS.getCode());
resultHsCode.setMsg(ErrorCodeEnum.SUCCESS.getName());
......@@ -131,4 +159,94 @@ public class HsCodeService {
}
return resultHsCode;
}
/**
* 只能申报D类hscode监管条件hscode
* 设置hscode
* mt
* 2023年2月24日17:29:49
*/
public void setHscodeSupervise(List<HsCode> hsCodeList){
List<Long> hsCodeIds = new ArrayList<>();
Map<String,Object> hscodeMap = this.getHscodeSupervise();
StringBuffer shsql = new StringBuffer("'");
if (hscodeMap !=null && hscodeMap.size()>0){
for (Map.Entry hscodeEntry :hscodeMap.entrySet()){
HsCode hsCode = (HsCode) hscodeEntry.getValue();
hsCodeIds.add(hsCode.getId());
}
}
hsCodeList.forEach(hsCode->{
//判断该hscode是否只能申报D类
if(hsCodeIds.contains(hsCode.getId())){
//d类
hsCode.setRestrictedC(1);
}else{
//C类
hsCode.setRestrictedC(0);
}
//如果ID为空,则设置为空
if(hsCode.getId() == null){
hsCode.setRestrictedC(null);
}
});
}
/**
* 根据监管条件获取数据,只能申报D类hscode信息
* mt
* 2023年2月24日16:43:46
* @return
*/
private Map<String,Object> getHscodeSupervise(){
try {
Map<String,Object> returnMap = new HashMap<>();
List<String> dictionaryEntriesList = dicEntriesRepository.findDicEntByCodeList(Constant.supervise_condition,1);
if (dictionaryEntriesList !=null && dictionaryEntriesList.size()>0){
String chinsesName = "%[";
for (int i= 0;i<dictionaryEntriesList.size();i++){
if (dictionaryEntriesList.size() -1 == i){
chinsesName += dictionaryEntriesList.get(i)+"]%";
}else{
chinsesName += dictionaryEntriesList.get(i)+"|";
}
}
//查询监管条件数据
List<HsCode> hsCodeList = this.hsCodeRepository.findMonitorCondition(chinsesName);
hsCodeList.forEach(hsCode->{
String newCode = getSubHscode(hsCode.getSkuCode());
returnMap.put(newCode,hsCode);
});
}
return returnMap;
}catch (Exception e){
log.error(e.getMessage(),e);
}
return null;
}
/**
* 对商品编码进行处理
* @param code
* @return
*/
private String getSubHscode(String code){
try {
if (!StringUtil.isEmptyWithTrim(code) && code.length()>6) {
if (code.length() == 7) {
code = "0" + code + "00";
} else if (code.length() == 8) {
code = code + "00";
} else if (code.length() == 9) {
code = "0" + code;
} else if (code.length() > 10) {
code = code.substring(0, 10);
}
return code;
}
}catch (Exception e){
log.error(e.getMessage(),e);
}
return null;
}
}
\ No newline at end of file
......