Переглянути джерело

任务提交 客户订单查询接口 BUG修正 订单信息入库

秦国才 4 роки тому
батько
коміт
8bb7705deb
24 змінених файлів з 720 додано та 14 видалено
  1. 2 0
      common/fire-dto/src/main/java/com/fire/dto/FlowOrderInfo.java
  2. 1 1
      common/fire-dto/src/main/java/com/fire/es/OrderEsDto.java
  3. 42 0
      modules/get-order/src/main/java/com/fire/getorder/consumer/RocketUpdateConsumer.java
  4. 22 0
      modules/get-order/src/main/java/com/fire/getorder/data/DataPool.java
  5. 24 0
      modules/get-order/src/main/java/com/fire/getorder/mapper/FlowAppInfoMapper.java
  6. 26 0
      modules/get-order/src/main/java/com/fire/getorder/request/GetOrderContent.java
  7. 17 0
      modules/get-order/src/main/java/com/fire/getorder/request/GetOrderMsgBody.java
  8. 22 0
      modules/get-order/src/main/java/com/fire/getorder/request/GetOrderParam.java
  9. 66 0
      modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResContent.java
  10. 22 0
      modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResp.java
  11. 22 0
      modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResponseDto.java
  12. 19 0
      modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResponseMsgBody.java
  13. 11 7
      modules/get-order/src/main/java/com/fire/getorder/rest/GetOrderRest.java
  14. 17 0
      modules/get-order/src/main/java/com/fire/getorder/service/CacheService.java
  15. 22 0
      modules/get-order/src/main/java/com/fire/getorder/service/GetOrderService.java
  16. 49 0
      modules/get-order/src/main/java/com/fire/getorder/service/impl/CacheServiceImpl.java
  17. 244 0
      modules/get-order/src/main/java/com/fire/getorder/service/impl/GetOrderServiceImpl.java
  18. 43 0
      modules/get-order/src/main/java/com/fire/getorder/task/CacheCustomerTask.java
  19. 43 0
      modules/get-order/src/main/resources/mapper/FlowAppInfoMapper.xml
  20. 1 1
      modules/save-data/src/main/java/com/fire/savedata/consumer/DispatchEsConsumer.java
  21. 1 1
      modules/save-data/src/main/java/com/fire/savedata/consumer/DispatchTidbConsumer.java
  22. 1 1
      modules/save-data/src/main/java/com/fire/savedata/consumer/OrderEsConsumer.java
  23. 2 2
      modules/save-data/src/main/java/com/fire/savedata/consumer/OrderTidbConsumer.java
  24. 1 1
      modules/save-data/src/main/resources/bootstrap.yml

+ 2 - 0
common/fire-dto/src/main/java/com/fire/dto/FlowOrderInfo.java

