feat(REQ-3488): 提供项目内班组列表查询接口

This commit is contained in:
zhanghonghao 2024-12-30 17:59:59 +08:00
parent 69631d9981
commit 4109e0214f
13 changed files with 571 additions and 11 deletions

View File

@ -0,0 +1,27 @@
package cn.axzo.orgmanax.api.project.team.feign;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.team.dto.OrgProjectTeamDTO;
import cn.axzo.orgmanax.dto.project.team.req.ListProjectTeamReq;
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;
import java.util.List;
/**
* 项目内班组api
* 业务表
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgProjectTeamApi {
/**
* 列表接口
*/
@PostMapping("/api/org/project-team/list")
ApiResult<List<OrgProjectTeamDTO>> list(@RequestBody @Validated ListProjectTeamReq req);
}

View File

@ -0,0 +1,107 @@
package cn.axzo.orgmanax.dto.project.team.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/30
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
public class OrgProjectTeamDTO implements Serializable {
private Long id;
/**
* 工作台ID
*/
private Long workspaceId;
/**
* 总包ID
*/
private Long entId;
/**
* 所属单位ID
*/
private Long organizationalUnitId;
/**
* 所属单位类型: 1:总包 4:专业分包 5:劳务分包
*/
private Integer organizationalUnitType;
/**
* 项目内班组组织节点ID
*/
private Long organizationalNodeId;
/**
* 项目外班组id
*/
private Long platTeamId;
/**
* 班组长身份id
*/
private Long teamLeaderId;
/**
* 状态1-履约中 2-已退场 3-待履约
*/
private Integer status;
/**
* 班组进场时间
*/
private Date joinAt;
/**
* 班组退场时间
*/
private Date resignAt;
/**
* 工期要求开始时间
*/
private Date beginDate;
/**
* 工期要求结束时间
*/
private Date endDate;
/**
* 班组入驻编号(前端展示)
*/
private String settledCode;
/**
* 是否删除 0: 其他删除
*/
private Integer isDelete;
/**
* 创建时间
*/
private Date createAt;
private Date updateAt;
/**
* 工人进场方式 1-普通进场 2-任务单进场
*/
private Integer enterProjectType = 1;
}

View File

@ -1,11 +1,12 @@
package cn.axzo.orgmanax.dto.project.team.enums; package cn.axzo.orgmanax.dto.project.team.enums;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/** /**
* @description * @description

View File

@ -0,0 +1,46 @@
package cn.axzo.orgmanax.dto.project.team.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.List;
import java.util.Set;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/30
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class ListProjectTeamReq {
private Long id;
private Set<Long> ids;
private Set<Integer> statusList;
private Long teamLeaderId;
private Set<Long> teamLeaderIds;
private Long platTeamId;
private Set<Long> platTeamIds;
private Long workspaceId;
private Set<Long> workspaceIds;
private Long organizationalNodeId;
private Set<Long> organizationalNodeIdList;
private Boolean includeDeleted;
private List<String> sort;
}

View File

@ -9,7 +9,6 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import java.util.List;
import java.util.Set; import java.util.Set;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ -63,11 +62,5 @@ public class ListUnitReq extends PageReqV2 {
*/ */
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
private Boolean includeDeleted; private Boolean includeDeleted;
@CriteriaField(ignore = true)
Integer page;
@CriteriaField(ignore = true)
Integer pageSize;
@CriteriaField(ignore = true)
List<String> sort;
} }

View File

@ -0,0 +1,15 @@
package cn.axzo.orgmanax.infra.dao.project.team.dao;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeam;
import cn.axzo.orgmanax.infra.dao.project.team.mapper.OrgProjectTeamMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/30
*/
@Repository
public class OrgProjectTeamDao extends ServiceImpl<OrgProjectTeamMapper, OrgProjectTeam> {
}

View File

