1.pms主网测点数据上送功能
This commit is contained in:
@@ -68,6 +68,15 @@ public interface MonitorClient {
|
|||||||
@PostMapping("getMonitorList")
|
@PostMapping("getMonitorList")
|
||||||
HttpResult<List<Monitor>> getMonitorList(@RequestBody List<String> monitorIds);
|
HttpResult<List<Monitor>> getMonitorList(@RequestBody List<String> monitorIds);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过同源监测点编码获取监测点信息
|
||||||
|
* @author cdf
|
||||||
|
* @date 2022/11/29
|
||||||
|
*/
|
||||||
|
@PostMapping("getMonitorListByMid")
|
||||||
|
HttpResult<List<Monitor>> getMonitorListByMid(@RequestBody List<String> midIds);
|
||||||
|
|
||||||
@PostMapping("getMonitorPage")
|
@PostMapping("getMonitorPage")
|
||||||
HttpResult<Page<Monitor>> getMonitorPage(@RequestBody TerminalQueryParam baseParam);
|
HttpResult<Page<Monitor>> getMonitorPage(@RequestBody TerminalQueryParam baseParam);
|
||||||
|
|
||||||
|
|||||||
@@ -32,4 +32,8 @@ public interface PmsTerminalClient {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/getTerminalSelectList")
|
@PostMapping("/getTerminalSelectList")
|
||||||
HttpResult<List<PmsTerminal>> getTerminalSelectList(@RequestBody PmsBaseParam pmsBaseParam);
|
HttpResult<List<PmsTerminal>> getTerminalSelectList(@RequestBody PmsBaseParam pmsBaseParam);
|
||||||
|
|
||||||
|
@PostMapping("/getTerminalSelectByIds")
|
||||||
|
HttpResult<List<PmsTerminal>> getTerminalSelectByIds(@RequestBody List<String> ids);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ public class MonitorClientFallbackFactory implements FallbackFactory<MonitorClie
|
|||||||
throw new BusinessException(finalExceptionEnum);
|
throw new BusinessException(finalExceptionEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HttpResult<List<Monitor>> getMonitorListByMid(List<String> midIds) {
|
||||||
|
log.error("{}异常,降级处理,异常为:{}", "使用同源监测点编码获取监测点信息 ", throwable.toString());
|
||||||
|
throw new BusinessException(finalExceptionEnum);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HttpResult<Page<Monitor>> getMonitorPage(TerminalQueryParam baseParam) {
|
public HttpResult<Page<Monitor>> getMonitorPage(TerminalQueryParam baseParam) {
|
||||||
log.error("{}异常,降级处理,异常为:{}", "分页获取主网监测点数据 ", throwable.toString());
|
log.error("{}异常,降级处理,异常为:{}", "分页获取主网监测点数据 ", throwable.toString());
|
||||||
|
|||||||
@@ -36,6 +36,12 @@ public class PmsTerminalClientFallbackFactory implements FallbackFactory<PmsTerm
|
|||||||
log.error("{}异常,降级处理,异常为:{}", "获取主网所有终端", throwable.toString());
|
log.error("{}异常,降级处理,异常为:{}", "获取主网所有终端", throwable.toString());
|
||||||
throw new BusinessException(finalExceptionEnum);
|
throw new BusinessException(finalExceptionEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HttpResult<List<PmsTerminal>> getTerminalSelectByIds(List<String> ids) {
|
||||||
|
log.error("{}异常,降级处理,异常为:{}", "使用装置id集合查询装置信息", throwable.toString());
|
||||||
|
throw new BusinessException(finalExceptionEnum);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,15 +131,27 @@ public class PmsMonitorController extends BaseController {
|
|||||||
@ApiOperation("获取所有主网监测点(或者指定监测点编号查询)")
|
@ApiOperation("获取所有主网监测点(或者指定监测点编号查询)")
|
||||||
@ApiImplicitParam(name = "monitorIds",value = "主网监测点编号",required = true)
|
@ApiImplicitParam(name = "monitorIds",value = "主网监测点编号",required = true)
|
||||||
public HttpResult<List<Monitor>> getMonitorList(@RequestBody List<String> monitorIds) {
|
public HttpResult<List<Monitor>> getMonitorList(@RequestBody List<String> monitorIds) {
|
||||||
String methodDescribe = getMethodDescribe("getAllMonitorList");
|
String methodDescribe = getMethodDescribe("getMonitorList");
|
||||||
List<Monitor> monitor= monitorService.getMonitorList(monitorIds);
|
List<Monitor> monitor= monitorService.getMonitorList(monitorIds);
|
||||||
if (Objects.isNull(monitor)) {
|
|
||||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe);
|
|
||||||
} else {
|
|
||||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, monitor, methodDescribe);
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, monitor, methodDescribe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用同源监测点编码获取监测点信息
|
||||||
|
* @author cdf
|
||||||
|
* @date 2022/11/29
|
||||||
|
*/
|
||||||
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
|
@PostMapping("/getMonitorListByMid")
|
||||||
|
@ApiOperation("使用同源监测点编码获取监测点信息")
|
||||||
|
@ApiImplicitParam(name = "midIds",value = "主网监测点编号",required = true)
|
||||||
|
public HttpResult<List<Monitor>> getMonitorListByMid(@RequestBody List<String> midIds) {
|
||||||
|
String methodDescribe = getMethodDescribe("getMonitorListByMid");
|
||||||
|
List<Monitor> monitor= monitorService.getMonitorListByMid(midIds);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, monitor, methodDescribe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
@PostMapping("/getMonitorPage")
|
@PostMapping("/getMonitorPage")
|
||||||
@ApiOperation("获取所有主网监测点(或者指定监测点编号查询)")
|
@ApiOperation("获取所有主网监测点(或者指定监测点编号查询)")
|
||||||
|
|||||||
@@ -83,6 +83,16 @@ public class PmsTerminalController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
|
||||||
|
@PostMapping("/getTerminalSelectByIds")
|
||||||
|
@ApiOperation("根据ID集合查询监测终端台账数据")
|
||||||
|
@ApiImplicitParam(name = "ID集合",value = "ids",required = true)
|
||||||
|
public HttpResult<List<PmsTerminal>> getTerminalSelectByIds(@RequestBody List<String> ids){
|
||||||
|
String methodDescribe = getMethodDescribe("getTerminalSelectByIds");
|
||||||
|
List<PmsTerminal> pmsTerminal = iTerminalService.getTerminalSelectByIds(ids);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pmsTerminal, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增监测终端台账信息
|
* 新增监测终端台账信息
|
||||||
* @author hany
|
* @author hany
|
||||||
|
|||||||
@@ -88,6 +88,8 @@ public interface IMonitorService extends IService<Monitor> {
|
|||||||
|
|
||||||
List<Monitor> getMonitorList(List<String> monitorIds);
|
List<Monitor> getMonitorList(List<String> monitorIds);
|
||||||
|
|
||||||
|
List<Monitor> getMonitorListByMid(List<String> midIds);
|
||||||
|
|
||||||
|
|
||||||
List<LineDevGetDTO> getPmsCalMonitorList(List<String> monitorIds);
|
List<LineDevGetDTO> getPmsCalMonitorList(List<String> monitorIds);
|
||||||
|
|
||||||
|
|||||||
@@ -302,6 +302,16 @@ public class MonitorServiceImpl extends ServiceImpl<MonitorMapper, Monitor> impl
|
|||||||
return monitorList;
|
return monitorList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Monitor> getMonitorListByMid(List<String> midIds) {
|
||||||
|
List<Monitor> monitorList;
|
||||||
|
LambdaQueryWrapper<Monitor> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
lambdaQueryWrapper.eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()).in(Monitor::getMonitorId,midIds);
|
||||||
|
monitorList = this.list(lambdaQueryWrapper);
|
||||||
|
return monitorList;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<LineDevGetDTO> getPmsCalMonitorList(List<String> monitorIds) {
|
public List<LineDevGetDTO> getPmsCalMonitorList(List<String> monitorIds) {
|
||||||
List<LineDevGetDTO> monitorList = new ArrayList<>();
|
List<LineDevGetDTO> monitorList = new ArrayList<>();
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
|||||||
private final DevVersionMapper devVersionMapper;
|
private final DevVersionMapper devVersionMapper;
|
||||||
private final ProgramVersionService programVersionService;
|
private final ProgramVersionService programVersionService;
|
||||||
|
|
||||||
@Value("${socket.port}")
|
@Value("${socket.port:60000}")
|
||||||
private Integer socketPort;
|
private Integer socketPort;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -31,4 +31,7 @@ public interface UploadGwDataFeignClient {
|
|||||||
@PostMapping("/upGwCommPoint")
|
@PostMapping("/upGwCommPoint")
|
||||||
HttpResult<String> upGwCommPoint(@RequestBody UploadDataParam param);
|
HttpResult<String> upGwCommPoint(@RequestBody UploadDataParam param);
|
||||||
|
|
||||||
|
@PostMapping("/upGwMainMonitor")
|
||||||
|
HttpResult<String> upGwMainMonitor(@RequestBody UploadDataParam param);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ public class UploadGwDataFallbackFactory implements FallbackFactory<UploadGwData
|
|||||||
log.error("{}异常,降级处理,异常为:{}", "国网上送-公共连接点数据", throwable.toString());
|
log.error("{}异常,降级处理,异常为:{}", "国网上送-公共连接点数据", throwable.toString());
|
||||||
return new HttpResult<>(CommonResponseEnum.FAIL.getCode(),CommonResponseEnum.FAIL.getMessage());
|
return new HttpResult<>(CommonResponseEnum.FAIL.getCode(),CommonResponseEnum.FAIL.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HttpResult<String> upGwMainMonitor(UploadDataParam param) {
|
||||||
|
log.error("{}异常,降级处理,异常为:{}", "国网上送-主网测点数据", throwable.toString());
|
||||||
|
return new HttpResult<>(CommonResponseEnum.FAIL.getCode(),CommonResponseEnum.FAIL.getMessage());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
package com.njcn.harmonic.pojo.dto.upload;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于河北上送主网测点信息至国网
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RUploadMainMonitorDataDTO {
|
||||||
|
|
||||||
|
|
||||||
|
private String objId;
|
||||||
|
private String provinceOrg;
|
||||||
|
private String provinceOrgName;
|
||||||
|
private String cityOrg;
|
||||||
|
private String cityOrgName;
|
||||||
|
private String maintOrg;
|
||||||
|
private String maintOrgName;
|
||||||
|
private String monitorName;
|
||||||
|
private String monitorVoltageLevel;
|
||||||
|
private String monitorId;
|
||||||
|
private String monitorStatus;
|
||||||
|
private Date monitorOperateDate;
|
||||||
|
private Date monitorStopDate;
|
||||||
|
private String substationId;
|
||||||
|
private String substationName;
|
||||||
|
private String busId;
|
||||||
|
private String busName;
|
||||||
|
private String outLineIntervalId;
|
||||||
|
private String outLineIntervalName;
|
||||||
|
private String monitorObjTypeBig;
|
||||||
|
private String monitorObjTypeSmall;
|
||||||
|
private String monitorTag;
|
||||||
|
private String monitorObjName;
|
||||||
|
private String monitorObjId;
|
||||||
|
private String isLine;
|
||||||
|
private BigDecimal minShortCapacity;
|
||||||
|
private BigDecimal supplyEquipCapacity;
|
||||||
|
private BigDecimal userProtocolCapacity;
|
||||||
|
private String terminalCode;
|
||||||
|
private String terminalManufacturer;
|
||||||
|
private String terminalModel;
|
||||||
|
private String terminalManufactureNum;
|
||||||
|
private String terminalConnect;
|
||||||
|
private String neutralGround;
|
||||||
|
private String evtType;
|
||||||
|
/**
|
||||||
|
* 统计日期
|
||||||
|
*/
|
||||||
|
private String statisticalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计类型(01:年 02:月 03:日)
|
||||||
|
*/
|
||||||
|
private String statisticalType;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测点是否在线
|
||||||
|
*/
|
||||||
|
private String isMonitorOnline;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测终端是否在线
|
||||||
|
*/
|
||||||
|
private String isTerminalOnline;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线监测点数量
|
||||||
|
*/
|
||||||
|
private Integer onlineMonitorNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在运监测点数量
|
||||||
|
*/
|
||||||
|
private Integer runMonitorNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测点在线率
|
||||||
|
*/
|
||||||
|
private BigDecimal onlineMonitorRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应收采集数
|
||||||
|
*/
|
||||||
|
private Long expectCollectNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实收采集数
|
||||||
|
*/
|
||||||
|
private Long actualCollectNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测数据完整率
|
||||||
|
*/
|
||||||
|
private BigDecimal dataFullRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算日期(用于记录算法执行日期)
|
||||||
|
*/
|
||||||
|
private LocalDate computeDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上送状态
|
||||||
|
*/
|
||||||
|
private Integer uploadStatus;
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
package com.njcn.harmonic.pojo.po.upload;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 2.4.1.23接收电能质量主网监测点统计数据接口功能表(日月年数据)
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author cdf
|
||||||
|
* @since 2024-10-21
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@TableName("r_upload_main_monitor_data")
|
||||||
|
public class RUploadMainMonitorData{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private String objId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计日期
|
||||||
|
*/
|
||||||
|
@MppMultiId
|
||||||
|
private String statisticalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计类型(01:年 02:月 03:日)
|
||||||
|
*/
|
||||||
|
@MppMultiId
|
||||||
|
private String statisticalType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主网测点id
|
||||||
|
*/
|
||||||
|
@MppMultiId
|
||||||
|
private String monitorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测点是否在线
|
||||||
|
*/
|
||||||
|
private String isMonitorOnline;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测终端是否在线
|
||||||
|
*/
|
||||||
|
private String isTerminalOnline;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线监测点数量
|
||||||
|
*/
|
||||||
|
private Integer onlineMonitorNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在运监测点数量
|
||||||
|
*/
|
||||||
|
private Integer runMonitorNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测点在线率
|
||||||
|
*/
|
||||||
|
private BigDecimal onlineMonitorRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应收采集数
|
||||||
|
*/
|
||||||
|
private Long expectCollectNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实收采集数
|
||||||
|
*/
|
||||||
|
private Long actualCollectNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测数据完整率
|
||||||
|
*/
|
||||||
|
private BigDecimal dataFullRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算日期(用于记录算法执行日期)
|
||||||
|
*/
|
||||||
|
private LocalDate computeDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上送状态
|
||||||
|
*/
|
||||||
|
private Integer uploadStatus;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package com.njcn.harmonic.controller.upload;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.njcn.common.pojo.annotation.OperateInfo;
|
||||||
|
import com.njcn.common.pojo.enums.common.LogEnum;
|
||||||
|
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||||
|
import com.njcn.common.pojo.response.HttpResult;
|
||||||
|
import com.njcn.common.utils.HttpResultUtil;
|
||||||
|
import com.njcn.harmonic.pojo.param.UploadDataParam;
|
||||||
|
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
|
||||||
|
import com.njcn.harmonic.pojo.po.upload.RUploadMainMonitorData;
|
||||||
|
import com.njcn.harmonic.service.upload.RUploadCommPointBusService;
|
||||||
|
import com.njcn.harmonic.service.upload.RUploadMainMonitorService;
|
||||||
|
import com.njcn.web.controller.BaseController;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author cdf
|
||||||
|
* @since 2024-08-15
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/upload")
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class RUploadMainMonitorController extends BaseController {
|
||||||
|
|
||||||
|
private final RUploadMainMonitorService rUploadMainMonitorService;
|
||||||
|
|
||||||
|
|
||||||
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
|
@PostMapping("/getMainMonitorPage")
|
||||||
|
@ApiOperation("分页查询主网监测点")
|
||||||
|
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
|
||||||
|
public HttpResult<Page<RUploadMainMonitorData>> getMainMonitorPage(@RequestBody @Validated UploadDataParam param) {
|
||||||
|
String methodDescribe = getMethodDescribe("getMainMonitorPage");
|
||||||
|
Page<RUploadMainMonitorData> page = rUploadMainMonitorService.getMainMonitorPage(param);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
|
@PostMapping("/upGwMainMonitor")
|
||||||
|
@ApiOperation("上送国网")
|
||||||
|
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
|
||||||
|
public HttpResult<Boolean> upGwMainMonitor(@RequestBody UploadDataParam param) {
|
||||||
|
String methodDescribe = getMethodDescribe("upGwMainMonitor");
|
||||||
|
rUploadMainMonitorService.upGwMainMonitor(param);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.njcn.harmonic.mapper.upload;
|
||||||
|
|
||||||
|
|
||||||
|
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||||
|
import com.njcn.harmonic.pojo.po.upload.RUploadMainMonitorData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 2.4.1.23接收电能质量主网监测点统计数据接口功能表(日月年数据) Mapper 接口
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author cdf
|
||||||
|
* @since 2024-10-21
|
||||||
|
*/
|
||||||
|
public interface RUploadMainMonitorDataMapper extends MppBaseMapper<RUploadMainMonitorData> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.njcn.harmonic.service.upload;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.njcn.harmonic.pojo.param.UploadDataParam;
|
||||||
|
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
|
||||||
|
import com.njcn.harmonic.pojo.po.upload.RUploadMainMonitorData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 公共连接点母线电能质量统计 服务类
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface RUploadMainMonitorService extends IService<RUploadMainMonitorData> {
|
||||||
|
|
||||||
|
Page<RUploadMainMonitorData> getMainMonitorPage(UploadDataParam param);
|
||||||
|
|
||||||
|
Boolean upGwMainMonitor(UploadDataParam param);
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ import com.njcn.web.pojo.param.SendParam;
|
|||||||
import com.njcn.web.utils.GwSendUtil;
|
import com.njcn.web.utils.GwSendUtil;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -32,7 +33,7 @@ import java.util.stream.Stream;
|
|||||||
* 公共连接点母线电能质量统计 服务实现类
|
* 公共连接点母线电能质量统计 服务实现类
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @author xy
|
* @author cdf
|
||||||
* @since 2024-08-15
|
* @since 2024-08-15
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@@ -66,6 +67,11 @@ public class RUploadCommPointBusServiceImpl extends ServiceImpl<RUploadCommPoint
|
|||||||
String year = DateUtil.format(dateTime,DatePattern.NORM_YEAR_PATTERN);
|
String year = DateUtil.format(dateTime,DatePattern.NORM_YEAR_PATTERN);
|
||||||
lambdaQueryWrapper.in(RUploadCommPointBus::getStatisticalDate, Stream.of(param.getSearchBeginTime(),month,year).collect(Collectors.toList()));
|
lambdaQueryWrapper.in(RUploadCommPointBus::getStatisticalDate, Stream.of(param.getSearchBeginTime(),month,year).collect(Collectors.toList()));
|
||||||
}else {
|
}else {
|
||||||
|
if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_M.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(DateUtil.parse(param.getSearchBeginTime(),DatePattern.NORM_DATE_PATTERN),DatePattern.NORM_MONTH_PATTERN));
|
||||||
|
}else if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_Y.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(DateUtil.parse(param.getSearchBeginTime(),DatePattern.NORM_DATE_PATTERN),DatePattern.NORM_YEAR_PATTERN));
|
||||||
|
}
|
||||||
lambdaQueryWrapper.eq(RUploadCommPointBus::getStatisticalType,param.getDataType())
|
lambdaQueryWrapper.eq(RUploadCommPointBus::getStatisticalType,param.getDataType())
|
||||||
.eq(RUploadCommPointBus::getStatisticalDate,param.getSearchBeginTime());
|
.eq(RUploadCommPointBus::getStatisticalDate,param.getSearchBeginTime());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,242 @@
|
|||||||
|
package com.njcn.harmonic.service.upload.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
|
import com.njcn.device.biz.commApi.CommLineClient;
|
||||||
|
import com.njcn.device.pms.api.MonitorClient;
|
||||||
|
import com.njcn.device.pms.api.PmsTerminalClient;
|
||||||
|
import com.njcn.device.pms.pojo.po.Monitor;
|
||||||
|
import com.njcn.device.pms.pojo.po.PmsTerminal;
|
||||||
|
import com.njcn.harmonic.mapper.upload.RUploadCommPointBusMapper;
|
||||||
|
import com.njcn.harmonic.mapper.upload.RUploadMainMonitorDataMapper;
|
||||||
|
import com.njcn.harmonic.pojo.dto.upload.RUploadMainMonitorDataDTO;
|
||||||
|
import com.njcn.harmonic.pojo.param.UploadDataParam;
|
||||||
|
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
|
||||||
|
import com.njcn.harmonic.pojo.po.upload.RUploadMainMonitorData;
|
||||||
|
import com.njcn.harmonic.service.upload.RUploadCommPointBusService;
|
||||||
|
import com.njcn.harmonic.service.upload.RUploadMainMonitorService;
|
||||||
|
import com.njcn.system.api.DicDataFeignClient;
|
||||||
|
import com.njcn.system.api.DictTreeFeignClient;
|
||||||
|
import com.njcn.system.enums.DicDataEnum;
|
||||||
|
import com.njcn.system.enums.DicDataTypeEnum;
|
||||||
|
import com.njcn.system.enums.DicTreeEnum;
|
||||||
|
import com.njcn.system.pojo.po.DictData;
|
||||||
|
import com.njcn.system.pojo.po.SysDicTreePO;
|
||||||
|
import com.njcn.system.pojo.vo.DictTreeVO;
|
||||||
|
import com.njcn.user.api.DeptFeignClient;
|
||||||
|
import com.njcn.user.pojo.vo.DeptTreeVO;
|
||||||
|
import com.njcn.user.pojo.vo.PvTerminalTreeVO;
|
||||||
|
import com.njcn.web.enums.GWSendEnum;
|
||||||
|
import com.njcn.web.factory.PageFactory;
|
||||||
|
import com.njcn.web.pojo.param.SendParam;
|
||||||
|
import com.njcn.web.utils.GwSendUtil;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 公共连接点母线电能质量统计 服务实现类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author cdf
|
||||||
|
* @since 2024-08-15
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class RUploadMainMonitorServiceImpl extends ServiceImpl<RUploadMainMonitorDataMapper, RUploadMainMonitorData> implements RUploadMainMonitorService {
|
||||||
|
|
||||||
|
private final MonitorClient monitorClient;
|
||||||
|
|
||||||
|
private final DeptFeignClient deptFeignClient;
|
||||||
|
|
||||||
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
|
||||||
|
private final DictTreeFeignClient dictTreeFeignClient;
|
||||||
|
|
||||||
|
private final PmsTerminalClient pmsTerminalClient;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<RUploadMainMonitorData> getMainMonitorPage(UploadDataParam param) {
|
||||||
|
DateTime dateTime = DateUtil.parse(param.getSearchBeginTime(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_M.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(dateTime,DatePattern.NORM_MONTH_PATTERN));
|
||||||
|
}else if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_Y.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(dateTime,DatePattern.NORM_YEAR_PATTERN));
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<RUploadMainMonitorData> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
lambdaQueryWrapper.eq(RUploadMainMonitorData::getStatisticalType,param.getDataType())
|
||||||
|
.eq(RUploadMainMonitorData::getStatisticalDate,param.getSearchBeginTime());
|
||||||
|
return this.page(new Page<>(PageFactory.getPageNum(param),PageFactory.getPageSize(param)),lambdaQueryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean upGwMainMonitor(UploadDataParam param) {
|
||||||
|
if(StrUtil.isBlank(param.getSearchBeginTime())){
|
||||||
|
throw new BusinessException("日期不可为空");
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<RUploadMainMonitorData> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
|
||||||
|
if(StrUtil.isBlank(param.getDataType())){
|
||||||
|
//类型为空则上送日月年数据
|
||||||
|
DateTime dateTime = DateUtil.parse(param.getSearchBeginTime(),DatePattern.NORM_DATE_PATTERN);
|
||||||
|
String month = DateUtil.format(dateTime,DatePattern.NORM_MONTH_PATTERN);
|
||||||
|
String year = DateUtil.format(dateTime,DatePattern.NORM_YEAR_PATTERN);
|
||||||
|
lambdaQueryWrapper.in(RUploadMainMonitorData::getStatisticalDate, Stream.of(param.getSearchBeginTime(),month,year).collect(Collectors.toList()));
|
||||||
|
}else {
|
||||||
|
if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_M.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(DateUtil.parse(param.getSearchBeginTime(),DatePattern.NORM_DATE_PATTERN),DatePattern.NORM_MONTH_PATTERN));
|
||||||
|
}else if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_Y.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(DateUtil.parse(param.getSearchBeginTime(),DatePattern.NORM_DATE_PATTERN),DatePattern.NORM_YEAR_PATTERN));
|
||||||
|
}
|
||||||
|
lambdaQueryWrapper.eq(RUploadMainMonitorData::getStatisticalType,param.getDataType())
|
||||||
|
.eq(RUploadMainMonitorData::getStatisticalDate,param.getSearchBeginTime());
|
||||||
|
}
|
||||||
|
List<RUploadMainMonitorData> rUploadMainMonitorDataList = this.list(lambdaQueryWrapper);
|
||||||
|
if(CollUtil.isEmpty(rUploadMainMonitorDataList)){
|
||||||
|
throw new BusinessException("查询数据为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<PvTerminalTreeVO> deptTreeVOList = deptFeignClient.allDeptList().getData();
|
||||||
|
Map<String,PvTerminalTreeVO> pvTerminalTreeVOCodeMap = deptTreeVOList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getCode,Function.identity()));
|
||||||
|
Map<String,PvTerminalTreeVO> pvTerminalTreeVOIdMap = deptTreeVOList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getId,Function.identity()));
|
||||||
|
|
||||||
|
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE.getCode()).getData();
|
||||||
|
Map<String,DictData> voltageMap = dictDataList.stream().collect(Collectors.toMap(DictData::getId,Function.identity()));
|
||||||
|
|
||||||
|
List<DictData> stateList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_STATE.getCode()).getData();
|
||||||
|
Map<String,DictData> stateMap = stateList.stream().collect(Collectors.toMap(DictData::getId,Function.identity()));
|
||||||
|
|
||||||
|
//监测点标签
|
||||||
|
List<DictData> tagList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
|
||||||
|
Map<String,DictData> tagMap = tagList.stream().collect(Collectors.toMap(DictData::getId,Function.identity()));
|
||||||
|
//监测点接线方式
|
||||||
|
List<DictData> wireList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_CONNECT.getCode()).getData();
|
||||||
|
Map<String,DictData> wireMap = wireList.stream().collect(Collectors.toMap(DictData::getId,Function.identity()));
|
||||||
|
|
||||||
|
|
||||||
|
List<SysDicTreePO> sysDicTreePOList = dictTreeFeignClient.queryAllByType(Integer.valueOf(DicTreeEnum.HB_PMS_TYPE.getCode())).getData();
|
||||||
|
Map<String,SysDicTreePO> dicTreeMap = sysDicTreePOList.stream().collect(Collectors.toMap(SysDicTreePO::getId,Function.identity()));
|
||||||
|
|
||||||
|
|
||||||
|
//获取测点map
|
||||||
|
List<String> monitorIds = rUploadMainMonitorDataList.stream().map(RUploadMainMonitorData::getMonitorId).distinct().collect(Collectors.toList());
|
||||||
|
List<Monitor> monitorList = monitorClient.getMonitorListByMid(monitorIds).getData();
|
||||||
|
Map<String,Monitor> monitorMap = monitorList.stream().collect(Collectors.toMap(Monitor::getMonitorId, Function.identity()));
|
||||||
|
|
||||||
|
List<String> terminalIds = monitorList.stream().map(Monitor::getTerminalId).distinct().collect(Collectors.toList());
|
||||||
|
List<PmsTerminal> pmsTerminalList = pmsTerminalClient.getTerminalSelectByIds(terminalIds).getData();
|
||||||
|
Map<String,PmsTerminal> pmsTerminalMap = pmsTerminalList.stream().collect(Collectors.toMap(PmsTerminal::getId,Function.identity()));
|
||||||
|
|
||||||
|
List<RUploadMainMonitorDataDTO> rUploadMainMonitorDataDTOList = new ArrayList<>();
|
||||||
|
rUploadMainMonitorDataList.forEach(item->{
|
||||||
|
RUploadMainMonitorDataDTO rUploadMainMonitorDataDTO = new RUploadMainMonitorDataDTO();
|
||||||
|
BeanUtil.copyProperties(item,rUploadMainMonitorDataDTO);
|
||||||
|
|
||||||
|
if(monitorMap.containsKey(item.getMonitorId())){
|
||||||
|
Monitor monitor = monitorMap.get(item.getMonitorId());
|
||||||
|
assOrg(pvTerminalTreeVOCodeMap,pvTerminalTreeVOIdMap,rUploadMainMonitorDataDTO,monitor);
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorName(monitor.getName());
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorVoltageLevel(String.format("%02d",voltageMap.get(monitor.getVoltageLevel()).getAlgoDescribe()));
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorStatus(stateMap.get(monitor.getMonitorState()).getValue());
|
||||||
|
rUploadMainMonitorDataDTO.setSubstationId(monitor.getPowerrId());
|
||||||
|
rUploadMainMonitorDataDTO.setSubstationName(monitor.getPowerrName());
|
||||||
|
rUploadMainMonitorDataDTO.setBusId(monitor.getLineId());
|
||||||
|
rUploadMainMonitorDataDTO.setBusName(monitor.getLineName());
|
||||||
|
|
||||||
|
String objType = monitor.getObjType();
|
||||||
|
SysDicTreePO sysDicTreePO = dicTreeMap.get(objType);
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorObjTypeSmall(sysDicTreePO.getCode());
|
||||||
|
if("0".equals(sysDicTreePO.getPid())){
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorObjTypeBig(sysDicTreePO.getCode());
|
||||||
|
}else {
|
||||||
|
SysDicTreePO sysDicTreeSmall = dicTreeMap.get(sysDicTreePO.getPid());
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorObjTypeBig(sysDicTreeSmall.getCode());
|
||||||
|
}
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorTag(tagMap.get(monitor.getMonitorTag()).getValue());
|
||||||
|
rUploadMainMonitorDataDTO.setMonitorObjName(monitor.getMonitorObjectName());
|
||||||
|
rUploadMainMonitorDataDTO.setMinShortCapacity(BigDecimal.valueOf(monitor.getMinShortCircuitCapacity()));
|
||||||
|
rUploadMainMonitorDataDTO.setSupplyEquipCapacity(BigDecimal.valueOf(monitor.getPowerSupplyEqCapacity()));
|
||||||
|
rUploadMainMonitorDataDTO.setUserProtocolCapacity(BigDecimal.valueOf(monitor.getUserAgreementCapacity()));
|
||||||
|
|
||||||
|
PmsTerminal pmsTerminal = pmsTerminalMap.get(monitor.getTerminalId());
|
||||||
|
rUploadMainMonitorDataDTO.setTerminalCode(pmsTerminal.getTerminalCode());
|
||||||
|
rUploadMainMonitorDataDTO.setTerminalConnect(wireMap.get(monitor.getTerminalWiringMethod()).getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
rUploadMainMonitorDataDTOList.add(rUploadMainMonitorDataDTO);
|
||||||
|
});
|
||||||
|
|
||||||
|
List<List<RUploadMainMonitorDataDTO>> list = CollUtil.split(rUploadMainMonitorDataDTOList,100);
|
||||||
|
for(int i=0;i<list.size();i++){
|
||||||
|
SendParam sendParam = new SendParam();
|
||||||
|
if(i==0){
|
||||||
|
sendParam.setIsAppend("0");
|
||||||
|
}else if(i==list.size()-1){
|
||||||
|
sendParam.setIsAppend("2");
|
||||||
|
}else {
|
||||||
|
sendParam.setIsAppend("1");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(StrUtil.isNotBlank(param.getDataType())){
|
||||||
|
DateTime dateTime = DateUtil.parse(param.getSearchBeginTime(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
sendParam.setStatisticalType(param.getDataType());
|
||||||
|
|
||||||
|
if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_M.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(dateTime,DatePattern.NORM_MONTH_PATTERN));
|
||||||
|
}else if(param.getDataType().equals(DicDataEnum.STATISTICAL_TYPE_Y.getCode())){
|
||||||
|
param.setSearchBeginTime(DateUtil.format(dateTime,DatePattern.NORM_YEAR_PATTERN));
|
||||||
|
}
|
||||||
|
sendParam.setStatisticalDate(param.getSearchBeginTime());
|
||||||
|
}
|
||||||
|
sendParam.setStats(list.get(i));
|
||||||
|
Map<String, String> sendRes = GwSendUtil.newSend(sendParam, GWSendEnum.COMM_POINT);
|
||||||
|
List<String> ids = list.get(i).stream().map(RUploadMainMonitorDataDTO::getObjId).collect(Collectors.toList());
|
||||||
|
int count = GwSendUtil.returnInfoMsg(ids,sendRes);
|
||||||
|
System.out.println("上送成功,上送成功返回"+count+"条");
|
||||||
|
if(count == list.get(i).size()){
|
||||||
|
LambdaUpdateWrapper<RUploadMainMonitorData> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||||
|
lambdaUpdateWrapper.set(RUploadMainMonitorData::getUploadStatus,1).in(RUploadMainMonitorData::getObjId,ids);
|
||||||
|
this.update(lambdaUpdateWrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void assOrg(Map<String,PvTerminalTreeVO> pvTerminalTreeVOCodeMap,Map<String,PvTerminalTreeVO> pvTerminalTreeVOIdMap,RUploadMainMonitorDataDTO rUploadMainMonitorDataDTO,Monitor monitor){
|
||||||
|
PvTerminalTreeVO pvTerminalTreeVO = pvTerminalTreeVOCodeMap.get(monitor.getOrgId());
|
||||||
|
rUploadMainMonitorDataDTO.setMaintOrg(pvTerminalTreeVO.getCode());
|
||||||
|
rUploadMainMonitorDataDTO.setMaintOrgName(pvTerminalTreeVO.getName());
|
||||||
|
|
||||||
|
PvTerminalTreeVO pvTerminalTreeCity = pvTerminalTreeVOIdMap.get(pvTerminalTreeVO.getPid());
|
||||||
|
rUploadMainMonitorDataDTO.setCityOrg(pvTerminalTreeCity.getCode());
|
||||||
|
rUploadMainMonitorDataDTO.setCityOrgName(pvTerminalTreeCity.getName());
|
||||||
|
|
||||||
|
PvTerminalTreeVO pvTerminalTreeProvince = pvTerminalTreeVOIdMap.get(pvTerminalTreeCity.getPid());
|
||||||
|
rUploadMainMonitorDataDTO.setProvinceOrg(pvTerminalTreeProvince.getCode());
|
||||||
|
rUploadMainMonitorDataDTO.setProvinceOrgName(pvTerminalTreeProvince.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user