@@ -2,6 +2,7 @@ package com.fire.dto;
 
 import java.util.Date;
 
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -15,6 +16,7 @@ public class FlowOrderInfo {
     @ApiModelProperty(value = "接入ID号")
     private Long flowAppId;
 
+    @TableId
     @ApiModelProperty(value = "订单ID号")
     private Long orderId;
 

+ 1 - 1
common/fire-dto/src/main/java/com/fire/es/OrderEsDto.java

@@ -102,7 +102,7 @@ public class OrderEsDto {
      * 4-失败 6-成功
      */
     @ApiModelProperty("订单状态 1-待充值 2-充值中 4-失败 6-成功 9-重发")
-    @Field(type = FieldType.Long)
+    @Field(type = FieldType.Integer)
     private Integer status;
     /**
      * 订单备注

+ 42 - 0
modules/get-order/src/main/java/com/fire/getorder/consumer/RocketUpdateConsumer.java

@@ -0,0 +1,42 @@
+package com.fire.getorder.consumer;
+
+
+import com.fire.getorder.service.CacheService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.common.message.MessageExt;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+import static com.fire.common.constants.RocketTags.*;
+import static com.fire.common.constants.RocketTopic.UPDATE_TOPIC;
+
+
+/**
+ * 消息消费者,可与生产者分离
+ * 这里定义的messageMode是集群消费,如果是同一消费组则会组内消费者均衡消费;
+ * 如果是不同消费组,则会起到广播消费的效果
+ *
+ * @author ZJQ 2021年5月26日14:59:42
+ */
+
+@Slf4j
+@Component
+@RocketMQMessageListener(consumerGroup = "${rocketmq.consumer.group}", topic = UPDATE_TOPIC,selectorExpression = CONSUMER_PRODUCT_TAG)
+public class RocketUpdateConsumer implements RocketMQListener<MessageExt> {
+
+    @Resource
+    private CacheService cacheService;
+
+    @Override
+    public void onMessage(MessageExt msg) {
+        //只消费最近十分钟的消息,因为再之前的消息为历史的更新没有意义
+        Long now = System.currentTimeMillis();
+        Long bron = msg.getBornTimestamp();
+        if(now - bron < 600000){
+            cacheService.cacheCustomer();
+        }
+    }
+}

+ 22 - 0
modules/get-order/src/main/java/com/fire/getorder/data/DataPool.java

@@ -0,0 +1,22 @@
+package com.fire.getorder.data;
+
+import com.fire.dto.FlowAppInfo;
+import com.fire.dto.OperatorMaintenance;
+import com.fire.dto.PhoneZone;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 需要在内存中缓存的信息
+ *
+ * @author ZJQ 2021年5月17日16:14:47
+ */
+public class DataPool {
+
+    /**
+     * 客户信息
+     */
+    public static Map<String, FlowAppInfo> flowAppInfoMap = new HashMap<>();
+
+}

+ 24 - 0
modules/get-order/src/main/java/com/fire/getorder/mapper/FlowAppInfoMapper.java

@@ -0,0 +1,24 @@
+package com.fire.getorder.mapper;
+
+import com.fire.dto.FlowAppInfo;
+
+import java.util.List;
+
+/**
+ * 客户接入表(FlowAppInfo)表数据库访问层
+ *
+ * @author ZJQ  2021-05-17 14:08:29
+ */
+public interface FlowAppInfoMapper {
+
+    /**
+     * 查询所有接入信息
+     *
+     * @return 实例对象list
+     */
+    List<FlowAppInfo> queryAll();
+
+
+
+}
+

+ 26 - 0
modules/get-order/src/main/java/com/fire/getorder/request/GetOrderContent.java

@@ -0,0 +1,26 @@
+package com.fire.getorder.request;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "请求参数正文")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@Data
+public class GetOrderContent {
+
+    @ApiModelProperty(value = "校验sign")
+    @JsonProperty(value = "SIGN")
+    private String sign;
+
+    @ApiModelProperty(value = "订单ID")
+    @JsonProperty(value = "ORDERID")
+    private String orderId;
+
+    @ApiModelProperty(value = "CP订单号")
+    @JsonProperty(value = "EXTORDERID")
+    private String extensionId;
+
+}

+ 17 - 0
modules/get-order/src/main/java/com/fire/getorder/request/GetOrderMsgBody.java

@@ -0,0 +1,17 @@
+package com.fire.getorder.request;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "请求参数消息体")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@Data
+public class GetOrderMsgBody {
+
+    @ApiModelProperty(value = "请求正文")
+    @JsonProperty(value = "CONTENT")
+    private GetOrderContent content;
+}

+ 22 - 0
modules/get-order/src/main/java/com/fire/getorder/request/GetOrderParam.java

@@ -0,0 +1,22 @@
+package com.fire.getorder.request;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fire.param.HeaderDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@Data
+public class GetOrderParam {
+
+    @ApiModelProperty(value = "请求参数头信息")
+    @JsonProperty(value = "HEADER")
+    private HeaderDto header;
+
+    @ApiModelProperty(value = "请求参数消息体")
+    @JsonProperty(value = "MSGBODY")
+    private GetOrderMsgBody msgBody;
+}

