Parcourir la source

新增 获取水肥机灌溉记录列表接口

zhaiyifei il y a 8 mois
Parent
commit
6011fdbd14

+ 113 - 4
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/RunHaoSfDeviceImpl.java

@@ -11,6 +11,9 @@ import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotRunHaoSfdata;
 import com.yunfeiyun.agmp.iot.common.domain.IotSfElementfactor;
+import com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord;
+import com.yunfeiyun.agmp.iot.common.enums.EnumIrrigationRecord;
+import com.yunfeiyun.agmp.iot.common.enums.EnumSfElementType;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdModel;
 import com.yunfeiyun.agmp.iot.common.util.dev.RunHaoSfElementUtil;
 import com.yunfeiyun.agmp.iots.core.manager.MqttManager;
@@ -18,6 +21,7 @@ import com.yunfeiyun.agmp.iots.device.common.DeviceAbstractImpl;
 import com.yunfeiyun.agmp.iots.device.service.IRunHaoSfDevice;
 import com.yunfeiyun.agmp.iots.domain.IotSfElementfactorAlreadyListResVo;
 import com.yunfeiyun.agmp.iots.domain.IotSfElementfactorListReqVo;
+import com.yunfeiyun.agmp.iots.domain.IotSfIrrigationRecordListReqVo;
 import com.yunfeiyun.agmp.iots.service.*;
 import com.yunfeiyun.agmp.iots.service.impl.IotDeviceAddressService;
 import lombok.extern.slf4j.Slf4j;
@@ -26,10 +30,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /** 润浩水肥机 */
 @Component(ServiceNameConst.SERVICE_RUNHAO_SF)
@@ -59,6 +60,9 @@ public class RunHaoSfDeviceImpl extends DeviceAbstractImpl implements IRunHaoSfD
     @Autowired
     private IIotSfElementfactorService iIotSfElementfactorService;
 
+    @Autowired
+    private IIotSfIrrigationRecordService iIotSfIrrigationRecordService;
+
 
     private void publish(IotDevice iotDevice, String mqttMsgContent) {
         String devCode = iotDevice.getDevCode();
@@ -320,6 +324,105 @@ public class RunHaoSfDeviceImpl extends DeviceAbstractImpl implements IRunHaoSfD
         }
     }
 
