WarningInstanceController.java 11.3 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.FileData;
import com.ash.entity.WarningInstance;
import com.ash.entity.WarningInstanceAnalysis;
import com.ash.enums.AnalysisStatusEnum;
import com.ash.enums.FileDataTypeEnum;
import com.ash.enums.ReviewStatusEnum;
import com.ash.excelData.WarningInstanceExcelData;
import com.ash.service.FileDataService;
import com.ash.service.WarningInstanceAnalysisService;
import com.ash.service.WarningInstanceService;
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.apache.commons.lang3.StringUtils;
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.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/wi")
@Slf4j
public class WarningInstanceController extends BaseController {
    @Resource
    private WarningInstanceService warningInstanceService;

    @Resource
    private WarningInstanceAnalysisService warningInstanceAnalysisService;

    @Resource
    private FileDataService fileDataService;

    private ExecutorService executorService = Executors.newFixedThreadPool(10);

    @PostMapping(value = "/list")
    public JsonResult list(@RequestBody WarningInstance warningInstance) {
        try {
            List<WarningInstance> dataList = warningInstanceService.list(warningInstance);
            return JsonResult.ok(OptionStatus.OPT_SUCCESS.getName(), dataList);
        } catch (Exception ex) {
            ex.printStackTrace();
            return JsonResult.error(OptionStatus.OPT_ERROR.getName());
        }
    }


    @PostMapping("/save")
    public JsonResult save(@RequestBody WarningInstance warningInstance) {
        try {
            Boolean success = warningInstanceService.save(warningInstance);
            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 WarningInstance warningInstance) {
        try {
            Boolean success = warningInstanceService.update(warningInstance);
            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<WarningInstanceExcelData> 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(), WarningInstanceExcelData.class).sheet("警情列表").doWrite(list);
    }

    @PostMapping("/import")
    public JsonResult importData(@RequestParam("file") MultipartFile file) {
        try {
            List<ExcelErrorMessage> excelErrorMessages = warningInstanceService.importData(file);
            if (CollectionUtils.isEmpty(excelErrorMessages)) {
                return JsonResult.ok();
            } else {
                String filePath = errorFilePath + "/wi/" + 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) {

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

        Page<WarningInstance> page = new Page<>();
        page.setCurrent(pageNo);
        page.setSize(pageSize);
        Page<WarningInstance> dataPage = warningInstanceService.pageByCondition(params, page);
        if (CollectionUtils.isNotEmpty(dataPage.getRecords())) {
            List<String> wiIds = dataPage.getRecords()
                    .stream().map(WarningInstance::getId).collect(Collectors.toList());
            Map<String, WarningInstanceAnalysis> analysisMap = warningInstanceAnalysisService.listByWiId(wiIds);
            dataPage.getRecords().forEach(e -> e.setAnalysis(analysisMap.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 {

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

        List<WarningInstanceExcelData> dedList = Optional.ofNullable(dataList).map(all ->
                all.stream().map(e -> {
                    WarningInstanceExcelData ed = new WarningInstanceExcelData();
                    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, WarningInstanceExcelData.class)
                .sheet("警情列表")
                .doWrite(dedList);

    }


    @GetMapping(value = "/reAnalysis")
    public JsonResult reAnalysis(@RequestParam(value = "id", required = false) String id) throws IOException {
        executorService.execute(() -> {
            try {
                if (StringUtils.isNotBlank(id)) {
                    WarningInstance data = warningInstanceService.load(id);
                    if (data != null) {
                        data.setAnalysisStatus(AnalysisStatusEnum.analysis);
                        warningInstanceService.update(data);
                        warningInstanceService.analysis(Collections.singletonList(data));
                    }

                } else {
                    List<WarningInstance> dataList = warningInstanceService.listUnAnalysis();
                    if (CollectionUtils.isNotEmpty(dataList)) {
                        dataList.forEach(e -> {
                            e.setAnalysisStatus(AnalysisStatusEnum.analysis);
                            warningInstanceService.update(e);
                        });
                        warningInstanceService.analysis(dataList);
                    }

                }

            } catch (Exception ex) {
                log.error(ex.getMessage());

            }
        });
        return JsonResult.ok("重新解析开始");

    }

    @PostMapping("/saveAnalysis")
    public JsonResult save(@RequestBody WarningInstanceAnalysis analysis) {
        try {
            Boolean success = warningInstanceAnalysisService.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 WarningInstanceAnalysis analysis) {
        try {
            Boolean success = warningInstanceAnalysisService.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 WarningInstanceAnalysis analysis) {
        try {
            Boolean success = warningInstanceAnalysisService.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());
        }
    }


}