Преглед на файлове

保存一个可以出表的版本

“lifuquan” преди 1 година
родител
ревизия
211cbd37a9

+ 57 - 4
doc/开发环境/2023年适配/2024年适配.md

@@ -154,10 +154,10 @@ from t1 group by real_name order by real_name
 ### 1. 报表生成
 
 ```http
-POST http://127.0.0.1:22222/tsl_data/report/generate/v3
+POST http://192.168.10.7:22222/tsl_data/report/generate/v3
 Content-Type: application/json
 
-20231225
+20240101
 ```
 
 ### 2. 数据入库
@@ -165,8 +165,61 @@ Content-Type: application/json
 ### 2.1 mobile_complaint
 
 ```http
-POST http://127.0.0.1:22222/tsl_data/source/warehouse/mobile_complaint
+POST http://192.168.10.7:22222/tsl_data/source/warehouse/mobile_complaint
+Content-Type: application/json
+
+20240101
+```
+
+### 2.2 high_quality_count
+
+```http
+POST http://192.168.10.7:22222/tsl_data/source/warehouse/high_quality_count
+Content-Type: application/json
+
+20240101
+```
+
+### 2.3 high_quality_list
+
+```http
+POST http://192.168.10.7:22222/tsl_data/source/warehouse/high_quality_list
+Content-Type: application/json
+
+20240101
+```
+
+### 2.4 complaint_details_fix_ywd
+
+```http
+POST http://192.168.10.7:22222/tsl_data/source/warehouse/complaint_details_fix_ywd
+Content-Type: application/json
+
+20240101
+```
+
+### 2.5 management_detail
+
+```http
+POST http://192.168.10.7:22222/tsl_data/source/update/management_detail
+Content-Type: application/json
+
+20240101
+```
+
+### 2.6 highQualityData
+
+```http
+POST http://192.168.10.7:22222/tsl_data/source/highQualityData/generate
+Content-Type: application/json
+
+20240101
+```
+
+### 2.7 work_flow_basic_data
+
+```http
+POST http://192.168.10.7:22222/tsl_data/source/update/work_flow_basic_data
 Content-Type: application/json
 
-20231225
 ```

+ 0 - 5
doc/开发环境/SQL语句备份/一些语句.sql

@@ -41,11 +41,6 @@ complaint_satisfied_list / complaint_satisfied_count as complaint_satisfied,
 complaint_resolution_list / complaint_resolution_count as complaint_resolution, 
 complaint_response_list / complaint_response_count as complaint_response from t1
 
-select acct_date, count(1)
-from tsl_data.high_quality_count_day
-group by acct_date
-order by acct_date;
-
 select month_id, day_id, count(1)
 from tsl_data.high_quality_list_day
 group by month_id, day_id

+ 19 - 0
doc/开发环境/任务特点分析.md → doc/开发环境/任务分析.md

