فهرست منبع

Merge branch 'V0.0.2' of http://10.87.10.227:4000/jzyd_yyds/soc into V0.0.2

jiawuxian 2 سال پیش
والد
کامیت
d997375711
16فایلهای تغییر یافته به همراه228 افزوده شده و 38 حذف شده
  1. 28 1
      project_data/sql/0.0.2/soc/soc.sql
  2. 32 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ApiPlanController.java
  3. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/domain/AppPlan.java
  4. 19 9
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java
  5. 3 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/appPlan/AppPlanVo.java
  6. 2 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/appPlan/ResumptionPlanPageVo.java
  7. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/domain/CoreSafecheckPlan.java
  8. 5 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java
  9. 4 1
      soc-modules/soc-modules-core/src/main/resources/mapper/resumption/AppPlanMapper.xml
  10. 2 0
      soc-modules/soc-modules-core/src/main/resources/mapper/safetycheck/CoreSafecheckPlanMapper.xml
  11. 0 1
      soc-modules/soc-modules-core/src/main/resources/mapper/safetycheck/CoreSafetyTaskMapper.xml
  12. 96 4
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java
  13. 2 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysUserMapper.java
  14. 2 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysUserService.java
  15. 6 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysUserServiceImpl.java
  16. 25 17
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 28 - 1
project_data/sql/0.0.2/soc/soc.sql

@@ -825,6 +825,18 @@ IF
 		ALTER TABLE `soc`.`core_protection_log` CHANGE COLUMN `alarm_host_code` `alarm_host_id` BIGINT NULL DEFAULT NULL COMMENT '报警主机id' AFTER `code`;
 		
 	END IF;
+	-- 安全检查是否下发标识
+    IF
+        NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'core_safecheck_plan' AND COLUMN_NAME = 'distribute' ) THEN
+        ALTER TABLE `core_safecheck_plan` ADD COLUMN `distribute` VARCHAR ( 2 ) DEFAULT NULL COMMENT '是否已下发';
+
+    END IF;
+	-- 履职计划是否下发标识
+    IF
+        NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'core_resumption_plan' AND COLUMN_NAME = 'distribute' ) THEN
+        ALTER TABLE `core_resumption_plan` ADD COLUMN `distribute` VARCHAR ( 2 ) DEFAULT NULL COMMENT '是否已下发';
+
+    END IF;
 	ALTER TABLE `core_protection` MODIFY COLUMN `device_id` BIGINT NULL DEFAULT NULL COMMENT '设备ID' AFTER `id`;
 -- 机构扩展添加是否业务库
 	ALTER TABLE sys_org_extend MODIFY COLUMN business_library INT COMMENT '是否业务库';
@@ -872,7 +884,7 @@ INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_cl
 
 -- 用户导出管理人员
 delete from `sys_menu` where `menu_name` ='用户导出管理人员';
-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 (00000000000000002358, '用户导出管理人员', 100, 9, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:user:exportManager', '1', NULL, NULL, '演示安全检查', '2023-09-27 16:10:58', '', 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 ( '01710492988610752516','用户导出管理人员', 100, 9, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:user:exportManager', '1', NULL, NULL, '演示安全检查', '2023-09-27 16:10:58', '', NULL, '');
 
 -- 演练任务状态字典增加待提交
 delete from sys_dict_data where dict_type='edu_training_do_status' and dict_value in (4) ;
@@ -1464,6 +1476,21 @@ INSERT INTO `sys_role_menu`(`role_id`, `menu_id`) VALUES (120, 2362);
 INSERT INTO `sys_role_menu`(`role_id`, `menu_id`) VALUES (120, 2363);
 INSERT INTO `sys_role_menu`(`role_id`, `menu_id`) VALUES (120, 2364);
 INSERT INTO `sys_role_menu`(`role_id`, `menu_id`) VALUES (120, 2365);
