فهرست منبع

update: 报价历史问题导致报价泰山、人保慢

wks 1 سال پیش
والد
کامیت
3c5392f8d3

+ 1 - 1
src/main/java/com/ydtech/modules/order/dao/SysQuoteRecordMapper.java

@@ -26,5 +26,5 @@ public interface SysQuoteRecordMapper extends BaseMapper<SysQuoteRecord> {
 
     public Page<QuoteDetailsVo> getQuoteDetails(Page page, @Param("param") QuoteDetailsQueryVo quoteDetailsQueryVo);
 
-    public BigDecimal getQuoteRatio(@Param("userId") String userId, @Param("companyId") String companyId);
+    public BigDecimal getQuoteRatio(@Param("userId") String userId, @Param("companyId") String companyId, String startTime,String endTime);
 }

+ 7 - 2
src/main/java/com/ydtech/modules/order/service/impl/SysQuoteRedisServiceImpl.java

@@ -30,6 +30,8 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -370,8 +372,11 @@ public class SysQuoteRedisServiceImpl implements SysQuoteRedisService {
 
     @Override
     public BigDecimal getQuoteRatio(String companyId, String userId) {
-        BigDecimal quoteRatio = sysQuoteRecordMapper.getQuoteRatio(userId, companyId);
-        return quoteRatio;
+        LocalDateTime todayMidnight = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
+        LocalDateTime tomorrowMidnight = LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIN);
+        String startTime = todayMidnight.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        String endTime = tomorrowMidnight.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        return sysQuoteRecordMapper.getQuoteRatio(userId, companyId, startTime, endTime);
     }
 
     /**

+ 13 - 50
src/main/resources/mapper/modules/order/SysQuoteRecordMapper.xml

@@ -227,55 +227,18 @@
     </select>
 
     <select id="getQuoteRatio" resultType="BigDecimal">
-        WITH
-            day_all_order AS (
-                SELECT user_id, COALESCE(SUM(count), 0) AS count
-                FROM (
-                         SELECT user_id, COUNT(DISTINCT sub_order_no) AS count
-                         FROM sys_quote_record
-                         WHERE  DATE(create_time) = CURRENT_DATE
-                         AND company_id  = #{companyId}
-                         AND user_id = #{userId}
-                         GROUP BY user_id, sub_order_no
-                     ) AS subquery
-                GROUP BY user_id
-            ),
-            day_cover_order AS (
-                SELECT user_id, COALESCE(SUM(count), 0) AS count
-                FROM (
-                         SELECT sqr.user_id, COUNT(DISTINCT sqr.sub_order_no) AS count
-                         FROM sys_quote_record sqr
-                                  LEFT JOIN ins_area_company iac ON sqr.sub_order_no = iac.id
-                         WHERE iac.orderstatus = 3 AND  DATE(sqr.create_time) = CURRENT_DATE
-                           AND iac.company_id  = #{companyId}
-                           AND sqr.user_id = #{userId}
-                         GROUP BY sqr.user_id, sqr.sub_order_no
-                     ) AS subquery
-                GROUP BY user_id
-            )
-        SELECT
-                COALESCE((COALESCE(day_cover_order.count, 0) / NULLIF(day_all_order.count, 0)),0) * 100 AS rate
-        FROM
-            sys_quote_record sqr
-                LEFT JOIN sys_user su ON sqr.user_id = su.id
-                LEFT JOIN sys_dept sd ON su.dept_id = sd.id
-                LEFT JOIN esm_ins_company eic ON eic.id = sqr.company_id
-                LEFT JOIN day_all_order ON sqr.user_id = day_all_order.user_id
-                LEFT JOIN day_cover_order ON sqr.user_id = day_cover_order.user_id
-        WHERE
-            1=1
-          AND sqr.user_id = #{userId}
-          and sqr.company_id = #{companyId}
-            and sqr.create_time BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY)
-        GROUP BY
-            sqr.user_id,
-            company_id,
-            eic.namesimple,
-            day_all_order.count,
-            day_cover_order.count,
-            su.dept_id,
-            sd.NAME,
-            su.NAME,
-            su.mobile
+        WITH daily_stats AS (SELECT user_id,
+                                    COUNT(DISTINCT sub_order_no)                                            AS total_orders,
+                                    COUNT(DISTINCT CASE WHEN iac.orderstatus = 3 THEN sqr.sub_order_no END) AS covered_orders
+                             FROM sys_quote_record sqr
+                                      LEFT JOIN ins_area_company iac
+                                                ON sqr.sub_order_no = iac.id AND iac.company_id = #{companyId}
+                             WHERE sqr.create_time <![CDATA[ >= ]]> #{startTime}
+                               AND sqr.create_time <![CDATA[ < ]]> #{endTime}
+                               AND sqr.company_id = #{companyId}
+                               AND sqr.user_id = #{userId}
+                             GROUP BY user_id)
+        SELECT COALESCE((covered_orders * 100.0 / NULLIF(total_orders, 0)), 0) AS rate
+        FROM daily_stats;
     </select>
 </mapper>