@@ -2,10 +2,12 @@ package com.ningdatech.pmapi.meeting.controller; | |||||
import com.ningdatech.pmapi.meeting.entity.req.MeetingExpertJudgeReq; | import com.ningdatech.pmapi.meeting.entity.req.MeetingExpertJudgeReq; | ||||
import com.ningdatech.pmapi.meeting.entity.req.MeetingExpertJudgeReq.Basic; | |||||
import com.ningdatech.pmapi.meeting.manage.MeetingExpertJudgeManage; | import com.ningdatech.pmapi.meeting.manage.MeetingExpertJudgeManage; | ||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import org.springframework.validation.annotation.Validated; | |||||
import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
import javax.validation.Valid; | import javax.validation.Valid; | ||||
@@ -28,7 +30,7 @@ public class MeetingExpertJudgeController { | |||||
@ApiOperation("保存履职评价") | @ApiOperation("保存履职评价") | ||||
@PostMapping("/submit") | @PostMapping("/submit") | ||||
public void saveExpertJudge(@Valid @RequestBody MeetingExpertJudgeReq req) { | |||||
public void saveExpertJudge(@Validated(Basic.class) @RequestBody MeetingExpertJudgeReq req) { | |||||
expertJudgeManage.saveExpertJudge(req); | expertJudgeManage.saveExpertJudge(req); | ||||
} | } | ||||
@@ -30,6 +30,8 @@ public class MeetingExpertJudge implements Serializable { | |||||
@ApiModelProperty("会议ID") | @ApiModelProperty("会议ID") | ||||
private Long meetingId; | private Long meetingId; | ||||
private Long expertId; | |||||
@ApiModelProperty("会议专家ID") | @ApiModelProperty("会议专家ID") | ||||
private Long meetingExpertId; | private Long meetingExpertId; | ||||
@@ -0,0 +1,49 @@ | |||||
package com.ningdatech.pmapi.meeting.entity.enumeration; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Getter; | |||||
/** | |||||
* <p> | |||||
* ExpertJudgeEnum | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023/8/3 | |||||
**/ | |||||
public class ExpertJudgeEnum { | |||||
private ExpertJudgeEnum() { | |||||
} | |||||
@Getter | |||||
@AllArgsConstructor | |||||
public enum AttendStatus { | |||||
ON_TIME(1, "准时"), | |||||
BE_LATE(2, "迟到"), | |||||
ABSENT(3, "缺席"); | |||||
private final Integer code; | |||||
private final String value; | |||||
public boolean eq(Integer code) { | |||||
return this.code.equals(code); | |||||
} | |||||
} | |||||
@Getter | |||||
@AllArgsConstructor | |||||
public enum Performance { | |||||
POSITIVE(1, "积极"), | |||||
NEGATIVE(2, "消极"); | |||||
private final Integer code; | |||||
private final String value; | |||||
public boolean eq(Integer code) { | |||||
return this.code.equals(code); | |||||
} | |||||
} | |||||
} |
@@ -7,6 +7,9 @@ import lombok.Data; | |||||
import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertJudgeEnum; | |||||
import org.hibernate.validator.constraints.Range; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* MeetingExpertJudgeReq | * MeetingExpertJudgeReq | ||||
@@ -20,34 +23,41 @@ public class MeetingExpertJudgeReq { | |||||
private Long id; | private Long id; | ||||
@NotNull(message = "会议ID不能为空") | |||||
@NotNull(message = "会议ID不能为空", groups = Basic.class) | |||||
private Long meetingId; | private Long meetingId; | ||||
@NotNull(message = "会议专家ID不能为空") | |||||
@NotNull(message = "会议专家ID不能为空", groups = Basic.class) | |||||
private Long meetingExpertId; | private Long meetingExpertId; | ||||
@ApiModelProperty("评分(1~10)") | @ApiModelProperty("评分(1~10)") | ||||
@NotNull(message = "评分不能为空") | |||||
@NotNull(message = "评分不能为空", groups = Basic.class) | |||||
@Range(min = 1, max = 10, message = "评分范围为:1~10") | |||||
private Integer score; | private Integer score; | ||||
/** | |||||
* @see ExpertJudgeEnum.AttendStatus | |||||
*/ | |||||
@ApiModelProperty("是否参加:1 准时、2 迟到、3 缺席") | @ApiModelProperty("是否参加:1 准时、2 迟到、3 缺席") | ||||
@NotNull(message = "是否参加不能为空") | |||||
@NotNull(message = "是否参加不能为空", groups = Basic.class) | |||||
private Integer attended; | private Integer attended; | ||||
/** | |||||
* @see ExpertJudgeEnum.Performance | |||||
*/ | |||||
@ApiModelProperty("参与程度:1 积极、2 消极") | @ApiModelProperty("参与程度:1 积极、2 消极") | ||||
@NotNull(message = "参与度不能为空") | |||||
@NotNull(message = "参与度不能为空", groups = Attend.class) | |||||
private Integer performance; | private Integer performance; | ||||
@ApiModelProperty("是否提出建议:true 是、false 否") | @ApiModelProperty("是否提出建议:true 是、false 否") | ||||
@NotNull(message = "是否提出建议不能为空") | |||||
@NotNull(message = "是否提出建议不能为空", groups = Attend.class) | |||||
private Boolean advised; | private Boolean advised; | ||||
@ApiModelProperty("是否早退:true 早退、false 未早退") | @ApiModelProperty("是否早退:true 早退、false 未早退") | ||||
@NotNull(message = "是否早退不能为空") | |||||
@NotNull(message = "是否早退不能为空", groups = Attend.class) | |||||
private Boolean leaveEarly; | private Boolean leaveEarly; | ||||
@ApiModelProperty("是否违规:true 是、false 否") | @ApiModelProperty("是否违规:true 是、false 否") | ||||
@NotNull(message = "是否违规不能为空") | |||||
@NotNull(message = "是否违规不能为空", groups = Attend.class) | |||||
private Boolean brokeRule; | private Boolean brokeRule; | ||||
@ApiModelProperty("违规内容") | @ApiModelProperty("违规内容") | ||||
@@ -56,4 +66,12 @@ public class MeetingExpertJudgeReq { | |||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss") | @JSONField(format = "yyyy-MM-dd HH:mm:ss") | ||||
private LocalDateTime createOn; | private LocalDateTime createOn; | ||||
//================================================================================================================== | |||||
public interface Attend { | |||||
} | |||||
public interface Basic { | |||||
} | |||||
} | } |
@@ -4,19 +4,25 @@ import cn.hutool.core.bean.BeanUtil; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.ningdatech.basic.exception.BizException; | import com.ningdatech.basic.exception.BizException; | ||||
import com.ningdatech.basic.util.CollUtils; | |||||
import com.ningdatech.basic.util.ValidUtil; | |||||
import com.ningdatech.cache.lock.DistributedLock; | import com.ningdatech.cache.lock.DistributedLock; | ||||
import com.ningdatech.pmapi.meeting.entity.domain.Meeting; | import com.ningdatech.pmapi.meeting.entity.domain.Meeting; | ||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert; | import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert; | ||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpertJudge; | import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpertJudge; | ||||
import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatusEnum; | import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatusEnum; | ||||
import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertJudgeEnum; | |||||
import com.ningdatech.pmapi.meeting.entity.enumeration.MeetingStatusEnum; | import com.ningdatech.pmapi.meeting.entity.enumeration.MeetingStatusEnum; | ||||
import com.ningdatech.pmapi.meeting.entity.req.MeetingExpertJudgeReq; | import com.ningdatech.pmapi.meeting.entity.req.MeetingExpertJudgeReq; | ||||
import com.ningdatech.pmapi.meeting.entity.req.MeetingExpertJudgeReq.Attend; | |||||
import com.ningdatech.pmapi.meeting.service.IMeetingExpertJudgeService; | import com.ningdatech.pmapi.meeting.service.IMeetingExpertJudgeService; | ||||
import com.ningdatech.pmapi.meeting.service.IMeetingExpertService; | import com.ningdatech.pmapi.meeting.service.IMeetingExpertService; | ||||
import com.ningdatech.pmapi.meeting.service.IMeetingService; | import com.ningdatech.pmapi.meeting.service.IMeetingService; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import java.util.Map; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* MeetingExpertJudgeManage | * MeetingExpertJudgeManage | ||||
@@ -46,6 +52,13 @@ public class MeetingExpertJudgeManage { | |||||
throw BizException.wrap("履职评价失败,请重试"); | throw BizException.wrap("履职评价失败,请重试"); | ||||
} | } | ||||
try { | try { | ||||
if (!ExpertJudgeEnum.AttendStatus.ABSENT.eq(req.getAttended())) { | |||||
Map<String, String> validMap = ValidUtil.valid(req, Attend.class); | |||||
if (!validMap.isEmpty()) { | |||||
String errMsg = CollUtils.joinByComma(validMap.values()); | |||||
throw BizException.wrap(errMsg); | |||||
} | |||||
} | |||||
// 会议状态校验 | // 会议状态校验 | ||||
Meeting meeting = meetingService.getById(req.getMeetingId()); | Meeting meeting = meetingService.getById(req.getMeetingId()); | ||||
if (meeting == null || MeetingStatusEnum.CANCELED.eq(meeting.getStatus())) { | if (meeting == null || MeetingStatusEnum.CANCELED.eq(meeting.getStatus())) { | ||||
@@ -63,6 +76,7 @@ public class MeetingExpertJudgeManage { | |||||
throw BizException.wrap("履职评价已提交"); | throw BizException.wrap("履职评价已提交"); | ||||
} | } | ||||
MeetingExpertJudge entity = BeanUtil.copyProperties(req, MeetingExpertJudge.class); | MeetingExpertJudge entity = BeanUtil.copyProperties(req, MeetingExpertJudge.class); | ||||
entity.setExpertId(expert.getExpertId()); | |||||
expertJudgeService.save(entity); | expertJudgeService.save(entity); | ||||
} finally { | } finally { | ||||
distributedLock.releaseLock(key); | distributedLock.releaseLock(key); | ||||
@@ -126,6 +126,9 @@ public class ProjectLibManage { | |||||
ProjectLibListItemVO item = new ProjectLibListItemVO(); | ProjectLibListItemVO item = new ProjectLibListItemVO(); | ||||
item.setId(w.getId()); | item.setId(w.getId()); | ||||
item.setProjectName(w.getProjectName()); | item.setProjectName(w.getProjectName()); | ||||
item.setProjectCode(w.getProjectCode()); | |||||
item.setArea(w.getArea()); | |||||
item.setAreaCode(w.getAreaCode()); | |||||
item.setCreateOn(w.getCreateOn()); | item.setCreateOn(w.getCreateOn()); | ||||
item.setDeclaredAmount(w.getDeclareAmount()); | item.setDeclaredAmount(w.getDeclareAmount()); | ||||
item.setStage(w.getStage()); | item.setStage(w.getStage()); | ||||
@@ -157,6 +160,9 @@ public class ProjectLibManage { | |||||
ProjectLibListItemVO item = new ProjectLibListItemVO(); | ProjectLibListItemVO item = new ProjectLibListItemVO(); | ||||
item.setId(w.getId()); | item.setId(w.getId()); | ||||
item.setProjectName(w.getProjectName()); | item.setProjectName(w.getProjectName()); | ||||
item.setProjectCode(w.getProjectCode()); | |||||
item.setArea(w.getArea()); | |||||
item.setAreaCode(w.getAreaCode()); | |||||
item.setCreateOn(w.getCreateOn()); | item.setCreateOn(w.getCreateOn()); | ||||
item.setDeclaredAmount(w.getDeclareAmount()); | item.setDeclaredAmount(w.getDeclareAmount()); | ||||
item.setStage(w.getStage()); | item.setStage(w.getStage()); | ||||
@@ -1125,6 +1131,10 @@ public class ProjectLibManage { | |||||
projectApplication.setProjectVersion(version); | projectApplication.setProjectVersion(version); | ||||
projectApplication.setIsConstruct(isConstruct); | projectApplication.setIsConstruct(isConstruct); | ||||
if(StringUtils.isNotBlank(application.getRelatedExistsApplication())){ | |||||
projectApplication.setApplicationName(null); | |||||
} | |||||
boolean result = projectApplicationService.save(projectApplication); | boolean result = projectApplicationService.save(projectApplication); | ||||
// 保存应用关联的核心业务 | // 保存应用关联的核心业务 | ||||
List<ProjectCoreBusinessDTO> coreBusinessList = application.getCoreBusinessList(); | List<ProjectCoreBusinessDTO> coreBusinessList = application.getCoreBusinessList(); | ||||
@@ -39,6 +39,15 @@ public class ProjectLibListItemVO { | |||||
@ApiModelProperty("项目ID") | @ApiModelProperty("项目ID") | ||||
private Long id; | private Long id; | ||||
@ApiModelProperty("项目编号") | |||||
private String projectCode; | |||||
@ApiModelProperty("区域") | |||||
private String area; | |||||
@ApiModelProperty("区域Code") | |||||
private String areaCode; | |||||
@ApiModelProperty("项目名称") | @ApiModelProperty("项目名称") | ||||
private String projectName; | private String projectName; | ||||
@@ -127,9 +136,6 @@ public class ProjectLibListItemVO { | |||||
@ApiModelProperty("能否被预审申报") | @ApiModelProperty("能否被预审申报") | ||||
private Boolean canPreDeclared = Boolean.FALSE; | private Boolean canPreDeclared = Boolean.FALSE; | ||||
@ApiModelProperty("21位项目编号") | |||||
private String projectCode; | |||||
@ApiModelProperty("是否有上级条线主管部门 0没有 1有") | @ApiModelProperty("是否有上级条线主管部门 0没有 1有") | ||||
private Integer isHigherSuperOrg; | private Integer isHigherSuperOrg; | ||||
@@ -31,6 +31,7 @@ public class ProjectStatusFlowUtil { | |||||
* value: lambda表达式,最终会获取发起实例的函数 | * value: lambda表达式,最终会获取发起实例的函数 | ||||
*/ | */ | ||||
public ProjectStatusFlowUtil(){ | public ProjectStatusFlowUtil(){ | ||||
intervalTimeMap.put(0,60); | |||||
intervalTimeMap.put(1,60 * 2); | intervalTimeMap.put(1,60 * 2); | ||||
intervalTimeMap.put(2,60 * 6); | intervalTimeMap.put(2,60 * 6); | ||||
intervalTimeMap.put(3,60 * 15); | intervalTimeMap.put(3,60 * 15); | ||||
@@ -653,7 +653,10 @@ public class TodoCenterManage { | |||||
List<ProjectInst> projectInstList = projectInstService.list(Wrappers.lambdaQuery(ProjectInst.class) | List<ProjectInst> projectInstList = projectInstService.list(Wrappers.lambdaQuery(ProjectInst.class) | ||||
.in(ProjectInst::getProjectId, projectIdList) | .in(ProjectInst::getProjectId, projectIdList) | ||||
.orderByDesc(ProjectInst::getProjectId)); | .orderByDesc(ProjectInst::getProjectId)); | ||||
Map<String, Project> projectInfoMap = projectInstList.stream().collect(Collectors.toMap(ProjectInst::getInstCode, p -> projectsMap.get(p.getProjectId()))); | |||||
Map<String, Project> projectInfoMap = projectInstList.stream() | |||||
.filter(p -> Objects.nonNull(p.getInstCode()) && | |||||
!TodoCenterConstant.Declared.NULL_INST_CODE.equals(p.getInstCode())) | |||||
.collect(Collectors.toMap(ProjectInst::getInstCode, p -> projectsMap.get(p.getProjectId()))); | |||||
List<String> instCodes = projectInstList.stream().map(ProjectInst::getInstCode).collect(Collectors.toList()); | List<String> instCodes = projectInstList.stream().map(ProjectInst::getInstCode).collect(Collectors.toList()); | ||||
// 查出用户工作流 | // 查出用户工作流 | ||||
@@ -793,7 +796,10 @@ public class TodoCenterManage { | |||||
List<ProjectInst> projectInstList = projectInstService.list(Wrappers.lambdaQuery(ProjectInst.class) | List<ProjectInst> projectInstList = projectInstService.list(Wrappers.lambdaQuery(ProjectInst.class) | ||||
.in(ProjectInst::getProjectId, projectIdList) | .in(ProjectInst::getProjectId, projectIdList) | ||||
.orderByDesc(ProjectInst::getProjectId)); | .orderByDesc(ProjectInst::getProjectId)); | ||||
Map<String, Project> projectInfoMap = projectInstList.stream().collect(Collectors.toMap(ProjectInst::getInstCode, p -> projectsMap.get(p.getProjectId()))); | |||||
Map<String, Project> projectInfoMap = projectInstList.stream() | |||||
.filter(p -> Objects.nonNull(p.getInstCode()) && | |||||
!TodoCenterConstant.Declared.NULL_INST_CODE.equals(p.getInstCode())) | |||||
.collect(Collectors.toMap(ProjectInst::getInstCode, p -> projectsMap.get(p.getProjectId()))); | |||||
List<String> instCodes = projectInstList.stream().map(ProjectInst::getInstCode).collect(Collectors.toList()); | List<String> instCodes = projectInstList.stream().map(ProjectInst::getInstCode).collect(Collectors.toList()); | ||||
// 查出用户工作流 | // 查出用户工作流 | ||||
@@ -1153,6 +1159,9 @@ public class TodoCenterManage { | |||||
!InstTypeEnum.DEPT_UNITED_REVIEW.getCode().equals(instType)) { | !InstTypeEnum.DEPT_UNITED_REVIEW.getCode().equals(instType)) { | ||||
projectApplication.setIsConstruct(Boolean.TRUE); | projectApplication.setIsConstruct(Boolean.TRUE); | ||||
} | } | ||||
if(StringUtils.isNotBlank(application.getRelatedExistsApplication())){ | |||||
projectApplication.setApplicationName(null); | |||||
} | |||||
projectApplication.setProjectVersion(project.getVersion()); | projectApplication.setProjectVersion(project.getVersion()); | ||||
projectApplicationService.save(projectApplication); | projectApplicationService.save(projectApplication); | ||||
} | } | ||||
@@ -0,0 +1,26 @@ | |||||
package com.ningdatech.pmapi.password; | |||||
import org.junit.Test; | |||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |||||
import org.springframework.security.crypto.password.PasswordEncoder; | |||||
/** | |||||
* @Classname PasswordTest | |||||
* @Description | |||||
* @Date 2023/8/2 17:39 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
public class PasswordTest { | |||||
@Test | |||||
public void password(){ | |||||
String mingwen = "ELgaCeHteZA8VJK8"; | |||||
String miwen = "$2a$10$MT82RbInrIkRVL/GRS01Vew8AO6ICngOpbAGbdkWgSnYFhog5n8.q"; | |||||
String encode = new BCryptPasswordEncoder().encode(mingwen); | |||||
boolean matches = new BCryptPasswordEncoder().matches(mingwen, encode); | |||||
System.out.println(encode); | |||||
System.out.println(matches); | |||||
} | |||||
} |