Browse Source

数据录入接口对接逻辑、查询项目信息时增加项目功能的返回

wangchenghong 4 years ago
parent
commit
c79010d6b4
14 changed files with 373 additions and 5 deletions
  1. 51 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/controller/ManualFillingController.java
  2. 24 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/model/dto/EnergyItemDataDTO.java
  3. 40 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/model/dto/QueryEnergyItemDataDTO.java
  4. 22 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/model/dto/SaveEnergyItemDataDTO.java
  5. 20 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/model/vo/EnergyItemDataVo.java
  6. 23 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/model/vo/EnergyItemInfoVo.java
  7. 29 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/service/IEnergyItemDataService.java
  8. 138 0
      src/main/java/com/persagy/apm/energy/report/manualfilling/service/impl/IEnergyItemDataServiceImpl.java
  9. 9 0
      src/main/java/com/persagy/apm/energy/report/monthly/functionvalue/model/dto/QueryFunctionValueDTO.java
  10. 12 0
      src/main/java/com/persagy/apm/energy/report/monthly/functionvalue/service/impl/FunctionValueServiceImpl.java
  11. 2 0
      src/main/java/com/persagy/apm/energy/report/saasweb/model/vo/SimpleProjectVO.java
  12. 1 0
      src/main/java/com/persagy/apm/energy/report/saasweb/service/impl/SaasWebServiceImpl.java
  13. 1 2
      src/main/java/com/persagy/apm/energy/report/workorder/client/WorkOrderWebClient.java
  14. 1 3
      src/main/java/com/persagy/apm/energy/report/workorder/service/impl/IWorkOrderWebServiceImpl.java

+ 51 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/controller/ManualFillingController.java

@@ -0,0 +1,51 @@
+package com.persagy.apm.energy.report.manualfilling.controller;
+
+import com.persagy.apm.common.response.ApmResponseUpsertVO;
+import com.persagy.apm.common.response.CommonResult;
+import com.persagy.apm.common.response.PageList;
+import com.persagy.apm.common.utils.ResultHelper;
+import com.persagy.apm.energy.report.manualfilling.model.dto.QueryEnergyItemDataDTO;
+import com.persagy.apm.energy.report.manualfilling.model.dto.SaveEnergyItemDataDTO;
+import com.persagy.apm.energy.report.manualfilling.model.vo.EnergyItemInfoVo;
+import com.persagy.apm.energy.report.manualfilling.service.IEnergyItemDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 与数据录入对接控制层
+ */
+@Api(tags = "数据录入对接")
+@Validated
+@RestController
+@RequestMapping("manualFilling")
+public class ManualFillingController {
+    @Autowired
+    private IEnergyItemDataService iEnergyItemDataService;
+
+    @ApiOperation(value = "查询报告能耗分项列表")
+    @PostMapping("/query")
+    public CommonResult<PageList<EnergyItemInfoVo>> queryEnergyItemDataList(
+            @Valid @RequestBody QueryEnergyItemDataDTO queryEnergyItemDataDTO) {
+        List<EnergyItemInfoVo> energyItemInfoVoList = iEnergyItemDataService.queryEnergyItemDataList(queryEnergyItemDataDTO);
+        return ResultHelper.multi(energyItemInfoVoList);
+    }
+
+    @ApiOperation(value = "保存能耗分项数值")
+    @PostMapping("/save")
+    public CommonResult<ApmResponseUpsertVO> updateReportBusinessDetail(
+            @Valid @RequestBody SaveEnergyItemDataDTO saveEnergyItemDataDTO) {
+        iEnergyItemDataService.saveEnergyItemData(saveEnergyItemDataDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO());
+    }
+
+}
+

+ 24 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/model/dto/EnergyItemDataDTO.java

@@ -0,0 +1,24 @@
+package com.persagy.apm.energy.report.manualfilling.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "能耗分项数据参数")
+public class EnergyItemDataDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "能耗分项id", required = true)
+    private String id;
+
+    @NotNull(message = "value不能为空")
+    @ApiModelProperty(value = "能耗分项数据", required = true)
+    private Double value;
+
+    @NotNull(message = "time不能为空")
+    @ApiModelProperty(value = "时间", required = true)
+    private String time;
+
+}

+ 40 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/model/dto/QueryEnergyItemDataDTO.java

