瀏覽代碼

Merge branch 'master' of http://222.243.138.146:2000/hmy/hnyz_dcs

HMY 8 月之前
父節點
當前提交
73b1e0616d

+ 30 - 12
admin/src/main/java/com/dcs/hnyz/controller/EquipmentController.java

@@ -1,23 +1,24 @@
 package com.dcs.hnyz.controller;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import com.dcs.hnyz.domain.vo.EquipmentFormVO;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
 import com.dcs.common.annotation.Log;
 import com.dcs.common.core.controller.BaseController;
 import com.dcs.common.core.domain.AjaxResult;
+import com.dcs.common.core.page.TableDataInfo;
 import com.dcs.common.enums.BusinessType;
+import com.dcs.common.utils.poi.ExcelUtil;
 import com.dcs.hnyz.domain.Equipment;
+import com.dcs.hnyz.domain.vo.EquipmentFormVO;
 import com.dcs.hnyz.service.IEquipmentService;
-import com.dcs.common.utils.poi.ExcelUtil;
-import com.dcs.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 设备管理Controller
@@ -163,4 +164,21 @@ public class EquipmentController extends BaseController
         return success(equipmentService.getPageEquipmentGroupByFlowCode(flowCode));
     }
 
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<Equipment> util = new ExcelUtil<Equipment>(Equipment.class);
+        util.importTemplateExcel(response, "设备数据");
+    }
+
+    @Log(title = "设备管理", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<Equipment> util = new ExcelUtil<Equipment>(Equipment.class);
+        List<Equipment> equipmentList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = equipmentService.importEquipment(equipmentList, updateSupport, operName);
+        return success(message);
+    }
 }

+ 1 - 1
admin/src/main/java/com/dcs/hnyz/domain/Equipment.java

@@ -85,7 +85,7 @@ public class Equipment extends BaseEntity
     private Integer protocolId;
 
     /** 状态 0-启用,1-禁用*/
-    @Excel(name = "状态")
+//    @Excel(name = "状态")
     @ApiModelProperty(value = "状态 0-启用,1-禁用")
     private String status;
 

+ 2 - 0
admin/src/main/java/com/dcs/hnyz/service/IEquipmentService.java

@@ -114,4 +114,6 @@ public interface IEquipmentService
      * @return
      */
     Map<String,List<Equipment>> getPageEquipmentGroupByFlowCode(String flowCode);
+
+    String importEquipment(List<Equipment> equipmentList, boolean updateSupport, String operName);
 }

+ 62 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/EquipmentServiceImpl.java

@@ -1,10 +1,13 @@
 package com.dcs.hnyz.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.dcs.common.enums.GeneralStatus;
 import com.dcs.common.exception.CustomException;
+import com.dcs.common.exception.ServiceException;
+import com.dcs.common.utils.StringUtils;
 import com.dcs.hnyz.domain.Equipment;
 import com.dcs.hnyz.domain.EquipmentParam;
 import com.dcs.hnyz.domain.Flow;
@@ -376,5 +379,64 @@ public class EquipmentServiceImpl implements IEquipmentService {
         return new ArrayList<>(map.values());
     }
 
+    @Override
+    public String importEquipment(List<Equipment> equipmentList, boolean isUpdateSupport, String operName) {
 
+        if (StringUtils.isNull(equipmentList) || equipmentList.size() == 0)
+        {
+            throw new ServiceException("导入用户数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (Equipment equipment : equipmentList)
+        {
+            try
+            {
+                // 验证是否存在这个设备
+                Equipment e = equipmentMapper.selectOne(new QueryWrapper<Equipment>().eq("code", equipment.getCode()));
+                if (StringUtils.isNull(e))
+                {
+                    // TODO 获取设备类型字符串查询设备类型库 填充相应的设备类型 id
+                    // TODO 模糊查询设备流程和页面 填充相应的流程和页面 id 没有命中需返回消息提示无页面
+                    equipment.setCreateBy(operName);
+//                    equipment.setStatus("0");
+                    equipmentMapper.insert(equipment);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、设备 " + equipment.getCode() + " 导入成功");
+                }
+                else if (isUpdateSupport)
+                {
+                    equipment.setCreateBy(operName);
+//                    equipment.setStatus("0");
+                    equipmentMapper.insert(equipment);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、设备 " + equipment.getCode() + " 更新成功");
+                }
+                else
+                {
+                    failureNum++;
+                    failureMsg.append("<br/>" + failureNum + "、设备 " + equipment.getCode() + " 已存在");
+                }
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、设备 " + equipment.getCode() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+//                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
 }

+ 74 - 0
ui/src/views/dcsForm2/equipment/index.vue

@@ -62,6 +62,9 @@
         <el-button type="warning" plain icon="Download" @click="handleExport"
           v-hasPermi="['hnyz:equipment:export']">导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="info" plain icon="Upload" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button>
+      </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <!-- 表单列表 -->
@@ -168,10 +171,34 @@
         </div>
       </template>
     </el-dialog>
+
+    <!-- 设备导入对话框 -->
+    <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+      <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <div class="el-upload__tip">
+              <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的设备数据
+            </div>
+            <span>仅允许导入xls、xlsx格式文件。</span>
+            <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup name="Equipment">
+import { getToken } from "@/utils/auth";
 import { changeStatus, listEquipment, getEquipment, delEquipment, addEquipment, updateEquipment } from "@/api/hnyz/equipment";
 import { getFlowList } from "@/api/hnyz/flow";
 import { getPlcList } from "@/api/hnyz/plcInfo";
@@ -180,6 +207,53 @@ import { getPageList } from '@/api/hnyz/pageControl'
 import { onMounted } from "vue";
 import { useRouter } from 'vue-router'
 
+/*** 设备导入参数 */
+const upload = reactive({
+  // 是否显示弹出层(设备导入)
+  open: false,
+  // 弹出层标题(设备导入)
+  title: "",
+  // 是否禁用上传
+  isUploading: false,
+  // 是否更新已经存在的用户数据
+  updateSupport: 0,
+  // 设置上传的请求头部
+  headers: { Authorization: "Bearer " + getToken() },
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + "/hnyz/equipment/importData"
+});
+
+/** 导入按钮操作 */
+function handleImport() {
+  upload.title = "设备导入";
+  upload.open = true;
+};
+
+/** 下载模板操作 */
+function importTemplate() {
+  proxy.download("/hnyz/equipment/importTemplate", {
+  }, `equipment_template_${new Date().getTime()}.xlsx`);
+};
+
+/**文件上传中处理 */
+const handleFileUploadProgress = (event, file, fileList) => {
+  upload.isUploading = true;
+};
+
+/** 文件上传成功处理 */
+const handleFileSuccess = (response, file, fileList) => {
+  upload.open = false;
+  upload.isUploading = false;
+  proxy.$refs["uploadRef"].handleRemove(file);
+  proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+  getList();
+};
+
+/** 提交上传文件 */
+function submitFileForm() {
+  proxy.$refs["uploadRef"].submit();
+};
+
 const router = useRouter()
 onMounted(() => {
   getOptions();