| | |
| | | import com.ruoyi.chargingPile.dto.ChargingGunCountMonitoring; |
| | | import com.ruoyi.chargingPile.dto.ChargingGunMonitoring; |
| | | import com.ruoyi.chargingPile.dto.GetChargingGunMonitoring; |
| | | import com.ruoyi.chargingPile.dto.ChargingPileImportDTO; |
| | | import com.ruoyi.chargingPile.dto.ChargingPileImportErrorDTO; |
| | | import com.ruoyi.chargingPile.dto.ChargingPileImportResultDTO; |
| | | import com.ruoyi.chargingPile.mapper.TChargingPileMapper; |
| | | import com.ruoyi.chargingPile.service.*; |
| | | import com.ruoyi.chargingPile.util.mongodb.service.UploadRealTimeMonitoringDataService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | 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.core.utils.poi.ExcelUtil; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | |
| | | * @param chargingPile |
| | | * @return |
| | | */ |
| | | |
| | | @Override |
| | | public List<PageChargingPileListDTO> listChargingPileForExport(PageChargingPileList page) { |
| | | if (page == null) { |
| | | page = new PageChargingPileList(); |
| | | } |
| | | page.setPageCurr(1); |
| | | page.setPageSize(100000); |
| | | return pageChargingPileList(page).getRecords(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public ChargingPileImportResultDTO importChargingPile(MultipartFile file, Boolean cover) throws Exception { |
| | | if (file == null || file.isEmpty()) { |
| | | throw new ServiceException("????????"); |
| | | } |
| | | ExcelUtil<ChargingPileImportDTO> util = new ExcelUtil<>(ChargingPileImportDTO.class); |
| | | List<ChargingPileImportDTO> rows = util.importExcel(file.getInputStream(), 0); |
| | | if (rows == null || rows.isEmpty()) { |
| | | throw new ServiceException("????????"); |
| | | } |
| | | |
| | | SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); |
| | | Integer roleType = sysUser.getRoleType(); |
| | | Integer objectId = sysUser.getObjectId(); |
| | | Set<Integer> visibleSiteIds = getChargingPileVisibleSiteIds(sysUser); |
| | | Map<String, Site> siteMap = siteService.list(new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0)).stream() |
| | | .filter(site -> StringUtils.isNotEmpty(site.getCode())) |
| | | .collect(Collectors.toMap(site -> normalizeImportValue(site.getCode()), site -> site, (a, b) -> a)); |
| | | Map<String, Partner> partnerNameMap = partnerService.list(new LambdaQueryWrapper<Partner>().eq(Partner::getDelFlag, 0)).stream() |
| | | .filter(partner -> StringUtils.isNotEmpty(partner.getName())) |
| | | .collect(Collectors.toMap(partner -> normalizeImportValue(partner.getName()), partner -> partner, (a, b) -> a)); |
| | | |
| | | ChargingPileImportResultDTO result = new ChargingPileImportResultDTO(); |
| | | List<TChargingPile> validRows = new ArrayList<>(); |
| | | Set<String> fileCodes = new HashSet<>(); |
| | | Set<String> duplicateCodes = new LinkedHashSet<>(); |
| | | |
| | | for (int i = 0; i < rows.size(); i++) { |
| | | ChargingPileImportDTO row = rows.get(i); |
| | | int rowNum = i + 2; |
| | | List<String> errors = validateImportRow(row, siteMap, partnerNameMap, roleType, objectId, visibleSiteIds, fileCodes); |
| | | String code = row == null ? null : normalizeImportValue(row.getCode()); |
| | | if (!errors.isEmpty()) { |
| | | result.getErrorMessage().add(new ChargingPileImportErrorDTO(rowNum, code, String.join("?", errors))); |
| | | continue; |
| | | } |
| | | TChargingPile chargingPile = buildImportChargingPile(row, siteMap, partnerNameMap, roleType, objectId); |
| | | TChargingPile exists = this.getOne(new LambdaQueryWrapper<TChargingPile>() |
| | | .eq(TChargingPile::getCode, chargingPile.getCode()) |
| | | .eq(TChargingPile::getDelFlag, 0)); |
| | | if (exists != null) { |
| | | duplicateCodes.add(chargingPile.getCode()); |
| | | chargingPile.setId(exists.getId()); |
| | | chargingPile.setStatus(exists.getStatus()); |
| | | chargingPile.setIotdDeviceId(exists.getIotdDeviceId()); |
| | | } else if (chargingPile.getStatus() == null) { |
| | | chargingPile.setStatus(2); |
| | | } |
| | | validRows.add(chargingPile); |
| | | } |
| | | |
| | | result.setErrorCount(result.getErrorMessage().size()); |
| | | if (result.getErrorCount() > 0) { |
| | | return result; |
| | | } |
| | | if (!duplicateCodes.isEmpty() && !Boolean.TRUE.equals(cover)) { |
| | | result.setNeedConfirm(true); |
| | | result.setDuplicateCodes(new ArrayList<>(duplicateCodes)); |
| | | return result; |
| | | } |
| | | for (TChargingPile chargingPile : validRows) { |
| | | chargingPile.setDelFlag(false); |
| | | if (chargingPile.getId() == null) { |
| | | this.save(chargingPile); |
| | | result.setSuccessCount(result.getSuccessCount() + 1); |
| | | } else { |
| | | this.updateById(chargingPile); |
| | | result.setUpdateCount(result.getUpdateCount() + 1); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private List<String> validateImportRow(ChargingPileImportDTO row, Map<String, Site> siteMap, |
| | | Map<String, Partner> partnerNameMap, Integer roleType, Integer objectId, |
| | | Set<Integer> visibleSiteIds, Set<String> fileCodes) { |
| | | List<String> errors = new ArrayList<>(); |
| | | if (row == null) { |
| | | errors.add("??"); |
| | | return errors; |
| | | } |
| | | String siteCode = normalizeImportValue(row.getSiteCode()); |
| | | String code = normalizeImportValue(row.getCode()); |
| | | String name = normalizeImportValue(row.getName()); |
| | | String partnerName = normalizeImportValue(row.getPartnerName()); |
| | | if (StringUtils.isEmpty(siteCode)) { |
| | | errors.add("????????"); |
| | | } else if (!siteMap.containsKey(siteCode)) { |
| | | errors.add("???????"); |
| | | } |
| | | if (StringUtils.isEmpty(code)) { |
| | | errors.add("????????"); |
| | | } else if (!fileCodes.add(code)) { |
| | | errors.add("???????????"); |
| | | } |
| | | if (StringUtils.isEmpty(name)) { |
| | | errors.add("??????????"); |
| | | } |
| | | if (row.getNumber() == null) { |
| | | errors.add("??????"); |
| | | } |
| | | if (row.getType() == null) { |
| | | errors.add("????????"); |
| | | } |
| | | if (row.getRatedPower() == null) { |
| | | errors.add("????????"); |
| | | } |
| | | Site site = siteMap.get(siteCode); |
| | | if (site != null) { |
| | | if (visibleSiteIds != null && !visibleSiteIds.contains(site.getId())) { |
| | | errors.add("??????????"); |
| | | } |
| | | Integer partnerId = resolveImportPartnerId(partnerName, site, partnerNameMap, roleType, objectId); |
| | | if (partnerId == null) { |
| | | errors.add("????????"); |
| | | } else if (Objects.equals(roleType, 2) && !Objects.equals(partnerId, objectId)) { |
| | | errors.add("???????????????"); |
| | | } |
| | | } |
| | | return errors; |
| | | } |
| | | |
| | | private TChargingPile buildImportChargingPile(ChargingPileImportDTO row, Map<String, Site> siteMap, |
| | | Map<String, Partner> partnerNameMap, Integer roleType, Integer objectId) { |
| | | String partnerName = normalizeImportValue(row.getPartnerName()); |
| | | Site site = siteMap.get(normalizeImportValue(row.getSiteCode())); |
| | | TChargingPile chargingPile = new TChargingPile(); |
| | | chargingPile.setSiteId(site.getId()); |
| | | chargingPile.setPartnerId(resolveImportPartnerId(partnerName, site, partnerNameMap, roleType, objectId)); |
| | | chargingPile.setCode(normalizeImportValue(row.getCode())); |
| | | chargingPile.setName(normalizeImportValue(row.getName())); |
| | | chargingPile.setNumber(row.getNumber()); |
| | | chargingPile.setType(row.getType()); |
| | | chargingPile.setManufacturerCode(normalizeImportValue(row.getManufacturerCode())); |
| | | chargingPile.setManufacturer(normalizeImportValue(row.getManufacturer())); |
| | | chargingPile.setEquipmentType(normalizeImportValue(row.getEquipmentType())); |
| | | chargingPile.setProductionDate(row.getProductionDate()); |
| | | chargingPile.setRatedPower(row.getRatedPower()); |
| | | chargingPile.setChargingStationNumber(normalizeImportValue(row.getChargingStationNumber())); |
| | | chargingPile.setEquipmentClassification(row.getEquipmentClassification()); |
| | | chargingPile.setEquipmentUniqueNumber(normalizeImportValue(row.getEquipmentUniqueNumber())); |
| | | chargingPile.setEquipmentLng(normalizeImportValue(row.getEquipmentLng())); |
| | | chargingPile.setEquipmentLat(normalizeImportValue(row.getEquipmentLat())); |
| | | chargingPile.setEquipmentProductCode(normalizeImportValue(row.getEquipmentProductCode())); |
| | | chargingPile.setEquipmentPurpose(row.getEquipmentPurpose()); |
| | | chargingPile.setNewNationalStandard(row.getNewNationalStandard()); |
| | | chargingPile.setVinFlag(row.getVinFlag()); |
| | | return chargingPile; |
| | | } |
| | | |
| | | private Integer resolveImportPartnerId(String partnerName, Site site, Map<String, Partner> partnerNameMap, Integer roleType, Integer objectId) { |
| | | if (Objects.equals(roleType, 2) && StringUtils.isEmpty(partnerName)) { |
| | | return objectId; |
| | | } |
| | | if (StringUtils.isNotEmpty(partnerName)) { |
| | | Partner partner = partnerNameMap.get(partnerName); |
| | | return partner == null ? null : partner.getId(); |
| | | } |
| | | return site == null ? null : site.getPartnerId(); |
| | | } |
| | | |
| | | private Set<Integer> getChargingPileVisibleSiteIds(SysUser sysUser) { |
| | | Integer roleType = sysUser.getRoleType(); |
| | | Integer objectId = sysUser.getObjectId(); |
| | | if (Objects.equals(roleType, 2)) { |
| | | return partnerService.authSite(objectId, SiteMenu.CHARGING_PILE); |
| | | } |
| | | if (!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())) { |
| | | List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); |
| | | List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); |
| | | if (data == null) { |
| | | data = new ArrayList<>(); |
| | | } |
| | | if (data2 != null && !data2.isEmpty()) { |
| | | List<Integer> roleSiteIds = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData(); |
| | | if (roleSiteIds != null) { |
| | | data.addAll(roleSiteIds); |
| | | } |
| | | } |
| | | return new HashSet<>(data); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private String normalizeImportValue(String value) { |
| | | return value == null ? null : value.trim(); |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult addChargingPile(TChargingPile chargingPile) { |
| | | AjaxResult ajaxResult = addChargingPileVerify(chargingPile); |
| | |
| | | for (TChargingGun chargingGun : list) { |
| | | TChargingGun chargingGun1 = new TChargingGun(); |
| | | chargingGun1.setId(chargingGun.getId()); |
| | | chargingGun1.setFullNumber(chargingPile.getCode() + chargingGun.getCode()); |
| | | String stableFullNumber = StringUtils.isNotEmpty(chargingGun.getFullNumber()) ? chargingGun.getFullNumber() : chargingPile.getCode() + chargingGun.getCode(); |
| | | chargingGun1.setFullNumber(stableFullNumber); |
| | | chargingGun1.setSiteId(chargingPile.getSiteId()); |
| | | chargingGunService.updateById(chargingGun1); |
| | | |
| | |
| | | qrCodeDelivery.setCode_format(1); |
| | | qrCodeDelivery.setPrefix_length(code_prefix.length()); |
| | | qrCodeDelivery.setCode_prefix(code_prefix); |
| | | qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + chargingGun.getCode()); |
| | | qrCodeDelivery.setQr_code(code_prefix + stableFullNumber); |
| | | qrCodeDelivery.setCreate_time(new Date()); |
| | | qrCodeDelivery.setLast_time(new Date()); |
| | | sendMessageClient.qrCodeDelivery(qrCodeDelivery); |