feat(REQ-3282): 增加班组日志创建

This commit is contained in:
zhanghongbo 2024-12-27 16:13:35 +08:00
parent 1a0e4c0237
commit dc6a7c65b6
13 changed files with 318 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@ -24,9 +25,16 @@ public interface TeamLogApi {
*
* @param req
* @return
* @see ListNodeUserReq#getPageSize()
*
*/
@PostMapping("/api/team-log/list")
ApiResult<PageResp<TeamLogDTO>> list(@RequestBody @Validated TeamLogPageReq req);
/**
* 记录班组改变日志
* @param req
* @return
*/
@PostMapping("/api/team-log/record-change-team-owner")
ApiResult<Long> recordChangeTeamOwner(@RequestBody TeamLogRecordChangeTeamOwnerReq req);
}

View File

@ -0,0 +1,32 @@
package cn.axzo.orgmanax.dto.teamlog.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* @author chenwenjian
* @version 1.0
* @date 2024/5/29 19:37
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class TeamLogRecordChangeTeamOwnerReq {
private Long platTeamId;
private TeamOwner oldTeamOwner;
private TeamOwner newTeamOwner;
@Data
public static class TeamOwner {
private Long identityId;
private Long personId;
private String realName;
private Long organizationalUnitId;
}
}

View File

@ -42,6 +42,8 @@ public interface PlatTeamLogRepository {
return page(page).getData().stream().findFirst();
}
Long save(PlatTeamLog platTeamLog);
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor

View File

@ -44,4 +44,10 @@ public class PlatTeamLogRepositoryImpl implements PlatTeamLogRepository {
}
return PageConverter.toResp(results);
}
@Override
public Long save(PlatTeamLog platTeamLog) {
platTeamLogDao.save(platTeamLog);
return platTeamLog.getId();
}
}

View File

@ -5,6 +5,7 @@ import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.teamlog.feign.TeamLogApi;
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
import cn.axzo.orgmanax.server.teamlog.service.TeamLogService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -21,8 +22,26 @@ public class TeamLogController implements TeamLogApi {
private TeamLogService teamLogService;
/**
* 分页列表接口
* XXX本接口默认分页单页最多返回1000条数据调用方使用时需注意
*
* @param req
* @return
*
*/
@Override
public ApiResult<PageResp<TeamLogDTO>> list(TeamLogPageReq req) {
return ApiResult.success(teamLogService.page(req));
}
/**
* 记录班组改变日志
* @param req
* @return
*/
@Override
public ApiResult<Long> recordChangeTeamOwner(TeamLogRecordChangeTeamOwnerReq req) {
return ApiResult.success(teamLogService.recordChangeTeamOwner(req));
}
}

View File

@ -3,6 +3,7 @@ package cn.axzo.orgmanax.server.teamlog.foundation;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.server.teamlog.foundation.dto.TeamLogSaveReq;
/**
* @author zhanghongbo
@ -10,4 +11,6 @@ import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
*/
public interface TeamLogFoundationService {
PageResp<TeamLogDTO> page(TeamLogPageReq req);
Long save(TeamLogSaveReq req);
}

View File

@ -0,0 +1,49 @@
package cn.axzo.orgmanax.server.teamlog.foundation.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 平台班组变更日志表
* </p>
*
* @author autoGenerator
* @since 2023-04-14
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TeamLogSaveReq {
/**
* 平台班组id
*/
private Long platTeamId;
/**
* log类型
*/
private String type;
/**
* 变更描述
*/
private String content;
/**
* 相关参数
*/
private String param;
/**
* 操作人身份id
*/
private Long operatorId;
}

View File

