修复当期天数和当期摊销,金额精度问题

This commit is contained in:
wuchunlei
2025-10-11 09:13:21 +08:00
parent 592a8bf11f
commit dba68189ca

View File

@@ -5,64 +5,68 @@
<select id="getUserCourseBuyInfo" resultType="map"> <select id="getUserCourseBuyInfo" resultType="map">
select w.name,w.tel,w.ctitle,w.cctitle,if(w.startTime is null,'',w.startTime) startTime,if(w.endTime is null,'',w.endTime) endTime,w.totalDays select w.name,w.tel,w.ctitle,w.cctitle,if(w.startTime is null,'',w.startTime) startTime,if(w.endTime is null,'',w.endTime) endTime,w.totalDays
,w.type,w.payType,w.payTime,w.orderSn,w.days,w.fee,w.remark,w.dayAmount,w.alreadyDay,w.currentDay ,w.type,w.payType,w.payTime,w.orderSn,w.days,w.fee,w.remark,w.dayAmount,w.alreadyDay,w.currentDay
,ROUND(alreadyDay*dayAmount,2) alreadyTanxiao,ROUND(currentDay*dayAmount,2) currentTanxiao,ROUND(fee-(alreadyDay*dayAmount)-(currentDay*dayAmount),2) surplusTanxiao ,ROUND(alreadyDay*dayAmount,2) alreadyTanxiao
,ROUND(if(alreadyDay+currentDay=totalDays,fee-ROUND(alreadyDay*dayAmount,2),currentDay*dayAmount),2) currentTanxiao
,ROUND(fee-(alreadyDay*dayAmount)-ROUND(if(alreadyDay+currentDay=totalDays,fee-ROUND(alreadyDay*dayAmount,2),currentDay*dayAmount),2),2) surplusTanxiao
from ( from (
select q.* select q.*
,IF(days-alreadyDay=0,0,IF(beginDay=0,IF(startTime is NULL,0,IF(days-alreadyDay>=monthDays,if(DATE_FORMAT(startTime, '%Y-%m') = SUBSTR(#{date},1,7),DATEDIFF(#{date},startTime)+1,monthDays),days-alreadyDay)),IF(beginDay-alreadyTotalDay>monthDays,0,monthDays-(beginDay-alreadyTotalDay-1)))) currentDay ,IF(days-alreadyDay=0,0,IF(beginDay=0,IF(startTime is NULL,0,IF(days-alreadyDay>=monthDays,if(DATE_FORMAT(startTime,'%Y-%m')=SUBSTR(#{date},1,7),DATEDIFF(#{date},startTime)+1,monthDays),if(DATE_FORMAT(startTime, '%Y-%m')=SUBSTR(#{date},1,7),DATEDIFF(#{date},startTime)+1,days-alreadyDay))),IF(beginDay-alreadyTotalDay>monthDays,0,monthDays-(beginDay-alreadyTotalDay-1)))) currentDay
from ( from (
select s.* select s.*
,IF(alreadyTotalDay>beginDay,IF(beginDay=0,IF(alreadyTotalDay &lt; days,alreadyTotalDay,days),alreadyTotalDay-beginDay+1),0) alreadyDay ,IF(alreadyTotalDay>beginDay,IF(beginDay=0,IF(alreadyTotalDay &lt; days,alreadyTotalDay,days),alreadyTotalDay-beginDay+1),0) alreadyDay
,SUBSTR(#{date},9) monthDays ,SUBSTR(#{date},9) monthDays
from ( from (
select t.* select t.*
,IF(startTime is NULL,0,ROUND(fee/days,2)) dayAmount ,IF(startTime is NULL,0,ROUND(fee/days,2)) dayAmount
,IF(startTime is NULL,0,IF(DATE_FORMAT(startTime,'%Y-%m')>=SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(endTime,'%Y-%m') &lt; SUBSTR(#{date},1,7),days,DATEDIFF(CONCAT(SUBSTR(#{date},1,7),'-01'),startTime)))) alreadyTotalDay ,IF(startTime is NULL,0,IF(DATE_FORMAT(startTime,'%Y-%m')>=SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(endTime,'%Y-%m') &lt; SUBSTR(#{date},1,7),days,DATEDIFF(CONCAT(SUBSTR(#{date},1,7),'-01'),startTime)))) alreadyTotalDay
from ( from (
select u.name,if(u.tel is null,if(u.email is null,'',u.email),u.tel) tel,c.title ctitle,cc.title cctitle, select u.name,if(u.tel is null,if(u.email is null,'',u.email),u.tel) tel,c.title ctitle,cc.title cctitle,
ucb.days totalDays,ucb.start_time startTime,ucb.end_time endTime, ucb.days totalDays,ucb.start_time startTime,ucb.end_time endTime,
ucbl.type,ucbl.pay_type payType,ucbl.pay_time payTime,ucbl.order_sn orderSn, ucbl.type,ucbl.pay_type payType,ucbl.pay_time payTime,ucbl.order_sn orderSn,
ucbl.begin_day beginDay,ucbl.days days,ucbl.fee,ucbl.remark ucbl.begin_day beginDay,ucbl.days days,ucbl.fee,ucbl.remark
from user_course_buy_log ucbl from user_course_buy_log ucbl
left join user_course_buy ucb on ucb.id = ucbl.user_course_buy_id left join user_course_buy ucb on ucb.id = ucbl.user_course_buy_id
left join user u on u.id = ucb.user_id left join user u on u.id = ucb.user_id
left join course c on c.id = ucb.course_id left join course c on c.id = ucb.course_id
left join course_catalogue cc on cc.id = ucb.catalogue_id left join course_catalogue cc on cc.id = ucb.catalogue_id
where ucbl.del_flag = 0 and DATE_FORMAT(ucbl.pay_time,'%Y-%m-%d') &lt;= #{date} where ucbl.del_flag = 0 and DATE_FORMAT(ucbl.pay_time,'%Y-%m-%d') &lt;= #{date}
order by ucb.id order by ucb.id
) t) s) q) w ) t) s) q) w
</select> </select>
<select id="getUserCourseBuyInfoTotal" resultType="map"> <select id="getUserCourseBuyInfoTotal" resultType="map">
select ROUND(SUM(fee),2) fee,ROUND(SUM(alreadyTanxiao),2) alreadyTanxiao,ROUND(SUM(currentTanxiao),2) currentTanxiao,ROUND(SUM(surplusTanxiao),2) surplusTanxiao select ROUND(SUM(fee),2) fee,ROUND(SUM(alreadyTanxiao),2) alreadyTanxiao,ROUND(SUM(currentTanxiao),2) currentTanxiao,ROUND(SUM(surplusTanxiao),2) surplusTanxiao
from ( from (
select w.name,w.tel,w.ctitle,w.cctitle,w.startTime,w.endTime,w.totalDays select w.name,w.tel,w.ctitle,w.cctitle,if(w.startTime is null,'',w.startTime) startTime,if(w.endTime is null,'',w.endTime) endTime,w.totalDays
,w.type,w.payType,w.payTime,w.orderSn,w.days,w.fee,w.remark,w.dayAmount,w.alreadyDay,w.currentDay ,w.type,w.payType,w.payTime,w.orderSn,w.days,w.fee,w.remark,w.dayAmount,w.alreadyDay,w.currentDay
,ROUND(alreadyDay*dayAmount,2) alreadyTanxiao,ROUND(currentDay*dayAmount,2) currentTanxiao,ROUND(fee-(alreadyDay*dayAmount)-(currentDay*dayAmount),2) surplusTanxiao ,ROUND(alreadyDay*dayAmount,2) alreadyTanxiao
from ( ,ROUND(if(alreadyDay+currentDay=totalDays,fee-ROUND(alreadyDay*dayAmount,2),currentDay*dayAmount),2) currentTanxiao
select q.* ,ROUND(fee-(alreadyDay*dayAmount)-ROUND(if(alreadyDay+currentDay=totalDays,fee-ROUND(alreadyDay*dayAmount,2),currentDay*dayAmount),2),2) surplusTanxiao
,IF(days-alreadyDay=0,0,IF(beginDay=0,IF(startTime is NULL,0,IF(days-alreadyDay>=monthDays,monthDays,days-alreadyDay)),IF(beginDay-alreadyTotalDay>monthDays,0,monthDays-(beginDay-alreadyTotalDay-1)))) currentDay from (
from ( select q.*
select s.* ,IF(days-alreadyDay=0,0,IF(beginDay=0,IF(startTime is NULL,0,IF(days-alreadyDay>=monthDays,if(DATE_FORMAT(startTime,'%Y-%m')=SUBSTR(#{date},1,7),DATEDIFF(#{date},startTime)+1,monthDays),if(DATE_FORMAT(startTime, '%Y-%m')=SUBSTR(#{date},1,7),DATEDIFF(#{date},startTime)+1,days-alreadyDay))),IF(beginDay-alreadyTotalDay>monthDays,0,monthDays-(beginDay-alreadyTotalDay-1)))) currentDay
,IF(alreadyTotalDay>beginDay,IF(beginDay=0,IF(alreadyTotalDay &lt; days,alreadyTotalDay,days),alreadyTotalDay-beginDay+1),0) alreadyDay from (
,SUBSTR(#{date},9) monthDays select s.*
from ( ,IF(alreadyTotalDay>beginDay,IF(beginDay=0,IF(alreadyTotalDay &lt; days,alreadyTotalDay,days),alreadyTotalDay-beginDay+1),0) alreadyDay
select t.* ,SUBSTR(#{date},9) monthDays
,IF(startTime is NULL,0,ROUND(fee/days,2)) dayAmount from (
,IF(startTime is NULL,0,IF(DATE_FORMAT(startTime,'%Y-%m')>=SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(endTime,'%Y-%m') &lt; SUBSTR(#{date},1,7),days,DATEDIFF(CONCAT(SUBSTR(#{date},1,7),'-01'),startTime)))) alreadyTotalDay select t.*
from ( ,IF(startTime is NULL,0,ROUND(fee/days,2)) dayAmount
select u.name,if(u.tel is null,if(u.email is null,'',u.email),u.tel) tel,c.title ctitle,cc.title cctitle, ,IF(startTime is NULL,0,IF(DATE_FORMAT(startTime,'%Y-%m')>=SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(endTime,'%Y-%m') &lt; SUBSTR(#{date},1,7),days,DATEDIFF(CONCAT(SUBSTR(#{date},1,7),'-01'),startTime)))) alreadyTotalDay
ucb.days totalDays,ucb.start_time startTime,ucb.end_time endTime, from (
ucbl.type,ucbl.pay_type payType,ucbl.pay_time payTime,ucbl.order_sn orderSn, select u.name,if(u.tel is null,if(u.email is null,'',u.email),u.tel) tel,c.title ctitle,cc.title cctitle,
ucbl.begin_day beginDay,ucbl.days days,ucbl.fee,ucbl.remark ucb.days totalDays,ucb.start_time startTime,ucb.end_time endTime,
from user_course_buy_log ucbl ucbl.type,ucbl.pay_type payType,ucbl.pay_time payTime,ucbl.order_sn orderSn,
left join user_course_buy ucb on ucb.id = ucbl.user_course_buy_id ucbl.begin_day beginDay,ucbl.days days,ucbl.fee,ucbl.remark
left join user u on u.id = ucb.user_id from user_course_buy_log ucbl
left join course c on c.id = ucb.course_id left join user_course_buy ucb on ucb.id = ucbl.user_course_buy_id
left join course_catalogue cc on cc.id = ucb.catalogue_id left join user u on u.id = ucb.user_id
where ucbl.del_flag = 0 and DATE_FORMAT(ucbl.pay_time,'%Y-%m-%d') &lt;= #{date} left join course c on c.id = ucb.course_id
order by ucbl.pay_time left join course_catalogue cc on cc.id = ucb.catalogue_id
) t) s) q) w where ucbl.del_flag = 0 and DATE_FORMAT(ucbl.pay_time,'%Y-%m-%d') &lt;= #{date}
order by ucb.id
) t) s) q) w
) e ) e
</select> </select>