From fc6691e7cadf57a3c351fb0e94cb4ce3b3661056 Mon Sep 17 00:00:00 2001 From: syxy <> Date: Tue, 5 Jul 2022 17:59:13 +0800 Subject: [PATCH] =?UTF-8?q?add:=E8=A1=A5=E5=85=85=E5=BE=81=E9=9B=86?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/{征集问题sql.sql => 22年7月变更.sql} | 8 +- .../PayMeetingQuestionController.java | 246 +++++++++++++----- .../com/jero/meeting/entity/PayMeeting.java | 2 + .../meeting/entity/PayMeetingQuestion.java | 28 +- .../service/impl/PayMeetingServiceImpl.java | 10 + .../vo/excel/StandardsMeetingExcel.java | 11 +- 6 files changed, 219 insertions(+), 86 deletions(-) rename db/{征集问题sql.sql => 22年7月变更.sql} (72%) diff --git a/db/征集问题sql.sql b/db/22年7月变更.sql similarity index 72% rename from db/征集问题sql.sql rename to db/22年7月变更.sql index d583c377..2017e2f9 100644 --- a/db/征集问题sql.sql +++ b/db/22年7月变更.sql @@ -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' ; + diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingQuestionController.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingQuestionController.java index edb4b32d..dc4a0c2f 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingQuestionController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/controller/PayMeetingQuestionController.java @@ -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 { - @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 lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(StringUtils.isNotBlank(payMeetingQuestion.getStandardNumber()),PayMeetingQuestion::getStandardNumber,payMeetingQuestion.getStandardNumber()); - lambdaQueryWrapper.like(StringUtils.isNotBlank(payMeetingQuestion.getName()),PayMeetingQuestion::getName,payMeetingQuestion.getName()); - Page page = new Page<>(pageNo, pageSize); - IPage 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 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 page = new Page<>(pageNo, pageSize); + IPage 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 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 pageList = payMeetingQuestionService.list(lambdaQueryWrapper); + Map> 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(); + } + } } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java index 9f0521da..f47a5ea9 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeeting.java @@ -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; diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingQuestion.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingQuestion.java index 9bed803b..28508c3f 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingQuestion.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/entity/PayMeetingQuestion.java @@ -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; } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingServiceImpl.java index f018583a..90ed42a6 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/service/impl/PayMeetingServiceImpl.java @@ -483,6 +483,16 @@ public class PayMeetingServiceImpl extends ServiceImpl 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; diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/excel/StandardsMeetingExcel.java b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/excel/StandardsMeetingExcel.java index 0a69332e..20c6d64a 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/excel/StandardsMeetingExcel.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/meeting/vo/excel/StandardsMeetingExcel.java @@ -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; /** * 会议关联酒店联系人列表 */