@ -7,6 +7,7 @@ import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.infra.dao.teamlog.entity.PlatTeamLog;
import cn.axzo.orgmanax.infra.dao.teamlog.repository.PlatTeamLogRepository;
import cn.axzo.orgmanax.server.teamlog.foundation.TeamLogFoundationService;
import cn.axzo.orgmanax.server.teamlog.foundation.dto.TeamLogSaveReq;
import cn.hutool.core.bean.BeanUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -37,4 +38,10 @@ public class TeamLogFoundationServiceImpl implements TeamLogFoundationService {
.data(BeanUtil.copyToList(page.getData(), TeamLogDTO.class))
.build();
}
@Override
public Long save(TeamLogSaveReq req) {
PlatTeamLog platTeamLog = BeanUtil.copyProperties(req, PlatTeamLog.class);
return platTeamLogRepository.save(platTeamLog);
}
}

View File

@ -3,6 +3,7 @@ package cn.axzo.orgmanax.server.teamlog.service;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
/**
* @author zhanghongbo
@ -15,4 +16,11 @@ public interface TeamLogService {
* @return
*/
PageResp<TeamLogDTO> page(TeamLogPageReq req);
/**
* 记录班组改变日志
* @param req
* @return
*/
Long recordChangeTeamOwner(TeamLogRecordChangeTeamOwnerReq req);
}

View File

@ -0,0 +1,49 @@
package cn.axzo.orgmanax.server.teamlog.service.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 更换班组长log 参数实体
* @author zhangtianyu
* @date 2023/4/14 4:18 PM
**/
@Data
@Accessors(chain = true)
public class ChangeTeamOwnerLogParam {
/**
* 原班组长身份id
*/
private Long oldTeamOwnerIdentityId;
/**
* 原班组长自然人id
*/
private Long oldTeamOwnerPersonId;
/**
* 原班组长名称
*/
private String oldTeamOwnerName;
/**
* 新班组长身份id
*/
private Long newTeamOwnerIdentityId;
/**
* 新班组长自然人id
*/
private Long newTeamOwnerPersonId;
/**
* 新班组长名称
*/
private String newTeamOwnerName;
/**
* 平台班组id
*/
private Long platTeamId;
/**
* 更换班组长时间
*/
private Date createTime;
}

View File

