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();
}
}