Merge branch 'feature/REQ-3488-zhh' into 'feature/REQ-3488'

Feature/req 3488 zhh

See merge request universal/infrastructure/backend/orgmanax!137
This commit is contained in:
张弘昊 2025-01-08 09:00:26 +00:00
commit 6d9f60405b
14 changed files with 479 additions and 0 deletions

View File

@ -0,0 +1,23 @@
package cn.axzo.orgmanax.api.project.team.feign;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectTeamLogApi {
/**
* 创建项目班组日志
*/
@PostMapping("/api/project/team-log/create")
ApiResult<Long> create(@RequestBody ProjectTeamLogSaveReq req);
}

View File

@ -0,0 +1,84 @@
package cn.axzo.orgmanax.dto.project.team.req;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ProjectTeamLogSaveReq {
/**
* 项目内班组id
*/
private Long projectTeamId;
/**
* 邀请/申请id
*/
private Long inviteId;
/**
* 变更前状态
*/
private Integer preStatus;
/**
* 当前状态
*/
private Integer nowStatus;
/**
* 变更前状态描述
*/
private String preStatusDesc;
/**
* 当前状态描述
*/
private String nowStatusDesc;
/**
* 变更描述
*/
private String content;
/**
* 操作人姓名
*/
private String operatorName;
/**
* 操作人身份
*/
private String operatorIdentity;
/**
* 操作事件 JOIN_PROJECT:加入项目 QUIT_PROJECT:退出项目 TEAM_INVITE:邀请班组 TEAM_APPLY:班组申请
*/
private String actionType;
/**
* 操作人手机号
*/
private String operatorPhone;
/**
* 操作人标签
*/
private String operatorTag;
/**
* 当前事件事件
*/
private Date eventTime;
}

View File

@ -0,0 +1,16 @@
package cn.axzo.orgmanax.infra.dao.project.team.dao;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeamLog;
import cn.axzo.orgmanax.infra.dao.project.team.mapper.OrgProjectTeamLogMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@Repository
public class OrgProjectTeamLogDao extends ServiceImpl<OrgProjectTeamLogMapper, OrgProjectTeamLog> {
}

View File

@ -0,0 +1,137 @@
package cn.axzo.orgmanax.infra.dao.project.team.entity;
import cn.axzo.trade.datasecurity.core.annotation.CryptField;
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 lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 班组变更日志表
* </p>
*
* @author zhangtianyu
* @since 2022-07-12
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@TableName(value = "org_project_team_log", autoResultMap = true)
public class OrgProjectTeamLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 项目内班组id
*/
@TableField("project_team_id")
private Long projectTeamId;
/**
* 邀请/申请id
*/
@TableField("invite_id")
private Long inviteId;
/**
* 变更前状态
*/
@TableField("pre_status")
private Integer preStatus;
/**
* 当前状态
*/
@TableField("now_status")
private Integer nowStatus;
/**
* 变更前状态描述
*/
@TableField("pre_status_desc")
private String preStatusDesc;
/**
* 当前状态描述
*/
@TableField("now_status_desc")
private String nowStatusDesc;
/**
* 变更描述
*/
@TableField("content")
private String content;
/**
* 是否删除 0否1是
*/
@TableField("is_delete")
private Long isDelete;
/**
* 创建时间
*/
@TableField("create_at")
private Date createAt;
/**
* 更新时间
*/
@TableField("update_at")
private Date updateAt;
/**
* 操作人姓名
*/
@TableField("operator_name")
private String operatorName;
/**
* 操作人身份
*/
@TableField("operator_identity")
private String operatorIdentity;
/**
* 操作事件 JOIN_PROJECT:加入项目 QUIT_PROJECT:退出项目 TEAM_INVITE:邀请班组 TEAM_APPLY:班组申请
*/
@TableField("action_type")
private String actionType;
/**
* 操作人手机号
*/
@TableField("operator_phone")
@CryptField
private String operatorPhone;
/**
* 操作人标签
*/
@TableField("operator_tag")
private String operatorTag;
/**
* 当前事件事件
*/
@TableField("event_time")
private Date eventTime;
}

View File

@ -0,0 +1,9 @@
package cn.axzo.orgmanax.infra.dao.project.team.mapper;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeamLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface OrgProjectTeamLogMapper extends BaseMapper<OrgProjectTeamLog> {
}

View File

@ -0,0 +1,8 @@
package cn.axzo.orgmanax.infra.dao.project.team.repository;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeamLog;
public interface OrgProjectTeamLogUpsertRepository {
Long save(OrgProjectTeamLog orgProjectTeamLog);
}

View File

@ -0,0 +1,25 @@
package cn.axzo.orgmanax.infra.dao.project.team.repository.impl;
import cn.axzo.orgmanax.infra.dao.project.team.dao.OrgProjectTeamLogDao;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeamLog;
import cn.axzo.orgmanax.infra.dao.project.team.repository.OrgProjectTeamLogUpsertRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@RequiredArgsConstructor
@Repository
public class OrgProjectTeamLogUpsertRepositoryImpl implements OrgProjectTeamLogUpsertRepository {
private final OrgProjectTeamLogDao orgProjectTeamLogDao;
@Override
public Long save(OrgProjectTeamLog orgProjectTeamLog) {
orgProjectTeamLogDao.save(orgProjectTeamLog);
return orgProjectTeamLog.getId();
}
}

