@@ -1,5 +1,6 @@ | |||||
package com.ningdatech.pmapi.meeting.task; | package com.ningdatech.pmapi.meeting.task; | ||||
import cn.hutool.core.util.ObjectUtil; | |||||
import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
@@ -120,7 +121,7 @@ public class ExpertCallResultRewriteTask { | |||||
// 极端情况下获取不到submitKey异常情况 | // 极端情况下获取不到submitKey异常情况 | ||||
continue; | continue; | ||||
} | } | ||||
Integer minutes = callbackMinutes.getOrDefault(expert.getRuleId(), MINUTES_CALL_RESULT_FEEDBACK); | |||||
Integer minutes = ObjectUtil.defaultIfNull(callbackMinutes.get(expert.getRuleId()), MINUTES_CALL_RESULT_FEEDBACK); | |||||
Optional<Integer> status = getStatusByMsgRecordDetail(msgRecordDetail, minutes, expert.getCreateOn()); | Optional<Integer> status = getStatusByMsgRecordDetail(msgRecordDetail, minutes, expert.getCreateOn()); | ||||
if (status.isPresent()) { | if (status.isPresent()) { | ||||
MeetingExpert update = new MeetingExpert(); | MeetingExpert update = new MeetingExpert(); | ||||
@@ -1,9 +1,6 @@ | |||||
package com.ningdatech.pmapi.sys.model.entity; | package com.ningdatech.pmapi.sys.model.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.annotation.*; | |||||
import io.swagger.annotations.ApiModel; | import io.swagger.annotations.ApiModel; | ||||
import io.swagger.annotations.ApiModelProperty; | import io.swagger.annotations.ApiModelProperty; | ||||
import lombok.Builder; | import lombok.Builder; | ||||
@@ -13,6 +10,8 @@ import lombok.ToString; | |||||
import lombok.experimental.Accessors; | import lombok.experimental.Accessors; | ||||
import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||
import java.io.Serializable; | |||||
import java.time.LocalDateTime; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
@@ -29,9 +28,9 @@ import javax.validation.constraints.NotNull; | |||||
@Accessors(chain = true) | @Accessors(chain = true) | ||||
@TableName("nd_user_role") | @TableName("nd_user_role") | ||||
@ApiModel(value = "UserRole", description = "角色分配") | @ApiModel(value = "UserRole", description = "角色分配") | ||||
public class UserRole { | |||||
public class UserRole implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
private static final long serialVersionUID = 2210188203287234336L; | |||||
@TableId(value = "id", type = IdType.AUTO) | @TableId(value = "id", type = IdType.AUTO) | ||||
private Long id; | private Long id; | ||||
@@ -52,6 +51,11 @@ public class UserRole { | |||||
@TableField("user_id") | @TableField("user_id") | ||||
private Long userId; | private Long userId; | ||||
@TableField(fill = FieldFill.INSERT) | |||||
private LocalDateTime createOn; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private Long createBy; | |||||
@Builder | @Builder | ||||
public UserRole(Long roleId, Long userId) { | public UserRole(Long roleId, Long userId) { | ||||
@@ -3,7 +3,10 @@ package com.ningdatech.pmapi.user.controller; | |||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.pmapi.user.manage.UserInfoManage; | import com.ningdatech.pmapi.user.manage.UserInfoManage; | ||||
import com.ningdatech.pmapi.user.model.po.*; | |||||
import com.ningdatech.pmapi.user.model.po.ReqUserDetailEditPO; | |||||
import com.ningdatech.pmapi.user.model.po.ReqUserDetailPO; | |||||
import com.ningdatech.pmapi.user.model.po.ReqUserDisableOrEnablePO; | |||||
import com.ningdatech.pmapi.user.model.po.ReqUserInfoListPO; | |||||
import com.ningdatech.pmapi.user.model.vo.ResUserDetailVO; | import com.ningdatech.pmapi.user.model.vo.ResUserDetailVO; | ||||
import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO; | import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO; | ||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
@@ -14,7 +17,6 @@ import org.springframework.web.bind.annotation.RequestBody; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | import org.springframework.web.bind.annotation.RequestMapping; | ||||
import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.validation.Valid; | import javax.validation.Valid; | ||||
/** | /** | ||||
@@ -31,26 +33,26 @@ public class UserInfoController { | |||||
@ApiOperation(value = "用户列表搜索", notes = "用户列表搜索") | @ApiOperation(value = "用户列表搜索", notes = "用户列表搜索") | ||||
@PostMapping("/list") | @PostMapping("/list") | ||||
public PageVo<ResUserInfoListVO> userInfoList(@Valid @RequestBody ReqUserInfoListPO reqUserInfoListPO) { | |||||
return userInfoManage.list(reqUserInfoListPO); | |||||
public PageVo<ResUserInfoListVO> userInfoList(@Valid @RequestBody ReqUserInfoListPO req) { | |||||
return userInfoManage.list(req); | |||||
} | } | ||||
@ApiOperation(value = "用户禁用/启用", notes = "用户禁用/启用") | @ApiOperation(value = "用户禁用/启用", notes = "用户禁用/启用") | ||||
@PostMapping("/disable-enable") | @PostMapping("/disable-enable") | ||||
public void disableOrEnable(@Valid @RequestBody ReqUserDisableOrEnablePO reqUserDisableOrEnablePO) { | |||||
userInfoManage.disableOrEnable(reqUserDisableOrEnablePO); | |||||
public void disableOrEnable(@Valid @RequestBody ReqUserDisableOrEnablePO req) { | |||||
userInfoManage.disableOrEnable(req); | |||||
} | } | ||||
@ApiOperation(value = "用户详情", notes = "用户详情") | @ApiOperation(value = "用户详情", notes = "用户详情") | ||||
@PostMapping("/detail") | @PostMapping("/detail") | ||||
public ResUserDetailVO userInfoDetail(@Valid @RequestBody ReqUserDetailPO reqUserDetailPO) { | |||||
return userInfoManage.userInfoDetail(reqUserDetailPO); | |||||
public ResUserDetailVO userInfoDetail(@Valid @RequestBody ReqUserDetailPO req) { | |||||
return userInfoManage.userInfoDetail(req); | |||||
} | } | ||||
@ApiOperation(value = "用户详情编辑", notes = "用户详情编辑") | @ApiOperation(value = "用户详情编辑", notes = "用户详情编辑") | ||||
@PostMapping("/detail/edit") | @PostMapping("/detail/edit") | ||||
public void userInfoDetailEdit(@Valid @RequestBody ReqUserDetailEditPO reqUserDetailEditPO) { | |||||
userInfoManage.userInfoDetailEdit(reqUserDetailEditPO); | |||||
public void userInfoDetailEdit(@Valid @RequestBody ReqUserDetailEditPO req) { | |||||
userInfoManage.userInfoDetailEdit(req); | |||||
} | } | ||||
@ApiOperation(value = "获取当前登陆用户详情信息", notes = "用户详情") | @ApiOperation(value = "获取当前登陆用户详情信息", notes = "用户详情") | ||||
@@ -17,7 +17,7 @@ import java.time.LocalDateTime; | |||||
*/ | */ | ||||
@TableName("nd_user_auth") | @TableName("nd_user_auth") | ||||
@Data | @Data | ||||
@ApiModel(value = "NdUserAuth对象", description = "") | |||||
@ApiModel(value = "NdUserAuth对象") | |||||
public class UserAuth implements Serializable { | public class UserAuth implements Serializable { | ||||
private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
@@ -1,8 +1,6 @@ | |||||
package com.ningdatech.pmapi.user.entity; | package com.ningdatech.pmapi.user.entity; | ||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import com.baomidou.mybatisplus.annotation.*; | |||||
import io.swagger.annotations.ApiModel; | import io.swagger.annotations.ApiModel; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import lombok.Builder; | import lombok.Builder; | ||||
@@ -25,7 +23,7 @@ import java.time.LocalDateTime; | |||||
@Data | @Data | ||||
@AllArgsConstructor | @AllArgsConstructor | ||||
@NoArgsConstructor | @NoArgsConstructor | ||||
@ApiModel(value = "NdUserInfo对象", description = "") | |||||
@ApiModel(value = "NdUserInfo对象") | |||||
public class UserInfo implements Serializable { | public class UserInfo implements Serializable { | ||||
private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
@@ -33,14 +31,6 @@ public class UserInfo implements Serializable { | |||||
@TableId(type = IdType.AUTO) | @TableId(type = IdType.AUTO) | ||||
private Long id; | private Long id; | ||||
private LocalDateTime createOn; | |||||
private LocalDateTime updateOn; | |||||
private Long createBy; | |||||
private Long updateBy; | |||||
private String username; | private String username; | ||||
private String mobile; | private String mobile; | ||||
@@ -53,4 +43,16 @@ public class UserInfo implements Serializable { | |||||
private String employeeCode; | private String employeeCode; | ||||
@TableField(fill = FieldFill.INSERT) | |||||
private LocalDateTime createOn; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private LocalDateTime updateOn; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private Long createBy; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private Long updateBy; | |||||
} | } |
@@ -1,41 +0,0 @@ | |||||
package com.ningdatech.pmapi.user.entity; | |||||
import com.baomidou.mybatisplus.annotation.*; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.io.Serializable; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* <p> | |||||
* 用户角色表 | |||||
* </p> | |||||
* | |||||
* @author Liuxinxin | |||||
* @since 2023-01-05 | |||||
*/ | |||||
@Data | |||||
@TableName("nd_user_role") | |||||
@ApiModel(value = "UserRole对象", description = "用户角色表") | |||||
public class UserRole implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@ApiModelProperty("用户 ID") | |||||
private Long userId; | |||||
@ApiModelProperty("角色 ID") | |||||
private Long roleId; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private LocalDateTime createOn; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private Long createBy; | |||||
} |
@@ -56,18 +56,18 @@ public class UserInfoManage { | |||||
private final RegionCacheHelper regionCacheHelper; | private final RegionCacheHelper regionCacheHelper; | ||||
public PageVo<ResUserInfoListVO> list(ReqUserInfoListPO reqUserInfoListPO) { | |||||
public PageVo<ResUserInfoListVO> list(ReqUserInfoListPO req) { | |||||
PageVo<ResUserInfoListVO> pageVo = new PageVo<>(); | PageVo<ResUserInfoListVO> pageVo = new PageVo<>(); | ||||
String phoneNo = reqUserInfoListPO.getPhoneNo(); | |||||
String orgCode = reqUserInfoListPO.getOrgCode(); | |||||
String name = reqUserInfoListPO.getName(); | |||||
String phoneNo = req.getPhoneNo(); | |||||
String orgCode = req.getOrgCode(); | |||||
String name = req.getName(); | |||||
List<String> roleCompliantEmployeeCodeList = getRoleCompliantEmployeeCodeList(reqUserInfoListPO.getUserRoleList()); | |||||
List<String> roleCompliantEmployeeCodeList = getRoleCompliantEmployeeCodeList(req.getUserRoleList()); | |||||
if (roleCompliantEmployeeCodeList != null && roleCompliantEmployeeCodeList.size() == 0) { | if (roleCompliantEmployeeCodeList != null && roleCompliantEmployeeCodeList.size() == 0) { | ||||
return pageVo; | return pageVo; | ||||
} | } | ||||
List<String> orgNameCompliantOrgCodeList = getOrgNameCompliantOrgCodeList(reqUserInfoListPO.getOrgName()); | |||||
List<String> orgNameCompliantOrgCodeList = getOrgNameCompliantOrgCodeList(req.getOrgName()); | |||||
if (orgNameCompliantOrgCodeList != null && orgNameCompliantOrgCodeList.size() == 0) { | if (orgNameCompliantOrgCodeList != null && orgNameCompliantOrgCodeList.size() == 0) { | ||||
return pageVo; | return pageVo; | ||||
} | } | ||||
@@ -80,7 +80,7 @@ public class UserInfoManage { | |||||
.in(Objects.nonNull(roleCompliantEmployeeCodeList), DingEmployeeInfo::getEmployeeCode, roleCompliantEmployeeCodeList) | .in(Objects.nonNull(roleCompliantEmployeeCodeList), DingEmployeeInfo::getEmployeeCode, roleCompliantEmployeeCodeList) | ||||
.in(Objects.nonNull(orgNameCompliantOrgCodeList), DingEmployeeInfo::getOrganizationCode, orgNameCompliantOrgCodeList); | .in(Objects.nonNull(orgNameCompliantOrgCodeList), DingEmployeeInfo::getOrganizationCode, orgNameCompliantOrgCodeList); | ||||
Page<DingEmployeeInfo> page = iDingEmployeeInfoService.page(new Page<>(reqUserInfoListPO.getPageNumber(), reqUserInfoListPO.getPageSize()), wrapper); | |||||
Page<DingEmployeeInfo> page = iDingEmployeeInfoService.page(new Page<>(req.getPageNumber(), req.getPageSize()), wrapper); | |||||
List<DingEmployeeInfo> records = page.getRecords(); | List<DingEmployeeInfo> records = page.getRecords(); | ||||
long total = page.getTotal(); | long total = page.getTotal(); | ||||
List<ResUserInfoListVO> result = new ArrayList<>(); | List<ResUserInfoListVO> result = new ArrayList<>(); | ||||
@@ -102,16 +102,16 @@ public class UserInfoManage { | |||||
Map<String, UserInfo> finalEmployeeCodeAvailableMap = employeeCodeAvailableMap; | Map<String, UserInfo> finalEmployeeCodeAvailableMap = employeeCodeAvailableMap; | ||||
records.forEach(r -> { | records.forEach(r -> { | ||||
ResUserInfoListVO resListVO = new ResUserInfoListVO(); | |||||
resListVO.setName(r.getEmployeeName()); | |||||
ResUserInfoListVO item = new ResUserInfoListVO(); | |||||
item.setName(r.getEmployeeName()); | |||||
String organizationCode = r.getOrganizationCode(); | String organizationCode = r.getOrganizationCode(); | ||||
if (StringUtils.isNotBlank(organizationCode) && orgMap.containsKey(organizationCode)) { | if (StringUtils.isNotBlank(organizationCode) && orgMap.containsKey(organizationCode)) { | ||||
resListVO.setOrgName(orgMap.get(organizationCode).getOrganizationName()); | |||||
resListVO.setOrgCode(organizationCode); | |||||
item.setOrgName(orgMap.get(organizationCode).getOrganizationName()); | |||||
item.setOrgCode(organizationCode); | |||||
String regionCode = orgMap.get(organizationCode).getDivisionCode(); | String regionCode = orgMap.get(organizationCode).getDivisionCode(); | ||||
resListVO.setRegionCode(regionCode); | |||||
item.setRegionCode(regionCode); | |||||
if (Objects.nonNull(regionCode)) { | if (Objects.nonNull(regionCode)) { | ||||
resListVO.setRegionName(regionCacheHelper.getDisplayName(regionCode, RegionConst.RL_COUNTY)); | |||||
item.setRegionName(regionCacheHelper.getDisplayName(regionCode, RegionConst.RL_COUNTY)); | |||||
} | } | ||||
} | } | ||||
// TODO 从用户信息中获取 | // TODO 从用户信息中获取 | ||||
@@ -119,22 +119,16 @@ public class UserInfoManage { | |||||
// resListVO.setRegionId(); | // resListVO.setRegionId(); | ||||
UserInfo userInfo = finalEmployeeCodeAvailableMap.get(r.getEmployeeCode()); | UserInfo userInfo = finalEmployeeCodeAvailableMap.get(r.getEmployeeCode()); | ||||
// 装配用户状态 及 userId | // 装配用户状态 及 userId | ||||
userStatusAssembler(resListVO, userInfo); | |||||
userStatusAssembler(item, userInfo); | |||||
if (Objects.isNull(userInfo)) { | if (Objects.isNull(userInfo)) { | ||||
resListVO.setUpdateTime(r.getUpdateOn()); | |||||
item.setUpdateTime(r.getUpdateOn()); | |||||
} else { | } else { | ||||
resListVO.setUpdateTime(userInfo.getUpdateOn()); | |||||
item.setUpdateTime(userInfo.getUpdateOn()); | |||||
} | } | ||||
// 从用户信息中获取 | |||||
resListVO.setEmployeeCode(r.getEmployeeCode()); | |||||
List<UserRoleVO> userRoles = getUserRoleVOList(resListVO.getUserId()); | |||||
resListVO.setUserRoleList(userRoles); | |||||
LocalDateTime roleModifyTime; | |||||
if (CollUtil.isNotEmpty(userRoles) && (roleModifyTime = userRoles.get(userRoles.size() - 1).getCreateOn()).isAfter(resListVO.getUpdateTime())) { | |||||
resListVO.setUpdateTime(roleModifyTime); | |||||
} | |||||
result.add(resListVO); | |||||
item.setEmployeeCode(r.getEmployeeCode()); | |||||
item.setUserRoleList(getUserRoleVOList(item.getUserId())); | |||||
result.add(item); | |||||
}); | }); | ||||
} | } | ||||
pageVo.setTotal(total); | pageVo.setTotal(total); | ||||
@@ -149,10 +143,9 @@ public class UserInfoManage { | |||||
List<DingOrganization> dingOrganizationList = iDingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | List<DingOrganization> dingOrganizationList = iDingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | ||||
.like(DingOrganization::getOrganizationName, orgName)); | .like(DingOrganization::getOrganizationName, orgName)); | ||||
List<String> orgCodeList = dingOrganizationList.stream() | |||||
return dingOrganizationList.stream() | |||||
.map(DingOrganization::getOrganizationCode) | .map(DingOrganization::getOrganizationCode) | ||||
.collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
return orgCodeList; | |||||
} | } | ||||
/** | /** | ||||
@@ -176,8 +169,8 @@ public class UserInfoManage { | |||||
// TODO 这里过滤的非浙政钉用户的专家 后续需要增加补充逻辑 | // TODO 这里过滤的非浙政钉用户的专家 后续需要增加补充逻辑 | ||||
return iUserInfoService.list(Wrappers.lambdaQuery(UserInfo.class) | return iUserInfoService.list(Wrappers.lambdaQuery(UserInfo.class) | ||||
.in(UserInfo::getId, compliantUserIdList)) | .in(UserInfo::getId, compliantUserIdList)) | ||||
.stream().filter(r -> StringUtils.isNotBlank(r.getEmployeeCode())) | |||||
.map(UserInfo::getEmployeeCode).collect(Collectors.toList()); | |||||
.stream().map(UserInfo::getEmployeeCode) | |||||
.filter(StringUtils::isNotBlank).collect(Collectors.toList()); | |||||
} | } | ||||
@@ -209,17 +202,17 @@ public class UserInfoManage { | |||||
return userRoleInfoList; | return userRoleInfoList; | ||||
} | } | ||||
List<UserRole> userRoleList = iUserRoleService.list(Wrappers.lambdaQuery(UserRole.class) | List<UserRole> userRoleList = iUserRoleService.list(Wrappers.lambdaQuery(UserRole.class) | ||||
.eq(UserRole::getUserId, userId)); | |||||
.eq(UserRole::getUserId, userId).orderByAsc(UserRole::getCreateOn)); | |||||
if (CollUtil.isNotEmpty(userRoleList)) { | if (CollUtil.isNotEmpty(userRoleList)) { | ||||
List<Long> roleIdList = userRoleList.stream().map(UserRole::getRoleId).collect(Collectors.toList()); | List<Long> roleIdList = userRoleList.stream().map(UserRole::getRoleId).collect(Collectors.toList()); | ||||
List<Role> roleList = iRoleService.list(Wrappers.lambdaQuery(Role.class).in(Role::getId, roleIdList)); | |||||
userRoleInfoList = roleList.stream().map(r -> { | |||||
List<Role> roleList = iRoleService.listByIds(roleIdList); | |||||
roleList.forEach(r -> { | |||||
UserRoleVO userRoleVO = new UserRoleVO(); | UserRoleVO userRoleVO = new UserRoleVO(); | ||||
userRoleVO.setId(r.getId()); | userRoleVO.setId(r.getId()); | ||||
userRoleVO.setName(r.getName()); | userRoleVO.setName(r.getName()); | ||||
userRoleVO.setCreateOn(r.getCreateOn()); | userRoleVO.setCreateOn(r.getCreateOn()); | ||||
return userRoleVO; | |||||
}).collect(Collectors.toList()); | |||||
userRoleInfoList.add(userRoleVO); | |||||
}); | |||||
} | } | ||||
return userRoleInfoList; | return userRoleInfoList; | ||||
} | } | ||||
@@ -281,6 +274,8 @@ public class UserInfoManage { | |||||
} | } | ||||
} | } | ||||
userInfo.setAvailable(reqUserDetailEditPO.getStatus()); | userInfo.setAvailable(reqUserDetailEditPO.getStatus()); | ||||
userInfo.setUpdateOn(LocalDateTime.now()); | |||||
userInfo.setUpdateBy(LoginUserUtil.getUserId()); | |||||
iUserInfoService.updateById(userInfo); | iUserInfoService.updateById(userInfo); | ||||
List<UserRoleVO> userRoleInfoList = reqUserDetailEditPO.getUserRoleInfoList(); | List<UserRoleVO> userRoleInfoList = reqUserDetailEditPO.getUserRoleInfoList(); | ||||