+    public void syncIrrigationRecord(IotDevice iotDevice, JSONObject jsonObject){
+        String runMode = "Btn-zdsd";
+        String runStatus = "Btn-yjqd";
+
+        String zdsd = jsonObject.getString(runMode);
+        String yjqd = jsonObject.getString(runStatus);
+
+        // 如果进行中,则检测是否有未完成的灌溉记录,如果有,则不处理,如果没有,则创建新的灌溉记录
+        if("1".equals(yjqd)){
+            // 暂不处理
+            return;
+        }
+        IotSfElementfactorListReqVo reqVo = new IotSfElementfactorListReqVo();
+        reqVo.setDevBid(iotDevice.getDevBid());
+        reqVo.setTid(iotDevice.getTid());
+        reqVo.setSfType(EnumSfElementType.SUCTION.getCode());
+        List<IotSfElementfactor> elementfactorList = iIotSfElementfactorService.selectIotSfElementfactorList(reqVo);
+        if(elementfactorList.isEmpty()){
+            return;
+        }
+
+        Map<IotSfElementfactor, Double> llMap = new HashMap<>();
+
+        for(IotSfElementfactor elementFactor: elementfactorList) {
+            String sfCode = elementFactor.getSfCode();
+            String key = sfCode.replace("Btn-fs", "Num-ls");
+            String v = jsonObject.getString(key);
+            Double ll = 0.0;
+            try{
+                ll = Double.parseDouble(v);
+            }catch (Exception e){}
+            llMap.put(elementFactor, ll);
+        }
+
+        IotSfIrrigationRecordListReqVo reqVo1 = new IotSfIrrigationRecordListReqVo();
+        reqVo1.setDevBid(iotDevice.getDevBid());
+        reqVo1.setTid(iotDevice.getTid());
+        reqVo1.setRcdMode(zdsd);
+        reqVo1.setRcdStatus(EnumIrrigationRecord.STATUS_RUNNING.getCode());
+
+        List<IotSfIrrigationRecord> recordList = iIotSfIrrigationRecordService.selectIrrigationRecordList(reqVo1);
+        if(recordList.isEmpty()){
+            return;
+        }
+        Set<String> sfdataBidSet = new HashSet<>();
+        for(IotSfIrrigationRecord record: recordList){
+            sfdataBidSet.add(record.getSfdataBid());
+        }
+        List<IotRunHaoSfdata> iotRunHaoSfdataList = iIotRunHaoSfdataService.selectDataList(new ArrayList<>(sfdataBidSet));
+        if(iotRunHaoSfdataList.isEmpty()){
+            return;
+        }
+        Map<String, IotRunHaoSfdata> iotRunHaoSfdataMap = new HashMap<>();
+        for(IotRunHaoSfdata iotRunHaoSfdata: iotRunHaoSfdataList){
+            iotRunHaoSfdataMap.put(iotRunHaoSfdata.getSfdataBid(), iotRunHaoSfdata);
+        }
+        String endDate = DateUtils.dateTimeNow();
+        for(IotSfIrrigationRecord record: recordList){
+            IotRunHaoSfdata iotRunHaoSfdata = iotRunHaoSfdataMap.get(record.getSfdataBid());
+            JSONObject sfdataContent = iotRunHaoSfdata.getSfdataContent();
+            double totalLL = 0.0;
+            for(Map.Entry<IotSfElementfactor, Double> entry: llMap.entrySet()) {
+                IotSfElementfactor elementFactor = entry.getKey();
+                String sfCode = elementFactor.getSfCode();
+                String key = sfCode.replace("Btn-fs", "Num-ls");
+
+                Double oldLL = entry.getValue();
+                double newLL = 0.0;
+                try{
+                    newLL = Double.parseDouble(sfdataContent.getString(key));
+                }catch (Exception e){}
+
+                double diffLL = newLL - oldLL;
+                if(diffLL < 0){
+                    diffLL = 0.0;
+                }
+                llMap.put(elementFactor, diffLL);
+                totalLL += diffLL;
+            }
+            StringBuilder rcdContent = new StringBuilder(record.getRcdContent());
+            rcdContent = new StringBuilder(rcdContent.toString().replace(EnumIrrigationRecord.STATUS_RUNNING.getName(), " 灌溉完成d. "));
+
+            for(Map.Entry<IotSfElementfactor, Double> entry: llMap.entrySet()) {
+                IotSfElementfactor elementFactor = entry.getKey();
+                String sfDisplayname = elementFactor.getSfDisplayname();
+                Double diffLL = entry.getValue();
+                String msg = sfDisplayname + "用量:" + diffLL + "L  ";
+                rcdContent.append(msg);
+            }
+
+            record.setRcdContent(rcdContent.toString());
+            record.setRcdStatus(EnumIrrigationRecord.STATUS_FINISHED.getCode());
+            record.setRcdFlow(totalLL);
+            record.setRcdEnddate(endDate);
+        }
+        iIotSfIrrigationRecordService.batchUpdateIrrigationRecord(recordList);
+    }
+
+
     public Object cmdData(JSONObject dataJson, String topic, String connectionId, String devUpdateddate) throws Exception {
         log.info("润浩水肥 数据解析 {},topic:{}", dataJson.toString(),topic);
 
@@ -392,6 +495,12 @@ public class RunHaoSfDeviceImpl extends DeviceAbstractImpl implements IRunHaoSfD
         }catch (Exception e){
             log.error("润浩水肥机 同步灌区配置失败", e);
         }
