Jelajahi Sumber

任务管理:水量同步两个任务增加换表处理和首次同步时使用安装列表的中的水表初始读数

zhoujiangyuan 4 tahun lalu
induk
melakukan
8f6aab1753

+ 4 - 7
smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/AmountWaterUsedAmountMapper.java

@@ -68,14 +68,11 @@ public interface AmountWaterUsedAmountMapper {
 
     List<PayBaseCustomerandmeterrela> getCustIdAndSiteId();
 
-    @MapKey("deviceId")
-    HashMap<BigInteger, ReplaceMeterDto> getRepalceRecord(@Param("list")List<BigInteger> list);
-
-    //换表明细
-    List<ReplaceMeterDto> getRepalceRecordDetail(@Param("stTime")LocalDateTime stTime,@Param("etTime")LocalDateTime etTime,@Param("list")List<BigInteger> list);
+    //换表明细 list:设备ID
+    List<ReplaceMeterDto> getRepalceRecordDetail(@Param("stTime")LocalDateTime stTime,@Param("etTime")LocalDateTime etTime,@Param("list")List<BigInteger> list,@Param("siteId")Integer siteId,@Param("customerId")Integer customerId);
 
-    //换表统计
+    //换表统计 list:设备ID
     @MapKey("deviceId")
-    HashMap<BigInteger, ReplaceMeterCountDto> getRepalceRecordCount(@Param("stTime")LocalDateTime stTime, @Param("etTime")LocalDateTime etTime, @Param("list")List<BigInteger> list);
+    HashMap<BigInteger, ReplaceMeterCountDto> getRepalceRecordCount(@Param("stTime")LocalDateTime stTime, @Param("etTime")LocalDateTime etTime, @Param("list")List<BigInteger> list,@Param("siteId")Integer siteId,@Param("customerId")Integer customerId);
 
 }

+ 39 - 38
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/AmountSynByDayServiceImpl.java

@@ -141,9 +141,9 @@ public class AmountSynByDayServiceImpl implements AmountSynByDayService, Initial
                 //查询换表信息(上一帐期结束时间至当前时间所有换表)
                 //HashMap<BigInteger, ReplaceMeterDto> childReplaceMap =amountWaterUsedAmountMapper.getRepalceRecord(bigIntegers);
                 //replaceMap.putAll(childReplaceMap);
