CloudTeacherOrderMapper.xml 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.ym.mec.biz.dal.dao.CloudTeacherOrderDao">
  4. <resultMap id="CloudTeacherOrder" type="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
  5. <!--@mbg.generated-->
  6. <!--@Table cloud_teacher_order-->
  7. <id column="id_" property="id"/>
  8. <result column="organ_id_" property="organId"/>
  9. <result column="member_rank_setting_id_" property="memberRankSettingId"/>
  10. <result column="student_id_" property="studentId"/>
  11. <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  12. <result column="level_" property="level"/>
  13. <result column="time_" property="time"/>
  14. <result column="amount_" property="amount"/>
  15. <result column="operating_amount_" property="operatingAmount"/>
  16. <result column="refund_amount_" property="refundAmount"/>
  17. <result column="status_" property="status"/>
  18. <result column="start_time_" property="startTime"/>
  19. <result column="end_time_" property="endTime"/>
  20. <result column="order_id_" property="orderId"/>
  21. <result column="platform_order_id_" property="platformOrderId"/>
  22. <result column="remark_" property="remark"/>
  23. <result column="active_remark_" property="activeRemark"/>
  24. <result column="version_" property="version"/>
  25. <result column="create_time_" property="createTime"/>
  26. <result column="update_time_" property="updateTime"/>
  27. <result column="music_group_id_" property="musicGroupId"/>
  28. <result column="tenant_id_" property="tenantId" />
  29. </resultMap>
  30. <resultMap type="com.ym.mec.biz.dal.dto.CloudTeacherOrderDto" id="CloudTeacherOrderDto">
  31. <id column="id_" property="cloudTeacherOrder.id"/>
  32. <result column="organ_id_" property="cloudTeacherOrder.organId"/>
  33. <result column="student_id_" property="cloudTeacherOrder.studentId"/>
  34. <result column="type_" property="cloudTeacherOrder.type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
  35. <result column="level_" property="cloudTeacherOrder.level"/>
  36. <result column="time_" property="cloudTeacherOrder.time"/>
  37. <result column="amount_" property="cloudTeacherOrder.amount"/>
  38. <result column="operating_amount_" property="cloudTeacherOrder.operatingAmount"/>
  39. <result column="refund_amount_" property="cloudTeacherOrder.refundAmount"/>
  40. <result column="status_" property="cloudTeacherOrder.status"/>
  41. <result column="start_time_" property="cloudTeacherOrder.startTime"/>
  42. <result column="end_time_" property="cloudTeacherOrder.endTime"/>
  43. <result column="order_id_" property="cloudTeacherOrder.orderId"/>
  44. <result column="platform_order_id_" property="cloudTeacherOrder.platformOrderId"/>
  45. <result column="trans_status_" property="studentPaymentOrder.status"/>
  46. <result column="expect_amount_" property="studentPaymentOrder.expectAmount"/>
  47. <result column="pay_time_" property="studentPaymentOrder.payTime"/>
  48. <result column="order_create_time_" property="studentPaymentOrder.createTime"/>
  49. <result column="name_" property="memberRankSetting.name"/>
  50. <result column="icon_" property="memberRankSetting.icon"/>
  51. <result column="intro_" property="memberRankSetting.intro"/>
  52. <result column="music_group_id_" property="studentPaymentOrder.musicGroupId"/>
  53. </resultMap>
  54. <select id="get" resultMap="CloudTeacherOrder">
  55. select * from cloud_teacher_order where id_ = #{id}
  56. </select>
  57. <delete id="delete">
  58. delete from cloud_teacher_order
  59. where id_ = #{id}
  60. </delete>
  61. <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder"
  62. useGeneratedKeys="true">
  63. INSERT INTO cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_, operating_amount_, refund_amount_, status_,
  64. order_id_,platform_order_id_,start_time_,end_time_,remark_, create_time_, update_time_,music_group_id_,active_remark_,tenant_id_,member_rank_setting_id_)
  65. VALUES (#{organId},#{studentId}, #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{level}, #{time}, #{amount}, #{operatingAmount}, #{refundAmount},
  66. #{status},#{orderId},#{platformOrderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW(),#{musicGroupId},#{activeRemark},#{tenantId},#{memberRankSettingId})
  67. </insert>
  68. <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
  69. <!--@mbg.generated-->
  70. update cloud_teacher_order
  71. <set>
  72. <if test="activeRemark != null">
  73. active_remark_ = #{activeRemark},
  74. </if>
  75. <if test="musicGroupId != null">
  76. music_group_id_ = #{musicGroupId},
  77. </if>
  78. <if test="organId != null">
  79. organ_id_ = #{organId},
  80. </if>
  81. <if test="studentId != null">
  82. student_id_ = #{studentId},
  83. </if>
  84. <if test="type != null">
  85. type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
  86. </if>
  87. <if test="level != null">
  88. level_ = #{level},
  89. </if>
  90. <if test="time != null">
  91. time_ = #{time},
  92. </if>
  93. <if test="amount != null">
  94. amount_ = #{amount},
  95. </if>
  96. <if test="operatingAmount != null">
  97. operating_amount_ = #{operatingAmount},
  98. </if>
  99. <if test="refundAmount != null">
  100. refund_amount_ = #{refundAmount},
  101. </if>
  102. <if test="status != null">
  103. status_ = #{status},
  104. </if>
  105. <if test="startTime != null">
  106. start_time_ = #{startTime},
  107. </if>
  108. <if test="endTime != null">
  109. end_time_ = #{endTime},
  110. </if>
  111. <if test="orderId != null">
  112. order_id_ = #{orderId},
  113. </if>
  114. <if test="platformOrderId != null">
  115. platform_order_id_ = #{platformOrderId},
  116. </if>
  117. <if test="remark != null">
  118. remark_ = #{remark},
  119. </if>
  120. version_ = version_+1,
  121. update_time_ = NOW(),
  122. </set>
  123. where id_ = #{id} AND version_ = #{version} and tenant_id_ = #{tenantId}
  124. </update>
  125. <select id="findByPlatformOrderId" resultMap="CloudTeacherOrder">
  126. select * from cloud_teacher_order cto
  127. left join sys_user su on cto.student_id_ = su.id_
  128. where cto.platform_order_id_ = #{platformOrderId} and su.del_flag_ = '0'
  129. </select>
  130. <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="mapper">
  131. <result column="userId" property="key"/>
  132. <result column="phone" property="value"/>
  133. </resultMap>
  134. <select id="findUserNameByOrderId" resultMap="mapper">
  135. select su.id_ as userId, su.phone_ as phone from cloud_teacher_order cto
  136. left join sys_user su on cto.student_id_ = su.id_
  137. where platform_order_id_ = #{platformOrderId} and su.del_flag_ = '0'
  138. </select>
  139. <update id="updateOrderStatusOK">
  140. update cloud_teacher_order set status_ = 2,
  141. `start_time_` = CURRENT_DATE(),
  142. `end_time_` = case
  143. when type_ = 1 then concat(date_add(CURRENT_DATE(), interval `time_` day) , ' 00:00:00')
  144. when type_ = 2 then concat(date_add(CURRENT_DATE(), interval `time_` month) , ' 00:00:00')
  145. when type_ = 3 then concat(date_add(CURRENT_DATE(), interval `time_` * 3 month) , ' 00:00:00')
  146. when type_ = 4 then concat(date_add(CURRENT_DATE(), interval `time_` * 6 month) , ' 00:00:00')
  147. when type_ = 5 then concat(date_add(CURRENT_DATE(), interval `time_` year) , ' 00:00:00')
  148. end
  149. where platform_order_id_ = #{platformOrderId}
  150. </update>
  151. <update id="updateOrderId">
  152. update cloud_teacher_order
  153. set platform_order_id_ = #{platformOrderId} , pay_amount_ = #{amount}
  154. where id_ = #{cloudTeacherOrderId}
  155. </update>
  156. <!-- 全查询 -->
  157. <select id="findAll" resultMap="CloudTeacherOrder">
  158. SELECT *
  159. FROM cloud_teacher_order where tenant_id_ = #{tenantId}
  160. </select>
  161. <!-- 分页查询 -->
  162. <select id="queryPage" resultMap="CloudTeacherOrderDto" parameterType="map">
  163. SELECT cto.*,spo.status_ trans_status_,spo.expect_amount_,spo.pay_time_,spo.create_time_ order_create_time_,mrs.name_,mrs.icon_ FROM cloud_teacher_order cto
  164. left join student_payment_order spo on cto.order_id_ = spo.id_
  165. left join member_rank_setting mrs on mrs.id_ = cto.level_
  166. where spo.type_ = 'MEMBER'
  167. <if test="status != null and status != ''">
  168. and FIND_IN_SET(cto.status_,#{status})
  169. </if>
  170. <if test="studentId != null">
  171. and cto.student_id_ = #{studentId}
  172. </if>
  173. <if test="tenantId != null">
  174. and cto.tenant_id_ = #{tenantId}
  175. </if>
  176. order by spo.pay_time_ desc,spo.id_ desc
  177. <include refid="global.limit"/>
  178. </select>
  179. <!-- 查询当前表的总记录数 -->
  180. <select id="queryCount" resultType="int">
  181. SELECT COUNT(cto.id_)
  182. FROM cloud_teacher_order cto LEFT JOIN student_payment_order spo on cto.order_id_ = spo.id_
  183. where spo.type_ = 'MEMBER'
  184. <if test="status != null and status != ''">
  185. and FIND_IN_SET(cto.status_,#{status})
  186. </if>
  187. <if test="studentId != null">
  188. and cto.student_id_ = #{studentId}
  189. </if>
  190. <if test="tenantId != null">
  191. and cto.tenant_id_ = #{tenantId}
  192. </if>
  193. order by cto.create_time_ desc
  194. </select>
  195. <select id="getNoStartCloudTeacherOrder" resultMap="CloudTeacherOrder">
  196. SELECT cto.*
  197. FROM cloud_teacher_order cto
  198. WHERE cto.status_ = 1 and cto.tenant_id_ = #{tenantId}
  199. </select>
  200. <select id="getStudentCloudTeacherOrders" resultMap="CloudTeacherOrder">
  201. SELECT *
  202. FROM cloud_teacher_order
  203. WHERE order_id_ IN (
  204. SELECT id_
  205. FROM student_payment_order
  206. WHERE status_ = 'SUCCESS'
  207. AND user_id_ IN
  208. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  209. #{studentId}
  210. </foreach>
  211. GROUP BY user_id_
  212. )
  213. AND student_id_ IN
  214. <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
  215. #{studentId}
  216. </foreach>
  217. AND status_ IN (1,2)
  218. </select>
  219. <select id="queryByOrderId" resultMap="CloudTeacherOrder">
  220. SELECT cto.* FROM cloud_teacher_order cto
  221. WHERE order_id_ = #{orderId}
  222. </select>
  223. <select id="queryOrderInfoByOrderId" resultMap="CloudTeacherOrderDto">
  224. SELECT cto.*,spo.status_ trans_status_,spo.expect_amount_,mrs.name_,mrs.icon_,mrs.intro_
  225. FROM cloud_teacher_order cto
  226. left join student_payment_order spo on cto.order_id_ = spo.id_
  227. left join member_rank_setting mrs on mrs.id_ = cto.level_
  228. where spo.type_ = 'MEMBER' and order_id_ = #{orderId}
  229. </select>
  230. <select id="queryNoStartByUserIds" resultType="java.util.Map">
  231. SELECT student_id_ 'key',create_time_ 'value' FROM cloud_teacher_order
  232. WHERE status_ = 1
  233. <if test="userIds != null and userIds.size > 0">
  234. AND student_id_ IN
  235. <foreach collection="userIds" separator="," item="userId" open="(" close=")">
  236. #{userId}
  237. </foreach>
  238. </if>
  239. GROUP BY student_id_
  240. </select>
  241. <resultMap id="CloudTeacherActiveTargetDetailDto" type="com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDetailDto">
  242. <result property="userId" column="student_id_"/>
  243. <result property="username" column="username_"/>
  244. <result property="amount" column="amount_"/>
  245. <result property="remark" column="remark_"/>
  246. <result property="cooperationName" column="cooperation_name_"/>
  247. <result property="musicGroupName" column="music_group_name_"/>
  248. <result property="chargeType" column="charge_type_name_"/>
  249. <result property="subjectName" column="subject_name_"/>
  250. <result property="currentGradeNum" column="current_grade_num_"/>
  251. <result property="createTime" column="create_time_"/>
  252. </resultMap>
  253. <select id="queryCloudTeacherActiveDetail" resultMap="CloudTeacherActiveTargetDetailDto">
  254. SELECT su.username_,cto.remark_,cto.amount_,cto.student_id_,GROUP_CONCAT(DISTINCT co.name_) cooperation_name_,
  255. GROUP_CONCAT(DISTINCT mg.name_) music_group_name_,GROUP_CONCAT(DISTINCT case when mg.course_view_type_ = 2 then '会员收费' when mg.course_view_type_ = 3 then '免费' else '课程收费' end) charge_type_name_,
  256. sj.name_ subject_name_,st.current_grade_num_,cto.create_time_
  257. FROM cloud_teacher_order cto
  258. LEFT JOIN sys_user su ON su.id_ = cto.student_id_
  259. LEFT JOIN student_registration sr ON sr.user_id_ = cto.student_id_ AND sr.music_group_status_ = 'NORMAL'
  260. LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_ AND mg.status_ = 'PROGRESS'
  261. LEFT JOIN cooperation_organ co ON co.id_ = mg.cooperation_organ_id_
  262. LEFT JOIN student st ON st.user_id_ = cto.student_id_
  263. LEFT JOIN `subject` sj ON sj.id_ = st.subject_id_list_
  264. <include refid="queryCloudTeacherActiveDetailSql"/>
  265. GROUP BY cto.id_
  266. ORDER BY cto.id_ DESC
  267. <include refid="global.limit"/>
  268. </select>
  269. <select id="countCloudTeacherActiveDetail" resultType="int">
  270. SELECT COUNT(DISTINCT cto.id_)
  271. FROM cloud_teacher_order cto
  272. LEFT JOIN sys_user su ON su.id_ = cto.student_id_
  273. LEFT JOIN student st ON st.user_id_ = cto.student_id_
  274. LEFT JOIN student_registration sr ON sr.user_id_ = cto.student_id_ AND sr.music_group_status_ = 'NORMAL'
  275. LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_ AND mg.status_ = 'PROGRESS'
  276. <include refid="queryCloudTeacherActiveDetailSql"/>
  277. </select>
  278. <select id="queryActiveOrderPage" resultType="string">
  279. SELECT GROUP_CONCAT(DISTINCT cto.remark_) FROM cloud_teacher_order cto
  280. LEFT JOIN student_payment_order spo ON spo.id_ = cto.order_id_
  281. WHERE spo.status_ = 'SUCCESS' AND cto.active_remark_ = #{activeRemark}
  282. AND cto.student_id_ = #{userId} AND cto.remark_ != '单月'
  283. <if test="remark != null and remark != ''">
  284. AND cto.remark_ = #{remark}
  285. </if>
  286. </select>
  287. <select id="getStudentIds" resultType="java.lang.Integer">
  288. SELECT DISTINCT student_id_ FROM cloud_teacher_order WHERE active_remark_ IS NULL AND status_ != 0 and tenant_id_ = #{tenantId}
  289. </select>
  290. <select id="queryActiveAmountMap" resultType="java.util.Map">
  291. SELECT student_id_ 'key',SUM(amount_) 'value' FROM cloud_teacher_order
  292. WHERE status_ != 0 AND active_remark_ = '202109'
  293. <if test="studentIds != null and studentIds.size > 0">
  294. AND student_id_ IN
  295. <foreach collection="studentIds" separator="," item="userId" open="(" close=")">
  296. #{userId}
  297. </foreach>
  298. </if>
  299. GROUP BY student_id_
  300. </select>
  301. <resultMap id="cloudTeacherStudent" type="com.ym.mec.biz.dal.entity.CloudTeacherStudent">
  302. <result property="type" column="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
  303. </resultMap>
  304. <!-- 查询激活或未激活记录 -->
  305. <select id="queryInactive" resultMap="cloudTeacherStudent">
  306. select
  307. cto.id_ as cloudTeacherOrderId,
  308. cto.student_id_ as studentId,
  309. cto.type_ as type,
  310. case cto.type_
  311. WHEN 'DAY' THEN '天'
  312. WHEN 'MONTH' THEN '月'
  313. WHEN 'QUARTERLY' THEN '季'
  314. WHEN 'YEAR_HALF' THEN '半年'
  315. WHEN 'YEAR' THEN '年' ELSE ''
  316. end as typeName,
  317. cto.time_ as time,
  318. sj.id_ as subject,
  319. sj.name_ as subjectName,
  320. cto.tenant_id_ as tenantId,
  321. u.username_ as name,
  322. u.phone_ as phone
  323. ,cto.status_ as status
  324. ,cto.operator_ as operator
  325. ,cto.operate_time_ as operateTime
  326. ,cto.cancel_reason_ as cancelReason
  327. ,cto.organ_id_ organId
  328. ,cto.create_time_ createTime
  329. ,cto.level_ memberRankId
  330. from cloud_teacher_order cto
  331. left join student s on cto.student_id_ = s.user_id_
  332. left join sys_user u on cto.student_id_ = u.id_
  333. left join subject sj on s.subject_id_list_ = sj.id_
  334. <if test="musicGroupId != null and musicGroupId != ''">
  335. left join student_registration sr ON cto.student_id_ = sr.user_id_
  336. </if>
  337. <where>
  338. FIND_IN_SET(cto.status_,#{status}) AND cto.tenant_id_ = #{tenantId}
  339. <if test="organIds != null and organIds != ''">
  340. AND FIND_IN_SET(u.organ_id_ , #{organIds})
  341. </if>
  342. <if test="musicGroupId != null and musicGroupId != ''">
  343. AND sr.music_group_id_ = #{musicGroupId}
  344. </if>
  345. <if test="memberRankId != null">
  346. AND cto.level_ = #{memberRankId}
  347. </if>
  348. <if test="queryCondition != null and queryCondition != ''">
  349. AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
  350. </if>
  351. <if test="subjectId">
  352. AND (s.subject_id_list_ = #{subjectId})
  353. </if>
  354. <if test="operatorName != null and operatorName.trim() != ''">
  355. AND cto.operator_ in (
  356. select id_ from sys_user where real_name_ like concat('%',#{operatorName},'%')
  357. union select -1 from sys_user
  358. )
  359. </if>
  360. <if test="operateStartTime != null">
  361. AND cto.operate_time_ >= #{operateStartTime}
  362. </if>
  363. <if test="operateEndTime != null">
  364. AND #{operateEndTime} >= cto.operate_time_
  365. </if>
  366. </where>
  367. ORDER BY cto.id_ DESC
  368. <include refid="global.limit"/>
  369. </select>
  370. <select id="findInactiveCount" resultType="java.lang.Integer">
  371. select count(1) from cloud_teacher_order cto
  372. left join student s on cto.student_id_ = s.user_id_
  373. left join sys_user u on cto.student_id_ = u.id_
  374. left join subject sj on s.subject_id_list_ = sj.id_
  375. <if test="musicGroupId != null and musicGroupId != ''">
  376. left join student_registration sr ON cto.student_id_ = sr.user_id_
  377. </if>
  378. <where>
  379. FIND_IN_SET(cto.status_,#{status}) AND cto.tenant_id_ = #{tenantId}
  380. <if test="organIds != null and organIds != ''">
  381. AND FIND_IN_SET(u.organ_id_ , #{organIds})
  382. </if>
  383. <if test="musicGroupId != null and musicGroupId != ''">
  384. AND sr.music_group_id_ = #{musicGroupId}
  385. </if>
  386. <if test="memberRankId != null">
  387. AND cto.level_ = #{memberRankId}
  388. </if>
  389. <if test="queryCondition != null and queryCondition != ''">
  390. AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
  391. </if>
  392. <if test="subjectId">
  393. AND (s.subject_id_list_ = #{subjectId})
  394. </if>
  395. <if test="operatorName != null and operatorName.trim() != ''">
  396. AND cto.operator_ in (
  397. select id_ from sys_user where real_name_ like concat('%',#{operatorName},'%')
  398. union select -1 from sys_user
  399. )
  400. </if>
  401. <if test="operateStartTime != null">
  402. AND cto.operate_time_ >= #{operateStartTime}
  403. </if>
  404. <if test="operateEndTime != null">
  405. AND #{operateEndTime} >= cto.operate_time_
  406. </if>
  407. </where>
  408. </select>
  409. <!-- 查询订单记录 -->
  410. <select id="findRecordCount" resultType="java.lang.Integer">
  411. SELECT count(1) FROM tenant_order_record tor
  412. LEFT JOIN cloud_teacher_order cto ON tor.id_ = cto.platform_order_id_
  413. LEFT JOIN student s ON cto.student_id_ = s.user_id_
  414. LEFT JOIN sys_user u ON cto.student_id_ = u.id_
  415. <where>
  416. cto.tenant_id_ = #{tenantId} AND tor.order_type_ = 'CLOUD_TEACHER' AND tor.order_state_ = 1
  417. <if test="queryCondition != null and queryCondition != ''">
  418. AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
  419. </if>
  420. <if test="orderNo != null and orderNo != ''">
  421. AND tor.order_no_ LIKE CONCAT('%', #{orderNo}, '%')
  422. </if>
  423. <if test="memberRankId != null">
  424. AND cto.level_ = #{memberRankId}
  425. </if>
  426. <if test="startTime != null">
  427. <![CDATA[ AND tor.created_time_ >= #{startTime} ]]>
  428. </if>
  429. <if test="endTime != null">
  430. <![CDATA[ AND tor.created_time_ <= #{endTime} ]]>
  431. </if>
  432. </where>
  433. </select>
  434. <select id="queryRecord" resultMap="cloudTeacherStudent">
  435. SELECT
  436. cto.id_ AS cloudTeacherOrderId,
  437. cto.student_id_ AS studentId,
  438. cto.type_ AS type,
  439. CASE cto.type_ WHEN 'DAY' THEN '天'
  440. WHEN 'MONTH' THEN '月'
  441. WHEN 'QUARTERLY' THEN '季'
  442. WHEN 'YEAR_HALF' THEN '半年'
  443. WHEN 'YEAR' THEN '年' ELSE ''
  444. END AS typeName,
  445. cto.time_ AS time,
  446. u.tenant_id_ AS tenantId,
  447. u.username_ AS name,
  448. u.phone_ AS phone,
  449. tor.order_no_ as orderNo,
  450. tor.trans_no_ as transNo,
  451. tor.created_time_ as orderTime,
  452. cto.pay_amount_ as amount,
  453. cto.level_ as memberRankId
  454. FROM tenant_order_record tor
  455. LEFT JOIN cloud_teacher_order cto ON tor.id_ = cto.platform_order_id_
  456. LEFT JOIN student s ON cto.student_id_ = s.user_id_
  457. LEFT JOIN sys_user u ON cto.student_id_ = u.id_
  458. <where>
  459. cto.tenant_id_ = #{tenantId} AND tor.order_type_ = 'CLOUD_TEACHER' AND tor.order_state_ = 1
  460. <if test="queryCondition != null and queryCondition != ''">
  461. AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
  462. </if>
  463. <if test="orderNo != null and orderNo != ''">
  464. AND tor.order_no_ LIKE CONCAT('%', #{orderNo}, '%')
  465. </if>
  466. <if test="memberRankId != null">
  467. AND cto.level_ = #{memberRankId}
  468. </if>
  469. <if test="startTime != null">
  470. <![CDATA[ AND tor.created_time_ >= #{startTime} ]]>
  471. </if>
  472. <if test="endTime != null">
  473. <![CDATA[ AND tor.created_time_ <= #{endTime} ]]>
  474. </if>
  475. </where>
  476. <include refid="global.limit"/>
  477. </select>
  478. <select id="checkOrdered" resultType="java.lang.Integer">
  479. select count(1) from cloud_teacher_order where id_ in (${cloudTeacherStudentIds}) and status_ = 2 and platform_order_id_ is not null
  480. </select>
  481. <sql id="queryCloudTeacherActiveDetailSql">
  482. <where>
  483. cto.status_ != 0 AND cto.active_remark_ = '202109'
  484. <if test="organIds != null and organIds != ''">
  485. AND FIND_IN_SET(su.organ_id_,#{organIds})
  486. </if>
  487. <if test="search != null and search != ''">
  488. AND (su.id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR mg.id_ LIKE CONCAT('%',#{search},'%'))
  489. </if>
  490. <if test="subjectId != null">
  491. AND st.subject_id_list_ = #{subjectId}
  492. </if>
  493. <if test="tenantId != null">
  494. AND cto.tenant_id_ = #{tenantId}
  495. </if>
  496. <if test="remarkType != null and remarkType != ''">
  497. AND cto.remark_ = #{remarkType}
  498. </if>
  499. </where>
  500. </sql>
  501. <insert id="batchInsert">
  502. INSERT INTO cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_,status_,
  503. remark_,create_time_, update_time_,tenant_id_)
  504. VALUES
  505. <foreach collection="userIds" item="userId" separator=",">
  506. (#{bean.organId},#{userId},#{bean.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{bean.level},
  507. #{bean.time}, #{bean.amount},#{bean.status},#{bean.remark},NOW(),NOW(),#{bean.tenantId})
  508. </foreach>
  509. </insert>
  510. <select id="queryByUserIdAndStatus" resultMap="CloudTeacherOrder">
  511. select cto.* from cloud_teacher_order cto where cto.student_id_ = #{userId} and cto.status_ = #{status}
  512. </select>
  513. <select id="getWaitActivateMap" resultType="java.util.Map">
  514. select cto.organ_id_ 'key',COUNT(DISTINCT cto.student_id_) 'value' from cloud_teacher_order cto
  515. left join student s ON s.user_id_ = cto.student_id_
  516. left join student_registration sr ON sr.user_id_ = cto.student_id_
  517. left join music_group mg ON mg.id_ = sr.music_group_id_
  518. where cto.status_ = 1 AND (s.membership_end_time_ &lt; NOW() OR s.membership_end_time_ IS NULL)
  519. AND sr.music_group_status_ = 'NORMAL' AND mg.status_ IN ('PROGRESS','PAUSE')
  520. <if test="organIds != null and organIds.size > 0">
  521. AND cto.organ_id_ IN
  522. <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
  523. #{organId}
  524. </foreach>
  525. </if>
  526. group by cto.organ_id_
  527. </select>
  528. <select id="sumPersonIncome" resultType="java.util.Map">
  529. select organ_id_ 'key',SUM(amount_) 'value' from cloud_teacher_order cto
  530. where cto.music_group_id_ IS NULL
  531. AND DATE_FORMAT(create_time_, '%Y-%m') = #{month} AND cto.status_ IN (1,2) AND amount_ > 0 group by organ_id_
  532. </select>
  533. <select id="sumPersonalCloudAmount" resultType="java.util.Map">
  534. select cto.organ_id_ 'key',TRUNCATE(SUM(operating_amount_ / (TIMESTAMPDIFF(DAY,cto.start_time_,cto.end_time_) + 1) *
  535. (TIMESTAMPDIFF(DAY,CASE WHEN start_time_ &lt; #{firstDay} THEN #{firstDay} ELSE DATE_FORMAT(start_time_,'%Y-%m-%d') END,
  536. CASE WHEN DATE_FORMAT(end_time_,'%Y-%m') > #{month} THEN #{lastDay} ELSE DATE_FORMAT(end_time_,'%Y-%m-%d') END) + 1)),2) 'value'
  537. from cloud_teacher_order cto
  538. where operating_amount_ = 480 AND music_group_id_ IS NOT NULL AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m') AND DATE_FORMAT(end_time_,'%Y-%m')
  539. AND cto.settlement_report_flag_ = 0 AND cto.status_ = 2
  540. group by cto.organ_id_;
  541. </select>
  542. <select id="sumGroupCloudAmount" resultType="java.util.Map">
  543. select cto.organ_id_ 'key',TRUNCATE(SUM(operating_amount_ / (TIMESTAMPDIFF(DAY,cto.start_time_,cto.end_time_) + 1) *
  544. (TIMESTAMPDIFF(DAY,CASE WHEN start_time_ &lt; #{firstDay} THEN #{firstDay} ELSE DATE_FORMAT(start_time_,'%Y-%m-%d') END,
  545. CASE WHEN DATE_FORMAT(end_time_,'%Y-%m') > #{month} THEN #{lastDay} ELSE DATE_FORMAT(end_time_,'%Y-%m-%d') END) + 1)),2) 'value'
  546. from cloud_teacher_order cto
  547. where operating_amount_ > 0 AND operating_amount_ != 480 AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m') AND DATE_FORMAT(end_time_,'%Y-%m')
  548. AND cto.settlement_report_flag_ = 0 AND cto.status_ = 2
  549. group by cto.organ_id_
  550. </select>
  551. <update id="cancelInactiveCloudTeacher">
  552. update cloud_teacher_order
  553. set operator_ = #{operator}, status_=4 ,cancel_reason_=#{cancelReason},operate_time_=#{operateTime}
  554. where id_ in
  555. <foreach collection="idList" item="item" separator="," open="(" close=")">
  556. #{item}
  557. </foreach>
  558. and status_ = 1 and tenant_id_ = #{tenantId}
  559. </update>
  560. <select id="queryCloudTeacherOrderByIds" resultMap="CloudTeacherOrder">
  561. select t.* from cloud_teacher_order t
  562. where t.id_ in
  563. <foreach collection="ids" item="item" close=")" open="(" separator=",">
  564. #{item}
  565. </foreach>
  566. </select>
  567. <select id="exportCloudCoachActivationDetails" resultType="com.ym.mec.biz.dal.dto.CloudCoachActivationDetailsDto">
  568. select o.name_ organName,cto.amount_ amount,cto.student_id_ studentId,cto.start_time_ createTime,su.username_ studentName,
  569. CASE WHEN cto.type_ = 'MONTH' THEN CONCAT(cto.time_,'月')
  570. WHEN cto.type_ = 'YEAR' THEN CONCAT(cto.time_ * 12,'月')
  571. WHEN cto.type_ = 'YEAR_HALF' THEN CONCAT(cto.time_ * 6,'月')
  572. WHEN cto.type_ = 'QUARTERLY' THEN CONCAT(cto.time_ * 3,'月')
  573. ELSE CONCAT(cto.time_,'天') END AS time
  574. from cloud_teacher_order cto
  575. left join organization o ON o.id_ = cto.organ_id_
  576. left join sys_user su ON su.id_ = cto.student_id_
  577. where cto.status_ = 2
  578. <if test="organId != null and organId != ''">
  579. AND FIND_IN_SET(cto.organ_id_,#{organId})
  580. </if>
  581. <if test="month != null and month != ''">
  582. AND DATE_FORMAT(cto.start_time_,'%Y-%m') = #{month}
  583. </if>
  584. ORDER BY o.id_ DESC,cto.start_time_ DESC
  585. </select>
  586. <select id="exportMusicGroupNoCourse"
  587. resultType="com.ym.mec.biz.dal.dto.ExportWrapper$ExportMusicGroupNoCourseDto">
  588. select o.name_ organName,mg.name_ musicGroupName,mg.id_ musicGroupId,mgpscd.user_id_ studentId,su.username_ studentName,
  589. sum(CASE WHEN mgpscd.course_type_ = 'CLASSROOM' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS classroom,
  590. sum(CASE WHEN mgpscd.course_type_ = 'COMPREHENSIVE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS comprehensive,
  591. sum(CASE WHEN mgpscd.course_type_ = 'HIGH' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS high,
  592. sum(CASE WHEN mgpscd.course_type_ = 'HIGH_ONLINE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS highOnline,
  593. sum(CASE WHEN mgpscd.course_type_ = 'MIX' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS mix,
  594. sum(CASE WHEN mgpscd.course_type_ = 'SINGLE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS single,
  595. sum(CASE WHEN mgpscd.course_type_ = 'TRAINING_MIX' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS trainingMix,
  596. sum(CASE WHEN mgpscd.course_type_ = 'TRAINING_SINGLE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS trainingSingle
  597. from music_group mg
  598. left join music_group_payment_calender mgpc ON mgpc.music_group_id_ = mg.id_
  599. left join music_group_payment_student_course_detail mgpscd ON mgpscd.music_group_payment_calender_id_ = mgpc.id_
  600. left join organization o ON o.id_ = mg.organ_id_
  601. left join sys_user su ON su.id_ = mgpscd.user_id_
  602. left join student_registration sr ON sr.user_id_ = mgpscd.user_id_ AND sr.music_group_id_ = mgpc.music_group_id_
  603. where mg.status_ = 'PROGRESS' AND sr.music_group_status_ = 'NORMAL' AND mgpscd.sub_course_minutes_ > 0
  604. <if test="organId != null and organId != ''">
  605. AND FIND_IN_SET(mg.organ_id_,#{organId})
  606. </if>
  607. group by mgpscd.music_group_id_,mgpscd.user_id_ order by mg.organ_id_,mg.id_
  608. </select>
  609. <select id="countByMemberRankSettingId" resultType="int">
  610. select count(1) from cloud_teacher_order where level_ in
  611. <foreach collection="memberRankSettingId" item="item" separator="," open="(" close=")">
  612. #{item}
  613. </foreach>
  614. </select>
  615. <select id="queryByUserIds" resultType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
  616. select * from cloud_teacher_order where student_id_ in
  617. <foreach collection="userIds" item="userId" separator="," open="(" close=")">
  618. #{userId}
  619. </foreach>
  620. <if test="status != null">
  621. and status_ = #{status}
  622. <if test="status == 2">
  623. and end_time_ &gt;= NOW()
  624. </if>
  625. </if>
  626. </select>
  627. <select id="getActivationVipIds" resultType="java.lang.Integer">
  628. select distinct member_rank_id_ from student_member_time where student_id_ = #{studentId} and end_time_ &gt;=now()
  629. </select>
  630. </mapper>