package com.ruoyi.chargingPile.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.chargingPile.api.dto.GetPermissionConfigurationDTO;
|
import com.ruoyi.chargingPile.api.dto.PartnerListDTO;
|
import com.ruoyi.chargingPile.api.model.*;
|
import com.ruoyi.chargingPile.api.query.GetPartnerList;
|
import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration;
|
import com.ruoyi.chargingPile.domain.SiteMenu;
|
import com.ruoyi.chargingPile.dto.ResetPassword;
|
import com.ruoyi.chargingPile.mapper.PartnerMapper;
|
import com.ruoyi.chargingPile.service.*;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.web.domain.AjaxResult;
|
import com.ruoyi.common.core.web.page.PageInfo;
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
import com.ruoyi.other.api.feignClient.RoleSiteClient;
|
import com.ruoyi.other.api.feignClient.UserSiteClient;
|
import com.ruoyi.system.api.domain.SysRole;
|
import com.ruoyi.system.api.domain.SysUser;
|
import com.ruoyi.system.api.feignClient.SysRoleClient;
|
import com.ruoyi.system.api.feignClient.SysUserClient;
|
import com.ruoyi.system.api.model.GetSysRoleByIds;
|
import io.seata.spring.annotation.GlobalTransactional;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2024/8/7 13:49
|
*/
|
@Service
|
public class PartnerServiceImpl extends ServiceImpl<PartnerMapper, Partner> implements IPartnerService {
|
|
@Resource
|
private SysRoleClient sysRoleClient;
|
|
@Resource
|
private SysUserClient sysUserClient;
|
|
@Resource
|
private ISiteService siteService;
|
|
@Resource
|
private TPartnerSiteService partnerSiteService;
|
|
@Resource
|
private TSiteMenuService siteMenuService;
|
|
@Resource
|
private TChargingPileService chargingPileService;
|
|
@Resource
|
private UserSiteClient userSiteClient;
|
|
@Resource
|
private RoleSiteClient roleSiteClient;
|
|
|
|
/**
|
* 获取合作商列表数据
|
* @param partnerList
|
* @return
|
*/
|
@Override
|
public PageInfo<PartnerListDTO> getPartnerList(GetPartnerList partnerList) {
|
PageInfo<PartnerListDTO> pageInfo = new PageInfo(partnerList.getPageCurr(), partnerList.getPageSize());
|
List<PartnerListDTO> list = this.baseMapper.getPartnerList(pageInfo, partnerList);
|
List<Integer> roleIds = list.stream().map(PartnerListDTO::getRoleId).collect(Collectors.toList());
|
GetSysRoleByIds ids = new GetSysRoleByIds();
|
ids.setIds(roleIds);
|
//获取相关的角色id
|
R<List<SysRole>> r = sysRoleClient.getSysRoleByIds(ids);
|
if(r.getCode() != 200){
|
throw new RuntimeException(r.getMsg());
|
}
|
List<SysRole> data = r.getData();
|
for (PartnerListDTO partnerListDTO : list) {
|
Integer roleId = partnerListDTO.getRoleId();
|
if(null != roleId){
|
continue;
|
}
|
SysRole sysRole = data.stream().filter(s -> roleId.equals(s.getRoleId())).findFirst().get();
|
if(null != sysRole){
|
partnerListDTO.setRoleName(sysRole.getRoleName());
|
}
|
}
|
pageInfo.setRecords(list);
|
return pageInfo;
|
}
|
|
|
/**
|
* 添加合作商
|
* @param partner
|
* @return
|
*/
|
@Override
|
@GlobalTransactional(rollbackFor = Exception.class)//分布式事务
|
public AjaxResult addPartner(Partner partner) {
|
//校验参数和重复数据
|
AjaxResult ajaxResult = addPartnerParameterCheck(partner);
|
if(ajaxResult.isError()){
|
return ajaxResult;
|
}
|
Partner one = this.getOne(new LambdaQueryWrapper<Partner>()
|
.eq(Partner::getCode, partner.getCode())
|
.eq(Partner::getDelFlag, 0)
|
);
|
if(null != one){
|
return AjaxResult.error("合作商ID已存在");
|
}
|
one = this.getOne(new LambdaQueryWrapper<Partner>()
|
.eq(Partner::getAccount, partner.getAccount())
|
.eq(Partner::getDelFlag, 0)
|
);
|
if(null != one){
|
return AjaxResult.error("登录账号不能重复");
|
}
|
//添加新数据
|
this.save(partner);
|
//添加登录账户
|
SysUser user = new SysUser();
|
user.setPhonenumber(partner.getPhoneOne());
|
user.setUserName(partner.getAccount());
|
user.setNickName(partner.getName());
|
user.setAvatar(partner.getLogoUrl());
|
user.setPassword(partner.getPassword());
|
user.setStatus("0");
|
user.setDelFlag("0");
|
user.setRoleId(partner.getRoleId().longValue());
|
user.setRoleType(2);
|
user.setObjectId(partner.getId());
|
R r = sysUserClient.addSysUser(user);
|
if(200 != r.getCode()){
|
throw new RuntimeException(r.getMsg());
|
}
|
return AjaxResult.success();
|
}
|
|
|
/**
|
* 校验参数是否为空
|
* @param partner
|
* @return
|
*/
|
AjaxResult addPartnerParameterCheck(Partner partner){
|
if(StringUtils.isEmpty(partner.getCode())){
|
return AjaxResult.error("合作商ID不能为空");
|
}
|
if(StringUtils.isEmpty(partner.getName())){
|
return AjaxResult.error("合作商名称不能为空");
|
}
|
if(null == partner.getRoleId()){
|
return AjaxResult.error("合作商角色不能为空");
|
}
|
if(StringUtils.isEmpty(partner.getPhoneOne())){
|
return AjaxResult.error("合作商电话1不能为空");
|
}
|
if(StringUtils.isEmpty(partner.getAccount())){
|
return AjaxResult.error("登录账号不能为空");
|
}
|
if(StringUtils.isEmpty(partner.getPassword())){
|
return AjaxResult.error("登录密码不能为空");
|
}
|
return AjaxResult.success();
|
}
|
|
|
/**
|
* 获取合作商详情
|
* @param id 合作商id
|
* @return
|
*/
|
@Override
|
public Partner getPartner(Integer id) {
|
Partner partner = this.getById(id);
|
if(null == partner){
|
return partner;
|
}
|
GetSysRoleByIds ids = new GetSysRoleByIds();
|
ids.setIds(Arrays.asList(partner.getRoleId()));
|
//获取相关的角色id
|
R<List<SysRole>> r = sysRoleClient.getSysRoleByIds(ids);
|
if(r.getCode() != 200){
|
throw new RuntimeException(r.getMsg());
|
}
|
List<SysRole> data = r.getData();
|
if(data.size() > 0){
|
partner.setRoleName(data.get(0).getRoleName());
|
}
|
return partner;
|
}
|
|
|
/**
|
* 编辑合作商
|
* @param partner
|
* @return
|
*/
|
@Override
|
@GlobalTransactional(rollbackFor = Exception.class)//分布式事务
|
public AjaxResult editPartner(Partner partner) {
|
//校验参数和重复数据
|
AjaxResult ajaxResult = addPartnerParameterCheck(partner);
|
if(ajaxResult.isError()){
|
return ajaxResult;
|
}
|
Partner one = this.getOne(new LambdaQueryWrapper<Partner>()
|
.eq(Partner::getCode, partner.getCode())
|
.eq(Partner::getDelFlag, 0)
|
);
|
if(null != one && !one.getId().equals(partner.getId())){
|
return AjaxResult.error("合作商ID已存在");
|
}
|
one = this.getOne(new LambdaQueryWrapper<Partner>()
|
.eq(Partner::getAccount, partner.getAccount())
|
.eq(Partner::getDelFlag, 0)
|
);
|
if(null != one && !one.getId().equals(partner.getId())){
|
return AjaxResult.error("登录账号不能重复");
|
}
|
Partner oldPartner = this.getById(partner.getId());
|
SysUser user = sysUserClient.queryUserByUserName(oldPartner.getAccount()).getData();
|
|
//修改数据
|
this.updateById(partner);
|
//修改登录账户
|
if(null == user){
|
user = new SysUser();
|
user.setStatus("0");
|
user.setDelFlag("0");
|
user.setPhonenumber(partner.getPhoneOne());
|
user.setUserName(partner.getAccount());
|
user.setNickName(partner.getName());
|
user.setAvatar(partner.getLogoUrl());
|
user.setPassword(partner.getPassword());
|
user.setRoleId(partner.getRoleId().longValue());
|
user.setRoleType(2);
|
user.setObjectId(partner.getId());
|
R r = sysUserClient.addSysUser(user);
|
if(200 != r.getCode()){
|
throw new RuntimeException(r.getMsg());
|
}
|
}else{
|
user.setPhonenumber(partner.getPhoneOne());
|
user.setUserName(partner.getAccount());
|
user.setNickName(partner.getName());
|
user.setAvatar(partner.getLogoUrl());
|
user.setPassword(partner.getPassword());
|
user.setRoleId(partner.getRoleId().longValue());
|
R r = sysUserClient.updateSysUser(user);
|
if(200 != r.getCode()){
|
throw new RuntimeException(r.getMsg());
|
}
|
}
|
return AjaxResult.success();
|
}
|
|
|
/**
|
* 删除合作商
|
* @param ids 合作商id
|
*/
|
@Override
|
@GlobalTransactional(rollbackFor = Exception.class)//分布式事务
|
public AjaxResult delPartner(Integer[] ids) {
|
//查询有无关联数据
|
//站点
|
long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, Arrays.asList(ids)).eq(Site::getDelFlag, 0));
|
if(count > 0){
|
return AjaxResult.error("当前合作商有关联站点,删除失败!");
|
}
|
//充电桩
|
long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getPartnerId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0));
|
if(count1 > 0){
|
return AjaxResult.error("当前合作商有关联充电桩,删除失败!");
|
}
|
for (Integer id : ids) {
|
Partner partner = this.getById(id);
|
if(null == partner){
|
return AjaxResult.error("删除失败");
|
}
|
partner.setDelFlag(true);
|
this.updateById(partner);
|
SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData();
|
user.setDelFlag("2");
|
sysUserClient.updateUser(user);
|
}
|
return AjaxResult.success();
|
}
|
|
|
/**
|
* 重置密码
|
* @param resetPassword
|
*/
|
@Override
|
@GlobalTransactional(rollbackFor = Exception.class)//分布式事务
|
public AjaxResult resetPassword(ResetPassword resetPassword) {
|
if(null == resetPassword.getId()){
|
return AjaxResult.error("合作商id不能为空");
|
}
|
if(StringUtils.isEmpty(resetPassword.getPassword())){
|
return AjaxResult.error("密码不能为空");
|
}
|
Partner partner = this.getById(resetPassword.getId());
|
partner.setPassword(resetPassword.getPassword());
|
this.updateById(partner);
|
//修改登录账号的密码
|
SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData();
|
user.setPassword(partner.getPassword());
|
sysUserClient.resetPassword(user);
|
return AjaxResult.success();
|
}
|
|
|
/**
|
* 获取合作商权限
|
* @return
|
*/
|
@Override
|
public GetPermissionConfigurationDTO getPermissionConfiguration(Integer siteId, Integer partnerId) {
|
Partner partner = this.getById(partnerId);
|
GetPermissionConfigurationDTO dto = new GetPermissionConfigurationDTO();
|
dto.setPermissionRemarks(partner.getPermissionRemarks());
|
Map<String, Object> menu = new HashMap<>();
|
List<TPartnerSite> list = partnerSiteService.list(new LambdaQueryWrapper<TPartnerSite>()
|
.eq(TPartnerSite::getPartnerId, partnerId)
|
.eq(TPartnerSite::getSiteId, siteId));
|
List<Integer> collect = list.stream().map(TPartnerSite::getSiteMenuId).collect(Collectors.toList());
|
List<TSiteMenu> tSiteMenus = siteMenuService.list(new LambdaQueryWrapper<TSiteMenu>()
|
.eq(TSiteMenu::getParentId, 0)
|
.eq(TSiteMenu::getVisible, 0)
|
.eq(TSiteMenu::getStatus, 0).orderByAsc(TSiteMenu::getOrderNum));
|
for (TSiteMenu tSiteMenu : tSiteMenus) {
|
menu.put("id", tSiteMenu.getMenuId());
|
menu.put("name", tSiteMenu.getMenuName());
|
menu.put("path", tSiteMenu.getPath());
|
menu.put("type", tSiteMenu.getMenuType());
|
|
List<TSiteMenu> tSiteMenus1 = siteMenuService.list(new LambdaQueryWrapper<TSiteMenu>()
|
.eq(TSiteMenu::getParentId, tSiteMenu.getMenuId())
|
.eq(TSiteMenu::getVisible, 0)
|
.eq(TSiteMenu::getStatus, 0).orderByAsc(TSiteMenu::getOrderNum));
|
Map<String, Object> child = new HashMap<>();
|
for (TSiteMenu siteMenu : tSiteMenus1) {
|
child.put("id", siteMenu.getMenuId());
|
child.put("name", siteMenu.getMenuName());
|
child.put("path", siteMenu.getPath());
|
child.put("type", siteMenu.getMenuType());
|
child.put("selected", collect.contains(siteMenu.getMenuId()));
|
}
|
menu.put("selected", child.keySet().size() > 0 ? true : false);
|
menu.put("child", child);
|
}
|
dto.setMenu(menu);
|
return dto;
|
}
|
|
|
/**
|
* 合作商权限配置
|
* @param req
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void setPermissionConfiguration(SetPermissionConfiguration req) {
|
//删除原始配置
|
partnerSiteService.remove(new LambdaQueryWrapper<TPartnerSite>().eq(TPartnerSite::getPartnerId, req.getPartnerId()).eq(TPartnerSite::getSiteId, req.getSiteId()));
|
//添加新的配置
|
List<TPartnerSite> sites = new ArrayList<>();
|
List<Integer> list = req.getMenuId();
|
for (Integer integer : list) {
|
TPartnerSite partnerSite = new TPartnerSite();
|
partnerSite.setPartnerId(req.getPartnerId());
|
partnerSite.setSiteId(req.getSiteId());
|
partnerSite.setSiteMenuId(integer);
|
sites.add(partnerSite);
|
}
|
partnerSiteService.saveBatch(sites);
|
//修改权限配置
|
Partner partner = this.getById(req.getPartnerId());
|
partner.setPermissionRemarks(req.getPermissionRemarks());
|
this.updateById(partner);
|
}
|
|
|
/**
|
* 获取合作商授权的站点数据
|
* @param siteMenu 授权菜单路径枚举类
|
* @return
|
*/
|
@Override
|
public Set<Integer> authSite(Integer partnerId, SiteMenu siteMenu) {
|
TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, siteMenu.getValue()).eq(TSiteMenu::getStatus, 0));
|
List<TPartnerSite> list = partnerSiteService.list(new LambdaQueryWrapper<TPartnerSite>()
|
.eq(TPartnerSite::getPartnerId, partnerId)
|
.eq(TPartnerSite::getSiteMenuId, one.getMenuId()));
|
List<Integer> collect = list.stream().map(TPartnerSite::getSiteId).collect(Collectors.toList());
|
//获取合作商用户关联的站点数据
|
Partner partner = this.getById(partnerId);
|
SysUser sysUser = sysUserClient.queryUserByUserName(partner.getAccount()).getData();
|
List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
|
List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData();
|
collect.addAll(data);
|
collect.addAll(data1);
|
Set<Integer> siteIds = new HashSet<>(collect);
|
if(siteIds.size() == 0){
|
siteIds.add(-1);
|
}
|
return siteIds;
|
}
|
|
|
/**
|
* 判断当前账户是否有权限
|
* @param siteId 站点id
|
* @param siteMenu 菜单路径枚举类
|
* @return
|
*/
|
@Override
|
public boolean authMenu(Integer partnerId, Integer siteId, SiteMenu siteMenu) {
|
TSiteMenu one = siteMenuService.getOne(new LambdaQueryWrapper<TSiteMenu>().eq(TSiteMenu::getPath, siteMenu.getValue()).eq(TSiteMenu::getStatus, 0));
|
TPartnerSite partnerSite = partnerSiteService.getOne(new LambdaQueryWrapper<TPartnerSite>()
|
.eq(TPartnerSite::getPartnerId, partnerId)
|
.eq(TPartnerSite::getSiteMenuId, one.getMenuId())
|
.eq(TPartnerSite::getSiteId, siteId));
|
return null == partnerSite ? false : true;
|
}
|
}
|