+ 66 - 0
modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResContent.java

@@ -0,0 +1,66 @@
+package com.fire.getorder.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "返回信息正文")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@Data
+public class GetOrderResContent {
+
+    @ApiModelProperty(value = "订单号")
+    @JsonProperty(value = "ORDERID")
+    private String orderId;
+
+    @ApiModelProperty(value = "话费订单类型")
+    @JsonProperty(value = "ORDERTYPE")
+    private String orderType;
+
+    @ApiModelProperty(value = "用户号码")
+    @JsonProperty(value = "USER")
+    private String user;
+
+    @ApiModelProperty(value = "申请时间")
+    @JsonProperty(value = "REQDATE")
+    private String reqDate;
+
+    @ApiModelProperty(value = "话费包ID")
+    @JsonProperty(value = "PACKAGEID")
+    private String packageId;
+
+    @ApiModelProperty(value = "订单状态")
+    @JsonProperty(value = "STATUS")
+    private String status;
+
+    @ApiModelProperty(value = "CP系统内部订单号")
+    @JsonProperty(value = "EXTORDER")
+    private String extorder;
+
+    @ApiModelProperty(value = "错误信息")
+    @JsonProperty(value = "MSG")
+    private String msg;
+
+    @ApiModelProperty(value = "结算价格(单位:人民币)*10000")
+    @JsonProperty(value = "PRICE")
+    private String price;
+
+    @ApiModelProperty(value = "充值完成日期")
+    @JsonProperty(value = "CHECKTIME")
+    private String checkTime;
+
+    @ApiModelProperty(value = "话费充值返回缴费平台流水号")
+    @JsonProperty(value = "ATTR1")
+    private String attr1;
+
+    @ApiModelProperty(value = "备注2")
+    @JsonProperty(value = "ATTR2")
+    private String attr2;
+
+    @ApiModelProperty(value = "备注3")
+    @JsonProperty(value = "ATTR3")
+    private String attr3;
+
+}

+ 22 - 0
modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResp.java

@@ -0,0 +1,22 @@
+package com.fire.getorder.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import static com.fire.dto.enums.Status.SUCCESS_SERVER;
+
+@ApiModel(value = "订单响应信息")
+@Data
+public class GetOrderResp {
+
+    @ApiModelProperty(value = "响应信息")
+    @JsonProperty(value = "RMSG")
+    private String rMsg = SUCCESS_SERVER.message();
+
+    @ApiModelProperty(value = "响应代码")
+    @JsonProperty(value = "RCODE")
+    private String rCode = SUCCESS_SERVER.status();
+
+}

+ 22 - 0
modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResponseDto.java

@@ -0,0 +1,22 @@
+package com.fire.getorder.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fire.getorder.request.GetOrderMsgBody;
+import com.fire.param.HeaderDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "下单接口响应")
+@Data
+public class GetOrderResponseDto {
+
+    @ApiModelProperty(value = "响应头信息")
+    @JsonProperty(value = "HEADER")
+    private HeaderDto header;
+
+    @ApiModelProperty(value = "响应消息体")
+    @JsonProperty(value = "MSGBODY")
+    private GetOrderResponseMsgBody msgBody;
+
+}

+ 19 - 0
modules/get-order/src/main/java/com/fire/getorder/response/GetOrderResponseMsgBody.java

@@ -0,0 +1,19 @@
+package com.fire.getorder.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "响应消息体")
+@Data
+public class GetOrderResponseMsgBody {
+
+    @ApiModelProperty(value = "响应内容")
+    @JsonProperty(value = "CONTENT")
+    private GetOrderResContent content;
+
+    @ApiModelProperty(value = "响应信息")
+    @JsonProperty(value = "RESP")
+    private GetOrderResp resp;
+}

+ 11 - 7
modules/get-order/src/main/java/com/fire/getorder/rest/GetOrderRest.java