+-- 维护机构扩展字典
+DELETE from sys_dict_data where dict_type in ('org_extend_standard','org_extend_business_library_standard','org_extend_self_service_bank_standard','org_extend_detached_standard');
+
+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, 'GA38-2021', '1', 'org_extend_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:57:04', '超级管理员', '2023-10-07 15:24:27', 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, 'GA38-2015', '2', 'org_extend_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:57:10', '超级管理员', '2023-10-07 15:24:36', 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', 'org_extend_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:57:28', '超级管理员', '2023-10-07 15:24:43', 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 ( 1, 'GA38-2021', '1', 'org_extend_business_library_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:57:45', '超级管理员', '2023-10-07 15:23:55', 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, 'GA38-2015', '2', 'org_extend_business_library_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:57:50', '超级管理员', '2023-10-07 15:24:04', 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', 'org_extend_business_library_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:57:55', '超级管理员', '2023-10-07 15:24:13', 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 ( 1, 'GA38-2021', '1', 'org_extend_self_service_bank_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:58:09', '超级管理员', '2023-10-07 15:22:59', 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, 'GA38-2015', '2', 'org_extend_self_service_bank_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:58:13', '超级管理员', '2023-10-07 15:23:09', 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', 'org_extend_self_service_bank_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:58:20', '超级管理员', '2023-10-07 15:23:28', 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 ( 1, 'GA38-2021', '1', 'org_extend_detached_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:58:33', '超级管理员', '2023-10-07 15:18:18', 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, 'GA38-2015', '2', 'org_extend_detached_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:58:37', '超级管理员', '2023-10-07 15:18:27', 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', 'org_extend_detached_standard', NULL, 'default', 'N', '0', '超级管理员', '2023-09-14 16:58:41', '超级管理员', '2023-10-07 15:18:35', NULL);
 
 -- -------------------------------------------------------
 -- ----------新增数据 end  ----------------------------

+ 32 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ApiPlanController.java

@@ -1,5 +1,6 @@
 package com.xunmei.core.resumption.controller;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.common.core.constant.SecurityConstants;
@@ -12,6 +13,7 @@ import com.xunmei.core.resumption.domain.AppPlan;
 import com.xunmei.core.resumption.dto.DistributeDto;
 import com.xunmei.core.resumption.dto.plan.CoreResumptionPlanPageDto;
 import com.xunmei.core.resumption.service.AppPlanService;
+import com.xunmei.core.resumption.task.ResumptionTaskBusiness;
 import com.xunmei.core.resumption.vo.appPlan.AppPlanVo;
 import com.xunmei.core.resumption.vo.appPlan.RuleItemVo;
 import com.xunmei.core.resumption.vo.appPlan.RuleRequestVo;
@@ -23,6 +25,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
+import java.util.TimeZone;
 
 /**
  * @author : 高雄
@@ -39,7 +42,8 @@ public class ApiPlanController {
     private AppPlanService appPlanService;
     @Autowired
     private RemoteOrgService remoteOrgService;
-
+    @Autowired
+    ResumptionTaskBusiness taskBusiness;
 
     /**
      * 计划分页查询
@@ -110,6 +114,33 @@ public class ApiPlanController {
     public AjaxResult edit(@RequestBody AppPlanVo info) {
         try {
             appPlanService.saveOrUpdatePlan(info);
+            //立即执行
+            if (info.isBuildTaskNow()){
+                DateTime datetime = new DateTime();
+                datetime.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+                //当有周期存在时保持原有接口不变(doTask),否则按照新的接口创建
+                Integer plancycle = info.getPlanCycle();
+                if (plancycle != null) {
+                    if (plancycle == 2) {
+                        taskBusiness.syncDay(datetime, plancycle);
+                    }
+                    if (plancycle == 3) {
+                        taskBusiness.syncWeek(datetime, plancycle);
+                    }
+                    if (plancycle == 4) {
+                        taskBusiness.syncMonth(datetime, plancycle);
+                    }
+                    if (plancycle == 5) {
+                        taskBusiness.syncQuarter(datetime, plancycle);
+                    }
+                    if (plancycle == 6) {
+                        taskBusiness.syncHalfYear(datetime, plancycle);
+                    }
+                    if (plancycle == 7) {
+                        taskBusiness.syncYear(datetime, plancycle);
+                    }
+                }
+            }
             return AjaxResult.success();
         } catch (Exception e) {
             e.printStackTrace();

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/domain/AppPlan.java

@@ -31,6 +31,7 @@ public class AppPlan extends Model<AppPlan> implements Serializable {
     private static final long serialVersionUID = 1L;
     @TableField(exist = false)
     private Integer orgType;
+    private String distribute;
     /**
      * 主键
      */

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

