浏览代码

合并0.0.6

jiawuxian 1 年之前
父节点
当前提交
0e66f40a4e
共有 89 个文件被更改,包括 1856 次插入641 次删除
  1. 11 0
      project_data/sql/0.0.6/quartz/quartz.sql
  2. 26 157
      project_data/sql/0.0.6/soc/soc.sql
  3. 8 0
      project_data/sql/0.0.6/升级说明
  4. 3 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWeatherTaskService.java
  5. 6 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWorkTimeService.java
  6. 1 1
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/SysUserInformation.java
  7. 5 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWeatherFallbackFactory.java
  8. 5 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWorkTimesFallbackFactory.java
  9. 3 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillTaskRecPageDto.java
  10. 3 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillTaskRecPageVo.java
  11. 5 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/SysLearningMaterialsPageVo.java
  12. 3 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/worktime/domain/SysWorkTime.java
  13. 7 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/drill/DrillRecStatus.java
  14. 14 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/controller/TMonitoringRetrievalPlanController.java
  15. 7 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/CoreMonitoringTaskRegistrationServiceImpl.java
  16. 22 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java
  17. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/app/AppSyntheticQuestionDto.java
  18. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/WebSyntheticQuestionDto.java
  19. 9 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/mapper/CockpitMapper.java
  20. 10 9
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/AppCockpitServiceImpl.java
  21. 65 28
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/CockpitServiceImpl.java
  22. 5 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/app/AppOverviewItemVo.java
  23. 6 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/QuestionStatisticVo.java
  24. 3 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillTaskMapper.java
  25. 21 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  26. 107 17
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  27. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingTaskMapper.java
  28. 20 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  29. 35 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  30. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/controller/CoreEvaluateTaskController.java
  31. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/dto/EvaluateTaskStatisticsDTO.java
  32. 8 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/service/impl/CoreEvaluateTaskServiceImpl.java
  33. 19 10
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/panel/service/impl/PanelServiceImpl.java
  34. 6 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/QuestionReformEnum.java
  35. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/domain/Question.java
  36. 7 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/dto/QuestionExportDto.java
  37. 4 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/AppQuestionServiceImpl.java
  38. 10 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionReformServiceImpl.java
  39. 15 9
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java
  40. 5 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ResumptionController.java
  41. 6 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionServiceImpl.java
  42. 4 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/mapper/ResumptionMapper.java
  43. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/IResumptionRecordService.java
  44. 153 41
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java
  45. 83 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionRecordServiceImpl.java
  46. 5 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionServiceImpl.java
  47. 37 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java
  48. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusinessService.java
  49. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/controller/CoreMonitoringRetrievalTaskController.java
  50. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/ICoreMonitoringRetrievalTaskBuilderService.java
  51. 29 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskBuilderServiceImpl.java
  52. 19 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/job/SafetyCheckJobBusiness.java
  53. 13 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java
  54. 8 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskServiceImpl.java
  55. 13 6
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/SafetyCheckRegisterSericeImpl.java
  56. 2 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/weather/service/impl/WeatherWarningServiceImpl.java
  57. 8 7
      soc-modules/soc-modules-core/src/main/resources/mapper/board/AppCockpitMapper.xml
  58. 70 2
      soc-modules/soc-modules-core/src/main/resources/mapper/board/CockpitMapper.xml
  59. 21 3
      soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml
  60. 11 0
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml
  61. 97 21
      soc-modules/soc-modules-core/src/main/resources/mapper/question/QuestionMapper.xml
  62. 1 1
      soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/MonitorAccessReportMapper.xml
  63. 52 30
      soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/ResumptionReportMapper.xml
  64. 2 2
      soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/SafetyInspectMapper.xml
  65. 18 3
      soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionMapper.xml
  66. 1 0
      soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionRecordMapper.xml
  67. 2 2
      soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml
  68. 1 1
      soc-modules/soc-modules-core/src/main/resources/mapper/safetycheck/CoreSafetyTaskMapper.xml
  69. 4 4
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java
  70. 10 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/WeatherTask.java
  71. 7 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/WorkTimeTask.java
  72. 6 6
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeptController.java
  73. 2 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysRoleController.java
  74. 7 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeSetController.java
  75. 2 2
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysOrgMapper.java
  76. 3 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysWorkTimeMapper.java
  77. 2 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeSetService.java
  78. 4 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgExtendServiceImpl.java
  79. 186 82
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java
  80. 5 7
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysRoleServiceImpl.java
  81. 36 25
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java
  82. 226 17
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeSetServiceImpl.java
  83. 1 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/OrgPhysicalDefenseConstructionExport.java
  84. 4 4
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/SecurityWorkExport.java
  85. 3 2
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysNfcBindMapper.xml
  86. 151 90
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml
  87. 6 0
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysRoleMapper.xml
  88. 5 2
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysUserInformationMapper.xml
  89. 28 2
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysWorkTimeMapper.xml

+ 11 - 0
project_data/sql/0.0.6/quartz/quartz.sql

@@ -0,0 +1,11 @@
+-- 每天更新履职任务状态 调整为没小时执行一次,解决营业前、中、后的任务 到时间后任务状态变为已逾期的问题
+UPDATE `sys_job` SET `cron_expression` = '0 0 * * * ?' WHERE `job_name` = '每天更新履职任务状态';
+
+-- 更新作息生成周期 在每年11月15日自动生成下一年的作息
+UPDATE `sys_job`
+SET
+    `invoke_target` = 'WorkTimeTask.generateNextYear',
+    `cron_expression` = '1 1 0 15 11 ?',
+    `job_name` = '生成下一年作息'
+WHERE
+        `job_name` = '生成下个月作息';

+ 26 - 157
project_data/sql/0.0.6/soc/soc.sql

@@ -9,9 +9,9 @@ CREATE PROCEDURE schema_change () BEGIN
 	ADD COLUMN `affiliated_bank` varchar(100) NULL COMMENT '机构所属行社' AFTER `affiliated_area`;
 
 	END IF;
-
-	 IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE ()
-		AND TABLE_NAME = 'sys_org' AND COLUMN_NAME = 'affiliated_area' )
+	
+	 IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE () 
+		AND TABLE_NAME = 'sync_fjnx_org' AND COLUMN_NAME = 'affiliated_area' )
 	THEN
 		ALTER TABLE `sync_fjnx_org`
 		ADD COLUMN `affiliated_area` varchar(100) NULL COMMENT '机构所属地区',
@@ -19,168 +19,37 @@ CREATE PROCEDURE schema_change () BEGIN
 
 	END IF;
 
+	 IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE ()
+		AND TABLE_NAME = 'core_drill_task' AND COLUMN_NAME = 'unrec_status' )
+	THEN
+        ALTER TABLE `core_drill_task`
+        ADD COLUMN `unrec_status` int NULL COMMENT '不推荐标识: 0 未设置不推荐,6 不推荐(保留普通案例) 7   不推荐(保留行社优秀案例) 8 不推荐(保留地区优秀案例)' AFTER `rec_status`;
+
+END IF;
+
 END ??
 DELIMITER ;
 CALL schema_change ();
 
+UPDATE sys_menu m set m.menu_name='预案演练情况表' WHERE m.menu_name ='演练统计排行';
+UPDATE sys_menu m set m.menu_name='教育培训情况表' WHERE m.menu_name ='培训统计排行';
+UPDATE sys_menu m set m.menu_name='监控调阅情况表' WHERE m.menu_name ='监控调阅统计报表';
+UPDATE sys_menu m set m.menu_name='履职情况表' WHERE m.menu_name ='履职报表';
 
+UPDATE sys_dict_data set dict_label='普通案例' WHERE dict_type='drill_task_rec_status' AND dict_label='正常案例';
 
