Merge branch 'master' of D:\workspace\iClear-api with conflicts.
Showing
12 changed files
with
376 additions
and
1 deletions
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; | ... | ... |
-
Please register or login to post a comment