Browse Source

演练任务导出

zhulu 2 years ago
parent
commit
a7b8742388

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

@@ -0,0 +1,106 @@
+package com.xunmei.common.core.domain.drill.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillTaskToRole;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillTaskToUser;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ColumnWidth(15) //列宽,最大值为255
+@HeadRowHeight(16) //表头行高
+@ContentRowHeight(16) //数据行高
+public class CoreDrillTaskExportVo {
+
+    @ColumnWidth(25)
+    @ExcelProperty(value = "任务名称", index = 0)
+    @ApiModelProperty(value = "任务名称")
+    private String title;
+
+    @ColumnWidth(25)
+    @ExcelProperty(value = "演练机构", index = 1)
+    @ApiModelProperty(value = "演练机构")
+    private String orgName;
+
+    @ColumnWidth(25)
+    @ExcelProperty(value = "演练项目", index = 2)
+    @ApiModelProperty(value = "演练项目")
+    private String typeText;
+
+    @ExcelProperty(value = "任务进度", index = 3)
+    private String statusText;
+
+    @ColumnWidth(42)
+    @ExcelProperty(value = "任务时间", index = 4)
+    @ApiModelProperty(value = "任务时间")
+    private String taskDate;
+
+
+    @ExcelProperty(value = "演练地点", index = 5)
+    @ApiModelProperty(value = "演练地点")
+    private String drillSite;
+
+
+    @ExcelProperty(value = "指挥人", index = 6)
+    @ApiModelProperty(value = "指挥人")
+    private String hostName;
+
+    @ExcelProperty(value = "登记人", index = 7)
+    @ApiModelProperty(value = "登记人")
+    private String recorderName;
+
+    @ColumnWidth(25)
+    @ExcelProperty(value = "演练开始时间", index = 8)
+    @ApiModelProperty(value = "演练开始时间")
+    private String drillStartTime;
+
+    @ColumnWidth(25)
+    @ExcelProperty(value = "演练截止时间", index = 9)
+    @ApiModelProperty(value = "演练截止时间")
+    private String drillEndTime;
+
+    @ColumnWidth(50)
+    @ExcelProperty(value = "预设案由", index = 10)
+    @ApiModelProperty(value = "预设案由")
+    private String presetCase;
+
+    @ColumnWidth(50)
+    @ExcelProperty(value = "演练情况", index = 11)
+    @ApiModelProperty(value = "演练情况")
+    private String drillSituation;
+
+    @ExcelProperty(value = "参会人员", index = 12)
+    @ApiModelProperty(value = "参与人员名称")
+    private String taskUserNames;
+
+    @ExcelProperty(value = "缺席人员", index = 13)
+    @ApiModelProperty(value = "缺席人员名称")
+    private String absenceNames;
+
+    @ExcelProperty(value = "评分", index = 14)
+    @ApiModelProperty(value = "评分")
+    private Integer commentScore;
+
+    @ExcelProperty(value = "评语", index = 15)
+    @ApiModelProperty(value = "评语")
+    private String comment;
+
+    @ExcelIgnore
+    private Long id;
+
+    @ExcelIgnore
+    private Integer status;
+
+    @ExcelIgnore
+    private String type;
+
+}

+ 15 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/controller/CoreDrillTaskController.java

@@ -6,6 +6,7 @@ import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskRecPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskRecTaskPageVo;
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto;
 import com.xunmei.common.core.web.controller.BaseController;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
@@ -19,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.Date;
 
 /**
@@ -140,4 +143,16 @@ public class CoreDrillTaskController extends BaseController {
     public AjaxResult updateDrillTaskStatus() {
         return toAjax(coreDrillTaskService.updateDrillTaskStatus());
     }
+
+
+    /**
+     * 导出excel
+     */
+    @ApiOperation(value = "导出演练任务")
+    //@RequiresPermissions("core:eduTask:export")
+    @Log(title = "导出培训任务", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(CoreDrillTaskPageDto request, HttpServletResponse response) throws IOException {
+        coreDrillTaskService.export(request, response);
+    }
 }

+ 4 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillTaskMapper.java