-drop table if exists mediator_video_days_check;
-CREATE TABLE `mediator_video_days_check` (
-     `id` bigint NOT NULL,
-     `create_by` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
-     `create_time` datetime DEFAULT NULL COMMENT '创建人名称',
-     `update_by` varchar(125) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改人名称',
-     `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-     `org_id` bigint DEFAULT '0' COMMENT '机构',
-     `org_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构名称',
-     `org_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '机构',
-     `channel_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道序号',
-     `channel_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道的名称',
-     `check_date` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '计划存储天数起止日期',
-     `equipment_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '录像机唯一标识',
-     `lose_date` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '计划存储天数起止日期',
-     `plan_days` int DEFAULT '0' COMMENT '计划存储总天数',
-     `real_days` int DEFAULT '0' COMMENT '计划日期内实际存储总天数',
-     `equipment_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-     `status` int DEFAULT NULL COMMENT '是否报警 0:未报警,1:报警',
-     `earliest_video_time` datetime DEFAULT NULL COMMENT '最早录像日期',
-     PRIMARY KEY (`id`) USING BTREE,
-     KEY `idx_user_orgId` (`org_id`) USING BTREE,
-     KEY `idx_user_orgPath` (`org_path`) USING BTREE,
-     KEY `idx_code` (`equipment_code`(191),`channel_code`(191))
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='录像机天数检查';
-
-drop table if exists mediator_video_days_check_log;
-CREATE TABLE `mediator_video_days_check_log` (
-         `id` bigint NOT NULL,
-         `create_by` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
-         `create_time` datetime DEFAULT NULL COMMENT '创建人名称',
-         `update_by` varchar(125) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改人名称',
-         `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-         `org_id` bigint DEFAULT '0' COMMENT '机构',
-         `org_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构名称',
-         `org_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '机构',
-         `channel_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道序号',
-         `channel_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道的名称',
-         `check_date` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '计划存储天数起止日期',
-         `equipment_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '录像机唯一标识',
-         `lose_date` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '计划存储天数起止日期',
-         `plan_days` int DEFAULT '0' COMMENT '计划存储总天数',
-         `real_days` int DEFAULT '0' COMMENT '计划日期内实际存储总天数',
-         `video_days_check_id` bigint DEFAULT NULL COMMENT '录像机天数检查ID',
-         `status` int DEFAULT NULL,
-         `earliest_video_time` datetime DEFAULT NULL COMMENT '最早录像日期',
-         `equipment_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-         PRIMARY KEY (`id`) USING BTREE,
-         KEY `idx_user_orgId` (`org_id`) USING BTREE,
-         KEY `idx_user_orgPath` (`org_path`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='录像机天数检查日志';
+DELETE FROM `sys_dict_data` WHERE `dict_type`='drill_task_rec_status' AND `dict_label` like '不推荐%';
+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 (6, '不推荐(保留普通案例)', '6', 'drill_task_rec_status', NULL, 'default', 'N', '0', '超级管理员', '2024-01-24 16:29:52', '超级管理员', '2024-01-24 16:42:49', 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 (7, '不推荐(保留行社优秀案例)', '7', 'drill_task_rec_status', NULL, 'default', 'N', '0', '超级管理员', '2024-01-24 16:30:53', '超级管理员', '2024-01-24 16:42:56', 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 (8, '不推荐(保留地区优秀案例)', '8', 'drill_task_rec_status', NULL, 'default', 'N', '0', '超级管理员', '2024-01-24 16:36:35', '超级管理员', '2024-01-24 16:43:02', NULL);
 
-drop table if exists mediator_video_integrity_check;
-CREATE TABLE `mediator_video_integrity_check` (
-          `id` bigint NOT NULL,
-          `create_by` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
-          `create_time` datetime DEFAULT NULL COMMENT '创建人名称',
-          `update_by` varchar(125) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改人名称',
-          `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-          `org_id` bigint DEFAULT '0' COMMENT '机构',
-          `org_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构名称',
-          `org_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '机构',
-          `channel_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道序号',
-          `channel_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道的名称',
-          `check_span` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '检查日期录像计划规则集合',
-          `equipment_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '录像机唯一标识',
-          `lose_span` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '检查日期录像丢失情况集合',
-          `record_date` date DEFAULT NULL COMMENT '录像情况检查日期',
-          `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备名称',
-          `status` int DEFAULT NULL COMMENT '0:正常 1:部分丢失 2:全部丢失',
-          `equipment_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-          `plan_days` int DEFAULT NULL COMMENT '录像计划存储多少天',
-          `lose_span_old` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '录像机唯一标识',
-          PRIMARY KEY (`id`) USING BTREE,
-          KEY `idx_user_orgId` (`org_id`) USING BTREE,
-          KEY `idx_user_orgPath` (`org_path`) USING BTREE,
-          KEY `idx_code` (`channel_code`(191),`equipment_code`(191)),
-          KEY `idx_recordDate_orgPath_status` (`record_date`,`org_path`,`status`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='录像机完整性检查表';
+DELETE FROM `sys_dict_data` WHERE `dict_type`='app_question_status' AND `dict_label` = '逾期整改';
+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 (12, '逾期整改', '13', 'app_question_status', NULL, 'default', 'N', '0', '超级管理员', '2024-01-29 10:21:47', '', NULL, NULL);
 
+DELETE FROM `sys_dict_data` WHERE `dict_type`='question_reform_status' AND `dict_label` = '逾期整改';
+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, '逾期整改', '13', 'question_reform_status', NULL, 'default', 'N', '0', '超级管理员', '2024-01-29 11:12:41', '超级管理员', '2024-01-29 11:12:53', NULL);
 
-drop table if exists mediator_video_diagnosis;
-CREATE TABLE `mediator_video_diagnosis` (
-    `id` bigint NOT NULL,
-    `create_by` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
-    `create_time` datetime DEFAULT NULL COMMENT '创建人名称',
-    `update_by` varchar(125) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改人名称',
-    `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-    `org_id` bigint DEFAULT '0' COMMENT '机构',
-    `org_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构名称',
-    `org_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '机构',
-    `alarm_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '报警/恢复时间',
-    `channel_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道序号',
-    `channel_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道的名称',
-    `detail_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '质量当前状态详情',
-    `equipment_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '录像机唯一标识',
-    `is_alarm` int DEFAULT NULL COMMENT '报警状态标识',
-    `equipment_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-    PRIMARY KEY (`id`) USING BTREE,
-    KEY `idx_user_orgId` (`org_id`) USING BTREE,
-    KEY `idx_user_orgPath` (`org_path`) USING BTREE,
-    KEY `idx_code` (`channel_code`(191),`equipment_code`(191))
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='视频质量诊断结果';
+-- 刷新隐患问题状态 已关闭只待办 异议提出的已关闭
+UPDATE core_question set confirm_status =2 WHERE confirm_status =3 AND reform_status =11;
 
-drop table if exists mediator_video_diagnosis_log;
-CREATE TABLE `mediator_video_diagnosis_log` (
-        `id` bigint NOT NULL,
-        `create_by` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
-        `create_time` datetime DEFAULT NULL COMMENT '创建人名称',
-        `update_by` varchar(125) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改人名称',
-        `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-        `org_id` bigint DEFAULT '0' COMMENT '机构',
-        `org_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构名称',
-        `org_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '机构',
-        `alarm_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '报警/恢复时间',
-        `channel_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道序号',
-        `channel_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '通道的名称',
-        `detail_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '质量当前状态详情',
-        `equipment_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '录像机唯一标识',
-        `is_alarm` int DEFAULT NULL COMMENT '报警状态标识',
-        `video_diagnosis_id` bigint DEFAULT NULL COMMENT '视频质量诊断结果ID',
-        `equipment_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-        PRIMARY KEY (`id`) USING BTREE,
-        KEY `idx_user_orgId` (`org_id`) USING BTREE,
-        KEY `idx_user_orgPath` (`org_path`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='视频质量诊断结果';
 
-drop table if exists mediator_video_diagnosis_record;
-CREATE TABLE `mediator_video_diagnosis_record` (
-           `id` bigint NOT NULL,
-           `org_id` bigint NOT NULL COMMENT '机构id',
-           `org_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构名称',
-           `org_path` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '机构',
-           `video_diagnosis_id` bigint DEFAULT NULL COMMENT '视频质量诊断id',
-           `create_by` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
-           `create_time` datetime DEFAULT NULL COMMENT '创建人名称',
-           `update_by` varchar(125) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改人名称',
-           `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-           `equipment_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备id',
-           `channel_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通道名称',
-           `channel_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通道序号',
-           `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备名称',
-           `device_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备id',
-           `signal_lost` int NOT NULL DEFAULT '0' COMMENT '信号丢失  0: 正常 | 1:异常',
-           `occlude` int NOT NULL DEFAULT '0' COMMENT '遮挡  0: 正常 | 1:异常',
-           `brightness` int NOT NULL DEFAULT '0' COMMENT '亮度  0: 正常 | 1:异常',
-           `color_cast` int NOT NULL DEFAULT '0' COMMENT '偏色  0: 正常 | 1:异常',
-           `snowflake` int NOT NULL DEFAULT '0' COMMENT '雪花  0: 正常 | 1:异常',
-           `stripe` int NOT NULL DEFAULT '0' COMMENT '条纹  0: 正常 | 1:异常',
-           `contrast` int NOT NULL DEFAULT '0' COMMENT '对比度  0: 正常 | 1:异常',
-           `blurry` int NOT NULL DEFAULT '0' COMMENT '模糊  0: 正常 | 1:异常',
-           `equipment_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
-           `alarm_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '报警/恢复时间',
-           `is_alarm` int DEFAULT NULL COMMENT '报警状态标识',
-           `detail_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '质量当前状态详情',
-           PRIMARY KEY (`id`),
-           KEY `idx_videodiagnosisrecord_updatetime` (`update_time`),
-           KEY `idx_code` (`equipment_code`(191),`channel_code`(191))
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

+ 8 - 0
project_data/sql/0.0.6/升级说明

@@ -0,0 +1,8 @@
+需要在nacos
+soc-gateway-dev.yml 配置文件添加配置
+  # 防止XSS攻击
+  xss:
+    enabled: true
+    excludeUrls:
+      - /system/notice
+      - /system/config

+ 3 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWeatherTaskService.java

@@ -22,4 +22,7 @@ public interface RemoteWeatherTaskService {
     @GetMapping("/weatherWarning/getDataFromApi")
     AjaxResult getDataFromApi(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
+    @GetMapping("/weatherWarning/getDataFromAliyun")
+    AjaxResult getDataFromAliyun(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
 }

+ 6 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWorkTimeService.java

@@ -44,4 +44,10 @@ public interface RemoteWorkTimeService {
      */
     @GetMapping("/work/timeSet/generateNextMonth")
     void generateNextMonth();
+
+    /**
+     * 生成下个月作息
+     */
+    @GetMapping("/work/timeSet/generateYearMonth")
+    void generateYearMonth();
 }

+ 1 - 1
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/SysUserInformation.java

@@ -67,7 +67,7 @@ public class SysUserInformation extends BaseEntity {
     @ApiModelProperty(value = "是否专职0是1否")
     private String isFullTime = "Y";
     @ApiModelProperty(value = "是否独立机构")
-    private String aloneDept = "Y";
+    private String aloneDept = "N";
     /**
      * 最高学历
      */

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWeatherFallbackFactory.java

@@ -22,6 +22,11 @@ public class RemoteWeatherFallbackFactory implements FallbackFactory<RemoteWeath
             public AjaxResult getDataFromApi(String source) {
                 return AjaxResult.error();
             }
+
+            @Override
+            public AjaxResult getDataFromAliyun(String source) {
+                return AjaxResult.error();
+            }
         };
     }
 }

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWorkTimesFallbackFactory.java

@@ -68,6 +68,11 @@ public class RemoteWorkTimesFallbackFactory implements FallbackFactory<RemoteWor
 
             }
 
+            @Override
+            public void generateYearMonth() {
+
+            }
+
 
         };
     }

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillTaskRecPageDto.java

@@ -16,6 +16,9 @@ public class CoreDrillTaskRecPageDto extends PageRequest {
     @ApiModelProperty(value = "状态")
     private Integer recStatus;
 
+    @ApiModelProperty(value = "不推荐状态")
+    private Integer unRecStatus;
+
     @NotNull(message = "开始时间不能为空")
     private Date startTime;
 

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillTaskRecPageVo.java

@@ -40,6 +40,9 @@ public class CoreDrillTaskRecPageVo {
     @ApiModelProperty(value = "推荐状态名称")
     private String recStatusText;
 
+    @ApiModelProperty(value = "推荐状态", example = "不推荐标识: null 未设置不推荐,6 不推荐(保留普通案例) 7   不推荐(保留行社优秀案例) 8 不推荐(保留地区优秀案例)")
+    private Integer unrecStatus;
+
 
     private String title;
 }

+ 5 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/SysLearningMaterialsPageVo.java

@@ -2,12 +2,14 @@ package com.xunmei.common.core.domain.edu.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xunmei.common.core.domain.message.vo.FileObject;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author jingyuanchao
@@ -59,4 +61,7 @@ public class SysLearningMaterialsPageVo {
 
     @ApiModelProperty(value = "备注")
     private String remark;
+
+    @ApiModelProperty(value = "附件")
+    private List<FileObject> fileObjectList;
 }

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/worktime/domain/SysWorkTime.java

@@ -242,6 +242,9 @@ public class SysWorkTime extends BaseEntity {
     @TableField(exist = false)
     private Integer size;
 
+    @TableField(exist = false)
+    private Boolean noWorkTime;
+
 
     @Override
     public String toString() {

+ 7 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/drill/DrillRecStatus.java

@@ -10,7 +10,7 @@ import java.util.Map;
 @AllArgsConstructor
 public enum DrillRecStatus {
 
-    NORMAL(0, "正常案例"),
+    NORMAL(0, "普通案例"),
 
     HS_EXCELLENT_CASE(1, "行社优秀案例"),
 
@@ -22,6 +22,12 @@ public enum DrillRecStatus {
 
     PROVINCE_EXCELLENT_CASE(5, "省级优秀案例"),
 
+    UNREC_NORMAL_CASE(6, "不推荐(保留普通案例)"),
+
+    UNREC_HS_EXCELLENT_CASE(7, "不推荐(保留行社优秀案例)"),
+
+    UNREC_REGION_EXCELLENT_CASE(8, "不推荐(保留地区优秀案例)"),
+
 
 
     ;

+ 14 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/controller/TMonitoringRetrievalPlanController.java

@@ -1,11 +1,13 @@
 package com.xunmei.core.access.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.web.controller.BaseController;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.log.annotation.Log;
 import com.xunmei.common.log.enums.BusinessType;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.annotation.RequiresPermissions;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
@@ -21,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.text.ParseException;
+import java.time.Duration;
 
 
 /**
@@ -94,6 +97,17 @@ public class TMonitoringRetrievalPlanController extends BaseController {
     @Log(title = "监控调阅计划", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody TMonitoringRetrievalPlan tMonitoringRetrievalPlan) {
+
+        int objectStringHashCode =JSONObject.toJSON(tMonitoringRetrievalPlan).toString().hashCode();
+        //仅当hashKey不存在时才设置
+        Boolean hasKey = RedisUtils.hasKey("addTMonitoringRetrievalPlan" + objectStringHashCode);
+        if (!hasKey) {
+            RedisUtils.setCacheObject("addTMonitoringRetrievalPlan" + objectStringHashCode,objectStringHashCode, Duration.ofMillis(1000 * 3));
+        }
+        if (hasKey) {
+            return AjaxResult.error("数据正在处理,请勿重复提交");
+        }
+
         return toAjax(tMonitoringRetrievalPlanService.insertTMonitoringRetrievalPlan(tMonitoringRetrievalPlan));
     }
 

+ 7 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/CoreMonitoringTaskRegistrationServiceImpl.java

@@ -38,6 +38,7 @@ import java.util.List;
 public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreMonitoringTaskRegistrationMapper, CoreMonitoringTaskRegistration> implements ICoreMonitoringTaskRegistrationService {
     private static final String ONE = "1";
     private static final String TWO = "2";
+    private static final String ZERO = "0";
     @Autowired
     private CoreMonitoringTaskRegistrationMapper coreMonitoringTaskRegistrationMapper;
     @Autowired
@@ -92,12 +93,13 @@ private ITMonitoringRetrievalPlanService itMonitoringRetrievalPlanService;
                 throw new ServiceException("请扫描本机构NFC");
             }
         }
+        CoreMonitoringRetrievalTask coreMonitoringRetrievalTask = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
         //jiaoyan
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq("task_id", coreMonitoringTaskRegistration.getTaskId());
         queryWrapper.eq("del_flag", 0);
         List<CoreMonitoringTaskRegistration> list = baseMapper.selectList(queryWrapper);
-        if (CollectionUtils.isNotEmpty(list)) {
+        if (CollectionUtils.isNotEmpty(list) && !coreMonitoringRetrievalTask.getStatus().equals(ZERO)) {
             if (StringUtils.isEmpty(coreMonitoringTaskRegistration.getEndNfc()) && StringUtils.isEmpty(coreMonitoringTaskRegistration.getEndPicture())) {
                 throw new ServiceException("请勿重复扫描");
             }
@@ -109,12 +111,15 @@ private ITMonitoringRetrievalPlanService itMonitoringRetrievalPlanService;
             coreMonitoringTaskRegistration1.setAverageDuration(Double.valueOf(String.format("%.2f", avg)));
             return baseMapper.updateById(coreMonitoringTaskRegistration1);
         } else {
+            if(coreMonitoringRetrievalTask.getStatus().equals(ZERO)){
+                coreMonitoringTaskRegistrationMapper.deleteByTaskId(coreMonitoringTaskRegistration.getTaskId());
+            }
             coreMonitoringTaskRegistration.setCreateTime(DateUtils.getNowDate());
             coreMonitoringTaskRegistration.setTaskStartTime(DateUtils.getNowDate());
             coreMonitoringTaskRegistration.setDelFlag("0");
             coreMonitoringTaskRegistration.setCreateBy(SecurityUtils.getUsername());
             //修改任务状态为进行中
-            CoreMonitoringRetrievalTask coreMonitoringRetrievalTask = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
+
             coreMonitoringRetrievalTask.setStatus(ONE);
             coreMonitoringRetrievalTask.setStartTime(DateUtils.getNowDate());
             coreMonitoringRetrievalTaskMapper.updateById(coreMonitoringRetrievalTask);

+ 22 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java

@@ -2,6 +2,7 @@ package com.xunmei.core.access.service.impl;
 
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -19,7 +20,9 @@ import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.StringUtils;
 
+import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.access.domain.CoreMonitoringTaskRegistration;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
@@ -53,6 +56,7 @@ import javax.annotation.Resource;
 import java.io.File;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.Duration;
 import java.time.LocalDate;
 import java.util.*;
 
@@ -513,7 +517,7 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
         }
         if ((tMonitoringRetrievalPlan.getImmediately().equals(Boolean.TRUE) || tMonitoringRetrievalPlan.getPlanCycle().equals(ZERO.toString())) && CollectionUtils.isNotEmpty(tMonitoringRetrievalPlans)) {
             try {
-                coreMonitoringRetrievalTaskBuilderService.noCycleTask(tMonitoringRetrievalPlans);
+                coreMonitoringRetrievalTaskBuilderService.noCycleTask(tMonitoringRetrievalPlans,tMonitoringRetrievalPlan.getId());
             } catch (Exception e) {
                 throw new ServiceException("下发任务异常,请联系管理员");
             }
@@ -521,9 +525,19 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
         return i;
     }
 
+    private void checkPlanIsCreatingTask(Long planId,String msg)
+    {
+        String redisKey="Monitoring_Creating_Task" + planId;
+        //仅当hashKey不存在时才设置
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (hasKey) {
+            throw new ServiceException("该任务正在生成中,现在不能被"+msg+",请稍后再试。");
+        }
+    }
 
     @Override
     public int withdraw(Long id) {
+        checkPlanIsCreatingTask(id,"撤回");
         TMonitoringRetrievalPlan plan = baseMapper.selectById(id);
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq(PARENT_ID, id);
@@ -693,6 +707,9 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
      */
     @Override
     public int insertTMonitoringRetrievalPlan(TMonitoringRetrievalPlan tMonitoringRetrievalPlan) {
+        if (ObjectUtil.equal(tMonitoringRetrievalPlan.getPlanCycle(), 0) && ObjectUtil.hasEmpty(tMonitoringRetrievalPlan.getStartTime(), tMonitoringRetrievalPlan.getEndTime())) {
+            throw new RuntimeException("当计划为无周期的时候,请填入开始时间和结束时间!");
+        }
         tMonitoringRetrievalPlan.setCreateTime(DateUtils.getNowDate());
         if (tMonitoringRetrievalPlan.getPlanStatus() == null) {
             tMonitoringRetrievalPlan.setPlanStatus(0);
@@ -829,8 +846,8 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
         //如果计划下面的任务都是没完成就删除所有任务,有完成就只修改
         TMonitoringRetrievalPlan plan = baseMapper.selectById(tMonitoringRetrievalPlan.getId());
         BeanUtils.copyProperties(tMonitoringRetrievalPlan, plan);
-        // SysRole sysRole = remoteRoleService.getRoleById(tMonitoringRetrievalPlan.getRoleId(), SecurityConstants.INNER);
-        // plan.setRoleName(sysRole.getRoleName());
+        SysRole sysRole = remoteRoleService.getRoleById(tMonitoringRetrievalPlan.getRoleId(), SecurityConstants.INNER);
+        plan.setRoleName(sysRole.getRoleName());
         int i = tMonitoringRetrievalPlanMapper.updateById(plan);
         iCoreMonitoringRetrievalTaskService.updateComplete(isComplete, tMonitoringRetrievalPlan, plan);
         return i;
@@ -846,6 +863,8 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     public int deleteTMonitoringRetrievalPlanByIds(Long[] ids) {
         int i = 0;
         for (Long id : ids) {
+            checkPlanIsCreatingTask(id,"删除");
+
             TMonitoringRetrievalPlan tMonitoringRetrievalPlan = new TMonitoringRetrievalPlan();
             tMonitoringRetrievalPlan.setIsDeleted(2L);
             tMonitoringRetrievalPlan.setId(id);

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

@@ -15,6 +15,8 @@ public class AppSyntheticQuestionDto {
     private int waitReformCount;
     @ApiModelProperty("已整改")
     private int reformedCount;
+    @ApiModelProperty("逾期整改")
+    private int overReformedCount;
     @ApiModelProperty("履职隐患数")
     private int resumptionCount;
     @ApiModelProperty("履职已整改")

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/WebSyntheticQuestionDto.java

@@ -22,6 +22,9 @@ public class WebSyntheticQuestionDto {
     @ApiModelProperty("已整改")
     private int reformedCount;
 
+    @ApiModelProperty("逾期整改")
+    private int overDueReformedCount;
+
     @ApiModelProperty("已逾期")
     private int overdueCount;
 }

+ 9 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/mapper/CockpitMapper.java

@@ -23,6 +23,15 @@ public interface CockpitMapper extends BaseMapper {
 
     List<WebGA38InfoDto> orgGA38(@Param("orgPath") String orgPath, @Param("date") Date date);
 
+    /**
+     * 新版统计驾驶舱安防设施建设达标率
+     * @param orgPath
+     * @param date
+     * @param type
+     * @return
+     */
+    List<OrgGA38StatisticVo> selectOrgGA38(@Param("orgPath") String orgPath, @Param("date") Date date,@Param("type") int type);
+
     OrgInfoVo orgInfo(@Param("orgPath") String orgPath);
 
     OrgSecurityInfoVo orgSecurityInfo(@Param("orgPath") String orgPath);

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

@@ -324,7 +324,7 @@ public class AppCockpitServiceImpl implements AppCockpitService {
         questionVo.setShouldComplete(question.get().getTotal());
         questionVo.setCurrentCompletedCount(question.get().getCompleted());
         questionVo.setCurrentCompletedRate(NumberUtils.computeRate(questionVo.getShouldComplete(), questionVo.getCurrentCompletedCount()));
-
+        questionVo.setCompare(questionVo.getCurrentCompletedRate() - questionVo.getPrevCompletedRate());
         vo.getTaskInfo().put("问题整改", questionVo);
         return vo;
     }
@@ -371,12 +371,13 @@ public class AppCockpitServiceImpl implements AppCockpitService {
         }
 //        int overdueCount = appCockpitMapper.selectOverDueQuestionCount(org.getPath(), range.getStartTime(), range.getEndTime());
         AppSyntheticQuestionVo vo = new AppSyntheticQuestionVo();
-        vo.getRateByState().put("已确认", (float) questionDto.getConfirmedCount());
-        vo.getRateByState().put("有异议", (float) questionDto.getDissentCount());
-        vo.getRateByState().put("已关闭", (float) questionDto.getCancelCount());
+//        vo.getRateByState().put("已确认", (float) questionDto.getConfirmedCount());
+//        vo.getRateByState().put("有异议", (float) questionDto.getDissentCount());
+//        vo.getRateByState().put("已关闭", (float) questionDto.getCancelCount());
         vo.getRateByState().put("待整改", (float) questionDto.getWaitReformCount());
         vo.getRateByState().put("已逾期", (float) questionDto.getOverdueCount());
         vo.getRateByState().put("已整改", (float) questionDto.getReformedCount());
+        vo.getRateByState().put("逾期整改", (float) questionDto.getOverReformedCount());
         vo.getRateByState().put("整改率", NumberUtils.computeRate(questionDto.getConfirmedCount(), questionDto.getReformedCount()));
 
         vo.getResumption().put("隐患数", (float) questionDto.getResumptionCount());
@@ -387,12 +388,12 @@ public class AppCockpitServiceImpl implements AppCockpitService {
         vo.getOffATMCheck().put("已整改", (float) questionDto.getOffATMResumptionReformedCount());
         vo.getOffATMCheck().put("整改率", NumberUtils.computeRate(questionDto.getOffATMResumptionCount(), questionDto.getOffATMResumptionReformedCount()));
 
-        vo.getSafetyCheck().put("隐患数", (float) questionDto.getSafetyCheckCount());
-        vo.getSafetyCheck().put("有异议", (float) questionDto.getDissentCount());
-        vo.getSafetyCheck().put("已取消", (float) questionDto.getCancelCount());
-        vo.getSafetyCheck().put("已确认", (float) questionDto.getSafetyCheckConfirmedCount());
+        vo.getSafetyCheck().put("隐患数", (float) questionDto.getSafetyCheckConfirmedCount());
         vo.getSafetyCheck().put("已整改", (float) questionDto.getSafetyCheckReformCount());
         vo.getSafetyCheck().put("整改率", NumberUtils.computeRate(questionDto.getSafetyCheckConfirmedCount(), questionDto.getSafetyCheckReformCount()));
+        vo.getSafetyCheck().put("问题数", (float) questionDto.getSafetyCheckCount());
+        vo.getSafetyCheck().put("有异议", (float) questionDto.getDissentCount());
+        vo.getSafetyCheck().put("已取消", (float) questionDto.getCancelCount());
 
         return vo;
 
@@ -589,7 +590,7 @@ public class AppCockpitServiceImpl implements AppCockpitService {
      */
     private AppOverviewItemVo computeGa38(int total, int completed, int currentCompleted, int prevCompleted) {
         AppOverviewItemVo vo = new AppOverviewItemVo();
-        vo.setShouldComplete(total);
+        vo.setShouldComplete(completed);
         vo.setCurrentCompletedRate(NumberUtils.computeRate(total, completed));
         vo.setPrevCompletedRate(NumberUtils.computeRate(total, prevCompleted));
         vo.setCompare(((float) currentCompleted) - prevCompleted);

+ 65 - 28
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/CockpitServiceImpl.java

@@ -156,37 +156,73 @@ public class CockpitServiceImpl implements CockpitService {
     public List<OrgGA38StatisticVo> orgGA38(TaskStatisticDto dto) {
         Date date = getStartDate(dto.getPeriod());
         SysOrg org = getOrgThrowIfNull(dto.getOrgId());
-        List<WebGA38InfoDto> data = cockpitMapper.orgGA38(org.getPath(), date);
-        List<OrgGA38StatisticVo> r = getGA38Children(org, Arrays.asList(OrgTypeEnum.LIHANG_ZIZHU_YINGHANG.getCode(), OrgTypeEnum.YINGYE_WANGDIAN.getCode()));
-        for (WebGA38InfoDto orgVo : data) {
-            for (OrgGA38StatisticVo statisticVo : r) {
-                if (orgVo.getPath().startsWith(statisticVo.getOrgPath())) {
-                    statisticVo.setTotal(1 + statisticVo.getTotal());
-                    statisticVo.setGa382021(orgVo.getGa382021() + statisticVo.getGa382021());
-                    statisticVo.setGa382015(orgVo.getGa382015() + statisticVo.getGa382015());
-                    if (orgVo.getGa382021() > 0 || orgVo.getGa382015() > 0) {
-                        statisticVo.setReachCount(1 + statisticVo.getReachCount());
-                    }
+        List<OrgGA38StatisticVo> orgGA38StatisticVos = new ArrayList<>();
+
+        /**
+         * 业务逻辑如下:
+         * 1、只统计营业网点的GA38达标情况
+         * 2、省联社、地区行社查看汇总数据,直接子集的汇总数据
+         * 3、行社查看所有网点的数据,不能走直接子集的汇总数据,只能统计每个网点的数据。
+         */
+        if(OrgTypeEnum.SHEGN_LIAN_SHE.getCode().equals(org.getType())){
+            //统计省联社,获取每个地区行社的数据
+            orgGA38StatisticVos = cockpitMapper.selectOrgGA38(org.getPath(), date, 1);
+            orgGA38StatisticVos.sort(Comparator.comparing(OrgGA38StatisticVo::getReachRate));
+            Collections.reverse(orgGA38StatisticVos);
+            return orgGA38StatisticVos;
+
+
+         /*   //如果是省联社和地区行社查询时
+            List<WebGA38InfoDto> data = cockpitMapper.orgGA38(org.getPath(), date);
+            //GA38 只统计营业网点 OrgTypeEnum.LIHANG_ZIZHU_YINGHANG.getCode(),
+            List<OrgGA38StatisticVo> r = getGA38Children(org, Arrays.asList( OrgTypeEnum.YINGYE_WANGDIAN.getCode()));
+            for (WebGA38InfoDto orgVo : data) {
+                for (OrgGA38StatisticVo statisticVo : r) {
+                    if (orgVo.getPath().startsWith(statisticVo.getOrgPath())) {
+                        statisticVo.setTotal(1 + statisticVo.getTotal());
+                        statisticVo.setGa382021(orgVo.getGa382021() + statisticVo.getGa382021());
+                        statisticVo.setGa382015(orgVo.getGa382015() + statisticVo.getGa382015());
+                        if (orgVo.getGa382021() > 0 || orgVo.getGa382015() > 0) {
+                            statisticVo.setReachCount(1 + statisticVo.getReachCount());
+                        }
 //                    statisticVo.setReachCount(orgVo.getReachCount() + statisticVo.getReachCount());
+                    }
                 }
             }
+
+            r.forEach(i -> {
+                i.setReachRate(NumberUtils.computeRate(i.getTotal(), i.getReachCount()));
+            });
+
+            r.sort(new Comparator<OrgGA38StatisticVo>() {
+                @Override
+                public int compare(OrgGA38StatisticVo o1, OrgGA38StatisticVo o2) {
+                    return NumberUtil.compare(o2.getReachRate(), o1.getReachRate());
+                }
+            });
+
+            r.sort(Comparator.comparing(OrgGA38StatisticVo::getReachRate));
+            Collections.reverse(r);
+
+            return r;*/
         }
 
-        r.forEach(i -> {
-            i.setReachRate(NumberUtils.computeRate(i.getTotal(), i.getReachCount()));
-        });
+        if(OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType()) || "地区行社".equals(org.getName())){
+            orgGA38StatisticVos = cockpitMapper.selectOrgGA38(org.getPath(), date, 2);
+            orgGA38StatisticVos.sort(Comparator.comparing(OrgGA38StatisticVo::getReachRate));
+            Collections.reverse(orgGA38StatisticVos);
+            return orgGA38StatisticVos;
+        }
 
-        r.sort(new Comparator<OrgGA38StatisticVo>() {
-            @Override
-            public int compare(OrgGA38StatisticVo o1, OrgGA38StatisticVo o2) {
-                return NumberUtil.compare(o2.getReachRate(), o1.getReachRate());
-            }
-        });
+        if(OrgTypeEnum.HANG_SHE.getCode().equals(org.getType())){
+            //如果统计的具体行社,则要先查出所有网点
+            orgGA38StatisticVos = cockpitMapper.selectOrgGA38(org.getPath(), date, 3);
+        }
+        orgGA38StatisticVos.sort(Comparator.comparing(OrgGA38StatisticVo::getReachRate));
+        Collections.reverse(orgGA38StatisticVos);
+        return orgGA38StatisticVos;
 
-        r.sort(Comparator.comparing(OrgGA38StatisticVo::getReachRate));
-        Collections.reverse(r);
 
-        return r;
     }
 
     /**
@@ -257,13 +293,15 @@ public class CockpitServiceImpl implements CockpitService {
 //        Map<String, Object> overdueCount = cockpitMapper.selectOverDueQuestionCount(org.getPath(), range.getStartTime(), range.getEndTime());
 
         QuestionStatisticVo vo = new QuestionStatisticVo();
-        vo.setTotal(questionDto.getTotal());
+        int reformTotal=questionDto.getTotal()-questionDto.getUnconfirmedCount()- questionDto.getDissentCount()-questionDto.getClosedCount();
+        vo.setTotal(reformTotal);
         vo.setUnconfirm(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getUnconfirmedCount()));
         vo.setDissent(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getDissentCount()));
         vo.setClosed(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getClosedCount()));
-        vo.setUnreform(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getWaitReformCount()));
-        vo.setReformed(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getReformedCount()));
-        vo.setOverdue(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getOverdueCount()));
+        vo.setUnreform(NumberUtils.computeRate(reformTotal, questionDto.getWaitReformCount()));
+        vo.setReformed(NumberUtils.computeRate(reformTotal, questionDto.getReformedCount()));
+        vo.setOverdueReformed(NumberUtils.computeRate(reformTotal, questionDto.getOverDueReformedCount()));
+        vo.setOverdue(NumberUtils.computeRate(reformTotal, questionDto.getOverdueCount()));
 //        if (overdueCount.size() == 2) {
 //            Long count = (Long) overdueCount.get("count");
 //            BigDecimal overdue = (BigDecimal) overdueCount.get("overdueCount");
@@ -396,7 +434,6 @@ public class CockpitServiceImpl implements CockpitService {
         if (ObjectUtil.isNull(org)) {
             throw new ServiceException("机构不存在");
         }
-
         return org;
     }
 //

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

@@ -7,17 +7,17 @@ import lombok.Data;
 @Data
 public class AppOverviewItemVo {
     @ApiModelProperty("当前周期完成率,近90天整改率")
-    private Float currentCompletedRate;
+    private Float currentCompletedRate = 0F;
 
     @ApiModelProperty("当前周期应完成")
-    private Integer shouldComplete;
+    private Integer shouldComplete = 0;
 
     @ApiModelProperty("当前周期完成数,已整改")
-    private Integer currentCompletedCount;
+    private Integer currentCompletedCount = 0;
 
     @ApiModelProperty("上一周期完成率,")
-    private Float prevCompletedRate;
+    private Float prevCompletedRate = 0F;
 
     @ApiModelProperty("本周期与上一周期的比")
-    private  Float compare;
+    private  Float compare = 0F;
 }

+ 6 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/QuestionStatisticVo.java

@@ -29,6 +29,12 @@ public class QuestionStatisticVo {
      * 已整改
      */
     private float reformed;
+
+    /**
+     * 逾期整改
+     */
+    private float overdueReformed;
+
     /**
      * 已逾期
      */

+ 3 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillTaskMapper.java

@@ -42,10 +42,12 @@ public interface CoreDrillTaskMapper extends BaseMapper<CoreDrillTask> {
 
     IPage<CoreDrillTaskRecTaskPageVo> selectRecTaskListPage(Page<Object> pageRequest, @Param("request") CoreDrillTaskRecPageDto request);
 
-    int updateStatusById(@Param("drillTaskId") Long drillTaskId, @Param("recStatus") Integer recStatus);
+    int updateStatusById(@Param("drillTaskId") Long drillTaskId, @Param("recStatus") Integer recStatus,@Param("unRecStatus") Integer unRecStatus);
 
     List<PanelListVo> selectCurUserTaskList(@Param("request") PanelListDto request,@Param("list") List<Integer> list);
 
+    List<PanelListVo> selectUserAllDrillSignList(@Param("request") PanelListDto request,@Param("list") List<Integer> list);
+
     List<PanelListVo> selectWaitEvaluateTaskList(@Param("request") PanelListDto panelListDto);
     List<PanelListVo> selectWaitRecTaskList(@Param("request") PanelListDto panelListDto);
 

+ 21 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -35,6 +35,7 @@ import com.xunmei.common.core.enums.drill.DrillPlanStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
+import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.AssertUtil;
@@ -66,6 +67,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.support.TransactionSynchronizationAdapter;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import java.time.Duration;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
@@ -641,6 +643,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteCoreDrillPlanByIds(Long id) {
+        checkPlanIsCreatingTask(id,"删除");
         List<Long> list = baseMapper.selectIdByParentId(id);
         if (ObjectUtil.isEmpty(list)) {
             //说明没有下发,还是草稿状态
@@ -734,12 +737,20 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         }, threadPoolTaskExecutor);
 
         planListFuture.thenAcceptAsync((result) -> {
+            String redisKey="Drill_Creating_Task" + planId;
+            RedisUtils.deleteObject(redisKey);
+            //仅当hashKey不存在时才设置
+            Boolean hasKey = RedisUtils.hasKey(redisKey);
+            if (!hasKey) {
+                RedisUtils.setCacheObject(redisKey, planId, Duration.ofMillis(1000 * 60*5));
+            }
             for (CoreDrillPlan drillPlan : result) {
                 if (checkCanBuildTaskNow(drillPlan)) {
                     final CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(drillPlan.getId());
                     coreDrillTaskService.createTaskForNow(detailPlanData, drillPlan.getPlanStartDate(), drillPlan.getPlanEndDate());
                 }
             }
+            RedisUtils.deleteObject(redisKey);
         }, threadPoolTaskExecutor);
 
 
@@ -771,9 +782,19 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                 || ObjectUtil.equal(orgType, OrgTypeEnum.YINGYE_WANGDIAN.getCode());
     }
 
+    private void checkPlanIsCreatingTask(Long planId,String msg)
+    {
+        String redisKey="Drill_Creating_Task" + planId;
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (hasKey) {
+            throw new ServiceException("该任务正在生成中,现在不能被"+msg+",请稍后再试。");
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int revocationPlan(Long planId) {
+        checkPlanIsCreatingTask(planId,"撤回");
         List<Long> list = coreDrillPlanMapper.selectIdByParentId(planId);
         Integer isExecute = coreDrillTaskMapper.selectCount(new LambdaQueryWrapper<CoreDrillTask>()
                         .in(CoreDrillTask::getPlanId, list)

+ 107 - 17
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -494,6 +494,10 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         final Map<Long, List<SysWorkTime>> listMap = workTimeList.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
 
         for (SysOrg org : orgList) {
+            if(org.getIsLock().equals(1) || org.getDeleted().equals(1))
+            {
+                continue;
+            }
             Map<Short, DateRange> rangeMap;
             if (OrgTypeEnum.YINGYE_WANGDIAN.getCode().equals(org.getType())) {
                 if (ObjectUtil.isNotEmpty(listMap.get(org.getId()))) {
@@ -641,7 +645,22 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             //buildEmptyData(sysOrgList, result);
         } else {
             for (SysOrg org : sysOrgList) {
-                List<CoreDrillTaskReportVo> childrenOrgData = list.stream().filter(vo -> vo.getOrgPath().startsWith(org.getPath())).collect(Collectors.toList());
+                if(ObjectUtil.equal(sysOrg.getType(),OrgTypeEnum.HANG_SHE.getCode()) && !ObjectUtil.equal(org.getType(),OrgTypeEnum.YINGYE_WANGDIAN.getCode()))
+                {
+                    continue;
+                }
+                List<CoreDrillTaskReportVo> childrenOrgData =new ArrayList<>();
+                if(ObjectUtil.equal(org.getType(),OrgTypeEnum.YINGYE_WANGDIAN.getCode()))
+                {
+                    childrenOrgData = list.stream()
+                            //.filter(vo -> vo.getOrgPath().startsWith(org.getPath()))
+                            .filter(vo -> vo.getOrgId().equals(org.getId()))
+                            .collect(Collectors.toList());
+                }
+                else {
+                    childrenOrgData = list.stream().filter(vo -> vo.getOrgPath().startsWith(org.getPath())).collect(Collectors.toList());
+                }
+//                List<CoreDrillTaskReportVo> childrenOrgData = list.stream().filter(vo -> vo.getOrgPath().startsWith(org.getPath())).collect(Collectors.toList());
                 CoreDrillTaskReportVo reportVo = new CoreDrillTaskReportVo();
                 reportVo.setOrgId(org.getId());
                 reportVo.setOrgName(org.getShortName());
@@ -892,8 +911,25 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         for (CoreDrillTaskRecPageVo record : page.getRecords()) {
             //处理演练任务类型字典
             record.setTypeText(DictUtils.getDictLabel(DictConstants.CORE_DRILL_TYPE, record.getType()));
-            //处理演练任务推荐状态字典
-            record.setRecStatusText(DictUtils.getDictLabel(DictConstants.DRILL_TASK_REC_STATUS, record.getRecStatus()));
+            // 6 不推荐(保留普通案例) 7   不推荐(保留行社优秀案例) 8 不推荐(保留地区优秀案例)
+            if(ObjectUtil.equal(6,record.getUnrecStatus()))
+            {
+                record.setRecStatusText("不推荐(保留普通案例)");
+            }
+            else if(ObjectUtil.equal(7,record.getUnrecStatus()))
+            {
+                record.setRecStatusText("不推荐(保留行社优秀案例)");
+            }
+            else if(ObjectUtil.equal(8,record.getUnrecStatus()))
+            {
+                record.setRecStatusText("不推荐(保留地区优秀案例)");
+            }
+            else
+            {
+                //处理演练任务推荐状态字典
+                record.setRecStatusText(DictUtils.getDictLabel(DictConstants.DRILL_TASK_REC_STATUS, record.getRecStatus()));
+            }
+
 
         }
         return TableDataInfo.build(page);
@@ -916,8 +952,20 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     }
 
     private void dealRecListParam(CoreDrillTaskRecPageDto request) {
+        
         //App的查询, App 默认下穿
         request.setCheckSub(true);
+        if(ObjectUtil.isNotEmpty(request.getRecStatus())){
+            if(isUnRecStatus(request.getRecStatus()))
+            {
+                request.setUnRecStatus(request.getRecStatus());
+                request.setRecStatus(null);
+            }
+            else
+            {
+                request.setUnRecStatus(null);
+            }
+        }
         //App端的时间按季度查询
         request.setStartTime(DateUtil.beginOfMonth(request.getStartTime()));
         request.setEndTime(DateUtil.endOfMonth(request.getEndTime()));
@@ -952,15 +1000,18 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     @Override
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public int doRecTask(CoreDrillTaskDoRec request) {
+        // 6 不推荐(保留普通案例)、7 不推荐(保留行社优秀案例)、8 不推荐(保留地区优秀案例)
         CoreDrillTask drillTask = getById(request.getDrillTaskId());
         if (drillTask == null) {
             throw new SystemException("获取预案演练数据失败!");
         }
-        //当前推荐状态为null或者小于前端传过来的推荐状态,说明是取消推荐操作
-        if (request.getRecStatus() == null || drillTask.getRecStatus() > request.getRecStatus()) {
+
+        //当前推荐状态为6、7、8(不推荐)或者小于前端传过来的推荐状态,说明是取消推荐操作
+        if (isUnRecStatus(request.getRecStatus()) || drillTask.getRecStatus() > request.getRecStatus()) {
             //取消推荐
             int recStatus = checkRecStatus(drillTask, request.getRecStatus());
-            return coreDrillTaskMapper.updateStatusById(request.getDrillTaskId(), recStatus);
+
+            return coreDrillTaskMapper.updateStatusById(request.getDrillTaskId(), recStatus,request.getRecStatus());
         }
 
 
@@ -970,33 +1021,60 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             return 1;
         }
         //判断是否越级推荐
-        if (ObjectUtil.notEqual(drillTask.getRecStatus(), request.getRecStatus() - 1) && ObjectUtil.notEqual(drillTask.getRecStatus(), request.getRecStatus() - 2)) {
+        if (request.getRecStatus()<DrillRecStatus.UNREC_NORMAL_CASE.getCode() && ObjectUtil.notEqual(drillTask.getRecStatus(), request.getRecStatus() - 1) && ObjectUtil.notEqual(drillTask.getRecStatus(), request.getRecStatus() - 2)) {
             throw new SystemException("推荐状态异常!");
         }
         if (ObjectUtil.notEqual(DrillDoStatus.DONE.getCode(), drillTask.getStatus())) {
             throw new SystemException("该预案演练任务未完成或已逾期!");
         }
-        return coreDrillTaskMapper.updateStatusById(request.getDrillTaskId(), request.getRecStatus());
+        return coreDrillTaskMapper.updateStatusById(request.getDrillTaskId(), request.getRecStatus(),null);
     }
 
+    private boolean isUnRecStatus(Integer recStatus)
+    {
+        if(recStatus.equals(DrillRecStatus.UNREC_NORMAL_CASE.getCode())
+                || recStatus.equals(DrillRecStatus.UNREC_HS_EXCELLENT_CASE.getCode())
+                || recStatus.equals(DrillRecStatus.UNREC_REGION_EXCELLENT_CASE.getCode()))
+        {
+            return true;
+        }
+        return false;
+    }
+    
     private int checkRecStatus(CoreDrillTask drillTask, Integer recStatus) {
 
-        if (recStatus != null && drillTask.getRecStatus() > recStatus) {
+        // -1 为不推荐
+        if (!isUnRecStatus(recStatus) && drillTask.getRecStatus() > recStatus) {
             return recStatus;
         }
-        //前端传null,说明页面两个复选框都没勾选
-        //如果当前是正常案例/行社优秀案例/已推荐地区优秀案例 取消推荐后状态为正常案例
-        if (drillTask.getRecStatus().equals(DrillRecStatus.NORMAL.getCode()) ||
-                drillTask.getRecStatus().equals(DrillRecStatus.HS_EXCELLENT_CASE.getCode()) ||
-                drillTask.getRecStatus().equals(DrillRecStatus.REC_REGION_EXCELLENT_CASE.getCode())) {
+        if(recStatus.equals(DrillRecStatus.UNREC_NORMAL_CASE.getCode()))
+        {
             return DrillRecStatus.NORMAL.getCode();
         }
-        //如果当前是地区优秀案例/已推荐省级优秀案例  取消推荐后状态为行社优秀案例
-        if (drillTask.getRecStatus().equals(DrillRecStatus.REGION_EXCELLENT_CASE.getCode()) || drillTask.getRecStatus().equals(DrillRecStatus.REC_PROVINCE_EXCELLENT_CASE.getCode())) {
+        if(recStatus.equals(DrillRecStatus.UNREC_HS_EXCELLENT_CASE.getCode()))
+        {
             return DrillRecStatus.HS_EXCELLENT_CASE.getCode();
         }
-        //走到这说明当前推荐状态为省级优秀案例,取消推荐后状态为地区优秀案例
+
         return DrillRecStatus.REGION_EXCELLENT_CASE.getCode();
+//        if(recStatus.equals(DrillRecStatus.UNREC_REGION_EXCELLENT_CASE.getCode()))
+//        {
+//            return DrillRecStatus.REGION_EXCELLENT_CASE.getCode();
+//        }
+
+//        //前端传null,说明页面两个复选框都没勾选
+//        //如果当前是正常案例/行社优秀案例/已推荐地区优秀案例 取消推荐后状态为正常案例
+//        if (drillTask.getRecStatus().equals(DrillRecStatus.NORMAL.getCode()) ||
+//                drillTask.getRecStatus().equals(DrillRecStatus.HS_EXCELLENT_CASE.getCode()) ||
+//                drillTask.getRecStatus().equals(DrillRecStatus.REC_REGION_EXCELLENT_CASE.getCode())) {
+//            return DrillRecStatus.NORMAL.getCode();
+//        }
+//        //如果当前是地区优秀案例/已推荐省级优秀案例  取消推荐后状态为行社优秀案例
+//        if (drillTask.getRecStatus().equals(DrillRecStatus.REGION_EXCELLENT_CASE.getCode()) || drillTask.getRecStatus().equals(DrillRecStatus.REC_PROVINCE_EXCELLENT_CASE.getCode())) {
+//            return DrillRecStatus.HS_EXCELLENT_CASE.getCode();
+//        }
+//        //走到这说明当前推荐状态为省级优秀案例,取消推荐后状态为地区优秀案例
+//        return DrillRecStatus.REGION_EXCELLENT_CASE.getCode();
     }
 
     private Boolean checkRecNum(SysOrg sysOrg) {
@@ -1104,6 +1182,18 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         Collections.addAll(statusList, DrillDoStatus.WAIT_SUBMIT.getCode(),
                 DrillDoStatus.WAIT_RECORDED.getCode(), DrillDoStatus.WAIT_SIGN.getCode());
         List<PanelListVo> list = coreDrillTaskMapper.selectCurUserTaskList(panelListDto, statusList);
+        //获取需要登录人 签名的所有任务,解决人员还没签名就调动到其他机构的问题
+        List<PanelListVo> loginUserAllNeedSignlist = coreDrillTaskMapper.selectUserAllDrillSignList(panelListDto,statusList);
+        if(ObjectUtil.isNotEmpty(loginUserAllNeedSignlist))
+        {
+            loginUserAllNeedSignlist.stream().forEach(x->{
+                if(!list.stream().anyMatch(y->ObjectUtil.equal(y.getId(),x.getId())))
+                {
+                    list.add(x);
+                }
+            });
+        }
+
         dealListData(list, panelListDto.getUserId());
         //省联社/办事处或行社
         if (OrgTypeEnum.HANG_SHE.getCode().equals(sysOrg.getType()) ||

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingTaskMapper.java

@@ -45,6 +45,8 @@ public interface CoreEduTrainingTaskMapper extends BaseMapper<CoreEduTrainingTas
 
     List<PanelListVo> selectCurUserTaskList(@Param("request") PanelListDto request);
 
+    List<PanelListVo> selectUserAllEduTrainingSignList(@Param("request") PanelListDto request);
+
     void updateTaskNameByParentPlanId(@Param("planId") Long planId, @Param("planName") String planName, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 
     List<CoreEduTrainingTaskExportVo> selectCoreEduTrainingTaskPage(@Param("request") CoreEduTrainingTaskPageDto request);

+ 20 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -31,6 +31,7 @@ import com.xunmei.common.core.enums.drill.DrillPlanCycleEnum;
 import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
+import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.AssertUtil;
 import com.xunmei.common.core.utils.DateUtils;
@@ -60,6 +61,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.support.TransactionSynchronizationAdapter;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import java.time.Duration;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
@@ -620,6 +622,15 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
 
     }
 
+    private void checkPlanIsCreatingTask(Long planId,String msg)
+    {
+        String redisKey="Edu_Creating_Task" + planId;
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (hasKey) {
+            throw new ServiceException("该任务正在生成中,现在不能被"+msg+",请稍后再试。");
+        }
+    }
+
     /**
      * 批量删除教育培训计划
      *
@@ -629,6 +640,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteCoreEduTrainingPlanByIds(Long id) {
+        checkPlanIsCreatingTask(id,"删除");
         List<Long> list = baseMapper.selectIdByParentId(id);
         if (ObjectUtil.isEmpty(list)) {
             //说明没有下发,还是草稿状态
@@ -742,12 +754,19 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         }, threadPoolTaskExecutor);
 
         planListFuture.thenAcceptAsync((result) -> {
+            String redisKey="Edu_Creating_Task" + planId;
+            RedisUtils.deleteObject(redisKey);
+            Boolean hasKey = RedisUtils.hasKey(redisKey);
+            if (!hasKey) {
+                RedisUtils.setCacheObject(redisKey, planId, Duration.ofMillis(1000 * 60*5));
+            }
             for (CoreEduTrainingPlan eduPlan : result) {
                 if (checkCanBuildTaskNow(eduPlan)) {
                     CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(eduPlan.getId());
                     coreEduTrainingTaskService.createTaskForNow(detailPlanData, eduPlan.getStartDate(), eduPlan.getEndDate());
                 }
             }
+            RedisUtils.deleteObject(redisKey);
         }, threadPoolTaskExecutor);
     }
 
@@ -870,6 +889,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Integer revocationPlan(Long planId) {
+        checkPlanIsCreatingTask(planId,"撤回");
         List<Long> list = coreEduTrainingPlanMapper.selectIdByParentId(planId);
         Integer isExecute = coreEduTrainingTaskMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTask>()
                         .in(CoreEduTrainingTask::getPlanId, list)

+ 35 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -522,6 +522,10 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         final Map<Long, List<SysWorkTime>> listMap = workTimeList.stream().filter(time -> ObjectUtil.equal(time.getIsEnable(), 1L)).collect(Collectors.groupingBy(SysWorkTime::getOrgId));
 
         for (SysOrg org : orgList) {
+            if(org.getIsLock().equals(1)|| org.getDeleted().equals(1))
+            {
+                continue;
+            }
             Map<Short, DateRange> rangeMap;
             if (OrgTypeEnum.YINGYE_WANGDIAN.getCode().equals(org.getType())) {
                 if (ObjectUtil.isNotEmpty(listMap.get(org.getId()))) {
@@ -659,18 +663,33 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         List<CoreEduTrainingTaskReportVo> result = new ArrayList<>();
         List<CoreEduTrainingTaskReportVo> list = coreEduTrainingTaskMapper.selectReport(request, planId, planIdList);
 
-        return buildResultData(sysOrgList, result, list);
+        return buildResultData(sysOrgList, result, list,sysOrg);
     }
 
-    private List<CoreEduTrainingTaskReportVo> buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list) {
+    private List<CoreEduTrainingTaskReportVo> buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list,SysOrg sysOrg) {
         if (list.isEmpty()) {
             //buildEmptyData(sysOrgList, result);
             return result;
         }
         for (SysOrg org : sysOrgList) {
-            List<CoreEduTrainingTaskReportVo> childrenOrgData = list.stream()
-                    .filter(vo -> vo.getOrgPath().startsWith(org.getPath()))
-                    .collect(Collectors.toList());
+            if(ObjectUtil.equal(sysOrg.getType(),OrgTypeEnum.HANG_SHE.getCode()) && !ObjectUtil.equal(org.getType(),OrgTypeEnum.YINGYE_WANGDIAN.getCode()))
+            {
+                continue;
+            }
+            List<CoreEduTrainingTaskReportVo> childrenOrgData=new ArrayList<>();
+            if(ObjectUtil.equal(org.getType(),OrgTypeEnum.YINGYE_WANGDIAN.getCode()))
+            {
+                childrenOrgData = list.stream()
+                        //.filter(vo -> vo.getOrgPath().startsWith(org.getPath()))
+                        .filter(vo -> vo.getOrgId().equals(org.getId()))
+                        .collect(Collectors.toList());
+            }
+            else {
+                childrenOrgData = list.stream()
+                        .filter(vo -> vo.getOrgPath().startsWith(org.getPath()))
+                        //.filter(vo -> vo.getOrgId().equals(org.getId()))
+                        .collect(Collectors.toList());
+            }
 
             int totalShouldFinish = childrenOrgData.stream().mapToInt(CoreEduTrainingTaskReportVo::getShouldFinish).sum();
             int totalFinish = childrenOrgData.stream().mapToInt(CoreEduTrainingTaskReportVo::getFinish).sum();
@@ -942,6 +961,17 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     @Override
     public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
         List<PanelListVo> list = coreEduTrainingTaskMapper.selectCurUserTaskList(panelListDto);
+        //获取需要登录人 签名的所有任务,解决人员还没签名就调动到其他机构的问题
+        List<PanelListVo> loginUserAllNeedSignlist = coreEduTrainingTaskMapper.selectUserAllEduTrainingSignList(panelListDto);
+        if(ObjectUtil.isNotEmpty(loginUserAllNeedSignlist))
+        {
+            loginUserAllNeedSignlist.stream().forEach(x->{
+                if(!list.stream().anyMatch(y->ObjectUtil.equal(y.getId(),x.getId())))
+                {
+                    list.add(x);
+                }
+            });
+        }
         if (ObjectUtil.isEmpty(list)) {
             return new ArrayList<>();
         }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/controller/CoreEvaluateTaskController.java

@@ -123,6 +123,9 @@ public class CoreEvaluateTaskController extends BaseController {
     public AjaxResult statistics(EvaluateTaskStatisticsDTO evaluateTaskStatisticsDTO) {
         AjaxResult ajaxResult = AjaxResult.success();
         SysOrg sysOrg = remoteOrgService.selectSysOrgById(evaluateTaskStatisticsDTO.getOrgId(), SecurityConstants.INNER);
+        evaluateTaskStatisticsDTO.setType(sysOrg.getType());
+        evaluateTaskStatisticsDTO.setOrgPath(sysOrg.getPath());
+        evaluateTaskStatisticsDTO.setOrgShortName(sysOrg.getShortName());
         ajaxResult.put("orgName", sysOrg.getShortName());
         if (null != evaluateTaskStatisticsDTO.getPlanId()) {
             CoreEvaluatePlanVO coreEvaluatePlanVO = coreEvaluatePlanService.selectCoreEvaluatePlanById(evaluateTaskStatisticsDTO.getPlanId());

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/dto/EvaluateTaskStatisticsDTO.java

@@ -17,6 +17,7 @@ public class EvaluateTaskStatisticsDTO {
     @ApiModelProperty(value = "机构id")
     private Long orgId;
     private String orgPath;
+    private String orgShortName;
     @ApiModelProperty(value = "外包评价名称")
     private String evaluateName;
     @TableField(exist = false)

+ 8 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/service/impl/CoreEvaluateTaskServiceImpl.java

@@ -203,7 +203,14 @@ public class CoreEvaluateTaskServiceImpl extends ServiceImpl<CoreEvaluateTaskMap
             return null;
         }
         Map map = new HashMap();
-        List<SysOrg> sysOrgs = remoteOrgService.selectSysOrgByParentId(evaluateTaskStatisticsDTO.getOrgId(), SecurityConstants.INNER);
+        List<SysOrg> sysOrgs =new ArrayList<>();
+        if (evaluateTaskStatisticsDTO.getType() < 3 || evaluateTaskStatisticsDTO.getOrgShortName().endsWith("地区行社")) {
+            sysOrgs = orgService.selectSysOrgByPathAndType(evaluateTaskStatisticsDTO.getOrgPath(), 3, SecurityConstants.INNER);
+        } else if (evaluateTaskStatisticsDTO.getType() == 3) {
+            sysOrgs = orgService.selectSysOrgByPathAndType(evaluateTaskStatisticsDTO.getOrgPath(), 4, SecurityConstants.INNER);
+        }
+
+//        List<SysOrg> sysOrgs = remoteOrgService.selectSysOrgByPathAndType(evaluateTaskStatisticsDTO.getOrgPath(),evaluateTaskStatisticsDTO.getType(), SecurityConstants.INNER);
         List<LinkedHashMap> rows = new ArrayList<>();
         Double average = null;
         Integer all = 0;

+ 19 - 10
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/panel/service/impl/PanelServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xunmei.core.panel.service.impl;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.google.common.collect.Lists;
 
 import cn.hutool.core.date.DateUtil;
@@ -13,6 +14,7 @@ import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsPageDto;
 import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsPageVo;
 import com.xunmei.common.core.domain.letter.dto.CoreIntroduceLetterApproveRequestDto;
 import com.xunmei.common.core.domain.message.dto.CoreAnnouncementNotificationAppPageDto;
+import com.xunmei.common.core.domain.message.vo.FileObject;
 import com.xunmei.common.core.domain.message.vo.MessageAppPageVo;
 import com.xunmei.common.core.domain.panel.adapter.PanelAdapter;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
@@ -288,10 +290,11 @@ public class PanelServiceImpl implements PanelService {
         req.setOrgId(sysOrg.getId());
         final TableDataInfo tableDataInfo = materialsService.selectPage(req);
         final List<SysLearningMaterialsPageVo> rows = tableDataInfo.getRows();
+        List<SysLearningMaterialsPageVo> resultList=new ArrayList<>();
         if (ObjectUtil.isEmpty(rows)) {
             hashMap.put("index2", new ArrayList<>());
         } else {
-            List<String> fileLit = new ArrayList<>();
+//            List<String> fileLit = new ArrayList<>();
             for (SysLearningMaterialsPageVo vo : rows) {
                 if(vo.getIsOpen().equals(0))
                 {
@@ -301,17 +304,23 @@ public class PanelServiceImpl implements PanelService {
                 if (ObjectUtil.isEmpty(json)) {
                     continue;
                 }
-                final List<String> list = JSON.parseArray(json, String.class);
-                for (String str : list) {
-                    final Map map = JSON.parseObject(str, Map.class);
-                    map.put("createTime", vo.getCreateTime());
-
-                    fileLit.add(JSON.toJSONString(map));
+                List<FileObject> objects = new ArrayList<>();
+                List<String> lista =  com.alibaba.fastjson2.JSON.parseArray(json, String.class);
+                for(String str:lista){
+                    FileObject object = JSONObject.parseObject(str,FileObject.class);
+                    objects.add(object);
                 }
-
-//                fileLit.addAll(list);
+                vo.setFileObjectList(objects);
+                resultList.add(vo);
+//                final List<String> list = JSON.parseArray(json, String.class);
+//                for (String str : list) {
+//                    final Map map = JSON.parseObject(str, Map.class);
+//                    map.put("createTime", vo.getCreateTime());
+//
+//                    fileLit.add(JSON.toJSONString(map));
+//                }
             }
-            hashMap.put("index2", fileLit);
+            hashMap.put("index2", resultList);
         }
     }
 }

+ 6 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/QuestionReformEnum.java

@@ -6,7 +6,12 @@ public enum QuestionReformEnum {
     /**
      * 已逾期
      */
-    OverDue(12);
+    OverDue(12),
+
+    /**
+     * 逾期整改
+     */
+    OverReformed(13);
 
     private final Integer value;
 

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/domain/Question.java

@@ -152,6 +152,7 @@ public class Question extends BaseEntity {
     /**
      * 整改期限
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @ApiModelProperty(value = "整改期限")
     private Date reformDeadline;
 

+ 7 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/dto/QuestionExportDto.java

@@ -95,6 +95,13 @@ public class QuestionExportDto {
     private Integer confirmStatus;
 
     /**
+     * 整改状态
+     */
+
+    @ExcelIgnore
+    private Integer reformStatus;
+
+    /**
      * 确认状态
      */
     @ExcelProperty(value="确认状态",index = 11)

+ 4 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/AppQuestionServiceImpl.java

@@ -85,7 +85,10 @@ public class AppQuestionServiceImpl extends ServiceImpl<QuestionMapper, Question
         //获取数据
         page = baseMapper.pageApp(page, query, DateUtil.beginOfDay(new Date()));
         page.getRecords().forEach(r -> {
-            if (ObjectUtil.notEqual(r.getConfirmStatus(), QuestionConfirmEnum.Closed.getValue()) &&
+            if ((ObjectUtil.notEqual(r.getConfirmStatus(), QuestionConfirmEnum.Closed.getValue()) &&
+                ObjectUtil.notEqual(r.getReformStatus(), QuestionReformEnum.Reformed.getValue()) &&
+                ObjectUtil.notEqual(r.getReformStatus(), QuestionReformEnum.OverReformed.getValue()))
+                    &&
                     r.getReformDeadline().before(DateUtil.beginOfDay(new Date()))) {
                 //任务未结束并且过了整改结束日期
                 r.setOverdueStatus(QuestionReformEnum.OverDue.getValue());

+ 10 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionReformServiceImpl.java

@@ -160,8 +160,16 @@ public class QuestionReformServiceImpl extends ServiceImpl<QuestionMapper, Quest
 
         LambdaUpdateWrapper<Question> updateWrapper = new LambdaUpdateWrapper();
         updateWrapper.eq(Question::getId, reformDto.getId());
-        updateWrapper.set(Question::getReformStatus, QuestionReformEnum.Reformed.getValue())
-                .set(Question::getConfirmStatus, QuestionConfirmEnum.Closed.getValue());
+//        updateWrapper.set(Question::getReformStatus, QuestionReformEnum.Reformed.getValue());
+//                .set(Question::getConfirmStatus, QuestionConfirmEnum.Closed.getValue());
+
+        if (question.getReformDeadline().before(DateUtil.beginOfDay(new Date()))) {
+            updateWrapper.set(Question::getReformStatus, QuestionReformEnum.OverReformed.getValue());
+        }
+        else
+        {
+            updateWrapper.set(Question::getReformStatus, QuestionReformEnum.Reformed.getValue());
+        }
 
         QuestionFlow flow = new QuestionFlow();
         flow.setQuestionId(reformDto.getId());

+ 15 - 9
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java

@@ -94,7 +94,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         page = baseMapper.pageQuestion(page, query, DateUtil.beginOfDay(new Date()));
         page.getRecords().forEach(r -> {
             if(isOverdue(r)){
-                r.setOverdueStatus(QuestionConfirmEnum.OverDue.getValue());
+                r.setOverdueStatus(QuestionReformEnum.OverDue.getValue());
             }
         });
 //        Page<QuestionPageDto> r =page.
@@ -141,13 +141,13 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     }
 
     private boolean isOverdue(Question q){
-        return isOverdue(q.getConfirmStatus(),q.getReformDeadline());
+        return isOverdue(q.getConfirmStatus(),q.getReformStatus(),q.getReformDeadline());
     }
 
-    private boolean isOverdue(Integer confirmStatus,Date reformDeadLine){
-        if (ObjectUtil.notEqual(confirmStatus, QuestionConfirmEnum.Closed.getValue()) &&
-                reformDeadLine.before(DateUtil.beginOfDay(new Date()))) {
-            //任务未结束并且过了整改结束日期
+    private boolean isOverdue(Integer confirmStatus,Integer reformStatus,Date reformDeadLine){
+        if (ObjectUtil.equal(reformStatus, QuestionReformEnum.Unreform.getValue()) &&
+            reformDeadLine.before(DateUtil.beginOfDay(new Date()))) {
+            //任务未结束、任务不处于已整改、逾期整改状态 并且过了整改结束日期
             return true;
         }else{
             return  false;
@@ -313,7 +313,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         List<QuestionExportDto> list = baseMapper.selectQuestionExportList(pageDto, DateUtil.beginOfDay(new Date()));
         Integer index = 1;
         for (QuestionExportDto questionExportDto : list) {
-            if(isOverdue(questionExportDto.getConfirmStatus(),questionExportDto.getReformDeadline())){
+            if(isOverdue(questionExportDto.getConfirmStatus(),questionExportDto.getReformStatus(),questionExportDto.getReformDeadline())){
                 questionExportDto.setConfirmStatusText("已逾期");
             }
             questionExportDto.setIndex(index++);
@@ -431,7 +431,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
 
     private List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto, Long confirmButton, Long dissentButton, Long reformButton) {
         LambdaQueryWrapper<Question> wrapper = generateCurUserTaskWrapper(panelListDto, confirmButton, dissentButton, reformButton);
-        wrapper.orderByAsc(Question::getConfirmStatus);
+        wrapper.orderByAsc(Question::getConfirmStatus).orderByDesc(Question::getReformDeadline);
         if (wrapper.isEmptyOfWhere()) {
             return new ArrayList<>();
         } else {
@@ -453,7 +453,13 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                 if (ObjectUtil.isNull(item.getReformStatus())) {
                     vo.setStatus(item.getConfirmStatus());
                 } else {
-                    vo.setStatus(item.getReformStatus());
+                    if (ObjectUtil.equal(item.getReformStatus(), QuestionReformEnum.Unreform.getValue())
+                            && item.getReformDeadline().before(DateUtil.beginOfDay(new Date()))) {
+                        //任务已逾期
+                        vo.setStatus(QuestionReformEnum.OverReformed.getValue());
+                    }else{
+                        vo.setStatus(item.getReformStatus());
+                    }
                 }
 
                 return vo;

+ 5 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ResumptionController.java

@@ -95,13 +95,15 @@ public class ResumptionController {
                 } else if (r.getStatus() == 4) {
                     all.getDay().get("3").add(r);
                 } else {
-                    if (DateUtil.beginOfDay(request.getDateTime()).compareTo(DateUtil.beginOfDay(r.getPlanStartTime())) == 0) {
+//                    if (DateUtil.beginOfDay(request.getDateTime()).compareTo(DateUtil.beginOfDay(r.getPlanStartTime())) == 0) {
                         //未开始和进行中视为待完成
 //                        if (r.getStatus() == 1 || r.getStatus() == 2) {
-                        all.getDay().get("1").add(r);
+                    if (DateUtil.date().compareTo(r.getPlanEndTime())>0) {
+                        r.setStatus(4);
+                        all.getDay().get("3").add(r);
 //                        }
                     } else {
-                        all.getDay().get("3").add(r);
+                        all.getDay().get("1").add(r);
                     }
                 }
                 //当前时间等于开始时间

+ 6 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionServiceImpl.java

@@ -294,7 +294,9 @@ public class ResumptionServiceImpl implements ResumptionService {
         }
 
         if(ResumptionStatus.NO_START.getCode().equals(resumption.getStatus()) ||
-                ResumptionStatus.OUT_DATE.getCode().equals(resumption.getStatus())){
+                ResumptionStatus.OUT_DATE.getCode().equals(resumption.getStatus()) ||
+                ResumptionStatus.PROGRESS.getCode().equals(resumption.getStatus())
+        ){
             //待履职时,需要对所有标签进行筛选
             List<ResumptionNFCVo> news = new ArrayList<>();
             Set<String> areaIds = new HashSet<>();
@@ -318,7 +320,9 @@ public class ResumptionServiceImpl implements ResumptionService {
             }
 
             for (ResumptionNFCVo nfc : nfcs) {
-                nfc.setStatus(0);
+                if( !ResumptionStatus.PROGRESS.getCode().equals(resumption.getStatus())){
+                    nfc.setStatus(0);
+                }
                 if(areaIds.contains(nfc.getAreaId().toString())){
                     Integer scan = scans.get(nfc.getAreaId().toString());
                     nfc.setPointScan(scan);

+ 4 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/mapper/ResumptionMapper.java

@@ -96,6 +96,10 @@ public interface ResumptionMapper extends BaseMapper<Resumption> {
 
     List<Resumption> selectBySubmitTimeAndPlanType(@Param("date") Date date, @Param("planType") List<Integer> planType, @Param("orgId") Long orgId);
 
+    List<Resumption> selectByEndDateAndPlanType(@Param("startDate") Date startDate,@Param("endDate") Date endDate, @Param("planType") List<Integer> planType, @Param("orgId") Long orgId);
+
+
+
     void batchInsertResumptionData(@Param("list") List<AppResumptionData> list);
 
     void batchInsertResumptionQuestion(@Param("list") List<Question> list);

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/IResumptionRecordService.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionNFCDto;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionRecordPageDto;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionRoleDto;
+import com.xunmei.core.resumption.vo.resumptionRecord.AppResumptionDataInfoVo;
 import com.xunmei.core.resumption.vo.resumptionRecord.NFCRecordVo;
 import com.xunmei.core.resumption.vo.resumptionRecord.ResumptionRecordItemVo;
 import com.xunmei.core.resumption.vo.resumptionRecord.ResumptionRecordVo;
@@ -26,6 +27,8 @@ public interface IResumptionRecordService {
 
     ResumptionRecordVo selectInfo(Long resumptionId);
 
+    List<AppResumptionDataInfoVo> getResumptionDataById(Long resumptionId,Integer status,Long planId,Long orgId);
+
     List<IdNameVo> selectResumptionRole(ResumptionRoleDto roleDto);
 
     List<NFCRecordVo> selectNFCRecord(ResumptionNFCDto dto);

+ 153 - 41
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java

@@ -30,11 +30,13 @@ import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.question.QuestionSrcType;
 import com.xunmei.core.question.domain.Question;
 import com.xunmei.core.question.service.IQuestionService;
+import com.xunmei.core.registerbook.mapper.CoreRegisterBookPdfMapper;
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
 import com.xunmei.core.resumption.domain.*;
 import com.xunmei.core.resumption.dto.DistributeDto;
@@ -68,6 +70,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
@@ -116,6 +120,11 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     @Autowired
     private RemoteOrgService remoteOrgService;
 
+    @Autowired
+    private CoreRegisterBookPdfMapper coreRegisterBookPdfMapper;
+
+
+
     @Override
     public List<Long> selectItemIdsByPlanId(Long id) {
         return appPlanToItemMapper.selectItemIdsByPlanId(id);
@@ -300,7 +309,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         }
 
         if (immediateEffect) {
-            resumptionTaskBusiness.rebuildCurrentCycleTask(hsPlans);
+            resumptionTaskBusiness.rebuildCurrentCycleTask(hsPlans,dto.getId());
         }
     }
 
@@ -360,8 +369,18 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         baseMapper.copyPlanOrgs(id, newPlanId);
     }
 
+    private void checkPlanIsCreatingTask(Long planId,String msg)
+    {
+        String redisKey="Resumption_Creating_Task" + planId;
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (hasKey) {
+            throw new ServiceException("该任务正在生成中,现在不能被"+msg+",请稍后再试。");
+        }
+    }
+
     @Override
     public void cheHui(Long id) {
+        checkPlanIsCreatingTask(id,"撤回");
         Date now = new Date();
         AppPlan plan = baseMapper.selectById(id);
         if (ObjectUtil.equal(plan.getTaskHasCompleted(), 1)) {
@@ -931,6 +950,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleted(Long id) throws Exception {
+        checkPlanIsCreatingTask(id,"删除");
         AppPlan plan = baseMapper.selectById(id);
         if (ObjectUtil.isNull(plan)) {
             throw new ServiceException("任务不存在");
@@ -1094,15 +1114,30 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                 throw new SystemException(ErrorMsgConstants.GENERATE_PDF_ERROR);
             }*/
             String pdfUrl = r.getData();
-            CoreRegisterBookPdf registerBookPdf = new CoreRegisterBookPdf();
-            registerBookPdf.setId(IdWorker.getId());
-            registerBookPdf.setRegisterBookType(RegisterBookType.ON_DUTY_USER.getNum());
-            registerBookPdf.setDate(date);
-            registerBookPdf.setOrgId(orgId);
-            registerBookPdf.setOrgName(sysOrg.getShortName());
-            registerBookPdf.setOrgPath(sysOrg.getPath());
-            registerBookPdf.setFileUrl(pdfUrl);
-            registerBookPdf.setFileName(fileName);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            String dateStr = sdf.format(date);
+            LambdaQueryWrapper<CoreRegisterBookPdf> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(CoreRegisterBookPdf::getOrgId,orgId)
+                    .eq(CoreRegisterBookPdf::getDate,dateStr)
+                    .eq(CoreRegisterBookPdf::getRegisterBookType,RegisterBookType.ON_DUTY_USER.getNum())
+                    .like(CoreRegisterBookPdf::getFileName,sysOrg.getName() + "_" + RegisterBookType.ON_DUTY_USER.getText() + "_");
+            CoreRegisterBookPdf registerBookPdf = coreRegisterBookPdfMapper.selectOne(wrapper);
+            if(ObjectUtil.isEmpty(registerBookPdf))
+            {
+                registerBookPdf = new CoreRegisterBookPdf();
+                registerBookPdf.setId(IdWorker.getId());
+                registerBookPdf.setRegisterBookType(RegisterBookType.ON_DUTY_USER.getNum());
+                registerBookPdf.setDate(date);
+                registerBookPdf.setOrgId(orgId);
+                registerBookPdf.setOrgName(sysOrg.getShortName());
+                registerBookPdf.setOrgPath(sysOrg.getPath());
+                registerBookPdf.setFileUrl(pdfUrl);
+                registerBookPdf.setFileName(fileName);
+            }
+            else{
+                registerBookPdf.setFileUrl(pdfUrl);
+                registerBookPdf.setFileName(fileName);
+            }
             if (StringUtils.isEmpty(registerBookPdf.getFileName()) || StringUtils.isEmpty(pdfUrl)) {
                 throw new SystemException(ErrorMsgConstants.GENERATE_PDF_ERROR);
             }
@@ -1136,16 +1171,32 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
             if (ObjectUtil.isNull(id)) {
                 throw new SystemException(ErrorMsgConstants.GENERATE_PDF_ERROR);
             }*/
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            String dateStr = sdf.format(date);
+
             String pdfUrl = r.getData();
-            CoreRegisterBookPdf registerBookPdf = new CoreRegisterBookPdf();
-            registerBookPdf.setId(IdWorker.getId());
-            registerBookPdf.setRegisterBookType(RegisterBookType.SECURITY_PERFORMANCE.getNum());
-            registerBookPdf.setDate(date);
-            registerBookPdf.setOrgId(orgId);
-            registerBookPdf.setOrgName(sysOrg.getShortName());
-            registerBookPdf.setOrgPath(sysOrg.getPath());
-            registerBookPdf.setFileUrl(pdfUrl);
-            registerBookPdf.setFileName(fileName);
+            LambdaQueryWrapper<CoreRegisterBookPdf> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(CoreRegisterBookPdf::getOrgId,orgId)
+                    .eq(CoreRegisterBookPdf::getDate, dateStr)
+                    .eq(CoreRegisterBookPdf::getRegisterBookType,RegisterBookType.SECURITY_PERFORMANCE.getNum())
+                    .like(CoreRegisterBookPdf::getFileName,sysOrg.getName() + "_" + RegisterBookType.SECURITY_PERFORMANCE.getText() + "_");
+            CoreRegisterBookPdf registerBookPdf = coreRegisterBookPdfMapper.selectOne(wrapper);
+            if(ObjectUtil.isEmpty(registerBookPdf))
+            {
+                registerBookPdf = new CoreRegisterBookPdf();
+                registerBookPdf.setId(IdWorker.getId());
+                registerBookPdf.setRegisterBookType(RegisterBookType.SECURITY_PERFORMANCE.getNum());
+                registerBookPdf.setDate(date);
+                registerBookPdf.setOrgId(orgId);
+                registerBookPdf.setOrgName(sysOrg.getShortName());
+                registerBookPdf.setOrgPath(sysOrg.getPath());
+                registerBookPdf.setFileUrl(pdfUrl);
+                registerBookPdf.setFileName(fileName);
+            }
+            else{
+                registerBookPdf.setFileUrl(pdfUrl);
+                registerBookPdf.setFileName(fileName);
+            }
             if (StringUtils.isEmpty(registerBookPdf.getFileName()) || StringUtils.isEmpty(pdfUrl)) {
                 throw new SystemException(ErrorMsgConstants.GENERATE_PDF_ERROR);
             }
@@ -1158,8 +1209,8 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     public void buildPdf(Date date) {
 
         List<Resumption> resumptions = resumptionMapper.selectList(new LambdaQueryWrapper<Resumption>()
-                .like(Resumption::getSubmitTime, DateUtils.toLocalDate(date))
-                .eq(Resumption::getStatus, 3)
+                .like(Resumption::getYmdDate, DateUtils.toLocalDate(date))
+//                .eq(Resumption::getStatus, 3)
                 .select(Resumption::getOrgId));
         List<Long> orgIds = resumptions.stream().map(Resumption::getOrgId).distinct().collect(Collectors.toList());
         for (Long orgId : orgIds) {
@@ -1201,15 +1252,31 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                     throw new SystemException(ErrorMsgConstants.GENERATE_PDF_ERROR);
                 }*/
                 String pdfUrl = r.getData();
-                CoreRegisterBookPdf registerBookPdf = new CoreRegisterBookPdf();
-                registerBookPdf.setId(IdWorker.getId());
-                registerBookPdf.setRegisterBookType(RegisterBookType.getEnums((Integer) data.get("planType")).getNum());
-                registerBookPdf.setDate(date);
-                registerBookPdf.setOrgId(orgId);
-                registerBookPdf.setOrgName(sysOrg.getShortName());
-                registerBookPdf.setOrgPath(sysOrg.getPath());
-                registerBookPdf.setFileUrl(pdfUrl);
-                registerBookPdf.setFileName(data.get("fileName").toString());
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                String dateStr = sdf.format(date);
+                LambdaQueryWrapper<CoreRegisterBookPdf> wrapper = new LambdaQueryWrapper<>();
+                wrapper.eq(CoreRegisterBookPdf::getOrgId,orgId)
+                        .eq(CoreRegisterBookPdf::getDate,dateStr)
+                        .eq(CoreRegisterBookPdf::getRegisterBookType,RegisterBookType.getEnums((Integer) data.get("planType")).getNum())
+                        .like(CoreRegisterBookPdf::getFileName,sysOrg.getName() + "_" + RegisterBookType.getEnums((Integer) data.get("planType")).getText() + "_");
+                CoreRegisterBookPdf registerBookPdf = coreRegisterBookPdfMapper.selectOne(wrapper);
+                if(ObjectUtil.isEmpty(registerBookPdf))
+                {
+                    registerBookPdf = new CoreRegisterBookPdf();
+                    registerBookPdf.setId(IdWorker.getId());
+                    registerBookPdf.setRegisterBookType(RegisterBookType.getEnums((Integer) data.get("planType")).getNum());
+                    registerBookPdf.setDate(date);
+                    registerBookPdf.setOrgId(orgId);
+                    registerBookPdf.setOrgName(sysOrg.getShortName());
+                    registerBookPdf.setOrgPath(sysOrg.getPath());
+                    registerBookPdf.setFileUrl(pdfUrl);
+                    registerBookPdf.setFileName(data.get("fileName").toString());
+                }
+                else{
+                    registerBookPdf.setFileUrl(pdfUrl);
+                    registerBookPdf.setFileName(data.get("fileName").toString());
+                }
+
                 if (StringUtils.isEmpty(registerBookPdf.getFileName()) || StringUtils.isEmpty(pdfUrl)) {
                     throw new SystemException(ErrorMsgConstants.GENERATE_PDF_ERROR);
                 }
@@ -1223,6 +1290,12 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     private List<Map<String, Object>> getFtlResumptionAllDay(SysOrg sysOrg, Date date) {
         //查询执行时刻为全天的的履职数据
         List<Resumption> allDayDataList = resumptionMapper.selectBySubmitTimeAndPlanType(date, Arrays.asList(4, 5, 6), sysOrg.getId());
+        // 获取未完成且任务结束时间在当天
+        List<Resumption> dataList2 = resumptionMapper.selectByEndDateAndPlanType(DateUtil.beginOfDay(date),DateUtil.endOfDay(date), Arrays.asList(4, 5, 6), sysOrg.getId());
+        if(dataList2.size()>0)
+        {
+            allDayDataList.addAll(dataList2);
+        }
         //全天的的履职数据需要生成三种登记簿,所以还需要跟根据任务类型来分组 // 4:“110”入侵报警系统测试 5:不间断电源(UPS)维护 6:离行式自助银行巡检
         final Map<Integer, List<Resumption>> listMap = allDayDataList.stream().filter(res -> Arrays.asList(4, 5, 6).contains(res.getPlanType())).collect(Collectors.groupingBy(Resumption::getPlanType));
         List<Map<String, Object>> maps = new ArrayList<>();
@@ -1233,8 +1306,13 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
             List<AppResumptionDataInfoVo> allDayInfo = getItems(allDayDataList);
             Map<Long, List<AppResumptionDataInfoVo>> afterf = allDayInfo.stream().collect(Collectors.groupingBy(AppResumptionDataInfoVo::getItemId));
             data.put(DictUtils.getDictLabel(DictConstants.RESUMPTION_PLAN_EXEC, 1), getResult(afterf));
+            String tempSubmitNames=  allDayDataList.stream().map(Resumption::getSubmitorName).distinct().filter(x->ObjectUtil.isNotEmpty(x)).collect(Collectors.joining(","));
+            if("null".equals(tempSubmitNames))
+            {
+                tempSubmitNames=StringUtils.EMPTY;
+            }
             // 提交人
-            data.put("submiterNames", allDayDataList.stream().map(Resumption::getSubmitorName).distinct().collect(Collectors.joining(",")));
+            data.put("submiterNames", tempSubmitNames);
             // 获取任务相关问题
             data.put("questions", getListQuestionPdfVo(allDayDataList.stream().map(Resumption::getId).collect(Collectors.toList())));
             data.put("title", RegisterBookType.getEnums(planType).getText());
@@ -1249,12 +1327,24 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
 
     private Map<String, Object> getFtlResumptionNotWorkTime(Long orgId, Date date) {
         Map<String, Object> data = new HashMap<>();
+        // 获取当天提交已完成的履职任务
         List<Resumption> dataList = resumptionMapper.selectBySubmitTimeAndPlanType(date, Arrays.asList(7), orgId);
+        // 获取未完成且任务结束时间在当天
+        List<Resumption> dataList2 = resumptionMapper.selectByEndDateAndPlanType(DateUtil.beginOfDay(date),DateUtil.endOfDay(date), Arrays.asList(7), orgId);
+        if(dataList2.size()>0)
+        {
+            dataList.addAll(dataList2);
+        }
         List<AppResumptionDataInfoVo> notWorkTimeInfo = getItems(dataList);
         Map<Long, List<AppResumptionDataInfoVo>> afterf = notWorkTimeInfo.stream().collect(Collectors.groupingBy(AppResumptionDataInfoVo::getItemId));
         data.put(DictUtils.getDictLabel(DictConstants.RESUMPTION_PLAN_EXEC, 5), getResult(afterf));
+        String tempSubmitNames= dataList.stream().map(Resumption::getSubmitorName).distinct().filter(x->ObjectUtil.isNotEmpty(x)).collect(Collectors.joining(","));
+        if("null".equals(tempSubmitNames))
+        {
+            tempSubmitNames=StringUtils.EMPTY;
+        }
         // 提交人
-        data.put("submiterNames", dataList.stream().map(Resumption::getSubmitorName).distinct().collect(Collectors.joining(",")));
+        data.put("submiterNames", tempSubmitNames);
         // 获取任务相关问题
         data.put("questions", getListQuestionPdfVo(dataList.stream().map(Resumption::getId).collect(Collectors.toList())));
         return data;
@@ -1299,7 +1389,16 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         submiterNames.addAll(ing.stream().map(x -> x.getSubmitorName()).collect(Collectors.toList()));
         submiterNames.addAll(after.stream().map(x -> x.getSubmitorName()).collect(Collectors.toList()));
         submiterNames = submiterNames.stream().distinct().collect(Collectors.toList());
-        data.put("submiterNames", String.join(",", submiterNames));
+        if(ObjectUtil.isNotEmpty(submiterNames))
+        {
+            submiterNames= submiterNames.stream().filter(x->ObjectUtil.isNotEmpty(x)).collect(Collectors.toList());
+        }
+        String tempSubmitNames= String.join(",", submiterNames);
+        if("null".equals(tempSubmitNames) || StringUtils.isEmpty(tempSubmitNames))
+        {
+            tempSubmitNames=StringUtils.EMPTY;
+        }
+        data.put("submiterNames", tempSubmitNames);
         // 获取任务相关问题
         List<Long> taskIds = before.stream().map(x -> x.getId()).collect(Collectors.toList());
         taskIds.addAll(ing.stream().map(x -> x.getId()).collect(Collectors.toList()));
@@ -1311,11 +1410,11 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     public List<AppResumptionDataInfoVo> getItems(List<Resumption> resumptions) {
         List<AppResumptionDataInfoVo> vos = new ArrayList<>();
         for (Resumption r : resumptions) {
-            ResumptionRecordVo resumptionRecordVo = resumptionRecordService.selectInfo(r.getId());
-            List<ResumptionRecordItemVo> items = resumptionRecordVo.getItems();
-            for (ResumptionRecordItemVo v : items) {
-                vos.addAll(v.getDataInfoList());
-            }
+            vos.addAll(resumptionRecordService.getResumptionDataById(r.getId(),r.getStatus(),r.getPlanId(),r.getOrgId()));
+//            List<ResumptionRecordItemVo> items = resumptionRecordVo.getItems();
+//            for (ResumptionRecordItemVo v : items) {
+//                vos.addAll(v.getDataInfoList());
+//            }
         }
         return vos;
     }
@@ -1326,11 +1425,22 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         for (Map.Entry<Long, List<AppResumptionDataInfoVo>> map : bef.entrySet()) {
             String pointName = "";
             StringBuilder submitName = new StringBuilder();
-            int result = 0;
+
+            //null:未执行  0:正常 1:异常
+            Integer result = null;
             // for (AppResumptionDataInfoVo vo :bef.get(l)) {
             for (AppResumptionDataInfoVo vo : map.getValue()) {
                 pointName = vo.getPointName();
-                result += vo.getResValue();
+                if(ObjectUtil.isNotNull(vo.getResValue()))
+                {
+                    if(vo.getResValue()>0)
+                    {
+                        result=1;
+                    }
+                    else {
+                        result=0;
+                    }
+                }
                 if (!(submitName.toString().contains(vo.getSubmitName()))) {
                     submitName.append(vo.getSubmitName());
                 }
@@ -1338,7 +1448,9 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
             ResumptionPdf tem = new ResumptionPdf();
             tem.setPointName(pointName);
             tem.setSubmitName(String.valueOf(submitName));
-            tem.setResValue(result > 0 ? 1 : 0);
+            //null:未执行  0:正常 1:异常
+            tem.setResValue(result);
+//            tem.setResValue(result > 0 ? 1 : 0);
             befs.add(tem);
         }
         return befs;

+ 83 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionRecordServiceImpl.java

@@ -16,6 +16,9 @@ import com.xunmei.core.resumption.domain.Resumption;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionNFCDto;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionRecordPageDto;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionRoleDto;
+import com.xunmei.core.resumption.enums.ResumptionStatus;
+import com.xunmei.core.resumption.gx.vo.ResumptionPlanVo;
+import com.xunmei.core.resumption.mapper.AppPlanMapper;
 import com.xunmei.core.resumption.mapper.AppPlanToRoleMapper;
 import com.xunmei.core.resumption.mapper.AppResumptionDataRemarkimgMapper;
 import com.xunmei.core.resumption.mapper.ResumptionRecordMapper;
@@ -69,6 +72,9 @@ public class ResumptionRecordServiceImpl extends ServiceImpl<ResumptionRecordMap
     @Resource
     private AppPlanToRoleMapper appPlanToRoleMapper;
 
+    @Autowired
+    private AppPlanMapper appPlanMapper;
+
     @Override
     public TableDataInfo selectList(ResumptionRecordPageDto pageDto) {
         Page<ResumptionRecordPageVo> page = pageDto.getPageDto();
@@ -213,6 +219,83 @@ public class ResumptionRecordServiceImpl extends ServiceImpl<ResumptionRecordMap
     }
 
     @Override
+    public List<AppResumptionDataInfoVo> getResumptionDataById(Long resumptionId,Integer status,Long planId,Long orgId) {
+
+//        Resumption resumption= baseMapper.selectById(resumptionId);
+
+        //履职状态:1 待履职,2 进行中,3 已完成,4 已过期
+        List<ResumptionPlanVo> resumptionPlanVos = new ArrayList<>();
+        //待履职 和已过期的数据是没有保存过数据的只能根据计划获取
+        if (ResumptionStatus.NO_START.getCode().equals(status) || ResumptionStatus.OUT_DATE.getCode().equals(status)) {
+            resumptionPlanVos = appPlanMapper.selectResumptionPlan(planId, orgId);
+            return ResumptionPlanVoConvertToAppResumptionDataInfoVo(resumptionPlanVos);
+        }
+        else{
+            return getSubmitedResumptionDataById(resumptionId);
+        }
+    }
+
+    private List<AppResumptionDataInfoVo> ResumptionPlanVoConvertToAppResumptionDataInfoVo(List<ResumptionPlanVo> resumptionPlanVos)
+    {
+        List<AppResumptionDataInfoVo> result=new ArrayList<>();
+        resumptionPlanVos.stream().forEach(x->{
+            AppResumptionDataInfoVo temp=new AppResumptionDataInfoVo();
+            temp.setPointName(x.getPointName());
+            temp.setAreaName(x.getAreaName());
+            temp.setItemId(x.getItemId());
+            temp.setExecuteResult(StringUtils.EMPTY);
+            temp.setSubmitName(StringUtils.EMPTY);
+            result.add(temp);
+        });
+
+        return result;
+    }
+
+    /**
+     * 已经提交数据的履职任务  根据任务id 获取 任务数据
+     * @param resumptionId
+     * @return
+     */
+    private List<AppResumptionDataInfoVo> getSubmitedResumptionDataById(Long resumptionId)
+    {
+        List<ResumptionRecordItemVo> arrayList = new ArrayList<>();
+        List<Long> ItemidList = baseMapper.selectItemIdList(resumptionId);
+        List<Long> ruleItemIdList = new ArrayList<>();
+        if (CollectionUtil.isNotEmpty(ItemidList)) {
+            ruleItemIdList = baseMapper.selectRuleItemIdListNew(ItemidList);
+        }
+        for (Long ruleItemId : ruleItemIdList) {
+            ResumptionRecordItemVo info = baseMapper.selectRuleItemInfo(ruleItemId);
+            arrayList.add(info);
+            List<AppResumptionDataInfoVo> dataInfoList = baseMapper.selectDataInfo(ruleItemId, resumptionId);
+            info.setDataInfoList(dataInfoList);
+        }
+        List<ResumptionDataProtectionVo> protectionVos = coreResumptionDataProtectionService.selectProtection(resumptionId);
+        final ArrayList<Long> list = new ArrayList<>();
+        for (ResumptionRecordItemVo infoVo : arrayList) {
+            infoVo.getDataInfoList().stream().map(AppResumptionDataInfoVo::getDataId).forEach(list::add);
+        }
+
+        if (list.size() > 0) {
+            //  final List<AppResumptionDataImg> dataImgList = dataImgMapper.selectList(new LambdaQueryWrapper<AppResumptionDataImg>().in(AppResumptionDataImg::getDataId, list));
+            final List<AppResumptionDataRemarkimg> taskDataRemarkimgList = taskDataRemarkimgMapper.selectList(new LambdaQueryWrapper<AppResumptionDataRemarkimg>().in(AppResumptionDataRemarkimg::getResumptionDataId, list));
+
+            for (ResumptionRecordItemVo infoVo : arrayList) {
+                for (AppResumptionDataInfoVo dataInfoVo : infoVo.getDataInfoList()) {
+                    final List<AppResumptionDataRemarkimg> imgList = taskDataRemarkimgList.stream().filter(appResumptionDataImg -> appResumptionDataImg.getResumptionDataId().equals(dataInfoVo.getDataId())).collect(Collectors.toList());
+                    dataInfoVo.setAppResumptionDataImgList(imgList);
+
+                    List<ResumptionDataProtectionVo> dataProtectionVos = protectionVos.stream().filter(p -> ObjectUtil.equal(dataInfoVo.getDataId(), p.getResumptionDataId())).collect(Collectors.toList());
+                    dataInfoVo.setProtections(dataProtectionVos);
+                }
+            }
+        }
+        List<AppResumptionDataInfoVo> result=new ArrayList<>();
+        arrayList.stream().forEach(x->result.addAll(x.getDataInfoList()));
+        return result;
+    }
+
+    @Override
     public List<IdNameVo> selectResumptionRole(ResumptionRoleDto query) {
         if (ObjectUtil.isNotNull(query.getOrgId())) {
             List<Long> upOrgIds = orgService.getUpOrgs(query.getOrgId());

+ 5 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionServiceImpl.java

@@ -37,6 +37,7 @@ import com.xunmei.system.api.Eto.RoleConditionEto;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteRoleService;
 import com.xunmei.system.api.domain.SysRole;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -223,7 +224,10 @@ public class ResumptionServiceImpl extends ServiceImpl<ResumptionMapper, Resumpt
 
     @Override
     public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
-        List<PanelListVo> list = resumptionMapper.selectCurUserTaskList(panelListDto);
+        PanelListDto request=new PanelListDto();
+        BeanUtils.copyProperties(panelListDto,request);
+        request.setStartTime(DateUtil.date());
+        List<PanelListVo> list = resumptionMapper.selectCurUserTaskList(request);
 //        Date endLimit = DateUtil.beginOfDay(new Date());
 //        list.removeIf(item -> DateUtil.compare(endLimit, item.getEndTime()) >0);
         list.forEach(item -> {

+ 37 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -22,6 +22,7 @@ import com.xunmei.common.core.enums.resumption.ResumptionTaskStatus;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.common.core.utils.Ymd;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.core.TaskCreatingServiceImplBase;
 import com.xunmei.core.resumption.domain.AppPlan;
 import com.xunmei.core.resumption.domain.AppPlanToExecOrg;
@@ -43,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.time.Duration;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -130,6 +132,10 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
             List<Resumption> existTasks = queryTask(range.getStartTime(), range.getEndTime(), CycleCommonEnum.getEnum(appPlan.getPlanCycle()), execOrgIds, Arrays.asList(appPlan.getSolidId()));
 
             for (SysOrg org : orgs) {
+                if(org.getIsLock().equals(1) || org.getDeleted().equals(1))
+                {
+                    continue;
+                }
                 List<Resumption> tasks;
                 List<Short> executedTimes = existTasks.stream().filter(t -> ObjectUtil.equal(t.getOrgId(), org.getId())).map(t -> t.getTimes()).collect(Collectors.toList());
                 if (ObjectUtil.equal(CycleCommonEnum.DAILY.getCode(), appPlan.getPlanCycle())) {
@@ -165,6 +171,34 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
     @Transactional
     @Async
     public void rebuildCurrentCycleTask(List<Object> plans) {
+        rebuildCycleTask(plans);
+    }
+
+
+
+    /*
+     * 按计划重新生成。为保持通用,参数使用object.只支持同属一个父计划的子计划。
+     * */
+    @Override
+    @Transactional
+    @Async
+    public void rebuildCurrentCycleTask(List<Object> plans,Long parentPlanId) {
+        if (CollectionUtils.isEmpty(plans)) {
+            return;
+        }
+
+        String redisKey="Resumption_Creating_Task" + parentPlanId;
+        RedisUtils.deleteObject(redisKey);
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (!hasKey) {
+            RedisUtils.setCacheObject(redisKey, parentPlanId, Duration.ofMillis(1000 * 60*5));
+        }
+        rebuildCycleTask(plans);
+        RedisUtils.deleteObject(redisKey);
+    }
+
+    private void rebuildCycleTask(List<Object> plans)
+    {
         if (CollectionUtils.isEmpty(plans)) {
             return;
         }
@@ -210,6 +244,7 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         buildTask(null, appPlans, workDate);
     }
 
+
     @Override
     public void rebuildDayTask(List<Long> orgIds, SysWorkTime workTime) {
         rebuildTask(orgIds, workTime.getYmdDate(), workTime.getYmdDate(), CycleCommonEnum.DAILY, workTime);
@@ -328,8 +363,8 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
     @Override
     public Boolean updateTaskStatus() {
         LambdaUpdateWrapper<Resumption> wrapper = new LambdaUpdateWrapper<Resumption>();
-        Date date = DateUtil.beginOfDay(new Date());
-        wrapper.lt(Resumption::getPlanEndTime, date)
+        //Date date = DateUtil.beginOfDay(new Date());
+        wrapper.lt(Resumption::getPlanEndTime, new Date())
                 .in(Resumption::getStatus, Arrays.asList(1, 2))//未开始、进行中
                 .set(Resumption::getStatus, 4);
         return resumptionService.update(wrapper);

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusinessService.java

@@ -4,4 +4,5 @@ import java.util.List;
 
 public interface ResumptionTaskBusinessService {
     void rebuildCurrentCycleTask(List<Object> plans);
+    void rebuildCurrentCycleTask(List<Object> plans,Long parentPlanId);
 }

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/controller/CoreMonitoringRetrievalTaskController.java

@@ -192,7 +192,7 @@ public class CoreMonitoringRetrievalTaskController extends BaseController {
      *
      * @return
      */
-    @InnerAuth
+//    @InnerAuth
     @GetMapping("/initializationAccessTask")
     public AjaxResult initializationAccessTask() {
         try {

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/ICoreMonitoringRetrievalTaskBuilderService.java

@@ -95,6 +95,7 @@ public interface ICoreMonitoringRetrievalTaskBuilderService extends IService<Cor
 //    TableDataInfo selectListApp(CoreMonitoringTaskRegistrationDTO coreMonitoringTaskRegistrationDTO);
 
     void noCycleTask(List<TMonitoringRetrievalPlan> planList);
+    void noCycleTask(List<TMonitoringRetrievalPlan> planList,Long parentPlanId);
 
     void dayTask(LocalDate taskTime);
 

+ 29 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskBuilderServiceImpl.java

@@ -22,6 +22,7 @@ import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.event.WorkTimeChangeEvent;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.Ymd;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.TaskCreatingServiceImplBase;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
@@ -77,6 +78,28 @@ public class CoreMonitoringRetrievalTaskBuilderServiceImpl extends ServiceImpl<C
      */
     @Override
     public void noCycleTask(List<TMonitoringRetrievalPlan> planList) {
+        createTask(planList);
+    }
+
+    @Async
+    /**
+     * 无周期任务生成
+     */
+    @Override
+    public void noCycleTask(List<TMonitoringRetrievalPlan> planList,Long parentPlanId) {
+        // 生成任务为异步方法,新增一个任务正在生成的标识,用于删除计划时的判断
+        String redisKey="Monitoring_Creating_Task" + parentPlanId;
+        RedisUtils.deleteObject(redisKey);
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (!hasKey) {
+            RedisUtils.setCacheObject(redisKey, parentPlanId, Duration.ofMillis(1000 * 60*5));
+        }
+        createTask(planList);
+        RedisUtils.deleteObject(redisKey);
+    }
+
+    private void createTask(List<TMonitoringRetrievalPlan> planList)
+    {
         List<SysOrg> orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.findAllOrg(SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
         List<CoreMonitoringRetrievalTask> taskList = new ArrayList<>();
         LocalDate taskTime = planList.get(0).getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
@@ -238,13 +261,14 @@ public class CoreMonitoringRetrievalTaskBuilderServiceImpl extends ServiceImpl<C
     public void initializationTask() {
         LocalDate today = LocalDate.now();
         LocalDate yesterday = today.minusDays(1);
-        //初始化任务
-        coreMonitoringRetrievalTaskMapper.initializationTask(yesterday.toString());
-        List<Long> longs = coreMonitoringRetrievalTaskMapper.selectTaskByTime(yesterday.toString());
+        List<Long> longs = coreMonitoringRetrievalTaskMapper.selectTaskByTime(today.toString());
         //删除关联
         longs.forEach(l -> {
             coreMonitoringTaskRegistrationMapper.deleteByTaskId(l);
         });
+        //初始化任务
+        coreMonitoringRetrievalTaskMapper.initializationTask(today.toString());
+
     }
 
     @Override
@@ -349,7 +373,7 @@ public class CoreMonitoringRetrievalTaskBuilderServiceImpl extends ServiceImpl<C
             sysOrg.setType(Integer.valueOf(p.getOrgType()));
             List<SysOrg> sysOrgs = remoteOrgService.listByParentIdAndType(sysOrg, SecurityConstants.INNER);*/
             List<SysOrg> sysOrgs = orgList.stream().
-                    filter(s -> (s.getPath() != null && s.getPath().contains(p.getOrgPath())) && (s.getType() != null && s.getType().toString().equals(p.getOrgType())))
+                    filter(s -> (ObjectUtil.equal(s.getIsLock(),0)  && ObjectUtil.equal(s.getDeleted(),0) && s.getPath() != null && s.getPath().contains(p.getOrgPath())) && (s.getType() != null && s.getType().toString().equals(p.getOrgType())))
                     .collect(Collectors.toList());
             for (SysOrg s : sysOrgs) {
                 TMonitoringRetrievalPlan plan = new TMonitoringRetrievalPlan();
@@ -468,7 +492,7 @@ public class CoreMonitoringRetrievalTaskBuilderServiceImpl extends ServiceImpl<C
         CoreMonitoringRetrievalTask task = new CoreMonitoringRetrievalTask();
         task.setId(IdWorker.getId());
         if (totalNumber == 1 && plan.getPlanFrequency() == 1) {
-            task.setTaskName(plan.getPlanName() + "调阅任务");
+            task.setTaskName(plan.getPlanName() ); //+ "调阅任务"
         } else {
             task.setTaskName(plan.getPlanName() + "第" + frequency + "次调阅");
         }

+ 19 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/job/SafetyCheckJobBusiness.java

@@ -17,6 +17,7 @@ import com.xunmei.common.core.enums.PlanStatus;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.IDHelper;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.core.TaskCreatingServiceImplBase;
 import com.xunmei.core.resumption.domain.Resumption;
 import com.xunmei.core.safetyCheck.domain.*;
@@ -38,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.lang.reflect.Array;
 import java.text.SimpleDateFormat;
+import java.time.Duration;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -178,6 +180,23 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
      */
     @Async
     public void createTaskByPlans(List<CoreSafecheckPlan> plans) {
+        createTask(plans);
+    }
+
+    @Async
+    public void createTaskByPlans(List<CoreSafecheckPlan> plans,Long parentPlanId) {
+        String redisKey="SafeCheck_Creating_Task" + parentPlanId;
+        RedisUtils.deleteObject(redisKey);
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (!hasKey) {
+            RedisUtils.setCacheObject(redisKey, parentPlanId, Duration.ofMillis(1000 * 60*5));
+        }
+        createTask(plans);
+        RedisUtils.deleteObject(redisKey);
+    }
+
+    private void createTask(List<CoreSafecheckPlan> plans)
+    {
         try {
             if (plans != null && plans.size() > 0) {
                 DateTime datetime = new DateTime();

+ 13 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java

@@ -27,6 +27,7 @@ import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.question.QuestionSrcType;
@@ -298,7 +299,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
         }
 
         if (immediateEffect) {
-            safetyCheckJobBusiness.createTaskByPlans(hsPlans);
+            safetyCheckJobBusiness.createTaskByPlans(hsPlans,dto.getId());
         }
     }
 
@@ -372,7 +373,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
         }
 
         if (ObjectUtil.isNotEmpty(newlist)) {
-            safetyCheckJobBusiness.createTaskByPlans(newlist);
+            safetyCheckJobBusiness.createTaskByPlans(newlist,id);
         }
 
         return 1;
@@ -389,9 +390,17 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
             throw new ServiceException("已超过无周期任务的结束时间");
         }
     }
-
+    private void checkPlanIsCreatingTask(Long planId,String msg)
+    {
+        String redisKey="SafeCheck_Creating_Task" + planId;
+        Boolean hasKey = RedisUtils.hasKey(redisKey);
+        if (hasKey) {
+            throw new ServiceException("该任务正在生成中,现在不能被"+msg+",请稍后再试。");
+        }
+    }
     @Override
     public void cheHui(Long id) {
+        checkPlanIsCreatingTask(id,"撤回");
         Date now = new Date();
         CoreSafecheckPlan plan = baseMapper.selectById(id);
         if (ObjectUtil.equal(plan.getTaskHasCompleted(), 1)) {
@@ -858,6 +867,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
     @Override
     public int deleteCoreSafecheckPlanByIds(Long[] ids) {
         for (Long id : ids) {
+            checkPlanIsCreatingTask(id,"删除");
             CoreSafecheckPlan plan = baseMapper.selectById(id);
             List<CoreSafecheckPlan> plans = baseMapper.selectList(new LambdaQueryWrapper<CoreSafecheckPlan>()
                     .in(CoreSafecheckPlan::getId, ids).or().in(CoreSafecheckPlan::getParentId, ids)

+ 8 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskServiceImpl.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.xunmei.common.core.constant.DictConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.drill.domain.CoreDrillTask;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
@@ -81,7 +82,7 @@ public class CoreSafetyTaskServiceImpl extends ServiceImpl<CoreSafetyTaskMapper,
             page = new Page<>();
         }
         //查询条件
-        QueryWrapper<CoreSafetyTask> query = new QueryWrapper<>(coreSafetyTask);
+//        QueryWrapper<CoreSafetyTask> query = new QueryWrapper<>(coreSafetyTask);
         //下穿
 //        if (coreSafetyTask.getCheckSub()){
 //            List<Long> ids = orgService.selectCheckSubOrgIdList(coreSafetyTask.getOrgId());
@@ -91,9 +92,9 @@ public class CoreSafetyTaskServiceImpl extends ServiceImpl<CoreSafetyTaskMapper,
 //            query.in("org_id",ids);
 //        }
         //时间范围查询
-        if (coreSafetyTask.getParams().get("beginTime") != null && coreSafetyTask.getParams().get("endTime") != null) {
-            query.between("create_time", coreSafetyTask.getParams().get("beginTime"), coreSafetyTask.getParams().get("endTime"));
-        }
+//        if (coreSafetyTask.getParams().get("beginTime") != null && coreSafetyTask.getParams().get("endTime") != null) {
+//            query.between("create_time", coreSafetyTask.getParams().get("beginTime"), coreSafetyTask.getParams().get("endTime"));
+//        }
         if (CollectionUtil.isNotEmpty(coreSafetyTask.getRange()) && coreSafetyTask.getRange().size() == 2) {
             coreSafetyTask.getRange().set(0, DateUtil.beginOfDay(coreSafetyTask.getRange().get(0)));
             coreSafetyTask.getRange().set(1, DateUtil.endOfDay(coreSafetyTask.getRange().get(1)));
@@ -279,6 +280,9 @@ public class CoreSafetyTaskServiceImpl extends ServiceImpl<CoreSafetyTaskMapper,
         List<CoreSafetyTaskExport> list = coreSafetyTaskMapper.down(coreSafetyTask);
         
         if (ObjectUtil.isNotEmpty(list)) {
+            for (CoreSafetyTaskExport task : list) {
+                task.setIndex(list.indexOf(task) + 1);
+            }
             AtomicInteger xh = new AtomicInteger();
             xh.getAndIncrement();
             if (list.size() > 50000) {

+ 13 - 6
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/SafetyCheckRegisterSericeImpl.java

@@ -384,10 +384,11 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
 //            boolean firstPoint = true;
             for (AppTaskRegisterItemVo itemVo : areaVo.getItemList()) {
                 for (AppTaskRegisterPointVo pointVo : itemVo.getPointList()) {
+
 //                    AppTaskRegisterPointVo appPointVo = new AppTaskRegisterPointVo();
 //                    BeanUtils.copyProperties(pointVo, appPointVo);
-//                    BeanUtils.copyProperties(itemVo, appPointVo);
-//                    BeanUtils.copyProperties(areaVo, appPointVo);
+                    BeanUtils.copyProperties(itemVo, pointVo);
+                    BeanUtils.copyProperties(areaVo, pointVo);
 //                    appPointVo.setNfcList(new ArrayList<>());
 //                    if (firstPoint) {
 //                        appPointVo.setNfcList(areaVo.getNfcList());
@@ -414,6 +415,7 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
         }
         data.setPlanEndTime(DateUtil.endOfDay(data.getPlanStartTime()).setField(DateField.MILLISECOND, 0));
         data.setPlanStartTime(DateUtil.beginOfDay(data.getPlanStartTime()));
+        data.setSubmitTime(data.getPlanStartTime());
         return webSubmit(data, true);
     }
 
@@ -428,7 +430,7 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
             throw new ServiceException("任务未到开始时间");
         }
 
-        if (DateUtil.beginOfDay(data.getPlanEndTime()).before(DateUtil.beginOfDay(new Date()))) {
+        if (!isNewTask && DateUtil.beginOfDay(data.getPlanEndTime()).before(DateUtil.beginOfDay(new Date()))) {
             throw new ServiceException("任务已过结束时间");
         }
 
@@ -481,7 +483,7 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
             }
 
             if (ObjectUtil.equal(data.getIsSubmit(), 1) && ObjectUtil.equal(point.getValue(), 1)) {
-                Question question = dataVoToQuestion(data, org, point, pointVo, user);
+                Question question = dataVoToQuestion(data, org, point, pointVo, user,isNewTask);
                 questions.add(question);
             }
         }
@@ -563,7 +565,7 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
         return img;
     }
 
-    private Question dataVoToQuestion(TaskRegisterVo task, SysOrg org, CoreSafetyTaskData point, AppTaskRegisterPointVo pointVo, LoginUser user) {
+    private Question dataVoToQuestion(TaskRegisterVo task, SysOrg org, CoreSafetyTaskData point, AppTaskRegisterPointVo pointVo, LoginUser user,Boolean isNewTask) {
         Question question = Question.builder()
                 .srcTaskId(task.getId())
                 .orgId(task.getBeCheckedOrgId())
@@ -583,6 +585,11 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
                 .reformDeadline(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), Integer.parseInt(point.getRectificationDeadline()))))
                 .build();
 
+        if(isNewTask)
+        {
+            question.setSubmitTime(task.getPlanStartTime());
+            question.setReformDeadline(DateUtil.endOfDay(DateUtil.offsetDay(task.getPlanStartTime(), Integer.parseInt(point.getRectificationDeadline()))));
+        }
         return question;
     }
 
@@ -641,7 +648,7 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
         task.setYmdWeek(ymd.getWeek().longValue());
         task.setYmdYear(ymd.getYear().longValue());
         task.setYmdHalfyear(ymd.getHalfyear().longValue());
-        task.setSubmitTime(new Date());
+        task.setSubmitTime(data.getPlanStartTime());
         task.setSubmitorId(SecurityUtils.getUserId());
         task.setSubmitBy(SecurityUtils.getLoginUser().getName());
 

+ 2 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/weather/service/impl/WeatherWarningServiceImpl.java

@@ -111,9 +111,9 @@ public class WeatherWarningServiceImpl extends ServiceImpl<WeatherWarningMapper,
                     }
                      if(CollectionUtils.isNotEmpty(listJg)){
                          this.saveBatch(listJg);
-                         //将数据存入redis供界面展示使用暂定6小时
+                         //将数据存入redis供界面展示使用暂定24小时
                          redisTemplate.opsForValue().set("wearth_areaid_"+areaId, JSON.toJSONString(listJg));
-                         this.redisTemplate.expire("wearth_areaid_"+areaId, 6, TimeUnit.HOURS);
+                         this.redisTemplate.expire("wearth_areaid_"+areaId, 24, TimeUnit.HOURS);
                      }
                 }
             }

+ 8 - 7
soc-modules/soc-modules-core/src/main/resources/mapper/board/AppCockpitMapper.xml

@@ -33,7 +33,7 @@
                                        (standard = 1,
                                         IF(date_of_compliance &lt; #{date} and date_of_compliance >= #{prevMonth}, 1,
                                            0), 0))                                                 AS ga382021prev,
-                                   sum(standard = 2)                                               AS ga382015,
+                                (case WHEN LOCATE("1",group_concat(standard))>0 THEN 0 WHEN LOCATE("2",group_concat(standard))>0 AND LOCATE("1",group_concat(standard))&lt;=0 THEN 1  ELSE  0 END)  AS ga382015,
                                    sum(IF
                                        (standard = 2, IF(date_of_compliance >= #{date}, 1, 0), 0)) AS ga382015current,
                                    sum(IF
@@ -42,11 +42,10 @@
                                            0), 0))                                                 AS ga382015prev
                             FROM sys_org_physical_defense_construction
                             WHERE type = 1
-                               OR type = 3
                             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.type = 4)
           and o.path like concat(#{orgPath}, '%')
     </select>
     <select id="selectOverViewResumptionTaskInfo" resultType="com.xunmei.core.board.dto.app.AppOverviewTaskInfoDto">
@@ -158,7 +157,6 @@
                                   FROM sys_org_physical_defense_construction
                                   WHERE type = 1
                                      or type = 2
-                                     OR type = 3
                                   GROUP BY org_id) t1) oh ON o.id = oh.org_id
                  LEFT JOIN sys_org_extend oe on o.id = oe.org_id
         WHERE o.deleted = 0
@@ -244,12 +242,15 @@
                            (q.confirm_status = 3 AND q.reform_status IS NULL, 1, 0))     AS cancelCount,
                sum(
                        IF
-                           (q.confirm_status = 2, 1, 0))                                 AS waitReformCount,
+                           (q.reform_status = 10 AND q.reform_deadline > #{today}, 1, 0))                                 AS waitReformCount,
                sum(
                        IF
                            (q.reform_status = 11, 1, 0))                                 AS reformedCount,
                sum(
                        IF
+                           (q.reform_status = 13, 1, 0))                                 AS overReformedCount,
+               sum(
+                       IF
                            (q.src_type = 1 AND (q.src_task_type = 1 or q.src_task_type = 2 or q.src_task_type = 3), 1,
                             0))                                                          AS resumptionCount,
                sum(
@@ -269,11 +270,11 @@
                            (q.src_type = 2, 1, 0))                                       AS safetyCheckCount,
                sum(
                        IF
-                           (q.src_type = 2 AND q.reform_status = 11, 1, 0))                 safetyCheckReformedCount,
+                           (q.src_type = 2 AND q.reform_status = 11, 1, 0))                 safetyCheckReformCount,
                sum(
                        IF
                            (q.confirm_status >= 2 AND q.src_type = 2, 1, 0))             AS safetyCheckConfirmedCount,
-               sum(if(q.confirm_status != 3 and q.reform_deadline &lt;= #{today}, 1, 0)) as overdueCount
+               sum(if(q.reform_status = 10 and q.reform_deadline &lt;= #{today}, 1, 0)) as overdueCount
         FROM core_question q
         WHERE ((
                            #{startDate}   <![CDATA[<=]]> q.submit_time

+ 70 - 2
soc-modules/soc-modules-core/src/main/resources/mapper/board/CockpitMapper.xml

@@ -164,6 +164,7 @@
 --           and (o.type = 4 OR o.type = 5)
           and o.type = 4
           and o.path like concat(#{orgPath}, '%')
+
     </select>
     <select id="orgInfo" resultType="com.xunmei.core.board.vo.web.OrgInfoVo">
         select sum(if(o.type = 3, 1, 0))                                     as hangsheCount,
@@ -221,11 +222,14 @@
                            (q.confirm_status = 3 AND q.reform_status IS NULL, 1, 0)) AS closedCount,
                sum(
                        IF
-                           (q.confirm_status = 2, 1, 0))                                 AS waitReformCount,
+                           (q.reform_status = 10 and q.reform_deadline > #{today}, 1, 0))                                 AS waitReformCount,
                sum(
                        IF
                            (q.reform_status = 11, 1, 0))                                 AS reformedCount,
-               sum(if(q.confirm_status != 3 and q.reform_deadline &lt;= #{today}, 1, 0)) as overdueCount
+               sum(
+                       IF
+                           (q.reform_status = 13, 1, 0))                                 AS overDueReformedCount,
+               sum(if(q.confirm_status != 3 and q.reform_status!=11 and q.reform_status!=13 and q.reform_deadline &lt;= #{today}, 1, 0)) as overdueCount
         FROM core_question q
         WHERE ((
                            #{startDate}   <![CDATA[<=]]> q.submit_time
@@ -259,4 +263,68 @@
                  INNER JOIN sys_org_map m on o.`code` = m.org_code
         WHERE o.path like CONCAT((SELECT path from sys_org WHERE id = #{orgId}), '%')
     </select>
+    <select id="selectOrgGA38" resultType="com.xunmei.core.board.vo.web.OrgGA38StatisticVo">
+        select
+            t.org_name,
+            t.total,
+            t.ga382021,
+            t.ga382015,
+            t.ga38 as reach_count,
+            FORMAT(t.ga38/t.total,4) as reach_rate
+        from (
+                 SELECT
+                     m.org_name,
+                     m.tj_sort,
+                     count(*) as total,
+                     sum(if(m.ga382021 is null or m.ga382021 = 0, 0, 1))  as ga382021,
+                     sum(if(m.ga38 is null or m.ga38 = 0, 0, 1)) as ga38,
+                     sum(if(m.ga382021current is null or m.ga382021current = 0, 0, 1))   as ga382021current,
+                     sum(if(m.ga382015 is null or m.ga382015 = 0, 0, 1))                 as ga382015,
+                     sum(if(m.ga382015current is null or m.ga382015current = 0, 0, 1))   as ga382015current
+                 from
+                     (select * FROM
+                         (
+                         <if test="type == 3">
+                             SELECT id ,if(breviary is null,short_name,breviary) as org_name,path,sort as tj_sort FROM sys_org WHERE type = 4 AND deleted = 0 and path LIKE CONCAT(#{orgPath},'%') ) a
+                         </if>
+                         <if test="type == 1">
+                             SELECT id ,path FROM sys_org WHERE type = 4 AND deleted = 0 and path LIKE CONCAT(#{orgPath},'%') ) a
+                             LEFT JOIN (SELECT path as dq_path,breviary as org_name,sort as tj_sort FROM sys_org where `name` LIKE CONCAT('%','地区行社') and deleted = 0) c on a.path like CONCAT(c.dq_path,'%')
+                         </if>
+                         <if test="type == 2">
+                             SELECT id ,path FROM sys_org WHERE type = 4 AND deleted = 0 and path LIKE CONCAT(#{orgPath},'%') ) a
+                             LEFT JOIN (SELECT path as dq_path,if(breviary is null,short_name,breviary) as org_name,sort as tj_sort FROM sys_org where type = 3 and deleted = 0) c on a.path like CONCAT(c.dq_path,'%')
+                         </if>
+
+                             LEFT JOIN (
+                                select
+                                t.org_id,
+                                if((t.ga382021 - t.ga382015) &gt;= 0,1,0) as ga382021,
+                                if((t.ga382021 - t.ga382015) &lt; 0,1,0) as ga382015,
+                                if((t.ga382015 + t.ga382021) &gt; 0 ,1,0 ) as ga38,
+                                if((t.ga382021current - t.ga382015current) &gt;= 0,1,0) as ga382021current,
+                                if((t.ga382021current - t.ga382015current) &lt; 0,1,0) as ga382015current
+                                from (
+                                SELECT
+                                org_id,
+                                sum( standard = 1 ) AS ga382021,
+                                sum(
+                                IF
+                                ( standard = 1 AND date_of_compliance &gt;= #{date}, 1, 0 )) AS ga382021current,
+                                sum( standard = 2 ) AS ga382015,
+                                sum(
+                                IF
+                                ( standard = 2 AND date_of_compliance &gt;= #{date}, 1, 0 )) AS ga382015current
+                                FROM
+                                sys_org_physical_defense_construction
+                                WHERE
+                                type = 1
+                                AND standard != 3
+                                GROUP BY
+                                org_id
+                                ) t
+        ) b ON a.id = b.org_id
+                     ) m GROUP BY m.org_name,m.tj_sort
+             ) t ORDER BY t.tj_sort
+    </select>
 </mapper>

+ 21 - 3
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml

@@ -125,6 +125,7 @@
         round(ifnull(avg(t.comment_score),0),2) AS score
         from core_drill_task t inner join sys_org o on t.org_id = o.id
         <where>
+            and o.is_lock=0 and o.deleted=0
             <if test="request.orgPath != null">
                 and o.path like concat(#{request.orgPath}, '%')
             </if>
@@ -196,7 +197,10 @@
         select * from core_drill_task t
         where t.rec_status is not null
         <if test="request.recStatus!=null">
-            and t.rec_status =#{request.recStatus}
+            and t.rec_status =#{request.recStatus} and t.unrec_status is null
+        </if>
+        <if test="request.unRecStatus!=null">
+            and t.unrec_status =#{request.unRecStatus}
         </if>
         and t.org_path like concat(#{request.orgPath},'%')
         <include refid="timeRangeSql"/>
@@ -245,7 +249,7 @@
 
     <update id="updateStatusById">
         update core_drill_task
-        set rec_status=#{recStatus}
+        set rec_status=#{recStatus} ,unrec_status=#{unRecStatus}
         where id = #{drillTaskId}
     </update>
 
@@ -263,6 +267,20 @@
         <include refid="timeRangeSql"/>
         order by field(t.status,5,0,1,2,3,4),t.end_date desc
     </select>
+
+    <select id="selectUserAllDrillSignList" resultType="com.xunmei.common.core.domain.panel.vo.PanelListVo">
+        select distinct t.id as id, title as taskName,t.start_date startTime,t.end_date as endTime,t.status
+        from core_drill_task t
+        inner join core_drill_task_to_user u ON t.id=u.drill_task_id
+        where u.type=1 and u.sign=0 and u.user_id=#{request.userId}
+        and t.status in
+        <foreach collection="list" item="status" open="(" separator="," close=")">
+            #{status}
+        </foreach>
+        <include refid="timeRangeSql"/>
+        order by field(t.status,5,0,1,2,3,4),t.end_date desc
+    </select>
+
     <sql id="timeRangeSql">
         <if test="request.startTime != null and request.endTime != null">
             and (
@@ -313,7 +331,7 @@
         where t.org_path like concat(#{request.orgPath},'%')
         <include refid="timeRangeSql"/>
         <if test="request.orgType==3">
-            and t.rec_status =0
+            and t.rec_status =0 and t.unrec_status is null
         </if>
         <if test="request.orgType==2">
             and t.rec_status =2

+ 11 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml

@@ -147,6 +147,7 @@
         ifnull(SUM(t.status = 2),0) AS finish
         from core_edu_training_task t inner join sys_org o on t.org_id = o.id
         <where>
+            and o.is_lock=0 and o.deleted=0
             <if test="request.orgPath != null">
                 and o.path like concat(#{request.orgPath}, '%')
             </if>
@@ -213,6 +214,16 @@
         <include refid="timeRangeSql"/>
     </select>
 
+    <select id="selectUserAllEduTrainingSignList" resultType="com.xunmei.common.core.domain.panel.vo.PanelListVo">
+        select distinct t.id as id, title as taskName, t.start_date startTime, t.end_date as endTime, t.status
+        from core_edu_training_task t
+        inner join core_edu_training_task_to_user u ON t.id=u.edu_training_task_id
+        where t.status in (0, 1, 4) and u.type=1 and u.sign=0 and u.user_id=#{request.userId}
+        <include refid="timeRangeSql"/>
+    </select>
+
+
+
     <select id="checkHasTaskIsExecuteByPlanParentId" resultType="java.lang.Integer">
         select 1
         from core_edu_training_task

+ 97 - 21
soc-modules/soc-modules-core/src/main/resources/mapper/question/QuestionMapper.xml

@@ -291,10 +291,25 @@
             and q.org_id=#{params.orgId}
         </if>
         <if test="params.confirmStatus!=null">
-            <if test="params.confirmStatus==4">
-                and (q.confirm_status!=3) and q.reform_deadline &lt; #{today}
+<!--            <if test="params.confirmStatus==4">-->
+<!--                and (q.confirm_status!=3) and q.reform_deadline &lt; #{today}-->
+<!--            </if>-->
+<!--            <if test="params.confirmStatus!=4">-->
+<!--                and q.confirm_status=#{params.confirmStatus}-->
+<!--            </if>-->
+            <if test="params.confirmStatus==12">
+                and q.reform_status=10 and q.reform_deadline &lt; #{today}
+            </if>
+            <if test="params.confirmStatus==11 or params.confirmStatus==13">
+                and q.reform_status=#{params.confirmStatus}
+            </if>
+            <if test="params.confirmStatus==10">
+                and q.reform_status=#{params.confirmStatus} and q.reform_deadline > #{today}
+            </if>
+            <if test="params.confirmStatus &lt; 10 and params.confirmStatus!=3">
+                and q.confirm_status=#{params.confirmStatus}
             </if>
-            <if test="params.confirmStatus!=4">
+            <if test="params.confirmStatus==3">
                 and q.confirm_status=#{params.confirmStatus}
             </if>
         </if>
@@ -317,15 +332,36 @@
             and q.org_id=#{params.orgId}
         </if>
         <if test="params.status!=null">
-            <if test="params.status==12">
-                and (q.confirm_status!=3) and q.reform_deadline &lt; #{today}
-            </if>
-            <if test="params.status>=10 and params.status &lt;12">
-                and q.reform_status=#{params.status}
-            </if>
-            <if test="params.status &lt; 10">
-                and q.confirm_status=#{params.status}
-            </if>
+            <choose>
+                <!--已关闭 confirm_status ==3 , 逾期整改 q.reform_status==13  -->
+                <when test="params.status &lt; 10">
+                    and q.confirm_status=#{params.status}
+                </when>
+                <when test="params.status==10">
+                    and q.reform_status=#{params.status} and q.reform_deadline > #{today}
+                </when>
+                <when test="params.status==11 or params.status==13">
+                    and q.reform_status=#{params.status}
+                </when>
+                <when test="params.status==12">
+                    and q.reform_status=10  and q.reform_deadline &lt; #{today}
+                </when>
+                <otherwise>
+                    and q.reform_status=#{params.status}
+                </otherwise>
+            </choose>
+<!--            <if test="params.status==12">-->
+<!--                and (q.confirm_status!=3) and q.reform_status!=11 and q.reform_status!=13  and q.reform_deadline &lt; #{today}-->
+<!--            </if>-->
+<!--            <if test="params.status==13">-->
+<!--                and q.reform_status=#{params.status}-->
+<!--            </if>-->
+<!--            <if test="params.status>=10 and params.status &lt;12">-->
+<!--                and q.reform_status=#{params.status}-->
+<!--            </if>-->
+<!--            <if test="params.status &lt; 10">-->
+<!--                and q.confirm_status=#{params.status}-->
+<!--            </if>-->
         </if>
         <if test="params.reformDate!=null">
             and q.reform_deadline>= #{params.reformDate} and q.submit_time&lt;=#{params.reformDateEnd}
@@ -353,15 +389,42 @@
             and q.org_id=#{params.orgId}
         </if>
         <if test="params.reformStatus!=null">
-            <if test="params.reformStatus==12">
-                and q.confirm_status!=3 and q.reform_deadline &lt; #{today}
-            </if>
-            <if test="params.reformStatus!=12">
-                and q.reform_status=#{params.reformStatus}
-            </if>
+            <choose>
+                <!--已关闭 confirm_status ==3 , 逾期整改 q.reform_status==13  -->
+                <when test="params.reformStatus==12">
+                    and q.confirm_status!=3 and q.reform_status!=13 and q.reform_status!=11 and  q.reform_deadline &lt; #{today}
+                </when>
+                <when test="params.reformStatus!=12 and params.reformStatus==10">
+                    and q.reform_status=#{params.reformStatus} and  q.reform_deadline > #{today}
+                </when>
+                <otherwise>
+                    and q.reform_status=#{params.reformStatus}
+                </otherwise>
+            </choose>
+<!--            <if test="params.reformStatus==12">-->
+<!--                and q.confirm_status!=3 and q.reform_status!=13 and  q.reform_deadline &lt; #{today}-->
+<!--            </if>-->
+<!--            <if test="params.reformStatus!=12 and params.reformStatus==10">-->
+<!--                and q.reform_status=#{params.reformStatus} and  q.reform_deadline > #{today}-->
+<!--            </if>-->
+<!--            <if test="params.reformStatus!=12">-->
+<!--                and q.reform_status=#{params.reformStatus}-->
+<!--            </if>-->
         </if>
         <if test="params.reformRange!=null and params.reformRange.length==2">
-            and q.reform_deadline between #{params.reformRange[0]} and #{params.reformRange[1]}
+<!--            and q.reform_deadline between #{params.reformRange[0]} and #{params.reformRange[1]}-->
+            and ((
+            #{params.reformRange[0]}   <![CDATA[<=]]> q.submit_time
+            and #{params.reformRange[1]} >= q.submit_time
+            )
+            or (
+            #{params.reformRange[0]}    <![CDATA[<=]]> q.reform_deadline
+            and #{params.reformRange[1]} >= q.reform_deadline
+            )
+            or (
+            #{params.reformRange[0]} >= q.submit_time
+            and #{params.reformRange[1]}  <![CDATA[<=]]> q.reform_deadline
+            ))
         </if>
         <if test="params.searchKey!=null">
             and (q.question_desc like concat('%',#{params.searchKey},'%') or q.check_content like
@@ -402,6 +465,7 @@
         q.submitor_name,
         q.submit_time,
         q.confirm_status,
+        q.reform_status,
         q.reform_deadline,
         case q.src_type when 1 then '确认' else ( case f1.execute_status when 0 then '确认' when 1 then '提出异议' else
         '未确认'
@@ -412,7 +476,7 @@
         f2.executor_name as dissenterName,
         f2.description as dissentDesc,
         f3.reform_date as reformDate,
-        case q.reform_status when 10 then '未整改' when 11 then '已整改' else '' end as reformStatusText,
+        case q.reform_status when 10 then '未整改' when 11 then '已整改' when 13 then '逾期整改' else '' end as reformStatusText,
         f3.description as reformDesc,
         o.affiliated_area,
         o.affiliated_bank
@@ -489,7 +553,19 @@
             </if>
         </if>
         <if test="params.reformRange!=null and params.reformRange.length==2">
-            and q.reform_deadline between #{params.reformRange[0]} and #{params.reformRange[1]}
+<!--            and q.reform_deadline between #{params.reformRange[0]} and #{params.reformRange[1]}-->
+            and ((
+            #{params.reformRange[0]}   <![CDATA[<=]]> q.submit_time
+            and #{params.reformRange[1]} >= q.submit_time
+            )
+            or (
+            #{params.reformRange[0]}    <![CDATA[<=]]> q.reform_deadline
+            and #{params.reformRange[1]} >= q.reform_deadline
+            )
+            or (
+            #{params.reformRange[0]} >= q.submit_time
+            and #{params.reformRange[1]}  <![CDATA[<=]]> q.reform_deadline
+            ))
         </if>
         <if test="params.searchKey!=null">
             and (q.question_desc like concat('%',#{params.searchKey},'%') or q.check_content like

+ 1 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/MonitorAccessReportMapper.xml

@@ -31,7 +31,7 @@
         b.id
     </select>
     <select id="selectNetworkNumberByPath" resultType="java.lang.Integer">
-        SELECT COUNT(1) FROM sys_org WHERE path LIKE  concat( #{orgPath}, '%') AND type=4 AND deleted=0
+        SELECT COUNT(1) FROM sys_org WHERE path LIKE  concat( #{orgPath}, '%') AND type=4 AND deleted=0 AND is_lock=0 AND deleted=0
     </select>
     <select id="selectAll" resultType="com.xunmei.core.reportForms.monitor.vo.MonitoringAccessVO">
         SELECT

+ 52 - 30
soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/ResumptionReportMapper.xml

@@ -6,8 +6,8 @@
 
     <select id="selectReport" resultType="com.xunmei.core.reportForms.resumption.vo.ResumptionDayVO">
         SELECT
-        COUNT( d.id ) AS totalRealityRectificationNumber,
-        COUNT( a.id ) AS frontPlanNumber,
+        IFNULL(SUM( a.exception_reform_count ) ,0)AS totalRealityRectificationNumber,
+        COUNT(DISTINCT  a.id ) AS frontPlanNumber,
         IFNULL( SUM( IF ( a.`status` = 3, 1, 0 )), 0 ) AS frontRealityNumber,
         IF
         (
@@ -25,16 +25,22 @@
         )) AS frontRate,
         IFNULL( SUM( a.exception_count ), 0 ) AS frontAbnormalNumber,
         IFNULL(
-        CONCAT( ROUND( COUNT( d.id )/ IFNULL( SUM( a.exception_count ), 0 )* 100, 2 ), '%' ),
+        CONCAT( ROUND( COUNT( a.exception_reform_count )/ IFNULL( SUM( a.exception_count ), 0 )* 100, 2 ), '%' ),
         '0%'
         ) AS totalRealityRectificationRate
         FROM
-        core_resumption a
-        LEFT JOIN core_resumption_plan b ON a.plan_id = b.id
-        LEFT JOIN core_question d ON a.id = d.src_task_id
-        AND d.reform_status = 11
+        (
+            SELECT
+            r.*,
+            b.plan_type,
+            (SELECT COUNT(d.id) from core_question d WHERE r.id = d.src_task_id AND d.reform_status IN (11,13)) as exception_reform_count
+            FROM
+            core_resumption r
+            INNER JOIN sys_org o ON r.org_id=o.id AND o.deleted=0 AND o.is_lock =0
+            LEFT JOIN core_resumption_plan b ON r.plan_id = b.id
+        ) a
         WHERE
-            b.plan_type = #{planType}
+            a.plan_type = #{planType}
           AND a.type = 2
           <if test="orgId !=null">
               AND a.org_id = #{orgId}
@@ -78,12 +84,18 @@
         '%'
         )) AS realityRate
         FROM
-            core_resumption a
-                LEFT JOIN core_resumption_plan b ON a.plan_id = b.id
-                LEFT JOIN core_question c ON c.src_task_id = a.id
-                AND reform_status = 11
+        (
+                SELECT
+                r.*,
+                b.plan_type,
+                (SELECT COUNT(d.id) from core_question d WHERE r.id = d.src_task_id AND d.reform_status IN (11,13)) as exception_reform_count
+                FROM
+                core_resumption r
+                INNER JOIN sys_org o ON r.org_id=o.id AND o.deleted=0 AND o.is_lock =0
+                LEFT JOIN core_resumption_plan b ON r.plan_id = b.id
+        ) a
         WHERE
-            b.plan_type =4
+            a.plan_type =4
           <if test="orgId !=null">
               and a.org_id=#{orgId}
           </if>
@@ -114,20 +126,24 @@
       /*  COUNT( c.id ) AS realityRectificationNumber,*/
         IF
         (
-        COUNT( c.id )= 0
+        COUNT( a.exception_reform_count )= 0
         OR IFNULL( a.exception_count, 0 )= 0,
         '0%',
-        CONCAT(ROUND(COUNT( c.id )/ IFNULL( a.exception_count, 0 )* 100,2) , '%' )) AS realityRectificationRate
+        CONCAT(ROUND(COUNT( a.exception_reform_count )/ IFNULL( a.exception_count, 0 )* 100,2) , '%' )) AS realityRectificationRate
         FROM
-        core_resumption a
-        LEFT JOIN core_resumption_plan b ON a.plan_id = b.id
-        LEFT JOIN core_question c ON c.src_task_id = a.id
-        AND reform_status = 11
+        (
+            SELECT
+            r.*,
+            b.plan_type,
+            (SELECT COUNT(d.id) from core_question d WHERE r.id = d.src_task_id AND d.reform_status IN (11,13)) as exception_reform_count
+            FROM
+            core_resumption r
+            INNER JOIN sys_org o ON r.org_id=o.id AND o.deleted=0 AND o.is_lock =0
+            LEFT JOIN core_resumption_plan b ON r.plan_id = b.id
+        ) a
         WHERE
-        b.plan_type =5
+        a.plan_type =5
         <if test="startTime !=null and endTime !=null">
-
-
             and ((
             #{startTime} &lt;= a.plan_start_time
             and #{endTime} >= a.plan_start_time
@@ -166,20 +182,26 @@
         ),
         '%'
         )) AS realityRate,
-        COUNT( c.id ) AS realityRectificationNumber,
+        IFNULL(SUM( a.exception_reform_count ),0) AS realityRectificationNumber,
         IF
         (
-        COUNT( c.id )= 0
+        COUNT( a.exception_reform_count )= 0
         OR IFNULL( a.exception_count, 0 )= 0,
         '0%',
-        CONCAT(ROUND(COUNT( c.id )/ IFNULL( a.exception_count, 0 )* 100,2) , '%' )) AS realityRectificationRate
+        CONCAT(ROUND(COUNT( a.exception_reform_count )/ IFNULL( a.exception_count, 0 )* 100,2) , '%' )) AS realityRectificationRate
         FROM
-        core_resumption a
-        LEFT JOIN core_resumption_plan b ON a.plan_id = b.id
-        LEFT JOIN core_question c ON c.src_task_id = a.id
-        AND reform_status = 11
+        (
+            SELECT
+            r.*,
+            b.plan_type,
+            (SELECT COUNT(d.id) from core_question d WHERE r.id = d.src_task_id AND d.reform_status IN (11,13)) as exception_reform_count
+            FROM
+            core_resumption r
+            INNER JOIN sys_org o ON r.org_id=o.id AND o.deleted=0 AND o.is_lock =0
+            LEFT JOIN core_resumption_plan b ON r.plan_id = b.id
+        ) a
         WHERE
-        b.plan_type =6
+        a.plan_type =6
         <if test="date !=null">
             AND a.ymd_date like concat(#{date},'%')
         </if>

+ 2 - 2
soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/SafetyInspectMapper.xml

@@ -224,7 +224,7 @@
         LEFT JOIN core_safecheck_plan b ON a.plan_id = b.id
         LEFT JOIN sys_org c ON a.org_id = c.id
         WHERE
-        a.deleted = 0
+        a.deleted = 0 and c.is_lock=0 and c.deleted = 0
           <if test="orgId !=null">
               and a.org_id =#{orgId}
           </if>
@@ -249,7 +249,7 @@
         LEFT JOIN core_safecheck_plan b ON a.plan_id = b.id
         LEFT JOIN sys_org c ON a.org_id = c.id
         WHERE
-        a.deleted = 0
+        a.deleted = 0 and c.is_lock=0 and c.deleted = 0
         AND a.`status` =3
           <if test="orgId !=null">
               and a.org_id=#{orgId}

+ 18 - 3
soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionMapper.xml

@@ -234,13 +234,14 @@
                a.`code`     as nfc_code,
                b.`status`,
                b.scan_method,
+               b.submit_time,
                b.img
         FROM (SELECT area_id, check_id, collection_area_name, CODE, id, label_name
               FROM sys_nfc_bind
               WHERE org_id = #{orgId}
                 and del_flag = '0'
                 and enable = '0') a
-                 LEFT JOIN (SELECT nfc_id, point_id, img, STATUS, scan_method
+                 LEFT JOIN (SELECT nfc_id, point_id, img, STATUS, scan_method,submit_time
                             FROM core_resumption_data_nfc
                             WHERE resumption_id = #{resumptionId}) b ON a.id = b.nfc_id
                  left join sys_area ar on ar.id = a.area_id and ar.del_flag = '0'
@@ -344,9 +345,9 @@
         from core_resumption res
                  left join core_resumption_plan pl on res.plan_id = pl.id
         where pl.plan_exec = #{exec}
-          and DATE(res.ymd_date) = DATE(#{date})
+          and res.ymd_date = DATE(#{date})
           and res.org_id = #{orgId}
-          and res.status = 3
+<!--          and res.status = 3-->
     </select>
 
     <select id="selectByYmdDateAndExecList" resultType="com.xunmei.core.resumption.domain.Resumption">
@@ -375,6 +376,20 @@
         </foreach>
     </select>
 
+    <select id="selectByEndDateAndPlanType" resultType="com.xunmei.core.resumption.domain.Resumption">
+        select res.*,pl.plan_exec as planExec,pl.plan_type as planType
+        from core_resumption res
+        left join core_resumption_plan pl on res.plan_id = pl.id
+        where  #{startDate} <![CDATA[<=]]> res.plan_end_time
+        and #{endDate} >= res.plan_end_time
+        and res.org_id = #{orgId}
+        and res.status != 3
+        and  pl.plan_type in
+        <foreach collection="planType" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+
 
 
 

+ 1 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionRecordMapper.xml

@@ -394,6 +394,7 @@
             id=#{query.orgId}),'%'))
             )
         </if>
+        order by r.role_sort
     </select>
     <select id="selectResumptionPlan" resultType="com.xunmei.common.core.vo.IdNameVo">
         select id, plan_name as name

+ 2 - 2
soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml

@@ -630,7 +630,7 @@
         SET `status`=0,
             start_time=null
         WHERE `status` = 1
-          AND start_time LIKE concat(#{dateTime}, '%')
+          and start_time &lt; STR_TO_DATE(#{dateTime},'%Y-%m-%d')
     </update>
     <update id="initializationTaskByHand">
         update core_monitoring_retrieval_task
@@ -679,7 +679,7 @@
         SELECT *
         FROM core_monitoring_retrieval_task
         WHERE `status` = 1
-          AND start_time LIKE concat(#{dateTime}, '%')
+          and start_time &lt; STR_TO_DATE(#{dateTime},'%Y-%m-%d')
     </select>
 
     <select id="selectMonitorOverTimeExceptionData"

+ 1 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/safetycheck/CoreSafetyTaskMapper.xml

@@ -236,7 +236,7 @@
             and t.title like concat('%', #{task.title}, '%')
         </if>
         <if test="task.roleId != null  and task.roleId != ''">
-            and csptr.role_id =#{task.roleId}
+            and (csptr.role_id =#{task.roleId} or t.role_id = #{task.roleId})
         </if>
         <if test="task.planStartTime != null ">
             and DATE_FORMAT(t.plan_start_time, '%Y-%m-%d') = DATE_FORMAT(#{task.planStartTime}, '%Y-%m-%d')

+ 4 - 4
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java

@@ -209,7 +209,7 @@ public class PdfUtil {
         PdfUtil.createPDFCell(tableFont, table, "单位名称", Element.ALIGN_MIDDLE, 2, 0);
         PdfUtil.createPDFCell(tableFont, table, data.get("orgName").toString(), Element.ALIGN_MIDDLE, 3, 0);
         PdfUtil.createPDFCell(tableFont, table, "检查时间", Element.ALIGN_MIDDLE, 2, 0);
-        PdfUtil.createPDFCell(tableFont, table, data.get("dateStr").toString(), Element.ALIGN_MIDDLE, 3, 0);
+        PdfUtil.createPDFCell(tableFont, table,ObjectUtil.isNotEmpty(data.get("submiterNames"))? data.get("dateStr").toString():"", Element.ALIGN_MIDDLE, 3, 0);
         // 第二行
         PdfUtil.createPDFCell(tableFont, table, "检查人", Element.ALIGN_MIDDLE, 2, 0);
         PdfUtil.createPDFCell(tableFont, table, data.get("submiterNames").toString(), Element.ALIGN_MIDDLE, 8, 0);
@@ -243,7 +243,7 @@ public class PdfUtil {
                 String rowContent = o + "、" + listVo.get("pointName");
                 PdfUtil.createPDFCell(tableFont, table, rowContent, Element.ALIGN_LEFT, 6, 0);
                 // 检查情况
-                PdfUtil.createPDFCell(tableFont, table, ((Integer) listVo.get("resValue")) == 0 ? "正常" : "异常", Element.ALIGN_MIDDLE, 2, 0);
+                PdfUtil.createPDFCell(tableFont, table, ObjectUtil.isEmpty(listVo.get("resValue"))? "" : (((Integer) listVo.get("resValue")) == 0 ? "正常" : "异常"), Element.ALIGN_MIDDLE, 2, 0);
                 // 检查人
                 //PdfUtil.createPDFCell(tableFont, table, String.valueOf(listVo.get("submitName")), Element.ALIGN_CENTER, 0, 0);
                 o++;
@@ -258,7 +258,7 @@ public class PdfUtil {
 
         final List<LinkedHashMap> questionPdfVoList = (List<LinkedHashMap>) data.get("questions");
         if (ObjectUtil.isEmpty(questionPdfVoList)) {
-            PdfUtil.createPDFCell(tableFont, table, "1", Element.ALIGN_MIDDLE, 2, 1);
+            PdfUtil.createPDFCell(tableFont, table, "", Element.ALIGN_MIDDLE, 2, 1);
             PdfUtil.createPDFCell(tableFont, table, StringUtil.EMPTY_STRING, Element.ALIGN_LEFT, 4, 1);
             PdfUtil.createPDFCell(tableFont, table, StringUtil.EMPTY_STRING, Element.ALIGN_MIDDLE, 4, 1);
             document.add(table);
@@ -603,7 +603,7 @@ public class PdfUtil {
         PdfUtil.createPDFCell(tableFont, table, "存在问题", Element.ALIGN_MIDDLE, 6, 1);
         final Optional<CheckDataVo> optional = data.getCheckDatas().stream().filter(res -> ObjectUtil.isNotEmpty(res.getResRemark())).findAny();
         if (!optional.isPresent()) {
-            PdfUtil.createPDFCell(tableFont, table, "1", Element.ALIGN_MIDDLE, 2, 1);
+            PdfUtil.createPDFCell(tableFont, table, "", Element.ALIGN_MIDDLE, 2, 1);
             PdfUtil.createPDFCell(tableFont, table, StringUtil.EMPTY_STRING, Element.ALIGN_MIDDLE, 6, 1);
             PdfUtil.createPDFCell(tableFont, table, StringUtil.EMPTY_STRING, Element.ALIGN_MIDDLE, 6, 1);
             document.add(table);

+ 10 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/WeatherTask.java

@@ -34,4 +34,14 @@ public class WeatherTask {
         AjaxResult result = remoteWeatherTaskService.getDataFromApi( SecurityConstants.INNER);
         log.info("获取天气预警数据的任务执行结束,当前任务 id:{},当前时间:{},结果:{}", id, new Date(), JSON.toJSONString(result));
     }
+
+    /**
+     * 每天定时获取天气预警数据
+     */
+    public void getDataFromAliyun()
+    {   String id = UUID.fastUUID().toString();
+        log.info("开始执行获取天气预警数据的任务,当前任务 id:{},当前时间:{}", id, new Date());
+        AjaxResult result = remoteWeatherTaskService.getDataFromAliyun( SecurityConstants.INNER);
+        log.info("获取天气预警数据的任务执行结束,当前任务 id:{},当前时间:{},结果:{}", id, new Date(), JSON.toJSONString(result));
+    }
 }

+ 7 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/WorkTimeTask.java

@@ -22,4 +22,11 @@ public class WorkTimeTask {
         workTimeService.generateNextMonth();
         log.info("生成下个月作息的任务执行结束,当前任务 id:{},当前时间:{}", id, new Date());
     }
+
+    public void generateNextYear()
+    {   String id = UUID.fastUUID().toString();
+        log.info("开始执行生成下一年作息的任务,当前任务 id:{},当前时间:{}", id, new Date());
+        workTimeService.generateYearMonth();
+        log.info("生成下一年作息的任务执行结束,当前任务 id:{},当前时间:{}", id, new Date());
+    }
 }

+ 6 - 6
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeptController.java

@@ -94,12 +94,12 @@ public class SysDeptController extends BaseController {
         }
         try {
             // 设置响应头
-            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户数据", "utf-8"));
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("物防建设达标情况明细", "utf-8"));
             response.setContentType("application/octet-stream;charset=UTF-8");
             response.setCharacterEncoding("utf-8");
             // 数据导出
             EasyExcel.write(response.getOutputStream(), ConstructionDetailExport.class)
-                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("用户数据").doWrite(constructionDetailExports);
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("物防建设达标情况明细").doWrite(constructionDetailExports);
         } catch (Exception e) {
             // 重置response
             response.reset();
@@ -125,11 +125,11 @@ public class SysDeptController extends BaseController {
         }
         try {
             // 设置响应头
-            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户数据", "utf-8"));
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("安全保卫工作情况统计", "utf-8"));
             response.setContentType("application/octet-stream;charset=UTF-8");
             response.setCharacterEncoding("utf-8");
             // 数据导出
-            EasyExcel.write(response.getOutputStream(), SecurityWorkExport.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("用户数据").doWrite(securityWorkExportList);
+            EasyExcel.write(response.getOutputStream(), SecurityWorkExport.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("安全保卫工作情况统计").doWrite(securityWorkExportList);
         } catch (Exception e) {
             // 重置response
             response.reset();
@@ -155,11 +155,11 @@ public class SysDeptController extends BaseController {
         }
         try {
             // 设置响应头
-            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户数据", "utf-8"));
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("物防建设达标情况汇总", "utf-8"));
             response.setContentType("application/octet-stream;charset=UTF-8");
             response.setCharacterEncoding("utf-8");
             // 数据导出
-            EasyExcel.write(response.getOutputStream(), OrgPhysicalDefenseConstructionExport.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("用户数据").doWrite(excel);
+            EasyExcel.write(response.getOutputStream(), OrgPhysicalDefenseConstructionExport.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("物防建设达标情况汇总").doWrite(excel);
         } catch (Exception e) {
             // 重置response
             response.reset();

+ 2 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysRoleController.java

@@ -55,7 +55,8 @@ public class SysRoleController extends BaseController {
     /**
      * 根据角色编号获取详细信息
      */
-    @RequiresPermissions("system:role:query")
+//    先注释掉权限验证,该接有其他页面使用,使用接口的其他页面的用户可能不会给角色页面的权限
+//    @RequiresPermissions("system:role:query")
     @GetMapping(value = "/{roleId}")
     public AjaxResult getInfo(@PathVariable Long roleId) {
         roleService.checkRoleDataScope(roleId);

+ 7 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeSetController.java

@@ -129,4 +129,11 @@ public class SysWorkTimeSetController extends BaseController {
         sysWorkTimeSetService.generateNextMonth();
         return AjaxResult.success("开始生成下个月作息!");
     }
+
+    @ApiOperation(value = "按作息模板生成下一年作息")
+    @GetMapping(value = "/generateYearMonth")
+    public AjaxResult generateNextYear() {
+        sysWorkTimeSetService.generateNextYear();
+        return AjaxResult.success("开始按作息模板生成下一年作息!");
+    }
 }

+ 2 - 2
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysOrgMapper.java

@@ -113,13 +113,13 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
 
     Integer getCollectLibrary(String orgPath);
 
-    Map getOnLine(String orgPath);
+    Map  getOnLine(String orgPath);
 
     Map getDeparture(String orgPath);
 
     Map getSelfEquipment(String orgPath);
 
-    Map getCenterConstruction(Long orgId);
+    Map getCenterConstruction(String orgPath);
 
     Map getCamera(String orgPath);
 

+ 3 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysWorkTimeMapper.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto;
 import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.system.dto.SysWorkTimeDto;
@@ -56,6 +57,8 @@ public interface SysWorkTimeMapper extends BaseMapper<SysWorkTime> {
     @MapKey("id")
      IPage<SysWorkTimeDto> selectByPage(Page<SysWorkTime> page, @Param(Constants.WRAPPER) Wrapper<SysWorkTime> queryWrapper);
 
+    @MapKey("id")
+    IPage<SysWorkTimeDto> selectNoWorkTimeByPage(Page<SysWorkTime> page, @Param(Constants.WRAPPER) Wrapper<SysWorkTime> queryWrapper1,@Param("request") SysWorkTime request);
     /**
      * 新增【请填写功能名称】
      *

+ 2 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeSetService.java

@@ -76,4 +76,6 @@ public interface ISysWorkTimeSetService extends IService<SysWorkTimeSet> {
     AjaxResult workTimePageList(SysWorkTimeSet sysWorkTimeSet) throws ParseException;
 
     void generateNextMonth();
+
+    void generateNextYear();
 }

+ 4 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgExtendServiceImpl.java

@@ -116,6 +116,7 @@ public class SysOrgExtendServiceImpl extends ServiceImpl<SysOrgExtendMapper, Sys
     @Override
     public int insertSysOrgExtend(SysOrgExtend sysOrgExtend) {
         sysOrgExtend.setCreateTime(DateUtils.getNowDate());
+        sysOrgExtendMapper.delete(new LambdaQueryWrapper<SysOrgExtend>().eq(SysOrgExtend::getOrgId,sysOrgExtend.getOrgId()));
         return sysOrgExtendMapper.insert(sysOrgExtend);
     }
 
@@ -198,7 +199,9 @@ public class SysOrgExtendServiceImpl extends ServiceImpl<SysOrgExtendMapper, Sys
     @Override
     public int updateSysOrgExtend(SysOrgExtend sysOrgExtend) {
         sysOrgExtend.setUpdateTime(DateUtils.getNowDate());
-        return sysOrgExtendMapper.updateById(sysOrgExtend);
+        sysOrgExtendMapper.delete(new LambdaQueryWrapper<SysOrgExtend>().eq(SysOrgExtend::getOrgId,sysOrgExtend.getOrgId()));
+        sysOrgExtend.setId(null);
+        return sysOrgExtendMapper.insert(sysOrgExtend);
     }
 
     /**

+ 186 - 82
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -22,7 +22,9 @@ import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.redis.utils.RedisUtils;
+import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.system.api.domain.SysDictData;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.vo.FindOrgTypes;
 import com.xunmei.system.api.vo.SysOrgVO;
@@ -33,6 +35,7 @@ import com.xunmei.system.util.ConstructionDetailExport;
 import com.xunmei.system.util.OrgPhysicalDefenseConstructionExport;
 import com.xunmei.system.util.SecurityWorkExport;
 import io.netty.util.internal.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -40,6 +43,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -118,95 +122,153 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
 
     @Override
     public List<OrgPhysicalDefenseConstructionExport> excel(SysOrg dept) {
-        if (null == dept.getId()) {
-            dept.setId(SecurityUtils.getLoginUser().getOrgId());
-        }
-        SysOrg sysOrg = baseMapper.selectSysOrgById(dept.getId());
-        List<SysOrg> sysOrgs;
-        if (sysOrg.getType() < 3 || sysOrg.getShortName().endsWith("地区行社") || sysOrg.getType() == 9) {
-            sysOrgs = this.selectSysOrgByPathAndType(sysOrg.getPath(), 3);
-        } else if (sysOrg.getType() == 3) {
-            sysOrgs = this.selectSysOrgByPathAndType(sysOrg.getPath(), 4);
-        } else {
-            return Collections.emptyList();
+
+        /**
+         * 查询机构锁定,如果前端未传递查询机构id,则设置机构id为当前登录人机构id
+         */
+        Long orgId = dept.getId();
+        if (null == orgId) {
+            orgId = SecurityUtils.getLoginUser().getOrgId();
         }
-        List<OrgPhysicalDefenseConstructionExport> orgPhysicalDefenseConstructionExports = new ArrayList<>();
-        sysOrgs.forEach(s -> {
-            OrgPhysicalDefenseConstructionExport orgPhysicalDefenseConstructionExport = new OrgPhysicalDefenseConstructionExport();
-            SysOrg sysOrg1;
-            if (sysOrg.getType() < 3 || sysOrg.getShortName().endsWith("地区行社") || sysOrg.getType() == 9) {
-                sysOrg1 = sysOrgMapper.selectSysOrgById(s.getParentId());
-            } else {
-                sysOrg1 = sysOrgMapper.selectSysOrgById(sysOrgMapper.selectSysOrgById(s.getParentId()).getParentId());
-                if (-1 == sysOrg1.getShortName().indexOf("地区行社")) {
-                    sysOrg1 = sysOrgMapper.selectSysOrgById(sysOrgMapper.selectSysOrgById(sysOrgMapper.selectSysOrgById(s.getParentId()).getParentId()).getParentId());
-                }
-            }
-            OrgPhysicalDefenseConstructionExport orgPhysicalDefenseConstructionExport1 = baseMapper.complianceStatus(s.getPath());
-            BeanUtils.copyProperties(orgPhysicalDefenseConstructionExport1, orgPhysicalDefenseConstructionExport);
-            orgPhysicalDefenseConstructionExport.setCity(sysOrg1.getShortName().indexOf("地区行社") == -1 ? sysOrg1.getShortName().substring(0, 2) : sysOrg1.getShortName().split("地区行社")[0]);
-            Integer integer = baseMapper.selectNetworkNumberByPath(s.getPath());
+        SysOrg sysOrg = baseMapper.selectSysOrgById(orgId);
+
+
+        /**
+         * 根据查询机构确定要查的范围:
+         * 1、如果是省联社,办事处,地区行社,需要导出的是行社数据。
+         * 2、如果是行社,需要导出的是营业网点数据。
+         */
+        List<SysOrg> sysOrgs = new ArrayList<>();
+        if (sysOrg.getType() < OrgTypeEnum.HANG_SHE.getCode()
+                || sysOrg.getShortName().endsWith("地区行社")
+                || sysOrg.getType() == OrgTypeEnum.DIQU_HANG_SHE.getCode()) {
+            //判断机构为 省联社,地区行社,办事处时,查询区域内的 行社数据
+            sysOrgs = this.selectSysOrgByPathAndType(sysOrg.getPath(), OrgTypeEnum.HANG_SHE.getCode());
+        } else if (sysOrg.getType() == OrgTypeEnum.HANG_SHE.getCode()) {
+            //判断查询机构为行社时 查询行社内的营业网点
+            sysOrgs = this.selectSysOrgByPathAndType(sysOrg.getPath(), OrgTypeEnum.YINGYE_WANGDIAN.getCode());
+        }
+
+        /**
+         *根据查询机构机构,统计查询数据
+         */
+        List<OrgPhysicalDefenseConstructionExport> excelData = getExcelData(sysOrgs);
+        return excelData;
+    }
+
+    /**
+     * 组装数据
+     * @param orgs
+     * @return
+     */
+    private List<OrgPhysicalDefenseConstructionExport> getExcelData(List<SysOrg> orgs){
+        List<OrgPhysicalDefenseConstructionExport> data = new ArrayList<>();
+        OrgPhysicalDefenseConstructionExport export = null;
+        for (SysOrg s : orgs) {
+            export = baseMapper.complianceStatus(s.getPath());
+            export.setCity(s.getAffiliatedArea());
+            export.setOrgName(s.getAffiliatedBank());
+            Integer orgSize = baseMapper.selectNetworkNumberByPath(s.getPath());
             Double avg = 0d;
-            if (integer != 0 || orgPhysicalDefenseConstructionExport1.getReachNumber() != 0) {
-                avg = (double) orgPhysicalDefenseConstructionExport1.getReachNumber() / integer * 100;
+            if (orgSize != 0 || export.getReachNumber() != 0) {
+                avg = (double) export.getReachNumber() / orgSize * 100;
             }
-            orgPhysicalDefenseConstructionExport.setReachRate(String.valueOf(Double.valueOf(String.format("%.2f", avg))) + "%");
-            orgPhysicalDefenseConstructionExport.setNetworkNumber(integer);
-            orgPhysicalDefenseConstructionExport.setOrgName(s.getShortName());
+            export.setReachRate(Double.valueOf(String.format("%.2f", avg)) + "%");
+            export.setNetworkNumber(orgSize);
 
             //年度完成
-            Integer s1 = baseMapper.rectificationStatus(s.getPath(), "2023");
+            LocalDate currentDate = LocalDate.now();
+            String year = String.valueOf(currentDate.getYear());
+            Integer s1 = baseMapper.rectificationStatus(s.getPath(), year);
             //2015改造
-            Integer s2 = baseMapper.oldRectificationStatus(s.getPath(), "2023");
+            Integer s2 = baseMapper.oldRectificationStatus(s.getPath(), year);
             //未完成改造
-            Integer s3 = baseMapper.noRectificationStatus(s.getPath(), "2023");
-            orgPhysicalDefenseConstructionExport.setNewYearReachNumber(s1);
-            orgPhysicalDefenseConstructionExport.setNewYeaTransformOldReachNumber(s2);
-            orgPhysicalDefenseConstructionExport.setNewYeaTransformInconformityNumber(s3);
-            orgPhysicalDefenseConstructionExports.add(orgPhysicalDefenseConstructionExport);
-        });
-        return orgPhysicalDefenseConstructionExports;
+            Integer s3 = baseMapper.noRectificationStatus(s.getPath(), year);
+            export.setNewYearReachNumber(s1);
+            export.setNewYeaTransformOldReachNumber(s2);
+            export.setNewYeaTransformInconformityNumber(s3);
+
+            data.add(export);
+        }
+
+        return data;
+    }
+
+    private List<SysOrg> getOrgs(SysOrg org){
+        List<SysOrg> sysOrgs = new ArrayList<>();
+        if (org.getType() < OrgTypeEnum.HANG_SHE.getCode()
+                || org.getShortName().endsWith("地区行社")
+                || org.getType() == OrgTypeEnum.DIQU_HANG_SHE.getCode()) {
+            sysOrgs = this.selectSysOrgByPathAndType(org.getPath(), OrgTypeEnum.HANG_SHE.getCode());
+        } else if (org.getType() == OrgTypeEnum.HANG_SHE.getCode()) {
+            sysOrgs = this.selectSysOrgByPathAndType(org.getPath(), OrgTypeEnum.YINGYE_WANGDIAN.getCode());
+        }
+        return sysOrgs;
+    }
+
+    private List<SecurityWorkExport> getExportData(List<SysOrg> sysOrgs){
+        List<SecurityWorkExport> exports = new ArrayList<>();
+        SecurityWorkExport export = null;
+        for (SysOrg sysOrg : sysOrgs) {
+            export = new SecurityWorkExport();
+            export.setXh(sysOrg.getAffiliatedArea());
+            export.setCity(sysOrg.getAffiliatedBank());
+            export.setOrgName(sysOrg.getShortName());
+
+            //营业网点数量
+            Integer orgSize = baseMapper.selectNetworkNumberByPath(sysOrg.getPath());
+            export.setNetworkNumber(orgSize);
+
+            //营业网点达标
+            Integer reachNumber = baseMapper.getReachNumber(sysOrg.getPath());
+            export.setReachNumber(reachNumber);
+
+            //自有产权
+            Integer ownership = baseMapper.getOwnership(sysOrg.getPath());
+            export.setOwnPropertyNumber(ownership);
+        }
+        return exports;
     }
 
     @Override
     public List<SecurityWorkExport> securityWorkExport(SysOrg sysOrg) {
+
+        Long orgId = sysOrg.getId();
         if (null == sysOrg.getId()) {
-            sysOrg.setId(SecurityUtils.getLoginUser().getOrgId());
-        }
-        SysOrg sysOrg2 = baseMapper.selectSysOrgById(sysOrg.getId());
-        List<SysOrg> sysOrgs;
-        if (sysOrg2.getType() < 3 || sysOrg2.getShortName().endsWith("地区行社") || sysOrg2.getType() == 9) {
-            sysOrgs = this.selectSysOrgByPathAndType(sysOrg2.getPath(), 3);
-        } else if (sysOrg2.getType() == 3) {
-            sysOrgs = this.selectSysOrgByPathAndType(sysOrg2.getPath(), 4);
-        } else {
-            return Collections.emptyList();
+            orgId = SecurityUtils.getLoginUser().getOrgId();
         }
+        SysOrg org = baseMapper.selectSysOrgById(orgId);
+        List<SysOrg> sysOrgs = getOrgs(org);
         List<SecurityWorkExport> securityWorkExportList = new ArrayList<>();
+        List<SysDictData> brands = DictUtils.getDictCache("org_platform_brand");
+        Map<String,String> brandMap = new HashMap<>();
+        for (SysDictData brand : brands) {
+            brandMap.put(brand.getDictValue(),brand.getDictLabel());
+        }
+
+
         sysOrgs.forEach(s -> {
             SecurityWorkExport securityWorkExport = new SecurityWorkExport();
-            SysOrg sysOrg1;
-            if (sysOrg2.getType() < 3 || sysOrg2.getShortName().endsWith("地区行社") || sysOrg2.getType() == 9) {
-                sysOrg1 = baseMapper.selectSysOrgById(s.getParentId());
-            } else {
-                sysOrg1 = baseMapper.selectSysOrgById(baseMapper.selectSysOrgById(s.getParentId()).getParentId());
-                if (-1 == sysOrg1.getShortName().indexOf("地区行社")) {
-                    sysOrg1 = baseMapper.selectSysOrgById(baseMapper.selectSysOrgById(baseMapper.selectSysOrgById(s.getParentId()).getParentId()).getParentId());
-                }
-            }
-            securityWorkExport.setCity(sysOrg1.getShortName().indexOf("地区行社") == -1 ? sysOrg1.getShortName().substring(0, 2) : sysOrg1.getShortName().split("地区行社")[0]);
+            securityWorkExport.setCity(s.getAffiliatedArea());
             securityWorkExport.setOrgName(s.getShortName());
             Integer integer = baseMapper.selectNetworkNumberByPath(s.getPath());
             securityWorkExport.setNetworkNumber(integer);
             //营业网点达标
             Integer reachNumber = baseMapper.getReachNumber(s.getPath());
+            if(reachNumber == null){
+                reachNumber = 0;
+            }
             securityWorkExport.setReachNumber(reachNumber);
             //自有产权
             Integer ownership = baseMapper.getOwnership(s.getPath());
             securityWorkExport.setOwnPropertyNumber(ownership);
             //区域外网点
+            /**
+             * 区域内和区域外是反着的,0是区域内,1是区域外
+             */
             Integer outside = baseMapper.getOutside(s.getPath());
             securityWorkExport.setAreaOutsideNumber(outside);
+
             //业务库
             Map library = baseMapper.getLibrary(s.getPath());
             securityWorkExport.setBusinessLibraryTotal(Integer.valueOf(library.get("total").toString()));
@@ -214,17 +276,32 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             securityWorkExport.setTwoLibrary(Integer.valueOf(library.get("two").toString()));
             securityWorkExport.setThreeLibrary(Integer.valueOf(library.get("three").toString()));
             securityWorkExport.setFourLibrary(Integer.valueOf(library.get("four").toString()));
+
             //保管箱库
             Integer collectLibrary = baseMapper.getCollectLibrary(s.getPath());
+            collectLibrary =  collectLibrary == null ? 0 : collectLibrary;
             securityWorkExport.setCollectLibrary(collectLibrary);
+
             //在行式
             Map onLine = baseMapper.getOnLine(s.getPath());
             securityWorkExport.setOnLineTotal(Integer.valueOf(onLine.get("onLineTotal").toString()));
-            securityWorkExport.setOnLineReachNumber(Integer.valueOf(onLine.get("onLineReachNumber").toString()));
+            if(onLine.get("onLineReachNumber") != null){
+                securityWorkExport.setOnLineReachNumber(Integer.valueOf(onLine.get("onLineReachNumber").toString()));
+            }else{
+                securityWorkExport.setOnLineReachNumber(0);
+            }
+
+
             //离行式
             Map departure = baseMapper.getDeparture(s.getPath());
             securityWorkExport.setDepartureTotal(Integer.valueOf(departure.get("departureTotal").toString()));
-            securityWorkExport.setDepartureReachNumber(Integer.valueOf(departure.get("departureReachNumber").toString()));
+            if(departure.get("departureReachNumber") != null){
+                securityWorkExport.setDepartureReachNumber(Integer.valueOf(departure.get("departureReachNumber").toString()));
+            }else{
+                securityWorkExport.setDepartureReachNumber(0);
+            }
+
+
             //自助设备
             Map selfEquipment = baseMapper.getSelfEquipment(s.getPath());
             securityWorkExport.setSelfServiceDevicesTotal(Integer.valueOf(selfEquipment.get("selfServiceDevicesTotal").toString()));
@@ -232,53 +309,86 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             securityWorkExport.setOnLineThroughWalls(Integer.valueOf(selfEquipment.get("onLineThroughWalls").toString()));
             securityWorkExport.setDepartureLobbyImplement(Integer.valueOf(selfEquipment.get("departureLobbyImplement").toString()));
             securityWorkExport.setDepartureThroughWalls(Integer.valueOf(selfEquipment.get("departureThroughWalls").toString()));
+
+
             //中心建设时间
-            Map centerConstruction = baseMapper.getCenterConstruction(s.getId());
+            //获取当前机构辖区内的监控中心数据
+
+            Map centerConstruction = baseMapper.getCenterConstruction(s.getPath());
             if (null != centerConstruction) {
-                securityWorkExport.setCenterConstructionTime(centerConstruction.get("centerConstructionTime").toString());
-                securityWorkExport.setTransformTime(centerConstruction.get("transformTime").toString());
-                securityWorkExport.setBrand(centerConstruction.get("brand").toString());
+                if(centerConstruction.get("centerConstructionTime") != null){
+                    securityWorkExport.setCenterConstructionTime(centerConstruction.get("centerConstructionTime").toString());
+                }
+
+                if(centerConstruction.get("transformTime") != null){
+                    securityWorkExport.setTransformTime(centerConstruction.get("transformTime").toString());
+                }
+
+                if(centerConstruction.get("brand") != null){
+                    securityWorkExport.setBrand(brandMap.get(centerConstruction.get("brand").toString()));
+                }
+
             }
 
             //高清摄像头
             Map camera = baseMapper.getCamera(s.getPath());
             securityWorkExport.setCameraTotal(Integer.valueOf(camera.get("cameraTotal").toString()));
             securityWorkExport.setDefinitionNumber(Integer.valueOf(camera.get("definitionNumber").toString()));
+
+
             //是否实现远程控制
             Map remote = baseMapper.getRemote(s.getPath());
             securityWorkExport.setCashAddingRoom(Integer.valueOf(remote.get("cashAddingRoom").toString()));
             securityWorkExport.setRemoteCount(Integer.valueOf(remote.get("remoteCount").toString()));
+
+
             //夜间值守
             Map duty = baseMapper.getDuty(s.getPath());
             securityWorkExport.setLocalDutyNetworkNumber(Integer.valueOf(duty.get("localDutyNetworkNumber").toString()));
             securityWorkExport.setRemoteDutyNetworkNumber(Integer.valueOf(duty.get("remoteDutyNetworkNumber").toString()));
+
+
+
             //独立机构
             Integer alone = baseMapper.getAlone(s.getPath());
-            securityWorkExport.setIsAlone(alone);
+            if(alone > 0){
+                securityWorkExport.setIsAlone("是");
+            }else{
+                securityWorkExport.setIsAlone("否");
+            }
+
+
             //部门负责人
             Integer y = baseMapper.getManager(s.getPath(), "Y");
             Integer n = baseMapper.getManager(s.getPath(), "N");
             securityWorkExport.setManagerFullTime(y);
             securityWorkExport.setManagerPartTime(n);
+
+
             //部门负责人持证
             Integer managerCertificate = baseMapper.getManagerCertificate(s.getPath());
             securityWorkExport.setManagerCertificate(managerCertificate);
+
             //是否设主任
             String isMonitor = baseMapper.getIsMonitor(s.getPath(), "2");
             String isMonitor1 = baseMapper.getIsMonitor(s.getPath(), "5");
             securityWorkExport.setIsLeader(isMonitor);
             securityWorkExport.setIsTechnology(isMonitor1);
+
             //监控中心人员
             Map monitorPeople = baseMapper.getMonitorPeople(s.getPath());
             securityWorkExport.setMonitorTotal(Integer.valueOf(monitorPeople.get("monitorTotal").toString()));
             securityWorkExport.setInnerPeople(Integer.valueOf(monitorPeople.get("innerPeople").toString()));
             securityWorkExport.setOutPeople(Integer.valueOf(monitorPeople.get("outPeople").toString()));
+
             //安保人数
             Map certificate = baseMapper.getCertificate(s.getPath());
             securityWorkExport.setCertificatePeopleNumber(Integer.valueOf(certificate.get("certificatePeopleNumber").toString()));
             securityWorkExport.setCertificateTotal(Integer.valueOf(certificate.get("certificateTotal").toString()));
             securityWorkExport.setInternalCertificateNumber(Integer.valueOf(certificate.get("internalCertificateNumber").toString()));
             securityWorkExport.setOutsourceCertificateNumber(Integer.valueOf(certificate.get("outsourceCertificateNumber").toString()));
+
+
             //配有保安网点数
             Integer haveSecurityNetworkNumber = baseMapper.getHaveSecurityNetworkNumber(s.getPath());
             securityWorkExport.setHaveSecurityNetworkNumber(haveSecurityNetworkNumber);
@@ -339,10 +449,13 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
 
     @Override
     public List<ConstructionDetailExport> selectConstructionDetail(SysOrg dept) {
-        if (null == dept.getPath()) {
+        String path = dept.getPath();
+        if (StringUtils.isEmpty(path)) {
             dept.setPath(baseMapper.selectSysOrgById(SecurityUtils.getLoginUser().getOrgId()).getPath());
         }
+
         List<ConstructionDetailExport> constructionDetailExports = baseMapper.selectConstructionDetail(dept.getPath());
+
         //hang
         constructionDetailExports.forEach(c -> {
             SysOrg sysOrg = baseMapper.selectSysOrgById(c.getOrgId());
@@ -351,18 +464,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             SysOrg sysOrg1 = baseMapper.selectSysOrgById(sysOrg.getParentId());
             c.setOrgName(sysOrg1.getShortName());
             SysOrg sysOrg2;
-//            if (null!=sysOrg1.getType()){
-//                if (sysOrg1.getType() < 3 || sysOrg1.getShortName().endsWith("地区行社") || sysOrg1.getType() == 9) {
-//                    sysOrg2 = sysOrgMapper.selectSysOrgById(sysOrg1.getParentId());
-//                } else {
-//                    sysOrg2 = sysOrgMapper.selectSysOrgById(sysOrgMapper.selectSysOrgById(sysOrg1.getParentId()).getParentId());
-//                    if (-1 == sysOrg1.getShortName().indexOf("地区行社")) {
-//                        sysOrg2 = sysOrgMapper.selectSysOrgById(sysOrgMapper.selectSysOrgById(sysOrgMapper.selectSysOrgById(sysOrg1.getParentId()).getParentId()).getParentId());
-//                    }
-//                }
-//            }else {
             sysOrg2 = baseMapper.selectSysOrgById(sysOrg1.getParentId());
-            // }
             c.setCity(sysOrg2.getShortName().indexOf("地区行社") == -1 ? sysOrg2.getShortName().substring(0, 2) : sysOrg2.getShortName().split("地区行社")[0]);
         });
         return constructionDetailExports;
@@ -412,6 +514,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         }
         queryWrapper.likeRight("path", path);
         queryWrapper.eq("deleted", 0);
+        queryWrapper.eq("is_lock", 0);
         List list = baseMapper.selectList(queryWrapper);
         return list;
     }
@@ -519,6 +622,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         wrapper.likeRight(SysOrg::getPath, orgPath);
         wrapper.eq(SysOrg::getType, orgType);
         wrapper.eq(SysOrg::getDeleted, 0);
+        wrapper.eq(SysOrg::getIsLock, 0);
         return sysOrgMapper.selectList(wrapper);
     }
 
@@ -860,8 +964,8 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
                             .collect(Collectors.toList());
                 } else {
                     result = sysOrgList.stream()
-                            .filter(sysOrg -> ObjectUtil.equal(sysOrg.getParentId(), org.getId()))
-                            //.filter(sysOrg -> sysOrg.getPath().startsWith(org.getPath()))
+                            //.filter(sysOrg -> ObjectUtil.equal(sysOrg.getParentId(), org.getId()))
+                            .filter(sysOrg -> sysOrg.getPath().startsWith(org.getPath()))
                             .sorted(Comparator.comparing(SysOrg::getSort))
                             .filter(sysOrg -> ObjectUtil.equal(sysOrg.getIsLock(), 0) && ObjectUtil.equal(sysOrg.getDeleted(), 0))
                             .collect(Collectors.toList());

+ 5 - 7
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysRoleServiceImpl.java

@@ -449,6 +449,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                 queryWrapper.in(SysRole::getId, conditionEto.getIds());
             }
         }
+        queryWrapper.orderByAsc(SysRole::getRoleSort);
         return roleMapper.selectList(queryWrapper).stream().map(role -> new IdName<>(role.getId(), role.getRoleName())).collect(Collectors.toList());
     }
 
@@ -462,6 +463,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq("del_flag", 0);
         queryWrapper.eq("org_type", type);
+        queryWrapper.orderByAsc("role_sort");
         return baseMapper.selectList(queryWrapper);
     }
 
@@ -483,19 +485,15 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
             {
                 continue;
             }
-            // 停用的角色
-//            if(sysRole.getStatus()==1)
-//            {
-//                continue;
-//            }
+
             list.add(sysRole);
         }
-        list=  list.stream().sorted(new Comparator<SysRole>() {//使用List接口的方法排序
+    /*    list=  list.stream().sorted(new Comparator<SysRole>() {//使用List接口的方法排序
             @Override
             public int compare(SysRole o1, SysRole o2) {
                 return o1.getRoleSort().compareTo(o2.getRoleSort());
             }
-        }).collect(Collectors.toList());
+        }).collect(Collectors.toList());*/
         clearRoleCache();
         RedisUtils.setCacheList(CacheConstants.ROLE_CACHE_LIST_KEY, list);
     }

+ 36 - 25
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java

@@ -93,32 +93,43 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
         }
         //查询条件
         QueryWrapper<SysWorkTime> query = new QueryWrapper<>();
-        if (sysWorkTime.getIsEnable() != null) {
-            query.eq("t.is_enable", sysWorkTime.getIsEnable());
-        }
-        if (sysWorkTime.getOrgId() != null && !sysWorkTime.getCheckSub()) {
-            query.eq("t.org_id", sysWorkTime.getOrgId());
-        }
-        if (sysWorkTime.getModifiedName() != null) {
-            query.eq("t.modified_name", sysWorkTime.getModifiedName());
-        }
-        if (sysWorkTime.getOrgType() != null) {
-            query.eq("o.type", sysWorkTime.getOrgType());
-        }
-        //下穿
-        if (sysWorkTime.getCheckSub()) {
-            query.like("o.path", sysWorkTime.getOrgId());
-        } else {
-            query.likeLeft("o.path", sysWorkTime.getOrgId() + "-");
-        }
-        sysWorkTime.setOrgId(null);
-        query.orderByDesc("ymd_date");
-        //时间范围查询
-        if (sysWorkTime.getRange() != null && sysWorkTime.getRange().length > 1) {
-            query.between("t.ymd_date", extractDate(sysWorkTime.getRange()[0].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"), extractDate(sysWorkTime.getRange()[1].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"));
-        }
+
+            if (sysWorkTime.getIsEnable() != null) {
+                query.eq("t.is_enable", sysWorkTime.getIsEnable());
+            }
+            if (sysWorkTime.getOrgId() != null && !sysWorkTime.getCheckSub()) {
+                query.eq("t.org_id", sysWorkTime.getOrgId());
+            }
+            if (sysWorkTime.getModifiedName() != null) {
+                query.eq("t.modified_name", sysWorkTime.getModifiedName());
+            }
+            if (sysWorkTime.getOrgType() != null) {
+                query.eq("o.type", sysWorkTime.getOrgType());
+            }
+            //下穿
+            if (sysWorkTime.getCheckSub()) {
+                query.like("o.path", sysWorkTime.getOrgId());
+            } else {
+                query.likeLeft("o.path", sysWorkTime.getOrgId() + "-");
+            }
+//            sysWorkTime.setOrgId(null);
+
+            //时间范围查询
+            if (sysWorkTime.getRange() != null && sysWorkTime.getRange().length > 1) {
+                query.between("t.ymd_date", extractDate(sysWorkTime.getRange()[0].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"), extractDate(sysWorkTime.getRange()[1].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"));
+            }
+            query.orderByDesc("ymd_date");
+
         //获取数据
-        IPage<SysWorkTimeDto> page1 = sysWorkTimeMapper.selectByPage(page, query);
+        IPage<SysWorkTimeDto> page1= null;
+            if(sysWorkTime.getNoWorkTime())
+            {
+                page1 = sysWorkTimeMapper.selectNoWorkTimeByPage(page, query,sysWorkTime);
+            }
+            else{
+                page1 = sysWorkTimeMapper.selectByPage(page, query);
+            }
+
         //抓换为TableDataInfo适配前端
         return TableDataInfo.build(page1);
 

+ 226 - 17
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeSetServiceImpl.java

@@ -16,6 +16,7 @@ import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.Ymd;
 import com.xunmei.common.core.utils.snowId.DateHelper;
 import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
 import com.xunmei.system.domain.SysWorkTimeSetDayofweek;
@@ -274,28 +275,44 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         return sysWorkTimeSet;
     }
 
+    /**
+     * 1)配置模版后立即自动生成生效日期到今年和次年的作息,
+     * 2)定时任务在每年11月15日自动生成下一年的作息。
+     * 3)修改作息模版后,自动修改生效日期后的已生成的作息
+     * 4)以最新修改为准,包括模版和app单日修改
+     * @param request
+     * @return
+     */
     @Transactional(rollbackFor = Exception.class)
     @Override
     public AjaxResult add(SysWorkTimeSet request) {
+        if(ObjectUtil.isNull(request.getEffectiveDate())){
+            return error("作息模板的生效日期不能为空");
+        }
+
         if(DateUtil.endOfDay(DateTime.now()).after(request.getEffectiveDate()))
         {
             return error("作息模板的生效日期必须大于今天");
         }
+
+        if(CollectionUtils.isEmpty(request.getOrgIds()))
+        {
+            return error("作息模板机构不能为空");
+        }
+
         List<Long> orgIds = request.getOrgIds();
+
         for (Long oid : orgIds) {
             List<SysWorkTimeSet> sysWorkTimeSets = baseMapper.selectList(new LambdaQueryWrapper<SysWorkTimeSet>().eq(SysWorkTimeSet::getOrgId, oid));
-//如果id为空表示是新增,需要判断是否存在相同机构相同时间的模板
+            //如果id为空表示是新增,需要判断是否存在相同机构相同时间的模板
             if (request.getId() == null && sysWorkTimeSets.size() > 0) {
                 return error("机构'" + orgService.getById(oid).getName() + "'已存在作息模板,一个机构只允许同时存在一个作息模板");
             }
         }
-        int year = Calendar.getInstance().get(Calendar.YEAR);
-
-        if (request.getEffectiveDate() != null) {
-            year = new DateHelper(request.getEffectiveDate()).getYear();
-        }
+//        int year = Calendar.getInstance().get(Calendar.YEAR);
+        int year = new DateHelper(request.getEffectiveDate()).getYear();
 
-        if (CollectionUtils.isNotEmpty(orgIds)) {
+//        if (CollectionUtils.isNotEmpty(orgIds)) {
             List<SysWorkTimeSet> sets = new ArrayList<>();
             SysWorkTimeSet set = null;
             SysOrg org = null;
@@ -316,10 +333,13 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
                     if (org != null) {
                         set.setOrgName(org.getShortName());
                     }
-
+                    set.setCreateTime(new Date());
+                    set.setCreateBy(SecurityUtils.getUsername());
                     sysWorkTimeSetMapper.insert(set);
 
                 } else {
+                    set.setUpdateTime(new Date());
+                    set.setUpdateBy(SecurityUtils.getUsername());
                     sysWorkTimeSetMapper.updateById(set);
                 }
 
@@ -341,14 +361,13 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
             }
             //清除可能存在的旧作息数据
             sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
-            for (SysWorkTimeSetDayofweek s :
-                    dayOfWeeks) {
+            for (SysWorkTimeSetDayofweek s : dayOfWeeks) {
                 sysWorkTimeSetDayofweekMapper.insert(s);
             }
             if (CollectionUtils.isNotEmpty(dayOfWeeks)) {
-                changeOrgWorkTime(sets, dayOfWeeks, request.getEffectiveDate(), orgIds, request.getCheckDataResult());
+                changeOrgWorkTime(sets, request.getEffectiveDate(), orgIds);
             }
-        }
+//        }
         return success();
     }
 
@@ -445,6 +464,93 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         }
     }
 
+    private void changeOrgWorkTime(List<SysWorkTimeSet> sets,Date effectiveDate, List<Long> orgIds) {
+        //如果生效年份等于当前年份,那么就重新生成生效日期后当年以及下一年的作息时间
+        int effectiveYear = new DateHelper(effectiveDate).getYear();
+        int dateNowYear = new DateHelper(new Date()).getYear();
+
+        // 如果模板的生效日期不是当年,则通过定时任务去生成下一年的作息
+        if (effectiveYear == dateNowYear) {
+            // 获取当前时间的Calendar实例
+            Calendar cal = Calendar.getInstance();
+            //设置年份
+            cal.set(Calendar.YEAR, effectiveYear + 2);
+            // DAY_OF_YEAR的值按照年份的第一天从1开始,设置为0可以得到前一年的最后一天
+            cal.set(Calendar.DAY_OF_YEAR, 0);
+            cal.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+            //删除模板生效日期后的作息时间及下个年的作息时间,模板生成时直接覆盖手动设置的作息,谁后修改或后生成谁生效
+            Map<String, Object> map = new HashMap<>();
+            map.put("effectiveDate", effectiveDate);
+            map.put("lastDayOfNextMonth", DateUtil.format(cal.getTime(), "yyyy-MM-dd"));
+            map.put("orgIds", orgIds);
+            sysWorkTimeMapper.deleteOrgWorkTimeByMonth(map);
+            //获取不需要生成的日期 (模板生成时直接覆盖手动设置的作息,谁后修改或后生成谁生效,所有不需要在获取不需要生成的日期)
+            List<SysWorkTime> list = new ArrayList<>();
+            //添加当月生效日期后的作息时间及下个月的作息时间
+            final List<DateTime> dateTimeList = DateUtil.rangeToList(effectiveDate, cal.getTime(), DateField.DAY_OF_MONTH);
+            List<SysWorkTime> workTimeEditDtoListAll = new ArrayList<>();
+            for (SysWorkTimeSet workTime : sets) {
+                List<SysWorkTime> workTimeEditDtoList = new ArrayList<>();
+                for (DateTime time : dateTimeList) {
+                    Optional<SysWorkTimeSetDayofweek> dayOfWeekSetNew = workTime.getDayOfWeeks().stream().filter(w -> w.getDayOfWeek() == time.dayOfWeek() && ObjectUtil.isNotNull(w.getIsWorkday()) && w.getIsWorkday() > 0).findFirst();
+                    SysWorkTimeSetDayofweek dayOfWeekSet = dayOfWeekSetNew.orElse(null);
+                    boolean isEnable = ObjectUtil.isNotNull(dayOfWeekSet) && dayOfWeekSet.getIsWorkday() > 0;
+                    SysWorkTime dto = new SysWorkTime();
+                    dto.setDate(time);
+                    dto.setIsEnable(isEnable ? 1L : 0);
+
+                    if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday() > 0)) {
+                        Optional<SysWorkTimeSetDayofweek> firstWorkDay = workTime.getDayOfWeeks().stream().filter(f -> f.getIsWorkday() > 0).findFirst();
+                        dayOfWeekSet = firstWorkDay.orElseGet(SysWorkTimeSetDayofweek::new);
+                    }
+                    dto.setWorkTime(dayOfWeekSet.getWorkTime());
+                    dto.setWorkOffTime(dayOfWeekSet.getWorkOffTime());
+                    dto.setOpenTime(dayOfWeekSet.getOpenTime());
+                    dto.setCloseTime(dayOfWeekSet.getCloseTime());
+                    dto.setNoonbreakStart(dayOfWeekSet.getNoonbreakStart());
+                    dto.setNoonbreakEnd(dayOfWeekSet.getNoonbreakEnd());
+                    workTimeEditDtoList.add(dto);
+                }
+                workTimeEditDtoListAll.addAll(workTimeEditDtoList);
+            }
+            if (CollectionUtils.isNotEmpty(workTimeEditDtoListAll)) {
+                SysWorkTimeSet requesta = new SysWorkTimeSet();
+                requesta.setOrgIds(orgIds);
+                //获取所有的作息配置
+                List<SysWorkTimeSet> listSet = sysWorkTimeSetMapper.selectWorkTimeSetList(requesta);
+                for (Long orgId : orgIds) {
+                    List<SysWorkTimeSet> listSetOrg = listSet.stream().filter(f -> f.getOrgId().equals(orgId) && f.getEffectiveDate().getTime() != effectiveDate.getTime()).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(listSetOrg)) {
+                        List<Date> dateList = new ArrayList<>();
+                        dateList.add(effectiveDate);
+                        listSetOrg.forEach(f -> {
+                            dateList.add(f.getEffectiveDate());
+                        });
+                        //dateList排序
+                        dateList.sort(Comparator.comparing(Date::getTime));
+                        //取出request.getEffectiveDate()在dateList中的位置
+                        int index = dateList.indexOf(effectiveDate);
+                        if (index != dateList.size() - 1) {
+                            Date effectiveDateNext = dateList.get(index + 1);
+                            //取出workTimeEditDtoListAll中ymd_date在EffectiveDate和effectiveDateNext之间的数据
+                            List<SysWorkTime> workTimeEditDtoList = workTimeEditDtoListAll.stream().filter(f -> f.getDate().getTime() >= effectiveDate.getTime() && f.getDate().getTime() < effectiveDateNext.getTime()).collect(Collectors.toList());
+                            List<Date> remDates = workTimeEditDtoList.stream().map(SysWorkTime::getDate).collect(Collectors.toList());
+                            workTimeService.remove(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).in(SysWorkTime::getYmdDate, remDates).eq(SysWorkTime::getIsManual, 0));
+                            batchnew(orgId, workTimeEditDtoList, list);
+                        } else {
+                            workTimeService.remove(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).ge(SysWorkTime::getYmdDate, effectiveDate).eq(SysWorkTime::getIsManual, 0));
+                            batchnew(orgId, workTimeEditDtoListAll, list);
+                        }
+                    } else {
+                        batchnew(orgId, workTimeEditDtoListAll, list);
+                    }
+
+                }
+            }
+        }
+    }
+
+
     public List<SysWorkTime> batchnew(Long orgId, List<SysWorkTime> workTimeDtoList, List<SysWorkTime> list) {
         // 小于现在时间的不允许修改
         final Date now = DateUtil.beginOfDay(new Date());
@@ -487,8 +593,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
 //            sysWorkTimeMapper.insert(s);
 //            workTimeList.add(s);
 //        }
-        for (SysWorkTime s :
-                list1) {
+        for (SysWorkTime s : list1) {
 
             s.setYmdDate(s.getDate());
             s.setYmdDay(Long.valueOf(s.getYmd().getDay()));
@@ -587,6 +692,52 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         generateWorkTime(year, calendar.get(Calendar.MONTH));
     }
 
+    /**
+     * 生成下个月的作息
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void generateNextYear() {
+        List<DateTime> dateTimeList= getNextYearDateList();
+        generateWorkTime(dateTimeList);
+    }
+
+    /**
+     * 获取下一月生成作息的日期列表
+     * @return
+     */
+    public List<DateTime> getNextMonthDateList(){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.add(Calendar.MONTH, 1);
+        final Date date = com.xunmei.common.core.utils.DateHelper.getDate(calendar.getTime());
+        final com.xunmei.common.core.utils.DateHelper dateTime = new com.xunmei.common.core.utils.DateHelper(date);
+        final Date start = dateTime.monthStart();
+        final Date end = dateTime.monthEnd();
+        final List<DateTime> dateTimeList = DateUtil.rangeToList(start, end, DateField.DAY_OF_MONTH);
+        return dateTimeList;
+    }
+
+    /**
+     * 获取下一年生成作息的日期列表
+     * @return
+     */
+    public List<DateTime> getNextYearDateList(){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+        calendar.add(Calendar.YEAR, 1);
+        calendar.set(Calendar.DAY_OF_YEAR, 1);
+        final Date date = com.xunmei.common.core.utils.DateHelper.getDate(calendar.getTime());
+        final com.xunmei.common.core.utils.DateHelper dateTime = new com.xunmei.common.core.utils.DateHelper(date);
+        final Date start = dateTime.yearStart();
+        final Date end = dateTime.yearEnd();
+        final List<DateTime> dateTimeList = DateUtil.rangeToList(start, end, DateField.DAY_OF_MONTH);
+        return dateTimeList;
+    }
+
+
+
     @Transactional(rollbackFor = Exception.class)
     public void generateWorkTime(int year, int month) {
         Calendar calendar = Calendar.getInstance();
@@ -672,18 +823,76 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
 //                list1 = workTimeEditDtos;
 //            }
             list1 = workTimeEditDtos;
-            batch(dayMap.getKey(), date, list1);
+            batch(dayMap.getKey(),list1);
         }
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void generateWorkTime(List<DateTime> dateTimeList) {
+        List<SysWorkTimeSet> workTimes = this.list(new LambdaQueryWrapper<SysWorkTimeSet>());
+        Map<Long, List<SysWorkTimeSet>> group = workTimes.stream()
+                .sorted(Comparator.comparing(SysWorkTimeSet::getEffectiveDate).reversed())
+                .collect(Collectors.groupingBy(SysWorkTimeSet::getOrgId));
+
+        List<SysWorkTime> workTimeEditDtoList = new ArrayList<>();
+        for (DateTime time : dateTimeList) {
+            Date date1 = time.toJdkDate();
+            System.out.println("date1:" + date1);
+            //for(Long orgId:group.keySet()) {
+            for (Map.Entry<Long, List<SysWorkTimeSet>> setMap : group.entrySet()) {
+                Optional<SysWorkTimeSet> ws = setMap.getValue().stream().filter(w -> date1.after(w.getEffectiveDate()) || DateUtil.isSameDay(date1, w.getEffectiveDate())).findFirst();
+                if (!ws.isPresent()) {
+                    continue;
+                }
+                SysWorkTimeSet set = ws.get();
+                List<SysWorkTimeSetDayofweek> temp = this.sysWorkTimeSetDayofweekMapper.selectList(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().eq(SysWorkTimeSetDayofweek::getWorkTimeSetId, set.getId()));
+                set.setDayOfWeeks(temp);
+                Long i = (long) time.dayOfWeek();
+                SysWorkTimeSetDayofweek dayOfWeekSet = temp.stream().filter(e -> e.getDayOfWeek().equals(i)).findFirst().orElse(null);
+
+                boolean isEnable = ObjectUtil.isNotNull(dayOfWeekSet) && dayOfWeekSet.getIsWorkday() > 0;
+                SysWorkTime dto = new SysWorkTime();
+                dto.setDate(time);
+                dto.setOrgId(setMap.getKey());
+                dto.setIsEnable(isEnable ? 1L : 0L);
+                if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday() > 0)) {
+                    Optional<SysWorkTimeSetDayofweek> firstWorkDay = set.getDayOfWeeks().stream().filter(f -> f.getIsWorkday() > 0).findFirst();
+                    if (firstWorkDay.isPresent()) {
+                        dayOfWeekSet = firstWorkDay.orElseGet(SysWorkTimeSetDayofweek::new);
+                    }
+                }
+                //dto.setIsEnable(dayOfWeekSet.getIsWorkday());
+//                workTimeEditDtoList.add(dto);
+                dto.setWorkTime(dayOfWeekSet.getWorkTime());
+                dto.setWorkOffTime(dayOfWeekSet.getWorkOffTime());
+                dto.setOpenTime(dayOfWeekSet.getOpenTime());
+                dto.setCloseTime(dayOfWeekSet.getCloseTime());
+                dto.setNoonbreakStart(dayOfWeekSet.getNoonbreakStart());
+                dto.setNoonbreakEnd(dayOfWeekSet.getNoonbreakEnd());
+                workTimeEditDtoList.add(dto);
+            }
+        }
+
+        Map<Long, List<SysWorkTime>> groupDay = workTimeEditDtoList.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
+        //自动生成时覆盖按日维护的的作息,谁后生成或者后修改谁生效, 删除下一年已有的作息
+        final LambdaQueryWrapper<SysWorkTime> sysWorkTimeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        sysWorkTimeLambdaQueryWrapper.ge(SysWorkTime::getYmdDate,dateTimeList.get(0).toString("yyyy-MM-dd"));
+        sysWorkTimeLambdaQueryWrapper.le(SysWorkTime::getYmdDate,dateTimeList.get(dateTimeList.size()-1).toString("yyyy-MM-dd"));
+        sysWorkTimeMapper.delete(sysWorkTimeLambdaQueryWrapper);
+
+        for (Map.Entry<Long, List<SysWorkTime>> dayMap : groupDay.entrySet()) {
+            batch(dayMap.getKey(), dayMap.getValue());
+        }
+    }
+
+
     /**
      * @param orgId
-     * @param month
      * @param workTimeEditDtoList
      */
     @Transactional
-    public void batch(final Long orgId, final Date month, final List<SysWorkTime> workTimeEditDtoList) {
+    public void batch(final Long orgId, final List<SysWorkTime> workTimeEditDtoList) {
         // 小于现在时间的不允许修改
         final Date now = DateUtil.beginOfDay(new Date());
         List<SysWorkTime> workTimeList = StreamHelper.to(workTimeEditDtoList, workTimeEditDto -> {

+ 1 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/OrgPhysicalDefenseConstructionExport.java

@@ -13,7 +13,7 @@ import lombok.Data;
  * @date : 2023/11/27
  */
 @Data
-@ColumnWidth(15) //列宽,最大值为255
+@ColumnWidth(25) //列宽,最大值为255
 @HeadRowHeight(16) //表头行高
 @ContentRowHeight(16) //数据行高
 public class OrgPhysicalDefenseConstructionExport {

+ 4 - 4
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/SecurityWorkExport.java

@@ -82,13 +82,13 @@ public class SecurityWorkExport {
     @ExcelProperty(value = {"营业网点夜间值守", "异地值守网点数量(由监控中心进行远程值守)"}, index = 30)
     private Integer remoteDutyNetworkNumber;
     @ExcelProperty(value = {"机构及人员配备", "是否设立独立机构数"}, index = 31)
-    private Integer isAlone;
+    private String isAlone;
     @ExcelProperty(value = {"机构及人员配备", "部门负责人、一般管理人员和监控中心负责人为专职人数"}, index = 32)
-    private Integer ManagerFullTime;
+    private Integer managerFullTime;
     @ExcelProperty(value = {"机构及人员配备", "部门负责人、一般管理人员和监控中心负责人为兼职职人数"}, index = 33)
-    private Integer ManagerPartTime;
+    private Integer managerPartTime;
     @ExcelProperty(value = {"机构及人员配备", "部门负责人、一般管理人员和监控中心负责人安保持证人数"}, index = 34)
-    private Integer ManagerCertificate;
+    private Integer managerCertificate;
     @ExcelProperty(value = {"机构及人员配备", "监控中心人员情况", "是否设专(兼)职主任"}, index = 35)
     private String isLeader;
     @ExcelProperty(value = {"机构及人员配备", "监控中心人员情况", "是否设专(兼)职技术维护岗"}, index = 36)

+ 3 - 2
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysNfcBindMapper.xml

@@ -89,7 +89,7 @@
         a.org_id,
         a.org_name,
         a.org_path,
-        a.collection_area_name,
+        c.check_name as  collection_area_name,
         a.check_id,
         a.create_by,
         a.create_time,
@@ -98,8 +98,9 @@
         FROM
         sys_nfc_bind a
         LEFT JOIN sys_org b on a.org_id = b.id
+        LEFT JOIN sys_area_check c on a.check_id = c.id
         WHERE
-        del_flag = 0
+        a.del_flag = 0
         <choose>
             <when test="info.checkSub">
                 AND b.path like concat('%', #{info.orgPath}, '%')

+ 151 - 90
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml

@@ -718,26 +718,33 @@ and
         </foreach>
     </select>
     <select id="selectNetworkNumberByPath" resultType="java.lang.Integer">
-        SELECT COUNT(1) FROM sys_org WHERE path LIKE  concat( #{orgPath}, '%') AND type=4 AND deleted=0
+        SELECT COUNT(1) FROM sys_org WHERE path LIKE  concat( #{orgPath}, '%') AND type=4 AND deleted=0 AND is_lock=0
     </select>
     <select id="complianceStatus" resultType="com.xunmei.system.util.OrgPhysicalDefenseConstructionExport">
-        SELECT
-            IFNULL( SUM( IF ( a.standard IN ( 1, 2 ), 1, 0 )), 0 ) AS reachNumber,
-            IFNULL( SUM( IF ( a.standard = 2, 1, 0 )), 0 ) AS oldReachNumber,
-            IFNULL( SUM( IF ( a.standard = 1, 1, 0 )), 0 ) AS newReachNumber,
+        select
+            sum(if((t.ga382021 + t.ga382015) > 0,1,0 )) as reachNumber,
+            sum(if(t.ga382021 > 0,1,0)) as newReachNumber,
+            sum(if((t.ga382015 -t.ga382021 > 0),1,0)) as oldReachNumber,
             IFNULL(
                     CONCAT(
-                            ROUND( SUM( IF ( a.standard IN ( 1, 2 ), 1, 0 ))/ COUNT( b.id )* 100, 2 ),
+                            ROUND( sum(if((t.ga382021 + t.ga382015) > 0,1,0 ))/ COUNT(*)* 100, 2 ),
                             '%'
                         ),
                     '0%'
                 ) AS reachRate
-        FROM
-            sys_org_physical_defense_construction a
-                LEFT JOIN sys_org b ON a.org_id = b.id
-        WHERE
-            b.type=4 AND
-            b.path LIKE concat(#{orgPath}, '%')
+        from (
+                 select
+                     b.id as org_id,
+                     if(SUM(IF(a.standard=1,1,0)) > 0 , 1, 0) as 'ga382021',
+                         if(SUM(IF(a.standard=2,1,0)) > 0 , 1, 0 ) as 'ga382015'
+                 from sys_org b
+                          LEFT JOIN sys_org_physical_defense_construction a on a.org_id = b.id
+                 where 1=1
+                   AND b.deleted = 0
+                   AND b.is_lock = 0
+                   AND b.deleted = 0
+                   AND b.path LIKE concat(#{orgPath}, '%')
+                 GROUP BY b.id ) t
     </select>
 
     <select id="rectificationStatus" resultType="java.lang.Integer">
@@ -746,7 +753,9 @@ and
         FROM
             sys_org_physical_defense_construction a LEFT JOIN sys_org b ON a.org_id=b.id
         WHERE
-            a.date_of_compliance LIKE concat(#{year}, '%') AND b.path LIKE concat(#{orgPath}, '%')
+            a.date_of_compliance LIKE concat(#{year}, '%')
+          AND a.type = 1
+          AND b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="oldRectificationStatus" resultType="java.lang.Integer">
         SELECT
@@ -760,6 +769,8 @@ and
                     org_id
                 FROM
                     sys_org_physical_defense_construction
+                where
+                    type = 1
                 GROUP BY
                     org_id
                 HAVING
@@ -782,6 +793,7 @@ and
                     GROUP_CONCAT( DISTINCT org_id )
                 FROM
                     sys_org_physical_defense_construction
+                where type = 1
                 GROUP BY
                     org_id
                 HAVING
@@ -821,17 +833,18 @@ and
             sys_org_physical_defense_construction a
                 INNER JOIN sys_org c ON c.id=a.org_id
                 LEFT JOIN sys_org_extend b ON a.org_id = b.org_id
-        WHERE c.type=4 and c.path like concat(#{orgPath}, '%')
+        WHERE c.type=4
+          and c.deleted = 0
+          and c.path like concat(#{orgPath}, '%')
         GROUP BY
             a.org_id
     </select>
     <select id="getReachNumber" resultType="java.lang.Integer">
-        SELECT
-            IFNULL( SUM( IF ( a.standard IN ( 1, 2 ), 1, 0 )), 0 )
-        FROM
-            sys_org_physical_defense_construction a
-                LEFT JOIN sys_org b ON a.org_id = b.id
-        WHERE b.type=4 and b.path LIKE concat(#{orgPath}, '%')
+        select SUM(a.size) from (select org_id,if(count(*) > 0,1,0) as size from  sys_org_physical_defense_construction where standard in (1,2) and type = 1 GROUP BY org_id) a
+                                    LEFT JOIN sys_org b on a.org_id = b.id
+        where 1=1
+          AND b.deleted = 0
+          AND b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getOwnership" resultType="java.lang.Integer">
         SELECT
@@ -839,11 +852,11 @@ and
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
-        WHERE b.type=4 and b.path LIKE concat(#{orgPath}, '%')
+        WHERE b.type=4 and b.deleted = 0 and b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getOutside" resultType="java.lang.Integer">
         SELECT
-            IFNULL( SUM( IF ( a.outside_area = 1, 1, 0 )), 0 )
+            IFNULL( SUM( IF ( a.outside_area = 0, 1, 0 )), 0 )
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
@@ -875,50 +888,73 @@ and
               b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getOnLine" resultType="java.util.Map">
+
         SELECT
-            IFNULL( SUM( IF ( a.type = 3, 1, 0 )), 0 ) AS onLineTotal,
-            IFNULL( SUM( IF ( a.type = 3 AND a.standard = 1, 1, 0 )), 0 ) AS onLineReachNumber
+            (
+                SELECT
+                    IFNULL( SUM( IF ( b.self_service_bank = 1, 1, 0 )), 0 ) AS onLineTotal
+                FROM
+                    sys_org a
+                        LEFT JOIN sys_org_extend b ON a.id = b.org_id
+                WHERE
+                    a.path LIKE concat( #{orgPath}, '%' )) AS onLineTotal,
+            (
+                select SUM(a.size) from (select org_id,if(count(1) > 0,1,0) as size from  sys_org_physical_defense_construction where standard =1 and type = 4 GROUP BY org_id) a
+                                            LEFT JOIN sys_org b on a.org_id = b.id
+                where 1=1
+                  AND b.deleted = 0
+                  AND b.path LIKE concat(#{orgPath}, '%' )) AS onLineReachNumber
         FROM
-            sys_org_physical_defense_construction a
-                LEFT JOIN sys_org b ON a.org_id = b.id
-        WHERE
-            b.path LIKE concat(#{orgPath}, '%')
+            DUAL
     </select>
     <select id="getDeparture" resultType="java.util.Map">
+
         SELECT
-            IFNULL( SUM( IF ( a.type = 4, 1, 0 )), 0 ) AS departureTotal,
-            IFNULL( SUM( IF ( a.type = 4 AND a.standard = 1, 1, 0 )), 0 ) AS departureReachNumber
+            (
+                SELECT
+                    count( 1 )
+                FROM
+                    sys_org
+                WHERE
+                    type = 5
+                  AND deleted = 0
+                  AND path LIKE concat( #{orgPath}, '%' )) AS departureTotal,
+            (
+              select SUM(a.size) from (select org_id,if(count(1) > 0,1,0) as size from
+              sys_org_physical_defense_construction where standard =1 and type = 3 GROUP BY org_id) a
+                  LEFT JOIN sys_org b on a.org_id = b.id
+                  where 1=1
+                  AND b.deleted = 0
+                  AND b.path LIKE concat(#{orgPath}, '%' )) AS departureReachNumber
         FROM
-            sys_org_physical_defense_construction a
-                LEFT JOIN sys_org b ON a.org_id = b.id
-        WHERE
-            b.path LIKE concat(#{orgPath}, '%')
+            DUAL
     </select>
     <select id="getSelfEquipment" resultType="java.util.Map">
-        SELECT
-            IFNULL( SUM( a.lobby_equipment ), 0 ) AS onLineLobbyImplement,
-            IFNULL( SUM( a.wall_penetrating_equipment ), 0 ) AS onLineThroughWalls,
-            IFNULL( SUM( a.detached_lobby_equipment ), 0 ) AS departureLobbyImplement,
-            IFNULL( SUM( a.detached_wall_penetrating_equipment ), 0 ) AS departureThroughWalls,
-            IFNULL(
-                        SUM( a.lobby_equipment ) + SUM( a.wall_penetrating_equipment ) + SUM( a.detached_lobby_equipment ) + SUM( a.detached_wall_penetrating_equipment ),
-                        0
-                ) AS selfServiceDevicesTotal
-        FROM
-            sys_org_extend a
-                LEFT JOIN sys_org b ON a.org_id = b.id
-        WHERE
-            b.path LIKE concat(#{orgPath}, '%')
+        select
+            t.onLineThroughWalls,
+            t.onLineLobbyImplement,
+            t.departureThroughWalls,
+            t.departureLobbyImplement,
+            ( t.onLineThroughWalls + t.onLineLobbyImplement + t.departureThroughWalls + t.departureLobbyImplement ) AS selfServiceDevicesTotal
+        from (
+
+                 select
+                     (select IFNULL( SUM( a.lobby_equipment ), 0 )  from sys_org_extend a LEFT JOIN sys_org b on a.org_id = b.id WHERE 1=1 and b.type = 4 and b.path LIKE concat(#{orgPath}, '%')) as onLineThroughWalls,
+                     (select IFNULL( SUM( a.wall_penetrating_equipment ), 0 )  from sys_org_extend a LEFT JOIN sys_org b on a.org_id = b.id WHERE 1=1 and b.type = 4 and b.path LIKE concat(#{orgPath}, '%')) as onLineLobbyImplement,
+                     (select IFNULL( SUM( a.lobby_equipment ), 0 )  from sys_org_extend a LEFT JOIN sys_org b on a.org_id = b.id WHERE 1=1 and b.type = 5 and b.path LIKE concat(#{orgPath}, '%')) as departureThroughWalls,
+                     (select IFNULL( SUM( a.wall_penetrating_equipment ), 0 )  from sys_org_extend a LEFT JOIN sys_org b on a.org_id = b.id WHERE 1=1 and b.type = 5 and b.path LIKE concat(#{orgPath}, '%')) as departureLobbyImplement
+                 from dual
+             ) t
     </select>
     <select id="getCenterConstruction" resultType="java.util.Map">
+
         SELECT
-            IFNULL( IF ( a.construction_time IS NULL, '0', SUBSTR( a.construction_time, 1, 4 ) ), '0' ) AS centerConstructionTime,
-            IFNULL( IF ( a.last_update_time IS NULL, '0', SUBSTR( a.last_update_time, 1, 4 ) ), '0' ) AS transformTime,
-            IFNULL( a.platform_brand, '0' ) AS brand
+            IFNULL(SUBSTR( b.construction_time, 1, 4 ), '' ) as centerConstructionTime,
+            IFNULL(SUBSTR( b.last_update_time, 1, 4 ), '' )AS transformTime,
+            b.platform_brand  AS brand
         FROM
-            sys_org_extend a
-                LEFT JOIN sys_org b ON a.org_id = b.id
-        WHERE b.id=#{orgId}
+            ( SELECT id FROM sys_org WHERE type = 10 AND path LIKE concat( #{orgPath}, '%' ) ORDER BY create_time DESC LIMIT 0, 1 ) a
+                LEFT JOIN sys_org_extend b ON a.id = b.org_id
     </select>
     <select id="getCamera" resultType="java.util.Map">
         SELECT
@@ -928,8 +964,9 @@ and
             sys_device a
                 LEFT JOIN sys_org b ON a.org_id = b.id
         WHERE
-            del_flag = 0
-          AND device_type = 2
+            a.del_flag = 0
+          AND a.device_type = 2
+          AND b.deleted = 0
           AND b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getRemote" resultType="java.util.Map">
@@ -939,7 +976,12 @@ and
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
-        where  b.path LIKE concat(#{orgPath}, '%')
+        where
+            1=1
+          and b.type != 10
+          and a.remote_control = 1
+          and b.deleted = 0
+          and b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getDuty" resultType="java.util.Map">
         SELECT
@@ -948,18 +990,35 @@ and
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
-        where b.path LIKE concat(#{orgPath}, '%')
+        WHERE
+            1=1
+          and b.deleted = 0
+          and b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getCertificate" resultType="java.util.Map">
-SELECT
-                                                               IFNULL( SUM( a.inner_count ), 0 ) AS internalCertificateNumber,
-                                                               IFNULL( SUM( a.outside_count ), 0 ) AS outsourceCertificateNumber,
-                                                               IFNULL( SUM( a.inner_count )+ SUM( a.outside_count ), 0 ) AS certificateTotal,
-                                                               IFNULL( SUM( IF ( a.askari_certificate IS NULL, 0, 1 )), 0 ) AS certificatePeopleNumber
-                                                           FROM
-                                                               sys_org_extend a
-                                                                   LEFT JOIN sys_org b ON a.org_id = b.id
-                                                           where b.path LIKE concat(#{orgPath}, '%')
+        SELECT
+            IFNULL( SUM( a.inner_count ), 0 ) AS internalCertificateNumber,
+            IFNULL( SUM( a.outside_count ), 0 ) AS outsourceCertificateNumber,
+            IFNULL( SUM( a.inner_count )+ SUM( a.outside_count ), 0 ) AS certificateTotal,
+            (
+                SELECT
+                    count(*)
+                FROM
+                    sys_user a
+                        LEFT JOIN sys_user_information b ON a.id = b.user_id
+                        LEFT JOIN sys_org c ON a.org_id = c.id
+                WHERE
+                    1 = 1
+                  AND b.dept_id = 2
+                  AND b.certificate_work = '1'
+                  AND a.is_manage = 'Y'
+                  AND c.deleted = 0
+                  AND c.path LIKE concat(#{orgPath}, '%')) AS certificatePeopleNumber
+        FROM
+            sys_org_extend a
+                LEFT JOIN sys_org b ON a.org_id = b.id
+        WHERE
+            b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getSafe" resultType="java.lang.Integer">
         SELECT
@@ -1039,32 +1098,41 @@ and a.org_path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getAlone" resultType="java.lang.Integer">
         SELECT
-            COUNT( a.id )
+            COUNT( * )
         FROM
             sys_user_information a
                 LEFT JOIN sys_user b ON a.user_id = b.id
                 LEFT JOIN sys_org c ON b.org_id = c.id
-        WHERE a.alone_dept='Y' AND c.path LIKE concat(#{orgPath}, '%')
+        WHERE c.deleted = 0 and  a.alone_dept='Y' and b.is_manage = 'Y' AND c.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getManager" resultType="java.lang.Integer">
         SELECT
-            COUNT( a.id )
+            COUNT( * )
         FROM
             sys_user_information a
                 LEFT JOIN sys_user b ON a.user_id = b.id
                 LEFT JOIN sys_org c ON b.org_id = c.id
-        WHERE a.is_full_time=#{isFull} AND a.duties=1 AND c.path like concat(#{orgPath}, '%')
+        WHERE
+            1 = 1
+          AND c.deleted = 0
+          AND a.is_full_time = #{isFull}
+          AND a.duties in ('1','2','3')
+          AND b.is_manage = 'Y'
+          AND c.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getManagerCertificate" resultType="java.lang.Integer">
         SELECT
-            COUNT( a.id )
+            COUNT( * )
         FROM
             sys_user_information a
                 LEFT JOIN sys_user b ON a.user_id = b.id
                 LEFT JOIN sys_org c ON b.org_id = c.id
         WHERE
-            a.certificate_work = 1
-          AND a.duties = 1
+            1 = 1
+          AND c.deleted = 0
+          AND a.certificate_work = 1
+          AND a.duties in ('1','2','3')
+          AND b.is_manage = 'Y'
           AND c.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getIsMonitor" resultType="java.lang.String">
@@ -1077,6 +1145,8 @@ and a.org_path LIKE concat(#{orgPath}, '%')
                 LEFT JOIN sys_org c ON b.org_id = c.id
         WHERE
             a.duties = #{duties}
+          and c.deleted = 0
+          AND b.is_manage = 'Y'
           AND c.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getMonitorPeople" resultType="java.util.Map">
@@ -1090,6 +1160,8 @@ and a.org_path LIKE concat(#{orgPath}, '%')
                 LEFT JOIN sys_org c ON b.org_id = c.id
         WHERE
             a.duties IN ( 2, 4, 5 )
+          AND c.deleted = 0
+          AND b.is_manage = 'Y'
           AND c.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getSafeHeadToNetwork" resultType="java.lang.Integer">
@@ -1115,22 +1187,11 @@ and a.org_path LIKE concat(#{orgPath}, '%')
           AND b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getHaveSecurityNetworkNumber" resultType="java.lang.Integer">
-        SELECT
-            COUNT( 1 )
-        FROM
-            sys_org
-        WHERE
-                id IN (
-                SELECT
-                    IF
-                        ( SUM( a.inner_count )+ SUM( a.outside_count )> 0, b.id, 0 )
-                FROM
-                    sys_org_extend a
-                        LEFT JOIN sys_org b ON a.org_id = b.id
-                WHERE
-                    b.path LIKE concat(#{orgPath}, '%')
-                GROUP BY
-                    a.id)
+        select count(*) from  sys_org a
+        LEFT JOIN sys_org_extend b  on a.id = b.org_id
+        WHERE 1=1
+          and (b.inner_count > 0 or b.outside_count > 0)
+          and a.path LIKE concat( #{orgPath}, '%' )
     </select>
     <select id="getHeadSafeCheckNumber" resultType="java.lang.Integer">
         SELECT

+ 6 - 0
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -36,6 +36,7 @@
                  left join sys_user_role ur on ur.role_id = r.id
                  left join sys_user u on u.id = ur.user_id
                  left join sys_dept d on u.dept_id = d.dept_id
+
     </sql>
 
     <select id="selectRoleList" parameterType="com.xunmei.system.api.domain.SysRole" resultMap="SysRoleResult">
@@ -69,10 +70,12 @@
     <select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult">
         <include refid="selectRoleVo"/>
         WHERE r.del_flag = '0' and ur.user_id = #{userId}
+        order by r.role_sort
     </select>
 
     <select id="selectRoleAll" resultMap="SysRoleResult">
         <include refid="selectRoleVo"/>
+        order by r.role_sort
     </select>
 
     <select id="selectRoleListByUserId" parameterType="Long" resultType="Long">
@@ -86,11 +89,13 @@
     <select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
         <include refid="selectRoleVo"/>
         where r.id = #{roleId}
+        order by r.role_sort
     </select>
 
     <select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult">
         <include refid="selectRoleVo"/>
         WHERE r.del_flag = '0' and u.username = #{userName}
+        order by r.role_sort
     </select>
 
     <select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
@@ -119,6 +124,7 @@
         SELECT *
         FROM sys_role
         WHERE role_name !='超级管理员' and  del_flag=0
+        order by role_sort
     </select>
 
     <insert id="insertRole" parameterType="com.xunmei.system.api.domain.SysRole" useGeneratedKeys="true"

+ 5 - 2
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysUserInformationMapper.xml

@@ -215,8 +215,11 @@
                     <if test="workType != null">work_type =
                         #{workType},
                     </if>
-                    <if test="isFullTime != null">is_full_time =
-                        #{isFullTime},
+                    <if test="aloneDept != null">
+                        alone_dept =#{aloneDept},
+                    </if>
+                    <if test="isFullTime != null">
+                        is_full_time =#{isFullTime},
                     </if>
                     <if test="highestEducation != null">highest_education =
                         #{highestEducation},

+ 28 - 2
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysWorkTimeMapper.xml

@@ -129,9 +129,35 @@
             o.short_name as orgName
         FROM
             sys_work_time t
-                LEFT JOIN sys_org o ON t.org_id = o.id
+            LEFT JOIN sys_org o ON t.org_id = o.id AND o.deleted=0 AND o.is_lock=0
             ${ew.customSqlSegment}
-
+    </select>
+    <select id="selectNoWorkTimeByPage" resultType="com.xunmei.system.dto.SysWorkTimeDto">
+        SELECT
+        o1.short_name as orgName,
+        c.*
+        FROM
+            sys_org o1 LEFT JOIN
+            (
+                select  t.*
+                from sys_org o
+                 left join sys_work_time t on t.org_id = o.id
+                 ${ew.customSqlSegment}
+            ) c
+            ON c.org_id = o1.id
+            where c.id is null AND o1.deleted=0 AND o1.is_lock=0
+        <choose>
+            <when test="request.checkSub==true">
+               AND o1.path like concat('%',#{request.orgId}, '%')
+            </when>
+            <otherwise>
+               AND o1.id = #{request.orgId}
+            </otherwise>
+         </choose>
+        <if test="request.orgType!= null">
+            and o1.type=#{request.orgType}
+        </if>
+        order by c.ymd_date
     </select>
     <select id="findByOrgAndMonth" resultType="com.xunmei.common.core.domain.worktime.domain.SysWorkTime">