diff --git a/docs/db/phase2/init-phase2.sql b/docs/db/phase2/init-phase2.sql index fb14f42..242d169 100644 --- a/docs/db/phase2/init-phase2.sql +++ b/docs/db/phase2/init-phase2.sql @@ -229,23 +229,22 @@ drop table if exists `eval_project`; create table `eval_project` ( `id` bigint not null comment '主键', `org_id` bigint not null comment '评价机构id', - `customer_id` bigint not null comment '客户id', - `project_no` varchar(64) not null comment '项目编号', + `customer_id` bigint not null comment '被评价客户id(eval_customer.id)', + `project_no` varchar(64) not null comment '项目编号(系统生成)', `project_name` varchar(200) not null comment '项目名称', - `eval_type_code` varchar(32) default null comment '评价类型编码(PRE安全预评价 ACCEPT安全验收评价 STATUS安全现状评价)', - `eval_type_name` varchar(50) default null comment '评价类型名称(安全预评价/安全验收评价/安全现状评价)', - `business_scope` varchar(500) default null comment '业务范围', - `plan_start_date` date default null comment '计划开始日期', - `plan_end_date` date default null comment '计划结束日期', - `actual_start_date` date default null comment '实际开始日期', - `actual_end_date` date default null comment '实际结束日期', - `current_stage_code` varchar(32) default null comment '当前展示阶段编码(NODE_01风险分析 NODE_02业务合同 NODE_03项目组成立 NODE_04现场踏勘 NODE_05报告编制 NODE_06内部审核 NODE_07技术审核 NODE_08过程控制 ARCHIVED已归档 CANCELLED已作废)', - `current_stage_name` varchar(50) default null comment '当前展示阶段名称(风险分析/业务合同/项目组成立/现场踏勘/报告编制/内部审核/技术审核/过程控制/已归档/已作废)', - `status_code` int default null comment '项目状态编码(1草稿2进行中3已归档4已作废)', - `status_name` varchar(50) default null comment '项目状态名称', - `leader_personnel_id` bigint default null comment '项目负责人人员id', - `leader_name` varchar(50) default null comment '项目负责人姓名', - `cancel_reason` varchar(500) default null comment '作废原因', + `eval_type_code` varchar(32) default null comment '评价类型编码(见EvalTypeEnum:PRE/ACCEPT/STATUS)', + `customer_contact_name` varchar(50) default null comment '客户负责人(手填)', + `customer_contact_phone` varchar(20) default null comment '联系电话(手填)', + `district_code` varchar(32) default null comment '项目所在地编码(见ChongqingDistrictEnum)', + `plan_start_date` date default null comment '项目开始时间', + `plan_end_date` date default null comment '项目完成时间', + `customer_address` varchar(500) default null comment '客户所在地(手填)', + `longitude` varchar(32) default null comment '经度(手填)', + `latitude` varchar(32) default null comment '纬度(手填)', + `checkin_radius_meters` int default null comment '打卡有效范围(米,手填)', + `participants_json` json default null comment '参与人员JSON:[{"name":"名称","id":1}]', + `project_leader_name` varchar(50) default null comment '项目负责人(手填)', + `archive_flag` int not null default 0 comment '项目归档(1归档0未归档)', `delete_enum` varchar(32) default null comment '删除标识true false', `remarks` varchar(255) default null comment '备注', `create_name` varchar(50) default null comment '创建人姓名', @@ -261,8 +260,10 @@ create table `eval_project` ( unique key `uk_eval_project_no` (`project_no`), key `idx_eval_project_org` (`org_id`), key `idx_eval_project_customer` (`customer_id`), - key `idx_eval_project_status` (`status_code`), - key `idx_eval_project_stage` (`current_stage_code`) + key `idx_eval_project_plan_start` (`plan_start_date`), + key `idx_eval_project_plan_end` (`plan_end_date`), + key `idx_eval_project_district` (`district_code`), + key `idx_eval_project_archive` (`archive_flag`) ) engine=innodb default charset=utf8mb4 collate=utf8mb4_0900_ai_ci comment='安评项目主表'; drop table if exists `eval_project_member`; diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectController.java index 52891f4..cb563dd 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectController.java @@ -5,10 +5,11 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.qinan.safetyeval.client.api.institution.EvalProjectApi; import org.qinan.safetyeval.client.co.institution.EvalProjectCO; +import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; -import org.qinan.safetyeval.client.dto.institution.*; -import org.qinan.safetyeval.infrastructure.dataobject.base.Req; +import org.qinan.safetyeval.client.dto.institution.EvalProjectAddCmd; +import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -22,7 +23,7 @@ public class EvalProjectController { @Resource private EvalProjectApi evalProjectApi; - @ApiOperation("新增项目") + @ApiOperation("新建项目") @PostMapping("/save") public SingleResponse save(@Validated @RequestBody EvalProjectAddCmd cmd) { return evalProjectApi.save(cmd); @@ -34,39 +35,15 @@ public class EvalProjectController { return evalProjectApi.get(Long.parseLong(id)); } - @ApiOperation("修改项目") - @PostMapping("/modify") - public SingleResponse modify(@Validated @RequestBody EvalProjectModifyCmd cmd) { - return evalProjectApi.modify(cmd); - } - - @ApiOperation("删除项目") - @PostMapping("/delete") - public SingleResponse delete(@RequestBody Req req) { - return evalProjectApi.delete(req.getData()); - } - @ApiOperation("分页查询项目") @GetMapping("/page") public PageResponse page(@Validated EvalProjectPageQuery query) { return evalProjectApi.page(query); } - @ApiOperation("作废项目") - @PostMapping("/cancel") - public SingleResponse cancel(@Validated @RequestBody EvalProjectCancelCmd cmd) { - return evalProjectApi.cancel(cmd); - } - - @ApiOperation("项目进度分页查询") - @GetMapping("/progress/page") - public PageResponse progressPage(@Validated EvalProjectPageQuery query) { - return evalProjectApi.progressPage(query); - } - - @ApiOperation("我的项目分页") - @GetMapping("/my-page") - public PageResponse myPage(@Validated EvalProjectMyPageQuery query) { - return evalProjectApi.myPage(query); + @ApiOperation("安评项目枚举映射") + @GetMapping("/enums") + public SingleResponse enums() { + return evalProjectApi.enums(); } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/convertor/EvalProjectCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/convertor/EvalProjectCmdConvertor.java new file mode 100644 index 0000000..6d05ed8 --- /dev/null +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/convertor/EvalProjectCmdConvertor.java @@ -0,0 +1,122 @@ +package org.qinan.safetyeval.app.convertor; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.mapstruct.AfterMapping; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.qinan.safetyeval.client.co.institution.EnumOptionCO; +import org.qinan.safetyeval.client.co.institution.EvalProjectCO; +import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO; +import org.qinan.safetyeval.client.co.institution.EvalProjectParticipantItemCO; +import org.qinan.safetyeval.client.dto.institution.EvalProjectAddCmd; +import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery; +import org.qinan.safetyeval.domain.constant.ChongqingDistrictEnum; +import org.qinan.safetyeval.domain.constant.EvalTypeEnum; +import org.qinan.safetyeval.domain.entity.EvalProjectEntity; +import org.qinan.safetyeval.domain.query.EvalProjectQuery; +import org.springframework.util.StringUtils; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Mapper(componentModel = "spring") +public interface EvalProjectCmdConvertor { + + ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + @Mapping(target = "id", ignore = true) + @Mapping(target = "orgId", ignore = true) + @Mapping(target = "projectNo", ignore = true) + @Mapping(target = "customerId", expression = "java(cmd.getCustomerId() == null ? null : Long.parseLong(cmd.getCustomerId()))") + @Mapping(target = "participantsJson", expression = "java(toParticipantsJson(cmd.getParticipants()))") + @Mapping(target = "archiveFlag", expression = "java(cmd.getArchiveFlag() == null ? 0 : cmd.getArchiveFlag())") + @Mapping(target = "tenantId", ignore = true) + EvalProjectEntity convertAddCmdToE(EvalProjectAddCmd cmd); + + @Mapping(target = "pageNum", source = "current") + @Mapping(target = "pageSize", source = "size") + @Mapping(target = "orgId", ignore = true) + @Mapping(target = "projectIds", ignore = true) + EvalProjectQuery convertPageQueryToQ(EvalProjectPageQuery query); + + @Mapping(target = "id", expression = "java(entity.getId() == null ? null : String.valueOf(entity.getId()))") + @Mapping(target = "customerId", expression = "java(entity.getCustomerId() == null ? null : String.valueOf(entity.getCustomerId()))") + @Mapping(target = "evalTypeName", ignore = true) + @Mapping(target = "districtName", ignore = true) + @Mapping(target = "participants", ignore = true) + @Mapping(target = "projectPhaseCode", ignore = true) + @Mapping(target = "projectPhaseName", ignore = true) + EvalProjectCO convertEToCO(EvalProjectEntity entity); + + List convertEListToCOList(List list); + + @AfterMapping + default void fillDisplayFields(EvalProjectEntity entity, @MappingTarget EvalProjectCO co) { + if (entity == null || co == null) { + return; + } + EvalTypeEnum evalType = EvalTypeEnum.ofCode(entity.getEvalTypeCode()); + if (evalType != null) { + co.setEvalTypeName(evalType.getValue()); + } + ChongqingDistrictEnum district = ChongqingDistrictEnum.ofCode(entity.getDistrictCode()); + if (district != null) { + co.setDistrictName(district.getValue()); + } + co.setParticipants(fromParticipantsJson(entity.getParticipantsJson())); + fillProjectPhase(entity.getPlanEndDate(), co); + } + + default void fillProjectPhase(LocalDate planEndDate, EvalProjectCO co) { + if (planEndDate == null) { + return; + } + LocalDate today = LocalDate.now(); + if (today.isAfter(planEndDate)) { + co.setProjectPhaseCode("DELAY"); + co.setProjectPhaseName("延期"); + } else { + co.setProjectPhaseCode("NORMAL"); + co.setProjectPhaseName("正常"); + } + } + + default String toParticipantsJson(List participants) { + if (participants == null) { + return null; + } + try { + return OBJECT_MAPPER.writeValueAsString(participants); + } catch (Exception e) { + throw new IllegalArgumentException("参与人员JSON序列化失败", e); + } + } + + default List fromParticipantsJson(String json) { + if (!StringUtils.hasText(json)) { + return Collections.emptyList(); + } + try { + return OBJECT_MAPPER.readValue(json, new TypeReference>() { + }); + } catch (Exception e) { + return Collections.emptyList(); + } + } + + default EvalProjectEnumsCO buildEnums() { + EvalProjectEnumsCO co = new EvalProjectEnumsCO(); + co.setEvalType(Arrays.stream(EvalTypeEnum.values()) + .map(e -> new EnumOptionCO(e.getCode(), e.getValue())) + .collect(Collectors.toList())); + co.setDistrict(Arrays.stream(ChongqingDistrictEnum.values()) + .map(e -> new EnumOptionCO(e.getCode(), e.getValue())) + .collect(Collectors.toList())); + return co; + } +} diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java index b88f9ab..621a704 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java @@ -8,6 +8,7 @@ import org.qinan.safetyeval.client.co.institution.EvalProcessControlCO; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EvalProcessArchiveCmd; import org.qinan.safetyeval.client.dto.institution.EvalProcessControlSaveCmd; +import org.qinan.safetyeval.domain.constant.EvalTypeEnum; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.entity.EvalProcessControlEntity; import org.qinan.safetyeval.domain.entity.EvalReportDraftEntity; @@ -81,7 +82,7 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { public SingleResponse archive(EvalProcessArchiveCmd cmd) { Long projectId = Long.parseLong(cmd.getProjectId()); EvalProjectEntity project = evalProjectNodeSupport.requireProject(projectId); - if (project.getStatusCode() != null && project.getStatusCode() == 3) { + if (project.getArchiveFlag() != null && project.getArchiveFlag() == 1) { throw new BizException(ErrorCode.EVAL_ARCHIVE_ALREADY_DONE); } evalProjectNodeSupport.assertWrite(projectId, EvalNodeCodes.NODE_08); @@ -122,8 +123,8 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { report.setReportName(project.getProjectName() + "安评报告"); report.setReportYear(LocalDateTime.now().getYear()); report.setEvalTypeCode(project.getEvalTypeCode()); - report.setEvalTypeName(project.getEvalTypeName()); - report.setBusinessScope(project.getBusinessScope()); + EvalTypeEnum evalType = EvalTypeEnum.ofCode(project.getEvalTypeCode()); + report.setEvalTypeName(evalType != null ? evalType.getValue() : null); report.setPublicFlag(2); report.setCompleteFlag(1); report.setReportStatusCode(1); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java index 59aaf34..e4c536c 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java @@ -1,36 +1,25 @@ package org.qinan.safetyeval.app.executor.institution; +import org.qinan.safetyeval.app.convertor.EvalProjectCmdConvertor; import org.qinan.safetyeval.client.api.institution.EvalProjectApi; import org.qinan.safetyeval.client.co.institution.EvalProjectCO; +import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; -import org.qinan.safetyeval.client.dto.institution.*; +import org.qinan.safetyeval.client.dto.institution.EvalProjectAddCmd; +import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; -import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; -import org.qinan.safetyeval.domain.entity.OrgPersonnelEntity; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; -import org.qinan.safetyeval.domain.gateway.OrgPersonnelGateway; import org.qinan.safetyeval.domain.query.EvalProjectQuery; import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.domain.service.EvalProjectDomainService; -import org.qinan.safetyeval.domain.service.EvalProjectMemberDomainService; -import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; -import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserInfo; import org.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport; import org.qinan.safetyeval.infrastructure.support.ProjectNoGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; @Service public class EvalProjectExecutor implements EvalProjectApi { @@ -49,115 +38,36 @@ public class EvalProjectExecutor implements EvalProjectApi { @Lazy @Autowired(required = false) - private OrgPersonnelGateway orgPersonnelGateway; - - @Lazy - @Autowired(required = false) - private EvalProjectMemberDomainService evalProjectMemberDomainService; + private EvalProjectCmdConvertor evalProjectCmdConvertor; @Override public SingleResponse save(EvalProjectAddCmd cmd) { Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - EvalProjectEntity entity = new EvalProjectEntity(); - entity.setCustomerId(Long.parseLong(cmd.getCustomerId())); - entity.setProjectName(cmd.getProjectName()); - entity.setEvalTypeCode(cmd.getEvalTypeCode()); - entity.setEvalTypeName(cmd.getEvalTypeName()); - entity.setBusinessScope(cmd.getBusinessScope()); - entity.setPlanStartDate(cmd.getPlanStartDate()); - entity.setPlanEndDate(cmd.getPlanEndDate()); - entity.setStatusCode(cmd.getStatusCode()); - evalProjectDomainService.applyDefaultStatusAndStage(entity); + EvalProjectEntity entity = evalProjectCmdConvertor.convertAddCmdToE(cmd); EvalProjectEntity result = saveWithProjectNo(entity, orgId); - return SingleResponse.success(toCO(result)); + return SingleResponse.success(evalProjectCmdConvertor.convertEToCO(result)); } @Override public SingleResponse get(Long id) { EvalProjectEntity entity = evalProjectDomainService.get(id); institutionOrgSupport.assertOrgAccess(entity.getOrgId(), ErrorCode.EVAL_PROJECT_NOT_FOUND); - return SingleResponse.success(toCO(entity)); - } - - @Override - public SingleResponse modify(EvalProjectModifyCmd cmd) { - EvalProjectEntity existing = evalProjectDomainService.get(Long.parseLong(cmd.getId())); - institutionOrgSupport.assertOrgAccess(existing.getOrgId(), ErrorCode.EVAL_PROJECT_NOT_FOUND); - EvalProjectEntity entity = new EvalProjectEntity(); - entity.setId(Long.parseLong(cmd.getId())); - if (cmd.getCustomerId() != null) { - entity.setCustomerId(Long.parseLong(cmd.getCustomerId())); - } - entity.setProjectName(cmd.getProjectName()); - entity.setEvalTypeCode(cmd.getEvalTypeCode()); - entity.setEvalTypeName(cmd.getEvalTypeName()); - entity.setBusinessScope(cmd.getBusinessScope()); - entity.setPlanStartDate(cmd.getPlanStartDate()); - entity.setPlanEndDate(cmd.getPlanEndDate()); - entity.setActualStartDate(cmd.getActualStartDate()); - entity.setActualEndDate(cmd.getActualEndDate()); - entity.setStatusCode(cmd.getStatusCode()); - EvalProjectEntity result = evalProjectDomainService.modify(entity); - return SingleResponse.success(toCO(result)); - } - - @Override - public SingleResponse delete(Long id) { - EvalProjectEntity existing = evalProjectDomainService.get(id); - institutionOrgSupport.assertOrgAccess(existing.getOrgId(), ErrorCode.EVAL_PROJECT_NOT_FOUND); - evalProjectDomainService.delete(id); - return SingleResponse.success(); + return SingleResponse.success(evalProjectCmdConvertor.convertEToCO(entity)); } @Override public PageResponse page(EvalProjectPageQuery query) { - Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - EvalProjectQuery domainQuery = toDomainQuery(query, orgId, null); + EvalProjectQuery domainQuery = evalProjectCmdConvertor.convertPageQueryToQ(query); + domainQuery.setOrgId(institutionOrgSupport.resolveCurrentOrgId()); PageResult pageResult = evalProjectDomainService.page(domainQuery); return PageResponse.of( - pageResult.getRecords().stream().map(this::toCO).collect(Collectors.toList()), + evalProjectCmdConvertor.convertEListToCOList(pageResult.getRecords()), pageResult.getTotal()); } @Override - public SingleResponse cancel(EvalProjectCancelCmd cmd) { - Long id = Long.parseLong(cmd.getId()); - EvalProjectEntity existing = evalProjectDomainService.get(id); - institutionOrgSupport.assertOrgAccess(existing.getOrgId(), ErrorCode.EVAL_PROJECT_NOT_FOUND); - evalProjectDomainService.cancel(id, cmd.getCancelReason()); - return SingleResponse.success(toCO(evalProjectDomainService.get(id))); - } - - @Override - public PageResponse progressPage(EvalProjectPageQuery query) { - return page(query); - } - - @Override - public PageResponse myPage(EvalProjectMyPageQuery query) { - Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - Long personnelId = resolvePersonnelId(query.getPersonnelId()); - if (personnelId == null) { - return PageResponse.of(Collections.emptyList(), 0L); - } - List memberships = - evalProjectMemberDomainService.listByPersonnelId(personnelId, orgId); - if (CollectionUtils.isEmpty(memberships)) { - return PageResponse.of(Collections.emptyList(), 0L); - } - Map memberByProject = memberships.stream() - .collect(Collectors.toMap(EvalProjectMemberEntity::getProjectId, Function.identity(), (a, b) -> a)); - List projectIds = memberships.stream() - .map(EvalProjectMemberEntity::getProjectId) - .distinct() - .collect(Collectors.toList()); - EvalProjectQuery domainQuery = toDomainQuery(query, orgId, projectIds); - PageResult pageResult = evalProjectDomainService.page(domainQuery); - return PageResponse.of( - pageResult.getRecords().stream() - .map(entity -> toMyProjectCO(entity, memberByProject.get(entity.getId()))) - .collect(Collectors.toList()), - pageResult.getTotal()); + public SingleResponse enums() { + return SingleResponse.success(evalProjectCmdConvertor.buildEnums()); } private EvalProjectEntity saveWithProjectNo(EvalProjectEntity entity, Long orgId) { @@ -175,81 +85,4 @@ public class EvalProjectExecutor implements EvalProjectApi { } throw new BizException(ErrorCode.EVAL_PROJECT_NO_GENERATE_FAILED); } - - private Long resolvePersonnelId(String personnelIdOverride) { - if (StringUtils.hasText(personnelIdOverride)) { - return Long.parseLong(personnelIdOverride); - } - AuthUserInfo user = AuthUserContextAdapter.getCurrentUser(); - if (user == null) { - return null; - } - String account = user.getAccount(); - if (!StringUtils.hasText(account)) { - account = user.getUserName(); - } - if (!StringUtils.hasText(account)) { - return null; - } - OrgPersonnelEntity personnel = orgPersonnelGateway.getByAccount(account); - return personnel == null ? null : personnel.getId(); - } - - private EvalProjectQuery toDomainQuery(EvalProjectPageQuery query, Long orgId, List projectIds) { - EvalProjectQuery domainQuery = new EvalProjectQuery(); - domainQuery.setPageNum(query.getCurrent()); - domainQuery.setPageSize(query.getSize()); - domainQuery.setOrgId(orgId); - domainQuery.setProjectName(query.getProjectName()); - domainQuery.setStatusCode(query.getStatusCode()); - domainQuery.setLeaderName(query.getLeaderName()); - domainQuery.setPlanStartDateFrom(query.getPlanStartDateFrom()); - domainQuery.setPlanStartDateTo(query.getPlanStartDateTo()); - domainQuery.setPlanEndDateFrom(query.getPlanEndDateFrom()); - domainQuery.setPlanEndDateTo(query.getPlanEndDateTo()); - domainQuery.setCurrentStageCode(query.getCurrentStageCode()); - domainQuery.setProjectIds(projectIds); - return domainQuery; - } - - private EvalProjectCO toMyProjectCO(EvalProjectEntity entity, EvalProjectMemberEntity membership) { - EvalProjectCO co = toCO(entity); - if (co == null) { - return null; - } - // P1 占位:待办数/摘要固定空;P2 八节点办理后填实 - co.setPendingTodoCount(0); - co.setTodoSummary(""); - if (membership != null) { - co.setMyRoleCode(membership.getRoleCode()); - co.setMyRoleName(membership.getRoleName()); - } - return co; - } - - private EvalProjectCO toCO(EvalProjectEntity entity) { - if (entity == null) { - return null; - } - EvalProjectCO co = new EvalProjectCO(); - co.setId(entity.getId() != null ? String.valueOf(entity.getId()) : null); - co.setCustomerId(entity.getCustomerId() != null ? String.valueOf(entity.getCustomerId()) : null); - co.setProjectNo(entity.getProjectNo()); - co.setProjectName(entity.getProjectName()); - co.setEvalTypeCode(entity.getEvalTypeCode()); - co.setEvalTypeName(entity.getEvalTypeName()); - co.setBusinessScope(entity.getBusinessScope()); - co.setPlanStartDate(entity.getPlanStartDate()); - co.setPlanEndDate(entity.getPlanEndDate()); - co.setActualStartDate(entity.getActualStartDate()); - co.setActualEndDate(entity.getActualEndDate()); - co.setCurrentStageCode(entity.getCurrentStageCode()); - co.setCurrentStageName(entity.getCurrentStageName()); - co.setStatusCode(entity.getStatusCode()); - co.setStatusName(entity.getStatusName()); - co.setLeaderPersonnelId(entity.getLeaderPersonnelId() != null ? String.valueOf(entity.getLeaderPersonnelId()) : null); - co.setLeaderName(entity.getLeaderName()); - co.setCancelReason(entity.getCancelReason()); - return co; - } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/support/EvalProjectNodeSupport.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/support/EvalProjectNodeSupport.java index 413d69b..4d9b138 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/support/EvalProjectNodeSupport.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/support/EvalProjectNodeSupport.java @@ -53,7 +53,7 @@ public class EvalProjectNodeSupport { if (project == null) { return false; } - if (project.getStatusCode() != null && (project.getStatusCode() == 3 || project.getStatusCode() == 4)) { + if (project.getArchiveFlag() != null && project.getArchiveFlag() == 1) { return false; } return nodeWriteAuthority.canWrite(projectId, project.getOrgId(), nodeCode); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java index 9c02e01..852f6be 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java @@ -33,10 +33,6 @@ public class RegulatorEvalProjectMonitorExecutor implements RegulatorEvalProject domainQuery.setPageNum(query.getCurrent()); domainQuery.setPageSize(query.getSize()); domainQuery.setOrgId(query.getOrgId()); - domainQuery.setStatusCode(query.getStatusCode()); - domainQuery.setCurrentStageCode(query.getCurrentStageCode()); - domainQuery.setCreateTimeFrom(query.getCreateTimeFrom()); - domainQuery.setCreateTimeTo(query.getCreateTimeTo()); domainQuery.setPlanStartDateFrom(query.getPlanStartDateFrom()); domainQuery.setPlanStartDateTo(query.getPlanStartDateTo()); PageResult pageResult = evalProjectGateway.page(domainQuery); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/support/RegulatorMonitorCoConverter.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/support/RegulatorMonitorCoConverter.java index cdd4d6c..3835c48 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/support/RegulatorMonitorCoConverter.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/support/RegulatorMonitorCoConverter.java @@ -6,6 +6,7 @@ import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeItemCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalSurveySupervisionCO; +import org.qinan.safetyeval.domain.constant.EvalTypeEnum; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.entity.EvalSurveyEntity; @@ -29,20 +30,13 @@ public final class RegulatorMonitorCoConverter { co.setProjectNo(entity.getProjectNo()); co.setProjectName(entity.getProjectName()); co.setEvalTypeCode(entity.getEvalTypeCode()); - co.setEvalTypeName(entity.getEvalTypeName()); - co.setBusinessScope(entity.getBusinessScope()); + EvalTypeEnum evalType = EvalTypeEnum.ofCode(entity.getEvalTypeCode()); + if (evalType != null) { + co.setEvalTypeName(evalType.getValue()); + } co.setPlanStartDate(entity.getPlanStartDate()); co.setPlanEndDate(entity.getPlanEndDate()); - co.setActualStartDate(entity.getActualStartDate()); - co.setActualEndDate(entity.getActualEndDate()); - co.setCurrentStageCode(entity.getCurrentStageCode()); - co.setCurrentStageName(entity.getCurrentStageName()); - co.setStatusCode(entity.getStatusCode()); - co.setStatusName(entity.getStatusName()); - co.setLeaderPersonnelId(entity.getLeaderPersonnelId() != null - ? String.valueOf(entity.getLeaderPersonnelId()) : null); - co.setLeaderName(entity.getLeaderName()); - co.setCancelReason(entity.getCancelReason()); + co.setLeaderName(entity.getProjectLeaderName()); return co; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java index 4dc78e7..aeda1a4 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java @@ -1,9 +1,11 @@ package org.qinan.safetyeval.client.api.institution; import org.qinan.safetyeval.client.co.institution.EvalProjectCO; +import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; -import org.qinan.safetyeval.client.dto.institution.*; +import org.qinan.safetyeval.client.dto.institution.EvalProjectAddCmd; +import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery; public interface EvalProjectApi { @@ -11,15 +13,7 @@ public interface EvalProjectApi { SingleResponse get(Long id); - SingleResponse modify(EvalProjectModifyCmd cmd); - - SingleResponse delete(Long id); - PageResponse page(EvalProjectPageQuery query); - SingleResponse cancel(EvalProjectCancelCmd cmd); - - PageResponse progressPage(EvalProjectPageQuery query); - - PageResponse myPage(EvalProjectMyPageQuery query); + SingleResponse enums(); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java index c0b8230..d6ea10e 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDate; +import java.util.List; @Data public class EvalProjectCO { @@ -11,7 +12,7 @@ public class EvalProjectCO { @ApiModelProperty("主键ID") private String id; - @ApiModelProperty("客户ID") + @ApiModelProperty("被评价客户id") private String customerId; @ApiModelProperty("项目编号") @@ -20,65 +21,54 @@ public class EvalProjectCO { @ApiModelProperty("项目名称") private String projectName; - @ApiModelProperty(value = "评价类型编码:PRE安全预评价 ACCEPT安全验收评价 STATUS安全现状评价", example = "PRE") + @ApiModelProperty("评价类型编码") private String evalTypeCode; - @ApiModelProperty(value = "评价类型名称:安全预评价/安全验收评价/安全现状评价", example = "安全预评价") + @ApiModelProperty("评价类型名称") private String evalTypeName; - @ApiModelProperty("业务范围") - private String businessScope; + @ApiModelProperty("客户负责人") + private String customerContactName; - @ApiModelProperty("计划开始日期") + @ApiModelProperty("联系电话") + private String customerContactPhone; + + @ApiModelProperty("项目所在地编码") + private String districtCode; + + @ApiModelProperty("项目所在地名称") + private String districtName; + + @ApiModelProperty("项目开始时间") private LocalDate planStartDate; - @ApiModelProperty("计划结束日期") + @ApiModelProperty("项目完成时间") private LocalDate planEndDate; - @ApiModelProperty("实际开始日期") - private LocalDate actualStartDate; + @ApiModelProperty("客户所在地") + private String customerAddress; - @ApiModelProperty("实际结束日期") - private LocalDate actualEndDate; + @ApiModelProperty("经度") + private String longitude; - @ApiModelProperty(value = "当前阶段编码:NODE_01风险分析 NODE_02业务合同 NODE_03项目组成立 NODE_04现场踏勘 NODE_05报告编制 NODE_06内部审核 NODE_07技术审核 NODE_08过程控制 ARCHIVED已归档 CANCELLED已作废", example = "NODE_02") - private String currentStageCode; + @ApiModelProperty("纬度") + private String latitude; - @ApiModelProperty(value = "当前阶段名称:风险分析/业务合同/项目组成立/现场踏勘/报告编制/内部审核/技术审核/过程控制/已归档/已作废", example = "业务合同") - private String currentStageName; + @ApiModelProperty("打卡有效范围(米)") + private Integer checkinRadiusMeters; - @ApiModelProperty(value = "项目状态编码:1草稿 2进行中 3已归档 4已作废", example = "2") - private Integer statusCode; + @ApiModelProperty("参与人员") + private List participants; - @ApiModelProperty(value = "项目状态名称:草稿/进行中/已归档/已作废", example = "进行中") - private String statusName; + @ApiModelProperty("项目负责人") + private String projectLeaderName; - @ApiModelProperty("负责人人员ID") - private String leaderPersonnelId; + @ApiModelProperty(value = "项目归档:1归档 0未归档", example = "0") + private Integer archiveFlag; - @ApiModelProperty("负责人姓名") - private String leaderName; + @ApiModelProperty("项目阶段编码:NORMAL正常 DELAY延期(按完成时间判定,不落库)") + private String projectPhaseCode; - @ApiModelProperty("作废原因") - private String cancelReason; - - /** 我的项目:当前人在该项目的角色编码(非 my-page 可为空) */ - @ApiModelProperty(value = "我的角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员", example = "MEMBER") - private String myRoleCode; - - /** 我的项目:当前人在该项目的角色名称 */ - @ApiModelProperty(value = "我的角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员", example = "项目组成员") - private String myRoleName; - - /** - * 待我处理数量占位。P1 固定 0;P2 八节点办理后填实。 - */ - @ApiModelProperty("待我处理数(P1 占位,固定 0)") - private Integer pendingTodoCount; - - /** - * 待办摘要占位。P1 固定空串;P2 填节点待办文案。 - */ - @ApiModelProperty("待办摘要(P1 占位,固定空串)") - private String todoSummary; + @ApiModelProperty("项目阶段名称:正常/延期") + private String projectPhaseName; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectEnumsCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectEnumsCO.java new file mode 100644 index 0000000..9cebfa0 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectEnumsCO.java @@ -0,0 +1,16 @@ +package org.qinan.safetyeval.client.co.institution; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EvalProjectEnumsCO { + + @ApiModelProperty("评价类型") + private List evalType; + + @ApiModelProperty("项目所在地(重庆市区级)") + private List district; +} diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectParticipantItemCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectParticipantItemCO.java new file mode 100644 index 0000000..4f7a24c --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectParticipantItemCO.java @@ -0,0 +1,18 @@ +package org.qinan.safetyeval.client.co.institution; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EvalProjectParticipantItemCO { + + @ApiModelProperty("人员id") + private Long id; + + @ApiModelProperty("人员名称") + private String name; +} diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java index bb79095..c4cd615 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java @@ -2,33 +2,64 @@ package org.qinan.safetyeval.client.dto.institution; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.qinan.safetyeval.client.co.institution.EvalProjectParticipantItemCO; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import java.time.LocalDate; +import java.util.List; @Data public class EvalProjectAddCmd { - @ApiModelProperty("客户ID") - private String customerId; - - @ApiModelProperty("项目名称") + @NotBlank(message = "项目名称不能为空") + @ApiModelProperty(value = "项目名称", required = true) private String projectName; - @ApiModelProperty(value = "评价类型编码:PRE安全预评价 ACCEPT安全验收评价 STATUS安全现状评价", example = "PRE") + @NotBlank(message = "评价类型不能为空") + @ApiModelProperty(value = "评价类型编码:PRE/ACCEPT/STATUS", required = true, example = "PRE") private String evalTypeCode; - @ApiModelProperty(value = "评价类型名称:安全预评价/安全验收评价/安全现状评价", example = "安全预评价") - private String evalTypeName; + @NotBlank(message = "被评价客户不能为空") + @ApiModelProperty(value = "被评价客户id(客户管理id)", required = true) + private String customerId; - @ApiModelProperty("业务范围") - private String businessScope; + @ApiModelProperty("客户负责人(手填)") + private String customerContactName; - @ApiModelProperty("计划开始日期") + @ApiModelProperty("联系电话(手填)") + private String customerContactPhone; + + @ApiModelProperty("项目所在地编码(ChongqingDistrictEnum)") + private String districtCode; + + @ApiModelProperty("项目开始时间") private LocalDate planStartDate; - @ApiModelProperty("计划结束日期") + @ApiModelProperty("项目完成时间") private LocalDate planEndDate; - @ApiModelProperty(value = "项目状态编码:1草稿 2进行中 3已归档 4已作废", example = "2") - private Integer statusCode; + @ApiModelProperty("客户所在地(手填)") + private String customerAddress; + + @ApiModelProperty("经度") + private String longitude; + + @ApiModelProperty("纬度") + private String latitude; + + @ApiModelProperty("打卡有效范围(米)") + private Integer checkinRadiusMeters; + + @NotNull(message = "参与人员不能为空") + @Size(min = 5, message = "请至少选取5名项目参与人员") + @ApiModelProperty(value = "参与人员", required = true) + private List participants; + + @ApiModelProperty("项目负责人(手填)") + private String projectLeaderName; + + @ApiModelProperty(value = "项目归档:1归档 0未归档", example = "0") + private Integer archiveFlag; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java index d7b833d..45ff007 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java @@ -15,28 +15,25 @@ public class EvalProjectPageQuery extends BasePageQuery { @ApiModelProperty("项目名称") private String projectName; - @ApiModelProperty(value = "项目状态编码:1草稿 2进行中 3已归档 4已作废", example = "2") - private Integer statusCode; + @ApiModelProperty("项目负责人") + private String projectLeaderName; - @ApiModelProperty("负责人姓名") - private String leaderName; + @ApiModelProperty("客户负责人") + private String customerContactName; - @ApiModelProperty("计划开始日期起") + @ApiModelProperty("项目开始时间起") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planStartDateFrom; - @ApiModelProperty("计划开始日期止") + @ApiModelProperty("项目开始时间止") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planStartDateTo; - @ApiModelProperty("计划结束日期起") + @ApiModelProperty("项目完成时间起") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planEndDateFrom; - @ApiModelProperty("计划结束日期止") + @ApiModelProperty("项目完成时间止") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planEndDateTo; - - @ApiModelProperty(value = "当前阶段编码:NODE_01风险分析 NODE_02业务合同 NODE_03项目组成立 NODE_04现场踏勘 NODE_05报告编制 NODE_06内部审核 NODE_07技术审核 NODE_08过程控制 ARCHIVED已归档 CANCELLED已作废", example = "NODE_02") - private String currentStageCode; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/EvalTypeEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/EvalTypeEnum.java new file mode 100644 index 0000000..30b8b8b --- /dev/null +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/EvalTypeEnum.java @@ -0,0 +1,40 @@ +package org.qinan.safetyeval.domain.constant; + +/** + * 安全评价类型枚举 + */ +public enum EvalTypeEnum { + + PRE("PRE", "安全预评价"), + ACCEPT("ACCEPT", "安全设施竣工验收评价"), + STATUS("STATUS", "安全现状评价"), + ; + + private final String code; + private final String value; + + EvalTypeEnum(String code, String value) { + this.code = code; + this.value = value; + } + + public String getCode() { + return code; + } + + public String getValue() { + return value; + } + + public static EvalTypeEnum ofCode(String code) { + if (code == null) { + return null; + } + for (EvalTypeEnum item : values()) { + if (item.code.equals(code)) { + return item; + } + } + return null; + } +} diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java index 109a91c..fe5d5ce 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java @@ -1,12 +1,11 @@ package org.qinan.safetyeval.domain.entity; import lombok.Data; -import org.qinan.safetyeval.domain.support.EvalStatusHelper; import java.time.LocalDate; @Data -public class EvalProjectEntity{ +public class EvalProjectEntity { private Long id; private Long orgId; @@ -14,18 +13,19 @@ public class EvalProjectEntity{ private String projectNo; private String projectName; private String evalTypeCode; - private String evalTypeName; - private String businessScope; + private String customerContactName; + private String customerContactPhone; + private String districtCode; private LocalDate planStartDate; private LocalDate planEndDate; - private LocalDate actualStartDate; - private LocalDate actualEndDate; - private String currentStageCode; - private String currentStageName; - private Integer statusCode; - private String statusName; - private Long leaderPersonnelId; - private String leaderName; - private String cancelReason; + private String customerAddress; + private String longitude; + private String latitude; + private Integer checkinRadiusMeters; + /** JSON: [{"name":"名称","id":1}] */ + private String participantsJson; + private String projectLeaderName; + /** 1归档 0未归档 */ + private Integer archiveFlag; private Long tenantId; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java index bb34af0..82238e0 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java @@ -18,5 +18,5 @@ public interface EvalProjectGateway { long countByCustomerId(Long customerId, Long orgId); - void updateLeader(Long projectId, Long leaderPersonnelId, String leaderName); + void updateLeader(Long projectId, String leaderName); } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java index 1253193..0ce6b0a 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java @@ -3,7 +3,6 @@ package org.qinan.safetyeval.domain.query; import lombok.Data; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.List; @Data @@ -13,16 +12,11 @@ public class EvalProjectQuery { private Long pageSize; private Long orgId; private String projectName; - /** 项目状态编码:1草稿 2进行中 3已归档 4已作废,示例:2 */ - private Integer statusCode; - private String leaderName; + private String projectLeaderName; + private String customerContactName; private LocalDate planStartDateFrom; private LocalDate planStartDateTo; private LocalDate planEndDateFrom; private LocalDate planEndDateTo; - /** 当前阶段编码:NODE_01风险分析 NODE_02业务合同 NODE_03项目组成立 NODE_04现场踏勘 NODE_05报告编制 NODE_06内部审核 NODE_07技术审核 NODE_08过程控制 ARCHIVED已归档 CANCELLED已作废,示例:NODE_02 */ - private String currentStageCode; - private LocalDateTime createTimeFrom; - private LocalDateTime createTimeTo; private List projectIds; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java index e34a843..69e6d5f 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java @@ -13,11 +13,6 @@ import javax.annotation.Resource; @Service public class EvalProjectDomainService { - private static final String STAGE_NODE_01 = "NODE_01"; - private static final String STAGE_NODE_01_NAME = "风险分析"; - private static final String STAGE_CANCELLED = "CANCELLED"; - private static final String STAGE_CANCELLED_NAME = "已作废"; - @Resource private EvalProjectGateway evalProjectGateway; @@ -27,7 +22,9 @@ public class EvalProjectDomainService { public EvalProjectEntity add(EvalProjectEntity entity, Long orgId) { evalCustomerDomainService.requireCustomerInOrg(entity.getCustomerId(), orgId); entity.setOrgId(orgId); - applyDefaultStatusAndStage(entity); + if (entity.getArchiveFlag() == null) { + entity.setArchiveFlag(0); + } return evalProjectGateway.save(entity); } @@ -39,82 +36,23 @@ public class EvalProjectDomainService { return existing; } - public EvalProjectEntity modify(EvalProjectEntity entity) { - EvalProjectEntity existing = get(entity.getId()); - assertModifiable(existing); - if (entity.getCustomerId() != null && !entity.getCustomerId().equals(existing.getCustomerId())) { - evalCustomerDomainService.requireCustomerInOrg(entity.getCustomerId(), existing.getOrgId()); - } - entity.setOrgId(existing.getOrgId()); - entity.setProjectNo(existing.getProjectNo()); - fillStatusName(entity); - return evalProjectGateway.modify(entity); - } - - public void delete(Long id) { - get(id); - evalProjectGateway.delete(id); - } - - public void cancel(Long id, String cancelReason) { - EvalProjectEntity existing = get(id); - existing.setStatusCode(4); - existing.setStatusName("已作废"); - existing.setCurrentStageCode(STAGE_CANCELLED); - existing.setCurrentStageName(STAGE_CANCELLED_NAME); - existing.setCancelReason(cancelReason); - evalProjectGateway.modify(existing); - } - public PageResult page(EvalProjectQuery query) { return evalProjectGateway.page(query); } public void updateLeader(Long projectId, Long leaderPersonnelId, String leaderName) { - evalProjectGateway.updateLeader(projectId, leaderPersonnelId, leaderName); + evalProjectGateway.updateLeader(projectId, leaderName); } public void assertModifiable(EvalProjectEntity existing) { - if (existing.getStatusCode() != null && existing.getStatusCode() == 4) { - throw new BizException(ErrorCode.EVAL_PROJECT_CANCELLED); - } - if (existing.getStatusCode() != null && existing.getStatusCode() == 3) { + if (existing.getArchiveFlag() != null && existing.getArchiveFlag() == 1) { throw new BizException(ErrorCode.EVAL_PROJECT_ARCHIVED); } } - public void applyDefaultStatusAndStage(EvalProjectEntity entity) { - if (entity.getStatusCode() == null || entity.getStatusCode() != 1) { - entity.setStatusCode(2); - entity.setStatusName("进行中"); - } else { - entity.setStatusName("草稿"); - } - if (entity.getCurrentStageCode() == null) { - entity.setCurrentStageCode(STAGE_NODE_01); - entity.setCurrentStageName(STAGE_NODE_01_NAME); - } - } - - private void fillStatusName(EvalProjectEntity entity) { - if (entity.getStatusCode() == null) { - return; - } - switch (entity.getStatusCode()) { - case 1: - entity.setStatusName("草稿"); - break; - case 2: - entity.setStatusName("进行中"); - break; - case 3: - entity.setStatusName("已归档"); - break; - case 4: - entity.setStatusName("已作废"); - break; - default: - break; - } + public void markArchived(Long projectId) { + EvalProjectEntity existing = get(projectId); + existing.setArchiveFlag(1); + evalProjectGateway.modify(existing); } } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/ProjectStageSyncService.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/ProjectStageSyncService.java index 32bc1a8..4e658e4 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/ProjectStageSyncService.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/ProjectStageSyncService.java @@ -2,13 +2,12 @@ package org.qinan.safetyeval.domain.service; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.gateway.EvalProjectGateway; -import org.qinan.safetyeval.domain.support.EvalNodeCodes; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** - * 节点完成时同步项目 current_stage;归档时更新 status。 + * 节点完成后的项目侧同步。主表已去掉阶段/状态字段后,仅归档写 archive_flag。 */ @Service public class ProjectStageSyncService { @@ -17,24 +16,7 @@ public class ProjectStageSyncService { private EvalProjectGateway evalProjectGateway; public void onNodeCompleted(Long projectId, String completedNodeCode) { - if (projectId == null || completedNodeCode == null) { - return; - } - EvalProjectEntity project = evalProjectGateway.get(projectId); - if (project == null) { - return; - } - String nextStage = nextStageAfterComplete(completedNodeCode); - if (nextStage == null) { - return; - } - project.setCurrentStageCode(nextStage); - project.setCurrentStageName(stageName(nextStage)); - if (project.getStatusCode() == null || project.getStatusCode() == 1) { - project.setStatusCode(2); - project.setStatusName("进行中"); - } - evalProjectGateway.modify(project); + // 项目主表不再维护 current_stage,节点完成不再回写主表 } public void onArchived(Long projectId) { @@ -42,59 +24,7 @@ public class ProjectStageSyncService { if (project == null) { return; } - project.setStatusCode(3); - project.setStatusName("已归档"); - project.setCurrentStageCode(EvalNodeCodes.ARCHIVED); - project.setCurrentStageName(EvalNodeCodes.ARCHIVED_NAME); + project.setArchiveFlag(1); evalProjectGateway.modify(project); } - - private String nextStageAfterComplete(String completedNodeCode) { - switch (completedNodeCode) { - case EvalNodeCodes.NODE_01: - return EvalNodeCodes.NODE_02; - case EvalNodeCodes.NODE_02: - return EvalNodeCodes.NODE_03; - case EvalNodeCodes.NODE_03: - return EvalNodeCodes.NODE_04; - case EvalNodeCodes.NODE_04: - return EvalNodeCodes.NODE_05; - case EvalNodeCodes.NODE_05: - return EvalNodeCodes.NODE_06; - case EvalNodeCodes.NODE_06: - return EvalNodeCodes.NODE_07; - case EvalNodeCodes.NODE_07: - return EvalNodeCodes.NODE_08; - case EvalNodeCodes.NODE_08: - // 归档阶段仅由 onArchived 推进,禁止 get-or-save 完成误推 ARCHIVED - return null; - default: - return null; - } - } - - private String stageName(String stageCode) { - switch (stageCode) { - case EvalNodeCodes.NODE_01: - return EvalNodeCodes.NODE_01_NAME; - case EvalNodeCodes.NODE_02: - return EvalNodeCodes.NODE_02_NAME; - case EvalNodeCodes.NODE_03: - return EvalNodeCodes.NODE_03_NAME; - case EvalNodeCodes.NODE_04: - return EvalNodeCodes.NODE_04_NAME; - case EvalNodeCodes.NODE_05: - return EvalNodeCodes.NODE_05_NAME; - case EvalNodeCodes.NODE_06: - return EvalNodeCodes.NODE_06_NAME; - case EvalNodeCodes.NODE_07: - return EvalNodeCodes.NODE_07_NAME; - case EvalNodeCodes.NODE_08: - return EvalNodeCodes.NODE_08_NAME; - case EvalNodeCodes.ARCHIVED: - return EvalNodeCodes.ARCHIVED_NAME; - default: - return stageCode; - } - } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectDoConvertor.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectDoConvertor.java new file mode 100644 index 0000000..809a6d4 --- /dev/null +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectDoConvertor.java @@ -0,0 +1,13 @@ +package org.qinan.safetyeval.infrastructure.convertor; + +import org.mapstruct.Mapper; +import org.qinan.safetyeval.domain.entity.EvalProjectEntity; +import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO; + +@Mapper(componentModel = "spring") +public interface EvalProjectDoConvertor { + + EvalProjectDO convertEToDo(EvalProjectEntity entity); + + EvalProjectEntity convertDoToE(EvalProjectDO dataObject); +} diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java index 9b5e10b..78d5d02 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java @@ -15,26 +15,19 @@ public class EvalProjectDO { private Long customerId; private String projectNo; private String projectName; - /** 评价类型编码:PRE安全预评价 ACCEPT安全验收评价 STATUS安全现状评价,示例:PRE */ private String evalTypeCode; - /** 评价类型名称:安全预评价/安全验收评价/安全现状评价,示例:安全预评价 */ - private String evalTypeName; - private String businessScope; + private String customerContactName; + private String customerContactPhone; + private String districtCode; private LocalDate planStartDate; private LocalDate planEndDate; - private LocalDate actualStartDate; - private LocalDate actualEndDate; - /** 当前阶段编码:NODE_01风险分析 NODE_02业务合同 NODE_03项目组成立 NODE_04现场踏勘 NODE_05报告编制 NODE_06内部审核 NODE_07技术审核 NODE_08过程控制 ARCHIVED已归档 CANCELLED已作废,示例:NODE_02 */ - private String currentStageCode; - /** 当前阶段名称:风险分析/业务合同/项目组成立/现场踏勘/报告编制/内部审核/技术审核/过程控制/已归档/已作废,示例:业务合同 */ - private String currentStageName; - /** 项目状态编码:1草稿 2进行中 3已归档 4已作废,示例:2 */ - private Integer statusCode; - /** 项目状态名称:草稿/进行中/已归档/已作废,示例:进行中 */ - private String statusName; - private Long leaderPersonnelId; - private String leaderName; - private String cancelReason; + private String customerAddress; + private String longitude; + private String latitude; + private Integer checkinRadiusMeters; + private String participantsJson; + private String projectLeaderName; + private Integer archiveFlag; private String deleteEnum; private String remarks; private String createName; diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java index 0167cb6..fef1274 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java @@ -7,6 +7,7 @@ import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.gateway.EvalProjectGateway; import org.qinan.safetyeval.domain.query.EvalProjectQuery; import org.qinan.safetyeval.domain.query.PageResult; +import org.qinan.safetyeval.infrastructure.convertor.EvalProjectDoConvertor; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; @@ -25,12 +26,19 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { @Resource private EvalProjectMapper evalProjectMapper; + @Resource + private EvalProjectDoConvertor evalProjectDoConvertor; + @Resource private OrgContextResolver orgContextResolver; @Override public EvalProjectEntity save(EvalProjectEntity entity) { - EvalProjectDO dataObject = toDO(entity); + EvalProjectDO dataObject = evalProjectDoConvertor.convertEToDo(entity); + dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); + if (dataObject.getArchiveFlag() == null) { + dataObject.setArchiveFlag(0); + } InsertFieldDefaults.apply(dataObject); evalProjectMapper.insert(dataObject); entity.setId(dataObject.getId()); @@ -43,13 +51,14 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { if (dataObject == null || !"false".equals(dataObject.getDeleteEnum())) { return null; } - return toEntity(dataObject); + return evalProjectDoConvertor.convertDoToE(dataObject); } @Override public EvalProjectEntity modify(EvalProjectEntity entity) { - EvalProjectDO dataObject = toDO(entity); + EvalProjectDO dataObject = evalProjectDoConvertor.convertEToDo(entity); dataObject.setId(entity.getId()); + dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); InsertFieldDefaults.applyForUpdate(dataObject); evalProjectMapper.updateById(dataObject); return get(entity.getId()); @@ -65,7 +74,7 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { Page page = new Page<>(query.getPageNum(), query.getPageSize()); IPage result = evalProjectMapper.selectPage(page, buildQueryWrapper(query)); List entities = result.getRecords().stream() - .map(this::toEntity) + .map(evalProjectDoConvertor::convertDoToE) .collect(Collectors.toList()); return PageResult.of(entities, result.getTotal(), result.getCurrent(), result.getSize()); } @@ -82,11 +91,10 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { } @Override - public void updateLeader(Long projectId, Long leaderPersonnelId, String leaderName) { + public void updateLeader(Long projectId, String leaderName) { EvalProjectDO dataObject = new EvalProjectDO(); dataObject.setId(projectId); - dataObject.setLeaderPersonnelId(leaderPersonnelId); - dataObject.setLeaderName(leaderName); + dataObject.setProjectLeaderName(leaderName); InsertFieldDefaults.applyForUpdate(dataObject); evalProjectMapper.updateById(dataObject); } @@ -100,11 +108,11 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { if (StringUtils.hasText(query.getProjectName())) { wrapper.like(EvalProjectDO::getProjectName, query.getProjectName()); } - if (query.getStatusCode() != null) { - wrapper.eq(EvalProjectDO::getStatusCode, query.getStatusCode()); + if (StringUtils.hasText(query.getProjectLeaderName())) { + wrapper.like(EvalProjectDO::getProjectLeaderName, query.getProjectLeaderName()); } - if (StringUtils.hasText(query.getLeaderName())) { - wrapper.like(EvalProjectDO::getLeaderName, query.getLeaderName()); + if (StringUtils.hasText(query.getCustomerContactName())) { + wrapper.like(EvalProjectDO::getCustomerContactName, query.getCustomerContactName()); } if (query.getPlanStartDateFrom() != null) { wrapper.ge(EvalProjectDO::getPlanStartDate, query.getPlanStartDateFrom()); @@ -118,71 +126,10 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { if (query.getPlanEndDateTo() != null) { wrapper.le(EvalProjectDO::getPlanEndDate, query.getPlanEndDateTo()); } - if (StringUtils.hasText(query.getCurrentStageCode())) { - wrapper.eq(EvalProjectDO::getCurrentStageCode, query.getCurrentStageCode()); - } if (!CollectionUtils.isEmpty(query.getProjectIds())) { wrapper.in(EvalProjectDO::getId, query.getProjectIds()); } - if (query.getCreateTimeFrom() != null) { - wrapper.ge(EvalProjectDO::getCreateTime, query.getCreateTimeFrom()); - } - if (query.getCreateTimeTo() != null) { - wrapper.le(EvalProjectDO::getCreateTime, query.getCreateTimeTo()); - } - wrapper.orderByDesc(EvalProjectDO::getCreateTime); + wrapper.orderByDesc(EvalProjectDO::getPlanStartDate); return wrapper; } - - private EvalProjectDO toDO(EvalProjectEntity entity) { - EvalProjectDO dataObject = new EvalProjectDO(); - dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); - dataObject.setCustomerId(entity.getCustomerId()); - dataObject.setProjectNo(entity.getProjectNo()); - dataObject.setProjectName(entity.getProjectName()); - dataObject.setEvalTypeCode(entity.getEvalTypeCode()); - dataObject.setEvalTypeName(entity.getEvalTypeName()); - dataObject.setBusinessScope(entity.getBusinessScope()); - dataObject.setPlanStartDate(entity.getPlanStartDate()); - dataObject.setPlanEndDate(entity.getPlanEndDate()); - dataObject.setActualStartDate(entity.getActualStartDate()); - dataObject.setActualEndDate(entity.getActualEndDate()); - dataObject.setCurrentStageCode(entity.getCurrentStageCode()); - dataObject.setCurrentStageName(entity.getCurrentStageName()); - dataObject.setStatusCode(entity.getStatusCode()); - dataObject.setStatusName(entity.getStatusName()); - dataObject.setLeaderPersonnelId(entity.getLeaderPersonnelId()); - dataObject.setLeaderName(entity.getLeaderName()); - dataObject.setCancelReason(entity.getCancelReason()); - dataObject.setTenantId(entity.getTenantId()); - return dataObject; - } - - private EvalProjectEntity toEntity(EvalProjectDO dataObject) { - if (dataObject == null) { - return null; - } - EvalProjectEntity entity = new EvalProjectEntity(); - entity.setId(dataObject.getId()); - entity.setOrgId(dataObject.getOrgId()); - entity.setCustomerId(dataObject.getCustomerId()); - entity.setProjectNo(dataObject.getProjectNo()); - entity.setProjectName(dataObject.getProjectName()); - entity.setEvalTypeCode(dataObject.getEvalTypeCode()); - entity.setEvalTypeName(dataObject.getEvalTypeName()); - entity.setBusinessScope(dataObject.getBusinessScope()); - entity.setPlanStartDate(dataObject.getPlanStartDate()); - entity.setPlanEndDate(dataObject.getPlanEndDate()); - entity.setActualStartDate(dataObject.getActualStartDate()); - entity.setActualEndDate(dataObject.getActualEndDate()); - entity.setCurrentStageCode(dataObject.getCurrentStageCode()); - entity.setCurrentStageName(dataObject.getCurrentStageName()); - entity.setStatusCode(dataObject.getStatusCode()); - entity.setStatusName(dataObject.getStatusName()); - entity.setLeaderPersonnelId(dataObject.getLeaderPersonnelId()); - entity.setLeaderName(dataObject.getLeaderName()); - entity.setCancelReason(dataObject.getCancelReason()); - entity.setTenantId(dataObject.getTenantId()); - return entity; - } }