diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/builder/ProjectDeclareStateMachineBuilder.java b/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/builder/ProjectDeclareStateMachineBuilder.java
index 117c2af..e34eb3f 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/builder/ProjectDeclareStateMachineBuilder.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/builder/ProjectDeclareStateMachineBuilder.java
@@ -92,11 +92,6 @@ public class ProjectDeclareStateMachineBuilder {
.source(ProjectStatusEnum.PENDING_PREQUALIFICATION_CHOICE)
.first(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS,projectDeclareGuardFactory.new PendingPreQualificationChoiceGuard(),projectDeclareAction.new ProjectDeclareChoiceAction())
.last(ProjectStatusEnum.PRE_APPLYING,projectDeclareAction.new ProjectDeclareChoiceAction()).and()
- // 待预审撤回,从待预审到单位内部审核中
- .withExternal()
- .source(ProjectStatusEnum.PENDING_PREQUALIFICATION)
- .target(ProjectStatusEnum.UNDER_INTERNAL_AUDIT)
- .event(ProjectStatusChangeEvent.PENDING_PREQUALIFICATION_WITHDRAW).and()
// 省级部门联审通过,从省级部门联审中到预审中
.withExternal()
.source(ProjectStatusEnum.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS)
@@ -157,21 +152,11 @@ public class ProjectDeclareStateMachineBuilder {
.source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
.target(ProjectStatusEnum.BE_SUSPENDED)
.event(ProjectStatusChangeEvent.ANNUAL_PLAN_SUSPEND).and()
- // 年度计划中撤回,从年度计划中到部门联审中
- .withExternal()
- .source(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
- .target(ProjectStatusEnum.DEPARTMENT_JOINT_REVIEW)
- .event(ProjectStatusChangeEvent.IN_THE_ANNUAL_PLAN_WITHDRAW).and()
// 方案待申报申报方案,从方案待申报到方案评审中
.withExternal()
.source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
.target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.DECLARE_PLAN).and()
- // 方案待申报撤回,从方案待申报到年度计划中
- .withExternal()
- .source(ProjectStatusEnum.PLAN_TO_BE_DECLARED)
- .target(ProjectStatusEnum.IN_THE_ANNUAL_PLAN)
- .event(ProjectStatusChangeEvent.PLAN_TO_DECLARE_WITHDRAW).and()
// 方案评审通过,从方案评审中到待立项批复
.withExternal()
.source(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
@@ -192,41 +177,21 @@ public class ProjectDeclareStateMachineBuilder {
.source(ProjectStatusEnum.TO_BE_APPROVED)
.target(ProjectStatusEnum.TO_BE_PURCHASED)
.event(ProjectStatusChangeEvent.PROJECT_APPROVAL).and()
- // 待立项批复撤回,从待立项批复到方案评审中
- .withExternal()
- .source(ProjectStatusEnum.TO_BE_APPROVED)
- .target(ProjectStatusEnum.SCHEME_UNDER_REVIEW)
- .event(ProjectStatusChangeEvent.TO_BE_APPROVED_WITHDRAW).and()
// 待采购采购备案,从待采购到建设中
.withExternal()
.source(ProjectStatusEnum.TO_BE_PURCHASED)
.target(ProjectStatusEnum.UNDER_CONSTRUCTION)
.event(ProjectStatusChangeEvent.PURCHASE_PUT_ON_RECORD).and()
- // 待采购撤回,从待采购到待立项批复
- .withExternal()
- .source(ProjectStatusEnum.TO_BE_PURCHASED)
- .target(ProjectStatusEnum.TO_BE_APPROVED)
- .event(ProjectStatusChangeEvent.TO_BE_PURCHASED_WITHDRAW).and()
// 建设中初验备案,从建设中到待终验
.withExternal()
.source(ProjectStatusEnum.UNDER_CONSTRUCTION)
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.event(ProjectStatusChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and()
- // 建设中撤回,从建设中到待采购
- .withExternal()
- .source(ProjectStatusEnum.UNDER_CONSTRUCTION)
- .target(ProjectStatusEnum.TO_BE_PURCHASED)
- .event(ProjectStatusChangeEvent.UNDER_CONSTRUCTION_WITHDRAW).and()
// 待终验终验申请,从待终验到终验审核中
.withExternal()
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
.event(ProjectStatusChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and()
- // 待终验撤回,从待终验到建设中
- .withExternal()
- .source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED)
- .target(ProjectStatusEnum.UNDER_CONSTRUCTION)
- .event(ProjectStatusChangeEvent.TO_BE_FINALLY_INSPECTED_WITHDRAW).and()
// 终审审核通过,从终审审核中到已归档
.withExternal()
.source(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW)
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/event/ProjectStatusChangeEvent.java b/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/event/ProjectStatusChangeEvent.java
index 7146033..ff5574e 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/event/ProjectStatusChangeEvent.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/common/statemachine/event/ProjectStatusChangeEvent.java
@@ -114,10 +114,6 @@ public enum ProjectStatusChangeEvent {
*/
UNDER_INTERNAL_WITHDRAW(null, null, 10001),
/**
- * 待预审时被撤回(项目状态进入:单位内部审核中)
- */
- PENDING_PREQUALIFICATION_WITHDRAW(null, null, 10003),
- /**
* 省级部门联审中时被撤回(项目状态进入:待预审)
*/
JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(null, null, 10004),
@@ -130,34 +126,10 @@ public enum ProjectStatusChangeEvent {
*/
DEPARTMENT_JOINT_REVIEW_WITHDRAW(null, null, 10008),
/**
- * 年度计划中时被撤回(项目状态进入:部门联审中)
- */
- IN_THE_ANNUAL_PLAN_WITHDRAW(null, null, 10010),
- /**
- * 方案待申报时被撤回(项目状态进入:年度计划中)
- */
- PLAN_TO_DECLARE_WITHDRAW(null, null, 10016),
- /**
* 方案评审中时被撤回(项目状态进入:方案待申报)
*/
SCHEME_UNDER_REVIEW_WITHDRAW(null, null, 10012),
/**
- * 待立项批复时被撤回(项目状态进入:方案评审中)
- */
- TO_BE_APPROVED_WITHDRAW(null, null, 10014),
- /**
- * 待采购时被撤回(项目状态进入:待立项批复)
- */
- TO_BE_PURCHASED_WITHDRAW(null, null, 20001),
- /**
- * 建设中时被撤回(项目状态进入:待采购)
- */
- UNDER_CONSTRUCTION_WITHDRAW(null, null, 20002),
- /**
- * 待终验时被撤回(项目状态进入:建设中)
- */
- TO_BE_FINALLY_INSPECTED_WITHDRAW(null, null, 20003),
- /**
* 终验审核中时被撤回(项目状态进入:待终验)
*/
FINAL_ACCEPTANCE_IS_UNDER_REVIEW_WITHDRAW(null, null, 20004);
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/ding/task/EmployeeBatchGetTask.java b/pmapi/src/main/java/com/ningdatech/pmapi/ding/task/EmployeeBatchGetTask.java
index ab797aa..b5b3f89 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/ding/task/EmployeeBatchGetTask.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/ding/task/EmployeeBatchGetTask.java
@@ -66,7 +66,6 @@ public class EmployeeBatchGetTask {
}
-
}
// zwddClient.pageOrganizationEmployeePositions(query);
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/fiscal/controller/CompanyFiscalCodeController.java b/pmapi/src/main/java/com/ningdatech/pmapi/fiscal/controller/CompanyFiscalCodeController.java
index 3d2f987..f7847d8 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/fiscal/controller/CompanyFiscalCodeController.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/fiscal/controller/CompanyFiscalCodeController.java
@@ -33,5 +33,4 @@ public class CompanyFiscalCodeController {
companyFiscalCodeManage.fiscalCodeConfigure(reqCompanyFiscalCodeAndSealSnPO);
}
-
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/organization/controller/DingOrganizationController.java b/pmapi/src/main/java/com/ningdatech/pmapi/organization/controller/DingOrganizationController.java
index 12973e6..2ce1a10 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/organization/controller/DingOrganizationController.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/organization/controller/DingOrganizationController.java
@@ -1,13 +1,14 @@
package com.ningdatech.pmapi.organization.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
+import io.swagger.annotations.ApiModelProperty;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
/**
*
- * 前端控制器
+ * 前端控制器
*
*
* @author Lierbao
@@ -17,4 +18,10 @@ import org.springframework.stereotype.Controller;
@RequestMapping("/api/v1/organization")
public class DingOrganizationController {
+ @ApiModelProperty("单位成员配置")
+ @PostMapping("/member/config")
+ public void organizationManage() {
+
+ }
+
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectDto.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectDto.java
index 31e2e9d..f88bd05 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectDto.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/DeclaredProjectDto.java
@@ -2,15 +2,13 @@ package com.ningdatech.pmapi.projectdeclared.entity.dto;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Maps;
-import com.ningdatech.pmapi.projectlib.model.dto.ProjectDto;
-import com.ningdatech.pmapi.projectlib.model.entity.Project;
+import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
-import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Map;
@@ -28,7 +26,7 @@ import java.util.Map;
public class DeclaredProjectDto implements Serializable {
@NotNull
- private ProjectDto projectInfo;
+ private ProjectDTO projectInfo;
private Map formData;
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/PreDeclaredProjectDto.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/PreDeclaredProjectDto.java
index fae8f58..92d2e62 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/PreDeclaredProjectDto.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/PreDeclaredProjectDto.java
@@ -2,7 +2,6 @@ package com.ningdatech.pmapi.projectdeclared.entity.dto;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Maps;
-import com.ningdatech.pmapi.projectlib.model.dto.ProjectDto;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ProjectDraftSaveDto.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ProjectDraftSaveDto.java
index 0fdf995..62070a3 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ProjectDraftSaveDto.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/entity/dto/ProjectDraftSaveDto.java
@@ -1,6 +1,6 @@
package com.ningdatech.pmapi.projectdeclared.entity.dto;
-import com.ningdatech.pmapi.projectlib.model.dto.ProjectDto;
+import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import io.swagger.annotations.ApiModel;
import lombok.*;
@@ -26,7 +26,7 @@ public class ProjectDraftSaveDto implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull
- private ProjectDto projectInfo;
+ private ProjectDTO projectInfo;
@NotNull
private ProcessInstanceUserDto user;
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java
index b0ffbe4..c6d266b 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java
@@ -16,7 +16,7 @@ import com.ningdatech.pmapi.projectdeclared.entity.dto.ProjectDraftSaveDto;
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDraftVo;
import com.ningdatech.pmapi.projectdeclared.service.IProjectDraftService;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
-import com.ningdatech.pmapi.projectlib.model.dto.ProjectDto;
+import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.entity.ProjectApplication;
import com.ningdatech.pmapi.projectlib.service.IProjectApplicationService;
@@ -104,7 +104,7 @@ public class DeclaredProjectManage {
* @return
*/
public String startTheProcess(DeclaredProjectDto dto) {
- ProjectDto projectInfo = dto.getProjectInfo();
+ ProjectDTO projectInfo = dto.getProjectInfo();
String regionCode = projectInfo.getAreaCode();
WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class)
@@ -145,7 +145,7 @@ public class DeclaredProjectManage {
* @param projectDto
* @param instanceId
*/
- private void saveProject(ProjectDto projectDto, String instanceId, String regionCode) {
+ private void saveProject(ProjectDTO projectDto, String instanceId, String regionCode) {
//流程启动之后 入库项目 重要业务信息 用于列表查询 展示
try {
//保存项目表信息
@@ -181,7 +181,7 @@ public class DeclaredProjectManage {
* @return
*/
public Long saveToDraft(ProjectDraftSaveDto dto) {
- ProjectDto projectInfo = dto.getProjectInfo();
+ ProjectDTO projectInfo = dto.getProjectInfo();
ProjectDraft draft = new ProjectDraft();
BeanUtils.copyProperties(projectInfo, draft);
draft.setUserId(dto.getUser().getUserId());
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/AnnualPlanController.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/AnnualPlanController.java
index 7098b1d..2eeb57a 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/AnnualPlanController.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/controller/AnnualPlanController.java
@@ -3,6 +3,7 @@ package com.ningdatech.pmapi.projectlib.controller;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.log.annotation.WebLog;
import com.ningdatech.pmapi.projectlib.manage.AnnualPlanLibManage;
+import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.ningdatech.pmapi.projectlib.model.req.ProjectApprovedReq;
import com.ningdatech.pmapi.projectlib.model.req.ProjectIdReq;
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq;
@@ -73,4 +74,11 @@ public class AnnualPlanController {
annualPlanLibManage.exportAnnualPlanEditTable(response);
}
+ @GetMapping("/modify")
+ @ApiOperation("年度计划编辑")
+ @WebLog("年度计划编辑")
+ public void modify(@RequestBody ProjectDTO req) {
+ annualPlanLibManage.updateAnnualPlan(req);
+ }
+
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/helper/ProjectHelper.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/helper/ProjectHelper.java
index 264d154..51971af 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/helper/ProjectHelper.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/helper/ProjectHelper.java
@@ -40,6 +40,7 @@ public class ProjectHelper {
query.le(req.getApproveAmountMax() != null, Project::getApprovalAmount, req.getApproveAmountMax());
query.like(req.getBuildOrg() != null, Project::getBuildOrgName, req.getBuildOrg());
+ query.eq(req.getIsTemporaryAugment() != null, Project::getIsTemporaryAugment, req.getIsTemporaryAugment());
return query;
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java
index 7b0ceba..2a5f18b 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/AnnualPlanLibManage.java
@@ -1,5 +1,6 @@
package com.ningdatech.pmapi.projectlib.manage;
+import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
@@ -16,6 +17,7 @@ import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.helper.ProjectHelper;
import com.ningdatech.pmapi.projectlib.model.dto.AnnualLibImportDTO;
+import com.ningdatech.pmapi.projectlib.model.dto.ProjectDTO;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.model.req.ProjectApprovedReq;
import com.ningdatech.pmapi.projectlib.model.req.ProjectIdReq;
@@ -204,4 +206,9 @@ public class AnnualPlanLibManage {
// TODO
}
+ public void updateAnnualPlan(ProjectDTO req) {
+ Project project = BeanUtil.copyProperties(req, Project.class);
+ projectService.updateById(project);
+ }
+
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDto.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDTO.java
similarity index 98%
rename from pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDto.java
rename to pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDTO.java
index e55d4c8..a256131 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDto.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectApplicationDTO.java
@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
*/
@ApiModel(value = "NdProjectApplication对象", description = "")
@Data
-public class ProjectApplicationDto implements Serializable {
+public class ProjectApplicationDTO implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDto.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDTO.java
similarity index 98%
rename from pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDto.java
rename to pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDTO.java
index 5a78d68..7af7871 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDto.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDTO.java
@@ -21,7 +21,7 @@ import java.util.Map;
*/
@Data
@ApiModel(value = "NdProjectDto", description = "")
-public class ProjectDto implements Serializable {
+public class ProjectDTO implements Serializable {
private static final long serialVersionUID = 1L;
@@ -281,7 +281,7 @@ public class ProjectDto implements Serializable {
private String formId;
@ApiModelProperty("项目应用实例")
- private List applicationList;
+ private List applicationList;
@ApiModelProperty("流程状态")
private Integer processStatus;
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
index 4ba35f9..8f61c13 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
@@ -1,8 +1,6 @@
package com.ningdatech.pmapi.projectlib.model.entity;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -233,8 +231,10 @@ public class Project implements Serializable {
@ApiModelProperty("一地创新全省共享项目-是否开启 false:关闭 true:开启")
private Boolean isInnovateWholeProvinceShare;
+ @TableField(fill = FieldFill.INSERT)
private LocalDateTime createOn;
+ @TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateOn;
@ApiModelProperty("流程实例编号")
@@ -285,8 +285,10 @@ public class Project implements Serializable {
@ApiModelProperty("动态表单 json")
private String dynamicForm;
-
+ @TableField(fill = FieldFill.INSERT)
private Long createBy;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java
index 398cf86..aeac65c 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/req/ProjectListReq.java
@@ -66,4 +66,8 @@ public class ProjectListReq extends PagePo {
@ApiModelProperty("用户ID")
private Long userId;
+
+ @ApiModelProperty("是否临时增补 0:否 1:是")
+ private Integer isTemporaryAugment;
+
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
index cbb2d69..3de7eb2 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
@@ -24,6 +24,7 @@ import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter;
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent;
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.common.util.ExcelDownUtil;
+import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import com.ningdatech.pmapi.projectlib.service.IProjectService;
import com.ningdatech.pmapi.todocenter.bean.entity.ProcessComment;
@@ -42,7 +43,6 @@ import com.ningdatech.pmapi.todocenter.zwdd.model.MessageContent;
import com.ningdatech.pmapi.todocenter.zwdd.model.MessageText;
import com.ningdatech.pmapi.user.entity.UserInfo;
import com.ningdatech.pmapi.user.service.IUserInfoService;
-import com.ningdatech.pmapi.user.util.LoginUserUtil;
import com.wflow.bean.do_.UserDo;
import com.wflow.bean.entity.WflowCcTasks;
import com.wflow.bean.entity.WflowModelHistorys;
@@ -78,6 +78,7 @@ import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.flowable.engine.runtime.ActivityInstance;
import org.flowable.engine.runtime.Execution;
+import org.flowable.engine.task.Comment;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskInfo;
import org.flowable.task.api.TaskQuery;
@@ -110,7 +111,6 @@ public class TodoCenterManage {
private final RepositoryService repositoryService;
private final RuntimeService runtimeService;
private final UserDeptOrLeaderService userDeptOrLeaderService;
- private final ProcessInstanceService processService;
private final FormService formService;
private final ManagementService managementService;
private final HistoryService historyService;
@@ -137,8 +137,9 @@ public class TodoCenterManage {
// 获取登录用户ID
// long userId = LoginUserUtil.getUserId();
- Long userId = 381496L;
- // Long userId = 6418616L;
+ // Long userId = 381496L;
+ Long userId = 6418616L;
+ // Long userId = 61769799L;
TaskQuery taskQuery = taskService.createTaskQuery();
taskQuery.active().taskCandidateOrAssigned(String.valueOf(userId)).orderByTaskCreateTime().desc();
List taskList = taskQuery.list();
@@ -300,10 +301,16 @@ public class TodoCenterManage {
// Long userId = LoginUserUtil.getUserId();
- // Long userId = 381496L;
+ Long userId = 381496L;
- Long userId = 6418616L;
+ // Long userId = 6418616L;
+ // 若进行的是撤回操作(流程发起人和当前流程审核人的前一个审核人操作)
+ if (param.getAction().equals(ProcessHandlerEnum.WITHDRAW)){
+ HistoricTaskInstance handledTaskInstance = historyService.createHistoricTaskInstanceQuery().taskId(param.getTaskId()).singleResult();
+ doWithDrawProcess(handledTaskInstance, userId);
+ return;
+ }
Task task = taskService.createTaskQuery().taskId(param.getTaskId()).active().singleResult();
HashMap formData = new HashMap<>(32);
if (Objects.isNull(task)) {
@@ -330,10 +337,6 @@ public class TodoCenterManage {
formService.updateInstanceFormData(param.getInstanceId(), formData);
doBackTask(task, userId, param);
break;
- // 撤回
- case WITHDRAW:
- doWithDrawProcess(task, userId);
- break;
default:
throw new IllegalStateException("Unexpected value: " + param.getAction());
}
@@ -354,33 +357,38 @@ public class TodoCenterManage {
Map var = new HashMap<>(16);
var.put("approve_" + task.getId(), param.getAction());
+
+ // 保存审核意见
+ if (hasComment(param.getAuditInfo())) {
+ // 执行自定义的保存评论的功能
+ managementService.executeCommand(new SaveCommentCmd(param.getTaskId(), param.getInstanceId(),
+ String.valueOf(userId), JSONObject.toJSONString(param.getAuditInfo())));
+ }
+
// TODO 中止流程并使项目进入对应状态,给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被驳回,请及时处理。
- // 获取流程定义
- Process process = ProcessDefinitionUtil.getProcess(task.getProcessDefinitionId());
+
+ // 获取bpm对象
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
// 获取根节点即流程发起节点
- FlowNode rootNode = (FlowNode) process.getFlowElement("root", true);
+ FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root");
+
// TODO 中止流程并使项目进入对应状态,给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被驳回,请及时处理。
- sendWorkNoticeToStartUser(task, projectName, rootNode);
+ // sendWorkNoticeToStartUser(task, projectName, rootNode);
// 更新项目状态
- updateRejectProjectStatus(task);
+ updateRejectProjectStatus(userId,declaredProject);
taskService.complete(param.getTaskId(), var);
}
/**
* 当为驳回操作时,更新项目表中的项目状态
- *
- * @param task 当前任务
+ * @param userId
+ * @param declaredProject
* @return void
* @author CMM
* @since 2023/02/08
*/
- private void updateRejectProjectStatus(Task task) {
- // 获取当前登录用户
- Long userId = LoginUserUtil.getUserId();
- // 获取当前申报项目
- Project declaredProject = projectService
- .getOne(Wrappers.lambdaQuery(Project.class).eq(Project::getInstCode, task.getProcessInstanceId()));
+ private void updateRejectProjectStatus(Long userId, Project declaredProject) {
// 获取当前流程项目状态
Integer projectStatusSecond = declaredProject.getStatus();
// 根据当前状态获取对应的通过事件
@@ -432,7 +440,7 @@ public class TodoCenterManage {
Project declaredProject = projectService
.getOne(Wrappers.lambdaQuery(Project.class).eq(Project::getInstCode, task.getProcessInstanceId()));
// 更新项目状态到下一个状态
- updatePassProjectStatus(task, userId, declaredProject);
+ updatePassProjectStatus(userId, declaredProject);
taskService.complete(param.getTaskId(), var);
}
@@ -458,19 +466,48 @@ public class TodoCenterManage {
managementService.executeCommand(new SaveCommentCmd(param.getTaskId(), param.getInstanceId(),
String.valueOf(userId), JSONObject.toJSONString(param.getAuditInfo())));
}
- updatePassProjectStatus(task, userId, declaredProject);
- taskService.complete(param.getTaskId(), var);
-
// 获取bpm对象
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
// 传节点定义key 获取当前节点
FlowNode currentNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
+
+ // TODO 若当前流程是预审流程,需要在提交预审申报的时候,调用状态机判断申报后的项目状态,
+ // 若是省级部门联审中,要对接外部接口,获取省级部门联审的结果,更新项目状态(预审申报提交的时候处理)
+
+ // 需要先通过后才能有下一个节点的信息
+ taskService.complete(param.getTaskId(), var);
+
// 获取流程下一个节点的审核用户ID
String nextUserId = getNextUserId(currentNode, processInstanceId);
- // 若有下一个审核人,向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。
+ // 获取当前流程状态
+ Integer status = declaredProject.getStatus();
+ // 若当前登录用户是最后一个审批人
+ HistoricProcessInstance instance = historyService
+ .createHistoricProcessInstanceQuery()
+ .processInstanceId(processInstanceId)
+ .singleResult();
+ if (HisProInsEndActId.END.equals(instance.getEndActivityId())) {
+ switch (Objects.requireNonNull(ProjectStatusEnum.getValue(status))) {
+ // 当前项目状态是单位内部审核中
+ case UNDER_INTERNAL_AUDIT:
+ // 当前项目状态是预审中
+ case PRE_APPLYING:
+ // 当前项目状态是部门联审中
+ case DEPARTMENT_JOINT_REVIEW:
+ // 当前项目状态是方案评审中
+ case SCHEME_UNDER_REVIEW:
+ // 当前项目状态是终验审核中
+ case FINAL_ACCEPTANCE_IS_UNDER_REVIEW:
+ updatePassProjectStatus(userId, declaredProject);
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " + status);
+ }
+ }
+ // 若有下一个审核人(当前节点的用户),向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。
if (Objects.nonNull(nextUserId)) {
- UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(nextUserId));
+ // UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(nextUserId));
// TODO 获取浙政钉用户dingKey,向其发送浙政钉工作通知
String msg = String.format(PASS_MSG_TEMPLATE, null, projectName);
// sendWorkNotice(auditUserInfo,msg);
@@ -478,22 +515,20 @@ public class TodoCenterManage {
// 若没有,向发起人发送浙政钉工作通知:【项目名称】已通过【流程名称】,请及时开始下一步操作。
// TODO 向其发送浙政钉工作通知 获取根节点的孩子节点(即发起人节点),向其发送浙政钉工作通知
// 获取根节点即流程发起节点
- FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root");
+ // FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root");
// sendWorkNoticeToStartUser(task, projectName, rootNode);
}
}
/**
* 当为通过操作时,更新项目表中项目状态
- *
- * @param task 当前任务
* @param userId
* @param declaredProject
* @return void
* @author CMM
* @since 2023/02/08
*/
- private void updatePassProjectStatus(Task task, Long userId, Project declaredProject) {
+ private void updatePassProjectStatus(Long userId, Project declaredProject) {
// 获取当前流程项目状态
Integer projectStatusSecond = declaredProject.getStatus();
// 根据当前状态获取对应的通过事件
@@ -520,7 +555,7 @@ public class TodoCenterManage {
* @since 2023/02/03
*/
private void sendWorkNoticeToStartUser(Task task, String projectName, FlowNode rootNode) {
- String startUserId = getRootUserId(rootNode);
+ String startUserId = getRootUserId(rootNode, task.getProcessInstanceId());
UserInfo startUserInfo = userInfoService.getById(Long.valueOf(startUserId));
// 从历史表获取最新版本的流程
WflowModels wflowModels = getLastWflowModels(task);
@@ -530,14 +565,15 @@ public class TodoCenterManage {
}
/**
- * 获取流程发起节点的浙政钉用户ID
+ * 获取流程发起节点的用户ID
*
* @param rootNode 根节点
+ * @param processInstanceId
* @return java.lang.String
* @author CMM
* @since 2023/02/02
*/
- private String getRootUserId(FlowNode rootNode) {
+ private String getRootUserId(FlowNode rootNode, String processInstanceId) {
String rootUserId = null;
// 输出连线
List outgoingFlows = rootNode.getOutgoingFlows();
@@ -548,8 +584,11 @@ public class TodoCenterManage {
// TODO 若要会签需判断候选人
// 发起事件
if (targetFlowElement instanceof StartEvent) {
- UserTask userTask = (UserTask) targetFlowElement;
- rootUserId = userTask.getAssignee();
+ String actId = targetFlowElement.getId();
+ ActivityInstance activityInstance = runtimeService.createActivityInstanceQuery()
+ .processInstanceId(processInstanceId).activityId(actId).singleResult();
+ String executionId = activityInstance.getExecutionId();
+ rootUserId = runtimeService.getVariable(executionId, "initiator", String.class);
break;
}
}
@@ -560,7 +599,7 @@ public class TodoCenterManage {
/**
* 获取当前节点的下一个节点的审核用户ID
*
- * @param currentNode 当前节点
+ * @param currentNode 当前节点
* @param processInstanceId
* @return java.lang.String 下一个节点的浙政钉用户ID
* @author CMM
@@ -646,70 +685,106 @@ public class TodoCenterManage {
/**
* 撤销流程处理
*
- * @param task 当前任务
- * @param userId
+ * @param handledTaskInstance 已处理的历史任务实例
+ * @param userId 当前登录用户ID
*/
- private void doWithDrawProcess(Task task, Long userId) {
- // 获取流程定义
- Process process = ProcessDefinitionUtil.getProcess(task.getProcessDefinitionId());
- // 获取当前运行流程的发起人节点信息
- FlowNode rootNode = (FlowNode) process.getFlowElement("root", true);
- // 获取当前节点
- FlowNode currentNode = (FlowNode) process.getFlowElement(task.getTaskDefinitionKey(), true);
- String rootUserId = getRootUserId(rootNode);
+ private void doWithDrawProcess(HistoricTaskInstance handledTaskInstance, Long userId) {
+ String processInstanceId = handledTaskInstance.getProcessInstanceId();
+ // 获取当前流程实例待审核任务信息
+ Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
+ // 获取当前流程实例信息
+ HistoricProcessInstance historicProcessInstance = historyService
+ .createHistoricProcessInstanceQuery()
+ .processInstanceId(processInstanceId)
+ .singleResult();
+ // 流程发起人ID
+ String startUserId = historicProcessInstance.getStartUserId();
+ // 获取当前申报项目
+ Project declaredProject = projectService.getOne(Wrappers.lambdaQuery(Project.class)
+ .eq(Project::getInstCode, processInstanceId));
+ String projectName = declaredProject.getProjectName();
+
+ // 获取bpm对象
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(handledTaskInstance.getProcessDefinitionId());
+ // 传节点定义key 获取传入节点(撤回操作人在流程配置中所在的节点)
+ FlowNode handledNode = (FlowNode) bpmnModel.getFlowElement(handledTaskInstance.getTaskDefinitionKey());
+
+ // 获取当前流程状态
+ Integer status = declaredProject.getStatus();
+
// 判断当前登录用户是否是流程发起人
- if (rootUserId.equals(String.valueOf(userId))) {
+ if (startUserId.equals(String.valueOf(userId))) {
// TODO 若是流程发起人点击撤回,项目回到上一个状态,并删除当前审核人对应的待办记录
- updateWithdrawProjectStatus(task, userId);
+ // 若是流程发起人点击撤回,项目回到上一个状态,需调用状态机更新项目状态
+ switch (Objects.requireNonNull(ProjectStatusEnum.getValue(status))) {
+ // 当前项目状态是单位内部审核中
+ case UNDER_INTERNAL_AUDIT:
+ // 当前项目状态是预审中
+ case PRE_APPLYING:
+ // 当前项目状态是部门联审中
+ case DEPARTMENT_JOINT_REVIEW:
+ // 当前项目状态是方案评审中
+ case SCHEME_UNDER_REVIEW:
+ // 当前项目状态是终验审核中
+ case FINAL_ACCEPTANCE_IS_UNDER_REVIEW:
+ updateWithdrawProjectStatus(userId, declaredProject);
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " + status);
+ }
List executions = runtimeService.createExecutionQuery()
- .processInstanceId(task.getProcessInstanceId()).onlyChildExecutions().list();
+ .processInstanceId(handledTaskInstance.getProcessInstanceId()).onlyChildExecutions().list();
// 强制流程指向撤回
- runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId())
+ runtimeService.createChangeActivityStateBuilder()
+ .processInstanceId(task.getProcessInstanceId())
.moveActivityIdTo(task.getTaskDefinitionKey(), HisProInsEndActId.WITHDRAW)
- .moveExecutionsToSingleActivityId(
- executions.stream().map(Execution::getId).collect(Collectors.toList()), HisProInsEndActId.WITHDRAW)
+ .moveExecutionsToSingleActivityId(executions.stream()
+ .map(Execution::getId)
+ .collect(Collectors.toList()), HisProInsEndActId.WITHDRAW)
.changeState();
} else {
- FlowElementsContainer parentContainer = currentNode.getParentContainer();
- for (FlowElement flowElement : parentContainer.getFlowElements()) {
- UserTask beforeUserTask = (UserTask) flowElement;
- if (beforeUserTask.getAssignee().equals(String.valueOf(userId))) {
- // TODO 若是前一个审核人点击撤回,在审核记录中移除自己提交过的审核意见、
- // 待我处理中移除当前审核人的待办记录、
- // 待我处理中增加自己的待办记录、
- // 我已处理中去掉自己之前处理的记录
- // 更新项目状态
- updateWithdrawProjectStatus(task, userId);
- HistoricTaskInstance beforeTaskInstance =
- historyService.createHistoricTaskInstanceQuery().taskId(beforeUserTask.getId()).singleResult();
- List executions = runtimeService.createExecutionQuery()
- .processInstanceId(beforeTaskInstance.getProcessInstanceId()).onlyChildExecutions().list();
- // 强制流程指向撤回
- runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId())
- .moveActivityIdTo(flowElement.getId(), HisProInsEndActId.WITHDRAW)
- .moveExecutionsToSingleActivityId(
- executions.stream().map(Execution::getId).collect(Collectors.toList()),
- HisProInsEndActId.WITHDRAW)
- .changeState();
- break;
- }
+ // TODO 获取前一个审核节点审核人信息
+
+ // TODO 判断前一个审核人的部门和当前登录用户的部门是否是同一个,如果是同一个才可以撤回,否则抛出异常
+ Boolean orgFlag = true;
+ if (orgFlag){
+ // 注意:是前一个审核人,说明此时仍在一个审核流程中,项目状态不需要改变
+ // 在审核记录中移除前一个审核人提交过的审核意见
+ Comment comment = taskService.getProcessInstanceComments(processInstanceId).stream()
+ .filter(c -> c.getTaskId().equals(handledTaskInstance.getId()))
+ .findFirst()
+ .get();
+ taskService.deleteComment(comment.getId());
+ // 我已处理中去掉自己之前处理的记录
+ String taskInstanceId = handledTaskInstance.getId();
+ historyService.deleteHistoricTaskInstance(taskInstanceId);
+
+ List executions = runtimeService.createExecutionQuery()
+ .processInstanceId(handledTaskInstance.getProcessInstanceId()).onlyChildExecutions().list();
+ // 强制流程指向前一个审核人节点
+ runtimeService.createChangeActivityStateBuilder()
+ .processInstanceId(task.getProcessInstanceId())
+ .moveActivityIdsToSingleActivityId(executions.stream()
+ .map(Execution::getActivityId)
+ .collect(Collectors.toList()), handledNode.getId())
+ .changeState();
+ }else {
+ throw new BizException("下一个审核人和您不是同一个部门,无法撤回!");
}
+
}
}
+
/**
* 当为撤回操作时,更新项目表中的项目状态为前一个状态
- *
- * @param task 当前任务
* @param userId
+ * @param declaredProject
* @return void
* @author CMM
* @since 2023/02/08
*/
- private void updateWithdrawProjectStatus(Task task, Long userId) {
- // 获取当前申报项目
- Project declaredProject = projectService
- .getOne(Wrappers.lambdaQuery(Project.class).eq(Project::getInstCode, task.getProcessInstanceId()));
+ private void updateWithdrawProjectStatus(Long userId, Project declaredProject) {
// 获取当前流程项目状态
Integer projectStatusSecond = declaredProject.getStatus();
// 根据当前状态获取对应的撤回事件
@@ -923,7 +998,10 @@ public class TodoCenterManage {
public PageVo queryHandledProjectList(ReqToBeProcessedDTO param) {
// 获取登录用户ID
// long userId = LoginUserUtil.getUserId();
+
Long userId = 381496L;
+ // Long userId = 6418616L;
+ // Long userId = 61769799L;
// 自定义sql查询所有已办的任务实例
String nativeSql = "SELECT aht.* FROM ACT_HI_TASKINST AS aht \n"
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/NdUserInfoController.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/NdUserInfoController.java
index 1ac0332..2e29add 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/NdUserInfoController.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/NdUserInfoController.java
@@ -1,13 +1,12 @@
package com.ningdatech.pmapi.user.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
/**
*
- * 前端控制器
+ * 前端控制器
*
*
* @author Lierbao
@@ -17,4 +16,5 @@ import org.springframework.stereotype.Controller;
@RequestMapping("/pmapi.user/nd-user-info")
public class NdUserInfoController {
+
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserAuthController.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserAuthController.java
index 233a7a5..efbb287 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserAuthController.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserAuthController.java
@@ -1,9 +1,23 @@
package com.ningdatech.pmapi.user.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ningdatech.basic.util.StrPool;
+import com.ningdatech.pmapi.common.constant.BizConst;
+import com.ningdatech.pmapi.user.security.auth.constants.SessionTimeConstant;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
-import org.springframework.stereotype.Controller;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
/**
*
@@ -13,8 +27,55 @@ import org.springframework.stereotype.Controller;
* @author Liuxinxin
* @since 2023-01-04
*/
-@Controller
-@RequestMapping("/pmapi.user/user-auth")
+
+@RestController
+@RequestMapping("/api/v1/user/auth")
+@Api(tags = {"用户鉴权-相关接口"})
+@RequiredArgsConstructor
public class UserAuthController {
+ private final ObjectMapper objectMapper;
+
+ @PostMapping(value = "/login/password", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+ @ApiOperation(value = "账号密码的登陆方式")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "form", dataType = "String"),
+ @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "form", dataType = "String")})
+ public void loginByUsernameAndPassword(@RequestParam("username") String username,
+ @RequestParam("password") String password) {
+ // 不实现任何内容,只是为了出api文档
+ }
+
+ @PostMapping(value = "/logout")
+ @ApiOperation(value = "退出登陆")
+ public void logout() {
+ // 不实现任何内容,具体实现交由Spring Security进行管理
+ }
+
+ /**
+ * 当需要身份认证时,跳转到这里
+ */
+ @GetMapping("/auth-require")
+ @CrossOrigin(originPatterns = "*", allowCredentials = "true", maxAge = 3600)
+ public void requireAuthentication(HttpServletResponse response) throws IOException {
+ response.setContentType(StrPool.CONTENT_TYPE);
+ response.setStatus(HttpStatus.UNAUTHORIZED.value());
+ response.getWriter().write(objectMapper.writeValueAsString(BizConst.UNAUTHENTICATED));
+ }
+
+ /**
+ * 设置session失效
+ */
+ @GetMapping("/invalid-session")
+ @CrossOrigin(originPatterns = "*", allowCredentials = "true", maxAge = 3600)
+ public void invalidSession(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ response.setContentType(StrPool.CONTENT_TYPE);
+ Cookie cookie = new Cookie(BizConst.COOKIE_KEY, null);
+ cookie.setPath(request.getContextPath() + "/");
+ cookie.setMaxAge(SessionTimeConstant.SESSION_TIME_SECONDS);
+ response.addCookie(cookie);
+ response.setStatus(HttpStatus.UNAUTHORIZED.value());
+ response.getWriter().write(objectMapper.writeValueAsString(BizConst.UNAUTHENTICATED));
+ }
+
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserInfoController.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserInfoController.java
index d178e0d..8e2ae4c 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserInfoController.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/controller/UserInfoController.java
@@ -1,9 +1,21 @@
package com.ningdatech.pmapi.user.controller;
+import com.ningdatech.basic.model.PageVo;
+import com.ningdatech.pmapi.user.manage.UserInfoManage;
+import com.ningdatech.pmapi.user.model.po.ReqUserDisablePO;
+import com.ningdatech.pmapi.user.model.po.ReqUserInfoListPO;
+import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import javax.validation.Valid;
+
/**
*
* 用户信息表 前端控制器
@@ -13,7 +25,23 @@ import org.springframework.web.bind.annotation.RequestMapping;
* @since 2023-01-04
*/
@Controller
-@RequestMapping("/pmapi.user/user-info")
+@RequestMapping("/api/v1/user-info")
+@RequiredArgsConstructor
+@Api(value = "UserInfoController", tags = "用户管理")
public class UserInfoController {
+ private final UserInfoManage userInfoManage;
+
+ @ApiOperation(value = "用户列表搜索", notes = "用户列表搜索")
+ @PostMapping("/list")
+ public PageVo userInfoList(@Valid @RequestBody ReqUserInfoListPO reqUserInfoListPO) {
+ return userInfoManage.list(reqUserInfoListPO);
+ }
+
+ @ApiOperation(value = "用户禁用", notes = "用户禁用")
+ @PostMapping("/disable")
+ public void disable(@Valid @RequestBody ReqUserDisablePO reqUserDisablePO){
+ userInfoManage.disable(reqUserDisablePO);
+ }
+
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java
index 93ea820..d2e5cd2 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java
@@ -18,7 +18,13 @@ public class UserAuthLoginManage {
private final IUserAuthService iUserAuthService;
private final IUserInfoService iUserInfoService;
- public UserFullInfoDTO queryUserInfoInPasswordAuth(String username){
- return null;
+ public UserFullInfoDTO queryUserInfoInPasswordAuth(String username) {
+ UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
+ userFullInfoDTO.setCompanyId(1L);
+ userFullInfoDTO.setUserId(1L);
+ userFullInfoDTO.setIdentifier("123456");
+ userFullInfoDTO.setRealName("测试账号");
+ userFullInfoDTO.setUsername("测试账号");
+ return userFullInfoDTO;
}
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java
new file mode 100644
index 0000000..39d3812
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java
@@ -0,0 +1,29 @@
+package com.ningdatech.pmapi.user.manage;
+
+import com.ningdatech.basic.model.PageVo;
+import com.ningdatech.pmapi.user.mapper.UserInfoMapper;
+import com.ningdatech.pmapi.user.model.po.ReqUserDisablePO;
+import com.ningdatech.pmapi.user.model.po.ReqUserInfoListPO;
+import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author liuxinxin
+ * @date 2023/2/13 上午9:09
+ */
+@Component
+@RequiredArgsConstructor
+public class UserInfoManage {
+ private final UserInfoMapper userInfoMapper;
+
+
+ public PageVo list(ReqUserInfoListPO reqUserInfoListPO) {
+
+ return null;
+ }
+
+ public void disable(ReqUserDisablePO reqUserDisablePO) {
+
+ }
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/model/po/ReqUserDisablePO.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/model/po/ReqUserDisablePO.java
new file mode 100644
index 0000000..2f712df
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/model/po/ReqUserDisablePO.java
@@ -0,0 +1,22 @@
+package com.ningdatech.pmapi.user.model.po;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author liuxinxin
+ * @date 2023/2/13 上午9:31
+ */
+
+@Data
+@ApiModel("用户禁用PO")
+public class ReqUserDisablePO {
+
+ @NotBlank(message = "用户ID不能为空")
+ @ApiModelProperty("用户id")
+ private Long userId;
+
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/model/po/ReqUserInfoListPO.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/model/po/ReqUserInfoListPO.java
new file mode 100644
index 0000000..9706f1e
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/model/po/ReqUserInfoListPO.java
@@ -0,0 +1,37 @@
+package com.ningdatech.pmapi.user.model.po;
+
+import com.ningdatech.basic.model.PagePo;
+import com.ningdatech.pmapi.sys.model.entity.Role;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author liuxinxin
+ * @date 2023/2/13 上午9:10
+ */
+@Data
+@ApiModel("用户管理查询 请求入参")
+public class ReqUserInfoListPO extends PagePo {
+
+ @ApiModelProperty("姓名")
+ private String name;
+
+ @ApiModelProperty("手机号码")
+ private String phoneNo;
+
+ @ApiModelProperty("所在单位(主职)")
+ private String orgName;
+
+ @ApiModelProperty("所属区域")
+ private Long regionId;
+
+ @ApiModelProperty("用户角色")
+ private List userRoleList;
+
+ @ApiModelProperty("状态")
+ private String status;
+
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/model/vo/ResUserInfoListVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/model/vo/ResUserInfoListVO.java
new file mode 100644
index 0000000..3e61983
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/model/vo/ResUserInfoListVO.java
@@ -0,0 +1,47 @@
+package com.ningdatech.pmapi.user.model.vo;
+
+import com.ningdatech.pmapi.sys.model.entity.Role;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author liuxinxin
+ * @date 2023/2/13 上午9:10
+ */
+@Data
+@ApiModel("用户管理查询 请求response")
+public class ResUserInfoListVO {
+
+ @ApiModelProperty("用户id")
+ private Long userId;
+
+ @ApiModelProperty("姓名")
+ private String name;
+
+ @ApiModelProperty("手机号码")
+ private String phoneNo;
+
+ @ApiModelProperty("所在单位(主职)")
+ private String orgName;
+
+ @ApiModelProperty("所在单位(主职)id")
+ private Long orgId;
+
+ @ApiModelProperty("所属区域")
+ private Long regionId;
+
+ @ApiModelProperty("用户角色")
+ private List userRoleList;
+
+ @ApiModelProperty("状态")
+ private String status;
+
+ @ApiModelProperty("更新时间")
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java
index 868fbff..53b8efc 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserInfoDetails.java
@@ -4,10 +4,12 @@ import cn.hutool.core.collection.CollectionUtil;
import com.ningdatech.basic.auth.AbstractLoginUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -41,8 +43,11 @@ public class UserInfoDetails extends AbstractLoginUser implements UserDetails {
*/
@Override
public Collection extends GrantedAuthority> getAuthorities() {
- SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(this.role);
- return CollectionUtil.toList(simpleGrantedAuthority);
+ if (StringUtils.isNotBlank(role)) {
+ SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(this.role);
+ return CollectionUtil.toList(simpleGrantedAuthority);
+ }
+ return new ArrayList<>();
}
@Override
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/password/UsernamePasswordAuthProvider.java b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/password/UsernamePasswordAuthProvider.java
index 8c7adae..f586d5b 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/password/UsernamePasswordAuthProvider.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/password/UsernamePasswordAuthProvider.java
@@ -31,7 +31,8 @@ public class UsernamePasswordAuthProvider implements AuthenticationProvider {
if (user == null) {
throw new InternalAuthenticationServiceException("can not get user info!");
}
- additionalAuthenticationChecks(user, authenticationToken);
+ // TODO 开发使用暂时关闭账号密码验证
+// additionalAuthenticationChecks(user, authenticationToken);
// 校验用户是否有当前端的登陆权限
// 将用户定义的user放入token中,这样可以在session中查询到所有自定义的用户信息
return new UsernamePasswordAuthToken(user, user.getPassword(), user.getAuthorities());