| | |
| | | package com.ruoyi.chargingPile.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | 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.api.domain.SiteMenu; |
| | | import com.ruoyi.chargingPile.dto.ResetPassword; |
| | | import com.ruoyi.chargingPile.mapper.PartnerMapper; |
| | | import com.ruoyi.chargingPile.service.*; |
| | |
| | | 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.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | */ |
| | | @Service |
| | | public class PartnerServiceImpl extends ServiceImpl<PartnerMapper, Partner> implements IPartnerService { |
| | | |
| | | @Resource |
| | | private SysRoleClient sysRoleClient; |
| | | |
| | | @Resource |
| | | private SysUserClient sysUserClient; |
| | |
| | | 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.compareTo(s.getRoleId().intValue()) == 0).findFirst().get(); |
| | | if(null != sysRole){ |
| | | partnerListDTO.setRoleName(sysRole.getRoleName()); |
| | | } |
| | | } |
| | | pageInfo.setRecords(list); |
| | | return pageInfo; |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 |
| | | public AjaxResult addPartner(Partner partner) { |
| | | //校验参数和重复数据 |
| | | AjaxResult ajaxResult = addPartnerParameterCheck(partner); |
| | | if(ajaxResult.isError()){ |
| | | return ajaxResult; |
| | | } |
| | | assignDefaultRole(partner); |
| | | Partner one = this.getOne(new LambdaQueryWrapper<Partner>() |
| | | .eq(Partner::getCode, partner.getCode()) |
| | | .eq(Partner::getDelFlag, 0) |
| | |
| | | user.setDelFlag("0"); |
| | | user.setRoleId(partner.getRoleId().longValue()); |
| | | user.setRoleType(2); |
| | | user.setObjectId(partner.getId()); |
| | | //添加新数据 |
| | | this.save(partner); |
| | | R r = sysUserClient.addSysUser(user); |
| | | user.setPassWordUpdate(new Date()); |
| | | 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(); |
| | | } |
| | | |
| | |
| | | if(StringUtils.isEmpty(partner.getName())){ |
| | | return AjaxResult.error("合作商名称不能为空"); |
| | | } |
| | | if(null == partner.getRoleId()){ |
| | | return AjaxResult.error("合作商角色不能为空"); |
| | | if(null == partner.getPartnerType()){ |
| | | return AjaxResult.error("合作商类型不能为空"); |
| | | } |
| | | if(StringUtils.isEmpty(partner.getPhoneOne())){ |
| | | return AjaxResult.error("合作商电话1不能为空"); |
| | |
| | | if(null == partner.getId() && StringUtils.isEmpty(partner.getPassword())){ |
| | | return AjaxResult.error("登录密码不能为空"); |
| | | } |
| | | if (isInvalidShareRatio(partner.getElectricityShareRatio())) { |
| | | return AjaxResult.error("电费分成比例必须为0-100且最多两位小数"); |
| | | } |
| | | if (isInvalidShareRatio(partner.getServiceShareRatio())) { |
| | | return AjaxResult.error("服务费分成比例必须为0-100且最多两位小数"); |
| | | } |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | private boolean isInvalidShareRatio(BigDecimal ratio) { |
| | | if (ratio == null) { |
| | | return false; |
| | | } |
| | | if (ratio.compareTo(BigDecimal.ZERO) < 0 || ratio.compareTo(new BigDecimal("100")) > 0) { |
| | | return true; |
| | | } |
| | | return Math.max(ratio.stripTrailingZeros().scale(), 0) > 2; |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @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; |
| | | return this.getById(id); |
| | | } |
| | | |
| | | |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 |
| | | public AjaxResult editPartner(Partner partner) { |
| | | //校验参数和重复数据 |
| | | AjaxResult ajaxResult = addPartnerParameterCheck(partner); |
| | | if(ajaxResult.isError()){ |
| | | return ajaxResult; |
| | | } |
| | | assignDefaultRole(partner); |
| | | Partner one = this.getOne(new LambdaQueryWrapper<Partner>() |
| | | .eq(Partner::getCode, partner.getCode()) |
| | | .eq(Partner::getDelFlag, 0) |
| | |
| | | } |
| | | Partner oldPartner = this.getById(partner.getId()); |
| | | SysUser user = sysUserClient.queryUserByUserName(oldPartner.getAccount()).getData(); |
| | | if(StringUtils.isEmpty(partner.getPassword())){ |
| | | partner.setPassword(oldPartner.getPassword()); |
| | | } |
| | | //修改登录账户 |
| | | if(null == user){ |
| | | user = new SysUser(); |
| | |
| | | user.setRoleId(partner.getRoleId().longValue()); |
| | | user.setRoleType(2); |
| | | user.setObjectId(partner.getId()); |
| | | user.setPassWordUpdate(new Date()); |
| | | R r = sysUserClient.addSysUser(user); |
| | | if(200 != r.getCode()){ |
| | | throw new RuntimeException(r.getMsg()); |
| | |
| | | user.setUserName(partner.getAccount()); |
| | | user.setNickName(partner.getName()); |
| | | user.setAvatar(partner.getLogoUrl()); |
| | | user.setPassword(partner.getPassword()); |
| | | if(StringUtils.isNotEmpty(partner.getPassword())){ |
| | | user.setPassword(partner.getPassword()); |
| | | user.setPassWordUpdate(new Date()); |
| | | } |
| | | user.setRoleId(partner.getRoleId().longValue()); |
| | | R r = sysUserClient.updateSysUser(user); |
| | | if(200 != r.getCode()){ |
| | |
| | | |
| | | //修改数据 |
| | | this.updateById(partner); |
| | | updateShareRatios(partner); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | void updateShareRatios(Partner partner) { |
| | | this.update(new UpdateWrapper<Partner>() |
| | | .eq("id", partner.getId()) |
| | | .set("electricity_share_ratio", partner.getElectricityShareRatio()) |
| | | .set("service_share_ratio", partner.getServiceShareRatio())); |
| | | } |
| | | |
| | | |
| | | private void assignDefaultRole(Partner partner) { |
| | | Integer roleId = resolveDefaultRoleId(partner.getPartnerType()); |
| | | partner.setRoleId(roleId); |
| | | } |
| | | |
| | | Integer resolveDefaultRoleId(Integer partnerType) { |
| | | String roleName = partnerTypeRoleName(partnerType); |
| | | Integer roleId = this.baseMapper.getDefaultPartnerRoleId(roleName); |
| | | if (roleId == null && !Integer.valueOf(1).equals(partnerType)) { |
| | | roleId = this.baseMapper.getDefaultPartnerRoleId("合作商"); |
| | | } |
| | | if (roleId == null) { |
| | | throw new RuntimeException("系统内置角色【" + roleName + "】不存在,请先配置角色"); |
| | | } |
| | | return roleId; |
| | | } |
| | | |
| | | private String partnerTypeRoleName(Integer partnerType) { |
| | | if (Integer.valueOf(2).equals(partnerType)) { |
| | | return "场地方"; |
| | | } |
| | | if (Integer.valueOf(3).equals(partnerType)) { |
| | | return "服务商"; |
| | | } |
| | | return "合作商"; |
| | | } |
| | | /** |
| | | * 删除合作商 |
| | | * @param ids 合作商id |
| | | */ |
| | | @Override |
| | | @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 |
| | | public AjaxResult delPartner(List<Integer> ids) { |
| | | //查询有无关联数据 |
| | | //站点 |
| | | long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, Arrays.asList(ids)).eq(Site::getDelFlag, 0)); |
| | | long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, ids).eq(Site::getDelFlag, 0)); |
| | | if(count > 0){ |
| | | return AjaxResult.error("该合作商已关联站点不可删除!"); |
| | | return AjaxResult.error("该合作商已关联站点不可删除"); |
| | | } |
| | | //充电桩 |
| | | long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getPartnerId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0)); |
| | | long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getPartnerId, ids).eq(TChargingPile::getDelFlag, 0)); |
| | | if(count1 > 0){ |
| | | return AjaxResult.error("该合作商已关联充电桩不可删除!"); |
| | | } |
| | |
| | | if(null == partner){ |
| | | return AjaxResult.error("删除失败"); |
| | | } |
| | | this.removeById(partner); |
| | | this.removeById(id); |
| | | SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData(); |
| | | user.setDelFlag("2"); |
| | | sysUserClient.updateUser(user); |
| | |
| | | * @param resetPassword |
| | | */ |
| | | @Override |
| | | @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 |
| | | public AjaxResult resetPassword(ResetPassword resetPassword) { |
| | | if(null == resetPassword.getId()){ |
| | | return AjaxResult.error("合作商id不能为空"); |
| | |
| | | //修改登录账号的密码 |
| | | SysUser user = sysUserClient.queryUserByUserName(partner.getAccount()).getData(); |
| | | user.setPassword(partner.getPassword()); |
| | | user.setPassWordUpdate(new Date()); |
| | | sysUserClient.resetPassword(user); |
| | | return AjaxResult.success(); |
| | | } |
| | |
| | | @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>() |
| | |
| | | child.put("selected", collect.contains(siteMenu.getMenuId())); |
| | | list2.add(child); |
| | | } |
| | | menu.put("selected", list2.size() > 0 ? true : false); |
| | | menu.put("selected", collect.contains(tSiteMenu.getMenuId())); |
| | | menu.put("child", list2); |
| | | list1.add(menu); |
| | | } |