VipGroupManageController.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. package com.ym.mec.web.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.ClassDateAdjustDto;
  6. import com.ym.mec.biz.dal.dto.VipGroupApplyBaseInfoDto;
  7. import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
  8. import com.ym.mec.biz.dal.entity.*;
  9. import com.ym.mec.biz.dal.entity.StudentApplyRefunds.StudentApplyRefundsStatus;
  10. import com.ym.mec.biz.dal.enums.*;
  11. import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
  12. import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
  13. import com.ym.mec.biz.dal.page.VipGroupSalaryQueryInfo;
  14. import com.ym.mec.biz.dal.page.VipGroupTeachingRecordQueryInfo;
  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 com.ym.mec.util.date.DateUtil;
  20. import com.yonge.log.model.AuditLogAnnotation;
  21. import io.swagger.annotations.Api;
  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.security.access.prepost.PreAuthorize;
  26. import org.springframework.ui.ModelMap;
  27. import org.springframework.util.CollectionUtils;
  28. import org.springframework.web.bind.annotation.*;
  29. import java.math.BigDecimal;
  30. import java.util.*;
  31. import java.util.stream.Collectors;
  32. /**
  33. * @Author Joburgess
  34. * @Date 2019/9/21
  35. */
  36. @Api(tags = "vip课")
  37. @RequestMapping("vipGroupManage")
  38. @RestController
  39. public class VipGroupManageController extends BaseController {
  40. @Autowired
  41. private VipGroupService vipGroupService;
  42. @Autowired
  43. private CourseScheduleService scheduleService;
  44. @Autowired
  45. private SysUserFeignService sysUserFeignService;
  46. @Autowired
  47. private TeacherDao teacherDao;
  48. @Autowired
  49. private EmployeeDao employeeDao;
  50. @Autowired
  51. private ClassGroupDao classGroupDao;
  52. @Autowired
  53. private ImGroupMemberService imGroupMemberService;
  54. @Autowired
  55. private ImUserFriendService imUserFriendService;
  56. @Autowired
  57. private ImGroupService imGroupService;
  58. @Autowired
  59. private StudentApplyRefundsService studentApplyRefundsService;
  60. @Autowired
  61. private StudentPaymentOrderService studentPaymentOrderService;
  62. @Autowired
  63. private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
  64. @Autowired
  65. private ClassGroupStudentMapperDao classGroupStudentMapperDao;
  66. @Autowired
  67. private CourseScheduleDao courseScheduleDao;
  68. @Autowired
  69. private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
  70. @GetMapping("/teacherSalarySettlement")
  71. public Object teacherSalarySettlement(){
  72. courseScheduleTeacherSalaryService.teacherSalarySettlement();
  73. return succeed();
  74. }
  75. @ApiOperation(value = "vip修改")
  76. @PostMapping("/update")
  77. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/update')")
  78. public HttpResponseResult update(VipGroup vipGroup){
  79. VipGroup oldVipGroup = vipGroupService.get(vipGroup.getId());
  80. if(Objects.nonNull(vipGroup.getCoursesExpireDate())){
  81. if(Objects.isNull(oldVipGroup)){
  82. throw new BizException("此课程组不存在");
  83. }
  84. if(!VipGroupStatusEnum.PROGRESS.equals(oldVipGroup.getStatus())&&!VipGroupStatusEnum.FINISHED.equals(oldVipGroup.getStatus())&&!VipGroupStatusEnum.PAUSE.equals(oldVipGroup.getStatus())){
  85. throw new BizException("此课程组状态暂不支持修改");
  86. }
  87. }
  88. ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(oldVipGroup.getId().toString(), ClassGroupTypeEnum.VIP.getCode());
  89. if(Objects.isNull(classGroup)){
  90. throw new BizException("课程信息错误");
  91. }
  92. if(Objects.isNull(oldVipGroup.getVipGroupActivityId())){
  93. if(VipGroupStatusEnum.PROGRESS.equals(vipGroup.getStatus())&&!VipGroupStatusEnum.FINISHED.equals(oldVipGroup.getStatus())&&oldVipGroup.getStatus().getCode()>VipGroupStatusEnum.PROGRESS.getCode()){
  94. throw new BizException("此课程组状态暂不支持修改");
  95. }
  96. if(classGroup.getStudentNum()<3){
  97. throw new BizException("班级人数未达到3人");
  98. }
  99. }
  100. Date now = new Date();
  101. if(VipGroupStatusEnum.FINISHED.equals(oldVipGroup.getStatus())&&(vipGroup.getCoursesExpireDate().compareTo(now)>=0|| DateUtil.isSameDay(vipGroup.getCoursesExpireDate(), now))){
  102. vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
  103. Map<Integer,String> userRoleMap = new HashMap<>();
  104. if(Objects.nonNull(vipGroup.getEducationalTeacherId())){
  105. userRoleMap.put(vipGroup.getEducationalTeacherId(),"乐团主管");
  106. }
  107. CourseSchedule lastCourse = courseScheduleDao.findLastCourseWithGroup(vipGroup.getId().toString(), GroupType.VIP);
  108. if(Objects.isNull(lastCourse)){
  109. userRoleMap.put(vipGroup.getUserId(),"指导老师");
  110. }else{
  111. userRoleMap.put(lastCourse.getActualTeacherId(),"指导老师");
  112. }
  113. List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
  114. if(!CollectionUtils.isEmpty(classGroupStudents)){
  115. //生成学生单课缴费信息
  116. for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
  117. userRoleMap.put(classGroupStudent.getUserId(),null);
  118. }
  119. }
  120. imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
  121. imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
  122. imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(),classGroup.getGroupType());
  123. }
  124. vipGroupService.update(vipGroup);
  125. return succeed();
  126. }
  127. @ApiOperation(value = "vip课申请")
  128. @PostMapping("/vipGroupApply")
  129. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/vipGroupApply')")
  130. public Object vipGroupApply(@RequestBody VipGroupApplyDto vipGroupApplyDto){
  131. SysUser sysUser = sysUserFeignService.queryUserInfo();
  132. if (sysUser == null) {
  133. return failed("用户信息获取失败");
  134. }
  135. Integer userId = vipGroupApplyDto.getVipGroupApplyBaseInfo().getUserId();
  136. Teacher teacher = teacherDao.get(userId);
  137. if(Objects.isNull(teacher)){
  138. return failed("请指定指导老师!");
  139. }
  140. if(Objects.isNull(vipGroupApplyDto.getVipGroupApplyBaseInfo().getOrganId())){
  141. Employee employee = employeeDao.get(sysUser.getId());
  142. if(StringUtils.isEmpty(employee.getOrganIdList()) || employee.getOrganIdList().contains(",")){
  143. vipGroupApplyDto.getVipGroupApplyBaseInfo().setOrganId(teacher.getTeacherOrganId());
  144. }else {
  145. vipGroupApplyDto.getVipGroupApplyBaseInfo().setOrganId(Integer.parseInt(employee.getOrganIdList()));
  146. }
  147. }
  148. return succeed(vipGroupService.createVipGroup(vipGroupApplyDto));
  149. }
  150. @ApiOperation(value = "获取教务与指导老师公共分部")
  151. @GetMapping("/getPublicOrgans")
  152. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getPublicOrgans')")
  153. public HttpResponseResult getPublicOrgans(Integer eduTeacherId, Integer teacherId){
  154. SysUser sysUser = sysUserFeignService.queryUserInfo();
  155. if (sysUser == null) {
  156. return failed("用户信息获取失败");
  157. }
  158. if(Objects.isNull(eduTeacherId)){
  159. eduTeacherId=sysUser.getId();
  160. }
  161. return succeed(vipGroupService.getPublicOrgans(eduTeacherId, teacherId));
  162. }
  163. @ApiOperation(value = "全查询")
  164. @GetMapping("/queryAll")
  165. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/queryAll')")
  166. public Object queryAll(VipGroupQueryInfo queryInfo) {
  167. SysUser sysUser = sysUserFeignService.queryUserInfo();
  168. if (sysUser == null) {
  169. return failed("用户信息获取失败");
  170. }
  171. Employee employee = employeeDao.get(sysUser.getId());
  172. if (StringUtils.isEmpty(queryInfo.getOrganId())) {
  173. queryInfo.setOrganId(employee.getOrganIdList());
  174. }else if(StringUtils.isEmpty(employee.getOrganIdList())){
  175. return failed("用户所在分部异常");
  176. }else {
  177. List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
  178. if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
  179. return failed("非法请求");
  180. }
  181. }
  182. return succeed(vipGroupService.findVipGroups(queryInfo));
  183. }
  184. @ApiOperation(value = "删除课程组")
  185. @PostMapping("/deleteVipGroup")
  186. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/deleteVipGroup')")
  187. public HttpResponseResult deleteVipGroup(Long vipGroupId){
  188. vipGroupService.deleteVipGroup(vipGroupId);
  189. return succeed();
  190. }
  191. @ApiOperation(value = "获取小课学员")
  192. @GetMapping(value = "/findVipGroupStudents")
  193. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findVipGroupStudents')")
  194. public Object findVipGroupStudents(VipGroupQueryInfo queryInfo){
  195. return succeed(vipGroupService.findVipGroupStudents(queryInfo));
  196. }
  197. @ApiOperation(value = "获取还有课程余额的学员")
  198. @GetMapping(value = "/findHaveCourseBalanceStudents")
  199. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findHaveCourseBalanceStudents')")
  200. public Object findHaveCourseBalanceStudents(VipGroupQueryInfo queryInfo){
  201. return succeed(vipGroupService.findHaveCourseBalanceStudents(queryInfo));
  202. }
  203. @ApiOperation(value = "添加vip课学员")
  204. @PostMapping(value = "/addVipGroupStudents")
  205. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/addVipGroupStudents')")
  206. public Object addVipGroupStudents(@RequestBody List<VipGroupStudentCoursePrice> studentCoursePrices){
  207. if(CollectionUtils.isEmpty(studentCoursePrices)){
  208. throw new BizException("请指定学员");
  209. }
  210. List<Integer> ids=studentCoursePrices.stream().map(VipGroupStudentCoursePrice::getStudentId).collect(Collectors.toList());
  211. Map<Integer, VipGroupStudentCoursePrice> studentCoursePriceMap = studentCoursePrices.stream().collect(Collectors.toMap(VipGroupStudentCoursePrice::getStudentId, v->v, (v1, v2)->v1));
  212. vipGroupService.addVipGroupStudents(studentCoursePrices.get(0).getVipGroupId(), ids, studentCoursePriceMap);
  213. return succeed();
  214. }
  215. @ApiOperation(value = "vip课详情")
  216. @GetMapping("/getVipGroupDetail")
  217. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getVipGroupDetail')")
  218. public Object getVipGroupDetail(Long vipGroupId){
  219. return succeed(vipGroupService.getVipGroupDetail(vipGroupId));
  220. }
  221. @ApiOperation(value = "vip课详情")
  222. @GetMapping("/getVipGroupDetailForAudit")
  223. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getVipGroupDetailForAudit')")
  224. public Object getVipGroupDetailForAudit(Long vipGroupId){
  225. return succeed(vipGroupService.getVipGroupDetailForAudit(vipGroupId));
  226. }
  227. @ApiOperation(value = "获取vip课考勤记录")
  228. @PostMapping("/getVipGroupAttendances")
  229. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getVipGroupAttendances')")
  230. public Object getVipGroupAttendances(@RequestBody VipGroupAttendanceQueryInfo queryInfo){
  231. return succeed(vipGroupService.findVipGroupAttendances(queryInfo));
  232. }
  233. @ApiOperation(value = "休学")
  234. @PostMapping("/pauseForStudent")
  235. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/pauseForStudent')")
  236. public Object pauseForStudent(Long vipGroupId,Integer studentId){
  237. vipGroupService.pauseForStudent(vipGroupId,studentId);
  238. return succeed();
  239. }
  240. @ApiOperation(value = "恢复休学")
  241. @PostMapping("/recoverForStudent")
  242. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/recoverForStudent')")
  243. public Object recoverForStudent(@RequestBody StudentRecoverDto studentRecoverInfo){
  244. vipGroupService.recoverForStudent(studentRecoverInfo);
  245. return succeed();
  246. }
  247. @ApiOperation(value = "获取学生休学信息")
  248. @PostMapping("/getStudentPauseInfo")
  249. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getStudentPauseInfo')")
  250. public Object getStudentPauseInfo(Long vipGroupId,Integer studentId){
  251. return succeed(vipGroupService.getStudentPauseInfo(vipGroupId,studentId));
  252. }
  253. @ApiOperation(value = "根据vip课所在部门与声部获取教师")
  254. @GetMapping("/findTeacherWithVipGroupOrganAndSubject")
  255. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findTeacherWithVipGroupOrganAndSubject')")
  256. public Object findTeacherWithVipGroupOrganAndSubject(Long vipGroupId){
  257. return succeed(vipGroupService.findTeacherWithVipGroupOrganAndSubject(vipGroupId));
  258. }
  259. @ApiOperation(value = "退课申请")
  260. @PostMapping("/applyRefundForStudent")
  261. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/applyRefundForStudent')")
  262. public Object applyRefundForStudent(Long vipGroupId,Integer studentId, BigDecimal amount){
  263. vipGroupService.applyRefundForStudent(vipGroupId,studentId,amount);
  264. return succeed();
  265. }
  266. @ApiOperation(value = "退课申请审核")
  267. @PostMapping("/applyRefundAudit")
  268. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/applyRefundAudit')")
  269. public Object applyRefundAudit(Long id, StudentApplyRefundsStatus status, String remark, BigDecimal amount) {
  270. vipGroupService.applyRefundAudit(id, status, remark, amount);
  271. return succeed();
  272. }
  273. @ApiOperation(value = "查询退费详情")
  274. @GetMapping("/queryApplyRefundDetail")
  275. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/queryApplyRefundDetail')")
  276. public Object queryApplyRefundDetail(Long id) {
  277. StudentApplyRefunds studentApplyRefunds = studentApplyRefundsService.get(id);
  278. if (studentApplyRefunds == null) {
  279. return failed("参数输入有误");
  280. }
  281. Long orderId = studentApplyRefunds.getOrigPaymentOrderId();
  282. StudentPaymentOrder paymentOrder = studentPaymentOrderService.get(orderId);
  283. if (paymentOrder == null) {
  284. return failed("支付订单信息找不到");
  285. }
  286. String vipGroupId = paymentOrder.getMusicGroupId();
  287. VipGroup vipGroup = vipGroupService.get(Long.parseLong(vipGroupId));
  288. if (vipGroup == null) {
  289. return failed("vip课信息找不到");
  290. }
  291. SysUser student = sysUserFeignService.queryUserById(studentApplyRefunds.getUserId());
  292. SysUser teacher = sysUserFeignService.queryUserById(vipGroup.getUserId());
  293. ModelMap model = new ModelMap();
  294. model.put("student", student.getUsername());
  295. model.put("teacher", teacher.getUsername());
  296. model.put("className", vipGroup.getName());
  297. model.put("studentApplyRefunds", studentApplyRefunds);
  298. return succeed(model);
  299. }
  300. @ApiOperation(value = "获取VIP课教学记录")
  301. @GetMapping("/findVipGroupTeachingRecord")
  302. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findVipGroupTeachingRecord')")
  303. public Object findVipGroupTeachingRecord(VipGroupTeachingRecordQueryInfo queryInfo){
  304. return succeed(vipGroupService.findVipGroupTeachingRecord(queryInfo));
  305. }
  306. @ApiOperation(value = "获取vip课基本信息")
  307. @GetMapping("/findTeachingRecordBaseInfo")
  308. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findTeachingRecordBaseInfo')")
  309. public Object findTeachingRecordBaseInfo(Long vipGroupId){
  310. return succeed(vipGroupService.findTeachingRecordBaseInfo(vipGroupId));
  311. }
  312. @ApiOperation("课酬总费用")
  313. @PostMapping("/getVipGroupCostCount")
  314. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getVipGroupCostCount')")
  315. public Object getVipGroupCostCount(@RequestBody VipGroupApplyBaseInfoDto vipGroup){
  316. Map results = vipGroupService.countVipGroupPredictFee(vipGroup,vipGroup.getUserId());
  317. return succeed(results);
  318. }
  319. @ApiOperation(value = "停止vip课")
  320. @PostMapping("/stopVipGroup")
  321. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/stopVipGroup')")
  322. public Object stopVipGroup(Long vipGroupId,String stopReason){
  323. if(Objects.isNull(vipGroupId)|| StringUtils.isBlank(stopReason)){
  324. return failed("请指定vip课并指定取消原因");
  325. }
  326. vipGroupService.stopGroup(vipGroupId,stopReason);
  327. return succeed();
  328. }
  329. @ApiOperation(value = "获取vip课财务信息")
  330. @GetMapping("/findVipGroupSalarys")
  331. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findVipGroupSalarys')")
  332. public Object findVipGroupSalarys(VipGroupSalaryQueryInfo queryInfo){
  333. return succeed(vipGroupService.findVipGroupSalarys(queryInfo));
  334. }
  335. @ApiOperation(value = "获取当前课程上课学员")
  336. @GetMapping("/findVipGroupAttendanceStudents")
  337. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findVipGroupAttendanceStudents')")
  338. public Object findVipGroupStudents(Long courseScheduleId){
  339. return succeed(vipGroupService.findVipGroupAttendanceStudents(courseScheduleId));
  340. }
  341. @ApiOperation(value = "课时调整")
  342. @PostMapping(value = "/classStartDateAdjust")
  343. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/classStartDateAdjust')")
  344. public Object classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto){
  345. if(Objects.isNull(classDateAdjustDto.getId())){
  346. return failed( "请指定课程!");
  347. }
  348. CourseSchedule courseSchedule = scheduleService.get(classDateAdjustDto.getId());
  349. if(Objects.isNull(classDateAdjustDto.getClassGroupId())){
  350. classDateAdjustDto.setClassGroupId(courseSchedule.getClassGroupId());
  351. }
  352. List<CourseSchedule> courseSchedules=new ArrayList<>();
  353. courseSchedules.add(classDateAdjustDto);
  354. return scheduleService.courseAdjust(courseSchedules, classDateAdjustDto.getAllowZeroSalary());
  355. }
  356. @ApiOperation(value = "vip课审核")
  357. @PostMapping(value = "/vipApplyAudit")
  358. @PreAuthorize("@pcs.hasPermissions('vipGroupManage/vipApplyAudit')")
  359. public Object vipApplyAudit(Long vipGroupId, AuditStatusEnum auditStatus, String reason){
  360. vipGroupService.vipApplyAudit(vipGroupId,auditStatus,reason);
  361. return succeed();
  362. }
  363. @ApiOperation(value = "更新vip课基本信息")
  364. @PostMapping(value = "/updateVipBaseInfo")
  365. public Object updateVipBaseInfo(@RequestBody VipGroupApplyBaseInfoDto vipGroupApplyBaseInfo){
  366. vipGroupService.updateVipGroupBaseInfo(vipGroupApplyBaseInfo);
  367. return succeed();
  368. }
  369. @ApiOperation(value = "取消达到报名时间未达到报名人数的vip课")
  370. @PostMapping(value = "/stopVipGroupWithNoCreate")
  371. public Object stopVipGroupWithNoCreate(){
  372. vipGroupService.stopVipGroupWithNoCreate();
  373. return succeed();
  374. }
  375. @ApiOperation(value = "新增vip课程计划")
  376. @PostMapping(value = "/appendVipGroupCourseSchedules")
  377. public Object appendVipGroupCourseSchedules(@RequestBody VipGroupApplyDto vipGroupApplyDto){
  378. // vipGroupService.appendVipGroupCourseSchedules(vipGroupApplyDto);
  379. return succeed();
  380. }
  381. @ApiOperation(value = "获取学生指定vip课的剩余课时费用")
  382. @GetMapping(value = "/getStudentSurplusCourseFee")
  383. public Object getStudentSurplusCourseFee(Long vipGroupId, Integer studentId){
  384. return succeed(vipGroupService.getStudentSurplusCourseFee(vipGroupId,studentId));
  385. }
  386. }