From a0469a082320c33fc19d4e7239b7ddde67945227 Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: 星期四, 03 七月 2025 14:07:53 +0800
Subject: [PATCH] 修改
---
multi-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java | 2
multi-system/src/main/resources/mapper/system/CompanyIndustryTemplateMapper.xml | 18 +++
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/CompanyBasicController.java | 15 +++
multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysCompanyServiceImpl.java | 5 +
multi-system/src/main/java/com/gkhy/exam/system/mapper/CompanyIndustryTemplateMapper.java | 3
multi-system/src/main/java/com/gkhy/exam/system/domain/CompanyIndustryTemplate.java | 11 ++
multi-system/src/main/java/com/gkhy/exam/system/service/CompanyIndustryTemplateService.java | 5 +
multi-system/src/main/java/com/gkhy/exam/system/service/impl/CompanyIndustryTemplateServiceImpl.java | 175 ++++++++++++++++++++++++++++++++++
multi-system/src/main/resources/mapper/system/SysCompanyMapper.xml | 4
multi-system/src/main/java/com/gkhy/exam/system/service/SysCompanyService.java | 5 +
10 files changed, 239 insertions(+), 4 deletions(-)
diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/CompanyBasicController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/CompanyBasicController.java
index 2d623d5..0f6b536 100644
--- a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/CompanyBasicController.java
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/CompanyBasicController.java
@@ -1,6 +1,9 @@
package com.gkhy.exam.admin.controller.web;
+import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.*;
import com.gkhy.exam.system.service.*;
import io.swagger.annotations.Api;
@@ -10,6 +13,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
@Api(tags = "企业基础信息管理")
@RestController
@@ -326,6 +332,15 @@
return companyIndustryTemplateService.deletedCompanyIndustryTemplate(industryTemplateId);
}
+ @RepeatSubmit
+ @Log(title = "行业管理", businessType = BusinessType.DELETE)
+ @ApiOperation(value = "导入行业")
+ @PostMapping("/industryTemplate/upload")
+ public CommonResult uploadQuestion(@RequestParam("file") MultipartFile file) throws IOException {
+ return companyIndustryTemplateService.uploadQuestion(file);
+ }
+
+
}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/CompanyIndustryTemplate.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/CompanyIndustryTemplate.java
index 6e78dbb..b90929e 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/domain/CompanyIndustryTemplate.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/CompanyIndustryTemplate.java
@@ -27,12 +27,21 @@
@NotNull(message = "企业Id不可为空")
@ApiModelProperty(value = "企业ID")
@TableField("company_id")
- private Integer companyId;
+ private Long companyId;
@ApiModelProperty(value = "企业名称")
@TableField("company_name")
private String companyName;
+ @ApiModelProperty(value = "章节")
+ @TableField("chapter")
+ private String chapter;
+
+ @ApiModelProperty(value = "分类")
+ @TableField("type")
+ private String type;
+
+
@ApiModelProperty(value = "模板名称")
@TableField("template_name")
@NotBlank(message = "模板名称不可为空")
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/CompanyIndustryTemplateMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CompanyIndustryTemplateMapper.java
index 68d0ba4..ec0aa5d 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/mapper/CompanyIndustryTemplateMapper.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CompanyIndustryTemplateMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.exam.system.domain.CompanyIndustryTemplate;
import com.gkhy.exam.system.domain.CompanyRoster;
+import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;
import java.util.List;
@@ -12,4 +13,6 @@
List<CompanyIndustryTemplate> selectCompanyIndustryTemplateList(CompanyIndustryTemplate companyId);
int updateCompanyIndustryTemplateById(CompanyIndustryTemplate template);
+
+ int insertIndustrys(@Param("companyIndustryTemplates") List<CompanyIndustryTemplate> companyIndustryTemplates);
}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java
index 7bfe3bb..d00bf46 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java
@@ -66,4 +66,6 @@
List<CompanyPaperStudentVO> getOfflineCompanyPaperStudentCount(@Param("companyIds")List<Long> companyIds,@Param("startTime")String startTime,@Param("endTime")String endTime);
+ List<SysCompany> selectCompanyListS();
+
}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/CompanyIndustryTemplateService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/CompanyIndustryTemplateService.java
index f6c1f8d..a77c846 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/CompanyIndustryTemplateService.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/CompanyIndustryTemplateService.java
@@ -5,6 +5,9 @@
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.system.domain.CompanyIndustryTemplate;
import com.gkhy.exam.system.domain.CompanyRoster;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
public interface CompanyIndustryTemplateService extends IService<CompanyIndustryTemplate> {
CommonPage selectCompanyIndustryTemplateList(CompanyIndustryTemplate companyId);
@@ -14,4 +17,6 @@
CommonResult updateCompanyIndustryTemplate(CompanyIndustryTemplate companyIndustryTemplate);
CommonResult deletedCompanyIndustryTemplate(Integer companyIndustryTemplateId);
+
+ CommonResult uploadQuestion(MultipartFile file) throws IOException;
}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/SysCompanyService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/SysCompanyService.java
index 5cd597a..e26d0d5 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/SysCompanyService.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/SysCompanyService.java
@@ -4,6 +4,8 @@
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.system.domain.SysCompany;
+import java.util.List;
+
/**
* <p>
* 企业表 服务类
@@ -74,4 +76,7 @@
*/
public void assignPeriod(SysCompany company);
+ List<SysCompany> selectCompanyLists();
+
+
}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CompanyIndustryTemplateServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CompanyIndustryTemplateServiceImpl.java
index c500fe4..856bce3 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CompanyIndustryTemplateServiceImpl.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CompanyIndustryTemplateServiceImpl.java
@@ -1,5 +1,6 @@
package com.gkhy.exam.system.service.impl;
+import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
@@ -7,18 +8,27 @@
import com.gkhy.exam.common.exception.ApiException;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
-import com.gkhy.exam.system.domain.CompanyIndustryTemplate;
-import com.gkhy.exam.system.domain.CompanyRoster;
-import com.gkhy.exam.system.domain.SysCompany;
+import com.gkhy.exam.common.utils.StringUtils;
+import com.gkhy.exam.system.domain.*;
import com.gkhy.exam.system.mapper.CompanyIndustryTemplateMapper;
import com.gkhy.exam.system.mapper.CompanyRosterMapper;
+import com.gkhy.exam.system.mapper.SysIndustryTypeMapper;
import com.gkhy.exam.system.service.CompanyIndustryTemplateService;
import com.gkhy.exam.system.service.SysCompanyService;
+import com.gkhy.exam.system.service.SysIndustryTypeService;
+import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+
+import static cn.hutool.poi.excel.cell.CellUtil.getCellValue;
@Service
public class CompanyIndustryTemplateServiceImpl extends ServiceImpl<CompanyIndustryTemplateMapper, CompanyIndustryTemplate> implements CompanyIndustryTemplateService {
@@ -27,6 +37,9 @@
private CompanyIndustryTemplateMapper companyIndustryTemplateMapper;
@Autowired
private SysCompanyService sysCompanyService;
+
+ @Autowired
+ private SysIndustryTypeMapper sysIndustryTypeMapper;
@@ -86,4 +99,160 @@
}
return CommonResult.failed();
}
+
+ @Override
+ public CommonResult uploadQuestion(MultipartFile file) throws IOException {
+ List<CompanyIndustryType> companyIndustryTypes = sysIndustryTypeMapper.selectIndustryTypeList();
+ List<SysCompany> list = sysCompanyService.selectCompanyLists();
+ Workbook workbook = WorkbookFactory.create(file.getInputStream());
+ Sheet sheet = workbook.getSheetAt(0);
+
+// 1. 创建列名-索引映射表
+ Map<String, Integer> columnIndexMap = new HashMap<>();
+ Row headerRow = sheet.getRow(0);
+ for (Cell cell : headerRow) {
+ String headerName = cell.getStringCellValue().trim();
+ columnIndexMap.put(headerName, cell.getColumnIndex());
+ }
+
+// 验证必要列是否存在
+ String[] requiredHeaders = {"章节", "文件记录", "分类", "行业", "企业名称"};
+ List<String> missingHeaders = new ArrayList<>();
+ for (String header : requiredHeaders) {
+ if (!columnIndexMap.containsKey(header)) {
+ missingHeaders.add(header);
+ }
+ }
+ if (!missingHeaders.isEmpty()) {
+ workbook.close();
+ return CommonResult.failed("缺少必要表头: " + String.join(", ", missingHeaders));
+ }
+ List<CompanyIndustryTemplate> companyIndustryTemplates = new ArrayList<>();
+ LoginUserDetails loginUser = SecurityUtils.getLoginUser();
+ DataFormatter dataFormatter = new DataFormatter();
+ StringBuilder errorBuilder = new StringBuilder();
+ // 2. 获取各列的索引
+ int chapterIndex = columnIndexMap.get("章节");
+ int templateNameIndex = columnIndexMap.get("文件记录");
+ int typeIndex = columnIndexMap.get("分类");
+ int industryTypeIndex = columnIndexMap.get("行业");
+ int companyNameIndex = columnIndexMap.get("企业名称");
+ // 3. 从第二行开始处理数据
+ for (int i = 1; i <= sheet.getLastRowNum(); i++) {
+ Row row = sheet.getRow(i);
+ if (row == null) continue;
+
+ CompanyIndustryTemplate template = new CompanyIndustryTemplate();
+ template.setCreateBy(loginUser.getUsername());
+ template.setCreateTime(LocalDateTime.now());
+
+ // 4. 使用动态索引获取单元格
+ template.setChapter(getCellValue(row, chapterIndex, dataFormatter));
+ template.setTemplateName(getCellValue(row, templateNameIndex, dataFormatter));
+ template.setType(getCellValue(row, typeIndex, dataFormatter));
+
+ // 5. 处理行业类型映射
+ String industryName = getCellValue(row, industryTypeIndex, dataFormatter);
+ boolean industryFound = false;
+ for (CompanyIndustryType type : companyIndustryTypes) {
+ if (industryName.equals(type.getName())) {
+ template.setIndustryType(type.getId());
+ industryFound = true;
+ break;
+ }
+ }
+ if (!industryFound) {
+ errorBuilder.append("第").append(i + 1).append("行: 未找到行业[").append(industryName).append("]; ");
+ }
+
+ // 6. 处理企业映射
+ String companyName = getCellValue(row, companyNameIndex, dataFormatter);
+ boolean companyFound = false;
+ for (SysCompany company : list) {
+ if (companyName.equals(company.getName())) {
+ template.setCompanyId(company.getId());
+ companyFound = true;
+ break;
+ }
+ }
+ if (!companyFound) {
+ errorBuilder.append("第").append(i + 1).append("行: 未找到企业[").append(companyName).append("]; ");
+ }
+ if (SecurityUtils.getCompanyId()!=null){
+ template.setCompanyId(SecurityUtils.getCompanyId());
+ }
+
+ companyIndustryTemplates.add(template);
+ }
+
+ // 7. 错误处理
+ if (errorBuilder.length() > 0) {
+ workbook.close();
+ return CommonResult.failed(errorBuilder.toString());
+ }
+
+ // 8. 批量插入
+ int affectedRows = companyIndustryTemplateMapper.insertIndustrys(companyIndustryTemplates);
+ workbook.close();
+
+ if (affectedRows < 1) {
+ throw new ApiException("导入行业模版失败");
+ }
+ return CommonResult.success();
+ }
+ // 安全获取单元格值
+ private String getCellValue(Row row, int columnIndex, DataFormatter formatter) {
+ if (columnIndex < 0) return "";
+ Cell cell = row.getCell(columnIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
+ return formatter.formatCellValue(cell).trim();
+ }
+
+// List<CompanyIndustryType> companyIndustryTypes = sysIndustryTypeMapper.selectIndustryTypeList();
+// List<SysCompany> list = sysCompanyService.selectCompanyLists();
+// Workbook workbook = WorkbookFactory.create(file.getInputStream());
+// Sheet sheetAt = workbook.getSheetAt(0);
+// List<CompanyIndustryTemplate> companyIndustryTemplates = new ArrayList<>();
+// LoginUserDetails loginUser = SecurityUtils.getLoginUser();
+// DataFormatter dataFormatter = new DataFormatter();
+// StringBuilder stringBuilder = new StringBuilder();
+// for (int i = 0; i <sheetAt.getLastRowNum(); i++) {
+// Row row = sheetAt.getRow(i + 1);
+// CompanyIndustryTemplate companyIndustryTemplate = new CompanyIndustryTemplate();
+// if (row!=null){
+// companyIndustryTemplate.setChapter(dataFormatter.formatCellValue(row.getCell(0)));
+// companyIndustryTemplate.setTemplateName(dataFormatter.formatCellValue(row.getCell(1)));
+// companyIndustryTemplate.setType(dataFormatter.formatCellValue(row.getCell(2)));
+// for (CompanyIndustryType companyIndustryType : companyIndustryTypes) {
+// if (dataFormatter.formatCellValue(row.getCell(3)).equals(companyIndustryType.getName())){
+// companyIndustryTemplate.setIndustryType(companyIndustryType.getId());
+// }
+// }
+// if (companyIndustryTemplate.getIndustryType()==null){
+// stringBuilder.append("未找到对应行业类型:["+dataFormatter.formatCellValue(row.getCell(3))+"] ,");
+// }
+// companyIndustryTemplate.setCreateBy(loginUser.getUsername());
+// companyIndustryTemplate.setCreateTime(LocalDateTime.now());
+// for (SysCompany sysCompany : list) {
+// if (dataFormatter.formatCellValue(row.getCell(4)).equals(sysCompany.getName())){
+// companyIndustryTemplate.setCompanyId(sysCompany.getId());
+// }
+// }
+// if (companyIndustryTemplate.getCompanyId()==null){
+// stringBuilder.append("未找到对应企业:["+dataFormatter.formatCellValue(row.getCell(4))+"]");
+// }
+// companyIndustryTemplates.add(companyIndustryTemplate);
+// }
+// }
+// if (StringUtils.isNotBlank(stringBuilder)){
+// workbook.close();
+// return CommonResult.failed(stringBuilder.toString());
+// }
+// int i = companyIndustryTemplateMapper.insertIndustrys(companyIndustryTemplates);
+// if (i<1){
+// throw new ApiException("导入行业模版失败");
+// }
+// workbook.close();
+// return CommonResult.success();
+
+
}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysCompanyServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysCompanyServiceImpl.java
index f412993..64651af 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysCompanyServiceImpl.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysCompanyServiceImpl.java
@@ -101,4 +101,9 @@
throw new ApiException("分配课时失败");
}
}
+
+ @Override
+ public List<SysCompany> selectCompanyLists() {
+ return baseMapper.selectCompanyListS();
+ }
}
diff --git a/multi-system/src/main/resources/mapper/system/CompanyIndustryTemplateMapper.xml b/multi-system/src/main/resources/mapper/system/CompanyIndustryTemplateMapper.xml
index a8011e9..cf772ec 100644
--- a/multi-system/src/main/resources/mapper/system/CompanyIndustryTemplateMapper.xml
+++ b/multi-system/src/main/resources/mapper/system/CompanyIndustryTemplateMapper.xml
@@ -1,6 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gkhy.exam.system.mapper.CompanyIndustryTemplateMapper">
+ <insert id="insertIndustrys">
+ INSERT INTO `company_industry_template` (
+ `company_id`,`chapter`,`type`,`template_name`,`industry_type`,`create_by`,`create_time`
+ )
+ VALUES
+ <foreach collection="companyIndustryTemplates" separator="," item="item">
+ (#{item.companyId},#{item.chapter},#{item.type},#{item.templateName},#{item.industryType},
+ #{item.createBy},#{item.createTime})
+ </foreach>
+ </insert>
<update id="updateCompanyIndustryTemplateById" parameterType="com.gkhy.exam.system.domain.CompanyIndustryTemplate">
UPDATE company_industry_template
<set>
@@ -9,6 +19,9 @@
</if>
<if test="companyName != null and companyName != ''" >
company_name = #{companyName},
+ </if>
+ <if test="chapter!=null and chapter!=''">
+ chapter = #{chapter},
</if>
<if test="templateName != null and templateName !=''" >
template_name = #{templateName},
@@ -49,6 +62,8 @@
ci.`id`,
ci.`company_id`,
ci.`company_name`,
+ ci.chapter,
+ ci.`type`,
ci.`template_name`,
ci.`industry_type`,
cit.name as industry_name,
@@ -71,6 +86,9 @@
<if test="industryType!=null">
and ci.industry_type = #{industryType}
</if>
+ <if test="type!=null and type!=''">
+ and ci.type like concat('%',#{type},'%')
+ </if>
ORDER BY
ci.create_time DESC
</select>
diff --git a/multi-system/src/main/resources/mapper/system/SysCompanyMapper.xml b/multi-system/src/main/resources/mapper/system/SysCompanyMapper.xml
index 5560830..7c3e301 100644
--- a/multi-system/src/main/resources/mapper/system/SysCompanyMapper.xml
+++ b/multi-system/src/main/resources/mapper/system/SysCompanyMapper.xml
@@ -151,4 +151,8 @@
</if>
group by a.company_id
</select>
+ <select id="selectCompanyListS" resultType="com.gkhy.exam.system.domain.SysCompany">
+ select id, name, credit_code, major, phone,remain_period,total_period,version, create_by, create_time, update_by, update_time, remark
+ from sys_company where del_flag = 0
+ </select>
</mapper>
--
Gitblit v1.9.2