View File

@ -0,0 +1,27 @@
package cn.axzo.orgmanax.server.project.team.controller;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.project.team.feign.OrgProjectTeamLogApi;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
import cn.axzo.orgmanax.server.project.team.service.ProjectTeamLogService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@RestController
@RequestMapping
@RequiredArgsConstructor
public class OrgProjectTeamLogController implements OrgProjectTeamLogApi {
private final ProjectTeamLogService projectTeamLogService;
@Override
public ApiResult<Long> create(ProjectTeamLogSaveReq req) {
return ApiResult.success(projectTeamLogService.save(req));
}
}

View File

@ -0,0 +1,9 @@
package cn.axzo.orgmanax.server.project.team.foundation;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
public interface ProjectTeamLogFoundationService {
Long save(ProjectTeamLogSaveReq req);
}

View File

@ -0,0 +1,28 @@
package cn.axzo.orgmanax.server.project.team.foundation.impl;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeamLog;
import cn.axzo.orgmanax.infra.dao.project.team.repository.OrgProjectTeamLogUpsertRepository;
import cn.axzo.orgmanax.server.project.team.foundation.ProjectTeamLogFoundationService;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ProjectTeamLogFoundationServiceImpl implements ProjectTeamLogFoundationService {
private final OrgProjectTeamLogUpsertRepository orgProjectTeamLogUpsertRepository;
@Override
public Long save(ProjectTeamLogSaveReq req) {
OrgProjectTeamLog orgProjectTeamLog = BeanUtil.copyProperties(req, OrgProjectTeamLog.class);
return orgProjectTeamLogUpsertRepository.save(orgProjectTeamLog);
}
}

View File

@ -0,0 +1,8 @@
package cn.axzo.orgmanax.server.project.team.service;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
public interface ProjectTeamLogService {
Long save(ProjectTeamLogSaveReq req);
}

View File

@ -0,0 +1,30 @@
package cn.axzo.orgmanax.server.project.team.service.impl;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
import cn.axzo.orgmanax.server.project.team.service.ProjectTeamLogService;
import cn.axzo.orgmanax.server.project.team.service.processor.OrgProjectTeamLogProcessor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ProjectTeamLogServiceImpl implements ProjectTeamLogService {
@Override
public Long save(ProjectTeamLogSaveReq req) {
OrgProjectTeamLogProcessor.ProcessContext<ProjectTeamLogSaveReq> processContext = OrgProjectTeamLogProcessor.ProcessContext.<ProjectTeamLogSaveReq>builder()
.action(OrgProjectTeamLogProcessor.Action.CREATE)
.params(req)
.build();
OrgProjectTeamLogProcessor projectTeamLogProcessor = processContext.getProcessor();
OrgProjectTeamLogProcessor.ProcessResult<Long> processResult = projectTeamLogProcessor.process(processContext);
return processResult.getResult();
}
}

View File

@ -0,0 +1,47 @@
package cn.axzo.orgmanax.server.project.team.service.processor;
import cn.axzo.orgmanax.server.project.team.service.processor.impl.OrgProjectTeamLogSaveProcessor;
import cn.hutool.extra.spring.SpringUtil;
import lombok.*;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.transaction.annotation.Transactional;
public interface OrgProjectTeamLogProcessor<T, R> extends BeanPostProcessor {
@Transactional(rollbackFor = Throwable.class)
OrgProjectTeamLogProcessor.ProcessResult<R> process(OrgProjectTeamLogProcessor.ProcessContext<T> context);
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class ProcessContext<T> {
private OrgProjectTeamLogProcessor.Action action;
private T params;
public OrgProjectTeamLogProcessor 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("创建", OrgProjectTeamLogSaveProcessor.class)
;
private String desc;
private Class<? extends OrgProjectTeamLogProcessor> processorClass;
}
}

View File

@ -0,0 +1,28 @@
package cn.axzo.orgmanax.server.project.team.service.processor.impl;
import cn.axzo.orgmanax.server.project.team.foundation.ProjectTeamLogFoundationService;
import cn.axzo.orgmanax.dto.project.team.req.ProjectTeamLogSaveReq;
import cn.axzo.orgmanax.server.project.team.service.processor.OrgProjectTeamLogProcessor;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/8
*/
@Service
@Slf4j
@AllArgsConstructor
public class OrgProjectTeamLogSaveProcessor implements OrgProjectTeamLogProcessor<ProjectTeamLogSaveReq, Long> {
private final ProjectTeamLogFoundationService foundationService;
@Override
public ProcessResult<Long> process(ProcessContext<ProjectTeamLogSaveReq> context) {
ProjectTeamLogSaveReq saveReq = context.getParams();
Long id = foundationService.save(saveReq);
return OrgProjectTeamLogSaveProcessor.ProcessResult.<Long>builder().result(id).build();
}
}