@ -0,0 +1,125 @@
package cn.axzo.orgmanax.infra.dao.project.team.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.util.Date;
/**
* 项目内班组
*
* @since 2022-07-12
*/
@TableName(value = "org_project_team", autoResultMap = true)
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = false)
public class OrgProjectTeam implements Serializable {
/**
* 主键
*/
@TableId(
type = IdType.AUTO
)
private Long id;
/**
* 工作台ID
*/
private Long workspaceId;
/**
* 总包ID
*/
private Long entId;
/**
* 所属单位ID
*/
private Long organizationalUnitId;
/**
* 所属单位类型: 1:总包 4:专业分包 5:劳务分包
*/
private Integer organizationalUnitType;
/**
* 项目内班组组织节点ID
*/
private Long organizationalNodeId;
/**
* 项目外班组id
*/
private Long platTeamId;
/**
* 班组长身份id
*/
private Long teamLeaderId;
/**
* 状态1-履约中 2-已退场 3-待履约
*/
private Integer status;
/**
* 班组进场时间
*/
private Date joinAt;
/**
* 班组退场时间
*/
private Date resignAt;
/**
* 工期要求开始时间
*/
private Date beginDate;
/**
* 工期要求结束时间
*/
private Date endDate;
/**
* 班组入驻编号(前端展示)
*/
private String settledCode;
/**
* 工人进场方式 1-普通进场 2-任务单进场
*/
private Integer enterProjectType = 1;
private Integer syncState;
/**
* 是否删除 0否,其他是
*/
private Long isDelete = 0L;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
}

View File

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

View File

@ -0,0 +1,119 @@
package cn.axzo.orgmanax.infra.dao.project.team.repository;
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
import cn.axzo.foundation.dao.support.wrapper.Operator;
import cn.axzo.foundation.page.IPageReq;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeam;
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.List;
import java.util.Optional;
import java.util.Set;
public interface OrgProjectTeamQueryRepository {
PageResp<OrgProjectTeamResp> page(ListReq paramReq);
default List<OrgProjectTeamResp> list(ListReq req) {
PageReq pageReq = BeanUtil.toBean(req, PageReq.class);
pageReq.setPage(1);
pageReq.setPageSize(1000);
return page(pageReq).getData();
}
default OrgProjectTeamResp one(OneReq req) {
return oneOpt(req).orElse(null);
}
default Optional<OrgProjectTeamResp> oneOpt(OneReq req) {
req.check();
PageReq page = BeanUtil.toBean(req, PageReq.class);
page.setPage(1);
page.setPageSize(1);
return page(page).getData().stream().findFirst();
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class OneReq {
/**
* id
*/
private Long id;
/**
* id集合
*/
private Set<Long> ids;
public void check() {
}
}
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class ListReq extends PageReqV2 {
@CriteriaField
private Long id;
@CriteriaField(field = "id", operator = Operator.IN)
private Set<Long> ids;
@CriteriaField(field = "status", operator = Operator.IN)
private Set<Integer> statusList;
@CriteriaField
private Long teamLeaderId;
@CriteriaField(field = "teamLeaderId", operator = Operator.IN)
private Set<Long> teamLeaderIds;
@CriteriaField
private Long platTeamId;
@CriteriaField(field = "platTeamId", operator = Operator.IN)
private Set<Long> platTeamIds;
@CriteriaField
private Long workspaceId;
@CriteriaField(field = "workspaceId", operator = Operator.IN)
private Set<Long> workspaceIds;
@CriteriaField
private Long organizationalNodeId;
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
private Set<Long> organizationalNodeIdList;
@CriteriaField(ignore = true)
private Boolean includeDeleted;
}
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class PageReq extends ListReq implements IPageReq {
@CriteriaField(ignore = true)
Integer page;
@CriteriaField(ignore = true)
Integer pageSize;
@CriteriaField(ignore = true)
List<String> sort;
}
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class OrgProjectTeamResp extends OrgProjectTeam {
// 按需扩展字段占个位避免报错
private String todo;
}
}

View File

@ -0,0 +1,45 @@
package cn.axzo.orgmanax.infra.dao.project.team.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.project.team.dao.OrgProjectTeamDao;
import cn.axzo.orgmanax.infra.dao.project.team.entity.OrgProjectTeam;
import cn.axzo.orgmanax.infra.dao.project.team.repository.OrgProjectTeamQueryRepository;
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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/30
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class OrgProjectTeamQueryRepositoryImpl implements OrgProjectTeamQueryRepository {
private final OrgProjectTeamDao orgProjectTeamDao;
@Override
public PageResp<OrgProjectTeamResp> page(ListReq req) {
IPage<OrgProjectTeam> page = PageConverter.toMybatis(req, OrgProjectTeam.class);
QueryWrapper<OrgProjectTeam> wrapper = QueryWrapperHelper.fromBean(req, OrgProjectTeam.class);
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
wrapper.eq("is_delete", 0);
}
IPage<OrgProjectTeamQueryRepository.OrgProjectTeamResp> results = orgProjectTeamDao.page(page, wrapper).convert(e -> BeanUtil.toBean(e, OrgProjectTeamQueryRepository.OrgProjectTeamResp.class));
PageResp<OrgProjectTeamQueryRepository.OrgProjectTeamResp> resp = PageConverter.toResp(results);
List<OrgProjectTeamQueryRepository.OrgProjectTeamResp> records = resp.getData();
CollUtil.isEmpty(records);
return resp;
}
}

