Browse Source

安全检查

luojun 1 year ago
parent
commit
d3e490bc8d

+ 47 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/controller/CoreSafetyTaskController.java

@@ -1,10 +1,18 @@
 package com.xunmei.core.safetyCheck.controller;
 
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.io.IOException;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionRoleDto;
@@ -12,6 +20,8 @@ import com.xunmei.core.safetyCheck.domain.CoreSafecheckPlan;
 import com.xunmei.core.safetyCheck.domain.CoreSafetyTask;
 import com.xunmei.core.safetyCheck.service.ICoreSafecheckPlanService;
 import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskService;
+import com.xunmei.core.safetyCheck.vo.CoreSafetyTaskExport;
+import com.xunmei.system.api.domain.SysUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -123,4 +133,41 @@ public class CoreSafetyTaskController extends BaseController {
     public AjaxResult getNfc(String taskId) {
         return success(coreSafetyTaskService.selectNfc(taskId));
     }
+    /**
+     * 导出安全检查数据
+     */
+//    @RequiresPermissions("core:task:export")
+    @PostMapping("/export")
+    public void export( CoreSafetyTask coreSafetyTask, HttpServletResponse response) {
+        List<CoreSafetyTaskExport> list = null;
+        Set<String> excludeColumnFiledNames = new HashSet<String>();
+            list = coreSafetyTaskService.down(coreSafetyTask);
+            if (ObjectUtil.isEmpty(list)) {
+                throw new RuntimeException("导出数据为空!");
+            }
+            AtomicInteger xh = new AtomicInteger();
+            xh.getAndIncrement();
+            list.forEach(e -> {
+                e.setIndex(xh.getAndIncrement());
+            });
+            if (list.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(), CoreSafetyTaskExport.class).excludeColumnFiledNames(excludeColumnFiledNames)
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("安全检查数据").doWrite(list);
+        } catch (Exception e) {
+            // 重置response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+        }
+    }
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/mapper/CoreSafetyTaskMapper.java

@@ -9,6 +9,7 @@ import com.xunmei.core.safetyCheck.domain.CoreSafetyTask;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.core.safetyCheck.dto.register.AppPageDto;
 import com.xunmei.core.safetyCheck.vo.CheckNfcRecord;
+import com.xunmei.core.safetyCheck.vo.CoreSafetyTaskExport;
 import com.xunmei.core.safetyCheck.vo.regsiter.AppTaskRegisterPointVo;
 import com.xunmei.core.safetyCheck.vo.regsiter.AppPageVo;
 import com.xunmei.core.safetyCheck.vo.regsiter.TaskRegisterNfcVo;
@@ -97,4 +98,6 @@ public interface CoreSafetyTaskMapper extends BaseMapper<CoreSafetyTask> {
     List<CheckNfcRecord> selectNfcRecord(String taskId);
 
     List<PanelListVo> selectCurUserTaskList(@Param("request") PanelListDto request);
+
+    List<CoreSafetyTaskExport> down(@Param("task")CoreSafetyTask coreSafetyTask);
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskService.java

@@ -9,6 +9,7 @@ import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.core.safetyCheck.domain.CoreSafetyTask;
 import com.xunmei.core.safetyCheck.vo.CheckNfcRecord;
+import com.xunmei.core.safetyCheck.vo.CoreSafetyTaskExport;
 
 /**
  * 【请填写功能名称】Service接口
@@ -85,4 +86,6 @@ public interface ICoreSafetyTaskService extends IService<CoreSafetyTask> {
      * @param cycle
      */
     void deleteByOrgIdAndRange(Long orgId, Date startDate, Date endDate, Integer cycle);
+
+    List<CoreSafetyTaskExport> down(CoreSafetyTask coreSafetyTask);
 }

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

@@ -21,6 +21,7 @@ import com.xunmei.core.safetyCheck.mapper.CoreSafecheckPlanToRoleMapper;
 import com.xunmei.core.safetyCheck.mapper.CoreSafetyTaskMapper;
 import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskService;
 import com.xunmei.core.safetyCheck.vo.CheckNfcRecord;
+import com.xunmei.core.safetyCheck.vo.CoreSafetyTaskExport;
 import com.xunmei.core.safetyCheck.vo.plan.SafetyPlanRoleVo;
 import com.xunmei.system.api.Eto.RoleConditionEto;
 import com.xunmei.system.api.RemoteRoleService;
@@ -221,5 +222,15 @@ public class CoreSafetyTaskServiceImpl extends ServiceImpl<CoreSafetyTaskMapper,
         coreSafetyTaskMapper.delete(new LambdaQueryWrapper<CoreSafetyTask>().eq(CoreSafetyTask::getOrgId, orgId).eq(CoreSafetyTask::getCheckCycle, cycle).between(CoreSafetyTask::getYmdDate, startDate, endDate).in(CoreSafetyTask::getStatus, 1, 2));
     }
 
