Bläddra i källkod

Merge remote-tracking branch 'origin/V0.0.2' into V0.0.2

jingyuanchao 1 år sedan
förälder
incheckning
66be725f6a
29 ändrade filer med 862 tillägg och 128 borttagningar
  1. 5 0
      project_data/sql/0.0.3/quartz/quartz.sql
  2. 109 0
      project_data/sql/0.0.3/soc/soc.sql
  3. 2 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/letter/vo/CoreOutInRecordVo.java
  4. 34 32
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/controller/AppCockpitController.java
  5. 33 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/app/AppGA38InfoDto.java
  6. 27 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/app/AppOverviewTaskInfoDto.java
  7. 78 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/mapper/AppCockpitMapper.java
  8. 9 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/AppCockpitService.java
  9. 168 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/AppCockpitServiceImpl.java
  10. 17 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppBaseInfoSecurityFacilitiesVo.java
  11. 23 7
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppBaseInfoVo.java
  12. 2 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppGa38RateVo.java
  13. 23 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppOverviewItemVo.java
  14. 35 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppOverviewVo.java
  15. 19 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticInOutVo.java
  16. 17 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticOtherVo.java
  17. 21 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticQuestionVo.java
  18. 18 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticResumptionVo.java
  19. 20 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticSafetycheckTaskVo.java
  20. 18 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticSafetycheckVo.java
  21. 19 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticTaskInfoVo.java
  22. 2 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/controller/CoreIntroduceLetterController.java
  23. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/controller/CoreOutInRecordController.java
  24. 22 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/service/impl/CoreIntroduceLetterServiceImpl.java
  25. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java
  26. 107 0
      soc-modules/soc-modules-core/src/main/resources/mapper/board/AppCockpitMapper.xml
  27. 4 52
      soc-modules/soc-modules-core/src/main/resources/mapper/letter/CoreOutInRecordMapper.xml
  28. 0 27
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreLetter.java
  29. 26 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreLetterTask.java

+ 5 - 0
project_data/sql/0.0.3/quartz/quartz.sql

