package com.xjrsoft.module.textbook.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.enums.TextbookTypeEnum; import com.xjrsoft.common.model.result.R; import com.xjrsoft.common.model.result.RT; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.page.PageOutput; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.base.entity.BaseClassCourse; import com.xjrsoft.module.base.entity.BaseCourseSubject; import com.xjrsoft.module.base.entity.BaseSemester; import com.xjrsoft.module.base.service.IBaseSemesterService; import com.xjrsoft.module.student.entity.BaseClassMajorSet; import com.xjrsoft.module.textbook.dto.AddTextbookDto; import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto; import com.xjrsoft.module.textbook.dto.TextbookClaimExportQueryDto; import com.xjrsoft.module.textbook.dto.TextbookConsumptionPageDto; import com.xjrsoft.module.textbook.dto.TextbookPageDto; import com.xjrsoft.module.textbook.dto.TextbookStandingExportQuerytDto; import com.xjrsoft.module.textbook.dto.TextbookSubscriptionExportQueryDto; import com.xjrsoft.module.textbook.dto.TextbookSubscriptionListDto; import com.xjrsoft.module.textbook.dto.UpdateTextbookDto; import com.xjrsoft.module.textbook.entity.Textbook; import com.xjrsoft.module.textbook.entity.TextbookClassRelation; import com.xjrsoft.module.textbook.entity.TextbookStudentClaim; import com.xjrsoft.module.textbook.service.ITextbookService; import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService; import com.xjrsoft.module.textbook.vo.TextbookConsumptionPageVo; import com.xjrsoft.module.textbook.vo.TextbookIssueRecordListVo; import com.xjrsoft.module.textbook.vo.TextbookPageVo; import com.xjrsoft.module.textbook.vo.TextbookStandingExportQueryVo; import com.xjrsoft.module.textbook.vo.TextbookSubscriptionExportQueryVo; import com.xjrsoft.module.textbook.vo.TextbookSubscriptionListVo; import com.xjrsoft.module.textbook.vo.TextbookSubscriptionRecordVo; import com.xjrsoft.module.textbook.vo.TextbookVo; import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordListVo; import com.xjrsoft.module.textbook.vo.WfTextbookClaimListVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @title: 教材管理 * @Author dzx * @Date: 2023-12-25 * @Version 1.0 */ @RestController @RequestMapping("/textbook" + "/textbook") @Api(value = "/textbook" + "/textbook",tags = "教材管理代码") @AllArgsConstructor public class TextbookController { private final ITextbookService textbookService; private final IBaseSemesterService baseSemesterService; private final ITextbookStudentClaimService textbookStudentClaimService; @GetMapping(value = "/page") @ApiOperation(value="教材管理列表(分页)") @SaCheckPermission("textbook:detail") public RT> page(@Valid TextbookPageDto dto){ Page page = textbookService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto); PageOutput pageOutput = ConventPage.getPageOutput(page, TextbookPageVo.class); return RT.ok(pageOutput); } @GetMapping(value = "/page-subscription") @ApiOperation(value="教材管理列表(分页,教材征订用)") @SaCheckPermission("textbook:detail") public RT> pageSubscription(@Valid TextbookSubscriptionListDto dto){ List classIdList = new ArrayList<>(); if(dto.getClassIds() != null && !dto.getClassIds().equals("")){ String[] classIdArr = dto.getClassIds().split(","); classIdList = Arrays.asList(classIdArr); } MPJLambdaWrapper textbookMPJLambdaWrapper = new MPJLambdaWrapper<>(); textbookMPJLambdaWrapper .select(Textbook::getId) .selectAs(Textbook::getId,TextbookSubscriptionListVo::getTextbookId) .selectAs(BaseCourseSubject::getName, TextbookSubscriptionListVo::getCourseName) .selectSum(BaseClassMajorSet::getTotalStudent, TextbookSubscriptionListVo::getStudentSubscriptionNumber) .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionListVo.class).contains(x.getProperty())) .leftJoin(BaseClassCourse.class, BaseClassCourse::getCourseId, Textbook::getCourseSubjectId) .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, BaseClassCourse::getClassId) .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId) .eq(dto.getBaseSemesterId() != null && dto.getBaseSemesterId() > 0, BaseClassCourse::getBaseSemesterId, dto.getBaseSemesterId()) .in(!classIdList.isEmpty(),BaseClassCourse::getClassId, classIdList) .groupBy(Textbook::getId) ; IPage page = textbookService.selectJoinListPage(ConventPage.getPage(dto),TextbookSubscriptionListVo.class,textbookMPJLambdaWrapper); for(TextbookSubscriptionListVo t : page.getRecords()){ t.setClassIds(dto.getClassIds()); if(t.getTextbookType() != null && !t.getTextbookType().equals("")){ t.setTextbookTypeCn(TextbookTypeEnum.getValue(t.getTextbookType())); } } PageOutput pageOutput = ConventPage.getPageOutput(page, TextbookSubscriptionListVo.class); return RT.ok(pageOutput); } @GetMapping(value = "/page-consumption") @ApiOperation(value="学生确认领取教材列表(分页,学生收费用)") @SaCheckPermission("textbook:detail") public RT> pageConsumption(@Valid TextbookConsumptionPageDto dto){ MPJLambdaWrapper textbookMPJLambdaWrapper = new MPJLambdaWrapper<>(); textbookMPJLambdaWrapper .select(TextbookStudentClaim::getId) .selectAs(Textbook::getId,TextbookConsumptionPageVo::getTextbookId) .selectAs(BaseCourseSubject::getName, TextbookConsumptionPageVo::getCourseSubjectIdCn) .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookConsumptionPageVo.class).contains(x.getProperty())) .leftJoin(Textbook.class, Textbook::getId, TextbookStudentClaim::getTextbookId) .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId) .eq(dto.getBaseSemesterId() != null && dto.getBaseSemesterId() > 0, TextbookStudentClaim::getBaseSemesterId, dto.getBaseSemesterId()) .eq(dto.getStudentUserId() != null && dto.getStudentUserId() > 0,TextbookStudentClaim::getStudentUserId, dto.getStudentUserId()) ; IPage page = textbookStudentClaimService.selectJoinListPage(ConventPage.getPage(dto),TextbookConsumptionPageVo.class,textbookMPJLambdaWrapper); for(TextbookConsumptionPageVo t : page.getRecords()){ if(t.getTextbookType() != null && !t.getTextbookType().equals("")){ t.setTextbookTypeCn(TextbookTypeEnum.getValue(t.getTextbookType())); } } PageOutput pageOutput = ConventPage.getPageOutput(page, TextbookConsumptionPageVo.class); return RT.ok(pageOutput); } @GetMapping(value = "/List-subscription") @ApiOperation(value="教材管理列表(不分页,教材征订用)") @SaCheckPermission("textbook:detail") public RT> ListSubscription(@Valid TextbookSubscriptionListDto dto){ List classIdList = new ArrayList<>(); if(dto.getClassIds() != null && !dto.getClassIds().equals("")){ String[] classIdArr = dto.getClassIds().split(","); classIdList = Arrays.asList(classIdArr); } MPJLambdaWrapper textbookMPJLambdaWrapper = new MPJLambdaWrapper<>(); textbookMPJLambdaWrapper .select(Textbook::getId) .selectAs(Textbook::getId,TextbookSubscriptionListVo::getTextbookId) .selectAs(BaseCourseSubject::getName, TextbookSubscriptionListVo::getCourseName) .selectSum(BaseClassMajorSet::getTotalStudent, TextbookSubscriptionListVo::getStudentSubscriptionNumber) .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionListVo.class).contains(x.getProperty())) .leftJoin(TextbookClassRelation.class, TextbookClassRelation::getTextbookId, Textbook::getId) .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, TextbookClassRelation::getClassId) .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId) .in(!classIdList.isEmpty(),TextbookClassRelation::getClassId, classIdList) .groupBy(Textbook::getId) ; List list = textbookService.selectJoinList(TextbookSubscriptionListVo.class,textbookMPJLambdaWrapper); return RT.ok(list); } @GetMapping(value = "/info-detail") @ApiOperation(value="根据id查询教材管理信息") @SaCheckPermission("textbook:detail") public RT info(@RequestParam Long id){ Textbook textbook = textbookService.getById(id); if (textbook == null) { return RT.ok(); } textbook.setTextbookClassRelationList(textbookService.getClassRelation(textbook.getId())); return RT.ok(BeanUtil.toBean(textbook, TextbookVo.class)); } @GetMapping(value = "/info-byissn") @ApiOperation(value="根据isnn查询教材管理信息") @SaCheckPermission("textbook:detail") public RT infoByissn(@RequestParam String issn){ TextbookVo textbook = textbookService.getInfoByissn(issn); if (textbook == null) { return RT.ok(); } return RT.ok(textbook); } @GetMapping(value = "/info-subscription-list") @ApiOperation(value="教材管理-详情-征订记录") @SaCheckPermission("textbook:detail") public RT> subscriptionList(@RequestParam Long id){ List result = textbookService.subscriptionList(id); if (result == null) { return RT.ok(new ArrayList<>()); } return RT.ok(result); } @GetMapping(value = "/info-warehouse-list") @ApiOperation(value="教材管理-详情-入库记录") @SaCheckPermission("textbook:detail") public RT> warehouseList(@RequestParam Long id){ List result = textbookService.warehouseList(id); if (result == null) { return RT.ok(new ArrayList<>()); } return RT.ok(result); } @GetMapping(value = "/info-issue-list") @ApiOperation(value="教材管理-详情-出库记录") @SaCheckPermission("textbook:detail") public RT> issueList(@RequestParam Long id){ List result = textbookService.issueList(id); if (result == null) { return RT.ok(new ArrayList<>()); } return RT.ok(result); } @GetMapping(value = "/info-claim-list") @ApiOperation(value="教材管理-详情-领取记录") @SaCheckPermission("textbook:detail") public RT> claimList(@RequestParam Long id){ List result = textbookService.claimList(id); if (result == null) { return RT.ok(new ArrayList<>()); } return RT.ok(result); } @PostMapping @ApiOperation(value = "新增教材管理") @SaCheckPermission("textbook:add") public RT add(@Valid @RequestBody AddTextbookDto dto){ Textbook textbook = BeanUtil.toBean(dto, Textbook.class); boolean isSuccess = textbookService.add(textbook); return RT.ok(isSuccess); } @PutMapping @ApiOperation(value = "修改教材管理") @SaCheckPermission("textbook:edit") public RT update(@Valid @RequestBody UpdateTextbookDto dto){ Textbook textbook = BeanUtil.toBean(dto, Textbook.class); return RT.ok(textbookService.update(textbook)); } @DeleteMapping @ApiOperation(value = "删除教材管理") @SaCheckPermission("textbook:delete") public RT delete(@Valid @RequestBody List ids){ return RT.ok(textbookService.delete(ids)); } @GetMapping("/export") @ApiOperation(value = "导出") public ResponseEntity exportData(@Valid TextbookPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) { List customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput) page(dto).getData()).getList(); ByteArrayOutputStream bot = new ByteArrayOutputStream(); EasyExcel.write(bot, TextbookPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList); return RT.fileStream(bot.toByteArray(), "Textbook" + ExcelTypeEnum.XLSX.getValue()); } @PostMapping("deliver-warehouse") @ApiOperation(value = "教材管理入库") @SaCheckPermission("textbook:add") public RT deliverWarehouse(@Valid @RequestBody AddTextbookWarehouseRecordDto dto){ Boolean isSuccess = textbookService.deliverWarehouse(dto); return RT.ok(isSuccess); } @PostMapping("/textbook-standing-export-query") @ApiOperation(value = "台账条件导出") public ResponseEntity textbookStandingExportQuery(@Valid @RequestBody TextbookStandingExportQuerytDto dto) { // @GetMapping("/textbook-standing-export-query") // @ApiOperation(value = "台账条件导出") // public ResponseEntity textbookStandingExportQuery(@Valid TextbookStandingExportQuerytDto dto) { List customerList = textbookService.listTextbookStandingExportQuery(dto); ByteArrayOutputStream bot = new ByteArrayOutputStream(); EasyExcel.write(bot, TextbookStandingExportQueryVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList); return RT.fileStream(bot.toByteArray(), "TextbookStanding" + ExcelTypeEnum.XLSX.getValue()); } @PostMapping("/textbook-subscription-export-query") @ApiOperation(value = "教材征订记录条件导出") public ResponseEntity textbookSubscriptionExportQuery(@Valid @RequestBody TextbookSubscriptionExportQueryDto dto) { // @GetMapping("/textbook-subscription-export-query") // @ApiOperation(value = "教材征订记录条件导出") // public ResponseEntity textbookSubscriptionExportQuery(@Valid TextbookSubscriptionExportQueryDto dto) { List customerList = textbookService.listTextbookSubscriptionExportQuery(dto); ByteArrayOutputStream bot = new ByteArrayOutputStream(); // 设置动态头 String baseSemesterCn = ""; if(dto.getBaseSemesterId() != null){ LambdaQueryWrapper baseSemesterLambdaQueryWrapper = new LambdaQueryWrapper<>(); baseSemesterLambdaQueryWrapper .eq(BaseSemester::getId, dto.getBaseSemesterId()); BaseSemester baseSemester = baseSemesterService.getOne(baseSemesterLambdaQueryWrapper); if(baseSemester != null){ baseSemesterCn = baseSemester.getName(); } } String headTitle = "重庆市铜梁职业教育中心" + baseSemesterCn + "教材征订表"; List> headList = new ArrayList<>(); // List head0 = new ArrayList<>(); // head0.add("个人信息"); // head0.add("用户名"); // List head1 = new ArrayList<>(); // head1.add("个人信息"); // head1.add("年龄"); // List head2 = new ArrayList<>(); // head2.add("个人信息"); // head2.add("地址"); headList.add(new ArrayList(){{ add(headTitle); add("国际标准刊号"); }}); headList.add(new ArrayList(){{ add(headTitle); add("书名"); }}); headList.add(new ArrayList(){{ add(headTitle); add("出版社"); }}); headList.add(new ArrayList(){{ add(headTitle); add("主编"); }}); headList.add(new ArrayList(){{ add(headTitle); add("估价(元)"); }}); headList.add(new ArrayList(){{ add(headTitle); add("是否为规划教材"); }}); headList.add(new ArrayList(){{ add(headTitle); add("对应课程"); }}); headList.add(new ArrayList(){{ add(headTitle); add("使用年级"); }}); headList.add(new ArrayList(){{ add(headTitle); add("使用班级"); }}); headList.add(new ArrayList(){{ add(headTitle); add("学生用书征订数量"); }}); headList.add(new ArrayList(){{ add(headTitle); add("教师教材用书征订数量"); }}); headList.add(new ArrayList(){{ add(headTitle); add("教师教参用书征订数量"); }}); headList.add(new ArrayList(){{ add(headTitle); add("学科组名称"); }}); headList.add(new ArrayList(){{ add(headTitle); add("有无配套教学资源"); }}); headList.add(new ArrayList(){{ add(headTitle); add("备注"); }}); EasyExcel.write(bot, TextbookSubscriptionExportQueryVo.class).automaticMergeHead(true).excelType(ExcelTypeEnum.XLSX).head(headList).sheet().doWrite(customerList); return RT.fileStream(bot.toByteArray(), "TextbookSubscription" + ExcelTypeEnum.XLSX.getValue()); } // @PostMapping("/textbook-claim-export-query") // @ApiOperation(value = "教材发放记录条件导出") // public ResponseEntity textbookClaimExportQuery(@Valid @RequestBody TextbookClaimExportQueryDto dto) { @GetMapping("/textbook-claim-export-query") @ApiOperation(value = "教材发放记录条件导出") public ResponseEntity textbookClaimExportQuery(@Valid TextbookClaimExportQueryDto dto) { ByteArrayOutputStream bot = textbookService.listTextbookClaimExportQuery(dto); return RT.fileStream(bot.toByteArray(), "TextbookClaim" + ExcelTypeEnum.XLSX.getValue()); } @PostMapping("/excel-import") @ApiOperation(value = "excel教材导入") @SaCheckPermission("coursetable:excelimport") public R excelImport( @RequestParam("file") MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); return R.ok(textbookService.excelImport(inputStream)); } }