@@ -2,7 +2,10 @@ package com.fire.getorder.rest;
 
 
 
-import com.fire.dto.response.BaseRestResponse;
+
+import com.fire.getorder.request.GetOrderParam;
+import com.fire.getorder.response.GetOrderResponseDto;
+import com.fire.getorder.service.GetOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -10,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Map;
+import javax.annotation.Resource;
 
 
 @Api(tags = "客户获取订单信息")
@@ -18,17 +21,18 @@ import java.util.Map;
 @RequestMapping("/gateway")
 public class GetOrderRest {
 
-
+    @Resource
+    private GetOrderService getOrderService;
     /**
      * 订单查询
      *
-     * @param  msg 下单参数
+     * @param  getOrderParam 下单参数
      * @return OrderSearchResponse( 下单响应对象
      */
     @PostMapping("/flowservice/queryorder.ws")
-    @ApiOperation(value = "订单信息", notes = "order_search.py")
-    public void orderSearch(@RequestBody String msg) {
-
+    @ApiOperation(value = "获取订单信息", notes = "order_search.py")
+    public GetOrderResponseDto queryorder(@RequestBody GetOrderParam getOrderParam) {
+        return getOrderService.getOrder(getOrderParam);
     }
 
 

+ 17 - 0
modules/get-order/src/main/java/com/fire/getorder/service/CacheService.java

@@ -0,0 +1,17 @@
+package com.fire.getorder.service;
+
+
+/**
+ * 客户服务层
+ *
+ * @author ZJQ 2021年5月17日15:51:14
+ */
+public interface CacheService {
+
+    /**
+     * 缓存客户信息
+     */
+    void cacheCustomer();
+
+
+}

+ 22 - 0
modules/get-order/src/main/java/com/fire/getorder/service/GetOrderService.java

@@ -0,0 +1,22 @@
+package com.fire.getorder.service;
+
+
+import com.fire.getorder.request.GetOrderParam;
+import com.fire.getorder.response.GetOrderResponseDto;
+
+
+/**
+ * 下单服务接口
+ *
+ * @author ZJQ 2021年5月14日17:13:54
+ */
+public interface GetOrderService {
+
+    /**
+     * 获取订单状态方法
+     *
+     * @param getOrderParam 下单参数
+     */
+    GetOrderResponseDto getOrder(GetOrderParam getOrderParam);
+
+}

+ 49 - 0
modules/get-order/src/main/java/com/fire/getorder/service/impl/CacheServiceImpl.java

@@ -0,0 +1,49 @@
+package com.fire.getorder.service.impl;
+
+
+import com.alibaba.nacos.common.utils.CollectionUtils;
+import com.fire.dto.*;
+
+import com.fire.getorder.data.DataPool;
+import com.fire.getorder.mapper.FlowAppInfoMapper;
+import com.fire.getorder.service.CacheService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+import java.util.List;
+import java.util.Map;
+
+import java.util.stream.Collectors;
+
+/**
+ * 客户服务实现层
+ *
+ * @author ZJQ 2021年5月14日17:13:54
+ */
+@Service
+public class CacheServiceImpl implements CacheService {
+
+    @Resource
+    private FlowAppInfoMapper flowAppInfoMapper;
+
+
+    /**
+     * 缓存客户信息
+     */
+    @Override
+    public void cacheCustomer() {
+        //查询所有的客户信息和所有的接入信息
+        List<FlowAppInfo> appInfos = flowAppInfoMapper.queryAll();
+
+        if (CollectionUtils.isNotEmpty(appInfos) ) {
+
+            //将接入信息list 转换为appId为key的map 如果存在重复key,以后出现的为准
+            DataPool.flowAppInfoMap = appInfos.stream().collect(Collectors.toMap(FlowAppInfo::getAppId, a -> a, (k1, k2) -> k2));
+        }
+
+
+    }
+
+
+}

+ 244 - 0
modules/get-order/src/main/java/com/fire/getorder/service/impl/GetOrderServiceImpl.java

@@ -0,0 +1,244 @@
+package com.fire.getorder.service.impl;
+
+
+
+import com.alibaba.nacos.api.utils.StringUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fire.dto.FlowAppInfo;
+import com.fire.dto.FlowOrderInfo;
+import com.fire.es.OrderEsDto;
+import com.fire.getorder.data.DataPool;
+import com.fire.getorder.request.GetOrderContent;
+import com.fire.getorder.request.GetOrderMsgBody;
+import com.fire.getorder.request.GetOrderParam;
+import com.fire.getorder.response.GetOrderResContent;
+import com.fire.getorder.response.GetOrderResp;
+import com.fire.getorder.response.GetOrderResponseDto;
+import com.fire.getorder.response.GetOrderResponseMsgBody;
+import com.fire.getorder.service.GetOrderService;
+import com.fire.param.HeaderDto;
+import com.fire.utils.date.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+
+
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+import redis.clients.jedis.JedisCluster;
+import javax.annotation.Resource;
+
+import java.nio.charset.StandardCharsets;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import static com.fire.dto.enums.Status.*;
+import static com.fire.dto.enums.Status.OVER_TIME;
+import static com.fire.dto.enums.ValidStatus.INVALID;
+
+
+/**
+ * 客户查询定单状态
+ *
+ * @author QGC 2021年6月23日17:13:54
+ */
+@Service
+@Slf4j
+public class GetOrderServiceImpl implements GetOrderService {
+
+    @Resource
+    private JedisCluster jedisCluster;
+
+    public String timeSwap(Date time,String format) {
+        //"yyyy-MM-dd hh:mm:ss"
+        DateFormat df = new SimpleDateFormat(format);
+        if (time==null){
+            return "";
+        }
+        String s = df.format(time);
+        return s;
+    }
+
+    /**
+     * 客户查询定单状态
+     *
+     * @param getOrderParam 下单参数
+     */
+    @Override
+    public GetOrderResponseDto getOrder(GetOrderParam getOrderParam) {
+        //初始化查询定单响应类
+        GetOrderResponseDto responseDto = new GetOrderResponseDto();
+        GetOrderResp orderResp = new GetOrderResp();
+        GetOrderResponseMsgBody msgBody = new GetOrderResponseMsgBody();
+        msgBody.setResp(orderResp);
+        responseDto.setMsgBody(msgBody);
+        //判断请求参数是否为空
+        if (null == getOrderParam) {
+            orderResp.setRCode(PARAM_LOSS.status());
+            orderResp.setRMsg(PARAM_LOSS.message());
+            return responseDto;
+        }
+        HeaderDto header = getOrderParam.getHeader();
+//        //判断头信息是否为空
+        if (null == header) {
+            orderResp.setRCode(PARAM_LOSS.status());
+            orderResp.setRMsg(PARAM_LOSS.message());
+            return responseDto;
+        }
+        responseDto.setHeader(header);
+        //校验时间戳
+        long now = System.currentTimeMillis();
+        String orderTime = header.getTimestamp();
+        if (null == orderTime) {
+            orderResp.setRCode(DATE_ERROR.status());
+            orderResp.setRMsg(DATE_ERROR.message());
+            return responseDto;
+        }
+        long orderT = DateUtils.String2Long(orderTime);
+        if (orderT == 0) {
+            orderResp.setRCode(DATE_ERROR.status());
+            orderResp.setRMsg(DATE_ERROR.message());
+            return responseDto;
+        }
+        if (Math.abs(now - orderT) > 300000) {
+            orderResp.setRCode(OVER_TIME.status());
+            orderResp.setRMsg(OVER_TIME.message());
+            return responseDto;
+        }
+        //校验seqNo是否为空
+        String seqNo = header.getSeqNo();
+        if (StringUtils.isEmpty(seqNo)) {
+            orderResp.setRCode(PARAM_LOSS.status());
+            orderResp.setRMsg("seqNo" + PARAM_LOSS.message());
+            return responseDto;
+        }
+        //校验appId
+        String appId = header.getAppId();
+        if (StringUtils.isEmpty(appId)) {
+            orderResp.setRCode(APP_ID_LOSE.status());
+            orderResp.setRMsg(APP_ID_LOSE.message());
+            return responseDto;
+        }
+
+        //appId是否存在
+        FlowAppInfo flowAppInfo = DataPool.flowAppInfoMap.get(appId);
+        if (flowAppInfo == null) {
+            orderResp.setRCode(APP_ID_LOSE.status());
+            orderResp.setRMsg(APP_ID_LOSE.message());
+            return responseDto;
+        }
+        //appId是否失效
+        if (INVALID.status().equals(flowAppInfo.getStatus())) {
+            orderResp.setRCode(APP_ID_LOSE.status());
+            orderResp.setRMsg(APP_ID_LOSE.message());
+            return responseDto;
+        }
+
+        String secretStr = header.getTimestamp() + seqNo + appId + flowAppInfo.getAppKey();
+        String secretKey = DigestUtils.md5DigestAsHex(secretStr.getBytes(StandardCharsets.UTF_8));
+        //secretKey校验
+        if (!secretKey.equals(header.getSecretKey())) {
+            orderResp.setRCode(SECRET_KEY_ERROR.status());
+            orderResp.setRMsg(SECRET_KEY_ERROR.message());
+            return responseDto;
+        }
+        //校验消息体
+        GetOrderMsgBody requestMsgBody = getOrderParam.getMsgBody();
+        if (null == requestMsgBody) {
+            orderResp.setRCode(FAILURE_SERVER.status());
+            orderResp.setRMsg("body" + PARAM_LOSS.message());
+            return responseDto;
+        }
+        //参数正文校验
+        GetOrderContent content = requestMsgBody.getContent();
+        if (null == content) {
+            orderResp.setRCode(FAILURE_SERVER.status());
+            orderResp.setRMsg("content" + PARAM_LOSS.message());
+            return responseDto;
+        }
+
+        //orderId
+        String orderId = content.getOrderId();
+        //CP订单号
+        String extensionId = content.getExtensionId();
+        //sign校验
+        String signStr =  header.getSecretKey() + orderId + extensionId;
+        String sign = DigestUtils.md5DigestAsHex(signStr.getBytes(StandardCharsets.UTF_8));
+        //sign校验
+        if (!sign.equals(content.getSign())) {
+            orderResp.setRCode(SIGN_FAIL.status());
+            orderResp.setRMsg(SIGN_FAIL.message());
+            return responseDto;
+        }
+
+        if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(extensionId)) {
+            orderResp.setRCode(ORDER_NOT_EXISTS.status());
+            orderResp.setRMsg(ORDER_NOT_EXISTS.message());
+            return responseDto;
+        }
+        //判断extensionId不为空时查询orderId
+        if (!StringUtils.isBlank(extensionId)) {
+            Long customerId = flowAppInfo.getCustomerId();
+            String searchString = extensionId + "." + customerId;
+            //redis位置
+            int num = searchString.hashCode() % 10000;
+            String redisIndex = "{down.order." + num + "}";
+            //redis查询orderId
+            String resOrderId = jedisCluster.hget(redisIndex, redisIndex + searchString);
+            if (!StringUtils.isBlank(orderId)) {
+                if (!resOrderId.equals(orderId)) {
+                    orderResp.setRCode(ORDER_NOT_EXISTS.status());
+                    orderResp.setRMsg(ORDER_NOT_EXISTS.message());
+                    return responseDto;
+                }
+            } else {
+                orderId = resOrderId;
+            }
+
+        }
+        //查询订单详情
+        long temNum = 0L;
+        try {
+            temNum = Long.valueOf(orderId) / 10000000;
+        } catch(Exception e){
+            log.error(e.toString());
+            orderResp.setRCode(ORDER_NOT_EXISTS.status());
+            orderResp.setRMsg(ORDER_NOT_EXISTS.message());
+            return responseDto;
+        }
+        String redisIndex = "order.info." + temNum;
+        String resString = jedisCluster.hget(redisIndex,orderId);
+        if (StringUtils.isEmpty(resString)) {
+            orderResp.setRCode(ORDER_NOT_EXISTS.status());
+            orderResp.setRMsg(ORDER_NOT_EXISTS.message());
+            return responseDto;
+        }else{
+            try {
+                ObjectMapper om = new ObjectMapper();
+                FlowOrderInfo flowOrderInfo = om.readValue(resString, FlowOrderInfo.class);
+                GetOrderResContent getOrderResContent = new GetOrderResContent();
+                getOrderResContent.setOrderId(flowOrderInfo.getOrderId().toString());
+                getOrderResContent.setOrderType(flowOrderInfo.getOrderType().toString());
+                getOrderResContent.setUser(flowOrderInfo.getPhoneNo());
+                getOrderResContent.setReqDate(timeSwap(flowOrderInfo.getApplyDate(),"yyyyMMdd"));
+                getOrderResContent.setPackageId(flowOrderInfo.getPackageId());
+                getOrderResContent.setStatus(flowOrderInfo.getStatus().toString());
+                getOrderResContent.setExtorder(flowOrderInfo.getExtorderId());
+                getOrderResContent.setMsg(flowOrderInfo.getGwErrorCode());
+                getOrderResContent.setPrice(flowOrderInfo.getFlowAmount().toString());
+                getOrderResContent.setCheckTime(timeSwap(flowOrderInfo.getApplyDate(),"yyyyMMddHHmmssSSS"));
+                getOrderResContent.setAttr1(flowOrderInfo.getAttr1());
+                getOrderResContent.setAttr2(flowOrderInfo.getAttr2());
+                getOrderResContent.setAttr3(flowOrderInfo.getAttr3());
+                msgBody.setContent(getOrderResContent);
+            } catch (Exception e) {
+                 orderResp.setRCode(ORDER_NOT_EXISTS.status());
+                 orderResp.setRMsg(ORDER_NOT_EXISTS.message());
+                 return responseDto;
+            }
+        }
+        orderResp.setRCode(SUCCESS_SERVER.status());
+        orderResp.setRMsg(SUCCESS_SERVER.message());
+        return responseDto;
+    }
+}

+ 43 - 0
modules/get-order/src/main/java/com/fire/getorder/task/CacheCustomerTask.java

@@ -0,0 +1,43 @@
+package com.fire.getorder.task;
+
+
+import com.fire.getorder.service.CacheService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * 缓存任务
+ *
+ * @author ZJQ 2021年5月18日13:41:01
+ */
+@Component
+@Slf4j
+public class CacheCustomerTask {
+    @Resource
+    private CacheService cacheService;
+
+    /**
+     * 每天凌晨2时5分0秒定时缓存客户信息
+     */
+    @Async
+    @Scheduled(cron = "0 5 2 * * ?")
+    public void cacheCustomer() {
+        cacheService.cacheCustomer();
+    }
+
+    /**
+     * spring启动时执行缓存初始化客户信息
+     */
+    @Async
+    @PostConstruct
+    public void initCustomer() {
+        cacheService.cacheCustomer();
+        log.info("spring启动时执行缓存初始化客户信息");
+    }
+
+}

+ 43 - 0
modules/get-order/src/main/resources/mapper/FlowAppInfoMapper.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fire.order.mapper.FlowAppInfoMapper">
+
+    <resultMap type="com.fire.dto.FlowAppInfo" id="FlowAppInfoMap">
+        <result property="flowAppId" column="flow_app_id" jdbcType="INTEGER"/>
+        <result property="customerId" column="customer_id" jdbcType="INTEGER"/>
+        <result property="appId" column="app_id" jdbcType="VARCHAR"/>
+        <result property="appKey" column="app_key" jdbcType="VARCHAR"/>
+        <result property="startDate" column="start_date" jdbcType="TIMESTAMP"/>
+        <result property="endDate" column="end_date" jdbcType="TIMESTAMP"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="appName" column="app_name" jdbcType="VARCHAR"/>
+        <result property="callbackUrl" column="callback_url" jdbcType="VARCHAR"/>
+        <result property="ipAddress" column="ip_address" jdbcType="VARCHAR"/>
+        <result property="dispatchChannel" column="dispatch_channel" jdbcType="VARCHAR"/>
+        <result property="totalCount" column="total_count" jdbcType="INTEGER"/>
+        <result property="time" column="time" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!--查询全部-->
+    <select id="queryAll" resultMap="FlowAppInfoMap">
+        <include refid="baseSql"/>
+    </select>
+
+    <sql id="baseSql">
+        select flow_app_id,
+               customer_id,
+               app_id,
+               app_key,
+               start_date,
+               end_date,
+               status,
+               app_name,
+               callback_url,
+               ip_address,
+               dispatch_channel,
+               total_count
+        from flow_app_info
+    </sql>
+
+</mapper>
+

+ 1 - 1
modules/save-data/src/main/java/com/fire/savedata/consumer/DispatchEsConsumer.java

@@ -37,7 +37,7 @@ public class DispatchEsConsumer implements RocketMQListener<MessageExt> {
             indexQuery.setObject(dispatchDto);
             IndexCoordinates indexCoordinates = IndexCoordinates.of("mobile_flow_dispatch_rec");
             restTemplate.index(indexQuery, indexCoordinates);
-        } catch (JsonProcessingException e) {
+        } catch (Exception e) {
             e.printStackTrace();
             log.error(e.toString());
             //throw new BaseException("ES消费出错");

+ 1 - 1
modules/save-data/src/main/java/com/fire/savedata/consumer/DispatchTidbConsumer.java

@@ -40,7 +40,7 @@ public class DispatchTidbConsumer implements RocketMQListener<MessageExt> {
             }else{
                 mobileFlowDispatchRecMapper.updateById(mobileFlowDispatchRec);
             }
-        } catch (JsonProcessingException e) {
+        } catch (Exception e) {
             e.printStackTrace();
             log.error(e.toString());
             //throw new BaseException("Tidb消费出错");

+ 1 - 1
modules/save-data/src/main/java/com/fire/savedata/consumer/OrderEsConsumer.java

@@ -38,7 +38,7 @@ public class OrderEsConsumer implements RocketMQListener<MessageExt> {
             indexQuery.setObject(orderEsDto);
             IndexCoordinates indexCoordinates = IndexCoordinates.of("flow_order_info");
             restTemplate.index(indexQuery, indexCoordinates);
-        } catch (JsonProcessingException e) {
+        } catch (Exception e) {
             e.printStackTrace();
             log.error(e.toString());
             //throw new BaseException("ES消费出错");

+ 2 - 2
modules/save-data/src/main/java/com/fire/savedata/consumer/OrderTidbConsumer.java

@@ -38,9 +38,9 @@ public class OrderTidbConsumer implements RocketMQListener<MessageExt> {
             if (tag.equals(MAKE_TAG)){
                 flowOrderInfoMapper.insert(flowOrderInfo);
             }else{
-                flowOrderInfoMapper.updateById(flowOrderInfo);
+                flowOrderInfoMapper.update(flowOrderInfo);
             }
-        } catch (JsonProcessingException e) {
+        } catch (Exception e) {
             e.printStackTrace();
             log.error(e.toString());
             //throw new BaseException("Tidb消费出错");

+ 1 - 1
modules/save-data/src/main/resources/bootstrap.yml

@@ -4,7 +4,7 @@ spring:
   application:
     name: save-data
   profiles:
-    active: dev
+    active: test
 ---
 spring:
   config: