fuliqi
2023-12-04 38b44e0c9996f06524903417f1d0a3f746b4550b
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/BaseCaseServiceImpl.java
@@ -1,48 +1,58 @@
package com.ycl.service.caseHandler.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.bo.AdminUserDetails;
import com.ycl.bo.casePool.CasePoolIllegalBuildingDO;
import com.ycl.bo.casePool.CasePoolViolationDO;
import com.ycl.common.constant.BaseCaseStatus;
import com.ycl.common.constant.StepName;
import com.ycl.common.util.DateUtil;
import com.ycl.common.util.UtilNumber;
import com.ycl.dto.caseHandler.DispatchInfoParam;
import com.ycl.dto.caseHandler.QueryForViolationParam;
import com.ycl.dto.casePool.IllegalBuildingParam;
import com.ycl.dto.casePool.VideoInspectParam;
import com.ycl.dto.casePool.ViolationParam;
import com.ycl.dto.cockpitManage.DelayDO;
import com.ycl.entity.caseHandler.*;
import com.ycl.entity.common.ImageResources;
import com.ycl.entity.dict.DataDictionary;
import com.ycl.entity.resources.ImageResources;
import com.ycl.entity.video.VideoAlarmReport;
import com.ycl.exception.ApiException;
import com.ycl.mapper.caseHandler.*;
import com.ycl.mapper.common.ImageResourcesMapper;
import com.ycl.mapper.dict.DataDictionaryMapper;
import com.ycl.mapper.resources.ImageResourcesMapper;
import com.ycl.remote.dto.*;
import com.ycl.remote.service.CityPlatformService;
import com.ycl.service.caseHandler.IBaseCaseService;
import com.ycl.service.caseHandler.IDispatchHandleService;
import com.ycl.service.caseHandler.IViolationsService;
import com.ycl.service.resources.IImageResourcesService;
import com.ycl.service.video.IVideoAlarmReportService;
import com.ycl.vo.casePool.*;
import com.ycl.vo.cockpit.enforcementEvents.DelayVO;
import com.ycl.vo.cockpit.enforcementEvents.EventVO;
import com.ycl.vo.cockpit.enforcementEvents.StatisticsVO;
import com.ycl.vo.cockpit.enforcementEvents.VideoAndAreaVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -59,6 +69,7 @@
    private CityPlatformService cityPlatformService;
    private IViolationsService violationsService;
    private IVideoAlarmReportService videoAlarmReportService;
    @Value("${fdfs.fileUrl}")
    private String fileUrl;
