Compare commits
4 Commits
a7d497fdbb
...
462cd7025f
Author | SHA1 | Date |
---|---|---|
wangliwen | 462cd7025f | |
wangliwen | 0673343ad6 | |
QYTHINK\qiaoy | 45dc1bad08 | |
QYTHINK\qiaoy | 346284ae26 |
|
@ -0,0 +1,234 @@
|
||||||
|
package io.renren.modules.meeting.Excel;
|
||||||
|
|
||||||
|
import com.alibaba.excel.context.AnalysisContext;
|
||||||
|
import com.alibaba.excel.event.AnalysisEventListener;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import io.renren.modules.meeting.dao.TMeetingroomMapper;
|
||||||
|
import io.renren.modules.meeting.dto.MeetingExcelDTO;
|
||||||
|
import io.renren.modules.meeting.dto.MeetingExcelValidationDTO;
|
||||||
|
import io.renren.modules.meeting.dto.TMeetingroomBookDTO;
|
||||||
|
import io.renren.modules.meeting.dto.TMeetingroomDTO;
|
||||||
|
import io.renren.modules.meeting.entity.TMeetingroom;
|
||||||
|
import io.renren.modules.meeting.service.TMeetingroomBookService;
|
||||||
|
import io.renren.modules.sys.dao.SysUserDao;
|
||||||
|
import io.renren.modules.sys.entity.SysUserEntity;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class MeetingExcelDataListener extends AnalysisEventListener<MeetingExcelDTO> {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TMeetingroomMapper tMeetingroomMapper;
|
||||||
|
@Resource
|
||||||
|
private SysUserDao sysUserDao;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TMeetingroomBookService tMeetingroomBookService;
|
||||||
|
/**
|
||||||
|
* 定义一个存储的界限,每读取5条数据就存储一次数据库,防止数据过多时发生溢出
|
||||||
|
* 存储完成之后就清空list重新读取新的数据,方便内存回收
|
||||||
|
*/
|
||||||
|
private static final int BATCH_COUNT = 5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义一个数据存储缓存,用于临时存储读取到的数据
|
||||||
|
*/
|
||||||
|
private List<MeetingExcelDTO> cacheDataList = new ArrayList<>();
|
||||||
|
public List<MeetingExcelValidationDTO> badlist = new ArrayList<>();
|
||||||
|
|
||||||
|
private ReentrantLock badlistlock = new ReentrantLock();
|
||||||
|
|
||||||
|
public void lock (){
|
||||||
|
badlistlock.lock();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unlock(){
|
||||||
|
badlistlock.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(MeetingExcelDTO item, AnalysisContext analysisContext) {
|
||||||
|
|
||||||
|
cacheDataList.add(item);
|
||||||
|
/**
|
||||||
|
* 如果当前缓存列表中的数据等于指定值,就存储
|
||||||
|
*/
|
||||||
|
if (cacheDataList.size() == BATCH_COUNT) {
|
||||||
|
//保存数据到数据库
|
||||||
|
saveData();
|
||||||
|
//清空缓存列表重新读取
|
||||||
|
cacheDataList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||||
|
saveData();
|
||||||
|
cacheDataList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveData() {
|
||||||
|
System.out.println(Thread.currentThread().getName()+"----------------------------------");
|
||||||
|
for (MeetingExcelDTO item : cacheDataList) {
|
||||||
|
String sportOriginalValue = item.getActivitySpot();
|
||||||
|
if (StringUtils.isBlank(sportOriginalValue)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//一条数据里有多个会议室
|
||||||
|
if (sportOriginalValue.contains("、")) {
|
||||||
|
String spots[] = sportOriginalValue.split("、");
|
||||||
|
for (int i = 1; i < spots.length; i++) {
|
||||||
|
MeetingExcelDTO meetingExcelDTO = new MeetingExcelDTO();
|
||||||
|
BeanUtils.copyProperties(item, meetingExcelDTO);
|
||||||
|
meetingExcelDTO.setActivitySpot(spots[i]);
|
||||||
|
MeetingExcelValidationDTO validationDTO = checkAndInsert(meetingExcelDTO);
|
||||||
|
if (!validationDTO.getValidated()) {
|
||||||
|
badlist.add(validationDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
item.setActivitySpot(spots[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
MeetingExcelValidationDTO validationDTO = checkAndInsert(item);
|
||||||
|
if (!validationDTO.getValidated()) {
|
||||||
|
badlist.add(validationDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MeetingExcelValidationDTO checkAndInsert(MeetingExcelDTO item) {
|
||||||
|
MeetingExcelValidationDTO result = new MeetingExcelValidationDTO();
|
||||||
|
result.setMeetingExcelDTO(item);
|
||||||
|
|
||||||
|
TMeetingroomBookDTO dto = new TMeetingroomBookDTO();
|
||||||
|
//会议室处理
|
||||||
|
QueryWrapper<TMeetingroom> qw = new QueryWrapper();
|
||||||
|
qw.eq("name", item.getActivitySpot().trim());
|
||||||
|
qw.eq("del_flag", 0);
|
||||||
|
TMeetingroom tMeetingroom = tMeetingroomMapper.selectOne(qw);
|
||||||
|
if (tMeetingroom == null) {
|
||||||
|
result.setValidated(false);
|
||||||
|
result.getErrors().add("会议室找不到对应:" + item.getActivitySpot().trim());
|
||||||
|
} else {
|
||||||
|
dto.setRoomId(tMeetingroom.getId());
|
||||||
|
dto.setRoomName(tMeetingroom.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
//活动时间处理
|
||||||
|
String activityTimeStr = item.getActivityTime();
|
||||||
|
if (StringUtils.isNotBlank(activityTimeStr)) {
|
||||||
|
Date activityTimeDate = null;
|
||||||
|
Date startTime = null;
|
||||||
|
Date endTime = null;
|
||||||
|
Date bookTime = null;
|
||||||
|
SimpleDateFormat format0 = new SimpleDateFormat("yyyy/M/d");
|
||||||
|
try {
|
||||||
|
activityTimeDate = format0.parse(activityTimeStr);
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(activityTimeDate);
|
||||||
|
calendar.set(Calendar.HOUR, 9);
|
||||||
|
startTime = calendar.getTime();
|
||||||
|
calendar.add(Calendar.HOUR, 1);
|
||||||
|
endTime = calendar.getTime();
|
||||||
|
bookTime = startTime;
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if (startTime == null) {
|
||||||
|
SimpleDateFormat format1 = new SimpleDateFormat("yyyy/M/d HH:mm");
|
||||||
|
try {
|
||||||
|
startTime = format0.parse(activityTimeStr);
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(startTime);
|
||||||
|
calendar.add(Calendar.HOUR, 1);
|
||||||
|
endTime = calendar.getTime();
|
||||||
|
bookTime = startTime;
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (startTime == null) {
|
||||||
|
result.setValidated(false);
|
||||||
|
result.getErrors().add("活动时间异常:" + item.getActivityTime());
|
||||||
|
} else {
|
||||||
|
//开始时间
|
||||||
|
dto.setStartTime(startTime);
|
||||||
|
//结束时间
|
||||||
|
dto.setEndTime(endTime);
|
||||||
|
//提交预约时间
|
||||||
|
dto.setBookDate(bookTime);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result.setValidated(false);
|
||||||
|
result.getErrors().add("活动时间异常:" + item.getActivityTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
//申请人处理
|
||||||
|
String liaison = item.getLiaison();
|
||||||
|
if (StringUtils.isNotBlank(liaison)) {
|
||||||
|
dto.setName(liaison);//申请人
|
||||||
|
QueryWrapper<SysUserEntity> qw1 = new QueryWrapper();
|
||||||
|
qw1.eq("real_name", liaison);
|
||||||
|
qw1.eq("status", 1);
|
||||||
|
SysUserEntity user = sysUserDao.selectOne(qw1);
|
||||||
|
if (user == null) {
|
||||||
|
result.setValidated(false);
|
||||||
|
result.getErrors().add("联系人在系统中没有:" + liaison);
|
||||||
|
} else {
|
||||||
|
dto.setPhone(user.getMobile());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result.setValidated(false);
|
||||||
|
result.getErrors().add("联系人异常:" + liaison);
|
||||||
|
}
|
||||||
|
if (result.getValidated()) {
|
||||||
|
StringBuffer matterBuff = new StringBuffer();
|
||||||
|
if (StringUtils.isNotBlank(item.getActivityName())) {
|
||||||
|
matterBuff.append("活动名称:");
|
||||||
|
matterBuff.append(item.getActivityName());
|
||||||
|
matterBuff.append(" ");
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(item.getParticipants())) {
|
||||||
|
matterBuff.append("参会人员:");
|
||||||
|
matterBuff.append(item.getParticipants());
|
||||||
|
matterBuff.append(" ");
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(item.getActivityContents())) {
|
||||||
|
matterBuff.append("活动内容:");
|
||||||
|
matterBuff.append(item.getActivityContents());
|
||||||
|
matterBuff.append(" ");
|
||||||
|
}
|
||||||
|
dto.setMatter(matterBuff.toString());
|
||||||
|
|
||||||
|
dto.setState(2);//通过
|
||||||
|
dto.setAuditViem("通过");
|
||||||
|
dto.setDept(item.getDept());//部门
|
||||||
|
|
||||||
|
QueryWrapper<SysUserEntity> qw2 = new QueryWrapper();
|
||||||
|
qw2.eq("real_name", "城市云脑工作专班");
|
||||||
|
qw2.eq("status", 1);
|
||||||
|
SysUserEntity user = sysUserDao.selectOne(qw2);
|
||||||
|
dto.setCreator(user.getId());
|
||||||
|
dto.setCreateDate(dto.getBookDate());
|
||||||
|
dto.setAuditor(user.getId());
|
||||||
|
dto.setAuditTime(dto.getBookDate());
|
||||||
|
|
||||||
|
//插入数据
|
||||||
|
tMeetingroomBookService.save(dto);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package io.renren.modules.meeting.controller;
|
package io.renren.modules.meeting.controller;
|
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel;
|
||||||
import io.renren.common.annotation.LogOperation;
|
import io.renren.common.annotation.LogOperation;
|
||||||
import io.renren.common.constant.Constant;
|
import io.renren.common.constant.Constant;
|
||||||
import io.renren.common.page.PageData;
|
import io.renren.common.page.PageData;
|
||||||
|
@ -8,6 +9,9 @@ import io.renren.common.validator.ValidatorUtils;
|
||||||
import io.renren.common.validator.group.AddGroup;
|
import io.renren.common.validator.group.AddGroup;
|
||||||
import io.renren.common.validator.group.DefaultGroup;
|
import io.renren.common.validator.group.DefaultGroup;
|
||||||
import io.renren.common.validator.group.UpdateGroup;
|
import io.renren.common.validator.group.UpdateGroup;
|
||||||
|
import io.renren.modules.meeting.Excel.MeetingExcelDataListener;
|
||||||
|
import io.renren.modules.meeting.dto.MeetingExcelDTO;
|
||||||
|
import io.renren.modules.meeting.dto.MeetingExcelValidationDTO;
|
||||||
import io.renren.modules.meeting.dto.TMeetingroomBookDTO;
|
import io.renren.modules.meeting.dto.TMeetingroomBookDTO;
|
||||||
import io.renren.modules.meeting.dto.TMeetingroomDTO;
|
import io.renren.modules.meeting.dto.TMeetingroomDTO;
|
||||||
import io.renren.modules.meeting.service.TMeetingroomBookService;
|
import io.renren.modules.meeting.service.TMeetingroomBookService;
|
||||||
|
@ -21,15 +25,16 @@ import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import springfox.documentation.annotations.ApiIgnore;
|
import springfox.documentation.annotations.ApiIgnore;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.util.Date;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Api(tags = "预约会客厅")
|
@Api(tags = "预约会客厅")
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -201,4 +206,30 @@ public class BookMeetingRoomController {
|
||||||
|
|
||||||
return new Result();
|
return new Result();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MeetingExcelDataListener meetingExcelDataListener;
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("importExcel")
|
||||||
|
@ApiOperation("导入Excel")
|
||||||
|
public Result importExcel(@RequestParam("excelfile") MultipartFile file) throws Exception {
|
||||||
|
meetingExcelDataListener.lock();
|
||||||
|
//解析并保存到数据库
|
||||||
|
EasyExcel.read(file.getInputStream(), MeetingExcelDTO.class, meetingExcelDataListener).sheet().doRead();
|
||||||
|
Result r = new Result();
|
||||||
|
|
||||||
|
ArrayList<MeetingExcelValidationDTO> clonedList = new ArrayList<>();
|
||||||
|
Iterator<MeetingExcelValidationDTO> it = meetingExcelDataListener.badlist.iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
MeetingExcelValidationDTO s = it.next();
|
||||||
|
MeetingExcelValidationDTO newS = new MeetingExcelValidationDTO();
|
||||||
|
BeanUtils.copyProperties(s, newS);
|
||||||
|
clonedList.add(newS);
|
||||||
|
}
|
||||||
|
r.setData(clonedList);
|
||||||
|
meetingExcelDataListener.badlist.clear();
|
||||||
|
meetingExcelDataListener.unlock();
|
||||||
|
return r;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package io.renren.modules.meeting.dto;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value = "excel导入")
|
||||||
|
public class MeetingExcelDTO {
|
||||||
|
|
||||||
|
@ExcelProperty(value = "序号")
|
||||||
|
private int id;
|
||||||
|
@ExcelProperty(value = "活动名称")
|
||||||
|
private String activityName;
|
||||||
|
@ExcelProperty(value = "活动时间")
|
||||||
|
private String activityTime;
|
||||||
|
@ExcelProperty(value = "活动地点")
|
||||||
|
private String activitySpot;
|
||||||
|
@ExcelProperty(value = "参会人员")
|
||||||
|
private String participants;
|
||||||
|
@ExcelProperty(value = "活动内容")
|
||||||
|
private String activityContents;
|
||||||
|
@ExcelProperty(value = "组织单位")
|
||||||
|
private String dept;
|
||||||
|
@ExcelProperty(value = "联系人")
|
||||||
|
private String liaison;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package io.renren.modules.meeting.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value = "excel数据验证结果")
|
||||||
|
public class MeetingExcelValidationDTO {
|
||||||
|
@ApiModelProperty(value = "数据内容")
|
||||||
|
private MeetingExcelDTO meetingExcelDTO;
|
||||||
|
@ApiModelProperty(value = "验证结果")
|
||||||
|
private Boolean validated = true;
|
||||||
|
@ApiModelProperty(value = "错误内容")
|
||||||
|
private ArrayList<String> errors = new ArrayList<>();
|
||||||
|
}
|
Loading…
Reference in New Issue