@@ -0,0 +1,40 @@
+package com.persagy.apm.energy.report.manualfilling.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "获取能耗分项数据列表入参")
+public class QueryEnergyItemDataDTO {
+
+    @NotNull(message = "projectId不能为空")
+    @ApiModelProperty(value = "项目id", required = true)
+    private String projectId;
+
+    @ApiModelProperty(value = "集团编码", required = true)
+    private String groupCode;
+
+    @NotNull(message = "energyType不能为空")
+    @ApiModelProperty(value = "能耗类型编码", required = true)
+    private String energyType;
+
+    @NotNull(message = "functionType不能为空")
+    @ApiModelProperty(value = "信息点类型(0-能耗,1-费用 ,2-能耗预算,3-费用预算)", required = true)
+    private String functionType;
+
+    @NotNull(message = "modelCode不能为空")
+    @ApiModelProperty(value = "能耗模型编码", required = true)
+    private String modelCode;
+
+    @NotNull(message = "startDate不能为空")
+    @ApiModelProperty(value = "开始时间", required = true)
+    private String startDate;
+
+    @NotNull(message = "endDate不能为空")
+    @ApiModelProperty(value = "结束时间", required = true)
+    private String endDate;
+
+}

+ 22 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/model/dto/SaveEnergyItemDataDTO.java

@@ -0,0 +1,22 @@
+package com.persagy.apm.energy.report.manualfilling.model.dto;
+
+import com.persagy.apm.energy.report.manualfilling.model.vo.EnergyItemInfoVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@ApiModel(value = "保存能耗分项数据列表入参")
+public class SaveEnergyItemDataDTO {
+    @NotNull(message = "projectId不能为空")
+    @ApiModelProperty(value = "项目id", required = true)
+    private String projectId;
+
+    @NotNull(message = "dataList不能为空")
+    @ApiModelProperty(value = "能耗分项录入数据列表", required = true)
+    private List<EnergyItemInfoVo> dataList;
+
+}

+ 20 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/model/vo/EnergyItemDataVo.java

@@ -0,0 +1,20 @@
+package com.persagy.apm.energy.report.manualfilling.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class EnergyItemDataVo {
+
+    @ApiModelProperty(value = "能耗分项数据id", required = true)
+    private String id;
+
+    @ApiModelProperty(value = "能耗分项数据", required = true)
+    private String value;
+
+    @ApiModelProperty(value = "时间", required = true)
+    private String time;
+
+}

+ 23 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/model/vo/EnergyItemInfoVo.java

@@ -0,0 +1,23 @@
+package com.persagy.apm.energy.report.manualfilling.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel
+public class EnergyItemInfoVo {
+
+    @ApiModelProperty(value = "能耗分项id", required = true)
+    private String itemId;
+
+    @ApiModelProperty(value = "能耗分项信息id", required = true)
+    private String functionId;
+
+    @ApiModelProperty(value = "能据耗分项数", required = true)
+    private List<EnergyItemDataVo> dataList;
+
+
+}

+ 29 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/service/IEnergyItemDataService.java

@@ -0,0 +1,29 @@
+package com.persagy.apm.energy.report.manualfilling.service;
+
+import com.persagy.apm.energy.report.manualfilling.model.dto.QueryEnergyItemDataDTO;
+import com.persagy.apm.energy.report.manualfilling.model.dto.SaveEnergyItemDataDTO;
+import com.persagy.apm.energy.report.manualfilling.model.vo.EnergyItemInfoVo;
+
+import java.util.List;
+
+public interface IEnergyItemDataService {
+
+    /**
+     * 查询能耗分项录入数据
+     *
+     * @param queryEnergyItemDataDTO 查询数据对象
+     * @author wch
+     * @version V1.0 2021/5/24 4:04 下午
+     */
+    List<EnergyItemInfoVo> queryEnergyItemDataList(QueryEnergyItemDataDTO queryEnergyItemDataDTO);
+
+    /**
+     * 保存能耗分项录入数据
+     *
+     * @param saveEnergyItemDataDTO 保存数据对象
+     * @author wch
+     * @version V1.0 2021/5/24 4:04 下午
+     */
+    void saveEnergyItemData(SaveEnergyItemDataDTO saveEnergyItemDataDTO);
+
+}

+ 138 - 0
src/main/java/com/persagy/apm/energy/report/manualfilling/service/impl/IEnergyItemDataServiceImpl.java

