Merge remote-tracking branch 'refs/remotes/origin/feature/REQ-3488' into feature/REQ-3488-zhh

This commit is contained in:
zhanghonghao 2024-12-26 18:10:09 +08:00
commit 1f57e58a62
17 changed files with 638 additions and 0 deletions

View File

@ -0,0 +1,32 @@
package cn.axzo.orgmanax.api.teamlog.feign;
import cn.axzo.foundation.page.PageResp;
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 org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author zhanghongbo
* @date 2024/12/25
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface TeamLogApi {
/**
* 分页列表接口
* XXX本接口默认分页单页最多返回1000条数据调用方使用时需注意
*
* @param req
* @return
* @see ListNodeUserReq#getPageSize()
*/
@PostMapping("/api/team-log/list")
ApiResult<PageResp<TeamLogDTO>> list(@RequestBody @Validated TeamLogPageReq req);
}

View File

@ -0,0 +1,13 @@
# 查询
POST {{host}}/api/team-log/list
Content-Type: application/json
Accept: application/json
{
"page": 1,
"pageSize": 20,
"teamIds": [10358],
"type": "CHANGE_TEAM_OWNER"
}
###

View File

@ -0,0 +1,66 @@
package cn.axzo.orgmanax.dto.teamlog.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 平台班组变更日志表
* </p>
*
* @author autoGenerator
* @since 2023-04-14
*/
@Data
public class TeamLogDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
private Long id;
/**
* 平台班组id
*/
private Long platTeamId;
/**
* log类型
*/
private String type;
/**
* 变更描述
*/
private String content;
/**
* 相关参数
*/
private String param;
/**
* 操作人身份id
*/
private Long operatorId;
/**
* 是否删除 0否1是
*/
private Long isDelete;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
}

View File

@ -0,0 +1,22 @@
package cn.axzo.orgmanax.dto.teamlog.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 平台班组日志类型
* @author zhangtianyu
* @date 2023/4/14 4:00 PM
**/
@Getter
@AllArgsConstructor
public enum PlatTeamLogType {
/**
* 更换班组长
*/
CHANGE_TEAM_OWNER("更换班组长", "将原班组长%s更换为%s"),
;
private final String desc;
private final String content;
}

View File

@ -0,0 +1,43 @@
package cn.axzo.orgmanax.dto.teamlog.req;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.teamlog.enums.PlatTeamLogType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* @author zhanghongbo
* @date 2024/12/17
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class TeamLogPageReq extends PageReqV2 {
/**
* 平台班组日志类型
*/
@NotNull(message = "type must not null")
private PlatTeamLogType type;
/**
* 班组id列表
*/
private List<Long> teamIds;
/**
* 开始时间(对于创建时间)
*/
private Date start;
/**
* 结束时间(对于创建时间)
*/
private Date end;
}

View File

@ -0,0 +1,19 @@
package cn.axzo.orgmanax.infra.dao.teamlog.dao;
import cn.axzo.orgmanax.infra.dao.teamlog.entity.PlatTeamLog;
import cn.axzo.orgmanax.infra.dao.teamlog.mapper.PlatTeamLogMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 平台班组变更日志表 服务实现类
* </p>
*
* @author autoGenerator
* @since 2023-04-14
*/
@Service
public class PlatTeamLogDao extends ServiceImpl<PlatTeamLogMapper, PlatTeamLog> {
}

View File

@ -0,0 +1,91 @@
package cn.axzo.orgmanax.infra.dao.teamlog.entity;
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.activerecord.Model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 平台班组变更日志表
* </p>
*
* @author autoGenerator
* @since 2023-04-14
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("plat_team_log")
public class PlatTeamLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 平台班组id
*/
@TableField("plat_team_id")
private Long platTeamId;
/**
* log类型
*/
@TableField("type")
private String type;
/**
* 变更描述
*/
@TableField("content")
private String content;
/**
* 相关参数
*/
@TableField("param")
private String param;
/**
* 操作人身份id
*/
@TableField("operator_id")
private Long operatorId;
/**
* 是否删除 0否1是
*/
@TableField("is_delete")
private Long isDelete;
/**
* 创建时间
*/
@TableField("create_at")
private Date createAt;
/**
* 更新时间
*/
@TableField("update_at")
private Date updateAt;
}

View File

