三个list数据(三个list 的id相同 进项拼接)
第一个list
第二个list
第三个list
1.AuthUserTypeDto
package com.chinasofti.broker.authservice.user.dto;
import com.chinasofti.broker.authservice.common.enums.UserIdentityEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
;
/**
*
* 项目名称:
*
* @className:AuthDeptDto @description: 机构管理前端交互类
* @author:pegnzhao @date:2020-03-05 16:39:43
*/
@Getter
@Setter
@ToString
@ApiModel(description = "用户类型信息")
public class AuthUserTypeDto implements Serializable {
@NotBlank(message = "用户编码不能为空")
@ApiModelProperty(value = "用户编码", required = true, dataType = "String")
private String userCode;
@ApiModelProperty(value="用户类型:2:销售 1:运营", dataType = "String" )
private UserIdentityEnum userIdentity=UserIdentityEnum.SALE;
}
2.AuthUserDeptNumInfoDto
package com.chinasofti.broker.authservice.dept.dto;
import com.chinasofti.broker.authservice.user.dto.UserDeptInfoDto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
*
* 项目名称:
*
* @className:AuthDeptDto @description: 机构管理前端交互类
* @author:pegnzhao @date:2020-03-05 16:39:43
*/
@Getter
@Setter
@ToString
@ApiModel(description = "机构管理信息和人员信息")
public class AuthUserDeptNumInfoDto implements Serializable {
private static final long serialVersionUID = -5220286988593114544L;
// 主键ID
@JsonIgnore
private String id;
// 机构名称
@ApiModelProperty(value = "机构名称", required = true)
@NotBlank(message = "机构名称不能为空")
@Length(max = 64, message = "最长输入64字符")
private String deptName;
// 机构编码:PF+6位数递增,例如:PF000001
@ApiModelProperty(value = "机构编码:PF+6位数递增,例如:PF000001", hidden = true)
private String deptCode;
/**
*当前部门销售人员个数
*/
@ApiModelProperty(value = "销售人数")
private int salesNum;
/**
*当前部门子部门个数
*/
@ApiModelProperty(value = "部门人数")
private int deptUserNum;
@ApiModelProperty(value = "部门人员信息" )
private List<UserDeptInfoDto> deptUserInfoList;
}
3.controller层
@Trim
@AutoLog(value = "企业组织机构-根据用户编码查询部门销售人员和部门人数信息")
@ApiOperation(value = "企业组织机构-根据用户编码查询部门销售人员和部门人数信息")
@PostMapping("/query/userdeptnum/byusercode")
public Result queryDeptDtoBySlaeUserCode(@RequestBody @Validated AuthUserTypeDto authUserTypeDto) {
List<AuthUserDeptNumInfoDto> deptDto = authDeptService.queryDeptDtoBySlaeUserCode(authUserTypeDto);
optLogUtil.saveOptLog(String.format("根据用户编码查询部门信息成功,部门信息:%s", deptDto), CommonConstant.LOG_TYPE_OPERATE,
CommonConstant.OPERATE_TYPE_QUERY);
return Result.ok(deptDto);
}
4.service 层
List<AuthUserDeptNumInfoDto> queryDeptDtoBySlaeUserCode(AuthUserTypeDto authUserTypeDto);
5.serviceimpl层
@Override
public List<AuthUserDeptNumInfoDto> queryDeptDtoBySlaeUserCode(AuthUserTypeDto authUserTypeDto) {
try {
//部门销售人员数量
List<AuthUserDeptNumInfoDto> authUserDeptNumInfoDtoList1=
Optional.ofNullable(authDeptMapper.querySaleUserCountByUserCode(authUserTypeDto.getUserCode(),
authUserTypeDto.getUserIdentity().getType())).orElse(new ArrayList<>());
//部门人员数量
List<AuthUserDeptNumInfoDto> authUserDeptNumInfoDtoList2=
Optional.ofNullable(authDeptMapper.querySaleUserCountByUserCodes(authUserTypeDto.getUserCode())).orElse(new ArrayList<>());
//部门人员安装id分组(id为部门id)
Map<String, AuthUserDeptNumInfoDto> map = authUserDeptNumInfoDtoList1.stream().collect
(Collectors.toMap(AuthUserDeptNumInfoDto ::getId, item-> item));
//部门人员信息
List<UserDeptInfoDto> stringListMap=
Optional.ofNullable(authUserMapper.queryUserByUserCode(authUserTypeDto.getUserCode())).orElse(new ArrayList<>());
//部门人员信息 按照id 进行分类(id主要是部门id) map 的key值为id
Map<String, List<UserDeptInfoDto>> groupBy = stringListMap.stream().collect(Collectors.groupingBy(UserDeptInfoDto::getId));
//部门销售人员数量、部门人员数量、部门人员信息 拼接 (id都是部门id进行分组)
authUserDeptNumInfoDtoList2.forEach(n -> {
if(map.containsKey(n.getId())){
AuthUserDeptNumInfoDto authUserDeptNumInfoDto = map.get(n.getId());
n.setSalesNum(authUserDeptNumInfoDto.getSalesNum());
}
if(groupBy.containsKey(n.getId())){
List<UserDeptInfoDto> a = groupBy.get(n.getId());
n.setDeptUserInfoList(a);
}
});
return authUserDeptNumInfoDtoList2;
} catch (Exception e) {
logger.error("通过userId查询AuthDeptDto列表失败,用户编号{},错误信息{}", authUserTypeDto.getUserCode(), e.getMessage());
throw new DeptException(ExceptionEnum.DEPT_QUERY_FILED.getCode(), "查询企业组织机构失败!");
}
}
6.mapper层
List<AuthUserDeptNumInfoDto> querySaleUserCountByUserCode(@Param("userCode")String userCode,@Param("userIdentity")int userIdentity);
List<AuthUserDeptNumInfoDto> querySaleUserCountByUserCodes(@Param("userCode")String userCode);
List<UserDeptInfoDto> queryUserByUserCode(@Param("userCode") String userCode);
7.mapper映射文件
<!-- 可根据自己的需求,是否要使用,可将多表联合查询,该Dto可以映射出多个表的字段 -->
<resultMap type="com.chinasofti.broker.authservice.dept.dto.AuthUserDeptNumInfoDto" id="authUserDeptNumInfoDtoMap">
<result property="id" column="id"/>
<result property="deptName" column="dept_name"/>
<result property="deptCode" column="dept_code"/>
<result property="salesNum" column="salesNum"/>
<result property="deptUserNum" column="deptUserNum"/>
</resultMap>
<select id="querySaleUserCountByUserCode" resultMap="authUserDeptNumInfoDtoMap">
SELECT
ur.id,ur.dept_name,td.dept_code,count( 1 ) as salesNum
FROM
t_auth_user_dept td
INNER JOIN t_auth_user auth ON td.user_code = auth.user_code
INNER JOIN t_auth_dept ur ON td.dept_code = ur.dept_code
WHERE
td.dept_code IN (
SELECT DISTINCT
dept_code
FROM
t_auth_user_dept
WHERE
user_code = #{userCode}
AND check_status = '1'
)
AND td.check_status = '1'
and td.user_identity like CONCAT('%','\\',#{userIdentity},'%')
AND auth.del_status = '0'
AND auth.`status` = '0'
AND ur.del_status = '0'
AND ur.`status` = '0'
GROUP BY
td.dept_code
</select>
<select id="querySaleUserCountByUserCodes" resultMap="authUserDeptNumInfoDtoMap">
SELECT
ur.id,ur.dept_name,td.dept_code,count( 1 ) as deptUserNum
FROM
t_auth_user_dept td
INNER JOIN t_auth_user auth ON td.user_code = auth.user_code
INNER JOIN t_auth_dept ur ON td.dept_code = ur.dept_code
WHERE
td.dept_code IN (
SELECT DISTINCT
dept_code
FROM
t_auth_user_dept
WHERE
user_code = #{userCode}
AND check_status = '1'
)
AND td.check_status = '1'
AND auth.del_status = '0'
AND auth.`status` = '0'
AND ur.del_status = '0'
AND ur.`status` = '0'
GROUP BY
td.dept_code
</select>
<select id="queryUserByUserCode"
resultType="com.chinasofti.broker.authservice.user.dto.UserDeptInfoDto">
SELECT
ur.id,
td.user_code,
auth.user_name,
ur.dept_name AS department,
td.dept_code
FROM
t_auth_user_dept td
INNER JOIN t_auth_user auth ON td.user_code = auth.user_code
INNER JOIN t_auth_dept ur ON td.dept_code = ur.dept_code
WHERE
td.dept_code IN (
SELECT DISTINCT
dept_code
FROM
t_auth_user_dept
WHERE
user_code = #{userCode}
AND check_status = '1'
)
AND td.check_status = '1'
AND auth.del_status = '0'
AND auth.`status` = '0'
AND ur.del_status = '0'
AND ur.`status` = '0'
</select>
8.CommonConstant
package com.chinasofti.broker.authservice.common.constants;
/**
* @author suchao
*/
public class CommonConstant {
private CommonConstant() {}
/**
* 系统日志类型: 登录
*/
public static final int LOG_TYPE_LOGIN = 1;
/**
* 系统日志类型: 操作
*/
public static final int LOG_TYPE_OPERATE = 2;
/**
* 操作日志类型: 查询
*/
public static final int OPERATE_TYPE_QUERY = 1;
/**
* 操作日志类型: 添加
*/
public static final int OPERATE_TYPE_ADD = 2;
/**
* 操作日志类型: 更新
*/
public static final int OPERATE_TYPE_UPDATE = 3;
/**
* 操作日志类型: 删除
*/
public static final int OPERATE_TYPE_DELETE = 4;
/**
* 操作日志类型: 导入
*/
public static final int OPERATE_TYPE_IMPORT = 5;
/**
* 操作日志类型: 导出
*/
public static final int OPERATE_TYPE_EXPORT = 6;
}
9.UserIdentityEnum枚举
package com.chinasofti.broker.authservice.common.enums;
/**
* 用户身份枚举
* @author peng
*/
public enum UserIdentityEnum {
SALE("销售", 2),
OPERATION("运营", 1);
private String identity;
private int type;
UserIdentityEnum(String identity, int type) {
this.identity = identity;
this.type = type;
}
public String getIdentity() {
return identity;
}
public int getType() {
return type;
}
}
10.DeptException异常类
package com.chinasofti.broker.authservice.common.exceptions;
import com.chinasoft.broker.commons.exceptions.CoreException;
/**
* 企业组织业务异常
* @author peng
*/
public class DeptException extends CoreException {
private static final long serialVersionUID = -3954973035100982607L;
public DeptException(String msg) {
super(msg);
}
public DeptException(int code, String msg) {
super(code, msg);
}
}
11.ExceptionEnum异常
package com.chinasofti.broker.authservice.common.enums;
import com.chinasofti.broker.authservice.common.asserts.BaseAssert;
import com.chinasofti.broker.authservice.common.constants.ResultConstant;
/**
* Copyright © 2020 chinasoft International. All rights reserved.
*
* @author : liujunqi @Date: 2020/4/18 14:33:18
* @Title: com.chinasofti.broker.authservice.common.enums.ExceptionEnum
* @Description: 异常错误枚举
*/
public enum ExceptionEnum implements IExceptionEnum, BaseAssert {
DEPT_QUERY_FILED(2006, ResultConstant.DEPT_QUERY_FILED);
/**
* 错误编码
*/
private int code;
/**
* 错误信息
*/
private String message;
ExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
@Override
public String getMessage() {
return message;
}
@Override
public int getCode() {
return code;
}
// 普通方法
public static String getName(int code) {
for (ExceptionEnum ee : ExceptionEnum.values()) {
if (ee.getCode() == code) {
return ee.message;
}
}
return null;
}
}
12.ResultConstant
package com.chinasofti.broker.authservice.common.constants;
/**
* Copyright © 2020 chinasoft International. All rights reserved.
*
* @author : liujunqi @Date: 2020/3/5 17:25:45
* @Title: com.chinasofti.broker.authservice.common.constants.ResultConstant
* @Description: 全局错误编码定义类
*/
public class ResultConstant {
private ResultConstant() {}
public static final String DEPT_QUERY_FILED = "DEPT0200006";
}
13.messages_en.properties
DEPT0200006=Failed to query organization!
14.messages_zh_CN.properties
DEPT0200006=查询企业组织机构失败!
运行接口之后
拼接的结果
{
"result": true,
"info": "",
"retCode": "0000",
"obj": [
{
"deptName": "销售三部",
"deptCode": "PF000092",
"salesNum": 1,
"deptUserNum": 1,
"deptUserInfoList": [
{
"userCode": "crm20200912",
"userName": "liu",
"department": "销售三部",
"deptCode": "PF000092"
}
]
},
{
"deptName": "自动化测试部",
"deptCode": "PF000095",
"salesNum": 3,
"deptUserNum": 3,
"deptUserInfoList": [
{
"userCode": "31313131",
"userName": "刘安下级",
"department": "自动化测试部",
"deptCode": "PF000095"
},
{
"userCode": "846545464",
"userName": "张三下级",
"department": "自动化测试部",
"deptCode": "PF000095"
},
{
"userCode": "crm20200912",
"userName": "liu",
"department": "自动化测试部",
"deptCode": "PF000095"
}
]
}
]
}