-                HashMap<BigInteger, ReplaceMeterCountDto> childReplaceMap = amountWaterUsedAmountMapper.getRepalceRecordCount(stTime,null,bigIntegers);
+                HashMap<BigInteger, ReplaceMeterCountDto> childReplaceMap = amountWaterUsedAmountMapper.getRepalceRecordCount(stTime,null,bigIntegers,null,null);
                 if(childReplaceMap.size() >0){
-                    List<ReplaceMeterDto> replaceMeterDtoList = amountWaterUsedAmountMapper.getRepalceRecordDetail(stTime,null,bigIntegers);
+                    List<ReplaceMeterDto> replaceMeterDtoList = amountWaterUsedAmountMapper.getRepalceRecordDetail(stTime,null,bigIntegers,null,null);
                     if(replaceMeterDtoList.size() >0){
                         for(int i=0;i<replaceMeterDtoList.size();i++){
                             if(childReplaceMap.containsKey(replaceMeterDtoList.get(i).getDeviceId())){
@@ -180,52 +180,53 @@ public class AmountSynByDayServiceImpl implements AmountSynByDayService, Initial
                             Date readDate = meterReadRecord.getReadTime() != null ? meterReadRecord.getReadTime() : new Date();
                             Integer calculateway = amountWaterUsedAmountDto.getCalculateway();
 
-                            //取换表记录
+                            //换表记录计算
+                            boolean replace = false;
                             ReplaceMeterCountDto replaceMeterCountDto=null;
                             if(replaceMap.containsKey(watermeterId)){
                                 replaceMeterCountDto = replaceMap.get(watermeterId);
-                            }
+                                //有换表记录且换表时间在两次同步之间 用水量=(换表中的旧表止度-上次抄表止度) + (本次止度-换表中的新表起度)
+                                if(replaceMeterCountDto != null){
+                                    LocalDateTime currTime = LocalDateTime.ofInstant(readDate.toInstant(),ZoneId.systemDefault()); //本次抄表时间
+                                    LocalDateTime previousTime = LocalDateTime.ofInstant(amountWaterUsedAmountDto.getLastrecorddate().toInstant(),ZoneId.systemDefault()); //上个帐期的结算抄表时间
+
+                                    ReplaceMeterDto oldReplaceMeterDto = null;
+                                    for(int i = 0;i<replaceMeterCountDto.getReplaceMeterDtoList().size();i++){
+                                        LocalDateTime replaceTime = replaceMeterCountDto.getReplaceMeterDtoList().get(i).getReplaceTime();   //换表时间
+
+                                        Duration duration1 = Duration.between(previousTime,replaceTime);
+                                        Duration duration2 = Duration.between(replaceTime,currTime);
+                                        if(duration1.toMillis() > 0  && duration2.toMinutes() > 0){
+                                            BigDecimal replaceEndData = new BigDecimal(replaceMeterCountDto.getReplaceMeterDtoList().get(i).getOldEnd()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的旧表止度
+                                            BigDecimal replaceData = BigDecimal.ZERO;
+                                            if(oldReplaceMeterDto == null)
+                                                replaceData = tempReading;
+                                            else
+                                                replaceData = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的起度
+                                            BigDecimal oldMeterUse = replaceEndData.subtract(replaceData); //旧表用量
+
+                                            Amount = Amount.add(oldMeterUse);
+                                            replace = true;
+
+                                            oldReplaceMeterDto = replaceMeterCountDto.getReplaceMeterDtoList().get(i);
+                                        }
+                                        else {
+                                            break;
+                                        }
 
-                            //有换表记录且换表时间在两次同步之间 用水量=(换表中的旧表止度-上次抄表止度) + (本次止度-换表中的新表起度)
-                            boolean replace = false;
-                            if(replaceMeterCountDto != null){
-                                LocalDateTime currTime = LocalDateTime.ofInstant(readDate.toInstant(),ZoneId.systemDefault()); //本次抄表时间
-                                LocalDateTime previousTime = LocalDateTime.ofInstant(amountWaterUsedAmountDto.getLastrecorddate().toInstant(),ZoneId.systemDefault()); //上个帐期的结算抄表时间
-
-                                ReplaceMeterDto oldReplaceMeterDto = null;
-                                for(int i = 0;i<replaceMeterCountDto.getReplaceMeterDtoList().size();i++){
-                                    LocalDateTime replaceTime = replaceMeterCountDto.getReplaceMeterDtoList().get(i).getReplaceTime();   //换表时间
-
-                                    Duration duration1 = Duration.between(previousTime,replaceTime);
-                                    Duration duration2 = Duration.between(replaceTime,currTime);
-                                    if(duration1.toMillis() > 0  && duration2.toMinutes() > 0){
-                                        BigDecimal replaceEndData = new BigDecimal(replaceMeterCountDto.getReplaceMeterDtoList().get(i).getOldEnd()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的旧表止度
-                                        BigDecimal replaceData = BigDecimal.ZERO;
-                                        if(oldReplaceMeterDto == null)
-                                            replaceData = tempReading;
-                                        else
-                                            replaceData = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的起度
-                                        BigDecimal oldMeterUse = replaceEndData.subtract(replaceData); //旧表用量
-
-                                        Amount = Amount.add(oldMeterUse);
-                                        replace = true;
-
-                                        oldReplaceMeterDto = replaceMeterCountDto.getReplaceMeterDtoList().get(i);
                                     }
-                                    else {
-                                        break;
+
+                                    //新表用量
+                                    if(oldReplaceMeterDto != null){
+                                        BigDecimal replaceNewDate = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的新表起度
+                                        BigDecimal newMeterUse = readingNew.subtract(replaceNewDate);//新表用量
+                                        Amount = Amount.add(newMeterUse);
                                     }
 
                                 }
+                            }
 
-                                //新表用量
-                                if(oldReplaceMeterDto != null){
-                                    BigDecimal replaceNewDate = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的新表起度
-                                    BigDecimal newMeterUse = readingNew.subtract(replaceNewDate);//新表用量
-                                    Amount = Amount.add(newMeterUse);
-                                }
 
-                            }
 
                             if(!replace){
                                 if (readingNew.compareTo(tempReading) > 0){

+ 78 - 6
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/AmountSynServiceImpl.java

@@ -7,10 +7,7 @@ import com.bz.smart_city.dao.pay.AmountWaterUsedAmountMapper;
 import com.bz.smart_city.dao.pay.BaseClosingAccountInfoMapper;
 import com.bz.smart_city.dao.pay.PayBaseConfigMapper;
 import com.bz.smart_city.dto.ClearingDataDTO;
-import com.bz.smart_city.dto.pay.AmountWaterUsedAmountDto;
-import com.bz.smart_city.dto.pay.BaseClosingAccountInfoDto;
-import com.bz.smart_city.dto.pay.ClearingDataInfoDto;
-import com.bz.smart_city.dto.pay.PayBaseConfigDto;
+import com.bz.smart_city.dto.pay.*;
 import com.bz.smart_city.entity.ClearingRecord;
 import com.bz.smart_city.quartz.entity.QuartzEntity;
 import com.bz.smart_city.quartz.job.AmountSyncJob;
@@ -25,7 +22,10 @@ import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.time.Duration;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -142,6 +142,29 @@ public class AmountSynServiceImpl implements AmountSynService,InitializingBean {
                         //批量更新水量信息
                         List<AmountWaterUsedAmountDto> updates = new ArrayList<>();
 
+                        //换表记录
+                        HashMap<BigInteger, ReplaceMeterCountDto> replaceMap = new HashMap<>();
+                        if(amountWaterUsedAmountDtos.size() > 0){
+                            LocalDateTime stTime = LocalDateTime.ofInstant(baseClosingAccountInfoDtos.get(0).getStartTime().toInstant(), ZoneId.systemDefault());
+                            HashMap<BigInteger, ReplaceMeterCountDto> childReplaceMap = amountWaterUsedAmountMapper.getRepalceRecordCount(stTime,null,null,null,customerId);
+                            if(childReplaceMap.size() >0){
+                                List<ReplaceMeterDto> replaceMeterDtoList = amountWaterUsedAmountMapper.getRepalceRecordDetail(stTime,null,null,null,customerId);
+                                if(replaceMeterDtoList.size() >0){
+                                    for(int i=0;i<replaceMeterDtoList.size();i++){
+                                        if(childReplaceMap.containsKey(replaceMeterDtoList.get(i).getDeviceId())){
+                                            ReplaceMeterCountDto replaceMeterCountDto = childReplaceMap.get(replaceMeterDtoList.get(i).getDeviceId());
+                                            if(replaceMeterCountDto.getReplaceMeterDtoList() == null)
+                                            {
+                                                replaceMeterCountDto.setReplaceMeterDtoList(new ArrayList<>());
+                                            }
+                                            replaceMeterCountDto.getReplaceMeterDtoList().add(replaceMeterDtoList.get(i));
+                                        }
+                                    }
+                                }
+                                replaceMap.putAll(childReplaceMap);
+                            }
+                        }
+
                         for (AmountWaterUsedAmountDto amountWaterUsedAmountDto : amountWaterUsedAmountDtos) {
                             BigInteger watermeterId = amountWaterUsedAmountDto.getWatermeterId();
                             if (watermeterId != null && clearingDataHashMap.containsKey(watermeterId)) {
@@ -159,8 +182,57 @@ public class AmountSynServiceImpl implements AmountSynService,InitializingBean {
                                     String readDate = clearingDataDTO.getMeterReadDate();
                                     Integer calculateway = amountWaterUsedAmountDto.getCalculateway();
 
-                                    if (readingNew.compareTo(tempReading) > 0)
-                                        Amount = Amount.add(readingNew.subtract(tempReading));
+                                    //换表记录计算
+                                    boolean replace = false;
+                                    ReplaceMeterCountDto replaceMeterCountDto=null;
+                                    if(replaceMap.containsKey(watermeterId)){
+                                        replaceMeterCountDto = replaceMap.get(watermeterId);
+                                        //有换表记录且换表时间在两次同步之间 用水量=(换表中的旧表止度-上次抄表止度) + (本次止度-换表中的新表起度)
+                                        if(replaceMeterCountDto != null){
+                                            LocalDateTime currTime = LocalDateTime.parse(readDate, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));//本次抄表时间
+                                            LocalDateTime previousTime = LocalDateTime.ofInstant(amountWaterUsedAmountDto.getLastrecorddate().toInstant(),ZoneId.systemDefault()); //上个帐期的结算抄表时间
+
+                                            ReplaceMeterDto oldReplaceMeterDto = null;
+                                            for(int i = 0;i<replaceMeterCountDto.getReplaceMeterDtoList().size();i++){
+                                                LocalDateTime replaceTime = replaceMeterCountDto.getReplaceMeterDtoList().get(i).getReplaceTime();   //换表时间
+
+                                                Duration duration1 = Duration.between(previousTime,replaceTime);
+                                                Duration duration2 = Duration.between(replaceTime,currTime);
+                                                if(duration1.toMillis() > 0  && duration2.toMinutes() > 0){
+                                                    BigDecimal replaceEndData = new BigDecimal(replaceMeterCountDto.getReplaceMeterDtoList().get(i).getOldEnd()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的旧表止度
+                                                    BigDecimal replaceData = BigDecimal.ZERO;
+                                                    if(oldReplaceMeterDto == null)
+                                                        replaceData = tempReading;
+                                                    else
+                                                        replaceData = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的起度
+                                                    BigDecimal oldMeterUse = replaceEndData.subtract(replaceData); //旧表用量
+
+                                                    Amount = Amount.add(oldMeterUse);
+                                                    replace = true;
+
+                                                    oldReplaceMeterDto = replaceMeterCountDto.getReplaceMeterDtoList().get(i);
+                                                }
+                                                else {
+                                                    break;
+                                                }
+
+                                            }
+
+                                            //新表用量
+                                            if(oldReplaceMeterDto != null){
+                                                BigDecimal replaceNewDate = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的新表起度
+                                                BigDecimal newMeterUse = readingNew.subtract(replaceNewDate);//新表用量
+                                                Amount = Amount.add(newMeterUse);
+                                            }
+
+                                        }
+                                    }
+
+                                    if(!replace){
+                                        if (readingNew.compareTo(tempReading) > 0)
+                                            Amount = Amount.add(readingNew.subtract(tempReading));
+                                    }
+
 
                                     //计量方式判断
 

+ 100 - 87
smart-city-platform/src/main/resources/mapper/pay/AmountWaterUsedAmountMapper.xml

@@ -213,75 +213,78 @@
 	</select>
 
 	<select id="getAllAmountRecord"  resultType="com.bz.smart_city.dto.pay.AmountWaterUsedAmountDto">
-select  amount.id,
-		amount.lastreading,
-		amount.ele_no eleNo,
-		rela.calculateway,
-		rela.fixedamount,
-		amount.watermeter_id watermeterId,
-        amount.recorddate,
-        rela.id customerandmeterrelaId,
-        amount.waterproperty_id waterpropertyId,
-        rela.account_id as accountId
-from  pay_amount_waterusedamount amount
-inner join pay_base_customerandmeterrela rela on rela.id= amount.customerandmeterrela_id
-where amount.year=#{year} and amount.month=#{month}
-and amount.reading is null and amount.payamount is null
-<if test="customerId!= null" > and rela.customer_id =#{customerId}</if>
-<if test="siteId!= null" > and rela.site_id = #{siteId} </if>
+		select  amount.id,
+				amount.lastreading,
+				amount.ele_no eleNo,
+				rela.calculateway,
+				rela.fixedamount,
+				amount.watermeter_id watermeterId,
+				amount.recorddate,
+				rela.id customerandmeterrelaId,
+				amount.waterproperty_id waterpropertyId,
+				rela.account_id as accountId,
+				amount.lastrecorddate
+		from  pay_amount_waterusedamount amount
+		inner join pay_base_customerandmeterrela rela on rela.id= amount.customerandmeterrela_id
+		where amount.year=#{year} and amount.month=#{month}
+		and amount.reading is null and amount.payamount is null
+		<if test="customerId!= null" > and rela.customer_id =#{customerId}</if>
+		<if test="siteId!= null" > and rela.site_id = #{siteId} </if>
 	</select>
 
 
 
 	<insert id ="createdAmount" useGeneratedKeys="false">
 
-INSERT INTO pay_amount_waterusedamount
-(customerandmeterrela_id, office_id, lastreading, lastrecorddate, metercode,
-watermeter_id, month, payamount, reading, recorddate, amount, state,
-waterproperty_id, year, account_id, accountname, accountnumber, address,
-watertype, isprint, ele_no, iswxsend, sendwxdate, create_by, create_date,
-update_by, update_date, remarks, del_flag, site_id, customer_id)
-
-SELECT
-c.id,c.office_id,ifnull(lastwua.reading, 0),ifnull(lastwua.recorddate,ifnull(d.install_time,d.date_create)),c.metercode,
-c.watermeter_id,#{month},null,null,null,NULL,1,
-c.waterproperty_id,#{year},c.account_id,c.accountname,c.accountnumber,c.address,
-c.watertype,null,d.electronic_no,null,null,1,NOW(),
-1,now(),'批量生成抄表计划',0,c.site_id,c.customer_id
-FROM
-	pay_base_customerandmeterrela c
-left join sc_install_list d on d.device_id =c.watermeter_id
-LEFT JOIN pay_amount_waterusedamount amount ON amount.watermeter_id = c.watermeter_id
-AND amount.YEAR = #{year}
-AND amount.MONTH = #{month}
-LEFT JOIN (
-	SELECT
-		oldwua.watermeter_id,
-		oldwua.reading,
-		oldwua.recorddate
-	FROM
-		(
+		INSERT INTO pay_amount_waterusedamount
+		(customerandmeterrela_id, office_id, lastreading, lastrecorddate, metercode,
+		watermeter_id, month, payamount, reading, recorddate, amount, state,
+		waterproperty_id, year, account_id, accountname, accountnumber, address,
+		watertype, isprint, ele_no, iswxsend, sendwxdate, create_by, create_date,
+		update_by, update_date, remarks, del_flag, site_id, customer_id)
+
+		SELECT
+		c.id,c.office_id,
+		ifnull(lastwua.reading, IFNULL(d.new_meter_start,0)),
+		ifnull(lastwua.recorddate,ifnull(d.install_time,d.date_create)),c.metercode,
+		c.watermeter_id,#{month},null,null,null,NULL,1,
+		c.waterproperty_id,#{year},c.account_id,c.accountname,c.accountnumber,c.address,
+		c.watertype,null,d.electronic_no,null,null,1,NOW(),
+		1,now(),'批量生成抄表计划',0,c.site_id,c.customer_id
+		FROM
+			pay_base_customerandmeterrela c
+		left join sc_install_list d on d.device_id =c.watermeter_id
+		LEFT JOIN pay_amount_waterusedamount amount ON amount.watermeter_id = c.watermeter_id
+		AND amount.YEAR = #{year}
+		AND amount.MONTH = #{month}
+		LEFT JOIN (
 			SELECT
-				max(
-					waterusedamount.create_date
-				) AS create_date,
-				waterusedamount.watermeter_id
+				oldwua.watermeter_id,
+				oldwua.reading,
+				oldwua.recorddate
 			FROM
-				pay_amount_waterusedamount waterusedamount
-			WHERE
-				waterusedamount.state = 2
-			GROUP BY
-				waterusedamount.watermeter_id
-		) lastid
-	LEFT JOIN pay_amount_waterusedamount oldwua ON lastid.create_date = oldwua.create_date
-	AND oldwua.watermeter_id = lastid.watermeter_id
-) lastwua ON c.watermeter_id = lastwua.watermeter_id
-WHERE
-	c.businessstate = 1
-AND amount.id IS NULL
-<if test="customerId!= null" >AND c.customer_id = #{customerId}</if>
-<if test="siteId!= null" > and c.site_id = #{siteId} </if>
-limit 500
+				(
+					SELECT
+						max(
+							waterusedamount.create_date
+						) AS create_date,
+						waterusedamount.watermeter_id
+					FROM
+						pay_amount_waterusedamount waterusedamount
+					WHERE
+						waterusedamount.state = 2
+					GROUP BY
+						waterusedamount.watermeter_id
+				) lastid
+			LEFT JOIN pay_amount_waterusedamount oldwua ON lastid.create_date = oldwua.create_date
+			AND oldwua.watermeter_id = lastid.watermeter_id
+		) lastwua ON c.watermeter_id = lastwua.watermeter_id
+		WHERE
+			c.businessstate = 1
+		AND amount.id IS NULL
+		<if test="customerId!= null" >AND c.customer_id = #{customerId}</if>
+		<if test="siteId!= null" > and c.site_id = #{siteId} </if>
+		limit 500
 
 	</insert>
 
@@ -495,13 +498,17 @@ limit 500
 				MAX( pc2.date_create ) AS dateCreate
 			FROM
 				sc_water_meter_replace_log pc2
-			WHERE
-				pc2.device_id IN
-				<foreach collection="list" item="listItem" open="(" close=")" separator=",">
-					<if test="listItem != null and listItem != ''">
-						#{listItem}
+				<where>
+					<if test="list != null and list.size() != 0">
+						pc2.device_id IN
+						<foreach collection="list" item="listItem" open="(" close=")" separator=",">
+							<if test="listItem != null and listItem != ''">
+								#{listItem}
+							</if>
+						</foreach>
 					</if>
-				</foreach>
+				</where>
+
 			GROUP BY
 			pc2.id
 		) a
@@ -515,22 +522,24 @@ limit 500
 	<select id="getRepalceRecordCount" resultMap="ReplaceMeterCountMap">
 		SELECT
 			COUNT(*) as number,
-			device_id AS deviceId
-		FROM sc_water_meter_replace_log
+			pc.device_id AS deviceId
+		FROM sc_water_meter_replace_log pc LEFT JOIN sc_device scd on pc.device_id = scd.id
 		<where>
-			<if test="stTime != null"> and date_create >= #{stTime,jdbcType=TIMESTAMP}</if>
-			<if test="etTime != null"> and date_create &lt;= #{etTime,jdbcType=TIMESTAMP}</if>
-
-			and device_id IN
-			<foreach collection="list" item="listItem" open="(" close=")" separator=",">
-				<if test="listItem != null and listItem != ''">
-					#{listItem}
-				</if>
-			</foreach>
-
+			<if test="stTime != null"> and pc.date_create >= #{stTime,jdbcType=TIMESTAMP}</if>
+			<if test="etTime != null"> and pc.date_create &lt;= #{etTime,jdbcType=TIMESTAMP}</if>
+			<if test="siteId != null"> and scd.site_id = #{siteId}</if>
+			<if test="customerId != null"> and scd.customer_id = #{customerId}</if>
+			<if test="list != null and list.size() != 0">
+				and pc.device_id IN
+				<foreach collection="list" item="listItem" open="(" close=")" separator=",">
+					<if test="listItem != null and listItem != ''">
+						#{listItem}
+					</if>
+				</foreach>
+			</if>
 
 		</where>
-			GROUP BY device_id
+			GROUP BY pc.device_id
 	</select>
 
 	<select id ="getRepalceRecordDetail" resultType="com.bz.smart_city.dto.pay.ReplaceMeterDto">
@@ -540,17 +549,21 @@ limit 500
 		pc.new_begin_wsv AS newBegin,
 		pc.old_end_wsv AS oldEnd
 		FROM
-		sc_water_meter_replace_log pc
+		sc_water_meter_replace_log pc LEFT JOIN sc_device scd on pc.device_id = scd.id
 		<where>
 			<if test="stTime != null"> and pc.date_create >= #{stTime,jdbcType=TIMESTAMP}</if>
 			<if test="etTime != null"> and pc.date_create &lt;= #{etTime,jdbcType=TIMESTAMP}</if>
+			<if test="siteId != null"> and scd.site_id = #{siteId}</if>
+			<if test="customerId != null"> and scd.customer_id = #{customerId}</if>
+			<if test="list != null and list.size() != 0">
+				and pc.device_id IN
+				<foreach collection="list" item="listItem" open="(" close=")" separator=",">
+					<if test="listItem != null and listItem != ''">
+						#{listItem}
+					</if>
+				</foreach>
+			</if>
 
-			and pc.device_id IN
-			<foreach collection="list" item="listItem" open="(" close=")" separator=",">
-				<if test="listItem != null and listItem != ''">
-					#{listItem}
-				</if>
-			</foreach>
 
 		</where>