@ -0,0 +1,16 @@
package cn.axzo.orgmanax.infra.dao.teamlog.mapper;
import cn.axzo.orgmanax.infra.dao.teamlog.entity.PlatTeamLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 平台班组变更日志表 Mapper 接口
* </p>
*
* @author autoGenerator
* @since 2023-04-14
*/
public interface PlatTeamLogMapper extends BaseMapper<PlatTeamLog> {
}

View File

@ -0,0 +1,107 @@
package cn.axzo.orgmanax.infra.dao.teamlog.repository;
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
import cn.axzo.foundation.dao.support.wrapper.Operator;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.teamlog.enums.PlatTeamLogType;
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
import cn.axzo.orgmanax.infra.dao.teamlog.entity.PlatTeamLog;
import cn.hutool.core.bean.BeanUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* @author zhanghongbo
* @date 2024/12/25
*/
public interface PlatTeamLogRepository {
PageResp<TeamLogResp> page(PageReq req);
default List<TeamLogResp> list(PageReq req) {
return page(req).getData();
}
default TeamLogResp one(OneReq req) {
return oneOpt(req).orElse(null);
}
default Optional<TeamLogResp> oneOpt(OneReq req) {
PageReq page = BeanUtil.toBean(req, PageReq.class);
page.setPage(1);
page.setPageSize(1);
return page(page).getData().stream().findFirst();
}
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class PageReq extends PageReqV2 {
/**
* 主键id
*/
@CriteriaField
private Long id;
/**
* 平台班组日志类型
*/
@CriteriaField
private String type;
/**
* 班组id列表
*/
@CriteriaField(field = "platTeamId", operator = Operator.IN)
private List<Long> teamIds;
/**
* 开始时间(对于创建时间)
*/
@CriteriaField(field = "createAt", operator = Operator.GE)
private Date start;
/**
* 结束时间(对于创建时间)
*/
@CriteriaField(field = "createAt", operator = Operator.LE)
private Date end;
/**
* 是都包含删除(默认走查询未删除)
*/
@CriteriaField(ignore = true)
private Boolean includeDeleted;
}
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class TeamLogResp extends PlatTeamLog {
private String xx;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class OneReq {
/**
* 主键id
*/
private Long id;
}
}

View File

@ -0,0 +1,47 @@
package cn.axzo.orgmanax.infra.dao.teamlog.repository.impl;
import cn.axzo.foundation.dao.support.converter.PageConverter;
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.infra.dao.teamlog.dao.PlatTeamLogDao;
import cn.axzo.orgmanax.infra.dao.teamlog.entity.PlatTeamLog;
import cn.axzo.orgmanax.infra.dao.teamlog.repository.PlatTeamLogRepository;
import cn.axzo.orgmanax.infra.util.CommonUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.BooleanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
/**
* @author zhanghongbo
* @date 2024/12/25
*/
@Repository
@Slf4j
@AllArgsConstructor
public class PlatTeamLogRepositoryImpl implements PlatTeamLogRepository {
private PlatTeamLogDao platTeamLogDao;
@Override
public PageResp<TeamLogResp> page(PageReq req) {
IPage<PlatTeamLog> page = PageConverter.toMybatis(req, PlatTeamLog.class);
QueryWrapper<PlatTeamLog> wrapper = QueryWrapperHelper.fromBean(req, PlatTeamLog.class);
// 处理删除标记
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
wrapper.eq("is_delete", 0);
}
IPage<TeamLogResp> results = platTeamLogDao.page(page, wrapper)
.convert(e -> BeanUtil.toBean(e, TeamLogResp.class));
if (CollUtil.isEmpty(results.getRecords())) {
return CommonUtil.getEmptyPage(req, TeamLogResp.class);
}
return PageConverter.toResp(results);
}
}

View File

@ -0,0 +1,26 @@
package cn.axzo.orgmanax.infra.util;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.foundation.page.PageResp;
import com.baomidou.mybatisplus.extension.api.R;
import com.google.common.collect.ImmutableList;
import lombok.experimental.UtilityClass;
/**
* @author zhanghongbo
* @date 2024/12/26
*/
@UtilityClass
public class CommonUtil {
/**
* 获取空集合分页数据
* @param req
* @param rClass
* @param <R>
* @return
*/
public static <R> PageResp<R> getEmptyPage(PageReqV2 req, Class<R> rClass){
return PageResp.<R>builder().size(req.getPageSize()).current(req.getPage()).total(0L).data(ImmutableList.of()).build();
}
}