@@ -1,6 +1,8 @@
 package com.xunmei.core.resumption.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+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;
@@ -14,6 +16,7 @@ import com.xunmei.core.resumption.dto.DistributeStatusDto;
 import com.xunmei.core.resumption.dto.plan.CoreResumptionPlanPageDto;
 import com.xunmei.core.resumption.mapper.*;
 import com.xunmei.core.resumption.service.AppPlanService;
+import com.xunmei.core.resumption.task.ResumptionTaskBusiness;
 import com.xunmei.core.resumption.vo.appPlan.AppPlanVo;
 import com.xunmei.core.resumption.vo.appPlan.ResumptionPlanPageVo;
 import com.xunmei.core.resumption.vo.appPlan.RuleItemVo;
@@ -172,6 +175,11 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                 appPlanToItemMapper.insert(item);
             }
         }
+        //修改下发标识
+        AppPlan plan = new AppPlan();
+        plan.setId(dto.getId());
+        plan.setDistribute("1");
+        baseMapper.updateById(plan);
     }
 
     /**
@@ -259,6 +267,8 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                 appPlanToItemMapper.insert(item);
             }
 
+
+
 //            Integer orgId = app.getExecOrgType();
 //            if (orgId != null) {
 //                AppPlanToCheckOrg checkOrg = new AppPlanToCheckOrg();
@@ -283,16 +293,16 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                 app.setRoleList(new ArrayList<>());
             }
 
-                //获取计划对应的已完成任务数量
-                Long num = resumptionMapper.selectCount(new QueryWrapper<Resumption>().eq("plan_id", app.getId()).eq("status",3));
-                if (num > 0) {
-                    //如果状态为已禁用
-                    if(app.getPlanStatus()==0){
-                        throw new RuntimeException("计划已生成任务,不能禁用!");
-                    }
-
+            //获取计划对应的已完成任务数量
+            Long num = resumptionMapper.selectCount(new QueryWrapper<Resumption>().eq("plan_id", app.getId()).eq("status",3));
+            if (num > 0) {
+                //如果状态为已禁用
+                if(app.getPlanStatus()==0){
+                    throw new RuntimeException("计划已生成任务,不能禁用!");
                 }
 
+            }
+
             //修改所有子计划
             List<AppPlan> appPlans = baseMapper.selectList(new LambdaQueryWrapper<AppPlan>().eq(AppPlan::getParentId, plan.getId()));
             for (AppPlan ap :
@@ -303,7 +313,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                         throw new RuntimeException("计划已生成任务,不能禁用!");
                     }
                 }
-                    ap.setPlanName(plan.getPlanName());
+                ap.setPlanName(plan.getPlanName());
                 ap.setPlanType(plan.getPlanType());
                 ap.setPlanCycle(plan.getPlanCycle());
                 ap.setPlanStatus(plan.getPlanStatus());

+ 3 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/appPlan/AppPlanVo.java

@@ -21,9 +21,9 @@ import java.util.List;
 @AllArgsConstructor
 public class AppPlanVo extends PageDto<AppPlan> {
 
-private List<Long> ids;
+    private List<Long> ids;
     private Long id;
-
+    private boolean buildTaskNow;
     /**
      * 计划名称
      */
@@ -68,7 +68,7 @@ private List<Long> ids;
     /**
      * 执行类型
      */