+        try{
+            // 同步灌溉记录
+            syncIrrigationRecord(oldIotDevice, dataJson);
+        }catch (Exception e){
+            log.error("润浩水肥机 同步灌溉记录失败", e);
+        }
         return null;
     }
 

+ 35 - 0
src/main/java/com/yunfeiyun/agmp/iots/domain/IotSfIrrigationRecordListReqVo.java

@@ -0,0 +1,35 @@
+package com.yunfeiyun.agmp.iots.domain;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;
+import lombok.Data;
+
+@Data
+public class IotSfIrrigationRecordListReqVo extends IotBaseEntity {
+
+    // 设备标识
+    private String devBid;
+
+    // 灌区标识
+    private String rcdGroupbid;
+
+    // 灌区名称
+    private String rcdGroupName;
+
+    // 灌溉状态 0 进行中 1 已完成
+    private String rcdStatus;
+
+    // 灌溉模式 0 手动 1 自动
+    private String rcdMode;
+
+    // 灌溉数据标识
+    private String sfdataBid;
+
+    // 开始时间
+    private String startTime;
+
+    // 结束时间
+    private String endTime;
+
+    private String tid;
+
+}

+ 27 - 0
src/main/java/com/yunfeiyun/agmp/iots/mapper/IotSfIrrigationRecordMapper.java

@@ -0,0 +1,27 @@
+package com.yunfeiyun.agmp.iots.mapper;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord;
+import com.yunfeiyun.agmp.iots.domain.IotSfIrrigationRecordListReqVo;
+
+import java.util.List;
+
+public interface IotSfIrrigationRecordMapper {
+    // 添加灌溉记录
+    public int insertIrrigationRecord(IotSfIrrigationRecord record);
+
+    public int batchInsertIotSfIrrigationRecord(List<IotSfIrrigationRecord> recordList);
+
+    // 根据唯一标识查询灌溉记录
+    public IotSfIrrigationRecord selectIrrigationRecordByBid(String rcdBid);
+
+    // 更新灌溉记录
+    public int updateIrrigationRecord(IotSfIrrigationRecord record);
+
+//    // 删除灌溉记录
+//    public void deleteIrrigationRecord(String rcdBid);
+
+    // 查询所有灌溉记录
+    public List<IotSfIrrigationRecord> selectIrrigationRecordList(IotSfIrrigationRecordListReqVo record);
+
+    public int batchUpdateIrrigationRecord(List<IotSfIrrigationRecord> recordList);
+}

+ 4 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/IIotRunHaoSfdataService.java

@@ -4,8 +4,12 @@ import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotRunHaoSfdata;
 
+import java.util.List;
+
 public interface IIotRunHaoSfdataService {
     public void insertData(IotDevice iotDevice, JSONObject jsonObject);
 
     public IotRunHaoSfdata selectData(String devBid);
+
+    public List<IotRunHaoSfdata> selectDataList(List<String> sfdataBidList);
 }

+ 28 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/IIotSfIrrigationRecordService.java

@@ -0,0 +1,28 @@
+package com.yunfeiyun.agmp.iots.service;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord;
+import com.yunfeiyun.agmp.iots.domain.IotSfIrrigationRecordListReqVo;
+
+import java.util.List;
+
+public interface IIotSfIrrigationRecordService {
+    // 添加灌溉记录
+    public int insertIrrigationRecord(IotSfIrrigationRecord record);
+
+    public int batchInsertIotSfIrrigationRecord(List<IotSfIrrigationRecord> recordList);
+
+    // 根据唯一标识查询灌溉记录
+    public IotSfIrrigationRecord selectIrrigationRecordByBid(String rcdBid);
+
+    // 更新灌溉记录
+    public int updateIrrigationRecord(IotSfIrrigationRecord record);
+
+    // 更新灌溉记录
+    public int batchUpdateIrrigationRecord(List<IotSfIrrigationRecord> recordList);
+
+    // 删除灌溉记录
+    public void deleteIrrigationRecord(String rcdBid);
+
+    // 查询所有灌溉记录
+    public List<IotSfIrrigationRecord> selectIrrigationRecordList(IotSfIrrigationRecordListReqVo record);
+}