View File

@ -7,8 +7,12 @@ import cn.azxo.framework.common.model.CommonResponse;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
@Slf4j
@RestControllerAdvice
@ -29,6 +33,26 @@ public class ExceptionControllerAdvice {
return ApiResult.error(BizResultCode.UNKNOWN_ERROR.getErrorCode(), extractMessage(ex));
}
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ApiResult handleArgumentValidException(MethodArgumentNotValidException e){
log.warn("handleArgumentValidException Exception", e);
BindingResult bindingResult = e.getBindingResult();
StringBuilder errorMsg = new StringBuilder();
for (FieldError fieldError : bindingResult.getFieldErrors()) {
if (-1 == errorMsg.indexOf(fieldError.getDefaultMessage())) {
errorMsg.append(fieldError.getDefaultMessage()).append(",");
}
}
errorMsg.deleteCharAt(errorMsg.length() - 1);
return ApiResult.error(BizResultCode.INVALID_PARAM.getErrorCode(), errorMsg.toString());
}
@ExceptionHandler(value = MethodArgumentTypeMismatchException.class)
public ApiResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e){
log.warn("handleMethodArgumentTypeMismatchException Exception", e);
return ApiResult.error(BizResultCode.INVALID_PARAM.getErrorCode(), e.getMessage());
}
/**
* 捕捉Exception异常
*

View File

@ -0,0 +1,28 @@
package cn.axzo.orgmanax.server.teamlog.controller;
import cn.axzo.foundation.page.PageResp;
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.server.teamlog.service.TeamLogService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zhanghongbo
* @date 2024/12/25
*/
@RestController
@Slf4j
@AllArgsConstructor
public class TeamLogController implements TeamLogApi {
private TeamLogService teamLogService;
@Override
public ApiResult<PageResp<TeamLogDTO>> list(TeamLogPageReq req) {
return ApiResult.success(teamLogService.page(req));
}
}

View File

@ -0,0 +1,13 @@
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;
/**
* @author zhanghongbo
* @date 2024/12/26
*/
public interface TeamLogFoundationService {
PageResp<TeamLogDTO> page(TeamLogPageReq req);
}

View File

@ -0,0 +1,40 @@
package cn.axzo.orgmanax.server.teamlog.foundation.impl;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
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.hutool.core.bean.BeanUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author zhanghongbo
* @date 2024/12/26
*/
@Service
@Slf4j
@AllArgsConstructor
public class TeamLogFoundationServiceImpl implements TeamLogFoundationService {
private PlatTeamLogRepository platTeamLogRepository;
@Override
public PageResp<TeamLogDTO> page(TeamLogPageReq req) {
PlatTeamLogRepository.PageReq pageReq = BeanUtil.copyProperties(req, PlatTeamLogRepository.PageReq.class);
pageReq.setType(req.getType().name());
PageResp<PlatTeamLogRepository.TeamLogResp> page = platTeamLogRepository.page(pageReq);
return PageResp.<TeamLogDTO>builder()
.size(page.getSize())
.current(page.getCurrent())
.total(page.getTotal())
.data(BeanUtil.copyToList(page.getData(), TeamLogDTO.class))
.build();
}
}

View File

@ -0,0 +1,18 @@
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;
/**
* @author zhanghongbo
* @date 2024/12/26
*/
public interface TeamLogService {
/**
* 分页查询班组日志
* @param req
* @return
*/
PageResp<TeamLogDTO> page(TeamLogPageReq req);
}

View File

@ -0,0 +1,33 @@
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.infra.dao.teamlog.repository.PlatTeamLogRepository;
import cn.axzo.orgmanax.server.teamlog.foundation.TeamLogFoundationService;
import cn.axzo.orgmanax.server.teamlog.service.TeamLogService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author zhanghongbo
* @date 2024/12/26
*/
@Service
@Slf4j
@AllArgsConstructor
public class TeamLogServiceImpl implements TeamLogService {
private TeamLogFoundationService teamLogFoundationService;
/**
* 分页查询班组日志
* @param req
* @return
*/
@Override
public PageResp<TeamLogDTO> page(TeamLogPageReq req) {
return teamLogFoundationService.page(req);
}
}