-    private Integer execType=0;
+    private Integer execType = 0;
     @JsonSerialize(using = ToStringSerializer.class)
     private Integer execOrgType;
     private String count;

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/appPlan/ResumptionPlanPageVo.java

@@ -19,8 +19,9 @@ public class ResumptionPlanPageVo {
     @TableId(type = IdType.AUTO)
     @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
-
+    private String distribute;
     private Integer orgType;
+    private Integer planOfOrgType;
     /**
      * 主键
      */

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/domain/CoreSafecheckPlan.java

@@ -51,6 +51,7 @@ public class CoreSafecheckPlan extends BaseEntity {
 //    @JsonSerialize(using = ToStringSerializer.class)
 //    private Long index;
 
+    private String distribute;
     /**
      * 计划名称
      */

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

@@ -157,6 +157,11 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
                 }
             }
         }
+        //更改下发状态
+        CoreSafecheckPlan coreSafecheckPlan = new CoreSafecheckPlan();
+        coreSafecheckPlan.setId(dto.getId());
+        coreSafecheckPlan.setDistribute("1");
+        coreSafecheckPlanMapper.updateById(coreSafecheckPlan);
     }
 
 

+ 4 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/resumption/AppPlanMapper.xml

@@ -13,6 +13,8 @@
     <resultMap id="appPlans" type="com.xunmei.core.resumption.vo.appPlan.ResumptionPlanPageVo">
         <id column="id" property="id"/>
         <result column="plan_name" property="planName"/>
+        <result column="distribute" property="distribute"/>
+        <result column="plan_of_org_type" property="planOfOrgType"/>
         <result column="plan_type" property="planType"/>
         <result column="plan_cycle" property="planCycle"/>
         <result column="plan_exec" property="planExec"/>
@@ -42,7 +44,8 @@
         b.orgNames,
         o.short_name as plan_of_org_name,
         g.short_name as plan_create_org_name,
-        g.type as createOrgType
+        g.type as createOrgType,
+               o.type as plan_of_org_type
         FROM
         core_resumption_plan a
         left join sys_user u2 on u2.id=a.modified_by

+ 2 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/safetycheck/CoreSafecheckPlanMapper.xml

@@ -23,6 +23,7 @@
         <result property="sourceType" column="source_type"/>
         <result property="roleNames" column="role_names"/>
 
+        <result property="distribute" column="distribute"/>
         <result property="distributeStatus" column="distribute_status"/>
         <result property="distributePlanStatus" column="distribute_plan_status"/>
         <result property="parentId" column="parent_id"/>
@@ -205,6 +206,7 @@
         c.count,
         c.id,
         c.parent_id,
+        c.distribute,
         c.distribute_status,
         c.distribute_plan_status,
         o1.NAME AS plan_create_org_name,

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

@@ -208,7 +208,6 @@
         t.submit_by,
         t.submit_time,
         t.exception_count,
-        t.des,
         t.ymd_date,
         t.plan_start_time,
         t.plan_end_time,

+ 96 - 4
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

@@ -2,6 +2,8 @@ package com.xunmei.system.controller;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -32,17 +34,18 @@ import com.xunmei.system.service.*;
 import com.xunmei.system.util.UserExport;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -510,7 +513,7 @@ public class SysUserController extends BaseController {
         if (ObjectUtil.isEmpty(list)) {
             throw new RuntimeException("导出数据为空!");
         }
-        list=list.stream().filter(e -> e.getIsManager() != null).collect(Collectors.toList());
+        list=list.stream().filter(e -> "Y".equals(e.getIsManager())).collect(Collectors.toList());
         if(list.size()>10000){
             throw new RuntimeException("导出数据量过大(单次导出限量10000条数据),请填写条件分批导出");
         }
@@ -529,4 +532,93 @@ public class SysUserController extends BaseController {
             response.setCharacterEncoding("utf-8");
         }
     }
