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 `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 `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' ; 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, PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `id`(`id`) USING BTREE UNIQUE INDEX `id`(`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会议征集问题' ROW_FORMAT = Dynamic; ) 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; 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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result; import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog; 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.base.controller.JeroController;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser; 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.entity.PayMeetingQuestion;
import com.jero.meeting.service.IPayMeetingQuestionService; import com.jero.meeting.service.IPayMeetingQuestionService;
import com.jero.meeting.service.IPayMeetingService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; 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.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; 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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
/** /**
* @Description: 征集问题 * @Description: 征集问题
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2022-07-04 * @Date: 2022-07-04
* @Version: V1.0 * @Version: V1.0
*/ */
@Slf4j @Slf4j
@Api(tags="征集问题") @Api(tags = "征集问题")
@RestController @RestController
@RequestMapping("/payMeetingQuestion/payMeetingQuestion") @RequestMapping("/payMeetingQuestion/payMeetingQuestion")
public class PayMeetingQuestionController extends JeroController<PayMeetingQuestion, IPayMeetingQuestionService> { public class PayMeetingQuestionController extends JeroController<PayMeetingQuestion, IPayMeetingQuestionService> {
@Autowired @Autowired
private IPayMeetingQuestionService payMeetingQuestionService; private IPayMeetingQuestionService payMeetingQuestionService;
@Resource
private IPayMeetingService payMeetingService;
/** /**
* 分页列表查询 * 分页列表查询
* *
* @param payMeetingQuestion * @param payMeetingQuestion
* @param pageNo * @param pageNo
* @param pageSize * @param pageSize
* @param req * @param req
* @return * @return
*/ */
@AutoLog(value = "征集问题-分页列表查询") @AutoLog(value = "征集问题-分页列表查询")
@ApiOperation(value="征集问题-分页列表查询", notes="征集问题-分页列表查询") @ApiOperation(value = "征集问题-分页列表查询", notes = "征集问题-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<?> queryPageList(PayMeetingQuestion payMeetingQuestion, public Result<?> queryPageList(PayMeetingQuestion payMeetingQuestion,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
LambdaQueryWrapper<PayMeetingQuestion> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PayMeetingQuestion> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getStandardNumber()),PayMeetingQuestion::getStandardNumber,payMeetingQuestion.getStandardNumber()); if (StringUtils.isBlank(payMeetingQuestion.getMeetingId())) {
lambdaQueryWrapper.like(StringUtils.isNotBlank(payMeetingQuestion.getName()),PayMeetingQuestion::getName,payMeetingQuestion.getName()); throw new JeroBootException("会议id不能为空!");
Page<PayMeetingQuestion> page = new Page<>(pageNo, pageSize); }
IPage<PayMeetingQuestion> pageList = payMeetingQuestionService.page(page, lambdaQueryWrapper); lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getMeetingId()), PayMeetingQuestion::getMeetingId, payMeetingQuestion.getMeetingId());
return Result.ok(pageList); 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 * @param payMeetingQuestion
* @return * @return
*/ */
@AutoLog(value = "征集问题-添加") @AutoLog(value = "征集问题-添加")
@ApiOperation(value="征集问题-添加", notes="征集问题-添加") @ApiOperation(value = "征集问题-添加", notes = "征集问题-添加")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<?> add(@RequestBody PayMeetingQuestion payMeetingQuestion) { public Result<?> add(@RequestBody PayMeetingQuestion payMeetingQuestion) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); Optional.ofNullable(payMeetingQuestion.getMeetingId()).ifPresent(id->{
payMeetingQuestion.setName(sysUser.getRealname()); PayMeeting payMeeting = payMeetingService.getById(id);
payMeetingQuestion.setEmail(sysUser.getEmail()); if(ObjectUtils.isEmpty(payMeeting.getEndTimeAddQuestion())||payMeeting.getEndTimeAddQuestion().before(new Date())){
payMeetingQuestionService.save(payMeetingQuestion); throw new JeroBootException("征集问题截至时间以过,无法新增!");
return Result.ok("添加成功!"); }
} });
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
payMeetingQuestion.setName(sysUser.getRealname());
payMeetingQuestion.setEmail(PasswordUtil.decrypt(sysUser.getEmail()));
payMeetingQuestionService.save(payMeetingQuestion);
return Result.ok("添加成功!");
}
/** /**
* 通过id删除 * 通过id删除
* *
* @param id * @param id
* @return * @return
*/ */
@AutoLog(value = "征集问题-通过id删除") @AutoLog(value = "征集问题-通过id删除")
@ApiOperation(value="征集问题-通过id删除", notes="征集问题-通过id删除") @ApiOperation(value = "征集问题-通过id删除", notes = "征集问题-通过id删除")
@DeleteMapping(value = "/delete") @DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) { public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
payMeetingQuestionService.removeById(id); payMeetingQuestionService.removeById(id);
return Result.ok("删除成功!"); 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"))));
/** ServletOutputStream outputStream = response.getOutputStream();
* 导出excel
*
* @param request
* @param payMeetingQuestion
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, PayMeetingQuestion payMeetingQuestion) {
return super.exportXls(request, payMeetingQuestion, PayMeetingQuestion.class, "征集问题");
}
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; private String paymentRecord;
/**是否需要问题征集*/ /**是否需要问题征集*/
@Dict(dicCode = "yn")
@Excel(name = "是否征集问题", width = 20,dicCode ="yn")
@ApiModelProperty(value = "是否需要问题征集") @ApiModelProperty(value = "是否需要问题征集")
private String isAddQuestion; private String isAddQuestion;
@@ -33,35 +33,35 @@ public class PayMeetingQuestion {
@ApiModelProperty(value = "id") @ApiModelProperty(value = "id")
private java.lang.String id; private java.lang.String id;
/**创建人*/ /**创建人*/
@Excel(name = "创建人", width = 15)
@ApiModelProperty(value = "创建人") @ApiModelProperty(value = "创建人")
private java.lang.String createBy; 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") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期") @ApiModelProperty(value = "创建日期")
private java.util.Date createTime; private java.util.Date createTime;
/**更新人*/ /**更新人*/
@Excel(name = "更新人", width = 15)
@ApiModelProperty(value = "更新人") @ApiModelProperty(value = "更新人")
private java.lang.String updateBy; 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") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期") @ApiModelProperty(value = "更新日期")
private java.util.Date updateTime; private java.util.Date updateTime;
/**会议id*/ /**会议id*/
@Excel(name = "会议id", width = 15)
@ApiModelProperty(value = "会议id") @ApiModelProperty(value = "会议id")
private java.lang.String meetingId; private java.lang.String meetingId;
/**标准号*/ /**标准号*/
@Excel(name = "标准号", width = 15)
@ApiModelProperty(value = "标准号") @ApiModelProperty(value = "标准号")
private java.lang.String standardNumber; private java.lang.String standardNumber;
/**标准名称*/ /**标准名称*/
@Excel(name = "标准名称", width = 15)
@ApiModelProperty(value = "标准名称") @ApiModelProperty(value = "标准名称")
private java.lang.String standardName; private java.lang.String standardName;
/**章条编号*/ /**章条编号*/
@@ -69,15 +69,17 @@ public class PayMeetingQuestion {
@ApiModelProperty(value = "章条编号") @ApiModelProperty(value = "章条编号")
private java.lang.String number; private java.lang.String number;
/**问题名称*/ /**问题名称*/
@Excel(name = "问题名称", width = 15) @Excel(name = "问题描述", width = 15)
@ApiModelProperty(value = "问题名称") @ApiModelProperty(value = "问题名称")
private java.lang.String questionName; 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 = "创建人名称") @ApiModelProperty(value = "创建人名称")
private java.lang.String name; 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); BeanUtils.copyProperties(payMeetingVO, payMeeting);
if(org.apache.commons.collections.CollectionUtils.isNotEmpty(payMeetingVO.getQuestionList())){ 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())); payMeeting.setQuestions(JSONObject.toJSONString(payMeetingVO.getQuestionList()));
} }
return payMeeting; return payMeeting;
@@ -1,8 +1,10 @@
package com.jero.meeting.vo.excel; package com.jero.meeting.vo.excel;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import com.jero.meeting.entity.PayMeetingContacts; import com.jero.meeting.entity.PayMeetingContacts;
import com.jero.meeting.entity.PayMeetingHotelContacts; import com.jero.meeting.entity.PayMeetingHotelContacts;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
@@ -25,7 +27,7 @@ public class StandardsMeetingExcel {
/**标协会议类型*/ /**标协会议类型*/
@Excel(name = "标协会议类型", width = 15,dicCode = "standard_meeting_type") @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") @Excel(name = "会议开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@@ -83,7 +85,12 @@ public class StandardsMeetingExcel {
/**酒店地址*/ /**酒店地址*/
@Excel(name = "酒店地址", width = 15) @Excel(name = "酒店地址", width = 15)
private String hotelAddress; 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;
/** /**
* 会议关联酒店联系人列表 * 会议关联酒店联系人列表
*/ */