View File

@ -0,0 +1,29 @@
package cn.axzo.orgmanax.server.project.team.controller;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.project.team.feign.OrgProjectTeamApi;
import cn.axzo.orgmanax.dto.project.team.dto.OrgProjectTeamDTO;
import cn.axzo.orgmanax.dto.project.team.req.ListProjectTeamReq;
import cn.axzo.orgmanax.server.project.team.service.ProjectTeamService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/30
*/
@RestController
@RequestMapping
@RequiredArgsConstructor
public class OrgProjectTeamController implements OrgProjectTeamApi {
private final ProjectTeamService projectTeamService;
@Override
public ApiResult<List<OrgProjectTeamDTO>> list(ListProjectTeamReq req) {
return ApiResult.success(projectTeamService.list(req));
}
}

View File

@ -0,0 +1,11 @@
package cn.axzo.orgmanax.server.project.team.service;
import cn.axzo.orgmanax.dto.project.team.dto.OrgProjectTeamDTO;
import cn.axzo.orgmanax.dto.project.team.req.ListProjectTeamReq;
import java.util.List;
public interface ProjectTeamService {
List<OrgProjectTeamDTO> list(ListProjectTeamReq req);
}

View File

@ -0,0 +1,32 @@
package cn.axzo.orgmanax.server.project.team.service.impl;
import cn.axzo.orgmanax.dto.project.team.dto.OrgProjectTeamDTO;
import cn.axzo.orgmanax.dto.project.team.req.ListProjectTeamReq;
import cn.axzo.orgmanax.infra.dao.project.team.repository.OrgProjectTeamQueryRepository;
import cn.axzo.orgmanax.server.project.team.service.ProjectTeamService;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2024/12/30
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ProjectTeamServiceImpl implements ProjectTeamService {
private final OrgProjectTeamQueryRepository orgProjectTeamQueryRepository;
@Override
public List<OrgProjectTeamDTO> list(ListProjectTeamReq req) {
OrgProjectTeamQueryRepository.ListReq listReq = BeanUtil.copyProperties(req, OrgProjectTeamQueryRepository.ListReq.class);
List<OrgProjectTeamQueryRepository.OrgProjectTeamResp> projectTeamResps = orgProjectTeamQueryRepository.list(listReq);
return BeanUtil.copyToList(projectTeamResps, OrgProjectTeamDTO.class);
}
}