+    /**
+     * 导入
+     */
+    @RequiresPermissions("system:user:importData")
+    @ResponseBody
+    @PostMapping("/importData")
+    @Transactional(rollbackFor = {RuntimeException.class, Exception.class})
+    public  AjaxResult importData(MultipartFile file, boolean updateSupport){
+        List<UserExport> list = new ArrayList<>();
+        // 读取excel
+        EasyExcel.read(multipartFileToFile(file), UserExport.class, new AnalysisEventListener<UserExport>() {
+            // 每解析一行数据,该方法会被调用一次
+            @Override
+            public void invoke(UserExport user, AnalysisContext analysisContext) {
+//                System.out.println("解析数据为:" + user.toString());
+                list.add(user);
+            }
+            // 全部解析完成被调用
+            @Override
+            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+//                System.out.println("解析完成...");
+                List<String> names=list.stream().map(UserExport::getName).collect(Collectors.toList());
+                List<String> exist = userService.selectCountByNames(names);
+                if (exist.size()>0){
+                    throw new RuntimeException("用户"+exist+"已存在");
+                }
+                // 将解析的数据保存到数据库
+                for (UserExport u :list) {
+                    //构建基础user对象
+                    SysUser user=new SysUser();
+                    BeanUtils.copyProperties(u,user);
+                    user.setDeleted(0);
+                    user.setIsLock("启用".equals(u.getIsLock())?"1":"0");
+                    SysOrg org= orgMapper.selectOne(new LambdaQueryWrapper<SysOrg>().eq(SysOrg::getName,u.getOrgName()).eq(SysOrg::getDeleted,0));
+                    if (org==null){
+                        throw new RuntimeException("机构"+u.getOrgName()+"不存在");
+                    }
+                    user.setOrgName(org.getName());
+                    user.setOrgPath(org.getPath());
+                    user.setOrgId(org.getId());
+                    user.setOrgType(org.getType());
+                    user.setCreateBy(SecurityUtils.getUsername());
+                    user.setSource(0);
+                    user.setCreateTime(new Date());
+                    //isp的加密方式
+                    final String salt = SaltHelper.salt();
+                    user.setSalt(salt);
+                    user.setPassword(SaltHelper.exec("Admin1234", salt));
+                    user.setOriginalOrgId(user.getOrgId());
+                    userService.insertUser(user);
+                    //构建用户角色关联关系
+                    String [] roleNames = user.getRoleNames().split(",");
+                    List<SysRole> roles = roleService.list(new LambdaQueryWrapper<SysRole>().in(SysRole::getRoleName, roleNames));
+                    if (roles.size()!=roleNames.length){
+                        throw new RuntimeException("角色"+ Arrays.toString(roleNames) +"存在异常");
+                    }
+                    for (SysRole r :
+                            roles) {
+                        SysUserRole sysUserRole = new SysUserRole();
+                        sysUserRole.setUserId(user.getId());
+                        sysUserRole.setRoleId(r.getId());
+                        sysUserRoleService.insertSysUserRole(sysUserRole);
+                    }
+                }
+            }
+        }).sheet().doRead();
+        return success();
+    }
+    /***
+     * 功能描述:
+     * MultipartFile 转 File
+     * @return: java.io.File
+     */
+    public static File multipartFileToFile(MultipartFile multipartFile){
+        // 获取文件名
+        String fileName = multipartFile.getOriginalFilename();
+        // 获取文件后缀
+        assert fileName != null;
+        String suffix = fileName.substring(fileName.lastIndexOf("."));
+        // 若需要防止临时文件重复,需要在文件名后加上UUID
+        try {
+            File file = File.createTempFile(fileName.substring(0,fileName.lastIndexOf("."))+ UUID.randomUUID(),suffix);
+            multipartFile.transferTo(file);
+            return file;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

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

@@ -158,4 +158,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<SysUser> selectUserListByRoleAndOrg(@Param("sysRoleOrgDTO") SysRoleOrgDTO sysRoleOrgDTO);
 
     List<UserExport> select(@Param("info") SysUser user);
+
+    List<String> selectCountByNames(@Param("names")List<String> names);
 }

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

@@ -227,4 +227,6 @@ public interface ISysUserService extends IService<SysUser> {
     List<SysUser> selectAllUser();
 
     List<UserExport> down(SysUser user);
+
+    List<String> selectCountByNames(List<String> names);
 }

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

@@ -631,4 +631,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         user.setOrgPath(org.getPath());
         return userMapper.select(user);
     }
