From ae0241666d5302481c85a544a667e28cf99c6841 Mon Sep 17 00:00:00 2001 From: zhouyuan <1069065057@qq.com> Date: Wed, 18 May 2022 16:00:22 +0800 Subject: [PATCH] update --- pom.xml | 2 +- .../api/controller/ApiAppointController.java | 202 ++++ .../api/controller/ApiDataBankController.java | 1 + .../api/controller/ApiReviewController.java | 203 ++++ .../boot/modules/rddb/entity/Appoint.java | 180 ++++ .../rddb/entity/AppointAttachment.java | 64 ++ .../modules/rddb/entity/AppointComment.java | 63 ++ .../boot/modules/rddb/entity/AppointUser.java | 100 ++ .../ydool/boot/modules/rddb/entity/Audit.java | 4 +- .../boot/modules/rddb/entity/AuditUser.java | 4 +- .../boot/modules/rddb/entity/Review.java | 159 ++++ .../modules/rddb/entity/ReviewAttachment.java | 60 ++ .../boot/modules/rddb/entity/ReviewAudit.java | 78 ++ .../modules/rddb/entity/ReviewComment.java | 56 ++ .../boot/modules/rddb/entity/ReviewUser.java | 68 ++ .../modules/rddb/entity/bo/AppointBo.java | 23 + .../boot/modules/rddb/entity/bo/ReviewBo.java | 24 + .../modules/rddb/entity/dto/AppointDto.java | 44 + .../modules/rddb/entity/dto/ReviewDto.java | 39 + .../appoint/AppointCommentRequest.java | 18 + .../appoint/AppointPerformRequest.java | 17 + .../request/appoint/AppointVoteRequest.java | 15 + .../state/AppointConferenceStateRequest.java | 60 ++ .../state/AppointPerformStateRequest.java | 36 + .../state/AppointProposeStateRequest.java | 51 + .../state/AppointScoreStateRequest.java | 48 + .../state/AppointVoteStateRequest.java | 37 + .../request/review/ReviewAuditRequest.java | 21 + .../request/review/ReviewCheckRequest.java | 17 + .../request/review/ReviewCommentRequest.java | 18 + .../review/state/ReviewCheckStateRequest.java | 42 + .../state/ReviewInReportStateRequest.java | 52 ++ .../state/ReviewOpinionStateRequest.java | 40 + .../state/ReviewResultStateRequest.java | 40 + .../modules/rddb/excel/db/DbReadHead.java | 20 +- .../boot/modules/rddb/gen/MyGenerator.java | 2 +- .../rddb/mapper/AppointAttachmentMapper.java | 16 + .../rddb/mapper/AppointCommentMapper.java | 16 + .../modules/rddb/mapper/AppointMapper.java | 16 + .../rddb/mapper/AppointUserMapper.java | 16 + .../rddb/mapper/ReviewAttachmentMapper.java | 16 + .../rddb/mapper/ReviewAuditMapper.java | 16 + .../rddb/mapper/ReviewCommentMapper.java | 16 + .../modules/rddb/mapper/ReviewMapper.java | 16 + .../modules/rddb/mapper/ReviewUserMapper.java | 16 + .../mapper/xml/AppointAttachmentMapper.xml | 5 + .../rddb/mapper/xml/AppointCommentMapper.xml | 5 + .../modules/rddb/mapper/xml/AppointMapper.xml | 5 + .../rddb/mapper/xml/AppointUserMapper.xml | 5 + .../mapper/xml/ReviewAttachmentMapper.xml | 5 + .../rddb/mapper/xml/ReviewAuditMapper.xml | 5 + .../rddb/mapper/xml/ReviewCommentMapper.xml | 5 + .../modules/rddb/mapper/xml/ReviewMapper.xml | 5 + .../rddb/mapper/xml/ReviewUserMapper.xml | 5 + .../service/AppointAttachmentService.java | 19 + .../rddb/service/AppointCommentService.java | 19 + .../modules/rddb/service/AppointService.java | 331 +++++++ .../rddb/service/AppointUserService.java | 19 + .../modules/rddb/service/NoticeService.java | 4 +- .../rddb/service/ReviewAttachmentService.java | 19 + .../rddb/service/ReviewAuditService.java | 19 + .../rddb/service/ReviewCommentService.java | 19 + .../modules/rddb/service/ReviewService.java | 381 ++++++++ .../rddb/service/ReviewUserService.java | 19 + .../modules/rddb/service/SyncNameService.java | 75 +- .../rddb/web/ActivityAuditUserController.java | 2 +- .../rddb/web/AppointAttachmentController.java | 20 + .../rddb/web/AppointCommentController.java | 21 + .../modules/rddb/web/AppointController.java | 95 ++ .../rddb/web/AppointUserController.java | 72 ++ .../modules/rddb/web/AuditUserController.java | 2 +- .../rddb/web/ConferenceUserController.java | 2 +- .../rddb/web/ReadFileUserController.java | 2 +- .../rddb/web/ReviewAttachmentController.java | 21 + .../rddb/web/ReviewAuditController.java | 73 ++ .../rddb/web/ReviewCommentController.java | 21 + .../modules/rddb/web/ReviewController.java | 108 +++ .../rddb/web/ReviewUserController.java | 72 ++ .../web/SuperviseThingUserController.java | 2 +- .../rddb/web/VoterSuggestSolveController.java | 2 +- .../modules/rddb/wrapper/AppointWrapper.java | 109 +++ .../boot/modules/rddb/wrapper/DbWrapper.java | 18 +- .../modules/rddb/wrapper/ReviewWrapper.java | 113 +++ src/main/resources/static/act.js | 879 ++++++++++++++++++ .../resources/views/htmltags/mupload.html | 136 +++ src/main/resources/views/htmltags/person.html | 101 ++ .../views/modules/rddb/appoint/form.html | 146 +++ .../views/modules/rddb/appoint/index.html | 80 ++ .../resources/views/modules/rddb/assign.html | 88 ++ .../views/modules/rddb/review/form.html | 142 +++ .../views/modules/rddb/review/index.html | 98 ++ 91 files changed, 5385 insertions(+), 61 deletions(-) create mode 100644 src/main/java/com/ydool/boot/api/controller/ApiAppointController.java create mode 100644 src/main/java/com/ydool/boot/api/controller/ApiReviewController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/Appoint.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/AppointAttachment.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/AppointComment.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/AppointUser.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/Review.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAttachment.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAudit.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/ReviewComment.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/ReviewUser.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/bo/AppointBo.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/bo/ReviewBo.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/dto/AppointDto.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/dto/ReviewDto.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointCommentRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointPerformRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointVoteRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointConferenceStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointPerformStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointProposeStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointScoreStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointVoteStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewAuditRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCheckRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCommentRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewCheckStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewInReportStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewOpinionStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewResultStateRequest.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/AppointAttachmentMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/AppointCommentMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/AppointMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/AppointUserMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAttachmentMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAuditMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewCommentMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewUserMapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointAttachmentMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointCommentMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointUserMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAttachmentMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAuditMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewCommentMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewUserMapper.xml create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/AppointAttachmentService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/AppointCommentService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/AppointService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/AppointUserService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/ReviewAttachmentService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/ReviewAuditService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/ReviewCommentService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/ReviewService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/service/ReviewUserService.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/AppointAttachmentController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/AppointCommentController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/AppointController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/AppointUserController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/ReviewAttachmentController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/ReviewAuditController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/ReviewCommentController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/ReviewController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/ReviewUserController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/wrapper/AppointWrapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/wrapper/ReviewWrapper.java create mode 100644 src/main/resources/static/act.js create mode 100644 src/main/resources/views/htmltags/mupload.html create mode 100644 src/main/resources/views/htmltags/person.html create mode 100644 src/main/resources/views/modules/rddb/appoint/form.html create mode 100644 src/main/resources/views/modules/rddb/appoint/index.html create mode 100644 src/main/resources/views/modules/rddb/assign.html create mode 100644 src/main/resources/views/modules/rddb/review/form.html create mode 100644 src/main/resources/views/modules/rddb/review/index.html diff --git a/pom.xml b/pom.xml index 8153b06..8cb5d29 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ com.alibaba fastjson - 1.2.58 + 1.2.80 cn.hutool diff --git a/src/main/java/com/ydool/boot/api/controller/ApiAppointController.java b/src/main/java/com/ydool/boot/api/controller/ApiAppointController.java new file mode 100644 index 0000000..0e18485 --- /dev/null +++ b/src/main/java/com/ydool/boot/api/controller/ApiAppointController.java @@ -0,0 +1,202 @@ +package com.ydool.boot.api.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +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.github.xiaoymin.knife4j.annotations.DynamicParameter; +import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.modules.rddb.entity.Appoint; +import com.ydool.boot.modules.rddb.entity.AppointComment; +import com.ydool.boot.modules.rddb.entity.dto.AppointDto; +import com.ydool.boot.modules.rddb.entity.request.appoint.*; +import com.ydool.boot.modules.rddb.entity.request.appoint.state.*; +import com.ydool.boot.modules.rddb.service.AppointCommentService; +import com.ydool.boot.modules.rddb.service.AppointService; +import com.ydool.boot.modules.rddb.wrapper.AppointWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +/** + * @author: zhouyuan + * @date: 2022年05月16日 + */ +@Controller +@RequestMapping("/api/appoint") +@Api(value = "A任免督职", tags = "A任免督职") +public class ApiAppointController extends ApiBaseController { + + @Autowired + AppointService appointService; + @Autowired + AppointCommentService appointCommentService; + + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页"), + @ApiImplicitParam(name = "size", value = "显示条数"), + }) + @DynamicResponseParameters(properties = { + @DynamicParameter(value = "职务任免", name = "data", dataTypeClass = AppointDto.class) + }) + @ApiOperation("职务任免列表 (被指定的人与创建人可见)") + @GetMapping + public void appointPage() { + QueryWrapper qw = new QueryWrapper() + .and(_qw -> _qw + .eq("created_id", getApiUserId()) + .or() + .inSql("id", "select appoint_id from t_appoint_user where user_id='" + getApiUserId() + "'")) + .orderByDesc("created_at"); + IPage paged = appointService.page(new Page<>(getPageNum(), getPageSize()), qw); + render(Ret.ok().paged(AppointWrapper.build().pageVO(paged))); + } + + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页"), + @ApiImplicitParam(name = "size", value = "显示条数"), + }) + @DynamicResponseParameters(properties = { + @DynamicParameter(value = "职务任免", name = "data", dataTypeClass = AppointDto.class) + }) + @ApiOperation("公告栏 (所有人可见)") + @GetMapping("public") + public void publicPage() { + QueryWrapper qw = new QueryWrapper() + .ge("state", Appoint.STATE_PUBLIC) + .orderByDesc("created_at"); + IPage paged = appointService.page(new Page<>(getPageNum(), getPageSize()), qw); + render(Ret.ok().paged(AppointWrapper.build().pageVO(paged))); + } + + @ApiOperation("详情") + @GetMapping("{id}") + @ResponseBody + @ApiImplicitParam(name = "id", value = "职务任免id") + @DynamicResponseParameters(properties = { + @DynamicParameter(name = "data", value = "职务任免", dataTypeClass = AppointDto.class) + }) + public void appointDetail(@PathVariable String id) { + Appoint appoint = appointService.getById(id); + Assert.notNull(appoint, "未找到该记录"); + render(Ret.ok().data(AppointWrapper.build().entityVO(appoint))); + } + + @ApiOperation("提名环节") + @PostMapping("state/propose") + @ResponseBody + @DynamicResponseParameters(properties = { + @DynamicParameter(name = "data", value = "职务任免", dataTypeClass = AppointDto.class) + }) + public void stateProposeSave(@Validated AppointProposeStateRequest appointProposeRequest) { + Appoint appoint = appointService.stateProposeSave(appointProposeRequest, getApiUser()); + render(Ret.ok().data(AppointWrapper.build().entityVO(appoint))); + } + + @ApiOperation("主任会议环节") + @PostMapping("state/conference") + @ResponseBody + public void stateConferenceSave(@Validated AppointConferenceStateRequest appointConferenceRequest) { + Appoint appoint = appointService.stateConferenceSave(appointConferenceRequest, getApiUser()); + render(Ret.ok().data(AppointWrapper.build().entityVO(appoint))); + } + + @ApiOperation("上传考试成绩环节") + @PostMapping("state/score") + @ResponseBody + public void stateScoreSave(@Validated AppointScoreStateRequest appointScoreRequest) { + Appoint appoint = appointService.stateScoreSave(appointScoreRequest, getApiUser()); + render(Ret.ok().data(AppointWrapper.build().entityVO(appoint))); + } + + @ApiOperation("投票会议环节") + @PostMapping("state/vote") + @ResponseBody + public void stateVoteSave(@Validated AppointVoteStateRequest appointVoteRequest) { + Appoint appoint = appointService.stateVoteSave(appointVoteRequest, getApiUser()); + render(Ret.ok().data(AppointWrapper.build().entityVO(appoint))); + } + + @ApiOperation("投票") + @PostMapping("vote") + @ResponseBody + public void vote(@Validated AppointVoteRequest voteRequest) { + Ret ret = appointService.vote(voteRequest, getApiUser()); + render(ret); + } + + @ApiOperation("投票结束") + @PostMapping("vote/end/{id}") + @ApiImplicitParam(name = "id", value = "职务任免id") + @ResponseBody + public void voteEnd(@PathVariable String id) { + Ret ret = appointService.voteEnd(id, getApiUser()); + render(ret); + } + + //公开环节自动跳过 + + @ApiOperation("履职环节") + @PostMapping("state/perform") + @ResponseBody + public void statePerformSave(@Validated AppointPerformStateRequest appointPerformRequest) { + Appoint appoint = appointService.statePerformSave(appointPerformRequest, getApiUser()); + render(Ret.ok().data(AppointWrapper.build().entityVO(appoint))); + } + + @ApiOperation("打分") + @PostMapping("perform") + @ResponseBody + public void perform(@Validated AppointPerformRequest performRequest) { + Ret ret = appointService.perform(performRequest, getApiUser()); + render(ret); + } + + @ApiOperation("打分结束") + @PostMapping("perform/end/{id}") + @ApiImplicitParam(name = "id", value = "职务任免id") + @ResponseBody + public void performEnd(@PathVariable String id) { + Ret ret = appointService.performEnd(id, getApiUser()); + render(ret); + } + + @ApiOperation("评论") + @PostMapping("comment") + @ResponseBody + public void comment(@Validated AppointCommentRequest commentRequest) { + Ret ret = appointService.comment(commentRequest, getApiUser()); + render(ret); + } + + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页"), + @ApiImplicitParam(name = "size", value = "显示条数"), + @ApiImplicitParam(name = "appointId", value = "职务任免id"), + @ApiImplicitParam(name = "type", value = "职务任免环节 1-6") + }) + @DynamicResponseParameters(properties = { + @DynamicParameter(value = "职务任免", name = "data", dataTypeClass = AppointComment.class) + }) + @ApiOperation("评论列表") + @GetMapping("comment") + public void commentPage(String appointId, Integer type) { + LambdaQueryWrapper qw = new LambdaQueryWrapper() + .eq(StrUtil.isNotBlank(appointId), AppointComment::getAppointId, appointId) + .eq(type != null, AppointComment::getType, type) + .orderByDesc(AppointComment::getCreatedAt); + IPage paged = appointCommentService.page(new Page<>(getPageNum(), getPageSize()), qw); + render(Ret.ok().paged(paged)); + } + +} diff --git a/src/main/java/com/ydool/boot/api/controller/ApiDataBankController.java b/src/main/java/com/ydool/boot/api/controller/ApiDataBankController.java index 99f2594..7388e5c 100644 --- a/src/main/java/com/ydool/boot/api/controller/ApiDataBankController.java +++ b/src/main/java/com/ydool/boot/api/controller/ApiDataBankController.java @@ -49,6 +49,7 @@ public class ApiDataBankController extends ApiBaseController { if (StringUtils.isNotBlank(dataBank.getUploadUser())) queryWrapper.like("upload_user", dataBank.getUploadUser()); if (StringUtils.isNotBlank(dataBank.getFileType())) queryWrapper.eq("file_type", dataBank.getFileType()); + queryWrapper.orderByDesc("created_at"); IPage paged = dataBankService.page(new Page<>(getPageNum(), getPageSize()), queryWrapper); paged.getRecords().forEach(DataBank::full); render(Ret.ok().paged(paged)); diff --git a/src/main/java/com/ydool/boot/api/controller/ApiReviewController.java b/src/main/java/com/ydool/boot/api/controller/ApiReviewController.java new file mode 100644 index 0000000..d564074 --- /dev/null +++ b/src/main/java/com/ydool/boot/api/controller/ApiReviewController.java @@ -0,0 +1,203 @@ +package com.ydool.boot.api.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +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.github.xiaoymin.knife4j.annotations.DynamicParameter; +import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.modules.rddb.entity.Review; +import com.ydool.boot.modules.rddb.entity.ReviewComment; +import com.ydool.boot.modules.rddb.entity.dto.ReviewDto; +import com.ydool.boot.modules.rddb.entity.request.review.ReviewAuditRequest; +import com.ydool.boot.modules.rddb.entity.request.review.ReviewCheckRequest; +import com.ydool.boot.modules.rddb.entity.request.review.ReviewCommentRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewCheckStateRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewInReportStateRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewOpinionStateRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewResultStateRequest; +import com.ydool.boot.modules.rddb.service.ReviewCommentService; +import com.ydool.boot.modules.rddb.service.ReviewService; +import com.ydool.boot.modules.rddb.wrapper.ReviewWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +/** + * @author: zhouyuan + * @date: 2022年05月16日 + */ +@Controller +@RequestMapping("/api/review") +@Api(value = "A评议", tags = "A评议") +public class ApiReviewController extends ApiBaseController { + + @Autowired + ReviewService reviewService; + @Autowired + ReviewCommentService reviewCommentService; + + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页"), + @ApiImplicitParam(name = "size", value = "显示条数"), + @ApiImplicitParam(name = "type", value = "类型 work工作评议/subject专题评议/officer两官评议", required = true), + }) + @DynamicResponseParameters(properties = { + @DynamicParameter(value = "评议", name = "data", dataTypeClass = ReviewDto.class) + }) + @ApiOperation("评议列表 (被指定的人与创建人可见)") + @GetMapping + public void reviewPage(String type) { + QueryWrapper qw = new QueryWrapper() + .eq("type", type) + .and(_qw -> _qw + .eq("created_id", getApiUserId()) + .or() + .inSql("id", "select review_id from t_review_user where user_id='" + getApiUserId() + "'") + .or() + .inSql("id", "select review_id from t_review_audit where user_id='" + getApiUserId() + "'")) + .orderByDesc("created_at"); + IPage paged = reviewService.page(new Page<>(getPageNum(), getPageSize()), qw); + render(Ret.ok().paged(ReviewWrapper.build().pageVO(paged))); + } + + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页"), + @ApiImplicitParam(name = "size", value = "显示条数"), + @ApiImplicitParam(name = "type", value = "类型 work工作评议/subject专题评议/officer两官评议", required = true), + }) + @DynamicResponseParameters(properties = { + @DynamicParameter(value = "评议", name = "data", dataTypeClass = ReviewDto.class) + }) + @ApiOperation("公告栏 (所有人可见)") + @GetMapping("public") + public void publicPage(String type) { + QueryWrapper qw = new QueryWrapper() + .ge("type", type) + .ge("state", Review.STATE_PUBLIC) + .orderByDesc("created_at"); + IPage paged = reviewService.page(new Page<>(getPageNum(), getPageSize()), qw); + render(Ret.ok().paged(ReviewWrapper.build().pageVO(paged))); + } + + @ApiOperation("详情") + @GetMapping("{id}") + @ResponseBody + @ApiImplicitParam(name = "id", value = "评议id") + @DynamicResponseParameters(properties = { + @DynamicParameter(name = "data", value = "评议", dataTypeClass = ReviewDto.class) + }) + public void reviewDetail(@PathVariable String id) { + Review review = reviewService.getById(id); + Assert.notNull(review, "未找到该记录"); + render(Ret.ok().data(ReviewWrapper.build().entityVO(review))); + } + + + @ApiOperation("评论") + @PostMapping("comment") + @ResponseBody + public void comment(@Validated ReviewCommentRequest reviewCommentRequest) { + Ret ret = reviewService.comment(reviewCommentRequest, getApiUser()); + render(ret); + } + + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页"), + @ApiImplicitParam(name = "size", value = "显示条数"), + @ApiImplicitParam(name = "reviewId", value = "评议id"), + @ApiImplicitParam(name = "type", value = "评议环节 1-7") + }) + @DynamicResponseParameters(properties = { + @DynamicParameter(value = "评议评论", name = "data", dataTypeClass = ReviewComment.class) + }) + @ApiOperation("评论列表") + @GetMapping("comment") + public void commentPage(String reviewId, Integer type) { + LambdaQueryWrapper qw = new LambdaQueryWrapper() + .eq(StrUtil.isNotBlank(reviewId), ReviewComment::getReviewId, reviewId) + .eq(type != null, ReviewComment::getType, type) + .orderByDesc(ReviewComment::getCreatedAt); + IPage paged = reviewCommentService.page(new Page<>(getPageNum(), getPageSize()), qw); + render(Ret.ok().paged(paged)); + } + + @ApiOperation("内部上报环节") + @PostMapping("state/in_report") + @ResponseBody + @DynamicResponseParameters(properties = { + @DynamicParameter(name = "data", value = "评议", dataTypeClass = ReviewDto.class) + }) + public void stateInReportSave(@Validated ReviewInReportStateRequest reviewInReportStateRequest) { + Review review = reviewService.stateInReportSave(reviewInReportStateRequest, getApiUser()); + render(Ret.ok().data(ReviewWrapper.build().entityVO(review))); + } + + @ApiOperation("审批") + @PostMapping("audit") + @ResponseBody + public void audit(@Validated ReviewAuditRequest reviewAuditRequest) { + Ret ret = reviewService.audit(reviewAuditRequest, getApiUser()); + render(ret); + } + + @ApiOperation("上传自查/调查报告环节") + @PostMapping("state/check") + @ResponseBody + @DynamicResponseParameters(properties = { + @DynamicParameter(name = "data", value = "评议", dataTypeClass = ReviewDto.class) + }) + public void stateCheckSave(@Validated ReviewCheckStateRequest reviewCheckStateRequest) { + Review review = reviewService.stateCheckSave(reviewCheckStateRequest, getApiUser()); + render(Ret.ok().data(ReviewWrapper.build().entityVO(review))); + } + + @ApiOperation("打分") + @PostMapping("check") + @ResponseBody + public void check(@Validated ReviewCheckRequest reviewCheckRequest) { + Ret ret = reviewService.check(reviewCheckRequest, getApiUser()); + render(ret); + } + + @ApiOperation("打分结束") + @PostMapping("check/end/{id}") + @ApiImplicitParam(name = "id", value = "评议id") + @ResponseBody + public void checkEnd(@PathVariable String id) { + Ret ret = reviewService.checkEnd(id, getApiUser()); + render(ret); + } + + @ApiOperation("上传评议意见环节") + @PostMapping("state/opinion") + @ResponseBody + @DynamicResponseParameters(properties = { + @DynamicParameter(name = "data", value = "评议", dataTypeClass = ReviewDto.class) + }) + public void stateOpinionSave(@Validated ReviewOpinionStateRequest reviewOpinionStateRequest) { + Review review = reviewService.stateOpinionSave(reviewOpinionStateRequest, getApiUser()); + render(Ret.ok().data(ReviewWrapper.build().entityVO(review))); + } + + @ApiOperation("上传整改结果环节") + @PostMapping("state/result") + @ResponseBody + @DynamicResponseParameters(properties = { + @DynamicParameter(name = "data", value = "评议", dataTypeClass = ReviewDto.class) + }) + public void stateResultSave(@Validated ReviewResultStateRequest reviewResultStateRequest) { + Review review = reviewService.stateResultSave(reviewResultStateRequest, getApiUser()); + render(Ret.ok().data(ReviewWrapper.build().entityVO(review))); + } +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/Appoint.java b/src/main/java/com/ydool/boot/modules/rddb/entity/Appoint.java new file mode 100644 index 0000000..c139c88 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/Appoint.java @@ -0,0 +1,180 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ydool.boot.core.entity.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + *

