<?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="cn.com.victorysoft.business.calc.dao.FlushDataSyncDao">

  <insert id="syncFlushRecord">
    insert into con_flush_record
    (wellname, record_date, unitcode, start_time, range_time, in_water, out_water, displacement, reason, type_id, created_on)
    select jh, rq, dwdm, xjrq, xjys, jksl, cksl, jkpl, xjyy, xjfs, created_on
    from (select t.*, row_number() over(partition by jh, rq order by xjrq desc) rn
    from (select jh, trunc(xjrq) rq, dwdm, xjrq, xjys, jksl, cksl, jkpl, xjyy, xjfs, sysdate created_on
    from YS_DGC12 t
    where xjrq >= #{startDate} and xjrq &lt; #{endDate} + 1
    and not exists (select 1 from CON_FLUSH_RECORD where wellname = t.jh and record_date = trunc(t.xjrq))
    order by jh, xjrq desc) t) t where rn = 1
  </insert>

  <insert id="insertFlushDaily">
    insert into CON_FLUSH_DAILY
    (WELLNAME,
    RECORD_DATE,
    UNITCODE,
    RANGE_TIME,
    DISPLACEMENT,
    REASON,
    TYPE_ID,
    EFFECTIVE,
    CREATED_ON,
    MODIFIED_ON,
    before_date,
    BEFORE_PT,
    BEFORE_PLAN_WATER,
    BEFORE_WATER,
    after_date,
    AFTER_PT,
    AFTER_PLAN_WATER,
    AFTER_WATER,
    AFTER_WATER_RATE)
    SELECT WELLNAME,
    RECORD_DATE,
    UNITCODE,
    RANGE_TIME,
    DISPLACEMENT,
    REASON,
    TYPE_ID,
    EFFECTIVE,
    CREATED_ON,
    MODIFIED_ON,
    before_date,
    A.YY BEFORE_PT,
    A.RPZSL BEFORE_PLAN_WATER,
    A.RZSL BEFORE_WATER,
    after_date,
    B.YY AFTER_PT,
    B.RPZSL AFTER_PLAN_WATER,
    B.RZSL AFTER_WATER,
    DECODE(B.RPZSL, 0, NULL, ROUND(B.RZSL / B.RPZSL, 2)) AFTER_WATER_RATE
    from
    (SELECT t.*,
    (select max(rq) from YS_DBA02 where jh = t.wellname and rq &lt; t.record_date and scsj = 24) before_date,
    (select min(rq) from YS_DBA02 where jh = t.wellname and rq > t.record_date and scsj = 24) after_date
    FROM CON_FLUSH_RECORD T
    where not exists (select 1 from CON_FLUSH_DAILY where wellname = t.wellname and record_date = t.record_date)
    ) t
    LEFT JOIN YS_DBA02 A ON T.WELLNAME = A.JH AND T.before_date = A.RQ
    LEFT JOIN YS_DBA02 B ON T.WELLNAME = B.JH AND T.after_date = B.RQ
  </insert>

  <update id="updateFlushDaily">
    merge into CON_FLUSH_DAILY a
    using (
      select WELLNAME,
      RECORD_DATE,
      after_date2,
      B.YY AFTER_PT,
      B.RPZSL AFTER_PLAN_WATER,
      B.RZSL AFTER_WATER,
      DECODE(B.RPZSL, 0, NULL, ROUND(B.RZSL / B.RPZSL, 2)) AFTER_WATER_RATE
      from
      (SELECT t.*,
      (select min(rq) from YS_DBA02 where jh = t.wellname and rq > t.record_date and scsj = 24) after_date2
      FROM CON_FLUSH_DAILY T
      where after_date is null
      ) t
      JOIN YS_DBA02 B ON T.WELLNAME = B.JH AND T.after_date2 = B.RQ
    ) t
    on (a.WELLNAME = t.WELLNAME and a.RECORD_DATE = t.RECORD_DATE)
    when matched then
    update set
    a.after_date = t.after_date2,
    a.AFTER_PT = t.AFTER_PT,
    a.AFTER_PLAN_WATER = t.AFTER_PLAN_WATER,
    a.AFTER_WATER = t.AFTER_WATER,
    a.AFTER_WATER_RATE = t.AFTER_WATER_RATE
  </update>

</mapper>
