feat(REQ-3488): 增加获取有效工人工种接口
This commit is contained in:
parent
6c5a407930
commit
d49656e26d
@ -0,0 +1,58 @@
|
||||
package cn.axzo.orgmanax.api.projectworker.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 项目工人状态:1已进场,2已离场
|
||||
*
|
||||
* @author jerry
|
||||
* @date 2020/6/28
|
||||
*/
|
||||
@Getter
|
||||
public enum ProjectWorkerStatusEnum {
|
||||
/**
|
||||
* 未激活
|
||||
*/
|
||||
INACTIVE(0, "未激活"),
|
||||
/**
|
||||
* 已激活
|
||||
*/
|
||||
ACTIVE(1, "已激活"),
|
||||
/**
|
||||
* 施工中
|
||||
* 目前项目内工人表的在岗状态 occupy_status 来表示
|
||||
*/
|
||||
@Deprecated
|
||||
WORKING(2, "施工中"),
|
||||
/**
|
||||
* 离场
|
||||
*/
|
||||
LEAVE(3, "离场"),
|
||||
|
||||
WITHDRAW(4, "退场"),
|
||||
;
|
||||
|
||||
public final int value;
|
||||
|
||||
public final String desc;
|
||||
|
||||
ProjectWorkerStatusEnum(int value, String desc) {
|
||||
this.value = value;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public static String getDescByValue(Integer value) {
|
||||
ProjectWorkerStatusEnum[] values = ProjectWorkerStatusEnum.values();
|
||||
for (ProjectWorkerStatusEnum statusEnum : values) {
|
||||
if (statusEnum.value == value) {
|
||||
return statusEnum.desc;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public boolean is(int value) {
|
||||
return this.value == value;
|
||||
}
|
||||
|
||||
}
|
||||
@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
@FeignClient(
|
||||
value = "orgmanax",
|
||||
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
|
||||
public interface TeamLogApi {
|
||||
public interface OrgTeamLogApi {
|
||||
/**
|
||||
* 分页列表接口。
|
||||
* XXX:本接口默认分页,单页最多返回1000条数据。调用方使用时需注意。
|
||||
@ -3,25 +3,18 @@ package cn.axzo.orgmanax.api.workerprofession.feign;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.foundation.result.ApiResult;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.PageTeamProfessionsReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListValidReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionSortOutProfessionCategoryReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionUpdateReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationConfigureReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationRemoveReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationUpsertReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagOperationValidUpdateReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagQueryPageReq;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.*;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.resp.OrgWorkerProfessionResp;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.resp.WorkerProfessionTagResp;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.validation.Valid;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp;
|
||||
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 javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/3
|
||||
@ -97,7 +90,7 @@ public interface OrgProjectWorkerProfessionApi {
|
||||
* @return
|
||||
*/
|
||||
@PostMapping(value = "/api/worker/profession/page")
|
||||
ApiResult<PageResp<WorkerProfessionTagResp>> page(@RequestBody @Validated WorkerProfessionTagQueryPageReq req);
|
||||
ApiResult<PageResp<ProjectWorkerProfessionResp>> page(@RequestBody @Validated WorkerProfessionTagQueryPageReq req);
|
||||
|
||||
/**
|
||||
* 查询班组下工种
|
||||
|
||||
@ -203,6 +203,7 @@ public class ListNodeUserReq extends PageReqV2 {
|
||||
private String keyword;
|
||||
/**
|
||||
* 状态:1未激活 2、已激活 3、施工中 4、已退场
|
||||
* @see cn.axzo.orgmanax.api.projectworker.enums.ProjectWorkerStatusEnum
|
||||
*/
|
||||
private Collection<Integer> projectWorkerStatuses;
|
||||
|
||||
|
||||
@ -20,6 +20,10 @@ import java.util.List;
|
||||
@Builder
|
||||
public class ProfessionDTO {
|
||||
|
||||
/**
|
||||
* 项目工人id
|
||||
*/
|
||||
private Long projectWorkerId;
|
||||
/**
|
||||
* 工种名称
|
||||
*/
|
||||
|
||||
@ -12,10 +12,10 @@ import java.util.List;
|
||||
**/
|
||||
@Data
|
||||
public class SkillTagDTO {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
// /**
|
||||
// * id
|
||||
// */
|
||||
// private Long id;
|
||||
/**
|
||||
* 父级code
|
||||
*/
|
||||
|
||||
@ -14,7 +14,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class WorkerProfessionTagResp implements Serializable {
|
||||
public class ProjectWorkerProfessionResp implements Serializable {
|
||||
protected Long id;
|
||||
/**
|
||||
* 自然人id
|
||||
@ -1,4 +1,21 @@
|
||||
package cn.axzo.orgmanax.infra.client.datacollection.dto;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DataCollectionSkillTypeEnum {
|
||||
/**
|
||||
* 技术类型:1普工,2技工
|
||||
*/
|
||||
NONE(0, "无"),
|
||||
COMMON(1, "普工"),
|
||||
ENGINE_MAN(2, "技工"),
|
||||
;
|
||||
|
||||
@EnumValue
|
||||
private final Integer value;
|
||||
private final String desc;
|
||||
}
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionHistory;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.mapper.WorkerProfessionHistoryMapper;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.mapper.WorkerProfessionSkillTagMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/6
|
||||
*/
|
||||
@Service
|
||||
public class WorkerProfessionHistoryDao extends ServiceImpl<WorkerProfessionHistoryMapper, WorkerProfessionHistory> {
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.mapper.WorkerProfessionSkillTagMapper;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.mapper.WorkerProfessionTagMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/6
|
||||
*/
|
||||
@Service
|
||||
public class WorkerProfessionSkillTagDao extends ServiceImpl<WorkerProfessionSkillTagMapper, WorkerProfessionSkillTag> {
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.mapper.WorkerProfessionTagMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 平台班组变更日志表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author autoGenerator
|
||||
* @since 2023-04-14
|
||||
*/
|
||||
@Service
|
||||
public class WorkerProfessionTagDao extends ServiceImpl<WorkerProfessionTagMapper, WorkerProfessionTag> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,83 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.entity;
|
||||
|
||||
import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* 工人工种及技能标签历史记录数据存储模型
|
||||
* @author luofu
|
||||
* @version 1.0
|
||||
* @date 2024/5/29
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName(value = "worker_profession_history", autoResultMap = true)
|
||||
public class WorkerProfessionHistory {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
protected Long id;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
protected Date createAt;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.UPDATE)
|
||||
protected Date updateAt;
|
||||
|
||||
/**
|
||||
* 是否删除 0正常,1删除
|
||||
*/
|
||||
@TableField("is_delete")
|
||||
protected Long isDelete = 0L;
|
||||
/**
|
||||
* 自然人id
|
||||
*/
|
||||
private Long personId;
|
||||
/**
|
||||
* 租户id
|
||||
*/
|
||||
private Long workspaceId;
|
||||
/**
|
||||
* 组织节点id
|
||||
*/
|
||||
private Long orgNodeId;
|
||||
/**
|
||||
* JSON格式的数据内容
|
||||
*/
|
||||
private String jsonContent;
|
||||
|
||||
/**
|
||||
* 业务数据
|
||||
*/
|
||||
@TableField(value = "biz_data", typeHandler = FastjsonTypeHandler.class)
|
||||
private JSONObject bizData;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,104 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.entity;
|
||||
|
||||
import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* 工人技能标签数据存储模型
|
||||
* @author luofu
|
||||
* @version 1.0
|
||||
* @date 2024/5/29
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName(value = "worker_profession_skill_tag", autoResultMap = true)
|
||||
public class WorkerProfessionSkillTag {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
protected Long id;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
protected Date createAt;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.UPDATE)
|
||||
protected Date updateAt;
|
||||
|
||||
/**
|
||||
* 是否删除 0正常,1删除
|
||||
*/
|
||||
@TableField("is_delete")
|
||||
protected Long isDelete = 0L;
|
||||
|
||||
/**
|
||||
* 工种id
|
||||
*/
|
||||
private Long professionId;
|
||||
/**
|
||||
* 自然人id
|
||||
*/
|
||||
private Long personId;
|
||||
/**
|
||||
* 租户id
|
||||
*/
|
||||
private Long workspaceId;
|
||||
/**
|
||||
* 组织节点id
|
||||
*/
|
||||
private Long orgNodeId;
|
||||
/**
|
||||
* 班组场景
|
||||
*/
|
||||
private TeamSceneEnum scene;
|
||||
/**
|
||||
* 技能标签code
|
||||
*/
|
||||
private String skillTagCode;
|
||||
/**
|
||||
* 技能标签名称
|
||||
*/
|
||||
private String skillTagName;
|
||||
/**
|
||||
* 父级技能标签code
|
||||
*/
|
||||
private String parentSkillTagCode;
|
||||
/**
|
||||
* 数据有效性标记
|
||||
*/
|
||||
private Integer valid;
|
||||
/**
|
||||
* 创建人的自然人id
|
||||
*/
|
||||
private Long createBy;
|
||||
|
||||
/**
|
||||
* 业务数据
|
||||
*/
|
||||
@TableField(value = "biz_data", typeHandler = FastjsonTypeHandler.class)
|
||||
private JSONObject bizData;
|
||||
|
||||
/**
|
||||
* 项目工人id
|
||||
*/
|
||||
private Long projectWorkerId;
|
||||
}
|
||||
@ -0,0 +1,97 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.entity;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* 工人工种数据存储模型
|
||||
* @author luofu
|
||||
* @version 1.0
|
||||
* @date 2024/5/29
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName(value = "worker_profession_tag", autoResultMap = true)
|
||||
public class WorkerProfessionTag {
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 自然人id
|
||||
*/
|
||||
private Long personId;
|
||||
/**
|
||||
* 租户id
|
||||
*/
|
||||
private Long workspaceId;
|
||||
/**
|
||||
* 组织节点id
|
||||
*/
|
||||
private Long orgNodeId;
|
||||
/**
|
||||
* 班组场景
|
||||
*/
|
||||
private String scene;
|
||||
/**
|
||||
* 工种类型: 1-普工 2-技工
|
||||
*/
|
||||
private Integer type;
|
||||
/**
|
||||
* 工种id
|
||||
*/
|
||||
private Long professionId;
|
||||
/**
|
||||
* 工种名称
|
||||
*/
|
||||
private String professionName;
|
||||
/**
|
||||
* 数据有效性标记
|
||||
*/
|
||||
private Integer valid;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createAt;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.UPDATE)
|
||||
private Date updateAt;
|
||||
|
||||
/**
|
||||
* 是否删除 0正常,1删除
|
||||
*/
|
||||
@TableField("is_delete")
|
||||
private Long isDelete;
|
||||
|
||||
/**
|
||||
* 创建人的自然人id
|
||||
*/
|
||||
private Long createBy;
|
||||
|
||||
/**
|
||||
* 业务数据
|
||||
*/
|
||||
@TableField(value = "biz_data", typeHandler = FastjsonTypeHandler.class)
|
||||
private JSONObject bizData;
|
||||
|
||||
/**
|
||||
* 项目工人id
|
||||
*/
|
||||
private Long projectWorkerId;
|
||||
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.enums;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 技术类型
|
||||
* 无->0
|
||||
* 普工->1
|
||||
* 技工->2
|
||||
*
|
||||
* @author yangzhi
|
||||
* @Date 2022/5/6 15:06
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum SkillTypeEnum {
|
||||
/**
|
||||
* 技术类型:1普工,2技工
|
||||
*/
|
||||
NONE(0, "无"),
|
||||
COMMON(1, "普工"),
|
||||
ENGINE_MAN(2, "技工"),
|
||||
;
|
||||
@EnumValue
|
||||
private final Integer value;
|
||||
private final String desc;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.mapper;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionHistory;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/6
|
||||
*/
|
||||
@Mapper
|
||||
public interface WorkerProfessionHistoryMapper extends BaseMapper<WorkerProfessionHistory> {
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.mapper;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/6
|
||||
*/
|
||||
@Mapper
|
||||
public interface WorkerProfessionSkillTagMapper extends BaseMapper<WorkerProfessionSkillTag> {
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.mapper;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 项目内工人工种 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author zhangtianyu
|
||||
* @since 2022-07-12
|
||||
*/
|
||||
@Mapper
|
||||
public interface WorkerProfessionTagMapper extends BaseMapper<WorkerProfessionTag> {
|
||||
}
|
||||
@ -0,0 +1,124 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.repository;
|
||||
|
||||
import cn.axzo.foundation.dao.support.mysql.MybatisPlusOperatorProcessor;
|
||||
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.project.team.enums.ValidationEnum;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionHistory;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/6
|
||||
*/
|
||||
public interface WorkerProfessionHistoryRepository {
|
||||
PageResp<WorkerProfessionHistoryResp> page(PageReq req);
|
||||
|
||||
default List<WorkerProfessionHistoryResp> list(PageReq req) {
|
||||
return page(req).getData();
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class PageReq extends PageReqV2 {
|
||||
|
||||
/**
|
||||
* 是都包含删除(默认走查询未删除)
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean includeDeleted;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
private List<Long> projectWorkerIds;
|
||||
|
||||
@CriteriaField
|
||||
private Long workspaceId;
|
||||
|
||||
/**
|
||||
* PLAT_TEAM:平台班组,PROJECT_TEAM:项目内班组
|
||||
*/
|
||||
@CriteriaField
|
||||
private String scene;
|
||||
|
||||
@CriteriaField(field="bizData", operator = Operator.JSON_QUERY)
|
||||
private List<MybatisPlusOperatorProcessor.JSONQuery> bizData;
|
||||
}
|
||||
|
||||
|
||||
@Data
|
||||
class WorkerProfessionHistoryResp extends WorkerProfessionHistory {
|
||||
private String xx;
|
||||
|
||||
public static final String DATA_FLAG_PROFESSION = "WORKER_PROFESSION";
|
||||
public static final String DATA_FLAG_SKILL = "WORKER_PROFESSION_SKILL";
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class HistoryData<T> {
|
||||
private String dataFlag;
|
||||
private List<T> jsonStrData;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
|
||||
public List<WorkerProfessionTag> resolveWorkerProfessionTags(ValidationEnum valid) {
|
||||
List<WorkerProfessionTag> workerProfessionTags = resolveJsonData(WorkerProfessionTag.class);
|
||||
return workerProfessionTags.stream()
|
||||
.filter(t -> valid == null || valid == ValidationEnum.ALL || valid.getCode().equals(t.getValid()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<WorkerProfessionSkillTag> resolveWorkerProfessionSkillTags(ValidationEnum valid) {
|
||||
List<WorkerProfessionSkillTag> skillTags = resolveJsonData(WorkerProfessionSkillTag.class);
|
||||
return skillTags.stream()
|
||||
.filter(t -> valid == null || valid == ValidationEnum.ALL || valid.getCode().equals(t.getValid()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 1、目前数据有两套格式,先暂时兼容下,
|
||||
* 2、会返回已删除的数据,外部处理的时候,自己判断是否需要
|
||||
*
|
||||
* @param rClass
|
||||
* @param <R>
|
||||
* @return
|
||||
*/
|
||||
private <R> List<R> resolveJsonData(Class<R> rClass) {
|
||||
if (CollectionUtils.isEmpty(jsonStrData)) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
// 先暂时兼容一下老数据,部分数据是string的
|
||||
if (String.class.isAssignableFrom(jsonStrData.get(0).getClass())) {
|
||||
return JSON.parseArray((String) jsonStrData.get(0), rClass);
|
||||
}
|
||||
if (rClass.isAssignableFrom(jsonStrData.get(0).getClass())) {
|
||||
return (List<R>) jsonStrData;
|
||||
}
|
||||
if (JSONObject.class.isAssignableFrom(jsonStrData.get(0).getClass())) {
|
||||
return jsonStrData.stream().map(j -> ((JSONObject) j).toJavaObject(rClass)).collect(Collectors.toList());
|
||||
}
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.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.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/3
|
||||
*/
|
||||
public interface WorkerProfessionSkillTagRepository {
|
||||
PageResp<WorkerProfessionSkillTagResp> page(PageReq req);
|
||||
|
||||
default List<WorkerProfessionSkillTagResp> list(PageReq req) {
|
||||
return page(req).getData();
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class PageReq extends PageReqV2 {
|
||||
|
||||
/**
|
||||
* 是都包含删除(默认走查询未删除)
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean includeDeleted;
|
||||
|
||||
@CriteriaField(field = "projectWorkerId", operator = Operator.IN)
|
||||
private List<Long> projectWorkerIds;
|
||||
|
||||
@CriteriaField
|
||||
private Long workspaceId;
|
||||
|
||||
/**
|
||||
* PLAT_TEAM:平台班组,PROJECT_TEAM:项目内班组
|
||||
*/
|
||||
@CriteriaField
|
||||
private String scene;
|
||||
}
|
||||
|
||||
|
||||
@Data
|
||||
class WorkerProfessionSkillTagResp extends WorkerProfessionSkillTag {
|
||||
private String xx;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,81 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.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.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/3
|
||||
*/
|
||||
public interface WorkerProfessionTagRepository {
|
||||
PageResp<WorkerProfessionTagResp> page(PageReq req);
|
||||
|
||||
default List<WorkerProfessionTagResp> list(PageReq req) {
|
||||
return page(req).getData();
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class PageReq extends PageReqV2 {
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
@CriteriaField
|
||||
private Long workspaceId;
|
||||
|
||||
/**
|
||||
* 项目内工人ids
|
||||
*/
|
||||
@CriteriaField(field = "projectWorkerId", operator = Operator.IN)
|
||||
private List<Long> projectWorkerIds;
|
||||
|
||||
/**
|
||||
* PLAT_TEAM:平台班组,PROJECT_TEAM:项目内班组
|
||||
*/
|
||||
@CriteriaField
|
||||
private String scene;
|
||||
|
||||
/**
|
||||
* 组织节点id
|
||||
*/
|
||||
@CriteriaField
|
||||
private Long orgNodeId;
|
||||
|
||||
/**
|
||||
* 组织节点ids
|
||||
*/
|
||||
@CriteriaField(field = "orgNodeId", operator = Operator.IN)
|
||||
private List<Long> orgNodeIds;
|
||||
|
||||
/**
|
||||
* 0-无效 1-有效
|
||||
*/
|
||||
@CriteriaField
|
||||
@Builder.Default
|
||||
private Integer valid = 1;
|
||||
|
||||
/**
|
||||
* 是都包含删除(默认走查询未删除)
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean includeDeleted;
|
||||
}
|
||||
|
||||
|
||||
@Data
|
||||
class WorkerProfessionTagResp extends WorkerProfessionTag {
|
||||
private String xx;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.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.workerprofession.dao.WorkerProfessionHistoryDao;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionHistory;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository;
|
||||
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 cn.hutool.core.util.ObjectUtil;
|
||||
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 2025/1/6
|
||||
*/
|
||||
@Repository
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class WorkerProfessionHistoryRepositoryImpl implements WorkerProfessionHistoryRepository {
|
||||
|
||||
private WorkerProfessionHistoryDao workerProfessionHistoryDao;
|
||||
|
||||
@Override
|
||||
public PageResp<WorkerProfessionHistoryResp> page(PageReq req) {
|
||||
IPage<WorkerProfessionHistory> page = PageConverter.toMybatis(req, WorkerProfessionHistory.class);
|
||||
QueryWrapper<WorkerProfessionHistory> wrapper = QueryWrapperHelper.fromBean(req, WorkerProfessionHistory.class);
|
||||
|
||||
// 处理删除标记
|
||||
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
|
||||
wrapper.eq("is_delete", 0);
|
||||
}
|
||||
//处理项目工人id
|
||||
if (ObjectUtil.isNotEmpty(req.getProjectWorkerIds())) {
|
||||
|
||||
}
|
||||
|
||||
IPage<WorkerProfessionHistoryResp> results = workerProfessionHistoryDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, WorkerProfessionHistoryResp.class));
|
||||
if (CollUtil.isEmpty(results.getRecords())) {
|
||||
return CommonUtil.getEmptyPage(req, WorkerProfessionHistoryResp.class);
|
||||
}
|
||||
return PageConverter.toResp(results);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.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.workerprofession.dao.WorkerProfessionSkillTagDao;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository;
|
||||
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 2025/1/6
|
||||
*/
|
||||
@Repository
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class WorkerProfessionSkillTagRepositoryImpl implements WorkerProfessionSkillTagRepository {
|
||||
|
||||
private WorkerProfessionSkillTagDao workerProfessionSkillTagDao;
|
||||
|
||||
@Override
|
||||
public PageResp<WorkerProfessionSkillTagResp> page(PageReq req) {
|
||||
IPage<WorkerProfessionSkillTag> page = PageConverter.toMybatis(req, WorkerProfessionSkillTag.class);
|
||||
QueryWrapper<WorkerProfessionSkillTag> wrapper = QueryWrapperHelper.fromBean(req, WorkerProfessionSkillTag.class);
|
||||
|
||||
// 处理删除标记
|
||||
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
|
||||
wrapper.eq("is_delete", 0);
|
||||
}
|
||||
|
||||
IPage<WorkerProfessionSkillTagResp> results = workerProfessionSkillTagDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, WorkerProfessionSkillTagResp.class));
|
||||
if (CollUtil.isEmpty(results.getRecords())) {
|
||||
return CommonUtil.getEmptyPage(req, WorkerProfessionSkillTagResp.class);
|
||||
}
|
||||
return PageConverter.toResp(results);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package cn.axzo.orgmanax.infra.dao.workerprofession.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.workerprofession.dao.WorkerProfessionTagDao;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionTagRepository;
|
||||
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 2025/1/3
|
||||
*/
|
||||
@Repository
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class WorkerProfessionTagRepositoryImpl implements WorkerProfessionTagRepository {
|
||||
|
||||
private WorkerProfessionTagDao workerProfessionTagDao;
|
||||
|
||||
@Override
|
||||
public PageResp<WorkerProfessionTagResp> page(PageReq req) {
|
||||
IPage<WorkerProfessionTag> page = PageConverter.toMybatis(req, WorkerProfessionTag.class);
|
||||
QueryWrapper<WorkerProfessionTag> wrapper = QueryWrapperHelper.fromBean(req, WorkerProfessionTag.class);
|
||||
|
||||
// 处理删除标记
|
||||
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
|
||||
wrapper.eq("is_delete", 0);
|
||||
}
|
||||
|
||||
IPage<WorkerProfessionTagResp> results = workerProfessionTagDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, WorkerProfessionTagResp.class));
|
||||
if (CollUtil.isEmpty(results.getRecords())) {
|
||||
return CommonUtil.getEmptyPage(req, WorkerProfessionTagResp.class);
|
||||
}
|
||||
return PageConverter.toResp(results);
|
||||
}
|
||||
}
|
||||
@ -2,7 +2,7 @@ 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.api.teamlog.feign.OrgTeamLogApi;
|
||||
import cn.axzo.orgmanax.dto.teamlog.dto.TeamLogDTO;
|
||||
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogPageReq;
|
||||
import cn.axzo.orgmanax.dto.teamlog.req.TeamLogRecordChangeTeamOwnerReq;
|
||||
@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RestController
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class TeamLogController implements TeamLogApi {
|
||||
public class OrgTeamLogController implements OrgTeamLogApi {
|
||||
|
||||
private TeamLogService teamLogService;
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
package cn.axzo.orgmanax.server.util;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.BinaryOperator;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author luofu
|
||||
* @version 1.0
|
||||
* @date 2024/1/13
|
||||
*/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public final class StreamUtil {
|
||||
|
||||
/**
|
||||
* 根据stream中对象的属性进行去重
|
||||
*
|
||||
* @param stream 待去重的stream
|
||||
* @param propertyExtractor 属性提取器
|
||||
* @return 去重后的stream
|
||||
*/
|
||||
public static <T> Stream<T> distinctByProperty(Stream<T> stream, Function<? super T, ?> propertyExtractor) {
|
||||
return stream.filter(distinctPredicate(propertyExtractor));
|
||||
}
|
||||
|
||||
private static <T> Predicate<T> distinctPredicate(Function<? super T, ?> propertyExtractor) {
|
||||
Map<Object, Boolean> map = Maps.newConcurrentMap();
|
||||
return t -> Objects.isNull(map.putIfAbsent(propertyExtractor.apply(t), Boolean.TRUE));
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用toMap对元素进行去重,并支持指定保留的元素,默认保留最后一个
|
||||
*
|
||||
* @param stream
|
||||
* @param distinctFunction
|
||||
* @param mergeFunction
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> Stream<T> distinct(Stream<T> stream, Function<T, ?> distinctFunction, BinaryOperator<T> mergeFunction) {
|
||||
if (mergeFunction == null) {
|
||||
// 默认保留最后一个
|
||||
mergeFunction = (v1, v2) -> v2;
|
||||
}
|
||||
return stream.collect(Collectors.toMap(distinctFunction, Function.identity(), mergeFunction))
|
||||
.values().stream();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
package cn.axzo.orgmanax.server.workerprofession.controller;
|
||||
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.foundation.result.ApiResult;
|
||||
import cn.axzo.orgmanax.api.workerprofession.feign.OrgProjectWorkerProfessionApi;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.*;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.resp.OrgWorkerProfessionResp;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp;
|
||||
import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/3
|
||||
*/
|
||||
@RestController
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class OrgProjectWorkerProfessionController implements OrgProjectWorkerProfessionApi {
|
||||
|
||||
private OrgProjectWorkerProfessionService orgProjectWorkerProfessionService;
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> update(@Valid ProjectWorkerProfessionUpdateReq req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Map<Long, List<ProfessionDTO>>> listValid(@Valid ProjectWorkerProfessionListValidReq req) {
|
||||
return ApiResult.success(orgProjectWorkerProfessionService.listValid(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Map<Long, List<String>>> sortOutProfessionCategory(@Valid ProjectWorkerProfessionSortOutProfessionCategoryReq req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> configure(WorkerProfessionTagOperationConfigureReq request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> remove(WorkerProfessionTagOperationRemoveReq request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> upsert(WorkerProfessionTagOperationUpsertReq request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> validUpdate(WorkerProfessionTagOperationValidUpdateReq request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<PageResp<ProjectWorkerProfessionResp>> page(WorkerProfessionTagQueryPageReq req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<PageResp<OrgWorkerProfessionResp>> pageProfessions(@Valid PageTeamProfessionsReq req) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package cn.axzo.orgmanax.server.workerprofession.service;
|
||||
|
||||
import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListValidReq;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/3
|
||||
*/
|
||||
public interface OrgProjectWorkerProfessionService {
|
||||
Map<Long, List<ProfessionDTO>> listValid(ProjectWorkerProfessionListValidReq req);
|
||||
|
||||
/**
|
||||
* 根据项目工人id获取工种信息(包括技能标签信息)
|
||||
* @param projectWorkerIds
|
||||
* @return
|
||||
*/
|
||||
List<ProfessionDTO> listValidWorkerProfession(List<Long> projectWorkerIds);
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package cn.axzo.orgmanax.server.workerprofession.service;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/6
|
||||
*/
|
||||
public interface OrgProjectWorkerProfessionSkillService {
|
||||
List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> list(WorkerProfessionSkillTagRepository.PageReq req);
|
||||
}
|
||||
@ -0,0 +1,269 @@
|
||||
package cn.axzo.orgmanax.server.workerprofession.service.impl;
|
||||
|
||||
import cn.axzo.foundation.dao.support.mysql.MybatisPlusOperatorProcessor;
|
||||
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||
import cn.axzo.orgmanax.api.projectworker.enums.ProjectWorkerStatusEnum;
|
||||
import cn.axzo.orgmanax.dto.common.IdentityType;
|
||||
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
|
||||
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserProfile;
|
||||
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
||||
import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum;
|
||||
import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.dto.SkillTagDTO;
|
||||
import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListValidReq;
|
||||
import cn.axzo.orgmanax.infra.client.datacollection.DataCollectionDictInfoClient;
|
||||
import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListProfessionCategoriesResp;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionTagRepository;
|
||||
import cn.axzo.orgmanax.server.node.service.NodeService;
|
||||
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
|
||||
import cn.axzo.orgmanax.server.util.StreamUtil;
|
||||
import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionService;
|
||||
import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionSkillService;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.BinaryOperator;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static java.util.function.Function.identity;
|
||||
import static java.util.stream.Collectors.*;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/3
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerProfessionService {
|
||||
|
||||
private NodeService nodeService;
|
||||
private NodeUserService nodeUserService;
|
||||
private WorkerProfessionTagRepository workerProfessionTagRepository;
|
||||
private DataCollectionDictInfoClient dataCollectionDictInfoClient;
|
||||
private OrgProjectWorkerProfessionSkillService orgProjectWorkerProfessionSkillService;
|
||||
private WorkerProfessionHistoryRepository workerProfessionHistoryRepository;
|
||||
|
||||
private static final BinaryOperator<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> SKILL_TAG_MERGE_FUNC = (v1, v2) -> {
|
||||
if (v1.getIsDelete() < v2.getIsDelete()) {
|
||||
return v1;
|
||||
}
|
||||
return v2.getCreateAt().getTime() > v1.getCreateAt().getTime() ? v2 : v1;
|
||||
};
|
||||
|
||||
@Override
|
||||
public Map<Long, List<ProfessionDTO>> listValid(ProjectWorkerProfessionListValidReq req) {
|
||||
List<Long> nodeIds = req.getNodeIds();
|
||||
List<Long> workerIdentityIds = req.getWorkerIdentityIds();
|
||||
Long workspaceId = req.getWorkspaceId();
|
||||
|
||||
//查询工人
|
||||
List<NodeUserDTO> nodeUserDTOS = nodeUserService.list(ListNodeUserReq.builder()
|
||||
.workspaceId(workspaceId)
|
||||
.organizationalNodeIds(nodeIds)
|
||||
.identityIds(workerIdentityIds)
|
||||
.identityType(IdentityType.WORKER.getCode())
|
||||
.projectWorkerStatuses(Arrays.asList(ProjectWorkerStatusEnum.ACTIVE.getValue())) //TODO 待枚举定义
|
||||
.build());
|
||||
|
||||
if (ObjectUtil.isEmpty(nodeUserDTOS)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
List<Long> projectWorkerIds = nodeUserDTOS.stream().map(nodeUserDTO -> {
|
||||
NodeUserProfile.ProjectWorkerProfile projectWorkerProfile = nodeUserDTO.resolveProfile();
|
||||
return projectWorkerProfile.getProjectWorkerId();
|
||||
}).collect(toList());
|
||||
Map<Long, NodeUserDTO> nodeUserDTOMap = nodeUserDTOS.stream().collect(toMap(NodeUserDTO::getIdentityId, identity()));
|
||||
|
||||
//获取工人工种
|
||||
List<ProfessionDTO> professionDTOS = listValidWorkerProfession(projectWorkerIds);
|
||||
Map<Long, List<ProfessionDTO>> professionMap = professionDTOS.stream().collect(groupingBy(ProfessionDTO::getProjectWorkerId));
|
||||
|
||||
//封装响应数据
|
||||
HashMap<Long, List<ProfessionDTO>> result = new HashMap<>();
|
||||
for (Long identityId : workerIdentityIds) {
|
||||
NodeUserDTO nodeUserDTO = nodeUserDTOMap.get(identityId);
|
||||
if (nodeUserDTO == null) {
|
||||
result.put(identityId, Collections.emptyList());
|
||||
} else {
|
||||
NodeUserProfile.ProjectWorkerProfile projectWorkerProfile = nodeUserDTO.resolveProfile();
|
||||
Long projectWorkerId = projectWorkerProfile.getProjectWorkerId();
|
||||
List<ProfessionDTO> professions = professionMap.get(projectWorkerId);
|
||||
if (professions == null) {
|
||||
professions = Collections.emptyList();
|
||||
}
|
||||
result.put(identityId, professions);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据项目工人id获取工种信息(包括技能标签信息)
|
||||
* @param projectWorkerIds
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<ProfessionDTO> listValidWorkerProfession(List<Long> projectWorkerIds) {
|
||||
WorkerProfessionTagRepository.PageReq pageReq4Profession = WorkerProfessionTagRepository.PageReq.builder()
|
||||
.projectWorkerIds(projectWorkerIds)
|
||||
.scene(TeamSceneEnum.PROJECT_TEAM.name())
|
||||
.build();
|
||||
List<WorkerProfessionTagRepository.WorkerProfessionTagResp> workerProfessionTagResps = workerProfessionTagRepository.list(pageReq4Profession);
|
||||
if (ObjectUtil.isEmpty(workerProfessionTagResps)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<Long> professionIds = workerProfessionTagResps.stream().map(WorkerProfessionTagRepository.WorkerProfessionTagResp::getProfessionId).collect(toList());
|
||||
List<DataCollectionListProfessionCategoriesResp> professionCategoriesResps = dataCollectionDictInfoClient.listProfessionCategories(professionIds);
|
||||
Map<Long, DataCollectionListProfessionCategoriesResp> professionCategoryRespMap = professionCategoriesResps.stream().collect(Collectors.toMap(DataCollectionListProfessionCategoriesResp::getId, Function.identity(), (o, n) -> o));
|
||||
|
||||
List<ProfessionDTO> professionDTOS = new ArrayList<>(workerProfessionTagResps.size());
|
||||
for (WorkerProfessionTagRepository.WorkerProfessionTagResp workerProfessionTagResp : workerProfessionTagResps) {
|
||||
ProfessionDTO dto = new ProfessionDTO();
|
||||
dto.setProjectWorkerId(workerProfessionTagResp.getProjectWorkerId());
|
||||
dto.setProfessionId(workerProfessionTagResp.getProfessionId());
|
||||
dto.setValid(workerProfessionTagResp.getValid());
|
||||
dto.setProfessionName(workerProfessionTagResp.getProfessionName());
|
||||
dto.setCreateAt(workerProfessionTagResp.getCreateAt());
|
||||
DataCollectionListProfessionCategoriesResp categoryResp = professionCategoryRespMap.getOrDefault(dto.getProfessionId(), new DataCollectionListProfessionCategoriesResp());
|
||||
dto.setSkillType(Objects.isNull(categoryResp.getSkillType()) ? 1 : categoryResp.getSkillType().getValue());
|
||||
professionDTOS.add(dto);
|
||||
}
|
||||
|
||||
//获取技能标签包括历史技能标签(带子技能标签)
|
||||
List<SkillTagDTO> skillTagDTOS = listSkillTagWithChild(projectWorkerIds);
|
||||
Map<Long, List<SkillTagDTO>> skillTagMap = skillTagDTOS.stream().collect(groupingBy(SkillTagDTO::getProfessionId));
|
||||
|
||||
//封装工人工种和技能标签
|
||||
for (ProfessionDTO profession : professionDTOS) {
|
||||
List<SkillTagDTO> skills = skillTagMap.get(profession.getProfessionId());
|
||||
profession.setSkillTags(skills);
|
||||
profession.computeLevel(1);
|
||||
}
|
||||
return professionDTOS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取技能标签包括历史技能标签(带子技能标签)
|
||||
* @param projectWorkerIds
|
||||
*/
|
||||
private List<SkillTagDTO> listSkillTagWithChild(List<Long> projectWorkerIds) {
|
||||
//获取技能标签
|
||||
WorkerProfessionSkillTagRepository.PageReq pageReq4Skill = WorkerProfessionSkillTagRepository.PageReq.builder()
|
||||
.projectWorkerIds(projectWorkerIds)
|
||||
.scene(TeamSceneEnum.PROJECT_TEAM.name())
|
||||
.build();
|
||||
List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> workerProfessionSkillTagResps = orgProjectWorkerProfessionSkillService.list(pageReq4Skill);
|
||||
|
||||
//获取历史技能标签
|
||||
WorkerProfessionHistoryRepository.PageReq pageReq4HistoryProfession = WorkerProfessionHistoryRepository.PageReq.builder()
|
||||
.scene(TeamSceneEnum.PROJECT_TEAM.name())
|
||||
.build();
|
||||
List<MybatisPlusOperatorProcessor.JSONQuery> bizData = Arrays.asList(
|
||||
MybatisPlusOperatorProcessor.JSONQuery.builder().jsonPath("$.projectWorkerId").data(projectWorkerIds).operator(Operator.IN).build());
|
||||
pageReq4HistoryProfession.setBizData(bizData);
|
||||
List<WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp> workerProfessionHistoryResps = workerProfessionHistoryRepository.list(pageReq4HistoryProfession);
|
||||
List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> workerProfessionSkillTagResps4History = doHistoryWorkerSkilltag(workerProfessionHistoryResps);
|
||||
|
||||
//技能标签和历史技能标签合在一起
|
||||
Stream<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> allStream = Stream.concat(workerProfessionSkillTagResps.stream(), workerProfessionSkillTagResps4History.stream());
|
||||
List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> allSkillTagResps = StreamUtil.distinct(allStream,
|
||||
p -> String.format("%s_%s", p.getProjectWorkerId(), p.getSkillTagCode()), SKILL_TAG_MERGE_FUNC)
|
||||
.collect(toList());
|
||||
|
||||
|
||||
List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> parentSkillTagLists = allSkillTagResps.stream()
|
||||
.filter(item -> !StringUtils.hasLength(item.getParentSkillTagCode()) || item.getParentSkillTagCode().equals("0"))
|
||||
.collect(toList());
|
||||
Map<String, List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp>> chileMap = allSkillTagResps.stream()
|
||||
.filter(item -> StringUtils.hasLength(item.getParentSkillTagCode()) || !item.getParentSkillTagCode().equals("0"))
|
||||
.collect(Collectors.groupingBy(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp::getParentSkillTagCode));
|
||||
|
||||
parentSkillTagLists.stream().map(i -> chileSkillTagConvert(i, chileMap)).collect(toList());
|
||||
|
||||
return parentSkillTagLists.stream().map(i -> chileSkillTagConvert(i, chileMap)).collect(toList());
|
||||
}
|
||||
|
||||
private SkillTagDTO chileSkillTagConvert(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp parentSkillTag, Map<String, List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp>> chileMap) {
|
||||
SkillTagDTO tagDTO = new SkillTagDTO();
|
||||
tagDTO.setCode(parentSkillTag.getSkillTagCode());
|
||||
// tagDTO.setId(0L); //历史代码都为0L, 已经没用了
|
||||
tagDTO.setName(parentSkillTag.getSkillTagName());
|
||||
tagDTO.setProfessionId(parentSkillTag.getProfessionId());
|
||||
tagDTO.setParentCode(parentSkillTag.getParentSkillTagCode());
|
||||
tagDTO.setChildSkillTags(Lists.newArrayList());
|
||||
|
||||
List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> childSkillTagResps = chileMap.get(parentSkillTag.getSkillTagCode());
|
||||
if (CollUtil.isEmpty(childSkillTagResps)) {
|
||||
return tagDTO;
|
||||
}
|
||||
for (WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp skillTagResp : childSkillTagResps) {
|
||||
SkillTagDTO chileSkillTag = chileSkillTagConvert(skillTagResp, chileMap);
|
||||
tagDTO.getChildSkillTags().add(chileSkillTag);
|
||||
}
|
||||
return tagDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换历史技能标签
|
||||
* @param workerProfessionHistoryResps
|
||||
* @return
|
||||
*/
|
||||
private List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> doHistoryWorkerSkilltag(List<WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp> workerProfessionHistoryResps) {
|
||||
ArrayList<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> wss = Lists.newArrayList();
|
||||
workerProfessionHistoryResps.forEach(item -> {
|
||||
List<WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.HistoryData> historyData = JSON.parseArray(item.getJsonContent(), WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.HistoryData.class);
|
||||
Long projectWorkerId;
|
||||
if (Objects.nonNull(item.getBizData()) && item.getBizData().containsKey("projectWorkerId")) {
|
||||
projectWorkerId = item.getBizData().getLong("projectWorkerId");
|
||||
} else {
|
||||
projectWorkerId = 0L;
|
||||
}
|
||||
for (WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.HistoryData historyDatum : historyData) {
|
||||
if (historyDatum.getDataFlag().equals(WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.DATA_FLAG_SKILL)) {
|
||||
List<WorkerProfessionSkillTag> skillTags = historyDatum.resolveWorkerProfessionSkillTags(ValidationEnum.EFFECTIVE);
|
||||
// 需要使用有效工种
|
||||
Stream<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> stream = skillTags.stream()
|
||||
.filter(s -> !Strings.isNullOrEmpty(s.getSkillTagCode())).map(p -> {
|
||||
WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp skillTag = new WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp();
|
||||
skillTag.setId(p.getId());
|
||||
skillTag.setSkillTagName(p.getSkillTagName());
|
||||
skillTag.setSkillTagCode(p.getSkillTagCode());
|
||||
skillTag.setParentSkillTagCode(p.getParentSkillTagCode());
|
||||
skillTag.setProfessionId(p.getProfessionId());
|
||||
skillTag.setWorkspaceId(p.getWorkspaceId());
|
||||
skillTag.setProjectWorkerId(projectWorkerId);
|
||||
skillTag.setCreateAt(p.getCreateAt());
|
||||
skillTag.setUpdateAt(p.getUpdateAt());
|
||||
skillTag.setIsDelete(p.getIsDelete());
|
||||
return skillTag;
|
||||
});
|
||||
List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> collect = StreamUtil.distinct(stream,
|
||||
// 按照人+技能标签去重
|
||||
p -> String.format("%s_%s", p.getProjectWorkerId(), p.getSkillTagCode()),
|
||||
SKILL_TAG_MERGE_FUNC)
|
||||
.collect(toList());
|
||||
wss.addAll(collect);
|
||||
}
|
||||
}
|
||||
});
|
||||
return wss;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package cn.axzo.orgmanax.server.workerprofession.service.impl;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository;
|
||||
import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionSkillService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhanghongbo
|
||||
* @date 2025/1/6
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class OrgProjectWorkerProfessionSkillServiceImpl implements OrgProjectWorkerProfessionSkillService {
|
||||
|
||||
private WorkerProfessionSkillTagRepository workerProfessionSkillTagRepository;
|
||||
|
||||
@Override
|
||||
public List<WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp> list(WorkerProfessionSkillTagRepository.PageReq req) {
|
||||
return workerProfessionSkillTagRepository.list(req);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user