@@ -1,2 +1,7 @@
 DELETE from `sys_job` WHERE invoke_target='CoreResumptionTask.buildPdf';
 INSERT INTO `sys_job`(`job_id`, `job_name`, `job_group`, `invoke_target`, `cron_expression`, `misfire_policy`, `concurrent`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (211, '每日生成履职登记簿', 'DEFAULT', 'CoreResumptionTask.buildPdf', '1 1 23 * * ?', '1', '1', '0', '省联社账号', '2023-11-10 10:18:41', '', NULL);
+
+
+-- 出入申请逾期状态任务
+DELETE FROM `sys_job` where `job_name`='出入申请逾期状态任务';
+INSERT INTO `sys_job` (`job_name`, `job_group`, `invoke_target`, `cron_expression`, `misfire_policy`, `concurrent`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('出入申请逾期状态任务', 'DEFAULT', 'CoreLetterTask.updateLetterStatus', '0 0 1 * * ?', '1', '1', '0', 'zlsls01', '2023-11-13 17:04:54', 'zlsls01', '2023-11-13 17:16:28');

+ 109 - 0
project_data/sql/0.0.3/soc/soc.sql

@@ -960,3 +960,112 @@ delete from sys_dict_data where dict_type='edu_training_type' and dict_label in
 INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (2, '营业网点安全保卫教育培训', '2', 'edu_training_type', null, 'default', 'N', '0', null, now(), null, now(), null);
 INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (3, '营业网点消防安全培训', '3', 'edu_training_type', null, 'default', 'N', '0',  null, now(), null, now(), null);
 
+
+
+
+
+-- Web端 出入管理
+DELETE FROM sys_menu WHERE id IN(01712729517575520258);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01712729517575520258, '出入管理', 0, 100, 'Introduce', NULL, NULL, 1, 0, 'M', '0', '0', '', '1', 'client', NULL, '超级管理员', '2023-10-13 15:18:50', '超级管理员', '2023-10-13 15:25:27', '');
+
+-- 介绍信管理
+DELETE FROM sys_menu WHERE id IN(01712730072704237569,01722086291781177346,01722089558964723714,01722089643559641090,01722133971111796737);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01712730072704237569, '介绍信管理', 1712729517575520258, 1, 'core/letter', 'core/outIn/letter/index', NULL, 1, 0, 'C', '0', '0', 'core:letter:query', '1', 'color', NULL, '超级管理员', '2023-10-13 15:21:02', '超级管理员', '2023-11-13 18:36:53', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722086291781177346, '新增', 1712730072704237569, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:add', '1', NULL, NULL, 'zlsls01', '2023-11-08 10:59:25', '', NULL, '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722089558964723714, '删除', 1712730072704237569, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:remove', '1', NULL, NULL, '超级管理员', '2023-11-08 11:12:00', '超级管理员', '2023-11-08 11:12:58', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722089643559641090, '编辑', 1712730072704237569, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:edit', '1', NULL, NULL, '超级管理员', '2023-11-08 11:12:20', '超级管理员', '2023-11-08 11:13:05', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722133971111796737, '查询', 1712730072704237569, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:query', '1', NULL, NULL, '超级管理员', '2023-11-08 14:08:29', '', NULL, '');
+
+DELETE FROM `sys_role_menu` WHERE menu_id IN(01712730072704237569,01722086291781177346,01722089558964723714,01722089643559641090,01722133971111796737);
+
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 01712730072704237569);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 01722086291781177346);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 01722089558964723714);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 01722089643559641090);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 01722133971111796737);
+
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 01712730072704237569);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 01722086291781177346);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 01722089558964723714);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 01722089643559641090);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 01722133971111796737);
+
+-- 出入事项审批
+DELETE FROM sys_menu WHERE id IN(01722459057471643650,01722497238984318978,01722551208603836417);
+
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722459057471643650, '出入事项审批', 1712729517575520258, 1, 'core/letter/approve', 'core/outIn/approve/index', NULL, 1, 0, 'C', '0', '0', 'core:letter:approveList', '1', 'validCode', NULL, '超级管理员', '2023-11-09 11:40:15', '超级管理员', '2023-11-09 11:47:28', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722497238984318978, '查询', 1722459057471643650, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:query', '1', NULL, NULL, '超级管理员', '2023-11-09 14:11:58', '超级管理员', '2023-11-13 18:38:23', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722551208603836417, '审核', 1722459057471643650, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:approve', '1', NULL, NULL, '超级管理员', '2023-11-09 17:46:26', '', NULL, '');
+
+DELETE FROM `sys_role_menu` WHERE menu_id IN(01722459057471643650,01722497238984318978,01722551208603836417);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (121, 01722459057471643650);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (121, 01722497238984318978);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (121, 01722551208603836417);
+
+-- 出入情况查询
+DELETE FROM sys_menu WHERE id IN(01722881657557610498,01722883092282208257);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722881657557610498, '出入情况查询', 1712729517575520258, 3, 'core/outin/record', 'core/outIn/outInLog/index', NULL, 1, 0, 'C', '0', '0', 'core:record:list', '1', 'log', NULL, '超级管理员', '2023-11-10 15:39:31', '超级管理员', '2023-11-10 15:40:48', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01722883092282208257, '查询', 1722881657557610498, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:record:list', '1', NULL, NULL, '超级管理员', '2023-11-10 15:45:13', '', NULL, '');
+
+DELETE FROM `sys_role_menu` WHERE menu_id IN(01722881657557610498,01722883092282208257);
+
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (116, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (117, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (118, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (119, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (120, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (121, 01722881657557610498);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01722881657557610498);
+
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (114, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (116, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (117, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (118, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (119, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (120, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (121, 01722883092282208257);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01722883092282208257);
+
+
+-- 移动端 出入管理菜单
+DELETE FROM sys_menu WHERE id IN(01719176094776664066);
+INSERT INTO `soc`.`sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01719176094776664066, '来访', 0, 4, '‘’', NULL, NULL, 1, 0, 'M', '0', '0', '', '0', NULL, NULL, '超级管理员', '2023-10-31 10:14:56', '超级管理员', '2023-10-31 10:38:38', '');
+
+-- 出入人员登记
+DELETE FROM sys_menu WHERE id IN(01719180104111788033,01724016270912864258,01724016373870444545);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01719180104111788033, '出入人员登记', 1719176094776664066, 3, '/visitRecord', NULL, NULL, 1, 0, 'C', '0', '0', 'core:record:list', '0', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABWCAMAAACNSvr7AAAAM1BMVEVHcExsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHS6r07EAAAAEHRSTlMAIKDQEPAwQIDAUJDgcGCwLB1LQwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAghJREFUWIXtmNGOhCAMRasCgqjD/3/tBtSRAiOtzmazCfdR67GU0gLQ1NTU9FfqRo7ITlrH0qzw50prrQrYkYd1ziDqsD0TGVdzuS76eD2eDRk4cE1HiVinE+50/syWuC8KNQwbcZWMRpE67Lkkb4NsxBVDHJ2pwCVjkXWPoq6/xV3cr3DT/EwXzE2ukBgrL0bG4Q6Ju8sny95VZK6s80w9LGvYzWq3XpNX+XJ7c+caVu7Wc7Ig/KsOhJ3L3FFXNO3WFkTqgwIw6Sxx520WWXTXQDGpJY8bai2q2TYksxSpJYc7+mgogPWMsNmS+dm6gJBjvQB1xNj7afJlzOf6ujAoEOY9Z3lwI+5iKto9UpuX094RlmJw2eviLLorwCiDnyYPbsSVFerOPVPMAgjtO4KRWXGIuNVdREiwqKO5fieUujxz3jo0qrT13OcaV/D3ORe1nkINu8lVMVZWmjidi/q6LM/WHS6qYmvNmsxFDbiUsTe5sbvXqcDjRk0irzIPuOQM43HPJKtlGI97ThvtiMHlymqG8bj7eYG2s2dwfcmRPf2YReVOxlLSgMSd4h1QcFWMNjuhsLl4Rz4fjx5zX4jrKtZ0rnjFnV9/jfvIunEb979zLzdwSAOLK4ngzjgW17m5dgrwGs76Q+VyROMqLpZ6ybTWTxaxCldwn8S5nqRfXTU1NTUhAcAPovdX9YWaiFoAAAAASUVORK5CYII=', NULL, '超级管理员', '2023-10-31 10:30:52', '超级管理员', '2023-11-13 18:54:33', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01724016270912864258, '新增', 1719180104111788033, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:record:add', '0', NULL, NULL, '超级管理员', '2023-11-13 18:48:04', '', NULL, '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01724016373870444545, '修改', 1719180104111788033, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:record:edit', '0', NULL, NULL, '超级管理员', '2023-11-13 18:48:28', '', NULL, '');
+
+DELETE FROM `sys_role_menu` WHERE menu_id IN(01719180104111788033,01724016270912864258,01724016373870444545);
+
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01719180104111788033);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01724016270912864258);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01724016373870444545);
+
+-- 出入事项审批
+DELETE FROM sys_menu WHERE id IN(01721714093297004546,01724017039149973506);
+INSERT INTO `soc`.`sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01721714093297004546, '出入事项审批', 1719176094776664066, 2, '/visitCheck', NULL, NULL, 1, 0, 'C', '0', '0', 'core:letter:approveList', '0', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABWCAMAAACNSvr7AAAAM1BMVEVHcExsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHS6r07EAAAAEHRSTlMAIKDQEPAwQIDAUJDgcGCwLB1LQwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAghJREFUWIXtmNGOhCAMRasCgqjD/3/tBtSRAiOtzmazCfdR67GU0gLQ1NTU9FfqRo7ITlrH0qzw50prrQrYkYd1ziDqsD0TGVdzuS76eD2eDRk4cE1HiVinE+50/syWuC8KNQwbcZWMRpE67Lkkb4NsxBVDHJ2pwCVjkXWPoq6/xV3cr3DT/EwXzE2ukBgrL0bG4Q6Ju8sny95VZK6s80w9LGvYzWq3XpNX+XJ7c+caVu7Wc7Ig/KsOhJ3L3FFXNO3WFkTqgwIw6Sxx520WWXTXQDGpJY8bai2q2TYksxSpJYc7+mgogPWMsNmS+dm6gJBjvQB1xNj7afJlzOf6ujAoEOY9Z3lwI+5iKto9UpuX094RlmJw2eviLLorwCiDnyYPbsSVFerOPVPMAgjtO4KRWXGIuNVdREiwqKO5fieUujxz3jo0qrT13OcaV/D3ORe1nkINu8lVMVZWmjidi/q6LM/WHS6qYmvNmsxFDbiUsTe5sbvXqcDjRk0irzIPuOQM43HPJKtlGI97ThvtiMHlymqG8bj7eYG2s2dwfcmRPf2YReVOxlLSgMSd4h1QcFWMNjuhsLl4Rz4fjx5zX4jrKtZ0rnjFnV9/jfvIunEb979zLzdwSAOLK4ngzjgW17m5dgrwGs76Q+VyROMqLpZ6ybTWTxaxCldwn8S5nqRfXTU1NTUhAcAPovdX9YWaiFoAAAAASUVORK5CYII=', NULL, '超级管理员', '2023-11-07 10:20:02', '超级管理员', '2023-11-13 18:55:10', '');
+INSERT INTO `soc`.`sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01724017039149973506, '审批', 1721714093297004546, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:approve', '0', NULL, NULL, '超级管理员', '2023-11-13 18:51:07', '', NULL, '');
+
+DELETE FROM `sys_role_menu` WHERE menu_id IN(01721714093297004546,01724017039149973506);
+
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (121, 01721714093297004546);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (121, 01724017039149973506);
+
+-- 出入事项申请
+DELETE FROM sys_menu WHERE id IN(01721714556507549698,01724017221941936130,01724017294985740290,01724017404872310786);
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01721714556507549698, '出入事项申请', 1719176094776664066, 1, '/visitRegister', NULL, NULL, 1, 0, 'C', '0', '0', 'core:letter:query', '0', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABWCAMAAACNSvr7AAAAM1BMVEVHcExsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHRsnHS6r07EAAAAEHRSTlMAIKDQEPAwQIDAUJDgcGCwLB1LQwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAghJREFUWIXtmNGOhCAMRasCgqjD/3/tBtSRAiOtzmazCfdR67GU0gLQ1NTU9FfqRo7ITlrH0qzw50prrQrYkYd1ziDqsD0TGVdzuS76eD2eDRk4cE1HiVinE+50/syWuC8KNQwbcZWMRpE67Lkkb4NsxBVDHJ2pwCVjkXWPoq6/xV3cr3DT/EwXzE2ukBgrL0bG4Q6Ju8sny95VZK6s80w9LGvYzWq3XpNX+XJ7c+caVu7Wc7Ig/KsOhJ3L3FFXNO3WFkTqgwIw6Sxx520WWXTXQDGpJY8bai2q2TYksxSpJYc7+mgogPWMsNmS+dm6gJBjvQB1xNj7afJlzOf6ujAoEOY9Z3lwI+5iKto9UpuX094RlmJw2eviLLorwCiDnyYPbsSVFerOPVPMAgjtO4KRWXGIuNVdREiwqKO5fieUujxz3jo0qrT13OcaV/D3ORe1nkINu8lVMVZWmjidi/q6LM/WHS6qYmvNmsxFDbiUsTe5sbvXqcDjRk0irzIPuOQM43HPJKtlGI97ThvtiMHlymqG8bj7eYG2s2dwfcmRPf2YReVOxlLSgMSd4h1QcFWMNjuhsLl4Rz4fjx5zX4jrKtZ0rnjFnV9/jfvIunEb979zLzdwSAOLK4ngzjgW17m5dgrwGs76Q+VyROMqLpZ6ybTWTxaxCldwn8S5nqRfXTU1NTUhAcAPovdX9YWaiFoAAAAASUVORK5CYII=', NULL, '超级管理员', '2023-11-07 10:21:53', '超级管理员', '2023-11-13 18:54:47', '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01724017221941936130, '新增', 1721714556507549698, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:add', '0', NULL, NULL, '超级管理员', '2023-11-13 18:51:51', '', NULL, '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01724017294985740290, '修改', 1721714556507549698, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:edit', '0', NULL, NULL, '超级管理员', '2023-11-13 18:52:08', '', NULL, '');
+INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01724017404872310786, '删除', 1721714556507549698, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:letter:remove', '0', NULL, NULL, '超级管理员', '2023-11-13 18:52:34', '', NULL, '');
+
+DELETE FROM `sys_role_menu` WHERE menu_id IN(01721714556507549698,01724017221941936130,01724017294985740290,01724017404872310786);
+
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01721714556507549698);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01724017221941936130);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01724017294985740290);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (122, 01724017404872310786);

+ 2 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/letter/vo/CoreOutInRecordVo.java

@@ -118,5 +118,7 @@ public class CoreOutInRecordVo{
     @JsonFormat(pattern = "yyyy年MM月dd日", timezone = "GMT+8")
     private Date endTime;
 
+    private String letterNo;
+
 
 }

+ 34 - 32
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/controller/AppCockpitController.java

@@ -4,11 +4,9 @@ package com.xunmei.core.board.controller;
 import com.xunmei.common.core.web.controller.BaseController;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.core.board.dto.app.AppTaskRankingDto;
-import com.xunmei.core.board.dto.web.TaskStatisticDto;
+import com.xunmei.core.board.service.AppCockpitService;
 import com.xunmei.core.board.service.CockpitService;
-import com.xunmei.core.board.vo.app.AppBaseInfoVo;
-import com.xunmei.core.board.vo.app.AppGa38Vo;
-import com.xunmei.core.board.vo.app.AppTaskRankingVo;
+import com.xunmei.core.board.vo.app.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -19,6 +17,8 @@ import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
 
 /**
  * 驾驶舱
@@ -32,20 +32,16 @@ import java.util.List;
 //@RequiresPermissions("core:cockpit")
 public class AppCockpitController extends BaseController {
     @Resource
-    CockpitService cockpitService;
+    AppCockpitService cockpitService;
 
     /**
      * 履职排名
      */
     @ApiOperation(value = "履职排名")
-    @GetMapping("/taskranking")
+    @GetMapping("/ranking/resumption")
     public AjaxResult taskRanking(AppTaskRankingDto dto) {
-        List<AppTaskRankingVo> vos = new ArrayList<>();
-        AppTaskRankingVo vo=  new AppTaskRankingVo();
-        vo.setOrgName("机构名称");
-        vo.setRate(0.456434354f);
-        vos.add(vo);
-        return success(vos);
+        List<AppTaskRankingVo> rankingVos = cockpitService.taskRanking(dto);
+        return success(rankingVos);
     }
 
 
@@ -55,36 +51,42 @@ public class AppCockpitController extends BaseController {
     @ApiOperation(value = "基础信息")
     @GetMapping("/baseInfo")
     public AjaxResult baseInfo() {
-        AppBaseInfoVo vo=new AppBaseInfoVo();
-        vo.setGa38Info(new HashMap<>());
-        vo.getGa38Info().put("GA38-2021",new AppGa38Vo());
-        vo.getGa38Info().put("GA38-2015",new AppGa38Vo());
+        AppBaseInfoVo vo = new AppBaseInfoVo();
+        vo.setSecurityFacilities(new AppBaseInfoSecurityFacilitiesVo());
+        vo.setBanking2015(new AppGa38RateVo());
+        vo.setOfflineATM2015(new AppGa38RateVo());
+        vo.setBanking2021(new AppGa38RateVo());
+        vo.setOfflineATM2021(new AppGa38RateVo());
 
         vo.setBusinessStoreInfo(new HashMap<>());
-        vo.getBusinessStoreInfo().put("一类库",50);
-        vo.getBusinessStoreInfo().put("二类库",50);
-        vo.getBusinessStoreInfo().put("三类库",50);
-        vo.getBusinessStoreInfo().put("四类库",50);
+        vo.getBusinessStoreInfo().put("一类库", 50);
+        vo.getBusinessStoreInfo().put("二类库", 50);
+        vo.getBusinessStoreInfo().put("三类库", 50);
+        vo.getBusinessStoreInfo().put("四类库", 50);
 
-        vo.setBankPropertyRight(new HashMap<>());
-        vo.getBankPropertyRight().put("自有",100);
-        vo.getBankPropertyRight().put("租赁",100);
-        vo.getBankPropertyRight().put("部分自有+部分租赁",100);
 
         vo.setSecurityPeopleInfo(new HashMap<>());
-        vo.getSecurityPeopleInfo().put("未配备",40);
-        vo.getSecurityPeopleInfo().put("已配备",40);
-        vo.getSecurityPeopleInfo().put("内部人员",40);
-        vo.getSecurityPeopleInfo().put("外部人员",40);
+        vo.getSecurityPeopleInfo().put("未配备", 40);
+        vo.getSecurityPeopleInfo().put("已配备", 40);
+
+        vo.setOnlineATMPropertyRight(new HashMap<>());
+        vo.getOnlineATMPropertyRight().put("穿墙式设备",40);
+        vo.getOnlineATMPropertyRight().put("大堂式设备",40);
+
+        vo.setOfflineATMPropertyRight(new HashMap<>());
+        vo.getOfflineATMPropertyRight().put("穿墙式设备",40);
+        vo.getOfflineATMPropertyRight().put("大堂式设备",40);
         return success(vo);
     }
 
     /**
-     * 统计近期下级视频调阅情况
+     * 总览
      */
-    @ApiOperation(value = "统计近期下级视频调阅情况")
+    @ApiOperation(value = "总览")
     @GetMapping("/overview")
-    public AjaxResult overview() {
-        return success();
+    public AjaxResult overview()   throws ExecutionException, InterruptedException, TimeoutException {
+        AppOverviewVo vo = cockpitService.overview();
+
+        return success(vo);
     }
 }

+ 33 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/app/AppGA38InfoDto.java

@@ -0,0 +1,33 @@
+package com.xunmei.core.board.dto.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * APP驾驶舱总览GA38信息
+ */
+@Data
+public class AppGA38InfoDto {
+    /**
+     * 应完成数
+     */
+    private int total;
+
+    @ApiModelProperty("GA38-2021总达标数")
+    private int  ga382021;
+
+    @ApiModelProperty("本周期的GA38-2021达标数")
+    private int  ga382021current;
+
+    @ApiModelProperty("本周期前的GA38-2021达标数")
+    private int  ga382021prev;
+
+    @ApiModelProperty("本周期前的GA38-2015达标数")
+    private int  ga382015;
+
+    @ApiModelProperty("本周期的GA38-2015达标数")
+    private int  ga382015current;
+
+    @ApiModelProperty("本周期前的GA38-2015达标数")
+    private int  ga382015prev;
+}

+ 27 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/app/AppOverviewTaskInfoDto.java

@@ -0,0 +1,27 @@
+package com.xunmei.core.board.dto.app;
+
+import lombok.Data;
+
+/**
+ * 总览-任务完成情况
+ * 定义为int,方便
+ */
+@Data
+public class AppOverviewTaskInfoDto {
+    /**
+     * 应完成数
+     */
+    private int total;
+    /**
+     * 已完成数
+     */
+    private int completed;
+    /**
+     * 上一周期(月)应完成数
+     */
+    private int prevTotal;
+    /**
+     * 上一周期(月)已完成数
+     */
+    private int prevCompleted;
+}

+ 78 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/mapper/AppCockpitMapper.java

@@ -0,0 +1,78 @@
+package com.xunmei.core.board.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.core.board.dto.app.AppGA38InfoDto;
+import com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto;
+import com.xunmei.core.board.vo.app.AppOverviewVo;
+import org.apache.ibatis.annotations.Param;
+import  java.util.Date;
+
+public interface AppCockpitMapper extends BaseMapper {
+    /**
+     * 总览-机构信息
+     * @param orgId
+     * @return
+     */
+    AppOverviewVo selectOrgOverview(@Param("orgPath") String orgPath);
+
+    /**
+     * 总览-GA38达标数
+     * @param orgPath
+     * @param date
+     * @return
+     */
+    AppGA38InfoDto selectOrgGa38(@Param("orgPath") String orgPath, @Param("date") Date date);
+
+    /**
+     * 履职本周期、上周期完成情况
+     * @param orgPath
+     * @param date
+     * @param prevDate
+     * @return
+     */
+    AppOverviewTaskInfoDto selectOverViewResumptionTaskInfo(@Param("orgPath") String orgPath, @Param("date") Date date,@Param("prevdate") Date prevDate);
+
+    /**
+     * 安全检查本周期、上周期完成情况
+     * @param orgPath
+     * @param date
+     * @param prevDate
+     * @return
+     */
+    AppOverviewTaskInfoDto selectOverViewSafetyCheckTaskInfo(@Param("orgPath") String orgPath, @Param("date") Date date,@Param("prevdate") Date prevDate);
+
+    /**
+     * 教育本周期、上周期完成情况
+     * @param orgPath
+     * @param date
+     * @param prevDate
+     * @return
+     */
+    AppOverviewTaskInfoDto selectOverViewEduTaskInfo(@Param("orgPath") String orgPath, @Param("date") Date date,@Param("prevdate") Date prevDate);
+
+    /**
+     * 预案演练本周期、上周期完成情况
+     * @param orgPath
+     * @param date
+     * @param prevDate
+     * @return
+     */
+    AppOverviewTaskInfoDto selectOverViewDrillTaskInfo(@Param("orgPath") String orgPath, @Param("date") Date date,@Param("prevdate") Date prevDate);
+
+    /**
+     * 教育本周期、上周期完成情况
+     * @param orgPath
+     * @param date
+     * @param prevDate
+     * @return
+     */
+    AppOverviewTaskInfoDto selectOverViewMonitorTaskInfo(@Param("orgPath") String orgPath, @Param("date") Date date,@Param("prevdate") Date prevDate);
+
+    /**
+     * 问题整改情况
+     * @param orgPath
+     * @param date
+     * @return
+     */
+    AppOverviewTaskInfoDto selectOverViewQuestionInfo(@Param("orgPath") String orgPath, @Param("date") Date date);
+}

+ 9 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/AppCockpitService.java

@@ -2,9 +2,12 @@ package com.xunmei.core.board.service;
 
 import com.xunmei.core.board.dto.app.AppTaskRankingDto;
 import com.xunmei.core.board.vo.app.AppBaseInfoVo;
+import com.xunmei.core.board.vo.app.AppOverviewVo;
 import com.xunmei.core.board.vo.app.AppTaskRankingVo;
 
 import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
 
 public interface AppCockpitService {
     /**
@@ -19,4 +22,10 @@ public interface AppCockpitService {
      * @return
      */
     AppBaseInfoVo baseInfo() ;
+
+    /**
+     * 总览
+     * @return
+     */
+    AppOverviewVo overview()  throws ExecutionException, InterruptedException, TimeoutException;
 }

+ 168 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/AppCockpitServiceImpl.java

@@ -1,28 +1,44 @@
 package com.xunmei.core.board.service.impl;
 
 
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.DateRange;
+import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.enums.CycleCommonEnum;
+import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.board.dto.app.AppGA38InfoDto;
+import com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto;
 import com.xunmei.core.board.dto.app.AppTaskRankingDto;
+import com.xunmei.core.board.mapper.AppCockpitMapper;
 import com.xunmei.core.board.mapper.CockpitMapper;
 import com.xunmei.core.board.service.AppCockpitService;
 import com.xunmei.core.board.vo.app.AppBaseInfoVo;
+import com.xunmei.core.board.vo.app.AppOverviewItemVo;
+import com.xunmei.core.board.vo.app.AppOverviewVo;
 import com.xunmei.core.board.vo.app.AppTaskRankingVo;
 import com.xunmei.core.board.vo.web.TaskStatisticVo;
+import com.xunmei.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
+import io.reactivex.rxjava3.core.Single;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 @Service
 public class AppCockpitServiceImpl implements AppCockpitService {
@@ -30,8 +46,16 @@ public class AppCockpitServiceImpl implements AppCockpitService {
     private CockpitMapper cockpitMapper;
 
     @Resource
+    private AppCockpitMapper appCockpitMapper;
+    @Resource
     RemoteOrgService remoteOrgService;
 
+    public static final int TIMEOUT = 3;
+
+    @Autowired
+    @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
     @Override
     public List<AppTaskRankingVo> taskRanking(AppTaskRankingDto dto) {
         DateRange range = DateUtils.getStartAndEnd(dto.getMonth(), CycleCommonEnum.MONTHLY);
@@ -44,6 +68,7 @@ public class AppCockpitServiceImpl implements AppCockpitService {
         List<TaskStatisticVo> childrenStatistic = new ArrayList<>();
         for (SysOrg child : children) {
             TaskStatisticVo childVo = new TaskStatisticVo();
+            childVo.setOrgName(child.getShortName());
             childrenStatistic.add(childVo);
 
             for (TaskStatisticVo orgItem : list) {
@@ -63,6 +88,7 @@ public class AppCockpitServiceImpl implements AppCockpitService {
             } else {
                 vo.setRate(i.getCompletedCount() / i.getTaskTotal());
             }
+            r.add(vo);
         });
         r.sort(new Comparator<AppTaskRankingVo>() {
             @Override
@@ -82,4 +108,142 @@ public class AppCockpitServiceImpl implements AppCockpitService {
     public AppBaseInfoVo baseInfo() {
         return null;
     }
+
+    /**
+     * 总览
+     *
+     * @return
+     */
+    @Override
+    public AppOverviewVo overview() throws ExecutionException, InterruptedException, TimeoutException {
+        SysOrg org = remoteOrgService.selectOrgById(SecurityUtils.getLoginUser().getOrgId(), SecurityConstants.INNER);
+        AppOverviewVo vo = new AppOverviewVo();
+        if (ObjectUtil.isNull(org)) {
+            return vo;
+        }
+
+        Date currentMonth = DateUtil.beginOfMonth(new Date());
+        Date prevMonth = DateUtil.beginOfMonth(new Date()).offset(DateField.MONTH, -1);
+
+        CompletableFuture<AppOverviewVo> orgOverview = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOrgOverview(org.getPath()), threadPoolTaskExecutor
+        );
+        AppGA38InfoDto d1 = appCockpitMapper.selectOrgGa38(org.getPath(), currentMonth);
+        CompletableFuture<AppGA38InfoDto> orgga38 = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOrgGa38(org.getPath(), currentMonth), threadPoolTaskExecutor
+        );
+
+        CompletableFuture<AppOverviewTaskInfoDto> resumption = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOverViewResumptionTaskInfo(org.getPath(), currentMonth, prevMonth), threadPoolTaskExecutor
+        );
+
+        CompletableFuture<AppOverviewTaskInfoDto> safetyCheck = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOverViewSafetyCheckTaskInfo(org.getPath(), currentMonth, prevMonth), threadPoolTaskExecutor
+        );
+
+        CompletableFuture<AppOverviewTaskInfoDto> edu = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOverViewEduTaskInfo(org.getPath(), currentMonth, prevMonth), threadPoolTaskExecutor
+        );
+
+        CompletableFuture<AppOverviewTaskInfoDto> monitor = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOverViewMonitorTaskInfo(org.getPath(), currentMonth, prevMonth), threadPoolTaskExecutor
+        );
+
+        Date currentQuarter = DateUtil.beginOfQuarter(new Date());
+        Date prevQuarter = DateUtil.beginOfMonth(new Date()).offset(DateField.MONTH, -3);
+        CompletableFuture<AppOverviewTaskInfoDto> drill = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOverViewDrillTaskInfo(org.getPath(), currentQuarter, prevQuarter), threadPoolTaskExecutor
+        );
+
+        Date near90 = DateUtil.beginOfDay(new Date()).offset(DateField.DAY_OF_YEAR, -90);
+        CompletableFuture<AppOverviewTaskInfoDto> question = CompletableFuture.supplyAsync(() ->
+                appCockpitMapper.selectOverViewQuestionInfo(org.getPath(), near90), threadPoolTaskExecutor
+        );
+
+        CompletableFuture<Void> allQueries = CompletableFuture.allOf(
+                orgOverview, orgga38, resumption,
+                safetyCheck, edu, drill, question, monitor
+        );
+
+
+        allQueries.get(TIMEOUT, TimeUnit.SECONDS);
+
+        BeanUtils.copyProperties(orgOverview.join(), vo);
+        vo.setGa38(new HashMap<>());
+        vo.getGa38().put("GA382021", computeGa38(orgga38.get().getTotal(), orgga38.get().getGa382021(), orgga38.get().getGa382021current(), orgga38.get().getGa382021prev()));
+        vo.getGa38().put("GA382015", computeGa38(orgga38.get().getTotal(), orgga38.get().getGa382015(), orgga38.get().getGa382015current(), orgga38.get().getGa382015prev()));
+
+        vo.setTaskInfo(new HashMap<>());
+        vo.getTaskInfo().put("日常履职", computeOverviewItem(resumption.get()));
+        vo.getTaskInfo().put("网点自查", computeOverviewItem(safetyCheck.get()));
+        vo.getTaskInfo().put("教育培训", computeOverviewItem(edu.get()));
+        vo.getTaskInfo().put("预案演练", computeOverviewItem(drill.get()));
+        vo.getTaskInfo().put("监控调阅", computeOverviewItem(monitor.get()));
+
+        AppOverviewItemVo questionVo = new AppOverviewItemVo();
+        questionVo.setShouldComplete(question.get().getTotal());
+        questionVo.setCurrentCompletedCount(question.get().getCompleted());
+        if (ObjectUtil.equal(questionVo.getShouldComplete(), 0)) {
+            questionVo.setCurrentCompletedRate(1F);
+        } else {
+            questionVo.setCurrentCompletedRate(questionVo.getCurrentCompletedCount().floatValue() / questionVo.getShouldComplete());
+        }
+        vo.getTaskInfo().put("问题整改", questionVo);
+        return vo;
+    }
+
+    private AppOverviewItemVo computeOverviewItem(AppOverviewTaskInfoDto dto) {
+
+        AppOverviewItemVo vo = new AppOverviewItemVo();
+        if(ObjectUtil.isNull(dto)){
+            vo.setShouldComplete(0);
+            vo.setCurrentCompletedCount(0);
+            vo.setCurrentCompletedRate(0F);
+            vo.setCompare(0F);
+            
+            return  vo;
+        }
+        vo.setCurrentCompletedCount(dto.getCompleted());
+        vo.setShouldComplete(dto.getTotal());
+        if (ObjectUtil.equal(dto.getTotal(), 0) || ObjectUtil.isNull(dto.getTotal())) {
+            vo.setCurrentCompletedRate(1F);
+        } else if (ObjectUtil.equal(dto.getCompleted(), 0) || ObjectUtil.isNull(dto.getCompleted())) {
+            vo.setCurrentCompletedCount(0);
+        } else {
+            vo.setCurrentCompletedRate(((float) dto.getCompleted()) / dto.getTotal());
+        }
+
+        float prevRate = 0;
+        if (ObjectUtil.equal(dto.getPrevTotal(), 0) || ObjectUtil.isNull(dto.getPrevTotal())) {
+            prevRate = 1F;
+        } else if (ObjectUtil.isNotNull(dto.getPrevCompleted())) {
+            prevRate = ((float) dto.getPrevCompleted()) / dto.getPrevTotal();
+        }
+
+        vo.setPrevCompletedRate(prevRate);
+        vo.setCompare(vo.getCurrentCompletedRate() - prevRate);
+        return vo;
+    }
+
+
+    /**
+     * @param total            应完成
+     * @param completed        已完成
+     * @param currentCompleted 本周期完成
+     * @param prevCompleted    上一周期完成
+     * @return
+     */
+    private AppOverviewItemVo computeGa38(int total, int completed, int currentCompleted, int prevCompleted) {
+        AppOverviewItemVo vo = new AppOverviewItemVo();
+        if (ObjectUtil.equal(total, 0)) {
+            vo.setCurrentCompletedRate(1F);
+        } else {
+            vo.setCurrentCompletedRate(((float) completed) / total);
+        }
+
+        vo.setCompare(((float) currentCompleted) - prevCompleted);
+        vo.setCurrentCompletedCount(currentCompleted);
+        return vo;
+    }
+
 }

+ 17 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppBaseInfoSecurityFacilitiesVo.java

@@ -0,0 +1,17 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 安全防范设施改造情况
+ */
+@Data
+public class AppBaseInfoSecurityFacilitiesVo {
+    @ApiModelProperty("2021达标数")
+    private Integer ga382021;
+    @ApiModelProperty("2015达标数")
+    private Integer ga382015;
+    @ApiModelProperty("未达标数")
+    private Integer ga38Unreached;
+}

+ 23 - 7
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppBaseInfoVo.java

@@ -10,15 +10,31 @@ import java.util.Map;
  */
 @Data
 public class AppBaseInfoVo {
-    @ApiModelProperty("GA38达标情况")
-    private Map<String,AppGa38Vo> ga38Info;
 
-    @ApiModelProperty("业务库")
-    private Map<String,Integer> businessStoreInfo;
+    @ApiModelProperty("安全防范设施改造情况")
+    private AppBaseInfoSecurityFacilitiesVo securityFacilities;
+
+    @ApiModelProperty("GA382021-营业网点")
+    private AppGa38RateVo banking2021;
+
+    @ApiModelProperty("GA382021-离行")
+    private AppGa38RateVo offlineATM2021;
+
+    @ApiModelProperty("GA382015-营业网点")
+    private AppGa38RateVo banking2015;
 
-    @ApiModelProperty("营业网点产权信息")
-    private Map<String,Integer> bankPropertyRight;
+    @ApiModelProperty("GA382015-离行")
+    private AppGa38RateVo offlineATM2015;
 
-    @ApiModelProperty("安保人员配备情况")
+    @ApiModelProperty("网点业务库总览(一、二、三、四类库)")
+    private Map<String,Integer> businessStoreInfo;
+
+    @ApiModelProperty("安保人员配备情况(已配备、未配备)")
     private Map<String,Integer> securityPeopleInfo;
+
+    @ApiModelProperty("在行产权信息")
+    private Map<String,Integer> onlineATMPropertyRight;
+
+    @ApiModelProperty("离行产权信息")
+    private Map<String,Integer> offlineATMPropertyRight;
 }

+ 2 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppGa38Vo.java → soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppGa38RateVo.java

@@ -7,8 +7,8 @@ import lombok.Data;
  * app驾驶舱机构GA38达标情况
  */
 @Data
-public class AppGa38Vo{
+public class AppGa38RateVo {
     private  Integer total;
 
-    private double rate;
+    private float rate;
 }

+ 23 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppOverviewItemVo.java

@@ -0,0 +1,23 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class AppOverviewItemVo {
+    @ApiModelProperty("当前周期完成率,近90天整改率")
+    private Float currentCompletedRate;
+
+    @ApiModelProperty("当前周期应完成")
+    private Integer shouldComplete;
+
+    @ApiModelProperty("当前周期完成数,已整改")
+    private Integer currentCompletedCount;
+
+    @ApiModelProperty("上一周期完成率,")
+    private Float prevCompletedRate;
+
+    @ApiModelProperty("本周期与上一周期的比")
+    private  Float compare;
+}

+ 35 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppOverviewVo.java

@@ -0,0 +1,35 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 总览
+ */
+@Data
+public class AppOverviewVo {
+    @ApiModelProperty("行社数量")
+    private Integer hangsheCount;
+    @ApiModelProperty("营业网点数量")
+    private Integer bankingCount;
+    @ApiModelProperty("中心业务库数量")
+    private Integer centerStoreCount;
+    @ApiModelProperty("网点业务库数量")
+    private Integer bankingStoreCount;
+    @ApiModelProperty("在行式自动银行数量")
+    private  Integer onlineATMCount;
+    @ApiModelProperty("离行式自动银行数量")
+    private Integer offlineATMCount;
+    @ApiModelProperty("大堂式设备数量")
+    private Integer lobbyDeviceCount;
+    @ApiModelProperty("穿墙式设备数量")
+    private Integer throughwallDeviceCount;
+
+    @ApiModelProperty("GA38信息:GA382021、GA382015")
+    private Map<String,AppOverviewItemVo>  ga38;
+
+    @ApiModelProperty("各类任务信息:日常履职、网点自查、教育培训、预案演练、监控调阅、问题整改")
+    private Map<String,AppOverviewItemVo>  taskInfo;
+}

+ 19 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticInOutVo.java

@@ -0,0 +1,19 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 综合数据-出入管理
+ */
+@Data
+public class AppSyntheticInOutVo {
+    @ApiModelProperty("总数")
+    private  Integer total;
+    @ApiModelProperty("紧急出入")
+    private Integer emergency;
+    @ApiModelProperty("临时出入")
+    private Integer temporary;
+    @ApiModelProperty("职能部门出入")
+    private Integer department;
+}

+ 17 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticOtherVo.java

@@ -0,0 +1,17 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 综合数据-其它
+ */
+@Data
+public class AppSyntheticOtherVo {
+    @ApiModelProperty("教育培训")
+    private AppSyntheticTaskInfoVo edu;
+    @ApiModelProperty("监控调阅")
+    private AppSyntheticTaskInfoVo monitor;
+    @ApiModelProperty("出入管理")
+    private AppSyntheticInOutVo inout;
+}

+ 21 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticQuestionVo.java

@@ -0,0 +1,21 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 综合数据-隐患整改
+ */
+@Data
+public class AppSyntheticQuestionVo {
+    @ApiModelProperty("各种状态下的整改数据:已确认、有异议 、已取消、待整改、未整改、已整改、整改率")
+    private Map<String,Float>  rateByState;
+
+    @ApiModelProperty("每日履职:隐患数、已整改、整改率")
+    private  Map<String,Float> resumption;
+
+    @ApiModelProperty("安全检查:隐患数、有异议、已取消、已确认、已整改、整改率")
+    private  Map<String,Float> safetyCheck;
+}

+ 18 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticResumptionVo.java

@@ -0,0 +1,18 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 综合数据-日常履职
+ */
+@Data
+public class AppSyntheticResumptionVo {
+    @ApiModelProperty("各类型完成率")
+    private Map<String,Float> rateByType;
+
+    @ApiModelProperty("各类型完成情况")
+    private Map<String,AppSyntheticTaskInfoVo> infoByType;
+}

+ 20 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticSafetycheckTaskVo.java

@@ -0,0 +1,20 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 综合数据-安全检查-任务信息
+ */
+@Data
+public class AppSyntheticSafetycheckTaskVo {
+    @ApiModelProperty("隐患数")
+    private Integer questionCount;
+    @ApiModelProperty("应检查")
+    private  Integer shouldCheckCount;
+    @ApiModelProperty("已检查")
+    private  Integer checkedCount;
+    @ApiModelProperty("完成率")
+    private Float completedCount;
+}

+ 18 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticSafetycheckVo.java

@@ -0,0 +1,18 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 综合数据-安全检查
+ */
+@Data
+public class AppSyntheticSafetycheckVo {
+    @ApiModelProperty("完成率:网点自查、全面检查、办事处检查、省联社检查、阶段性检查、专项检查、其他检查")
+    private Map<String,Float> rateByType;
+
+    @ApiModelProperty("完成率:网点自查、全面检查、办事处检查、省联社检查、阶段性检查、专项检查、其他检查")
+    private Map<String,AppSyntheticSafetycheckTaskVo> taskInfoByType;
+}

+ 19 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppSyntheticTaskInfoVo.java

@@ -0,0 +1,19 @@
+package com.xunmei.core.board.vo.app;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+/**
+ * 综合数据-任务完成情况
+ */
+public class AppSyntheticTaskInfoVo {
+    @ApiModelProperty("应完成")
+    private float shouldCompleteCount;
+
+    @ApiModelProperty("已完成")
+    private float completedCount;
+
+    @ApiModelProperty("完成率")
+    private float completedRate;
+}

+ 2 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/controller/CoreIntroduceLetterController.java

@@ -37,7 +37,7 @@ public class CoreIntroduceLetterController extends BaseController {
  * 查询介绍信列表
  */
 @ApiOperation(value = "查询CoreIntroduceLetter列表")
-@RequiresPermissions("core:letter:list")
+@RequiresPermissions("core:letter:query")
 @GetMapping("/list")
     public TableDataInfo<CoreIntroduceLetterVo> list(CoreIntroduceLetterRequestDto requestDto) {
 
@@ -57,7 +57,7 @@ public class CoreIntroduceLetterController extends BaseController {
      * 获取介绍信详细信息
      */
     @ApiOperation(value = "获取CoreIntroduceLetter详细信息")
-//    @RequiresPermissions("core:letter:query")
+    @RequiresPermissions("core:letter:query")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id) {
         return success(coreIntroduceLetterService.selectCoreIntroduceLetterById(id));

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/controller/CoreOutInRecordController.java

@@ -54,7 +54,7 @@ public class CoreOutInRecordController extends BaseController {
      * 新增人员出入登记
      */
     @ApiOperation(value = "新增CoreOutInRecord")
-//    @RequiresPermissions("core:record:add")
+    @RequiresPermissions("core:record:add")
     @Log(title = "人员出入登记" , businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody CoreOutInRecord coreOutInRecord) {

+ 22 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/service/impl/CoreIntroduceLetterServiceImpl.java

@@ -1,7 +1,9 @@
 package com.xunmei.core.letter.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -328,6 +330,25 @@ public class CoreIntroduceLetterServiceImpl extends ServiceImpl<CoreIntroduceLet
      */
     @Override
     public void timedTaskUpdateLetterStatus() {
-
+        final LambdaQueryWrapper<CoreIntroduceLetter> oqw = new LambdaQueryWrapper<CoreIntroduceLetter>();
+        oqw.ne(CoreIntroduceLetter::getStatus,2).eq(CoreIntroduceLetter::getDeleted,0);
+        List<CoreIntroduceLetter> coreIntroduceLetters = coreIntroduceLetterMapper.selectList(oqw);
+        List<CoreIntroduceLetter> overdueLettersList=new ArrayList<>();
+        if(ObjectUtil.isNotEmpty(coreIntroduceLetters))
+        {
+            Date currentDate =DateUtil.beginOfDay(new Date());
+
+            coreIntroduceLetters.stream().forEach(x->{
+                final int result = currentDate.compareTo(x.getEndTime());
+                if(result>0)
+                {
+                    x.setStatus(2);
+                    overdueLettersList.add(x);
+                }
+            });
+        }
+        if(ObjectUtil.isNotEmpty(overdueLettersList)){
+            saveOrUpdateBatch(overdueLettersList);
+        }
     }
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -401,6 +401,9 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         } else if (appPlan.getPlanExec() == 4) {//营业终 营业终了-23.59.59
             planstartTime = time1.setField(DateField.HOUR_OF_DAY, Integer.parseInt(closetime.split(":")[0])).setField(DateField.MINUTE, Integer.parseInt(closetime.split(":")[1])).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
             planendTime = DateUtil.endOfDay(time2).setField(DateField.MILLISECOND, 0);
+        }else if (appPlan.getPlanExec() == 5){ //非营业时间
+            planstartTime = time1.setField(DateField.HOUR_OF_DAY, Integer.parseInt(closetime.split(":")[0])).setField(DateField.MINUTE, Integer.parseInt(closetime.split(":")[1])).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
+            planendTime = DateUtil.endOfDay(time2).setField(DateField.MILLISECOND, 0);
         }
 
         return buildResumptions(appPlan, execOrg, planstartTime, planendTime, new ArrayList<>(), workTimes);

+ 107 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/board/AppCockpitMapper.xml

@@ -0,0 +1,107 @@
+<?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.xunmei.core.board.mapper.AppCockpitMapper">
+    <select id="selectOrgOverview" resultType="com.xunmei.core.board.vo.app.AppOverviewVo">
+        SELECT sum(IF(o.type = 3, 1, 0))                                                    as hangsheCount,
+               sum(IF(o.type = 4, 1, 0))                                                    as bankingCount,
+               sum(IF(o.type = 6, 1, 0))                                                    as centerStoreCount,
+               sum(IF(o.type = 8, 1, 0))                                                    as bankingStoreCount,
+               sum(IF(o.type = 5, 1, 0))                                                    as offlineATMCount,
+               sum(IF(oe.self_service_bank is not null, 1, 0))                              as onlineATMCount,
+               sum(IF(oe.lobby_equipment is not null, oe.lobby_equipment, 0))               as lobbyDeviceCount,
+               sum(IF(oe.wall_penetrating_equipment = 4, oe.wall_penetrating_equipment, 0)) as throughwallDeviceCount
+        from sys_org o
+                 LEFT JOIN sys_org_extend oe on o.id = oe.org_id
+        WHERE o.deleted = 0
+          and o.is_lock = 0
+          and o.path like concat(#{orgPath}, '%')
+    </select>
+    <select id="selectOrgGa38" resultType="com.xunmei.core.board.dto.app.AppGA38InfoDto">
+        SELECT count(0)            as total,
+               sum(m.ga382021)     as ga382021,
+               sum(m.ga382021current) as ga382021current,
+               sum(m.ga382021prev) as ga382021prev,
+               sum(m.ga382015)     as ga382015,
+               sum(m.ga382015current) as ga382015current,
+               sum(m.ga382021prev) as ga382021prev
+        from sys_org o
+                 LEFT JOIN (SELECT org_id,
+                                   IF
+                                       (standard = 1, 1, 0)                                         AS ga382021,
+                                   IF
+                                       (standard = 1, IF(date_of_compliance >= #{date}, 1, 0), 0) AS ga382021current,
+                                   IF
+                                       (standard = 1, IF(date_of_compliance &lt; #{date}, 1, 0), 0) AS ga382021prev,
+                                   IF
+                                       (standard = 2, 1, 0)                                         AS ga382015,
+                                   IF
+                                       (standard = 2, IF(date_of_compliance >= #{date}, 1, 0), 0) AS ga382015current,
+                                   IF
+                                       (standard = 2, IF(date_of_compliance &lt; #{date}, 1, 0), 0) AS ga382015prev
+                            FROM sys_org_physical_defense_construction
+                            WHERE type = 4
+                               OR type = 5
+                            GROUP BY org_id) m on o.id = m.org_id
+        WHERE o.deleted = 0
+          and o.is_lock = 0
+          and (o.type = 4 OR o.type = 5)
+          and o.path like concat(#{orgPath}, '%')
+    </select>
+    <select id="selectOverViewResumptionTaskInfo" resultType="com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto">
+        SELECT sum(if(ymd_date >= #{date}, 1, 0))                          as count,
+               sum(if(ymd_date >= #{date}, (if(`status` = 3, 1, 0)), 0))   as completed,
+               sum(if(ymd_date &lt; #{date}, 1, 0))                        as prevcount,
+               sum(if(ymd_date &lt; #{date}, (if(`status` = 3, 1, 0)), 0)) as prevcompleted
+        FROM core_resumption
+        WHERE ymd_date >= #{prevdate}
+          and org_path like concat(#{orgPath}, '%')
+    </select>
+
+    <select id="selectOverViewSafetyCheckTaskInfo" resultType="com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto">
+        SELECT sum(if(t.ymd_date >= #{date}, 1, 0))                          as count,
+               sum(if(t.ymd_date >= #{date}, (if(t.`status` = 3, 1, 0)), 0))   as completed,
+               sum(if(t.ymd_date &lt; #{date}, 1, 0))                        as prevcount,
+               sum(if(t.ymd_date &lt; #{date}, (if(t.`status` = 3, 1, 0)), 0)) as prevcompleted
+        FROM core_safety_task t
+        INNER JOIN core_safecheck_plan p on t.plan_id=p.id and p.check_type=1
+        WHERE ymd_date >= #{prevdate}
+          and org_path like concat(#{orgPath}, '%')
+    </select>
+
+    <select id="selectOverViewEduTaskInfo" resultType="com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto">
+        SELECT sum(if(start_date >= #{date}, 1, 0))                          as count,
+               sum(if(start_date >= #{date}, (if(`status` = 4, 1, 0)), 0))   as completed,
+               sum(if(start_date &lt; #{date}, 1, 0))                        as prevcount,
+               sum(if(start_date &lt; #{date}, (if(`status` = 4, 1, 0)), 0)) as prevcompleted
+        FROM core_edu_training_task
+        WHERE start_date >= #{prevdate}
+          and org_path like concat(#{orgPath}, '%')
+    </select>
+
+    <select id="selectOverViewDrillTaskInfo" resultType="com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto">
+        SELECT sum(if(start_date >= #{date}, 1, 0))                          as count,
+               sum(if(start_date >= #{date}, (if(`status` = 4, 1, 0)), 0))   as completed,
+               sum(if(start_date &lt; #{date}, 1, 0))                        as prevcount,
+               sum(if(start_date &lt; #{date}, (if(`status` = 4, 1, 0)), 0)) as prevcompleted
+        FROM core_drill_task
+        WHERE start_date >= #{prevdate}
+          and org_path like concat(#{orgPath}, '%')
+    </select>
+
+    <select id="selectOverViewMonitorTaskInfo" resultType="com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto">
+        SELECT sum(if(ymd_date >= #{date}, 1, 0))                          as count,
+               sum(if(ymd_date >= #{date}, (if(`status` = 3, 1, 0)), 0))   as completed,
+               sum(if(ymd_date &lt; #{date}, 1, 0))                        as prevcount,
+               sum(if(ymd_date &lt; #{date}, (if(`status` = 3, 1, 0)), 0)) as prevcompleted
+        FROM core_monitoring_retrieval_task
+        WHERE ymd_date >= #{prevdate}
+          and org_path like concat(#{orgPath}, '%')
+    </select>
+    <select id="selectOverViewQuestionInfo" resultType="com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto">
+        SELECT sum(if(confirm_status >= 2, 1, 0)) as total,
+               sum(if(reform_status = 11, 1, 0))  as completed
+        FROM core_question
+        WHERE submit_time >= #{date}
+          and org_path like concat(#{orgPath}, '%')
+    </select>
+</mapper>

+ 4 - 52
soc-modules/soc-modules-core/src/main/resources/mapper/letter/CoreOutInRecordMapper.xml

@@ -94,16 +94,10 @@
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="id != null">id,
             </if>
-            <if test="userName != null">user_name,
-            </if>
-            <if test="companyName != null">company_name,
-            </if>
-            <if test="idCard != null">id_card,
-            </if>
-            <if test="imgFile != null">img_file,
-            </if>
             <if test="letterId != null">letter_id,
             </if>
+            <if test="letterUserId != null">letter_user_id,
+            </if>
             <if test="createBy != null">create_by,
             </if>
             <if test="createTime != null">create_time,
@@ -122,16 +116,10 @@
         <trim prefix="values (" suffix=")" suffixOverrides=",">
                     <if test="id != null">#{id},
                     </if>
-                    <if test="userName != null">#{userName},
-                    </if>
-                    <if test="companyName != null">#{companyName},
-                    </if>
-                    <if test="idCard != null">#{idCard},
-                    </if>
-                    <if test="imgFile != null">#{imgFile},
-                    </if>
                     <if test="letterId != null">#{letterId},
                     </if>
+                    <if test="letterUserId != null">#{letterUserId},
+                    </if>
                     <if test="createBy != null">#{createBy},
                     </if>
                     <if test="createTime != null">#{createTime},
@@ -152,48 +140,12 @@
     <update id="updateCoreOutInRecord" parameterType="com.xunmei.common.core.domain.letter.domain.CoreOutInRecord">
         update core_out_in_record
         <trim prefix="SET" suffixOverrides=",">
-                    <if test="userName != null">user_name =
-                        #{userName},
-                    </if>
-                    <if test="companyName != null">company_name =
-                        #{companyName},
-                    </if>
-                    <if test="idCard != null">id_card =
-                        #{idCard},
-                    </if>
-                    <if test="imgFile != null">img_file =
-                        #{imgFile},
-                    </if>
-                    <if test="letterId != null">letter_id =
-                        #{letterId},
-                    </if>
-                    <if test="createBy != null">create_by =
-                        #{createBy},
-                    </if>
-                    <if test="createTime != null">create_time =
-                        #{createTime},
-                    </if>
                     <if test="arrivalTime != null">arrival_time =
                         #{arrivalTime},
                     </if>
                     <if test="departureTime != null">departure_time =
                         #{departureTime},
                     </if>
-                    <if test="orgId != null">org_id =
-                        #{orgId},
-                    </if>
-                    <if test="accompanyingPerson != null">accompanying_person =
-                        #{accompanyingPerson},
-                    </if>
-                    <if test="letterFile != null">letter_file =
-                        #{letterFile},
-                    </if>
-                    <if test="type != null">type =
-                        #{type},
-                    </if>
-                    <if test="checkImage != null">check_image =
-                        #{checkImage},
-                    </if>
         </trim>
         where id = #{id}
     </update>

+ 0 - 27
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreLetter.java

@@ -1,27 +0,0 @@
-package com.xunmei.job.task;
-
-import cn.hutool.core.lang.UUID;
-import com.alibaba.fastjson2.JSON;
-import com.xunmei.common.core.web.domain.AjaxResult;
-import com.xunmei.system.api.RemoteDrillService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Date;
-
-@Slf4j
-@Component("CoreLetter")
-public class CoreLetter {
-
-    @Autowired
-    RemoteDrillService remoteDrillService;
-
-
-    public void updateLetterStatus() {
-        String id = UUID.fastUUID().toString();
-        log.info("开始执行预案演练定时任务,处理未完成的数据的任务数据状态为 已逾期,当前任务 id:{}", id);
-        AjaxResult result = remoteDrillService.updateDrillTaskStatus();
-        log.info("执行预案演练定时任务结束....,处理未完成的数据的任务数据状态为 已逾期,当前任务 id:{},结果:{}", id, JSON.toJSONString(result));
-    }
-}

+ 26 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreLetterTask.java

@@ -0,0 +1,26 @@
+package com.xunmei.job.task;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson2.JSON;
+import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.R;
+import com.xunmei.system.api.RemoteLetterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component("CoreLetterTask")
+public class CoreLetterTask {
+
+    @Autowired
+    RemoteLetterService remoteLetterService;
+
+
+    public void updateLetterStatus() {
+        String id = UUID.fastUUID().toString();
+        log.info("开始执行介绍信修改状态定时任务,超过出入申请有效期的数据状态修改为 已逾期,当前任务 id:{}", id);
+        R<Boolean> booleanR = remoteLetterService.updateLetterStatus(SecurityConstants.INNER);
+        log.info("执行介绍信修改状态定时任务,超过出入申请有效期的数据状态修改为 已逾期已结束,当前任务 id:{},结果:{}", id, JSON.toJSONString(booleanR));
+    }
+}