+ * 任免督职 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_appoint") +public class Appoint extends BaseEntity { + + private static final long serialVersionUID = 1L; + + //当前环节 (上传提名信息propose:1 会议讨论结果conference:2 上传成绩score:3 投票vote:4 公告public:5 履职perform:6) + public static Integer STATE_PROPOSE = 1; + public static Integer STATE_CONFERENCE = 2; + public static Integer STATE_SCORE = 3; + public static Integer STATE_VOTE = 4; + public static Integer STATE_PUBLIC = 5; + public static Integer STATE_PERFORM = 6; + //结束标记 + public static Integer STATE_END = 7; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 提名人 + */ + @ApiModelProperty(value = "提名人") + private String proposeName; + + + /** + * 原职位 + */ + @ApiModelProperty(value = "原职位") + private String proposeOldJob; + + /** + * 任职 + */ + @ApiModelProperty(value = "任职") + private String proposeNewJob; + + /** + * 提名上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "提名上传时间") + private LocalDateTime proposeUploadAt; + + /** + * 会议时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "会议时间") + private LocalDateTime conferenceAt; + + /** + * 会议地址 + */ + @ApiModelProperty(value = "会议地址") + private String conferenceAddress; + + /** + * 会议备注 + */ + @ApiModelProperty(value = "会议备注") + private String conferenceRemark; + + /** + * 会议上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "会议上传时间") + private LocalDateTime conferenceUploadAt; + + /** + * 考试时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "考试时间") + private LocalDateTime examAt; + + /** + * 考试成绩 + */ + @ApiModelProperty(value = "考试成绩") + private String examResult; + + /** + * 考试上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "考试上传时间") + private LocalDateTime examUploadAt; + + /** + * 投票会议时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "投票会议时间") + private LocalDateTime voteAt; + + /** + * 投票会议地址 + */ + @ApiModelProperty(value = "投票会议地址") + private String voteAddress; + + /** + * 履职上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "履职上传时间") + private LocalDateTime performUploadAt; + + /** + * 当前环节 + */ + @ApiModelProperty(value = "当前环节 1-6") + private Integer state; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/AppointAttachment.java b/src/main/java/com/ydool/boot/modules/rddb/entity/AppointAttachment.java new file mode 100644 index 0000000..8fb4526 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/AppointAttachment.java @@ -0,0 +1,64 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.ydool.boot.core.entity.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 任免督职附件 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_appoint_attachment") +@Accessors(chain = true) +public class AppointAttachment extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 附件类型 与任免督职的state环节对应 + */ + @ApiModelProperty(value = "类型 (与任免督职环节相对应)") + private Integer type; + + /** + * 任免督职id + */ + private String appointId; + + /** + * 附件名 + */ + @ApiModelProperty(value = "附件名") + private String title; + + /** + * 附件路径 + */ + @ApiModelProperty(value = "附件路径") + private String attachment; + + /** + * 文件大小 + */ + private String size; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/AppointComment.java b/src/main/java/com/ydool/boot/modules/rddb/entity/AppointComment.java new file mode 100644 index 0000000..9651e0e --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/AppointComment.java @@ -0,0 +1,63 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.ydool.boot.core.entity.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +/** + *

+ * 任免督职评论 + *

+ * + * @author zhouyuan + * @since 2022-05-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_appoint_comment") +public class AppointComment extends BaseEntity{ + + private static final long serialVersionUID = 1L; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 类型 (与任免督职环节相对应) + */ + @ApiModelProperty(value = "类型 (与任免督职环节相对应)") + private Integer type; + + /** + * 任免督职id + */ + @ApiModelProperty(value = "任免督职id") + private String appointId; + + /** + * 人员id + */ + @ApiModelProperty(value = "人员id") + private String userId; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名") + private String userName; + + /** + * 内容 + */ + @ApiModelProperty(value = "内容") + private String content; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/AppointUser.java b/src/main/java/com/ydool/boot/modules/rddb/entity/AppointUser.java new file mode 100644 index 0000000..2aac997 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/AppointUser.java @@ -0,0 +1,100 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ydool.boot.core.entity.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * 任免督职人员 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_appoint_user") +public class AppointUser extends BaseEntity { + + private static final long serialVersionUID = 1L; + + //投票 (0待投票 1赞成 2反对 3弃权) + public static Integer VOTE_WAIT = 0; + public static Integer VOTE_AGREE = 1; + public static Integer VOTE_REFUSE = 2; + public static Integer VOTE_ABANDON = 3; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 任免督职id + */ + @ApiModelProperty(value = "任免督职id") + private String appointId; + + /** + * 人员id + */ + @ApiModelProperty(value = "人员id") + private String userId; + + /** + * 人员名称 + */ + @ApiModelProperty(value = "人员名称") + private String userName; + + /** + * 投票 + */ + @ApiModelProperty(value = "投的票") + private Integer vote; + + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "投票时间") + private LocalDateTime voteAt; + + /** + * 分数 1-100 + */ + @ApiModelProperty(value = "分数 1-100") + private BigDecimal score; + + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "打分时间") + private LocalDateTime scoreAt; + + /** + * 类型 与任免督职的state环节对应 + */ + @ApiModelProperty(value = "类型 (与任免督职环节相对应)") + private Integer type; + + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/Audit.java b/src/main/java/com/ydool/boot/modules/rddb/entity/Audit.java index f7881b5..3ab1f43 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/entity/Audit.java +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/Audit.java @@ -53,9 +53,9 @@ public class Audit extends BaseEntity { private String content; /** - * 总的状态 0待审批 1已审批通过 2已审批未通过 + * 总的状态 0待审批 1已通过 2未通过 */ - @ApiModelProperty(value = "总的状态 0待审批 1已审批通过 2已审批未通过") + @ApiModelProperty(value = "总的状态 0待审批 1已通过 2未通过") private Integer status; /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/AuditUser.java b/src/main/java/com/ydool/boot/modules/rddb/entity/AuditUser.java index 8c1febf..2add201 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/entity/AuditUser.java +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/AuditUser.java @@ -61,9 +61,9 @@ public class AuditUser extends BaseEntity { private String userName; /** - * 单条状态 0待审批 1已审批通过 2已审批未通过 + * 单条状态 0待审批 1已通过 2未通过 */ - @ApiModelProperty(value = "单条状态 0待审批 1已审批通过 2已审批未通过") + @ApiModelProperty(value = "单条状态 0待审批 1已通过 2未通过") private Integer status; /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/Review.java b/src/main/java/com/ydool/boot/modules/rddb/entity/Review.java new file mode 100644 index 0000000..e704d2d --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/Review.java @@ -0,0 +1,159 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ydool.boot.core.entity.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + *

+ * 评议 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_review") +public class Review extends BaseEntity { + + private static final long serialVersionUID = 1L; + + //当前环节 (内部上报拟评议部门inReport:1 上报评议部门report:2 向社会征求被评议部门意见ask:3 + //调查报告check:4 评议意见opinion:5 整改结果result:6 公示public:7) + public static Integer STATE_IN_REPORT = 1; + public static Integer STATE_REPORT = 2; + public static Integer STATE_ASK = 3; + public static Integer STATE_CHECK = 4; + public static Integer STATE_OPINION = 5; + public static Integer STATE_RESULT = 6; + public static Integer STATE_PUBLIC = 7; + + //评议类型(work工作评议/subject专题评议/officer两官评议) + public static String TYPE_WORK = "work"; + public static String TYPE_SUBJECT = "subject"; + public static String TYPE_OFFICER = "officer"; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 类型 + */ + @ApiModelProperty(value = "类型 work工作评议/subject专题评议/officer两官评议") + private String type; + + /** + * 评议主题 + */ + @ApiModelProperty(value = "评议主题(评议部门,评议专题,评议对象)") + private String reviewSubject; + + /** + * 评议描述 + */ + @ApiModelProperty(value = "评议描述(评议部门描述,评议专题描述,评议对象职位)") + private String reviewDesc; + + /** + * 提名上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "提名上传时间") + private LocalDateTime reviewUploadAt; + + /** + * 调查备注 + */ + @ApiModelProperty(value = "调查备注") + private String checkRemark; + + /** + * 调查上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "调查上传时间") + private LocalDateTime checkUploadAt; + + /** + * 调查分数是否公开 + */ + @ApiModelProperty(value = "调查分数是否公开 0不公开 1公开") + private Integer checkScoreState; + + /** + * 评议意见备注 + */ + @ApiModelProperty(value = "评议意见备注") + private String opinionRemark; + + /** + * 评议意见上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "评议意见上传时间") + private LocalDateTime opinionUploadAt; + + /** + * 整改备注 + */ + @ApiModelProperty(value = "整改备注") + private String alterRemark; + + /** + * 整改上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "整改上传时间") + private LocalDateTime alterUploadAt; + + /** + * 审核状态 0待审批 1已通过 2已拒绝 + */ + @ApiModelProperty(value = " 审核状态 0审批中 1已通过 2已拒绝") + private Integer status; + + /** + * 当前环节 + */ + @ApiModelProperty(value = " 当前环节 1-7") + private Integer state; + + public Review() { + //默认公开分数 + this.checkScoreState=1; + } +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAttachment.java b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAttachment.java new file mode 100644 index 0000000..c13af4f --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAttachment.java @@ -0,0 +1,60 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.ydool.boot.core.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 评议附件 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_review_attachment") +@Accessors(chain = true) +public class ReviewAttachment extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 附件类型 与评议的state环节对应 + */ + private Integer type; + + /** + * 评议id + */ + private String reviewId; + + /** + * 附件名 + */ + private String title; + + /** + * 附件路径 + */ + private String attachment; + + /** + * 文件大小 + */ + private String size; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAudit.java b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAudit.java new file mode 100644 index 0000000..3f06082 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewAudit.java @@ -0,0 +1,78 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ydool.boot.core.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +/** + *

+ * 评议审批 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_review_audit") +public class ReviewAudit extends BaseEntity{ + + private static final long serialVersionUID = 1L; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 评议id + */ + private String reviewId; + + /** + * 人员id + */ + private String userId; + private String userName; + + /** + * 单条状态 0待审批 1已通过 2未通过 + */ + private Integer status; + + /** + * 未通过原因 + */ + private String reason; + + /** + * 审批时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + private LocalDateTime auditAt; + + /** + * 审批顺序,从1开始 + */ + private Integer sortNo; + + /** + * 审批级别 共2级,从1开始 + */ + private Integer level; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewComment.java b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewComment.java new file mode 100644 index 0000000..efdb05d --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewComment.java @@ -0,0 +1,56 @@ +package com.ydool.boot.modules.rddb.entity; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ydool.boot.core.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +/** + *

+ * 工作评议评论 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_review_comment") +public class ReviewComment extends BaseEntity{ + + private static final long serialVersionUID = 1L; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 评论类型 与评议的state环节对应 + */ + private Integer type; + + /** + * 评议id + */ + private String reviewId; + + /** + * 人员id + */ + private String userId; + + /** + * 内容 + */ + private String content; + + /** + * 用户名 + */ + private String userName; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewUser.java b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewUser.java new file mode 100644 index 0000000..888f740 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/ReviewUser.java @@ -0,0 +1,68 @@ +package com.ydool.boot.modules.rddb.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ydool.boot.core.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * 工作评议人员 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("t_review_user") +public class ReviewUser extends BaseEntity{ + + private static final long serialVersionUID = 1L; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + /** + * 评议id + */ + private String reviewId; + + /** + * 人员id + */ + private String userId; + /** + * 人员名称 + */ + private String userName; + + /** + * 分数 1-100 + */ + private BigDecimal score; + + /** + * 打分时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + private LocalDateTime scoreAt; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/bo/AppointBo.java b/src/main/java/com/ydool/boot/modules/rddb/entity/bo/AppointBo.java new file mode 100644 index 0000000..54e6c47 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/bo/AppointBo.java @@ -0,0 +1,23 @@ +package com.ydool.boot.modules.rddb.entity.bo; + +import com.ydool.boot.modules.rddb.entity.Appoint; +import lombok.Data; + +/** + *

+ * 上报 + *

+ * + * @author zhouyuan + * @since 2021-07-13 + */ +@Data +public class AppointBo extends Appoint { + String proposeAttachmentArrStr; + String conferenceAttachmentArrStr; + String performAttachmentArrStr; + + String conferenceUserIds; + String voteUserIds; + String performUserIds; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/bo/ReviewBo.java b/src/main/java/com/ydool/boot/modules/rddb/entity/bo/ReviewBo.java new file mode 100644 index 0000000..b5eeec5 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/bo/ReviewBo.java @@ -0,0 +1,24 @@ +package com.ydool.boot.modules.rddb.entity.bo; + +import com.ydool.boot.modules.rddb.entity.Review; +import lombok.Data; + +/** + *

+ * 上报 + *

+ * + * @author zhouyuan + * @since 2021-07-13 + */ +@Data +public class ReviewBo extends Review { + String inReportAttachmentArrStr; + String checkAttachmentArrStr; + String opinionAttachmentArrStr; + String resultAttachmentArrStr; + + String inReportAudit1Ids; + String inReportAudit2Ids; + String checkUserIds; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/dto/AppointDto.java b/src/main/java/com/ydool/boot/modules/rddb/entity/dto/AppointDto.java new file mode 100644 index 0000000..2d0ee17 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/dto/AppointDto.java @@ -0,0 +1,44 @@ +package com.ydool.boot.modules.rddb.entity.dto; + +import com.ydool.boot.modules.rddb.entity.Appoint; +import com.ydool.boot.modules.rddb.entity.AppointAttachment; +import com.ydool.boot.modules.rddb.entity.AppointUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class AppointDto extends Appoint { + + @ApiModelProperty(value = "提名附件") + List proposeAttachmentList; + @ApiModelProperty(value = "会议附件") + List conferenceAttachmentList; + @ApiModelProperty(value = "履职附件") + List performAttachmentList; + + @ApiModelProperty(value = "会议人员") + List conferenceUserList; + @ApiModelProperty(value = "投票人员") + List voteUserList; + @ApiModelProperty(value = "打分人员") + List performUserList; + + @ApiModelProperty(value = "平均分") + BigDecimal averageScore; + @ApiModelProperty(value = "同意票数") + Integer agreeVoteCount; + @ApiModelProperty(value = "拒绝票数") + Integer refuseVoteCount; + @ApiModelProperty(value = "弃权票数") + Integer abandonVoteCount; + + @ApiModelProperty(value = "当前用户是否是创建人") + Boolean isCreator; + @ApiModelProperty(value = "当前用户是否可以投票") + Boolean isCanVote; + @ApiModelProperty(value = "当前用户是否可以打分") + Boolean isCanPerform; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/dto/ReviewDto.java b/src/main/java/com/ydool/boot/modules/rddb/entity/dto/ReviewDto.java new file mode 100644 index 0000000..ccdab93 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/dto/ReviewDto.java @@ -0,0 +1,39 @@ +package com.ydool.boot.modules.rddb.entity.dto; + +import com.ydool.boot.modules.rddb.entity.*; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class ReviewDto extends Review { + + @ApiModelProperty(value = "评议附件") + List inReportAttachmentList; + @ApiModelProperty(value = "自查/调查报告") + List checkAttachmentList; + @ApiModelProperty(value = "评议意见附件") + List opinionAttachmentList; + @ApiModelProperty(value = "整改结果附件") + List resultAttachmentList; + + @ApiModelProperty(value = "一级审批人员") + List inReportAudit1List; + @ApiModelProperty(value = "二级审批人员") + List inReportAudit2List; + @ApiModelProperty(value = "打分人员") + List checkUserList; + + @ApiModelProperty(value = "平均分") + BigDecimal averageScore; + @ApiModelProperty(value = "当前用户是否是创建人") + Boolean isCreator; + @ApiModelProperty(value = "当前用户是否可以评分") + Boolean isCanCheck; + @ApiModelProperty(value = "当前用户是否可以一级审批") + Boolean isCanAudit1; + @ApiModelProperty(value = "当前用户是否可以二级审批") + Boolean isCanAudit2; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointCommentRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointCommentRequest.java new file mode 100644 index 0000000..ae828a8 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointCommentRequest.java @@ -0,0 +1,18 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +public class AppointCommentRequest { + + @ApiModelProperty(value = "任免督职id", required = true) + private String appointId; + + @ApiModelProperty(value = "评论内容", required = true) + private String content; + + @ApiModelProperty(value = "环节 (1-6)", required = true) + private int type; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointPerformRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointPerformRequest.java new file mode 100644 index 0000000..a785d93 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointPerformRequest.java @@ -0,0 +1,17 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + + +@Data +public class AppointPerformRequest { + + @ApiModelProperty(value = "任免督职id", required = true) + private String appointId; + + @ApiModelProperty(value = "分数 (1-100)", required = true) + private BigDecimal score; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointVoteRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointVoteRequest.java new file mode 100644 index 0000000..d48565a --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/AppointVoteRequest.java @@ -0,0 +1,15 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +public class AppointVoteRequest { + + @ApiModelProperty(value = "任免督职id", required = true) + private String appointId; + + @ApiModelProperty(value = "投票 (0待投票 1赞成 2反对 3弃权)", required = true) + private Integer vote; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointConferenceStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointConferenceStateRequest.java new file mode 100644 index 0000000..fc47493 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointConferenceStateRequest.java @@ -0,0 +1,60 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class AppointConferenceStateRequest { + + @ApiModelProperty(value = "任免督职id",required = true) + private String id; + + /** + * 会议时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "会议时间yyyy-MM-dd HH:mm:ss") + private LocalDateTime conferenceAt; + + /** + * 会议地址 + */ + @ApiModelProperty(value = "会议地址") + private String conferenceAddress; + + /** + * 会议备注 + */ + @ApiModelProperty(value = "会议备注") + private String conferenceRemark; + + /** + * 会议上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "会议上传时间yyyy-MM-dd HH:mm:ss") + private LocalDateTime conferenceUploadAt; + + @ApiModelProperty(value = "附件名 英文逗号间隔") + String conferenceAttachmentName; + @ApiModelProperty(value = "附件路径 英文逗号间隔") + String conferenceAttachmentPath; + + @ApiModelProperty(value = "会议人员id,英文逗号间隔") + String conferenceUserIds; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointPerformStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointPerformStateRequest.java new file mode 100644 index 0000000..85c3c1a --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointPerformStateRequest.java @@ -0,0 +1,36 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class AppointPerformStateRequest { + + @ApiModelProperty(value = "任免督职id",required = true) + private String id; + + /** + * 履职上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "履职上传时间yyyy-MM-dd HH:mm:ss") + private LocalDateTime performUploadAt; + + @ApiModelProperty(value = "附件名 英文逗号间隔") + String performAttachmentName; + @ApiModelProperty(value = "附件路径 英文逗号间隔") + String performAttachmentPath; + + @ApiModelProperty(value = "打分人员id,英文逗号间隔") + String performUserIds; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointProposeStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointProposeStateRequest.java new file mode 100644 index 0000000..865319e --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointProposeStateRequest.java @@ -0,0 +1,51 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; + + +@Data +public class AppointProposeStateRequest { + + /** + * 提名人 + */ + @ApiModelProperty(value = "提名人") + @NotBlank(message = "提名人不能为空") + private String proposeName; + + /** + * 原职位 + */ + @ApiModelProperty(value = "原职位") + private String proposeOldJob; + + /** + * 任职 + */ + @ApiModelProperty(value = "任职") + private String proposeNewJob; + + /** + * 提名上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "提名上传时间yyyy-MM-dd HH:mm:ss") + private LocalDateTime proposeUploadAt; + + @ApiModelProperty(value = "附件名 英文逗号间隔") + String proposeAttachmentName; + @ApiModelProperty(value = "附件路径 英文逗号间隔") + String proposeAttachmentPath; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointScoreStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointScoreStateRequest.java new file mode 100644 index 0000000..71e36e4 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointScoreStateRequest.java @@ -0,0 +1,48 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class AppointScoreStateRequest { + + @ApiModelProperty(value = "任免督职id",required = true) + private String id; + + /** + * 考试时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "考试时间yyyy-MM-dd HH:mm:ss") + private LocalDateTime examAt; + + /** + * 考试成绩 + */ + @ApiModelProperty(value = "考试成绩") + private String examResult; + + /** + * 考试上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "考试上传时间yyyy-MM-dd HH:mm:ss") + private LocalDateTime examUploadAt; + + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointVoteStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointVoteStateRequest.java new file mode 100644 index 0000000..61e8f16 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/appoint/state/AppointVoteStateRequest.java @@ -0,0 +1,37 @@ +package com.ydool.boot.modules.rddb.entity.request.appoint.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class AppointVoteStateRequest { + + @ApiModelProperty(value = "任免督职id",required = true) + private String id; + + /** + * 投票会议时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "投票会议时间yyyy-MM-dd HH:mm:ss") + private LocalDateTime voteAt; + + /** + * 投票会议地址 + */ + @ApiModelProperty(value = "投票会议地址") + private String voteAddress; + + @ApiModelProperty(value = "投票会议人员id,英文逗号间隔") + String voteUserIds; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewAuditRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewAuditRequest.java new file mode 100644 index 0000000..0b0e9d8 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewAuditRequest.java @@ -0,0 +1,21 @@ +package com.ydool.boot.modules.rddb.entity.request.review; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +public class ReviewAuditRequest { + + @ApiModelProperty(value = "评议id", required = true) + private String reviewId; + + @ApiModelProperty(value = "审批状态 1已通过 2未通过", required = true) + private int status; + + @ApiModelProperty(value = "未通过原因") + private String reason; + + @ApiModelProperty(value = "审批级别 共2级,从1开始", required = true) + private int level; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCheckRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCheckRequest.java new file mode 100644 index 0000000..284df51 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCheckRequest.java @@ -0,0 +1,17 @@ +package com.ydool.boot.modules.rddb.entity.request.review; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + + +@Data +public class ReviewCheckRequest { + + @ApiModelProperty(value = "评议id", required = true) + private String reviewId; + + @ApiModelProperty(value = "分数 (1-100)", required = true) + private BigDecimal score; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCommentRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCommentRequest.java new file mode 100644 index 0000000..23ff15e --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/ReviewCommentRequest.java @@ -0,0 +1,18 @@ +package com.ydool.boot.modules.rddb.entity.request.review; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +public class ReviewCommentRequest { + + @ApiModelProperty(value = "评议id", required = true) + private String reviewId; + + @ApiModelProperty(value = "评论内容", required = true) + private String content; + + @ApiModelProperty(value = "环节 (1-7)", required = true) + private int type; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewCheckStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewCheckStateRequest.java new file mode 100644 index 0000000..0ab1412 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewCheckStateRequest.java @@ -0,0 +1,42 @@ +package com.ydool.boot.modules.rddb.entity.request.review.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class ReviewCheckStateRequest { + + @ApiModelProperty(value = "评议id", required = true) + private String reviewId; + + /** + * 调查备注 + */ + @ApiModelProperty(value = "调查备注") + private String checkRemark; + + /** + * 调查上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "调查上传时间") + private LocalDateTime checkUploadAt; + + + @ApiModelProperty(value = "附件名 英文逗号间隔") + String checkAttachmentName; + @ApiModelProperty(value = "附件路径 英文逗号间隔") + String checkAttachmentPath; + @ApiModelProperty(value = "打分人员 英文逗号间隔") + String checkUserIds; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewInReportStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewInReportStateRequest.java new file mode 100644 index 0000000..86c392d --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewInReportStateRequest.java @@ -0,0 +1,52 @@ +package com.ydool.boot.modules.rddb.entity.request.review.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class ReviewInReportStateRequest { + + /** + * 类型 + */ + @ApiModelProperty(value = "类型 work工作评议/subject专题评议/officer两官评议",required = true) + private String type; + + /** + * 评议主题 + */ + @ApiModelProperty(value = "评议主题(评议部门,评议专题,评议对象)",required = true) + private String reviewSubject; + + /** + * 评议描述 + */ + @ApiModelProperty(value = "评议描述(评议部门描述,评议专题描述,评议对象职位)") + private String reviewDesc; + + /** + * 提名上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "提名上传时间") + private LocalDateTime reviewUploadAt; + + @ApiModelProperty(value = "附件名 英文逗号间隔") + String inReportAttachmentName; + @ApiModelProperty(value = "附件路径 英文逗号间隔") + String inReportAttachmentPath; + @ApiModelProperty(value = "一级审批人 英文逗号间隔") + String inReportAudit1Ids; + @ApiModelProperty(value = "二级审批人 英文逗号间隔") + String inReportAudit2Ids; +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewOpinionStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewOpinionStateRequest.java new file mode 100644 index 0000000..4271720 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewOpinionStateRequest.java @@ -0,0 +1,40 @@ +package com.ydool.boot.modules.rddb.entity.request.review.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class ReviewOpinionStateRequest { + + @ApiModelProperty(value = "评议id", required = true) + private String reviewId; + + /** + * 评议意见备注 + */ + @ApiModelProperty(value = "评议意见备注") + private String opinionRemark; + + /** + * 评议意见上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "评议意见上传时间") + private LocalDateTime opinionUploadAt; + + @ApiModelProperty(value = "附件名 英文逗号间隔") + String opinionAttachmentName; + @ApiModelProperty(value = "附件路径 英文逗号间隔") + String opinionAttachmentPath; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewResultStateRequest.java b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewResultStateRequest.java new file mode 100644 index 0000000..7c46891 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/request/review/state/ReviewResultStateRequest.java @@ -0,0 +1,40 @@ +package com.ydool.boot.modules.rddb.entity.request.review.state; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + + +@Data +public class ReviewResultStateRequest { + + @ApiModelProperty(value = "评议id", required = true) + private String reviewId; + + /** + * 整改备注 + */ + @ApiModelProperty(value = "整改备注") + private String alterRemark; + + /** + * 整改上传时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty(value = "整改上传时间") + private LocalDateTime alterUploadAt; + + @ApiModelProperty(value = "附件名 英文逗号间隔") + String resultAttachmentName; + @ApiModelProperty(value = "附件路径 英文逗号间隔") + String resultAttachmentPath; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/excel/db/DbReadHead.java b/src/main/java/com/ydool/boot/modules/rddb/excel/db/DbReadHead.java index db41b34..372efb8 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/excel/db/DbReadHead.java +++ b/src/main/java/com/ydool/boot/modules/rddb/excel/db/DbReadHead.java @@ -29,18 +29,18 @@ public class DbReadHead { /** * 出生年月 */ - @ExcelProperty("出生年月") - private String birthday; +// @ExcelProperty("出生年月") +// private String birthday; /** * 党派 */ - @ExcelProperty("党派") - private String partyCadre; +// @ExcelProperty("党派") +// private String partyCadre; /** * 民族 */ - @ExcelProperty("民族") - private String nation; +// @ExcelProperty("民族") +// private String nation; /** * 籍贯 */ @@ -49,8 +49,8 @@ public class DbReadHead { /** * 学历 */ - @ExcelProperty("学历") - private String culture; +// @ExcelProperty("学历") +// private String culture; /** * 工作单位及职务 */ @@ -74,7 +74,7 @@ public class DbReadHead { /** * 是否连任 */ - @ExcelProperty("是否连任") - private String isReappointment; +// @ExcelProperty("是否连任") +// private String isReappointment; } diff --git a/src/main/java/com/ydool/boot/modules/rddb/gen/MyGenerator.java b/src/main/java/com/ydool/boot/modules/rddb/gen/MyGenerator.java index 53c5f32..1adfa5f 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/gen/MyGenerator.java +++ b/src/main/java/com/ydool/boot/modules/rddb/gen/MyGenerator.java @@ -20,7 +20,7 @@ public class MyGenerator { public static void main(String[] args) { //表名 - String tableName = "t_report"; + String tableName = "t_appoint_comment"; //表前缀 String tablePrefix = "t_"; diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointAttachmentMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointAttachmentMapper.java new file mode 100644 index 0000000..e7c56e2 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointAttachmentMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.AppointAttachment; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 任免督职附件 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +public interface AppointAttachmentMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointCommentMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointCommentMapper.java new file mode 100644 index 0000000..11d7f0d --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointCommentMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.AppointComment; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 任免督职评论 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-17 + */ +public interface AppointCommentMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointMapper.java new file mode 100644 index 0000000..f90de92 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.Appoint; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 任免督职 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +public interface AppointMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointUserMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointUserMapper.java new file mode 100644 index 0000000..8b23dca --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/AppointUserMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.AppointUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 任免督职人员 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +public interface AppointUserMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAttachmentMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAttachmentMapper.java new file mode 100644 index 0000000..756a7ba --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAttachmentMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.ReviewAttachment; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 任免督职附件 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +public interface ReviewAttachmentMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAuditMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAuditMapper.java new file mode 100644 index 0000000..92b5649 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewAuditMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.ReviewAudit; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 评议审批 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +public interface ReviewAuditMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewCommentMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewCommentMapper.java new file mode 100644 index 0000000..fd9bc07 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewCommentMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.ReviewComment; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 工作评议评论 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +public interface ReviewCommentMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewMapper.java new file mode 100644 index 0000000..3801ff2 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.Review; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 评议 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +public interface ReviewMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewUserMapper.java b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewUserMapper.java new file mode 100644 index 0000000..e751fa1 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/ReviewUserMapper.java @@ -0,0 +1,16 @@ +package com.ydool.boot.modules.rddb.mapper; + +import com.ydool.boot.modules.rddb.entity.ReviewUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 工作评议人员 Mapper 接口 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +public interface ReviewUserMapper extends BaseMapper { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointAttachmentMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointAttachmentMapper.xml new file mode 100644 index 0000000..6b71e3d --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointAttachmentMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointCommentMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointCommentMapper.xml new file mode 100644 index 0000000..8f46451 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointCommentMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointMapper.xml new file mode 100644 index 0000000..d379039 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointUserMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointUserMapper.xml new file mode 100644 index 0000000..417d66a --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/AppointUserMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAttachmentMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAttachmentMapper.xml new file mode 100644 index 0000000..1fccafc --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAttachmentMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAuditMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAuditMapper.xml new file mode 100644 index 0000000..7664c12 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewAuditMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewCommentMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewCommentMapper.xml new file mode 100644 index 0000000..037deb3 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewCommentMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewMapper.xml new file mode 100644 index 0000000..3b88e89 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewUserMapper.xml b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewUserMapper.xml new file mode 100644 index 0000000..caf59ea --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/mapper/xml/ReviewUserMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/AppointAttachmentService.java b/src/main/java/com/ydool/boot/modules/rddb/service/AppointAttachmentService.java new file mode 100644 index 0000000..61fd297 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/AppointAttachmentService.java @@ -0,0 +1,19 @@ +package com.ydool.boot.modules.rddb.service; + +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.AppointAttachment; +import com.ydool.boot.modules.rddb.mapper.AppointAttachmentMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 任免督职附件 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Service +public class AppointAttachmentService extends BaseService { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/AppointCommentService.java b/src/main/java/com/ydool/boot/modules/rddb/service/AppointCommentService.java new file mode 100644 index 0000000..9fd672f --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/AppointCommentService.java @@ -0,0 +1,19 @@ +package com.ydool.boot.modules.rddb.service; + +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.AppointComment; +import com.ydool.boot.modules.rddb.mapper.AppointCommentMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 任免督职评论 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-17 + */ +@Service +public class AppointCommentService extends BaseService { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/AppointService.java b/src/main/java/com/ydool/boot/modules/rddb/service/AppointService.java new file mode 100644 index 0000000..38ab954 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/AppointService.java @@ -0,0 +1,331 @@ +package com.ydool.boot.modules.rddb.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.core.exception.ResultException; +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.Appoint; +import com.ydool.boot.modules.rddb.entity.AppointAttachment; +import com.ydool.boot.modules.rddb.entity.AppointComment; +import com.ydool.boot.modules.rddb.entity.AppointUser; +import com.ydool.boot.modules.rddb.entity.bo.AppointBo; +import com.ydool.boot.modules.rddb.entity.request.appoint.AppointCommentRequest; +import com.ydool.boot.modules.rddb.entity.request.appoint.AppointPerformRequest; +import com.ydool.boot.modules.rddb.entity.request.appoint.AppointVoteRequest; +import com.ydool.boot.modules.rddb.entity.request.appoint.state.*; +import com.ydool.boot.modules.rddb.mapper.AppointMapper; +import com.ydool.boot.modules.rddb.wrapper.AppointWrapper; +import com.ydool.boot.modules.sys.entity.User; +import com.ydool.boot.modules.sys.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 任免督职 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Service +public class AppointService extends BaseService { + + @Autowired + AppointUserService appointUserService; + @Autowired + AppointAttachmentService appointAttachmentService; + @Autowired + AppointCommentService appointCommentService; + @Autowired + UserService userService; + + /*后台*/ + @Transactional + public boolean del(String id) { + appointUserService.remove(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, id)); + appointAttachmentService.remove(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, id)); + return removeById(id); + } + + @Transactional + public Ret adminSaveOrUpdate(AppointBo appointBo, User loginUser) { + Appoint appoint = BeanUtil.copyProperties(appointBo, Appoint.class); + if (StrUtil.isNotBlank(appoint.getId())) { + appoint.setUpdatedId(loginUser.getId()); + } else { + appoint.setCreatedId(loginUser.getId()); + appoint.setState(Appoint.STATE_CONFERENCE); + } + saveOrUpdate(appoint); + appointBo.setId(appoint.getId()); + + //指定人员 + String conferenceUserIds = appointBo.getConferenceUserIds(); + String voteUserIds = appointBo.getVoteUserIds(); + String performUserIds = appointBo.getPerformUserIds(); + saveAppointUser(appointBo.getId(), conferenceUserIds, loginUser, Appoint.STATE_CONFERENCE); + saveAppointUser(appointBo.getId(), voteUserIds, loginUser, Appoint.STATE_VOTE); + saveAppointUser(appointBo.getId(), performUserIds, loginUser, Appoint.STATE_PERFORM); + + //保存附件 + saveAppointAttachment(appointBo.getId(), appointBo.getProposeAttachmentArrStr(), loginUser, Appoint.STATE_PROPOSE); + saveAppointAttachment(appointBo.getId(), appointBo.getConferenceAttachmentArrStr(), loginUser, Appoint.STATE_CONFERENCE); + saveAppointAttachment(appointBo.getId(), appointBo.getPerformAttachmentArrStr(), loginUser, Appoint.STATE_PERFORM); + return Ret.ok(); + } + + + /*接口*/ + @Transactional + public Appoint stateProposeSave(AppointProposeStateRequest appointProposeRequest, User loginUser) { + Appoint appoint = BeanUtil.copyProperties(appointProposeRequest, Appoint.class); + appoint.setState(Appoint.STATE_CONFERENCE); + appoint.setCreatedId(loginUser.getId()); + saveOrUpdate(appoint); + saveAppointAttachment(appoint.getId(), appointProposeRequest.getProposeAttachmentName(), appointProposeRequest.getProposeAttachmentPath(), loginUser, Appoint.STATE_PROPOSE); + return appoint; + } + + @Transactional + public Appoint stateConferenceSave(AppointConferenceStateRequest appointConferenceRequest, User loginUser) { + Appoint appoint = getById(appointConferenceRequest.getId()); + Assert.notNull(appoint, "未找到该记录"); + if (Appoint.STATE_CONFERENCE != appoint.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); + BeanUtil.copyProperties(appointConferenceRequest, appoint); + appoint.setState(Appoint.STATE_SCORE); + appoint.setUpdatedId(loginUser.getId()); + saveOrUpdate(appoint); + saveAppointAttachment(appoint.getId(), appointConferenceRequest.getConferenceAttachmentName(), appointConferenceRequest.getConferenceAttachmentPath(), loginUser, Appoint.STATE_CONFERENCE); + saveAppointUser(appoint.getId(), appointConferenceRequest.getConferenceUserIds(), loginUser, Appoint.STATE_CONFERENCE); + return appoint; + } + + public Appoint stateScoreSave(AppointScoreStateRequest appointScoreRequest, User loginUser) { + Appoint appoint = getById(appointScoreRequest.getId()); + Assert.notNull(appoint, "未找到该记录"); + if (Appoint.STATE_SCORE != appoint.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); + BeanUtil.copyProperties(appointScoreRequest, appoint); + appoint.setState(Appoint.STATE_VOTE); + appoint.setUpdatedId(loginUser.getId()); + saveOrUpdate(appoint); + return appoint; + } + + public Appoint stateVoteSave(AppointVoteStateRequest appointVoteRequest, User loginUser) { + Appoint appoint = getById(appointVoteRequest.getId()); + Assert.notNull(appoint, "未找到该记录"); + BeanUtil.copyProperties(appointVoteRequest, appoint); + appoint.setUpdatedId(loginUser.getId()); + saveOrUpdate(appoint); + saveAppointUser(appoint.getId(), appointVoteRequest.getVoteUserIds(), loginUser, Appoint.STATE_VOTE); + return appoint; + } + + /** + * 投票 + * + * @param voteRequest + * @param loginUser + * @return + */ + public Ret vote(AppointVoteRequest voteRequest, User loginUser) { + Appoint appoint = getById(voteRequest.getAppointId()); + Assert.notNull(appoint, "未找到该记录"); + AppointUser appointUser = appointUserService.getOne(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, voteRequest.getAppointId()) + .eq(AppointUser::getType, Appoint.STATE_VOTE) + .eq(AppointUser::getUserId, loginUser.getId())); + if (appointUser == null) return Ret.fail("您没有投票的权限"); + if (appointUser.getVote() != 0) return Ret.fail("您已投过票"); + if (appoint.getState() > Appoint.STATE_VOTE) return Ret.fail("投票已结束,不能操作"); + appointUser.setVote(voteRequest.getVote()); + appointUser.setVoteAt(LocalDateTime.now()); + boolean flag = appointUserService.saveOrUpdate(appointUser); + return !flag ? Ret.fail("操作失败") : Ret.ok(); + } + + /** + * 投票结束,进入履职环节 + * + * @param id + * @param loginUser + * @return + */ + public Ret voteEnd(String id, User loginUser) { + Appoint appoint = getById(id); + Assert.notNull(appoint, "未找到该记录"); + if (!loginUser.getId().equals(appoint.getCreatedId())) return Ret.fail("您不是创建人,不能操作"); + if (Appoint.STATE_VOTE != appoint.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); +// appoint.setState(Appoint.STATE_PUBLIC); 跳过公开环节 + appoint.setState(Appoint.STATE_PERFORM); + boolean flag = saveOrUpdate(appoint); + return !flag ? Ret.fail("操作失败") : Ret.ok().data(AppointWrapper.build().entityVO(appoint)); + } + + public Appoint statePerformSave(AppointPerformStateRequest appointPerformRequest, User loginUser) { + Appoint appoint = getById(appointPerformRequest.getId()); + Assert.notNull(appoint, "未找到该记录"); + BeanUtil.copyProperties(appointPerformRequest, appoint); + appoint.setUpdatedId(loginUser.getId()); + saveOrUpdate(appoint); + saveAppointAttachment(appoint.getId(), appointPerformRequest.getPerformAttachmentName(), appointPerformRequest.getPerformAttachmentPath(), loginUser, Appoint.STATE_PERFORM); + saveAppointUser(appoint.getId(), appointPerformRequest.getPerformUserIds(), loginUser, Appoint.STATE_PERFORM); + return appoint; + } + + /** + * 履职打分 + * + * @param performRequest + * @param loginUser + * @return + */ + public Ret perform(AppointPerformRequest performRequest, User loginUser) { + Appoint appoint = getById(performRequest.getAppointId()); + Assert.notNull(appoint, "未找到该记录"); + AppointUser appointUser = appointUserService.getOne(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, performRequest.getAppointId()) + .eq(AppointUser::getType, Appoint.STATE_PERFORM) + .eq(AppointUser::getUserId, loginUser.getId())); + if (appointUser == null) return Ret.fail("您没有打分的权限"); + if (appointUser.getScore() != null) return Ret.fail("您已打过分"); + if (appoint.getState() > Appoint.STATE_PERFORM) return Ret.fail("打分已结束,不能操作"); + appointUser.setScore(performRequest.getScore()); + appointUser.setScoreAt(LocalDateTime.now()); + boolean flag = appointUserService.saveOrUpdate(appointUser); + return !flag ? Ret.fail("操作失败") : Ret.ok(); + } + + public Ret performEnd(String id, User loginUser) { + Appoint appoint = getById(id); + Assert.notNull(appoint, "未找到该记录"); + if (!loginUser.getId().equals(appoint.getCreatedId())) return Ret.fail("您不是创建人,不能操作"); + if (Appoint.STATE_PERFORM != appoint.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); + appoint.setState(Appoint.STATE_END); + boolean flag = saveOrUpdate(appoint); + return !flag ? Ret.fail("操作失败") : Ret.ok().data(AppointWrapper.build().entityVO(appoint)); + } + + public Ret comment(AppointCommentRequest commentRequest, User loginUser) { + Appoint appoint = getById(commentRequest.getAppointId()); + Assert.notNull(appoint, "未找到该记录"); + AppointComment appointComment = BeanUtil.copyProperties(commentRequest, AppointComment.class); + appointComment.setCreatedId(loginUser.getId()); + appointComment.setUserId(loginUser.getId()); + appointComment.setUserName(loginUser.getUserName()); + boolean flag = appointCommentService.saveOrUpdate(appointComment); + return !flag ? Ret.fail("操作失败") : Ret.ok().data(AppointWrapper.build().entityVO(appoint)); + } + /*公用*/ + + /** + * @param appointId + * @param userIds + * @param loginUser + * @param state + */ + private void saveAppointUser(String appointId, String userIds, User loginUser, Integer state) { + if (StrUtil.isNotBlank(userIds)) { + List userIdList = Arrays.asList(userIds.split(",")); + List userList = new ArrayList<>(); + userIdList.forEach(userId -> { + //1.已存在的不管 + int count = appointUserService.count(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, appointId) + .eq(AppointUser::getUserId, userId) + .eq(AppointUser::getType, state)); + if (count == 0) { + //2.只插入新的 + User user = userService.getById(userId); + AppointUser item = new AppointUser(); + item.setUserId(userId); + item.setUserName(user != null ? user.getUserName() : ""); + item.setType(state); + item.setAppointId(appointId); + item.setCreatedId(loginUser.getId()); + item.setCreatedAt(LocalDateTime.now()); + + //如果是投票人员默认待投票状态 + if (Appoint.STATE_VOTE.equals(state)) item.setVote(0); + userList.add(item); + } + }); + //3.删除本来有而现在没有的 + appointUserService.remove(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, appointId) + .eq(AppointUser::getType, state) + .notIn(AppointUser::getUserId, userIdList) + ); + appointUserService.saveBatch(userList); + } else { + //4.删除全部 + appointUserService.remove(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, appointId) + .eq(AppointUser::getType, state) + ); + } + } + + /** + * @param appointId + * @param appointAttachmentArrStr + * @param loginUser + * @param state + */ + private void saveAppointAttachment(String appointId, String appointAttachmentArrStr, User loginUser, Integer state) { + appointAttachmentService.remove(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, appointId) + .eq(AppointAttachment::getType, state)); + if (StrUtil.isNotBlank(appointAttachmentArrStr)) { + List appointAttachmentList = JSONObject.parseArray(appointAttachmentArrStr, AppointAttachment.class); + appointAttachmentList.forEach(item -> { + item.setAppointId(appointId); + item.setType(state); + item.setCreatedId(loginUser.getId()); + item.setCreatedAt(LocalDateTime.now()); + }); + appointAttachmentService.saveBatch(appointAttachmentList); + } + } + + /** + * @param appointId + * @param attachmentName + * @param attachmentPath + * @param loginUser + * @param state + */ + private void saveAppointAttachment(String appointId, String attachmentName, String attachmentPath, User loginUser, Integer state) { + appointAttachmentService.remove(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, appointId) + .eq(AppointAttachment::getType, state)); + if (StrUtil.isNotBlank(attachmentName)) { + String[] nameArr = attachmentName.split(","); + String[] pathArr = attachmentPath.split(","); + for (int i = 0; i < nameArr.length; i++) { + AppointAttachment appointAttachment = new AppointAttachment(); + appointAttachment.setType(state) + .setAppointId(appointId) + .setTitle(nameArr[i]) + .setAttachment(pathArr[i]) + .setCreatedId(loginUser.getId()) + .setCreatedAt(LocalDateTime.now()); + appointAttachmentService.save(appointAttachment); + } + } + } + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/AppointUserService.java b/src/main/java/com/ydool/boot/modules/rddb/service/AppointUserService.java new file mode 100644 index 0000000..e585c54 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/AppointUserService.java @@ -0,0 +1,19 @@ +package com.ydool.boot.modules.rddb.service; + +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.AppointUser; +import com.ydool.boot.modules.rddb.mapper.AppointUserMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 任免督职人员 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Service +public class AppointUserService extends BaseService { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/NoticeService.java b/src/main/java/com/ydool/boot/modules/rddb/service/NoticeService.java index 32f4d47..5d905a0 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/service/NoticeService.java +++ b/src/main/java/com/ydool/boot/modules/rddb/service/NoticeService.java @@ -57,8 +57,8 @@ public class NoticeService extends ServiceImpl { userIds.forEach(userId -> { Message message = new Message(); message.setActionId(entity.getId()); - message.setTitle(entity.getTitle()); - message.setContent(entity.getContent()); + message.setTitle("您有一个新的通知,请前往查看!"); + message.setContent(entity.getTitle()); message.setType(Message.TYPE_NOTICE); message.setStatus(Message.STATUS_UNREAD); message.setUserId(userId); diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/ReviewAttachmentService.java b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewAttachmentService.java new file mode 100644 index 0000000..7f0db5d --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewAttachmentService.java @@ -0,0 +1,19 @@ +package com.ydool.boot.modules.rddb.service; + +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.ReviewAttachment; +import com.ydool.boot.modules.rddb.mapper.ReviewAttachmentMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 任免督职附件 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Service +public class ReviewAttachmentService extends BaseService { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/ReviewAuditService.java b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewAuditService.java new file mode 100644 index 0000000..959804e --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewAuditService.java @@ -0,0 +1,19 @@ +package com.ydool.boot.modules.rddb.service; + +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.ReviewAudit; +import com.ydool.boot.modules.rddb.mapper.ReviewAuditMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 评议审批 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Service +public class ReviewAuditService extends BaseService { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/ReviewCommentService.java b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewCommentService.java new file mode 100644 index 0000000..8f08ad7 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewCommentService.java @@ -0,0 +1,19 @@ +package com.ydool.boot.modules.rddb.service; + +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.ReviewComment; +import com.ydool.boot.modules.rddb.mapper.ReviewCommentMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 工作评议评论 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Service +public class ReviewCommentService extends BaseService { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/ReviewService.java b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewService.java new file mode 100644 index 0000000..983c266 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewService.java @@ -0,0 +1,381 @@ +package com.ydool.boot.modules.rddb.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.core.exception.ResultException; +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.*; +import com.ydool.boot.modules.rddb.entity.bo.ReviewBo; +import com.ydool.boot.modules.rddb.entity.request.review.ReviewAuditRequest; +import com.ydool.boot.modules.rddb.entity.request.review.ReviewCheckRequest; +import com.ydool.boot.modules.rddb.entity.request.review.ReviewCommentRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewCheckStateRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewInReportStateRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewOpinionStateRequest; +import com.ydool.boot.modules.rddb.entity.request.review.state.ReviewResultStateRequest; +import com.ydool.boot.modules.rddb.mapper.ReviewMapper; +import com.ydool.boot.modules.rddb.wrapper.ReviewWrapper; +import com.ydool.boot.modules.sys.entity.User; +import com.ydool.boot.modules.sys.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +/** + *

+ * 评议 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Service +public class ReviewService extends BaseService { + + @Autowired + ReviewAttachmentService reviewAttachmentService; + @Autowired + ReviewCommentService reviewCommentService; + @Autowired + ReviewAuditService reviewAuditService; + @Autowired + ReviewUserService reviewUserService; + @Autowired + UserService userService; + + /*后台*/ + @Transactional + public boolean del(String id) { + reviewAttachmentService.remove(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, id)); + reviewCommentService.remove(new LambdaQueryWrapper() + .eq(ReviewComment::getReviewId, id)); + reviewAuditService.remove(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, id)); + reviewUserService.remove(new LambdaQueryWrapper() + .eq(ReviewUser::getReviewId, id)); + return removeById(id); + } + + @Transactional + public Ret adminSaveOrUpdate(ReviewBo reviewBo, User loginUser) { + Review review = BeanUtil.copyProperties(reviewBo, Review.class); + if (StrUtil.isNotBlank(review.getId())) { + review.setUpdatedId(loginUser.getId()); + } else { + review.setState(Review.STATE_IN_REPORT); + review.setStatus(0); + review.setCreatedId(loginUser.getId()); + } + saveOrUpdate(review); + reviewBo.setId(review.getId()); + + //指定人员 + String checkUserIds = reviewBo.getCheckUserIds(); + String inReportAudit1Ids = reviewBo.getInReportAudit1Ids(); + String inReportAudit2Ids = reviewBo.getInReportAudit2Ids(); + saveReviewUser(reviewBo.getId(), checkUserIds, loginUser); + saveReviewAudit(reviewBo.getId(), inReportAudit1Ids, loginUser, 1); + saveReviewAudit(reviewBo.getId(), inReportAudit2Ids, loginUser, 2); + + //保存附件 + saveReviewAttachment(reviewBo.getId(), reviewBo.getInReportAttachmentArrStr(), loginUser, Review.STATE_IN_REPORT); + saveReviewAttachment(reviewBo.getId(), reviewBo.getCheckAttachmentArrStr(), loginUser, Review.STATE_CHECK); + saveReviewAttachment(reviewBo.getId(), reviewBo.getOpinionAttachmentArrStr(), loginUser, Review.STATE_OPINION); + saveReviewAttachment(reviewBo.getId(), reviewBo.getResultAttachmentArrStr(), loginUser, Review.STATE_RESULT); + return Ret.ok(); + } + + /*接口*/ + + public Ret comment(ReviewCommentRequest reviewCommentRequest, User loginUser) { + Review review = getById(reviewCommentRequest.getReviewId()); + Assert.notNull(review, "未找到该记录"); + ReviewComment reviewComment = BeanUtil.copyProperties(reviewCommentRequest, ReviewComment.class); + reviewComment.setCreatedId(loginUser.getId()); + reviewComment.setUserId(loginUser.getId()); + reviewComment.setUserName(loginUser.getUserName()); + boolean flag = reviewCommentService.saveOrUpdate(reviewComment); + return !flag ? Ret.fail("操作失败") : Ret.ok().data(ReviewWrapper.build().entityVO(review)); + } + + @Transactional + public Review stateInReportSave(ReviewInReportStateRequest reviewInReportStateRequest, User loginUser) { + Review review = BeanUtil.copyProperties(reviewInReportStateRequest, Review.class); + review.setState(Review.STATE_IN_REPORT); + review.setStatus(0); + review.setCreatedId(loginUser.getId()); + saveOrUpdate(review); + saveReviewAttachment(review.getId(), reviewInReportStateRequest.getInReportAttachmentName(), reviewInReportStateRequest.getInReportAttachmentPath(), loginUser, Review.STATE_IN_REPORT); + saveReviewAudit(review.getId(), reviewInReportStateRequest.getInReportAudit1Ids(), loginUser, 1); + saveReviewAudit(review.getId(), reviewInReportStateRequest.getInReportAudit2Ids(), loginUser, 2); + return review; + } + + public Ret audit(ReviewAuditRequest reviewAuditRequest, User loginUser) { + ReviewAudit reviewAudit = reviewAuditService.getOne(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, reviewAuditRequest.getReviewId()) + .eq(ReviewAudit::getLevel, reviewAuditRequest.getLevel()) + .eq(ReviewAudit::getUserId, loginUser.getId())); + if (reviewAudit == null) return Ret.fail("未找到该记录"); + if (reviewAudit.getStatus() != 0) return Ret.fail("您已审核过"); + + Review review = getById(reviewAuditRequest.getReviewId()); + if (review == null) return Ret.fail("未找到该记录"); + if (review.getStatus() != 0) return Ret.fail("该评议不是已不是待审批状态"); + + //本人前面还有待审批的 + int beforeWaitCount = reviewAuditService.count(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, reviewAuditRequest.getReviewId()) + .lt(ReviewAudit::getSortNo, reviewAudit.getSortNo()) + .eq(ReviewAudit::getStatus, 0)); + if (beforeWaitCount != 0) return Ret.fail("还未轮到您审批"); + + reviewAudit.setStatus(reviewAuditRequest.getStatus()); + reviewAudit.setReason(reviewAuditRequest.getReason()); + reviewAudit.setAuditAt(LocalDateTime.now()); + boolean flag = reviewAuditService.saveOrUpdate(reviewAudit); + + //如果拒绝就整个拒绝 + if (reviewAudit.getStatus() == 2) { + review.setStatus(2); + saveOrUpdate(review); + } + //如果没有待审批的,进入下一阶段 + int waitAuditCount = reviewAuditService.count(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, reviewAuditRequest.getReviewId()) + .eq(ReviewAudit::getStatus, 0)); + if (waitAuditCount == 0) { + review.setStatus(1); +// review.setState(Review.STATE_REPORT); 直接跳过 +// review.setState(Review.STATE_ASK); 直接跳过 + review.setState(Review.STATE_CHECK); + saveOrUpdate(review); + } + return !flag ? Ret.fail("操作失败") : Ret.ok(); + } + + + public Review stateCheckSave(ReviewCheckStateRequest reviewCheckStateRequest, User loginUser) { + Review review = getById(reviewCheckStateRequest.getReviewId()); + Assert.notNull(review, "未找到该记录"); + if(Review.STATE_CHECK!=review.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); + BeanUtil.copyProperties(reviewCheckStateRequest, review); + saveOrUpdate(review); + + saveReviewAttachment(review.getId(), reviewCheckStateRequest.getCheckAttachmentName(), reviewCheckStateRequest.getCheckAttachmentPath(), loginUser, Review.STATE_CHECK); + saveReviewUser(review.getId(), reviewCheckStateRequest.getCheckUserIds(), loginUser); + return review; + } + + public Ret check(ReviewCheckRequest reviewCheckRequest, User loginUser) { + Review review = getById(reviewCheckRequest.getReviewId()); + Assert.notNull(review, "未找到该记录"); + ReviewUser reviewUser = reviewUserService.getOne(new LambdaQueryWrapper() + .eq(ReviewUser::getReviewId, reviewCheckRequest.getReviewId()) + .eq(ReviewUser::getUserId, loginUser.getId())); + if (reviewUser == null) return Ret.fail("您没有打分的权限"); + if (reviewUser.getScore() != null) return Ret.fail("您已打过分"); + if (review.getState() > Review.STATE_CHECK) return Ret.fail("打分已结束,不能操作"); + reviewUser.setScore(reviewCheckRequest.getScore()); + reviewUser.setScoreAt(LocalDateTime.now()); + boolean flag = reviewUserService.saveOrUpdate(reviewUser); + return !flag ? Ret.fail("操作失败") : Ret.ok(); + } + + public Ret checkEnd(String id, User loginUser) { + Review review = getById(id); + Assert.notNull(review, "未找到该记录"); + if(Review.STATE_CHECK!=review.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); + if (!loginUser.getId().equals(review.getCreatedId())) return Ret.fail("您不是创建人,不能操作"); + review.setState(Review.STATE_OPINION); + boolean flag = saveOrUpdate(review); + return !flag ? Ret.fail("操作失败") : Ret.ok().data(ReviewWrapper.build().entityVO(review)); + } + + public Review stateOpinionSave(ReviewOpinionStateRequest reviewOpinionStateRequest, User loginUser) { + Review review = getById(reviewOpinionStateRequest.getReviewId()); + Assert.notNull(review, "未找到该记录"); + if(Review.STATE_OPINION!=review.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); + BeanUtil.copyProperties(reviewOpinionStateRequest, review); + review.setState(Review.STATE_RESULT); + saveOrUpdate(review); + + saveReviewAttachment(review.getId(), reviewOpinionStateRequest.getOpinionAttachmentName(), reviewOpinionStateRequest.getOpinionAttachmentPath(), loginUser, Review.STATE_OPINION); + return review; + } + + public Review stateResultSave(ReviewResultStateRequest reviewResultStateRequest, User loginUser) { + Review review = getById(reviewResultStateRequest.getReviewId()); + Assert.notNull(review, "未找到该记录"); + if(Review.STATE_RESULT!=review.getState()) throw new ResultException(Ret.fail("当前环节不能提交该信息")); + BeanUtil.copyProperties(reviewResultStateRequest, review); + review.setState(Review.STATE_PUBLIC); + saveOrUpdate(review); + + saveReviewAttachment(review.getId(), reviewResultStateRequest.getResultAttachmentName(), reviewResultStateRequest.getResultAttachmentPath(), loginUser, Review.STATE_RESULT); + return review; + } + + /*公用*/ + + /** + * @param reviewId + * @param userIds + * @param loginUser + */ + private void saveReviewUser(String reviewId, String userIds, User loginUser) { + if (StrUtil.isNotBlank(userIds)) { + List userIdList = Arrays.asList(userIds.split(",")); + List userList = new ArrayList<>(); + userIdList.forEach(userId -> { + //1.已存在的不管 + int count = reviewUserService.count(new LambdaQueryWrapper() + .eq(ReviewUser::getReviewId, reviewId) + .eq(ReviewUser::getUserId, userId) + ); + if (count == 0) { + //2.只插入新的 + User user = userService.getById(userId); + ReviewUser item = new ReviewUser(); + item.setUserId(userId); + item.setUserName(user != null ? user.getUserName() : ""); + item.setReviewId(reviewId); + item.setCreatedId(loginUser.getId()); + item.setCreatedAt(LocalDateTime.now()); + userList.add(item); + } + }); + //3.删除本来有而现在没有的 + reviewUserService.remove(new LambdaQueryWrapper() + .eq(ReviewUser::getReviewId, reviewId) + .notIn(ReviewUser::getUserId, userIdList) + ); + reviewUserService.saveBatch(userList); + } else { + //4.删除全部 + reviewUserService.remove(new LambdaQueryWrapper() + .eq(ReviewUser::getReviewId, reviewId) + ); + } + } + + /** + * @param reviewId + * @param userIds + * @param loginUser + * @param level + */ + private void saveReviewAudit(String reviewId, String userIds, User loginUser, Integer level) { + if (StrUtil.isNotBlank(userIds)) { + List userIdList = Arrays.asList(userIds.split(",")); + List userList = new ArrayList<>(); + Iterator iterator = userIdList.iterator(); + int sortNo; + if (level == 1) { + sortNo = 1; + } else { + int level1Count = reviewAuditService.count(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, reviewId) + .eq(ReviewAudit::getLevel, 1)); + sortNo = level1Count + 1; + } + while (iterator.hasNext()) { + String userId = iterator.next(); + //1.已存在的不管 + int count = reviewAuditService.count(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, reviewId) + .eq(ReviewAudit::getLevel, level) + .eq(ReviewAudit::getUserId, userId) + ); + if (count == 0) { + //2.只插入新的 + User user = userService.getById(userId); + ReviewAudit item = new ReviewAudit(); + item.setUserId(userId); + item.setUserName(user != null ? user.getUserName() : ""); + item.setReviewId(reviewId); + item.setStatus(0); + item.setLevel(level); + item.setSortNo(sortNo++); + item.setCreatedId(loginUser.getId()); + item.setCreatedAt(LocalDateTime.now()); + userList.add(item); + } + } + //3.删除本来有而现在没有的 + reviewAuditService.remove(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, reviewId) + .eq(ReviewAudit::getLevel, level) + .notIn(ReviewAudit::getUserId, userIdList) + ); + reviewAuditService.saveBatch(userList); + } else { + //4.删除全部 + reviewAuditService.remove(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, reviewId) + .eq(ReviewAudit::getLevel, level) + ); + } + } + + /** + * @param reviewId + * @param reviewAttachmentArrStr + * @param loginUser + * @param state + */ + private void saveReviewAttachment(String reviewId, String reviewAttachmentArrStr, User loginUser, Integer state) { + reviewAttachmentService.remove(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, reviewId) + .eq(ReviewAttachment::getType, state)); + if (StrUtil.isNotBlank(reviewAttachmentArrStr)) { + List reviewAttachmentList = JSONObject.parseArray(reviewAttachmentArrStr, ReviewAttachment.class); + reviewAttachmentList.forEach(item -> { + item.setReviewId(reviewId); + item.setType(state); + item.setCreatedId(loginUser.getId()); + item.setCreatedAt(LocalDateTime.now()); + }); + reviewAttachmentService.saveBatch(reviewAttachmentList); + } + } + + /** + * @param reviewId + * @param attachmentName + * @param attachmentPath + * @param loginUser + * @param state + */ + private void saveReviewAttachment(String reviewId, String attachmentName, String attachmentPath, User loginUser, Integer state) { + reviewAttachmentService.remove(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, reviewId) + .eq(ReviewAttachment::getType, state)); + if (StrUtil.isNotBlank(attachmentName)) { + String[] nameArr = attachmentName.split(","); + String[] pathArr = attachmentPath.split(","); + for (int i = 0; i < nameArr.length; i++) { + ReviewAttachment reviewAttachment = new ReviewAttachment(); + reviewAttachment.setType(state) + .setReviewId(reviewId) + .setTitle(nameArr[i]) + .setAttachment(pathArr[i]) + .setCreatedId(loginUser.getId()) + .setCreatedAt(LocalDateTime.now()); + reviewAttachmentService.save(reviewAttachment); + } + } + } + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/ReviewUserService.java b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewUserService.java new file mode 100644 index 0000000..c1bba58 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/service/ReviewUserService.java @@ -0,0 +1,19 @@ +package com.ydool.boot.modules.rddb.service; + +import com.ydool.boot.core.service.BaseService; +import com.ydool.boot.modules.rddb.entity.ReviewUser; +import com.ydool.boot.modules.rddb.mapper.ReviewUserMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 工作评议人员 服务实现类 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Service +public class ReviewUserService extends BaseService { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/SyncNameService.java b/src/main/java/com/ydool/boot/modules/rddb/service/SyncNameService.java index 4426bdc..791aefe 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/service/SyncNameService.java +++ b/src/main/java/com/ydool/boot/modules/rddb/service/SyncNameService.java @@ -34,47 +34,66 @@ public class SyncNameService { private ConferenceService conferenceService; @Autowired private ConferenceUserService conferenceUserService; + @Autowired + AppointUserService appointUserService; + @Autowired + AppointCommentService appointCommentService; + @Autowired + ReviewUserService reviewUserService; + @Autowired + ReviewAuditService reviewAuditService; + @Autowired + ReviewCommentService reviewCommentService; @Transactional public void sync(User user) { List readFileList = readFileService.list(new QueryWrapper().eq("created_id", user.getId())); - readFileList.forEach(item -> { - item.setUploadUser(user.getUserName()); - readFileService.updateById(item); - }); + readFileList.forEach(item -> item.setUploadUser(user.getUserName())); + readFileService.updateBatchById(readFileList); + List readFileUserList = readFileUserService.list(new QueryWrapper().eq("user_id", user.getId())); - readFileUserList.forEach(item -> { - item.setUserName(user.getUserName()); - readFileUserService.updateById(item); - }); + readFileUserList.forEach(item -> item.setUserName(user.getUserName())); + readFileUserService.updateBatchById(readFileUserList); + List auditUserList = auditUserService.list(new QueryWrapper().eq("user_id", user.getId())); - auditUserList.forEach(item -> { - item.setUserName(user.getUserName()); - auditUserService.updateById(item); - }); + auditUserList.forEach(item -> item.setUserName(user.getUserName())); + auditUserService.updateBatchById(auditUserList); + List superviseThingUserList = superviseThingUserService.list(new QueryWrapper().eq("user_id", user.getId())); - superviseThingUserList.forEach(item -> { - item.setUserName(user.getUserName()); - superviseThingUserService.updateById(item); - }); + superviseThingUserList.forEach(item -> item.setUserName(user.getUserName())); + superviseThingUserService.updateBatchById(superviseThingUserList); + List superviseThingCommentList = superviseThingCommentService.list(new QueryWrapper().eq("created_id", user.getId())); - superviseThingCommentList.forEach(item -> { - item.setName(user.getUserName()); - superviseThingCommentService.updateById(item); - }); + superviseThingCommentList.forEach(item -> item.setName(user.getUserName())); + superviseThingCommentService.updateBatchById(superviseThingCommentList); + List conferenceList = conferenceService.list(new QueryWrapper().eq("created_id", user.getId())); - conferenceList.forEach(item -> { - item.setCreatedUser(user.getUserName()); - conferenceService.updateById(item); - }); + conferenceList.forEach(item -> item.setCreatedUser(user.getUserName())); + conferenceService.updateBatchById(conferenceList); + List conferenceUserList = conferenceUserService.list(new QueryWrapper().eq("user_id", user.getId())); - conferenceUserList.forEach(item -> { - item.setUserName(user.getUserName()); - conferenceUserService.updateById(item); - }); + conferenceUserList.forEach(item -> item.setUserName(user.getUserName())); + conferenceUserService.updateBatchById(conferenceUserList); + List appointUserList = appointUserService.list(new QueryWrapper().eq("user_id", user.getId())); + appointUserList.forEach(item -> item.setUserName(user.getUserName())); + appointUserService.updateBatchById(appointUserList); + List appointCommentList = appointCommentService.list(new QueryWrapper().eq("user_id", user.getId())); + appointCommentList.forEach(item -> item.setUserName(user.getUserName())); + appointCommentService.updateBatchById(appointCommentList); + List reviewUserList = reviewUserService.list(new QueryWrapper().eq("user_id", user.getId())); + reviewUserList.forEach(item -> item.setUserName(user.getUserName())); + reviewUserService.updateBatchById(reviewUserList); + + List reviewAuditList = reviewAuditService.list(new QueryWrapper().eq("user_id", user.getId())); + reviewAuditList.forEach(item -> item.setUserName(user.getUserName())); + reviewAuditService.updateBatchById(reviewAuditList); + + List reviewCommentList = reviewCommentService.list(new QueryWrapper().eq("user_id", user.getId())); + reviewCommentList.forEach(item -> item.setUserName(user.getUserName())); + reviewCommentService.updateBatchById(reviewCommentList); } } \ No newline at end of file diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java index 953f2c5..7706b77 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java @@ -57,7 +57,7 @@ public class ActivityAuditUserController extends BaseController { @GetMapping("/to_assign") public String toAssign(String userIds, Model model) { model.addAttribute("userIds", userIds); - return "modules/rddb/activity/assign.html"; + return "modules/rddb/activity/assign_user.html"; } /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/AppointAttachmentController.java b/src/main/java/com/ydool/boot/modules/rddb/web/AppointAttachmentController.java new file mode 100644 index 0000000..9a0b100 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/AppointAttachmentController.java @@ -0,0 +1,20 @@ +package com.ydool.boot.modules.rddb.web; + + +import com.ydool.boot.modules.sys.web.BaseAdminController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + *

+ * 任免督职附件 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Controller +@RequestMapping("/rddb/appointAttachment") +public class AppointAttachmentController extends BaseAdminController { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/AppointCommentController.java b/src/main/java/com/ydool/boot/modules/rddb/web/AppointCommentController.java new file mode 100644 index 0000000..3da9462 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/AppointCommentController.java @@ -0,0 +1,21 @@ +package com.ydool.boot.modules.rddb.web; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.stereotype.Controller; +import com.ydool.boot.core.web.BaseController; + +/** + *

+ * 任免督职评论 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-17 + */ +@Controller +@RequestMapping("/rddb/appointComment") +public class AppointCommentController extends BaseController { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/AppointController.java b/src/main/java/com/ydool/boot/modules/rddb/web/AppointController.java new file mode 100644 index 0000000..d91ac8a --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/AppointController.java @@ -0,0 +1,95 @@ +package com.ydool.boot.modules.rddb.web; + + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ydool.boot.common.json.JsonMapper; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.core.auth.PreAuth; +import com.ydool.boot.modules.rddb.entity.Appoint; +import com.ydool.boot.modules.rddb.entity.AppointAttachment; +import com.ydool.boot.modules.rddb.entity.bo.AppointBo; +import com.ydool.boot.modules.rddb.service.AppointAttachmentService; +import com.ydool.boot.modules.rddb.service.AppointService; +import com.ydool.boot.modules.sys.web.BaseAdminController; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + *

+ * 任免督职 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Controller +@RequestMapping("${ydool.path}/rddb/appoint") +public class AppointController extends BaseAdminController { + @Autowired + private AppointService appointService; + @Autowired + AppointAttachmentService appointAttachmentService; + + @GetMapping + public String index() { + return "modules/rddb/appoint/index.html"; + } + + @PostMapping("list") + @ResponseBody + public void list(Appoint appoint) { + QueryWrapper wrapper = new QueryWrapper<>(); + if (StringUtils.isNotBlank(appoint.getProposeName())) wrapper.like("propose_name", appoint.getProposeName()); + wrapper.orderByDesc("created_at"); + Page page = appointService.page(new Page(getPageNum(), getPageSize()), wrapper); + render(Ret.ok().paged(page)); + } + + @PreAuth("rddb:appoint:form") + @GetMapping("form") + public String form(String id, Model model)throws Exception { + Appoint appoint = new Appoint(); + if (ObjectUtil.isNotEmpty(id)) { + appoint = appointService.getById(id); + List proposeAttachmentList = appointAttachmentService.list(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, id) + .eq(AppointAttachment::getType,Appoint.STATE_PROPOSE)); + List conferenceAttachmentList = appointAttachmentService.list(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, id) + .eq(AppointAttachment::getType,Appoint.STATE_CONFERENCE)); + List performAttachmentList = appointAttachmentService.list(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, id) + .eq(AppointAttachment::getType,Appoint.STATE_PERFORM)); + model.addAttribute("proposeAttachmentListStr", JsonMapper.getInstance().writeValueAsString(proposeAttachmentList)); + model.addAttribute("conferenceAttachmentListStr", JsonMapper.getInstance().writeValueAsString(conferenceAttachmentList)); + model.addAttribute("performAttachmentListStr", JsonMapper.getInstance().writeValueAsString(performAttachmentList)); + } + model.addAttribute("appoint", appoint); + return "modules/rddb/appoint/form.html"; + } + + @PostMapping("save") + @ResponseBody + public void save(@Validated AppointBo appointBo) { + render(appointService.adminSaveOrUpdate(appointBo, getLoginUser())); + } + + @PostMapping("/delete") + public void delete(String id) { + boolean flag = appointService.del(id); + renderJson(!flag ? Ret.fail("操作失败") : Ret.ok()); + } + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/AppointUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/AppointUserController.java new file mode 100644 index 0000000..88d533c --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/AppointUserController.java @@ -0,0 +1,72 @@ +package com.ydool.boot.modules.rddb.web; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ydool.boot.api.util.CodecUtils; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.common.utils.WebUtils; +import com.ydool.boot.modules.rddb.entity.AppointUser; +import com.ydool.boot.modules.rddb.service.AppointUserService; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; +import com.ydool.boot.modules.sys.entity.User; +import com.ydool.boot.modules.sys.service.UserService; +import com.ydool.boot.modules.sys.web.BaseAdminController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + *

+ * 任免督职人员 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-05 + */ +@Controller +@RequestMapping("${ydool.path}/rddb/appoint_user") +public class AppointUserController extends BaseAdminController { + + @Autowired + private AppointUserService appointUserService; + @Autowired + private UserService userService; + + @RequestMapping("list") + @ResponseBody + public void list(String id,String type) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("appoint_id", id); + wrapper.eq("type", type); + wrapper.orderByDesc("created_at"); + Page page = appointUserService.page(new Page(getPageNum(), getPageSize()), wrapper); + render(Ret.ok().paged(page)); + } + + @GetMapping("to_assign") + public String toAssign( Model model) { + model.addAllAttributes(WebUtils.getParameters(request)); + return "modules/rddb/assign.html"; + } + + /** + * 选择user列表,过滤已选中人员 + * + * @param userIds + */ + @RequestMapping("assign_list") + @ResponseBody + public void assignList(String userIds,String userName,String loginName) { + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.notIn("id", userIds.split(",")); + if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); + userQueryWrapper.like(StrUtil.isNotBlank(loginName),"AES_DECRYPT(from_base64 (login_name),'"+ CodecUtils.KEY +"')",loginName); + Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); + } +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java index 1281c31..707e26d 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java @@ -49,7 +49,7 @@ public class AuditUserController extends ApiBaseController { @GetMapping("to_assign") public String toAssign(String userIds, Model model) { model.addAttribute("userIds", userIds); - return "modules/rddb/audit/assign.html"; + return "modules/rddb/audit/assign_user.html"; } /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java index df4a681..e94855c 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java @@ -49,7 +49,7 @@ public class ConferenceUserController extends BaseController { @GetMapping("to_assign") public String toAssign(String userIds, Model model) { model.addAttribute("userIds", userIds); - return "modules/rddb/conference/assign.html"; + return "modules/rddb/conference/assign_user.html"; } /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java index 693fca6..7b630b3 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java @@ -49,7 +49,7 @@ public class ReadFileUserController extends BaseAdminController { @GetMapping("to_assign") public String toAssign(String userIds, Model model) { model.addAttribute("userIds", userIds); - return "modules/rddb/readfile/assign.html"; + return "modules/rddb/readfile/assign_user.html"; } /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ReviewAttachmentController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewAttachmentController.java new file mode 100644 index 0000000..31aec05 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewAttachmentController.java @@ -0,0 +1,21 @@ +package com.ydool.boot.modules.rddb.web; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.stereotype.Controller; +import com.ydool.boot.core.web.BaseController; + +/** + *

+ * 任免督职附件 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Controller +@RequestMapping("/rddb/reviewAttachment") +public class ReviewAttachmentController extends BaseController { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ReviewAuditController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewAuditController.java new file mode 100644 index 0000000..3247c67 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewAuditController.java @@ -0,0 +1,73 @@ +package com.ydool.boot.modules.rddb.web; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ydool.boot.api.util.CodecUtils; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.common.utils.WebUtils; +import com.ydool.boot.modules.rddb.entity.ReviewAudit; +import com.ydool.boot.modules.rddb.service.ReviewAuditService; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; +import com.ydool.boot.modules.sys.entity.User; +import com.ydool.boot.modules.sys.service.UserService; +import com.ydool.boot.modules.sys.web.BaseAdminController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + *

+ * 评议审批 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Controller +@RequestMapping("${ydool.path}/rddb/review_audit") +public class ReviewAuditController extends BaseAdminController { + + @Autowired + private ReviewAuditService reviewAuditService; + @Autowired + private UserService userService; + + @RequestMapping("list") + @ResponseBody + public void list(String id, String type) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("review_id", id); + wrapper.eq(StrUtil.isNotBlank(type), "level", type); + wrapper.orderByAsc("sort_no"); + Page page = reviewAuditService.page(new Page(getPageNum(), getPageSize()), wrapper); + render(Ret.ok().paged(page)); + } + + @GetMapping("to_assign") + public String toAssign( Model model) { + model.addAllAttributes(WebUtils.getParameters(request)); + return "modules/rddb/assign.html"; + } + + /** + * 选择user列表,过滤已选中人员 + * + * @param userIds + */ + @RequestMapping("assign_list") + @ResponseBody + public void assignList(String userIds, String userName, String loginName) { + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.notIn("id", userIds.split(",")); + if (StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name", userName); + userQueryWrapper.like(StrUtil.isNotBlank(loginName), "AES_DECRYPT(from_base64 (login_name),'" + CodecUtils.KEY + "')", loginName); + Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); + } + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ReviewCommentController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewCommentController.java new file mode 100644 index 0000000..b3b37f6 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewCommentController.java @@ -0,0 +1,21 @@ +package com.ydool.boot.modules.rddb.web; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.stereotype.Controller; +import com.ydool.boot.core.web.BaseController; + +/** + *

+ * 工作评议评论 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Controller +@RequestMapping("/rddb/reviewComment") +public class ReviewCommentController extends BaseController { + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ReviewController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewController.java new file mode 100644 index 0000000..969694d --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewController.java @@ -0,0 +1,108 @@ +package com.ydool.boot.modules.rddb.web; + + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ydool.boot.common.json.JsonMapper; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.core.auth.PreAuth; +import com.ydool.boot.modules.rddb.entity.Review; +import com.ydool.boot.modules.rddb.entity.ReviewAttachment; +import com.ydool.boot.modules.rddb.entity.bo.ReviewBo; +import com.ydool.boot.modules.rddb.service.ReviewAttachmentService; +import com.ydool.boot.modules.rddb.service.ReviewAuditService; +import com.ydool.boot.modules.rddb.service.ReviewService; +import com.ydool.boot.modules.rddb.service.ReviewUserService; +import com.ydool.boot.modules.sys.web.BaseAdminController; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + *

+ * 评议 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Controller +@RequestMapping("${ydool.path}/rddb/review") +public class ReviewController extends BaseAdminController { + @Autowired + ReviewService reviewService; + @Autowired + ReviewUserService reviewUserService; + @Autowired + ReviewAuditService reviewAuditService; + @Autowired + ReviewAttachmentService reviewAttachmentService; + + @GetMapping + public String index() { + return "modules/rddb/review/index.html"; + } + + @PostMapping("list") + @ResponseBody + public void list(Review review) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); + if (StringUtils.isNotBlank(review.getType())) wrapper.eq(Review::getType, review.getType()); + if (StringUtils.isNotBlank(review.getReviewSubject())) + wrapper.like(Review::getReviewSubject, review.getReviewSubject()); + if (review.getState()!=null) wrapper.eq(Review::getState, review.getState()); + if (review.getStatus()!=null) wrapper.eq(Review::getStatus, review.getStatus()); + wrapper.orderByDesc(Review::getCreatedAt); + Page page = reviewService.page(new Page(getPageNum(), getPageSize()), wrapper); + render(Ret.ok().paged(page)); + } + + @PreAuth("rddb:review:form") + @GetMapping("form") + public String form(String id, Model model) throws Exception { + Review review = new Review(); + if (ObjectUtil.isNotEmpty(id)) { + review = reviewService.getById(id); + List inReportAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, id) + .eq(ReviewAttachment::getType, Review.STATE_IN_REPORT)); + List checkAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, id) + .eq(ReviewAttachment::getType, Review.STATE_CHECK)); + List opinionAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, id) + .eq(ReviewAttachment::getType, Review.STATE_OPINION)); + List resultAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, id) + .eq(ReviewAttachment::getType, Review.STATE_RESULT)); + model.addAttribute("inReportAttachmentListStr", JsonMapper.getInstance().writeValueAsString(inReportAttachmentList)); + model.addAttribute("checkAttachmentListStr", JsonMapper.getInstance().writeValueAsString(checkAttachmentList)); + model.addAttribute("opinionAttachmentListStr", JsonMapper.getInstance().writeValueAsString(opinionAttachmentList)); + model.addAttribute("resultAttachmentListStr", JsonMapper.getInstance().writeValueAsString(resultAttachmentList)); + } + model.addAttribute("review", review); + return "modules/rddb/review/form.html"; + } + + @PostMapping("save") + @ResponseBody + public void save(@Validated ReviewBo reviewBo) { + render(reviewService.adminSaveOrUpdate(reviewBo, getLoginUser())); + } + + @PostMapping("/delete") + public void delete(String id) { + boolean flag = reviewService.del(id); + renderJson(!flag ? Ret.fail("操作失败") : Ret.ok()); + } + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ReviewUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewUserController.java new file mode 100644 index 0000000..3237d8e --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ReviewUserController.java @@ -0,0 +1,72 @@ +package com.ydool.boot.modules.rddb.web; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ydool.boot.api.util.CodecUtils; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.common.utils.WebUtils; +import com.ydool.boot.modules.rddb.entity.ReviewUser; +import com.ydool.boot.modules.rddb.service.ReviewUserService; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; +import com.ydool.boot.modules.sys.entity.User; +import com.ydool.boot.modules.sys.service.UserService; +import com.ydool.boot.modules.sys.web.BaseAdminController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + *

+ * 工作评议人员 前端控制器 + *

+ * + * @author zhouyuan + * @since 2022-05-12 + */ +@Controller +@RequestMapping("${ydool.path}/rddb/review_user") +public class ReviewUserController extends BaseAdminController { + + @Autowired + private ReviewUserService reviewUserService; + @Autowired + private UserService userService; + + @RequestMapping("list") + @ResponseBody + public void list(String id) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("review_id", id); + wrapper.orderByDesc("created_at"); + Page page = reviewUserService.page(new Page(getPageNum(), getPageSize()), wrapper); + render(Ret.ok().paged(page)); + } + + @GetMapping("to_assign") + public String toAssign(Model model) { + model.addAllAttributes(WebUtils.getParameters(request)); + return "modules/rddb/assign.html"; + } + + /** + * 选择user列表,过滤已选中人员 + * + * @param userIds + */ + @RequestMapping("assign_list") + @ResponseBody + public void assignList(String userIds,String userName,String loginName) { + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.notIn("id", userIds.split(",")); + if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); + userQueryWrapper.like(StrUtil.isNotBlank(loginName),"AES_DECRYPT(from_base64 (login_name),'"+ CodecUtils.KEY +"')",loginName); + Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); + } + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java index 50f06be..239a1ba 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java @@ -49,7 +49,7 @@ public class SuperviseThingUserController extends BaseController { @GetMapping("to_assign") public String toAssign(String userIds, Model model) { model.addAttribute("userIds", userIds); - return "modules/rddb/supervise_thing/assign.html"; + return "modules/rddb/supervise_thing/assign_user.html"; } /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java b/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java index 13a9f4f..57e432c 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java @@ -57,7 +57,7 @@ public class VoterSuggestSolveController extends BaseController { @GetMapping("/to_assign") public String toAssign(String userIds, Model model) { model.addAttribute("userIds", userIds); - return "modules/rddb/voter_suggest/assign.html"; + return "modules/rddb/voter_suggest/assign_user.html"; } /** diff --git a/src/main/java/com/ydool/boot/modules/rddb/wrapper/AppointWrapper.java b/src/main/java/com/ydool/boot/modules/rddb/wrapper/AppointWrapper.java new file mode 100644 index 0000000..d43a795 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/wrapper/AppointWrapper.java @@ -0,0 +1,109 @@ +package com.ydool.boot.modules.rddb.wrapper; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ydool.boot.api.util.TokenUtil; +import com.ydool.boot.api.util.UserInfo; +import com.ydool.boot.common.utils.SpringUtils; +import com.ydool.boot.core.wrapper.BaseWrapper; +import com.ydool.boot.modules.rddb.entity.Appoint; +import com.ydool.boot.modules.rddb.entity.AppointAttachment; +import com.ydool.boot.modules.rddb.entity.AppointUser; +import com.ydool.boot.modules.rddb.entity.dto.AppointDto; +import com.ydool.boot.modules.rddb.service.AppointAttachmentService; +import com.ydool.boot.modules.rddb.service.AppointUserService; + +import java.math.BigDecimal; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author zhouyuan + * @date 2022年05月16日 + */ +public class AppointWrapper extends BaseWrapper { + + public static AppointWrapper build() { + return new AppointWrapper(); + } + + @Override + public AppointDto entityVO(Appoint appoint) { + AppointDto appointDto = BeanUtil.copyProperties(appoint, AppointDto.class); + + AppointAttachmentService appointAttachmentService = SpringUtils.getBean(AppointAttachmentService.class); + AppointUserService appointUserService = SpringUtils.getBean(AppointUserService.class); + + List proposeAttachmentList = appointAttachmentService.list(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, appoint.getId()) + .eq(AppointAttachment::getType, Appoint.STATE_PROPOSE) + .orderByDesc(AppointAttachment::getCreatedAt)); + List conferenceAttachmentList = appointAttachmentService.list(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, appoint.getId()) + .eq(AppointAttachment::getType, Appoint.STATE_CONFERENCE) + .orderByDesc(AppointAttachment::getCreatedAt)); + List performAttachmentList = appointAttachmentService.list(new LambdaQueryWrapper() + .eq(AppointAttachment::getAppointId, appoint.getId()) + .eq(AppointAttachment::getType, Appoint.STATE_PERFORM) + .orderByDesc(AppointAttachment::getCreatedAt)); + + List conferenceUserList = appointUserService.list(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, appoint.getId()) + .eq(AppointUser::getType, Appoint.STATE_CONFERENCE) + .orderByDesc(AppointUser::getCreatedAt)); + List voteUserList = appointUserService.list(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, appoint.getId()) + .eq(AppointUser::getType, Appoint.STATE_VOTE) + .orderByDesc(AppointUser::getCreatedAt)); + List performUserList = appointUserService.list(new LambdaQueryWrapper() + .eq(AppointUser::getAppointId, appoint.getId()) + .eq(AppointUser::getType, Appoint.STATE_PERFORM) + .orderByDesc(AppointUser::getCreatedAt)); + + appointDto.setProposeAttachmentList(proposeAttachmentList); + appointDto.setConferenceAttachmentList(conferenceAttachmentList); + appointDto.setPerformAttachmentList(performAttachmentList); + + appointDto.setConferenceUserList(conferenceUserList); + appointDto.setVoteUserList(voteUserList); + appointDto.setPerformUserList(performUserList); + + //打分结束算平均分 + if (Appoint.STATE_END == appoint.getState()) { + //没打分的不算 + List scoredAppointUserList = performUserList.stream().filter(item -> item.getScore() != null).collect(Collectors.toList()); + BigDecimal averageScore = scoredAppointUserList.stream().map(item -> item.getScore()) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(new BigDecimal(scoredAppointUserList.size()), BigDecimal.ROUND_HALF_UP); + appointDto.setAverageScore(averageScore); + } + //>=投票环节,算通过,拒绝,弃权的票数 + if (Appoint.STATE_VOTE <= appoint.getState()) { + //没投的不算 + List agreeAppointUserList = voteUserList.stream().filter(item -> item.getVote() == AppointUser.VOTE_AGREE).collect(Collectors.toList()); + List refuseAppointUserList = voteUserList.stream().filter(item -> item.getVote() == AppointUser.VOTE_REFUSE).collect(Collectors.toList()); + List abandonAppointUserList = voteUserList.stream().filter(item -> item.getVote() == AppointUser.VOTE_ABANDON).collect(Collectors.toList()); + appointDto.setAgreeVoteCount(agreeAppointUserList.size()); + appointDto.setRefuseVoteCount(refuseAppointUserList.size()); + appointDto.setAbandonVoteCount(abandonAppointUserList.size()); + } + UserInfo userInfo = TokenUtil.getUserInfo(); + + //当期用户是否是创建人 (创建人可操作 投票结束,打分结束的按钮) + //当期用户是否可投票 + //当期用户是否可打分 + appointDto.setIsCreator(false); + appointDto.setIsCanVote(false); + appointDto.setIsCanPerform(false); + if (userInfo != null) { + if (userInfo.getId().equals(appoint.getCreatedId())) appointDto.setIsCreator(true); + List voteUserIdList = voteUserList.stream().map(AppointUser::getUserId).collect(Collectors.toList()); + if (voteUserIdList.contains(userInfo.getId())) appointDto.setIsCanVote(true); + + List performUserIdList = performUserList.stream().map(AppointUser::getUserId).collect(Collectors.toList()); + if (performUserIdList.contains(userInfo.getId())) appointDto.setIsCanPerform(true); + } + return appointDto; + } + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java b/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java index 0425b1c..4c89bea 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java +++ b/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java @@ -82,13 +82,13 @@ public class DbWrapper extends BaseWrapper { entityHead.setSex(DictUtils.getDictLabel("sys_user_sex", entityHead.getSex())); } //民族 - if (StrUtil.isNotBlank(entityHead.getNation())) { - entityHead.setNation(DictUtils.getDictLabel("sys_nation", entityHead.getNation())); - } +// if (StrUtil.isNotBlank(entityHead.getNation())) { +// entityHead.setNation(DictUtils.getDictLabel("sys_nation", entityHead.getNation())); +// } //学历 - if (StrUtil.isNotBlank(entityHead.getCulture())) { - entityHead.setCulture(DictUtils.getDictLabel("sys_culture", entityHead.getCulture())); - } +// if (StrUtil.isNotBlank(entityHead.getCulture())) { +// entityHead.setCulture(DictUtils.getDictLabel("sys_culture", entityHead.getCulture())); +// } //选区地址 if (StrUtil.isNotBlank(entityHead.getPrecinctAddress())) { entityHead.setPrecinctAddress(StreetUtils.getStreetName(entityHead.getPrecinctAddress())); @@ -98,9 +98,9 @@ public class DbWrapper extends BaseWrapper { entityHead.setDbIdentity(DictUtils.getDictLabel("sys_db_identity", entityHead.getDbIdentity())); } //是否连任 - if (StrUtil.isNotBlank(entityHead.getIsReappointment())) { - entityHead.setIsReappointment(DictUtils.getDictLabel("sys_yes_no", entityHead.getIsReappointment())); - } +// if (StrUtil.isNotBlank(entityHead.getIsReappointment())) { +// entityHead.setIsReappointment(DictUtils.getDictLabel("sys_yes_no", entityHead.getIsReappointment())); +// } return (T) entityHead; } diff --git a/src/main/java/com/ydool/boot/modules/rddb/wrapper/ReviewWrapper.java b/src/main/java/com/ydool/boot/modules/rddb/wrapper/ReviewWrapper.java new file mode 100644 index 0000000..b23f417 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/wrapper/ReviewWrapper.java @@ -0,0 +1,113 @@ +package com.ydool.boot.modules.rddb.wrapper; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ydool.boot.api.util.TokenUtil; +import com.ydool.boot.api.util.UserInfo; +import com.ydool.boot.common.utils.SpringUtils; +import com.ydool.boot.core.wrapper.BaseWrapper; +import com.ydool.boot.modules.rddb.entity.Review; +import com.ydool.boot.modules.rddb.entity.ReviewAttachment; +import com.ydool.boot.modules.rddb.entity.ReviewAudit; +import com.ydool.boot.modules.rddb.entity.ReviewUser; +import com.ydool.boot.modules.rddb.entity.dto.ReviewDto; +import com.ydool.boot.modules.rddb.service.ReviewAttachmentService; +import com.ydool.boot.modules.rddb.service.ReviewAuditService; +import com.ydool.boot.modules.rddb.service.ReviewUserService; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.math.BigDecimal; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author zhouyuan + * @date 2022年05月16日 + */ +public class ReviewWrapper extends BaseWrapper { + + public static ReviewWrapper build() { + return new ReviewWrapper(); + } + + @Override + public ReviewDto entityVO(Review review) { + ReviewDto reviewDto = BeanUtil.copyProperties(review, ReviewDto.class); + + ReviewAttachmentService reviewAttachmentService = SpringUtils.getBean(ReviewAttachmentService.class); + ReviewUserService reviewUserService = SpringUtils.getBean(ReviewUserService.class); + ReviewAuditService reviewAuditService = SpringUtils.getBean(ReviewAuditService.class); + JdbcTemplate jdbcTemplate = SpringUtils.getBean(JdbcTemplate.class); + + List inReportAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, review.getId()) + .eq(ReviewAttachment::getType, Review.STATE_IN_REPORT) + .orderByDesc(ReviewAttachment::getCreatedAt)); + List checkAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, review.getId()) + .eq(ReviewAttachment::getType, Review.STATE_CHECK) + .orderByDesc(ReviewAttachment::getCreatedAt)); + List opinionAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, review.getId()) + .eq(ReviewAttachment::getType, Review.STATE_OPINION) + .orderByDesc(ReviewAttachment::getCreatedAt)); + List resultAttachmentList = reviewAttachmentService.list(new LambdaQueryWrapper() + .eq(ReviewAttachment::getReviewId, review.getId()) + .eq(ReviewAttachment::getType, Review.STATE_RESULT) + .orderByDesc(ReviewAttachment::getCreatedAt)); + + List inReportAudit1List = reviewAuditService.list(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, review.getId()) + .eq(ReviewAudit::getLevel, 1) + .orderByDesc(ReviewAudit::getCreatedAt)); + List inReportAudit2List = reviewAuditService.list(new LambdaQueryWrapper() + .eq(ReviewAudit::getReviewId, review.getId()) + .eq(ReviewAudit::getLevel, 2) + .orderByDesc(ReviewAudit::getCreatedAt)); + List checkUserList = reviewUserService.list(new LambdaQueryWrapper() + .eq(ReviewUser::getReviewId, review.getId()) + .orderByDesc(ReviewUser::getCreatedAt)); + + reviewDto.setInReportAttachmentList(inReportAttachmentList); + reviewDto.setCheckAttachmentList(checkAttachmentList); + reviewDto.setOpinionAttachmentList(opinionAttachmentList); + reviewDto.setResultAttachmentList(resultAttachmentList); + + reviewDto.setInReportAudit1List(inReportAudit1List); + reviewDto.setInReportAudit2List(inReportAudit2List); + reviewDto.setCheckUserList(checkUserList); + + //打分结束算平均分 + if (Review.STATE_CHECK < review.getState()) { + //没打分的不算 + List scoredReviewUserList = checkUserList.stream().filter(item -> item.getScore() != null).collect(Collectors.toList()); + BigDecimal averageScore = scoredReviewUserList.stream().map(item -> item.getScore()) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(new BigDecimal(scoredReviewUserList.size()), BigDecimal.ROUND_HALF_UP); + reviewDto.setAverageScore(averageScore); + } + UserInfo userInfo = TokenUtil.getUserInfo(); + + //当期用户是否是创建人 (创建人可操作 打分结束的按钮) + //当期用户是否可投票 + //当期用户是否可打分 + //是否待我审批 + reviewDto.setIsCreator(false); + reviewDto.setIsCanCheck(false); + reviewDto.setIsCanAudit1(false); + reviewDto.setIsCanAudit2(false); + if (userInfo != null) { + if (userInfo.getId().equals(review.getCreatedId())) reviewDto.setIsCreator(true); + + List checkedAudit1List = inReportAudit1List.stream().map(ReviewAudit::getUserId).collect(Collectors.toList()); + if (checkedAudit1List.contains(userInfo.getId())) reviewDto.setIsCanAudit1(true); + List checkedAudit2List = inReportAudit2List.stream().map(ReviewAudit::getUserId).collect(Collectors.toList()); + if (checkedAudit2List.contains(userInfo.getId())) reviewDto.setIsCanAudit2(true); + + List checkUserIdList = checkUserList.stream().map(ReviewUser::getUserId).collect(Collectors.toList()); + if (checkUserIdList.contains(userInfo.getId())) reviewDto.setIsCanCheck(true); + } + return reviewDto; + } + +} diff --git a/src/main/resources/static/act.js b/src/main/resources/static/act.js new file mode 100644 index 0000000..f15efd8 --- /dev/null +++ b/src/main/resources/static/act.js @@ -0,0 +1,879 @@ +var act = { + loadIndex: -1, + tabPage: null, + uploadCallback: function(ret) { + }, + linkClickSelector: 'a[data-remote]', + buttonClickSelector: 'button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)', + inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]', + formSubmitSelector: 'form', + // Form input elements bound by jquery-ujs + formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])', + + fire: function (obj, name, data) { + var event = $.Event(name); + obj.trigger(event, data); + return event.result !== false; + }, + isRemote: function (element) { + return element.data('remote') !== undefined && element.data('remote') !== false; + }, + handleRemote: function (element) { + var method, url, data, dataType, options; + dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType); + if (element.is('form')) { + method = element.attr('method'); + url = element.attr('action'); + data = $(element[0]).serializeArray(); + } else if (element.is(act.inputChangeSelector)) { + method = element.data('method'); + url = element.data('url'); + data = element.serialize(); + } else if (element.is(act.buttonClickSelector)) { + method = element.data('method') || 'get'; + url = element.data('url'); + data = element.serialize(); + if (element.data('params')) data = data + '&' + element.data('params'); + } else { + method = element.data('method'); + url = element[0].href; + data = element.data('params') || null; + } + + options = { + type: method || 'GET', data: data || {}, dataType: dataType, + beforeSend: function (xhr, settings) { + act.load('提交中,请稍等...'); + if (settings.dataType === undefined) { + xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script); + } + if (act.fire(element, 'ajax:beforeSend', [xhr, settings])) { + element.trigger('ajax:send', xhr); + } else { + return false; + } + }, + success: function (resp, status, xhr) { + element.trigger('ajax:success', [data, status, xhr]); + act.ajaxSuccess(resp, status, xhr, element); + }, + complete: function (xhr, status) { + element.trigger('ajax:complete', [xhr, status]); + }, + error: function (xhr, status, error) { + element.trigger('ajax:error', [xhr, status, error]); + } + }; + if (url) { + options.url = url; + } + return $.ajax(options); + }, + allowAction: function (element) { + var message = element.data('confirm'); + if (message) { + act.confirm(message, function () { + return act.handleRemote(element); + }); + } else { + return act.handleRemote(element); + } + }, + ajaxSuccess: function (resp, status, xhr, element) { + act.closeLoading(); + var result = element.data('result'); + var okHref = element.data('result-url'); + var okMsg = element.data('result-msg'); + if (resp.state == -1) { + window.location.href = ctx + "/login"; + return; + } + if (resp.state == 0 && resp.msg) act.error(resp.msg); + if (result) { + eval(result)(resp); + } else if (resp.state == 1 && okHref) { + location.href = okHref; + } else if (resp.state == 1 && okMsg) { + act.msg(okMsg); + } + }, + layer: function () { + try { + if (parent.layer) { + return parent.layer + } + if (parent.parent.layer) { + return parent.parent.layer + } + if (top.layer) { + return top.layer + } + } catch (e) { + } + if (window.layer) { + return window.layer; + } + return null; + }(), + dialog: function (title, url, width, height, btns, type) { + var options = { + type: type || 2, + maxmin: true, + shadeClose: false, + title: title, + area: [width + "px", height + "px"], + content: url, + contentFormData: { + __layer: true + }, + success: function (layero, index) { + // console.log($(act.layer.window)); + // if ($(act.layer.window).width() < width || $(act.layer.window).height() < height) { + // act.layer.full(index) + // } + } + }; + if (btns) { + $.extend(options, btns); + } + act.layer.open(options); + }, + iframeWin: function (layero) { + return $("div.layui-layer-content > iframe", layero)[0].contentWindow; + }, + + parentBtnClick: function (windowName) { + parent.$('#' + windowName).closest('.layui-layer').find('.layui-layer-btn0').trigger("click"); + }, + confirm: function (msg, callback, autoClose) { + act.layer.confirm(msg, {icon: 3, title: '提示'}, function (index) { + if (autoClose) act.layer.close(index); + if (callback) callback(index); + }); + }, + confirmUrl: function (msg, url, callback) { + act.layer.confirm(msg, {icon: 3, title: '提示'}, function (index) { + act.layer.close(index); + act.loading(); + act.post(url, {}, callback); + }); + }, + msg: function (msg) { + toastr.success(msg); + }, + error: function (error) { + toastr.error(error, "提示"); + }, + loading: function () { + act.loadIndex = act.layer.load(1); + }, + load: function (msg) { + act.loadIndex = act.layer.msg(msg, { + icon: 16 + , shade: 0.01 + }); + }, + closeLoading: function () { + act.layer.close(act.loadIndex); + + }, + tabPage: function () { + if (window.tabPage) { + return window.tabPage; + } + try { + if (parent.tabPage) { + return parent.tabPage + } + if (parent.parent.tabPage) { + return parent.parent.tabPage + } + if (top.tabPage) { + return top.tabPage + } + } catch (e) { + } + return null + }(), + addTab: function (obj, title, url) { + top.prevWindow = window; + + var tabId = obj ? obj.data("tab-id") : null; + if (tabId == undefined) { + tabId = "tabpanel-" + Math.uuid(); + obj ? obj.attr("data-tab-id", tabId) : null + } + + var tabPage = act.tabPage; + + if (!tabPage || typeof tabPage.addTab != "function" || (!tabPage && (obj.hasClass("btnTool") || obj.hasClass("btnList")) || (obj && obj.data("layer") == true))) { + if (act.layer) { + var layerWidth, layerHeight, layerLeft, layerTop; + if (obj) { + layerWidth = obj.data("layerWidth"); + layerHeight = obj.data("layerHeight"); + layerLeft = obj.data("layerLeft"); + layerTop = obj.data("layerTop") + } + if (layerWidth == null || layerWidth == "") { + layerWidth = $(top.window).width(); + if (layerLeft != null && layerLeft != "") { + layerWidth -= parseInt(layerLeft) * 2 + } else { + layerWidth -= 100 * 2 + } + } + if (layerHeight == null || layerHeight == "") { + layerHeight = $(top.window).height(); + if (layerTop != null && layerTop != "") { + layerHeight -= parseInt(layerTop) * 2 + } else { + layerHeight -= 50 * 2 + } + } + act.dialog(title, url, layerWidth, layerHeight); + } else { + act.winOpen(url, title, "auto", "auto") + } + + return; + } + + act.tabPage.addTab({ + id: tabId, + title: title, + html: '', + closable: true, + refresh: false + }); + + return tabId; + }, + + winOpen: function (url, name, width, height) { + if (!(width && height)) { + width = window.screen.width - 200; + height = window.screen.height - 150 + } + var top = parseInt((window.screen.height - height) / 2 - 20, 10), + left = parseInt((window.screen.width - width) / 2, 10), + options = "location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes,width=" + width + ",height=" + height + ",top=" + top + ",left=" + left; + window.open(url, name, options) + }, + winClose: function () { + setTimeout(function () { + window.opener = null; + window.open("", "_self"); + window.close() + }, 100) + }, + + closeCurrentTabPage: function (preTabCallback) { + var tabPage = act.tabPage; + + if (!tabPage || typeof tabPage.closeCurrentTabPage != "function" || window.name.indexOf("layui-layer") != -1) { + var layerIndex; + if (act.layer) { + layerIndex = act.layer.getFrameIndex(window.name) + } + if (layerIndex) { + act.layer.close(layerIndex) + } else { + act.winClose() + } + + if (typeof preTabCallback == "function") { + try { + preTabCallback(top.prevWindow) + } catch (e) { + console.log(e); + } + } + return + } + + tabPage.closeCurrentTabPage(preTabCallback) + }, + ajax: function (url, type, data, func, dataType) { + $.ajax({ + url: url, + type: type, + data: data, + dataType: dataType || 'json', + success: function (resp) { + if (func) func(resp); + } + }) + }, + get: function (url, callback, dataType) { + act.ajax(url, 'get', null, function (resp) { + if (callback) callback(resp); + }, dataType); + }, + + + post: function (url, data, callback) { + act.ajax(url, 'post', data, function (resp) { + if (callback) callback(resp); + }); + }, + put: function (url, data, callback) { + act.ajax(url, 'put', data, function (resp) { + if (callback) callback(resp); + }); + }, + delete: function (url, callback) { + act.ajax(url, 'delete', {}, function (resp) { + if (callback) callback(resp); + }); + }, + submit: function (form, callback) { + var url = form.attr('action'), method = form.attr("method"); + act.ajax(url, method, form.serializeArray(), callback); + }, + + submitUrl: function (url, form, callback) { + var method = form.attr("method"); + act.ajax(url, method, form.serializeArray(), callback); + }, + ajaxFormSubmit: function (formJqueryObj, callback, msg) { + $(".btn").attr("disabled", true); + var options = {}; + if (typeof callback == "object") { + options = callback; + callback = options.callback; + } + act.load(msg == undefined ? '加载中...' : msg); + if (options.downloadFile === true) { + options.iframe = true + } + formJqueryObj.ajaxSubmit($.extend(true, { + type: "POST", + xhrFields: { + withCredentials: true + }, + url: formJqueryObj.attr("action"), + dataType: "json", + error: function (data) { + $(".btn").attr("disabled", false); + }, + success: function (data, status, xhr) { + $(".btn").attr("disabled", false); + act.closeLoading(); + if (typeof callback == "function") { + callback(data, status, xhr) + } + } + }, options)); + + if (options.downloadFile === true) { + $(".btn").attr("disabled", false); + act.closeLoading() + } + }, + trim: function (str) { + return jQuery.trim(str) + }, + startWith: function (str, start) { + var reg = new RegExp("^" + start); + return reg.test(str) + }, + startsWith: function (str, prefix) { + if (!str || !prefix || str.length < prefix.length) { + return false + } + return str.slice(0, prefix.length) === prefix + }, + endWith: function (str, end) { + var reg = new RegExp(end + "$"); + return reg.test(str) + }, + endsWith: function (str, suffix) { + if (!str || !suffix || str.length < suffix.length) { + return false + } + return str.indexOf(suffix, str.length - suffix.length) !== -1 + }, + getDictLabel: function (dictListJson, value, defaultValue, inCss) { + var result = []; + for (var i = 0; i < dictListJson.length; i++) { + var row = dictListJson[i]; + if (("," + value + ",").indexOf("," + row.value + ",") != -1) { + var str = ""; + if (inCss && (row.cssClass || row.cssStyle)) { + str += "" + row.label + "") + } else { + result.push(row.label) + } + } + } + return result.length > 0 ? result.join(",") : defaultValue + }, + removeParam: function (paramName, url) { + var reg = new RegExp("(^|&)" + paramName + "=([^&]*)(&|$)", "i"), + params; + if (!url || url == "") { + params = window.location.search + } else { + params = url.substring(url.indexOf("?")) + } + if (params != "") { + if (act.startsWith(params, "?") || act.startsWith(params, "&")) { + params = params.substr(1) + } + url = url.substring(0, url.indexOf("?") + 1) + params.replace(reg, "$1"); + if (act.endsWith(url, "?") || act.endsWith(url, "&")) { + return url.substring(0, url.length - 1) + } + } + return url + }, + tpl: function (id, data) { + if ($('#' + id).length == 0) return ""; + return laytpl($('#' + id).html()).render(data || {}); + }, + printPage: function (selecter) { + $(selecter).printThis({ + importCSS: false, + loadCSS: ctxStatic + '/common/print.css', + pageTitle: false, + }); + }, + upload: function(callback) { + act.uploadCallback = function(ret) { + if(callback) callback(ret); + }; + $("#layui-upload").click(); + } +}; + +$(document).ready(function () { + + initToastr(); + initiCheck(); + initSelect2(); + initTreeSelect(); + initIconSelect(); + initAreaSelect(); + initScrollUp(); + initDatePicker(); + initFileUpload(); + + $('textarea.autoHeight').textareaAutoHieght(); + + $(document).on('click.act', act.linkClickSelector, function (e) { + var link = $(this); + if (act.isRemote(link)) act.allowAction(link); + return false; + }); + + // $(document).on('submit.act', act.formSubmitSelector, function (e) { + // var form = $(this); + // if (act.isRemote(form)) { + // var submitBefore = form.data('before'); + // if (submitBefore && submitBefore != "") { + // if (!eval(submitBefore)(form)) { + // return false; + // } + // } + // act.allowAction(form); + // } + // return false; + // }); + + $(document).on("click", ".addTabPage", function (e) { + var $this = $(this), + href = $this.data("href") || $this.attr("href"), + title = $this.data("title") || $this.attr("title") || $this.text(); + if (href && href != "" && href != "blank" && !act.startsWith(href, "javascript:")) { + act.addTab($this, title, href); + return false + } + return true + }); + + $(document).on('click', "#btnExport", function (e) { + var ids = $('#dataGrid').dataGrid('getSelectRows'); + var url = $(this).data('export'); + var form = $(this).data('form'); + act.ajaxFormSubmit($('#' + form), { + url: url + "?ids=" + ids, + downloadFile: true + }); + }); + + $(document).on('click', "#btnImport", function (e) { + var importUrl = $(this).data('import'); + var downloadUrl = $(this).data('template'); + act.layer.open({ + type: 1, + area: ['400px'], + title: '导入数据', + resize: false, + scrollbar: true, + content: act.tpl('importTpl', {importUrl: importUrl, downloadUrl: downloadUrl}), + success: function (layero, index) { + //layero.find('input[type="checkbox"]').iCheck(); + }, + btn: [' 导入', ' 关闭'], + btn1: function (index, layero) { + var form = { + inputForm: layero.find('#inputForm'), + file: layero.find('#file').val() + }; + if (form.file == '' || (!act.endWith(form.file, '.xls') && !act.endWith(form.file, '.xlsx'))) { + act.error('文件不正确,请选择后缀为"xls"或"xlsx"的文件。'); + return false; + } + act.ajaxFormSubmit(form.inputForm, function (resp) { + if (resp.state == 1) act.msg(resp.msg); + else if (resp.state == 0) act.error(resp.msg); + page(); + }); + } + }); + }); + +}); + +function initToastr() { + if (typeof toastr != "undefined") { + toastr.options.progressBar = true; + toastr.options.closeButton = true; + toastr.options.timeOut = 2000; + toastr.options.positionClass = "toast-bottom-right"; + } +} + +function initiCheck() { + if ($.fn.iCheck !== undefined) { + $("input[type=checkbox].form-control:not(.noicheck),input[type=radio].form-control:not(.noicheck)").each(function () { + $(this).iCheck({ + checkboxClass: "icheckbox_" + ($(this).data("style") || "minimal-grey"), + radioClass: "iradio_" + ($(this).data("style") || "minimal-grey") + }).on("ifChanged", function () { + + }); + }); + } +} + +function initSelect2() { + if ($.fn.select2 !== undefined) { + $("select.form-control:not(.noselect2)").each(function () { + var selectionLength = $(this).attr("data-selectionLength"); + var options = { + minimumResultsForSearch: 10, + templateResult: function (result, container) { + var element = $(result.element), + parent = $(container), + style = element.attr("style"), + clazz = element.attr("class"); + if (style && style != "") { + parent.attr("style", style) + } + if (clazz && clazz != "") { + parent.addClass(clazz) + } + return result.text + } + }; + if (selectionLength != null && selectionLength !== "") { + options.maximumSelectionLength = parseInt(selectionLength); + } + $(this).select2(options).on("change", function () { + + }) + }) + } +} + +function initTreeSelect() { + + $('.treeselect .form-control, .treeselect .btn').each(function () { + $(this).click(function () { + var treeselect = $(this).parents(".treeselect"); + var url = treeselect.data('url'); + var title = treeselect.data('title'); + var inputId = treeselect.data("input-id"); + if (url) { + var selectCodes = $("#" + inputId + "Code").val(); + url = ctx + "/treeselect?url=" + url + "&selectCodes=" + selectCodes + "&t=" + new Date().getTime(); + act.dialog(title, url, 300, 400, { + btn: [' 确定', ' 清除'], + btn1: function (index, layero) { + var win = act.iframeWin(layero); + var codes = [], names = [], nodes = win.tree.getSelectedNodes(); + for (var i = 0; i < nodes.length; i++) { + var code = nodes[i]['id'], name = nodes[i]['name']; + codes.push(String(code)); + names.push(String(name)); + break; + } + $("#" + inputId + "Code").val(codes.join(',')).change(); + $("#" + inputId + "Name").val(names.join(',')).change(); + + if (typeof treeselectCallback == 'function') { + treeselectCallback('parent', 'ok', index, layero, nodes); + } + + act.layer.close(index); + + }, + btn2: function (index, layero) { + $("#" + inputId + "Code").val('').change(); + $("#" + inputId + "Name").val('').change(); + } + }); + } + }) + }); +} + +function initIconSelect() { + + $('.iconselect .form-control, .iconselect .btn').each(function () { + $(this).click(function () { + var url = ctx + "/iconselect?url=" + url + "&t=" + new Date().getTime(); + var inputId = $(this).parents(".iconselect").data("input-id"); + act.dialog("图片选择", url, $(window).width() - 100, $(window).height() - 100, { + success: function (layero, index) { + var info = '提示:双击选择图标。'; + layero.find('.layui-layer-btn').append(info); + }, + btn: [' 确定', ' 清除'], + btn1: function (index, layero) { + var win = act.iframeWin(layero); + var icon = win.$("#icon").val(); + $("#" + inputId + "Icon").attr("class", 'fa fa-fw ' + icon); + $("#" + inputId).val(icon).change(); + act.layer.close(index); + }, + btn2: function (index, layer) { + $("#" + inputId + "Icon").attr('class', "fa fa-fw"); + $("#" + inputId).val('').change(); + } + }); + }) + }); +} + +function initAreaSelect() { + + $('.areaselect .form-control, .areaselect .btn').each(function () { + $(this).click(function () { + var areaselect = $(this).parents(".areaselect"); + var title = areaselect.data('title') || '区域选择'; + var inputId = areaselect.data("input-id"); + var level = areaselect.data("level"); + var ignore = areaselect.data("ignore") || false; + var type = areaselect.data('type'); + var url = ctx + "/areaselect?level=" + level + "&type=" + type + "&t=" + new Date().getTime(); + act.dialog(title, url, 450, 600, { + btn: [' 确定', ' 清除'], + btn1: function (index, layero) { + var win = act.iframeWin(layero); + var id = '', name = '', ids = '', names = '', nodes = win.tree.getSelectedNodes(); + for (var i = 0; i < nodes.length; i++) { + if (ignore || level == nodes[i].level + 1) { + id = nodes[i]['id'], name = nodes[i]['name'], names = nodes[i]['names']; + break; + } + } + $("#" + inputId + "Id").val(id).change(); + $("#" + inputId + "Names").val(names).change(); + act.layer.close(index); + + }, + btn2: function (index, layero) { + $("#" + inputId + "Id").val('').change(); + $("#" + inputId + "Names").val('').change(); + } + }); + }) + }); +} + +function initTabPanel() { + var tab = new TabPanel({ + renderTo: 'tabpanel', + active: 0, + width: '100%', + height: '100%', + autoResizable: true, + border: 'none', + items: [ + { + id: 'home', + title: Base64.decode(indexTitle), + closable: false, + html: '', + icon: 'fa fa-home' + } + ] + }); + + window.tabPage = act.tabPage = tab; + window.layer = act.layer = layer; + setTimeout(function () { + act.tabPage.resize(); + }, 500); + +} + +function initScrollUp() { + if ($("#scroll-up").length > 0) { + var btnScrollTop = $("#scroll-up"), + isVisible = false; + $(window).on("scroll.btnScrollTop", function () { + var scroll = $(document).scrollTop(), + h = $(window).height(), + sh = document.body.scrollHeight; + if (scroll > parseInt(h / 4) || (scroll > 0 && sh >= h && h + scroll >= sh - 1)) { + if (!isVisible) { + btnScrollTop.addClass("display"); + isVisible = true + } + } else { + if (isVisible) { + btnScrollTop.removeClass("display"); + isVisible = false + } + } + }).triggerHandler("scroll.btnScrollTop"); + btnScrollTop.on("click", function () { + $("html,body").animate({ + scrollTop: 0 + }, 500); + return false + }) + } +} + +function initDatePicker() { + if ($(".datepicker").length > 0) { + $(".datepicker").each(function () { + var obj = laydate.render({ + elem: this, + eventElem: '#' + $(this).attr('id') + 'GroupButton', + trigger: 'click', + format: $(this).data('format'), + theme: '#1890ff', + type: $(this).data('view'), + }) + if ($(this).data('max') != "default") { + obj.config.max = $(this).data('max'); + } + }); + } +} + +function initFileUpload() { + if ($('.btn-fileupload').length > 0) { + $('.btn-fileupload').click(function () { + var inputName = $(this).parent().data('input'); + $('#input-name').val(inputName); + $('#input-fileupload').click(); + }); + + $('#input-fileupload').change(function () { + if ($(this).val() != '') { + act.load("上传中,请稍后..."); + $('#uploadForm')[0].submit(); + } + }); + + $('.btn-fileclear').click(function () { + $(this).parent().prev().val(''); + $(this).addClass('hide'); + $(this).next().addClass('hide'); + }); + + $('.btn-filedownload').click(function () { + var filePath = $(this).parent().prev().val(); + var url = ctx + "/sys/filemanager/download?path=" + filePath; + location.href = url; + }); + } + + if($("#layui-upload").length == 1) { + layui.use('upload', function(){ + var upload = layui.upload; + upload.render({ + elem: '#layui-upload', + url: ctx + '/sys/filemanager/upload', + data: {type: 'json'}, + done: function(ret){ //上传后的回调 + if(act.uploadCallback) { + act.uploadCallback(ret); + } + } + }) + }); + } +} + +function fileUploadResult(filePath, input) { + act.closeLoading(); + $('#' + input).val(filePath); + $('#input-fileupload').val(''); + if (filePath == '') { + act.error("上传失败..."); + $('#' + input).siblings('.input-group-btn').find('.btn-fileclear').add('hide'); + $('#' + input).siblings('.input-group-btn').find('.btn-filedownload').addClass('hide'); + } else { + $('#' + input).siblings('.input-group-btn').find('.btn-fileclear').removeClass('hide'); + $('#' + input).siblings('.input-group-btn').find('.btn-filedownload').removeClass('hide'); + } +} + + +Math.uuid = (function () { + var $ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); + return function (_, G) { + var C = $, F = [], D = Math.random; + G = G || C.length; + if (_) { + for (var B = 0; B < _; B++) F[B] = C[0 | D() * G] + } else { + var A = 0, E; + F[8] = F[13] = F[18] = F[23] = "-"; + F[14] = "4"; + for (B = 0; B < 36; B++) if (!F[B]) { + E = 0 | D() * 16; + F[B] = C[(B == 19) ? (E & 3) | 8 : E & 15] + } + } + return F.join("") + } +})(); +var randomUUID = Math.uuid; +(function (a) { + a.fn.textareaAutoHieght = function (f) { + var h = { + maxHeight: null, + minHeight: 18 * a(this).attr("rows") + }, + c = a.extend({}, h, f); + return a(this).each(function () { + a(this).bind("paste cut keydown keyup focus blur", function () { + var a = this.style; + this.style.height = c.minHeight + "px"; + if (this.scrollHeight > c.minHeight) { + if (c.maxHeight && this.scrollHeight > c.maxHeight) { + var b = c.maxHeight; + a.overflowY = "scroll" + } else b = this.scrollHeight, a.overflowY = "hidden"; + a.height = b + "px" + } + }).trigger("blur") + }) + } +})(jQuery); diff --git a/src/main/resources/views/htmltags/mupload.html b/src/main/resources/views/htmltags/mupload.html new file mode 100644 index 0000000..6f15e3a --- /dev/null +++ b/src/main/resources/views/htmltags/mupload.html @@ -0,0 +1,136 @@ +<% + /* + 使用时传入标题名aaa,属性名bbb,要回显的数据集合的json字符串形式ccc + 其中ccc用到属性: + title标题 + attachment附件路径 + + 表单提交时候before方法需: + var bbbArr = new Array(); + $.each($(".bbb"), function (i, n) { + var val = $(n).data("val"); + bbbArr.push(val) + }); + $("[name='bbbArrStr']").val(JSON.stringify(bbbArr)); + + 后端接收参数: + String bbbArrStr + */ + + var text = text; + var name = name; + var listStr = listStr; + var list =ParseJson(listStr); + var listName=name+"List"; +%> + +
+
+
+ +
+ +
+ + + + + +
+
+
+
+
+ +
+
+
+ +
+
+
+ + + + + <% for(file in list!){ %> + + + + + + + <% } %> + + +
+ ${file.title} + + ${file.attachment} + + 删除 + 下载 +
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/views/htmltags/person.html b/src/main/resources/views/htmltags/person.html new file mode 100644 index 0000000..237da3e --- /dev/null +++ b/src/main/resources/views/htmltags/person.html @@ -0,0 +1,101 @@ +<% + /* + 使用时传入id,显示标题名aaa,字段属性名bbb,类型ccc(回显数据时,如果同一张表里人员有类型区别时用) + + 表单提交时候before方法需: + var bbbIdsArr = []; + var bbbData = bbbroleGrid.dataGrid('getRowData'); + bbbData.map(data => { + bbbIdsArr.push(data.userId); + }); + $("[name='bbbIds']").val(bbbIdsArr.join(",")); + + 后端接收参数: + String bbbIds + */ + + var id = id; + var text = text; + var name = name; + var type = type!; + var remark = remark!; + var router = router!; +%> + + + + +
+
+
+ +
+
+ +  指定人员 + +

${remark!}

+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/src/main/resources/views/modules/rddb/appoint/form.html b/src/main/resources/views/modules/rddb/appoint/form.html new file mode 100644 index 0000000..0bbf97e --- /dev/null +++ b/src/main/resources/views/modules/rddb/appoint/form.html @@ -0,0 +1,146 @@ +<% layout('/layouts/default.html', {title: '文件审批', libs: ['dataGrid','validate','date','summernote','fileupload']}){ %> +
+
+ +
+
+ ${appoint.isNewRecord ? '新增' : '修改'}任免督职 +
+
+ + + + +
+
提名信息
+ + + + + + + +
会议信息
+ + + + + + + + +
考试信息
+ + + + + +
投票信息
+ + + + + +
履职信息
+ + +
+ + +
+ + + + +
+ +<% } %> + + + + + + + diff --git a/src/main/resources/views/modules/rddb/appoint/index.html b/src/main/resources/views/modules/rddb/appoint/index.html new file mode 100644 index 0000000..c492562 --- /dev/null +++ b/src/main/resources/views/modules/rddb/appoint/index.html @@ -0,0 +1,80 @@ +<% layout('/layouts/default.html', {title: '任免督职管理', libs: ['dataGrid','importExcel','date']}){ %> +
+
+
+
+ 任免督职管理 +
+ +
+ + 查询 + 刷新 + <% if(hasAuth("rddb:appoint:add")) { %> + 新增 + <% } %> + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + +
+
+ +
+
+
+
+
+ +<% } %> + + + + + diff --git a/src/main/resources/views/modules/rddb/assign.html b/src/main/resources/views/modules/rddb/assign.html new file mode 100644 index 0000000..0efae71 --- /dev/null +++ b/src/main/resources/views/modules/rddb/assign.html @@ -0,0 +1,88 @@ +<% layout('/layouts/default.html', {title: '文件审批', libs: ['dataGrid','validate','date','summernote','fileupload']}){ %> +
+
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+ + +
+
+ +
+
+ +
+
+
+
+
+
+<% } %> + + + diff --git a/src/main/resources/views/modules/rddb/review/form.html b/src/main/resources/views/modules/rddb/review/form.html new file mode 100644 index 0000000..dcce36d --- /dev/null +++ b/src/main/resources/views/modules/rddb/review/form.html @@ -0,0 +1,142 @@ +<% layout('/layouts/default.html', {title: '文件审批', libs: ['dataGrid','validate','date','summernote','fileupload']}){ %> +
+
+ +
+
+ ${review.isNewRecord ? '新增' : '修改'}评议 +
+
+ + + + +
+
评议信息
+ + + + + + + + + +
调查信息
+ + + + + + + +
意见信息
+ + + + + +
整改信息
+ + + + +
+ + +
+ +
+
+<% } %> + + + + + + + diff --git a/src/main/resources/views/modules/rddb/review/index.html b/src/main/resources/views/modules/rddb/review/index.html new file mode 100644 index 0000000..9a21d68 --- /dev/null +++ b/src/main/resources/views/modules/rddb/review/index.html @@ -0,0 +1,98 @@ +<% layout('/layouts/default.html', {title: '评议管理', libs: ['dataGrid','importExcel','date']}){ %> +
+
+
+
+ 评议管理 +
+ +
+ + 查询 + 刷新 + <% if(hasAuth("rddb:review:add")) { %> + 新增 + <% } %> + +
+ +
+
+ + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+ +
+
+
+
+
+ +<% } %> + + + + +