Răsfoiți Sursa

调整事件派发的日志记录
调整选择预案的日志记录
调整日志文件中反馈部分的展示
优化新增资源仓库时初始化内容
应急队伍增加人员的模板下载及导入功能

459242451@qq.com 2 ani în urmă
părinte
comite
a38c6f5a6b

+ 3 - 0
README.md

@@ -143,4 +143,7 @@ http://10.11.208.12:31000/sqpc/#/home
 http://minio.xt.wenhq.top:8083
 accesskey: AKIAIOSFODNN7EXAMPLE secretkey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
 
+> 导入模板下载
+http://localhost:8080/api/common/download/resource/local?resource=excel/resourceUser.xls
+
 

+ 46 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web.controller.common;
 
+import cn.hutool.core.io.IoUtil;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -18,6 +19,9 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -106,4 +110,46 @@ public class CommonController {
             log.error("下载文件失败", e);
         }
     }
+
+    /**
+     * 下载本地资源文件
+     *
+     * @param resource
+     * @param response
+     * @throws Exception
+     */
+    @GetMapping("/common/download/resource/local")
+    public void resourceLocalDownload(String resource, HttpServletResponse response) {
+        InputStream inputStream = null;
+        OutputStream outputStream = null;
+        try {
+            // 下载名称
+            String downloadName = StringUtils.substringAfterLast(resource, "/");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, downloadName);
+//            ClassPathResource classPathResource = new ClassPathResource(resource);
+            inputStream = CommonController.class.getClassLoader().getResourceAsStream(resource);
+            outputStream = response.getOutputStream();
+
+            IoUtil.copy(inputStream, outputStream);
+//            FileUtils.writeBytes(resource, response.getOutputStream());
+        } catch (Exception e) {
+            log.error("下载文件失败", e);
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e1) {
+                    e1.printStackTrace();
+                }
+            }
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e1) {
+                    e1.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 63 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/ResourceDetailController.java

@@ -1,10 +1,14 @@
 package com.ruoyi.web.controller.zhdd;
 
 import cn.afterturn.easypoi.entity.vo.NormalExcelConstants;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
 import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import cn.afterturn.easypoi.view.PoiBaseView;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.annotation.Log;
@@ -44,11 +48,14 @@ import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -188,6 +195,62 @@ public class ResourceDetailController extends BaseController {
 
     }
 
+    @ApiOperation("导入队伍人员数据")
+    @Log(title = "导入队伍人员数据", businessType = BusinessType.IMPORT)
+    @PostMapping("/importUser")
+    public AjaxResult<?> importExcel(HttpServletRequest request) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        String resourceId = request.getParameter("resourceId");
+        if (StrUtil.isBlank(resourceId)) {
+            return null;
+        }
+        // 查询应急资源是否为应急队伍的类型
+        ResourceVo resourceVo = resourceService.getVoById(resourceId);
+        if (resourceVo == null || resourceVo.getResourceType() != 2) {
+            return null;
+        }
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();// 获取上传文件对象
+            ImportParams params = new ImportParams();
+            params.setTitleRows(1);
+            params.setHeadRows(1);
+            try {
+                List<ResourceDetail> list = ExcelImportUtil.importExcel(file.getInputStream(), ResourceDetail.class, params);
+                List<ResourceDetail> newList = new ArrayList<>();
+                for (ResourceDetail resourceDetail : list) {
+                    if (StrUtil.isBlank(resourceDetail.getName())) {
+                        continue;
+                    }
+                    resourceDetail.setResourceId(resourceId);
+                    resourceDetail.setResourceType(resourceVo.getResourceType());
+                    // 计算性别、年龄(1 : 男 , 0 : 女)、出生年月
+                    if (StrUtil.isNotBlank(resourceDetail.getIdcard()) && IdcardUtil.isValidCard(resourceDetail.getIdcard())) {
+                        int age = IdcardUtil.getAgeByIdCard(resourceDetail.getIdcard());
+                        int gender = IdcardUtil.getGenderByIdCard(resourceDetail.getIdcard());
+                        String birth = IdcardUtil.getBirth(resourceDetail.getIdcard());
+                        resourceDetail.setSex(gender == 1 ? "男" : gender == 0 ? "女" : "未知");
+                        resourceDetail.setAge(Convert.toStr(age));
+                        resourceDetail.setBirth(birth.substring(0, 4) + "-" + birth.substring(4, 6) + "-" + birth.substring(6));
+                    }
+                    newList.add(resourceDetail);
+                }
+                iResourceDetailService.saveAll(newList);
+                return AjaxResult.success("导入成功" + newList.size() + "条");
+            } catch (Exception e) {
+                return AjaxResult.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return AjaxResult.error("文件导入失败!");
+
+    }
+
     /**
      * 获取应急资源明细详细信息
      */

BIN
ruoyi-admin/src/main/resources/excel/resourceUser.xls


+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -121,7 +121,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
             .antMatchers("/system/**").permitAll()
             .antMatchers("/getInfo").permitAll()
             .antMatchers("/getRouters").permitAll()
-            .antMatchers("/common/upload", "/common/download/resource", "/zhdd/resourceDetail/export/**").permitAll()
+            .antMatchers("/common/upload", "/common/download/resource", "/common/download/resource/local", "/zhdd/resourceDetail/export/**").permitAll()
 
             // 系统层面
             .antMatchers("/system/dept/treeselect",

+ 6 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/ResourceDetail.java

@@ -1,5 +1,6 @@
 package com.ruoyi.zhdd.domain;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -44,6 +45,7 @@ public class ResourceDetail implements Serializable {
     /**
      * 名称
      */
+    @Excel(name = "姓名")
     private String name;
 
     /**
@@ -88,16 +90,20 @@ public class ResourceDetail implements Serializable {
 
     private String sex;
 
+    @Excel(name = "身份证号")
     private String idcard;
 
     private String birth;
 
     private String age;
 
+    @Excel(name = "职位")
     private String position;
 
+    @Excel(name = "政治面貌")
     private String political;
 
+    @Excel(name = "联系电话")
     private String contactPhone;
 
     // 车船类型(车辆、船舶)