Compare commits
No commits in common. "45dc1bad08734c682ece52799cff20035457c459" and "1cbeb17eee39f58352432d199ddbd3b1318122ff" have entirely different histories.
45dc1bad08
...
1cbeb17eee
|
@ -1,234 +0,0 @@
|
||||||
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,6 +1,5 @@
|
||||||
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;
|
||||||
|
@ -9,9 +8,6 @@ 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;
|
||||||
|
@ -25,16 +21,15 @@ 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.*;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Api(tags = "预约会客厅")
|
@Api(tags = "预约会客厅")
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -206,30 +201,4 @@ 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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
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;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
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