diff --git a/op/op-api/src/main/java/cn/axzo/op/api/OpMessageConfigApi.java b/op/op-api/src/main/java/cn/axzo/op/api/OpMessageConfigApi.java index cc9b4e19..2d6608ba 100644 --- a/op/op-api/src/main/java/cn/axzo/op/api/OpMessageConfigApi.java +++ b/op/op-api/src/main/java/cn/axzo/op/api/OpMessageConfigApi.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.springframework.cloud.openfeign.FeignClient; @@ -32,6 +33,12 @@ public interface OpMessageConfigApi { @PostMapping("/api/op-message-config/update") ApiResult update(@Valid @RequestBody UpdateOpMessageConfigParam param); + @PostMapping("/api/op-message-config/draft/save") + ApiResult saveDraft(@Valid @RequestBody SaveDraftOpMessageConfigParam req); + + @PostMapping("/api/op-message-config/draft/submit") + ApiResult submitDraft(@Valid @RequestBody SaveDraftOpMessageConfigParam req); + @Builder @Data @NoArgsConstructor @@ -47,7 +54,7 @@ public interface OpMessageConfigApi { private JSONObject receiveData; - private Status status; + private ActionEnum action; private String title; @@ -65,10 +72,15 @@ public interface OpMessageConfigApi { private Date planStartTime; - @NotNull(message = "updatePersonId不能为空") - private Long updatePersonId; + @NotNull(message = "operatePersonId不能为空") + private Long operatePersonId; } + @Getter + @AllArgsConstructor + enum ActionEnum { + SUBMIT_DRAFT + } @Builder @Data @NoArgsConstructor @@ -78,8 +90,8 @@ public interface OpMessageConfigApi { @NotNull(message = "id不能为空") private Long id; - @NotNull(message = "deletePersonId不能为空") - private Long deletePersonId; + @NotNull(message = "operatePersonId不能为空") + private Long operatePersonId; } @Builder @@ -111,8 +123,8 @@ public interface OpMessageConfigApi { private Date planStartTime; - @NotNull(message = "createPersonId不能为空") - private Long createPersonId; + @NotNull(message = "operatePersonId不能为空") + private Long operatePersonId; } @SuperBuilder @@ -146,6 +158,11 @@ public interface OpMessageConfigApi { * 返回创建人的信息 */ private boolean needCreatePersonInfo; + + /** + * 返回提交审核人的信息 + */ + private boolean needSubmitPersonInfo; } @SuperBuilder @@ -171,6 +188,8 @@ public interface OpMessageConfigApi { private SendUserInfo sendUserInfo; private PersonProfileDto createPersonProfile; + + private PersonProfileDto submitPersonProfile; } @Data @@ -282,4 +301,38 @@ public interface OpMessageConfigApi { COMPLETED, ; } + + @Builder + @Data + @NoArgsConstructor + @AllArgsConstructor + class SaveDraftOpMessageConfigParam { + + private Long id; + + private String name; + + private String sendImAccount; + + private JSONObject receiveData; + + private String title; + + private String content; + + private String contentType; + + private String coverImg; + + private JSONObject jumpData; + + private JSONObject pushData; + + private JSONObject ext; + + private Date planStartTime; + + @NotNull(message = "operatePersonId不能为空") + private Long operatePersonId; + } } diff --git a/op/op-server/src/main/java/cn/axzo/nanopart/server/config/BizResultCode.java b/op/op-server/src/main/java/cn/axzo/nanopart/server/config/BizResultCode.java index bcfd7325..542ccbbc 100644 --- a/op/op-server/src/main/java/cn/axzo/nanopart/server/config/BizResultCode.java +++ b/op/op-server/src/main/java/cn/axzo/nanopart/server/config/BizResultCode.java @@ -10,7 +10,9 @@ public enum BizResultCode implements ResultCode { OP_MESSAGE_CONFIG_NOT_FOUND("100", "运营消息配置不存在"), DELETE_OP_MESSAGE_CONFIG_STATUS_ERROR("101", "删除运营消息配置失败,状态异常"), - UPDATE_OP_MESSAGE_CONFIG_STATUS_ERROR("102", "更新运营消息配置失败,状态异常"),; + UPDATE_OP_MESSAGE_CONFIG_STATUS_ERROR("102", "更新运营消息配置失败,状态异常"), + OP_MESSAGE_CONFIG_ID_NOT_NULL("103", "id不能为空"), + OP_MESSAGE_CONFIG_STATUS_ERROR("104", "操作运营消息配置失败,状态异常"),; private String errorCode; diff --git a/op/op-server/src/main/java/cn/axzo/nanopart/server/controller/OpMessageConfigController.java b/op/op-server/src/main/java/cn/axzo/nanopart/server/controller/OpMessageConfigController.java index 21b31d47..5b942a33 100644 --- a/op/op-server/src/main/java/cn/axzo/nanopart/server/controller/OpMessageConfigController.java +++ b/op/op-server/src/main/java/cn/axzo/nanopart/server/controller/OpMessageConfigController.java @@ -5,11 +5,14 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.nanopart.server.domain.OpMessageConfig; import cn.axzo.nanopart.server.service.OpMessageConfigService; import cn.axzo.op.api.OpMessageConfigApi; +import cn.axzo.pokonyan.exception.Aassert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; +import static cn.axzo.nanopart.server.config.BizResultCode.OP_MESSAGE_CONFIG_ID_NOT_NULL; + @RestController public class OpMessageConfigController implements OpMessageConfigApi { @@ -41,6 +44,12 @@ public class OpMessageConfigController implements OpMessageConfigApi { opMessageConfigResp.setCreatePersonProfile(createPersonProfile); } + if (record.getSubmitPersonProfile() != null) { + PersonProfileDto submitPersonProfile = PersonProfileDto.builder().build(); + BeanUtils.copyProperties(record.getSubmitPersonProfile(), submitPersonProfile); + opMessageConfigResp.setCreatePersonProfile(submitPersonProfile); + } + return opMessageConfigResp; })); } @@ -49,19 +58,19 @@ public class OpMessageConfigController implements OpMessageConfigApi { public ApiResult create(CreateOpMessageConfigParam param) { OpMessageConfigService.CreateOpMessageConfigParam createOpMessageConfigParam = OpMessageConfigService.CreateOpMessageConfigParam.builder().build(); BeanUtils.copyProperties(param, createOpMessageConfigParam); + // 默认状态为待执行,创建人就是提交审核人 + createOpMessageConfigParam.setSubmitPersonId(param.getOperatePersonId()); + createOpMessageConfigParam.setCreatePersonId(param.getOperatePersonId()); OpMessageConfig opMessageConfig = opMessageConfigService.create(createOpMessageConfigParam); - - OpMessageConfigBaseResp opMessageConfigResp = OpMessageConfigBaseResp.builder().build();; - BeanUtils.copyProperties(opMessageConfig, opMessageConfigResp); - return ApiResult.ok(opMessageConfigResp); + return ApiResult.ok(to(opMessageConfig)); } @Override public ApiResult delete(DeleteOpMessageConfigParam param) { OpMessageConfigService.DeleteOpMessageConfigParam deleteOpMessageConfigParam = OpMessageConfigService.DeleteOpMessageConfigParam.builder() .id(param.getId()) - .deletePersonId(param.getDeletePersonId()) + .deletePersonId(param.getOperatePersonId()) .build(); opMessageConfigService.delete(deleteOpMessageConfigParam); return ApiResult.ok(); @@ -71,11 +80,50 @@ public class OpMessageConfigController implements OpMessageConfigApi { public ApiResult update(UpdateOpMessageConfigParam param) { OpMessageConfigService.UpdateOpMessageConfigParam updateOpMessageConfigParam = OpMessageConfigService.UpdateOpMessageConfigParam.builder().build(); BeanUtils.copyProperties(param, updateOpMessageConfigParam); + updateOpMessageConfigParam.setUpdatePersonId(param.getOperatePersonId()); OpMessageConfig opMessageConfig = opMessageConfigService.update(updateOpMessageConfigParam); + return ApiResult.ok(to(opMessageConfig)); + } + @Override + public ApiResult saveDraft(SaveDraftOpMessageConfigParam req) { + + if (req.getId() == null) { + OpMessageConfigService.CreateOpMessageConfigParam createOpMessageConfigParam = OpMessageConfigService.CreateOpMessageConfigParam.builder().build(); + BeanUtils.copyProperties(req, createOpMessageConfigParam); + createOpMessageConfigParam.setStatus(OpMessageConfig.Status.DRAFT.name()); + createOpMessageConfigParam.setCreatePersonId(req.getOperatePersonId()); + + OpMessageConfig opMessageConfig = opMessageConfigService.create(createOpMessageConfigParam); + return ApiResult.ok(to(opMessageConfig)); + } + + OpMessageConfigService.UpdateOpMessageConfigParam updateOpMessageConfigParam = OpMessageConfigService.UpdateOpMessageConfigParam.builder().build(); + BeanUtils.copyProperties(req, updateOpMessageConfigParam); + updateOpMessageConfigParam.setUpdatePersonId(req.getOperatePersonId()); + + OpMessageConfig opMessageConfig = opMessageConfigService.update(updateOpMessageConfigParam); + return ApiResult.ok(to(opMessageConfig)); + } + + @Override + public ApiResult submitDraft(SaveDraftOpMessageConfigParam req) { + Aassert.notNull(req.getId(), OP_MESSAGE_CONFIG_ID_NOT_NULL); + + OpMessageConfigService.UpdateOpMessageConfigParam updateOpMessageConfigParam = OpMessageConfigService.UpdateOpMessageConfigParam.builder().build(); + BeanUtils.copyProperties(req, updateOpMessageConfigParam); + updateOpMessageConfigParam.setAction(OpMessageConfig.ActionEnum.SUBMIT_DRAFT); + updateOpMessageConfigParam.setUpdatePersonId(req.getOperatePersonId()); + + OpMessageConfig opMessageConfig = opMessageConfigService.update(updateOpMessageConfigParam); + return ApiResult.ok(to(opMessageConfig)); + } + + public OpMessageConfigBaseResp to(OpMessageConfig opMessageConfig) { OpMessageConfigBaseResp opMessageConfigResp = OpMessageConfigBaseResp.builder().build();; BeanUtils.copyProperties(opMessageConfig, opMessageConfigResp); - return ApiResult.ok(opMessageConfigResp); + opMessageConfigResp.setStatus(opMessageConfig.getStatus().name()); + return opMessageConfigResp; } } diff --git a/op/op-server/src/main/java/cn/axzo/nanopart/server/domain/OpMessageConfig.java b/op/op-server/src/main/java/cn/axzo/nanopart/server/domain/OpMessageConfig.java index e3ad55b7..dbcaf779 100644 --- a/op/op-server/src/main/java/cn/axzo/nanopart/server/domain/OpMessageConfig.java +++ b/op/op-server/src/main/java/cn/axzo/nanopart/server/domain/OpMessageConfig.java @@ -1,19 +1,24 @@ package cn.axzo.nanopart.server.domain; +import cn.axzo.nanopart.server.config.BizResultCode; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +import com.google.common.collect.HashBasedTable; import com.google.common.collect.Sets; +import com.google.common.collect.Table; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import lombok.experimental.SuperBuilder; import java.util.Date; +import java.util.Optional; import java.util.Set; @Data @@ -120,6 +125,12 @@ public class OpMessageConfig { @TableField private Long updatePersonId; + /** + * 提交审核人 + */ + @TableField + private Long submitPersonId; + public enum Status { DRAFT, PENDING, @@ -135,4 +146,21 @@ public class OpMessageConfig { public boolean canUpdate() { return CAN_UPDATE_STATUSES.contains(this.getStatus()); } + + @Getter + @AllArgsConstructor + public enum ActionEnum { + SUBMIT_DRAFT, + ; + + private static final Table STATUS_FLOWS = HashBasedTable.create(); + + static { + STATUS_FLOWS.put(Status.DRAFT, SUBMIT_DRAFT, Status.PENDING); + } + + public Status getNextStatus(Status oldStatus) { + return Optional.ofNullable(STATUS_FLOWS.get(oldStatus, this)).orElseThrow(BizResultCode.OP_MESSAGE_CONFIG_STATUS_ERROR::toException); + } + } } diff --git a/op/op-server/src/main/java/cn/axzo/nanopart/server/service/OpMessageConfigService.java b/op/op-server/src/main/java/cn/axzo/nanopart/server/service/OpMessageConfigService.java index 1ab390c5..893e46f2 100644 --- a/op/op-server/src/main/java/cn/axzo/nanopart/server/service/OpMessageConfigService.java +++ b/op/op-server/src/main/java/cn/axzo/nanopart/server/service/OpMessageConfigService.java @@ -58,8 +58,6 @@ public interface OpMessageConfigService extends IService { private JSONObject receiveData; - private String status; - private String title; private String content; @@ -78,6 +76,10 @@ public interface OpMessageConfigService extends IService { private Long updatePersonId; + private Long submitPersonId; + + private OpMessageConfig.ActionEnum action; + public OpMessageConfig to() { OpMessageConfig opMessageConfig = OpMessageConfig.builder().build(); BeanUtils.copyProperties(this, opMessageConfig); @@ -116,6 +118,8 @@ public interface OpMessageConfigService extends IService { private Long createPersonId; + private Long submitPersonId; + public OpMessageConfig to() { OpMessageConfig opMessageConfig = OpMessageConfig.builder().build(); BeanUtils.copyProperties(this, opMessageConfig); @@ -163,6 +167,12 @@ public interface OpMessageConfigService extends IService { */ @CriteriaField(ignore = true) private boolean needCreatePersonInfo; + + /** + * 返回提交审核人的信息 + */ + @CriteriaField(ignore = true) + private boolean needSubmitPersonInfo; } @Builder @@ -237,15 +247,19 @@ public interface OpMessageConfigService extends IService { private PersonProfileDto createPersonProfile; + private PersonProfileDto submitPersonProfile; + public static OpMessageConfigDTO from(OpMessageConfig opMessageConfig, Map sendUserInfos, - Map personProfiles) { + Map createPersonProfiles, + Map submitPersonProfiles) { OpMessageConfigDTO opMessageConfigDTO = OpMessageConfigDTO.builder().build(); BeanUtils.copyProperties(opMessageConfig, opMessageConfigDTO); opMessageConfigDTO.setSendUserInfo(sendUserInfos.get(opMessageConfigDTO.getSendImAccount())); - opMessageConfigDTO.setCreatePersonProfile(personProfiles.get(opMessageConfigDTO.getCreatePersonId())); + opMessageConfigDTO.setCreatePersonProfile(createPersonProfiles.get(opMessageConfigDTO.getCreatePersonId())); + opMessageConfigDTO.setSubmitPersonProfile(submitPersonProfiles.get(opMessageConfigDTO.getSubmitPersonId())); return opMessageConfigDTO; } } diff --git a/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java b/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java index 4dfc398a..8151f6b3 100644 --- a/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java +++ b/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java @@ -34,6 +34,8 @@ import static cn.axzo.nanopart.server.config.BizResultCode.UPDATE_OP_MESSAGE_CON public class OpMessageConfigServiceImpl extends ServiceImpl implements OpMessageConfigService { + private static final Long DEFAULT_ZERO_PERSON_ID = 0L; + @Autowired private RobotInfoApi robotInfoApi; @Autowired @@ -47,9 +49,13 @@ public class OpMessageConfigServiceImpl extends ServiceImpl sendUserInfos = listSendUserInfo(param, page.getRecords()); - Map personProfiles = listCreatePersonProfile(param, page.getRecords()); + Map createPersonProfiles = listCreatePersonProfile(param, page.getRecords()); + Map submitPersonProfiles = listSubmitPersonProfile(param, page.getRecords()); - return PageConverter.convert(page, (record) -> OpMessageConfigDTO.from(record, sendUserInfos, personProfiles)); + return PageConverter.convert(page, (record) -> OpMessageConfigDTO.from(record, + sendUserInfos, + submitPersonProfiles, + submitPersonProfiles)); } @Override @@ -66,7 +72,12 @@ public class OpMessageConfigServiceImpl extends ServiceImpl listSubmitPersonProfile(PageOpMessageConfigParam param, + List opMessageConfigs) { + if (CollectionUtils.isEmpty(opMessageConfigs) || BooleanUtils.isNotTrue(param.isNeedSubmitPersonInfo())) { + return Collections.emptyMap(); + } + + List submitPersonIds = opMessageConfigs.stream() + .map(OpMessageConfig::getSubmitPersonId) + .filter(id -> !Objects.equals(DEFAULT_ZERO_PERSON_ID, id)) + .distinct() + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(submitPersonIds)) { + return Collections.emptyMap(); + } + + return userProfileServiceApi.postPersonProfiles(submitPersonIds).getData() + .stream() + .collect(Collectors.toMap(PersonProfileDto::getId, Function.identity())); + } } diff --git a/op/op-server/src/test/resources/mysql/schema.sql b/op/op-server/src/test/resources/mysql/schema.sql index a2383ac5..04d08ae3 100644 --- a/op/op-server/src/test/resources/mysql/schema.sql +++ b/op/op-server/src/test/resources/mysql/schema.sql @@ -20,6 +20,7 @@ CREATE TABLE IF NOT EXISTS op_message_config is_delete tinyint default 0 not null comment '未删除0,删除1', create_at datetime default CURRENT_TIMESTAMP not null comment '创建时间', create_person_id bigint not null comment '创建人id', + submit_person_id bigint not null default 0 comment '提交审核人id,可能跟crate_person_id不一样,比如先保存草稿', delete_person_id bigint not null default 0 comment '删除人id', update_person_id bigint not null default 0 comment '更新人id', update_at datetime default CURRENT_TIMESTAMP not null comment '更新时间',