@ -3,13 +3,20 @@ package cn.axzo.orgmanax.server.teamlog.service.impl;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
import cn.axzo.orgmanax.infra.dao.teamlog.repository.PlatTeamLogRepository;
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
import cn.axzo.orgmanax.server.teamlog.foundation.TeamLogFoundationService;
import cn.axzo.orgmanax.server.teamlog.service.TeamLogService;
import cn.axzo.orgmanax.server.teamlog.service.processor.TeamLogProcessor;
import cn.hutool.extra.spring.SpringUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.swing.*;
/**
* @author zhanghongbo
* @date 2024/12/26
@ -30,4 +37,15 @@ public class TeamLogServiceImpl implements TeamLogService {
public PageResp<TeamLogDTO> page(TeamLogPageReq req) {
return teamLogFoundationService.page(req);
}
@Override
public Long recordChangeTeamOwner(TeamLogRecordChangeTeamOwnerReq req) {
TeamLogProcessor.ProcessContext<TeamLogRecordChangeTeamOwnerReq> processContext = TeamLogProcessor.ProcessContext.<TeamLogRecordChangeTeamOwnerReq>builder()
.action(TeamLogProcessor.Action.CREATE)
.params(req)
.build();
TeamLogProcessor teamLogProcessor = processContext.getProcessor();
TeamLogProcessor.ProcessResult<Long> processResult = teamLogProcessor.process(processContext);
return processResult.getResult();
}
}

View File

@ -0,0 +1,55 @@
package cn.axzo.orgmanax.server.teamlog.service.processor;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
import cn.axzo.orgmanax.server.teamlog.service.processor.impl.RecordChangeTeamOwnerTeamLogProcessor;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.*;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.transaction.annotation.Transactional;
/**
* @author zhanghongbo
* @date 2024/12/27
*/
public interface TeamLogProcessor<T, R> extends BeanPostProcessor {
@Transactional(rollbackFor = Throwable.class)
ProcessResult<R> process(ProcessContext<T> context);
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class ProcessContext<T> {
private Action action;
private T params;
public TeamLogProcessor getProcessor() {
SpringUtil.getBean(action.getProcessorClass());
return SpringUtil.getBean(action.getProcessorClass());
}
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class ProcessResult<R> {
private R result;
}
@Getter
@AllArgsConstructor
enum Action {
CREATE("创建", RecordChangeTeamOwnerTeamLogProcessor.class)
;
private String desc;
private Class<? extends TeamLogProcessor> processorClass;
}
}

View File

@ -0,0 +1,61 @@
package cn.axzo.orgmanax.server.teamlog.service.processor.impl;
import cn.axzo.orgmanax.dto.teamlog.enums.PlatTeamLogType;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
import cn.axzo.orgmanax.infra.dao.teamlog.entity.PlatTeamLog;
import cn.axzo.orgmanax.infra.dao.teamlog.repository.PlatTeamLogRepository;
import cn.axzo.orgmanax.server.teamlog.foundation.TeamLogFoundationService;
import cn.axzo.orgmanax.server.teamlog.foundation.dto.TeamLogSaveReq;
import cn.axzo.orgmanax.server.teamlog.service.dto.ChangeTeamOwnerLogParam;
import cn.axzo.orgmanax.server.teamlog.service.processor.TeamLogProcessor;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @author zhanghongbo
* @date 2024/12/27
*/
@Service
@Slf4j
@AllArgsConstructor
public class RecordChangeTeamOwnerTeamLogProcessor implements TeamLogProcessor<TeamLogRecordChangeTeamOwnerReq, Long> {
private TeamLogFoundationService teamLogFoundationService;
@Override
public ProcessResult<Long> process(ProcessContext<TeamLogRecordChangeTeamOwnerReq> context) {
TeamLogRecordChangeTeamOwnerReq params = context.getParams();
Long platTeamId = params.getPlatTeamId();
TeamLogRecordChangeTeamOwnerReq.TeamOwner oldTeamOwner = params.getOldTeamOwner();
TeamLogRecordChangeTeamOwnerReq.TeamOwner newTeamOwner = params.getNewTeamOwner();
log.info("记录更换班组长日志platTeamId:{},oldTeamOwnerIdentityId:{},newTeamOwnerIdentityId:{}",platTeamId, oldTeamOwner.getIdentityId(), newTeamOwner.getIdentityId());
// 构建参数
ChangeTeamOwnerLogParam changeTeamOwnerLogParam = new ChangeTeamOwnerLogParam()
.setOldTeamOwnerIdentityId(oldTeamOwner.getIdentityId())
.setOldTeamOwnerPersonId(oldTeamOwner.getPersonId())
.setOldTeamOwnerName(oldTeamOwner.getRealName())
.setNewTeamOwnerIdentityId(newTeamOwner.getIdentityId())
.setNewTeamOwnerPersonId(newTeamOwner.getPersonId())
.setNewTeamOwnerName(newTeamOwner.getRealName())
.setPlatTeamId(oldTeamOwner.getOrganizationalUnitId())
.setCreateTime(new Date());
TeamLogSaveReq teamLogSaveReq = TeamLogSaveReq.builder()
.platTeamId(platTeamId)
.operatorId(oldTeamOwner.getIdentityId())
.type(PlatTeamLogType.CHANGE_TEAM_OWNER.name())
.content(String.format(PlatTeamLogType.CHANGE_TEAM_OWNER.getContent(), oldTeamOwner.getRealName(), newTeamOwner.getRealName()))
.param(JSON.toJSONString(changeTeamOwnerLogParam))
.build();
Long id = teamLogFoundationService.save(teamLogSaveReq);
return ProcessResult.<Long>builder().result(id).build();
}
}