@@ -35,3 +35,22 @@
         System.out.println("done!");
     }
 ```
+
+## 一些sql
+
+- 查询 high_quality_count_day 帐期数据
+
+```sql
+select acct_date, count(1)
+from tsl_data.high_quality_count_day
+group by acct_date
+order by acct_date;
+```
+
+- management_detail
+
+```sql
+select stat_day_id, count(1)
+from tsl_data.management_detail md 
+group by stat_day_id 
+```

+ 0 - 58
doc/开发环境/开发文档.md

@@ -1,58 +0,0 @@
-# 开发文档
-
-nohup java -jar tsl_data-1.1-exec.jar >output.log 2>&1 &
-
-## 钉钉API相关汇总
-
-[钉钉api地址](https://open.dingtalk.com/document/orgapp/api-overview)
-
-### 获取AccesstokenAPI
-
-- [获取企业内部应用的accessToken](https://open.dingtalk.com/document/orgapp/obtain-the-access_token-of-an-internal-app)
-
-```http
-POST https://api.dingtalk.com/v1.0/oauth2/accessToken HTTP/1.1
-Content-Type:application/json
-
-{
-  "appKey" : "dingothmdq6opv6hjrm5",
-  "appSecret" : "SeoyAwUnzFIFY4j4CX089HJ0i-pj1BIzByB3AZcnbCQaq94lZvazFpfEGGQwPznc"
-}
-```
-
-- [获取企业内部应用的access_token--旧版api](https://open.dingtalk.com/document/orgapp/obtain-orgapp-token)
-
-```http
-GET https://oapi.dingtalk.com/gettoken?appkey=dingothmdq6opv6hjrm5&appsecret=SeoyAwUnzFIFY4j4CX089HJ0i-pj1BIzByB3AZcnbCQaq94lZvazFpfEGGQwPznc
-```
-
-- [机器人发送群聊消息](https://open.dingtalk.com/document/orgapp/the-robot-sends-a-group-message)
-
-```http
-POST https://api.dingtalk.com/v1.0/robot/groupMessages/send HTTP/1.1
-x-acs-dingtalk-access-token:String
-Content-Type:application/json
-
-{
-  "msgParam" : "String",
-  "msgKey" : "String",
-  "openConversationId" : "String",
-  "robotCode" : "String",
-}
-```
-
-### 上传媒体文件
-
-[上传媒体文件](https://open.dingtalk.com/document/orgapp/upload-media-files)
-
-### 参数概念及获取方式
-
-#### appKey appSecret
-
-应用key 和Secret
-
-#### conversationId
-
-唯一标识一个群
-
-<https://open-dev.dingtalk.com/apiExplorer?spm=ding_open_doc.document.0.0.afb839b7W85NCP#/jsapi?api=biz.chat.chooseConversationByCorpId>

+ 0 - 42
doc/开发环境/本地环境接口测试.md

@@ -1,42 +0,0 @@
-# 接口测试
-
-## 数据手动入库
-
-```http
-POST http://127.0.0.1:29100/tsl/task/warahouse HTTP/1.1
-Content-Type:application/json
-
-20230502
-```
-
-## 定时任务
-
-### 查询定时任务
-
-```http
-POST http://127.0.0.1:29100/tsl/task/cron/status HTTP/1.1
-Content-Type:application/json
-```
-
-### 停止定时任务
-
-```http
-POST http://127.0.0.1:29100/tsl/task/cron/stop HTTP/1.1
-Content-Type:application/json
-```
-
-### 启动定时任务
-
-```http
-POST http://127.0.0.1:29100/tsl/task/cron/start HTTP/1.1
-Content-Type:application/json
-```
-
-### 修改定时表达式
-
-```http
-POST http://127.0.0.1:29100/tsl/task/cron/expression HTTP/1.1
-Content-Type:application/json
-
-0/25 * * * 
-```

BIN
doc/需求文档/2024年适配/2024年日报考核指标.xlsx


+ 25 - 0
src/main/java/com/nokia/tsl_data/controller/DataWarehouseController.java

@@ -159,4 +159,29 @@ public class DataWarehouseController {
         }
     }
 
+    @PostMapping("update/management_detail")
+    public R updateManagementDetail(@RequestBody String day) {
+        try {
+            dataWarehouseService.updateManagementDetail(day);
+            return R.ok().message(String.format("ManagementDetail 帐期 %s 更新成功", day));
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            e.printStackTrace();
+            return R.error().message(String.format("ManagementDetail 帐期 %s 更新失败: %s", day, e.getMessage()));
+        }
+    }
+
+    @PostMapping("delete/management_detail")
+    public R deleteManagementDetail(String day) {
+        try {
+            int count = dataWarehouseService.deleteManagementDetail(day);
+            return R.ok().message(
+                    String.format("客户端详表 ManagementDetail 数据账期 %s 删除 %s 条", day, count));
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            e.printStackTrace();
+            return R.error().message(String.format("客户端详表 ManagementDetail 数据账期 %s 删除失败: %s",
+                    day, e.getMessage()));
+        }
+    }
 }

+ 105 - 114
src/main/java/com/nokia/tsl_data/dao/HighQualityCountMapper.java

@@ -10,133 +10,124 @@ import java.util.Map;
 
 /**
  * 客户端数据表 高质量统计表
- * 对应主表 report_auto.he_d_high_quality
+ * 对应主表 tsl_data.high_quality_count_day
  */
 @Mapper
 public interface HighQualityCountMapper {
 
-    /**
-     * 查询河北_CEM高品质2日统计数据量
-     */
-    @Select("select count(1) from tsl_data.high_quality_count_day where acct_date = #{day} ")
-    int selectQualityCountForDay(String day);
+        /**
+         * 查询河北_CEM高品质2日统计数据量
+         */
+        @Select("select count(1) from tsl_data.high_quality_count_day where acct_date = #{day} ")
+        int selectQualityCountForDay(String day);
 
-    /**
-     * 查询客户端地市响应率数据 参数day_id 20231105
-     */
-    @Select("select businoareaname                                                                           as city,\n"
-            +
-            "       complaint_response_list::float8                                                          as numerator,\n"
-            +
-            "       complaint_response_count::float8 + complaint::float8                                     as denominator,\n"
-            +
-            "       complaint_response_list::float8 / (complaint_response_count::float8 + complaint::float8) as rate\n"
-            +
-            "from tsl_data.high_quality_count_day\n" +
-            "where month_id = substring(#{day_id} from 1 for 6)\n" +
-            "  and day_id = substring(#{day_id} from 7 for 2)\n" +
-            "  and profes_dep = '网络质量'\n" +
-            "  and big_type_name = '移网网络体验'\n" +
-            "  and small_type_name = '--'")
-    List<Map<String, Object>> selectResponseOfCity(@Param("day_id") String day);
+        /**
+         * 查询客户端地市响应率数据 参数day_id 20231105
+         */
+        @Select("select businoareaname                                                                           as city,\n"
+                        +
+                        "       complaint_response_list::float8                                                          as numerator,\n"
+                        +
+                        "       complaint_response_count::float8 + complaint::float8                                     as denominator,\n"
+                        +
+                        "       complaint_response_list::float8 / (complaint_response_count::float8 + complaint::float8) as rate\n"
+                        +
+                        "from tsl_data.high_quality_count_day\n" +
+                        "where month_id = substring(#{day_id} from 1 for 6)\n" +
+                        "  and day_id = substring(#{day_id} from 7 for 2)\n" +
+                        "  and profes_dep = '网络质量'\n" +
+                        "  and big_type_name = '移网网络体验'\n" +
+                        "  and small_type_name = '--'")
+        List<Map<String, Object>> selectResponseOfCity(@Param("day_id") String day);
 
-    /**
-     * 查询客户端地市解决率 参数day_id 20231105
-     */
-    @Select("select businoareaname                                                                               as city,\n"
-            +
-            "       complaint_resolution_list::float8                                                            as numerator,\n"
-            +
-            "       complaint_resolution_count::float8 + complaint::float8                                       as denominator,\n"
-            +
-            "       complaint_resolution_list::float8 / (complaint_resolution_count::float8 + complaint::float8) as rate\n"
-            +
-            "from tsl_data.high_quality_count_day\n" +
-            "where month_id = substring(#{day_id} from 1 for 6)\n" +
-            "  and day_id = substring(#{day_id} from 7 for 2)\n" +
-            "  and profes_dep = '网络质量'\n" +
-            "  and big_type_name = '移网网络体验'\n" +
-            "  and small_type_name = '--'")
-    List<Map<String, Object>> selectResolutionOfCity(@Param("day_id") String day);
+        /**
+         * 查询客户端地市解决率 参数day_id 20231105
+         */
+        @Select("select businoareaname                                                                               as city,\n"
+                        +
+                        "       complaint_resolution_list::float8                                                            as numerator,\n"
+                        +
+                        "       complaint_resolution_count::float8 + complaint::float8                                       as denominator,\n"
+                        +
+                        "       complaint_resolution_list::float8 / (complaint_resolution_count::float8 + complaint::float8) as rate\n"
+                        +
+                        "from tsl_data.high_quality_count_day\n" +
+                        "where month_id = substring(#{day_id} from 1 for 6)\n" +
+                        "  and day_id = substring(#{day_id} from 7 for 2)\n" +
+                        "  and profes_dep = '网络质量'\n" +
+                        "  and big_type_name = '移网网络体验'\n" +
+                        "  and small_type_name = '--'")
+        List<Map<String, Object>> selectResolutionOfCity(@Param("day_id") String day);
 
-    /**
-     * 查询客户端地市满意度 参数day_id 20231105
-     */
-    @Select("select businoareaname                                                                             as city,\n"
-            +
-            "       complaint_satisfied_list::float8                                                           as numerator,\n"
-            +
-            "       complaint_satisfied_count::float8 + complaint::float8                                      as denominator,\n"
-            +
-            "       complaint_satisfied_list::float8 / (complaint_satisfied_count::float8 + complaint::float8) as rate\n"
-            +
-            "from tsl_data.high_quality_count_day\n" +
-            "where month_id = substring(#{day_id} from 1 for 6)\n" +
-            "  and day_id = substring(#{day_id} from 7 for 2)\n" +
-            "  and profes_dep = '网络质量'\n" +
-            "  and big_type_name = '移网网络体验'\n" +
-            "  and small_type_name = '--' ")
-    List<Map<String, Object>> selectSatisfiedOfCity(@Param("day_id") String day);
+        /**
+         * 查询客户端地市满意度 参数day_id 20231105
+         */
+        @Select("select businoareaname                                                                             as city,\n"
+                        + " complaint_satisfied_list::float8                                                           as numerator,\n"
+                        + " complaint_satisfied_count::float8 + complaint::float8                                      as denominator,\n"
+                        + " complaint_satisfied_list::float8 / (complaint_satisfied_count::float8 + complaint::float8) as rate\n"
+                        + "from tsl_data.high_quality_count_day\n" +
+                        "where month_id = substring(#{day_id} from 1 for 6)\n" +
+                        "  and day_id = substring(#{day_id} from 7 for 2)\n" +
+                        "  and profes_dep = '网络质量'\n" +
+                        "  and big_type_name = '移网网络体验'\n" +
+                        "  and small_type_name = '--' ")
+        List<Map<String, Object>> selectSatisfiedOfCity(@Param("day_id") String day);
 
-    /**
-     * 客户端-投诉问题解决满意度 客户端-投诉问题解决率 客户端-投诉问题响应率
-     */
-    @Select("with t1 as (select businoareaname, complaint_satisfied_list::float8, complaint_satisfied_count::float8, " +
-            "complaint_resolution_list::float8, complaint_resolution_count::float8, complaint_response_list::float8, " +
-            "complaint_response_count::float8, complaint::float8 " +
-            "from report_auto.he_d_high_quality hdhq " +
-            "where acct_date = #{day} and profes_dep = '网络质量' and big_type_name = '移网网络体验' and small_type_name = '--') "
-            +
-            "select '全省' as businoareaname, sum(complaint_satisfied_list) / sum(complaint_satisfied_count + complaint) as complaint_satisfied, "
-            +
-            "   sum(complaint_resolution_list) / sum(complaint_resolution_count + complaint) as complaint_resolution, "
-            +
-            "   sum(complaint_response_list) / sum(complaint_response_count + complaint)  as complaint_response from t1 "
-            +
-            "union select businoareaname, " +
-            "case when (complaint_satisfied_count + complaint) = 0 then 0 " +
-            "  else complaint_satisfied_list / (complaint_satisfied_count + complaint) end as complaint_satisfied, " +
-            "case when (complaint_resolution_count + complaint) = 0 then 0 " +
-            "  else complaint_resolution_list / (complaint_resolution_count + complaint) end as complaint_resolution, "
-            +
-            "case when (complaint_response_count + complaint) = 0 then 0 " +
-            "  else complaint_response_list / (complaint_response_count + complaint) end     as complaint_response from t1")
-    List<Map<String, Object>> selectClientRatioForDay(String day);
+        /**
+         * 客户端-投诉问题解决满意度 客户端-投诉问题解决率 客户端-投诉问题响应率
+         */
+        @Select("with t1 as (select businoareaname, complaint_satisfied_list::float8, complaint_satisfied_count::float8, "
+                        + "complaint_resolution_list::float8, complaint_resolution_count::float8, complaint_response_list::float8, "
+                        + "complaint_response_count::float8, complaint::float8 " +
+                        "from tsl_data.high_quality_count_day hdhq " +
+                        "where acct_date = #{day} and profes_dep = '网络质量' and big_type_name = '移网网络体验' and small_type_name = '--') "
+                        + "select '全省' as businoareaname, sum(complaint_satisfied_list) / sum(complaint_satisfied_count + complaint) as complaint_satisfied, "
+                        + " sum(complaint_resolution_list) / sum(complaint_resolution_count + complaint) as complaint_resolution, "
+                        + " sum(complaint_response_list) / sum(complaint_response_count + complaint)  as complaint_response from t1 "
+                        + "union select businoareaname, " +
+                        "case when (complaint_satisfied_count + complaint) = 0 then 0 " +
+                        "  else complaint_satisfied_list / (complaint_satisfied_count + complaint) end as complaint_satisfied, "
+                        + "case when (complaint_resolution_count + complaint) = 0 then 0 " +
+                        "  else complaint_resolution_list / (complaint_resolution_count + complaint) end as complaint_resolution, "
+                        + "case when (complaint_response_count + complaint) = 0 then 0 " +
+                        "  else complaint_response_list / (complaint_response_count + complaint) end     as complaint_response from t1")
+        List<Map<String, Object>> selectClientRatioForDay(String day);
 
-    /**
-     * 查询某个日期各个地市的客户端总数(总投诉量(办结量))(所得结果是当月0日到当天的一个累加量)
-     */
-    default List<Map<String, Object>> selectTotalComplaintsForDay(String day) {
-        return selectTotalComplaintsForMonthIdAndDay(day.substring(0, 6), day.substring(6));
-    }
+        /**
+         * 查询某个日期各个地市的客户端总数(总投诉量(办结量))(所得结果是当月0日到当天的一个累加量)
+         */
+        default List<Map<String, Object>> selectTotalComplaintsForDay(String day) {
+                return selectTotalComplaintsForMonthIdAndDay(day.substring(0, 6), day.substring(6));
+        }
 
-    /**
-     * 查询某个日期各个地市的客户端总数(总投诉量(办结量))(所得结果是当月0日到当天的一个累加量)
-     */
-    @Select("select businoareaname, total_complaints from tsl_data.high_quality_count_day " +
-            "where month_id = #{month_id} and day_id = #{day_id} and profes_dep = '网络质量' " +
-            "and big_type_name = '移网网络体验' and small_type_name = '--'")
-    List<Map<String, Object>> selectTotalComplaintsForMonthIdAndDay(@Param("month_id") String monthId,
-            @Param("day_id") String day);
+        /**
+         * 查询某个日期各个地市的客户端总数(总投诉量(办结量))(所得结果是当月0日到当天的一个累加量)
+         */
+        @Select("select businoareaname, total_complaints from tsl_data.high_quality_count_day " +
+                        "where month_id = #{month_id} and day_id = #{day_id} and profes_dep = '网络质量' " +
+                        "and big_type_name = '移网网络体验' and small_type_name = '--'")
+        List<Map<String, Object>> selectTotalComplaintsForMonthIdAndDay(@Param("month_id") String monthId,
+                        @Param("day_id") String day);
 
-    @Delete("delete from tsl_data.high_quality_count_day where month_id = #{month_id} and day_id = #{day_id}")
-    int deleteHighQualityCountForMonthIdAndDayId(@Param("month_id") String monthId, @Param("day_id") String dayId);
+        @Delete("delete from tsl_data.high_quality_count_day where month_id = #{month_id} and day_id = #{day_id}")
+        int deleteHighQualityCountForMonthIdAndDayId(@Param("month_id") String monthId, @Param("day_id") String dayId);
 
-    default int deleteHighQualityCountForDay(String day) {
-        return deleteHighQualityCountForMonthIdAndDayId(day.substring(0, 6), day.substring(6));
-    }
+        default int deleteHighQualityCountForDay(String day) {
+                return deleteHighQualityCountForMonthIdAndDayId(day.substring(0, 6), day.substring(6));
+        }
 
-    @Select("select count(1) from tsl_data.high_quality_count_day where month_id = #{month_id} and day_id = #{day_id}")
-    int countForDay(@Param("month_id") String monthId, @Param("day_id") String dayId);
+        @Select("select count(1) from tsl_data.high_quality_count_day where month_id = #{month_id} and day_id = #{day_id}")
+        int countForDay(@Param("month_id") String monthId, @Param("day_id") String dayId);
 
-    default int countForDay(String day) {
-        return countForDay(day.substring(0, 6), day.substring(6));
-    }
+        default int countForDay(String day) {
+                return countForDay(day.substring(0, 6), day.substring(6));
+        }
 
-    /**
-     * 按照账期查询数据
-     */
-    default int selectCountOfStatDay(String day) {
-        return countForDay(day.substring(0, 6), day.substring(6));
-    }
+        /**
+         * 按照账期查询数据
+         */
+        default int selectCountOfStatDay(String day) {
+                return countForDay(day.substring(0, 6), day.substring(6));
+        }
 }

+ 12 - 7
src/main/java/com/nokia/tsl_data/dao/ManagementDetailMapper.java

@@ -3,8 +3,10 @@ package com.nokia.tsl_data.dao;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 @Mapper
@@ -18,7 +20,7 @@ public interface ManagementDetailMapper {
             " where stat_day_id = #{day} " + //
             " group by compl_area_local, substring(acct_date from 7 for 2)\r\n" + //
             " order by compl_area_local, substring(acct_date from 7 for 2)")
-    List<Map<String, Object>> selectCityTslForMonth(String day);
+    List<Map<String, Object>> selectCityTslForMonth(@Param("day") String day);
 
     /**
      * 投诉清单全省分日计数 按账期查询
@@ -28,7 +30,7 @@ public interface ManagementDetailMapper {
             " where stat_day_id = #{day} " + //
             " group by substring(acct_date from 7 for 2)\r\n" + //
             " order by substring(acct_date from 7 for 2)")
-    List<Map<String, Object>> selectAllTslForMonth(String day);
+    List<Map<String, Object>> selectAllTslForMonth(@Param("day") String day);
 
     /**
      * 投诉清单地市总数 按账期查询
@@ -38,7 +40,7 @@ public interface ManagementDetailMapper {
             " where stat_day_id = #{day} " + //
             " group by compl_area_local\r\n" + //
             " order by compl_area_local")
-    List<Map<String, Object>> selectCityAllForMonth(String day);
+    List<Map<String, Object>> selectCityAllForMonth(@Param("day") String day);
 
     /**
      * 全省总数 按账期查询
@@ -46,7 +48,7 @@ public interface ManagementDetailMapper {
     @Select("select count(1) as num\r\n" + //
             "from tsl_data.management_detail\r\n" + //
             "where stat_day_id = #{day} ")
-    int selectAllForMonth(String day);
+    int selectAllForMonth(@Param("day") String day);
 
     /**
      * 从 河北_CEM移网质量投诉明细 mobile_complaint_day 中同步数据
@@ -57,7 +59,7 @@ public interface ManagementDetailMapper {
             " acct_date, sheet_no, compl_area_local, gis_city as compl_city_local " +
             " from tsl_data.mobile_complaint_day mcd \r\n" +
             " where month_id = substring(#{day} from 1 for 6) and day_id = substring(#{day} from 7 for 2) ")
-    int insertFromMobileComplaint(String day);
+    int insertFromMobileComplaint(@Param("day") String day);
 
     /**
      * 从 河北客户体验管理智能定责投诉明细月累计接口日 complaint_details_fix_ywd_day 同步数据
@@ -69,11 +71,14 @@ public interface ManagementDetailMapper {
             " from tsl_data.complaint_details_fix_ywd_day cdfyd \r\n" +
             " where duty_reason_id_day = '业务使用>>基础业务使用>>移网主被叫>>手机无法主被叫'\r\n" +
             " and month_id = substring(#{day} from 1 for 6) and day_id = substring(#{day} from 7 for 2) ")
-    int insertFromComplaintDetailsFixYwd(String day);
+    int insertFromComplaintDetailsFixYwd(@Param("day") String day);
 
     /**
      * 按照账期统计某个账期的数据量
      */
     @Select("select count(1) from tsl_data.management_detail where stat_day_id = #{day} ")
-    int selectCountofStatDay(String day);
+    int selectCountofStatDay(@Param("day") String day);
+
+    @Delete("delete from tsl_data.management_detail where tat_day_id = #{day}")
+    int deleteForStatDay(@Param("day") String day);
 }

+ 30 - 0
src/main/java/com/nokia/tsl_data/dao/TargetTsRatioMapper.java

@@ -0,0 +1,30 @@
+package com.nokia.tsl_data.dao;
+
+import com.nokia.tsl_data.entity.TargetTsRatio;
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface TargetTsRatioMapper {
+
+    @Results(id = "targetTsRatioResults", value = {
+            @Result(property = "id", column = "id", id = true),
+            @Result(property = "cityName", column = "city_name"),
+            @Result(property = "monthId", column = "month_id"),
+            @Result(property = "managementTargetRatio", column = "management_target_ratio"),
+            @Result(property = "customerTargetRatio", column = "customer_target_ratio")
+    })
+    @Select("select * from tsl_data.target_ts_ratio where month_id = #{monthId}")
+    List<TargetTsRatio> findByMonthId(String monthId);
+
+    @Insert("INSERT INTO tsl_data.target_ts_ratio\n" + //
+            "(city_name, customer_target_ratio, management_target_ratio, month_id)\n" + //
+            "VALUES(#{cityName}, #{customerTargetRatio}, #{managementTargetRatio}, #{monthId});")
+    void insertOne(TargetTsRatio targetTsRatio);
+}

+ 0 - 13
src/main/java/com/nokia/tsl_data/dao/TargetTsRatioRepository.java

@@ -1,13 +0,0 @@
-package com.nokia.tsl_data.dao;
-
-import com.nokia.tsl_data.entity.TargetTsRatio;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Repository
-public interface TargetTsRatioRepository extends JpaRepository<TargetTsRatio, Long> {
-
-    List<TargetTsRatio> findByMonthId(String monthId);
-}

+ 2 - 25
src/main/java/com/nokia/tsl_data/entity/TargetTsRatio.java

@@ -1,41 +1,18 @@
 package com.nokia.tsl_data.entity;
 
 import lombok.Data;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-
-import javax.persistence.*;
-import java.time.Instant;
 
 /**
  * 目标率值
  */
 @Data
-@Entity
-@EntityListeners(AuditingEntityListener.class)
-@Table(name = "target_ts_ratio", schema = "tsl_data")
 public class TargetTsRatio {
 
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
-
-    @Column(name = "month_id", columnDefinition = "varchar(8)", nullable = false)
     private String monthId;
-
-    @Column(name = "city_name", columnDefinition = "varchar(50)", nullable = false)
     private String cityName;
-
-    @Column(name = "management_target_ratio", nullable = false)
+    // 管理端目标值
     private Double managementTargetRatio;
-
-    @Column(name = "customer_target_ratio", nullable = false)
+    // 客户端目标值
     private Double customerTargetRatio;
-
-    @CreatedDate
-    private Instant createDate;
-
-    @LastModifiedDate
-    private Instant lastUpdateDate;
 }

+ 31 - 0
src/main/java/com/nokia/tsl_data/service/DataWarehouseService.java

@@ -37,6 +37,8 @@ public class DataWarehouseService {
     @Autowired
     private ComplaintDetailsFixYwdDayMapper complaintDetailsFixYwdDayMapper;
     @Autowired
+    private ManagementDetailMapper managementDetailMapper;
+    @Autowired
     private SysDataDictionaryRepository sysDataDictionaryRepository;
     @Autowired
     private DataWarehouseProperties dataWarehouseProperties;
@@ -122,6 +124,13 @@ public class DataWarehouseService {
      * 入库 河北高质量2日明细数据
      */
     public void warehouseHighQualityListDay(String day) {
+        // 1. 检查是否已存在数据
+        int countForDay = highQualityListDayMapper.countForDay(day);
+        if (countForDay != 0) {
+            throw new RuntimeException(
+                String.format("HighQualityListDay 帐期 %s 已存在 %s 条数据", day, countForDay));
+        }
+        // 2. 入库新数据
         warehouseHighQualityListDay(getHighQualityListDayFile(day));
     }
 
@@ -309,4 +318,26 @@ public class DataWarehouseService {
         String md5OfFile = CodecUtil.MD5OfFile(file);
         return md5String.equals(md5OfFile);
     }
+
+    /**
+     * 更新 ManagementDetail
+     */
+    public void updateManagementDetail(String day) {
+        // 1. 检查是否已存在数据
+        int countForDay = managementDetailMapper.selectCountofStatDay(day);
+        if (countForDay != 0) {
+            throw new RuntimeException(
+                String.format("ManagementDetail 帐期 %s 已存在 %s 条数据", day, countForDay));
+        }
+        // 2. 入库新数据
+        managementDetailMapper.insertFromMobileComplaint(day);
+        managementDetailMapper.insertFromComplaintDetailsFixYwd(day);
+    }
+
+    /**
+     * 删除 ManagementDetail
+     */
+    public int deleteManagementDetail(String day) {
+        return managementDetailMapper.deleteForStatDay(day);
+    }
 }

+ 17 - 17
src/main/java/com/nokia/tsl_data/service/HighQualityDataService.java

@@ -7,6 +7,8 @@ import com.nokia.tsl_data.dao.SysDataDictionaryRepository;
 import com.nokia.tsl_data.entity.HighQualityData;
 import com.nokia.tsl_data.properties.CustomerRateTargetProperties;
 import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -21,19 +23,16 @@ import java.util.Map;
 @Service
 public class HighQualityDataService {
 
-    private final HighQualityDataRepository highQualityDataRepository;
-    private final HighQualityDataMapper highQualityDataMapper;
-    private final HighQualityListDayMapper highQualityListDayMapper;
-    private final SysDataDictionaryRepository sysDataDictionaryRepository;
-    private final CustomerRateTargetProperties customerRateTargetProperties;
-
-    public HighQualityDataService(HighQualityDataRepository highQualityDataRepository, HighQualityDataMapper highQualityDataMapper, HighQualityListDayMapper highQualityListDayMapper, SysDataDictionaryRepository sysDataDictionaryRepository, CustomerRateTargetProperties customerRateTargetProperties) {
-        this.highQualityDataRepository = highQualityDataRepository;
-        this.highQualityDataMapper = highQualityDataMapper;
-        this.highQualityListDayMapper = highQualityListDayMapper;
-        this.sysDataDictionaryRepository = sysDataDictionaryRepository;
-        this.customerRateTargetProperties = customerRateTargetProperties;
-    }
+    @Autowired
+    private HighQualityDataRepository highQualityDataRepository;
+    @Autowired
+    private HighQualityDataMapper highQualityDataMapper;
+    @Autowired
+    private HighQualityListDayMapper highQualityListDayMapper;
+    @Autowired
+    private SysDataDictionaryRepository sysDataDictionaryRepository;
+    @Autowired
+    private CustomerRateTargetProperties customerRateTargetProperties;
 
     /**
      * 根据商定的算法生成数据
@@ -42,7 +41,8 @@ public class HighQualityDataService {
         // 1. 获取数据
         int countByDayId = highQualityDataRepository.countByDayId(day);
         if (countByDayId != 0) {
-            throw new RuntimeException("已存在数据,需要先清除才能重新计算...");
+            throw new RuntimeException(
+                    String.format("HighQualityData 帐期 %s 已存在 %s 条数据,需要先清除才能重新计算...", day, countByDayId));
         }
         List<HighQualityData> highQualityData = highQualityListDayMapper.selectHighQualityDataOfDay(day);
         // 保存到 high_quality_data 表
@@ -88,7 +88,7 @@ public class HighQualityDataService {
             // 写入达标值
             list.add(customerRateTargetProperties.getResolutionCompliance());
             // 写入与达标值的差距
-            list.add((double)list.get(2) - (double)list.get(3));
+            list.add((double) list.get(2) - (double) list.get(3));
         }
         // 4. 本月累计不满意工单量
         List<Map<String, Object>> maps1 = highQualityDataMapper.selectCountOfCpNotOkOfRegion(day);
@@ -138,7 +138,7 @@ public class HighQualityDataService {
             // 写入达标值
             list.add(customerRateTargetProperties.getSatisfiedCompliance());
             // 写入与达标值的差距
-            list.add((double)list.get(2) - (double)list.get(3));
+            list.add((double) list.get(2) - (double) list.get(3));
         }
         // 4. 本月累计不满意工单量
         List<Map<String, Object>> maps1 = highQualityDataMapper.selectCountOfCpNotSatisfactionOfRegion(day);
@@ -189,7 +189,7 @@ public class HighQualityDataService {
             // 写入达标值
             list.add(customerRateTargetProperties.getResponseCompliance());
             // 写入与达标值的差距
-            list.add((double)list.get(2) - (double)list.get(3));
+            list.add((double) list.get(2) - (double) list.get(3));
         }
         // 4. 本月累计未响应工单量
         List<Map<String, Object>> maps1 = highQualityDataMapper.selectCountOfCpNotTimelyContactOfRegion(day);

+ 3 - 2
src/main/java/com/nokia/tsl_data/service/ManagementDetailService.java

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
 
 import com.nokia.tsl_data.dao.ManagementDetailMapper;
 import com.nokia.tsl_data.dao.SysDataDictionaryRepository;
-import com.nokia.tsl_data.dao.TargetTsRatioRepository;
+import com.nokia.tsl_data.dao.TargetTsRatioMapper;
 import com.nokia.tsl_data.entity.TargetTsRatio;
 import com.nokia.tsl_data.exception.LackOfDataRuntimeException;
 import com.nokia.tsl_data.util.DateFormatUtil;
@@ -30,7 +30,7 @@ public class ManagementDetailService {
     private SysDataDictionaryRepository sysDataDictionaryRepository;
 
     @Autowired
-    private TargetTsRatioRepository targetTsRatioRepository;
+    private TargetTsRatioMapper targetTsRatioRepository;
 
     @Autowired
     private UserCountService userCountService;
@@ -133,4 +133,5 @@ public class ManagementDetailService {
             throw new LackOfDataRuntimeException(String.format("management_detail 表缺少账期 %s 数据", day));
         }
     }
+
 }

+ 2 - 0
src/main/java/com/nokia/tsl_data/service/ReportServiceV3.java

@@ -119,11 +119,13 @@ public class ReportServiceV3 {
         // 1.1 写入sheet 管理端-移网感知类
         managementDetailService.checkStatDayCount(day);
         writeSheet1(workbookWrapper, day);
+        log.info("帐期 {} 管理端-移网感知类 sheet写入成功", day);
         // 1.2 写入 服请情况
         // 1.3 写入 重复投诉 超时工单情况
         // 1.4 写入三率
         tslDataService.checkStatDayCount(day);
         writeSheet4_6(workbookWrapper, day);
+        log.info("帐期 {} 客户端-三率 sheet写入成功", day);
         // 2. 写入到本地文件
         try (OutputStream outputStream = new FileOutputStream(file)) {
             workbookWrapper.getWorkbook().write(outputStream);

+ 1 - 1
src/main/java/com/nokia/tsl_data/service/TslDataService.java

@@ -32,7 +32,7 @@ public class TslDataService {
     @Autowired
     private UserCountService userCountService;
     @Autowired
-    private TargetTsRatioRepository targetTsRatioRepository;
+    private TargetTsRatioMapper targetTsRatioRepository;
     @Autowired
     private CustomerRateTargetProperties customerRateTargetProperties;
 

+ 48 - 1
src/test/java/com/nokia/tsl_data/TslDataApplicationTest.java

@@ -1,10 +1,19 @@
 package com.nokia.tsl_data;
 
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import com.nokia.tsl_data.dao.HighQualityCountMapper;
+import com.nokia.tsl_data.dao.TargetTsRatioMapper;
+import com.nokia.tsl_data.entity.TargetTsRatio;
 import com.nokia.tsl_data.service.TaskService;
+import com.nokia.tsl_data.service.TslDataService;
 
 @SpringBootTest
 class TslDataApplicationTest {
@@ -14,6 +23,44 @@ class TslDataApplicationTest {
 
     @Test
     void test() {
-        taskService.generateReportV3("20231224");
+        taskService.generateReportV3("20240101");
+    }
+
+    @Autowired
+    private HighQualityCountMapper highQualityCountMapper;
+
+    @Test
+    void test1() {
+        List<Map<String, Object>> data = highQualityCountMapper.selectClientRatioForDay("2024-01-01");
+        data.forEach(System.out::println);
+    }
+
+    @Autowired
+    private TslDataService tslDataService;
+
+    @Test
+    void test2() {
+        List<List<List<Object>>> sheet4_6Data = tslDataService.getSheet4_6Data("20240101");
+        sheet4_6Data.forEach(list -> list.forEach(System.out::println));
+    }
+
+    @Autowired
+    private TargetTsRatioMapper targetTsRatioMapper;
+
+    // 全省 4.2 3.4 4.4 4.7 5.0 5.1 5.4 5.5 4.9 4.6 4.3 3.7
+    @Test
+    void test3() throws IOException {
+        String s = "4.2	3.4	4.4	4.7	5.0	5.1	5.4	5.5	4.9	4.6	4.3	3.7";
+        String[] split = s.split("\t");
+        System.out.println(Arrays.toString(split));
+        for (int i = 0; i < split.length; i++) {
+            double d = Double.parseDouble(split[i]);
+            TargetTsRatio targetTsRatio = new TargetTsRatio();
+            targetTsRatio.setCityName("全省");
+            targetTsRatio.setMonthId("2024" + (i < 9 ? "0" + (i + 1) : i + 1));
+            targetTsRatio.setManagementTargetRatio(d);
+            targetTsRatioMapper.insertOne(targetTsRatio);
+        }
+
     }
 }