Parcourir la source

fix:修复更新nav和asset表错误的问题

mozuwen il y a 1 mois
Parent
commit
f4c2453a0d

+ 25 - 12
service-base/src/main/resources/mapper/AssetMapper.xml

@@ -24,19 +24,32 @@
         </foreach>
     </insert>
 
-    <insert id="batchUpdate">
-        <foreach collection="itemDoList" item="itemDo" index="index" open="" close="" separator=";">
-            update asset
-            <set>
-                asset_net = #{itemDo.assetNet},
-                asset_share = #{itemDo.assetShare},
-                updatetime=#{itemDo.updateTime}
-            </set>
-            where isvalid = 1
-            and fund_id = #{itemDo.fundId}
-            and price_date = #{itemDo.priceDate}
+    <update id="batchUpdate" parameterType="java.util.List">
+        UPDATE asset
+        <set>
+            asset_net = CASE
+            <foreach collection="itemDoList" item="itemDo">
+                WHEN fund_id = #{itemDo.fundId} AND price_date = #{itemDo.priceDate} THEN #{itemDo.assetNet}
+            </foreach>
+            ELSE asset_net END,
+            asset_share = CASE
+            <foreach collection="itemDoList" item="itemDo">
+                WHEN fund_id = #{itemDo.fundId} AND price_date = #{itemDo.priceDate} THEN #{itemDo.assetShare}
+            </foreach>
+            ELSE asset_share END,
+            updatetime = CASE
+            <foreach collection="itemDoList" item="itemDo">
+                WHEN fund_id = #{itemDo.fundId} AND price_date = #{itemDo.priceDate} THEN #{itemDo.updateTime}
+            </foreach>
+            ELSE updatetime END
+        </set>
+        WHERE isvalid = 1
+        AND (fund_id, price_date) IN
+        <foreach collection="itemDoList" item="itemDo" open="(" close=")" separator=",">
+            (#{itemDo.fundId}, #{itemDo.priceDate})
         </foreach>
-    </insert>
+    </update>
+
     <delete id="deleteAsset">
         update asset set isvalid=0,updatetime=now(),updaterid=#{updaterId}  where fund_id=#{fundId} and price_date=#{priceDate}
     </delete>

+ 25 - 12
service-base/src/main/resources/mapper/NavMapper.xml

@@ -26,19 +26,32 @@
 
     </insert>
 
-    <insert id="batchUpdate">
-        <foreach collection="itemDoList" item="itemDo" index="index" open="" close="" separator=";">
-            update nav
-            <set>
-                nav = #{itemDo.nav},
-                cumulative_nav_withdrawal = #{itemDo.cumulativeNavWithdrawal},
-                updatetime=#{itemDo.updateTime}
-            </set>
-            where isvalid = 1
-            and fund_id = #{itemDo.fundId}
-            and price_date = #{itemDo.priceDate}
+    <update id="batchUpdate" parameterType="java.util.List">
+        UPDATE nav
+        <set>
+            nav = CASE
+            <foreach collection="itemDoList" item="itemDo" separator=" ">
+                WHEN fund_id = #{itemDo.fundId} AND price_date = #{itemDo.priceDate} THEN #{itemDo.nav}
+            </foreach>
+            ELSE nav END,
+            cumulative_nav_withdrawal = CASE
+            <foreach collection="itemDoList" item="itemDo" separator=" ">
+                WHEN fund_id = #{itemDo.fundId} AND price_date = #{itemDo.priceDate} THEN #{itemDo.cumulativeNavWithdrawal}
+            </foreach>
+            ELSE cumulative_nav_withdrawal END,
+            updatetime = CASE
+            <foreach collection="itemDoList" item="itemDo" separator=" ">
+                WHEN fund_id = #{itemDo.fundId} AND price_date = #{itemDo.priceDate} THEN #{itemDo.updateTime}
+            </foreach>
+            ELSE updatetime END
+        </set>
+        WHERE isvalid = 1
+        AND (fund_id, price_date) IN
+        <foreach collection="itemDoList" item="itemDo" open="(" close=")" separator=",">
+            (#{itemDo.fundId}, #{itemDo.priceDate})
         </foreach>
-    </insert>
+    </update>
+
     <insert id="saveNav" parameterType="com.simuwang.base.pojo.dos.NavDO">
         insert into nav(fund_id,price_date,nav,cumulative_nav,cumulative_nav_withdrawal,
         isvalid, creatorid, createtime, updaterid, updatetime)