package com.ycl.service.caseHandler.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.bo.casePool.CasePoolIllegalBuildingDO;
import com.ycl.bo.casePool.CasePoolViolationDO;
import com.ycl.dto.casePool.IllegalBuildingParam;
import com.ycl.dto.casePool.ViolationParam;
import com.ycl.entity.caseHandler.BaseCase;
import com.ycl.entity.caseHandler.IllegalBuilding;
import com.ycl.entity.caseHandler.Violations;
import com.ycl.entity.video.VideoAlarmReport;
import com.ycl.mapper.caseHandler.BaseCaseMapper;
import com.ycl.mapper.caseHandler.IllegalBuildingMapper;
import com.ycl.mapper.caseHandler.ViolationsMapper;
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.CasePoolIllegalBuildingVO;
import com.ycl.vo.casePool.CasePoolViolationVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.List;
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;
@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().toString()).x84(baseCase.getLongitude().toString())
.source(11).address(baseCase.getSite()).eventDesc(eventDesc).eventSign(baseCase.getCode()).medias(medias).build();
ResultResponseDto result = cityPlatformService.addEvent(dto);
if (result.getCode() == 0) {
EventAddResponseDto responseDto = result.getResult();
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();
ResultResponseDto responseDto = cityPlatformService.getEventProcess(paramDto);
if (responseDto.getCode() == 0) {
EventProcessResponseDto eventProcessResponseDto = responseDto.getResult();
/*********** 未处理市平台返回数据 ***************/
return null;
} else {
return responseDto.getMsg();
}
}
@Override
public Page listViolationsPage(Page page, Integer state, Integer resource) {
Integer type = 01;
Page violationsPage = baseCaseMapper.listViolationsPage(page, state, type, resource);
List violationVOList = violationsPage.getRecords().stream().map(item -> {
CasePoolViolationVO casePoolViolationVO = new CasePoolViolationVO();
BeanUtils.copyProperties(item, casePoolViolationVO);
if (item.getCloseTime() == null) {
long nowTime = System.currentTimeMillis();
long alarmTime = item.getAlarmTime().toEpochSecond(ZoneOffset.ofHours(8));
LocalDateTime continueTimes = Instant.ofEpochMilli(nowTime - alarmTime).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
String continueTime = continueTimes.getHour() + "时" + continueTimes.getSecond() + "分钟";
casePoolViolationVO.setContinueTime(continueTime);
} else {
long closeTime = item.getCloseTime().toEpochSecond(ZoneOffset.ofHours(8));
long alarmTime = item.getAlarmTime().toEpochSecond(ZoneOffset.ofHours(8));
LocalDateTime continueTimes = Instant.ofEpochMilli(closeTime - alarmTime).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
String continueTime = continueTimes.getHour() + "时" + continueTimes.getSecond() + "分钟";
casePoolViolationVO.setContinueTime(continueTime);
}
casePoolViolationVO.setCategory(dataDictionaryMapper.selectById(item.getCategoryId()).getName());
casePoolViolationVO.setType(dataDictionaryMapper.selectById(item.getTypeId()).getName());
return casePoolViolationVO;
}).collect(Collectors.toList());
Page 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 casePoolIllegalBuildingDTOPage = baseCaseMapper.listIllegalBuildingsPage(page, state, type, resource);
List casePoolIllegalBuildingVOList = casePoolIllegalBuildingDTOPage
.getRecords()
.stream()
.map(
item -> {
CasePoolIllegalBuildingVO casePoolIllegalBuildingVO = new CasePoolIllegalBuildingVO();
BeanUtils.copyProperties(item, casePoolIllegalBuildingVO);
casePoolIllegalBuildingVO.setCategory(dataDictionaryMapper.selectById(item.getCategoryId()).getName());
return casePoolIllegalBuildingVO;
}
).collect(Collectors.toList());
Page casePoolViolationVOPage = new Page<>();
BeanUtils.copyProperties(casePoolIllegalBuildingDTOPage, casePoolViolationVOPage);
casePoolViolationVOPage.setRecords(casePoolIllegalBuildingVOList);
return casePoolViolationVOPage;
}
@Override
public Boolean saveViolationCase(ViolationParam violationParam, Integer id) {
BaseCase baseCase = new BaseCase();
Violations violations = new Violations();
BeanUtils.copyProperties(violationParam, baseCase);
BeanUtils.copyProperties(violationParam, violations);
violations.setId(id);
Integer value = 1;
return violationsMapper.insert(violations) == value ? true : false;
}
@Override
public Boolean saveIllegalBuildingCase(IllegalBuildingParam illegalBuildingParam, Integer id) {
BaseCase baseCase = new BaseCase();
IllegalBuilding illegalBuilding = new IllegalBuilding();
BeanUtils.copyProperties(illegalBuilding, baseCase);
BeanUtils.copyProperties(illegalBuilding, illegalBuildingParam);
illegalBuilding.setBaseCaseId(id);
Integer value = 1;
return illegalBuildingMapper.insert(illegalBuilding) == value ? true : false;
}
}