站点分页、详情
This commit is contained in:
parent
3e1c4eec0f
commit
75ee58b11a
@ -25,7 +25,6 @@ import com.mybatisflex.core.paginate.Page;
|
|||||||
import com.mybatisflex.core.query.QueryMethods;
|
import com.mybatisflex.core.query.QueryMethods;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import com.mybatisflex.core.update.UpdateChain;
|
import com.mybatisflex.core.update.UpdateChain;
|
||||||
import com.mybatisflex.core.util.StringUtil;
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -37,7 +36,6 @@ import java.util.Objects;
|
|||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeAdministrationZoneTableDef.EBIKE_ADMINISTRATION_ZONE;
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeAdministrationZoneTableDef.EBIKE_ADMINISTRATION_ZONE;
|
||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeOperationRegionTableDef.EBIKE_OPERATION_REGION;
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeOperationRegionTableDef.EBIKE_OPERATION_REGION;
|
||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeRegionLevelTableDef.EBIKE_REGION_LEVEL;
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeRegionLevelTableDef.EBIKE_REGION_LEVEL;
|
||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSiteRegionTableDef.EBIKE_SITE_REGION;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 区域控制层。
|
* 区域控制层。
|
||||||
@ -197,16 +195,8 @@ public class EbikeRegionController {
|
|||||||
* @return {@code 200} 添加成功,{@code 500} 添加失败
|
* @return {@code 200} 添加成功,{@code 500} 添加失败
|
||||||
*/
|
*/
|
||||||
@GetMapping("pageSite")
|
@GetMapping("pageSite")
|
||||||
public JsonResult<?> pageSite(@Validated PageParam pageParam,Long operationRegionDId, String zoneId, String siteName) {
|
public JsonResult<?> pageSite(@Validated PageParam pageParam,Long operationRegionId, String zoneId, String siteName) {
|
||||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
Page<ResEbikeSiteRegionPageDto> page = siteRegionService.pageSite(pageParam,operationRegionId, zoneId, siteName);
|
||||||
.leftJoin(EBIKE_OPERATION_REGION).on(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(EBIKE_SITE_REGION.OPERATION_REGION_ID))
|
|
||||||
.leftJoin(EBIKE_ADMINISTRATION_ZONE).on(EBIKE_ADMINISTRATION_ZONE.ID.eq(EBIKE_OPERATION_REGION.ZONE_ID))
|
|
||||||
// .leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_SITE_REGION.SITE_LEVEL))
|
|
||||||
// .where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.SITE))
|
|
||||||
.where(EBIKE_ADMINISTRATION_ZONE.ID.eq(zoneId,StringUtil.hasText(zoneId)))
|
|
||||||
.where(EBIKE_SITE_REGION.SITE_NAME.like(siteName, StringUtil.hasText(siteName)))
|
|
||||||
.where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(operationRegionDId, Objects.nonNull(operationRegionDId)));
|
|
||||||
Page<EbikeSiteRegion> page = siteRegionService.page(pageParam.getPage(), queryWrapper);
|
|
||||||
return JsonResult.success(page);
|
return JsonResult.success(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -44,6 +44,8 @@ public class ResEbikeSiteRegionInfoDto {
|
|||||||
*/
|
*/
|
||||||
private Integer siteLevel;
|
private Integer siteLevel;
|
||||||
|
|
||||||
|
private String levelName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 经度
|
* 经度
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -0,0 +1,102 @@
|
|||||||
|
package com.cdzy.ebikeoperate.model.dto.response;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author attiya
|
||||||
|
* @since 2025-05-07
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ResEbikeSiteRegionPageDto {
|
||||||
|
|
||||||
|
private Long siteRegionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运营区ID
|
||||||
|
*/
|
||||||
|
private Long operationRegionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 站点名称
|
||||||
|
*/
|
||||||
|
private String siteName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 站点地址
|
||||||
|
*/
|
||||||
|
private String siteAdress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 站点类型
|
||||||
|
*/
|
||||||
|
private Integer siteType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 站点级别
|
||||||
|
*/
|
||||||
|
private Integer siteLevel;
|
||||||
|
|
||||||
|
private String levelName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 经度
|
||||||
|
*/
|
||||||
|
private Double siteLng;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 纬度
|
||||||
|
*/
|
||||||
|
private Double siteLat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1、圆形 2、多边形
|
||||||
|
*/
|
||||||
|
private Integer shapeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 半径
|
||||||
|
*/
|
||||||
|
private Float radius;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 可停数量
|
||||||
|
*/
|
||||||
|
private Integer allowedParkingNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最大可停
|
||||||
|
*/
|
||||||
|
private Integer allowedParkingMax;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织id(运营商id
|
||||||
|
*/
|
||||||
|
private Long orgId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建员工id
|
||||||
|
*/
|
||||||
|
private Long createdStaff;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime createdTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改人
|
||||||
|
*/
|
||||||
|
private Long updateStaff;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 逻辑删除
|
||||||
|
*/
|
||||||
|
private Integer isDelete;
|
||||||
|
}
|
||||||
@ -1,9 +1,12 @@
|
|||||||
package com.cdzy.ebikeoperate.service;
|
package com.cdzy.ebikeoperate.service;
|
||||||
|
|
||||||
|
import com.cdzy.common.model.PageParam;
|
||||||
import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto;
|
import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto;
|
||||||
import com.cdzy.ebikeoperate.model.dto.request.ReqSiteRegionDto;
|
import com.cdzy.ebikeoperate.model.dto.request.ReqSiteRegionDto;
|
||||||
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionInfoDto;
|
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionInfoDto;
|
||||||
|
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionPageDto;
|
||||||
import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion;
|
import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
import com.mybatisflex.core.service.IService;
|
import com.mybatisflex.core.service.IService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -47,4 +50,14 @@ public interface EbikeSiteRegionService extends IService<EbikeSiteRegion> {
|
|||||||
* @return 详情
|
* @return 详情
|
||||||
*/
|
*/
|
||||||
ResEbikeSiteRegionInfoDto siteInfo(Long siteRegionId);
|
ResEbikeSiteRegionInfoDto siteInfo(Long siteRegionId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询站点
|
||||||
|
* @param pageParam 分页参数
|
||||||
|
* @param operationRegionId 运营区id
|
||||||
|
* @param zoneId 行政区id
|
||||||
|
* @param siteName 站点名称
|
||||||
|
* @return 分页列表
|
||||||
|
*/
|
||||||
|
Page<ResEbikeSiteRegionPageDto> pageSite(PageParam pageParam, Long operationRegionId, String zoneId, String siteName);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,8 @@ package com.cdzy.ebikeoperate.service.impl;
|
|||||||
|
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import com.cdzy.common.model.JsonResult;
|
import com.cdzy.common.model.JsonResult;
|
||||||
|
import com.cdzy.common.model.PageParam;
|
||||||
|
import com.cdzy.ebikeoperate.enums.RegionLevelType;
|
||||||
import com.cdzy.ebikeoperate.mapper.EbikeOperationRegionMapper;
|
import com.cdzy.ebikeoperate.mapper.EbikeOperationRegionMapper;
|
||||||
import com.cdzy.ebikeoperate.mapper.EbikePointMapper;
|
import com.cdzy.ebikeoperate.mapper.EbikePointMapper;
|
||||||
import com.cdzy.ebikeoperate.mapper.EbikeSiteRegionMapper;
|
import com.cdzy.ebikeoperate.mapper.EbikeSiteRegionMapper;
|
||||||
@ -9,6 +11,7 @@ import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto;
|
|||||||
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto;
|
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto;
|
||||||
import com.cdzy.ebikeoperate.model.dto.request.ReqSiteRegionDto;
|
import com.cdzy.ebikeoperate.model.dto.request.ReqSiteRegionDto;
|
||||||
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionInfoDto;
|
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionInfoDto;
|
||||||
|
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionPageDto;
|
||||||
import com.cdzy.ebikeoperate.model.pojo.EbikeOperationRegion;
|
import com.cdzy.ebikeoperate.model.pojo.EbikeOperationRegion;
|
||||||
import com.cdzy.ebikeoperate.model.pojo.EbikePoint;
|
import com.cdzy.ebikeoperate.model.pojo.EbikePoint;
|
||||||
import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion;
|
import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion;
|
||||||
@ -16,7 +19,9 @@ import com.cdzy.ebikeoperate.service.EbikeSiteRegionService;
|
|||||||
import com.cdzy.ebikeoperate.utils.RedisUtil;
|
import com.cdzy.ebikeoperate.utils.RedisUtil;
|
||||||
import com.ebike.feign.clients.StaffFeignClient;
|
import com.ebike.feign.clients.StaffFeignClient;
|
||||||
import com.ebike.feign.model.rsp.StaffFeign;
|
import com.ebike.feign.model.rsp.StaffFeign;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
|
import com.mybatisflex.core.util.StringUtil;
|
||||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.locationtech.jts.geom.Coordinate;
|
import org.locationtech.jts.geom.Coordinate;
|
||||||
@ -28,8 +33,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeAdministrationZoneTableDef.EBIKE_ADMINISTRATION_ZONE;
|
||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeOperationRegionTableDef.EBIKE_OPERATION_REGION;
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeOperationRegionTableDef.EBIKE_OPERATION_REGION;
|
||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikePointTableDef.EBIKE_POINT;
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikePointTableDef.EBIKE_POINT;
|
||||||
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeRegionLevelTableDef.EBIKE_REGION_LEVEL;
|
||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSiteRegionTableDef.EBIKE_SITE_REGION;
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSiteRegionTableDef.EBIKE_SITE_REGION;
|
||||||
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EBIKE_STAFF_REGION;
|
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EBIKE_STAFF_REGION;
|
||||||
|
|
||||||
@ -40,7 +47,7 @@ import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EB
|
|||||||
* @since 2025-04-29
|
* @since 2025-04-29
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMapper, EbikeSiteRegion> implements EbikeSiteRegionService{
|
public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMapper, EbikeSiteRegion> implements EbikeSiteRegionService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private StaffFeignClient staffFeignClient;
|
private StaffFeignClient staffFeignClient;
|
||||||
@ -69,7 +76,7 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
|
|||||||
siteRegion.setOrgId(staffFeign.getOrgId());
|
siteRegion.setOrgId(staffFeign.getOrgId());
|
||||||
List<ReqEbikePointDto> points = regionDto.getPoints();
|
List<ReqEbikePointDto> points = regionDto.getPoints();
|
||||||
this.mapper.insert(siteRegion);
|
this.mapper.insert(siteRegion);
|
||||||
savePoints(points,operationRegionId,siteRegion.getSiteRegionId());
|
savePoints(points, operationRegionId, siteRegion.getSiteRegionId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -94,9 +101,9 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
|
|||||||
@Override
|
@Override
|
||||||
public void delSite(ReqBatchRegionDto delRegionDto) {
|
public void delSite(ReqBatchRegionDto delRegionDto) {
|
||||||
List<EbikeSiteRegion> siteRegions = this.mapper.selectListByIds(delRegionDto.getIds());
|
List<EbikeSiteRegion> siteRegions = this.mapper.selectListByIds(delRegionDto.getIds());
|
||||||
siteRegions.forEach(region->{
|
siteRegions.forEach(region ->
|
||||||
delPoints(region.getOperationRegionId(),region.getSiteRegionId());
|
delPoints(region.getOperationRegionId(), region.getSiteRegionId())
|
||||||
});
|
);
|
||||||
this.mapper.deleteBatchByIds(delRegionDto.getIds());
|
this.mapper.deleteBatchByIds(delRegionDto.getIds());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,13 +114,32 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
|
|||||||
.leftJoin(EBIKE_OPERATION_REGION).on(EBIKE_SITE_REGION.OPERATION_REGION_ID.eq(EBIKE_OPERATION_REGION.OPERATION_REGION_ID))
|
.leftJoin(EBIKE_OPERATION_REGION).on(EBIKE_SITE_REGION.OPERATION_REGION_ID.eq(EBIKE_OPERATION_REGION.OPERATION_REGION_ID))
|
||||||
.leftJoin(EBIKE_STAFF_REGION).on(EBIKE_STAFF_REGION.REGION_ID.eq(EBIKE_OPERATION_REGION.OPERATION_REGION_ID))
|
.leftJoin(EBIKE_STAFF_REGION).on(EBIKE_STAFF_REGION.REGION_ID.eq(EBIKE_OPERATION_REGION.OPERATION_REGION_ID))
|
||||||
.where(EBIKE_STAFF_REGION.STAFF_ID.eq(staffFeign.getStaffId()))
|
.where(EBIKE_STAFF_REGION.STAFF_ID.eq(staffFeign.getStaffId()))
|
||||||
.where(EBIKE_STAFF_REGION.REGION_ID.eq(regionId,regionId!=null));
|
.where(EBIKE_STAFF_REGION.REGION_ID.eq(regionId, regionId != null));
|
||||||
return this.mapper.selectListByQuery(queryWrapper);
|
return this.mapper.selectListByQuery(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResEbikeSiteRegionInfoDto siteInfo(Long siteRegionId) {
|
public ResEbikeSiteRegionInfoDto siteInfo(Long siteRegionId) {
|
||||||
return this.mapper.selectOneWithRelationsByIdAs(siteRegionId,ResEbikeSiteRegionInfoDto.class);
|
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||||
|
.select(EBIKE_SITE_REGION.ALL_COLUMNS, EBIKE_REGION_LEVEL.LEVEL_NAME)
|
||||||
|
.leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_SITE_REGION.SITE_LEVEL))
|
||||||
|
.where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.SITE))
|
||||||
|
.where(EBIKE_SITE_REGION.SITE_REGION_ID.eq(siteRegionId));
|
||||||
|
return this.mapper.selectOneWithRelationsByQueryAs(queryWrapper, ResEbikeSiteRegionInfoDto.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<ResEbikeSiteRegionPageDto> pageSite(PageParam pageParam, Long operationRegionId, String zoneId, String siteName) {
|
||||||
|
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||||
|
.select(EBIKE_SITE_REGION.ALL_COLUMNS, EBIKE_REGION_LEVEL.LEVEL_NAME)
|
||||||
|
.leftJoin(EBIKE_OPERATION_REGION).on(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(EBIKE_SITE_REGION.OPERATION_REGION_ID))
|
||||||
|
.leftJoin(EBIKE_ADMINISTRATION_ZONE).on(EBIKE_ADMINISTRATION_ZONE.ID.eq(EBIKE_OPERATION_REGION.ZONE_ID))
|
||||||
|
.leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_SITE_REGION.SITE_LEVEL))
|
||||||
|
.where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.SITE))
|
||||||
|
.where(EBIKE_ADMINISTRATION_ZONE.ID.eq(zoneId, StringUtil.hasText(zoneId)))
|
||||||
|
.where(EBIKE_SITE_REGION.SITE_NAME.like(siteName, StringUtil.hasText(siteName)))
|
||||||
|
.where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(operationRegionId, Objects.nonNull(operationRegionId)));
|
||||||
|
return this.mapper.paginateAs(pageParam.getPage(), queryWrapper, ResEbikeSiteRegionPageDto.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
void savePoints(List<ReqEbikePointDto> points, Long areaId, Long siteRegionId) {
|
void savePoints(List<ReqEbikePointDto> points, Long areaId, Long siteRegionId) {
|
||||||
@ -166,13 +192,13 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
|
|||||||
// redisUtil.addOperationArea(orgId, operateRegionId, vertices);
|
// redisUtil.addOperationArea(orgId, operateRegionId, vertices);
|
||||||
}
|
}
|
||||||
|
|
||||||
StaffFeign getStaff(){
|
StaffFeign getStaff() {
|
||||||
String tokenValue = StpUtil.getTokenValue();
|
String tokenValue = StpUtil.getTokenValue();
|
||||||
JsonResult<StaffFeign> jsonResult = staffFeignClient.getInfoByToken(tokenValue);
|
JsonResult<StaffFeign> jsonResult = staffFeignClient.getInfoByToken(tokenValue);
|
||||||
StaffFeign staffFeign = jsonResult.getData();
|
StaffFeign staffFeign = jsonResult.getData();
|
||||||
if (jsonResult.getCode() != 200 || staffFeign == null) {
|
if (jsonResult.getCode() != 200 || staffFeign == null) {
|
||||||
throw new RuntimeException("获取当前登陆用户信息失败");
|
throw new RuntimeException("获取当前登陆用户信息失败");
|
||||||
}
|
}
|
||||||
return jsonResult.getData();
|
return jsonResult.getData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user