From c05a14bba4b86d83918d7cdc01635785bf5694c2 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 03 六月 2025 00:26:08 +0800 Subject: [PATCH] 拆分mongodb查询服务 --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 512 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 510 insertions(+), 2 deletions(-) diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java index b22f788..ed2cadc 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java @@ -1,10 +1,48 @@ package com.ruoyi.chargingPile.service.impl; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.feignClient.AppUserVipDetailClient; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.account.api.model.TAppUserVipDetail; +import com.ruoyi.account.api.vo.GetAppUserVipDetail; +import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; +import com.ruoyi.chargingPile.api.model.*; +import com.ruoyi.chargingPile.api.query.GetSiteList; +import com.ruoyi.chargingPile.api.query.SiteDetailQuery; +import com.ruoyi.chargingPile.api.query.SiteQuery; +import com.ruoyi.chargingPile.api.vo.SiteDetailVO; +import com.ruoyi.chargingPile.api.vo.SiteVO; +import com.ruoyi.chargingPile.api.domain.SiteMenu; import com.ruoyi.chargingPile.mapper.SiteMapper; -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.service.TokenService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.integration.api.feignClient.IntegrationClient; +import com.ruoyi.integration.api.feignClient.TCECClient; +import com.ruoyi.other.api.domain.TVip; +import com.ruoyi.other.api.feignClient.RoleSiteClient; +import com.ruoyi.other.api.feignClient.UserSiteClient; +import com.ruoyi.other.api.feignClient.VipClient; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.api.feignClient.SysUserRoleClient; +import com.ruoyi.system.api.model.SysUserRoleVo; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * @author zhibing.pu @@ -12,4 +50,474 @@ */ @Service public class SiteServiceImpl extends ServiceImpl<SiteMapper, Site> implements ISiteService { + + @Resource + private TChargingGunService chargingGunService; + + @Resource + private TChargingPileService chargingPileService; + + @Resource + private SysUserClient sysUserClient; + + @Resource + private IPartnerService partnerService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + @Resource + private TokenService tokenService; + @Resource + private AppUserClient appUserClient; + @Resource + private SysUserRoleClient sysUserRoleClient; + @Resource + private TParkingLotService parkingLotService; + + @Resource + private IntegrationClient integrationClient; + @Resource + private AppUserVipDetailClient vipDetailClient; + + @Resource + private TAccountingStrategyDetailService accountingStrategyDetailService; + + @Resource + private TPartnerSiteService partnerSiteService; + + @Resource + private TCECClient tcecClient; + + + /** + * 获取站点管理列表数据 + * @param siteList + * @return + */ + + @Override + public PageInfo<GetSiteListDTO> getSiteList(GetSiteList siteList) { + Set<Integer> ids = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + R<Integer> admin = sysUserClient.isAdmin(tokenService.getLoginUser().getUserid()); + //合作商 + if(roleType == 2){ + ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + //改用roleId=1来判断 + if(admin.getData()!=1){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); + if(data2.size() > 0){ + List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData(); + data.addAll(data1); + } + ids = new HashSet<>(data); + } + } + PageInfo<GetSiteListDTO> pageInfo = new PageInfo<>(siteList.getPageCurr(), siteList.getPageSize()); + List<GetSiteListDTO> list = this.baseMapper.getSiteList(pageInfo, siteList, ids); + for (GetSiteListDTO getSiteListDTO : list) { + Integer siteId = getSiteListDTO.getId(); + getSiteListDTO.setAuthAccountingStrategy(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_ACCOUNTING_STRATEGY)); + //平台账号才有此权限 + getSiteListDTO.setAuthPartner(roleType == 1 ? true : false); + getSiteListDTO.setAuthUpdate(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_UPDATE)); + getSiteListDTO.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_DELETE)); + } + return pageInfo.setRecords(list); + } + + + + + @Override + public PageInfo<GetSiteListDTO> getSiteList1(Long userId) { + GetSiteList siteList = new GetSiteList(); + siteList.setPageCurr(1); + siteList.setPageSize(9999); + Set<Integer> ids = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(userId).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + R<Integer> admin = sysUserClient.isAdmin(tokenService.getLoginUser().getUserid()); + + //合作商 + if(roleType == 2){ + ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(admin.getData()!=1){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData(); + data.addAll(data1); + ids = new HashSet<>(data); + } + } + PageInfo<GetSiteListDTO> pageInfo = new PageInfo<>(siteList.getPageCurr(), siteList.getPageSize()); + List<GetSiteListDTO> list = this.baseMapper.getSiteList(pageInfo, siteList, ids); + for (GetSiteListDTO getSiteListDTO : list) { + Integer siteId = getSiteListDTO.getId(); + getSiteListDTO.setAuthAccountingStrategy(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_ACCOUNTING_STRATEGY)); + //平台账号才有此权限 + getSiteListDTO.setAuthPartner(roleType == 1 ? true : false); + getSiteListDTO.setAuthUpdate(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_UPDATE)); + getSiteListDTO.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_DELETE)); + } + return pageInfo.setRecords(list); + } + + + + + /** + * 添加站点信息 + * @param site + * @return + */ + @Override + public AjaxResult addSite(Site site) { + AjaxResult ajaxResult = addSiteVerify(site); + if(ajaxResult.isError()){ + return ajaxResult; + } + Site one = this.getOne(new LambdaQueryWrapper<Site>().eq(Site::getCode, site.getCode()).eq(Site::getDelFlag, 0)); + if(null != one){ + return AjaxResult.error("站点编号重复"); + } + site.setMark(0); + this.save(site); + return AjaxResult.success(); + } + + + /** + * 编辑站点 + * @param site + * @return + */ + @Override + public AjaxResult editSite(Site site) { + AjaxResult ajaxResult = addSiteVerify(site); + if(ajaxResult.isError()){ + return ajaxResult; + } + Site one = this.getOne(new LambdaQueryWrapper<Site>().eq(Site::getCode, site.getCode()).eq(Site::getDelFlag, 0)); + if(null != one && !one.getCode().equals(site.getCode())){ + return AjaxResult.error("站点编号重复"); + } + + Site site1 = this.getById(site.getId()); + if(!site1.getPartnerId().equals(site.getPartnerId())){ + List<TPartnerSite> list = partnerSiteService.list(new LambdaQueryWrapper<TPartnerSite>().eq(TPartnerSite::getPartnerId, site1.getPartnerId()).eq(TPartnerSite::getSiteId, site.getId())); + for (TPartnerSite partnerSite : list) { + partnerSite.setPartnerId(site.getPartnerId()); + partnerSiteService.updateById(partnerSite); + } + } + + this.updateById(site); + tcecClient.superviseNotificationStationInfo(site.getId()); + + return AjaxResult.success(); + } + + /** + * 校验必填项 + * @param site + * @return + */ + AjaxResult addSiteVerify(Site site){ + if(null == site.getPartnerId()){ + return AjaxResult.error("合作商不能为空"); + } + if(StringUtils.isEmpty(site.getCode())){ + return AjaxResult.error("站点编号不能为空"); + } + if(StringUtils.isEmpty(site.getName())){ + return AjaxResult.error("站点名称不能为空"); + } + if(null == site.getSiteType()){ + return AjaxResult.error("站点类型不能为空"); + } + if(null == site.getBusinessCategory()){ + return AjaxResult.error("经营类别不能为空"); + } + if(null == site.getStatus()){ + return AjaxResult.error("站点状态不能为空"); + } + if(null == site.getConstructionSite()){ + return AjaxResult.error("建设场所不能为空"); + } + if(StringUtils.isEmpty(site.getProvince()) || StringUtils.isEmpty(site.getProvinceCode()) || + StringUtils.isEmpty(site.getCity()) || StringUtils.isEmpty(site.getCityCode()) || + StringUtils.isEmpty(site.getDistricts()) || StringUtils.isEmpty(site.getDistrictsCode())){ + return AjaxResult.error("所在区域不能为空"); + } + if(StringUtils.isEmpty(site.getAddress())){ + return AjaxResult.error("详细地址不能为空"); + } +// if(StringUtils.isEmpty(site.getLon()) || StringUtils.isEmpty(site.getLat())){ +// return AjaxResult.error("地图位置不能为空"); +// } +// if(StringUtils.isEmpty(site.getPhone())){ +// return AjaxResult.error("站点电话不能为空"); +// } + if(StringUtils.isEmpty(site.getServicePhone())){ + return AjaxResult.error("服务电话不能为空"); + } + if(null == site.getParkingSpace()){ + return AjaxResult.error("车位数量不能为空"); + } + if(null == site.getSort()){ + return AjaxResult.error("排序不能为空"); + } +// if(StringUtils.isEmpty(site.getAreaCodeCountryside())){ +// return AjaxResult.error("充换电站所在县以下行政区划代码不能为空"); +// } +// if(null == site.getStationClassification()){ +// return AjaxResult.error("请选择站点分类"); +// } +// if(null == site.getGeneralApplicationType()){ +// return AjaxResult.error("请选择通用类型"); +// } +// if(null == site.getParkType()){ +// return AjaxResult.error("请选择停车费类型"); +// } +// if(null == site.getRoundTheClock()){ +// return AjaxResult.error("请选择是否7*24h营业"); +// } +// if (site.getStationClassification()!=1&& (!org.springframework.util.StringUtils.hasLength(site.getSwapMatchCars()))){ +// return AjaxResult.error("服务车型描述不能为空"); +// } +// if(null == site.getElectricityType()){ +// return AjaxResult.error("请选择电费类型"); +// } +// if(null == site.getBusinessExpandType()){ +// return AjaxResult.error("请选择报装类型"); +// } +// if(null == site.getCapacity()){ +// return AjaxResult.error("报装电源容量不能为空"); +// } +// if(null == site.getRatedPower()){ +// return AjaxResult.error("站点额定总功率不能为空"); +// } +// if(StringUtils.isEmpty(site.getOfficialRunTime())){ +// return AjaxResult.error("请选择正式投运时间"); +// } +// if(null == site.getPeriodFee()){ +// return AjaxResult.error("请选择峰谷时分"); +// } +// if(null == site.getVideoMonitor()){ +// return AjaxResult.error("请选择视频监控配套情况"); +// } +// if(StringUtils.isEmpty(site.getEquipmentOwnerName())){ +// return AjaxResult.error("设备所属方名称不能为空"); +// } +// if(null == site.getSupplyType()){ +// return AjaxResult.error("请选择供电类型"); +// } +// if(site.getSupplyType()==1){ +// if (StringUtils.isEmpty(site.getResidentNo())){ +// return AjaxResult.error("供电局用户编号不能为空"); +// } +// } + return AjaxResult.success(); + } + + /** + * 删除站点 + * @param ids 站点id + * @return + */ + @Override + public AjaxResult delSite(Integer[] ids) { + //查询是否有关联数据 + //充电桩 + long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getSiteId, Arrays.asList(ids)) + .eq(TChargingPile::getDelFlag, 0)); + if(count1 > 0){ + return AjaxResult.error("该站点已添加充电桩,不可删除。"); + } + for (Integer id : ids) { + Site site = this.getById(id); + this.removeById(site); + } + return AjaxResult.success(); + } + + @Override + public PageInfo<SiteVO> pageList(SiteQuery query,Integer isLogin) { + TAppUser appUser = null; + // 获取当前登录用户id + TAppUserVipDetail data1 = null; + if(isLogin == 1){ + Long userId = tokenService.getLoginUserApplet().getUserId(); + // 根据id查询用户信息 + appUser = appUserClient.getUserById(userId).getData(); + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(userId); + getAppUserVipDetail.setVipId(appUser.getVipId()); + R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); + data1 = appUserVipDetail.getData(); + } + PageInfo<SiteVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); + List<SiteVO> list = this.baseMapper.pageList(query,pageInfo); + if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){ + // 查询会员信息 +// TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + if(Objects.nonNull(vip) && vip.getType() == 2){ + list.forEach(item -> { + if(Objects.nonNull(vip.getDiscount())){ + item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); + } + }); + } + } + } + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public SiteDetailVO getDetailById(SiteDetailQuery query) { + return this.baseMapper.getDetailById(query); + } + + @Override + public List<Site> getSiteListParkLot() { + Set<Integer> ids = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + //合作商 + if(roleType == 2){ + ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData(); + data.addAll(data1); + ids = new HashSet<>(data); + } + } + // 查询所有的停车场的站点id + List<TParkingLot> list = parkingLotService.list(); + List<Integer> siteIds = list.stream().map(TParkingLot::getSiteId).distinct().collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(ids) && !CollectionUtils.isEmpty(siteIds)){ + Iterator<Integer> iterator = ids.iterator(); + while (iterator.hasNext()){ + Integer next = iterator.next(); + if(siteIds.contains(next)){ + iterator.remove(); + } + } + } + return this.baseMapper.getSiteListParkLot(ids); + } + + @Override + public List<Site> getSiteListGun() { + Set<Integer> ids = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + //合作商 + if(roleType == 2){ + ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData(); + data.addAll(data1); + ids = new HashSet<>(data); + } + } + return this.baseMapper.getSiteListGun(ids); + } + + @Override + public List<SiteVO> getMapSiteList(SiteQuery query,Integer isLogin) { + + if(StringUtils.isEmpty(query.getLon()) || StringUtils.isEmpty(query.getLat())){ + return new ArrayList<>(); + } + TAppUser appUser = null; + // 获取当前登录用户id + TAppUserVipDetail data1 = null; + if(isLogin == 1){ + Long userId = tokenService.getLoginUserApplet().getUserId(); + // 根据id查询用户信息 + appUser = appUserClient.getUserById(userId).getData(); + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(userId); + getAppUserVipDetail.setVipId(appUser.getVipId()); + R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); + data1 = appUserVipDetail.getData(); + } + List<SiteVO> list = this.baseMapper.getMapSiteList(query); + if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){ + // 查询会员信息 +// TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + if(Objects.nonNull(vip) && vip.getType() == 2){ + list.forEach(item -> { + item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); + }); + } + } + } + return list; + } + + + /** + * 设置站点计费策略 + * @param id 站点id + * @param accountingStrategyId 计费策略id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void setAccountingStrategy(Integer id, Integer accountingStrategyId) { + Site site = this.getById(id); + site.setAccountingStrategyId(accountingStrategyId); + this.updateById(site); + List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getSiteId, id).eq(TChargingGun::getDelFlag, 0)); + for (TChargingGun tChargingGun : list) { + TChargingGun tChargingGun1 = new TChargingGun(); + tChargingGun1.setId(tChargingGun.getId()); + tChargingGun1.setAccountingStrategyId(accountingStrategyId); + chargingGunService.updateById(tChargingGun1); + } + + //下发硬件数据 + List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId)); + List<TChargingPile> list1 = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, id).eq(TChargingPile::getDelFlag, 0).list(); + for (TChargingPile tChargingPile : list1) { + integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails)); + } + + //推送三方平台 + tcecClient.notificationStationChange(Arrays.asList(id)); + } } -- Gitblit v1.7.1