StudentRegistrationController.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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.entity.*;
  5. import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
  6. import com.ym.mec.biz.dal.page.NoClassMusicStudentQueryInfo;
  7. import com.ym.mec.biz.service.EmployeeService;
  8. import io.swagger.annotations.Api;
  9. import io.swagger.annotations.ApiImplicitParam;
  10. import io.swagger.annotations.ApiImplicitParams;
  11. import io.swagger.annotations.ApiOperation;
  12. import java.io.IOException;
  13. import java.io.OutputStream;
  14. import java.util.Arrays;
  15. import java.util.Date;
  16. import java.util.List;
  17. import javax.servlet.http.HttpServletResponse;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.security.access.prepost.PreAuthorize;
  22. import org.springframework.web.bind.annotation.GetMapping;
  23. import org.springframework.web.bind.annotation.PostMapping;
  24. import org.springframework.web.bind.annotation.RequestBody;
  25. import org.springframework.web.bind.annotation.RequestMapping;
  26. import org.springframework.web.bind.annotation.RestController;
  27. import com.ym.mec.biz.dal.dao.MusicGroupDao;
  28. import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
  29. import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
  30. import com.ym.mec.biz.dal.dto.DelRegisterDto;
  31. import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
  32. import com.ym.mec.biz.dal.dto.StudentAddDto;
  33. import com.ym.mec.biz.dal.dto.StudentPreRegistrationDto;
  34. import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
  35. import com.ym.mec.biz.dal.page.StudentPreRegistrationQueryInfo;
  36. import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
  37. import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
  38. import com.ym.mec.biz.service.StudentPreRegistrationService;
  39. import com.ym.mec.biz.service.StudentRegistrationService;
  40. import com.ym.mec.common.controller.BaseController;
  41. import com.ym.mec.common.entity.HttpResponseResult;
  42. import com.ym.mec.common.page.PageInfo;
  43. import com.ym.mec.util.date.DateUtil;
  44. import com.ym.mec.util.excel.POIUtil;
  45. @RequestMapping("studentRegistration")
  46. @Api(tags = "学生报名信息服务")
  47. @RestController
  48. public class StudentRegistrationController extends BaseController {
  49. @Autowired
  50. private StudentRegistrationService studentRegistrationService;
  51. @Autowired
  52. private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
  53. @Autowired
  54. private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
  55. @Autowired
  56. private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
  57. @Autowired
  58. private StudentPreRegistrationService studentPreRegistrationService;
  59. @Autowired
  60. private MusicGroupDao musicGroupDao;
  61. @Autowired
  62. private SysUserFeignService sysUserFeignService;
  63. @Autowired
  64. private EmployeeService employeeService;
  65. @ApiOperation(value = "乐团预报名列表分页查询")
  66. @GetMapping("/queryPreApplyList")
  67. @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryPreApplyList')")
  68. public Object queryPreApplyList(StudentPreRegistrationQueryInfo queryInfo) {
  69. return succeed(studentPreRegistrationService.queryListForPage(queryInfo));
  70. }
  71. @ApiOperation(value = "乐团预报名声部列表查询")
  72. @GetMapping("/queryPreApplySubjectList")
  73. @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryPreApplySubjectList')")
  74. public Object queryPreApplySubjectList(String musicGroupId) {
  75. return succeed(studentPreRegistrationService.querySubjectNum(musicGroupId));
  76. }
  77. @ApiOperation(value = "乐团添加学员")
  78. @PostMapping("/insertStudent")
  79. @PreAuthorize("@pcs.hasPermissions('studentRegistration/insertStudent')")
  80. public Object add(@RequestBody StudentAddDto studentAddDto) throws Exception {
  81. return succeed(studentRegistrationService.insertStudent(studentAddDto));
  82. }
  83. @ApiOperation(value = "修改学生报名信息")
  84. @PostMapping("/update")
  85. @PreAuthorize("@pcs.hasPermissions('studentRegistration/update')")
  86. public Object update(StudentRegistration studentRegistration) {
  87. studentRegistration.setUpdateTime(new Date());
  88. studentRegistrationService.update(studentRegistration);
  89. return succeed();
  90. }
  91. @ApiOperation(value = "调剂学生报名专业")
  92. @PostMapping("/batchUpdateSubject")
  93. @PreAuthorize("@pcs.hasPermissions('studentRegistration/batchUpdateSubject')")
  94. @ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "学生编号", required = true, dataType = "Integer"),
  95. @ApiImplicitParam(name = "subId", value = "声部编号", required = true, dataType = "Integer"),
  96. @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "Integer")})
  97. public Object batchUpdateSubject(Integer userId, Integer subId, String musicGroupId) throws Exception {
  98. if (null == userId || subId == null || StringUtils.isEmpty(musicGroupId)) {
  99. return failed("参数校验异常");
  100. }
  101. return succeed(studentRegistrationService.batchUpdateSubject(userId, subId, musicGroupId));
  102. }
  103. @ApiOperation(value = "乐团【报名中、缴费中】 学生详情列表分页查询")
  104. @GetMapping("/queryStudentApplyDetail")
  105. @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryStudentApplyDetail')")
  106. public Object queryStudentApplyDetail(StudentRegistrationQueryInfo queryInfo) {
  107. return succeed(studentRegistrationService.queryStudentDetailPage(queryInfo));
  108. }
  109. @ApiOperation(value = "学生报名缴费金额详情")
  110. @GetMapping("/queryFeeDetail")
  111. @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryFeeDetail')")
  112. @ApiImplicitParams({@ApiImplicitParam(name = "studentId", value = "学生编号", required = true, dataType = "Integer"),
  113. @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
  114. public Object queryFeeDetail(String studentId, String musicGroupId) {
  115. if (StringUtils.isEmpty(studentId) || StringUtils.isEmpty(musicGroupId)) {
  116. return failed("参数校验异常");
  117. }
  118. return succeed(studentRegistrationService.queryFeeDetail(Integer.parseInt(studentId), musicGroupId));
  119. }
  120. @ApiOperation(value = "获取未分班的学生")
  121. @GetMapping("/getNoClassStu")
  122. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getNoClassStu')")
  123. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
  124. @ApiImplicitParam(name = "actualSubjectId", value = "科目(声部)id,多个逗号分开", required = true, dataType = "String")})
  125. public Object getNoClassStuBySubjectId(String musicGroupId, String actualSubjectId) {
  126. return succeed(studentRegistrationService.getNoClassStuBySubjectId(musicGroupId, actualSubjectId));
  127. }
  128. @ApiOperation(value = "获取班级学生")
  129. @GetMapping("/getClassStu")
  130. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getClassStu')")
  131. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
  132. @ApiImplicitParam(name = "classGroupId", value = "班级id", required = true, dataType = "int")})
  133. public Object getClassStu(String musicGroupId, int classGroupId) {
  134. return succeed(studentRegistrationService.findClassGroupStu(musicGroupId, classGroupId));
  135. }
  136. @ApiOperation(value = "获取乐团(声部)的学生")
  137. @GetMapping("/getMusicGroupStu")
  138. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getMusicGroupStu')")
  139. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
  140. @ApiImplicitParam(name = "actualSubjectId", value = "科目(声部)id,", required = false, dataType = "String")})
  141. public HttpResponseResult getMusicGroupStu(String musicGroupId, String actualSubjectId) {
  142. return succeed(studentRegistrationService.findMusicGroupStudent(musicGroupId, actualSubjectId));
  143. }
  144. @ApiOperation(value = "获取乐团未分班的学生")
  145. @GetMapping("/getMusicGroupNoClassStu")
  146. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getMusicGroupNoClassStu')")
  147. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
  148. @ApiImplicitParam(name = "actualSubjectId", value = "科目(声部)id,", required = false, dataType = "int")})
  149. public HttpResponseResult getMusicGroupNoClassStu(String musicGroupId, Integer actualSubjectId) {
  150. return succeed(studentRegistrationService.findMusicGroupNoClassGroupStudent(musicGroupId, actualSubjectId));
  151. }
  152. @ApiOperation(value = "开启缴费(单独学生)")
  153. @PostMapping("/openPayment")
  154. @PreAuthorize("@pcs.hasPermissions('studentRegistration/openPayment')")
  155. @ApiImplicitParams({@ApiImplicitParam(name = "ids", value = "报名id(不是userId),逗号分隔", required = true, dataType = "String")})
  156. public HttpResponseResult openPayment(String ids) throws IOException {
  157. return succeed(studentRegistrationService.openPayment(ids));
  158. }
  159. @ApiOperation(value = "获取乐团(声部)的(没有某种班级类型)学生")
  160. @GetMapping("/getMusicGroupStuNoClassType")
  161. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getMusicGroupStuNoClassType')")
  162. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
  163. @ApiImplicitParam(name = "type", value = "类型(MIX,HIGH)", required = true, dataType = "ClassGroupTypeEnum"),
  164. @ApiImplicitParam(name = "actualSubjectId", value = "科目(声部)id,", required = false, dataType = "String")})
  165. public HttpResponseResult getMusicGroupStuNoClassType(String musicGroupId, Long classGroupId, ClassGroupTypeEnum type, String actualSubjectId) {
  166. return succeed(studentRegistrationService.findMusicGroupStuNoClassType(musicGroupId, classGroupId, type, actualSubjectId));
  167. }
  168. @ApiOperation(value = "获取学生报名缴费详情")
  169. @GetMapping("/getApplyDetail")
  170. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getApplyDetail')")
  171. @ApiImplicitParams({@ApiImplicitParam(name = "studentId", value = "学生编号", required = true, dataType = "Integer"),
  172. @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
  173. public HttpResponseResult<List<StudentPaymentOrderDetail>> getApplyDetail(Integer studentId, String musicGroupId) {
  174. if (studentId == null || StringUtils.isEmpty(musicGroupId)) {
  175. return failed("参数校验异常");
  176. }
  177. return succeed(studentRegistrationService.getStudentApplyDetail(studentId, musicGroupId));
  178. }
  179. @ApiOperation(value = "获取乐团声部费用信息及乐器和辅件")
  180. @GetMapping("/getSubjectGoodsAndInfo")
  181. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getSubjectGoodsAndInfo')")
  182. @ApiImplicitParams({@ApiImplicitParam(name = "subjectId", value = "声部信息", required = true, dataType = "Integer"),
  183. @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
  184. public HttpResponseResult<MusicGroupSubjectGoodsAndInfoDto> getSubjectGoodsAndInfo(Integer subjectId, String musicGroupId, Long calenderId) {
  185. if (subjectId == null || StringUtils.isEmpty(musicGroupId) || calenderId == null) {
  186. return failed("参数校验异常");
  187. }
  188. MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
  189. MusicGroupSubjectGoodsAndInfoDto subjectGoodsAndInfo = musicGroupSubjectPlanService.getSubjectGoodsAndInfo(musicGroupId, subjectId);
  190. MusicGroupPaymentCalender musicGroupRegCalender = musicGroupPaymentCalenderDao.get(calenderId);
  191. if (musicGroupRegCalender != null && musicGroupRegCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)) {
  192. List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalender(musicGroupRegCalender.getId());
  193. musicGroupRegCalender.setMusicGroupPaymentCalenderCourseSettingsList(courseSettings);
  194. subjectGoodsAndInfo.setMusicGroupPaymentCalender(musicGroupRegCalender);
  195. }
  196. subjectGoodsAndInfo.setMusicGroup(musicGroup);
  197. return succeed(subjectGoodsAndInfo);
  198. }
  199. @ApiOperation(value = "获取班级课程的价值")
  200. @GetMapping("/getClassGroupCourseExpectPrice")
  201. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getClassGroupCourseExpectPrice')")
  202. public Object getClassGroupCourseExpect(List<Integer> classGroupIds) {
  203. return succeed(studentRegistrationService.getClassGroupCourseExpectPrice(classGroupIds));
  204. }
  205. @ApiOperation(value = "删除报名的学生")
  206. @PostMapping("/del")
  207. @PreAuthorize("@pcs.hasPermissions('studentRegistration/del')")
  208. public HttpResponseResult<Boolean> del(Long id) {
  209. StudentRegistration studentRegistration = studentRegistrationService.get(id);
  210. if (studentRegistration == null) {
  211. return failed("删除的报名信息不存在");
  212. }
  213. return succeed(studentRegistrationService.delReg(id));
  214. }
  215. @ApiOperation(value = "批量删除报名的学生")
  216. @PostMapping("/batchDel")
  217. @PreAuthorize("@pcs.hasPermissions('studentRegistration/batchDel')")
  218. public HttpResponseResult<Boolean> batchDel(@RequestBody DelRegisterDto delRegisterDto) {
  219. return succeed(studentRegistrationService.batchDelRegs(delRegisterDto.getMusicGroupId(), delRegisterDto.getUserIds()));
  220. }
  221. @ApiOperation(value = "获取乐团学生的退费信息")
  222. @GetMapping("/getMusicGroupStuReBack")
  223. @PreAuthorize("@pcs.hasPermissions('studentRegistration/getMusicGroupStuReBack')")
  224. @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
  225. public HttpResponseResult getMusicGroupStuReBack(String musicGroupId) {
  226. return succeed(studentRegistrationService.getMusicGroupStuReBack(musicGroupId));
  227. }
  228. @ApiOperation(value = "预报名导出")
  229. @GetMapping("/preRegisterExport")
  230. @PreAuthorize("@pcs.hasPermissions('studentRegistration/preRegisterExport')")
  231. public void queryPreApplyList(StudentPreRegistrationQueryInfo queryInfo, HttpServletResponse response) throws Exception {
  232. queryInfo.setPage(1);
  233. queryInfo.setRows(49999);
  234. PageInfo<StudentPreRegistrationDto> studentPreRegistration = studentPreRegistrationService.queryListForPage(queryInfo);
  235. if (studentPreRegistration.getTotal() <= 0) {
  236. response.setStatus(200);
  237. response.setContentType("Content-Type: application/json;charset=UTF-8");
  238. response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
  239. response.flushBuffer();
  240. return;
  241. }
  242. MusicGroup musicGroup = musicGroupDao.get(queryInfo.getMusicGroupId());
  243. for (StudentPreRegistrationDto row : studentPreRegistration.getRows()) {
  244. if (row.getKitPurchaseMethod().equals("OWNED")) {
  245. row.setKitPurchaseMethod("自行准备");
  246. } else if (row.getKitPurchaseMethod().equals("GROUP")) {
  247. row.setKitPurchaseMethod("团购");
  248. }
  249. if ("OWNED".equals(row.getCloudTeacherMethod())) {
  250. row.setCloudTeacherMethod("自行准备");
  251. } else if ("GROUP".equals(row.getCloudTeacherMethod())) {
  252. row.setCloudTeacherMethod("团购");
  253. }
  254. if (row.getSubjectFirst().equals(999)) {
  255. row.setSubjectFirstName("听从老师安排");
  256. }
  257. if (row.getSubjectSecond().equals(999)) {
  258. row.setSubjectSecondName("听从老师安排");
  259. }
  260. row.setCurrentGrade(row.getCurrentGrade() + row.getCurrentClass());
  261. }
  262. OutputStream outputStream = response.getOutputStream();
  263. try {
  264. HSSFWorkbook workbook = null;
  265. if (musicGroup.getCourseViewType().equals(CourseViewTypeEnum.CLOUD_TEACHER)) {
  266. String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "年级班级", "选报声部1", "选报声部2", "是否服从调剂", "乐器准备方式", "练习系统"};
  267. String[] body = {"userId", "userName", "gender ? '男' : '女'", "phone", "currentGrade", "subjectFirstName", "subjectSecondName", "isAllowAdjust ? '是' : '否'", "kitPurchaseMethod", "cloudTeacherMethod"};
  268. workbook = POIUtil.exportExcel(header, body, studentPreRegistration.getRows());
  269. } else {
  270. String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "年级班级", "选报声部1", "选报声部2", "是否服从调剂", "乐器准备方式"};
  271. String[] body = {"userId", "userName", "gender ? '男' : '女'", "phone", "currentGrade", "subjectFirstName", "subjectSecondName", "isAllowAdjust ? '是' : '否'", "kitPurchaseMethod"};
  272. workbook = POIUtil.exportExcel(header, body, studentPreRegistration.getRows());
  273. }
  274. response.setContentType("application/octet-stream");
  275. response.setHeader("Content-Disposition", "attachment;filename=pre-register-" + DateUtil.getDate(new Date()) + ".xls");
  276. response.flushBuffer();
  277. outputStream = response.getOutputStream();
  278. workbook.write(outputStream);
  279. outputStream.flush();
  280. } catch (Exception e) {
  281. e.printStackTrace();
  282. } finally {
  283. if (outputStream != null) {
  284. try {
  285. outputStream.close();
  286. } catch (IOException e) {
  287. e.printStackTrace();
  288. }
  289. }
  290. }
  291. }
  292. @ApiOperation(value = "查询乐团中未加入班级学员信息")
  293. @GetMapping("/queryNoClassMusicStudentInfo")
  294. @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryNoClassMusicStudentInfo')")
  295. public HttpResponseResult queryNoClassMusicStudentInfo(NoClassMusicStudentQueryInfo queryInfo) {
  296. SysUser sysUser = sysUserFeignService.queryUserInfo();
  297. if (sysUser == null) {
  298. return failed("用户信息获取失败");
  299. }
  300. Employee employee = employeeService.get(sysUser.getId());
  301. if (StringUtils.isBlank(queryInfo.getOrganIds())) {
  302. queryInfo.setOrganIds(employee.getOrganIdList());
  303. } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
  304. return failed("用户所在分部异常");
  305. } else {
  306. List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
  307. if (!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))) {
  308. return failed("非法请求");
  309. }
  310. }
  311. return succeed(studentRegistrationService.queryNoClassMusicStudentInfo(queryInfo));
  312. }
  313. }