UserOrderRecordService.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. package com.qxgmat.service.inline;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.AbstractService;
  4. import com.nuliji.tools.Tools;
  5. import com.nuliji.tools.Transform;
  6. import com.nuliji.tools.exception.ParameterException;
  7. import com.nuliji.tools.exception.SystemException;
  8. import com.nuliji.tools.mybatis.Example;
  9. import com.qxgmat.data.constants.enums.ServiceKey;
  10. import com.qxgmat.data.constants.enums.module.CourseModule;
  11. import com.qxgmat.data.constants.enums.module.ProductType;
  12. import com.qxgmat.data.constants.enums.module.VsCourseType;
  13. import com.qxgmat.data.constants.enums.status.DirectionStatus;
  14. import com.qxgmat.data.constants.enums.trade.RecordSource;
  15. import com.qxgmat.data.dao.UserOrderRecordMapper;
  16. import com.qxgmat.data.dao.entity.UserOrder;
  17. import com.qxgmat.data.dao.entity.UserOrderRecord;
  18. import com.qxgmat.data.relation.UserOrderRecordRelationMapper;
  19. import com.qxgmat.data.relation.entity.CourseStudentNumberRelation;
  20. import com.qxgmat.data.relation.entity.MonthNumberRelation;
  21. import org.slf4j.Logger;
  22. import org.slf4j.LoggerFactory;
  23. import org.springframework.stereotype.Service;
  24. import javax.annotation.Resource;
  25. import java.util.*;
  26. @Service
  27. public class UserOrderRecordService extends AbstractService {
  28. private static final Logger logger = LoggerFactory.getLogger(UserOrderRecordService.class);
  29. @Resource
  30. private UserOrderRecordMapper userOrderRecordMapper;
  31. @Resource
  32. private UserOrderRecordRelationMapper userOrderRecordRelationMapper;
  33. /**
  34. * 获取订单的所有记录
  35. * @param userId
  36. * @param orderId
  37. * @return
  38. */
  39. public List<UserOrderRecord> allByUser(Integer userId, Integer orderId){
  40. Example example = new Example(UserOrderRecord.class);
  41. example.and(
  42. example.createCriteria()
  43. .andEqualTo("userId", userId)
  44. .andEqualTo("orderId", orderId)
  45. );
  46. return select(userOrderRecordMapper, example);
  47. }
  48. /**
  49. * 获取订单的所有记录
  50. * @param userId
  51. * @param orderIds
  52. * @return
  53. */
  54. public List<UserOrderRecord> allByUser(Integer userId, Collection orderIds){
  55. Example example = new Example(UserOrderRecord.class);
  56. example.and(
  57. example.createCriteria()
  58. .andEqualTo("userId", userId)
  59. .andIn("orderId", orderIds)
  60. );
  61. return select(userOrderRecordMapper, example);
  62. }
  63. /**
  64. * 获取所有到期的未恢复记录
  65. * @param startTime
  66. * @param endTime
  67. * @return
  68. */
  69. public List<UserOrderRecord> allSuspendExpire(Date startTime, Date endTime){
  70. Example example = new Example(UserOrderRecord.class);
  71. example.and(
  72. example.createCriteria()
  73. .andEqualTo("isSuspend", 1)
  74. .andIsNull("restoreTime")
  75. .andGreaterThanOrEqualTo("suspendTime", startTime)
  76. .andLessThanOrEqualTo("suspendTime", endTime)
  77. );
  78. return select(userOrderRecordMapper, example);
  79. }
  80. /**
  81. * 获取所有使用到期的课程记录
  82. * @param startTime
  83. * @param endTime
  84. * @return
  85. */
  86. public List<UserOrderRecord> allCourseUseExpire(Date startTime, Date endTime){
  87. Example example = new Example(UserOrderRecord.class);
  88. example.and(
  89. example.createCriteria()
  90. .andEqualTo("productType", ProductType.COURSE.key)
  91. .andEqualTo("courseAward", 0)
  92. .andGreaterThanOrEqualTo("useEndTime", startTime)
  93. .andLessThanOrEqualTo("useEndTime", endTime)
  94. );
  95. return select(userOrderRecordMapper, example);
  96. }
  97. /**
  98. * 获取所有开通到期的课程记录
  99. * @param startTime
  100. * @param endTime
  101. * @return
  102. */
  103. public List<UserOrderRecord> allCourseOpenExpire(Date startTime, Date endTime){
  104. Example example = new Example(UserOrderRecord.class);
  105. example.and(
  106. example.createCriteria()
  107. .andEqualTo("productType", ProductType.COURSE.key)
  108. .andEqualTo("isUsed", 0)
  109. .andGreaterThanOrEqualTo("endTime", startTime)
  110. .andLessThanOrEqualTo("endTime", endTime)
  111. );
  112. return select(userOrderRecordMapper, example);
  113. }
  114. /**
  115. * 获取所有到期的课程记录
  116. * @param startTime
  117. * @param endTime
  118. * @return
  119. */
  120. public List<UserOrderRecord> allServiceUseExpire(ServiceKey serviceKey, Date startTime, Date endTime){
  121. Example example = new Example(UserOrderRecord.class);
  122. example.and(
  123. example.createCriteria()
  124. .andEqualTo("productType", ProductType.SERVICE.key)
  125. .andEqualTo("service", serviceKey.key)
  126. .andGreaterThanOrEqualTo("useEndTime", startTime)
  127. .andLessThanOrEqualTo("useEndTime", endTime)
  128. );
  129. return select(userOrderRecordMapper, example);
  130. }
  131. /**
  132. * 获取所有到期的课程记录
  133. * @param startTime
  134. * @param endTime
  135. * @return
  136. */
  137. public List<UserOrderRecord> allServiceOpenExpire(ServiceKey serviceKey, Date startTime, Date endTime){
  138. Example example = new Example(UserOrderRecord.class);
  139. example.and(
  140. example.createCriteria()
  141. .andEqualTo("productType", ProductType.SERVICE.key)
  142. .andEqualTo("service", serviceKey.key)
  143. .andEqualTo("isUsed", 0)
  144. .andGreaterThanOrEqualTo("endTime", startTime)
  145. .andLessThanOrEqualTo("endTime", endTime)
  146. );
  147. return select(userOrderRecordMapper, example);
  148. }
  149. public List<MonthNumberRelation> groupByMonth(Date startTime, Date endTime, ProductType productType, Integer productId, ServiceKey serviceKey){
  150. return userOrderRecordRelationMapper.groupByMonth(startTime, endTime, productType != null ? productType.key : null, productId, serviceKey != null ? serviceKey.key : null);
  151. }
  152. /**
  153. * 列出购买资料的记录
  154. * @param page
  155. * @param size
  156. * @param dataId
  157. * @param isSubscribe
  158. * @return
  159. */
  160. public Page<UserOrderRecord> listWithData(int page, int size, Integer dataId, Boolean isSubscribe){
  161. Example example = new Example(UserOrderRecord.class);
  162. example.and(
  163. example.createCriteria()
  164. .andEqualTo("productType", ProductType.DATA.key)
  165. .andEqualTo("productId", dataId)
  166. );
  167. if(isSubscribe != null){
  168. example.and(
  169. example.createCriteria()
  170. .andEqualTo("isSubscribe", isSubscribe ? 1: 0)
  171. );
  172. }
  173. return select(userOrderRecordMapper, example, page, size);
  174. }
  175. /**
  176. * 列出购买资料的记录
  177. * @param userId
  178. * @param dataIds
  179. * @return
  180. */
  181. public List<UserOrderRecord> listWithUserData(Integer userId, Collection dataIds){
  182. if (dataIds == null || dataIds.size() == 0) return new ArrayList<>();
  183. Example example = new Example(UserOrderRecord.class);
  184. example.and(
  185. example.createCriteria()
  186. .andEqualTo("userId", userId)
  187. .andEqualTo("productType", ProductType.DATA.key)
  188. .andIn("productId", dataIds)
  189. );
  190. return select(userOrderRecordMapper, example);
  191. }
  192. /**
  193. * 列出购买资料的记录
  194. * @param dataId
  195. * @param userIds
  196. * @return
  197. */
  198. public List<UserOrderRecord> listWithDataUser(Integer dataId, Collection userIds){
  199. if (userIds == null || userIds.size() == 0) return new ArrayList<>();
  200. Example example = new Example(UserOrderRecord.class);
  201. example.and(
  202. example.createCriteria()
  203. .andIn("userId", userIds)
  204. .andEqualTo("productType", ProductType.DATA.key)
  205. .andEqualTo("productId", dataId)
  206. );
  207. return select(userOrderRecordMapper, example);
  208. }
  209. /**
  210. * 列出购买资料的记录
  211. * @param userId
  212. * @param dataId
  213. * @return
  214. */
  215. public UserOrderRecord getWithUserData(Integer userId, Integer dataId){
  216. Example example = new Example(UserOrderRecord.class);
  217. example.and(
  218. example.createCriteria()
  219. .andEqualTo("userId", userId)
  220. .andEqualTo("productType", ProductType.DATA.key)
  221. .andEqualTo("productId", dataId)
  222. );
  223. return one(userOrderRecordMapper, example);
  224. }
  225. /**
  226. * 获取小班课程学员列表
  227. * @param page
  228. * @param size
  229. * @param courseId
  230. * @param timeId
  231. * @return
  232. */
  233. public Page<UserOrderRecord> listAdminByOnline(int page, int size, Integer courseId, Integer timeId){
  234. Example example = new Example(UserOrderRecord.class);
  235. if(courseId != null){
  236. example.and(
  237. example.createCriteria()
  238. .andEqualTo("productType", ProductType.COURSE.key)
  239. .andEqualTo("productId", courseId)
  240. );
  241. }
  242. if(timeId != null){
  243. example.and(
  244. example.createCriteria()
  245. .andEqualTo("timeId", timeId)
  246. );
  247. }
  248. return select(userOrderRecordMapper, example, page, size);
  249. }
  250. /**
  251. * 获取小班课程全部学员记录
  252. * @param courseId
  253. * @param timeId
  254. * @return
  255. */
  256. public List<UserOrderRecord> listByOnline(Integer courseId, Integer timeId){
  257. Example example = new Example(UserOrderRecord.class);
  258. if(courseId != null){
  259. example.and(
  260. example.createCriteria()
  261. .andEqualTo("productType", ProductType.COURSE.key)
  262. .andEqualTo("productId", courseId)
  263. );
  264. }
  265. example.and(
  266. example.createCriteria()
  267. .andEqualTo("timeId", timeId)
  268. .andEqualTo("isStop", 0)
  269. );
  270. return select(userOrderRecordMapper, example);
  271. }
  272. /**
  273. * 更改小班课程课时时间段
  274. * @param courseId
  275. * @param timeId
  276. * @param startTime
  277. * @param endTime
  278. */
  279. public void changeStudentTime(Integer courseId, Integer timeId, Date startTime, Date endTime){
  280. Example example = new Example(UserOrderRecord.class);
  281. example.and(
  282. example.createCriteria()
  283. .andEqualTo("productType", ProductType.COURSE.key)
  284. .andEqualTo("productId", courseId)
  285. .andEqualTo("timeId", timeId)
  286. );
  287. update(userOrderRecordMapper, example, UserOrderRecord.builder().useStartTime(startTime).useEndTime(endTime).build());
  288. }
  289. public List<CourseStudentNumberRelation> groupByCourse(Collection ids){
  290. if (ids == null || ids.size() == 0) return new ArrayList<>();
  291. return userOrderRecordRelationMapper.groupByTime(ids);
  292. }
  293. /**
  294. * 获取小班课程记录
  295. * @param userId
  296. * @param courseId
  297. * @param timeId
  298. * @return
  299. */
  300. public UserOrderRecord getByUserAndTime(Integer userId, Integer courseId, Integer timeId){
  301. Example example = new Example(UserOrderRecord.class);
  302. example.and(
  303. example.createCriteria()
  304. .andEqualTo("userId", userId)
  305. .andEqualTo("productType", ProductType.COURSE.key)
  306. .andEqualTo("productId", courseId)
  307. .andEqualTo("timeId", timeId)
  308. .andEqualTo("isStop", 0)
  309. );
  310. return one(userOrderRecordMapper, example);
  311. }
  312. public UserOrderRecord addStudent(UserOrderRecord course){
  313. UserOrderRecord in = getByUserAndTime(course.getUserId(), course.getProductId(), course.getTimeId());
  314. if(in != null){
  315. throw new ParameterException("已添加");
  316. }
  317. return add(course);
  318. }
  319. public Page<UserOrderRecord> listAdmin(int page, int size, Integer orderId, Integer userId, ProductType productType, Integer productId, ServiceKey service, RecordSource source, Boolean needMoney, Boolean needPackage, String order, DirectionStatus direction){
  320. Example example = new Example(UserOrderRecord.class);
  321. if(orderId != null){
  322. example.and(
  323. example.createCriteria()
  324. .andEqualTo("orderId", orderId)
  325. );
  326. }
  327. if(userId != null){
  328. example.and(
  329. example.createCriteria()
  330. .andEqualTo("userId", userId)
  331. );
  332. }
  333. if (source != null){
  334. example.and(
  335. example.createCriteria()
  336. .andEqualTo("source", source.key)
  337. );
  338. }
  339. if(needMoney != null){
  340. example.and(
  341. needMoney ?
  342. example.createCriteria()
  343. .andGreaterThan("orderId", 0) :
  344. example.createCriteria()
  345. .andEqualTo("orderId", 0)
  346. );
  347. }
  348. if(productType != null){
  349. example.and(
  350. example.createCriteria()
  351. .andEqualTo("productType", productType.key)
  352. );
  353. if (productId != null)
  354. example.and(
  355. example.createCriteria()
  356. .andEqualTo("productId", productId)
  357. );
  358. }else if(needPackage != null && !needPackage){
  359. example.and(
  360. example.createCriteria()
  361. .andNotEqualTo("productType", ProductType.COURSE_PACKAGE.key)
  362. );
  363. }
  364. if (service != null)
  365. example.and(
  366. example.createCriteria()
  367. .andEqualTo("service", service.key)
  368. );
  369. if(order == null || order.isEmpty()) order = "id";
  370. switch(direction){
  371. case ASC:
  372. example.orderBy(order).asc();
  373. break;
  374. case DESC:
  375. default:
  376. example.orderBy(order).desc();
  377. }
  378. return select(userOrderRecordMapper, example, page, size);
  379. }
  380. /**
  381. * 获取已购买记录
  382. * @param order
  383. * @param direction
  384. * @return
  385. */
  386. public Page<UserOrderRecord> list(int page, int size, Integer userId, ProductType productType, Integer productId, ServiceKey service, Boolean isUsed, Boolean isExpire, Boolean filterChildren, String order, DirectionStatus direction){
  387. Example example = new Example(UserOrderRecord.class);
  388. example.and(
  389. example.createCriteria()
  390. .andEqualTo("userId", userId)
  391. .andEqualTo("isStop", 0)
  392. .andNotEqualTo("productType", ProductType.COURSE_PACKAGE.key)
  393. );
  394. if(isUsed != null){
  395. example.and(
  396. example.createCriteria()
  397. .andEqualTo("isUsed", isUsed ? 1 : 0)
  398. );
  399. }
  400. if(isExpire != null){
  401. Date now = new Date();
  402. example.and(
  403. isExpire ? example.createCriteria().
  404. andLessThan("endTime", now)
  405. :
  406. example.createCriteria()
  407. .andLessThanOrEqualTo("startTime", now)
  408. .andGreaterThan("endTime", now)
  409. );
  410. }
  411. if (filterChildren != null && filterChildren)
  412. example.and(
  413. example.createCriteria().
  414. andEqualTo("parentId", 0)
  415. );
  416. if(productType != null) {
  417. example.and(
  418. example.createCriteria()
  419. .andEqualTo("productType", productType.key)
  420. );
  421. if (productId != null)
  422. example.and(
  423. example.createCriteria()
  424. .andEqualTo("productId", productId)
  425. );
  426. }
  427. if (service != null)
  428. example.and(
  429. example.createCriteria()
  430. .andEqualTo("service", service.key)
  431. );
  432. example.and(
  433. example.createCriteria()
  434. .andEqualTo("isStop", 0)
  435. );
  436. if(order == null || order.isEmpty()) order = "id";
  437. switch(direction){
  438. case ASC:
  439. example.orderBy(order).asc();
  440. break;
  441. case DESC:
  442. default:
  443. example.orderBy(order).desc();
  444. }
  445. return select(userOrderRecordMapper, example, page, size);
  446. }
  447. /**
  448. * 判断是否有资料权限
  449. * @param userId
  450. * @param dataId
  451. * @return
  452. */
  453. public boolean hasData(Integer userId, Integer dataId){
  454. Example example = new Example(UserOrderRecord.class);
  455. example.and(
  456. example.createCriteria()
  457. .andEqualTo("userId", userId)
  458. .andEqualTo("productType", ProductType.DATA.key)
  459. .andEqualTo("productId", dataId)
  460. .andEqualTo("isStop", 0)
  461. );
  462. UserOrderRecord service = one(userOrderRecordMapper, example);
  463. return service != null;
  464. }
  465. /**
  466. * 获取未开通的服务记录
  467. * @param userId
  468. * @param key
  469. * @return
  470. */
  471. public UserOrderRecord getUnUseService(Integer userId, ServiceKey key){
  472. Example example = new Example(UserOrderRecord.class);
  473. example.and(
  474. example.createCriteria()
  475. .andEqualTo("userId", userId)
  476. .andEqualTo("service", key.key)
  477. .andLessThanOrEqualTo("startTime", new Date())
  478. .andGreaterThan("endTime", new Date())
  479. .andEqualTo("isUsed", 0)
  480. .andEqualTo("isStop", 0)
  481. );
  482. example.orderBy("startTime").asc();
  483. UserOrderRecord record = one(userOrderRecordMapper, example);
  484. return record;
  485. }
  486. /**
  487. * 列出用户服务记录
  488. * @param page
  489. * @param size
  490. * @param service
  491. * @param param
  492. * @param userId
  493. * @return
  494. */
  495. public Page<UserOrderRecord> listWithServiceAdmin(int page, int size, ServiceKey service, String param, Integer userId, String order, DirectionStatus direction){
  496. Example example = new Example(UserOrderRecord.class);
  497. example.and(
  498. example.createCriteria().andEqualTo("productType", ProductType.SERVICE.key)
  499. );
  500. if (service != null){
  501. example.and(
  502. example.createCriteria().andEqualTo("service", service.key)
  503. );
  504. if (param != null){
  505. example.and(
  506. example.createCriteria().andEqualTo("param", param)
  507. );
  508. }
  509. }
  510. if (userId != null){
  511. example.and(
  512. example.createCriteria().andEqualTo("userId", userId)
  513. );
  514. }
  515. if(order == null || order.isEmpty()) order = "id";
  516. switch(direction){
  517. case ASC:
  518. example.orderBy(order).asc();
  519. break;
  520. case DESC:
  521. default:
  522. example.orderBy(order).desc();
  523. }
  524. return select(userOrderRecordMapper, example, page, size);
  525. }
  526. /**
  527. * 列出用户学习记录
  528. * @param page
  529. * @param size
  530. * @param courseId
  531. * @param userId
  532. * @return
  533. */
  534. public Page<UserOrderRecord> listWithStudentAdmin(int page, int size, Integer courseId, Integer userId){
  535. Example example = new Example(UserOrderRecord.class);
  536. example.and(
  537. example.createCriteria().andEqualTo("productType", ProductType.COURSE.key)
  538. );
  539. if (courseId != null){
  540. example.and(
  541. example.createCriteria().andEqualTo("productId", courseId)
  542. );
  543. }
  544. if (userId != null){
  545. example.and(
  546. example.createCriteria().andEqualTo("userId", userId)
  547. );
  548. }
  549. return select(userOrderRecordMapper, example, page, size);
  550. }
  551. private Map<String, String> adminMap = new HashMap<String, String>(){{
  552. put("", "uor");
  553. }};
  554. /**
  555. * 列出用户学习记录
  556. * @param page
  557. * @param size
  558. * @param courseId
  559. * @param userId
  560. * @return
  561. */
  562. public Page<UserOrderRecord> listWithStudyAdmin(int page, int size, String[] modules, Integer structId, Integer courseId, Integer userId, String teacher, String order, DirectionStatus direction){
  563. // todo teacher
  564. if(order == null || order.isEmpty()){
  565. order = "id";
  566. }
  567. if(adminMap.containsKey(order)){
  568. order = adminMap.get(order)+".`"+Tools.underscoreName(order)+"`";
  569. }else{
  570. order = adminMap.get("")+".`"+Tools.underscoreName(order)+"`";
  571. }
  572. if (direction == null){
  573. direction = DirectionStatus.DESC;
  574. }
  575. String finalOrder = order;
  576. DirectionStatus finalDirection = direction;
  577. Page<UserOrderRecord> p = page(
  578. ()-> userOrderRecordRelationMapper.listWithStudyAdmin(modules, structId, courseId, userId, teacher, finalOrder, finalDirection.key)
  579. , page, size);
  580. Collection ids = Transform.getIds(p, UserOrderRecord.class, "id");
  581. Transform.replace(p, select(ids), UserOrderRecord.class, "id");
  582. return p;
  583. }
  584. /**
  585. * 列出用户学习记录
  586. * @param page
  587. * @param size
  588. * @param courseId
  589. * @param userId
  590. * @return
  591. */
  592. public Page<UserOrderRecord> listWithVs(int page, int size, VsCourseType vsType, Integer courseId, Integer userId, String order, DirectionStatus direction){
  593. if(order == null || order.isEmpty()){
  594. order = "id";
  595. }
  596. if(adminMap.containsKey(order)){
  597. order = adminMap.get(order)+".`"+Tools.underscoreName(order)+"`";
  598. }else{
  599. order = adminMap.get("")+".`"+Tools.underscoreName(order)+"`";
  600. }
  601. if (direction == null){
  602. direction = DirectionStatus.DESC;
  603. }
  604. String finalOrder = order;
  605. DirectionStatus finalDirection = direction;
  606. Page<UserOrderRecord> p = page(
  607. ()-> userOrderRecordRelationMapper.listWithVs(vsType != null ? vsType.key : null, courseId, userId, finalOrder, finalDirection.key)
  608. , page, size);
  609. Collection ids = Transform.getIds(p, UserOrderRecord.class, "id");
  610. Transform.replace(p, select(ids), UserOrderRecord.class, "id");
  611. return p;
  612. }
  613. /**
  614. * 列出用户购课记录
  615. * @param page
  616. * @param size
  617. * @param userId
  618. * @return
  619. */
  620. public Page<UserOrderRecord> listWithCourse(int page, int size, Integer userId, String[] modules, Boolean isUsed, Boolean isEnd, String order, DirectionStatus direction){
  621. if(order == null || order.isEmpty()){
  622. order = "id";
  623. }
  624. if (direction == null){
  625. direction = DirectionStatus.DESC;
  626. }
  627. String finalOrder = order;
  628. DirectionStatus finalDirection = direction;
  629. Date ltUseEndTime = null;
  630. Date gtUseEndTime = null;
  631. if (isEnd != null){
  632. // 是否结束,根据当前时间进行sql处理
  633. if (isEnd){
  634. ltUseEndTime = new Date();
  635. }else{
  636. gtUseEndTime = new Date();
  637. }
  638. }
  639. Date finalLtUseEndTime = ltUseEndTime;
  640. Date finalGtUseEndTime = gtUseEndTime;
  641. Page<UserOrderRecord> p = page(
  642. ()-> userOrderRecordRelationMapper.listWithCourse(userId, modules, isUsed, finalLtUseEndTime, finalGtUseEndTime, finalOrder, finalDirection.key)
  643. , page, size);
  644. Collection ids = Transform.getIds(p, UserOrderRecord.class, "id");
  645. Transform.replace(p, select(ids), UserOrderRecord.class, "id");
  646. return p;
  647. }
  648. /**
  649. * 获取最大vs课程编号
  650. * @param userId
  651. * @return
  652. */
  653. public Integer maxVsNo(Integer userId){
  654. Example example = new Example(UserOrderRecord.class);
  655. example.and(
  656. example.createCriteria()
  657. .andEqualTo("userId", userId)
  658. .andEqualTo("productType", ProductType.COURSE.key)
  659. );
  660. example.orderBy("vsNo").desc();
  661. UserOrderRecord record = one(userOrderRecordMapper, example);
  662. return record != null ? record.getVsNo() : 0;
  663. }
  664. public UserOrderRecord add(UserOrderRecord record){
  665. int result = insert(userOrderRecordMapper, record);
  666. record = one(userOrderRecordMapper, record.getId());
  667. if(record == null){
  668. throw new SystemException("服务记录添加失败");
  669. }
  670. return record;
  671. }
  672. public UserOrderRecord edit(UserOrderRecord service){
  673. UserOrderRecord in = one(userOrderRecordMapper, service.getId());
  674. if(in == null){
  675. throw new ParameterException("服务记录不存在");
  676. }
  677. int result = update(userOrderRecordMapper, service);
  678. return service;
  679. }
  680. public boolean delete(Number id){
  681. UserOrderRecord in = one(userOrderRecordMapper, id);
  682. if(in == null){
  683. throw new ParameterException("服务记录不存在");
  684. }
  685. int result = delete(userOrderRecordMapper, id);
  686. return result > 0;
  687. }
  688. public UserOrderRecord get(Number id){
  689. UserOrderRecord in = one(userOrderRecordMapper, id);
  690. if(in == null){
  691. throw new ParameterException("服务记录不存在");
  692. }
  693. return in;
  694. }
  695. public Page<UserOrderRecord> select(int page, int pageSize){
  696. return select(userOrderRecordMapper, page, pageSize);
  697. }
  698. public Page<UserOrderRecord> select(Integer[] ids){
  699. return page(()->select(userOrderRecordMapper, ids), 1, ids.length);
  700. }
  701. public List<UserOrderRecord> select(Collection ids){
  702. return select(userOrderRecordMapper, ids);
  703. }
  704. }