Parcourir la source

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

ouyang il y a 1 an
Parent
commit
c8b3045d3f
46 fichiers modifiés avec 1611 ajouts et 201 suppressions
  1. 49 2
      project_data/sql/0.0.4/soc/soc.sql
  2. 8 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteUserService.java
  3. 11 9
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteUserFallbackFactory.java
  4. 2 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/letter/vo/CoreOutInRecordVo.java
  5. 3 2
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/panel/enums/PanelTypeEnums.java
  6. 4 4
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/CoreMonitoringRetrievalTaskOneVo.java
  7. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  8. 3 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/controller/CoreEvaluateTaskController.java
  9. 9 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/service/impl/CoreEvaluateTaskServiceImpl.java
  10. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/vo/EvaluateTaskExportVO.java
  11. 16 7
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/panel/service/impl/PanelServiceImpl.java
  12. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/controller/QuestionController.java
  13. 9 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/IQuestionService.java
  14. 65 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java
  15. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/monitor/vo/MonitoringAccessVO.java
  16. 2 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/controller/SafetyInspectReportController.java
  17. 2 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/service/SafetyInspectService.java
  18. 7 6
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/service/impl/SafetyInspectServiceImpl.java
  19. 3 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/vo/SafetyInspectVO.java
  20. 53 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/vo/SelfInspectVO.java
  21. 38 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionDelServiceImpl.java
  22. 70 20
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionServiceImpl.java
  23. 13 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/mapper/ResumptionMapper.java
  24. 3 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/SafetyCheckRegisterSericeImpl.java
  25. 85 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/controller/CoreSafetyBookNewController.java
  26. 149 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/domain/CoreSafetyBookNew.java
  27. 68 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/mapper/CoreSafetyBookNewMapper.java
  28. 72 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/service/ICoreSafetyBookNewService.java
  29. 169 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/service/impl/CoreSafetyBookNewServiceImpl.java
  30. 3 2
      soc-modules/soc-modules-core/src/main/resources/mapper/evaluate/CoreEvaluateTaskMapper.xml
  31. 3 3
      soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/ResumptionReportMapper.xml
  32. 122 0
      soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionMapper.xml
  33. 250 0
      soc-modules/soc-modules-core/src/main/resources/mapper/safetybook/CoreSafetyBookNewMapper.xml
  34. 2 2
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java
  35. 30 5
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeptController.java
  36. 14 5
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java
  37. 18 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysOrgMapper.java
  38. 3 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysUserMapper.java
  39. 3 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysUserService.java
  40. 53 24
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java
  41. 8 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysUserServiceImpl.java
  42. 3 3
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeSetServiceImpl.java
  43. 1 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/DeviceExport.java
  44. 43 43
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/SecurityWorkExport.java
  45. 122 46
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml
  46. 14 3
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 49 - 2
project_data/sql/0.0.4/soc/soc.sql

@@ -25,7 +25,10 @@ update sys_dict_data set dict_label='登记中' where dict_type='edu_training_do
 -- 履职状态描述变更
 update sys_dict_data set dict_label='履职中' where dict_type='resumption_status' and dict_label='进行中' and dict_value=2 LIMIT 1;
 
-delete from sys_menu where id in (1731872300761878529,1731503585113534466,1729308502301728769,1731496383090913282,1731498925506031618,1731499700525330433,1731501484262158338,1731502833360039937);
+delete from sys_menu where id in (1732284060286410753,1731872300761878529,1731503585113534466,1729308502301728769,1731496383090913282,1731498925506031618,1731499700525330433,1731501484262158338,1731502833360039937);
+INSERT INTO sys_menu (id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, platform_type, icon, image_path, create_by, create_time, update_by, update_time, remark)
+VALUES (1732284060286410753, '导出安全保卫工作情况统计', 103, 6, '', null, null, 1, 0, 'F', '0', '0', 'system:dept:exportSecurityWork', '1', null, null, null, now(), '', null, '');
+
 INSERT INTO sys_menu (id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, platform_type, icon, image_path, create_by, create_time, update_by, update_time, remark)
 VALUES (1729308502301728769, '导出全省农信系统物防建设达标情况', 103, 5, '', null, null, 1, 0, 'F', '0', '0', 'system:dept:exportConstruction', '1', null, null, null, now(), '', null, '');
 INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