+
+    @Override
+    public List<String> selectCountByNames(List<String> names) {
+        return userMapper.selectCountByNames(names);
+    }
+
 }

+ 25 - 17
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -198,12 +198,12 @@
             resultType="com.xunmei.system.api.domain.SysUser">
         select *
         from sys_user u where deleted=0
-            <if test="source != null">
-                AND u.source =#{source}
-            </if>
-            <if test="orgId != null">
-                AND u.org_id =#{orgId}
-            </if>
+        <if test="source != null">
+            AND u.source =#{source}
+        </if>
+        <if test="orgId != null">
+            AND u.org_id =#{orgId}
+        </if>
     </select>
 
     <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
@@ -448,7 +448,7 @@
         u.CODE,
         u.source,
         u.original_org_id,
-               u.is_manage
+        u.is_manage
         FROM
         sys_user u
         LEFT JOIN sys_org o ON u.original_org_id = o.id
@@ -492,7 +492,7 @@
             AND t.roleIds like concat("%,",#{info.roleId},",%")
         </if>
         <if test="info.onlyManager ==true">
-            AND t.is_manager is not null
+            AND t.is_manage ='Y'
         </if>
         ORDER BY t.org_id DESC
     </select>
@@ -511,7 +511,7 @@
     <select id="getList" resultMap="SysUserResult">
         SELECT
         u.id,
-        h.user_id AS is_manager,
+        u.is_manage AS is_manager,
         role_name,
         u.dept_id,
         u.is_lock,
@@ -585,14 +585,14 @@
     </select>
     <select id="selectAllUser" resultType="com.xunmei.system.api.domain.SysUser">
         select  * from
- sys_user where  deleted=0 and is_lock =0 and locked=0
+            sys_user where  deleted=0 and is_lock =0 and locked=0
     </select>
     <select id="selectUserListByRole" resultType="com.xunmei.system.api.domain.SysUser">
-           select a.* from sys_user a left join sys_user_role b on a.id = b.user_id where
-           b.role_id in
-           <foreach collection="notificationToRoles" item="role" open="(" separator="," close=")">
-               #{role.roleId}
-           </foreach>
+        select a.* from sys_user a left join sys_user_role b on a.id = b.user_id where
+        b.role_id in
+        <foreach collection="notificationToRoles" item="role" open="(" separator="," close=")">
+            #{role.roleId}
+        </foreach>
     </select>
     <select id="selectUserListByRoleAndOrg" resultType="com.xunmei.system.api.domain.SysUser">
         SELECT DISTINCT
@@ -610,7 +610,7 @@
     </select>
     <select id="select" resultType="com.xunmei.system.util.UserExport">
         SELECT
-        h.user_id AS is_manager,
+        #         h.user_id AS is_manager,
         GROUP_CONCAT(sr.role_name) role_names,
         CONCAT(",",GROUP_CONCAT( sr.id ),",") as roleIds,
         u.id,
@@ -647,7 +647,8 @@
         u.update_by,
         u.CODE,
         u.source,
-        u.original_org_id
+        u.original_org_id,
+        u.is_manage as is_manager
         FROM
         sys_user u
         LEFT JOIN sys_org o ON u.original_org_id = o.id
@@ -687,4 +688,11 @@
         group by u.id
 
     </select>
+    <select id="selectCountByNames" resultType="java.lang.String">
+        select u.name from sys_user u where u.deleted=0 and  u.name in
+        <foreach collection="names" item="name" open="(" separator="," close=")">
+            #{name}
+        </foreach>
+    </select>
+
 </mapper>