From 4d54d652b4bdb4ab2f3ee6ba670348fab9b07365 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期二, 13 八月 2024 11:00:53 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java | 199 +++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 167 insertions(+), 32 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 4b0e2ca..8c79e0e 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,18 +2,22 @@ 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.Site; +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.ISiteService; +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; @@ -22,10 +26,10 @@ 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.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -43,6 +47,21 @@ @Resource private ISiteService siteService; + + @Resource + private TPartnerSiteService partnerSiteService; + + @Resource + private TSiteMenuService siteMenuService; + + @Resource + private TChargingPileService chargingPileService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; @@ -85,7 +104,7 @@ * @return */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult addPartner(Partner partner) { //校验参数和重复数据 AjaxResult ajaxResult = addPartnerParameterCheck(partner); @@ -110,9 +129,8 @@ this.save(partner); //添加登录账户 SysUser user = new SysUser(); - user.setAccount(partner.getAccount()); user.setPhonenumber(partner.getPhoneOne()); - user.setUserName(partner.getName()); + user.setUserName(partner.getAccount()); user.setNickName(partner.getName()); user.setAvatar(partner.getLogoUrl()); user.setPassword(partner.getPassword()); @@ -189,7 +207,7 @@ * @return */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult editPartner(Partner partner) { //校验参数和重复数据 AjaxResult ajaxResult = addPartnerParameterCheck(partner); @@ -211,7 +229,7 @@ return AjaxResult.error("登录账号不能重复"); } Partner oldPartner = this.getById(partner.getId()); - SysUser user = sysUserClient.queryUserByAccount(oldPartner.getAccount()).getData(); + SysUser user = sysUserClient.queryUserByUserName(oldPartner.getAccount()).getData(); //修改数据 this.updateById(partner); @@ -220,9 +238,8 @@ user = new SysUser(); user.setStatus("0"); user.setDelFlag("0"); - user.setAccount(partner.getAccount()); user.setPhonenumber(partner.getPhoneOne()); - user.setUserName(partner.getName()); + user.setUserName(partner.getAccount()); user.setNickName(partner.getName()); user.setAvatar(partner.getLogoUrl()); user.setPassword(partner.getPassword()); @@ -234,9 +251,8 @@ throw new RuntimeException(r.getMsg()); } }else{ - user.setAccount(partner.getAccount()); user.setPhonenumber(partner.getPhoneOne()); - user.setUserName(partner.getName()); + user.setUserName(partner.getAccount()); user.setNickName(partner.getName()); user.setAvatar(partner.getLogoUrl()); user.setPassword(partner.getPassword()); @@ -252,29 +268,33 @@ /** * 删除合作商 - * @param id 合作商id + * @param ids 合作商id */ @Override - @GlobalTransactional//分布式事务 - public AjaxResult delPartner(Integer id) { + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 + public AjaxResult delPartner(Integer[] ids) { //查询有无关联数据 //站点 - long count = siteService.count(new LambdaQueryWrapper<Site>().eq(Site::getPartnerId, id).eq(Site::getDelFlag, 0)); + long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, Arrays.asList(ids)).eq(Site::getDelFlag, 0)); if(count > 0){ - return AjaxResult.error("当前合作商有关联得站点,删除失败!"); + return AjaxResult.error("当前合作商有关联站点,删除失败!"); } - // todo 代码完善 //充电桩 - - Partner partner = this.getById(id); - if(null == partner){ - 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("当前合作商有关联充电桩,删除失败!"); } - partner.setDelFlag(true); - this.updateById(partner); - SysUser user = sysUserClient.queryUserByAccount(partner.getAccount()).getData(); - user.setDelFlag("2"); - sysUserClient.updateUser(user); + 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(); } @@ -284,7 +304,7 @@ * @param resetPassword */ @Override - @GlobalTransactional//分布式事务 + @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 public AjaxResult resetPassword(ResetPassword resetPassword) { if(null == resetPassword.getId()){ return AjaxResult.error("合作商id不能为空"); @@ -296,9 +316,124 @@ partner.setPassword(resetPassword.getPassword()); this.updateById(partner); //修改登录账号的密码 - SysUser user = sysUserClient.queryUserByAccount(partner.getAccount()).getData(); + 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; + } } -- Gitblit v1.7.1