@@ -9,6 +9,8 @@ import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskPageDto;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskRecPageDto;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskReportDto;
 import com.xunmei.common.core.domain.drill.vo.*;
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskExportVo;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import org.apache.ibatis.annotations.Param;
@@ -52,4 +54,6 @@ public interface CoreDrillTaskMapper extends BaseMapper<CoreDrillTask> {
     Integer updateTaskStatus(@Param("status") int status);
 
     void updateTaskNameByParentPlanId(@Param("planId") Long planId, @Param("planName") String planName, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    List<CoreDrillTaskExportVo> selectDrillTaskExportList(@Param("request") CoreDrillTaskPageDto request);
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillTaskService.java

@@ -6,11 +6,13 @@ import com.xunmei.common.core.domain.drill.domain.CoreDrillTask;
 import com.xunmei.common.core.domain.drill.domain.CoreDrillTaskToUser;
 import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.*;
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.Date;
 import java.util.List;
 
@@ -109,4 +111,5 @@ public interface ICoreDrillTaskService extends IService<CoreDrillTask> {
 
     List<PanelListVo> selectRecList(PanelListDto panelListDto);
 
+    void export(CoreDrillTaskPageDto request, HttpServletResponse response);
 }

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

@@ -4,6 +4,8 @@ import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -17,6 +19,8 @@ import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.domain.drill.domain.*;
 import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.*;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTaskToUser;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskExportVo;
 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;
@@ -26,6 +30,7 @@ import com.xunmei.common.core.enums.CycleCommonEnum;
 import com.xunmei.common.core.enums.ExportPdfType;
 import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.enums.drill.*;
+import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
@@ -57,8 +62,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -102,6 +109,10 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     private RemoteWorkTimeService workTimeService;
 
     @Autowired
+    private RemoteDictDataService remoteDictDataService;
+
+
+    @Autowired
     @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
     private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 
@@ -956,6 +967,53 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         return waitRecTaskList;
     }
 
+    @Override
+    public void export(CoreDrillTaskPageDto request, HttpServletResponse response) {
+        dealParam(request);
+        List<CoreDrillTaskExportVo> list = coreDrillTaskMapper.selectDrillTaskExportList(request);
+        if (ObjectUtil.isEmpty(list)){
+            throw new SystemException("未获取到数据");
+        }
+        Map<String, SysDictData> dicts = remoteDictDataService.selectDictByeType("core_drill_type", SecurityConstants.INNER)
+                .stream().collect(Collectors.toMap(SysDictData::getDictValue, v -> v));
+        List<Long> taskIds = list.stream().map(x -> x.getId()).collect(Collectors.toList());
+        List<CoreDrillTaskToUser> allTaskUserList = taskToUserMapper.selectList(new LambdaQueryWrapper<CoreDrillTaskToUser>().in(CoreDrillTaskToUser::getDrillTaskId,taskIds));
+
+        for (CoreDrillTaskExportVo task : list) {
+            task.setStatusText(DrillDoStatus.getName(task.getStatus()));
+            if(dicts.containsKey(task.getType()))
+            {
+                task.setTypeText( dicts.get(task.getType()).getDictLabel());
+            }
+            List<CoreDrillTaskToUser> userList = allTaskUserList.stream().filter(x->x.getDrillTaskId().equals(task.getId())).collect(Collectors.toList());
+            if (ObjectUtil.isNotEmpty(userList)) {
+                task.setTaskUserNames(getUserName(userList, 1));
+                task.setAbsenceNames(getUserName(userList, 2));
+            }
+        }
+        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(), CoreDrillTaskExportVo.class)
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("演练任务").doWrite(list);
+        } catch (Exception e) {
+            // 重置response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+        }
+    }
+
+    private String getUserName(List<CoreDrillTaskToUser> userList, Integer type) {
+        return userList.stream()
+                .filter(user -> ObjectUtil.equal(type, user.getType()))
+                .map(CoreDrillTaskToUser::getUserName)
+                .collect(Collectors.joining(","));
+    }
+
     private void dealListData(List<PanelListVo> list, Long userId) {
         if (ObjectUtil.isEmpty(list)) {
             return;

+ 53 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml

@@ -301,4 +301,57 @@
           and start_date <![CDATA[>=]]> #{startTime}
           and end_date <![CDATA[<=]]> #{endTime}
     </update>
+
+    <select id="selectDrillTaskExportList" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillTaskExportVo">
+        select t.id        as id,
+        t.org_name         as orgName,
+        t.title            as title,
+        t.type             as type,
+        t.start_date       as startDate,
+        t.end_date         as endDate,
+        concat(start_date,'-',end_date) as taskDate,
+        t.drill_start_time as drillStartTime,
+        t.drill_end_time   as drillEndTime,
+        t.preset_case      as presetCase,
+        t.drill_situation  as drillSituation,
+        t.drill_site       as drillSite,
+        t.comment_score    as commentScore,
+        t.comment          as comment,
+        t.plan_cycle       as planCycle,
+        t.image_list       as imageList,
+        t.host_id          as hostId,
+        t.recorder_id      as recorderId,
+        u.name             as hostName,
+        u1.name            as recorderName,
+        t.pdf_url          as pdfUrl,
+        t.file_list        as file,
+        t.rec_status       as recStatus,
+        t.status           as status
+        from core_drill_task t
+        left join sys_user u on t.host_id=u.id
+        left join sys_user u1 on t.recorder_id=u1.id
+        <where>
+            <choose>
+                <when test="request.checkSub==true">
+                    t.org_path like concat(#{request.orgPath}, '%')
+                </when>
+                <otherwise>
+                    t.org_id = #{request.orgId}
+                </otherwise>
+            </choose>
+            <if test="request.title!= null and request.title !=''">
+                and t.title like concat('%',#{request.title}, '%')
+            </if>
+            <if test="request.type!= null">
+                and t.type=#{request.type}
+            </if>
+            <if test="request.status != null">
+                and t.status=#{request.status}
+            </if>
+            <include refid="timeRangeSql"/>
+        </where>
+        order by t.update_time desc
+    </select>
+
+
 </mapper>