package com.fdkankan.manage.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fdkankan.manage.common.ExcelErrorUtil;
import com.fdkankan.manage.common.PageInfo;
import com.fdkankan.manage.common.ResultCode;
import com.fdkankan.manage.entity.*;
import com.fdkankan.manage.service.*;
import com.fdkankan.manage.vo.JyUserPlatform;
import com.fdkankan.manage.exception.BusinessException;
import com.fdkankan.manage.mapper.IJyUserPlatformMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.manage.vo.request.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.management.relation.Role;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author
* @since 2024-11-15
*/
@Service
@Slf4j
public class JyUserPlatformServiceImpl extends ServiceImpl implements IJyUserPlatformService {
@Autowired
IJyPlatformService platformService;
@Autowired
IJyUserService jyUserService;
@Autowired
ISysUserService sysUserService;
@Autowired
ISysRoleService sysRoleService;
@Override
public void bindPlatform(Integer id, Integer platformId) {
jyUserService.updatePlatformId(id,platformId);
}
@Override
public void addByParam(JyUserPlatformAddParam param) {
if(param.getId() == null){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
Integer loginPlatformId = this.getLoginPlatformId();
if(loginPlatformId == null){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
param.setPlatformId(loginPlatformId);
JyUser jyUser = jyUserService.getById(param.getId());
SysUser byId = sysUserService.getById(jyUser.getSysUserId());
if(byId.getRoleId() != 47L ){
throw new BusinessException(ResultCode.PLATFORM_USER_ADDERROR);
}
this.bindPlatform(param.getId(),loginPlatformId);
}
@Override
public void updateByParam(JyUserPlatformAddParam param) {
if(param.getId() == null || param.getPlatformId() == null){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
JyUser jyUser = jyUserService.getById(param.getId());
SysUser byId = sysUserService.getById(jyUser.getSysUserId());
if(byId.getRoleId() != 47L ){
throw new BusinessException(ResultCode.PLATFORM_USER_ADDERROR);
}
this.bindPlatform(param.getId(),param.getPlatformId());
}
@Override
public void del(JyUserPlatformAddParam param) {
if(param.getId() == null){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(JyUserPlatform::getId,param.getId());
this.removeById(wrapper);
}
@Override
public Object pageList(JyUserPlatformParam param) {
SysUser byId = sysUserService.getById(Long.valueOf(StpUtil.getLoginId().toString()));
if(byId.getRoleId() != 1L ){
Integer loginPlatformId = getLoginPlatformId();
if(loginPlatformId == null){
return PageInfo.PageInfo(new Page<>(param.getPageNum(),param.getPageSize()));
}
param.setPlatformId(getLoginPlatformId());
}
Page page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
List ids = page.getRecords().stream().map(JyUserPlatform::getPlatformId).collect(Collectors.toList());
HashMap map = new HashMap<>();
if(!ids.isEmpty()){
List jyPlatforms = platformService.listByIds(ids);
jyPlatforms.forEach(e -> map.put(e.getId(),e));
}
for (JyUserPlatformVo record : page.getRecords()) {
if(record.getRyId() == null){
record.setCreateTime(null);
}
JyPlatform jyPlatform = map.get(record.getPlatformId());
if(jyPlatform != null){
record.setPlatformName(jyPlatform.getPlatformName());
}
}
return PageInfo.PageInfo(page);
}
@Override
public Object queryByKey(JyUserPlatformParam param) {
if(StringUtils.isBlank(param.getQueryKey())){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
List jyUserPlatforms = this.getBaseMapper().queryByKey(param.getQueryKey());
List collect = jyUserPlatforms.stream().map(JyUserPlatform::getPlatformId).filter(Objects::nonNull).collect(Collectors.toList());
HashMap map = new HashMap<>();
if(!collect.isEmpty()){
List jyPlatforms = platformService.listByIds(collect);
jyPlatforms.forEach(e -> map.put(e.getId(),e));
}
List sysUserIds = jyUserPlatforms.stream().map(JyUserPlatform::getSysUserId).collect(Collectors.toList());
HashMap sysUserMap = new HashMap<>();
HashMap roleMap = new HashMap<>();
if(!sysUserIds.isEmpty()){
List sysUsers = sysUserService.listByIds(sysUserIds);
sysUsers.forEach(e -> sysUserMap.put(e.getId(),e));
List roleIds = sysUsers.stream().map(SysUser::getRoleId).collect(Collectors.toList());
if(!roleIds.isEmpty()){
List sysRoles = sysRoleService.listByIds(roleIds);
sysRoles.forEach(e -> roleMap.put(e.getId(),e));
}
}
for (JyUserPlatform jyUserPlatform : jyUserPlatforms) {
if(jyUserPlatform.getPlatformId()!=null){
JyPlatform jyPlatform =map.get(jyUserPlatform.getPlatformId());
if(jyPlatform != null){
jyUserPlatform.setPlatformName(jyPlatform.getPlatformName());
}
SysUser sysUser = sysUserMap.get(jyUserPlatform.getSysUserId());
if(sysUser != null){
jyUserPlatform.setRoleId(sysUser.getRoleId());
}
SysRole sysRole = roleMap.get(jyUserPlatform.getRoleId());
if(sysRole != null){
jyUserPlatform.setRoleName(sysRole.getRoleName());
}
}
}
return jyUserPlatforms;
}
@Override
public Integer getLoginPlatformId(){
try {
return Integer.valueOf(StpUtil.getExtra("platformId").toString());
}catch (Exception e){
log.info("StpUtil.getExtra -- platformId-error:{}",e);
}
return null;
}
@Autowired
IExcelService excelService;
@Override
public Integer addPlatformUser(List> excelRowList) {
List params = new ArrayList<>();
List errorIndex = new ArrayList<>();
List updatePlatformUserList = new ArrayList<>();
Integer index = 0;
for (HashMap map : excelRowList) {
index++;
if (map.isEmpty()) {
continue;
}
if (index == 0 && !map.get(0).equals("平台用户模板")) {
throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
}
if (index < 4) {
continue;
}
String name = map.get(0);
if(StringUtils.isBlank(name) ){
errorIndex.add(index -3 );
continue;
}
JyUser user = jyUserService.getByNickName(name);
if(user != null && user.getPlatformId() == null){
updatePlatformUserList.add(user.getId());
continue;
}
if(user != null ){
errorIndex.add(index -3 );
continue;
}
JyPlatformUserWait jyPlatformUserWait = platformUserWaitService.getByName(name);
if(jyPlatformUserWait != null ){
errorIndex.add(index -3 );
continue;
}
List collect = params.stream().filter(e -> e.getName().equals(name)).collect(Collectors.toList());
if(!collect.isEmpty()){
errorIndex.add(index -3 );
continue;
}
JyUserPlatformAddParam param = new JyUserPlatformAddParam();
param.setName(name);
params.add(param);
}
if(!errorIndex.isEmpty()){
excelService.toExcelError(errorIndex);
}
if(params.size() <=0 && updatePlatformUserList.isEmpty()){
throw new BusinessException(ResultCode.TEMPLATE_EMPTY);
}
Integer count = this.addPlatformUsers(params);
Integer count1 = 0;
for (Integer jyUserId : updatePlatformUserList) {
if(getLoginPlatformId() != null){
jyUserService.updatePlatformId(jyUserId,getLoginPlatformId());
count1 ++;
}
}
return count1 + count;
}
@Autowired
IJyPlatformUserWaitService platformUserWaitService;
private Integer addPlatformUsers(List params) {
Integer count = 0;
for (JyUserPlatformAddParam param : params) {
JyPlatformUserWait jyPlatformUserWait = new JyPlatformUserWait();
jyPlatformUserWait.setName(param.getName());
jyPlatformUserWait.setPlatformId(this.getLoginPlatformId());
platformUserWaitService.save(jyPlatformUserWait);
count ++;
}
return count;
}
}