Browse Source

1、温湿度接口优化以及前端对接;

dev
mh 2 weeks ago
parent
commit
f6279b2e1e
  1. 2
      mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java
  2. 2
      mh-admin/src/main/java/com/mh/web/controller/monitor/IndoorTempMonitorController.java
  3. 20
      mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceDTO.java
  4. 10
      mh-common/src/main/java/com/mh/common/core/domain/dto/TempHisRequest.java
  5. 26
      mh-common/src/main/java/com/mh/common/core/domain/dto/TempHumidityDTO.java
  6. 9
      mh-common/src/main/java/com/mh/common/core/domain/vo/IndoorTempVO.java
  7. 11
      mh-quartz/src/main/java/com/mh/quartz/task/CreateAlarmTask.java
  8. 4
      mh-quartz/src/main/java/com/mh/quartz/task/DealDataTask.java
  9. 31
      mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java
  10. 25
      mh-system/src/main/java/com/mh/system/mapper/device/DataProcessMapper.java
  11. 3
      mh-system/src/main/java/com/mh/system/service/device/IIndoorTempMonitorService.java
  12. 179
      mh-system/src/main/java/com/mh/system/service/device/impl/IndoorTempMonitorServiceImpl.java
  13. 8
      mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java
  14. 17
      mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java

2
mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java

