PracticeGroupController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. package com.ym.mec.student.controller;
  2. import com.ym.mec.auth.api.client.SysUserFeignService;
  3. import com.ym.mec.auth.api.entity.SysUser;
  4. import com.ym.mec.biz.dal.dao.*;
  5. import com.ym.mec.biz.dal.dto.PracticeCourseDto;
  6. import com.ym.mec.biz.dal.dto.PracticeGroupBuyDto;
  7. import com.ym.mec.biz.dal.entity.*;
  8. import com.ym.mec.biz.dal.enums.GroupStatusEnum;
  9. import com.ym.mec.biz.dal.enums.GroupType;
  10. import com.ym.mec.biz.dal.enums.MessageTypeEnum;
  11. import com.ym.mec.biz.dal.enums.PracticeGroupType;
  12. import com.ym.mec.biz.service.PracticeGroupService;
  13. import com.ym.mec.biz.service.SysConfigService;
  14. import com.ym.mec.biz.service.SysMessageService;
  15. import com.ym.mec.common.controller.BaseController;
  16. import com.ym.mec.common.entity.HttpResponseResult;
  17. import com.ym.mec.common.exception.BizException;
  18. import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
  19. import com.ym.mec.util.date.DateUtil;
  20. import com.ym.mec.util.http.HttpUtil;
  21. import com.yonge.log.model.AuditLogAnnotation;
  22. import io.swagger.annotations.Api;
  23. import io.swagger.annotations.ApiOperation;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.http.HttpStatus;
  26. import org.springframework.util.CollectionUtils;
  27. import org.springframework.web.bind.annotation.*;
  28. import java.time.LocalTime;
  29. import java.time.format.DateTimeFormatter;
  30. import java.util.*;
  31. import java.util.stream.Collectors;
  32. /**
  33. * @Author Joburgess
  34. * @Date 2020/1/31
  35. */
  36. @RequestMapping("practiceGroup")
  37. @Api(tags = "陪练课服务")
  38. @RestController
  39. public class PracticeGroupController extends BaseController {
  40. @Autowired
  41. private PracticeGroupService practiceGroupService;
  42. @Autowired
  43. private SysUserFeignService sysUserFeignService;
  44. List<Integer> excludeOrganIds=new ArrayList<>(Arrays.asList(new Integer[]{36}));
  45. @Autowired
  46. private SysMessageService sysMessageService;
  47. @Autowired
  48. private PracticeGroupDao practiceGroupDao;
  49. @Autowired
  50. private ClassGroupDao classGroupDao;
  51. @Autowired
  52. private SysConfigDao sysConfigDao;
  53. @Autowired
  54. private CourseScheduleEvaluateDao courseScheduleEvaluateDao;
  55. @Autowired
  56. private StudentDao studentDao;
  57. // private static final Set<Integer> ENABLE_APPLY_ORGANIDS = new HashSet<>(Arrays.asList(new Integer[]{28,34,37}));
  58. @ApiOperation("获取学生的陪练课")
  59. @GetMapping(value = "/findUserPracticeCourses")
  60. public Object findUserPracticeCourses(){
  61. SysUser sysUser = sysUserFeignService.queryUserInfo();
  62. if (sysUser == null) {
  63. return failed(HttpStatus.FORBIDDEN, "请登录");
  64. }
  65. return succeed(practiceGroupService.findUserPracticeCourses(sysUser.getId()));
  66. }
  67. @ApiOperation("检测用户是否能够申请免费陪练课")
  68. @GetMapping(value = "/checkCanApplyFreePracticeGroup")
  69. private HttpResponseResult checkCanApplyFreePracticeGroup(){
  70. SysUser sysUser = sysUserFeignService.queryUserInfo();
  71. if (sysUser == null) {
  72. return failed(HttpStatus.FORBIDDEN, "请登录");
  73. }
  74. Map<String,Object> result=practiceGroupService.checkCanApplyFreePracticeGroup(sysUser.getId());
  75. // if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
  76. Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(sysUser.getId());
  77. result.put("canApply", applyTimes < 1 ? 1 : 0);
  78. // }else{
  79. // result.put("canApply", 0);
  80. // }
  81. result.put("organId", sysUser.getOrganId());
  82. return succeed(result);
  83. }
  84. @ApiOperation("获取陪练课预约参数")
  85. @GetMapping(value = "/getPracticeApplyParams")
  86. public Object getPracticeApplyParams(){
  87. SysUser sysUser = sysUserFeignService.queryUserInfo();
  88. if (sysUser == null) {
  89. return failed(HttpStatus.FORBIDDEN, "请登录");
  90. }
  91. Map<String,Object> result=practiceGroupService.getPracticeApplyParams(sysUser.getId());
  92. // if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
  93. Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(sysUser.getId());
  94. result.put("enableApply", applyTimes < 1 ? 1 : 0);
  95. // }else{
  96. // result.put("enableApply", 0);
  97. // }
  98. return succeed(result);
  99. }
  100. @ApiOperation("获取可以预约的教师")
  101. @GetMapping(value = "/getEnableApplyTeachers")
  102. public Object getEnableApplyTeachers(Integer subjectId){
  103. SysUser sysUser = sysUserFeignService.queryUserInfo();
  104. if (sysUser == null) {
  105. return failed(HttpStatus.FORBIDDEN, "请登录");
  106. }
  107. return succeed(practiceGroupService.getEnableApplyTeachers(sysUser.getId(), subjectId));
  108. }
  109. @ApiOperation("获取可以预约的教师--付费")
  110. @GetMapping(value = "/getEnableApplyTeachersWithPay")
  111. public Object getEnableApplyTeachersWithPay(Integer subjectId){
  112. SysUser sysUser = sysUserFeignService.queryUserInfo();
  113. if (sysUser == null) {
  114. return failed(HttpStatus.FORBIDDEN, "请登录");
  115. }
  116. return succeed(practiceGroupService.getEnableApplyTeachersWithPay(sysUser.getId(), subjectId));
  117. }
  118. @ApiOperation("获取指定学员所在分部下的教师空闲时间")
  119. @GetMapping(value = "/getTeacherFreeTimes")
  120. public Object getTeacherFreeTimes(Integer teacherId, Date firstClassTime){
  121. SysUser sysUser = sysUserFeignService.queryUserInfo();
  122. if (sysUser == null) {
  123. return failed(HttpStatus.FORBIDDEN, "请登录");
  124. }
  125. return succeed(practiceGroupService.getTeacherFreeTimes(sysUser.getId(),teacherId,firstClassTime));
  126. }
  127. @ApiOperation("获取指定学员所在分部下的教师空闲时间")
  128. @GetMapping(value = "/getTeachersFreeTimes")
  129. public Object getTeachersFreeTimes(Integer subjectId, Date firstClassTime){
  130. SysUser sysUser = sysUserFeignService.queryUserInfo();
  131. if (sysUser == null) {
  132. return failed(HttpStatus.FORBIDDEN, "请登录");
  133. }
  134. return succeed(practiceGroupService.getTeachersFreeTimes(sysUser.getId(),subjectId,firstClassTime));
  135. }
  136. @ApiOperation("陪练课预约")
  137. @PostMapping(value = "/practiceApply")
  138. @AuditLogAnnotation(operateName = "陪练课预约")
  139. public Object practiceApply(PracticeGroup practiceGroup){
  140. SysUser sysUser = sysUserFeignService.queryUserInfo();
  141. if (sysUser == null) {
  142. return failed(HttpStatus.FORBIDDEN, "请登录");
  143. }
  144. if(excludeOrganIds.contains(sysUser.getOrganId())){
  145. throw new BizException("请联系老师确认您的所属分部");
  146. }
  147. // if(!ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
  148. // throw new BizException("陪练课预约活动已结束");
  149. // }
  150. practiceGroup.setStudentId(sysUser.getId());
  151. return succeed(practiceGroupService.practiceApply(practiceGroup));
  152. }
  153. @ApiOperation("获取陪练课预约参数——付费")
  154. @GetMapping(value = "/getPayPracticeApplyParams")
  155. public Object getPayPracticeApplyParams(Integer organId){
  156. SysUser sysUser = sysUserFeignService.queryUserInfo();
  157. if (sysUser == null) {
  158. return failed(HttpStatus.FORBIDDEN, "请登录");
  159. }
  160. return succeed(practiceGroupService.getPayPracticeApplyParams(sysUser.getId(), Objects.nonNull(organId)?organId:sysUser.getOrganId()));
  161. }
  162. @ApiOperation("获取指定教师的空闲时间——付费")
  163. @GetMapping(value = "/getPayPracticeTeacherFreeTimes")
  164. public Object getPayPracticeTeacherFreeTimes(Integer teacherId,Integer buyMonths, boolean renew, Long groupId, PracticeGroupType type){
  165. SysUser sysUser = sysUserFeignService.queryUserInfo();
  166. if (sysUser == null) {
  167. return failed(HttpStatus.FORBIDDEN, "请登录");
  168. }
  169. Map payPracticeTeacherFreeTimes = practiceGroupService.getPayPracticeTeacherFreeTimes(sysUser.getId(),teacherId, buyMonths,renew,groupId);
  170. if(Objects.nonNull(type)&&PracticeGroupType.COME_ON_PACKAGE.equals(type)){
  171. Map<Integer, List<String>> weekNumApplyTimesMap = (Map<Integer, List<String>>) payPracticeTeacherFreeTimes.get("teacherFreeDays");
  172. for (Map.Entry<Integer, List<String>> weekNumApplyTimesMapEntry : weekNumApplyTimesMap.entrySet()) {
  173. DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
  174. Iterator<String> iterator = weekNumApplyTimesMapEntry.getValue().iterator();
  175. while (iterator.hasNext()){
  176. String timeStr = iterator.next();
  177. if("23:30:00".equals(timeStr)){
  178. iterator.remove();
  179. continue;
  180. }
  181. LocalTime time = LocalTime.parse(timeStr, dtf);
  182. LocalTime nextTime = time.plusMinutes(30);
  183. if(weekNumApplyTimesMapEntry.getValue().contains(nextTime.format(DateUtil.timeFormatter))){
  184. continue;
  185. }
  186. iterator.remove();
  187. }
  188. }
  189. Iterator<Map.Entry<Integer, List<String>>> iterator = weekNumApplyTimesMap.entrySet().iterator();
  190. while (iterator.hasNext()) {
  191. Map.Entry<Integer, List<String>> next = iterator.next();
  192. if (CollectionUtils.isEmpty(next.getValue())) {
  193. iterator.remove();
  194. }
  195. }
  196. }
  197. return succeed(payPracticeTeacherFreeTimes);
  198. }
  199. @ApiOperation("获取学生上一次的购买信息--付费")
  200. @GetMapping(value = "/findUserLatestPracticeGroup")
  201. public HttpResponseResult findUserLatestPracticeGroup(Long groupId){
  202. SysUser sysUser = sysUserFeignService.queryUserInfo();
  203. if (sysUser == null) {
  204. return failed(HttpStatus.FORBIDDEN, "请登录");
  205. }
  206. return succeed(practiceGroupService.findUserLatestPracticeGroup(sysUser.getId(),groupId));
  207. }
  208. @ApiOperation("检测学生是否是新用户")
  209. @GetMapping(value = "/isNewStudent")
  210. public HttpResponseResult isNewStudent(){
  211. SysUser sysUser = sysUserFeignService.queryUserInfo();
  212. if (sysUser == null) {
  213. return failed(HttpStatus.FORBIDDEN, "请登录");
  214. }
  215. int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(sysUser.getId(),"2021-03-09 00:00:00");
  216. Student student = studentDao.get(sysUser.getId());
  217. Map<String, Integer> result=new HashMap<>();
  218. result.put("organId", sysUser.getOrganId());
  219. result.put("isNewStudent", studentExitChargePractices<=0?0:1);
  220. List<PracticeGroup> userStatusPracticeGroups = practiceGroupDao.findUserStatusPracticeGroups(sysUser.getId(), null, PracticeGroupType.COME_ON_PACKAGE);
  221. long normalGroupNum = userStatusPracticeGroups.stream().filter(p -> GroupStatusEnum.NORMAL.equals(p.getGroupStatus())).count();
  222. result.put("comeOnPackage", 1==student.getComeOnPackage()&&normalGroupNum<=0?1:0);
  223. return succeed(result);
  224. }
  225. @ApiOperation("陪练课购买")
  226. @PostMapping(value = "/buyPracticeGroup")
  227. @AuditLogAnnotation(operateName = "陪练课购买")
  228. public HttpResponseResult buyPracticeGroup(@RequestBody PracticeGroupBuyDto practiceGroupBuyParams){
  229. SysUser sysUser = sysUserFeignService.queryUserInfo();
  230. if (sysUser == null) {
  231. return failed(HttpStatus.FORBIDDEN, "请登录");
  232. }
  233. if(excludeOrganIds.contains(sysUser.getOrganId())){
  234. throw new BizException("请联系老师确认您的所属分部");
  235. }
  236. practiceGroupBuyParams.setStudentId(sysUser.getId());
  237. if(Objects.isNull(practiceGroupBuyParams.getType())||PracticeGroupType.CHARGE.equals(practiceGroupBuyParams.getType())){
  238. return practiceGroupService.buyPracticeGroup(practiceGroupBuyParams);
  239. }else{
  240. return practiceGroupService.createPackagePracticeGroup(practiceGroupBuyParams);
  241. }
  242. }
  243. @ApiOperation("获取用户历史购买的陪练课")
  244. @GetMapping(value = "/findUserHistoryBuyPracticeGroups")
  245. public HttpResponseResult findUserHistoryBuyPracticeGroups(Long groupId, PracticeGroupType type){
  246. SysUser sysUser = sysUserFeignService.queryUserInfo();
  247. if (sysUser == null) {
  248. return failed(HttpStatus.FORBIDDEN, "请登录");
  249. }
  250. return succeed(practiceGroupService.findUserHistoryBuyPracticeGroups(sysUser.getId(), groupId, type));
  251. }
  252. @ApiOperation("查询订单信息")
  253. @GetMapping(value = "/queryOrderInfo")
  254. public HttpResponseResult queryOrderInfo(String orderNo){
  255. return succeed(practiceGroupService.queryOrderInfo(orderNo));
  256. }
  257. @ApiOperation("重新支付")
  258. @PostMapping(value = "/repay")
  259. @AuditLogAnnotation(operateName = "重新支付")
  260. public HttpResponseResult repay(Integer groupId, boolean useBalancePayment) throws Exception {
  261. SysUser sysUser = sysUserFeignService.queryUserInfo();
  262. if (sysUser == null) {
  263. return failed(HttpStatus.FORBIDDEN, "请登录");
  264. }
  265. return practiceGroupService.repay(sysUser.getId(),groupId,useBalancePayment);
  266. }
  267. @ApiOperation("免费陪练课定点推送")
  268. @GetMapping(value = "/freePush")
  269. public HttpResponseResult freePush(Integer userId, String pushType){
  270. SysUser sysUser = sysUserFeignService.queryUserInfo();
  271. if (sysUser == null) {
  272. return failed(HttpStatus.FORBIDDEN, "请登录");
  273. }
  274. String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
  275. String pushUrl = baseApiUrl + "/#/auditionbanner/id";
  276. // String smsUrl = baseApiUrl + "/#/transfer?url=" + baseApiUrl + "/#/auditionbanner/id";
  277. //
  278. // SysUser student = sysUserFeignService.queryUserById(userId);
  279. if(pushType.equals("ALL")||pushType.equals("JIGUANG")){
  280. Map<Integer, String> userMap = new HashMap<>();
  281. userMap.put(userId, userId.toString());
  282. sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_FREE_PRACTICE_APPLY_PUSH,
  283. userMap, null, 0, "5?" + pushUrl, "STUDENT");
  284. }
  285. // if(pushType.equals("ALL")||pushType.equals("SMS")){
  286. // Map<Integer, String> userPhoneMap = new HashMap<>();
  287. // userPhoneMap.put(userId, student.getPhone());
  288. // sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.FREE_PRACTICE_APPLY_PUSH,
  289. // userPhoneMap, null, 0, null, "STUDENT", HttpUtil.getSortUrl(smsUrl));
  290. // }
  291. return succeed();
  292. }
  293. @ApiOperation("陪练课完成报告推送")
  294. @GetMapping(value = "/reportPush")
  295. public HttpResponseResult reportPush(Integer userId, String pushType){
  296. SysUser sysUser = sysUserFeignService.queryUserInfo();
  297. if (sysUser == null) {
  298. return failed(HttpStatus.FORBIDDEN, "请登录");
  299. }
  300. String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
  301. PracticeGroup userFreePracticeGroup = practiceGroupDao.getUserFreePracticeGroup(userId);
  302. ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(userFreePracticeGroup.getId().toString(), GroupType.PRACTICE.getCode());
  303. CourseScheduleEvaluate courseScheduleEvaluate = courseScheduleEvaluateDao.findByClassGroupId(classGroup.getId());
  304. if(Objects.isNull(courseScheduleEvaluate)){
  305. return failed("未生成课程报告");
  306. }
  307. String pushUrl = baseApiUrl + "/#/reportDetail?classGroupId=" + classGroup.getId();
  308. String smsUrl = baseApiUrl + "/#/transfer?url=" + baseApiUrl + "&hash=reportDetail&classGroupId=" + classGroup.getId();
  309. SysUser student = sysUserFeignService.queryUserById(userId);
  310. if(pushType.equals("ALL")||pushType.equals("JIGUANG")){
  311. Map<Integer, String> userMap = new HashMap<>();
  312. userMap.put(userId, userId.toString());
  313. sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
  314. userMap, null, 0, "5?" + pushUrl, "STUDENT", pushUrl);
  315. }
  316. if(pushType.equals("ALL")||pushType.equals("SMS")){
  317. Map<Integer, String> userPhoneMap = new HashMap<>();
  318. userPhoneMap.put(userId, student.getPhone());
  319. sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
  320. userPhoneMap, null, 0, null, "STUDENT", HttpUtil.getSortUrl(smsUrl));
  321. }
  322. return succeed();
  323. }
  324. @ApiOperation("陪练课完成报告推送")
  325. @GetMapping(value = "/pushStudyReport")
  326. public HttpResponseResult pushStudyReport(Date expiredDate, String pushType){
  327. SysUser sysUser = sysUserFeignService.queryUserInfo();
  328. if (sysUser == null) {
  329. return failed(HttpStatus.FORBIDDEN, "请登录");
  330. }
  331. practiceGroupService.pushStudyReport(expiredDate,pushType);
  332. return succeed();
  333. }
  334. @ApiOperation("检测用户是否存在待支付的课程组订单")
  335. @GetMapping(value = "/checkExistWaitPayOrder")
  336. public HttpResponseResult checkExistWaitPayOrder(Long groupId){
  337. SysUser sysUser = sysUserFeignService.queryUserInfo();
  338. if (sysUser == null) {
  339. return failed(HttpStatus.FORBIDDEN, "请登录");
  340. }
  341. return succeed(practiceGroupService.checkExistWaitPayOrder(sysUser.getId(),groupId));
  342. }
  343. @ApiOperation("取消待支付的订单")
  344. @PostMapping(value = "/cancelWaitPayOrder")
  345. @AuditLogAnnotation(operateName = "取消待支付的订单")
  346. public HttpResponseResult cancelWaitPayOrder(Integer groupId){
  347. SysUser sysUser = sysUserFeignService.queryUserInfo();
  348. if (sysUser == null) {
  349. return failed(HttpStatus.FORBIDDEN, "请登录");
  350. }
  351. return practiceGroupService.cancelWaitPayOrder(sysUser.getId(), groupId);
  352. }
  353. }