jinxia.mo 1 місяць тому
батько
коміт
55354277d9

+ 99 - 0
back-ui/src/views/system/bBusiWishUniversitiesEnrollBrochure/index.vue

@@ -162,6 +162,15 @@
           v-hasPermi="['system:bBusiWishUniversitiesEnrollBrochure:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="Upload"
+          @click="handleImport"
+          v-hasPermi="['system:bBusiWishUniversitiesEnrollBrochure:import']"
+        >导入</el-button>
+      </el-col>
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -347,6 +356,29 @@
         </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" :on-change="handleFileChange" :on-remove="handleFileRemove" :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>
 
@@ -354,6 +386,8 @@
 import { listBBusiWishUniversitiesEnrollBrochure, getBBusiWishUniversitiesEnrollBrochure, delBBusiWishUniversitiesEnrollBrochure, addBBusiWishUniversitiesEnrollBrochure, updateBBusiWishUniversitiesEnrollBrochure, getBrochureTypes } from "@/api/system/bBusiWishUniversitiesEnrollBrochure"
 import { listAllBBusiWishUniversities } from "@/api/system/bBusiWishUniversities"
 import { ElMessageBox } from "element-plus/es"
+import { UploadFilled } from "@element-plus/icons-vue"
+import { getToken } from "@/utils/auth"
 
 
 const { proxy } = getCurrentInstance()
@@ -371,6 +405,24 @@ const title = ref("")
 const collegeList = ref([])
 const brochureTypeList = ref([])
 