@@ -44,7 +47,14 @@ INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `com
 VALUES (1731872300761878529, '导出', 1719892877586239490, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:evaluateTaskReport:export', '1', NULL, NULL, '省联社账号', '2023-11-28 15:52:54', '', NULL, '');
 
 
-delete from sys_role_menu where menu_id in (1731872300761878529,1731503585113534466,1731502833360039937,1729308502301728769,1731496383090913282,1731498925506031618,1731499700525330433,1731501484262158338);
+delete from sys_role_menu where menu_id in (1732284060286410753,1731872300761878529,1731503585113534466,1731502833360039937,1729308502301728769,1731496383090913282,1731498925506031618,1731499700525330433,1731501484262158338);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 1732284060286410753);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (116, 1732284060286410753);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (117, 1732284060286410753);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (118, 1732284060286410753);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (119, 1732284060286410753);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (120, 1732284060286410753);
+
 INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (115, 1731872300761878529);
 INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (116, 1731872300761878529);
 INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (117, 1731872300761878529);
@@ -140,6 +150,38 @@ CREATE TABLE if not exists `core_safety_book_book_files` (
                                                `update_time` datetime(6) DEFAULT NULL COMMENT '更新时间',
                                                PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+-- 新安全责任书表
+CREATE TABLE if not exists `core_safety_book_new` (
+                                        `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+                                        `year` int NOT NULL COMMENT '所属年份',
+                                        `create_by` bigint DEFAULT NULL COMMENT '创建人id',
+                                        `create_time` datetime(6) DEFAULT NULL COMMENT '创建时间',
+                                        `update_by` bigint DEFAULT NULL COMMENT '修改人id',
+                                        `update_time` datetime(6) DEFAULT NULL COMMENT '更新时间',
+                                        `deleted` int DEFAULT '0' COMMENT '是否删除',
+                                        `type` int DEFAULT NULL COMMENT '签署责任书类型',
+                                        `time` datetime DEFAULT NULL COMMENT '签署时间',
+                                        `party_a` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '甲方',
+                                        `party_b` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '乙方',
+                                        `party_a_org` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '甲方机构',
+                                        `party_b_org` bigint DEFAULT NULL COMMENT '乙方机构',
+                                        `sign_level` int DEFAULT NULL COMMENT '签署层级',
+                                        PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+-- 添加新安全责任书菜单
+DELETE FROM `sys_menu` WHERE id IN (1732224068700721153,1732225804865753089,1732225877351714817,1732225942820605954,1732226010889965570);
+INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1732224068700721153, '新安全责任书', 1711912586825461761, 4, 'safetyBookNew', 'safetyBook/newBook/index', NULL, 1, 0, 'C', '0', '0', 'safetyBookNew', '1', 'documentation', NULL, '省联社账号', '2023-12-06 10:23:25', '', NULL, '');
+INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1732225804865753089, '列表', 1732224068700721153, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:safetyBooknew:list', '1', NULL, NULL, '超级管理员', '2023-12-06 10:30:18', '', NULL, '');
+INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1732225877351714817, '详情', 1732224068700721153, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:safetyBooknew:query', '1', NULL, NULL, '超级管理员', '2023-12-06 10:30:36', '', NULL, '');
+INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1732225942820605954, '新增', 1732224068700721153, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:safetyBooknew:add', '1', NULL, NULL, '超级管理员', '2023-12-06 10:30:51', '', NULL, '');
+INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1732226010889965570, '删除', 1732224068700721153, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:safetyBooknew:remove', '1', NULL, NULL, '超级管理员', '2023-12-06 10:31:08', '', NULL, '');
+-- 添加新安全责任书字典
+DELETE FROM `sys_dict_type` WHERE `dict_type`='sign_level';
+INSERT INTO `sys_dict_type`( `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '签署层级', 'sign_level', '0', '省联社账号', '2023-12-06 14:37:33', '', NULL, NULL);
+DELETE FROM `sys_dict_data` WHERE `dict_type`='sign_level';
+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 ( 0, '总行(联社)与各职能部门、营业网点', '1', 'sign_level', NULL, 'default', 'N', '0', '省联社账号', '2023-12-06 14:39:30', '超级管理员', '2023-12-06 14:41: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 ( 0, '各职能部门、营业网点与各员工', '2', 'sign_level', NULL, 'default', 'N', '0', '省联社账号', '2023-12-06 14:40:09', '超级管理员', '2023-12-06 14:41:56', NULL);
+
 -- 修改菜单排序
 UPDATE `sys_menu` SET `order_num` = 2 WHERE `menu_name` = '驾驶舱';
 UPDATE `sys_menu` SET `order_num` = 4 WHERE `menu_name` = '日常履职';
@@ -233,4 +275,9 @@ delete from sys_menu where id=1731954732809224193 or parent_id=17319547328092241
 -- INSERT INTO `sys_menu`(`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('删除标签', 1731954732809224193, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'core:knowledge:remove', '1', '#', NULL, '何悦', '2023-08-21 15:56:03', '何悦', '2023-08-24 09:04:59', '');
 -- INSERT INTO `sys_menu`(`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1731954732809224193, '知识库标签管理', @eduParentId, 14, 'knowledge', 'core/knowledge/index', NULL, 1, 0, 'C', '0', '0', 'core:knowledge:list', '1', 'documentation', NULL, '何悦', '2023-08-21 15:49:29', '超级管理员', '2023-09-14 14:33:40', '');
 
+-- 修改安全责任书类型
+DELETE FROM `sys_dict_data` WHERE `dict_type`='safety_book_type';
+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 ( 1, '安全保卫责任书', '1', 'safety_book_type', NULL, 'default', 'N', '0', '超级管理员', '2023-10-11 14:37:00', '省联社账号', '2023-12-06 16:24:41', 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 ( 2, '联防协议书', '2', 'safety_book_type', NULL, 'default', 'N', '0', '超级管理员', '2023-10-11 14:37:07', '省联社账号', '2023-11-24 09:16:58', NULL);
+INSERT INTO `sys_dict_data`( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 3, '其他', '3', 'safety_book_type', NULL, 'default', 'N', '0', '超级管理员', '2023-10-11 14:37:13', '省联社账号', '2023-11-24 09:17:05', NULL);
 

+ 8 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteUserService.java

@@ -82,4 +82,12 @@ public interface RemoteUserService {
      */
     @GetMapping("/user/getroleinfoofuser")
     List<IdNameVo> getRoleInfoOfUser(@RequestParam("userId") Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    /**
+     * 检查用户的按钮权限
+     * @param menuIds
+     * @return
+     */
+    @PostMapping("/user/checkuserpermission")
+    List<Long> checkUserPermission(@RequestParam("menuIds") List<Long> menuIds,@RequestParam("userId") Long userId ,@RequestHeader(SecurityConstants.FROM_SOURCE)  String source);
 }

+ 11 - 9
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteUserFallbackFactory.java

@@ -14,6 +14,7 @@ import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -25,19 +26,15 @@ import java.util.List;
  * @author xunmei
  */
 @Component
-public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
-{
+public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService> {
     private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
 
     @Override
-    public RemoteUserService create(Throwable throwable)
-    {
+    public RemoteUserService create(Throwable throwable) {
         log.error("用户服务调用失败:{}", throwable.getMessage());
-        return new RemoteUserService()
-        {
+        return new RemoteUserService() {
             @Override
-            public R<LoginUser> getUserInfo(String username, String source)
-            {
+            public R<LoginUser> getUserInfo(String username, String source) {
                 return R.fail("获取用户失败:" + throwable.getMessage());
             }
 
@@ -77,7 +74,12 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
             }
 
             @Override
-            public  List<IdNameVo> getRoleInfoOfUser(@PathVariable Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source){
+            public List<IdNameVo> getRoleInfoOfUser(@PathVariable Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) {
+                return new ArrayList<>();
+            }
+
+            @Override
+            public List<Long> checkUserPermission(@RequestParam("menuIds") List<Long> menuIds,Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) {
                 return new ArrayList<>();
             }
         };

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

@@ -130,5 +130,7 @@ public class CoreOutInRecordVo{
 
     private Long letterOrgId;
 
+    private String pdfUrl;
+
 
 }

+ 3 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/panel/enums/PanelTypeEnums.java

@@ -18,7 +18,7 @@ public enum PanelTypeEnums {
     SAFETY_CHECK(2, "安全检查"),
 
     MONITORING_RETRIEVAL(3, "监控调阅"),
-OUT_EVALUATION(8,"外包评价"),
+
 
 
     DRILL(4, "预案演练"),
@@ -27,7 +27,8 @@ OUT_EVALUATION(8,"外包评价"),
 
     OTHER(6, "其他任务"),
     DRILL_REC(7, "推优评优"),
-
+    OUT_EVALUATION(8,"外包评价"),
+	QUESTION(9,"隐患管理")
 
     ;
 

+ 4 - 4
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/CoreMonitoringRetrievalTaskOneVo.java

@@ -43,28 +43,28 @@ public class CoreMonitoringRetrievalTaskOneVo {
     /**
      * 开始时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     @ApiModelProperty(value = "开始时间")
     private Date planStartTime;
 
     /**
      * 结束时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     @ApiModelProperty(value = "结束时间")
     private Date planEndTime;
 
     /**
      * 调阅开始时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     @ApiModelProperty(value = "调阅开始时间")
     private Date startTime;
 
     /**
      * 调阅结束时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     @ApiModelProperty(value = "调阅结束时间")
     private Date endTime;
 

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

@@ -976,8 +976,10 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
         List<PanelListVo> list = coreEduTrainingTaskMapper.selectCurUserTaskList(panelListDto);
         if (ObjectUtil.isEmpty(list)) {
+            log.info("未查询到代办-教育培训任务!");
             return new ArrayList<>();
         }
+       log.info("查询到教育培训代办数据:{}",JSON.toJSONString(list));
         //处理签名数据
         dealEduTrainingSign(list);
         list.removeIf(item -> DateUtil.date().before(item.getStartTime()) || DateUtil.date().after(item.getEndTime()));

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

@@ -112,6 +112,8 @@ public class CoreEvaluateTaskController extends BaseController {
     @GetMapping("/statistics")
     public AjaxResult statistics(EvaluateTaskStatisticsDTO evaluateTaskStatisticsDTO) {
         AjaxResult ajaxResult = AjaxResult.success();
+        SysOrg sysOrg = remoteOrgService.selectSysOrgById(evaluateTaskStatisticsDTO.getOrgId(), SecurityConstants.INNER);
+        ajaxResult.put("orgName", sysOrg.getShortName());
         if (null != evaluateTaskStatisticsDTO.getPlanId()) {
             CoreEvaluatePlanVO coreEvaluatePlanVO = coreEvaluatePlanService.selectCoreEvaluatePlanById(evaluateTaskStatisticsDTO.getPlanId());
             LocalDate localDate = LocalDate.now();
@@ -142,12 +144,10 @@ public class CoreEvaluateTaskController extends BaseController {
             } catch (Exception e) {
                 e.printStackTrace();
             }
-
             ajaxResult.put("tittle", coreEvaluatePlanVO.getEvaluateName() + "(" + dateTitle);
         }
         ajaxResult.put(AjaxResult.DATA_TAG, coreEvaluateTaskService.statistics(evaluateTaskStatisticsDTO));
-        SysOrg sysOrg = remoteOrgService.selectSysOrgById(evaluateTaskStatisticsDTO.getOrgId(), SecurityConstants.INNER);
-        ajaxResult.put("orgName", sysOrg.getShortName());
+
         return ajaxResult;
     }
 

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

@@ -135,6 +135,7 @@ public class CoreEvaluateTaskServiceImpl extends ServiceImpl<CoreEvaluateTaskMap
         }
         List<SysOrg> sysOrgs = remoteOrgService.selectSysOrgByParentId(evaluateTaskStatisticsDTO.getOrgId(), SecurityConstants.INNER);
         List<EvaluateTaskExportVO> list = new ArrayList<>();
+        Double all = 0d;
         for (int i = 0; i < sysOrgs.size(); i++) {
             EvaluateTaskExportVO evaluateTaskExportVO = new EvaluateTaskExportVO();
             evaluateTaskExportVO.setOrderNum(i + 1);
@@ -143,7 +144,7 @@ public class CoreEvaluateTaskServiceImpl extends ServiceImpl<CoreEvaluateTaskMap
             LinkedHashMap linkedHashMap = baseMapper.statisticsAll(evaluateTaskStatisticsDTO);
             if (null == linkedHashMap) {
                 evaluateTaskExportVO.setEvaluatedOrgName("");
-                evaluateTaskExportVO.setScore(0);
+                evaluateTaskExportVO.setScore(0d);
             } else {
                 evaluateTaskExportVO.setEvaluatedOrgName(linkedHashMap.get("被评价机构名称").toString());
             }
@@ -151,16 +152,22 @@ public class CoreEvaluateTaskServiceImpl extends ServiceImpl<CoreEvaluateTaskMap
                 Object id = linkedHashMap.get("id");
                 List<Map> contentByTaskId = baseMapper.getContentByTaskId((Long) id, evaluateTaskStatisticsDTO.getStartTime(), evaluateTaskStatisticsDTO.getEndTime());
                 if (CollectionUtils.isNotEmpty(contentByTaskId)) {
-                    int total = 0;
+                    double total = 0;
                     for (int l = 0; l < contentByTaskId.size(); l++) {
                         Double score = Double.valueOf(contentByTaskId.get(l).get("score").toString());
                         total += score;
                     }
                     evaluateTaskExportVO.setScore(total);
+                    all += total;
                 }
             }
             list.add(evaluateTaskExportVO);
+
         }
+        EvaluateTaskExportVO evaluateTaskExportVO = new EvaluateTaskExportVO();
+        evaluateTaskExportVO.setOrgName("平均得分");
+        evaluateTaskExportVO.setScore((double) all / list.size());
+        list.add(evaluateTaskExportVO);
         if (ObjectUtil.isEmpty(list)) {
             throw new RuntimeException("导出数据为空!");
         }

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/evaluate/vo/EvaluateTaskExportVO.java

@@ -16,5 +16,5 @@ public class EvaluateTaskExportVO {
     @ExcelProperty("被评价机构名称")
     private String evaluatedOrgName;
     @ExcelProperty("评价得分")
-    private Integer score;
+    private Double score;
 }

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

@@ -14,6 +14,7 @@ import com.xunmei.core.drill.service.ICoreDrillTaskService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.evaluate.service.ICoreEvaluateTaskService;
 import com.xunmei.core.panel.service.PanelService;
+import com.xunmei.core.question.service.IQuestionService;
 import com.xunmei.core.resumption.service.IProtectionService;
 import com.xunmei.core.resumption.service.ResumptionService;
 import com.xunmei.core.retrieval.service.ICoreMonitoringRetrievalTaskService;
@@ -54,6 +55,9 @@ public class PanelServiceImpl implements PanelService {
     private ICoreEduTrainingTaskService eduTrainingTaskService;
 
     @Autowired
+    private IQuestionService questionService;
+
+    @Autowired
     private RemoteRoleService roleService;
     @Autowired
     private IProtectionService protectionService;
@@ -88,9 +92,9 @@ public class PanelServiceImpl implements PanelService {
                 coreMonitoringRetrievalTaskService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
         );
         //外包评价
-        CompletableFuture<List<PanelListVo>> evaluateTaskFuture=CompletableFuture.supplyAsync(()->
-                        iCoreEvaluateTaskService.selectCurUserTaskList(panelListDto),threadPoolTaskExecutor
-                );
+        CompletableFuture<List<PanelListVo>> evaluateTaskFuture = CompletableFuture.supplyAsync(() ->
+                iCoreEvaluateTaskService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
+        );
         //安全检查任务
         CompletableFuture<List<PanelListVo>> safetyTaskFuture = CompletableFuture.supplyAsync(() ->
                 safetyTaskService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
@@ -111,16 +115,21 @@ public class PanelServiceImpl implements PanelService {
                 eduTrainingTaskService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
         );
 
+        //隐患管理
+        CompletableFuture<List<PanelListVo>> questionTaskFuture = CompletableFuture.supplyAsync(() ->
+                questionService.selectCurUserTaskList(panelListDto), threadPoolTaskExecutor
+        );
         CompletableFuture<Void> allQueries = CompletableFuture.allOf(
-                resumptionTaskFuture, protectionTaskFuture, monitorTaskFuture,evaluateTaskFuture,
+                resumptionTaskFuture, protectionTaskFuture, monitorTaskFuture, evaluateTaskFuture,
                 safetyTaskFuture, drillTaskFuture, eduTrainingTaskFuture, recLitFuture
         );
 
         allQueries.get(TIMEOUT, TimeUnit.SECONDS);
 
         List<PanelListVo> resultList = Stream.of(
-                        resumptionTaskFuture.join(), protectionTaskFuture.join(), monitorTaskFuture.join(),evaluateTaskFuture.join(),
-                        safetyTaskFuture.join(), drillTaskFuture.join(), eduTrainingTaskFuture.join(), recLitFuture.join()
+                        resumptionTaskFuture.join(), protectionTaskFuture.join(), monitorTaskFuture.join(), evaluateTaskFuture.join(),
+                        safetyTaskFuture.join(), drillTaskFuture.join(), eduTrainingTaskFuture.join(), recLitFuture.join(),
+                        questionTaskFuture.join()
                 )
                 .flatMap(Collection::stream)
                 .collect(Collectors.toList());
@@ -129,7 +138,7 @@ public class PanelServiceImpl implements PanelService {
                 .sorted(Comparator.comparing(PanelListVo::getType))
                 .collect(Collectors.groupingBy(PanelListVo::getType));
         List<PanelResultVo> list = new ArrayList<PanelResultVo>();
-        for(Map.Entry<Integer, List<PanelListVo>> map:listMap.entrySet()){
+        for (Map.Entry<Integer, List<PanelListVo>> map : listMap.entrySet()) {
             PanelResultVo vo = new PanelResultVo();
             vo.setTaskType(map.getKey());
             List<PanelListVo> data = map.getValue();

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/controller/QuestionController.java

@@ -110,4 +110,6 @@ public class QuestionController extends BaseController {
     public void export(QuestionPageDto pageDto, HttpServletResponse response) throws Exception {
         questionService.export(pageDto, response);
     }
+
+
 }

+ 9 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/IQuestionService.java

@@ -1,6 +1,8 @@
 package com.xunmei.core.question.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.panel.dto.PanelListDto;
+import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.core.question.domain.Question;
 import com.xunmei.core.question.dto.QuestionConfirmDto;
@@ -57,4 +59,11 @@ public interface IQuestionService extends IService<Question> {
     void selectQuestionExceptionData(Date startTime,Date endTime,List<Long> orgIds);
 
     void export(QuestionPageDto pageDto, HttpServletResponse response) throws Exception;
+
+    /**
+     * 当前用户的工作台
+     * @param panelListDto
+     * @return
+     */
+    List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto);
 }

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

@@ -9,6 +9,9 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.SecurityConstants;
+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;
 import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.common.core.web.page.TableDataInfo;
@@ -31,6 +34,7 @@ import com.xunmei.core.resumption.service.IAppResumptionDataRemarkimgService;
 import com.xunmei.core.safetyCheck.domain.CoreSafetyTaskDataRemarkimg;
 import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskDataRemarkimgService;
 import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.RemoteUserService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -38,6 +42,8 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -56,6 +62,9 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     private RemoteOrgService orgService;
 
     @Autowired
+    RemoteUserService remoteUserService;
+
+    @Autowired
     private IAppResumptionDataRemarkimgService appResumptionDataRemarkimgService;
 
     @Autowired
@@ -297,4 +306,60 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         // 调用EasyExcel的导出方法
         EasyExcel.write(response.getOutputStream(), QuestionExportDto.class).sheet("Sheet1").doWrite(list);
     }
+
+    /**
+     * 当前用户的工作台。有所属机构+有整改权限的待整改、所属机构+有确认权限的待确认、异议提出人+异议状态的异议审批
+     * @param panelListDto
+     * @return
+     */
+    @Override
+    public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto){
+        LambdaQueryWrapper<Question> wrapper=new LambdaQueryWrapper<>();
+        Long confirmButton=2353L;
+        Long dissentButton=2354L;
+        Long reformButton=2355L;
+        List<Long> ownPermission= remoteUserService.checkUserPermission(Arrays.asList(confirmButton,dissentButton,reformButton)
+                ,SecurityUtils.getUserId(),SecurityConstants.INNER);
+        if(ownPermission.contains(reformButton)){
+            wrapper.or(w->w.eq(Question::getOrgId,panelListDto.getOrgId()).eq(Question::getReformStatus,QuestionReformEnum.Unreform.getValue()));
+        }
+
+        if(ownPermission.contains(confirmButton)){
+            wrapper.or(w->w.eq(Question::getOrgId,panelListDto.getOrgId()).eq(Question::getConfirmStatus,QuestionConfirmEnum.Unconfirm.getValue()));
+        }
+
+        if(ownPermission.contains(dissentButton)){
+            wrapper.or(w->w.eq(Question::getSubmitorId,SecurityUtils.getUserId()).eq(Question::getConfirmStatus,QuestionConfirmEnum.Dissent.getValue()));
+        }
+
+        if(wrapper.isEmptyOfWhere()){
+            return  new ArrayList<>();
+        }else{
+            wrapper.select(Question::getId,
+                    Question::getQuestionDesc,
+                    Question::getOrgId,
+                    Question::getConfirmStatus,
+                    Question::getReformStatus,
+                    Question::getSubmitTime,
+                    Question::getReformDeadline);
+            List<Question> list= baseMapper.selectList(wrapper);
+            List<PanelListVo> vos=list.stream().map(item->{
+                PanelListVo vo=new PanelListVo();
+                vo.setId(item.getId());
+                vo.setEndTime(item.getReformDeadline());
+                vo.setTaskName(item.getQuestionDesc());
+                vo.setStartTime(item.getSubmitTime());
+                vo.setType(PanelTypeEnums.QUESTION.getCode());
+                if(ObjectUtil.isNull(item.getReformStatus())){
+                    vo.setStatus(item.getConfirmStatus());
+                }else{
+                    vo.setStatus(item.getReformStatus());
+                }
+
+                return  vo;
+            }).collect(Collectors.toList());
+
+            return  vos;
+        }
+    }
 }

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/monitor/vo/MonitoringAccessVO.java

@@ -36,7 +36,7 @@ public class MonitoringAccessVO {
     @ExcelProperty("调阅次数")
     @ApiModelProperty(value = "实际调阅次数")
     private Integer realityAccessNumber;
-    @ExcelProperty("平均调阅时长")
+    @ExcelProperty("平均调阅时长(小时)")
     @ApiModelProperty(value = "平均调阅时长(小时)")
     private String duration;
     @ExcelProperty("完成率")

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/controller/SafetyInspectReportController.java

@@ -9,6 +9,7 @@ import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.reportForms.safetyInspect.dto.SafetyInspectDTO;
 import com.xunmei.core.reportForms.safetyInspect.service.SafetyInspectService;
 import com.xunmei.core.reportForms.safetyInspect.vo.SafetyInspectVO;
+import com.xunmei.core.reportForms.safetyInspect.vo.SelfInspectVO;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import io.swagger.annotations.Api;
@@ -65,7 +66,7 @@ public class SafetyInspectReportController {
          LocalDate localDate= LocalDate.now();
          safetyInspectDTO.setYear(localDate.getYear()+"-"+  localDate.getMonthValue());
      }
-        List<SafetyInspectVO> report = safetyInspectService.selfInspectReport(safetyInspectDTO);
+        List<SelfInspectVO> report = safetyInspectService.selfInspectReport(safetyInspectDTO);
         ajax.put(AjaxResult.DATA_TAG, report);
         if (null == safetyInspectDTO.getOrgId()) {
             safetyInspectDTO.setOrgId(SecurityUtils.getLoginUser().getOrgId());

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/service/SafetyInspectService.java

@@ -5,6 +5,7 @@ import com.xunmei.core.reportForms.monitor.dto.MonitoringAccessDTO;
 import com.xunmei.core.reportForms.monitor.vo.MonitoringAccessVO;
 import com.xunmei.core.reportForms.safetyInspect.dto.SafetyInspectDTO;
 import com.xunmei.core.reportForms.safetyInspect.vo.SafetyInspectVO;
+import com.xunmei.core.reportForms.safetyInspect.vo.SelfInspectVO;
 import com.xunmei.system.api.domain.SysOrg;
 
 import javax.servlet.http.HttpServletResponse;
@@ -24,7 +25,7 @@ public interface SafetyInspectService {
      * @param safetyInspectDTO
      * @return
      */
-    List<SafetyInspectVO> selfInspectReport(SafetyInspectDTO safetyInspectDTO);
+    List<SelfInspectVO> selfInspectReport(SafetyInspectDTO safetyInspectDTO);
 
     void export(SafetyInspectDTO safetyInspectDTO, HttpServletResponse response) throws IOException;
 

+ 7 - 6
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/service/impl/SafetyInspectServiceImpl.java

@@ -12,6 +12,7 @@ import com.xunmei.core.reportForms.safetyInspect.dto.SafetyInspectDTO;
 import com.xunmei.core.reportForms.safetyInspect.mapper.SafetyInspectMapper;
 import com.xunmei.core.reportForms.safetyInspect.service.SafetyInspectService;
 import com.xunmei.core.reportForms.safetyInspect.vo.SafetyInspectVO;
+import com.xunmei.core.reportForms.safetyInspect.vo.SelfInspectVO;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -91,7 +92,7 @@ public class SafetyInspectServiceImpl implements SafetyInspectService {
     }
 
     @Override
-    public List<SafetyInspectVO> selfInspectReport(SafetyInspectDTO safetyInspectDTO) {
+    public List<SelfInspectVO> selfInspectReport(SafetyInspectDTO safetyInspectDTO) {
         if (null == safetyInspectDTO.getOrgId()) {
             safetyInspectDTO.setOrgId(SecurityUtils.getLoginUser().getOrgId());
         }
@@ -105,9 +106,9 @@ public class SafetyInspectServiceImpl implements SafetyInspectService {
         } else {
             return Collections.emptyList();
         }
-        List<SafetyInspectVO>safetyInspectVOList=new ArrayList<>();
+        List<SelfInspectVO>safetyInspectVOList=new ArrayList<>();
         sysOrgs.forEach(s->{
-            SafetyInspectVO safetyInspectVO=new SafetyInspectVO();
+            SelfInspectVO safetyInspectVO=new SelfInspectVO();
             SysOrg sysOrg1;
             if (sysOrg.getType() < 3 || sysOrg.getShortName().endsWith("地区行社") || sysOrg.getType() == 9) {
                 sysOrg1 = orgService.selectOrgById(s.getParentId(), SecurityConstants.INNER);
@@ -125,7 +126,7 @@ public class SafetyInspectServiceImpl implements SafetyInspectService {
             SafetyInspectVO safetyInspectVOS = safetyInspectMapper.selectSelfByPath(safetyInspectDTO.getCycle(),s.getPath(),safetyInspectDTO.getYear(),safetyInspectDTO.getOrgType());
             //机构维度
             Map map = safetyInspectMapper.orgDimension(s.getPath(), safetyInspectDTO.getYear(), safetyInspectDTO.getOrgType(),3);
-            safetyInspectVO.setPlanInspectOrg(Integer.valueOf(map.get("planInspectOrg").toString()));
+          //  safetyInspectVO.setPlanInspectOrg(Integer.valueOf(map.get("planInspectOrg").toString()));
             safetyInspectVO.setRealityInspectOrg(Integer.valueOf(map.get("realityInspectOrg").toString()));
             safetyInspectVO.setInspectCoverRate(map.get("inspectCoverRate").toString());
             safetyInspectVO.setOrgName(s.getShortName());
@@ -184,12 +185,12 @@ public class SafetyInspectServiceImpl implements SafetyInspectService {
             sysOrg = remoteOrgService.selectSysOrgById(safetyInspectDTO.getOrgId(), SecurityConstants.INNER);
         }
         orgName = sysOrg.getName();
-        List<SafetyInspectVO> safetyInspectVOS =  this.selfInspectReport(safetyInspectDTO);
+        List<SelfInspectVO> safetyInspectVOS =  this.selfInspectReport(safetyInspectDTO);
         if (ObjectUtil.isEmpty(safetyInspectVOS)) {
             throw new RuntimeException("导出数据为空!");
         }
         for (int i = 0; i < safetyInspectVOS.size(); i++) {
-            SafetyInspectVO safetyInspectVO = safetyInspectVOS.get(i);
+            SelfInspectVO safetyInspectVO = safetyInspectVOS.get(i);
             safetyInspectVO.setOrderNum(i + 1);
         }
         if (safetyInspectVOS.size() > 10000) {

+ 3 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/vo/SafetyInspectVO.java

@@ -19,13 +19,13 @@ public class SafetyInspectVO {
     @ExcelProperty("单位名称")
     @ApiModelProperty(value = "单位名称")
     private String orgName;
-    @ExcelProperty("网点数量")
+    @ExcelProperty("被查机构数量")
     @ApiModelProperty(value = "网点数量")
     private Integer planInspectOrg;
-    @ExcelIgnore
+    @ExcelProperty("已查机构数量")
     @ApiModelProperty(value = "已查机构数量")
     private Integer realityInspectOrg;
-    @ExcelIgnore
+    @ExcelProperty("检查覆盖率")
     @ApiModelProperty(value = "检查覆盖率")
     private String inspectCoverRate;
 

+ 53 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/vo/SelfInspectVO.java

@@ -0,0 +1,53 @@
+package com.xunmei.core.reportForms.safetyInspect.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author :LuoWei
+ * @date : 2023/12/5
+ */
+@Data
+public class SelfInspectVO {
+    @ExcelProperty("序号")
+    private Integer orderNum;
+    @ExcelProperty("地区")
+    private String city;
+    @ExcelProperty("单位名称")
+    @ApiModelProperty(value = "单位名称")
+    private String orgName;
+    @ExcelProperty("网点数量")
+    @ApiModelProperty(value = "网点数量")
+    private Integer planInspectOrg;
+    @ExcelIgnore
+    @ApiModelProperty(value = "已查机构数量")
+    private Integer realityInspectOrg;
+    @ExcelIgnore
+    @ApiModelProperty(value = "检查覆盖率")
+    private String inspectCoverRate;
+
+
+    @ExcelProperty("应检次数")
+    @ApiModelProperty(value = "应检查次数")
+    private Integer planInspectNumber;
+    @ExcelProperty("已检次数")
+    @ApiModelProperty(value = "实际检查次数")
+    private Integer realityInspectNumber;
+    @ExcelProperty("检查完成率")
+    @ApiModelProperty(value = "检查率")
+    private String inspectRate;
+    @ExcelProperty("隐患数量")
+    @ApiModelProperty(value = "隐患数量")
+    private Integer pitfallNumber;
+    @ExcelProperty("已整改数量")
+    @ApiModelProperty(value = "已整改数量")
+    private Integer rectificationNumber;
+    @ExcelProperty("整改完成率")
+    @ApiModelProperty(value = "整改完成率")
+    private String rectificationRate;
+    @ExcelIgnore
+    @ExcelProperty("机构路径")
+    private String path;
+}

+ 38 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionDelServiceImpl.java

@@ -0,0 +1,38 @@
+package com.xunmei.core.resumption.gx.service;
+
+import com.xunmei.core.resumption.mapper.AppResumptionDataMapper;
+import com.xunmei.core.resumption.mapper.AppResumptionDataNfcMapper;
+import com.xunmei.core.resumption.mapper.AppResumptionDataRemarkimgMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author gaoxiong
+ * @Title:
+ * @Package
+ * @Description:
+ * @date 2023/12/618:38
+ */
+@Service
+public class ResumptionDelServiceImpl {
+
+    @Autowired
+    private AppResumptionDataMapper appResumptionDataMapper;
+
+    @Autowired
+    private AppResumptionDataNfcMapper appResumptionDataNfcMapper;
+
+    @Autowired
+    private AppResumptionDataRemarkimgMapper appResumptionDataRemarkimgMapper;
+
+
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
+    public void delResumptionData(Long taskId){
+        //删除之前的数据
+        appResumptionDataMapper.deleteByResumptionId(taskId);
+        appResumptionDataNfcMapper.deleteByResumptionId(taskId);
+        appResumptionDataRemarkimgMapper.deleteByResumptionId(taskId);
+    }
+}

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

@@ -7,10 +7,14 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.question.QuestionConfirmEnum;
+import com.xunmei.core.question.QuestionReformEnum;
 import com.xunmei.core.question.QuestionSrcType;
 import com.xunmei.core.question.domain.Question;
 import com.xunmei.core.question.service.IQuestionService;
@@ -26,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.TransactionManager;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronization;
 import org.springframework.transaction.support.TransactionSynchronizationAdapter;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 import sun.nio.ch.ThreadPool;
@@ -61,6 +66,9 @@ public class ResumptionServiceImpl implements ResumptionService {
     @Autowired
     private AppPlanService appPlanService;
 
+    @Autowired
+    private ResumptionDelServiceImpl resumptionDelService;
+
 
     @Override
     public ResumptionTaskDetailVo getTask(ResumptionTaskDetailVo taskDetailVo) throws Exception {
@@ -85,10 +93,10 @@ public class ResumptionServiceImpl implements ResumptionService {
         //履职状态:1 待履职,2 进行中,3 已完成,4 已过期
         Resumption resumption = resumptionMapper.findOneByTaskIdAndDate(taskDetailVo.getTaskId(), year, quarter);
         Integer status = resumption.getStatus();
-        if(status == 1){
+        if (status == 1) {
             //增加待履职不能在未开始时打开逻辑
             Date start = resumption.getPlanStartTime();
-            if(start.after(new Date())){
+            if (start.after(new Date())) {
                 throw new RuntimeException("任务未到开始时间!");
             }
 
@@ -126,6 +134,9 @@ public class ResumptionServiceImpl implements ResumptionService {
         int quarter = dateTime.getQuarter();
         //获取履职任务
         Resumption sysResumption = resumptionMapper.findOneByTaskIdAndDate(taskId, year, quarter);
+        if (sysResumption == null) {
+            throw new RuntimeException("任务数据不存在!");
+        }
         AppPlan appPlan = appPlanMapper.selectById(sysResumption.getPlanId());
         sysResumption.setUpdateBy(SecurityUtils.getUsername());
         sysResumption.setSubmitorId(SecurityUtils.getUserId());
@@ -141,19 +152,23 @@ public class ResumptionServiceImpl implements ResumptionService {
             sysResumption.setStatus(3);
         }
 
-        //删除之前的数据
-        appResumptionDataMapper.deleteByResumptionId(taskId);
-        appResumptionDataNfcMapper.deleteByResumptionId(taskId);
-        appResumptionDataRemarkimgMapper.deleteByResumptionId(taskId);
+        resumptionDelService.delResumptionData(taskId);
+
+
 
         //保存新的数据
         AppResumptionData data = null;
         List<ResumptionItemVo> checks = taskDetailVo.getChecks();
         Integer exceptionCount = 0;
+        List<AppResumptionData> ards = new ArrayList<>();
+        List<Question> questions = new ArrayList<>();
+        List<AppResumptionDataRemarkimg> adImgs = new ArrayList<>();
+        List<AppResumptionDataNfc> dataNfcs = new ArrayList<>();
         for (ResumptionItemVo check : checks) {
             List<ResumptionPointVo> points = check.getPoints();
             for (ResumptionPointVo point : points) {
                 data = new AppResumptionData();
+                Long pointId = IdWorker.getId(data);
                 data.setDataStatus(point.getDataStatus());
                 data.setResumptionId(taskId);
                 data.setAreaId(check.getAreaId());
@@ -174,10 +189,11 @@ public class ResumptionServiceImpl implements ResumptionService {
                         data.setDataStatus(2);
                     }
                 }
-                appResumptionDataMapper.insert(data);
+                //appResumptionDataMapper.insert(data);
+                ards.add(data);
 
                 if (taskDetailVo.getSubType() == 2 && ObjectUtil.equal(point.getResValue(), 1)) {
-                    if(ObjectUtil.isNull(point.getRectificationDeadline()) || !NumberUtil.isNumber(point.getRectificationDeadline())){
+                    if (ObjectUtil.isNull(point.getRectificationDeadline()) || !NumberUtil.isNumber(point.getRectificationDeadline())) {
                         throw new ServiceException("整改期限为空或不是有效的数值");
                     }
                     SysOrg org = remoteOrgService.selectSysOrgById(sysResumption.getOrgId(), SecurityConstants.INNER);
@@ -187,7 +203,7 @@ public class ResumptionServiceImpl implements ResumptionService {
                             .orgName(org.getShortName())
                             .orgPath(org.getPath())
                             .SrcPointId(point.getPointId())
-                            .srcDataPointId(data.getId())
+                            .srcDataPointId(pointId)
                             .srcType(QuestionSrcType.Resumption.getValue())
                             .srcTaskType(appPlan.getPlanType())
                             .srcTaskName(sysResumption.getName())
@@ -199,7 +215,15 @@ public class ResumptionServiceImpl implements ResumptionService {
                             .submitTime(ObjectUtil.isNull(data.getSubmitTime()) ? new Date() : data.getSubmitTime())
                             .reformDeadline(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), Integer.parseInt(point.getRectificationDeadline()))))
                             .build();
-
+                    IdWorker.getId(question);
+                    if (ObjectUtil.equal(question.getOrgId(),SecurityUtils.getLoginUser().getOrgId())) {
+                        question.setConfirmStatus(QuestionConfirmEnum.Confirmed.getValue());
+                        question.setReformStatus(QuestionReformEnum.Unreform.getValue());
+                    } else {
+                        question.setConfirmStatus(QuestionConfirmEnum.Unconfirm.getValue());
+                        question.setReformStatus(null);
+                    }
+                    questions.add(question);
                     questionService.insertQuestion(question);
                 }
 
@@ -208,10 +232,12 @@ public class ResumptionServiceImpl implements ResumptionService {
                 }
                 List<AppResumptionDataRemarkimg> imgs = point.getImgs();
                 for (AppResumptionDataRemarkimg img : imgs) {
-                    img.setResumptionDataId(data.getId());
+                    img.setResumptionDataId(pointId);
                     img.setResumptionId(taskId);
-                    appResumptionDataRemarkimgMapper.insert(img);
+                    IdWorker.getId(img);
+                    //appResumptionDataRemarkimgMapper.insert(img);
                 }
+                adImgs.addAll(imgs);
             }
         }
         sysResumption.setExceptionCount(exceptionCount);
@@ -231,19 +257,43 @@ public class ResumptionServiceImpl implements ResumptionService {
             dataNfc.setStatus(nfc.getStatus());
             dataNfc.setSubmitTime(ObjectUtil.isNull(nfc.getSubmitTime()) ? new Date() : nfc.getSubmitTime());
             dataNfc.setSubmitBy(nfc.getSubmitBy());
-            appResumptionDataNfcMapper.insert(dataNfc);
+            IdWorker.getId(dataNfc);
+            dataNfcs.add(dataNfc);
+            //appResumptionDataNfcMapper.insert(dataNfc);
         }
 
+        /**
+         * 批量修改数据
+         */
+
+        //1.批量插入 履职数据。
+        if(ards.size() > 0){
+            resumptionMapper.batchInsertResumptionData(ards);
+        }
+        //2.批量插入 问题数据。
+        if(questions.size() > 0){
+            resumptionMapper.batchInsertResumptionQuestion(questions);
+        }
+        //3.批量插入 图片数据。
+        if(adImgs.size() > 0){
+            resumptionMapper.batchInsertResumptionImg(adImgs);
+        }
+        //3.批量插入 扫描数据。
+        if(dataNfcs.size() > 0){
+            resumptionMapper.batchInsertResumptionNfc(dataNfcs);
+        }
+
+
         resumptionMapper.updateById(sysResumption);
         if (ObjectUtil.equal(taskDetailVo.getSubType(), 2)) {
-//            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
-//                @Override
-//                public void afterCommit() {
-            appPlanService.updatePlanCompletedState(sysResumption.getPlanId(), 1);
-//                }
-//            });
-
+            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+                @Override
+                public void afterCommit() {
+                    appPlanService.updatePlanCompletedState(sysResumption.getPlanId(), 1);
+                }
+            });
         }
+
     }
 
     /**

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

@@ -5,6 +5,10 @@ import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.domain.safetyindex.domain.CoreSafetyExceptionData;
 import com.xunmei.common.core.domain.safetyindex.dto.CoreSafetyIndexReCalculateDto;
+import com.xunmei.core.question.domain.Question;
+import com.xunmei.core.resumption.domain.AppResumptionData;
+import com.xunmei.core.resumption.domain.AppResumptionDataNfc;
+import com.xunmei.core.resumption.domain.AppResumptionDataRemarkimg;
 import com.xunmei.core.resumption.domain.Resumption;
 import com.xunmei.core.resumption.gx.vo.ResumptionNFCVo;
 import com.xunmei.core.resumption.gx.vo.ResumptionPlanVo;
@@ -14,6 +18,7 @@ import com.xunmei.core.resumption.vo.WorkChangeResumptionVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -88,4 +93,12 @@ public interface ResumptionMapper extends BaseMapper<Resumption> {
 
 
     List<Resumption> selectByYmdDateAndExec(@Param("date") Date date, @Param("exec") Integer exec, @Param("orgId") Long orgId);
+
+    void batchInsertResumptionData(@Param("list") List<AppResumptionData> list);
+
+    void batchInsertResumptionQuestion(@Param("list") List<Question> list);
+
+    void batchInsertResumptionImg(@Param("list") List<AppResumptionDataRemarkimg> list);
+
+    void batchInsertResumptionNfc(@Param("list") List<AppResumptionDataNfc> list);
 }

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

@@ -689,8 +689,9 @@ public class SafetyCheckRegisterSericeImpl extends ServiceImpl<CoreSafetyTaskMap
 
 //        if (ObjectUtil.isNull(task.getGrantUserId())) {
             Long canGrantCount = tasks.stream()
-                    .filter(t -> !ObjectUtil.equal(t.getStatus(), SafetyCheckTaskStatus.Completed.getValue()) &&
-                            ObjectUtil.notEqual(t.getStatus(),SafetyCheckTaskStatus.OverDue.getValue()))
+                    .filter(t -> ObjectUtil.notEqual(t.getStatus(), SafetyCheckTaskStatus.Completed.getValue()) &&
+                            ObjectUtil.notEqual(t.getStatus(),SafetyCheckTaskStatus.OverDue.getValue()) &&
+                            (ObjectUtil.isNull(t.getGrantUserId()) || ObjectUtil.equal(t.getId(),dto.getTaskId())))
                     .count();
             Long selfCompletedCount = tasks.stream()
                     .filter(t -> ObjectUtil.equal(t.getStatus(), SafetyCheckTaskStatus.Completed.getValue()) && ObjectUtil.isNull(t.getGrantUserId()))

+ 85 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/controller/CoreSafetyBookNewController.java

@@ -0,0 +1,85 @@
+package com.xunmei.core.safetybook.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.xunmei.common.log.annotation.Log;
+import com.xunmei.common.log.enums.BusinessType;
+import com.xunmei.common.security.annotation.RequiresPermissions;
+import com.xunmei.core.safetybook.domain.CoreSafetyBookNew;
+import com.xunmei.core.safetybook.service.ICoreSafetyBookNewService;
+import com.xunmei.common.core.web.controller.BaseController;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.web.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author xunmei
+ * @date 2023-12-06
+ */
+@Api(tags = {"CoreSafetyBookNew"})
+@RestController
+@RequestMapping("/safetyBooknew")
+public class CoreSafetyBookNewController extends BaseController {
+    @Autowired
+    private ICoreSafetyBookNewService coreSafetyBookNewService;
+
+    /**
+     * 查询【请填写功能名称】列表
+     */
+    @ApiOperation(value = "查询CoreSafetyBookNew列表")
+    @RequiresPermissions("core:safetyBooknew:list")
+    @PostMapping("/list")
+    public TableDataInfo<CoreSafetyBookNew> list(@RequestBody CoreSafetyBookNew coreSafetyBookNew) {
+
+        return coreSafetyBookNewService.selectPage(coreSafetyBookNew);
+    }
+
+
+    /**
+     * 获取【请填写功能名称】详细信息
+     */
+    @ApiOperation(value = "获取CoreSafetyBookNew详细信息")
+    @RequiresPermissions("core:safetyBooknew:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(coreSafetyBookNewService.selectCoreSafetyBookNewById(id));
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     */
+    @ApiOperation(value = "新增CoreSafetyBookNew")
+    @RequiresPermissions("core:safetyBooknew:add")
+    @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+    @PostMapping("/editOrAdd")
+    public AjaxResult editOrAdd(@RequestBody CoreSafetyBookNew coreSafetyBookNew) {
+        return toAjax(coreSafetyBookNewService.insertCoreSafetyBookNew(coreSafetyBookNew));
+    }
+
+
+    /**
+     * 删除【请填写功能名称】
+     */
+    @ApiOperation(value = "删除CoreSafetyBookNew")
+    @RequiresPermissions("core:safetyBooknew:remove")
+    @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(coreSafetyBookNewService.deleteCoreSafetyBookNewByIds(ids));
+    }
+}

+ 149 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/domain/CoreSafetyBookNew.java

@@ -0,0 +1,149 @@
+package com.xunmei.core.safetybook.domain;
+
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.xunmei.common.core.web.domain.BaseEntity;
+
+/**
+ * 【请填写功能名称】对象 core_safety_book_new
+ *
+ * @author xunmei
+ * @date 2023-12-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("core_safety_book_new")
+@ApiModel(value = "CoreSafetyBookNew对象", description = "【请填写功能名称】")
+public class CoreSafetyBookNew extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 所属年份
+     */
+    @ApiModelProperty(value = "所属年份")
+    private Long year;
+
+    /**
+     * 是否删除
+     */
+    @ApiModelProperty(value = "是否删除")
+    private Long deleted;
+
+    /**
+     * 签署责任书类型
+     */
+    @ApiModelProperty(value = "签署责任书类型")
+    private Long type;
+
+    /**
+     * 签署时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "签署时间")
+    private Date time;
+
+    /**
+     * 签署文件
+     */
+    @ApiModelProperty(value = "签署文件")
+    @TableField(exist = false)
+    private List<CoreSafetyBookBookFilesVo> files;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Integer signLevel;
+
+    /**
+     * 甲方
+     */
+    @ApiModelProperty(value = "甲方")
+    private String partyA;
+
+    /**
+     * 乙方
+     */
+    @ApiModelProperty(value = "乙方")
+    private String partyB;
+
+    /**
+     * 甲方机构
+     */
+    @ApiModelProperty(value = "甲方机构")
+    private String partyAOrg;
+
+    /**
+     * 乙方机构
+     */
+    @ApiModelProperty(value = "乙方机构")
+    private Long partyBOrg;
+    @TableField(exist = false)
+    private String partyBOrgName;
+    @TableField(exist = false)
+    private String selectOrgPath;
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+
+
+                .append("id", getId())
+
+
+                .append("year", getYear())
+
+
+                .append("createBy", getCreateBy())
+
+
+                .append("createTime", getCreateTime())
+
+
+                .append("updateBy", getUpdateBy())
+
+
+                .append("updateTime", getUpdateTime())
+
+
+                .append("deleted", getDeleted())
+
+
+                .append("type", getType())
+
+
+                .append("time", getTime())
+
+
+                .append("files", getFiles())
+
+
+                .append("partyA", getPartyA())
+
+
+                .append("partyB", getPartyB())
+
+
+                .append("partyAOrg", getPartyAOrg())
+
+
+                .append("partyBOrg", getPartyBOrg())
+                .toString();
+    }
+}

+ 68 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/mapper/CoreSafetyBookNewMapper.java

@@ -0,0 +1,68 @@
+package com.xunmei.core.safetybook.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.core.safetybook.domain.CoreSafetyBookNew;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author xunmei
+ * @date 2023-12-06
+ */
+public interface CoreSafetyBookNewMapper extends BaseMapper<CoreSafetyBookNew> {
+    /**
+     * 查询【请填写功能名称】
+     *
+     * @param id 【请填写功能名称】主键
+     * @return 【请填写功能名称】
+     */
+    CoreSafetyBookNew selectCoreSafetyBookNewById(Long id);
+
+    /**
+     * 查询【请填写功能名称】列表
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    List<CoreSafetyBookNew> selectCoreSafetyBookNewList(CoreSafetyBookNew coreSafetyBookNew);
+
+    /**
+     * 新增【请填写功能名称】
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 结果
+     */
+    int insertCoreSafetyBookNew(CoreSafetyBookNew coreSafetyBookNew);
+
+    /**
+     * 修改【请填写功能名称】
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 结果
+     */
+    int updateCoreSafetyBookNew(CoreSafetyBookNew coreSafetyBookNew);
+
+    /**
+     * 删除【请填写功能名称】
+     *
+     * @param id 【请填写功能名称】主键
+     * @return 结果
+     */
+    int deleteCoreSafetyBookNewById(Long id);
+
+    /**
+     * 批量删除【请填写功能名称】
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCoreSafetyBookNewByIds(Long[] ids);
+
+    Page<CoreSafetyBookNew> selectSafetyBookNewPage(Page<CoreSafetyBookNew> page, @Param("info") CoreSafetyBookNew coreSafetyBookNew);
+
+    CoreSafetyBookNew selectSafetyBookById(Long id);
+}

+ 72 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/service/ICoreSafetyBookNewService.java

@@ -0,0 +1,72 @@
+package com.xunmei.core.safetybook.service;
+
+import java.util.List;
+
+import com.xunmei.core.safetybook.domain.CoreSafetyBookNew;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.web.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author xunmei
+ * @date 2023-12-06
+ */
+public interface ICoreSafetyBookNewService extends IService<CoreSafetyBookNew> {
+    /**
+     * 查询【请填写功能名称】
+     *
+     * @param id 【请填写功能名称】主键
+     * @return 【请填写功能名称】
+     */
+    CoreSafetyBookNew selectCoreSafetyBookNewById(Long id);
+
+    /**
+     * 查询【请填写功能名称】列表
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    List<CoreSafetyBookNew> selectCoreSafetyBookNewList(CoreSafetyBookNew coreSafetyBookNew);
+
+    /**
+     * 新增【请填写功能名称】
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 结果
+     */
+    int insertCoreSafetyBookNew(CoreSafetyBookNew coreSafetyBookNew);
+
+    /**
+     * 修改【请填写功能名称】
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 结果
+     */
+    int updateCoreSafetyBookNew(CoreSafetyBookNew coreSafetyBookNew);
+
+    /**
+     * 批量删除【请填写功能名称】
+     *
+     * @param ids 需要删除的【请填写功能名称】主键集合
+     * @return 结果
+     */
+    int deleteCoreSafetyBookNewByIds(Long[] ids);
+
+    /**
+     * 删除【请填写功能名称】信息
+     *
+     * @param id 【请填写功能名称】主键
+     * @return 结果
+     */
+    int deleteCoreSafetyBookNewById(Long id);
+
+    /**
+     * 查询【请填写功能名称】分页数据
+     *
+     * @param coreSafetyBookNew 查询条件对象
+     * @return Page
+     */
+    TableDataInfo<CoreSafetyBookNew> selectPage(CoreSafetyBookNew coreSafetyBookNew);
+}

+ 169 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetybook/service/impl/CoreSafetyBookNewServiceImpl.java

@@ -0,0 +1,169 @@
+package com.xunmei.core.safetybook.service.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.safetybook.domain.*;
+import com.xunmei.core.safetybook.mapper.CoreSafetyBookBookFilesMapper;
+import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.domain.SysOrg;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.core.safetybook.mapper.CoreSafetyBookNewMapper;
+import com.xunmei.core.safetybook.service.ICoreSafetyBookNewService;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author xunmei
+ * @date 2023-12-06
+ */
+@Service
+public class CoreSafetyBookNewServiceImpl extends ServiceImpl<CoreSafetyBookNewMapper, CoreSafetyBookNew> implements ICoreSafetyBookNewService {
+    @Autowired
+    private CoreSafetyBookNewMapper coreSafetyBookNewMapper;
+    @Autowired
+    private CoreSafetyBookBookFilesMapper coreSafetyBookBookFilesMapper;
+    @Autowired
+    private RemoteOrgService orgService;
+    @Override
+    public TableDataInfo<CoreSafetyBookNew> selectPage(CoreSafetyBookNew coreSafetyBookNew) {
+        //未删除
+        coreSafetyBookNew.setDeleted(0L);
+        Page<CoreSafetyBookNew> page;
+        //分页
+        if (coreSafetyBookNew.getPageNum() != null && coreSafetyBookNew.getPageSize() != null) {
+            page = new Page<>(coreSafetyBookNew.getPageNum(), coreSafetyBookNew.getPageSize());
+        } else {
+            page = new Page<>();
+        }
+        //查询条件
+        QueryWrapper<CoreSafetyBookNew> query = new QueryWrapper<>(coreSafetyBookNew);
+        //下穿
+//        if (coreSafetyBookNew.getCheckSub()) {
+//            List<Long> ids = orgService.selectCheckSubOrgIdList(coreSafetyBookNew.getOrgId());
+//            //清空前端传递的org_id
+//            coreSafetyBookNew.setOrgId(null);
+//            //添加in条件
+//            query.in("org_id", ids);
+//        }
+//        //时间范围查询
+//        if (coreSafetyBookNew.getParams().get("beginTime") != null && coreSafetyBookNew.getParams().get("endTime") != null) {
+//            query.between("create_time", coreSafetyBookNew.getParams().get("beginTime"), coreSafetyBookNew.getParams().get("endTime"));
+//        }
+        SysOrg org = orgService.selectOrgById(coreSafetyBookNew.getPartyBOrg() != null ? coreSafetyBookNew.getPartyBOrg() : SecurityUtils.getLoginUser().getOrgId(), SecurityConstants.INNER);
+        if (org != null) {
+            coreSafetyBookNew.setSelectOrgPath(org.getPath());
+        }
+        //获取数据
+        page = coreSafetyBookNewMapper.selectSafetyBookNewPage(page, coreSafetyBookNew);
+        page.getRecords().forEach(e -> e.setFiles(coreSafetyBookBookFilesMapper.selecVotList(e.getId())));
+
+        //抓换为TableDataInfo适配前端
+        return TableDataInfo.build(page);
+
+
+    }
+
+
+    /**
+     * 查询【请填写功能名称】
+     *
+     * @param id 【请填写功能名称】主键
+     * @return 【请填写功能名称】
+     */
+    @Override
+    public CoreSafetyBookNew selectCoreSafetyBookNewById(Long id) {
+        CoreSafetyBookNew coreSafetyBookNew = coreSafetyBookNewMapper.selectSafetyBookById(id);
+        coreSafetyBookNew.setFiles(coreSafetyBookBookFilesMapper.selecVotList(id));
+        return coreSafetyBookNew;
+    }
+
+    /**
+     * 查询【请填写功能名称】列表
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 【请填写功能名称】
+     */
+    @Override
+    public List<CoreSafetyBookNew> selectCoreSafetyBookNewList(CoreSafetyBookNew coreSafetyBookNew) {
+        return coreSafetyBookNewMapper.selectList(new QueryWrapper<>(coreSafetyBookNew));
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 结果
+     */
+    @Override
+    public int insertCoreSafetyBookNew(CoreSafetyBookNew coreSafetyBookNew) {
+        //编辑
+        if (coreSafetyBookNew.getId() != null) {
+            coreSafetyBookNew.setUpdateTime(new Date());
+            coreSafetyBookNew.setUpdateBy(SecurityUtils.getUserId().toString());
+            baseMapper.updateById(coreSafetyBookNew);
+        } else {
+//            Long count = baseMapper.selectCount(new LambdaQueryWrapper<CoreSafetyBook>().eq(CoreSafetyBook::getOrgId, coreSafetyBookNew.getOrgId()).eq(CoreSafetyBook::getType, coreSafetyBook.getType()).eq(CoreSafetyBook::getYear, coreSafetyBook.getYear()));
+//            if (count > 0) {
+//                throw new RuntimeException("指定机构已存在当前年度相同类型责任书!");
+//            }
+            //新增
+            coreSafetyBookNew.setCreateTime(new Date());
+            coreSafetyBookNew.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
+            baseMapper.insert(coreSafetyBookNew);
+        }
+        coreSafetyBookBookFilesMapper.delete(new LambdaQueryWrapper<CoreSafetyBookBookFiles>().eq(CoreSafetyBookBookFiles::getBookUserId, coreSafetyBookNew.getId()));
+        for (CoreSafetyBookBookFilesVo file :
+                coreSafetyBookNew.getFiles()) {
+            coreSafetyBookBookFilesMapper.insert(new CoreSafetyBookBookFiles(coreSafetyBookNew.getId(), file.getName(), file.getUrl()));
+
+        }
+        return 1;
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     *
+     * @param coreSafetyBookNew 【请填写功能名称】
+     * @return 结果
+     */
+    @Override
+    public int updateCoreSafetyBookNew(CoreSafetyBookNew coreSafetyBookNew) {
+        coreSafetyBookNew.setUpdateTime(DateUtils.getNowDate());
+        return coreSafetyBookNewMapper.updateById(coreSafetyBookNew);
+    }
+
+    /**
+     * 批量删除【请填写功能名称】
+     *
+     * @param ids 需要删除的【请填写功能名称】主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreSafetyBookNewByIds(Long[] ids) {
+        return coreSafetyBookNewMapper.deleteBatchIds(Arrays.asList((ids)));
+    }
+
+    /**
+     * 删除【请填写功能名称】信息
+     *
+     * @param id 【请填写功能名称】主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreSafetyBookNewById(Long id) {
+        return coreSafetyBookNewMapper.deleteById(id);
+    }
+}

+ 3 - 2
soc-modules/soc-modules-core/src/main/resources/mapper/evaluate/CoreEvaluateTaskMapper.xml

@@ -136,8 +136,9 @@
   <select id="getContentByTaskId" resultType="java.util.Map">
       SELECT
           b.content,
-          IF
-              ( b.content_type = 1, 0, SUM( b.score ) ) score
+             ifnull(  IF
+                 ( b.content_type = 1, 0, SUM( b.score ) ),0) as
+         score
       FROM
       core_evaluate_task_user_content b
       LEFT JOIN core_evaluate_task_user a ON a.id = b.task_user_id

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

@@ -83,7 +83,7 @@
         COUNT( c.id )= 0
         OR IFNULL( a.exception_count, 0 )= 0,
         '0%',
-        CONCAT( COUNT( c.id )/ IFNULL( a.exception_count, 0 )* 100, '%' )) AS realityRectificationRate
+        CONCAT( ROUND( COUNT( c.id )/ 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
@@ -122,7 +122,7 @@
         COUNT( c.id )= 0
         OR IFNULL( a.exception_count, 0 )= 0,
         '0%',
-        CONCAT( COUNT( c.id )/ IFNULL( a.exception_count, 0 )* 100, '%' )) AS realityRectificationRate
+        CONCAT(ROUND(COUNT( c.id )/ 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
@@ -161,7 +161,7 @@
         COUNT( c.id )= 0
         OR IFNULL( a.exception_count, 0 )= 0,
         '0%',
-        CONCAT( COUNT( c.id )/ IFNULL( a.exception_count, 0 )* 100, '%' )) AS realityRectificationRate
+        CONCAT(ROUND(COUNT( c.id )/ 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

+ 122 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionMapper.xml

@@ -370,4 +370,126 @@
             </foreach>
         </if>
     </insert>
+    <insert id="batchInsertResumptionData" parameterType="java.util.List">
+        INSERT INTO `core_resumption_data` (
+        `id`,
+        `plan_id`,
+        `item_id`,
+        `resumption_id`,
+        `area_id`,
+        `check_id`,
+        `res_value`,
+        `res_time`,
+        `submit_time`,
+        `res_status`,
+        `res_remark`,
+        `submit_by`,
+        `submit_name`,
+        `rectification_deadline`,
+        `data_status`,
+        `point_scan`,
+        `required`
+        )
+        VALUES
+        <foreach collection="list" item="item" index="index"  separator="," >
+            (
+            #{item.id},
+            #{item.planId},
+            #{item.itemId},
+            #{item.resumptionId},
+            #{item.areaId},
+            #{item.checkId},
+            #{item.resValue},
+            #{item.resTime},
+            #{item.submitTime},
+            #{item.resStatus},
+            #{item.resRemark},
+            #{item.submitBy},
+            #{item.submitName},
+            #{item.rectificationDeadline},
+            #{item.dataStatus},
+            #{item.pointScan},
+            #{item.required}
+            )
+        </foreach>
+
+
+    </insert>
+    <insert id="batchInsertResumptionQuestion" parameterType="java.util.List">
+        INSERT INTO `core_question` (
+        `id`,
+        `org_id`,
+        `org_name`,
+        `org_path`,
+        `src_type`,
+        `src_task_type`,
+        `src_task_id`,
+        `src_task_name`,
+        `src_point_id`,
+        `src_data_point_id`,
+        `check_item`,
+        `check_content`,
+        `question_desc`,
+        `submitor_id`,
+        `submitor_name`,
+        `submit_time`,
+        `confirm_status`,
+        `reform_status`,
+        `reform_deadline`,
+        `create_time`,
+        `update_time`,
+        `create_by`,
+        `update_by`
+        )
+        VALUES
+        <foreach collection="list" item="item" index="index"  separator="," >
+            (
+            #{item.id},
+            #{item.orgId},
+            #{item.orgName},
+            #{item.orgPath},
+            #{item.srcType},
+            #{item.srcTaskType},
+            #{item.srcTaskId},
+            #{item.srcTaskName},
+            #{item.srcPointId},
+            #{item.srcDataPointId},
+            #{item.checkItem},
+            #{item.checkContent},
+            #{item.questionDesc},
+            #{item.submitorId},
+            #{item.submitorName},
+            #{item.submitTime},
+            #{item.confirmStatus},
+            #{item.reformStatus},
+            #{item.reformDeadline},
+            #{item.createTime},
+            #{item.updateTime},
+            #{item.createBy},
+            #{item.updateBy}
+            )
+        </foreach>
+
+    </insert>
+    <insert id="batchInsertResumptionImg" parameterType="java.util.List">
+        INSERT INTO core_resumption_data_nfc
+        ( `id`, `resumption_id`, `nfc_id`, `submit_time`, `submit_by`, `status`, `scan_method`, `img`, `point_id` )
+        VALUES
+        <foreach collection="list" item="item" index="index"  separator="," >
+            (
+            #{item.id},
+            #{item.resumptionId},
+            #{item.nfcId},
+            #{item.submitTime},
+            #{item.submitBy},
+            #{item.status},
+            #{item.scanMethod},
+            #{item.img},
+            #{item.pointId}
+            )
+        </foreach>
+    </insert>
+    <insert id="batchInsertResumptionNfc" parameterType="java.util.List">
+
+    </insert>
 </mapper>

+ 250 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/safetybook/CoreSafetyBookNewMapper.xml

@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.core.safetybook.mapper.CoreSafetyBookNewMapper">
+
+    <resultMap type="com.xunmei.core.safetybook.domain.CoreSafetyBookNew" id="CoreSafetyBookNewResult">
+        <result property="id" column="id"/>
+        <result property="year" column="year"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="deleted" column="deleted"/>
+        <result property="type" column="type"/>
+        <result property="time" column="time"/>
+        <result property="partyA" column="party_a"/>
+        <result property="partyB" column="party_b"/>
+        <result property="partyAOrg" column="party_a_org"/>
+        <result property="partyBOrg" column="party_b_org"/>
+    </resultMap>
+
+    <sql id="selectCoreSafetyBookNewVo">
+        select id,
+               year,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               deleted,
+               type,
+               time,
+               party_a,
+               party_b,
+               party_a_org,
+               party_b_org
+        from core_safety_book_new
+    </sql>
+
+    <select id="selectCoreSafetyBookNewList" parameterType="com.xunmei.core.safetybook.domain.CoreSafetyBookNew"
+            resultMap="CoreSafetyBookNewResult">
+        <include refid="selectCoreSafetyBookNewVo"/>
+        <where>
+            <if test="year != null ">
+                and year = #{year}
+            </if>
+            <if test="deleted != null ">
+                and deleted = #{deleted}
+            </if>
+            <if test="type != null ">
+                and type = #{type}
+            </if>
+            <if test="time != null ">
+                and time = #{time}
+            </if>
+            <if test="partyA != null  and partyA != ''">
+                and party_a = #{partyA}
+            </if>
+            <if test="partyB != null  and partyB != ''">
+                and party_b = #{partyB}
+            </if>
+            <if test="partyAOrg != null  and partyAOrg != ''">
+                and party_a_org = #{partyAOrg}
+            </if>
+            <if test="partyBOrg != null  and partyBOrg != ''">
+                and party_b_org = #{partyBOrg}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectCoreSafetyBookNewById" parameterType="Long"
+            resultMap="CoreSafetyBookNewResult">
+        <include refid="selectCoreSafetyBookNewVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectSafetyBookNewPage" resultType="com.xunmei.core.safetybook.domain.CoreSafetyBookNew">
+        select b.id,
+        b.year,
+        b.create_by,
+        b.create_time,
+        b.update_by,
+        b.sign_level,
+        b.time,
+        b.update_time,
+        b.deleted,
+        b.type,
+        b.party_b_org,
+        b.party_b,
+        b.party_a_org,b.party_a,
+        u.name as user_name,
+        o.short_name as partyBOrgName
+        from core_safety_book_new b
+        left join sys_user u on b.create_by=u.id
+        left join sys_org o on o.id=b.party_b_org
+        where b.deleted = 0
+        <if test="info.year != null">
+            and b.year=#{info.year}
+        </if>
+        <if test="info.type != null">
+            and b.type=#{info.type}
+        </if>
+        <if test="info.type != null">
+            and b.type=#{info.type}
+        </if>
+        <if test="info.checkSub ==true">
+            and o.path like concat(#{info.selectOrgPath},'%')
+        </if>
+        <if test="info.checkSub ==false">
+            and o.path = #{info.selectOrgPath}
+        </if>
+    </select>
+    <select id="selectSafetyBookById" resultType="com.xunmei.core.safetybook.domain.CoreSafetyBookNew">
+        select b.id,
+               b.year,
+               b.create_by,
+               b.create_time,
+               b.update_by,
+               b.update_time,
+               b.deleted,
+               b.sign_level,
+               b.time,
+               b.type,
+               b.party_b_org,
+               b.party_b,
+               b.party_a_org,
+               b.party_a,
+               u.name       as user_name,
+               o.short_name as partyBOrgName
+        from core_safety_book_new b
+                 left join sys_user u on b.create_by = u.id
+                 left join sys_org o on o.id = b.party_b_org
+        where b.deleted = 0
+          and b.id = #{id}
+
+
+    </select>
+
+    <insert id="insertCoreSafetyBookNew" parameterType="com.xunmei.core.safetybook.domain.CoreSafetyBookNew"
+            useGeneratedKeys="true" keyProperty="id">
+        insert into core_safety_book_new
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="year != null">year,
+            </if>
+            <if test="createBy != null">create_by,
+            </if>
+            <if test="createTime != null">create_time,
+            </if>
+            <if test="updateBy != null">update_by,
+            </if>
+            <if test="updateTime != null">update_time,
+            </if>
+            <if test="deleted != null">deleted,
+            </if>
+            <if test="type != null">type,
+            </if>
+            <if test="time != null">time,
+            </if>
+            <if test="partyA != null">party_a,
+            </if>
+            <if test="partyB != null">party_b,
+            </if>
+            <if test="partyAOrg != null">party_a_org,
+            </if>
+            <if test="partyBOrg != null">party_b_org,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="year != null">#{year},
+            </if>
+            <if test="createBy != null">#{createBy},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateBy != null">#{updateBy},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="deleted != null">#{deleted},
+            </if>
+            <if test="type != null">#{type},
+            </if>
+            <if test="time != null">#{time},
+            </if>
+            <if test="partyA != null">#{partyA},
+            </if>
+            <if test="partyB != null">#{partyB},
+            </if>
+            <if test="partyAOrg != null">#{partyAOrg},
+            </if>
+            <if test="partyBOrg != null">#{partyBOrg},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateCoreSafetyBookNew" parameterType="com.xunmei.core.safetybook.domain.CoreSafetyBookNew">
+        update core_safety_book_new
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="year != null">year =
+                #{year},
+            </if>
+            <if test="createBy != null">create_by =
+                #{createBy},
+            </if>
+            <if test="createTime != null">create_time =
+                #{createTime},
+            </if>
+            <if test="updateBy != null">update_by =
+                #{updateBy},
+            </if>
+            <if test="updateTime != null">update_time =
+                #{updateTime},
+            </if>
+            <if test="deleted != null">deleted =
+                #{deleted},
+            </if>
+            <if test="type != null">type =
+                #{type},
+            </if>
+            <if test="time != null">time =
+                #{time},
+            </if>
+            <if test="partyA != null">party_a =
+                #{partyA},
+            </if>
+            <if test="partyB != null">party_b =
+                #{partyB},
+            </if>
+            <if test="partyAOrg != null">party_a_org =
+                #{partyAOrg},
+            </if>
+            <if test="partyBOrg != null">party_b_org =
+                #{partyBOrg},
+            </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCoreSafetyBookNewById" parameterType="Long">
+        delete
+        from core_safety_book_new
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteCoreSafetyBookNewByIds" parameterType="String">
+        delete from core_safety_book_new where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

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

@@ -179,7 +179,7 @@ public class PdfUtil {
         signCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT);
         table.addCell(signCell);
         //图片填充
-        final PdfPTable imageTable = getImage((List<String>) data.get("image"), 12,100,100,5);
+        final PdfPTable imageTable = getImage((List<String>) data.get("image"), 12,100,100,3);
         final PdfPCell cell = new PdfPCell();
         cell.setNoWrap(false);
         cell.setPaddingLeft(8f);
@@ -385,7 +385,7 @@ public class PdfUtil {
         signCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT);
         table.addCell(signCell);
         //图片填充
-        final PdfPTable imageTable = getImage((List<String>) data.get("image"), 12,50,50,5);
+        final PdfPTable imageTable = getImage((List<String>) data.get("image"), 12,100,100,3);
         final PdfPCell cell = new PdfPCell();
         cell.setNoWrap(false);
         cell.setPaddingLeft(8f);

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

@@ -32,10 +32,7 @@ import com.xunmei.system.api.vo.SysOrgVO;
 import com.xunmei.system.service.ISysDeptService;
 import com.xunmei.system.service.ISysOrgService;
 import com.xunmei.system.service.ISysUserService;
-import com.xunmei.system.util.ConstructionDetailExport;
-import com.xunmei.system.util.CustomerTitleHandler;
-import com.xunmei.system.util.OrgPhysicalDefenseConstructionExport;
-import com.xunmei.system.util.SecurityUserExport;
+import com.xunmei.system.util.*;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -103,7 +100,35 @@ public class SysDeptController extends BaseController {
             response.setCharacterEncoding("utf-8");
         }
     }
-
+    @RequiresPermissions("system:dept:exportSecurityWork")
+    @PostMapping("/exportSecurityWork")
+    public void exportSecurityWork(SysOrg dept, HttpServletResponse response) {
+        List<SecurityWorkExport> securityWorkExportList = orgService.securityWorkExport(dept);
+        if (ObjectUtil.isEmpty(securityWorkExportList)) {
+            throw new RuntimeException("导出数据为空!");
+        }
+        AtomicInteger xh = new AtomicInteger();
+        xh.getAndIncrement();
+        securityWorkExportList.forEach(e -> {
+            e.setXh(String.valueOf(xh.getAndIncrement()));
+        });
+        if (securityWorkExportList.size() > 10000) {
+            throw new RuntimeException("导出数据量过大(单次导出限量10000条数据),请填写条件分批导出");
+        }
+        try {
+            // 设置响应头
+            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);
+        } catch (Exception e) {
+            // 重置response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+        }
+    }
     @RequiresPermissions("system:dept:exportConstruction")
     @PostMapping("/exportConstruction")
     public void exportConstruction(SysOrg dept, HttpServletResponse response) {

+ 14 - 5
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

@@ -92,12 +92,12 @@ public class SysUserController extends BaseController {
             admin = true;
         }
         ajax.put("check", admin);
-        String orgName="福建农信";
-        if (null!=user.getOrgId()){
+        String orgName = "福建农信";
+        if (null != user.getOrgId()) {
             SysOrg sysOrg = orgMapper.selectSysOrgById(user.getOrgId());
-            orgName=sysOrg.getShortName();
+            orgName = sysOrg.getShortName();
         }
-        ajax.put("orgName",orgName);
+        ajax.put("orgName", orgName);
         return ajax;
     }
 
@@ -124,7 +124,7 @@ public class SysUserController extends BaseController {
         }
     }
 
-   // @RequiresPermissions("system:user:list")
+    // @RequiresPermissions("system:user:list")
     @GetMapping("/userListData")
     public R<List<SysUser>> userListData(SysUser user) {
         if (ObjectUtil.isEmpty(user.getOrgId())) {
@@ -534,6 +534,7 @@ public class SysUserController extends BaseController {
             response.setCharacterEncoding("utf-8");
         }
     }
+
     @RequiresPermissions("system:user:exportSecurity")
     @PostMapping("/exportSecurity")
     public void exportSecurity(SysUser user, HttpServletResponse response) {
@@ -565,6 +566,7 @@ public class SysUserController extends BaseController {
         }
 
     }
+
     /**
      * 导出管理人员数据
      */
@@ -605,6 +607,13 @@ public class SysUserController extends BaseController {
         }
     }
 
+    @ApiOperation("检查用户的按钮权限")
+    @InnerAuth
+    @PostMapping("/checkuserpermission")
+    public List<Long> checkUserPermission(@RequestParam List<Long> menuIds, @RequestParam Long userId) {
+        return userService.checkUserPermission(menuIds, userId);
+    }
+
     /**
      * 导入
      */

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

@@ -11,6 +11,7 @@ import com.xunmei.system.util.OrgPhysicalDefenseConstructionExport;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -123,8 +124,25 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
     Map getCamera(String orgPath);
 
     Map getRemote(String orgPath);
+
     Map getDuty(String orgPath);
 
+    Map getCertificate(String orgPath);
+
+    Integer getSafe(@Param("orgPath") String orgPath, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    Integer getEduNumber(@Param("orgPath") String orgPath, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    Integer getEduUser(String orgPath);
+
+    Integer getQuarterDrillNumber(@Param("orgPath") String orgPath, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    Integer getQuarterDrillPeopleNumber(String orgPath);
+
+    Integer getQuarterAllNetworkDrillNumber(@Param("orgPath") String orgPath, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    Integer getQuarterAllNetworkDrillPeopleNumber(String orgPath);
+
     /**
      * 物防达标情况
      *

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

@@ -11,6 +11,7 @@ import com.xunmei.system.api.dto.SysPlanOrgDTO;
 import com.xunmei.system.util.SecurityUserExport;
 import com.xunmei.system.util.UserExport;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -163,4 +164,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<SecurityUserExport> selectSecurityUser(@Param("path") String path);
 
     List<String> selectCountByNames(@Param("names") List<String> names);
+
+    List<Long> checkUserPermission(@Param("menuIds") List<Long> menuIds,@Param("userId")  Long userId);
 }

+ 3 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysUserService.java

@@ -10,6 +10,7 @@ import com.xunmei.system.domain.vo.SysUserVO;
 import com.xunmei.system.api.dto.SysPlanOrgDTO;
 import com.xunmei.system.util.SecurityUserExport;
 import com.xunmei.system.util.UserExport;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -242,4 +243,6 @@ public interface ISysUserService extends IService<SysUser> {
     List<String> selectCountByNames(List<String> names);
 
     List<SysUser> selectUserListData(SysUser user);
+
+    List<Long> checkUserPermission(@RequestParam List<Long> menuIds,Long userId);
 }

+ 53 - 24
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -2,6 +2,8 @@ package com.xunmei.system.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -54,6 +56,16 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     @Autowired
     private SysUserMapper sysUserMapper;
 
+    private static List<SysOrg> handleTree(Map<Long, List<SysOrg>> map, Long parentId) {
+        List<SysOrg> orgList = map.get(parentId);
+        if (ObjectUtil.isNotEmpty(orgList)) {
+            orgList.forEach(org -> {
+                final List<SysOrg> tree = handleTree(map, org.getId());
+                org.setChildren(tree);
+            });
+        }
+        return orgList;
+    }
 
     /**
      * 项目启动时,缓存机构数据
@@ -63,7 +75,6 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         loadingOrgCache();
     }
 
-
     @Override
     public TableDataInfo<SysOrg> selectPage(SysOrg org) {
         //未删除
@@ -152,9 +163,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         SysOrg sysOrg2 = baseMapper.selectSysOrgById(sysOrg.getId());
         List<SysOrg> sysOrgs;
         if (sysOrg2.getType() < 3 || sysOrg2.getShortName().endsWith("地区行社") || sysOrg2.getType() == 9) {
-            sysOrgs = this.selectSysOrgByPathAndType(sysOrg.getPath(), 3);
-        } else if (sysOrg.getType() == 3) {
-            sysOrgs = this.selectSysOrgByPathAndType(sysOrg.getPath(), 4);
+            sysOrgs = this.selectSysOrgByPathAndType(sysOrg2.getPath(), 3);
+        } else if (sysOrg2.getType() == 3) {
+            sysOrgs = this.selectSysOrgByPathAndType(sysOrg2.getPath(), 4);
         } else {
             return Collections.emptyList();
         }
@@ -162,7 +173,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         sysOrgs.forEach(s -> {
             SecurityWorkExport securityWorkExport = new SecurityWorkExport();
             SysOrg sysOrg1;
-            if (sysOrg.getType() < 3 || sysOrg.getShortName().endsWith("地区行社") || sysOrg.getType() == 9) {
+            if (sysOrg2.getType() < 3 || sysOrg2.getShortName().endsWith("地区行社") || sysOrg2.getType() == 9) {
                 sysOrg1 = baseMapper.selectSysOrgById(s.getParentId());
             } else {
                 sysOrg1 = baseMapper.selectSysOrgById(baseMapper.selectSysOrgById(s.getParentId()).getParentId());
@@ -210,9 +221,12 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             securityWorkExport.setDepartureThroughWalls(Integer.valueOf(selfEquipment.get("departureThroughWalls").toString()));
             //中心建设时间
             Map centerConstruction = baseMapper.getCenterConstruction(s.getId());
-            securityWorkExport.setCenterConstructionTime(centerConstruction.get("centerConstructionTime").toString());
-            securityWorkExport.setTransformTime(centerConstruction.get("transformTime").toString());
-            securityWorkExport.setBrand(centerConstruction.get("brand").toString());
+         if (null!=centerConstruction){
+             securityWorkExport.setCenterConstructionTime(centerConstruction.get("centerConstructionTime").toString());
+             securityWorkExport.setTransformTime(centerConstruction.get("transformTime").toString());
+             securityWorkExport.setBrand(centerConstruction.get("brand").toString());
+         }
+
             //高清摄像头
             Map camera = baseMapper.getCamera(s.getPath());
             securityWorkExport.setCameraTotal(Integer.valueOf(camera.get("cameraTotal").toString()));
@@ -225,9 +239,38 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             Map duty = baseMapper.getDuty(s.getPath());
             securityWorkExport.setLocalDutyNetworkNumber(Integer.valueOf(duty.get("localDutyNetworkNumber").toString()));
             securityWorkExport.setRemoteDutyNetworkNumber(Integer.valueOf(duty.get("remoteDutyNetworkNumber").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()));
+            //安全检查
+            DateTime beginOfQuarter = DateUtil.beginOfQuarter(new java.util.Date());
+            DateTime endOfQuarter = DateUtil.endOfQuarter(new Date());
+
+            Integer safe = baseMapper.getSafe(s.getPath(), beginOfQuarter, endOfQuarter);
+            securityWorkExport.setQuarterSelfInspectNumber(safe);
+            //安全教育次数
+            Integer eduNumber = baseMapper.getEduNumber(s.getPath(), beginOfQuarter, endOfQuarter);
+            securityWorkExport.setQuarterSafetyEducationNumber(eduNumber);
+            //教育人数
+            Integer eduUser = baseMapper.getEduUser(s.getPath());
+            securityWorkExport.setSafetyEducationPeopleNumber(eduUser);
+            //总行演练次数
+            Integer quarterDrillNumber = baseMapper.getQuarterDrillNumber(s.getPath(), beginOfQuarter, endOfQuarter);
+            securityWorkExport.setQuarterDrillNumber(quarterDrillNumber);
+            //总行演练人数
+            Integer quarterDrillPeopleNumber = baseMapper.getQuarterDrillPeopleNumber(s.getPath());
+            securityWorkExport.setQuarterDrillPeopleNumber(quarterDrillPeopleNumber);
+            //营业网点预案演练
+            Integer quarterAllNetworkDrillNumber = baseMapper.getQuarterAllNetworkDrillNumber(s.getPath(), beginOfQuarter, endOfQuarter);
+            securityWorkExport.setQuarterAllNetworkDrillNumber(quarterAllNetworkDrillNumber);
+            Integer quarterAllNetworkDrillPeopleNumber = baseMapper.getQuarterAllNetworkDrillPeopleNumber(s.getPath());
+            securityWorkExport.setQuarterAllNetworkDrillPeopleNumber(quarterAllNetworkDrillPeopleNumber);
+            securityWorkExportList.add(securityWorkExport);
         });
-        return null;
+        return securityWorkExportList;
     }
 
     @Override
@@ -318,7 +361,6 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         return list;
     }
 
-
     /**
      * 查询【请填写功能名称】列表
      *
@@ -468,7 +510,6 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         return sysOrgVOS;
     }
 
-
     @Override
     public void clearOrgCache() {
         RedisUtils.deleteObject(CacheConstants.ORG_CACHE_LIST_KEY);
@@ -561,18 +602,6 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         });
     }
 
-
-    private static List<SysOrg> handleTree(Map<Long, List<SysOrg>> map, Long parentId) {
-        List<SysOrg> orgList = map.get(parentId);
-        if (ObjectUtil.isNotEmpty(orgList)) {
-            orgList.forEach(org -> {
-                final List<SysOrg> tree = handleTree(map, org.getId());
-                org.setChildren(tree);
-            });
-        }
-        return orgList;
-    }
-
     @Override
     public List<SysOrg> selectParentHs(List<Long> orgList) {
 

+ 8 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysUserServiceImpl.java

@@ -42,6 +42,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.validation.Validator;
 import java.util.ArrayList;
@@ -742,4 +743,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return userMapper.selectCountByNames(names);
     }
 
+    @Override
+    public List<Long> checkUserPermission(List<Long> menuIds,Long userId) {
+        if (CollectionUtil.isEmpty(menuIds)) {
+            return new ArrayList<>();
+        }
+        return baseMapper.checkUserPermission(menuIds, userId);
+    }
 }

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

@@ -335,7 +335,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
                 workTimeSetIds.add(id);
             }
             //清除可能存在的旧作息数据
-            sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
+//            sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
             for (SysWorkTimeSetDayofweek s :
                     dayOfWeeks) {
                 sysWorkTimeSetDayofweekMapper.insert(s);
@@ -424,7 +424,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
                             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::getYmdDate).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 {
@@ -472,7 +472,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         //获取当前时间以后的手动配置的作息
         List<SysWorkTime> exit = workTimeService.getBaseMapper().selectList(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).ge(SysWorkTime::getYmdDate, workTimeList.get(0).getDate()).eq(SysWorkTime::getIsManual, 1));
         //删除当前时间以后的模板生成的作息
-        sysWorkTimeMapper.delete(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).ge(SysWorkTime::getYmdDate, workTimeList.get(0).getDate()).eq(SysWorkTime::getIsManual, 0));
+//        sysWorkTimeMapper.delete(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).ge(SysWorkTime::getYmdDate, workTimeList.get(0).getDate()).eq(SysWorkTime::getIsManual, 0));
         //去掉workTimeList中orgId和ymd相同的数据
         List<SysWorkTime> list1 = workTimeList.stream().filter(s -> {
             return list.stream().noneMatch(f -> f.getOrgId().equals(s.getOrgId()) && f.getYmdDate().equals(s.getYmd().getDate()));

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

@@ -21,7 +21,7 @@ import java.util.Date;
 public class DeviceExport {
     @ExcelProperty(value = "设备名称", index = 0)
     private String deviceName;
-    @ExcelProperty(value = "机构名称", index = 1)
+    @ExcelProperty(value = "所属机构", index = 1)
     private String orgName;
     @ExcelProperty(value = "设备类别", index = 2)
     private String assetType;

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

@@ -18,94 +18,94 @@ import lombok.Data;
 @HeadRowHeight(16) //表头行高
 @ContentRowHeight(16) //数据行高
 public class SecurityWorkExport {
-    @ExcelProperty(value = "序号", index = 0)
+    @ExcelProperty(value ={"序号",""} , index = 0)
     @TableField(exist = false)
     private String xh;
     @ExcelProperty(value = "地区", index = 1)
     private String city;
-    @ExcelProperty(value = "单位", index = 2)
+    @ExcelProperty(value = {"项目","单位"}, index = 2)
     private String orgName;
-    @ExcelProperty(value = "营业网点总量", index = 3)
+    @ExcelProperty(value = {"营业网点总数","营业网点总量"}, index = 3)
     private Integer networkNumber;
-    @ExcelProperty(value = "营业网点达标数量(符合GA38-2015、2021标准)", index = 4)
+    @ExcelProperty(value = {"营业网点总数","营业网点达标数量(符合GA38-2015、2021标准)"}, index = 4)
     private Integer reachNumber;
-    @ExcelProperty(value = "自有产权网点数", index = 5)
+    @ExcelProperty(value = {"营业网点总数","自有产权网点数"}, index = 5)
     private Integer ownPropertyNumber;
-    @ExcelProperty(value = "区域外网点数", index = 6)
+    @ExcelProperty(value = {"营业网点总数","区域外网点数"}, index = 6)
     private Integer areaOutsideNumber;
-    @ExcelProperty(value = "业务库总量", index = 7)
+    @ExcelProperty(value = {"业务库","业务库总量"}, index = 7)
     private Integer businessLibraryTotal;
-    @ExcelProperty(value = "一类库", index = 7)
+    @ExcelProperty(value = {"业务库","一类库"}, index = 8)
     private Integer oneLibrary;
-    @ExcelProperty(value = "二类库", index = 7)
+    @ExcelProperty(value = {"业务库","二类库"}, index = 9)
     private Integer twoLibrary;
-    @ExcelProperty(value = "三类库", index = 7)
+    @ExcelProperty(value = {"业务库","三类库"}, index = 10)
     private Integer threeLibrary;
-    @ExcelProperty(value = "四类库", index = 7)
+    @ExcelProperty(value = {"业务库","四类库"}, index = 11)
     private Integer fourLibrary;
-    @ExcelProperty(value = "保管箱库", index = 7)
+    @ExcelProperty(value = "保管箱库", index = 12)
     private Integer collectLibrary;
-    @ExcelProperty(value = "在行式总量", index = 7)
+    @ExcelProperty(value = {"自助银行","在行式总量"}, index = 13)
     private Integer onLineTotal;
-    @ExcelProperty(value = "在行式达标数量(符合GA38-2021标准)", index = 7)
+    @ExcelProperty(value = "在行式达标数量(符合GA38-2021标准)", index = 14)
     private Integer onLineReachNumber;
-    @ExcelProperty(value = "离行式总量", index = 7)
+    @ExcelProperty(value = "离行式总量", index = 15)
     private Integer departureTotal;
-    @ExcelProperty(value = "离行式达标数量(符合GA38-2021标准)", index = 7)
+    @ExcelProperty(value = "离行式达标数量(符合GA38-2021标准)", index = 16)
     private Integer departureReachNumber;
-    @ExcelProperty(value = "自助设备总数", index = 7)
+    @ExcelProperty(value = "自助设备总数", index = 17)
     private Integer selfServiceDevicesTotal;
-    @ExcelProperty(value = "在行大堂式机具", index = 7)
+    @ExcelProperty(value = "在行大堂式机具", index = 18)
     private Integer onLineLobbyImplement;
-    @ExcelProperty(value = "在行式穿墙式机具", index = 7)
+    @ExcelProperty(value = "在行式穿墙式机具", index = 19)
     private Integer onLineThroughWalls;
-    @ExcelProperty(value = "离行式大堂式机具", index = 7)
+    @ExcelProperty(value = "离行式大堂式机具", index = 20)
     private Integer departureLobbyImplement;
-    @ExcelProperty(value = "离行式穿墙式机具", index = 7)
+    @ExcelProperty(value = "离行式穿墙式机具", index = 21)
     private Integer departureThroughWalls;
-    @ExcelProperty(value = "中心建设时间(年)", index = 7)
+    @ExcelProperty(value = "中心建设时间(年)", index = 22)
     private String centerConstructionTime;
-    @ExcelProperty(value = "监控平台最近一次升级改造时间(年", index = 7)
+    @ExcelProperty(value = "监控平台最近一次升级改造时间(年", index = 23)
     private String transformTime;
-    @ExcelProperty(value = "监控中心平台品牌", index = 7)
+    @ExcelProperty(value = "监控中心平台品牌", index = 24)
     private String brand;
-    @ExcelProperty(value = "视频监控摄像头总路数", index = 7)
+    @ExcelProperty(value = "视频监控摄像头总路数", index = 25)
     private Integer cameraTotal;
-    @ExcelProperty(value = "视频监控摄像头高清摄像机路数", index = 7)
+    @ExcelProperty(value = "视频监控摄像头高清摄像机路数", index = 26)
     private Integer definitionNumber;
-    @ExcelProperty(value = "是否实现远程控制和实时授权的功能", index = 7)
+    @ExcelProperty(value = "是否实现远程控制和实时授权的功能", index = 27)
     private String remoteControl;
-    @ExcelProperty(value = "离行式自助银行加钞间出入口设置数量", index = 7)
+    @ExcelProperty(value = "离行式自助银行加钞间出入口设置数量", index = 28)
     private Integer cashAddingRoom;
-    @ExcelProperty(value = "业务库(不含保管箱库)防控隔离门出入口设置数量", index = 7)
+    @ExcelProperty(value = "业务库(不含保管箱库)防控隔离门出入口设置数量", index = 29)
     private Integer remoteCount;
-    @ExcelProperty(value = "本地值守网点数量(由员工进行同楼异地值守)", index = 7)
+    @ExcelProperty(value = "本地值守网点数量(由员工进行同楼异地值守)", index = 30)
     private Integer localDutyNetworkNumber;
-    @ExcelProperty(value = "异地值守网点数量(由监控中心进行远程值守)", index = 7)
+    @ExcelProperty(value = "异地值守网点数量(由监控中心进行远程值守)", index = 31)
     private Integer remoteDutyNetworkNumber;
-    @ExcelProperty(value = "监控中心安保卫持证人数", index = 7)
+    @ExcelProperty(value = "监控中心安保卫持证人数", index = 32)
     private Integer certificatePeopleNumber;
-    @ExcelProperty(value = "人员合计", index = 7)
+    @ExcelProperty(value = "人员合计", index = 33)
     private Integer certificateTotal;
-    @ExcelProperty(value = "其中,内部保安人数(含派遣)", index = 7)
+    @ExcelProperty(value = "其中,内部保安人数(含派遣)", index = 34)
     private Integer internalCertificateNumber;
-    @ExcelProperty(value = "其中,外聘保安人数", index = 7)
+    @ExcelProperty(value = "其中,外聘保安人数", index = 35)
     private Integer outsourceCertificateNumber;
-    @ExcelProperty(value = "配有保安网点数 ", index = 7)
+    @ExcelProperty(value = "配有保安网点数 ", index = 36)
     private Integer haveSecurityNetworkNumber;
-    @ExcelProperty(value = "本季度辖内所有营业网点组织开展自查次数(每个网点检查数量的累计数)", index = 7)
+    @ExcelProperty(value = "本季度辖内所有营业网点组织开展自查次数(每个网点检查数量的累计数)", index = 37)
     private Integer quarterSelfInspectNumber;
-    @ExcelProperty(value = "本季度度总行(联社)组织开展安全教育次数", index = 7)
+    @ExcelProperty(value = "本季度度总行(联社)组织开展安全教育次数", index = 38)
     private Integer quarterSafetyEducationNumber;
-    @ExcelProperty(value = "共计参与安全教育员工人次", index = 7)
+    @ExcelProperty(value = "共计参与安全教育员工人次", index = 39)
     private Integer safetyEducationPeopleNumber;
-    @ExcelProperty(value = "本季度开展预案演练次数", index = 7)
+    @ExcelProperty(value = "本季度开展预案演练次数", index = 40)
     private Integer quarterDrillNumber;
-    @ExcelProperty(value = "参与预案演练员工人次", index = 7)
+    @ExcelProperty(value = "参与预案演练员工人次", index = 41)
     private Integer quarterDrillPeopleNumber;
-    @ExcelProperty(value = "本季度辖内所有营业网点开展预案演练次数(每个网点演练次数的累计数)", index = 7)
+    @ExcelProperty(value = "本季度辖内所有营业网点开展预案演练次数(每个网点演练次数的累计数)", index = 42)
     private Integer quarterAllNetworkDrillNumber;
-    @ExcelProperty(value = "辖内所有营业网点参与预案演练员工人次", index = 7)
+    @ExcelProperty(value = "辖内所有营业网点参与预案演练员工人次", index = 43)
     private Integer quarterAllNetworkDrillPeopleNumber;
 
 

+ 122 - 46
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml

@@ -831,15 +831,15 @@ and
     </select>
     <select id="getLibrary" resultType="java.util.Map">
         SELECT
-            COUNT(a.business_library_type ) as total,
-            sum(IF(a.business_library_type=1,1,0)) AS one,
-            SUM(IF(a.business_library_type=2,1,0)) as two,
-            SUM(IF(a.business_library_type=3,1,0)) AS three,
-            SUM(IF(a.business_library_type=4,1,0)) AS four
+            COUNT( a.business_library_type ) AS total,
+            IFNULL( sum( IF ( a.business_library_type = 1, 1, 0 )), 0 ) AS one,
+            IFNULL( SUM( IF ( a.business_library_type = 2, 1, 0 )), 0 ) AS two,
+            IFNULL( SUM( IF ( a.business_library_type = 3, 1, 0 )), 0 ) AS three,
+            IFNULL( SUM( IF ( a.business_library_type = 4, 1, 0 )), 0 ) AS four
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
-                where
+        where
             b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getCollectLibrary" resultType="java.lang.Integer">
@@ -855,12 +855,8 @@ and
     </select>
     <select id="getOnLine" resultType="java.util.Map">
         SELECT
-            SUM(
-                    IF
-                        ( a.type = 3, 1, 0 )) AS onLineTotal,
-            SUM(
-                    IF
-                        ( a.type = 3 AND a.standard =1, 1, 0 )) AS onLineReachNumber
+            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
         FROM
             sys_org_physical_defense_construction a
                 LEFT JOIN sys_org b ON a.org_id = b.id
@@ -869,12 +865,8 @@ and
     </select>
     <select id="getDeparture" resultType="java.util.Map">
         SELECT
-            SUM(
-                    IF
-                        ( a.type = 4, 1, 0 )) AS departureTotal,
-            SUM(
-                    IF
-                        ( a.type = 4 AND a.standard = 1, 1, 0 )) AS departureReachNumber
+            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
         FROM
             sys_org_physical_defense_construction a
                 LEFT JOIN sys_org b ON a.org_id = b.id
@@ -883,11 +875,14 @@ and
     </select>
     <select id="getSelfEquipment" resultType="java.util.Map">
         SELECT
-            SUM( a.lobby_equipment ) AS onLineLobbyImplement,
-            SUM( a.wall_penetrating_equipment ) AS onLineThroughWalls,
-            SUM( a.detached_lobby_equipment ) AS departureLobbyImplement,
-            SUM( a.detached_wall_penetrating_equipment ) AS departureThroughWalls,
-            SUM( a.lobby_equipment ) + SUM( a.wall_penetrating_equipment ) + SUM( a.detached_lobby_equipment ) + SUM( a.detached_wall_penetrating_equipment ) AS selfServiceDevicesTotal
+            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
@@ -896,49 +891,130 @@ and
     </select>
     <select id="getCenterConstruction" resultType="java.util.Map">
         SELECT
-            IF
-                ( a.construction_time IS NULL, '', SUBSTR( a.construction_time, 1, 4 ) ) AS centerConstructionTime,
-            IF
-                ( a.last_update_time IS NULL, '', SUBSTR( a.last_update_time, 1, 4 ) ) AS transformTime,
-            a.platform_brand AS brand
+            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
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
-WHERE b.id=#{orgId}
+        WHERE b.id=#{orgId}
     </select>
     <select id="getCamera" resultType="java.util.Map">
         SELECT
-            COUNT( 1 ) AS cameraTotal,
-            SUM(
-                    IF
-                        ( definition = 1, 1, 0 )) AS definitionNumber
+            IFNULL( COUNT( a.id ), 0 ) AS cameraTotal,
+            IFNULL( SUM( IF ( a.definition = 1, 1, 0 )), 0 ) AS definitionNumber
         FROM
-            sys_device
+            sys_device a
+                LEFT JOIN sys_org b ON a.org_id = b.id
         WHERE
-            del_flag=0 AND
-            device_type =2 AND org_path LIKE concat(#{orgPath}, '%')
+            del_flag = 0
+          AND device_type = 2
+          AND b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getRemote" resultType="java.util.Map">
         SELECT
-            SUM( a.cash_adding_room ) AS cashAddingRoom,
-            SUM( a.remote_count ) AS remoteCount
+            IFNULL( SUM( a.cash_adding_room ), 0 ) AS cashAddingRoom,
+            IFNULL( SUM( a.remote_count ), 0 ) AS remoteCount
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
-where org_path LIKE concat(#{orgPath}, '%')
+        where  b.path LIKE concat(#{orgPath}, '%')
     </select>
     <select id="getDuty" resultType="java.util.Map">
         SELECT
-            SUM(
-                    IF
-                        ( duty_mode = 2, 1, 0 )) AS localDutyNetworkNumber,
-            SUM(
-                    IF
-                        ( duty_mode = 1, 1, 0 )) AS remoteDutyNetworkNumber
+            IFNULL( SUM( IF ( duty_mode = 2, 1, 0 )), 0 ) AS localDutyNetworkNumber,
+            IFNULL( SUM( IF ( duty_mode = 1, 1, 0 )), 0 ) AS remoteDutyNetworkNumber
         FROM
             sys_org_extend a
                 LEFT JOIN sys_org b ON a.org_id = b.id
-        where org_path LIKE concat(#{orgPath}, '%')
+        where 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>
+    <select id="getSafe" resultType="java.lang.Integer">
+        SELECT
+            COUNT( a.id )
+        FROM
+            core_safety_task a
+                LEFT JOIN sys_org b ON a.org_id = b.id
+                LEFT JOIN core_safecheck_plan c ON a.plan_id = c.id
+        WHERE
+            a.deleted = 0
+          AND c.check_type =3
+and a.org_path LIKE concat(#{orgPath}, '%')
+ AND a.ymd_date BETWEEN #{startTime} and #{endTime}
+    </select>
+    <select id="getEduNumber" resultType="java.lang.Integer">
+        SELECT
+            COUNT( a.id )
+        FROM
+            core_edu_training_task a
+                LEFT JOIN core_edu_training_plan b ON a.plan_id = b.id
+        WHERE
+            b.exec_org_type = 1
+          AND b.deleted =0
+        and a.org_path    like concat(concat('%',#{orgPath}),'%')
+          AND a.training_start_date_time BETWEEN #{startTime} and #{endTime}
+    </select>
+    <select id="getEduUser" resultType="java.lang.Integer">
+        SELECT
+            COUNT( b.edu_training_task_id )
+        FROM
+            core_edu_training_task a
+                LEFT JOIN core_edu_training_task_to_user b ON a.id = b.edu_training_task_id
+        WHERE
+            b.type = 1  and a.org_path    like concat(concat('%',#{orgPath}),'%')
+    </select>
+    <select id="getQuarterDrillNumber" resultType="java.lang.Integer">
+        SELECT
+            COUNT(a.id)
+        FROM
+            core_drill_task a
+                LEFT JOIN core_drill_plan b ON a.plan_id = b.id
+        WHERE b.exec_org_type=1
+          and a.org_path    like concat(concat('%',#{orgPath}),'%')
+          AND a.drill_start_time BETWEEN #{startTime} and #{endTime}
+    </select>
+    <select id="getQuarterDrillPeopleNumber" resultType="java.lang.Integer">
+        SELECT
+            COUNT( c.drill_task_id )
+        FROM
+            core_drill_task a
+                LEFT JOIN core_drill_plan b ON a.plan_id = b.id
+                LEFT JOIN core_drill_task_to_user c ON c.drill_task_id = a.id
+        WHERE
+            b.exec_org_type = 1
+          and a.org_path    like concat(concat('%',#{orgPath}),'%')
+    </select>
+    <select id="getQuarterAllNetworkDrillNumber" resultType="java.lang.Integer">
+        SELECT
+            COUNT(a.id)
+        FROM
+            core_drill_task a
+                LEFT JOIN core_drill_plan b ON a.plan_id = b.id
+        WHERE b.exec_org_type=4
+          and a.org_path    like concat(concat('%',#{orgPath}),'%')
+          AND a.drill_start_time BETWEEN #{startTime} and #{endTime}
+    </select>
+    <select id="getQuarterAllNetworkDrillPeopleNumber" resultType="java.lang.Integer">
+        SELECT
+            COUNT( c.drill_task_id )
+        FROM
+            core_drill_task a
+                LEFT JOIN core_drill_plan b ON a.plan_id = b.id
+                LEFT JOIN core_drill_task_to_user c ON c.drill_task_id = a.id
+        WHERE
+            b.exec_org_type = 4
+          and a.org_path    like concat(concat('%',#{orgPath}),'%')
     </select>
 
 

+ 14 - 3
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -220,21 +220,24 @@
         select id, username
         from sys_user
         where username = #{userName}
-          and deleted = '0' limit 1
+          and deleted = '0'
+        limit 1
     </select>
 
     <select id="checkPhoneUnique" parameterType="String" resultType="com.xunmei.system.api.domain.SysUser">
         select id, phone
         from sys_user
         where phone = #{phonenumber}
-          and deleted = '0' limit 1
+          and deleted = '0'
+        limit 1
     </select>
 
     <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
         select user_id, email
         from sys_user
         where email = #{email}
-          and deleted = '0' limit 1
+          and deleted = '0'
+        limit 1
     </select>
 
     <insert id="insertUser" parameterType="com.xunmei.system.api.domain.SysUser" useGeneratedKeys="true"
@@ -734,6 +737,14 @@
                  LEFT JOIN sys_org c ON c.id = b.org_id
         WHERE b.deleted = 0
           and c.path like concat(#{path}, '%')
+    </select>
 
+    <select id="checkUserPermission" resultType="Long">
+        select rm.menu_id from sys_user_role ur
+        INNER JOIN sys_role_menu rm on ur.role_id=rm.role_id
+        WHERE ur.user_id=#{userId} and rm.menu_id in
+        <foreach collection="menuIds" item="menuId" separator="," close=")" open="(">
+            #{menuId}
+        </foreach>
     </select>
 </mapper>