add:补充征集问题

This commit is contained in:
syxy
2022-07-05 17:59:13 +08:00
parent dd73af6fd5
commit fc6691e7ca
6 changed files with 219 additions and 86 deletions
@@ -1,4 +1,4 @@
//7 2022-7-4
//7 2022-7-4
ALTER TABLE `pay_meeting` add COLUMN `is_add_question` tinyint(1) NULL DEFAULT NULL COMMENT '是否需要问题征集(0:否,1:是)' ;
ALTER TABLE `pay_meeting` add COLUMN `end_time_add_question` datetime NULL DEFAULT NULL COMMENT '征集截止日期' ;
ALTER TABLE `pay_meeting` add COLUMN `questions` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '征集问题text' ;
@@ -19,3 +19,9 @@ CREATE TABLE `pay_meeting_question` (
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `id`(`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会议征集问题' ROW_FORMAT = Dynamic;
//
ALTER TABLE `pay_case_committee` add COLUMN `principal_id_a` varchar (50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人Aid' ;
ALTER TABLE `pay_case_committee` add COLUMN `principal_name_a` varchar (50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人名称A' ;
ALTER TABLE `pay_case_committee` add COLUMN `principal_id_b` varchar (50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人Bid' ;
ALTER TABLE `pay_case_committee` add COLUMN `principal_name_b` varchar (50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人名称B' ;
@@ -1,22 +1,39 @@
package com.jero.meeting.controller;
import java.util.Arrays;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.PasswordUtil;
import com.jero.meeting.entity.PayMeeting;
import com.jero.meeting.entity.PayMeetingQuestion;
import com.jero.meeting.service.IPayMeetingQuestionService;
import com.jero.meeting.service.IPayMeetingService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -24,89 +41,178 @@ import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
/**
* @Description: 征集问题
* @Author: jeecg-boot
* @Date: 2022-07-04
* @Date: 2022-07-04
* @Version: V1.0
*/
@Slf4j
@Api(tags="征集问题")
@Api(tags = "征集问题")
@RestController
@RequestMapping("/payMeetingQuestion/payMeetingQuestion")
public class PayMeetingQuestionController extends JeroController<PayMeetingQuestion, IPayMeetingQuestionService> {
@Autowired
private IPayMeetingQuestionService payMeetingQuestionService;
@Autowired
private IPayMeetingQuestionService payMeetingQuestionService;
@Resource
private IPayMeetingService payMeetingService;
/**
* 分页列表查询
*
* @param payMeetingQuestion
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "征集问题-分页列表查询")
@ApiOperation(value="征集问题-分页列表查询", notes="征集问题-分页列表查询")
@GetMapping(value = "/list")
public Result<?> queryPageList(PayMeetingQuestion payMeetingQuestion,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
LambdaQueryWrapper<PayMeetingQuestion> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getStandardNumber()),PayMeetingQuestion::getStandardNumber,payMeetingQuestion.getStandardNumber());
lambdaQueryWrapper.like(StringUtils.isNotBlank(payMeetingQuestion.getName()),PayMeetingQuestion::getName,payMeetingQuestion.getName());
Page<PayMeetingQuestion> page = new Page<>(pageNo, pageSize);
IPage<PayMeetingQuestion> pageList = payMeetingQuestionService.page(page, lambdaQueryWrapper);
return Result.ok(pageList);
}
/**
* 分页列表查询
*
* @param payMeetingQuestion
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "征集问题-分页列表查询")
@ApiOperation(value = "征集问题-分页列表查询", notes = "征集问题-分页列表查询")
@GetMapping(value = "/list")
public Result<?> queryPageList(PayMeetingQuestion payMeetingQuestion,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
LambdaQueryWrapper<PayMeetingQuestion> lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isBlank(payMeetingQuestion.getMeetingId())) {
throw new JeroBootException("会议id不能为空!");
}
lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getMeetingId()), PayMeetingQuestion::getMeetingId, payMeetingQuestion.getMeetingId());
lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getStandardNumber()), PayMeetingQuestion::getStandardNumber, payMeetingQuestion.getStandardNumber());
lambdaQueryWrapper.like(StringUtils.isNotBlank(payMeetingQuestion.getName()), PayMeetingQuestion::getName, payMeetingQuestion.getName());
lambdaQueryWrapper.orderByDesc(PayMeetingQuestion::getCreateTime);
Page<PayMeetingQuestion> page = new Page<>(pageNo, pageSize);
IPage<PayMeetingQuestion> pageList = payMeetingQuestionService.page(page, lambdaQueryWrapper);
return Result.ok(pageList);
}
/**
* 添加
*
* @param payMeetingQuestion
* @return
*/
@AutoLog(value = "征集问题-添加")
@ApiOperation(value="征集问题-添加", notes="征集问题-添加")
@PostMapping(value = "/add")
public Result<?> add(@RequestBody PayMeetingQuestion payMeetingQuestion) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
payMeetingQuestion.setName(sysUser.getRealname());
payMeetingQuestion.setEmail(sysUser.getEmail());
payMeetingQuestionService.save(payMeetingQuestion);
return Result.ok("添加成功!");
}
/**
* 添加
*
* @param payMeetingQuestion
* @return
*/
@AutoLog(value = "征集问题-添加")
@ApiOperation(value = "征集问题-添加", notes = "征集问题-添加")
@PostMapping(value = "/add")
public Result<?> add(@RequestBody PayMeetingQuestion payMeetingQuestion) {
Optional.ofNullable(payMeetingQuestion.getMeetingId()).ifPresent(id->{
PayMeeting payMeeting = payMeetingService.getById(id);
if(ObjectUtils.isEmpty(payMeeting.getEndTimeAddQuestion())||payMeeting.getEndTimeAddQuestion().before(new Date())){
throw new JeroBootException("征集问题截至时间以过,无法新增!");
}
});
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
payMeetingQuestion.setName(sysUser.getRealname());
payMeetingQuestion.setEmail(PasswordUtil.decrypt(sysUser.getEmail()));
payMeetingQuestionService.save(payMeetingQuestion);
return Result.ok("添加成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "征集问题-通过id删除")
@ApiOperation(value="征集问题-通过id删除", notes="征集问题-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
payMeetingQuestionService.removeById(id);
return Result.ok("删除成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "征集问题-通过id删除")
@ApiOperation(value = "征集问题-通过id删除", notes = "征集问题-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
payMeetingQuestionService.removeById(id);
return Result.ok("删除成功!");
}
/**
* 导出excel
*
* @param response
* @param payMeetingQuestion
*/
@ApiOperation(value = "征集问题-导出", notes = "征集问题-导出")
@PostMapping(value = "/exportXls")
public void exportXls(HttpServletResponse response, PayMeetingQuestion payMeetingQuestion) {
try {
response.setContentType("application/ms-excel;charset=UTF-8");
response.setContentType("application/x-download");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition",
"attachment;filename=".concat(String.valueOf(URLEncoder.encode("征集问题.xls", "UTF-8"))));
/**
* 导出excel
*
* @param request
* @param payMeetingQuestion
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, PayMeetingQuestion payMeetingQuestion) {
return super.exportXls(request, payMeetingQuestion, PayMeetingQuestion.class, "征集问题");
}
ServletOutputStream outputStream = response.getOutputStream();
LambdaQueryWrapper<PayMeetingQuestion> lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isBlank(payMeetingQuestion.getMeetingId())) {
throw new JeroBootException("会议id不能为空!");
}
lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getMeetingId()), PayMeetingQuestion::getMeetingId, payMeetingQuestion.getMeetingId());
lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getStandardNumber()), PayMeetingQuestion::getStandardNumber, payMeetingQuestion.getStandardNumber());
lambdaQueryWrapper.like(StringUtils.isNotBlank(payMeetingQuestion.getName()), PayMeetingQuestion::getName, payMeetingQuestion.getName());
lambdaQueryWrapper.orderByDesc(PayMeetingQuestion::getCreateTime);
List<PayMeetingQuestion> pageList = payMeetingQuestionService.list(lambdaQueryWrapper);
Map<String, List<PayMeetingQuestion>> map = pageList.stream().collect(Collectors.groupingBy(PayMeetingQuestion::getStandardNumber));
// 1.创建工作簿
// InputStream is = getClass().getClassLoader().getResourceAsStream("excelTemplates/standard.xls");
HSSFWorkbook workbook = new HSSFWorkbook();
map.forEach((key, val) -> {
HSSFSheet sheet = workbook.createSheet(key);
sheet.setColumnWidth(0,300*15+323);
sheet.setColumnWidth(1,300*15+323);
sheet.setColumnWidth(2,300*15+323);
sheet.setColumnWidth(3,300*15+323);
sheet.setColumnWidth(4,300*15+323);
HSSFRow row1 = sheet.createRow(0);
HSSFCell cell1 = row1.createCell(0);
cell1.setCellValue("标准号:" + key);
HSSFRow row2 = sheet.createRow(1);
HSSFCell cell2 = row2.createCell(0);
cell2.setCellValue("标准名称:" + val.get(0).getStandardName());
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 4));
HSSFRow row3 = sheet.createRow(2);
HSSFCell cell30 = row3.createCell(0);
cell30.setCellValue("序号");
HSSFCell cell31 = row3.createCell(1);
cell31.setCellValue("章条编号");
HSSFCell cell32 = row3.createCell(2);
cell32.setCellValue("问题描述");
HSSFCell cell33 = row3.createCell(3);
cell33.setCellValue("提问人");
HSSFCell cell34 = row3.createCell(4);
cell34.setCellValue("提问人邮箱");
int j = 3;
int k = 1;
for (PayMeetingQuestion payMeetingQuestion1 : val) {
HSSFRow row4 = sheet.createRow(j);
HSSFCell cell41 = row4.createCell(0);
cell41.setCellValue(k);
HSSFCell cell42 = row4.createCell(1);
cell42.setCellValue(payMeetingQuestion1.getNumber());
HSSFCell cell43 = row4.createCell(2);
cell43.setCellValue(payMeetingQuestion1.getQuestionName());
HSSFCell cell44 = row4.createCell(3);
cell44.setCellValue(payMeetingQuestion1.getName());
HSSFCell cell45 = row4.createCell(4);
cell45.setCellValue(PasswordUtil.decrypt(payMeetingQuestion1.getEmail()));
j++;
k++;
}
});
workbook.write(outputStream);
workbook.close();
if (outputStream != null) {
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -344,6 +344,8 @@ public class PayMeeting implements Serializable {
private String paymentRecord;
/**是否需要问题征集*/
@Dict(dicCode = "yn")
@Excel(name = "是否征集问题", width = 20,dicCode ="yn")
@ApiModelProperty(value = "是否需要问题征集")
private String isAddQuestion;
@@ -33,35 +33,35 @@ public class PayMeetingQuestion {
@ApiModelProperty(value = "id")
private java.lang.String id;
/**创建人*/
@Excel(name = "创建人", width = 15)
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Excel(name = "更新人", width = 15)
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**会议id*/
@Excel(name = "会议id", width = 15)
@ApiModelProperty(value = "会议id")
private java.lang.String meetingId;
/**标准号*/
@Excel(name = "标准号", width = 15)
@ApiModelProperty(value = "标准号")
private java.lang.String standardNumber;
/**标准名称*/
@Excel(name = "标准名称", width = 15)
@ApiModelProperty(value = "标准名称")
private java.lang.String standardName;
/**章条编号*/
@@ -69,15 +69,17 @@ public class PayMeetingQuestion {
@ApiModelProperty(value = "章条编号")
private java.lang.String number;
/**问题名称*/
@Excel(name = "问题名称", width = 15)
@Excel(name = "问题描述", width = 15)
@ApiModelProperty(value = "问题名称")
private java.lang.String questionName;
/**邮箱*/
@Excel(name = "邮箱", width = 15)
@ApiModelProperty(value = "邮箱")
private java.lang.String email;
/**创建人名称*/
@Excel(name = "创建人名称", width = 15)
@Excel(name = "提问人", width = 15)
@ApiModelProperty(value = "创建人名称")
private java.lang.String name;
/**邮箱*/
@Excel(name = "提问人邮箱", width = 15)
@ApiModelProperty(value = "邮箱")
private java.lang.String email;
}
@@ -483,6 +483,16 @@ public class PayMeetingServiceImpl extends ServiceImpl<PayMeetingMapper, PayMeet
//}
BeanUtils.copyProperties(payMeetingVO, payMeeting);
if(org.apache.commons.collections.CollectionUtils.isNotEmpty(payMeetingVO.getQuestionList())){
if("0".equals(payMeetingVO.getIsAddQuestion())){
throw new JeroBootException("征集问题状态冲突");
}
List<String> list= payMeetingVO.getQuestionList().stream().collect(Collectors.groupingBy(Question::getStandardNumber,Collectors.counting())).entrySet().stream()
.filter(entry->entry.getValue()>1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
if(list.size()>0){
throw new JeroBootException("征集问题标准号重复!");
}
payMeeting.setQuestions(JSONObject.toJSONString(payMeetingVO.getQuestionList()));
}
return payMeeting;
@@ -1,8 +1,10 @@
package com.jero.meeting.vo.excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import com.jero.meeting.entity.PayMeetingContacts;
import com.jero.meeting.entity.PayMeetingHotelContacts;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
@@ -25,7 +27,7 @@ public class StandardsMeetingExcel {
/**标协会议类型*/
@Excel(name = "标协会议类型", width = 15,dicCode = "standard_meeting_type")
private Integer tbMeetingType;
private String tbMeetingType;
/**开始时间*/
@Excel(name = "会议开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@@ -83,7 +85,12 @@ public class StandardsMeetingExcel {
/**酒店地址*/
@Excel(name = "酒店地址", width = 15)
private String hotelAddress;
/**是否需要问题征集*/
@Excel(name = "是否征集问题", width = 20,dicCode ="yn")
private String isAddQuestion;
/**征集截止日期*/
@Excel(name = "征集截止日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
private java.util.Date endTimeAddQuestion;
/**
* 会议关联酒店联系人列表
*/