From e0fc8f7e2230b51e3bbe8dea43790cf11b7170e9 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期一, 04 十一月 2024 15:39:01 +0800 Subject: [PATCH] merge --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java | 273 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 252 insertions(+), 21 deletions(-) diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java index be37d3e..ea74c61 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java @@ -2,25 +2,40 @@ 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.Partner; +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.IPartnerService; +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.feignClient.SysUserRoleClient; import com.ruoyi.system.api.model.GetSysRoleByIds; +import com.ruoyi.system.api.model.SysUserRoleVo; +import io.seata.core.context.RootContext; +import io.seata.core.exception.TransactionException; +import io.seata.spring.annotation.GlobalTransactional; +import io.seata.tm.api.GlobalTransaction; +import io.seata.tm.api.GlobalTransactionContext; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -32,6 +47,30 @@ @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; + + @Resource + private SysUserRoleClient userRoleClient; @@ -55,10 +94,10 @@ List<SysRole> data = r.getData(); for (PartnerListDTO partnerListDTO : list) { Integer roleId = partnerListDTO.getRoleId(); - if(null != roleId){ + if(null == roleId){ continue; } - SysRole sysRole = data.stream().filter(s -> roleId.equals(s.getRoleId())).findFirst().get(); + SysRole sysRole = data.stream().filter(s -> roleId.compareTo(s.getRoleId().intValue()) == 0).findFirst().get(); if(null != sysRole){ partnerListDTO.setRoleName(sysRole.getRoleName()); } @@ -74,6 +113,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult addPartner(Partner partner) { //校验参数和重复数据 AjaxResult ajaxResult = addPartnerParameterCheck(partner); @@ -94,10 +134,26 @@ if(null != one){ return AjaxResult.error("登录账号不能重复"); } + //添加登录账户 + 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); + R<Long> r = sysUserClient.addSysUser(user); + if(200 != r.getCode()){ + throw new RuntimeException(r.getMsg()); + } //添加新数据 this.save(partner); - //添加登录账户 - + user = sysUserClient.getSysUser(r.getData()).getData(); + user.setObjectId(partner.getId()); + sysUserClient.updateUser(user); return AjaxResult.success(); } @@ -120,10 +176,10 @@ if(StringUtils.isEmpty(partner.getPhoneOne())){ return AjaxResult.error("合作商电话1不能为空"); } - if(StringUtils.isEmpty(partner.getAccount())){ + if(null == partner.getId() && StringUtils.isEmpty(partner.getAccount())){ return AjaxResult.error("登录账号不能为空"); } - if(StringUtils.isEmpty(partner.getPassword())){ + if(null == partner.getId() && StringUtils.isEmpty(partner.getPassword())){ return AjaxResult.error("登录密码不能为空"); } return AjaxResult.success(); @@ -138,6 +194,9 @@ @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 @@ -159,6 +218,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult editPartner(Partner partner) { //校验参数和重复数据 AjaxResult ajaxResult = addPartnerParameterCheck(partner); @@ -179,28 +239,73 @@ if(null != one && !one.getId().equals(partner.getId())){ return AjaxResult.error("登录账号不能重复"); } + Partner oldPartner = this.getById(partner.getId()); + SysUser user = sysUserClient.queryUserByUserName(oldPartner.getAccount()).getData(); + //修改登录账户 + 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()); + } + } + //修改数据 this.updateById(partner); - //修改登录账户 - return AjaxResult.success(); } /** * 删除合作商 - * @param id 合作商id + * @param ids 合作商id */ @Override - public void delPartner(Integer id) { + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 + public AjaxResult delPartner(List<Integer> ids) { //查询有无关联数据 //站点 - + long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, ids).eq(Site::getDelFlag, 0)); + if(count > 0){ + return AjaxResult.error("该合作商已关联站点不可删除"); + } //充电桩 - - Partner partner = this.getById(id); - partner.setDelFlag(true); - this.updateById(partner); + long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getPartnerId, 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("删除失败"); + } + this.removeById(id); + SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData(); + user.setDelFlag("2"); + sysUserClient.updateUser(user); + } + return AjaxResult.success(); } @@ -209,6 +314,7 @@ * @param resetPassword */ @Override + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult resetPassword(ResetPassword resetPassword) { if(null == resetPassword.getId()){ return AjaxResult.error("合作商id不能为空"); @@ -220,7 +326,132 @@ 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); + if(null == partner){ + throw new RuntimeException("该站点合作商无效"); + } + GetPermissionConfigurationDTO dto = new GetPermissionConfigurationDTO(); + dto.setPermissionRemarks(partner.getPermissionRemarks()); + 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)); + List<Map<String, Object>> list1 = new ArrayList<>(); + for (TSiteMenu tSiteMenu : tSiteMenus) { + Map<String, Object> menu = new HashMap<>(); + 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)); + List<Map<String, Object>> list2 = new ArrayList<>(); + for (TSiteMenu siteMenu : tSiteMenus1) { + Map<String, Object> child = new HashMap<>(); + 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())); + list2.add(child); + } + menu.put("selected", collect.contains(tSiteMenu.getMenuId())); + menu.put("child", list2); + list1.add(menu); + } + dto.setMenu(list1); + 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<SysUserRoleVo> data2 = userRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).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; + } } -- Gitblit v1.7.1