MusicGroupController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  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.MusicGroupPaymentCalenderDetailDao;
  5. import com.ym.mec.biz.dal.dao.StudentPreRegistrationDao;
  6. import com.ym.mec.biz.dal.dto.*;
  7. import com.ym.mec.biz.dal.entity.*;
  8. import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
  9. import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
  10. import com.ym.mec.biz.dal.enums.DealStatusEnum;
  11. import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
  12. import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
  13. import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
  14. import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
  15. import com.ym.mec.biz.service.*;
  16. import com.ym.mec.common.controller.BaseController;
  17. import com.ym.mec.common.entity.HttpResponseResult;
  18. import com.ym.mec.common.exception.BizException;
  19. import io.swagger.annotations.Api;
  20. import io.swagger.annotations.ApiImplicitParam;
  21. import io.swagger.annotations.ApiImplicitParams;
  22. import io.swagger.annotations.ApiOperation;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.http.HttpStatus;
  26. import org.springframework.web.bind.annotation.*;
  27. import javax.annotation.Resource;
  28. import java.util.*;
  29. import java.util.stream.Collectors;
  30. @RequestMapping("${app-config.url.student:}/musicGroup")
  31. @Api(tags = "乐团服务")
  32. @RestController
  33. public class MusicGroupController extends BaseController {
  34. @Resource
  35. private SysUserService sysUserService;
  36. @Resource
  37. private SysUserFeignService sysUserFeignService;
  38. @Autowired
  39. private MusicGroupService musicGroupService;
  40. @Autowired
  41. private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
  42. @Autowired
  43. private StudentRegistrationService studentRegistrationService;
  44. @Autowired
  45. private StudentPaymentOrderService studentPaymentOrderService;
  46. @Autowired
  47. private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
  48. @Autowired
  49. private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
  50. @Autowired
  51. private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
  52. @Autowired
  53. private StudentPreRegistrationDao studentPreRegistrationDao;
  54. @Autowired
  55. private OrganizationService organizationService;
  56. @ApiOperation("预报名")
  57. @PostMapping(value = "/preRegister")
  58. public HttpResponseResult preRegister(@RequestBody StudentPreRegistration studentPreRegistration) {
  59. return musicGroupService.preRegister(studentPreRegistration) ? succeed() : failed();
  60. }
  61. @ApiOperation("预报名信息查询")
  62. @GetMapping(value = "/queryPreRegister")
  63. public HttpResponseResult<StudentPreRegistration> queryPreRegister(String musicGroupId) {
  64. return succeed(studentPreRegistrationDao.queryByMusicGroupIdAndUserId(sysUserService.getUserId(), musicGroupId));
  65. }
  66. @ApiOperation("获取学生所在乐团列表")
  67. @GetMapping(value = "/queryUserMusicGroups")
  68. public HttpResponseResult<List<MusicCardDto>> queryUserMusicGroups() {
  69. return succeed(musicGroupService.queryUserMusicGroups(sysUserService.getUserId()));
  70. }
  71. @ApiOperation("获取学生所在乐团列表")
  72. @GetMapping(value = "/queryStudentMusicGroupInfo")
  73. public HttpResponseResult<List<StudentMusicGroupDto>> queryStudentMusicGroupInfo(String musicGroupId) {
  74. return succeed(studentRegistrationService.queryStudentMusicGroupInfo(sysUserService.getUserId(),musicGroupId));
  75. }
  76. @ApiOperation("获取学生个人中心乐团信息")
  77. @GetMapping(value = "/queryPersonalMusicGroups")
  78. public HttpResponseResult<MusicCardDto> queryPersonalMusicGroups() {
  79. return succeed(musicGroupService.queryPersonalMusicGroups(sysUserService.getUserId()));
  80. }
  81. @ApiOperation(value = "根据学员编号,获取有关联的老师列表,获取学员通讯录列表")
  82. @GetMapping("/findTeachersByStuId")
  83. public HttpResponseResult<List<BasicUserDto>> findTeachersByStuId(String search) {
  84. return succeed(musicGroupService.findTeachersByStuId(sysUserService.getUserId(), search));
  85. }
  86. @ApiOperation(value = "获取乐团声部费用信息及乐器和辅件")
  87. @GetMapping("/getSubjectGoodsAndInfo")
  88. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
  89. @ApiImplicitParam(name = "subjectId", value = "声部编号", required = true, dataType = "Integer")})
  90. public HttpResponseResult<MusicGroupSubjectGoodsAndInfoDto> getSubjectGoodsAndInfo(String musicGroupId, Integer subjectId) {
  91. return succeed(musicGroupSubjectPlanService.getSubjectGoodsAndInfo(musicGroupId, subjectId));
  92. }
  93. @ApiOperation(value = "乐团报名缴费状态查询")
  94. @GetMapping("/getMusicGroupStatus")
  95. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
  96. @ApiImplicitParam(name = "userId", value = "用户id", required = true, dataType = "int")
  97. })
  98. public HttpResponseResult getMusicGroupStatus(String musicGroupId, Integer userId) throws Exception {
  99. MusicGroup musicGroup = musicGroupService.get(musicGroupId);
  100. if (musicGroup == null) {
  101. return failed("乐团不存在");
  102. }
  103. SysUser sysUser = sysUserFeignService.queryUserInfo();
  104. if (sysUser != null && Objects.nonNull(sysUser.getId())) {
  105. userId = sysUser.getId();
  106. }
  107. StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(userId, musicGroupId);
  108. if (studentRegistration == null) {
  109. return failed(HttpStatus.CONTINUE, "乐团报名信息不存在");
  110. }
  111. // 判断是否可以继续购买
  112. List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = studentPaymentOrderDetailService.findUserApplyOrder(userId, musicGroupId, DealStatusEnum.SUCCESS);
  113. if(studentPaymentOrderDetailList != null && studentPaymentOrderDetailList.size() > 0){
  114. List<OrderDetailTypeEnum> typeList = studentPaymentOrderDetailList.stream().map(t -> t.getType()).collect(Collectors.toList());
  115. //如果乐器和辅件都买过/那么看是否购买过其他的缴费项
  116. if (typeList.contains(OrderDetailTypeEnum.MUSICAL) && typeList.contains(OrderDetailTypeEnum.ACCESSORIES)) {
  117. MusicGroupPaymentCalender paymentCalender = musicGroupPaymentCalenderService.getApplyCalenderByMusicId(musicGroupId);
  118. if(Objects.isNull(paymentCalender)){
  119. throw new BizException("当前乐团不存在报名缴费项,请联系管理员");
  120. }
  121. HashMap<String, Object> calenderDetail = new HashMap<>(5);
  122. musicGroupPaymentCalenderService.getCalenderDetail(calenderDetail,paymentCalender.getId());
  123. boolean flag = true;
  124. //是否购买乐团课
  125. if(Objects.nonNull(calenderDetail.get("course"))){
  126. if(typeList.contains(OrderDetailTypeEnum.COURSE)
  127. || typeList.contains(OrderDetailTypeEnum.HIGH_ONLINE_COURSE) || typeList.contains(OrderDetailTypeEnum.SINGLE)
  128. || typeList.contains(OrderDetailTypeEnum.MIX) || typeList.contains(OrderDetailTypeEnum.HIGH)
  129. || typeList.contains(OrderDetailTypeEnum.DEMO) || typeList.contains(OrderDetailTypeEnum.CLASSROOM)
  130. || typeList.contains(OrderDetailTypeEnum.COMPREHENSIVE) || typeList.contains(OrderDetailTypeEnum.ENLIGHTENMENT)
  131. || typeList.contains(OrderDetailTypeEnum.TRAINING_SINGLE) || typeList.contains(OrderDetailTypeEnum.TRAINING_MIX)
  132. || typeList.contains(OrderDetailTypeEnum.HIGH_ONLINE) || typeList.contains(OrderDetailTypeEnum.MUSIC_NETWORK)){
  133. flag = true;
  134. }else {
  135. flag = false;
  136. }
  137. }
  138. if(flag){
  139. //是否购买会员
  140. if(Objects.nonNull(calenderDetail.get("member"))){
  141. if(typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER) || typeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER_PLUS)){
  142. flag = true;
  143. }else {
  144. flag = false;
  145. }
  146. }
  147. }
  148. if(flag){
  149. //是否购买活动包
  150. if(Objects.nonNull(calenderDetail.get("activity"))){
  151. if(typeList.contains(OrderDetailTypeEnum.VIP) || typeList.contains(OrderDetailTypeEnum.PRACTICE)){
  152. flag = true;
  153. }else {
  154. flag = false;
  155. }
  156. }
  157. }
  158. if(flag){
  159. return failed(HttpStatus.PROCESSING, "您已缴费,请等待乐团开启");
  160. }
  161. }
  162. }
  163. if (studentRegistration.getPaymentStatus() == PaymentStatusEnum.NO) {
  164. return failed("乐团还未开启缴费,请等待通知");
  165. }
  166. if (musicGroup.getStatus() != MusicGroupStatusEnum.APPLY &&
  167. musicGroup.getStatus() != MusicGroupStatusEnum.PAY &&
  168. musicGroup.getStatus() != MusicGroupStatusEnum.PREPARE &&
  169. musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS
  170. ) {
  171. return failed("乐团在" + musicGroup.getStatus().getMsg() + ",不能缴费");
  172. }
  173. String err = studentRegistrationService.checkRegOrPayStatus(musicGroupId);
  174. if (err != null) {
  175. return failed(err + "不能缴费");
  176. }
  177. studentRegistration.setOwnershipType(musicGroup.getOwnershipType());
  178. if (sysUser != null) {
  179. studentRegistration.setGender(sysUser.getGender());
  180. }
  181. return succeed(studentRegistration);
  182. }
  183. @ApiOperation(value = "申请退团")
  184. @PostMapping("/quitMusicGroup")
  185. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
  186. @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String"),
  187. @ApiImplicitParam(name = "reasonEnum", value = "原因", required = true, dataType = "String")})
  188. public HttpResponseResult<Boolean> quitMusicGroup(String musicGroupId, String reason, MusicGroupQuit.ReasonEnum reasonEnum) throws Exception {
  189. Integer userId = sysUserService.getUserId();
  190. MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
  191. musicGroupQuit.setUserId(userId);
  192. musicGroupQuit.setMusicGroupId(musicGroupId);
  193. musicGroupQuit.setUserComment(reason);
  194. musicGroupQuit.setReasonEnum(reasonEnum);
  195. musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
  196. musicGroupQuit.setOperatorId(userId);
  197. MusicGroup musicGroup = musicGroupService.get(musicGroupId);
  198. if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
  199. musicGroupQuit.setSchoolStaffAuditStatus(EQuitGroupAuditStatusEnum.ING);
  200. }
  201. return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit,"STUDENT"));
  202. }
  203. @ApiOperation(value = "取消退团申请")
  204. @PostMapping("/cancelQuitMusicGroup")
  205. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
  206. @ApiImplicitParam(name = "reason", value = "取消原因", required = true, dataType = "String")})
  207. public HttpResponseResult<Boolean> cancelQuitMusicGroup(String musicGroupId, String reason) throws Exception {
  208. return succeed(musicGroupService.cancelQuitMusicGroup(sysUserService.getUserId(), musicGroupId, reason));
  209. }
  210. @ApiOperation(value = "查询是否有待支付的报名订单")
  211. @GetMapping("/checkWaitPayApplyOrder")
  212. @ApiImplicitParams({@ApiImplicitParam(name = "registerId", value = "注册id", required = true, dataType = "int")})
  213. public HttpResponseResult<StudentPaymentOrder> checkWaitPayApplyOrder(Long registerId) throws Exception {
  214. StudentRegistration studentRegistration = studentRegistrationService.get(registerId);
  215. if (studentRegistration == null) {
  216. return failed("报名信息有误,请核查");
  217. }
  218. Integer userId = studentRegistration.getUserId();
  219. //判断用户是否已存在订单
  220. List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
  221. if(applyOrderList != null && applyOrderList.size() > 0){
  222. return succeed(applyOrderList.get(0));
  223. }
  224. return succeed(null);
  225. }
  226. @ApiOperation(value = "续费")
  227. @PostMapping("/renew")
  228. public HttpResponseResult renew(@RequestBody RegisterPayDto renewParamDto) throws Exception {
  229. Integer userId = sysUserService.getUserId();
  230. Long calenderId = renewParamDto.getCalenderId();
  231. if(calenderId == null){
  232. throw new BizException("参数校验失败");
  233. }
  234. MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.get(calenderId);
  235. MusicGroupPaymentCalenderDetail calenderDetail = musicGroupPaymentCalenderDetailDao.findByCalenderIdAndUserId(calenderId, userId);
  236. if (calenderDetail == null) {
  237. throw new BizException("缴费项不存在该学员,请联系教务老师");
  238. }
  239. if (calenderDetail.getPaymentStatus() == PaymentStatus.PAID_COMPLETED) {
  240. throw new BizException("您已缴费,请勿重复提交");
  241. }
  242. //缴费项目已开启或者单独开启
  243. if (calender.getStatus() == PaymentCalenderStatusEnum.OPEN || calenderDetail.getOpen() == 1) {
  244. renewParamDto.setUserId(userId);
  245. renewParamDto.setBatchNo(calender.getBatchNo());
  246. return musicGroupService.renew(renewParamDto);
  247. } else if (calender.getStatus() == PaymentCalenderStatusEnum.OVER) {
  248. throw new BizException("缴费已截止,如有问题请联系指导老师");
  249. } else {
  250. throw new BizException("缴费暂未开始,如有问题请联系指导老师");
  251. }
  252. }
  253. @ApiOperation(value = "乐团报名支付")
  254. @PostMapping("/pay")
  255. public HttpResponseResult pay(@RequestBody RegisterPayDto registerPayDto) throws Exception {
  256. StudentRegistration studentRegistration = studentRegistrationService.get(registerPayDto.getRegisterId().longValue());
  257. if (studentRegistration == null) {
  258. return failed("报名信息有误,请核查");
  259. }
  260. String err = studentRegistrationService.checkRegOrPayStatus(studentRegistration.getMusicGroupId());
  261. if (err != null) {
  262. return failed(err + "不可缴费,请联系教务老师");
  263. }
  264. registerPayDto.setUserId(studentRegistration.getUserId());
  265. registerPayDto.setMusicGroupId(studentRegistration.getMusicGroupId());
  266. return musicGroupService.pay(registerPayDto);
  267. }
  268. @ApiOperation(value = "订单状态查询")
  269. @GetMapping("/getOrderStatus")
  270. @ApiImplicitParams({@ApiImplicitParam(name = "orderNo", value = "订单号", required = true, dataType = "String")})
  271. public HttpResponseResult getOrderStatus(String orderNo) {
  272. if (StringUtils.isBlank(orderNo)) {
  273. return failed("请指定订单");
  274. }
  275. StudentPaymentOrder orderByOrderNo = studentPaymentOrderService.findOrderByOrderNo(orderNo);
  276. if (Objects.isNull(orderByOrderNo)) {
  277. return failed("未找到指定订单");
  278. }
  279. MusicGroup musicGroup = musicGroupService.get(orderByOrderNo.getMusicGroupId());
  280. List<Goods> goodsList = studentPaymentOrderDetailService.findApplyOrderGoods(orderByOrderNo.getId());
  281. HashMap<String, Object> orderDetail = new HashMap<>();
  282. orderDetail.put("order", orderByOrderNo);
  283. orderDetail.put("goods", goodsList);
  284. orderDetail.put("course", musicGroup.getCourseForm());
  285. return succeed(orderDetail);
  286. }
  287. @ApiOperation(value = "获取乐团的年级列表")
  288. @GetMapping("/getGradeList")
  289. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
  290. public HttpResponseResult<Map<Integer, String>> getGradeList(String musicGroupId) {
  291. MusicGroup musicGroup = Optional.ofNullable(musicGroupService.get(musicGroupId)).orElseThrow(()->new BizException("乐团信息不存在"));
  292. return succeed(organizationService.getGradeList(musicGroup.getOrganId(),musicGroup.getGradeType()));
  293. }
  294. }