+    @Override
+    public List<CoreSafetyTaskExport> down(CoreSafetyTask coreSafetyTask) {
+        if(CollectionUtil.isNotEmpty(coreSafetyTask.getRange()) && coreSafetyTask.getRange().size()==2 ){
+            coreSafetyTask.getRange().set(0,DateUtil.beginOfDay(coreSafetyTask.getRange().get(0)));
+            coreSafetyTask.getRange().set(1,DateUtil.endOfDay(coreSafetyTask.getRange().get(1)));
+        }
+        coreSafetyTask.setGrantUserId(SecurityUtils.getUserId());
+        return coreSafetyTaskMapper.down(coreSafetyTask);
+    }
+
 
 }

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

@@ -771,7 +771,8 @@
             and t.org_id=#{params.beCheckedOrgId}
         </if>
         <if test="params.taskTime!=null">
-            and ((t.plan_start_time &lt;=#{params.taskTime} and t.plan_end_time&gt;=#{params.taskTime}) or t.ymd_date=#{params.taskTime})
+            and ((t.plan_start_time &lt;=#{params.taskTime} and t.plan_end_time&gt;=#{params.taskTime}) or
+            t.ymd_date=#{params.taskTime})
         </if>
         <if test="params.status">
             and t.status=#{params.status}
@@ -828,4 +829,57 @@
         and #{request.endTime}  <![CDATA[<=]]>  t.plan_end_time
         ))
     </select>
+    <select id="down" resultType="com.xunmei.core.safetyCheck.vo.CoreSafetyTaskExport">
+        SELECT
+        t.id,
+        t.title,
+        t.check_org_name,
+        t.org_name,
+        GROUP_CONCAT( DISTINCT r.role_name ) AS submit_name,
+        t.plan_start_time,
+
+        t.plan_end_time,
+        t.plan_start_time AS create_time,
+        t.check_team,
+        t.STATUS,
+        t.exception_count
+        FROM
+        core_safety_task t
+        LEFT JOIN core_safecheck_plan_to_role pr ON pr.plan_id = t.plan_id
+        LEFT JOIN sys_role r ON r.id = pr.role_id
+        LEFT JOIN core_safecheck_plan_to_role csptr ON csptr.plan_id = t.plan_id
+        LEFT JOIN sys_org og ON og.id = t.check_org_id
+        WHERE
+        t.deleted = 0
+        AND og.type = r.org_type
+
+        <if test="task.title != null  and task.title != ''">
+            and t.title like concat('%', #{task.title}, '%')
+        </if>
+        <if test="task.roleId != null  and task.roleId != ''">
+            and csptr.role_id =#{task.roleId}
+        </if>
+        <if test="task.planStartTime != null ">
+            and DATE_FORMAT(t.plan_start_time, '%Y-%m-%d') = DATE_FORMAT(#{task.planStartTime}, '%Y-%m-%d')
+        </if>
+        <if test="task.range !=null and task.range.size==2">
+            and t.plan_start_time>=#{task.range[0]} and t.plan_start_time &lt; #{task.range[1]}
+        </if>
+        <if test="task.status != null  and task.status != ''">
+            and t.status =#{task.status}
+        </if>
+        <!--        <if test="task.roleId != null  and task.roleId != ''">-->
+        <!--            and t.role_id =#{task.roleId}-->
+        <!--        </if>-->
+        and (t.grant_user_id=#{task.grantUserId} or (
+        <if test="task.checkSub==false">
+            t.check_org_id=#{task.orgId}
+        </if>
+        <if test="task.checkSub==true">
+            t.check_org_id in (select id from sys_org
+            where path like concat((select path from sys_org where id=#{task.orgId}),'%'))
+        </if>))
+        GROUP BY
+        t.id
+    </select>
 </mapper>