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.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.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.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.*; import java.util.stream.Collectors; /** *

* 案件基本信息 服务实现类 *

* * @author wl * @since 2022-09-24 */ @Service public class BaseCaseServiceImpl extends ServiceImpl implements IBaseCaseService { private CityPlatformService cityPlatformService; private IViolationsService violationsService; private IVideoAlarmReportService videoAlarmReportService; @Value("${fdfs.fileUrl}") private String fileUrl; @Autowired public void setCityPlatformService(CityPlatformService cityPlatformService) { this.cityPlatformService = cityPlatformService; } @Autowired public void setViolationsService(IViolationsService violationsService) { this.violationsService = violationsService; } @Autowired public void setVideoAlarmReportService(IVideoAlarmReportService videoAlarmReportService) { this.videoAlarmReportService = videoAlarmReportService; } @Resource BaseCaseMapper baseCaseMapper; @Resource DataDictionaryMapper dataDictionaryMapper; @Resource ViolationsMapper violationsMapper; @Resource IllegalBuildingMapper illegalBuildingMapper; @Resource ArrivalSituationMapper arrivalSituationMapper; @Resource InvestigationMapper investigationMapper; @Resource WritMapper writMapper; @Resource DisposeRecordMapper disposeRecordMapper; @Resource WorkflowConfigStepMapper workflowConfigStepMapper; @Resource WorkflowConfigMapper workflowConfigMapper; @Resource ImageResourcesMapper imageResourcesMapper; @Resource DispatchInfoMapper dispatchInfoMapper; @Resource PartyInfoMapper partyInfoMapper; @Resource UtilNumber utilNumber; @Resource IDispatchHandleService iDispatchHandleService; @Resource IBaseCaseService baseCaseService; @Autowired IImageResourcesService imageResourcesService; @Override public String uploadEvent(Long caseId) { BaseCase baseCase = this.getById(caseId); Violations violations = violationsService.getById(caseId); String medias = ""; String eventDesc = ""; if (violations != null) { eventDesc = violations.getDescription(); VideoAlarmReport videoAlarmReport = videoAlarmReportService.getById(violations.getVideoAlarmReportId()); if (videoAlarmReport != null) { StringBuilder stringBuilder = new StringBuilder().append("[{'mediaURL':'").append(fileUrl).append(videoAlarmReport.getPicData()).append("'}]"); medias = stringBuilder.toString(); } } 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(result.getResult()); this.updateById(baseCase); return null; } else { return result.getMsg(); } } @Override public String processEvent(Integer caseId) { BaseCase baseCase = this.getById(caseId); EventProcessParamDto paramDto = EventProcessParamDto.builder().eventSign(baseCase.getCode()).taskcode(baseCase.getTaskCode()).build(); String msg = cityPlatformService.getEventProcess(paramDto); ResultResponseDto responseDto = JSONObject.parseObject(msg, ResultResponseDto.class); if (responseDto.getCode() == 0) { EventProcessResponseDto eventProcessResponseDto = JSONObject.parseObject(responseDto.getResult(), EventProcessResponseDto.class); /*********** 未处理市平台返回数据 ***************/ return null; } else { return responseDto.getMsg(); } } @Override public Page listViolationsPage(Integer current, Integer size, List 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 page = new Page<>().setCurrent(current).setSize(size); Page 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(Integer current, Integer size, List state, Integer resource) { Integer type = 02; Page page = new Page<>().setCurrent(current).setSize(size); return baseCaseMapper.listIllegalBuildingsPage(page, state, type, resource); } @Override public Boolean saveViolationCase(ViolationParam violationParam, Long id) { Violations violations = new Violations(); BeanUtils.copyProperties(violationParam, violations); Integer value = 1; violations.setId(id); setDisposeRecord(id, violationParam.getLimitTime()); return violationsMapper.insert(violations) == value; } private void setDisposeRecord(Long id, String limitTime) { String stepName = StepName.DISPATCH.getName(); QueryWrapper stepQuery = new QueryWrapper<>(); stepQuery.eq("name", stepName); WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepQuery); DisposeRecord disposeRecord = new DisposeRecord(); disposeRecord.setWorkflowConfigStepId(workflowConfigStep.getId()); disposeRecord.setHandlerRoleId(workflowConfigStep.getRoleId()); disposeRecord.setBaseCaseId(id); disposeRecord.setState(1); disposeRecord.setCreateTime(LocalDateTime.now()); AdminUserDetails userDetails = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); disposeRecord.setCreateUser(userDetails.getUserId()); disposeRecord.setStartTime(LocalDateTime.now()); disposeRecord.setStepName(stepName); if (!StringUtils.isEmpty(limitTime)) { disposeRecord.setLimitTime(LocalDateTime.parse(limitTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } disposeRecordMapper.insert(disposeRecord); } @Override public Boolean saveIllegalBuildingCase(IllegalBuildingParam illegalBuildingParam, Long id) { IllegalBuilding illegalBuilding = new IllegalBuilding(); BeanUtils.copyProperties(illegalBuildingParam, illegalBuilding); setDisposeRecord(id, illegalBuildingParam.getLimitTime()); Integer value = 1; illegalBuilding.setBaseCaseId(id); return illegalBuildingMapper.insert(illegalBuilding) == value ? true : false; } @Override public BaseCaseDetail baseCaseDetail(String code) { BaseCaseDetail bcd = new BaseCaseDetail(); //1.查询案件基本信息 Map map = new HashMap(); map.put("code", code); BaseCase baseCase = baseCaseMapper.selectCondMap(map); if (baseCase == null) { return null; } //查询案件违规信息 if (baseCase.getCategory() == 1) { Map mapV = new HashMap(); mapV.put("id", baseCase.getId()); ViolationsVO violationsVO = violationsMapper.selectCondMap(mapV); baseCase.setViolationsVO(violationsVO); } else { IllegalBuilding illegalBuilding = illegalBuildingMapper.selectById(baseCase.getId()); if (illegalBuilding != null) { LambdaQueryWrapper dict = new LambdaQueryWrapper<>(); dict.eq(DataDictionary::getId, illegalBuilding.getCategoryId()); DataDictionary dictionary = dataDictionaryMapper.selectOne(dict); if (dictionary != null) { illegalBuilding.setCategoryText(dictionary.getName()); } baseCase.setIllegalBuilding(illegalBuilding); } } //获取调度信息 Map mapD = new HashMap(); mapD.put("baseCaseId", baseCase.getId()); DispatchInfo dispatchInfo = dispatchInfoMapper.selectCondMap(mapD); baseCase.setDispatchInfo(dispatchInfo); bcd.setBaseCase(baseCase); //案件相关信息 //2.查询办理经过信息 //2.1查询处置流程配置 HandlePassVo handlePassVo = new HandlePassVo(); QueryWrapper wrapperWc = new QueryWrapper<>(); wrapperWc.lambda().eq(WorkflowConfig::getCode, "ddlc"); List wcs = workflowConfigMapper.selectList(wrapperWc); //2.2查询处置流程环节配置 Map mapWcs = new HashMap(); mapWcs.put("workflowConfigId", wcs.get(0).getId()); mapWcs.put("baseCaseId", baseCase.getId()); List listWcs = workflowConfigStepMapper.selectRecordByWorkflowConfigStepId(mapWcs); //处理用环节时间 for (WorkflowConfigStep step : listWcs) { List records = step.getDisposeRecords(); if (records == null) { continue; } 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()))); } } step.setDisposeRecords(records); } //2.3设置调度流程 handlePassVo.setWorkflowConfigSteps(listWcs); bcd.setHandlePassVo(handlePassVo); //3.查询案卷图片信息 FilesPictureVo filesPictureVo = new FilesPictureVo(); QueryWrapper wrapperIr = new QueryWrapper<>(); wrapperIr.lambda().eq(ImageResources::getBelongToId, baseCase.getId()); List irs = imageResourcesMapper.selectList(wrapperIr); filesPictureVo.setImageResources(irs); bcd.setFilesPictureVo(filesPictureVo); //4.查询问题处理信息 /*ProblemProVo problemProVo = new ProblemProVo(); //4.2查询处置流程环节配置 List listWcsPp = new ArrayList<>(); //4.3设置调度流程 problemProVo.setWorkflowConfigSteps(listWcsPp); bcd.setProblemProVo(problemProVo);*/ //5.查询现场情况信息 CurrentSitVo currentSitVo = new CurrentSitVo(); QueryWrapper wrapperAs = new QueryWrapper<>(); wrapperAs.lambda().eq(ArrivalSituation::getBaseCaseId, baseCase.getId()); //设置到达现场情况 ArrivalSituation as = arrivalSituationMapper.selectOne(wrapperAs); currentSitVo.setArrivalSituation(as); //设置调查取证 QueryWrapper wrapperI = new QueryWrapper<>(); wrapperI.lambda().eq(Investigation::getBaseCaseId, baseCase.getId()); Investigation investigation = investigationMapper.selectOne(wrapperI); if (investigation != null && investigation.getPartyId() != null) { //获取当事人信息 Map mapP = new HashMap(); mapP.put("id", investigation.getPartyId()); PartyInfo partyInfo = partyInfoMapper.selectCondMap(mapP); //填充当事人 investigation.setPartyInfo(partyInfo); } currentSitVo.setInvestigation(investigation); //设置告知违法 QueryWrapper wrapperW = new QueryWrapper<>(); wrapperW.lambda().eq(Writ::getBaseCaseId, baseCase.getId()); Writ writ = writMapper.selectOne(wrapperW); currentSitVo.setWrit(writ); bcd.setCurrentSitVo(currentSitVo); return bcd; } @Override public ArrayList listCaseImages(Integer id, Integer type) { Integer illegalBuildingType = 02; ArrayList caseImages = new ArrayList<>(); caseImages.add(investigationMapper.selectOne(new LambdaQueryWrapper().eq(Investigation::getBaseCaseId, id)).getPic()); caseImages.add(arrivalSituationMapper.selectOne(new LambdaQueryWrapper().eq(ArrivalSituation::getBaseCaseId, id)).getSituationPic()); if (type == illegalBuildingType) { Writ writ = writMapper.selectOne(new LambdaQueryWrapper().eq(Writ::getBaseCaseId, id)); caseImages.add(writ.getWritPic()); caseImages.add(writ.getOriginalPic()); caseImages.add(writ.getOtherPic()); caseImages.add(writ.getRectifiedPic()); } return caseImages; } @Override public void endCase(Long caseId, String result, String opinion) { //获取当前登陆用户信息 AdminUserDetails user = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String endCaseName = StepName.CLOSING_REGISTER.getName(); BaseCase baseCase = new BaseCase(); baseCase.setState(BaseCaseStatus.CLOSING_REGISTER); baseCase.setId(caseId); baseCase.setFinalOpinion(opinion); baseCase.setCloseTime(LocalDateTime.now()); baseCaseMapper.updateById(baseCase); QueryWrapper stepQurey = new QueryWrapper<>(); stepQurey.eq("name", endCaseName); WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepQurey); if (workflowConfigStep == null) { throw new ApiException("未查询到该流程环节"); } UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("base_case_id", baseCase.getId()).eq("workflow_config_step_id", workflowConfigStep.getId()); //修改结案记录 DisposeRecord disposeRecord = new DisposeRecord(); 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 selectPage(Page 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 baseCasePage = baseCaseMapper.selectBaseCasePage(page, number, communityId, categories, start, end, site, state, streetId); if (!Objects.isNull(baseCasePage) && CollUtil.isNotEmpty(baseCasePage.getRecords())) { List 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 caseIds = records.stream().map(BaseCase::getId).collect(Collectors.toSet()); Map urlMap = imageResourcesService.getUrlMap(caseIds, "01"); records.stream().forEach(item -> { item.setUrl(urlMap.get(item.getId())); }); } return baseCasePage; } @Override public Page selectViolation(QueryForViolationParam queryForViolationParam) { return baseCaseMapper.selectViolationPage( new Page() .setSize(queryForViolationParam.getPageSize()) .setCurrent(queryForViolationParam.getCurrent()), queryForViolationParam); } @Override public List selectViolationList(QueryForViolationParam queryForViolationParam) { return baseCaseMapper.selectViolationPage(queryForViolationParam); } @Override public Page 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 selectCount() { HashMap map = new HashMap<>(); Long review = baseCaseMapper.selectCount(new LambdaQueryWrapper().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 selectEventList(String beginTime, String endTime, Integer pageIndex, Integer pageSize) { if (pageIndex == null) { pageIndex = 1; } if (pageSize == null) { pageSize = 50; } IPage page = new Page<>(pageIndex, pageSize); return baseCaseMapper.selectEventList(page, beginTime, endTime); } @Override public List areaCount() { List 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 selectDelayList() { List delayDOS = baseCaseMapper.selectDelayVOList(); ArrayList 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 statistics() { Map map = new HashMap<>(); Long reportCount = baseCaseMapper.selectCount(new LambdaQueryWrapper().eq(BaseCase::getState, BaseCaseStatus.REPORT)); StatisticsVO report = new StatisticsVO(); report.setCount(reportCount); ArrayList 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().in(BaseCase::getState, BaseCaseStatus.DISPATCH, BaseCaseStatus.DISPOSE, BaseCaseStatus.CHECK, BaseCaseStatus.CLOSING_REGISTER)); StatisticsVO dispose = new StatisticsVO(); dispose.setCount(disposeCount); ArrayList 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().in(BaseCase::getState, BaseCaseStatus.DISPATCH, BaseCaseStatus.DISPOSE, BaseCaseStatus.CHECK, BaseCaseStatus.CLOSING_REGISTER, BaseCaseStatus.REPORT)); StatisticsVO register = new StatisticsVO(); register.setCount(registerCount); ArrayList 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; } @Override public IPage getWorkOrder(Integer pageIndex, Integer pageSize, String keyword, String startTime, String endTime) { if (pageIndex == null) { pageIndex = 1; } if (pageSize == null) { pageSize = 20; } IPage page = new Page<>(pageIndex, pageSize); return baseCaseMapper.getWorkOrder(page, keyword, startTime, endTime); } @Override public List getWorkOrderList(String keyword, String startTime, String endTime) { IPage page = new Page<>(1, 5000); IPage page1 = baseCaseMapper.getWorkOrder(page, keyword, startTime, endTime); return page1.getRecords(); } }