+/** 导入参数 */
+const upload = reactive({
+  // 是否显示弹出层(导入)
+  open: false,
+  // 弹出层标题(导入)
+  title: "",
+  // 是否禁用上传
+  isUploading: false,
+  // 是否更新已经存在的数据
+  updateSupport: 0,
+  // 设置上传的请求头部
+  headers: { Authorization: "Bearer " + getToken() },
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + "/system/bBusiWishUniversitiesEnrollBrochure/importUniversityBrochure",
+  // 选中的文件
+  selectedFile: null
+})
+
 const data = reactive({
   form: {},
   queryParams: {
@@ -633,6 +685,53 @@ function handleDelete(row) {
   }).catch(() => {})
 }
 
+/** 导入按钮操作 */
+function handleImport() {
+  upload.title = "院校简章导入"
+  upload.open = true
+  upload.selectedFile = null
+}
+
+/** 下载模板操作 */
+function importTemplate() {
+  proxy.download("system/bBusiWishUniversitiesEnrollBrochure/importTemplate", {
+  }, `university_brochure_template_${new Date().getTime()}.xlsx`)
+}
+
+/** 文件上传中处理 */
+const handleFileUploadProgress = (event, file, fileList) => {
+  upload.isUploading = true
+}
+
+/** 文件选择处理 */
+const handleFileChange = (file, fileList) => {
+  upload.selectedFile = file
+}
+
+/** 文件删除处理 */
+const handleFileRemove = (file, fileList) => {
+  upload.selectedFile = null
+}
+
+/** 文件上传成功处理 */
+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() {
+  const file = upload.selectedFile
+  if (!file || file.length === 0 || (!file.name.toLowerCase().endsWith('.xls') && !file.name.toLowerCase().endsWith('.xlsx'))) {
+    proxy.$modal.msgError('请选择后缀为 "xls"或"xlsx" 的文件。')
+    return
+  }
+  proxy.$refs["uploadRef"].submit()
+}
+
 /** 导出按钮操作 */
 function handleExport() {
   proxy.download('system/bBusiWishUniversitiesEnrollBrochure/export', {

+ 41 - 0
ie-admin/src/main/java/com/ruoyi/web/controller/dz/BBusiWishUniversitiesEnrollBrochureController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web.controller.dz;
 
+import java.util.ArrayList;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 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 com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -112,4 +114,43 @@ public class BBusiWishUniversitiesEnrollBrochureController extends BaseControlle
         List<BBusiWishUniversitiesEnrollBrochure> types = bBusiWishUniversitiesEnrollBrochureService.getBrochureTypes();
         return success(types);
     }
+
+    /**
+     * 导入院校简章数据
+     */
+    @Log(title = "院校简章导入", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:bBusiWishUniversitiesEnrollBrochure:import')")
+    @PostMapping("/importUniversityBrochure")
+    public AjaxResult importUniversityBrochure(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<BBusiWishUniversitiesEnrollBrochure> util = new ExcelUtil<BBusiWishUniversitiesEnrollBrochure>(BBusiWishUniversitiesEnrollBrochure.class);
+        List<BBusiWishUniversitiesEnrollBrochure> brochureList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = bBusiWishUniversitiesEnrollBrochureService.importUniversityBrochure(brochureList, updateSupport, operName);
+        return success(message);
+    }
+
+    /**
+     * 下载院校简章导入模板
+     */
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<BBusiWishUniversitiesEnrollBrochure> util = new ExcelUtil<BBusiWishUniversitiesEnrollBrochure>(BBusiWishUniversitiesEnrollBrochure.class);
+        // 创建示例数据
+        BBusiWishUniversitiesEnrollBrochure sample = new BBusiWishUniversitiesEnrollBrochure();
+        sample.setYear(2026);
+        sample.setCollegeCode("12423");
+        sample.setCollegeName("湖南体育职业学院");
+        sample.setTitle("湖南体育职业学院2026年招生章程");
+        sample.setType(2);
+        sample.setUrl("https://mingxuejingbang.oss-cn-beijing.aliyuncs.com/danzhaoyikatong/kaoshidagang/2026/湘潭医卫职业技术学院2026年单独招生考试大纲.pdf");
+        sample.setTypeName("招生章程");
+        
+        List<BBusiWishUniversitiesEnrollBrochure> sampleList = new ArrayList<>();
+        sampleList.add(sample);
+        
+        // 使用 exportExcel 方法生成包含示例数据的模板
+        util.exportExcel(response, sampleList, "院校简章数据");
+    }
 }

+ 44 - 16
ie-system/src/main/java/com/ruoyi/syzy/domain/BBusiWishUniversitiesEnrollBrochure.java

@@ -13,7 +13,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
  * @author voluntary
  * @date 2024-09-27
  */
-public class BBusiWishUniversitiesEnrollBrochure extends BaseEntity
+public class BBusiWishUniversitiesEnrollBrochure
 {
     private static final long serialVersionUID = 1L;
 
@@ -33,12 +33,11 @@ public class BBusiWishUniversitiesEnrollBrochure extends BaseEntity
     private String collegeName;
 
     /** 编辑 */
-    @Excel(name = "编辑")
+//    @Excel(name = "编辑")
     private String editor;
-    private String url;
 
     /** summary */
-    @Excel(name = "summary")
+//    @Excel(name = "summary")
     private String summary;
 
     /** 标题 */
@@ -46,49 +45,78 @@ public class BBusiWishUniversitiesEnrollBrochure extends BaseEntity
     private String title;
 
     /** isArt */
-    @Excel(name = "isArt")
+//    @Excel(name = "isArt")
     private Integer isArt;
 
     /** 类型 */
     @Excel(name = "类型")
     private Integer type;
 
+    /** 类型名称 */
+    @Excel(name = "类型名称")
+    private String typeName;
+
+    /** URL */
+    @Excel(name = "链接")
+    private String url;
+
     /** 元数据描述 */
-    @Excel(name = "元数据描述")
+//    @Excel(name = "元数据描述")
     private String metaDescription;
 
     /** 简章内容 */
-    @Excel(name = "简章内容")
+//    @Excel(name = "简章内容")
     private String content;
 
     /** tags */
-    @Excel(name = "tags")
+//    @Excel(name = "tags")
     private String tags;
 
     /** 是否显示(1是,0否) */
-    @Excel(name = "是否显示", readConverterExp = "1=是,0否")
+//    @Excel(name = "是否显示", readConverterExp = "1=是,0否")
     private Integer isShow;
 
     /** 点击量 */
-    @Excel(name = "点击量")
+//    @Excel(name = "点击量")
     private Long hits;
 
     /** 元数据关键词 */
-    @Excel(name = "元数据关键词")
+//    @Excel(name = "元数据关键词")
     private String metaKeywords;
 
     /** 排名 */
-    @Excel(name = "排名")
+//    @Excel(name = "排名")
     private Long rank;
 
     /** 数据库创建日期 */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "数据库创建日期", width = 30, dateFormat = "yyyy-MM-dd")
+//    @Excel(name = "数据库创建日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date createTime2;
 
-    /** $column.columnComment */
-    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-    private String typeName;
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    @Excel(name = "创建时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
 
     public void setId(Long id)
     {

+ 10 - 0
ie-system/src/main/java/com/ruoyi/syzy/service/IBBusiWishUniversitiesEnrollBrochureService.java

@@ -65,4 +65,14 @@ public interface IBBusiWishUniversitiesEnrollBrochureService
      * @return 类型列表
      */
     public List<BBusiWishUniversitiesEnrollBrochure> getBrochureTypes();
+
+    /**
+     * 导入院校简章数据
+     *
+     * @param brochureList 院校简章数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param operName 操作用户
+     * @return 结果
+     */
+    public String importUniversityBrochure(List<BBusiWishUniversitiesEnrollBrochure> brochureList, Boolean isUpdateSupport, String operName);
 }

+ 77 - 0
ie-system/src/main/java/com/ruoyi/syzy/service/impl/BBusiWishUniversitiesEnrollBrochureServiceImpl.java

@@ -1,8 +1,11 @@
 package com.ruoyi.syzy.service.impl;
 
 import java.util.List;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.syzy.mapper.BBusiWishUniversitiesEnrollBrochureMapper;
@@ -18,6 +21,8 @@ import com.ruoyi.syzy.service.IBBusiWishUniversitiesEnrollBrochureService;
 @Service
 public class BBusiWishUniversitiesEnrollBrochureServiceImpl implements IBBusiWishUniversitiesEnrollBrochureService
 {
+    private static final Logger log = LoggerFactory.getLogger(BBusiWishUniversitiesEnrollBrochureServiceImpl.class);
+
     @Autowired
     private BBusiWishUniversitiesEnrollBrochureMapper bBusiWishUniversitiesEnrollBrochureMapper;
 
@@ -111,4 +116,76 @@ public class BBusiWishUniversitiesEnrollBrochureServiceImpl implements IBBusiWis
     {
         return bBusiWishUniversitiesEnrollBrochureMapper.selectDistinctTypes();
     }
+
+    /**
+     * 导入章程简章数据
+     *
+     * @param brochureList 章程简章数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param operName 操作用户
+     * @return 结果
+     */
+    @Override
+    public String importUniversityBrochure(List<BBusiWishUniversitiesEnrollBrochure> brochureList, Boolean isUpdateSupport, String operName)
+    {
+        if (StringUtils.isNull(brochureList) || brochureList.size() == 0)
+        {
+            throw new ServiceException("导入章程简章数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (BBusiWishUniversitiesEnrollBrochure brochure : brochureList)
+        {
+            try
+            {
+                // 根据年份、学校编码、标题判断是否存在
+                BBusiWishUniversitiesEnrollBrochure query = new BBusiWishUniversitiesEnrollBrochure();
+                query.setYear(brochure.getYear());
+                query.setCollegeCode(brochure.getCollegeCode());
+                query.setTitle(brochure.getTitle());
+                List<BBusiWishUniversitiesEnrollBrochure> existList = bBusiWishUniversitiesEnrollBrochureMapper.selectBBusiWishUniversitiesEnrollBrochureList(query);
+
+                if (StringUtils.isNull(existList) || existList.size() == 0)
+                {
+                    // 不存在,执行新增
+                    insertBBusiWishUniversitiesEnrollBrochure(brochure);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、章程简章 " + brochure.getTitle() + " 导入成功");
+                }
+                else if (isUpdateSupport)
+                {
+                    // 存在且支持更新,执行更新
+                    BBusiWishUniversitiesEnrollBrochure existBrochure = existList.get(0);
+                    brochure.setId(existBrochure.getId());
+                    updateBBusiWishUniversitiesEnrollBrochure(brochure);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、章程简章 " + brochure.getTitle() + " 更新成功");
+                }
+                else
+                {
+                    failureNum++;
+                    failureMsg.append("<br/>" + failureNum + "、章程简章 " + brochure.getTitle() + " 已存在");
+                }
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、章程简章 " + brochure.getTitle() + " 导入失败:";
+                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();
+    }
 }