@@ -107,9 +118,19 @@
    @Resource
    PartyInfoMapper partyInfoMapper;
    @Resource
    UtilNumber utilNumber;
    @Resource
    IDispatchHandleService iDispatchHandleService;
    @Resource
    IBaseCaseService baseCaseService;
    @Autowired
    IImageResourcesService imageResourcesService;
    @Override
    public String uploadEvent(Integer caseId) {
    public String uploadEvent(Long caseId) {
        BaseCase baseCase = this.getById(caseId);
        Violations violations = violationsService.getById(caseId);
        String medias = "";
@@ -122,14 +143,13 @@
                medias = stringBuilder.toString();
            }
        }
        EventAddParamDto dto = EventAddParamDto.builder().y84(baseCase.getLatitude() != null ? baseCase.getLatitude().toString() : "")
                .x84(baseCase.getLongitude() != null ? baseCase.getLongitude().toString() : "")
                .source(11).address(baseCase.getSite()).eventDesc(eventDesc).eventSign(baseCase.getCode()).medias(medias).build();
        eventDesc += "[大华视频接入测试]";
        EventAddParamDto dto = EventAddParamDto.builder().y84(baseCase.getLatitude() != null ? baseCase.getLatitude().toString() : "").x84(baseCase.getLongitude() != null ? baseCase.getLongitude().toString() : "").source(11).address(baseCase.getSite()).eventDesc(eventDesc).eventSign(baseCase.getCode()).medias(medias).build();
        String msg = cityPlatformService.addEvent(dto);
        ResultResponseDto result = JSONObject.parseObject(msg, ResultResponseDto.class);
        if (result.getCode() == 0) {
            EventAddResponseDto responseDto = JSONObject.parseObject(result.getResult(), EventAddResponseDto.class);
            baseCase.setTaskCode(responseDto.getTaskcode());
//            EventAddResponseDto responseDto = JSONObject.parseObject(result.getResult(), EventAddResponseDto.class);
            baseCase.setTaskCode(result.getResult());
            this.updateById(baseCase);
            return null;
        } else {
@@ -153,61 +173,35 @@
    }
    @Override
    public Page listViolationsPage(Page page, Integer state, Integer resource) {
    public Page listViolationsPage(Integer current, Integer size, Integer state, Integer resource, String code, String categoryBig, String categorySmall, Integer street, String site, String startTime, String endTime, Integer violationsTypeId, Integer videoId) {
        Integer type = 01;
        Integer hours = 60;
        Integer day = 24;
        Page<CasePoolViolationDO> violationsPage = baseCaseMapper.listViolationsPage(page, state, type, resource);
        List<CasePoolViolationVO> violationVOList = violationsPage
                .getRecords()
                .stream()
                .map(item -> {
                    CasePoolViolationVO casePoolViolationVO = new CasePoolViolationVO();
                    BeanUtils.copyProperties(item, casePoolViolationVO);
                    if (item.getCloseTime() == null) {
                        Duration duration = Duration.between(item.getAlarmTime(), LocalDateTime.now());
                        long continueHours = duration.toHours() - (duration.toDays() * day);
                        long minutes = duration.toMinutes() - (duration.toHours() * hours);
                        String continueTime = duration.toDays() + "天" + continueHours + "时" + minutes + "分钟";
                        casePoolViolationVO.setContinueTime(continueTime);
                    } else {
                        Duration duration = Duration.between(item.getAlarmTime(), item.getCloseTime());
                        long continueHours = duration.toHours() - (duration.toDays() * day);
                        long minutes = duration.toMinutes() - (duration.toHours() * hours);
                        String continueTime = duration.toDays() + "天" + continueHours + "时" + minutes + "分钟";
                        casePoolViolationVO.setContinueTime(continueTime);
                    }
                    casePoolViolationVO.setCategory(dataDictionaryMapper.selectById(item.getCategoryId()).getName());
                    casePoolViolationVO.setType(dataDictionaryMapper.selectById(item.getTypeId()).getName());
                    casePoolViolationVO.setStreet(dataDictionaryMapper.selectById(item.getStreetId()).getName());
                    return casePoolViolationVO;
                }).collect(Collectors.toList());
        Page<CasePoolViolationVO> casePoolViolationVOPage = new Page<>();
        BeanUtils.copyProperties(violationsPage, casePoolViolationVOPage);
        casePoolViolationVOPage.setRecords(violationVOList);
        return casePoolViolationVOPage;
        Page page = new Page<>().setCurrent(current).setSize(size);
        Page<CasePoolViolationVO> violationsPage = baseCaseMapper.listViolationsPage(page, state, type, resource, code, categoryBig, categorySmall, street, site, startTime, endTime, violationsTypeId, videoId);
        violationsPage.getRecords().stream().forEach(item -> {
            if (item.getCloseTime() == null) {
                Duration duration = Duration.between(item.getAlarmTime(), LocalDateTime.now());
                long continueHours = duration.toHours() - (duration.toDays() * day);
                long minutes = duration.toMinutes() - (duration.toHours() * hours);
                String continueTime = duration.toDays() + "天" + continueHours + "时" + minutes + "分钟";
                item.setContinueTime(continueTime);
            } else {
                Duration duration = Duration.between(item.getAlarmTime(), item.getCloseTime());
                long continueHours = duration.toHours() - (duration.toDays() * day);
                long minutes = duration.toMinutes() - (duration.toHours() * hours);
                String continueTime = duration.toDays() + "天" + continueHours + "时" + minutes + "分钟";
                item.setContinueTime(continueTime);
            }
        });
        return violationsPage;
    }
    @Override
    public Page listIllegalBuilding(Page page, Integer state, Integer resource) {
    public Page listIllegalBuilding(Integer current, Integer size, Integer state, Integer resource) {
        Integer type = 02;
        Page<CasePoolIllegalBuildingDO> casePoolIllegalBuildingDTOPage = baseCaseMapper.listIllegalBuildingsPage(page, state, type, resource);
        List<CasePoolIllegalBuildingVO> casePoolIllegalBuildingVOList = casePoolIllegalBuildingDTOPage
                .getRecords()
                .stream()
                .map(
                        item -> {
                            CasePoolIllegalBuildingVO casePoolIllegalBuildingVO = new CasePoolIllegalBuildingVO();
                            BeanUtils.copyProperties(item, casePoolIllegalBuildingVO);
                            casePoolIllegalBuildingVO.setCategory(dataDictionaryMapper.selectById(item.getCategoryId()).getName());
                            casePoolIllegalBuildingVO.setCommunity(dataDictionaryMapper.selectById(item.getCommunityId()).getName());
                            return casePoolIllegalBuildingVO;
                        }
                ).collect(Collectors.toList());
        Page<CasePoolIllegalBuildingVO> casePoolViolationVOPage = new Page<>();
        BeanUtils.copyProperties(casePoolIllegalBuildingDTOPage, casePoolViolationVOPage);
        casePoolViolationVOPage.setRecords(casePoolIllegalBuildingVOList);
        return casePoolViolationVOPage;
        Page page = new Page<>().setCurrent(current).setSize(size);
        return baseCaseMapper.listIllegalBuildingsPage(page, state, type, resource);
    }
    @Override
@@ -217,7 +211,7 @@
        Integer value = 1;
        violations.setId(id);
        setDisposeRecord(id, violationParam.getLimitTime());
        return violationsMapper.insert(violations) == value ? true : false;
        return violationsMapper.insert(violations) == value;
    }
    private void setDisposeRecord(Long id, String limitTime) {
@@ -226,12 +220,11 @@
        stepQuery.eq("name", stepName);
        WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepQuery);
        Integer state = 0;
        DisposeRecord disposeRecord = new DisposeRecord();
        disposeRecord.setWorkflowConfigStepId(workflowConfigStep.getId());
        disposeRecord.setHandlerRoleId(workflowConfigStep.getRoleId());
        disposeRecord.setBaseCaseId(id);
        disposeRecord.setState(state);
        disposeRecord.setState(1);
        disposeRecord.setCreateTime(LocalDateTime.now());
        AdminUserDetails userDetails = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        disposeRecord.setCreateUser(userDetails.getUserId());
@@ -267,13 +260,13 @@
        if (baseCase.getCategory() == 1) {
            Map mapV = new HashMap();
            mapV.put("id", baseCase.getId());
            Violations violations = violationsMapper.selectCondMap(mapV);
            baseCase.setViolations(violations);
            ViolationsVO violationsVO = violationsMapper.selectCondMap(mapV);
            baseCase.setViolationsVO(violationsVO);
        } else {
            IllegalBuilding illegalBuilding = illegalBuildingMapper.selectById(baseCase.getId());
            LambdaQueryWrapper<DataDictionary> dict = new LambdaQueryWrapper<>();
            dict.eq(DataDictionary::getId, illegalBuilding.getCategoryId());
            DataDictionary dictionary =  dataDictionaryMapper.selectOne(dict);
            DataDictionary dictionary = dataDictionaryMapper.selectOne(dict);
            if (dictionary != null) {
                illegalBuilding.setCategoryText(dictionary.getName());
            }
@@ -306,10 +299,7 @@
            }
            for (DisposeRecord record : records) {
                if (record != null && record.getEndTime() != null && record.getStartTime() != null) {
                    record.setLinkTime(
                            DateUtil.getDistanceDateTime(
                                    DateUtil.fromLocalDateTime(record.getStartTime()),
                                    DateUtil.fromLocalDateTime(record.getEndTime())));
                    record.setLinkTime(DateUtil.getDistanceDateTime(DateUtil.fromLocalDateTime(record.getStartTime()), DateUtil.fromLocalDateTime(record.getEndTime())));
                }
            }
            step.setDisposeRecords(records);
@@ -320,7 +310,7 @@
        //3.查询案卷图片信息
        FilesPictureVo filesPictureVo = new FilesPictureVo();
        QueryWrapper<ImageResources> wrapperIr = new QueryWrapper<>();
        wrapperIr.lambda().eq(ImageResources::getType, "01").or().eq(ImageResources::getType, "02");
        wrapperIr.lambda().eq(ImageResources::getBelongToId, baseCase.getId());
        List<ImageResources> irs = imageResourcesMapper.selectList(wrapperIr);
        filesPictureVo.setImageResources(irs);
        bcd.setFilesPictureVo(filesPictureVo);
@@ -365,12 +355,8 @@
    public ArrayList<String> listCaseImages(Integer id, Integer type) {
        Integer illegalBuildingType = 02;
        ArrayList<String> caseImages = new ArrayList<>();
        caseImages.add(investigationMapper
                .selectOne(new LambdaQueryWrapper<Investigation>()
                        .eq(Investigation::getBaseCaseId, id)).getPic());
        caseImages.add(arrivalSituationMapper
                .selectOne(new LambdaQueryWrapper<ArrivalSituation>()
                        .eq(ArrivalSituation::getBaseCaseId, id)).getSituationPic());
        caseImages.add(investigationMapper.selectOne(new LambdaQueryWrapper<Investigation>().eq(Investigation::getBaseCaseId, id)).getPic());
        caseImages.add(arrivalSituationMapper.selectOne(new LambdaQueryWrapper<ArrivalSituation>().eq(ArrivalSituation::getBaseCaseId, id)).getSituationPic());
        if (type == illegalBuildingType) {
            Writ writ = writMapper.selectOne(new LambdaQueryWrapper<Writ>().eq(Writ::getBaseCaseId, id));
            caseImages.add(writ.getWritPic());
@@ -390,6 +376,7 @@
        baseCase.setState(BaseCaseStatus.CLOSING_REGISTER);
        baseCase.setId(caseId);
        baseCase.setFinalOpinion(opinion);
        baseCase.setCloseTime(LocalDateTime.now());
        baseCaseMapper.updateById(baseCase);
        QueryWrapper<WorkflowConfigStep> stepQurey = new QueryWrapper<>();
@@ -406,8 +393,277 @@
        disposeRecord.setHandlerId(user.getUserId());
        //结案已结束
        disposeRecord.setState(1);
        disposeRecord.setResult(result);
        disposeRecord.setEndTime(LocalDateTime.now());
        disposeRecord.setHandlerId(user.getUserId());
        disposeRecordMapper.update(disposeRecord, updateWrapper);
    }
    @Override
    public Page<BaseCase> selectPage(Page<BaseCase> page, String number, Integer communityId, Integer categories, String startTime, String endTime, String site, Integer state, Integer streetId, Integer time) {
        LocalDateTime start = null;
        LocalDateTime end = null;
        LocalDateTime now = LocalDateTime.now();
        if (Objects.nonNull(time) && time == 0) {
            end = now;
            start = now.minusWeeks(1);
        }
        if (Objects.nonNull(time) && time == 1) {
            end = now;
            start = now.minusMonths(1);
        }
        if (Objects.nonNull(time) && time == 2) {
            end = now;
            start = now.minusMonths(3);
        }
        Page<BaseCase> baseCasePage = baseCaseMapper.selectBaseCasePage(page, number, communityId, categories, start, end, site, state, streetId);
        if (!Objects.isNull(baseCasePage) && CollUtil.isNotEmpty(baseCasePage.getRecords())) {
            List<BaseCase> records = baseCasePage.getRecords();
            //TODO:将状态state改为状态名stateName
            records.stream().forEach(baseCase -> {
                Integer stateInt = baseCase.getState();
                if (stateInt == 0) {
                    baseCase.setStateName("待处理");
                } else if (stateInt == 1) {
                    baseCase.setStateName("报警");
                } else if (stateInt == 2) {
                    baseCase.setStateName("上报");
                } else if (stateInt == 3) {
                    baseCase.setStateName("在学习");
                } else if (stateInt == 4) {
                    baseCase.setStateName("暂不处理");
                } else if (stateInt == 5) {
                    baseCase.setStateName("立案");
                } else if (stateInt == 6) {
                    baseCase.setStateName("调度");
                } else if (stateInt == 7) {
                    baseCase.setStateName("处置");
                } else if (stateInt == 8) {
                    baseCase.setStateName("核查");
                } else if (stateInt == 9) {
                    baseCase.setStateName("结案");
                } else if (stateInt == 10) {
                    baseCase.setStateName("待上报");
                }
            });
            Set<Long> caseIds = records.stream().map(BaseCase::getId).collect(Collectors.toSet());
            Map<Long, String> urlMap = imageResourcesService.getUrlMap(caseIds, "01");
            records.stream().forEach(item -> {
                item.setUrl(urlMap.get(item.getId()));
            });
        }
        return baseCasePage;
    }
    @Override
    public Page<QueryForViolationVO> selectViolation(QueryForViolationParam queryForViolationParam) {
        return baseCaseMapper.selectViolationPage(
                new Page<QueryForViolationVO>()
                        .setSize(queryForViolationParam.getPageSize())
                        .setCurrent(queryForViolationParam.getCurrent()), queryForViolationParam);
    }
    @Override
    public List<QueryForViolationVO> selectViolationList(QueryForViolationParam queryForViolationParam) {
        return baseCaseMapper.selectViolationPage(queryForViolationParam);
    }
    @Override
    public Page<BaseCaseVO> selectVideoInspection(Integer current, Integer pageSize, Long gradeId, Long videoId, String beginTime, String endTime, Integer type) {
        return baseCaseMapper.selectVideoInspection(new Page<>(current, pageSize), gradeId, videoId, beginTime, endTime, type);
    }
    @Override
    public Map<String, Object> selectCount() {
        HashMap<String, Object> map = new HashMap<>();
        Long review = baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().eq(BaseCase::getState, 1));
        Long register = baseCaseMapper.selectRegisterCount();
        Long study = baseCaseMapper.selectStudyCount();
        map.put("review", review);
        map.put("register", register);
        map.put("study", study);
        return map;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean updateCase(VideoInspectParam violationParam) {
        BaseCase baseCase = new BaseCase();
        BeanUtils.copyProperties(violationParam, baseCase);
        baseCase.setId(violationParam.getBaseId());
        baseCase.setCode(utilNumber.createCaseCode());
        baseCaseMapper.updateById(baseCase);
        Violations violations = new Violations();
        BeanUtils.copyProperties(violationParam, violations);
        violations.setId(violationParam.getBaseId());
        if (violationParam.getState() == 6) {
            AdminUserDetails user = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            violationParam.setCreateUser(user.getUserId());
            DispatchInfoParam dispatchInfoParam = new DispatchInfoParam();
            BeanUtils.copyProperties(violationParam, dispatchInfoParam);
            dispatchInfoParam.setBaseCaseId(violationParam.getBaseId());
            iDispatchHandleService.dispatch(dispatchInfoParam);
        }
        if (violationParam.getState() == 2) {
//            baseCaseService.uploadEvent(violationParam.getBaseId());
            /// TODO: 2022/12/16 上报接口未实现
        }
        return violationsMapper.updateById(violations) == 1 ? true : false;
    }
    @Override
    public Integer dayCount() {
        return baseCaseMapper.dayCount();
    }
    @Override
    public Integer weekCount() {
        return baseCaseMapper.weekCount();
    }
    @Override
    public Integer dispatchCount() {
        return baseCaseMapper.dispatchCount();
    }
    @Override
    public Integer alCount() {
        return baseCaseMapper.alCount();
    }
    @Override
    public IPage<EventVO> selectEventList(String beginTime, String endTime, Integer pageIndex, Integer pageSize) {
        if (pageIndex == null) {
            pageIndex = 1;
        }
        if (pageSize == null) {
            pageSize = 50;
        }
        IPage<EventVO> page = new Page<>(pageIndex, pageSize);
        return baseCaseMapper.selectEventList(page, beginTime, endTime);
    }
    @Override
    public List<VideoAndAreaVO> areaCount() {
        List<VideoAndAreaVO> areaCountList = baseCaseMapper.areaCount();
        Long allCount = baseCaseMapper.selectCount(new LambdaQueryWrapper<>());
        areaCountList.stream().forEach(item -> item.setRatio(new BigDecimal(item.getCount() * 1.0 / allCount).setScale(4, BigDecimal.ROUND_HALF_UP)));
        return areaCountList;
    }
    @Override
    public List<DelayVO> selectDelayList() {
        List<DelayDO> delayDOS = baseCaseMapper.selectDelayVOList();
        ArrayList<DelayVO> delayVOS = new ArrayList<>();
        delayDOS.stream().forEach(item -> {
            DelayVO delayVO = new DelayVO();
            delayVO.setDescription(item.getDescription());
            delayVO.setCode(item.getCode());
            Duration between;
            if (item.getEndTime() != null) {
                between = Duration.between(item.getEndTime(), item.getLimitTime());
            } else {
                between = Duration.between(LocalDateTime.now(), item.getLimitTime());
            }
            if (between.isNegative()) {
                delayVO.setDuration(between.toMinutes());
                delayVOS.add(delayVO);
            }
        });
        return delayVOS;
    }
    @Override
    public Map<String, Object> statistics() {
        Map<String, Object> map = new HashMap<>();
        Long reportCount = baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().eq(BaseCase::getState, BaseCaseStatus.REPORT));
        StatisticsVO report = new StatisticsVO();
        report.setCount(reportCount);
        ArrayList<Integer> reportState = new ArrayList<>();
        reportState.add(BaseCaseStatus.REPORT);
        Long reportLastMonthCount = baseCaseMapper.selectLastMonthCount(reportState);
        Long reportRecentlyMonthCount = baseCaseMapper.selectRecentlyMonthCount(reportState);
        Double v = (reportRecentlyMonthCount - reportLastMonthCount) * 1.0 / reportLastMonthCount;
        if (reportLastMonthCount == 0) {
            report.setRatio(null);
        } else {
            report.setRatio(new BigDecimal(v).setScale(4, BigDecimal.ROUND_HALF_UP).abs());
        }
        if (v < 0) {
            report.setUp(false);
        } else {
            report.setUp(true);
        }
        Long disposeCount = baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().in(BaseCase::getState, BaseCaseStatus.DISPATCH, BaseCaseStatus.DISPOSE, BaseCaseStatus.CHECK, BaseCaseStatus.CLOSING_REGISTER));
        StatisticsVO dispose = new StatisticsVO();
        dispose.setCount(disposeCount);
        ArrayList<Integer> disposeState = new ArrayList<>();
        disposeState.add(BaseCaseStatus.DISPATCH);
        disposeState.add(BaseCaseStatus.DISPOSE);
        disposeState.add(BaseCaseStatus.CHECK);
        disposeState.add(BaseCaseStatus.CLOSING_REGISTER);
        Long disposeLastMonthCount = baseCaseMapper.selectLastMonthCount(disposeState);
        Long disposeRecentlyMonthCount = baseCaseMapper.selectRecentlyMonthCount(disposeState);
        Double v1 = (disposeRecentlyMonthCount - disposeLastMonthCount) * 1.0 / disposeLastMonthCount;
        if (disposeLastMonthCount == 0) {
            dispose.setRatio(null);
        } else {
            dispose.setRatio(new BigDecimal(v1).setScale(4, BigDecimal.ROUND_HALF_UP).abs());
        }
        if (v1 < 0) {
            dispose.setUp(false);
        } else {
            dispose.setUp(true);
        }
        StatisticsVO onTimeDispose = new StatisticsVO();
        onTimeDispose.setCount(baseCaseMapper.selectOnTimeCaseCount());
        Long onTimeCaseLastMonthCount = baseCaseMapper.selectOnTimeCaseLastMonthCount();
        Long timeCaseRecentlyMonthCount = baseCaseMapper.selectOnTimeCaseRecentlyMonthCount();
        Double v2 = (timeCaseRecentlyMonthCount - onTimeCaseLastMonthCount) * 1.0 / onTimeCaseLastMonthCount;
        if (onTimeCaseLastMonthCount == 0) {
            onTimeDispose.setRatio(null);
        } else {
            onTimeDispose.setRatio(new BigDecimal(v2).setScale(4, BigDecimal.ROUND_HALF_UP).abs());
        }
        if (v2 < 0) {
            onTimeDispose.setUp(false);
        } else {
            onTimeDispose.setUp(true);
        }
        Long registerCount = baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().in(BaseCase::getState, BaseCaseStatus.DISPATCH, BaseCaseStatus.DISPOSE, BaseCaseStatus.CHECK, BaseCaseStatus.CLOSING_REGISTER, BaseCaseStatus.REPORT));
        StatisticsVO register = new StatisticsVO();
        register.setCount(registerCount);
        ArrayList<Integer> registerState = new ArrayList<>();
        registerState.add(BaseCaseStatus.DISPATCH);
        registerState.add(BaseCaseStatus.DISPOSE);
        registerState.add(BaseCaseStatus.CHECK);
        registerState.add(BaseCaseStatus.CLOSING_REGISTER);
        registerState.add(BaseCaseStatus.REPORT);
        Long registerLastMonthCount = baseCaseMapper.selectLastMonthCount(registerState);
        Long registerRecentlyMonthCount = baseCaseMapper.selectRecentlyMonthCount(registerState);
        System.out.println(disposeRecentlyMonthCount);
        Double v3 = (registerRecentlyMonthCount - registerLastMonthCount) * 1.0 / registerLastMonthCount;
        if (disposeLastMonthCount == 0) {
            register.setRatio(null);
        } else {
            register.setRatio(new BigDecimal(v3).setScale(4, BigDecimal.ROUND_HALF_UP).abs());
        }
        if (v3 < 0) {
            register.setUp(false);
        } else {
            register.setUp(true);
        }
        map.put("reported", report);
        map.put("disposition", dispose);
        map.put("dispositionInTime", onTimeDispose);
        map.put("register", register);
        return map;
    }
}