|  | @@ -22,6 +22,7 @@ import cn.newfeifan.mall.module.trade.convert.order.TradeOrderConvert;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderDO;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderItemDO;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderLogDO;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.trade.enums.order.TradeOrderStateEnum;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.enums.order.TradeOrderStatusEnum;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.mq.producer.order.DistriOrderProducer;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.service.aftersale.AfterSaleService;
 | 
	
	
		
			
				|  | @@ -29,6 +30,7 @@ import cn.newfeifan.mall.module.trade.service.order.TradeOrderLogService;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.service.order.TradeOrderQueryService;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.trade.service.order.TradeOrderUpdateService;
 | 
	
		
			
				|  |  |  import com.google.common.collect.Maps;
 | 
	
		
			
				|  |  | +import com.google.gson.Gson;
 | 
	
		
			
				|  |  |  import com.kuaidi100.sdk.response.SubscribeResp;
 | 
	
		
			
				|  |  |  import com.kuaidi100.sdk.utils.SignUtils;
 | 
	
		
			
				|  |  |  import io.swagger.v3.oas.annotations.Operation;
 | 
	
	
		
			
				|  | @@ -42,12 +44,15 @@ import org.springframework.web.bind.annotation.*;
 | 
	
		
			
				|  |  |  import javax.annotation.Resource;
 | 
	
		
			
				|  |  |  import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  |  import javax.validation.Valid;
 | 
	
		
			
				|  |  | +import java.time.LocalDateTime;
 | 
	
		
			
				|  |  | +import java.time.format.DateTimeFormatter;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
 | 
	
		
			
				|  |  |  import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.convertList;
 | 
	
		
			
				|  |  |  import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.convertSet;
 | 
	
		
			
				|  |  | +import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Tag(name = "管理后台 - 交易订单")
 | 
	
		
			
				|  |  |  @RestController
 | 
	
	
		
			
				|  | @@ -148,25 +153,44 @@ public class TradeOrderController {
 | 
	
		
			
				|  |  |          tradeOrderUpdateService.deliveryOrder(deliveryReqVO);
 | 
	
		
			
				|  |  |          return success(true);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @PostMapping("/callBackUrl")
 | 
	
		
			
				|  |  |      @Operation(summary = "订单订阅回调")
 | 
	
		
			
				|  |  | -    public SubscribeResp callBackUrl(HttpServletRequest request){
 | 
	
		
			
				|  |  | +    public SubscribeResp callBackUrl(HttpServletRequest request) {
 | 
	
		
			
				|  |  |          String param = request.getParameter("param");
 | 
	
		
			
				|  |  |          String sign = request.getParameter("sign");
 | 
	
		
			
				|  |  |          String orderId = request.getParameter("orderId");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        Gson gson = new Gson();
 | 
	
		
			
				|  |  | +        Map<String, Object> map = gson.fromJson(param, Map.class);
 | 
	
		
			
				|  |  | +        Map<String, Object> lastResult = (Map<String, Object>) map.get("lastResult");
 | 
	
		
			
				|  |  | +        String state = (String) lastResult.get("state");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //判断订单状态是否是已签收
 | 
	
		
			
				|  |  | +        if (state.equals(TradeOrderStateEnum.RECEIVED.getState())) {
 | 
	
		
			
				|  |  | +            TradeOrderDO order = tradeOrderQueryService.getOrderById(Long.valueOf(orderId));
 | 
	
		
			
				|  |  | +            if (order != null) {
 | 
	
		
			
				|  |  | +                List<Map<String, Object>> dataList = (List<Map<String, Object>>) lastResult.get("data");
 | 
	
		
			
				|  |  | +                Map<String, Object> firstData = dataList.get(0);
 | 
	
		
			
				|  |  | +                //保存签收时间
 | 
	
		
			
				|  |  | +                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
 | 
	
		
			
				|  |  | +                order.setReceivingTime(LocalDateTime.parse(firstData.get("time").toString(), formatter));
 | 
	
		
			
				|  |  | +                tradeOrderUpdateService.updateOrderById(order);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //建议记录一下这个回调的内容,方便出问题后双方排查问题
 | 
	
		
			
				|  |  | -        log.debug("快递100订阅推送回调结果|{}|{}",param,sign);
 | 
	
		
			
				|  |  | +        log.debug("快递100订阅推送回调结果|{}|{}", param, sign);
 | 
	
		
			
				|  |  |          //订阅时传的salt,没有可以忽略
 | 
	
		
			
				|  |  |          String salt = "";
 | 
	
		
			
				|  |  |          String ourSign = SignUtils.sign(param + salt);
 | 
	
		
			
				|  |  | -        log.info("订单:{},回调param:{}",orderId,param);
 | 
	
		
			
				|  |  | +        log.info("订单:{},回调param:{}", orderId, param);
 | 
	
		
			
				|  |  |          SubscribeResp subscribeResp = new SubscribeResp();
 | 
	
		
			
				|  |  |          subscribeResp.setResult(Boolean.TRUE);
 | 
	
		
			
				|  |  |          subscribeResp.setReturnCode("200");
 | 
	
		
			
				|  |  |          subscribeResp.setMessage("成功");
 | 
	
		
			
				|  |  |          //加密如果相等,属于快递100推送;否则可以忽略掉当前请求
 | 
	
		
			
				|  |  | -        if (ourSign.equals(sign)){
 | 
	
		
			
				|  |  | +        if (ourSign.equals(sign)) {
 | 
	
		
			
				|  |  |              //TODO 业务处理
 | 
	
		
			
				|  |  |              return subscribeResp;
 | 
	
		
			
				|  |  |          }
 |