Browse Source

Merge remote-tracking branch 'origin/master'

master
chentaiyu 4 years ago
parent
commit
9fff8a3d7b
  1. 88
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml

88
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmMenuMapper.xml

@ -193,6 +193,94 @@
( #{item}) ( #{item})
</foreach> </foreach>
</select> </select>
<!-- 适合没有交叉的,没用父子关系的一批任务的更新 -->
<update id="batchSumParents" parameterType="List">
UPDATE xm_menu res
LEFT JOIN (
SELECT
t.pmenu_id,
count(1) as children_cnt,
sum( ifnull( t.budget_cost, 0 ) ) AS budget_cost,
sum( ifnull( t.budget_workload, 0 ) ) AS budget_workload,
sum( ifnull( t.mact_cost, 0 ) ) AS mact_cost,
sum( ifnull( t.mact_workload, 0 ) ) AS mact_workload,
sum( ifnull( t.rworkload, if(t.budget_workload>0,(t.budget_workload-ifnull(t.mact_workload,0)),0) ) ) AS rworkload,
sum( ifnull(t.mact_rate,0)) as total_rate,
min( t.start_time ) AS start_time,
max( t.end_time ) AS end_time
FROM
xm_menu t
WHERE
t.pmenu_id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
group by t.pmenu_id
) t2 ON t2.pmenu_id = res.menu_id
SET
res.budget_workload=ifnull(t2.budget_workload,0),
res.budget_cost=ifnull(t2.budget_cost,0),
res.mact_cost = t2.mact_cost,
res.mact_workload = t2.mact_workload,
res.mact_rate = case when (ifnull(t2.rworkload,0)+ifnull(t2.mact_workload,0)>0) then ifnull(t2.mact_workload,0)*100/(ifnull(t2.rworkload,0)+ifnull(t2.mact_workload,0))
when t2.children_cnt >0 then t2.total_rate/t2.children_cnt
else 0 end,
res.start_time = ifnull(res.start_time,t2.start_time),
res.end_time = ifnull(t2.end_time,t2.end_time),
res.children_cnt = ifnull( t2.children_cnt, 0 ),
res.ntype=if(t2.children_cnt>0,"1",res.ntype)
WHERE
res.menu_id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
and res.ntype='1'
</update>
<!-- 适合父子关系的一批任务的更新 -->
<update id="sumParents" parameterType="List">
<foreach collection="list" item="item" index="index" open="" separator=";" close="" >
UPDATE xm_menu res
left JOIN (
SELECT
t.pmenu_id,
count(1) as children_cnt,
sum( ifnull( t.mact_cost, 0 ) ) AS act_cost,
sum( ifnull( t.mact_workload, 0 ) ) AS act_workload,
sum( ifnull( t.budget_cost, 0 ) ) AS budget_cost,
sum( ifnull( t.rworkload, if(t.budget_workload>0,(t.budget_workload-ifnull(t.mact_workload,0)),0) ) ) AS rworkload,
sum( ifnull( t.budget_workload, 0 ) * ifnull( t.rate, 0 ) ) as budget_workload_rate,
sum( ifnull(t.rate,0)) as total_rate,
sum( ifnull( t.budget_workload, 0 )) as budget_workload,
min( t.mact_start_time ) AS act_start_time,
max( t.mact_end_time ) AS act_end_time,
min( t.start_time ) AS start_time,
max( t.end_time ) AS end_time
FROM
xm_menu t
WHERE
t.pmenu_id = #{item}
) t2 ON t2.pmenu_id = res.menu_id
SET
res.budget_workload=ifnull(t2.budget_workload,0),
res.budget_cost=ifnull(t2.budget_cost,0),
res.mact_cost = t2.mact_cost,
res.mact_workload = t2.mact_workload,
res.mact_rate = case when (ifnull(t2.rworkload,0)+ifnull(t2.mact_workload,0)>0) then ifnull(t2.mact_workload,0)*100/(ifnull(t2.rworkload,0)+ifnull(t2.mact_workload,0))
when t2.children_cnt >0 then t2.total_rate/t2.children_cnt
else 0 end,
res.start_time = ifnull(res.start_time,t2.start_time),
res.end_time = ifnull(t2.end_time,t2.end_time),
res.children_cnt = ifnull( t2.children_cnt, 0 ),
res.ntype=if(t2.children_cnt>0,"1",res.ntype)
WHERE
res.menu_id = #{item}
and res.ntype='1'
</foreach>
</update>
<!--结束 自定义sql函数区域--> <!--结束 自定义sql函数区域-->

Loading…
Cancel
Save