@@ -0,0 +1,138 @@
+package com.persagy.apm.energy.report.manualfilling.service.impl;
+
+import com.persagy.apm.energy.report.common.utils.DateUtils;
+import com.persagy.apm.energy.report.manualfilling.model.dto.QueryEnergyItemDataDTO;
+import com.persagy.apm.energy.report.manualfilling.model.dto.SaveEnergyItemDataDTO;
+import com.persagy.apm.energy.report.manualfilling.model.vo.EnergyItemDataVo;
+import com.persagy.apm.energy.report.manualfilling.model.vo.EnergyItemInfoVo;
+import com.persagy.apm.energy.report.manualfilling.service.IEnergyItemDataService;
+import com.persagy.apm.energy.report.monthly.config.function.model.Function;
+import com.persagy.apm.energy.report.monthly.config.function.model.dto.QueryFunctionDTO;
+import com.persagy.apm.energy.report.monthly.config.function.service.IFunctionService;
+import com.persagy.apm.energy.report.monthly.functionvalue.model.FunctionValue;
+import com.persagy.apm.energy.report.monthly.functionvalue.model.dto.AddFunctionValueDTO;
+import com.persagy.apm.energy.report.monthly.functionvalue.model.dto.QueryFunctionValueDTO;
+import com.persagy.apm.energy.report.monthly.functionvalue.model.dto.UpdateFunctionValueDTO;
+import com.persagy.apm.energy.report.monthly.functionvalue.service.IFunctionValueService;
+import com.persagy.apm.energy.report.saasweb.model.vo.ReportProjectVO;
+import com.persagy.apm.energy.report.saasweb.service.ISaasWebService;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class IEnergyItemDataServiceImpl implements IEnergyItemDataService {
+
+    @Autowired
+    private IFunctionService functionService;
+
+    @Autowired
+    private ISaasWebService iSaasWebService;
+
+    @Autowired
+    private IFunctionValueService functionValueService;
+
+    @Value("${group.code}")
+    private String groupCode;
+
+    @Override
+    public List<EnergyItemInfoVo> queryEnergyItemDataList(QueryEnergyItemDataDTO queryEnergyItemDataDTO) {
+        try {
+            ReportProjectVO projectVO = iSaasWebService.getReportProjectInfo(queryEnergyItemDataDTO.getProjectId());
+            if (null == projectVO || StringUtils.isEmpty(projectVO.getFunctionType())) {
+                return new ArrayList<>();
+            }
+            QueryFunctionDTO queryFunctionDTO = new QueryFunctionDTO();
+            queryFunctionDTO.setGroupCode(groupCode);
+            if (!StringUtils.isEmpty(queryEnergyItemDataDTO.getGroupCode())) {
+                queryFunctionDTO.setGroupCode(queryEnergyItemDataDTO.getGroupCode());
+            }
+            queryFunctionDTO.setEnergyType(queryEnergyItemDataDTO.getEnergyType());
+            queryFunctionDTO.setFunctionType(queryEnergyItemDataDTO.getFunctionType());
+            queryFunctionDTO.setBuildingType(projectVO.getFunctionType());
+            queryFunctionDTO.setModelCode(queryEnergyItemDataDTO.getModelCode());
+            // 查询配置的分项信息列表
+            List<Function> functionList = functionService.queryFunctionList(queryFunctionDTO);
+            if (CollectionUtils.isEmpty(functionList)) {
+                return new ArrayList<>();
+            }
+            // 配置信息点id列表
+            List<String> functionIdList = new ArrayList<>();
+            for (Function function : functionList) {
+                functionIdList.add(function.getItemId());
+            }
+            QueryFunctionValueDTO queryFunctionValueDTO = new QueryFunctionValueDTO();
+            queryFunctionValueDTO.setProjectId(queryEnergyItemDataDTO.getProjectId());
+            queryFunctionValueDTO.setFunctionIdList(functionIdList);
+            queryFunctionValueDTO.setStartTime(DateUtils.str2Date(queryEnergyItemDataDTO.getStartDate(), DateUtils.SDF_SECOND));
+            queryFunctionValueDTO.setEndTime(DateUtils.str2Date(queryEnergyItemDataDTO.getEndDate(), DateUtils.SDF_SECOND));
+            // 查询配置分项某时间段内的数据
+            List<FunctionValue> functionValueList = functionValueService.queryFunctionValueList(queryFunctionValueDTO);
+            // {信息点id:{数据时间:数据}}
+            Map<String, List<EnergyItemDataVo>> funcId_dateAndDataMap = new HashMap<>();
+            if (CollectionUtils.isNotEmpty(functionValueList)) {
+                for (FunctionValue functionValue : functionValueList) {
+                    List<EnergyItemDataVo> energyItemDataVoList = funcId_dateAndDataMap.get(functionValue.getFunctionId());
+                    if (null == energyItemDataVoList) {
+                        energyItemDataVoList = new ArrayList<>();
+                    }
+                    EnergyItemDataVo energyItemDataVo = new EnergyItemDataVo();
+                    energyItemDataVo.setId(functionValue.getId());
+                    energyItemDataVo.setTime(DateUtils.date2Str(functionValue.getDataTime(), DateUtils.SDF_SECOND));
+                    energyItemDataVo.setValue(functionValue.getValue());
+                    energyItemDataVoList.add(energyItemDataVo);
+                    funcId_dateAndDataMap.put(functionValue.getFunctionId(), energyItemDataVoList);
+                }
+            }
+            List<EnergyItemInfoVo> resultList = new ArrayList<>();
+            for (Function function : functionList) {
+                EnergyItemInfoVo energyItemInfoVo = new EnergyItemInfoVo();
+                energyItemInfoVo.setItemId(function.getItemId());
+                energyItemInfoVo.setFunctionId(function.getId());
+                energyItemInfoVo.setDataList(funcId_dateAndDataMap.get(function.getId()) == null ? new ArrayList<>() : funcId_dateAndDataMap.get(function.getId()));
+                resultList.add(energyItemInfoVo);
+            }
+            return resultList;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public void saveEnergyItemData(SaveEnergyItemDataDTO saveEnergyItemDataDTO) {
+        try {
+            List<EnergyItemInfoVo> energyItemInfoVoList = saveEnergyItemDataDTO.getDataList();
+            for (EnergyItemInfoVo energyItemInfoVo : energyItemInfoVoList) {
+                List<EnergyItemDataVo> energyItemDataVos = energyItemInfoVo.getDataList();
+                for (EnergyItemDataVo energyItemDataVo : energyItemDataVos) {
+                    if (StringUtils.isEmpty(energyItemDataVo.getId())) {
+                        AddFunctionValueDTO addFunctionValueDTO = new AddFunctionValueDTO();
+                        addFunctionValueDTO.setProjectId(saveEnergyItemDataDTO.getProjectId());
+                        addFunctionValueDTO.setFunctionId(energyItemInfoVo.getFunctionId());
+                        addFunctionValueDTO.setDataTime(DateUtils.str2Date(energyItemDataVo.getTime(), DateUtils.SDF_SECOND));
+                        addFunctionValueDTO.setValue(energyItemDataVo.getValue());
+                        functionValueService.createFunctionValue(addFunctionValueDTO);
+                    } else {
+                        UpdateFunctionValueDTO updateFunctionValueDTO = new UpdateFunctionValueDTO();
+                        updateFunctionValueDTO.setId(energyItemDataVo.getId());
+                        updateFunctionValueDTO.setProjectId(saveEnergyItemDataDTO.getProjectId());
+                        updateFunctionValueDTO.setFunctionId(energyItemInfoVo.getFunctionId());
+                        updateFunctionValueDTO.setDataTime(DateUtils.str2Date(energyItemDataVo.getTime(), DateUtils.SDF_SECOND));
+                        updateFunctionValueDTO.setValue(energyItemDataVo.getValue());
+                        functionValueService.updateFunctionValue(updateFunctionValueDTO);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 9 - 0
src/main/java/com/persagy/apm/energy/report/monthly/functionvalue/model/dto/QueryFunctionValueDTO.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author lixing
@@ -25,4 +26,12 @@ public class QueryFunctionValueDTO {
     @ApiModelProperty(value = "信息点的值", required = true)
     private String value;
 
+    @ApiModelProperty(value = "信息点id列表", required = true)
+    private List<String> functionIdList;
+
+    @ApiModelProperty(value = "查询数据开始时间", required = true)
+    private Date startTime;
+
+    @ApiModelProperty(value = "查询数据结束时间", required = true)
+    private Date endTime;
 }

+ 12 - 0
src/main/java/com/persagy/apm/energy/report/monthly/functionvalue/service/impl/FunctionValueServiceImpl.java

@@ -162,6 +162,18 @@ public class FunctionValueServiceImpl extends ServiceImpl<FunctionValueMapper, F
                 queryWrapper.like(FunctionValue.PROP_VALUE, queryFunctionValueDTO.getValue());
             }
 
+            if(!CollectionUtils.isEmpty(queryFunctionValueDTO.getFunctionIdList())){
+                queryWrapper.in(FunctionValue.PROP_FUNCTION_ID, queryFunctionValueDTO.getFunctionIdList());
+            }
+
+            if(queryFunctionValueDTO.getStartTime() != null){
+                queryWrapper.ge(FunctionValue.PROP_DATA_TIME, queryFunctionValueDTO.getStartTime());
+            }
+
+            if(queryFunctionValueDTO.getEndTime() != null){
+                queryWrapper.lt(FunctionValue.PROP_DATA_TIME, queryFunctionValueDTO.getEndTime());
+            }
+
         }
 
         return list(queryWrapper);

+ 2 - 0
src/main/java/com/persagy/apm/energy/report/saasweb/model/vo/SimpleProjectVO.java

@@ -15,4 +15,6 @@ public class SimpleProjectVO {
     private String projectId;
     @ApiModelProperty(value = "项目名称")
     private String projectName;
+    @ApiModelProperty(value = "项目功能类型")
+    private String functionType;
 }

+ 1 - 0
src/main/java/com/persagy/apm/energy/report/saasweb/service/impl/SaasWebServiceImpl.java

@@ -43,6 +43,7 @@ public class SaasWebServiceImpl implements ISaasWebService {
             SimpleProjectVO simpleProjectVO = projectInfos.get(0);
             reportProjectVO.setProjectId(projectId);
             reportProjectVO.setProjectName(simpleProjectVO.getProjectName());
+            reportProjectVO.setFunctionType(simpleProjectVO.getFunctionType());
         }
 
         // 获取项目下建筑的面积总和

+ 1 - 2
src/main/java/com/persagy/apm/energy/report/workorder/client/WorkOrderWebClient.java

@@ -5,7 +5,6 @@ import com.persagy.apm.energy.report.common.FeignClientNameConstants;
 import com.persagy.apm.energy.report.common.FeignConfig;
 import com.persagy.apm.energy.report.workorder.client.fallback.WorkOrderWebClientFallbackFactory;
 import com.persagy.apm.energy.report.workorder.model.dto.QueryWorkOrderListByParamDTO;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 
@@ -24,6 +23,6 @@ public interface WorkOrderWebClient {
      * @version V1.0 2021/5/19 2:27 下午
      */
     @PostMapping("/restWorkOrderService/queryWorkOrderList")
-    PoemsFeignResponse<T> listWorkOrderByParam(QueryWorkOrderListByParamDTO queryWorkOrderListByParamDTO);
+    PoemsFeignResponse<Object> listWorkOrderByParam(QueryWorkOrderListByParamDTO queryWorkOrderListByParamDTO);
 
 }

+ 1 - 3
src/main/java/com/persagy/apm/energy/report/workorder/service/impl/IWorkOrderWebServiceImpl.java

@@ -10,8 +10,6 @@ import com.persagy.apm.energy.report.monthly.detail.business.model.Platform;
 import com.persagy.apm.energy.report.workorder.client.WorkOrderWebClient;
 import com.persagy.apm.energy.report.workorder.model.dto.QueryWorkOrderListByParamDTO;
 import com.persagy.apm.energy.report.workorder.service.IWorkOrderWebService;
-import org.apache.poi.ss.formula.functions.T;
-import org.nfunk.jep.JEP;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -52,7 +50,7 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
             paramDTO.setTimeType("ask_end_time");
             paramDTO.setStart_time(DateUtils.date2Str(reportDate, DateUtils.SDFSECOND));
             paramDTO.setEnd_time(DateUtils.date2Str(DateUtils.getMonthOff(reportDate, 1), DateUtils.SDFSECOND));
-            PoemsFeignResponse<T> response = workOrderWebClient.listWorkOrderByParam(paramDTO);
+            PoemsFeignResponse<Object> response = workOrderWebClient.listWorkOrderByParam(paramDTO);
             Integer dealCount = response.getCount();
             paramDTO.setTimeType("create_time");
             response = workOrderWebClient.listWorkOrderByParam(paramDTO);