UserController.java 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006
  1. package com.qxgmat.controller.admin;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.*;
  4. import com.nuliji.tools.exception.ParameterException;
  5. import com.qxgmat.data.constants.enums.ServiceKey;
  6. import com.qxgmat.data.constants.enums.module.FeedbackModule;
  7. import com.qxgmat.data.constants.enums.module.ProductType;
  8. import com.qxgmat.data.constants.enums.status.DirectionStatus;
  9. import com.qxgmat.data.constants.enums.status.FeedbackStatus;
  10. import com.qxgmat.data.constants.enums.trade.PayMethod;
  11. import com.qxgmat.data.constants.enums.trade.RecordSource;
  12. import com.qxgmat.data.constants.enums.user.MoneyRange;
  13. import com.qxgmat.data.dao.entity.*;
  14. import com.qxgmat.dto.admin.extend.*;
  15. import com.qxgmat.dto.admin.request.*;
  16. import com.qxgmat.dto.admin.response.*;
  17. import com.qxgmat.help.ShiroHelp;
  18. import com.qxgmat.service.ManagerService;
  19. import com.qxgmat.service.UserPaperService;
  20. import com.qxgmat.service.UserServiceService;
  21. import com.qxgmat.service.extend.*;
  22. import com.qxgmat.service.UsersService;
  23. import com.qxgmat.service.inline.*;
  24. import io.swagger.annotations.Api;
  25. import io.swagger.annotations.ApiOperation;
  26. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  27. import org.apache.poi.ss.usermodel.Cell;
  28. import org.apache.poi.ss.usermodel.Row;
  29. import org.apache.poi.ss.usermodel.Sheet;
  30. import org.apache.poi.ss.usermodel.Workbook;
  31. import org.slf4j.Logger;
  32. import org.slf4j.LoggerFactory;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.http.MediaType;
  35. import org.springframework.validation.annotation.Validated;
  36. import org.springframework.web.bind.annotation.*;
  37. import javax.servlet.ServletOutputStream;
  38. import javax.servlet.http.HttpServletRequest;
  39. import javax.servlet.http.HttpServletResponse;
  40. import javax.servlet.http.HttpSession;
  41. import java.io.*;
  42. import java.math.BigDecimal;
  43. import java.text.SimpleDateFormat;
  44. import java.util.Collection;
  45. import java.util.Date;
  46. import java.util.List;
  47. import java.util.Map;
  48. import java.util.stream.Collectors;
  49. @RestController("AdminUserController")
  50. @RequestMapping("/admin/user")
  51. @Api(tags = "用户接口", description = "用户相关操作", produces = MediaType.APPLICATION_JSON_VALUE)
  52. public class UserController {
  53. private static final Logger logger = LoggerFactory.getLogger(UserController.class);
  54. @Autowired
  55. private ShiroHelp shiroHelp;
  56. @Autowired
  57. private ManagerLogService managerLogService;
  58. @Autowired
  59. private CourseService courseService;
  60. @Autowired
  61. private CourseNoService courseNoService;
  62. @Autowired
  63. private CourseDataService courseDataService;
  64. @Autowired
  65. private CoursePackageService coursePackageService;
  66. @Autowired
  67. private QuestionService questionService;
  68. @Autowired
  69. private QuestionNoService questionNoService;
  70. @Autowired
  71. private UsersService usersService;
  72. @Autowired
  73. private UserServiceService userServiceService;
  74. @Autowired
  75. private UserCourseService userCourseService;
  76. @Autowired
  77. private UserPaperService userPaperService;
  78. @Autowired
  79. private UserReportService userReportService;
  80. @Autowired
  81. private UserOrderService userOrderService;
  82. @Autowired
  83. private ManagerService managerService;
  84. @Autowired
  85. private PreviewService previewService;
  86. @Autowired
  87. private PreviewPaperService previewPaperService;
  88. @Autowired
  89. private PreviewAssignService previewAssignService;
  90. @Autowired
  91. private TextbookLibraryService textbookLibraryService;
  92. @Autowired
  93. private TextbookTopicService textbookTopicService;
  94. @Autowired
  95. private UserCourseAppointmentService userCourseAppointmentService;
  96. @Autowired
  97. private UserCourseAppointmentCommentService userCourseAppointmentCommentService;
  98. @Autowired
  99. private UserFeedbackErrorService userFeedbackErrorService;
  100. @Autowired
  101. private UserTextbookFeedbackService userTextbookFeedbackService;
  102. @Autowired
  103. private UserOrderRecordService userOrderRecordService;
  104. @Autowired
  105. private UserOrderCheckoutService userOrderCheckoutService;
  106. @Autowired
  107. private QuestionFlowService questionFlowService;
  108. @Autowired
  109. private OrderFlowService orderFlowService;
  110. @Autowired
  111. private CourseExtendService courseExtendService;
  112. @Autowired
  113. private SentenceService sentenceService;
  114. @Autowired
  115. private UserInvoiceService userInvoiceService;
  116. @Autowired
  117. private UserAbnormalService userAbnormalService;
  118. @Autowired
  119. private UserCourseProgressService userCourseProgressService;
  120. @Autowired
  121. private UserCourseRecordService userCourseRecordService;
  122. @Autowired
  123. private MessageExtendService messageExtendService;
  124. @RequestMapping(value = "/token", method = RequestMethod.GET)
  125. @ApiOperation(value = "获取用户token", httpMethod = "GET")
  126. public Response<String> token(@RequestParam int id, HttpSession session) {
  127. User entity = usersService.get(id);
  128. String token = usersService.getTokenByUser(entity);
  129. return ResponseHelp.success(token);
  130. }
  131. @RequestMapping(value = "/add", method = RequestMethod.POST)
  132. @ApiOperation(value = "人工添加用户", httpMethod = "POST")
  133. public Response<Boolean> add(@RequestBody @Validated UserDto dto, HttpSession session) {
  134. User entity = Transform.dtoToEntity(dto);
  135. User in = usersService.getByMobile(entity.getArea(), entity.getMobile());
  136. if (in != null){
  137. throw new ParameterException("手机号已注册");
  138. }
  139. usersService.add(entity);
  140. return ResponseHelp.success(true);
  141. }
  142. @RequestMapping(value = "/detail", method = RequestMethod.GET)
  143. @ApiOperation(value = "获取用户", httpMethod = "GET")
  144. public Response<UserDetailDto> detail(@RequestParam int id, HttpSession session) {
  145. User entity = usersService.get(id);
  146. UserDetailDto dto = Transform.convert(entity, UserDetailDto.class);
  147. Integer time = 0;
  148. time += courseExtendService.studyTime(id, null, null);
  149. time += sentenceService.studyTime(id, null, null);
  150. time += questionFlowService.studyTime(id, null, null);
  151. dto.setTotalTime(time);
  152. return ResponseHelp.success(dto);
  153. }
  154. @RequestMapping(value = "/real", method = RequestMethod.POST)
  155. @ApiOperation(value = "实名认证", httpMethod = "POST")
  156. public Response<Boolean> real(@RequestBody @Validated UserRealDto dto, HttpSession session) {
  157. User in = usersService.get(dto.getId());
  158. if (in == null){
  159. throw new ParameterException("用户不存在");
  160. }
  161. if (in.getRealTime() != null){
  162. throw new ParameterException("实名认证已通过");
  163. }
  164. User entity = Transform.dtoToEntity(dto);
  165. entity.setRealStatus(1);
  166. entity.setRealTime(new Date());
  167. usersService.edit(entity);
  168. orderFlowService.giveReal(in.getId());
  169. return ResponseHelp.success(true);
  170. }
  171. @RequestMapping(value = "/money/add", method = RequestMethod.POST)
  172. @ApiOperation(value = "增加用户累计金额", httpMethod = "POST")
  173. public Response<Boolean> addMoney(@RequestBody @Validated UserMoneyDto dto, HttpSession session) {
  174. User in = usersService.get(dto.getId());
  175. if (in == null){
  176. throw new ParameterException("用户不存在");
  177. }
  178. usersService.accumulation(dto.getId(), BigDecimal.valueOf(dto.getMoney()));
  179. return ResponseHelp.success(true);
  180. }
  181. @RequestMapping(value = "/frozen", method = RequestMethod.POST)
  182. @ApiOperation(value = "冻结用户", httpMethod = "POST")
  183. public Response<Boolean> frozen(@RequestBody @Validated UserFrozenDto dto, HttpSession session) {
  184. User entity = usersService.get(dto.getId());
  185. if (entity.getIsFrozen() > 0){
  186. throw new ParameterException("用户已冻结");
  187. }
  188. usersService.edit(User.builder()
  189. .id(dto.getId())
  190. .isFrozen(1)
  191. .build());
  192. return ResponseHelp.success(true);
  193. }
  194. @RequestMapping(value = "/nofrozen", method = RequestMethod.POST)
  195. @ApiOperation(value = "取消冻结用户", httpMethod = "POST")
  196. public Response<Boolean> noFrozen(@RequestBody @Validated UserFrozenDto dto, HttpSession session) {
  197. User entity = usersService.get(dto.getId());
  198. if (entity.getIsFrozen() == 0){
  199. throw new ParameterException("用户未冻结");
  200. }
  201. usersService.edit(User.builder()
  202. .id(dto.getId())
  203. .isFrozen(0)
  204. .build());
  205. return ResponseHelp.success(true);
  206. }
  207. @RequestMapping(value = "/list", method = RequestMethod.GET)
  208. @ApiOperation(value = "用户列表", httpMethod = "GET")
  209. public Response<PageMessage<UserListDto>> list(
  210. @RequestParam(required = false, defaultValue = "1") int page,
  211. @RequestParam(required = false, defaultValue = "100") int size,
  212. @RequestParam(required = false, defaultValue = "") String keyword,
  213. @RequestParam(required = false) Integer[] ids,
  214. @RequestParam(required = false) Boolean real,
  215. @RequestParam(required = false) Boolean wechat,
  216. @RequestParam(required = false) Boolean prepare,
  217. @RequestParam(required = false) String startTime,
  218. @RequestParam(required = false) String endTime,
  219. @RequestParam(required = false, defaultValue = "id") String order,
  220. @RequestParam(required = false, defaultValue = "desc") String direction,
  221. HttpSession session) {
  222. Page<User> p;
  223. if (ids != null && ids.length > 0){
  224. p = usersService.select(ids);
  225. }else{
  226. p = usersService.listAdmin(page, size, keyword, real, wechat, prepare, startTime, endTime, order, DirectionStatus.ValueOf(direction));
  227. }
  228. List<UserListDto> pr = Transform.convert(p, UserListDto.class);
  229. Collection userIds = Transform.getIds(p, User.class, "id");
  230. // 绑定用户服务
  231. Map<Object, Collection<UserService>> serviceByUser = userServiceService.mapByUser(userIds);
  232. Transform.combine(pr, serviceByUser, UserListDto.class, "id", "services", UserServiceExtendDto.class);
  233. return ResponseHelp.success(pr, page, size, p.getTotal());
  234. }
  235. @RequestMapping(value = "/student/list", method = RequestMethod.GET)
  236. @ApiOperation(value = "会员列表", httpMethod = "GET")
  237. public Response<PageMessage<UserListDto>> members(
  238. @RequestParam(required = false, defaultValue = "1") int page,
  239. @RequestParam(required = false, defaultValue = "100") int size,
  240. @RequestParam(required = false, defaultValue = "") String keyword,
  241. @RequestParam(required = false) Integer courseId,
  242. @RequestParam(required = false, defaultValue = "id") String order,
  243. @RequestParam(required = false, defaultValue = "desc") String direction,
  244. HttpSession session) {
  245. // 已经购买过课程的用户
  246. Page<User> p = usersService.listAdminByCourse(page, size, keyword, courseId, order, DirectionStatus.ValueOf(direction));
  247. List<UserListDto> pr = Transform.convert(p, UserListDto.class);
  248. Collection userIds = Transform.getIds(p, User.class, "id");
  249. // 绑定用户课程
  250. Map<Object, Collection<UserCourse>> courseByUser = userCourseService.mapByUser(userIds, false);
  251. Transform.combine(pr, courseByUser, UserListDto.class, "id", "classes", UserCourseExtendDto.class);
  252. return ResponseHelp.success(pr, page, size, p.getTotal());
  253. }
  254. @RequestMapping(value = "/order/detail", method = RequestMethod.GET)
  255. @ApiOperation(value = "用户订单列表", httpMethod = "GET")
  256. public Response<UserOrderDetailDto> getOrder(@RequestParam int id,
  257. HttpSession session) {
  258. UserOrder entity = userOrderService.get(id);
  259. UserOrderDetailDto dto = Transform.convert(entity, UserOrderDetailDto.class);
  260. List<UserOrderRecordExtendDto> list;
  261. if(entity.getPayStatus() == 0){
  262. List<UserOrderCheckout> checkoutList = userOrderCheckoutService.allByUser(entity.getUserId(), entity.getId());
  263. list = Transform.convert(checkoutList, UserOrderRecordExtendDto.class);
  264. }else{
  265. List<UserOrderRecord> recordList = userOrderRecordService.allByUser(entity.getUserId(), entity.getId());
  266. list = Transform.convert(recordList, UserOrderRecordExtendDto.class);
  267. }
  268. dto.setCheckouts(list);
  269. List<UserOrderRecordExtendDto> courseCheckout = list.stream().filter((row)->row.getProductType().equals(ProductType.COURSE.key)).collect(Collectors.toList());
  270. Collection courseIds = Transform.getIds(courseCheckout, UserOrderRecordExtendDto.class, "productId");
  271. List<Course> courseList = courseService.select(courseIds);
  272. dto.setCourses(Transform.convert(courseList, CourseExtendDto.class));
  273. List<UserOrderRecordExtendDto> dataCheckout = list.stream().filter((row)->row.getProductType().equals(ProductType.DATA.key)).collect(Collectors.toList());
  274. Collection dataIds = Transform.getIds(dataCheckout, UserOrderRecordExtendDto.class, "productId");
  275. List<CourseData> dataList = courseDataService.select(dataIds);
  276. dto.setDatas(Transform.convert(dataList, CourseDataExtendDto.class));
  277. List<UserOrderRecordExtendDto> packageCheckout = list.stream().filter((row)->row.getProductType().equals(ProductType.COURSE_PACKAGE.key)).collect(Collectors.toList());
  278. Collection packageIds = Transform.getIds(packageCheckout, UserOrderRecordExtendDto.class, "productId");
  279. List<CoursePackage> packageList = coursePackageService.select(packageIds);
  280. dto.setPackages(Transform.convert(packageList, CoursePackageExtendDto.class));
  281. return ResponseHelp.success(dto);
  282. }
  283. @RequestMapping(value = "/order/finish", method = RequestMethod.PUT)
  284. @ApiOperation(value = "完成支付", httpMethod = "PUT")
  285. private Response<Boolean> finishOrder(@RequestBody @Validated UserOrderFinishDto dto){
  286. UserOrder order = userOrderService.get(dto.getId());
  287. orderFlowService.payed(order.getId(), order.getUserId(), 0L, new Date(), PayMethod.BANK, dto.getTransactionNo());
  288. return ResponseHelp.success(true);
  289. }
  290. @RequestMapping(value = "/order/list", method = RequestMethod.GET)
  291. @ApiOperation(value = "用户订单列表", httpMethod = "GET")
  292. public Response<PageMessage<UserOrderListDto>> listOrder(
  293. @RequestParam(required = false, defaultValue = "1") int page,
  294. @RequestParam(required = false, defaultValue = "100") int size,
  295. @RequestParam(required = false) Integer userId,
  296. @RequestParam(required = false) String productType,
  297. @RequestParam(required = false) String payMethod,
  298. @RequestParam(required = false) Integer orderId,
  299. @RequestParam(required = false, defaultValue = "id") String order,
  300. @RequestParam(required = false, defaultValue = "desc") String direction,
  301. HttpSession session) {
  302. Page<UserOrder> p = userOrderService.listAdmin(page, size, userId, productType, payMethod, orderId, order, DirectionStatus.ValueOf(direction));
  303. List<UserOrderListDto> pr = Transform.convert(p, UserOrderListDto.class);
  304. // 绑定用户
  305. Collection userIds = Transform.getIds(p, UserOrder.class, "userId");
  306. List<User> userList = usersService.select(userIds);
  307. Transform.combine(pr, userList, UserOrderListDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  308. return ResponseHelp.success(pr, page, size, p.getTotal());
  309. }
  310. @RequestMapping(value = "/record/stop", method = RequestMethod.PUT)
  311. @ApiOperation(value = "停止记录", httpMethod = "PUT")
  312. private Response<Boolean> editService(@RequestBody @Validated UserRecordStopDto dto){
  313. orderFlowService.stopRecord(dto.getId());
  314. return ResponseHelp.success(true);
  315. }
  316. @RequestMapping(value = "/record/list", method = RequestMethod.GET)
  317. @ApiOperation(value = "用户购买列表", httpMethod = "GET")
  318. public Response<PageMessage<UserOrderRecordListDto>> listRecord(
  319. @RequestParam(required = false, defaultValue = "1") int page,
  320. @RequestParam(required = false, defaultValue = "100") int size,
  321. @RequestParam(required = false) Integer orderId,
  322. @RequestParam(required = false) Integer userId,
  323. @RequestParam(required = false) String productType,
  324. @RequestParam(required = false) Integer productId,
  325. @RequestParam(required = false) String service,
  326. @RequestParam(required = false) Boolean needMoney,
  327. @RequestParam(required = false) Boolean needPackage,
  328. @RequestParam(required = false) String order,
  329. @RequestParam(required = false, defaultValue = "desc") String direction,
  330. HttpSession session) {
  331. Page<UserOrderRecord> p = userOrderRecordService.listAdmin(page, size, orderId, userId, ProductType.ValueOf(productType), productId, ServiceKey.ValueOf(service), needMoney,needPackage, order, DirectionStatus.ValueOf(direction));
  332. List<UserOrderRecordListDto> pr = Transform.convert(p, UserOrderRecordListDto.class);
  333. // 绑定用户
  334. Collection userIds = Transform.getIds(p, UserOrderRecord.class, "userId");
  335. List<User> userList = usersService.select(userIds);
  336. Transform.combine(pr, userList, UserOrderRecordListDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  337. // 绑定课程
  338. List<UserOrderRecordListDto> prCourse = pr.stream().filter((row)-> row.getProductType().equals(ProductType.COURSE.key)).collect(Collectors.toList());
  339. Collection courseIds = Transform.getIds(prCourse, UserOrderRecordListDto.class, "productId");
  340. List<Course> courseList = courseService.select(courseIds);
  341. Transform.combine(prCourse, courseList, UserOrderRecordListDto.class, "productId", "course", Course.class, "id", CourseExtendDto.class);
  342. // 绑定资料
  343. List<UserOrderRecordListDto> prData = pr.stream().filter((row)-> row.getProductType().equals(ProductType.DATA.key)).collect(Collectors.toList());
  344. Collection dataIds = Transform.getIds(prData, UserOrderRecordListDto.class, "productId");
  345. List<CourseData> dataList = courseDataService.select(dataIds);
  346. Transform.combine(prData, dataList, UserOrderRecordListDto.class, "productId", "data", CourseData.class, "id", CourseDataExtendDto.class);
  347. return ResponseHelp.success(pr, page, size, p.getTotal());
  348. }
  349. @RequestMapping(value = "/data/add", method = RequestMethod.POST)
  350. @ApiOperation(value = "添加资料记录", httpMethod = "POST")
  351. private Response<Boolean> addData(@RequestBody @Validated UserDataRecordDto dto){
  352. UserOrderRecord entity = Transform.dtoToEntity(dto);
  353. entity.setProductType(ProductType.DATA.key);
  354. entity.setOrderId(0);
  355. entity.setProductId(dto.getDataId());
  356. if (dto.getMobile() != null && !dto.getMobile().isEmpty()){
  357. // 判断mobile
  358. User user = usersService.getByMobile(dto.getArea(), dto.getMobile());
  359. if (user == null){
  360. // 创建user
  361. user = usersService.register(dto.getArea(), dto.getMobile(), null,null, null,"", null);
  362. }
  363. entity.setUserId(user.getId());
  364. }
  365. // 后台服务创建,都默认你为后台创建
  366. entity.setSource(RecordSource.BACKEND.key);
  367. orderFlowService.addRecord(entity);
  368. return ResponseHelp.success(true);
  369. }
  370. @RequestMapping(value = "/service/add", method = RequestMethod.POST)
  371. @ApiOperation(value = "添加服务记录", httpMethod = "POST")
  372. private Response<Boolean> addService(@RequestBody @Validated UserServiceRecordDto dto){
  373. UserOrderRecord entity = Transform.dtoToEntity(dto);
  374. entity.setProductType(ProductType.SERVICE.key);
  375. entity.setOrderId(0);
  376. entity.setProductId(0);
  377. if (dto.getMobile() != null && !dto.getMobile().isEmpty()){
  378. // 判断mobile
  379. User user = usersService.getByMobile(dto.getArea(), dto.getMobile());
  380. if (user == null){
  381. // 创建user
  382. user = usersService.register(dto.getArea(), dto.getMobile(), null,null, null,"", null);
  383. }
  384. entity.setUserId(user.getId());
  385. }
  386. // 后台服务创建,都默认你为后台创建
  387. entity.setSource(RecordSource.BACKEND.key);
  388. orderFlowService.addRecord(entity);
  389. return ResponseHelp.success(true);
  390. }
  391. @RequestMapping(value = "/service/list", method = RequestMethod.GET)
  392. @ApiOperation(value = "获取服务列表", httpMethod = "GET")
  393. private Response<PageMessage<UserServiceRecordInfoDto>> listService(
  394. @RequestParam(required = false, defaultValue = "1") int page,
  395. @RequestParam(required = false, defaultValue = "100") int size,
  396. @RequestParam(required = false) String service,
  397. @RequestParam(required = false) String param,
  398. @RequestParam(required = false) Integer userId,
  399. @RequestParam(required = false, defaultValue = "id") String order,
  400. @RequestParam(required = false, defaultValue = "desc") String direction
  401. ){
  402. Page<UserOrderRecord> p = userOrderRecordService.listWithServiceAdmin(page, size, ServiceKey.ValueOf(service), param, userId);
  403. List<UserServiceRecordInfoDto> pr = Transform.convert(p, UserServiceRecordInfoDto.class);
  404. // 绑定用户
  405. Collection userIds = Transform.getIds(p, UserOrderRecord.class, "userId");
  406. List<User> userList = usersService.select(userIds);
  407. Transform.combine(pr, userList, UserServiceRecordInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  408. return ResponseHelp.success(pr, page, size, p.getTotal());
  409. }
  410. @RequestMapping(value = "/feedback_error/edit", method = RequestMethod.PUT)
  411. @ApiOperation(value = "修改勘误信息", httpMethod = "PUT")
  412. public Response<Boolean> editFeedbackError(@RequestBody @Validated UserFeedbackErrorDto dto, HttpServletRequest request) {
  413. UserFeedbackError entity = Transform.dtoToEntity(dto);
  414. UserFeedbackError in = userFeedbackErrorService.get(entity.getId());
  415. // 处理设定
  416. if(in.getHandleTime() == null){
  417. entity.setHandleTime(new Date());
  418. Manager manager = shiroHelp.getLoginManager();
  419. entity.setManagerId(manager.getId());
  420. User user = usersService.get(in.getUserId());
  421. messageExtendService.sendFeedbackAnswer(user, in);
  422. }
  423. entity = userFeedbackErrorService.edit(entity);
  424. managerLogService.log(request);
  425. return ResponseHelp.success(true);
  426. }
  427. @RequestMapping(value = "/feedback_error/detail", method = RequestMethod.GET)
  428. @ApiOperation(value = "勘误详情", httpMethod = "GET")
  429. public Response<UserFeedbackErrorInfoDto> detailFeedbackError(@RequestParam int id, HttpServletRequest request) {
  430. UserFeedbackError entity = userFeedbackErrorService.get(id);
  431. UserFeedbackErrorInfoDto dto = Transform.convert(entity, UserFeedbackErrorInfoDto.class);
  432. User user = usersService.get(entity.getUserId());
  433. UserExtendDto userDto = Transform.convert(user, UserExtendDto.class);
  434. dto.setUser(userDto);
  435. return ResponseHelp.success(dto);
  436. }
  437. @RequestMapping(value = "/feedback_error/list", method = RequestMethod.GET)
  438. @ApiOperation(value = "勘误列表", httpMethod = "GET")
  439. public Response<PageMessage<UserFeedbackErrorInfoDto>> listFeedbackError(
  440. @RequestParam(required = false, defaultValue = "1") int page,
  441. @RequestParam(required = false, defaultValue = "100") int size,
  442. @RequestParam(required = false) String module,
  443. @RequestParam(required = false) String questionType,
  444. @RequestParam(required = false) String target,
  445. @RequestParam(required = false) Integer moduleId,
  446. @RequestParam(required = false) Integer userId,
  447. @RequestParam(required = false) Integer status,
  448. @RequestParam(required = false) String keyword,
  449. @RequestParam(required = false) Integer moneyRang,
  450. @RequestParam(required = false, defaultValue = "id") String order,
  451. @RequestParam(required = false, defaultValue = "desc") String direction,
  452. HttpSession session) {
  453. Page<UserFeedbackError> p = userFeedbackErrorService.listAdmin(page, size, FeedbackModule.ValueOf(module), FeedbackStatus.ValueOf(status), questionType, target, moduleId, keyword, userId, MoneyRange.ValueOf(moneyRang), order, DirectionStatus.ValueOf(direction));
  454. List<UserFeedbackErrorInfoDto> pr = Transform.convert(p, UserFeedbackErrorInfoDto.class);
  455. // 绑定用户
  456. Collection userIds = Transform.getIds(p, UserFeedbackError.class, "userId");
  457. List<User> userList = usersService.select(userIds);
  458. Transform.combine(pr, userList, UserFeedbackErrorInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  459. return ResponseHelp.success(pr, page, size, p.getTotal());
  460. }
  461. @RequestMapping(value = "/textbook_feedback/edit", method = RequestMethod.PUT)
  462. @ApiOperation(value = "修改机经勘误信息", httpMethod = "PUT")
  463. public Response<Boolean> editTextbookFeedback(@RequestBody @Validated UserFeedbackErrorDto dto, HttpServletRequest request) {
  464. UserFeedbackError entity = Transform.dtoToEntity(dto);
  465. UserFeedbackError in = userFeedbackErrorService.get(entity.getId());
  466. // 处理设定
  467. if(in.getHandleTime() == null){
  468. entity.setHandleTime(new Date());
  469. Manager manager = shiroHelp.getLoginManager();
  470. entity.setManagerId(manager.getId());
  471. }
  472. entity = userFeedbackErrorService.edit(entity);
  473. managerLogService.log(request);
  474. return ResponseHelp.success(true);
  475. }
  476. @RequestMapping(value = "/textbook_feedback/detail", method = RequestMethod.GET)
  477. @ApiOperation(value = "机经勘误详情", httpMethod = "GET")
  478. public Response<UserTextbookFeedbackInfoDto> detailTextbookFeedback(@RequestParam int id, HttpServletRequest request) {
  479. UserTextbookFeedback entity = userTextbookFeedbackService.get(id);
  480. UserTextbookFeedbackInfoDto dto = Transform.convert(entity, UserTextbookFeedbackInfoDto.class);
  481. User user = usersService.get(entity.getUserId());
  482. UserExtendDto userDto = Transform.convert(user, UserExtendDto.class);
  483. dto.setUser(userDto);
  484. TextbookLibrary library = textbookLibraryService.get(entity.getLibraryId());
  485. TextbookLibraryExtendDto libraryDto = Transform.convert(library, TextbookLibraryExtendDto.class);
  486. dto.setLibrary(libraryDto);
  487. TextbookTopic topic = textbookTopicService.get(entity.getTopicId());
  488. TextbookTopicExtendDto topicDto = Transform.convert(library, TextbookTopicExtendDto.class);
  489. dto.setTopic(topicDto);
  490. return ResponseHelp.success(dto);
  491. }
  492. @RequestMapping(value = "/textbook_feedback/list", method = RequestMethod.GET)
  493. @ApiOperation(value = "机经勘误列表", httpMethod = "GET")
  494. public Response<PageMessage<UserTextbookFeedbackInfoDto>> listTextbookFeedback(
  495. @RequestParam(required = false, defaultValue = "1") int page,
  496. @RequestParam(required = false, defaultValue = "100") int size,
  497. @RequestParam(required = false) String target,
  498. @RequestParam(required = false) String questionSubject,
  499. @RequestParam(required = false) Integer status,
  500. @RequestParam(required = false) Integer no,
  501. @RequestParam(required = false, defaultValue = "id") String order,
  502. @RequestParam(required = false, defaultValue = "desc") String direction,
  503. HttpSession session) {
  504. Page<UserTextbookFeedback> p = userTextbookFeedbackService.listAdmin(page, size, target, questionSubject, FeedbackStatus.ValueOf(status), no, order, DirectionStatus.ValueOf(direction));
  505. List<UserTextbookFeedbackInfoDto> pr = Transform.convert(p, UserTextbookFeedbackInfoDto.class);
  506. // 绑定用户
  507. Collection userIds = Transform.getIds(p, UserTextbookFeedback.class, "userId");
  508. List<User> userList = usersService.select(userIds);
  509. Transform.combine(pr, userList, UserTextbookFeedbackInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  510. // 绑定换库
  511. Collection libraryIds = Transform.getIds(p, UserTextbookFeedback.class, "libraryId");
  512. List<TextbookLibrary> libraryList = textbookLibraryService.select(libraryIds);
  513. Transform.combine(pr, libraryList, UserTextbookFeedbackInfoDto.class, "libraryId", "library", TextbookLibrary.class, "id", TextbookLibraryExtendDto.class);
  514. // 绑定题目
  515. Collection topicIds = Transform.getIds(p, UserTextbookFeedback.class, "topicId");
  516. List<TextbookTopic> topicList = textbookTopicService.select(topicIds);
  517. Transform.combine(pr, topicList, UserTextbookFeedbackInfoDto.class, "topicId", "topic", TextbookTopic.class, "id", TextbookTopicExtendDto.class);
  518. return ResponseHelp.success(pr, page, size, p.getTotal());
  519. }
  520. @RequestMapping(value = "/course/appointment/add", method = RequestMethod.POST)
  521. @ApiOperation(value = "添加课程预约", httpMethod = "POST")
  522. public Response<UserCourseAppointment> addCourseAppointment(@RequestBody @Validated UserCourseAppointmentDto dto, HttpServletRequest request) {
  523. // 判断课程是否已开通,否则先开通课程
  524. UserOrderRecord record = userOrderRecordService.get(dto.getRecordId());
  525. if (record==null){
  526. throw new ParameterException("记录不存在");
  527. }
  528. if (record.getIsUsed()==0){
  529. orderFlowService.useRecord(dto.getUserId(), dto.getRecordId());
  530. }else if(record.getIsStop() > 0){
  531. throw new ParameterException("已停用");
  532. }
  533. UserCourseAppointment entity = Transform.dtoToEntity(dto);
  534. entity = userCourseAppointmentService.addAppointment(entity);
  535. // 第一次预约,开通
  536. if (entity.getNo() == 1){
  537. orderFlowService.useRecord(record.getUserId(), record.getId());
  538. }
  539. managerLogService.log(request);
  540. return ResponseHelp.success(Transform.convert(entity, CourseTime.class));
  541. }
  542. @RequestMapping(value = "/course/appointment/edit", method = RequestMethod.PUT)
  543. @ApiOperation(value = "编辑课程预约", httpMethod = "PUT")
  544. public Response<Boolean> editCourseAppointment(@RequestBody @Validated UserCourseAppointmentDto dto, HttpServletRequest request) {
  545. UserCourseAppointment entity = Transform.dtoToEntity(dto);
  546. entity = userCourseAppointmentService.edit(entity);
  547. managerLogService.log(request);
  548. return ResponseHelp.success(true);
  549. }
  550. @RequestMapping(value = "/course/appointment/delete", method = RequestMethod.DELETE)
  551. @ApiOperation(value = "删除课程预约", httpMethod = "DELETE")
  552. public Response<Boolean> deleteCourseAppointment(@RequestParam int id, HttpServletRequest request) {
  553. UserCourseAppointment in = userCourseAppointmentService.get(id);
  554. // 调整课时序号
  555. userCourseAppointmentService.deleteAppointment(id);
  556. // 删除对应预习作业关系
  557. previewAssignService.removeCourseAppointment(in.getCourseId(), in.getId());
  558. managerLogService.log(request);
  559. return ResponseHelp.success(true);
  560. }
  561. @RequestMapping(value = "/course/appointment/detail", method = RequestMethod.GET)
  562. @ApiOperation(value = "获取课程预约", httpMethod = "GET")
  563. public Response<CourseTime> detailCourseAppointment(@RequestParam int id,HttpSession session) {
  564. UserCourseAppointment entity = userCourseAppointmentService.get(id);
  565. return ResponseHelp.success(Transform.convert(entity, UserCourseAppointment.class));
  566. }
  567. @RequestMapping(value = "/course/appointment/list", method = RequestMethod.GET)
  568. @ApiOperation(value = "课程预约列表", httpMethod = "GET")
  569. public Response<PageMessage<UserCourseAppointmentInfoDto>> listCourseAppointment(
  570. @RequestParam(required = false, defaultValue = "1") int page,
  571. @RequestParam(required = false, defaultValue = "100") int size,
  572. @RequestParam(required = false) Integer[] ids,
  573. @RequestParam(required = false) Integer recordId,
  574. @RequestParam(required = false) Integer userId,
  575. @RequestParam(required = false) Integer courseId,
  576. @RequestParam(required = false) String startTime,
  577. @RequestParam(required = false) String endTime,
  578. @RequestParam(required = false, defaultValue = "id") String order,
  579. @RequestParam(required = false, defaultValue = "desc") String direction,
  580. HttpSession session) {
  581. Page<UserCourseAppointment> p;
  582. if (ids != null && ids.length > 0){
  583. p = userCourseAppointmentService.select(ids);
  584. }else{
  585. p = userCourseAppointmentService.listAdmin(page, size, recordId, userId, courseId, startTime, endTime, order, DirectionStatus.ValueOf(direction));
  586. }
  587. List<UserCourseAppointmentInfoDto> pr = Transform.convert(p, UserCourseAppointmentInfoDto.class);
  588. // 绑定作业记录
  589. Collection appointmentIds = Transform.getIds(p, UserCourseAppointment.class, "id");
  590. List<PreviewAssign> previewAssignList = previewAssignService.listWithAppointment(appointmentIds);
  591. Map previewAssignMap = Transform.getMap(previewAssignList, PreviewAssign.class, "courseAppointment", "id");
  592. Collection assignIds = Transform.getIds(previewAssignList, PreviewAssign.class, "id");
  593. List<UserPaper> userPaperList=userPaperService.listWithAppointment(assignIds);
  594. Map userPaperMap = Transform.getMap(userPaperList, UserPaper.class, "originId", "id");
  595. for(UserCourseAppointmentInfoDto dto : pr){
  596. dto.setPaperId((Integer)userPaperMap.get(previewAssignMap.get(dto.getId())));
  597. }
  598. Transform.combine(pr, userPaperList, UserCourseAppointmentInfoDto.class, "paperId", "userPaper", UserPaper.class, "id", UserPaperExtendDto.class);
  599. // 获取最后一次作业结果
  600. Collection paperIds = Transform.getIds(userPaperList, UserPaper.class, "id");
  601. List<UserReport> reportList = userReportService.listWithLast(paperIds);
  602. Transform.combine(pr, reportList, UserCourseAppointmentInfoDto.class, "paperId", "userReport", UserReport.class, "paperId", UserReportExtendDto.class);
  603. return ResponseHelp.success(pr, page, size, p.getTotal());
  604. }
  605. @RequestMapping(value = "/course/appointment/comment/add", method = RequestMethod.POST)
  606. @ApiOperation(value = "添加课程预约评论", httpMethod = "POST")
  607. public Response<UserCourseAppointment> addCourseAppointmentComment(@RequestBody @Validated UserCourseAppointmentCommentDto dto, HttpServletRequest request) {
  608. UserCourseAppointmentComment entity = Transform.dtoToEntity(dto);
  609. if (entity.getParentId() > 0){
  610. UserCourseAppointmentComment comment = userCourseAppointmentCommentService.get(entity.getParentId());
  611. if (comment != null){
  612. entity.setReply(comment.getContent());
  613. }
  614. }
  615. entity = userCourseAppointmentCommentService.add(entity);
  616. managerLogService.log(request);
  617. return ResponseHelp.success(Transform.convert(entity, CourseTime.class));
  618. }
  619. @RequestMapping(value = "/course/appointment/comment/edit", method = RequestMethod.PUT)
  620. @ApiOperation(value = "编辑课程预约聊天", httpMethod = "PUT")
  621. public Response<Boolean> editCourseAppointmentComment(@RequestBody @Validated UserCourseAppointmentCommentDto dto, HttpServletRequest request) {
  622. UserCourseAppointmentComment entity = Transform.dtoToEntity(dto);
  623. if (entity.getParentId() > 0){
  624. UserCourseAppointmentComment comment = userCourseAppointmentCommentService.get(entity.getParentId());
  625. if (comment != null){
  626. entity.setReply(comment.getContent());
  627. }
  628. }
  629. entity = userCourseAppointmentCommentService.edit(entity);
  630. managerLogService.log(request);
  631. return ResponseHelp.success(true);
  632. }
  633. @RequestMapping(value = "/course/appointment/comment/delete", method = RequestMethod.DELETE)
  634. @ApiOperation(value = "删除课程预约聊天", httpMethod = "DELETE")
  635. public Response<Boolean> deleteCourseAppointmentComment(@RequestParam int id, HttpServletRequest request) {
  636. UserCourseAppointmentComment in = userCourseAppointmentCommentService.get(id);
  637. userCourseAppointmentCommentService.delete(id);
  638. managerLogService.log(request);
  639. return ResponseHelp.success(true);
  640. }
  641. @RequestMapping(value = "/course/appointment/comment/all", method = RequestMethod.GET)
  642. @ApiOperation(value = "课程预约评论列表", httpMethod = "GET")
  643. public Response<List<UserCourseAppointmentComment>> listCourseAppointment(
  644. @RequestParam(required = false) Integer appointmentId,
  645. @RequestParam(required = false) String type,
  646. HttpSession session) {
  647. List<UserCourseAppointmentComment> p = userCourseAppointmentCommentService.allAdmin(appointmentId, type);
  648. return ResponseHelp.success(p);
  649. }
  650. @RequestMapping(value = "/course/record/all", method = RequestMethod.GET)
  651. @ApiOperation(value = "课程学习列表", httpMethod = "GET")
  652. public Response<List<UserCourseProgressInfoDto>> allCourseRecord(
  653. @RequestParam(required = false) Integer recordId,
  654. HttpSession session) {
  655. UserOrderRecord record = userOrderRecordService.get(recordId);
  656. Integer courseId = record.getProductId();
  657. Integer userId = record.getUserId();
  658. List<UserCourseProgress> p = userCourseProgressService.listCourse(recordId, courseId);
  659. List<UserCourseProgressInfoDto> pr = Transform.convert(p, UserCourseProgressInfoDto.class);
  660. // 绑定课时
  661. Collection courseNoIds = Transform.getIds(p, UserCourseProgress.class, "courseNoId");
  662. List<CourseNo> courseNoList = courseNoService.select(courseNoIds);
  663. Transform.combine(pr, courseNoList, UserCourseProgressInfoDto.class, "courseNoId", "courseNo", CourseNo.class, "id", CourseNoExtendDto.class);
  664. // 绑定所有学习记录
  665. Map<Integer, List<UserCourseRecord>> recordMap = userCourseRecordService.groupByCourse(recordId, courseNoIds);
  666. for(UserCourseProgressInfoDto dto : pr){
  667. dto.setRecords(recordMap.getOrDefault(dto.getCourseNoId(), null));
  668. }
  669. // 绑定预习作业
  670. List<PreviewAssign> previewAssignList = previewAssignService.listByCourseNos(courseId, courseNoIds);
  671. Map previewAssignMap = Transform.getMap(previewAssignList, PreviewAssign.class, "courseNo", "id");
  672. Collection assignIds = Transform.getIds(previewAssignList, PreviewAssign.class, "id");
  673. List<UserPaper> userPaperList = userPaperService.listWithCourse(userId, assignIds, recordId);
  674. Map userPaperMap = Transform.getMap(userPaperList, UserPaper.class, "originId", "id");
  675. for(UserCourseProgressInfoDto dto : pr){
  676. dto.setPaperId((Integer)userPaperMap.get(previewAssignMap.get(dto.getId())));
  677. }
  678. Transform.combine(pr, userPaperList, UserCourseProgressInfoDto.class, "paperId", "userPaper", UserPaper.class, "id", UserPaperExtendDto.class);
  679. // 获取最后一次作业结果
  680. Collection paperIds = Transform.getIds(userPaperList, UserPaper.class, "id");
  681. List<UserReport> reportList = userReportService.listWithLast(paperIds);
  682. Transform.combine(pr, reportList, UserCourseProgressInfoDto.class, "paperId", "userReport", UserReport.class, "paperId", UserReportExtendDto.class);
  683. return ResponseHelp.success(pr);
  684. }
  685. @RequestMapping(value = "/invoice/finish", method = RequestMethod.PUT)
  686. @ApiOperation(value = "开发票", httpMethod = "PUT")
  687. public Response<Boolean> finishInvoice(@RequestBody @Validated InvoiceFinishDto dto,
  688. HttpServletRequest request) {
  689. userInvoiceService.finish(dto.getIds());
  690. managerLogService.log(request);
  691. return ResponseHelp.success(true);
  692. }
  693. @RequestMapping(value = "/invoice/download", method = RequestMethod.GET)
  694. @ApiOperation(value = "下载发票", httpMethod = "GET")
  695. public Response<Boolean> downloadInvoice(
  696. @RequestParam(required = false) Integer[] ids,
  697. HttpServletRequest request, HttpServletResponse response) throws IOException {
  698. managerLogService.log(request);
  699. userInvoiceService.download(ids);
  700. List<UserInvoice> list = userInvoiceService.select(ids);
  701. Collection userIds = Transform.getIds(list, UserInvoice.class, "userId");
  702. List<User> userList = usersService.select(userIds);
  703. Map userMap = Transform.getMap(userList, User.class, "id");
  704. Collection orderIds = Transform.getIds(list, UserInvoice.class, "orderId");
  705. List<UserOrder> orderList = userOrderService.select(orderIds);
  706. Map orderMap = Transform.getMap(orderList, UserOrder.class, "id");
  707. String columnNames[]={"申请时间","用户昵称","用户ID","用户手机号","开票今金额","开票内容", "发票抬头", "纳税人识别号", "收件邮箱"};//列名
  708. String filename = "发票";
  709. //生成一个Excel文件
  710. // 创建excel工作簿
  711. Workbook wb = new HSSFWorkbook();
  712. // 创建第一个sheet(页),并命名
  713. Sheet sheet = wb.createSheet();
  714. // 创建第一行
  715. Row row = sheet.createRow(0);
  716. //设置列名
  717. for(int i=0;i<columnNames.length;i++){
  718. Cell cell = row.createCell(i);
  719. cell.setCellValue(columnNames[i]);
  720. }
  721. int i = 0;
  722. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  723. for(UserInvoice invoice : list){
  724. i+=1;
  725. int j = -1;
  726. Row r = sheet.createRow(i);
  727. User user = (User) userMap.get(invoice.getUserId());
  728. UserOrder userOrder = (UserOrder) orderMap.get(invoice.getOrderId());
  729. Cell time = r.createCell(++j);
  730. time.setCellValue(sdf.format(invoice.getCreateTime()));
  731. Cell nickname = r.createCell(++j);
  732. nickname.setCellValue(user.getNickname());
  733. Cell userId = r.createCell(++j);
  734. userId.setCellValue(user.getId());
  735. Cell mobile = r.createCell(++j);
  736. mobile.setCellValue(user.getMobile());
  737. Cell invoiceMoney = r.createCell(++j);
  738. invoiceMoney.setCellValue(userOrder.getInvoiceMoney().toString());
  739. Cell content = r.createCell(++j);
  740. content.setCellValue("服务费:");
  741. Cell title = r.createCell(++j);
  742. title.setCellValue(invoice.getTitle());
  743. Cell identity = r.createCell(++j);
  744. identity.setCellValue(invoice.getIdentity());
  745. Cell email = r.createCell(++j);
  746. email.setCellValue(user.getEmail());
  747. }
  748. //同理可以设置数据行
  749. ByteArrayOutputStream os = new ByteArrayOutputStream();
  750. try {
  751. wb.write(os);
  752. } catch (IOException e) {
  753. e.printStackTrace();
  754. }
  755. byte[] content = os.toByteArray();
  756. InputStream is = new ByteArrayInputStream(content);
  757. // 设置response参数,可以打开下载页面
  758. response.reset();
  759. response.setContentType("application/vnd.ms-excel;charset=utf-8");
  760. response.setHeader("Content-Disposition", "attachment;filename="+ new String((filename + ".xls").getBytes(), "iso-8859-1"));
  761. ServletOutputStream out = response.getOutputStream();
  762. BufferedInputStream bis = null;
  763. BufferedOutputStream bos = null;
  764. try {
  765. bis = new BufferedInputStream(is);
  766. bos = new BufferedOutputStream(out);
  767. byte[] buff = new byte[2048];
  768. int bytesRead;
  769. // Simple read/write loop.
  770. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
  771. bos.write(buff, 0, bytesRead);
  772. }
  773. } catch (final IOException e) {
  774. throw e;
  775. } finally {
  776. if (bis != null)
  777. bis.close();
  778. if (bos != null)
  779. bos.close();
  780. }
  781. return null;
  782. }
  783. @RequestMapping(value = "/invoice/list", method = RequestMethod.GET)
  784. @ApiOperation(value = "发票列表", httpMethod = "GET")
  785. public Response<PageMessage<UserInvoiceListDto>> listInvoice(
  786. @RequestParam(required = false, defaultValue = "1") int page,
  787. @RequestParam(required = false, defaultValue = "100") int size,
  788. @RequestParam(required = false) Integer userId,
  789. @RequestParam(required = false) Boolean isFinish,
  790. @RequestParam(required = false) Boolean isDownload,
  791. @RequestParam(required = false, defaultValue = "id") String order,
  792. @RequestParam(required = false, defaultValue = "desc") String direction,
  793. HttpSession session) {
  794. Page<UserInvoice> p = userInvoiceService.listAdmin(page, size, userId, isDownload, isFinish, order, DirectionStatus.ValueOf(direction));
  795. List<UserInvoiceListDto> pr = Transform.convert(p, UserInvoiceListDto.class);
  796. // 绑定用户
  797. Collection userIds = Transform.getIds(p, UserInvoice.class, "userId");
  798. List<User> userList = usersService.select(userIds);
  799. Transform.combine(pr, userList, UserInvoiceListDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  800. // 绑定订单
  801. Collection orderIds = Transform.getIds(p, UserInvoice.class, "orderId");
  802. List<UserOrder> orderList = userOrderService.select(orderIds);
  803. Transform.combine(pr, orderList, UserInvoiceListDto.class, "orderId", "order", UserOrder.class, "id", UserOrderExtendDto.class);
  804. return ResponseHelp.success(pr, page, size, p.getTotal());
  805. }
  806. @RequestMapping(value = "/valid/mobile", method = RequestMethod.GET)
  807. @ApiOperation(value = "验证手机号", notes="查询手机对应账号", httpMethod = "GET")
  808. public Response<Boolean> validMobile(
  809. @RequestParam(required = true) String area,
  810. @RequestParam(required = true) String mobile
  811. ){
  812. User user = usersService.getByMobile(area, mobile);
  813. if(user != null){
  814. return ResponseHelp.success(false);
  815. }
  816. return ResponseHelp.success(true);
  817. }
  818. @RequestMapping(value = "/abnormal/handler", method = RequestMethod.POST)
  819. @ApiOperation(value = "异常登录处理", httpMethod = "POST")
  820. public Response<Boolean> editAbnormal(@RequestBody @Validated UserAbnormalHandlerDto dto, HttpServletRequest request) {
  821. UserAbnormal entity = Transform.dtoToEntity(dto);
  822. UserAbnormal in = userAbnormalService.get(entity.getId());
  823. if (in.getIsAlert() != null && in.getIsAlert() > 0){
  824. throw new ParameterException("已处理");
  825. }
  826. if (in.getIsIgnore() != null && in.getIsIgnore() > 0){
  827. throw new ParameterException("已处理");
  828. }
  829. if (dto.getIsAlert() != null && dto.getIsAlert() > 1){
  830. User user = usersService.get(in.getUserId());
  831. usersService.edit(User.builder().id(user.getId()).totalAlert(user.getTotalAlert() + 1).build());
  832. messageExtendService.sendLoginAbnormal(user, in);
  833. }
  834. entity = userAbnormalService.edit(entity);
  835. managerLogService.log(request);
  836. return ResponseHelp.success(true);
  837. }
  838. @RequestMapping(value = "/abnormal/detail", method = RequestMethod.GET)
  839. @ApiOperation(value = "异常登录详情", httpMethod = "GET")
  840. public Response<UserAbnormalInfoDto> detailAbnormal(@RequestParam int id, HttpServletRequest request) {
  841. UserAbnormal entity = userAbnormalService.get(id);
  842. UserAbnormalInfoDto dto = Transform.convert(entity, UserAbnormalInfoDto.class);
  843. User user = usersService.get(entity.getUserId());
  844. UserExtendDto userDto = Transform.convert(user, UserExtendDto.class);
  845. dto.setUser(userDto);
  846. return ResponseHelp.success(dto);
  847. }
  848. @RequestMapping(value = "/abnormal/list", method = RequestMethod.GET)
  849. @ApiOperation(value = "异常登录列表", httpMethod = "GET")
  850. public Response<PageMessage<UserAbnormalInfoDto>> listAbnormal(
  851. @RequestParam(required = false, defaultValue = "1") int page,
  852. @RequestParam(required = false, defaultValue = "100") int size,
  853. @RequestParam(required = false) Integer userId,
  854. @RequestParam(required = false) Integer totalAlert,
  855. @RequestParam(required = false) String startTime,
  856. @RequestParam(required = false) String endTime,
  857. @RequestParam(required = false, defaultValue = "id") String order,
  858. @RequestParam(required = false, defaultValue = "desc") String direction,
  859. HttpSession session) {
  860. Page<UserAbnormal> p = userAbnormalService.listAdmin(page, size, userId, totalAlert, startTime, endTime, order, DirectionStatus.ValueOf(direction));
  861. List<UserAbnormalInfoDto> pr = Transform.convert(p, UserAbnormalInfoDto.class);
  862. // 绑定用户
  863. Collection userIds = Transform.getIds(p, UserAbnormal.class, "userId");
  864. List<User> userList = usersService.select(userIds);
  865. Transform.combine(pr, userList, UserAbnormalInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  866. return ResponseHelp.success(pr, page, size, p.getTotal());
  867. }
  868. }