UserSentenceProgressService.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package com.qxgmat.service.inline;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.AbstractService;
  4. import com.nuliji.tools.exception.ParameterException;
  5. import com.nuliji.tools.exception.SystemException;
  6. import com.nuliji.tools.mybatis.Example;
  7. import com.qxgmat.data.dao.UserSentenceProgressMapper;
  8. import com.qxgmat.data.dao.entity.UserSentenceProgress;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import javax.annotation.Resource;
  14. import java.util.Collection;
  15. import java.util.List;
  16. @Service
  17. public class UserSentenceProgressService extends AbstractService {
  18. private static final Logger logger = LoggerFactory.getLogger(UserSentenceProgressService.class);
  19. @Resource
  20. private UserSentenceProgressMapper userSentenceProgressMapper;
  21. /**
  22. * 更新长难句文章进度
  23. * @param userId
  24. * @param chapter
  25. * @param part
  26. * @param progress
  27. * @return
  28. */
  29. @Transactional
  30. public UserSentenceProgress updateProgress(Integer userId, Integer chapter, Integer part, Integer progress){
  31. Example example = new Example(UserSentenceProgress.class);
  32. example.and(
  33. example.createCriteria()
  34. .andEqualTo("userId", userId)
  35. .andEqualTo("chapter", chapter)
  36. .andEqualTo("part", part)
  37. );
  38. UserSentenceProgress entity;
  39. UserSentenceProgress in = one(userSentenceProgressMapper, example);
  40. if (in != null){
  41. if (in.getProgress() <= progress) {
  42. in.setProgress(progress);
  43. entity = edit(in);
  44. }else if(in.getProgress() == 100){
  45. in.setProgress(progress);
  46. in.setTimes(in.getTimes() + 1);
  47. entity = edit(in);
  48. return entity;
  49. }else{
  50. entity = in;
  51. // 不用更新进度
  52. return entity;
  53. }
  54. }else{
  55. entity = add(UserSentenceProgress.builder()
  56. .userId(userId)
  57. .chapter(chapter)
  58. .part(part)
  59. .times(0)
  60. .progress(progress).build());
  61. }
  62. // 计算本章节的总体进度
  63. // List<UserSentenceProgress> list = listByChapter(userId, chapter);
  64. // Integer total = 0;
  65. // for (UserSentenceProgress p: list) {
  66. // total += p.getProgress();
  67. // }
  68. // updateTotalProgress(userId, chapter, (total * 100) / (maxPart * 100));
  69. return entity;
  70. }
  71. /**
  72. * 更新单个章节总体进度
  73. * @param userId
  74. * @param chapter
  75. * @param progress
  76. */
  77. private void updateTotalProgress(Integer userId, Integer chapter, Integer progress){
  78. Example example = new Example(UserSentenceProgress.class);
  79. example.and(
  80. example.createCriteria()
  81. .andEqualTo("userId", userId)
  82. .andEqualTo("chapter", chapter)
  83. .andEqualTo("part", 0)
  84. );
  85. UserSentenceProgress in = one(userSentenceProgressMapper, example);
  86. if (in != null){
  87. if (in.getProgress() <= progress){
  88. in.setProgress(progress);
  89. edit(in);
  90. }else if(in.getProgress() == 100){
  91. in.setProgress(progress);
  92. in.setTimes(in.getTimes() + 1);
  93. edit(in);
  94. }
  95. }else{
  96. add(UserSentenceProgress.builder()
  97. .userId(userId)
  98. .chapter(chapter)
  99. .part(0)
  100. .times(0)
  101. .progress(progress).build());
  102. }
  103. }
  104. /**
  105. * 获取用户所有章节的所有进度
  106. * @param userId
  107. * @return
  108. */
  109. public List<UserSentenceProgress> all(Integer userId){
  110. Example example = new Example(UserSentenceProgress.class);
  111. example.and(
  112. example.createCriteria()
  113. .andEqualTo("userId", userId)
  114. .andNotEqualTo("part", 0)
  115. );
  116. return select(userSentenceProgressMapper, example);
  117. }
  118. /**
  119. * 获取用户单个章节的所有进度
  120. * @param userId
  121. * @param chapter
  122. * @return
  123. */
  124. public List<UserSentenceProgress> listByChapter(Integer userId, Integer chapter){
  125. Example example = new Example(UserSentenceProgress.class);
  126. example.and(
  127. example.createCriteria()
  128. .andEqualTo("userId", userId)
  129. .andEqualTo("chapter", chapter)
  130. .andNotEqualTo("part", 0)
  131. );
  132. return select(userSentenceProgressMapper, example);
  133. }
  134. /**
  135. * 获取用户所有章节进度:试用情况下
  136. * @param userId
  137. * @return
  138. */
  139. public List<UserSentenceProgress> listAllByTrail(Integer userId){
  140. Example example = new Example(UserSentenceProgress.class);
  141. example.and(
  142. example.createCriteria()
  143. .andEqualTo("userId", userId)
  144. .andNotEqualTo("part", 0)
  145. );
  146. return select(userSentenceProgressMapper, example);
  147. }
  148. /**
  149. * 获取用户所有章节总体进度
  150. * @param userId
  151. * @return
  152. */
  153. public List<UserSentenceProgress> listTotal(Integer userId){
  154. Example example = new Example(UserSentenceProgress.class);
  155. example.and(
  156. example.createCriteria()
  157. .andEqualTo("userId", userId)
  158. .andEqualTo("part", 0)
  159. );
  160. return select(userSentenceProgressMapper, example);
  161. }
  162. /**
  163. * 获取单篇文章进度
  164. * @param userId
  165. * @param chapter
  166. * @param part
  167. * @return
  168. */
  169. public UserSentenceProgress get(Integer userId, Integer chapter, Integer part){
  170. Example example = new Example(UserSentenceProgress.class);
  171. example.and(
  172. example.createCriteria()
  173. .andEqualTo("userId", userId)
  174. .andEqualTo("chapter", chapter)
  175. .andEqualTo("part", part)
  176. );
  177. return one(userSentenceProgressMapper, example);
  178. }
  179. public UserSentenceProgress add(UserSentenceProgress process){
  180. int result = insert(userSentenceProgressMapper, process);
  181. process = one(userSentenceProgressMapper, process.getId());
  182. if(process == null){
  183. throw new SystemException("进度添加失败");
  184. }
  185. return process;
  186. }
  187. public UserSentenceProgress edit(UserSentenceProgress process){
  188. UserSentenceProgress in = one(userSentenceProgressMapper, process.getId());
  189. if(in == null){
  190. throw new ParameterException("进度不存在");
  191. }
  192. int result = update(userSentenceProgressMapper, process);
  193. return process;
  194. }
  195. public boolean delete(Number id){
  196. UserSentenceProgress in = one(userSentenceProgressMapper, id);
  197. if(in == null){
  198. throw new ParameterException("进度不存在");
  199. }
  200. int result = delete(userSentenceProgressMapper, id);
  201. return result > 0;
  202. }
  203. public UserSentenceProgress get(Number id){
  204. UserSentenceProgress in = one(userSentenceProgressMapper, id);
  205. if(in == null){
  206. throw new ParameterException("进度不存在");
  207. }
  208. return in;
  209. }
  210. public Page<UserSentenceProgress> select(int page, int pageSize){
  211. return select(userSentenceProgressMapper, page, pageSize);
  212. }
  213. public Page<UserSentenceProgress> select(Integer[] ids){
  214. return page(()->select(userSentenceProgressMapper, ids), 1, ids.length);
  215. }
  216. public List<UserSentenceProgress> select(Collection ids){
  217. return select(userSentenceProgressMapper, ids);
  218. }
  219. }