+ 8 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/impl/IotRunHaoSfdataServiceImpl.java

@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Service
@@ -36,4 +37,11 @@ public class IotRunHaoSfdataServiceImpl implements IIotRunHaoSfdataService {
         params.put("devBid", devBid);
         return (IotRunHaoSfdata) mongoService.findOne(IotRunHaoSfdata.class, params, "sfdataCreatedDate", "desc");
     }
+
+    @Override
+    public List<IotRunHaoSfdata> selectDataList(List<String> sfdataBidList) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("newList_sfdataBid", sfdataBidList);
+        return mongoService.findAll(IotRunHaoSfdata.class, params);
+    }
 }

+ 52 - 0
src/main/java/com/yunfeiyun/agmp/iots/service/impl/IotSfIrrigationRecordServiceImpl.java

@@ -0,0 +1,52 @@
+package com.yunfeiyun.agmp.iots.service.impl;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord;
+import com.yunfeiyun.agmp.iots.domain.IotSfIrrigationRecordListReqVo;
+import com.yunfeiyun.agmp.iots.mapper.IotSfIrrigationRecordMapper;
+import com.yunfeiyun.agmp.iots.service.IIotSfIrrigationRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class IotSfIrrigationRecordServiceImpl implements IIotSfIrrigationRecordService {
+
+    @Autowired
+    private IotSfIrrigationRecordMapper irrigationRecordMapper;
+
+    @Override
+    public int insertIrrigationRecord(IotSfIrrigationRecord record) {
+        return irrigationRecordMapper.insertIrrigationRecord(record);
+    }
+
+    @Override
+    public int batchInsertIotSfIrrigationRecord(List<IotSfIrrigationRecord> recordList) {
+        return irrigationRecordMapper.batchInsertIotSfIrrigationRecord(recordList);
+    }
+
+    @Override
+    public IotSfIrrigationRecord selectIrrigationRecordByBid(String rcdBid) {
+        return irrigationRecordMapper.selectIrrigationRecordByBid(rcdBid);
+    }
+
+    @Override
+    public int updateIrrigationRecord(IotSfIrrigationRecord record) {
+        return irrigationRecordMapper.updateIrrigationRecord(record);
+    }
+
+    @Override
+    public int batchUpdateIrrigationRecord(List<IotSfIrrigationRecord> recordList) {
+        return irrigationRecordMapper.batchUpdateIrrigationRecord(recordList);
+    }
+
+    @Override
+    public void deleteIrrigationRecord(String rcdBid) {
+        return;
+    }
+
+    @Override
+    public List<IotSfIrrigationRecord> selectIrrigationRecordList(IotSfIrrigationRecordListReqVo record) {
+        return irrigationRecordMapper.selectIrrigationRecordList(record);
+    }
+}

