feat: 增加草稿保存提交和状态机接口
This commit is contained in:
parent
f034274557
commit
baabd470c7
@ -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<OpMessageConfigBaseResp> update(@Valid @RequestBody UpdateOpMessageConfigParam param);
|
||||
|
||||
@PostMapping("/api/op-message-config/draft/save")
|
||||
ApiResult<OpMessageConfigBaseResp> saveDraft(@Valid @RequestBody SaveDraftOpMessageConfigParam req);
|
||||
|
||||
@PostMapping("/api/op-message-config/draft/submit")
|
||||
ApiResult<OpMessageConfigBaseResp> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<OpMessageConfigBaseResp> 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<Void> 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<OpMessageConfigBaseResp> 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<OpMessageConfigBaseResp> 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<OpMessageConfigBaseResp> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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, ActionEnum, Status> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,8 +58,6 @@ public interface OpMessageConfigService extends IService<OpMessageConfig> {
|
||||
|
||||
private JSONObject receiveData;
|
||||
|
||||
private String status;
|
||||
|
||||
private String title;
|
||||
|
||||
private String content;
|
||||
@ -78,6 +76,10 @@ public interface OpMessageConfigService extends IService<OpMessageConfig> {
|
||||
|
||||
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<OpMessageConfig> {
|
||||
|
||||
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<OpMessageConfig> {
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private boolean needCreatePersonInfo;
|
||||
|
||||
/**
|
||||
* 返回提交审核人的信息
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private boolean needSubmitPersonInfo;
|
||||
}
|
||||
|
||||
@Builder
|
||||
@ -237,15 +247,19 @@ public interface OpMessageConfigService extends IService<OpMessageConfig> {
|
||||
|
||||
private PersonProfileDto createPersonProfile;
|
||||
|
||||
private PersonProfileDto submitPersonProfile;
|
||||
|
||||
public static OpMessageConfigDTO from(OpMessageConfig opMessageConfig,
|
||||
Map<String, SendUserInfo> sendUserInfos,
|
||||
Map<Long, PersonProfileDto> personProfiles) {
|
||||
Map<Long, PersonProfileDto> createPersonProfiles,
|
||||
Map<Long, PersonProfileDto> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,6 +34,8 @@ import static cn.axzo.nanopart.server.config.BizResultCode.UPDATE_OP_MESSAGE_CON
|
||||
public class OpMessageConfigServiceImpl extends ServiceImpl<OpMessageConfigMapper, OpMessageConfig>
|
||||
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<OpMessageConfigMappe
|
||||
|
||||
Map<String, SendUserInfo> sendUserInfos = listSendUserInfo(param, page.getRecords());
|
||||
|
||||
Map<Long, PersonProfileDto> personProfiles = listCreatePersonProfile(param, page.getRecords());
|
||||
Map<Long, PersonProfileDto> createPersonProfiles = listCreatePersonProfile(param, page.getRecords());
|
||||
Map<Long, PersonProfileDto> 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<OpMessageConfigMappe
|
||||
|
||||
Aassert.check(oldOpMessageConfig.canUpdate(), UPDATE_OP_MESSAGE_CONFIG_STATUS_ERROR);
|
||||
|
||||
this.updateById(param.to());
|
||||
OpMessageConfig opMessageConfig = param.to();
|
||||
if (param.getAction() != null) {
|
||||
opMessageConfig.setStatus(param.getAction().getNextStatus(oldOpMessageConfig.getStatus()));
|
||||
}
|
||||
|
||||
this.updateById(opMessageConfig);
|
||||
return this.getById(param.getId());
|
||||
}
|
||||
|
||||
@ -137,4 +148,24 @@ public class OpMessageConfigServiceImpl extends ServiceImpl<OpMessageConfigMappe
|
||||
.stream()
|
||||
.collect(Collectors.toMap(PersonProfileDto::getId, Function.identity()));
|
||||
}
|
||||
|
||||
private Map<Long, PersonProfileDto> listSubmitPersonProfile(PageOpMessageConfigParam param,
|
||||
List<OpMessageConfig> opMessageConfigs) {
|
||||
if (CollectionUtils.isEmpty(opMessageConfigs) || BooleanUtils.isNotTrue(param.isNeedSubmitPersonInfo())) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
List<Long> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 '更新时间',
|
||||
|
||||
Loading…
Reference in New Issue
Block a user