UserController.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. package com.qxgmat.controller.admin;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.*;
  4. import com.qxgmat.data.constants.enums.ServiceKey;
  5. import com.qxgmat.data.constants.enums.module.FeedbackModule;
  6. import com.qxgmat.data.constants.enums.module.ProductType;
  7. import com.qxgmat.data.constants.enums.status.DirectionStatus;
  8. import com.qxgmat.data.constants.enums.status.FeedbackStatus;
  9. import com.qxgmat.data.dao.entity.*;
  10. import com.qxgmat.data.relation.entity.UserPreviewPaperRelation;
  11. import com.qxgmat.dto.admin.extend.*;
  12. import com.qxgmat.dto.admin.request.UserCourseAppointmentDto;
  13. import com.qxgmat.dto.admin.request.UserFeedbackErrorDto;
  14. import com.qxgmat.dto.admin.request.UserServiceRecordDto;
  15. import com.qxgmat.dto.admin.response.*;
  16. import com.qxgmat.help.ShiroHelp;
  17. import com.qxgmat.service.ManagerService;
  18. import com.qxgmat.service.UserPaperService;
  19. import com.qxgmat.service.UserServiceService;
  20. import com.qxgmat.service.extend.PreviewService;
  21. import com.qxgmat.service.UsersService;
  22. import com.qxgmat.service.inline.*;
  23. import io.swagger.annotations.Api;
  24. import io.swagger.annotations.ApiOperation;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.http.MediaType;
  29. import org.springframework.validation.annotation.Validated;
  30. import org.springframework.web.bind.annotation.*;
  31. import javax.servlet.http.HttpServletRequest;
  32. import javax.servlet.http.HttpSession;
  33. import java.util.Collection;
  34. import java.util.Date;
  35. import java.util.List;
  36. import java.util.Map;
  37. @RestController("AdminUserController")
  38. @RequestMapping("/admin/user")
  39. @Api(tags = "用户接口", description = "用户相关操作", produces = MediaType.APPLICATION_JSON_VALUE)
  40. public class UserController {
  41. private static final Logger logger = LoggerFactory.getLogger(UserController.class);
  42. @Autowired
  43. private ShiroHelp shiroHelp;
  44. @Autowired
  45. private ManagerLogService managerLogService;
  46. @Autowired
  47. private QuestionService questionService;
  48. @Autowired
  49. private QuestionNoService questionNoService;
  50. @Autowired
  51. private UsersService usersService;
  52. @Autowired
  53. private UserServiceService userServiceService;
  54. @Autowired
  55. private UserCourseService userCourseService;
  56. @Autowired
  57. private UserPaperService userPaperService;
  58. @Autowired
  59. private UserReportService userReportService;
  60. @Autowired
  61. private UserOrderService userOrderService;
  62. @Autowired
  63. private ManagerService managerService;
  64. @Autowired
  65. private PreviewService previewService;
  66. @Autowired
  67. private PreviewPaperService previewPaperService;
  68. @Autowired
  69. private UserCourseAppointmentService userCourseAppointmentService;
  70. @Autowired
  71. private UserFeedbackErrorService userFeedbackErrorService;
  72. @Autowired
  73. private UserOrderRecordService userOrderRecordService;
  74. // @RequestMapping(value = "/add", method = RequestMethod.POST)
  75. // @ApiOperation(value = "添加用户信息", httpMethod = "POST")
  76. // public Response<User> add(@RequestBody @Validated UserDto dto, HttpServletRequest request) {
  77. // User entity = Transform.dtoToEntity(dto);
  78. // entity = userService.edit(entity);
  79. // managerLogService.log(request);
  80. // return ResponseHelp.success(Transform.convert(entity, UserDto.class));
  81. // }
  82. // @RequestMapping(value = "/edit", method = RequestMethod.PUT)
  83. // @ApiOperation(value = "修改用户信息", httpMethod = "PUT")
  84. // public Response<Boolean> edit(@RequestBody @Validated UserDto dto, HttpServletRequest request) {
  85. // User entity = Transform.dtoToEntity(dto);
  86. // entity = userService.edit(entity);
  87. // managerLogService.log(request);
  88. // return ResponseHelp.success(true);
  89. // }
  90. //
  91. // @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
  92. // @ApiOperation(value = "删除用户", httpMethod = "DELETE")
  93. // public Response<Boolean> delete(@RequestParam int id, HttpServletRequest request) {
  94. // managerLogService.log(request);
  95. // return ResponseHelp.success(userService.delete(id));
  96. // }
  97. @RequestMapping(value = "/token", method = RequestMethod.GET)
  98. @ApiOperation(value = "获取用户token", httpMethod = "GET")
  99. public Response<String> token(@RequestParam int id, HttpSession session) {
  100. User entity = usersService.get(id);
  101. String token = usersService.getTokenByUser(entity);
  102. return ResponseHelp.success(token);
  103. }
  104. @RequestMapping(value = "/detail", method = RequestMethod.GET)
  105. @ApiOperation(value = "获取用户", httpMethod = "GET")
  106. public Response<UserDetailDto> detail(@RequestParam int id, HttpSession session) {
  107. User entity = usersService.get(id);
  108. UserDetailDto dto = Transform.convert(entity, UserDetailDto.class);
  109. return ResponseHelp.success(dto);
  110. }
  111. @RequestMapping(value = "/list", method = RequestMethod.GET)
  112. @ApiOperation(value = "用户列表", httpMethod = "GET")
  113. public Response<PageMessage<UserListDto>> list(
  114. @RequestParam(required = false, defaultValue = "1") int page,
  115. @RequestParam(required = false, defaultValue = "100") int size,
  116. @RequestParam(required = false, defaultValue = "") String keyword,
  117. @RequestParam(required = false) Integer[] ids,
  118. @RequestParam(required = false) Boolean real,
  119. @RequestParam(required = false) String order,
  120. @RequestParam(required = false, defaultValue = "desc") String direction,
  121. HttpSession session) {
  122. Page<User> p;
  123. if (ids != null && ids.length > 0){
  124. p = usersService.select(ids);
  125. }else{
  126. p = usersService.select(page, size, keyword, real, order, DirectionStatus.ValueOf(direction));
  127. }
  128. List<UserListDto> pr = Transform.convert(p, UserListDto.class);
  129. Collection userIds = Transform.getIds(p, User.class, "id");
  130. // 绑定用户服务
  131. Map<Object, Collection<UserService>> serviceByUser = userServiceService.mapByUser(userIds);
  132. Transform.combine(pr, serviceByUser, UserListDto.class, "id", "services", UserServiceExtendDto.class);
  133. return ResponseHelp.success(pr, page, size, p.getTotal());
  134. }
  135. @RequestMapping(value = "/student/list", method = RequestMethod.GET)
  136. @ApiOperation(value = "会员列表", httpMethod = "GET")
  137. public Response<PageMessage<UserListDto>> members(
  138. @RequestParam(required = false, defaultValue = "1") int page,
  139. @RequestParam(required = false, defaultValue = "100") int size,
  140. @RequestParam(required = false, defaultValue = "") String keyword,
  141. @RequestParam(required = false) Integer courseId,
  142. @RequestParam(required = false) String order,
  143. @RequestParam(required = false, defaultValue = "desc") String direction,
  144. HttpSession session) {
  145. // 已经购买过课程的用户
  146. Page<User> p = usersService.listByCourse(page, size, keyword, courseId);
  147. List<UserListDto> pr = Transform.convert(p, UserListDto.class);
  148. Collection userIds = Transform.getIds(p, User.class, "id");
  149. // 绑定用户课程
  150. Map<Object, Collection<UserCourse>> courseByUser = userCourseService.mapByUser(userIds, false);
  151. Transform.combine(pr, courseByUser, UserListDto.class, "id", "classes", UserCourseExtendDto.class);
  152. return ResponseHelp.success(pr, page, size, p.getTotal());
  153. }
  154. @RequestMapping(value = "/order/list", method = RequestMethod.GET)
  155. @ApiOperation(value = "用户订单列表", httpMethod = "GET")
  156. public Response<PageMessage<UserListDto>> listOrder(
  157. @RequestParam(required = false, defaultValue = "1") int page,
  158. @RequestParam(required = false, defaultValue = "100") int size,
  159. @RequestParam(required = false) Integer userId,
  160. @RequestParam(required = false) String order,
  161. @RequestParam(required = false, defaultValue = "desc") String direction,
  162. HttpSession session) {
  163. Page<UserOrder> p = userOrderService.select(page, size);
  164. List<UserListDto> pr = Transform.convert(p, UserListDto.class);
  165. Collection userIds = Transform.getIds(p, User.class, "id");
  166. // 绑定用户服务
  167. Map<Object, Collection<UserService>> serviceByUser = userServiceService.mapByUser(userIds);
  168. Transform.combine(pr, serviceByUser, UserListDto.class, "id", "services", UserServiceExtendDto.class);
  169. return ResponseHelp.success(pr, page, size, p.getTotal());
  170. }
  171. @RequestMapping(value = "/preview/list", method = RequestMethod.GET)
  172. @ApiOperation(value = "预习作业列表", httpMethod = "GET")
  173. public Response<PageMessage<UserPreviewListDto>> list(
  174. @RequestParam(required = false, defaultValue = "1") int page,
  175. @RequestParam(required = false, defaultValue = "100") int size,
  176. @RequestParam(required = false, defaultValue = "0") int category,
  177. @RequestParam(required = false) Integer userId,
  178. @RequestParam(required = false) Integer previewId,
  179. @RequestParam(required = false) String startTime,
  180. @RequestParam(required = false) String endTime,
  181. HttpSession session) {
  182. PageResult<UserPreviewPaperRelation> p = previewService.listAdmin(page, size, category, userId, previewId, startTime, endTime);
  183. // 绑定用户
  184. Collection userIds = Transform.getIds(p, UserPreviewPaperRelation.class, "userId");
  185. List<User> userList = usersService.select(userIds);
  186. Transform.combine(p, userList, UserPreviewPaperRelation.class, "userId", "user", User.class, "id");
  187. // 绑定预习作业
  188. Collection previewIds = Transform.getIds(p, UserPreviewPaperRelation.class, "moduleId");
  189. List<PreviewPaper> previewPaperList = previewPaperService.select(previewIds);
  190. Transform.combine(p, previewPaperList, UserPreviewPaperRelation.class, "moduleId", "preview", PreviewPaper.class, "id");
  191. List<UserPreviewListDto> pr = Transform.convert(p, UserPreviewListDto.class);
  192. return ResponseHelp.success(pr, page, size, p.getTotal());
  193. }
  194. @RequestMapping(value = "/feedback_error/edit", method = RequestMethod.PUT)
  195. @ApiOperation(value = "修改勘误信息", httpMethod = "PUT")
  196. public Response<Boolean> editFeedbackError(@RequestBody @Validated UserFeedbackErrorDto dto, HttpServletRequest request) {
  197. UserFeedbackError entity = Transform.dtoToEntity(dto);
  198. UserFeedbackError in = userFeedbackErrorService.get(entity.getId());
  199. // 处理设定
  200. if(in.getHandleTime() == null){
  201. entity.setHandleTime(new Date());
  202. Manager manager = shiroHelp.getLoginManager();
  203. entity.setManagerId(manager.getId());
  204. }
  205. entity = userFeedbackErrorService.edit(entity);
  206. managerLogService.log(request);
  207. return ResponseHelp.success(true);
  208. }
  209. @RequestMapping(value = "/feedback_error/detail", method = RequestMethod.GET)
  210. @ApiOperation(value = "勘误详情", httpMethod = "GET")
  211. public Response<UserFeedbackErrorInfoDto> detailFeedbackError(@RequestParam int id, HttpServletRequest request) {
  212. UserFeedbackError entity = userFeedbackErrorService.get(id);
  213. UserFeedbackErrorInfoDto dto = Transform.convert(entity, UserFeedbackErrorInfoDto.class);
  214. User user = usersService.get(entity.getUserId());
  215. UserExtendDto userDto = Transform.convert(user, UserExtendDto.class);
  216. dto.setUser(userDto);
  217. return ResponseHelp.success(dto);
  218. }
  219. @RequestMapping(value = "/feedback_error/list", method = RequestMethod.GET)
  220. @ApiOperation(value = "勘误列表", httpMethod = "GET")
  221. public Response<PageMessage<UserFeedbackErrorInfoDto>> listFeedbackError(
  222. @RequestParam(required = false, defaultValue = "1") int page,
  223. @RequestParam(required = false, defaultValue = "100") int size,
  224. @RequestParam(required = false) String module,
  225. @RequestParam(required = false) Integer status,
  226. @RequestParam(required = false) String keyword,
  227. HttpSession session) {
  228. Page<UserFeedbackError> p = userFeedbackErrorService.listAdmin(page, size, FeedbackModule.ValueOf(module), FeedbackStatus.ValueOf(status), keyword);
  229. List<UserFeedbackErrorInfoDto> pr = Transform.convert(p, UserFeedbackErrorInfoDto.class);
  230. // 绑定用户
  231. Collection userIds = Transform.getIds(p, UserFeedbackError.class, "userId");
  232. List<User> userList = usersService.select(userIds);
  233. Transform.combine(pr, userList, UserFeedbackErrorInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  234. return ResponseHelp.success(pr, page, size, p.getTotal());
  235. }
  236. @RequestMapping(value = "/service/add", method = RequestMethod.POST)
  237. @ApiOperation(value = "添加服务记录", httpMethod = "POST")
  238. private Response<Boolean> addService(@RequestBody @Validated UserServiceRecordDto dto){
  239. UserOrderRecord entity = Transform.dtoToEntity(dto);
  240. entity.setProductType(ProductType.SERVICE.key);
  241. entity.setOrderId(0);
  242. entity.setProductId(0);
  243. if (dto.getMobile() != null && !dto.getMobile().isEmpty()){
  244. // 判断mobile
  245. User user = usersService.getByMobile(dto.getMobile());
  246. if (user == null){
  247. // 创建user
  248. user = usersService.register(dto.getMobile(), null, null);
  249. }
  250. entity.setUserId(user.getId());
  251. }
  252. userOrderRecordService.add(entity);
  253. return ResponseHelp.success(true);
  254. }
  255. @RequestMapping(value = "/service/edit", method = RequestMethod.PUT)
  256. @ApiOperation(value = "修改服务记录", httpMethod = "PUT")
  257. private Response<Boolean> editService(@RequestBody @Validated UserServiceRecordDto dto){
  258. UserOrderRecord entity = Transform.dtoToEntity(dto);
  259. entity.setOrderId(0);
  260. entity.setProductId(0);
  261. entity.setProductType(ProductType.SERVICE.key);
  262. userOrderRecordService.edit(entity);
  263. return ResponseHelp.success(true);
  264. }
  265. @RequestMapping(value = "/service/delete", method = RequestMethod.DELETE)
  266. @ApiOperation(value = "删除服务记录", httpMethod = "DELETE")
  267. private Response<Boolean> deleteService(@RequestParam int id){
  268. userOrderRecordService.delete(id);
  269. return ResponseHelp.success(true);
  270. }
  271. @RequestMapping(value = "/service/list", method = RequestMethod.GET)
  272. @ApiOperation(value = "获取服务列表", httpMethod = "GET")
  273. private Response<PageMessage<UserServiceRecordInfoDto>> listService(
  274. @RequestParam(required = false, defaultValue = "1") int page,
  275. @RequestParam(required = false, defaultValue = "100") int size,
  276. @RequestParam(required = false) String service,
  277. @RequestParam(required = false) String param,
  278. @RequestParam(required = false) Integer userId
  279. ){
  280. Page<UserOrderRecord> p = userOrderRecordService.listWithServiceAdmin(page, size, ServiceKey.ValueOf(service), param, userId);
  281. List<UserServiceRecordInfoDto> pr = Transform.convert(p, UserServiceRecordInfoDto.class);
  282. // 绑定用户
  283. Collection userIds = Transform.getIds(p, UserOrderRecord.class, "userId");
  284. List<User> userList = usersService.select(userIds);
  285. Transform.combine(pr, userList, UserServiceRecordInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  286. return ResponseHelp.success(pr, page, size, p.getTotal());
  287. }
  288. @RequestMapping(value = "/course/appointment/add", method = RequestMethod.POST)
  289. @ApiOperation(value = "添加课程预约", httpMethod = "POST")
  290. public Response<UserCourseAppointment> addCourseAppointment(@RequestBody @Validated UserCourseAppointmentDto dto, HttpServletRequest request) {
  291. UserCourseAppointment entity = Transform.dtoToEntity(dto);
  292. entity = userCourseAppointmentService.addAppointment(entity);
  293. managerLogService.log(request);
  294. return ResponseHelp.success(Transform.convert(entity, CourseTime.class));
  295. }
  296. @RequestMapping(value = "/course/appointment/edit", method = RequestMethod.PUT)
  297. @ApiOperation(value = "编辑课程预约", httpMethod = "PUT")
  298. public Response<Boolean> editCourseAppointment(@RequestBody @Validated UserCourseAppointmentDto dto, HttpServletRequest request) {
  299. UserCourseAppointment entity = Transform.dtoToEntity(dto);
  300. entity = userCourseAppointmentService.edit(entity);
  301. managerLogService.log(request);
  302. return ResponseHelp.success(true);
  303. }
  304. // @RequestMapping(value = "/course/appointment/delete", method = RequestMethod.DELETE)
  305. // @ApiOperation(value = "删除课程预约", httpMethod = "DELETE")
  306. // public Response<Boolean> deleteCourseAppointment(@RequestParam int id, HttpServletRequest request) {
  307. // userCourseAppointmentService.delete(id);
  308. // managerLogService.log(request);
  309. // return ResponseHelp.success(true);
  310. // }
  311. @RequestMapping(value = "/course/appointment/detail", method = RequestMethod.GET)
  312. @ApiOperation(value = "获取课程预约", httpMethod = "GET")
  313. public Response<CourseTime> detailCourseAppointment(@RequestParam int id,HttpSession session) {
  314. UserCourseAppointment entity = userCourseAppointmentService.get(id);
  315. return ResponseHelp.success(Transform.convert(entity, UserCourseAppointment.class));
  316. }
  317. @RequestMapping(value = "/course/appointment/list", method = RequestMethod.GET)
  318. @ApiOperation(value = "课程预约列表", httpMethod = "GET")
  319. public Response<PageMessage<UserCourseAppointmentInfoDto>> listCourseAppointment(
  320. @RequestParam(required = false, defaultValue = "1") int page,
  321. @RequestParam(required = false, defaultValue = "100") int size,
  322. @RequestParam(required = false) Integer[] ids,
  323. @RequestParam(required = false) Integer recordId,
  324. HttpSession session) {
  325. Page<UserCourseAppointment> p;
  326. if (ids != null && ids.length > 0){
  327. p = userCourseAppointmentService.select(ids);
  328. }else{
  329. p = userCourseAppointmentService.listAdmin(page, size, recordId);
  330. }
  331. List<UserCourseAppointmentInfoDto> pr = Transform.convert(p, UserCourseAppointmentInfoDto.class);
  332. Collection paperIds = Transform.getIds(p, UserCourseAppointment.class, "paperId");
  333. List<UserPaper> userPaperList = userPaperService.select(paperIds);
  334. Transform.combine(pr, userPaperList, UserCourseAppointmentInfoDto.class, "paperId", "userPaper", UserPaper.class, "id", UserPaperExtendDto.class);
  335. // 获取最后一次作业结果
  336. List<UserReport> reportList = userReportService.listWithLater(paperIds);
  337. Map reportMap = Transform.getMap(reportList, UserReport.class, "id");
  338. Transform.combine(pr, reportMap, UserCourseAppointmentInfoDto.class, "paperId", "reportId");
  339. return ResponseHelp.success(pr, page, size, p.getTotal());
  340. }
  341. @RequestMapping(value = "/valid/mobile", method = RequestMethod.GET)
  342. @ApiOperation(value = "验证手机号", notes="查询手机对应账号", httpMethod = "GET")
  343. public Response<Boolean> validMobile(
  344. @RequestParam(required = true) String mobile
  345. ){
  346. User user = usersService.getByMobile(mobile);
  347. if(user == null){
  348. return ResponseHelp.success(false);
  349. }else{
  350. return ResponseHelp.success(true);
  351. }
  352. }
  353. }