Files
nuttyreading-java/src/main/resources/mapper/master/UserCourseBuyDao.xml
2025-11-10 16:19:56 +08:00

77 lines
9.0 KiB
XML

<?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="com.peanut.modules.common.dao.UserCourseBuyDao">
<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
,w.type,w.payType,w.payTime,w.orderSn,w.zfbOrder,w.days,w.fee,w.remark,w.dayAmount,w.alreadyDay,w.currentDay
,ROUND(if(alreadyDay=days,fee,alreadyDay*dayAmount),2) alreadyTanxiao
,ROUND(if(alreadyDay+currentDay>=totalDays,fee-ROUND(if(alreadyDay=days,fee,alreadyDay*dayAmount),2),currentDay*dayAmount),2) currentTanxiao
,ROUND(fee-(if(alreadyDay=days,fee,alreadyDay*dayAmount))-ROUND(if(alreadyDay+currentDay>=totalDays,fee-ROUND(if(alreadyDay=days,fee,alreadyDay*dayAmount),2),currentDay*dayAmount),2),2) surplusTanxiao
from (
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,if(DATE_FORMAT(startTime,'%Y-%m')>SUBSTR(#{date},1,7),0,monthDays)),if(DATE_FORMAT(startTime, '%Y-%m')=SUBSTR(#{date},1,7),if(DATEDIFF(#{date},startTime)+1>days,days,DATEDIFF(#{date},startTime)+1),if(DATE_FORMAT(startTime, '%Y-%m') &lt; SUBSTR(#{date},1,7),days-alreadyDay,0)))),IF(beginDay-alreadyTotalDay>monthDays,0,monthDays-(beginDay-alreadyTotalDay-1)))) currentDay
from (
select s.*
,IF(alreadyTotalDay>beginDay,IF(beginDay=0,IF(alreadyTotalDay &lt; days,alreadyTotalDay,days),alreadyTotalDay-beginDay+1),0) alreadyDay
,SUBSTR(#{date},9) monthDays
from (
select t.*
,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
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,
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,pzo.trade_no zfbOrder,
ucbl.begin_day beginDay,ucbl.days days,ucbl.fee,ucbl.remark
from user_course_buy_log ucbl
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 course c on c.id = ucb.course_id
left join course_catalogue cc on cc.id = ucb.catalogue_id
left join pay_zfb_order pzo on pzo.relevanceOid = ucbl.order_sn and pzo.trade_no is not null
where ucbl.del_flag = 0 and DATE_FORMAT(ucbl.pay_time,'%Y-%m-%d') &lt;= #{date}
and u.id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456'))
order by ucb.id
) t) s) q) w
</select>
<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
from (
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.zfbOrder,w.days,w.fee,w.remark,w.dayAmount,w.alreadyDay,w.currentDay
,ROUND(if(alreadyDay=days,fee,alreadyDay*dayAmount),2) alreadyTanxiao
,ROUND(if(alreadyDay+currentDay>=totalDays,fee-ROUND(if(alreadyDay=days,fee,alreadyDay*dayAmount),2),currentDay*dayAmount),2) currentTanxiao
,ROUND(fee-(if(alreadyDay=days,fee,alreadyDay*dayAmount))-ROUND(if(alreadyDay+currentDay>=totalDays,fee-ROUND(if(alreadyDay=days,fee,alreadyDay*dayAmount),2),currentDay*dayAmount),2),2) surplusTanxiao
from (
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,if(DATE_FORMAT(startTime,'%Y-%m')>SUBSTR(#{date},1,7),0,monthDays)),if(DATE_FORMAT(startTime, '%Y-%m')=SUBSTR(#{date},1,7),if(DATEDIFF(#{date},startTime)+1>days,days,DATEDIFF(#{date},startTime)+1),if(DATE_FORMAT(startTime, '%Y-%m') &lt; SUBSTR(#{date},1,7),days-alreadyDay,0)))),IF(beginDay-alreadyTotalDay>monthDays,0,monthDays-(beginDay-alreadyTotalDay-1)))) currentDay
from (
select s.*
,IF(alreadyTotalDay>beginDay,IF(beginDay=0,IF(alreadyTotalDay &lt; days,alreadyTotalDay,days),alreadyTotalDay-beginDay+1),0) alreadyDay
,SUBSTR(#{date},9) monthDays
from (
select t.*
,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
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,
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,pzo.trade_no zfbOrder,
ucbl.begin_day beginDay,ucbl.days days,ucbl.fee,ucbl.remark
from user_course_buy_log ucbl
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 course c on c.id = ucb.course_id
left join course_catalogue cc on cc.id = ucb.catalogue_id
left join pay_zfb_order pzo on pzo.relevanceOid = ucbl.order_sn and pzo.trade_no is not null
where ucbl.del_flag = 0 and DATE_FORMAT(ucbl.pay_time,'%Y-%m-%d') &lt;= #{date}
and u.id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456'))
order by ucb.id
) t) s) q) w
) e
</select>
</mapper>