ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java
@@ -94,4 +94,8 @@ @ApiModelProperty("收货地址JSON") @TableField(exist = false) private String addressJson; @ApiModelProperty(value = "第三方快递结果") @TableField("express_result") private String expressResult; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java
@@ -1,8 +1,12 @@ package com.ruoyi.order.controller; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.account.api.model.UserAddress; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.core.web.page.TableDataInfo; @@ -11,13 +15,20 @@ import com.ruoyi.order.model.RefundPass; import com.ruoyi.order.service.OrderService; import com.ruoyi.order.service.RefundPassService; import com.ruoyi.order.util.ExpressDeliveryUtil; import com.ruoyi.order.util.vo.MapTrackKD100Vo; import com.ruoyi.order.vo.*; import com.ruoyi.other.api.domain.SystemConfig; import com.ruoyi.other.api.feignClient.SystemConfigClient; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -43,6 +54,12 @@ @Resource private OrderService orderService; @Resource private RedisTemplate redisTemplate; @Resource private SystemConfigClient systemConfigClient; @ResponseBody @@ -121,6 +138,20 @@ } refundPass.setStatus(5); refundPass.setCode(pass.getCode()); //添加查询快递信息队列 //一小时后定时查询快递信息 SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData(); JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); Integer waitTime = jsonObject.getInteger("waitTime"); redisTemplate.opsForZSet().add("order_refund_express", refundPass.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC)); JSONObject jsonObject1 = JSON.parseObject(pass.getCode()); String com = jsonObject1.getString("com"); String num = jsonObject1.getString("num"); UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class); MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, userAddress.getProvince() + userAddress.getCity(), order.getDeliverProvince() + order.getDeliverCity()); refundPass.setExpressResult(JSON.toJSONString(mapTrackKD100Vo)); refundPassService.updateById(refundPass); return R.ok(); } @@ -168,5 +199,23 @@ } /** * 获取订单快递明细 * @param id * @return */ @GetMapping("/getOrderExpress/{id}") @ApiOperation(value = "获取售后订单快递明细", tags = {"小程序-订单管理"}) public R<MapTrackKD100Vo> getOrderExpress(@PathVariable("id") Long id){ RefundPass refundPass = refundPassService.getById(id); String expressResult = refundPass.getExpressResult(); if(StringUtils.isNotEmpty(expressResult)){ MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(expressResult, MapTrackKD100Vo.class); return R.ok(mapTrackKD100Vo); } return R.ok(); } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/RefundPassService.java
@@ -62,4 +62,10 @@ * @return */ RefundPassInfo getRefundPassInfo(Long id); /** * 定时查询快递信息 */ void taskExpress(); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/RefundPassServiceImpl.java
@@ -7,6 +7,7 @@ import com.kuaidi100.sdk.contant.CompanyConstant; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.UserAddress; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; @@ -17,13 +18,18 @@ import com.ruoyi.order.model.RefundPass; import com.ruoyi.order.service.OrderService; import com.ruoyi.order.service.RefundPassService; import com.ruoyi.order.util.ExpressDeliveryUtil; import com.ruoyi.order.util.vo.MapTrackKD100Vo; import com.ruoyi.order.vo.*; import com.ruoyi.other.api.domain.BaseSetting; import com.ruoyi.other.api.domain.SystemConfig; import com.ruoyi.other.api.feignClient.BaseSettingClient; import com.ruoyi.other.api.feignClient.ShopClient; import com.ruoyi.other.api.feignClient.SystemConfigClient; import com.ruoyi.other.api.feignClient.TechnicianClient; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -32,6 +38,7 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** @@ -57,6 +64,12 @@ @Resource private SysUserClient sysUserClient; @Resource private RedisTemplate redisTemplate; @Resource private SystemConfigClient systemConfigClient; @@ -243,4 +256,41 @@ } return refundPassInfo; } /** * 定时查询快递信息 */ @Override public void taskExpress() { Set<Long> order_express = redisTemplate.opsForZSet().rangeByScore("order_refund_express", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); if(order_express.size() > 0){ for (Long id : order_express) { RefundPass refundPass = this.getById(id); Order order = orderService.getById(refundPass.getOrderId()); if(refundPass.getPassStatus() != 5){ redisTemplate.opsForZSet().remove("order_refund_express", id); continue; } String expressJson = refundPass.getCode(); if(StringUtils.isEmpty(expressJson)){ redisTemplate.opsForZSet().remove("order_refund_express", id); continue; } //{"com":"jd","num":"JDV016336234367"} JSONObject jsonObject1 = JSON.parseObject(refundPass.getCode()); String com = jsonObject1.getString("com"); String num = jsonObject1.getString("num"); UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class); MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, userAddress.getProvince() + userAddress.getCity(), order.getDeliverProvince() + order.getDeliverCity()); refundPass.setExpressResult(JSON.toJSONString(mapTrackKD100Vo)); this.updateById(refundPass); //延长时间x小时 SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData(); JSONObject jsonObject2 = JSON.parseObject(systemConfig.getContent()); Integer waitTime = jsonObject2.getInteger("waitTime"); redisTemplate.opsForZSet().add("order_refund_express", refundPass.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC)); } } } }