Explorar el Código

优化推动,添加休眠时间保证消费者能够及时消费

hxl13994548489 hace 1 año
padre
commit
2f2093b007

+ 4 - 14
src/main/java/com/ydtech/config/RabbitMQConfig.java

@@ -51,17 +51,7 @@ public class RabbitMQConfig {
         return new DirectExchange(RabbitMqEnum.ORDER_EXCHANGE.getCode(),true,false);
     }
 
-    @Bean
-        //设置队列持久化 第二个参数  保证数据不丢失
-    DirectExchange exchangeFail() {
-        return new DirectExchange(RabbitMqEnum.ORDER_EXCHANGE_FAIL.getCode(),true,false);
-    }
 
-    @Bean
-        //设置队列持久化 第二个参数  保证数据不丢失
-    DirectExchange exchangeSign() {
-        return new DirectExchange(RabbitMqEnum.ORDER_EXCHANGE_SIGN.getCode(),true,false);
-    }
 
     @Bean
     Binding binding(Queue queue, DirectExchange exchange) {
@@ -70,12 +60,12 @@ public class RabbitMQConfig {
 
 
     @Bean
-    Binding bindingFail(Queue queue, DirectExchange exchange) {
-        return BindingBuilder.bind(queue).to(exchange).with(RabbitMqEnum.ORDER_ROUTINGKEY_FAIL.getCode());
+    Binding bindingFail(Queue queueFail, DirectExchange exchange) {
+        return BindingBuilder.bind(queueFail).to(exchange).with(RabbitMqEnum.ORDER_ROUTINGKEY_FAIL.getCode());
     }
     @Bean
-    Binding bindingSign(Queue queue, DirectExchange exchange) {
-        return BindingBuilder.bind(queue).to(exchange).with(RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode());
+    Binding bindingSign(Queue queueSign, DirectExchange exchange) {
+        return BindingBuilder.bind(queueSign).to(exchange).with(RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode());
     }
     /**
      *  @version

+ 1 - 2
src/main/java/com/ydtech/constants/RabbitMqEnum.java

@@ -14,12 +14,11 @@ public enum RabbitMqEnum {
     ORDER_ROUTINGKEY("order_push_routingKey", "关键字"),
 
     ORDER_QUEUE_FAIL("order_push_fail_queue", "消息失败队列"),
-    ORDER_EXCHANGE_FAIL("order_push_fail_exchange", "消息失败交换机"),
 
     ORDER_ROUTINGKEY_FAIL("order_push_fail_routingKey", "消息失败关键字"),
 
     ORDER_QUEUE_SIGN("order_push_sign_queue", "承包订单队列"),
-    ORDER_EXCHANGE_SIGN("order_push_sign_exchange", "承包订单交换机"),
+
 
     ORDER_ROUTINGKEY_SIGN("order_push_sign_routingKey", "承包订单关键字");
 

+ 2 - 2
src/main/java/com/ydtech/modules/admin/controller/PushOrder.java

@@ -27,8 +27,8 @@ public class PushOrder {
 
     @GetMapping("pushHistoryOrders")
     @ApiOperation(value = "测试推送历史订单数据消息")
-    public HttpResult pushHistoryOrders() {
-        insOrderPushMsgService.getPushInsAreaCompanyList();
+    public HttpResult pushHistoryOrders(String month) {
+        insOrderPushMsgService.getPushInsAreaCompanyList(month);
         return HttpResult.ok();
     }
 

+ 4 - 1
src/main/java/com/ydtech/modules/admin/utils/SliceUpDateUtil.java

@@ -262,7 +262,10 @@ public class SliceUpDateUtil {
      */
     public static String getEndOfMonth(int year, int month) {
         Calendar calendar = Calendar.getInstance();
-        calendar.set(year, month - 1, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+        calendar.set(year, month - 1, 1);
+        int lastDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        calendar.set(Calendar.DAY_OF_MONTH, lastDayOfMonth);
+        // 设置时间为当天的最后一刻
         calendar.set(Calendar.HOUR_OF_DAY, 23);
         calendar.set(Calendar.MINUTE, 59);
         calendar.set(Calendar.SECOND, 59);

+ 1 - 2
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -14,7 +14,6 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -643,7 +642,7 @@ public class InsAreaCompany implements Serializable {
     }
 
     public void setPaymentLink(String paymentLink) {
-        this.signingTime = LocalDateTime.now();
+      //  this.signingTime = LocalDateTime.now();
         this.paymentLink = paymentLink;
     }
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/orderThread/OrderFailRunnableThread.java

@@ -60,7 +60,7 @@ public class OrderFailRunnableThread implements Runnable {
             try{
                 //更新狀態
                 insOrderPushMsgService.save(insOrderPushMsg);
-                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE_FAIL.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_FAIL.getCode(), message_cj);
+                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_FAIL.getCode(), message_cj);
             }catch(Exception e){
                 e.getStackTrace();
             }

+ 1 - 1
src/main/java/com/ydtech/modules/order/orderThread/OrderSignRunnableThread.java

@@ -60,7 +60,7 @@ public class OrderSignRunnableThread implements Runnable {
             try{
                 //更新狀態
                 insOrderPushMsgService.save(insOrderPushMsg);
-                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE_SIGN.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode(), message_cj);
+                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode(), message_cj);
             }catch(Exception e){
                 e.getStackTrace();
             }

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/InsOrderPushMsgService.java

@@ -15,7 +15,7 @@ public interface InsOrderPushMsgService extends IService<InsOrderPushMsg> {
     *  @Date: 2024/11/11 8:38
     *  @Description: 查询历史订单
     */
-   void getPushInsAreaCompanyList();
+   void getPushInsAreaCompanyList(String month);
 
 
    /**

+ 90 - 32
src/main/java/com/ydtech/modules/order/service/impl/InsOrderPushMsgServiceImpl.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.order.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.RabbitMqEnum;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.modules.admin.utils.SliceUpDateUtil;
 import com.ydtech.modules.order.dao.InsOrderPushMsgMapper;
@@ -11,21 +12,25 @@ import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.dto.InsTaskImagesDto;
 import com.ydtech.modules.order.entity.po.InsOrderPushMsg;
 import com.ydtech.modules.order.entity.vo.PushDataVo;
-import com.ydtech.modules.order.orderThread.OrderFailRunnableThread;
-import com.ydtech.modules.order.orderThread.OrderRunnableThread;
-import com.ydtech.modules.order.orderThread.OrderSignRunnableThread;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrderPushMsgService;
 import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.utils.OrderUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.UUID;
+
+import static org.springframework.amqp.core.MessageProperties.CONTENT_TYPE_TEXT_PLAIN;
 
 /**
  * @author Administrator
@@ -53,6 +58,9 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
     @Autowired
     private RabbitTemplate rabbitTemplate;
 
+    @Autowired
+    private InsOrderPushMsgService insOrderPushMsgService;
+
 
     /**
      *  @version
@@ -61,25 +69,29 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
      *  @Description: 推送历史的订单信息
      */
     @Override
-    public void getPushInsAreaCompanyList() {
-        List<String> dateList = insOrderPushMsgMapper.getPushInsAreaCompanyDateList();
-       // List<String> dateList  =new ArrayList<String>();
-       // dateList.add("2024-10");
-        if(dateList!=null && !dateList.isEmpty()){
-            //启动线程池
-            dateList.forEach(item ->{
-                String benginTime = SliceUpDateUtil.getStartOfMonth(Integer.parseInt(item.split("-")[0]), Integer.parseInt(item.split("-")[1]));
-                String endTime = SliceUpDateUtil.getEndOfMonth(Integer.parseInt(item.split("-")[0]), Integer.parseInt(item.split("-")[1]));
-                List<String> orderList = insOrderPushMsgMapper.getPushInsAreaCompanyList(benginTime,endTime);
-                ArrayList<String>  pushDataList =new ArrayList<String>();
-                if(orderList!=null && !orderList.isEmpty()){
-                    orderList.forEach(orderId ->{
-                        pushDataList.add(getPushDataJsonString(orderId));
-                    });
-                }
-                if(pushDataList!=null && !pushDataList.isEmpty()){
-                    Thread thread = new Thread(new OrderRunnableThread(rabbitTemplate, pushDataList,this));
-                    thread.start();
+    public void getPushInsAreaCompanyList(String month) {
+        String benginTime = SliceUpDateUtil.getStartOfMonth(Integer.parseInt(month.split("-")[0]), Integer.parseInt(month.split("-")[1]));
+        String endTime = SliceUpDateUtil.getEndOfMonth(Integer.parseInt(month.split("-")[0]), Integer.parseInt(month.split("-")[1]));
+        List<String> orderList = insOrderPushMsgMapper.getPushInsAreaCompanyList(benginTime,endTime);
+        ArrayList<String>  pushDataList =new ArrayList<String>();
+        if(orderList!=null && !orderList.isEmpty()){
+            orderList.forEach(orderId ->{
+                PushDataVo pushDataVo = getPushData(orderId);
+                String items = JSONObject.toJSONString(pushDataVo);
+                MessageProperties messageProperties = new MessageProperties();
+                messageProperties.setMessageId(UUID.randomUUID().toString());
+                messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+                messageProperties.setContentEncoding("UTF-8");
+                Message message_cj = new Message(items.getBytes(StandardCharsets.UTF_8), messageProperties);
+                //推送
+                InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+                try{
+                    //更新狀態
+                    insOrderPushMsgService.save(insOrderPushMsg);
+                    this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY.getCode(), message_cj);
+                    Thread.sleep(1500);
+                }catch(Exception e){
+                    e.getStackTrace();
                 }
             });
         }
@@ -98,13 +110,25 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
         if(orderList!=null && !orderList.isEmpty()){
             //通过
             orderList.forEach(orderId ->{
-                pushDataList.add(getPushDataJsonString(orderId));
+                PushDataVo pushDataVo = getPushData(orderId);
+                String item = JSONObject.toJSONString(pushDataVo);
+                MessageProperties messageProperties = new MessageProperties();
+                messageProperties.setMessageId(UUID.randomUUID().toString());
+                messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+                messageProperties.setContentEncoding("UTF-8");
+                Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
+                //推送
+                InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+                try{
+                    //更新狀態
+                    insOrderPushMsgService.save(insOrderPushMsg);
+                    this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode(), message_cj);
+                    Thread.sleep(1500);
+                }catch(Exception e){
+                    e.getStackTrace();
+                }
             });
         }
-        if(pushDataList!=null && !pushDataList.isEmpty()){
-            Thread thread = new Thread(new OrderFailRunnableThread(rabbitTemplate, pushDataList,this));
-            thread.start();
-        }
      }
     /**
      *  @version
@@ -113,12 +137,29 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
      *  @Description:  承保数据推送
      */
     @Override
-    public void getPushSignInsAreaCompanyList(String item) {
+    public void getPushSignInsAreaCompanyList(String orderId) {
         try{
-            ArrayList<String>  pushDataList =new ArrayList<String>();
-            pushDataList.add(getPushDataJsonString(item));
-            Thread thread = new Thread(new OrderSignRunnableThread(rabbitTemplate, pushDataList,this));
-            thread.start();
+            //ArrayList<String>  pushDataList =new ArrayList<String>();
+            //pushDataList.add(getPushDataJsonString(item));
+            //Thread thread = new Thread(new OrderSignRunnableThread(rabbitTemplate, pushDataList,this));
+            //thread.start();
+            PushDataVo pushDataVo = getPushData(orderId);
+            String item = JSONObject.toJSONString(pushDataVo);
+            MessageProperties messageProperties = new MessageProperties();
+            messageProperties.setMessageId(UUID.randomUUID().toString());
+            messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+            messageProperties.setContentEncoding("UTF-8");
+            Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
+            //推送
+            InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+            try{
+                //更新狀態
+                insOrderPushMsgService.save(insOrderPushMsg);
+                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode(), message_cj);
+
+            }catch(Exception e){
+                e.getStackTrace();
+            }
         }catch(Exception e){
             log.error(e.getMessage());
         }
@@ -160,4 +201,21 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
         insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
     }
 
+
+    public PushDataVo getPushData(String orderId) {
+        //小订单的数据
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(orderId);
+        //大订单数据
+        InsOrders orders = insOrdersService.getById(insAreaCompany.getOrderno());
+        String jyPolicyNo="";
+        String apiType = insAreaCompany.getApiType() == null ? null : insAreaCompany.getApiType() + "";
+        if (insAreaCompany.getCrossInsurance() != null) {
+            jyPolicyNo = OrderUtils.getJyPolicyNo(insAreaCompany.getCompanyId(), apiType, insAreaCompany.getCrossInsurance().toString(), String.valueOf(orders.getIsExternal()));
+        }
+        insAreaCompany.setJyPolicyNo(jyPolicyNo);
+        //影像数据
+        List<InsTaskImagesDto> taskImagesList = insTaskImagesMapper.getTaskImagesList(insAreaCompany.getOrderno());
+        PushDataVo pushDataVo  =new PushDataVo(insAreaCompany,orders,taskImagesList);
+        return pushDataVo;
+    }
 }

+ 4 - 6
src/main/resources/mapper/modules/order/InsOrderPushMsgMapper.xml

@@ -22,18 +22,16 @@
     </update>
     <select id="getPushInsAreaCompanyList" resultType="String">
         SELECT
-        id
+        iac.id
         FROM
         ins_area_company iac
+        LEFT JOIN ins_order_push_msg iopm ON iac.id = iopm.sub_order_no
         WHERE
         iac.orderstatus = 3
         AND iac.createtime  <![CDATA[ >= ]]>  #{benginTime}
         AND iac.createtime  <![CDATA[ <= ]]>  #{endTime}
-        AND iac.id NOT IN (
-        SELECT
-        sub_order_no
-        FROM
-        ins_order_push_msg)
+        AND iopm.sub_order_no IS NULL
+        order by iac.createtime
     </select>
 
     <select id="getPushInsAreaCompanyDateList" resultType="String">