+ 133 - 0
src/main/resources/mapper/IotSfIrrigationRecordMapper.xml

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yunfeiyun.agmp.iots.mapper.IotSfIrrigationRecordMapper">
+
+    <insert id="insertIrrigationRecord" parameterType="com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord">
+        INSERT INTO IotSfIrrigationRecord
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <if test="rcdBid != null">rcdBid,</if>
+                <if test="devBid != null">devBid,</if>
+                <if test="rcdContent != null">rcdContent,</if>
+                <if test="rcdGroupbid != null">rcdGroupbid,</if>
+                <if test="rcdGroupName!= null">rcdGroupName,</if>
+                <if test="rcdStatus!= null">rcdStatus,</if>
+                <if test="rcdMode!= null">rcdMode,</if>
+                <if test="sfdataBid!= null">sfdataBid,</if>
+                <if test="rcdFlow!= null">rcdFlow,</if>
+                <if test="rcdCreator!= null">rcdCreator,</if>
+                <if test="rcdStartdate!= null">rcdStartdate,</if>
+                <if test="rcdEnddate!= null">rcdEnddate,</if>
+                <if test="rcdCreatorName!= null">rcdCreatorName,</if>
+                <if test="rcdCreateddate!= null">rcdCreateddate,</if>
+                <if test="tid!= null">tid,</if>
+            </trim>
+            <trim prefix="values (" suffix=")" suffixOverrides=",">
+                <if test="rcdBid!= null">#{rcdBid},</if>
+                <if test="devBid!= null">#{devBid},</if>
+                <if test="rcdContent!= null">#{rcdContent},</if>
+                <if test="rcdGroupbid!= null">#{rcdGroupbid},</if>
+                <if test="rcdGroupName!= null">#{rcdGroupName},</if>
+                <if test="rcdStatus!= null">#{rcdStatus},</if>
+                <if test="rcdMode!= null">#{rcdMode},</if>
+                <if test="sfdataBid!= null">#{sfdataBid},</if>
+                <if test="rcdFlow!= null">#{rcdFlow},</if>
+                <if test="rcdCreator!= null">#{rcdCreator},</if>
+                <if test="rcdStartdate!= null">#{rcdStartdate},</if>
+                <if test="rcdEnddate!= null">#{rcdEnddate},</if>
+                <if test="rcdCreatorName!= null">#{rcdCreatorName},</if>
+                <if test="rcdCreateddate!= null">#{rcdCreateddate},</if>
+                <if test="tid!= null">#{tid},</if>
+            </trim>
+    </insert>
+    <insert id="batchInsertIotSfIrrigationRecord">
+        <foreach collection="list" item="item" separator=";">
+            INSERT INTO IotSfIrrigationRecord
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <if test="item.rcdBid!= null">rcdBid,</if>
+                <if test="item.devBid!= null">devBid,</if>
+                <if test="item.rcdContent!= null">rcdContent,</if>
+                <if test="item.rcdGroupbid!= null">rcdGroupbid,</if>
+                <if test="item.rcdGroupName!= null">rcdGroupName,</if>
+                <if test="item.rcdStatus!= null">rcdStatus,</if>
+                <if test="item.rcdMode!= null">rcdMode,</if>
+                <if test="item.sfdataBid!= null">sfdataBid,</if>
+                <if test="item.rcdFlow!= null">rcdFlow,</if>
+                <if test="item.rcdCreator!= null">rcdCreator,</if>
+                <if test="item.rcdStartdate!= null">rcdStartdate,</if>
+                <if test="item.rcdEnddate!= null">rcdEnddate,</if>
+                <if test="item.rcdCreatorName!= null">rcdCreatorName,</if>
+                <if test="item.rcdCreateddate!= null">rcdCreateddate,</if>
+                <if test="item.tid!= null">tid,</if>
+            </trim>
+            <trim prefix="values (" suffix=")" suffixOverrides=",">
+                <if test="item.rcdBid!= null">#{item.rcdBid},</if>
+                <if test="item.devBid!= null">#{item.devBid},</if>
+                <if test="item.rcdContent!= null">#{item.rcdContent},</if>
+                <if test="item.rcdGroupbid!= null">#{item.rcdGroupbid},</if>
+                <if test="item.rcdGroupName!= null">#{item.rcdGroupName},</if>
+                <if test="item.rcdStatus!= null">#{item.rcdStatus},</if>
+                <if test="item.rcdMode!= null">#{item.rcdMode},</if>
+                <if test="item.sfdataBid!= null">#{item.sfdataBid},</if>
+                <if test="item.rcdFlow!= null">#{item.rcdFlow},</if>
+                <if test="item.rcdCreator!= null">#{item.rcdCreator},</if>
+                <if test="item.rcdStartdate!= null">#{item.rcdStartdate},</if>
+                <if test="item.rcdEnddate!= null">#{item.rcdEnddate},</if>
+                <if test="item.rcdCreatorName!= null">#{item.rcdCreatorName},</if>
+                <if test="item.rcdCreateddate!= null">#{item.rcdCreateddate},</if>
+                <if test="item.tid!= null">#{item.tid},</if>
+            </trim>
+        </foreach>
+    </insert>
+
+    <update id="updateIrrigationRecord" parameterType="com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord">
+        UPDATE IotSfIrrigationRecord
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="rcdContent!= null">rcdContent = #{rcdContent},</if>
+            <if test="rcdStatus!= null">rcdStatus = #{rcdStatus},</if>
+            <if test="rcdFlow!= null">rcdFlow = #{rcdFlow},</if>
+            <if test="rcdEnddate!= null">rcdEnddate = #{rcdEnddate},</if>
+        </trim>
+        where rcdBid = #{rcdBid} and tid = #{tid}
+    </update>
+
+    <update id="batchUpdateIrrigationRecord" parameterType="IotSfIrrigationRecord">
+        <foreach collection="list" item="item" separator=";">
+            UPDATE IotSfIrrigationRecord
+            <trim prefix="SET" suffixOverrides=",">
+                <if test="item.rcdContent!= null">rcdContent = #{item.rcdContent},</if>
+                <if test="item.rcdStatus!= null">rcdStatus = #{item.rcdStatus},</if>
+                <if test="item.rcdFlow!= null">rcdFlow = #{item.rcdFlow},</if>
+                <if test="item.rcdEnddate!= null">rcdEnddate = #{item.rcdEnddate},</if>
+            </trim>
+            where rcdBid = #{item.rcdBid} and tid = #{item.tid}
+        </foreach>
+    </update>
+
+    <select id="selectIrrigationRecordByBid" parameterType="com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord"
+            resultType="com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord">
+        SELECT rcdBid, devBid, rcdContent, rcdGroupbid, rcdGroupName, rcdStatus, rcdMode, sfdataBid, rcdFlow, rcdCreator,
+            rcdStartdate, rcdEnddate, rcdCreatorName, rcdCreateddate, tid
+        FROM IotSfIrrigationRecord
+        where rcdBid = #{rcdBid}
+    </select>
+
+    <select id="selectIrrigationRecordList" parameterType="IotSfIrrigationRecordListReqVo"
+            resultType="com.yunfeiyun.agmp.iot.common.domain.IotSfIrrigationRecord">
+        SELECT rcdBid, devBid, rcdContent, rcdGroupbid, rcdGroupName, rcdStatus, rcdMode, sfdataBid, rcdFlow, rcdCreator,
+            rcdStartdate, rcdEnddate, rcdCreatorName, rcdCreateddate, tid
+        FROM IotSfIrrigationRecord
+        <where>
+            tid = #{tid}
+            <if test="devBid!= null and devBid!= ''"> and devBid = #{devBid}</if>
+            <if test="rcdGroupbid!= null and rcdGroupbid!= ''"> and rcdGroupbid = #{rcdGroupbid}</if>
+            <if test="rcdGroupName!= null and rcdGroupName!= ''"> and rcdGroupName = #{rcdGroupName}</if>
+            <if test="rcdStatus!= null and rcdStatus!= ''"> and rcdStatus = #{rcdStatus}</if>
+            <if test="rcdMode!= null and rcdMode!= ''"> and rcdMode = #{rcdMode}</if>
+            <if test="startTime!= null and startTime!= ''"> and rcdStartdate <![CDATA[ >= ]]> #{startTime}</if>
+            <if test="endTime!= null and endTime!= ''"> and rcdStartdate <![CDATA[ <= ]]> #{endTime}</if>
+        </where>
+        order by rcdCreateddate desc
+    </select>
+</mapper>