package com.xjrsoft.module.textbook.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.support.ExcelTypeEnum; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.model.result.RT; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.page.PageOutput; import com.xjrsoft.common.utils.QrCodeUtil; import com.xjrsoft.config.CommonPropertiesConfig; import com.xjrsoft.module.base.entity.BaseSemester; import com.xjrsoft.module.textbook.dto.*; import com.xjrsoft.module.textbook.entity.WfTextbookClaim; import com.xjrsoft.module.textbook.service.IWfTextbookClaimService; import com.xjrsoft.module.textbook.vo.*; import com.xjrsoft.module.workflow.entity.WorkflowFormRelation; import com.xjrsoft.module.workflow.entity.XjrWorkflowOperateRecord; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.camunda.bpm.engine.history.HistoricProcessInstance; 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 javax.validation.Valid; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; import static org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState.COMPLETED; /** * @title: 教材申领 * @Author szs * @Date: 2023-12-26 * @Version 1.0 */ @RestController @RequestMapping("/textbook" + "/wfTextbookClaim") @Api(value = "/textbook" + "/wfTextbookClaim",tags = "教材申领代码") @AllArgsConstructor public class WfTextbookClaimController { private final IWfTextbookClaimService wfTextbookClaimService; private final CommonPropertiesConfig commonPropertiesConfig; @GetMapping(value = "/distribute-semester-list") @ApiOperation(value="教材发放学期列表(移动端)") @SaCheckPermission("wftextbookclaim:detail") public RT> distributeSemesterList(){ MPJLambdaWrapper wfTextbookClaimMPJLambdaWrapper = new MPJLambdaWrapper<>(); wfTextbookClaimMPJLambdaWrapper .distinct() .selectAs(WfTextbookClaim::getBaseSemesterId, DistributeSemesterVo::getBaseSemesterId) .selectAs(BaseSemester::getName, DistributeSemesterVo::getBaseSemesterIdCn) .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfTextbookClaim::getId) .leftJoin(BaseSemester.class, BaseSemester::getId, WfTextbookClaim::getBaseSemesterId) .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED) ; List distributeSemesterVoList = wfTextbookClaimService.selectJoinList(DistributeSemesterVo.class, wfTextbookClaimMPJLambdaWrapper); return RT.ok(distributeSemesterVoList); } @GetMapping(value = "/distribute-page") @ApiOperation(value="教材发放列表(移动端)") @SaCheckPermission("wftextbookclaim:detail") public RT> distributePage(@Valid DistributePageDto dto){ IPage page = wfTextbookClaimService.distributePage(dto);; PageOutput pageOutput = ConventPage.getPageOutput(page, DistributePageVo.class); return RT.ok(pageOutput); } @GetMapping(value = "/page") @ApiOperation(value="教材申领列表(分页)") @SaCheckPermission("wftextbookclaim:detail") public RT> page(@Valid WfTextbookClaimPageDto dto){ IPage page = wfTextbookClaimService.getPage(dto); PageOutput pageOutput = ConventPage.getPageOutput(page, WfTextbookClaimPageVo.class); return RT.ok(pageOutput); } @GetMapping(value = "/info") @ApiOperation(value="根据id查询教材申领信息") @SaCheckPermission("wftextbookclaim:detail") public RT info(@RequestParam Long id){ WfTextbookClaim wfTextbookClaim = wfTextbookClaimService.getByIdDeep(id); if (wfTextbookClaim == null) { return RT.error("找不到此数据!"); } return RT.ok(BeanUtil.toBean(wfTextbookClaim, WfTextbookClaimVo.class)); } @GetMapping(value = "/info-distribute") @ApiOperation(value = "教材发放页详情") @SaCheckPermission("wftextbookclaim:detail") public RT infoDistribute(@RequestParam Long id) { WfTextbookClaimVo wfTextbookClaimVo = wfTextbookClaimService.infoDistribute(id); if (wfTextbookClaimVo == null) { return RT.error("没有发放数据!"); } return RT.ok(BeanUtil.toBean(wfTextbookClaimVo, WfTextbookClaimVo.class)); } @GetMapping(value = "/distribute-record") @ApiOperation(value = "pc端教材发放记录") @SaCheckPermission("wftextbookclaim:detail") public RT> distributeRecord(@RequestParam Long id) { List distributeRecordVos = wfTextbookClaimService.distributeRecord(id); return RT.ok(distributeRecordVos); } @PostMapping @ApiOperation(value = "新增教材申领") @SaCheckPermission("wftextbookclaim:add") public RT add(@Valid @RequestBody AddWfTextbookClaimDto dto){ WfTextbookClaim wfTextbookClaim = BeanUtil.toBean(dto, WfTextbookClaim.class); boolean isSuccess = wfTextbookClaimService.add(wfTextbookClaim); return RT.ok(isSuccess); } @PutMapping("/confirm-istribute") @ApiOperation(value = "确认发放") @SaCheckPermission("wftextbookclaim:edit") public RT confirmDistribute(@Valid @RequestBody ConfirmDistributeDto dto){ return RT.ok(wfTextbookClaimService.confirmDistribute(dto)); } @PutMapping @ApiOperation(value = "修改教材申领") @SaCheckPermission("wftextbookclaim:edit") public RT update(@Valid @RequestBody UpdateWfTextbookClaimDto dto){ WfTextbookClaim wfTextbookClaim = BeanUtil.toBean(dto, WfTextbookClaim.class); return RT.ok(wfTextbookClaimService.update(wfTextbookClaim)); } @DeleteMapping @ApiOperation(value = "删除教材申领") @SaCheckPermission("wftextbookclaim:delete") public RT delete(@Valid @RequestBody List ids){ return RT.ok(wfTextbookClaimService.delete(ids)); } @GetMapping(value = "/info-qrcode") @ApiOperation(value="教材领取-生成二维码") @SaCheckPermission("wfstudenttextbookclaim:detail") public RT qrcode(@RequestParam Long id) throws Exception { String url = commonPropertiesConfig.getDomainApp() + "/pages/material/grant?id=" + id + "&userId=" + StpUtil.getLoginIdAsLong(); int width = 200; int height = 200; int margin = 1; try { String base64 = QrCodeUtil.createBase64(url, width, height, margin); return RT.ok(base64); } catch (Exception e) { throw e; } } @PostMapping("/claim-records-export-query") @ApiOperation(value = "申领记录条件导出") public ResponseEntity claimRecordsExportQuery(@Valid @RequestBody ClaimRecordsExportQueryDto dto) throws IOException { // @GetMapping("/claim-records-export-query") // @ApiOperation(value = "申领记录条件导出") // public ResponseEntity claimRecordsExportQuery(@Valid ClaimRecordsExportQueryDto dto) throws IOException { ByteArrayOutputStream bot = wfTextbookClaimService.claimRecordsExportQuery(dto); String fileName = "申领记录"; fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8); return RT.fileStream(bot.toByteArray(), fileName + ExcelTypeEnum.XLSX.getValue()); } }