From 59b79c6ff10a2f3c9853c053255faf686f6febb2 Mon Sep 17 00:00:00 2001 From: liao Date: Mon, 24 Apr 2023 09:42:42 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=BF=AB=E9=80=92100=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jero/config/shiro/ShiroConfig.java | 3 + jero-boot-incoming-payment/pom.xml | 6 + .../mail/controller/PostInfoController.java | 43 +++++++ .../mail/mapper/xml/PayMailBillMapper.xml | 49 ++++---- .../mail/mapper/xml/PayMailContractMapper.xml | 6 + .../com/jero/mail/param/PostInfoQuery.java | 23 ++++ .../com/jero/mail/param/QueryInfoParam.java | 35 ++++++ .../main/java/com/jero/mail/param/data.java | 35 ++++++ .../jero/mail/service/IPostInfoService.java | 19 +++ .../service/impl/PostInfoServiceImpl.java | 118 ++++++++++++++++++ .../src/main/resources/account.properties | 6 + 11 files changed, 320 insertions(+), 23 deletions(-) create mode 100644 jero-boot-incoming-payment/src/main/java/com/jero/mail/controller/PostInfoController.java create mode 100644 jero-boot-incoming-payment/src/main/java/com/jero/mail/param/PostInfoQuery.java create mode 100644 jero-boot-incoming-payment/src/main/java/com/jero/mail/param/QueryInfoParam.java create mode 100644 jero-boot-incoming-payment/src/main/java/com/jero/mail/param/data.java create mode 100644 jero-boot-incoming-payment/src/main/java/com/jero/mail/service/IPostInfoService.java create mode 100644 jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PostInfoServiceImpl.java create mode 100644 jero-boot-single-startup/src/main/resources/account.properties diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index 50f246fe..13139b02 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -194,6 +194,9 @@ public class ShiroConfig { // 判断当前企业是否是内部企业 filterChainDefinitionMap.put("/company/payCompanyManagement/getInternalEnterprise","anon"); + // 快递100-快递信息 + filterChainDefinitionMap.put("/mail/postInfo/queryInfo","anon"); + // 添加自己的过滤器并且取名为jwt Map filterMap = new HashMap(1); //如果cloudServer为空 则说明是单体 需要加载跨域配置 diff --git a/jero-boot-incoming-payment/pom.xml b/jero-boot-incoming-payment/pom.xml index 96171d8c..177bf2af 100644 --- a/jero-boot-incoming-payment/pom.xml +++ b/jero-boot-incoming-payment/pom.xml @@ -61,5 +61,11 @@ jero-cloud-feign-config --> + + + com.github.kuaidi100-api + sdk + 1.0.11 + \ No newline at end of file diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/controller/PostInfoController.java b/jero-boot-incoming-payment/src/main/java/com/jero/mail/controller/PostInfoController.java new file mode 100644 index 00000000..28efff41 --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/controller/PostInfoController.java @@ -0,0 +1,43 @@ +package com.jero.mail.controller; + +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.DictPoint; +import com.jero.mail.param.QueryInfoParam; +import com.jero.mail.service.IPostInfoService; +import com.jero.mail.param.PostInfoQuery; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Author: liao + * @Date: 2023/4/23 14:37 + * @remarks: 快递100-快递信息 + */ +@Api(tags="快递100-快递信息") +@RestController +@RequestMapping("/mail/postInfo") +@Slf4j +public class PostInfoController { + + @Autowired + private IPostInfoService postInfoService; + + /** + * @Author: liao + * @Date: 2023/4/23 14:49 + * @Remarks: 快递100-快递信息-查询 + */ + @ApiOperation(value="快递100-快递信息-查询", notes="快递100-快递信息-查询") + @GetMapping(value = "/queryInfo") + @DictPoint + public Result queryInfo(@Validated PostInfoQuery postInfoQuery) { + return postInfoService.queryInfo(postInfoQuery); + } + +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailBillMapper.xml b/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailBillMapper.xml index 2ccc623e..a4046a97 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailBillMapper.xml +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailBillMapper.xml @@ -79,29 +79,32 @@ diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailContractMapper.xml b/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailContractMapper.xml index f3477f95..aef13a6d 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailContractMapper.xml +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/mapper/xml/PayMailContractMapper.xml @@ -42,6 +42,9 @@ pc.contract_type='2' and pic.principal_id = #{payMailContracrList.principalId} + + and pc.post_no = #{payMailContracrList.postNo} + union all SELECT @@ -78,6 +81,9 @@ union all and psc.principal_id = #{payMailContracrList.principalId} + + and pc.post_no = #{payMailContracrList.postNo} + ) pp diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/PostInfoQuery.java b/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/PostInfoQuery.java new file mode 100644 index 00000000..58c5bf69 --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/PostInfoQuery.java @@ -0,0 +1,23 @@ +package com.jero.mail.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Author: liao + * @Date: 2023/4/23 14:58 + * @remarks: 快递100-快递信息模型类 + */ +@Data +@ApiModel("快递100-快递信息-查询参数") +public class PostInfoQuery { + @ApiModelProperty("查询的快递公司的编码(快递公司(1:EMS,2:顺丰))") + @NotBlank(message = "查询的快递公司的编码不能为空") + private String com; + @ApiModelProperty("查询的快递单号") + @NotBlank(message = "查询的快递单号不能为空") + private String num; +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/QueryInfoParam.java b/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/QueryInfoParam.java new file mode 100644 index 00000000..a37b62eb --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/QueryInfoParam.java @@ -0,0 +1,35 @@ +package com.jero.mail.param; + +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author: liao + * @Date: 2023/4/24 8:52 + * @remarks: + */ +@Data +@ApiModel("快递查询返回结果类") +public class QueryInfoParam { + @ApiModelProperty("消息体") + private String message; + @ApiModelProperty("快递单当前状态,默认为0在途,1揽收,2疑难,3签收,4退签,5派件,8清关,14拒签等10个基础物流状态") + @Dict(dicCode = "post_state") + private String state; + @ApiModelProperty("通讯状态") + private String status; + @ApiModelProperty("快递单明细状态标记") + private String condition; + @ApiModelProperty("是否签收标记,0未签收,1已签收") + @Dict(dicCode = "post_ischeck") + private String ischeck; + @ApiModelProperty("快递公司编码,一律用小写字母") + private String com; + @ApiModelProperty("单号") + private String nu; + @ApiModelProperty("最新查询结果,数组,包含多项,全量,倒序") + private data[] data; + +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/data.java b/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/data.java new file mode 100644 index 00000000..b1701a6a --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/param/data.java @@ -0,0 +1,35 @@ +package com.jero.mail.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author: liao + * @Date: 2023/4/24 8:57 + * @remarks: + */ +@Data +@ApiModel("最新查询结果,数组,包含多项,全量,倒序(即时间最新的在最前)") +public class data { + @ApiModelProperty("内容") + private String context; + @ApiModelProperty("时间,原始格式") + private String time; + @ApiModelProperty("格式化后时间") + private String ftime; + @ApiModelProperty("本数据元对应的物流状态名称或者高级状态名称") + private String status; + @ApiModelProperty("本数据元对应的高级物流状态值") + private String statusCode; + @ApiModelProperty("本数据元对应的行政区域的编码") + private String areaCode; + @ApiModelProperty("本数据元对应的行政区域的名称") + private String areaName; + @ApiModelProperty("本数据元对应的行政区域经纬度") + private String areaCenter; + @ApiModelProperty("本数据元对应的快件当前地点") + private String location; + @ApiModelProperty("本数据元对应的行政区域拼音") + private String areaPinYin; +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/IPostInfoService.java b/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/IPostInfoService.java new file mode 100644 index 00000000..07584b46 --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/IPostInfoService.java @@ -0,0 +1,19 @@ +package com.jero.mail.service; + +import com.jero.common.api.vo.Result; +import com.jero.mail.param.PostInfoQuery; +import com.jero.mail.param.QueryInfoParam; + +/** + * @Author: liao + * @Date: 2023/4/23 14:41 + * @remarks: 快递100-快递信息 + */ +public interface IPostInfoService { + /** + * @Author: liao + * @Date: 2023/4/23 14:49 + * @Remarks: 快递100-快递信息-查询 + */ + Result queryInfo(PostInfoQuery postInfoQuery); +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PostInfoServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PostInfoServiceImpl.java new file mode 100644 index 00000000..8ba7117a --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PostInfoServiceImpl.java @@ -0,0 +1,118 @@ +package com.jero.mail.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.gson.Gson; +import com.jero.common.api.vo.Result; +import com.jero.common.exception.JeroBootException; +import com.jero.mail.entity.PayMailBill; +import com.jero.mail.entity.PayMailContracrList; +import com.jero.mail.param.QueryInfoParam; +import com.jero.mail.service.IPayMailBillService; +import com.jero.mail.service.IPayMailContractService; +import com.jero.mail.service.IPostInfoService; +import com.jero.mail.param.PostInfoQuery; +import com.kuaidi100.sdk.api.QueryTrack; +import com.kuaidi100.sdk.core.IBaseClient; +import com.kuaidi100.sdk.pojo.HttpResult; +import com.kuaidi100.sdk.request.QueryTrackParam; +import com.kuaidi100.sdk.request.QueryTrackReq; +import com.kuaidi100.sdk.utils.PropertiesReader; +import com.kuaidi100.sdk.utils.SignUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Author: liao + * @Date: 2023/4/23 14:41 + * @remarks: 快递100-快递信息 + */ +@Service +@Slf4j +public class PostInfoServiceImpl implements IPostInfoService { + @Autowired + private IPayMailBillService payMailBillService; + @Autowired + private IPayMailContractService payMailContractService; + String key = PropertiesReader.get("key"); + String customer = PropertiesReader.get("customer"); + private static final String SF = "shunfeng"; // 顺丰 + private static final String EMS = "ems"; //EMS + + /** + * @Author: liao + * @Date: 2023/4/23 14:49 + * @Remarks: 快递100-快递信息-查询 + */ + @Override + public Result queryInfo(PostInfoQuery postInfoQuery) { + // 1.判断是否是邮寄管理中的数据 + checkIsMySystem(postInfoQuery); + // 2.调用api + HttpResult httpResult = sendReq(postInfoQuery); + // 2.1.对body做处理 + QueryInfoParam infoParam = new Gson().fromJson(httpResult.getBody(), QueryInfoParam.class); + // 3.返回 + Result result = new Result(); + result.setCode(httpResult.getStatus()); + result.setResult(infoParam); + result.setMessage(infoParam.getMessage()); + return result; + + } + + private HttpResult sendReq(PostInfoQuery postInfoQuery) { + QueryTrackReq queryTrackReq = new QueryTrackReq(); + QueryTrackParam queryTrackParam = new QueryTrackParam(); + setCom(postInfoQuery); + queryTrackParam.setCom(postInfoQuery.getCom()); + queryTrackParam.setNum(postInfoQuery.getNum()); + String param = new Gson().toJson(queryTrackParam); + + queryTrackReq.setParam(param); + queryTrackReq.setCustomer(customer); + queryTrackReq.setSign(SignUtils.querySign(param ,key,customer)); + + IBaseClient baseClient = new QueryTrack(); + try { + HttpResult httpResult = baseClient.execute(queryTrackReq); + log.info("快递100远程api调用返回结果:",httpResult); + return httpResult; + } catch (Exception e) { + throw new JeroBootException("快递信息查询失败!"); + } + } + + private void setCom(PostInfoQuery postInfoQuery) { + if ("1".equals(postInfoQuery.getCom())) { + postInfoQuery.setCom(SF); + } else if ("2".equals(postInfoQuery.getCom())) { + postInfoQuery.setCom(EMS); + } else { + throw new JeroBootException("只能查询顺丰和EMS的快递信息!"); + } + } + + /** + * @Author: liao + * @Date: 2023/4/23 15:18 + * @Remarks: 判断是否是邮寄管理中的数据 + */ + private void checkIsMySystem(PostInfoQuery postInfoQuery) { + Page page1 = new Page<>(1, 1); + PayMailContracrList payMailContracrList = new PayMailContracrList(); + payMailContracrList.setPostNo(postInfoQuery.getNum()); + IPage pageList1 = payMailContractService.pageContract(page1, payMailContracrList); + int size1 = pageList1.getRecords().size(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(PayMailBill::getPostNo, postInfoQuery.getNum()); + Page page2 = new Page<>(1, 1); + IPage pageList2 = payMailBillService.pageList(page2, queryWrapper); + int size2 = pageList2.getRecords().size(); + if (size1 < 1 && size2 < 1) { + throw new JeroBootException("只能查询“票据邮寄”和“合同邮寄”中的快递单号信息!"); + } + } +} diff --git a/jero-boot-single-startup/src/main/resources/account.properties b/jero-boot-single-startup/src/main/resources/account.properties new file mode 100644 index 00000000..886e109b --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/account.properties @@ -0,0 +1,6 @@ +#快递100的基础账号信息,可以在这里获取 +# https://api.kuaidi100.com/manager/v2/myinfo/enterprise +key = glrUQsMV4692 +customer = 580BE140491CA19C3FED37DB5845413E +secret = 13ca4c7113dc4358ae4ef739ce5127b3 +userid = 0aca2a83308545af9299b83174d38ee8 \ No newline at end of file