Explorar o código

统计 加上 侧边栏的官方群发

三七 hai 5 días
pai
achega
2fc9134e27

+ 45 - 2
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -91,6 +91,7 @@ import java.time.LocalDateTime;
 import java.time.OffsetDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -232,6 +233,9 @@ public class Task {
     @Autowired
     private IFsStoreOrderScrmService fsStoreOrderScrmService;
 
+    @Autowired
+    private IQwGroupMsgService groupMsgService;
+
     public static final String SOP_TEMP_VOICE_KEY = "sop:tempVoice";
     public void syncExpressToWx() {
         List<FsWxExpressTask> fsWxExpressTasks = fsWxExpressTaskMapper.selectPendingData();
@@ -333,9 +337,17 @@ public class Task {
         }
         log.info("开始执行sop任务token消耗统计");
         try {
+
+            //查侧边栏官方群发的
+            List<FastGptPushTokenTotal> msgListByToTal = groupMsgService.selectQwGroupMsgListByToTal(dateTime);
+
             List<FastGptPushTokenTotal> fastGptPushTotalList = qwRestrictionPushRecordMapper.selectFastgptPushTokenTotal(dateTime);
-            if (fastGptPushTotalList != null && !fastGptPushTotalList.isEmpty()) {
-                for (FastGptPushTokenTotal fastGptPushTotal : fastGptPushTotalList) {
+
+            //合并
+            List<FastGptPushTokenTotal> newFastGptPushTotalList = newFastGptPushTotalList(msgListByToTal, fastGptPushTotalList);
+
+            if (newFastGptPushTotalList != null && !newFastGptPushTotalList.isEmpty()) {
+                for (FastGptPushTokenTotal fastGptPushTotal : newFastGptPushTotalList) {
                     // 获取统计数据
                     Integer type = fastGptPushTotal.getType();
                     Long count = 0L;
@@ -359,6 +371,37 @@ public class Task {
             log.error("执行sop任务token消耗统计异常", e);
         }
     }
+    /**
+     * 合并 token
+     */
+    private List<FastGptPushTokenTotal> newFastGptPushTotalList(List<FastGptPushTokenTotal> msgListByToTal,List<FastGptPushTokenTotal> fastGptPushTotalList){
+
+        // 使用Map来合并记录
+        Map<String, FastGptPushTokenTotal> resultMap = new HashMap<>();
+
+        // 先将fastGptPushTotalList放入Map
+        for (FastGptPushTokenTotal item : fastGptPushTotalList) {
+            String key = item.getQwUserId() + "_" + item.getType() + "_" + item.getStatTime();
+            resultMap.put(key, item);
+        }
+
+        // 处理msgListByToTal,合并或添加
+        for (FastGptPushTokenTotal item : msgListByToTal) {
+            String key = item.getQwUserId() + "_" + item.getType() + "_" + item.getStatTime();
+
+            if (resultMap.containsKey(key)) {
+                // 合并count
+                FastGptPushTokenTotal existing = resultMap.get(key);
+                existing.setCount(existing.getCount() + item.getCount());
+            } else {
+                // 添加新记录
+                resultMap.put(key, item);
+            }
+        }
+
+        // 将Map转换回List
+        return new ArrayList<>(resultMap.values());
+    }
 
     /**
      * 一键生成语音定时任务

+ 105 - 3
fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -8,6 +8,7 @@ import com.fs.app.taskService.SopLogsTaskService;
 import com.fs.app.taskService.SopWxLogsService;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
+import com.fs.common.utils.DateUtils;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.course.domain.FsUserCompanyUserQw;
@@ -17,14 +18,17 @@ import com.fs.course.mapper.FsUserCourseMapper;
 import com.fs.course.param.FsUserCourseVideoAddKfUParam;
 import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
 import com.fs.course.service.*;
+import com.fs.fastGpt.domain.FastGptPushTokenTotal;
 import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsInquiryOrderService;
 import com.fs.his.utils.qrcode.QRCodeUtils;
 import com.fs.qw.domain.QwCompany;
 import com.fs.qw.mapper.QwExternalContactMapper;
+import com.fs.qw.mapper.QwRestrictionPushRecordMapper;
 import com.fs.qw.service.IQwCompanyService;
 import com.fs.qw.service.IQwExternalContactService;
+import com.fs.qw.service.IQwGroupMsgService;
 import com.fs.qw.service.IQwMaterialService;
 import com.fs.qwApi.service.QwApiService;
 import com.fs.sop.mapper.QwSopLogsMapper;
@@ -44,9 +48,9 @@ import org.springframework.web.bind.annotation.RestController;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Api("公共接口")
 @RestController
@@ -129,6 +133,104 @@ public class CommonController {
 
     @Autowired
     private FsUserMapper fsUserMapper;
+    @Autowired
+    private IQwGroupMsgService groupMsgService;
+
+    @Autowired
+    private QwRestrictionPushRecordMapper qwRestrictionPushRecordMapper;
+
+    /**
+     * 测试
+     */
+    @GetMapping("/sopPushTokenTotal")
+    public void sopPushTokenTotal() {
+        // 判断是否是凌晨 00:00 - 00:59
+        boolean isEarlyMorning = isEarlyMorning();
+
+        // 获取日期字符串(今天或昨天)
+        String dateTime;
+        if (isEarlyMorning) {
+            dateTime = DateUtils.addDateDays(-1); // 昨天
+        } else {
+            dateTime = DateUtils.getDate(); // 今天
+        }
+        log.info("开始执行sop任务token消耗统计");
+        try {
+
+            //查侧边栏官方群发的
+            List<FastGptPushTokenTotal> msgListByToTal = groupMsgService.selectQwGroupMsgListByToTal(dateTime);
+
+            List<FastGptPushTokenTotal> fastGptPushTotalList = qwRestrictionPushRecordMapper.selectFastgptPushTokenTotal(dateTime);
+
+            //合并
+            List<FastGptPushTokenTotal> newFastGptPushTotalList = newFastGptPushTotalList(msgListByToTal, fastGptPushTotalList);
+
+            if (newFastGptPushTotalList != null && !newFastGptPushTotalList.isEmpty()) {
+                 for (FastGptPushTokenTotal fastGptPushTotal : newFastGptPushTotalList) {
+                    // 获取统计数据
+                    Integer type = fastGptPushTotal.getType();
+                    Long count = 0L;
+                    if(type == 7){
+                        count = fastGptPushTotal.getCount() * 450;
+                    }else{
+                        count = fastGptPushTotal.getCount() * 150;
+                    }
+                    fastGptPushTotal.setCount(count);
+                    FastGptPushTokenTotal pushTotal = qwRestrictionPushRecordMapper.selectFastGptPushTokenTotalByInfo(fastGptPushTotal);
+                    if(pushTotal == null){
+                        qwRestrictionPushRecordMapper.insertPushTokenTotal(fastGptPushTotal);
+                    }else{
+                        fastGptPushTotal.setId(pushTotal.getId());
+                        qwRestrictionPushRecordMapper.updatePushTokenTotal(fastGptPushTotal);
+                    }
+                }
+            }
+            log.info("结束执行sop任务token消耗统计");
+        } catch (Exception e) {
+            log.error("执行sop任务token消耗统计异常", e);
+        }
+    }
+
+    private boolean isEarlyMorning() {
+        Date now = new Date();
+        java.time.LocalDateTime localDateTime = now.toInstant()
+                .atZone(java.time.ZoneId.systemDefault())
+                .toLocalDateTime();
+        return localDateTime.getHour() == 0;
+    }
+
+    /**
+     * 合并 token
+     */
+    private List<FastGptPushTokenTotal> newFastGptPushTotalList(List<FastGptPushTokenTotal> msgListByToTal,List<FastGptPushTokenTotal> fastGptPushTotalList){
+
+        // 使用Map来合并记录
+        Map<String, FastGptPushTokenTotal> resultMap = new HashMap<>();
+
+        // 先将fastGptPushTotalList放入Map
+        for (FastGptPushTokenTotal item : fastGptPushTotalList) {
+            String key = item.getQwUserId() + "_" + item.getType() + "_" + item.getStatTime();
+            resultMap.put(key, item);
+        }
+
+        // 处理msgListByToTal,合并或添加
+        for (FastGptPushTokenTotal item : msgListByToTal) {
+            String key = item.getQwUserId() + "_" + item.getType() + "_" + item.getStatTime();
+
+            if (resultMap.containsKey(key)) {
+                // 合并count
+                FastGptPushTokenTotal existing = resultMap.get(key);
+                existing.setCount(existing.getCount() + item.getCount());
+            } else {
+                // 添加新记录
+                resultMap.put(key, item);
+            }
+        }
+
+        // 将Map转换回List
+        return new ArrayList<>(resultMap.values());
+    }
+
 
     /**
      * 发官方通连

+ 21 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwGroupMsgMapper.java

@@ -1,6 +1,7 @@
 package com.fs.qw.mapper;
 
 
+import com.fs.fastGpt.domain.FastGptPushTokenTotal;
 import com.fs.qw.domain.QwGroupMsg;
 import com.fs.qw.param.QwGroupMsgDetailsParam;
 import com.fs.qw.vo.QwGroupMsgDetailsVO;
@@ -188,4 +189,24 @@ public interface QwGroupMsgMapper
             "AND qgm.is_timer_send = 1 " +
             "AND timer_send <= NOW()")
     public List<QwGroupMsgVO> getQwGroupMsgTask();
+
+
+    @Select("<script>" +
+            "SELECT\n" +
+            "   1 as type,\n" +
+            "   1 as STATUS," +
+            "  date_format(qg.create_time, '%Y-%m-%d') AS statTime,\n" +
+            "  SUM(qg.to_user_num) as count,\n" +
+            "  MAX(qu.id) as qwUserId,\n" +
+            "  MAX(qu.company_id) as companyId\n" +
+            "FROM\n" +
+            "  qw_group_msg qg\n" +
+            "  LEFT JOIN qw_user qu ON qg.sender = qu.qw_user_id AND qg.corp_id = qu.corp_id\n" +
+            "WHERE date(qg.create_time) = #{time}\n" +
+            "GROUP BY qg.sender, qg.corp_id, statTime\n" +
+            "ORDER BY qu.company_id,qu.id" +
+            "</script>")
+    public List<FastGptPushTokenTotal> selectQwGroupMsgListByToTal(@Param("time") String dateTime);
+
+
 }

+ 3 - 0
fs-service/src/main/java/com/fs/qw/service/IQwGroupMsgService.java

@@ -1,6 +1,7 @@
 package com.fs.qw.service;
 
 import com.fs.common.core.domain.R;
+import com.fs.fastGpt.domain.FastGptPushTokenTotal;
 import com.fs.qw.domain.QwGroupMsg;
 import com.fs.qw.param.QwGroupMsgDetailsParam;
 import com.fs.qw.param.QwGroupMsgParam;
@@ -85,4 +86,6 @@ public interface IQwGroupMsgService
     * 定时群发功能-定时任务
     */
     public void qwGroupMsgTask();
+
+    public List<FastGptPushTokenTotal> selectQwGroupMsgListByToTal(String dateTime);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/qw/service/impl/QwGroupMsgServiceImpl.java

@@ -12,6 +12,7 @@ import com.fs.course.domain.FsCourseRealLink;
 import com.fs.course.mapper.FsCourseLinkMapper;
 import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.service.impl.FsUserCourseVideoServiceImpl;
+import com.fs.fastGpt.domain.FastGptPushTokenTotal;
 import com.fs.qw.domain.*;
 import com.fs.qw.mapper.QwCompanyMapper;
 import com.fs.qw.mapper.QwGroupMsgItemMapper;
@@ -1324,6 +1325,11 @@ public class QwGroupMsgServiceImpl implements IQwGroupMsgService
         });
     }
 
+    @Override
+    public List<FastGptPushTokenTotal> selectQwGroupMsgListByToTal(String dateTime) {
+        return qwGroupMsgMapper.selectQwGroupMsgListByToTal(dateTime);
+    }
+
 
     /**
      *  url转临时文件filr