From bd22db52f20b4b323e67b30395b8d958d1906c9e Mon Sep 17 00:00:00 2001 From: zhangjinli Date: Tue, 18 Oct 2022 11:54:07 +0800 Subject: [PATCH] =?UTF-8?q?fixed=20=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../company/CompanyQnAnswererController.java | 2 +- .../company/CompanyQnController.java | 30 +++++- .../company/CompanyQnTitleController.java | 37 ++++--- .../manage/ManageCompanyQnController.java | 11 ++ .../controller/manage/QnTitleController.java | 8 ++ .../zh/lingnuo/mapper/CompanyQnMapper.java | 6 +- .../com/zh/lingnuo/mapper/QnTitleMapper.java | 1 + .../com/zh/lingnuo/model/CompanyQnTitle.java | 10 ++ .../java/com/zh/lingnuo/model/QnTitle.java | 5 + .../service/ICompanyQnAnswerService.java | 14 ++- .../zh/lingnuo/service/ICompanyQnService.java | 3 + .../CompanyQnAnswerServiceImpl.java | 101 ++++++++++++++---- .../CompanyQnAnswererServiceImpl.java | 8 +- .../serviceImpl/CompanyQnServiceImpl.java | 57 +++++----- .../CompanyQnTitleServiceImpl.java | 37 +++---- .../serviceImpl/CompanyServiceImpl.java | 3 +- .../serviceImpl/QnGroupServiceImpl.java | 3 +- .../serviceImpl/QnTitleServiceImpl.java | 9 +- .../java/com/zh/lingnuo/utils/Common.java | 19 +++- .../com/zh/lingnuo/utils/ExcelExport.java | 95 +++++++++++----- .../utils/ExcelExportMyStylerImpl.java | 84 --------------- .../java/com/zh/lingnuo/utils/ExcelRead.java | 8 +- src/main/resources/application-test.yml | 4 +- 23 files changed, 335 insertions(+), 220 deletions(-) delete mode 100644 src/main/java/com/zh/lingnuo/utils/ExcelExportMyStylerImpl.java diff --git a/src/main/java/com/zh/lingnuo/controller/company/CompanyQnAnswererController.java b/src/main/java/com/zh/lingnuo/controller/company/CompanyQnAnswererController.java index 80ed95d..0dd62dd 100644 --- a/src/main/java/com/zh/lingnuo/controller/company/CompanyQnAnswererController.java +++ b/src/main/java/com/zh/lingnuo/controller/company/CompanyQnAnswererController.java @@ -66,7 +66,7 @@ public class CompanyQnAnswererController { if (null != companyErr) { return Result.err(companyErr); } - return Result.success(answererMapper.answererPageList(PageUtil.SetPage(params.getPageNum(), params.getPageSize()), new QueryWrapper().eq("qn_id", params.getQnId()))); + return Result.success(answererMapper.answererPageList(PageUtil.SetPage(params.getPageNum(), params.getPageSize()), new QueryWrapper().eq("qn_id", params.getQnId()).orderByDesc("id"))); } @Data diff --git a/src/main/java/com/zh/lingnuo/controller/company/CompanyQnController.java b/src/main/java/com/zh/lingnuo/controller/company/CompanyQnController.java index 7bd6004..5244c90 100644 --- a/src/main/java/com/zh/lingnuo/controller/company/CompanyQnController.java +++ b/src/main/java/com/zh/lingnuo/controller/company/CompanyQnController.java @@ -23,16 +23,22 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.Data; import lombok.experimental.Accessors; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import java.util.Date; import java.util.HashMap; import java.util.List; @@ -62,7 +68,7 @@ public class CompanyQnController { private int pageSize; @Schema(title = "名称") private String title; - @Schema(title = "状态",description = "0=未投放 1 =投放中 2=已结束") + @Schema(title = "状态", description = "0=未投放 1 =投放中 2=已结束") private Integer status; @Schema(title = "更新时间起") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @@ -112,7 +118,7 @@ public class CompanyQnController { } @Data - public static class ResultCompanyQnDetail{ + public static class ResultCompanyQnDetail { private CompanyQn baseInfo; private List titleList; } @@ -132,10 +138,10 @@ public class CompanyQnController { Result> listResult = companyQnTitleService.qnTitleList(qnId); ResultCompanyQnDetail result = new ResultCompanyQnDetail(); result.setBaseInfo(companyQn); - if(listResult.isSuccess()){ + if (listResult.isSuccess()) { result.setTitleList(listResult.getData()); } - return Result.success(result); + return Result.success(result); } @Data @@ -233,12 +239,19 @@ public class CompanyQnController { if (null == qn || qn.getCompanyId() != params.getUserInfo().getId()) { return Result.err("无效操作"); } - if(CompanyQn.CompanyQnStatusNotRelease != qn.getStatus()){ + if (CompanyQn.CompanyQnStatusNotRelease != qn.getStatus()) { return Result.err("不在待发布状态"); } return companyQnService.release(qn); } + @Operation(summary = "全量发送邮件") + @PostMapping("/groupSendMail") + @Token(requireUser = 1, level = {2}) + public Result groupSendMail(@Validated @RequestBody ParamsQnOpr params) { + return companyQnService.groupSendMail(params.getQnId()); + } + @Operation(summary = "停止问卷") @PostMapping("/end") @Token(requireUser = 1, level = {2}) @@ -320,4 +333,11 @@ public class CompanyQnController { return companyQnAnswerService.partnerChoiceResult(params.getQnId()); } + @Operation(summary = "答题人互评结果导出Excel") + @PostMapping("/resultExportExcel") + @Token(requireUser = 1, level = {2}) + public void resultExportExcel(HttpServletResponse response, @Validated @RequestBody paramsPartnerChoiceResult params) { + companyQnAnswerService.resultExportExcel(response, params.getQnId()); + } + } diff --git a/src/main/java/com/zh/lingnuo/controller/company/CompanyQnTitleController.java b/src/main/java/com/zh/lingnuo/controller/company/CompanyQnTitleController.java index 9b7f9a9..bde573d 100644 --- a/src/main/java/com/zh/lingnuo/controller/company/CompanyQnTitleController.java +++ b/src/main/java/com/zh/lingnuo/controller/company/CompanyQnTitleController.java @@ -62,6 +62,7 @@ public class CompanyQnTitleController { public static class ResultQnTitleList { private Integer id; private Integer qnId; + private Integer titleId; private String title; private Integer kind; private String kindName; @@ -113,16 +114,16 @@ public class CompanyQnTitleController { private String[] options; } - @Operation(summary = "新增") - @PostMapping("/add") - @Token(requireUser = 1, level = {2}) - public Result add(@Validated @RequestBody paramsQnTitleGroupAdd params) { - String companyErr = companyQnService.validCompany(params.getQnId(),params.getUserInfo().getId()); - if(null != companyErr){ - return Result.err(companyErr); - } - return companyQnTitleService.qnTitleAdd(params); - } +// @Operation(summary = "新增") +// @PostMapping("/add") +// @Token(requireUser = 1, level = {2}) +// public Result add(@Validated @RequestBody paramsQnTitleGroupAdd params) { +// String companyErr = companyQnService.validCompany(params.getQnId(),params.getUserInfo().getId()); +// if(null != companyErr){ +// return Result.err(companyErr); +// } +// return companyQnTitleService.qnTitleAdd(params); +// } @Data public static class paramsQnTitleAddModel { @@ -130,9 +131,7 @@ public class CompanyQnTitleController { @NotNull(message = "问卷id不能为空") private Integer qnId; @Schema(title = "题型库id") - private Integer[] BaseTitleIds; - @Schema(title = "题型库id") - private Integer[] QnTitleIds; + private Integer[] titleIds; @JsonIgnore(value = false) private Company userInfo; } @@ -161,12 +160,12 @@ public class CompanyQnTitleController { private Company userInfo; } - @Operation(summary = "修改") - @PostMapping("/upd") - @Token(requireUser = 1, level = {2}) - public Result upd(@Validated @RequestBody paramsQnTitleUpd params) { - return companyQnTitleService.qnTitleUpd(params); - } +// @Operation(summary = "修改") +// @PostMapping("/upd") +// @Token(requireUser = 1, level = {2}) +// public Result upd(@Validated @RequestBody paramsQnTitleUpd params) { +// return companyQnTitleService.qnTitleUpd(params); +// } @Data public static class paramsQnTitleDel { diff --git a/src/main/java/com/zh/lingnuo/controller/manage/ManageCompanyQnController.java b/src/main/java/com/zh/lingnuo/controller/manage/ManageCompanyQnController.java index 84fca0e..9ba42cf 100644 --- a/src/main/java/com/zh/lingnuo/controller/manage/ManageCompanyQnController.java +++ b/src/main/java/com/zh/lingnuo/controller/manage/ManageCompanyQnController.java @@ -19,6 +19,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.Data; import lombok.experimental.Accessors; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -26,10 +27,13 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import java.net.URLEncoder; import java.time.LocalDateTime; import java.util.List; @@ -110,4 +114,11 @@ public class ManageCompanyQnController { return companyQnAnswerService.partnerChoiceResult(params.getQnId()); } + @Operation(summary = "答题人互评结果导出Excel") + @PostMapping("/resultExportExcel") + @Token(requireUser = 1, level = {1}) + public void resultExportExcel(HttpServletResponse response, @Validated @RequestBody CompanyQnController.paramsPartnerChoiceResult params) { + companyQnAnswerService.resultExportExcel(response,params.getQnId()); + } + } diff --git a/src/main/java/com/zh/lingnuo/controller/manage/QnTitleController.java b/src/main/java/com/zh/lingnuo/controller/manage/QnTitleController.java index f35e554..64fd995 100644 --- a/src/main/java/com/zh/lingnuo/controller/manage/QnTitleController.java +++ b/src/main/java/com/zh/lingnuo/controller/manage/QnTitleController.java @@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.validation.constraints.Max; import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.time.LocalDateTime; @@ -80,6 +81,8 @@ public class QnTitleController { private Integer groupId; @Schema(title = "分类名称") private String groupName; + @Schema(title = "标签") + private String tag; @Schema(title = "状态") private int status; @Schema(title = "选项") @@ -103,10 +106,13 @@ public class QnTitleController { public static class paramsTitleAdd { @Schema(title = "标题") @NotNull(message = "标题不能为空") + @NotEmpty(message = "标题不能为空") private String title; @Schema(title = "分类") @NotNull(message = "分类不能为空") private Integer groupId; + @Schema(title = "标签") + private String tag; @Schema(title = "题型") @NotNull(message = "题型不能为空") @Min(value = 1, message = "类型范围为1 2 3") @@ -132,6 +138,8 @@ public class QnTitleController { private String title; @Schema(title = "分类") private Integer groupId; + @Schema(title = "标签") + private String tag; @Schema(title = "题型") @Min(value = 1, message = "类型范围为1 2 3") @Max(value = 3, message = "类型范围为1 2 3") diff --git a/src/main/java/com/zh/lingnuo/mapper/CompanyQnMapper.java b/src/main/java/com/zh/lingnuo/mapper/CompanyQnMapper.java index 48911ea..7a839af 100644 --- a/src/main/java/com/zh/lingnuo/mapper/CompanyQnMapper.java +++ b/src/main/java/com/zh/lingnuo/mapper/CompanyQnMapper.java @@ -55,8 +55,8 @@ public interface CompanyQnMapper extends BaseMapper { "t2.name as companyName \n" + "from company_qn t1 \n" + "LEFT JOIN company t2 on t1.company_id=t2.id \n" + - "${ew.customSqlSegment}" + - "GROUP BY id") + "${ew.customSqlSegment} " + + "GROUP BY id ORDER BY id DESC") IPage companyQnList(IPage page, @Param("ew") Wrapper qw); @Data @@ -82,6 +82,6 @@ public interface CompanyQnMapper extends BaseMapper { "LEFT JOIN company_qn_answer t3 on t3.answerer_id = t2.answerer_id\n" + "LEFT JOIN company_qn_title t4 on t1.id = t4.qn_id \n" + "WHERE t1.status != 0 and t2.answerer_id = #{answererId} " + - "GROUP BY t1.id") + "ORDER BY t1.id DESC GROUP BY t1.id") IPage qnList(IPage page,int answererId); } diff --git a/src/main/java/com/zh/lingnuo/mapper/QnTitleMapper.java b/src/main/java/com/zh/lingnuo/mapper/QnTitleMapper.java index fe6ec93..93e8039 100644 --- a/src/main/java/com/zh/lingnuo/mapper/QnTitleMapper.java +++ b/src/main/java/com/zh/lingnuo/mapper/QnTitleMapper.java @@ -27,6 +27,7 @@ public interface QnTitleMapper extends BaseMapper { private Integer kind; private Integer gpId; private String groupName; + private String tag; private int status; private String options; private String statusName; diff --git a/src/main/java/com/zh/lingnuo/model/CompanyQnTitle.java b/src/main/java/com/zh/lingnuo/model/CompanyQnTitle.java index 3e0c66e..c8a5fe2 100644 --- a/src/main/java/com/zh/lingnuo/model/CompanyQnTitle.java +++ b/src/main/java/com/zh/lingnuo/model/CompanyQnTitle.java @@ -35,6 +35,11 @@ public class CompanyQnTitle extends Model { */ private Integer qnId; + /** + * 题库题目id + */ + private Integer titleId; + /** * 题目 */ @@ -50,6 +55,11 @@ public class CompanyQnTitle extends Model { */ private Integer groupId; + /** + * 标签 + */ + private String tag; + /** * 选项 */ diff --git a/src/main/java/com/zh/lingnuo/model/QnTitle.java b/src/main/java/com/zh/lingnuo/model/QnTitle.java index 62d6669..47e7472 100644 --- a/src/main/java/com/zh/lingnuo/model/QnTitle.java +++ b/src/main/java/com/zh/lingnuo/model/QnTitle.java @@ -54,6 +54,11 @@ public class QnTitle extends Model { */ private Integer groupId; + /** + * 标签 + */ + private String tag; + /** * 选项 */ diff --git a/src/main/java/com/zh/lingnuo/service/ICompanyQnAnswerService.java b/src/main/java/com/zh/lingnuo/service/ICompanyQnAnswerService.java index 1315d88..8033701 100644 --- a/src/main/java/com/zh/lingnuo/service/ICompanyQnAnswerService.java +++ b/src/main/java/com/zh/lingnuo/service/ICompanyQnAnswerService.java @@ -4,10 +4,13 @@ import com.zh.lingnuo.controller.answerer.CompanyQnAnswerController; import com.zh.lingnuo.model.CompanyQnAnswer; import com.baomidou.mybatisplus.extension.service.IService; import com.zh.lingnuo.utils.result.Result; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import javax.servlet.http.HttpServletResponse; /** *

- * 服务类 + * 服务类 *

* * @author zh @@ -16,17 +19,20 @@ import com.zh.lingnuo.utils.result.Result; public interface ICompanyQnAnswerService extends IService { // 问卷列表 - Result qnList(CompanyQnAnswerController.paramsAnswererQnList params,int answererId); + Result qnList(CompanyQnAnswerController.paramsAnswererQnList params, int answererId); // 答题结果 - Result all(int qnId,int answererId); + Result all(int qnId, int answererId); // 全部被评人 - Result allQnTowards(int qnId,int answererId); + Result allQnTowards(int qnId, int answererId); // 答题 Result add(CompanyQnAnswerController.paramsCompanyQnAnswerAdd params); // 答题人互评详情 Result partnerChoiceResult(int qnId); + + // 答题人互评结果导出Excel + void resultExportExcel(HttpServletResponse response,int qnId); } diff --git a/src/main/java/com/zh/lingnuo/service/ICompanyQnService.java b/src/main/java/com/zh/lingnuo/service/ICompanyQnService.java index 47a7916..8ccf12b 100644 --- a/src/main/java/com/zh/lingnuo/service/ICompanyQnService.java +++ b/src/main/java/com/zh/lingnuo/service/ICompanyQnService.java @@ -32,6 +32,9 @@ public interface ICompanyQnService extends IService { // 发布 Result release(CompanyQn qn); + // 全量发送邮件 + Result groupSendMail(int qnId); + // 停止问卷 Result end(int qnId); diff --git a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswerServiceImpl.java b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswerServiceImpl.java index 138134c..4874d52 100644 --- a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswerServiceImpl.java +++ b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswerServiceImpl.java @@ -20,18 +20,22 @@ import com.zh.lingnuo.service.ICompanyQnAnswererService; import com.zh.lingnuo.service.ICompanyQnService; import com.zh.lingnuo.service.ICompanyQnTitleService; import com.zh.lingnuo.utils.Common; +import com.zh.lingnuo.utils.ExcelExport; import com.zh.lingnuo.utils.PageUtil; import com.zh.lingnuo.utils.result.Result; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; /** *

@@ -59,15 +63,15 @@ public class CompanyQnAnswerServiceImpl extends ServiceImpl qnList = companyQnMapper.qnList(PageUtil.SetPage(params.getPageNum(), params.getPageSize()),answererId); + public Result qnList(CompanyQnAnswerController.paramsAnswererQnList params, int answererId) { + IPage qnList = companyQnMapper.qnList(PageUtil.SetPage(params.getPageNum(), params.getPageSize()), answererId); return Result.success(qnList); } // 答题结果 - public Result all(int qnId,int answererId) { + public Result all(int qnId, int answererId) { List list = companyQnAnswerMapper.answerList(new QueryWrapper() - .eq("t1.qn_id",qnId).eq("t1.answerer_id",answererId)); + .eq("t1.qn_id", qnId).eq("t1.answerer_id", answererId)); List result = new ArrayList(); HashMap>> t = new HashMap(); for (CompanyQnAnswerMapper.MapperResultAnswerAll i : list) { @@ -77,7 +81,7 @@ public class CompanyQnAnswerServiceImpl extends ServiceImpl> l = t.get(titleId); if (null == l.get(i.getAnswerOpt())) { l.put(i.getAnswerOpt(), new ArrayList()); @@ -102,7 +106,7 @@ public class CompanyQnAnswerServiceImpl extends ServiceImpl list = companyQnAnswererMapper.qnAnswererList(new QueryWrapper().eq("t1.qn_id", qnId).ne("t1.answerer_id", answererId)); List resList = new ArrayList<>(); @@ -126,7 +130,7 @@ public class CompanyQnAnswerServiceImpl extends ServiceImpl qnTitleList = companyQnTitleService.list(new QueryWrapper() + .eq("qn_id", qnId) + .eq("kind", CompanyQnTitle.CompanyQnTitleKindPartnerChoice)); + Map qnTitleMap = new LinkedHashMap<>(); + for (CompanyQnTitle qnTitle : qnTitleList) { + qnTitleMap.put(qnTitle.getTitle(), qnTitle.getTitle()); + } + List resultList = new ArrayList<>(); + List list = partnerChoiceResultData(qnId, false); + for (CompanyQnController.ResultPartnerChoice resultPartnerChoice : list) { + Map map = new LinkedHashMap(); + map.put("SourceId", resultPartnerChoice.getAnswererName()); + map.put("TargetId", resultPartnerChoice.getQnTowardsName()); + for (CompanyQnController.ResultAnswerPartnerChoice resultAnswerPartnerChoice : resultPartnerChoice.getAnswerPartnerChoice()) { + map.put(resultAnswerPartnerChoice.getTitleName(), resultAnswerPartnerChoice.getAnswerOpt()); + } + resultList.add(map); + } + XSSFWorkbook wb = ExcelExport.createExcel(resultList, null); + try { + String day = LocalDateTime.now().format(DateTimeFormatter.ofPattern("YYYY-MM-dd")); + String fileName = URLEncoder.encode(qn.getTitle(), "UTF8"); + response.setContentType("application/vnd.ms-excel;chartset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + "-" + day + ".xls"); + ServletOutputStream out = response.getOutputStream(); + wb.write(out); + out.flush(); + out.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //答题人互评详情数据 + public List partnerChoiceResultData(int qnId, boolean isSecret) { QueryWrapper qw = new QueryWrapper<>(); + List list = companyQnAnswerMapper.partnerChoiceResult(qnId); List result = new ArrayList(); - HashMap>> t = new HashMap(); + HashMap>> t = new HashMap(); for (CompanyQnAnswerMapper.MapperResultPartnerChoice i : list) { int asId = i.getAnswererId(); int qnTowardsId = i.getQnTowardsId(); - if(null == t.get(asId)){ - t.put(asId,new HashMap>()); + if (null == t.get(asId)) { + t.put(asId, new HashMap>()); } - if(null == t.get(asId).get(qnTowardsId)){ + if (null == t.get(asId).get(qnTowardsId)) { t.get(asId).put(qnTowardsId, new ArrayList<>()); CompanyQnController.ResultPartnerChoice r = new CompanyQnController.ResultPartnerChoice(); BeanUtils.copyProperties(i, r); + if (isSecret) { + r.setAnswererName(String.valueOf(asId)); + r.setQnTowardsName(String.valueOf(qnTowardsId)); + } result.add(r); } t.get(asId).get(qnTowardsId).add(new CompanyQnController.ResultAnswerPartnerChoice() .setTitleId(i.getTitleId()).setTitleName(i.getTitle()).setAnswerOpt(i.getAnswerOpt()).setAnswerCont(i.getAnswerCont())); } - for (CompanyQnController.ResultPartnerChoice item : result) { - item.setAnswerPartnerChoice(t.get(item.getAnswererId()).get(item.getQnTowardsId())); - } - return Result.success(result); + for (CompanyQnController.ResultPartnerChoice item : result) { + item.setAnswerPartnerChoice(t.get(item.getAnswererId()).get(item.getQnTowardsId())); } + return result; + } } diff --git a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswererServiceImpl.java b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswererServiceImpl.java index 67675ec..f757d82 100644 --- a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswererServiceImpl.java +++ b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnAnswererServiceImpl.java @@ -62,6 +62,9 @@ public class CompanyQnAnswererServiceImpl extends ServiceImpl().eq("mail",v.getMail())); mailList.add(v.getMail()); } + List aList = new ArrayList(); + if(mailList.size() == 0){ + return Result.success(aList); + } List mail = answererService.list(new QueryWrapper().in("mail", mailList)); List answererIdList = companyQnAnswererMapper.answererIdList(qnId); - List aList = new ArrayList(); for (Answerer answerer : mail) { if(!answererIdList.contains(answerer.getId())) { aList.add(new CompanyQnAnswerer().setQnId(qnId).setAnswererId(answerer.getId())); diff --git a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnServiceImpl.java b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnServiceImpl.java index 4b7413d..11588b1 100644 --- a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnServiceImpl.java +++ b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnServiceImpl.java @@ -109,37 +109,44 @@ public class CompanyQnServiceImpl extends ServiceImpl().eq("id", qnId).eq("status", CompanyQn.CompanyQnStatusNotRelease).set("status", CompanyQn.CompanyQnStatusRelease)); - // 发送邮件 - List mailList = new ArrayList(); - List illegalMailList = new ArrayList(); List answerers = answererMapper.answererList(qnId); if(answerers.size()==0){ return Result.err("答题人为空"); } - System.out.println("发送邮件开始"); - for (Answerer answerer : answerers) { - String mail = answerer.getMail(); - if (null != mail) { - String subject = "问卷填写通知"; - String content = "请您用提供的账号密码登录该平台,并回答相应问题。\n" - +"问卷地址:"+webUrl+"\n" - +"账号:"+answerer.getMail()+"\n" - +"密码:"+answerer.getTel()+"\n" - +"注意:本次调研采用【"+isSecret+"】形式。在最后的群体报告中,您的个人信息均会隐去。您的个人报告只有您自己能看到。"; - if (!mailServiceImpl.sendMail(mail, subject, content)) { - illegalMailList.add(answerer.getName()); - } - } - } - String msg = "发布成功"; - if (illegalMailList.size() > 0) { - msg = msg + "," + illegalMailList.toString() + "邮箱错误"; - } - return Result.success("", msg + "!"); + super.update(new UpdateWrapper().eq("id", qnId).eq("status", CompanyQn.CompanyQnStatusNotRelease).set("status", CompanyQn.CompanyQnStatusRelease)); + return Result.success("发布成功"); + } + + // 全量发送邮件 + public Result groupSendMail(int qnId){ + CompanyQn qn = super.getById(qnId); + String isSecret = CompanyQn.getIsSecretDesc(qn.getIsSecret()); + List answerers = answererMapper.answererList(qn.getId()); + List mailList = new ArrayList(); + List illegalMailList = new ArrayList(); + System.out.println("发送邮件开始"); + for (Answerer answerer : answerers) { + String mail = answerer.getMail(); + if (null != mail) { + String subject = "问卷填写通知"; + String content = "请您用提供的账号密码登录该平台,并回答相应问题。\n" + +"问卷地址:"+webUrl+"\n" + +"账号:"+answerer.getMail()+"\n" + +"密码:"+answerer.getTel()+"\n" + +"注意:本次调研采用【"+isSecret+"】形式。在最后的群体报告中,您的个人信息均会隐去。您的个人报告只有您自己能看到。"; + if (!mailServiceImpl.sendMail(mail, subject, content)) { + illegalMailList.add(answerer.getName()); + } + } + } + String msg = "发布成功"; + if (illegalMailList.size() > 0) { + msg = msg + "," + illegalMailList.toString() + "邮箱错误"; + } + return Result.success("", msg + "!"); } + // 停止问卷 public Result end(int qnId) { if (!super.update(new UpdateWrapper().eq("id", qnId).eq("status", CompanyQn.CompanyQnStatusRelease).set("status", CompanyQn.CompanyQnStatusEnd))) { diff --git a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnTitleServiceImpl.java b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnTitleServiceImpl.java index c18b762..bc1bd36 100644 --- a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnTitleServiceImpl.java +++ b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyQnTitleServiceImpl.java @@ -23,7 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Map; /** *

@@ -44,7 +46,7 @@ public class CompanyQnTitleServiceImpl extends ServiceImpl> qnTitleList(int qnId) { QueryWrapper qw = new QueryWrapper<>(); - qw.eq("qn_id", qnId); + qw.eq("qn_id", qnId).orderByDesc("id"); List list = super.list(qw); List result = new ArrayList<>(); for (CompanyQnTitle r : list) { @@ -96,36 +98,31 @@ public class CompanyQnTitleServiceImpl extends ServiceImpl cList = super.list(new QueryWrapper().select("title_id").eq("qn_id", qnId)); + HashSet idList = new HashSet<>(); + ArrayList list = new ArrayList<>(); + for (CompanyQnTitle i : cList) { + idList.add(i.getTitleId()); } - for (int titleId : params.getQnTitleIds()) { + for (int titleId : params.getTitleIds()) { + if(idList.contains(titleId)){ + continue; + } QnTitle qnTitle = qnTitleService.getById(titleId); if (null == qnTitle) { return Result.err("未知题型"); } CompanyQnTitle companyQnTitle = new CompanyQnTitle() .setQnId(params.getQnId()) + .setTitleId(qnTitle.getId()) .setTitle(qnTitle.getTitle()) .setKind(qnTitle.getKind()) - .setGroupId(CompanyQnTitle.ManageQnTitleNotBase) + .setGroupId(qnTitle.getGroupId()==1?CompanyQnTitle.ManageQnTitleBase:CompanyQnTitle.ManageQnTitleNotBase) .setOptions(qnTitle.getOptions()); - if (!super.save(companyQnTitle)) { - return Result.err("保存出错"); - } + list.add(companyQnTitle); } + super.saveBatch(list); return Result.success(""); } diff --git a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyServiceImpl.java b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyServiceImpl.java index 1f341e1..a337188 100644 --- a/src/main/java/com/zh/lingnuo/serviceImpl/CompanyServiceImpl.java +++ b/src/main/java/com/zh/lingnuo/serviceImpl/CompanyServiceImpl.java @@ -41,7 +41,8 @@ public class CompanyServiceImpl extends ServiceImpl impl .ge(null != params.getCreateTimeStart(), "created_at", params.getCreateTimeStart()) .le(null != params.getCreateTimeEnd(), "created_at", params.getCreateTimeEnd()) .ge(null != params.getUpdateTimeStart(), "updated_at", params.getUpdateTimeStart()) - .le(null != params.getUpdateTimeEnd(), "updated_at", params.getUpdateTimeEnd()); + .le(null != params.getUpdateTimeEnd(), "updated_at", params.getUpdateTimeEnd()) + .orderByDesc("id"); IPage page = super.page(PageUtil.SetPage(params.getPageNum(), params.getPageSize()), qw); page.convert(r -> { resultCompany v = new resultCompany(); diff --git a/src/main/java/com/zh/lingnuo/serviceImpl/QnGroupServiceImpl.java b/src/main/java/com/zh/lingnuo/serviceImpl/QnGroupServiceImpl.java index 44caf48..7902ba0 100644 --- a/src/main/java/com/zh/lingnuo/serviceImpl/QnGroupServiceImpl.java +++ b/src/main/java/com/zh/lingnuo/serviceImpl/QnGroupServiceImpl.java @@ -30,7 +30,8 @@ public class QnGroupServiceImpl extends ServiceImpl impl // 列表 public Result> groupList(QnGroupController.paramsGroupList params){ QueryWrapper qw = new QueryWrapper() - .like(StringUtils.isNotBlank(params.getTitle()), "t1.title", params.getTitle()); + .like(StringUtils.isNotBlank(params.getTitle()), "t1.title", params.getTitle()) + .orderByDesc("t1.id"); return Result.success(qnGroupMapper.all(qw)); } diff --git a/src/main/java/com/zh/lingnuo/serviceImpl/QnTitleServiceImpl.java b/src/main/java/com/zh/lingnuo/serviceImpl/QnTitleServiceImpl.java index 6940023..b4a3fbd 100644 --- a/src/main/java/com/zh/lingnuo/serviceImpl/QnTitleServiceImpl.java +++ b/src/main/java/com/zh/lingnuo/serviceImpl/QnTitleServiceImpl.java @@ -46,8 +46,8 @@ public class QnTitleServiceImpl extends ServiceImpl impl .ge(null != params.getCreateTimeStart(), "t1.created_at", params.getCreateTimeStart()) .le(null != params.getCreateTimeEnd(), "t1.created_at", params.getCreateTimeEnd()) .ge(null != params.getUpdateTimeStart(), "t1.updated_at", params.getUpdateTimeStart()) - .le(null != params.getUpdateTimeEnd(), "t1.updated_at", params.getUpdateTimeEnd()); - + .le(null != params.getUpdateTimeEnd(), "t1.updated_at", params.getUpdateTimeEnd()) + .orderByDesc("t1.id"); { String groupWhere = "select id from qn_group where"; if (StringUtils.isNotBlank(params.getGroupTitle())) { @@ -60,6 +60,7 @@ public class QnTitleServiceImpl extends ServiceImpl impl qw.inSql("group_id", groupWhere); } } + IPage page = qnTitleMapper.list(PageUtil.SetPage(params.getPageNum(), params.getPageSize()), qw); page.convert(r -> { QnTitleController.resultTitleList v = new QnTitleController.resultTitleList(); @@ -81,6 +82,7 @@ public class QnTitleServiceImpl extends ServiceImpl impl QnTitle qnTitle = new QnTitle() .setTitle(params.getTitle()) .setGroupId(params.getGroupId()) + .setTag(params.getTag()) .setKind(params.getKind()) .setStatus(1); { @@ -96,7 +98,7 @@ public class QnTitleServiceImpl extends ServiceImpl impl if (!super.save(qnTitle)) { return Result.err("添加出错"); } - return Result.success(); + return Result.success(""); } // 修改 @@ -120,6 +122,7 @@ public class QnTitleServiceImpl extends ServiceImpl impl } if (!super.update(new QnTitle(), qw .set(StringUtils.isNotBlank(params.getTitle()), "title", params.getTitle()) + .set(StringUtils.isNotBlank(params.getTag()),"tag",params.getTag()) .set(Common.higherZero(params.getKind()), "kind", params.getKind()))) { return Result.err("操作失败"); } diff --git a/src/main/java/com/zh/lingnuo/utils/Common.java b/src/main/java/com/zh/lingnuo/utils/Common.java index 2f629bc..7eccce9 100644 --- a/src/main/java/com/zh/lingnuo/utils/Common.java +++ b/src/main/java/com/zh/lingnuo/utils/Common.java @@ -5,6 +5,8 @@ import org.springframework.util.DigestUtils; import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; import java.util.Random; public class Common { @@ -31,7 +33,7 @@ public class Common { return i.compareTo(0) == 1 ? true : false; } - public static Object ObjectFieldValue(Object obj,String fieldName){ + public static Object ObjectFieldValue(Object obj, String fieldName) { Class resultClz = obj.getClass(); Field[] fieldInfo = resultClz.getDeclaredFields(); for (Field field : fieldInfo) { @@ -46,6 +48,7 @@ public class Common { } return null; } + public static Object changObjectValue(Object obj, String fieldName, Object value) { Class resultClz = obj.getClass(); Field[] fieldInfo = resultClz.getDeclaredFields(); //获取class里的所有字段 父类字段获取不到 注:如果出现加密解密失败 请先查看idno是否在父类中 @@ -61,6 +64,20 @@ public class Common { return obj; } + public static Map objectToMap(Object obj) throws Exception { + Map map = new HashMap<>(); + if (obj == null) { + return null; + } + Field[] fields = obj.getClass().getDeclaredFields();//获取类的各个属性值 + for (Field field : fields) { + String fieldName = field.getName();//获取类的属性名称 + String value = field.get(obj) != null ? field.get(obj).toString() : ""; + map.put(fieldName, value); + } + return map; + } + public static Boolean isContain(int[] arr, int v) { if (arr == null || arr.length == 0) { return false; diff --git a/src/main/java/com/zh/lingnuo/utils/ExcelExport.java b/src/main/java/com/zh/lingnuo/utils/ExcelExport.java index ba58388..384bbbb 100644 --- a/src/main/java/com/zh/lingnuo/utils/ExcelExport.java +++ b/src/main/java/com/zh/lingnuo/utils/ExcelExport.java @@ -1,35 +1,72 @@ package com.zh.lingnuo.utils; -import cn.afterturn.easypoi.excel.ExcelExportUtil; -import cn.afterturn.easypoi.excel.entity.ExportParams; -import org.apache.poi.ss.formula.functions.T; -import org.apache.poi.ss.usermodel.Workbook; - -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import java.net.URLEncoder; -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; -import java.util.List; +import org.apache.poi.xssf.usermodel.*; +import java.util.*; + +/** + * 将List> 类型数据导出到Excel文件 + */ public class ExcelExport { - public static void exportExcel(Collection listData, Class pojoClass, String headTitle, String sheetName, HttpServletResponse response) { - ExportParams params = new ExportParams(headTitle, sheetName); - params.setHeight((short) 8); - params.setStyle(ExcelExportMyStylerImpl.class); - try { - Workbook workbook = ExcelExportUtil.exportExcel(params, pojoClass, listData); - String fileName = headTitle + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); - fileName = URLEncoder.encode(fileName, "UTF8"); - response.setContentType("application/vnd.ms-excel;chartset=utf-8"); - response.setHeader("Content-Disposition", "attachment;filename="+fileName + ".xls"); - ServletOutputStream out=response.getOutputStream(); - workbook.write(out); - out.flush(); - out.close(); - } catch (Exception e) { - e.printStackTrace(); + + /** + * src:定义下载的文件路径 + * @param src + * @return + */ + public static XSSFWorkbook createExcel(List list, String src) { + // 定义一个新的工作簿 + XSSFWorkbook wb = new XSSFWorkbook(); + // 创建一个Sheet页 + XSSFSheet sheet = wb.createSheet("Sheet1"); + //设置行高 + sheet.setDefaultRowHeight((short) (2 * 256)); + //设置列宽 + sheet.setColumnWidth(0, 4000); + sheet.setColumnWidth(1, 4000); + sheet.setColumnWidth(2, 4000); + XSSFFont font = wb.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 16); + //获得表格第一行 + XSSFRow row = sheet.createRow(0); + //根据需要给第一行每一列设置标题 + int rowCellIndex = 0; + XSSFCell cell = row.createCell(rowCellIndex); + Set keys = list.get(0).keySet(); + Object[] keysArray = keys.toArray(); + for (Object key : keys) { + cell = row.createCell(rowCellIndex); + + cell.setCellValue( key.toString()); + + rowCellIndex++; + } + XSSFRow rows; + XSSFCell cells; + //循环拿到的数据给所有行每一列设置对应的值 + for (int i = 0; i < list.size(); i++) { + + // 在这个sheet页里创建一行 + rows = sheet.createRow(i + 1); + // 该行创建一个单元格,在该单元格里设置值 + rowCellIndex = 0; + for (Object s : keysArray) { + cells = rows.createCell(rowCellIndex); + cells.setCellValue(list.get(i).get(s).toString()); + rowCellIndex++; + } } +// try { +// File file = new File(src); +// FileOutputStream fileOutputStream = new FileOutputStream(file); +// wb.write(fileOutputStream); +// wb.close(); +// fileOutputStream.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } + return wb; + + } } -} diff --git a/src/main/java/com/zh/lingnuo/utils/ExcelExportMyStylerImpl.java b/src/main/java/com/zh/lingnuo/utils/ExcelExportMyStylerImpl.java deleted file mode 100644 index 9a0a937..0000000 --- a/src/main/java/com/zh/lingnuo/utils/ExcelExportMyStylerImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.zh.lingnuo.utils; - -import org.apache.poi.ss.usermodel.BorderStyle; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.FillPatternType; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.HorizontalAlignment; -import org.apache.poi.ss.usermodel.IndexedColors; -import org.apache.poi.ss.usermodel.VerticalAlignment; -import org.apache.poi.ss.usermodel.Workbook; - -import cn.afterturn.easypoi.excel.export.styler.AbstractExcelExportStyler; -import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; -/** - * @ClassName: ExcelExportMyStylerImpl - * @Description: 自定义报表导出样式,可以修改表头颜色,高度等 - * @Author: sunt - * @Date: 2019/8/29 21:39 - * @Version 1.0 - **/ -public class ExcelExportMyStylerImpl extends AbstractExcelExportStyler implements IExcelExportStyler { - - public ExcelExportMyStylerImpl(Workbook workbook) { - super.createStyles(workbook); - } - - @Override - public CellStyle getTitleStyle(short color) { - CellStyle titleStyle = workbook.createCellStyle(); - Font font = workbook.createFont(); - font.setBold(true);// 加粗 - titleStyle.setFont(font); - titleStyle.setAlignment(HorizontalAlignment.CENTER);// 居中 - titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中 - titleStyle.setFillForegroundColor(IndexedColors.AQUA.index);// 设置颜色 - titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - titleStyle.setBorderRight(BorderStyle.THIN); - titleStyle.setWrapText(true); - return titleStyle; - } - - @SuppressWarnings("deprecation") - @Override - public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) { - CellStyle style = workbook.createCellStyle(); -// style.setAlignment(CellStyle.ALIGN_CENTER); -// style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); - style.setDataFormat(STRING_FORMAT); - if (isWarp) { - style.setWrapText(true); - } - return style; - } - - @Override - public CellStyle getHeaderStyle(short color) { - CellStyle titleStyle = workbook.createCellStyle(); - Font font = workbook.createFont(); - font.setBold(true);// 加粗 - font.setColor(IndexedColors.RED.index); - font.setFontHeightInPoints((short) 11); - titleStyle.setFont(font); - titleStyle.setAlignment(HorizontalAlignment.CENTER);// 居中 - titleStyle.setFillForegroundColor(IndexedColors.WHITE.index);// 设置颜色 - titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中 - titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - titleStyle.setBorderRight(BorderStyle.THIN); - titleStyle.setWrapText(true); - return titleStyle; - } - - @SuppressWarnings("deprecation") - @Override - public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) { - CellStyle style = workbook.createCellStyle(); -// style.setAlignment(CellStyle.ALIGN_CENTER); -// style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); - style.setDataFormat(STRING_FORMAT); - if (isWarp) { - style.setWrapText(true); - } - return style; - } -} diff --git a/src/main/java/com/zh/lingnuo/utils/ExcelRead.java b/src/main/java/com/zh/lingnuo/utils/ExcelRead.java index 719f6bc..af7b27c 100644 --- a/src/main/java/com/zh/lingnuo/utils/ExcelRead.java +++ b/src/main/java/com/zh/lingnuo/utils/ExcelRead.java @@ -228,6 +228,7 @@ public class ExcelRead { //判断成员变量的类型 Field field = texcel.getClass().getDeclaredField((String) map.getValue()); String object = field.getGenericType().getTypeName(); + System.out.println(object.toString()); if (object.endsWith("String")) { //执行set方法 method.invoke(texcel, celldata); @@ -243,7 +244,12 @@ public class ExcelRead { method.invoke(texcel, middata); } if (object.endsWith("Integer")) { - Integer middata = Integer.parseInt(celldata); + Integer middata = null; + try { + middata = Integer.parseInt(celldata); + } catch (NumberFormatException e) { + + } //执行set方法 method.invoke(texcel, middata); } diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index fdf1c48..533f746 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -82,9 +82,9 @@ web: webUrl: http://questionnaire.linac.net apiPath: com.zh.lingnuo.controller # mac图片地址 - uploadPath: /Users/apple/Pictures +# uploadPath: /Users/apple/Pictures # 线上图片上传位置 - # uploadPath: /static/sws/upload/ + uploadPath: /static/sws/upload/ # 图片压缩尺寸界限(200*1024) picSizeLimit: 204800 # cdn: http://cdn.sws010.com