package com.finance.web.controller.api; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.finance.common.annotation.FinancialLog; import com.finance.common.annotation.HistoryGroup; import com.finance.common.basic.PageDTO; import com.finance.common.core.domain.R; import com.finance.common.enums.BusinessType; import com.finance.common.enums.ReportingStatusEnum; import com.finance.common.exception.ServiceException; import com.finance.system.domain.TbBasicData; import com.finance.system.dto.update.BasicDataUpdDTO; import com.finance.system.query.CurrentFieldsQuery; import com.finance.system.query.HistoryDataQuery; import com.finance.system.query.QuestionQuery; import com.finance.system.query.ScoreCalculateDetailQuery; import com.finance.system.query.ScoreCalculateQuery; import com.finance.system.service.TbBasicDataService; import com.finance.system.service.TbQuestionService; import com.finance.system.service.TbScoreService; import com.finance.system.vo.BasicDataVO; import com.finance.system.vo.CurrentFieldsAllVO; import com.finance.system.vo.CurrentFieldsDetailVO; import com.finance.system.vo.CurrentFieldsVO; import com.finance.system.vo.QuestionVO; import com.finance.system.vo.ScoreCalculateDetailVO; import com.finance.system.vo.ScoreCalculateVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import java.util.Date; import java.util.List; import java.util.Objects; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; 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.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * @author mitao * @date 2024/4/8 */ @Slf4j @RestController @RequestMapping("/history-data") @RequiredArgsConstructor @Api(tags = "历史数据相关接口") public class HistoryDataController { private final TbBasicDataService tbBasicDataService; private final TbScoreService tbScoreService; private final TbQuestionService tbQuestionService; /** * 历史数据分页查询 * * @param dto 历史数据查询传输对象 * @return R> */ @PostMapping("/page-data") @ApiOperation("历史数据分页查询") public R> pageData(@Validated @RequestBody HistoryDataQuery dto) { Date startTime = dto.getStartTime(); Date endTime = dto.getEndTime(); boolean flag = Objects.nonNull(startTime) && Objects.nonNull(endTime); Page page = tbBasicDataService .lambdaQuery() .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) .between(flag, TbBasicData::getReportingTime, startTime, endTime) .groupBy(TbBasicData::getQuarter) .orderByDesc(TbBasicData::getReportingTime) .page(new Page<>(dto.getPageNum(), dto.getPageSize())); return R.ok(PageDTO.of(page, BasicDataVO.class)); } /** * 字段统计 * * @return R> */ @ApiOperation(value = "字段统计", notes = "字段统计") @PostMapping("/fields-statics") public R> historyFieldsStatics( @Validated({HistoryGroup.class}) @RequestBody CurrentFieldsQuery dto) { try { return tbBasicDataService.historyFieldsStatics(dto); } catch (Exception e) { log.error("获取字段统计相关信息异常", e); return R.fail(); } } /** * 查看详情 * * @param id 基础数据id * @return R */ @GetMapping("/fields-details") @ApiOperation(value = "字段统计-查看详情", notes = "字段统计") @ApiImplicitParam( name = "id", value = "基础数据id", required = true, dataType = "int", paramType = "query", dataTypeClass = Long.class) public R fieldsDetails(@RequestParam("id") Long id) { try { return tbBasicDataService.fieldsDetails(id); } catch (Exception e) { if (e instanceof ServiceException) { return R.fail(e.getMessage()); } log.error("保存当前季度数据异常", e); return R.fail(); } } @PostMapping("/save-basic-data") @ApiOperation("字段统计-保存数据") public R editBasicData(@RequestBody BasicDataUpdDTO dto) { try { tbBasicDataService.editBasicData(dto); } catch (Exception e) { if (e instanceof ServiceException) { return R.fail(e.getMessage()); } log.error("保存数据异常", e); return R.fail(); } return R.ok(); } /** * 查看全部 * * @return R */ @GetMapping("/fields-statics-all") @ApiOperation(value = "查看全部", notes = "字段统计") @ApiImplicitParam( name = "quarter", value = "季度", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class) public R fieldsStaticsAll(@RequestParam("quarter") String quarter) { try { return R.ok(tbBasicDataService.fieldsStaticsAll(quarter)); } catch (Exception e) { if (e instanceof ServiceException) { return R.fail(e.getMessage()); } log.error("查看全部异常", e); return R.fail(); } } /** * 得分计算 * * @param query 得分计算条件查询对象 * @return R> */ @PostMapping("/score-calculate") @ApiOperation("得分计算") public R> scoreCalculate( @Validated({HistoryGroup.class}) @RequestBody ScoreCalculateQuery query) { return R.ok(tbBasicDataService.scoreCalculatePage(query)); } /** * 得分计算查看详情 * * @param query 得分计算详情条件查询对象 * @return R */ @PostMapping("/score-calculate-detail") @ApiOperation("得分计算-查看详情") public R scoreCalculateDetail( @Validated @RequestBody ScoreCalculateDetailQuery query) { return R.ok(tbScoreService.scoreCalculateDetail(query)); } /** * 分页查询问题 * * @param dto 发现问题分页数据传输对象 * @return R> */ @PostMapping("/page-question") @ApiOperation(value = "问题查看-分页查询问题", notes = "问题查看") public R> pageQuestion( @Validated({HistoryGroup.class}) @RequestBody QuestionQuery dto) { return R.ok(tbQuestionService.pageQuestion(dto)); } @PostMapping("/import") @ApiOperation("导入历史数据") @FinancialLog(title = "导入数据", businessType = BusinessType.IMPORT) @ApiImplicitParams({ @ApiImplicitParam(name = "file", value = "文件", required = true, dataType = "file", paramType = "form"), @ApiImplicitParam(name = "quarter", value = "季度 e.g. 2024年一季度", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class) }) public R importData(@RequestPart("file") MultipartFile file, @RequestParam("quarter") String quarter) { try { tbBasicDataService.importData(file, quarter); } catch (Exception e) { if (e instanceof ServiceException) { return R.fail(e.getMessage()); } log.error("导入历史数据异常", e); return R.fail(); } return R.ok(); } @PostMapping("/export") @ApiOperation("导出") @FinancialLog(title = "导出数据", businessType = BusinessType.EXPORT) @ApiImplicitParam(name = "quarterList", value = "quarterList", allowMultiple = true, dataTypeClass = List.class, paramType = "query") public void exportData(@RequestParam("quarterList") List quarterList) { try { tbBasicDataService.exportData(quarterList); } catch (Exception e) { log.error("导出历史数据异常", e); } } }