package com.ycl.service.caseHandler.impl;
|
|
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.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.util.DateUtil;
|
import com.ycl.dto.casePool.IllegalBuildingParam;
|
import com.ycl.dto.casePool.ViolationParam;
|
import com.ycl.entity.caseHandler.*;
|
import com.ycl.entity.common.ImageResources;
|
import com.ycl.entity.video.VideoAlarmReport;
|
import com.ycl.mapper.caseHandler.*;
|
import com.ycl.mapper.common.ImageResourcesMapper;
|
import com.ycl.mapper.dict.DataDictionaryMapper;
|
import com.ycl.remote.dto.*;
|
import com.ycl.remote.service.CityPlatformService;
|
import com.ycl.service.caseHandler.IBaseCaseService;
|
import com.ycl.service.caseHandler.IViolationsService;
|
import com.ycl.service.video.IVideoAlarmReportService;
|
import com.ycl.vo.casePool.*;
|
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 javax.annotation.Resource;
|
import java.time.Duration;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 案件基本信息 服务实现类
|
* </p>
|
*
|
* @author wl
|
* @since 2022-09-24
|
*/
|
@Service
|
public class BaseCaseServiceImpl extends ServiceImpl<BaseCaseMapper, BaseCase> 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;
|
|
|
@Override
|
public String uploadEvent(Integer 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();
|
}
|
}
|
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());
|
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(Page page, Integer state, Integer resource) {
|
Integer type = 01;
|
Integer hours = 60;
|
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 minutes = duration.toMinutes() - (duration.toHours() * hours);
|
String continueTime = duration.toHours() + "时" + minutes + "分钟";
|
casePoolViolationVO.setContinueTime(continueTime);
|
} else {
|
Duration duration = Duration.between(item.getAlarmTime(), item.getCloseTime());
|
long minutes = duration.toMinutes() - (duration.toHours() * hours);
|
String continueTime = duration.toHours() + "时" + 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;
|
}
|
|
@Override
|
public Page listIllegalBuilding(Page page, 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;
|
}
|
|
@Override
|
public Boolean saveViolationCase(ViolationParam violationParam, Long id) {
|
Violations violations = new Violations();
|
BeanUtils.copyProperties(violationParam, violations);
|
Integer value = 1;
|
violations.setId(id);
|
setDisposeRecord(id);
|
return violationsMapper.insert(violations) == value ? true : false;
|
}
|
|
private void setDisposeRecord(Long id) {
|
String stepName = "调度";
|
Integer state = 0;
|
DisposeRecord disposeRecord = new DisposeRecord();
|
disposeRecord.setBaseCaseId(id);
|
disposeRecord.setState(state);
|
disposeRecord.setCreateTime(LocalDateTime.now());
|
AdminUserDetails userDetails = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
disposeRecord.setCreateUser(userDetails.getUserId());
|
disposeRecord.setStartTime(LocalDateTime.now());
|
disposeRecord.setStepName(stepName);
|
disposeRecordMapper.insert(disposeRecord);
|
}
|
|
@Override
|
public Boolean saveIllegalBuildingCase(IllegalBuildingParam illegalBuildingParam, Long id) {
|
IllegalBuilding illegalBuilding = new IllegalBuilding();
|
BeanUtils.copyProperties(illegalBuildingParam, illegalBuilding);
|
setDisposeRecord(id);
|
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());
|
Violations violations = violationsMapper.selectCondMap(mapV);
|
baseCase.setViolations(violations);
|
} else {
|
IllegalBuilding illegalBuilding = illegalBuildingMapper.selectById(baseCase.getId());
|
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<WorkflowConfig> wrapperWc = new QueryWrapper<>();
|
wrapperWc.lambda().eq(WorkflowConfig::getCode, "ddlc").or().eq(WorkflowConfig::getCode, "wtcllc");
|
List<WorkflowConfig> wcs = workflowConfigMapper.selectList(wrapperWc);
|
Integer ddlcId = 0, wtcllcId = 0;
|
for (WorkflowConfig wc : wcs) {
|
if ("ddlc".equals(wc.getCode())) {
|
ddlcId = wc.getId();
|
}
|
if ("wtcllc".equals(wc.getCode())) {
|
wtcllcId = wc.getId();
|
}
|
}
|
//2.2查询处置流程环节配置
|
Map mapWcs = new HashMap();
|
mapWcs.put("workflowConfigId", ddlcId);
|
mapWcs.put("baseCaseId", baseCase.getId());
|
List<WorkflowConfigStep> listWcs = workflowConfigStepMapper.selectRecordByWorkflowConfigStepId(mapWcs);
|
//处理用环节时间
|
for (WorkflowConfigStep step : listWcs) {
|
List<DisposeRecord> records = step.getDisposeRecords();
|
if (records == null) {
|
continue;
|
}
|
for (DisposeRecord record : records) {
|
if (record != null && record.getCreateTime() != null) {
|
record.setLinkTime(
|
DateUtil.getDistanceDateTime(
|
DateUtil.fromLocalDateTime(baseCase.getAlarmTime()),
|
DateUtil.fromLocalDateTime(record.getCreateTime())));
|
}
|
}
|
step.setDisposeRecords(records);
|
}
|
//2.3设置调度流程
|
handlePassVo.setWorkflowConfigSteps(listWcs);
|
bcd.setHandlePassVo(handlePassVo);
|
//3.查询案卷图片信息
|
FilesPictureVo filesPictureVo = new FilesPictureVo();
|
QueryWrapper<ImageResources> wrapperIr = new QueryWrapper<>();
|
wrapperIr.lambda().eq(ImageResources::getType, "01").or().eq(ImageResources::getType, "02");
|
List<ImageResources> irs = imageResourcesMapper.selectList(wrapperIr);
|
filesPictureVo.setImageResources(irs);
|
bcd.setFilesPictureVo(filesPictureVo);
|
//4.查询问题处理信息
|
ProblemProVo problemProVo = new ProblemProVo();
|
//4.2查询处置流程环节配置
|
mapWcs.put("workflowConfigId", wtcllcId);
|
List<WorkflowConfigStep> listWcsPp = workflowConfigStepMapper.selectRecordByWorkflowConfigStepId(mapWcs);
|
//4.3设置调度流程
|
problemProVo.setWorkflowConfigSteps(listWcsPp);
|
bcd.setProblemProVo(problemProVo);
|
//5.查询现场情况信息
|
CurrentSitVo currentSitVo = new CurrentSitVo();
|
QueryWrapper<ArrivalSituation> wrapperAs = new QueryWrapper<>();
|
wrapperAs.lambda().eq(ArrivalSituation::getBaseCaseId, baseCase.getId());
|
//设置到达现场情况
|
ArrivalSituation as = arrivalSituationMapper.selectOne(wrapperAs);
|
currentSitVo.setArrivalSituation(as);
|
//设置调查取证
|
QueryWrapper<Investigation> 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<Writ> 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<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());
|
if (type == illegalBuildingType) {
|
Writ writ = writMapper.selectOne(new LambdaQueryWrapper<Writ>().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) {
|
AdminUserDetails user = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
Integer state = 1;
|
String endCaseName = "结案";
|
BaseCase baseCase = new BaseCase();
|
baseCase.setState(BaseCaseStatus.CLOSING_REGISTER);
|
baseCase.setId(caseId);
|
baseCaseMapper.updateById(baseCase);
|
DisposeRecord disposeRecord = new DisposeRecord();
|
disposeRecord.setBaseCaseId(caseId);
|
disposeRecord.setWorkflowConfigStepId(workflowConfigStepMapper
|
.selectOne(new LambdaQueryWrapper<WorkflowConfigStep>().eq(WorkflowConfigStep::getName, endCaseName))
|
.getWorkflowConfigId());
|
disposeRecord.setCreateUser(user.getUserId().longValue());
|
disposeRecord.setResult(result);
|
disposeRecord.setState(state);
|
disposeRecord.setCreateTime(LocalDateTime.now());
|
disposeRecordMapper.insert(disposeRecord);
|
}
|
}
|