update:新增社团添加唯一性校验;添加参会信息导入接口了;修改模板

This commit is contained in:
sunzheng
2024-09-14 18:20:18 +08:00
parent 14818f4854
commit 7f2db3b7a7
10 changed files with 362 additions and 31 deletions
@@ -221,5 +221,7 @@ public class ResultCommon {
// 当前节点下存在子集
public static final String NODE_EXIST_SUBSETS = "node.exist.subsets";
// 社团名称不能重复
public static final String CLUB_ALREADY_EXISTS = "club.already.exists";
}
@@ -12,7 +12,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import org.springframework.format.annotation.DateTimeFormat;
/**
@@ -37,8 +36,8 @@ public class LawsClub implements Serializable {
private String id;
@ApiModelProperty(value = "上级节点id")
@Dict(dictTable = "laws_club", dicCode = "id", dicText = "node_type")
@Excel(name = "上级节点", width = 20, dicText = "node_type", dicCode = "id", dictTable = "laws_club")
@Dict(dictTable = "laws_club", dicCode = "id", dicText = "club_name")
@Excel(name = "上级节点", width = 20, dicText = "club_name", dicCode = "id", dictTable = "laws_club")
private String parentId;
@ApiModelProperty(value = "节点类型")
@@ -87,7 +86,6 @@ public class LawsClub implements Serializable {
@TableField(exist = false)
@ApiModelProperty(value = "入团信息列表数据")
// @ExcelCollection(name = "入团信息")
private List<LawsClubJoinTeam> lawsClubJoinTeamList;
@TableField(exist = false)
@@ -96,7 +94,6 @@ public class LawsClub implements Serializable {
@TableField(exist = false)
@ApiModelProperty(value = "参会信息列表数据")
// @ExcelCollection(name = "参会信息")
private List<LawsClubMeeting> lawsClubMeetings;
@TableField(exist = false)
@@ -105,7 +102,6 @@ public class LawsClub implements Serializable {
@TableField(exist = false)
@ApiModelProperty(value = "征集调研信息列表数据")
// @ExcelCollection(name = "征集调研信息")
private List<LawsClubResearchInformation> lawsClubResearchInformations;
@TableField(exist = false)
@@ -64,8 +64,7 @@ public class LawsClubJoinTeamServiceImpl extends ServiceImpl<LawsClubJoinTeamMap
// 创建一个Excel工作簿
String describe = "填写说明:\n" +
"1.所有带星号的为必填\n" +
"2.导入数据从第四行开始,第一行为表头,第二行为填写说明,第三行为示例。第四行才是正式数据\n" +
"3.社团名称需要与系统中的社团名称匹配。";
"2.导入数据从第四行开始,第一行为表头,第二行为填写说明,第三行为示例。第四行才是正式数据";
String fieldTxts = "入团日期,社团职务担任者,入团经费,社团简介,部门名称,专业模块,申请人,秘书处,联系人,备注";
String mustInputFlags = "no,no,no,no,no,no,no,no,no,no";
String fieldTypeLists = "2,1,1,1,1,1,1,1,1,1"; // 1代表是文本输入类型 2代表日期输入
@@ -1,22 +1,50 @@
package com.jero.modules.laws.club.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.DictModel;
import com.jero.modules.laws.club.entity.LawsClubMeeting;
import com.jero.modules.laws.club.mapper.LawsClubMeetingMapper;
import com.jero.modules.laws.club.service.ILawsClubMeetingService;
import com.jero.modules.laws.club.utils.ExcelUtil;
import com.jero.modules.laws.club.vo.excel.LawsClubMeetingExcel;
import com.jero.modules.laws.club.vo.excel.LawsClubMeetingMemberExcel;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.system.entity.SysDepart;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysDepartService;
import com.jero.modules.system.service.ISysDictService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.tag.entity.LawsTag;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
@@ -29,6 +57,16 @@ import java.util.List;
@Service
public class LawsClubMeetingServiceImpl extends ServiceImpl<LawsClubMeetingMapper, LawsClubMeeting> implements ILawsClubMeetingService {
@Resource
private ISysUserService sysUserService;
@Resource
private ISysDepartService sysDepartService;
@Resource
private ISysDictService sysDictService;
@Resource
private IOSSFileService iossFileService;
@Override
@SneakyThrows
public void exportTemplate(HttpServletRequest request, HttpServletResponse response) {
@@ -36,8 +74,7 @@ public class LawsClubMeetingServiceImpl extends ServiceImpl<LawsClubMeetingMappe
String describe = "填写说明:\n" +
"1.所有带星号的为必填\n" +
"2.导入数据从第四行开始,第一行为表头,第二行为填写说明,第三行为示例。第四行才是正式数据\n" +
"3.一条参会信息中如有多个参会人,需要按照每个参会人一行数据进行展示,参会基本信息合并展示。\n" +
"4.社团名称需要与系统中的社团名称匹配。";
"3.一条参会信息中如有多个参会人,需要按照每个参会人一行数据进行展示,参会基本信息合并展示。";
String fieldTxts = "会议名称,会议日期,会议费用,线上/线下地点,计划完成日期,通知人,通知部门,通知部门专业模块," +
"是否宣贯,会议组织人,会议内容,参会人员,参会部门,参会部门专业模块,参会报告,备注";
String mustInputFlags = "no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no";
@@ -61,6 +98,274 @@ public class LawsClubMeetingServiceImpl extends ServiceImpl<LawsClubMeetingMappe
@Override
public Result<?> importExcel(HttpServletRequest request) {
return null;
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
List<LawsClubMeeting> lawsClubMeetingList = new ArrayList<>();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
try {
ImportParams params = new ImportParams();
params.setNeedSave(false);
List<LawsClubMeetingExcel> excelList = ExcelImportUtil.importExcel(file.getInputStream(), LawsClubMeetingExcel.class, params);
excelList = excelList.stream().skip(2).filter(item -> !Objects.isNull(item)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(excelList)) {
throw new JeroBootException("没有数据可导入");
}
// 处理分类数据
List<LawsClubMeetingExcel> meetingExcels = processingMeetingData(excelList);
StringBuilder msg = validateExcelData(meetingExcels); // 校验数据
if (StringUtils.isNotEmpty(msg.toString())) {
return Result.error(msg.toString());
}
// 保存数据
for (LawsClubMeetingExcel lawsClubMeetingExcel : meetingExcels) {
LawsClubMeeting lawsClubMeeting = new LawsClubMeeting();
BeanUtils.copyProperties(lawsClubMeetingExcel, lawsClubMeeting);
lawsClubMeetingList.add(lawsClubMeeting);
}
}catch (Exception e) {
log.error(e.getMessage(),e);
return Result.error("文件导入失败:"+e.getMessage());
} finally {
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Result.OK(lawsClubMeetingList);
}
private StringBuilder validateExcelData(List<LawsClubMeetingExcel> meetingExcels) {
StringBuilder msg = new StringBuilder();
// 拿到这个流程的名称
List<DictModel> specializedModuleList = sysDictService.getDictItems("professional_module");
List<DictModel> ynList = sysDictService.getDictItems("yn");
Map<String, String> specializedModuleMap = specializedModuleList.stream().collect(Collectors.toMap(DictModel::getText, DictModel::getValue));
Map<String, String> ynMap = ynList.stream().collect(Collectors.toMap(DictModel::getText, DictModel::getValue));
for (int i = 0; i < meetingExcels.size(); i++) {
LawsClubMeetingExcel lawsClubMeetingExcel = meetingExcels.get(i);
StringBuilder msgSub = new StringBuilder();
// 校验会议日期
if (StringUtils.isNotBlank(lawsClubMeetingExcel.getMeetingDate())) {
try {
LocalDate.parse(lawsClubMeetingExcel.getMeetingDate());
} catch (Exception e) {
msgSub.append(getErrorMsg(i, "会议日期格式不正确;"));
}
}
// 校验计划完成日期
if (StringUtils.isNotBlank(lawsClubMeetingExcel.getPlanCompletionDate())) {
try {
LocalDate.parse(lawsClubMeetingExcel.getPlanCompletionDate());
} catch (Exception e) {
msgSub.append(getErrorMsg(i, "计划完成日期格式不正确;"));
}
}
// 校验通知人
if (StringUtils.isNotBlank(lawsClubMeetingExcel.getNotifierId())) {
String fullName = extractFullName(lawsClubMeetingExcel.getNotifierId());
String notifierId = extractEmployeeId(lawsClubMeetingExcel.getNotifierId());
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, notifierId).eq(SysUser::getRealname,fullName),false);
if (Objects.isNull(sysUser)) {
msgSub.append(getErrorMsg(i, "通知人不存在;"));
}else {
lawsClubMeetingExcel.setNotifierId(sysUser.getId());
}
}
// 校验通知部门
if (StringUtils.isNotBlank(lawsClubMeetingExcel.getNotifyDepartId())) {
List<SysDepart> sysDepart = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().eq(SysDepart::getDepartName, lawsClubMeetingExcel.getNotifyDepartId()));
if (CollectionUtils.isEmpty(sysDepart)) {
msgSub.append(getErrorMsg(i, "通知部门不存在;"));
}else {
lawsClubMeetingExcel.setNotifyDepartId((sysDepart.get(0).getId()));
}
}
// 校验通知部门专业模块
if (StringUtils.isNotBlank(lawsClubMeetingExcel.getInformSpecializedModule())) {
String informSpecializedModule = specializedModuleMap.get(lawsClubMeetingExcel.getInformSpecializedModule());
if (StringUtils.isBlank(informSpecializedModule)) {
msgSub.append(getErrorMsg(i, "通知部门专业模块不存在;"));
}else {
lawsClubMeetingExcel.setInformSpecializedModule(informSpecializedModule);
}
}
// 校验是否宣贯
if (StringUtils.isNotBlank(lawsClubMeetingExcel.getIsPublicize())) {
String isPublicize = ynMap.get(lawsClubMeetingExcel.getIsPublicize());
if (StringUtils.isBlank(isPublicize)) {
msgSub.append(getErrorMsg(i, "是否宣贯请填写是或否;"));
}else {
lawsClubMeetingExcel.setIsPublicize(isPublicize);
}
}
List<LawsClubMeetingMemberExcel> meetingMemberList = lawsClubMeetingExcel.getMeetingMemberList();
// 校验参会人员的信息
for (LawsClubMeetingMemberExcel lawsClubMeetingMemberExcel : meetingMemberList) {
// 校验参会人员
if (StringUtils.isNotBlank(lawsClubMeetingMemberExcel.getMemberId())) {
String fullName = extractFullName(lawsClubMeetingMemberExcel.getMemberId());
String memberId = extractEmployeeId(lawsClubMeetingMemberExcel.getMemberId());
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, memberId).eq(SysUser::getRealname, fullName),false);
if (Objects.isNull(sysUser)) {
msgSub.append(getErrorMsg(i, "参会人员:" + lawsClubMeetingMemberExcel.getMemberId() + "不存在;"));
}else {
lawsClubMeetingMemberExcel.setMemberId(sysUser.getId());
}
}
// 校验参会部门
if (StringUtils.isNotBlank(lawsClubMeetingMemberExcel.getDepartId())) {
List<SysDepart> sysDepart = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().eq(SysDepart::getDepartName, lawsClubMeetingMemberExcel.getDepartId()));
if (CollectionUtils.isEmpty(sysDepart)) {
msgSub.append(getErrorMsg(i, "参会部门:" + lawsClubMeetingMemberExcel.getDepartId() + "不存在;"));
}else {
lawsClubMeetingMemberExcel.setDepartId((sysDepart.get(0).getId()));
}
}
// 校验参会部门专业模块
if (StringUtils.isNotBlank(lawsClubMeetingMemberExcel.getMeetingSpecializedModule())) {
String meetingSpecializedModule = specializedModuleMap.get(lawsClubMeetingMemberExcel.getMeetingSpecializedModule());
if (StringUtils.isBlank(meetingSpecializedModule)) {
msgSub.append(getErrorMsg(i, "参会部门专业模块:" + lawsClubMeetingMemberExcel.getMeetingSpecializedModule() + "不存在;"));
}else {
lawsClubMeetingMemberExcel.setMeetingSpecializedModule(meetingSpecializedModule);
}
}
// 校验参会报告
if (StringUtils.isNotBlank(lawsClubMeetingMemberExcel.getMeetingFileId())) {
List<OSSFile> ossFiles = iossFileService.list(new LambdaQueryWrapper<OSSFile>()
.eq(OSSFile::getFileName, lawsClubMeetingMemberExcel.getMeetingFileId())
.orderByDesc(OSSFile::getCreateTime)
.last("LIMIT 1"));
if (CollectionUtils.isEmpty(ossFiles)) {
msgSub.append(getErrorMsg(i, "参会报告:" + lawsClubMeetingMemberExcel.getMeetingFileId() + "不存在;"));
}else {
lawsClubMeetingMemberExcel.setMeetingFileId(ossFiles.get(0).getId());
}
}
}
if (msgSub.length() > 0) {
msg.append(msgSub).append("</br>");
}
}
return msg;
}
// 错误消息格式化
private String getErrorMsg(int rowIndex, String errorMsg) {
return "" + (rowIndex + 4) + "" + errorMsg;
}
public String extractEmployeeId(String input) {
// 正则表达式,匹配括号内的内容
Pattern pattern = Pattern.compile("\\((.*?)\\)");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
return matcher.group(1); // 返回匹配到的内容,即括号中的内容
}
return input; // 如果没有匹配到,返回null
}
private String extractFullName(String notifierId) {
int startIndex = notifierId.indexOf('(');
if (startIndex != -1) {
return notifierId.substring(0, startIndex).trim(); // 提取括号前的部分并去除前后的空格
}
return notifierId; // 如果没有括号,则返回整个字符串
}
private List<LawsClubMeetingExcel> processingMeetingData(List<LawsClubMeetingExcel> excelList) {
// 用于存储有效的会议记录
List<LawsClubMeetingExcel> validMeetings = new ArrayList<>();
LawsClubMeetingExcel currentMeeting = null;
// 遍历所有记录
for (LawsClubMeetingExcel record : excelList) {
// 检查记录是否有效
boolean isMeetingValid = isMeetingValid(record);
boolean isMemberValid = isMemberValidForMeeting(record);
// 如果记录是有效的会议记录
if (isMeetingValid) {
// 如果有当前会议记录,保存到有效会议列表
if (currentMeeting != null) {
validMeetings.add(currentMeeting);
}
// 创建新的会议对象
currentMeeting = new LawsClubMeetingExcel();
currentMeeting.setClubId(record.getClubId());
currentMeeting.setMeetingName(record.getMeetingName());
currentMeeting.setMeetingDate(record.getMeetingDate());
currentMeeting.setMeetingCost(record.getMeetingCost());
currentMeeting.setMeetingPlace(record.getMeetingPlace());
currentMeeting.setPlanCompletionDate(record.getPlanCompletionDate());
currentMeeting.setNotifierId(record.getNotifierId());
currentMeeting.setNotifyDepartId(record.getNotifyDepartId());
currentMeeting.setInformSpecializedModule(record.getInformSpecializedModule());
currentMeeting.setIsPublicize(record.getIsPublicize());
currentMeeting.setMeetingOrganizer(record.getMeetingOrganizer());
currentMeeting.setMeetingContent(record.getMeetingContent());
// 初始化成员列表
currentMeeting.setMeetingMemberList(new ArrayList<>());
// 如果当前记录中的成员信息有效,则创建成员对象并添加到会议的成员列表中
if (isMemberValid) {
LawsClubMeetingMemberExcel member = new LawsClubMeetingMemberExcel();
member.setMemberId(record.getMemberId());
member.setDepartId(record.getDepartId());
member.setMeetingSpecializedModule(record.getMeetingSpecializedModule());
member.setMeetingFileId(record.getMeetingFileId());
member.setRemark(record.getRemark());
currentMeeting.getMeetingMemberList().add(member);
}
} else if (currentMeeting != null && isMemberValid) {
// 如果会议记录无效但成员记录有效,将成员信息添加到当前有效会议的成员列表中
LawsClubMeetingMemberExcel member = new LawsClubMeetingMemberExcel();
member.setDepartId(record.getDepartId());
member.setMeetingSpecializedModule(record.getMeetingSpecializedModule());
member.setMeetingFileId(record.getMeetingFileId());
member.setRemark(record.getRemark());
currentMeeting.getMeetingMemberList().add(member);
}
}
// 处理最后一个会议对象
if (currentMeeting != null) {
validMeetings.add(currentMeeting);
}
// 清理掉无效的会议记录
validMeetings = validMeetings.stream()
.filter(meeting -> isMeetingValid(meeting))
.collect(Collectors.toList());
return validMeetings;
}
// 判断会议记录是否有效
public boolean isMeetingValid(LawsClubMeetingExcel record) {
return Stream.of(
record.getMeetingName(),
record.getMeetingCost(),
record.getMeetingDate(),
record.getPlanCompletionDate(),
record.getMeetingPlace(),
record.getNotifierId(),
record.getNotifyDepartId(),
record.getInformSpecializedModule(),
record.getIsPublicize(),
record.getMeetingOrganizer(),
record.getMeetingContent()
).anyMatch(value -> value != null && !value.isEmpty());
}
// 判断成员记录是否有效
public boolean isMemberValidForMeeting(LawsClubMeetingExcel record) {
return Stream.of(
record.getMemberId(),
record.getDepartId(),
record.getMeetingSpecializedModule(),
record.getMeetingFileId(),
record.getRemark()
).anyMatch(value -> value != null && !value.isEmpty());
}
}
@@ -66,8 +66,7 @@ public class LawsClubResearchInformationServiceImpl extends ServiceImpl<LawsClub
// 创建一个Excel工作簿
String describe = "填写说明:\n" +
"1.所有带星号的为必填\n" +
"2.导入数据从第四行开始,第一行为表头,第二行为填写说明,第三行为示例。第四行才是正式数据\n" +
"3.社团名称需要与系统中的社团名称匹配。";
"2.导入数据从第四行开始,第一行为表头,第二行为填写说明,第三行为示例。第四行才是正式数据";
String fieldTxts = "名称,内容,接收日期,截止日期,专业接口人,专业模块,反馈人,反馈部门,反馈部门专业模块,反馈情况,任务来源,盖章流程完成情况,所属社团";
String mustInputFlags = "no,no,no,no,no,no,no,no,no,no,no,no,no";
String fieldTypeLists = "1,1,2,2,3,1,3,1,1,1,1,1,1"; // 1代表是文本输入类型 2代表日期输入 3代表 文本输入,姓名(工号)
@@ -157,7 +156,8 @@ public class LawsClubResearchInformationServiceImpl extends ServiceImpl<LawsClub
// 校验专业接口人
if (StringUtils.isNotBlank(lawsClubResearchInformationExcel.getSpecializedInterfacePerson())) {
String specializedInterfacePerson = extractEmployeeId(lawsClubResearchInformationExcel.getSpecializedInterfacePerson());
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, specializedInterfacePerson),false);
String fullName = extractFullName(lawsClubResearchInformationExcel.getSpecializedInterfacePerson());
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, specializedInterfacePerson).eq(SysUser::getRealname,fullName),false);
if (Objects.isNull(sysUser)) {
msgSub.append(getErrorMsg(i, "专业接口人不存在;"));
}else {
@@ -175,8 +175,9 @@ public class LawsClubResearchInformationServiceImpl extends ServiceImpl<LawsClub
}
// 校验反馈人
if (StringUtils.isNotBlank(lawsClubResearchInformationExcel.getFeedbackPerson())) {
String fullName = extractFullName(lawsClubResearchInformationExcel.getFeedbackPerson());
String feedbackPerson = extractEmployeeId(lawsClubResearchInformationExcel.getFeedbackPerson());
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, feedbackPerson),false);
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, feedbackPerson).eq(SysUser::getRealname,fullName),false);
if (Objects.isNull(sysUser)) {
msgSub.append(getErrorMsg(i, "反馈人不存在;"));
}else {
@@ -231,4 +232,12 @@ public class LawsClubResearchInformationServiceImpl extends ServiceImpl<LawsClub
}
return input; // 如果没有匹配到,返回null
}
private String extractFullName(String notifierId) {
int startIndex = notifierId.indexOf('(');
if (startIndex != -1) {
return notifierId.substring(0, startIndex).trim(); // 提取括号前的部分并去除前后的空格
}
return notifierId; // 如果没有括号,则返回整个字符串
}
}
@@ -16,8 +16,6 @@ import com.jero.modules.laws.club.service.*;
import com.jero.modules.laws.club.utils.ExcelUtil;
import com.jero.modules.laws.club.vo.LawsClubTreeNodeModel;
import com.jero.modules.laws.club.vo.excel.*;
import com.jero.modules.system.service.ISysDepartService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.tag.entity.LawsTag;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -30,7 +28,6 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -74,12 +71,6 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
private ILawsClubResearchInformationService lawsClubResearchInformationService;
@Resource
private RedisUtil redisUtil;
@Resource
private ISysUserService sysUserService;
@Resource
private ISysDepartService sysDepartService;
@Value("${jero.path.exportExcelTempPath}")
private String exportExcelTempPath;
@Override
public List<LawsClubTreeNodeModel> getTreeStructure(String parentId, String nodeType) {
@@ -89,6 +80,7 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
.map(lawsClub -> {
LawsClubTreeNodeModel model = new LawsClubTreeNodeModel();
BeanUtils.copyProperties(lawsClub, model);
model.setNodeType(lawsClub.getClubName());
return model;
}).collect(Collectors.toList());
// 构建节点映射和父子关系映射
@@ -277,6 +269,12 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
if (StringUtils.isBlank(lawsClub.getClubName())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "clubName");
}
LawsClub lawsClub1 = getOne(new LambdaQueryWrapper<LawsClub>()
.eq(LawsClub::getClubName, lawsClub.getClubName())
.ne(StringUtils.isNotBlank(lawsClub.getId()), LawsClub::getId, lawsClub.getId()));
if (!Objects.isNull(lawsClub1)) {
throw new JeroBootException(ResultCommon.CLUB_ALREADY_EXISTS);
}
List<LawsClubJoinTeam> lawsClubJoinTeamList = lawsClub.getLawsClubJoinTeamList();
List<LawsClubPayment> lawsClubPayments = lawsClub.getLawsClubPayments();
List<LawsClubMeeting> lawsClubMeetings = lawsClub.getLawsClubMeetings();
@@ -597,6 +595,7 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
String fieldTxts = "上级节点,节点类型,社团名称,社团地址,社团联系人,联系电话,编号";
String mustInputFlags = "yes,yes,yes,no,no,no,no";
String fieldTypeLists = "1,1,1,1,1,1,1"; // 1 代表是文本输入类型
boolean mergeAttendees = false;
List<LawsTag> lawsTags = ExcelUtil.createLawsTags(fieldTxts, mustInputFlags, fieldTypeLists);
try (Workbook workbook = ExcelUtil.createWorkBookWithLawsTags(lawsTags, "基础信息", describe);
OutputStream out = response.getOutputStream()) {
@@ -663,7 +662,7 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
if (StringUtils.isBlank(parentId)) {
msgSub.append(getErrorMsg(i, "上级节点不能为空;"));
} else {
LawsClub club = getOne(new LambdaQueryWrapper<LawsClub>().eq(LawsClub::getNodeType, parentId));
LawsClub club = getOne(new LambdaQueryWrapper<LawsClub>().eq(LawsClub::getClubName, parentId));
if (club == null) {
msgSub.append(getErrorMsg(i, "上级节点不存在,请重新输入;"));
} else {
@@ -676,6 +675,12 @@ public class LawsClubServiceImpl extends ServiceImpl<LawsClubMapper, LawsClub> i
}
if (StringUtils.isBlank(lawsClubExcel.getClubName())) {
msgSub.append(getErrorMsg(i, "社团名称不能为空;"));
}else {
LawsClub lawsClub = getOne(new LambdaQueryWrapper<LawsClub>()
.eq(LawsClub::getClubName, lawsClubExcel.getClubName()));
if (!Objects.isNull(lawsClub)) {
msgSub.append(getErrorMsg(i, "社团名称已存在;"));
}
}
String contactNumber = lawsClubExcel.getContactNumber();
if (StringUtils.isNotBlank(contactNumber) && !contactNumber.matches("^(?:(0\\d{2,3}-)?\\d{7,8}|1[3-9]\\d{9})$")) {
@@ -2,9 +2,7 @@ package com.jero.modules.laws.club.vo.excel;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
@@ -22,11 +20,11 @@ public class LawsClubMeetingExcel implements Serializable {
@Excel(name = "会议费用", width = 20)
private String meetingCost;
@Excel(name = "线/线地点", width = 20)
@Excel(name = "线/线地点", width = 20)
private String meetingPlace;
@Excel(name = "计划完成日期", width = 20)
private Date planCompletionDate;
private String planCompletionDate;
@Excel(name = "通知人", width = 20)
private String notifierId;
@@ -46,7 +44,21 @@ public class LawsClubMeetingExcel implements Serializable {
@Excel(name = "会议内容", width = 20)
private String meetingContent;
@ExcelCollection(name = "")
@Excel(name = "参会人员", width = 20)
private String memberId;
@Excel(name = "参会部门", width = 20)
private String departId;
@Excel(name = "参会部门专业模块", width = 20)
private String meetingSpecializedModule;
@Excel(name = "参会报告", width = 20)
private String meetingFileId;
@Excel(name = "备注", width = 20)
private String remark;
private List<LawsClubMeetingMemberExcel> meetingMemberList;
}
@@ -89,4 +89,5 @@ file.empty.import.error=\u6587\u4EF6\u4E3A\u7A7A\uFF0C\u8BF7\u68C0\u67E5\u540E\u
can_not_find_template_file=\u627E\u4E0D\u5230\u540D\u4E3A{0}\u7684\u6A21\u677F\u6587\u4EF6
can_not_find_field=\u627E\u4E0D\u5230\u540D\u4E3A{0}\u7684\u5B57\u6BB5
tree.node.exists=\u5DF2\u5B58\u5728\u540D\u4E3A"{0}"\u7684\u8282\u70B9"
node.exist.subsets=\u5f53\u524d\u8282\u70b9\u4e0b\u5b58\u5728\u5b50\u96c6
node.exist.subsets=\u5f53\u524d\u8282\u70b9\u4e0b\u5b58\u5728\u5b50\u96c6
club.already.exists=\u793e\u56e2\u540d\u79f0\u5df2\u5b58\u5728
@@ -109,3 +109,4 @@ tag.add.error.1=The attribute name is too long
tree.node.exists=Name {0} tree node exists
data.mismatch={0} Data mismatch
node.exist.subsets=Node exist subsets
club.already.exists=Club already exists
@@ -108,3 +108,4 @@ tag.add.error.1=\u5C5E\u6027\u540D\u79F0\u592A\u957F
tree.node.exists=\u5DF2\u5B58\u5728\u540D\u4E3A"{0}"\u7684\u8282\u70B9"
data.mismatch={0}\u6570\u636E\u4E0D\u5339\u914D
node.exist.subsets=\u5f53\u524d\u8282\u70b9\u4e0b\u5b58\u5728\u5b50\u96c6
club.already.exists=\u793e\u56e2\u540d\u79f0\u5df2\u5b58\u5728