@ -92,7 +92,7 @@ public class OperationController extends BaseController {
String sendOrder = iOperationService.operationDevice(changeValues);
// 获取mqtt操作队列(后期通过mqtt队列配置发送主题)
log.info("发送主题:{},消息:{}", controlTopic, sendOrder);
// iMqttGatewayService.publish(controlTopic, sendOrder, 1);
iMqttGatewayService.publish(controlTopic, sendOrder, 1);
} catch (Exception e) {
log.error("设备操作失败", e);
return AjaxResult.error();

2
mh-admin/src/main/java/com/mh/web/controller/monitor/IndoorTempMonitorController.java

@ -44,7 +44,7 @@ public class IndoorTempMonitorController extends BaseController {
@PostMapping("/tempHis")
public TableDataInfo getIndoorTempHisByHouseId(@RequestBody TempHisRequest tempHisRequest) {
List<IndoorTempDTO> indoorTempHisByHouseId = indoorTempMonitorService.getIndoorTempHisByHouseId(tempHisRequest.getSystemType(), tempHisRequest.getHouseIds());
List<IndoorTempDTO> indoorTempHisByHouseId = indoorTempMonitorService.getIndoorTempHisByHouseId(tempHisRequest);
return getDataTable(indoorTempHisByHouseId);
}

20
mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceDTO.java

@ -13,6 +13,8 @@ class DeviceDTO {
private int orderNum;
private String otherName;
private String curValue;
private String paramType;
private Integer alarmStatus;
/**
* 时间格式化
*/
@ -25,6 +27,24 @@ class DeviceDTO {
this.curValue = data.getCurValue().stripTrailingZeros().toPlainString();
this.curTime = data.getCurTime();
this.status = data.getStatus();
this.paramType = data.getParamType();
this.alarmStatus = data.getAlarmStatus();
}
public Integer getAlarmStatus() {
return alarmStatus;
}
public void setAlarmStatus(Integer alarmStatus) {
this.alarmStatus = alarmStatus;
}
public String getParamType() {
return paramType;
}
public void setParamType(String paramType) {
this.paramType = paramType;
}
public String getCpmId() {

10
mh-common/src/main/java/com/mh/common/core/domain/dto/TempHisRequest.java

@ -20,4 +20,14 @@ public class TempHisRequest {
private List<String> houseIds;
/**
* 开始时间 yyyy-MM-dd
*/
private String startTime;
/**
* 结束时间 yyyy-MM-dd
*/
private String endTime;
}

26
mh-common/src/main/java/com/mh/common/core/domain/dto/TempHumidityDTO.java

@ -33,6 +33,32 @@ public class TempHumidityDTO {
private int orderNum;
/**
* 采集类型
*/
private String paramType;
/**
* 报警状态
*/
private Integer alarmStatus;
public Integer getAlarmStatus() {
return alarmStatus;
}
public void setAlarmStatus(Integer alarmStatus) {
this.alarmStatus = alarmStatus;
}
public String getParamType() {
return paramType;
}
public void setParamType(String paramType) {
this.paramType = paramType;
}
public int getOrderNum() {
return orderNum;
}

9
mh-common/src/main/java/com/mh/common/core/domain/vo/IndoorTempVO.java

@ -23,6 +23,15 @@ public class IndoorTempVO {
private BigDecimal indoorHumidity;
public IndoorTempVO() {
}
public IndoorTempVO(String curTime, BigDecimal indoorTemp, BigDecimal indoorHumidity) {
this.curTime = curTime;
this.indoorTemp = indoorTemp;
this.indoorHumidity = indoorHumidity;
}
@Override
public String toString() {
return new ToStringBuilder(this)

11
mh-quartz/src/main/java/com/mh/quartz/task/CreateAlarmTask.java

@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
@ -84,8 +85,8 @@ public class CreateAlarmTask {
if (compare) {
// 创建报警记录
String content = alarmCode.getMsgContent();
content.replace("#{curValue}", curValue.toString());
content.replace("#{setValue}", alarmRule.getCondition1() + threshold1);
content = content.replace("#{curValue}", curValue.setScale(1, RoundingMode.HALF_UP).toString());
content = content.replace("#{setValue}", alarmRule.getCondition1() + threshold1);
alarmRecords.setContent(content);
alarmRecords.setAlarmType(alarmRule.getAlarmType());
alarmRecords.setEventType(alarmRule.getEventType());
@ -101,9 +102,9 @@ public class CreateAlarmTask {
alarmRecordService.insertAlarmRecord(alarmRecords);
} else {
// 更新报警记录
alarmRecords.setContent(content);
alarmRecords.setCreateTime(collectionParamsManage.getCurTime());
alarmRecordService.updateAlarmRecord(alarmRecords);
isExits.setContent(content);
isExits.setCreateTime(collectionParamsManage.getCurTime());
alarmRecordService.updateAlarmRecord(isExits);
}
}
}

4
mh-quartz/src/main/java/com/mh/quartz/task/DealDataTask.java

@ -280,11 +280,11 @@ public class DealDataTask {
return;
}
dataProcessService.batchInsertOrUpdate(hourList, "hour");
//TODO 修改分钟表的状态,grade=1
dataProcessService.batchUpdateGrade(idMap, "min");
} catch (Exception e) {
log.error("小时数据表处理异常:" + e);
}
//TODO 修改分钟表的状态,grade=1
dataProcessService.batchUpdateGrade(idMap, "min");
}

31
mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java

@ -121,9 +121,11 @@ public interface CollectionParamsManageMapper extends BaseMapper<CollectionParam
" <foreach collection='houseIds' item='item' open='(' separator=',' close=')'>" +
" #{item}" +
" </foreach>" +
" and cpm.param_type = #{paramType} " +
" and cpm.param_type = #{paramType}" +
" and cpm.system_type = #{systemType} " +
"</script>")
List<Map<String, String>> selectByHouseIdAndMtType(@Param("houseIds") List<String> houseIds,
@Param("systemType") String systemType,
@Param("mtType") String mtType,
@Param("paramType") String paramType);
@ -145,21 +147,28 @@ public interface CollectionParamsManageMapper extends BaseMapper<CollectionParam
" cpm.cur_time, " +
" cpm.id as cpm_id, " +
" dl.status, " +
" cpm.order_num " +
" cpm.order_num, " +
" cpm.param_type, " +
" case " +
" when ar.create_time >= CURRENT_DATE " +
" and ar.create_time < CURRENT_DATE + interval '1 day' then 1 " +
" else 0 " +
" end as alarm_status " +
"from " +
" cpm_space_relation csr " +
" join collection_params_manage cpm " +
"on " +
"join collection_params_manage cpm on " +
" csr.cpm_id = cpm.id " +
" join house_info hi " +
"on " +
"join house_info hi on " +
" csr.house_id = hi.id " +
" join device_ledger dl " +
"on " +
"join device_ledger dl on " +
" dl.id = cpm.device_ledger_id " +
" and csr.floor_id = #{floorId} " +
" and cpm.param_type = #{paramType}" +
" and cpm.system_type = #{systemType} ")
"join alarm_records ar on " +
" ar.cpm_id = cpm.id " +
"where " +
" csr.floor_id = #{floorId} " +
" and hi.floor_id = #{floorId} " +
" and cpm.param_type = #{paramType} " +
" and cpm.system_type = #{systemType}; ")
List<TempHumidityDTO> selectByParamType(@Param("systemType") String systemType,
@Param("floorId") String floorId,
@Param("paramType") String paramType);

25
mh-system/src/main/java/com/mh/system/mapper/device/DataProcessMapper.java

@ -177,13 +177,24 @@ public interface DataProcessMapper {
@Param("registerId") String registerId);
@Select("<script>" +
"select to_char(cur_time, 'YYYY-MM-DD HH24:00:00') as curTime, cur_value as indoorTemp from ${tableName} " +
" where register_id in (" +
"<foreach collection ='registerIds' item='id' index = 'index' separator=','>" +
"#{id}" +
"</foreach>" +
" ) order by cur_time desc" +
"select to_char(cur_time, 'YYYY-MM-DD HH24:00:00') as curTime, cur_value as indoorTemp from ${tableName} " +
"<where>" +
" <if test='registerIds != null and registerIds.size() > 0'>" +
" register_id in (" +
" <foreach collection='registerIds' item='id' separator=','>" +
" #{id}" +
" </foreach>" +
" )" +
" </if>" +
" <if test='startTime != null and endTime != null'>" +
" and cur_time between #{startTime}::timestamp and #{endTime}::timestamp " +
" </if>" +
"</where>" +
" order by cur_time desc" +
"</script>")
List<IndoorTempVO> selectHisDataByCodeAndRegisterAddr(@Param("tableName") String tableName,
@Param("registerIds") List<String> registerIds);
@Param("registerIds") List<String> registerIds,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
}

3
mh-system/src/main/java/com/mh/system/service/device/IIndoorTempMonitorService.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.mh.common.core.domain.dto.HouseGroupDTO;
import com.mh.common.core.domain.dto.IndoorTempDTO;
import com.mh.common.core.domain.dto.TempHisRequest;
import com.mh.common.core.domain.entity.ChillersEntity;
import com.mh.common.core.domain.vo.IndoorTempVO;
@ -22,5 +23,5 @@ public interface IIndoorTempMonitorService {
List<IndoorTempVO> getIndoorTempHisByFloorAndHouseId(String systemType, String floorId, String houseId);
List<IndoorTempDTO> getIndoorTempHisByHouseId(String systemType, List<String> houseId);
List<IndoorTempDTO> getIndoorTempHisByHouseId(TempHisRequest tempHisRequest);
}

179
mh-system/src/main/java/com/mh/system/service/device/impl/IndoorTempMonitorServiceImpl.java

@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mh.common.core.domain.dto.HouseGroupDTO;
import com.mh.common.core.domain.dto.IndoorTempDTO;
import com.mh.common.core.domain.dto.TempHisRequest;
import com.mh.common.core.domain.dto.TempHumidityDTO;
import com.mh.common.core.domain.entity.ChillersEntity;
import com.mh.common.core.domain.vo.IndoorTempVO;
@ -45,8 +46,12 @@ public class IndoorTempMonitorServiceImpl implements IIndoorTempMonitorService {
@Override
public List<HouseGroupDTO> getIndoorTempByFloor(String systemType, String floorId) throws JsonProcessingException {
// 查询采集类型是温度的参数,采集参数是99
// 查询采集类型是温度的参数,采集参数是12
List<TempHumidityDTO> collectionParamsManages = collectionParamsManageMapper.selectByParamType(systemType, floorId, "12");
// 湿度采集参数:32
List<TempHumidityDTO> humidityDTOS = collectionParamsManageMapper.selectByParamType(systemType, floorId, "32");
// 合并collectionParamsManages和humidityDTOS
collectionParamsManages.addAll(humidityDTOS);
return convert(collectionParamsManages);
}
@ -72,8 +77,10 @@ public class IndoorTempMonitorServiceImpl implements IIndoorTempMonitorService {
if (list.size() > 1) {
log.warn("Duplicate entries found for key: {}|{}", list.get(0).getHouseId(), list.get(0).getHouseName());
}
HouseGroupDTO group = new HouseGroupDTO(list.get(0));
list.forEach(group::addDevice);
HouseGroupDTO group = new HouseGroupDTO(list.getFirst());
for (TempHumidityDTO data : list) {
group.addDevice(data);
}
return group;
}
)
@ -89,74 +96,132 @@ public class IndoorTempMonitorServiceImpl implements IIndoorTempMonitorService {
}
@Override
public List<IndoorTempDTO> getIndoorTempHisByHouseId(String systemType, List<String> houseIds) {
// 1. 使用Java 8时间API替代字符串截取
LocalDateTime now = LocalDateTime.now();
String tableName = "chillers_data_min" + now.getYear(); // 直接获取年份更安全
// 2. 增强SQL查询参数校验
public List<IndoorTempDTO> getIndoorTempHisByHouseId(TempHisRequest tempHisRequest) {
List<String> houseIds = tempHisRequest.getHouseIds();
String systemType = tempHisRequest.getSystemType();
String startTime = tempHisRequest.getStartTime();
String endTime = tempHisRequest.getEndTime();
// 1. 参数校验
if (houseIds.isEmpty()) {
log.warn("无效房间ID: {}", houseIds);
return Collections.emptyList();
}
// 3. 使用更明确的集合类型声明
List<Map<String, String>> cpmIdList = collectionParamsManageMapper.selectByHouseIdAndMtType(
houseIds,
"7", // 使用枚举常量
"12"
);
// 2. 准备基础数据
String tableName = "chillers_data_min" + LocalDateTime.now().getYear();
// cpmIdList用stream houseId分组遍历得出houseId,houseName, orderNum先赋值给result;
// 使用Stream分组映射
Map<String, Object> houseMapping = cpmIdList.stream()
.filter(map -> map.containsKey("houseId") && map.containsKey("houseName"))
.collect(Collectors.toMap(
map -> map.get("houseId"), // 键:houseId
map -> map.get("houseName"), // 值:houseName
(oldVal, newVal) -> oldVal // 重复键处理:保留首次出现的值
));
// 3. 获取温度数据映射
Map<String, HouseData> tempData = getHouseDataMapping(houseIds, systemType, "8", "12");
Map<String, HouseData> humidityData = getHouseDataMapping(houseIds, systemType, "8", "32");
// 4. 构建结果
return houseIds.stream()
.map(houseId -> buildIndoorTempDTO(
houseId,
tableName,
tempData.getOrDefault(houseId, HouseData.EMPTY),
humidityData.getOrDefault(houseId, HouseData.EMPTY),
startTime,
endTime
))
.collect(Collectors.toList());
}
Map<String, Object> houseOrderMapping = cpmIdList.stream()
.filter(map -> map.containsKey("houseId") && map.containsKey("houseName"))
// 辅助类封装房屋数据
private static class HouseData {
static final HouseData EMPTY = new HouseData("未知房间", "0", Collections.emptyList());
final String houseName;
final String orderNum;
final List<String> cpmIds;
HouseData(String houseName, String orderNum, List<String> cpmIds) {
this.houseName = houseName;
this.orderNum = orderNum;
this.cpmIds = cpmIds;
}
}
// 获取房屋数据映射
private Map<String, HouseData> getHouseDataMapping(List<String> houseIds, String systemType, String mtType, String paramType) {
List<Map<String, String>> rawData = collectionParamsManageMapper.selectByHouseIdAndMtType(houseIds, systemType, mtType, paramType);
return rawData.stream()
.filter(map -> map.containsKey("houseId") && map.containsKey("houseName") && map.containsKey("orderNum"))
.collect(Collectors.toMap(
map -> map.get("houseId"), // 键:houseId
map -> map.get("orderNum"), // 值:houseName
(oldVal, newVal) -> oldVal // 重复键处理:保留首次出现的值
// 确保 houseId 转换为 String
map -> String.valueOf(map.get("houseId")),
map -> new HouseData(
// 确保 houseName 转换为 String
String.valueOf(map.get("houseName")),
// 确保 orderNum 转换为 String
String.valueOf(map.get("orderNum")),
rawData.stream()
.filter(m -> String.valueOf(m.get("houseId")).equals(String.valueOf(map.get("houseId"))))
.map(m -> String.valueOf(m.get("cpmId")))
.collect(Collectors.toList())
),
(oldVal, newVal) -> oldVal
));
}
// 构建结果集合
return houseIds.stream()
.map(houseId -> {
// 根据houseId查询对应的cmpList
List<String> cpmData = cpmIdList.stream()
.filter(map -> houseId.equals(map.get("houseId")))
.map(map -> map.get("cpmId"))
.collect(Collectors.toList());
List<IndoorTempVO> rawData = dataProcessMapper.selectHisDataByCodeAndRegisterAddr(tableName, cpmData);
// 4. 优化聚合计算(单次Stream完成所有操作)
List<IndoorTempVO> collect = rawData.stream()
// .filter(vo -> isValidTimeFormat(vo.getCurTime())) // 格式校验
.collect(Collectors.groupingBy(
IndoorTempVO::getCurTime,
() -> new TreeMap<>(this::compareTimeString), // 自定义排序
Collectors.collectingAndThen(
Collectors.toList(),
this::calculateAverage
)
))
.entrySet().stream()
.map(entry -> buildResultVO(entry.getKey(), entry.getValue()))
.toList();
return new IndoorTempDTO(
Integer.parseInt(String.valueOf(houseOrderMapping.getOrDefault(houseId, 0))), // 默认值兜底
houseId,
String.valueOf(houseMapping.getOrDefault(houseId, "未知房间")), // 默认值兜底
collect); // 初始化数据列表
// 构建单个房屋的DTO
private IndoorTempDTO buildIndoorTempDTO(String houseId, String tableName, HouseData tempData, HouseData humidityData, String startTime, String endTime) {
List<IndoorTempVO> tempRecords = getProcessedData(tableName, tempData.cpmIds, startTime, endTime);
List<IndoorTempVO> humidityRecords = getProcessedData(tableName, humidityData.cpmIds, startTime, endTime);
List<IndoorTempVO> mergedData = mergeTempAndHumidity(tempRecords, humidityRecords);
return new IndoorTempDTO(
Integer.parseInt(tempData.orderNum),
houseId,
tempData.houseName,
mergedData
);
}
// 获取处理后的数据
private List<IndoorTempVO> getProcessedData(String tableName, List<String> cpmIds, String startTime, String endTime) {
if (cpmIds.isEmpty()) {
return Collections.emptyList();
}
List<IndoorTempVO> rawData = dataProcessMapper.selectHisDataByCodeAndRegisterAddr(tableName, cpmIds, startTime, endTime);
return rawData.stream()
.collect(Collectors.groupingBy(
IndoorTempVO::getCurTime,
() -> new TreeMap<>(this::compareTimeString),
Collectors.collectingAndThen(
Collectors.toList(),
this::calculateAverage
)
))
.entrySet().stream()
.map(entry -> buildResultVO(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
}
// 合并温度和湿度数据
private List<IndoorTempVO> mergeTempAndHumidity(List<IndoorTempVO> tempData, List<IndoorTempVO> humidityData) {
return humidityData.stream()
.filter(humidity -> tempData.stream().anyMatch(temp -> temp.getCurTime().equals(humidity.getCurTime())))
.map(humidity -> {
IndoorTempVO temp = tempData.stream()
.filter(t -> t.getCurTime().equals(humidity.getCurTime()))
.findFirst()
.orElseThrow();
return new IndoorTempVO(
humidity.getCurTime(),
temp.getIndoorTemp().setScale(1, RoundingMode.HALF_UP),
humidity.getIndoorTemp().setScale(1, RoundingMode.HALF_UP)
);
})
.collect(Collectors.toList());
}
// 辅助方法:时间格式校验
private boolean isValidTimeFormat(String time) {
return time != null && time.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}");

8
mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java

@ -326,6 +326,7 @@ public class ProOverviewServiceImpl implements IProOverviewService {
HashMap<String, BigDecimal> totalData = new HashMap<>();
if (count > 0) {
// 查询总表
queryWrapper.eq("terminal_device_type", "15");
totalData = getTotalData(paramType, queryWrapper);
} else {
// 查询分表综合
@ -334,6 +335,7 @@ public class ProOverviewServiceImpl implements IProOverviewService {
queryWrapper.eq("system_type", sysType);
queryWrapper.eq("grade", 40);
queryWrapper.eq("mt_is_sum", 1);
queryWrapper.ne("terminal_device_type", "15");
// 查询分表总和
totalData = getTotalData(paramType, queryWrapper);
}
@ -382,8 +384,10 @@ public class ProOverviewServiceImpl implements IProOverviewService {
result.put("totalValue", multiply);
});
// 计算得出今年的各个参数用量
BigDecimal yearValue = overviewMapper.queryByDeviceNum(collectionParamsManages);
result.put("yearValue", yearValue == null ? BigDecimal.ZERO : yearValue);
if (!collectionParamsManages.isEmpty()) {
BigDecimal yearValue = overviewMapper.queryByDeviceNum(collectionParamsManages);
result.put("yearValue", yearValue == null ? BigDecimal.ZERO : yearValue);
}
// switch (Integer.parseInt(paramType)) {
// case 16:
// yearEle = yearValue;

17
mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java

@ -1,7 +1,7 @@
package com.mh.system.service.policy.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mh.common.core.domain.dto.DeviceMonitorDTO;
import com.mh.common.core.domain.entity.CollectionParamsManage;
import com.mh.common.core.domain.entity.PolicyManage;
import com.mh.system.mapper.device.CollectionParamsManageMapper;
import com.mh.system.mapper.policy.PolicyManageMapper;
@ -49,16 +49,21 @@ public class PolicyManageServiceImpl implements IPolicyManageService {
.peek(policy -> {
// 自动开关机时间,反馈是ms,页面是s,所以除以1000
// if (funPolicyType.equals("2")) {
policy.setCurValue(BigDecimal.valueOf(policy.getCurValue()
policy.setCurValue(BigDecimal.valueOf((policy.getCurValue()==null?new BigDecimal("0"):policy.getCurValue())
.divide(new BigDecimal( (int) Math.pow(10, policy.getDigits()))).intValue())); // 除以1000并保留整数
// }
// 判断系统启动模式值是多少,如果是1:一键启动,如果是2:定时启动
if (policy.getPolicyType().equals("5") && policy.getFunPolicyType().equals("1")) {
// 查询当前系统启动模式值
int systemStartMode = collectionParamsManageMapper.selectById(policy.getCpmId()).getCurValue().intValue();
// 匹配orderNum值,如果相等,哪个的curValue=1
if (policy.getOrderNum() == systemStartMode) {
policy.setCurValue(BigDecimal.valueOf(1));
CollectionParamsManage collectionParamsManage = collectionParamsManageMapper.selectById(policy.getCpmId());
if (null != collectionParamsManage) {
int systemStartMode = collectionParamsManageMapper.selectById(policy.getCpmId()).getCurValue().intValue();
// 匹配orderNum值,如果相等,哪个的curValue=1
if (policy.getOrderNum() == systemStartMode) {
policy.setCurValue(BigDecimal.valueOf(1));
} else {
policy.setCurValue(BigDecimal.valueOf(0));
}
} else {
policy.setCurValue(BigDecimal.valueOf(0));
}

Loading…
Cancel
Save