Przeglądaj źródła

计量器具的导入

Zimo 1 tydzień temu
rodzic
commit
02773e0490

+ 24 - 0
yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java

@@ -1,14 +1,20 @@
 package cn.iocoder.yudao.framework.excel.core.util;
 
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
 import cn.iocoder.yudao.framework.excel.core.handler.SelectSheetWriteHandler;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.converters.longconverter.LongStringConverter;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -49,4 +55,22 @@ public class ExcelUtils {
                 .doReadAllSync();
     }
 
+    public static void downloadTemplate(HttpServletResponse response, String fileName, Class<?> clazz) {
+        try {
+            // 1. 设置响应头
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
+
+            // 2. 写入空数据 = 模板
+            EasyExcel.write(response.getOutputStream(), clazz)
+                    .excelType(ExcelTypeEnum.XLSX)
+                    .sheet("模板")
+                    .doWrite(Collections.emptyList());
+        } catch (IOException e) {
+            throw new ServiceException(new ErrorCode(1,"下载模板失败"));
+        }
+    }
+
 }

+ 36 - 19
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/qhse/measure/IotMeasureBookController.java

@@ -1,35 +1,34 @@
 package cn.iocoder.yudao.module.pms.controller.admin.qhse.measure;
 
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
 import cn.iocoder.yudao.module.pms.service.qhse.measure.IotMeasureBookService;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
+import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
 import io.swagger.v3.oas.annotations.Operation;
-
-import java.util.*;
-import java.io.IOException;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-
-import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
 
-import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
 
 @Tag(name = "管理后台 - 计量器具台账")
@@ -48,6 +47,24 @@ public class IotMeasureBookController {
         return success(iotMeasureBookService.createIotMeasureBook(createReqVO));
     }
 
+    @GetMapping("/import-template")
+    public void importTemplate(HttpServletResponse response) throws IOException {
+        ExcelUtils.downloadTemplate(response, "计量器具导入模板", IotMeasureBookRespVO.class);
+    }
+
+    @PostMapping("/import")
+    @Operation(summary = "导入用户")
+    @Parameters({
+            @Parameter(name = "file", description = "Excel 文件", required = true),
+            @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true")
+    })
+    @PreAuthorize("@ss.hasPermission('system:user:import')")
+    public CommonResult<UserImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
+                                                      @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
+        List<IotMeasureBookRespVO> list = ExcelUtils.read(file, IotMeasureBookRespVO.class);
+        return success(iotMeasureBookService.importBookList(list, updateSupport));
+    }
+
     @PutMapping("/update")
     @Operation(summary = "更新计量器具台账")
     @PreAuthorize("@ss.hasPermission('rq:iot-measure-book:update')")

+ 6 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/qhse/measure/vo/IotMeasureBookRespVO.java

@@ -13,11 +13,11 @@ import java.time.LocalDateTime;
 public class IotMeasureBookRespVO {
 
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31994")
-    @ExcelProperty("主键id")
+//    @ExcelProperty("主键id")
     private Long id;
 
     @Schema(description = "计量器具编码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("计量器具编码")
+//    @ExcelProperty("计量器具编码")
     private String measureCode;
 
     @Schema(description = "计量器具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@@ -45,7 +45,7 @@ public class IotMeasureBookRespVO {
     private String modelName;
 
     @Schema(description = "上次检验/校准日期")
-    @ExcelProperty("上次检验/校准日期")
+//    @ExcelProperty("上次检验/校准日期")
     private String lastTime;
 
     @Schema(description = "单位")
@@ -57,7 +57,7 @@ public class IotMeasureBookRespVO {
     private Double measurePrice;
 
     @Schema(description = "图片")
-    @ExcelProperty("图片")
+//    @ExcelProperty("图片")
     private String measurePic;
 
     @Schema(description = "备注", example = "你猜")
@@ -65,11 +65,11 @@ public class IotMeasureBookRespVO {
     private String remark;
 
     @Schema(description = "创建时间")
-    @ExcelProperty("创建时间")
+//    @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
     @Schema(description = "部门id", example = "26945")
-    @ExcelProperty("部门id")
+//    @ExcelProperty("部门id")
     private Long deptId;
 
     @Schema(description = "检测是否到期")

+ 4 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/InspectCreateOrderJob.java

@@ -35,7 +35,7 @@ public class InspectCreateOrderJob implements JobHandler {
     @DataPermission(enable = false)
     @TenantIgnore
     public String execute(String param) throws Exception {
-        try {
+//        try {
             TenantUtils.execute(1L, () -> {
                 List<IotInspectPlanDO> plans = iotInspectPlanMapper.selectList();
                 plans.stream().filter(e -> e.getStatus()==0).forEach(plan -> {
@@ -57,9 +57,9 @@ public class InspectCreateOrderJob implements JobHandler {
                     }
                 });
             });
-        } catch (Exception e) {
-            throw new RuntimeException(e.getMessage());
-        }
+//        } catch (Exception e) {
+//            throw new RuntimeException(e.getMessage());
+//        }
         return "创建成功";
     }
 

+ 4 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/qhse/measure/IotMeasureBookService.java

@@ -1,13 +1,14 @@
 package cn.iocoder.yudao.module.pms.service.qhse.measure;
 
-import java.util.*;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
+import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 计量器具台账 Service 接口
@@ -15,6 +16,7 @@ import javax.validation.Valid;
  * @author 超级管理员
  */
 public interface IotMeasureBookService {
+    UserImportRespVO importBookList(List<IotMeasureBookRespVO> importUsers, boolean isUpdateSupport);
 
     /**
      * 创建计量器具台账

+ 25 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/qhse/measure/IotMeasureBookServiceImpl.java

@@ -1,25 +1,27 @@
 package cn.iocoder.yudao.module.pms.service.qhse.measure;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.qhse.measure.IotMeasureBookMapper;
+import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY;
 
 /**
  * 计量器具台账 Service 实现类
@@ -35,6 +37,25 @@ public class IotMeasureBookServiceImpl implements IotMeasureBookService {
     @Autowired
     private DeptService deptService;
 
+    @Override
+    public UserImportRespVO importBookList(List<IotMeasureBookRespVO> importBooks, boolean isUpdateSupport) {
+        // 1.1 参数校验
+        if (CollUtil.isEmpty(importBooks)) {
+            throw exception(USER_IMPORT_LIST_IS_EMPTY);
+        }
+        // 2. 遍历,逐个创建 or 更新
+        UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
+        Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
+        importBooks.forEach(importBook -> {
+            IotMeasureBookDO iotMeasureBookDO = new IotMeasureBookDO();
+            BeanUtils.copyProperties(importBook, iotMeasureBookDO);
+            iotMeasureBookDO.setDeleted(false);
+            iotMeasureBookDO.setDeptId(loginUserDeptId);
+
+        });
+        return respVO;
+    }
+
     @Override
     public Long createIotMeasureBook(IotMeasureBookSaveReqVO createReqVO) {
         // 插入