WfTextbookSubscriptionController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package com.xjrsoft.module.textbook.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import com.alibaba.excel.EasyExcel;
  5. import com.alibaba.excel.support.ExcelTypeEnum;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  8. import com.xjrsoft.common.model.result.RT;
  9. import com.xjrsoft.common.page.ConventPage;
  10. import com.xjrsoft.common.page.PageOutput;
  11. import com.xjrsoft.common.utils.TreeUtil;
  12. import com.xjrsoft.common.utils.VoToColumnUtil;
  13. import com.xjrsoft.module.base.entity.BaseClass;
  14. import com.xjrsoft.module.base.entity.BaseGrade;
  15. import com.xjrsoft.module.base.entity.BaseSemester;
  16. import com.xjrsoft.module.base.service.IBaseClassService;
  17. import com.xjrsoft.module.student.entity.BaseClassMajorSet;
  18. import com.xjrsoft.module.teacher.entity.XjrUser;
  19. import com.xjrsoft.module.textbook.dto.*;
  20. import com.xjrsoft.module.textbook.entity.TextbookSubscription;
  21. import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
  22. import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
  23. import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
  24. import com.xjrsoft.module.textbook.vo.*;
  25. import io.swagger.annotations.Api;
  26. import io.swagger.annotations.ApiOperation;
  27. import lombok.AllArgsConstructor;
  28. import org.springframework.http.ResponseEntity;
  29. import org.springframework.web.bind.annotation.*;
  30. import org.springframework.web.multipart.MultipartFile;
  31. import javax.validation.Valid;
  32. import java.io.ByteArrayOutputStream;
  33. import java.io.IOException;
  34. import java.io.InputStream;
  35. import java.util.*;
  36. /**
  37. * @title: 教材教辅征订
  38. * @Author szs
  39. * @Date: 2024-06-04
  40. * @Version 1.0
  41. */
  42. @RestController
  43. @RequestMapping("/textbook" + "/wfTextbookSubscription")
  44. @Api(value = "/textbook" + "/wfTextbookSubscription",tags = "教材教辅征订代码")
  45. @AllArgsConstructor
  46. public class WfTextbookSubscriptionController {
  47. private final IWfTextbookSubscriptionService wfTextbookSubscriptionService;
  48. private final IBaseClassService baseClassService;
  49. @GetMapping(value = "/tree")
  50. @ApiOperation(value = "学生年级班级树")
  51. @SaCheckPermission("studentmanager:detail")
  52. public RT<List<GradeClassTreeVo>> tree() {
  53. List<GradeClassTreeVo> voList = new ArrayList<>();
  54. voList.add(new GradeClassTreeVo() {{
  55. setId("666666");
  56. setName("班级");
  57. }});
  58. //获取班级List(包含年级信息)
  59. MPJLambdaWrapper<BaseClass> baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>();
  60. baseClassMPJLambdaWrapper
  61. .selectAs(BaseClass::getId, GradeClassListVo::getClassId)
  62. .selectAs(BaseClass::getName, GradeClassListVo::getClassName)
  63. .selectAs(BaseClass::getGradeId, GradeClassListVo::getGradeId)
  64. .selectAs(BaseGrade::getName, GradeClassListVo::getGradeName)
  65. .leftJoin(BaseGrade.class, BaseGrade::getId, BaseClass::getGradeId)
  66. .eq(BaseClass::getDeleteMark, 0)
  67. .eq(BaseClass::getIsGraduate, 1)
  68. ;
  69. List<GradeClassListVo> gradeClassTreeVoList = baseClassService.selectJoinList(GradeClassListVo.class, baseClassMPJLambdaWrapper);
  70. //年级Map
  71. Map<String, GradeClassTreeVo> gradeMap = new HashMap<>();
  72. for (GradeClassListVo gradeClassListVo : gradeClassTreeVoList){
  73. if(gradeClassListVo.getGradeId() != null && gradeMap.get(gradeClassListVo.getGradeId()) == null){
  74. gradeMap.put(gradeClassListVo.getGradeId(), new GradeClassTreeVo(){{
  75. setId(gradeClassListVo.getGradeId());
  76. setName(gradeClassListVo.getGradeName());
  77. setParentId("666666");
  78. }});
  79. }
  80. voList.add(new GradeClassTreeVo() {{
  81. setId(gradeClassListVo.getClassId());
  82. setName(gradeClassListVo.getClassName());
  83. setParentId(gradeClassListVo.getGradeId());
  84. }});
  85. }
  86. List<GradeClassTreeVo> gradeList = new ArrayList<>(gradeMap.values());
  87. voList.addAll(gradeList);
  88. List<GradeClassTreeVo> treeVoList = TreeUtil.build(voList);
  89. return RT.ok(treeVoList);
  90. }
  91. @GetMapping(value = "/page")
  92. @ApiOperation(value="教材教辅征订列表(分页)")
  93. @SaCheckPermission("wftextbooksubscription:detail")
  94. public RT<PageOutput<WfTextbookSubscriptionPageVo>> page(@Valid WfTextbookSubscriptionPageDto dto){
  95. MPJLambdaWrapper<WfTextbookSubscription> queryWrapper = new MPJLambdaWrapper<>();
  96. queryWrapper
  97. .select(WfTextbookSubscription::getId)
  98. .selectAs(BaseSemester::getName, WfTextbookSubscriptionPageVo::getBaseSemesterIdCn)
  99. .select("(select ifnull(sum(student_subscription_number),0) + ifnull(sum(teacher_subscription_number),0) from wf_textbook_subscription_item a where a.wf_textbook_subscription_id = t.id) as sum")
  100. .select(WfTextbookSubscription.class,x -> VoToColumnUtil.fieldsToColumns(WfTextbookSubscriptionPageVo.class).contains(x.getProperty()))
  101. .leftJoin(BaseSemester.class, BaseSemester::getId, WfTextbookSubscription::getBaseSemesterId)
  102. .eq(dto.getBaseSemesterId() != null && dto.getBaseSemesterId() > 0, WfTextbookSubscription::getBaseSemesterId, dto.getBaseSemesterId())
  103. .eq(dto.getSubscriptionMethod() != null && dto.getSubscriptionMethod() > 0, WfTextbookSubscription::getSubscriptionMethod, dto.getSubscriptionMethod())
  104. .orderByDesc(WfTextbookSubscription::getCreateDate)
  105. ;
  106. IPage<WfTextbookSubscriptionPageVo> page = wfTextbookSubscriptionService.selectJoinListPage(ConventPage.getPage(dto),WfTextbookSubscriptionPageVo.class, queryWrapper);
  107. PageOutput<WfTextbookSubscriptionPageVo> pageOutput = ConventPage.getPageOutput(page, WfTextbookSubscriptionPageVo.class);
  108. return RT.ok(pageOutput);
  109. }
  110. // @GetMapping(value = "/baseclass-page")
  111. // @ApiOperation(value="征订班级列表(分页)")
  112. // @SaCheckPermission("wftextbooksubscription:detail")
  113. // public RT<PageOutput<BaseclassPageVo>> baseclassPage(@Valid BaseclassPageDto dto){
  114. // if(dto.getClassIds() == null || dto.getClassIds().equals("")){
  115. // return RT.ok(null);
  116. // }
  117. // String classIds = dto.getClassIds();
  118. // String[] classIdArr = classIds.split(",");
  119. // List<String> classIdList = Arrays.asList(classIdArr);
  120. // MPJLambdaWrapper<BaseClass> baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>();
  121. // baseClassMPJLambdaWrapper
  122. // .selectAs(BaseGrade::getName, BaseclassPageVo::getGradeIdCn)
  123. // .selectAs(XjrUser::getName, BaseclassPageVo::getTeacherIdCn)
  124. // .selectAs(BaseClassMajorSet::getTotalStudent, BaseclassPageVo::getTotalStudent)
  125. // .select(BaseClass.class,x -> VoToColumnUtil.fieldsToColumns(BaseclassPageVo.class).contains(x.getProperty()))
  126. // .leftJoin(BaseGrade.class, BaseGrade::getId, BaseClass::getGradeId)
  127. // .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId)
  128. // .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, BaseClass::getId)
  129. // .in(BaseClass::getId, classIdList)
  130. // ;
  131. // IPage<BaseclassPageVo> baseclassPageVos = baseClassService.selectJoinListPage(ConventPage.getPage(dto), BaseclassPageVo.class, baseClassMPJLambdaWrapper);
  132. // PageOutput<BaseclassPageVo> pageOutput = ConventPage.getPageOutput(baseclassPageVos, BaseclassPageVo.class);
  133. // return RT.ok(pageOutput);
  134. // }
  135. @GetMapping(value = "/history-list")
  136. @ApiOperation(value="教材教辅征订历史列表(分页)")
  137. @SaCheckPermission("wftextbooksubscription:detail")
  138. public RT<List<TextbookSubscriptionHistoryListVo>> historyList(@Valid TextbookSubscriptionHistoryListDto dto){
  139. MPJLambdaWrapper<WfTextbookSubscription> queryWrapper = new MPJLambdaWrapper<>();
  140. queryWrapper
  141. .selectSum(WfTextbookSubscriptionItem::getStudentSubscriptionNumber, TextbookSubscriptionHistoryListVo::getStudentSubscriptionNumber)
  142. .selectSum(WfTextbookSubscriptionItem::getTeacherSubscriptionNumber, TextbookSubscriptionHistoryListVo::getTeacherSubscriptionNumber)
  143. .selectAs(WfTextbookSubscription::getCreateDate, TextbookSubscriptionHistoryListVo::getCreateDate)
  144. .rightJoin(WfTextbookSubscriptionItem.class, WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, WfTextbookSubscription::getId)
  145. .eq(WfTextbookSubscriptionItem::getTextbookId, dto.getTextbookId())
  146. .eq(WfTextbookSubscription::getBaseSemesterId, dto.getBaseSemesterId())
  147. .groupBy("t.id,t1.textbook_id")
  148. ;
  149. List<TextbookSubscriptionHistoryListVo> list = wfTextbookSubscriptionService.selectJoinList(TextbookSubscriptionHistoryListVo.class, queryWrapper);
  150. return RT.ok(list);
  151. }
  152. @GetMapping(value = "/instockroom-list")
  153. @ApiOperation(value="教材教辅征订入库列表")
  154. @SaCheckPermission("wftextbooksubscription:detail")
  155. public RT<List<TextbookInstockroomListVo>> instockroomList(@Valid TextbookInstockroomListDto dto){
  156. List<TextbookInstockroomListVo> list = wfTextbookSubscriptionService.instockroomList(dto);
  157. return RT.ok(list);
  158. }
  159. @PostMapping(value = "/instockroom")
  160. @ApiOperation(value="入库")
  161. @SaCheckPermission("wftextbooksubscription:detail")
  162. public RT<Boolean> instockroom(@Valid @RequestBody List<TextbookInstockroomDto> dtos){
  163. return RT.ok(wfTextbookSubscriptionService.instockroom(dtos));
  164. }
  165. @GetMapping(value = "/info")
  166. @ApiOperation(value="根据id查询教材教辅征订信息")
  167. @SaCheckPermission("wftextbooksubscription:detail")
  168. public RT<WfTextbookSubscriptionVo> info(@Valid WfTextbookSubscriptionDto dto){
  169. WfTextbookSubscriptionVo wfTextbookSubscriptionVo = wfTextbookSubscriptionService.getInfo(dto);
  170. if (wfTextbookSubscriptionVo == null) {
  171. return RT.error("找不到此数据!");
  172. }
  173. return RT.ok(wfTextbookSubscriptionVo);
  174. }
  175. @PostMapping
  176. @ApiOperation(value = "新增教材教辅征订记录表")
  177. @SaCheckPermission("textbooksubscription:add")
  178. public RT<Boolean> add(@Valid @RequestBody AddTextbookSubscriptionDto dto){
  179. TextbookSubscription textbookSubscription = BeanUtil.toBean(dto, TextbookSubscription.class);
  180. boolean isSuccess = wfTextbookSubscriptionService.add(textbookSubscription);
  181. return RT.ok(isSuccess);
  182. }
  183. @PutMapping
  184. @ApiOperation(value = "修改教材教辅征订")
  185. @SaCheckPermission("wftextbooksubscription:edit")
  186. public RT<Boolean> update(@Valid @RequestBody UpdateWfTextbookSubscriptionDto dto){
  187. WfTextbookSubscription wfTextbookSubscription = BeanUtil.toBean(dto, WfTextbookSubscription.class);
  188. return RT.ok(wfTextbookSubscriptionService.update(wfTextbookSubscription));
  189. }
  190. @PutMapping("/alteration")
  191. @ApiOperation(value = "变更")
  192. @SaCheckPermission("wftextbooksubscription:edit")
  193. public RT<Boolean> alteration(@Valid @RequestBody UpdateWfTextbookSubscriptionItemDto dto){
  194. return RT.ok(wfTextbookSubscriptionService.alteration(dto));
  195. }
  196. @PutMapping(value = "/change-status")
  197. @ApiOperation(value = "修改教材教辅征订状态")
  198. @SaCheckPermission("wftextbooksubscription:edit")
  199. public RT<Boolean> changeStatus(@Valid @RequestBody UpdateWfTextbookSubscriptionDto dto){
  200. return RT.ok(wfTextbookSubscriptionService.changeStatus(dto));
  201. }
  202. @DeleteMapping
  203. @ApiOperation(value = "删除教材教辅征订")
  204. @SaCheckPermission("wftextbooksubscription:delete")
  205. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
  206. return RT.ok(wfTextbookSubscriptionService.delete(ids));
  207. }
  208. @GetMapping("/subscription-export-query")
  209. @ApiOperation(value = "导出")
  210. public ResponseEntity<byte[]> exportData(@Valid WfTextbookSubscriptionPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
  211. List<WfTextbookSubscriptionPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<WfTextbookSubscriptionPageVo>) page(dto).getData()).getList();
  212. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  213. EasyExcel.write(bot, WfTextbookSubscriptionPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
  214. return RT.fileStream(bot.toByteArray(), "WfTextbookSubscription" + ExcelTypeEnum.XLSX.getValue());
  215. }
  216. @PostMapping("/textbook-subscription-export-query")
  217. @ApiOperation(value = "教材征订条件导出")
  218. public ResponseEntity<byte[]> textbookSubscriptionExportQuery(@Valid @RequestBody TextbookSubscriptionExportQueryListDto dto) {
  219. // @GetMapping("/textbook-subscription-export-query")
  220. // @ApiOperation(value = "教材征订条件导出")
  221. // public ResponseEntity<byte[]> textbookSubscriptionExportQuery(@Valid TextbookSubscriptionExportQueryListDto dto) {
  222. List<TextbookSubscriptionExportQueryListVo> customerList = wfTextbookSubscriptionService.textbookSubscriptionExportQuery(dto);
  223. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  224. EasyExcel.write(bot, TextbookSubscriptionExportQueryListVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
  225. return RT.fileStream(bot.toByteArray(), "TextbookSubscription" + ExcelTypeEnum.XLSX.getValue());
  226. }
  227. @PostMapping("/instockroom-excel-import")
  228. @ApiOperation(value = "教材征订入库数量导入")
  229. public RT<String> excelImport(@RequestParam("file") MultipartFile file, @RequestParam(value = "wfTextbookSubscriptionId") Long wfTextbookSubscriptionId) throws IOException {
  230. InputStream inputStream = file.getInputStream();
  231. return RT.ok(wfTextbookSubscriptionService.excelImport(inputStream, wfTextbookSubscriptionId));
  232. }
  233. }