CaseController.java 9.11 KB
package com.ash.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.ash.base.BaseController;
import com.ash.base.JsonResult;
import com.ash.base.OptionStatus;
import com.ash.base.excelOpt.ExcelErrorMessage;
import com.ash.entity.Case;
import com.ash.entity.CaseAnalysis;
import com.ash.entity.FileData;
import com.ash.enums.AnalysisStatusEnum;
import com.ash.enums.FileDataTypeEnum;
import com.ash.enums.ReviewStatusEnum;
import com.ash.excelData.CaseExcelData;
import com.ash.service.CaseAnalysisService;
import com.ash.service.CaseService;
import com.ash.service.FileDataService;
import com.ash.util.UUIDGenerator;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/case")
@Slf4j
public class CaseController extends BaseController {

    @Resource
    private CaseService caseService;

    @Resource
    private FileDataService fileDataService;

    @Resource
    private CaseAnalysisService caseAnalysisService;


    @PostMapping("/save")
    public JsonResult save(@RequestBody Case data) {
        try {
            Boolean success = caseService.save(data);
            return new JsonResult(success, OptionStatus.OPT_SUCCESS.getName(), null);
        } catch (Exception ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
            return JsonResult.error(OptionStatus.OPT_ERROR.getName());
        }
    }

    @PostMapping("/update")
    public JsonResult update(@RequestBody Case data) {
        try {
            Boolean success = caseService.update(data);
            return new JsonResult(success, OptionStatus.OPT_SUCCESS.getName(), null);
        } catch (Exception ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
            return JsonResult.error(OptionStatus.OPT_ERROR.getName());
        }
    }


    @GetMapping(value = "/importTempDownload")
    public void myExcelDownload(HttpServletResponse response) throws IOException {
        List<CaseExcelData> list = new ArrayList<>();
        String fileName = URLEncoder.encode("案件导入模板", "UTF-8");
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), CaseExcelData.class).sheet("案件列表").doWrite(list);
    }


    @PostMapping("/import")
    public JsonResult importData(@RequestParam("file") MultipartFile file) {
        try {
            List<ExcelErrorMessage> excelErrorMessages = caseService.importData(file);
            if (CollectionUtils.isEmpty(excelErrorMessages)) {
                return JsonResult.ok();
            } else {
                String filePath = errorFilePath + "/case/" + UUIDGenerator.uuid() + ".xlsx";
                Boolean success = generateErrorSheet(filePath, excelErrorMessages);
                if (success) {
                    FileData fileData = new FileData();
                    fileData.setType(FileDataTypeEnum.IMPORT_ERROR);
                    fileData.setPath(filePath);
                    fileDataService.save(fileData);
                    return JsonResult.error("导入失败", fileData.getId());
                } else {
                    return JsonResult.error("生成文件错误!");
                }
            }
        } catch (ExcelDataConvertException e) {
            return JsonResult.error("导入模板错误或数据格式错误!");
        } catch (Exception e) {
            return JsonResult.error("系统异常!");
        }

    }

    @GetMapping("/page")
    public JsonResult page(@RequestParam(value = "pageNo", defaultValue = "1") int pageNo,
                           @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                           @RequestParam(value = "code", required = false) String code,
                           @RequestParam(value = "startTime", required = false) String startTime,
                           @RequestParam(value = "endTime", required = false) String endTime,
                           @RequestParam(value = "analysisStatus", required = false)
                                   AnalysisStatusEnum analysisStatus,
                           @RequestParam(value = "reviewStatus", required = false)
                                   ReviewStatusEnum reviewStatus) {

        Case params = new Case();
        params.setAnalysisStatus(analysisStatus);
        params.setReviewStatus(reviewStatus);
        params.setCode(code);
        params.setStartTime(startTime);
        params.setEndTime(endTime);

        Page<Case> page = new Page<>();
        page.setCurrent(pageNo);
        page.setSize(pageSize);
        Page<Case> dataPage = caseService.pageByCondition(params, page);
        if (CollectionUtils.isNotEmpty(dataPage.getRecords())) {
            List<String> caseIds = dataPage.getRecords()
                    .stream().map(Case::getId).collect(Collectors.toList());
            Map<String, CaseAnalysis> caseAnalysisMap = caseAnalysisService.listByCaseId(caseIds);
            dataPage.getRecords().forEach(e -> e.setAnalysis(caseAnalysisMap.get(e.getId())));
        }

        return JsonResult.ok(OptionStatus.OPT_SUCCESS.getName(), dataPage);

    }

    @GetMapping("/export")
    public void export(@RequestParam(value = "code", required = false) String code,
                       @RequestParam(value = "startTime", required = false) String startTime,
                       @RequestParam(value = "endTime", required = false) String endTime,
                       @RequestParam(value = "analysisStatus", required = false)
                               AnalysisStatusEnum analysisStatus,
                       @RequestParam(value = "reviewStatus", required = false)
                               ReviewStatusEnum reviewStatus,
                       HttpServletResponse response) throws IOException {

        Case params = new Case();
        params.setAnalysisStatus(analysisStatus);
        params.setReviewStatus(reviewStatus);
        params.setCode(code);
        params.setStartTime(startTime);
        params.setEndTime(endTime);
        List<Case> dataList = caseService.list(params);

        List<CaseExcelData> dedList = Optional.ofNullable(dataList).map(all ->
                all.stream().map(e -> {
                    CaseExcelData ed = new CaseExcelData();
                    BeanUtils.copyProperties(e, ed);
                    return ed;
                }).collect(Collectors.toList())).orElse(new ArrayList<>());

        String fileName = new String("案件列表.xlsx".getBytes(), StandardCharsets.ISO_8859_1);
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        ServletOutputStream outputStream = response.getOutputStream();
        EasyExcel.write(outputStream, CaseExcelData.class)
                .sheet("案件列表")
                .doWrite(dedList);

    }

    @GetMapping(value = "/reAnalysis")
    public JsonResult reAnalysis() throws IOException {
        return JsonResult.ok();
    }

    @PostMapping("/saveAnalysis")
    public JsonResult save(@RequestBody CaseAnalysis analysis) {
        try {
            Boolean success = caseAnalysisService.save(analysis);
            return new JsonResult(success, OptionStatus.OPT_SUCCESS.getName(), null);
        } catch (Exception ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
            return JsonResult.error(OptionStatus.OPT_ERROR.getName());
        }
    }

    @PostMapping("/conformAnalysis")
    public JsonResult conformAnalysis(@RequestBody CaseAnalysis analysis) {
        try {
            Boolean success = caseAnalysisService.conform(analysis);
            return new JsonResult(success, OptionStatus.OPT_SUCCESS.getName(), null);
        } catch (Exception ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
            return JsonResult.error(OptionStatus.OPT_ERROR.getName());
        }
    }

    @PostMapping("/cancelConform")
    public JsonResult cancelConform(@RequestBody CaseAnalysis analysis) {
        try {
            Boolean success = caseAnalysisService.cancelConform(analysis);
            return new JsonResult(success, OptionStatus.OPT_SUCCESS.getName(), null);
        } catch (Exception ex) {
            ex.printStackTrace();
            log.error(ex.getMessage());
            return JsonResult.error(OptionStatus.OPT_ERROR.getName());
        }
    }
}