package com.ycl.service.caseHandler.impl;
import cn.hutool.core.util.PageUtil;
import com.alibaba.druid.sql.PagerUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.api.CommonResult;
import com.ycl.bo.AdminUserDetails;
import com.ycl.common.constant.BaseCaseStatus;
import com.ycl.common.constant.StepName;
import com.ycl.dto.dispatch.UploadDisposingResultParam;
import com.ycl.entity.caseHandler.*;
import com.ycl.entity.resources.ImageResources;
import com.ycl.exception.ApiException;
import com.ycl.mapper.caseHandler.BaseCaseMapper;
import com.ycl.mapper.caseHandler.DisposeRecordMapper;
import com.ycl.mapper.caseHandler.WorkflowConfigStepMapper;
import com.ycl.service.caseHandler.*;
import com.ycl.service.resources.IImageResourcesService;
import com.ycl.vo.MyBacklogVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
*
* 处置流程记录 服务实现类
*
*
* @author wl
* @since 2022-09-24
*/
@Service
@Slf4j
public class DisposeRecordServiceImpl extends ServiceImpl implements IDisposeRecordService {
@Resource
BaseCaseMapper baseCaseMapper;
@Resource
DisposeRecordMapper disposeRecordMapper;
@Resource
WorkflowConfigStepMapper workflowConfigStepMapper;
@Autowired
IInvestigationService iInvestigationService;
@Autowired
IArrivalSituationService iArrivalSituationService;
@Autowired
IPartyInfoService iPartyInfoService;
@Autowired
IWritService iWritService;
@Autowired
IBaseCaseService baseCaseService;
@Autowired
IDisposeRecordService iDisposeRecordService;
@Autowired
IImageResourcesService iImageResourcesService;
public final static Short LAST_WEEK = 0;
public final static Short LAST_MONTH = 1;
public final static Short LAST_THREEMONTH = 2;
@Override
public Page listMyTask(String num, Long userId, Short type, Short source, Short time, Integer current, Integer pageSize) {
LocalDateTime alarmTimeStart = null;
LocalDateTime alarmTimeEnd = null;
if (Objects.equals(time, LAST_WEEK)) {
alarmTimeStart = LocalDateTime.now().minusDays(7);
alarmTimeEnd = LocalDateTime.now();
} else if (Objects.equals(time, LAST_MONTH)) {
alarmTimeStart = LocalDateTime.now().minusMonths(1);
alarmTimeEnd = LocalDateTime.now();
} else if (Objects.equals(time, LAST_THREEMONTH)) {
alarmTimeStart = LocalDateTime.now().minusMonths(3);
alarmTimeEnd = LocalDateTime.now();
}
Integer pageIndex = PageUtil.getStart(current - 1, pageSize);
List list = disposeRecordMapper.selectMyBackList(userId, num, alarmTimeStart, alarmTimeEnd, source, type, pageIndex, pageSize);
Long total = disposeRecordMapper.selectMyBackListTotal(userId, num, alarmTimeStart, alarmTimeEnd, source, type);
list.forEach(o -> {
if (o.getPictureList() != null && o.getPictureList().size() > 0) {
o.setPicture(o.getPictureList().get(0).getUrl());
}
});
Page page = new Page<>();
page.setRecords(list);
page.setTotal(total);
return page;
}
@Override
public Long listMyTaskCount(String num, Long userId, Short type, Short source, Short time) {
LocalDateTime alarmTimeStart = null;
LocalDateTime alarmTimeEnd = null;
if (Objects.equals(time, LAST_WEEK)) {
alarmTimeStart = LocalDateTime.now().minusDays(7);
alarmTimeEnd = LocalDateTime.now();
} else if (Objects.equals(time, LAST_MONTH)) {
alarmTimeStart = LocalDateTime.now().minusMonths(1);
alarmTimeEnd = LocalDateTime.now();
} else if (Objects.equals(time, LAST_THREEMONTH)) {
alarmTimeStart = LocalDateTime.now().minusMonths(3);
alarmTimeEnd = LocalDateTime.now();
}
return disposeRecordMapper.selectMyBackListTotal(userId, num, alarmTimeStart, alarmTimeEnd, source, type);
}
@Override
@Transactional(rollbackFor = Exception.class)
public CommonResult saveOrUpdateUpload(UploadDisposingResultParam uploadDisposingResultParam) {
log.info("参数------------------>{}", uploadDisposingResultParam);
if (uploadDisposingResultParam.getArrivalTime() != null) {
uploadDisposingResultParam.setArrivalTime(uploadDisposingResultParam.getArrivalTime().replace("/", "-"));
}
if (uploadDisposingResultParam.getInvestigationTime() != null) {
uploadDisposingResultParam.setInvestigationTime(uploadDisposingResultParam.getInvestigationTime().replace("/", "-"));
}
List pics = new ArrayList<>();
uploadDisposingResultParam.getPic().forEach(o -> {
pics.add(o.replace("/sccg/API/img?fileUrl=", ""));
});
uploadDisposingResultParam.setPic(pics);
List situationPics = new ArrayList<>();
uploadDisposingResultParam.getSituationPic().forEach(o -> {
situationPics.add(o.replace("/sccg/API/img?fileUrl=", ""));
});
uploadDisposingResultParam.setSituationPic(situationPics);
AdminUserDetails user = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
List list = iArrivalSituationService.list(new LambdaQueryWrapper().eq(ArrivalSituation::getBaseCaseId, uploadDisposingResultParam.getCaseId()));
if (!list.isEmpty()) {
//TODO:违规没有当事人ID,违建才有
if (uploadDisposingResultParam.getPartyInfoId() != null) {
//当事人
PartyInfo partyInfo = new PartyInfo();
BeanUtils.copyProperties(uploadDisposingResultParam, partyInfo);
//TODO:前端回显只有当事人姓名需要在详情返回
//TODO:后台上报当事人信息填不进去
partyInfo.setId(uploadDisposingResultParam.getPartyInfoId());
iPartyInfoService.updateById(partyInfo);
//调查取证
Investigation investigation = new Investigation();
BeanUtils.copyProperties(uploadDisposingResultParam, investigation);
investigation.setBaseCaseId(uploadDisposingResultParam.getCaseId());
investigation.setPartyId(partyInfo.getId());
//TODO:改为集合的字符串形式
investigation.setPic(String.join(",", uploadDisposingResultParam.getPic()));
//TODO:小程序前端页面没有调查时间,暂时不填
//investigation.setInvestigationTime(LocalDateTime.parse(uploadDisposingResultParam.getInvestigationTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
investigation.setId(uploadDisposingResultParam.getInvestigationId());
iInvestigationService.updateById(investigation);
}
//到达
ArrivalSituation arrivalSituation = new ArrivalSituation();
BeanUtils.copyProperties(uploadDisposingResultParam, arrivalSituation);
arrivalSituation.setBaseCaseId(uploadDisposingResultParam.getCaseId());
arrivalSituation.setArrivalTime(LocalDateTime.parse(uploadDisposingResultParam.getArrivalTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
arrivalSituation.setId(uploadDisposingResultParam.getArrivalSituationId());
//TODO:改为集合的字符串形式
arrivalSituation.setSituationPic(String.join(",", uploadDisposingResultParam.getSituationPic()));
iArrivalSituationService.updateById(arrivalSituation);
//文书
String handType = "02";
iImageResourcesService.deleteByCaseId(uploadDisposingResultParam.getCaseId(), handType);
ImageResources imageResources = new ImageResources();
imageResources.setType(handType);
imageResources.setBelongToId(uploadDisposingResultParam.getCaseId());
imageResources.setUrl(StringUtils.joinWith(",",
String.join(",", uploadDisposingResultParam.getPic()),
String.join(",", uploadDisposingResultParam.getSituationPic())));
iImageResourcesService.save(imageResources);
if (uploadDisposingResultParam.getWritCode() != null && uploadDisposingResultParam.getWritType() != null) {
Writ writ = new Writ();
BeanUtils.copyProperties(uploadDisposingResultParam, writ);
writ.setBaseCaseId(uploadDisposingResultParam.getCaseId());
writ.setIllegalBuildingId(uploadDisposingResultParam.getCaseId());
writ.setLimitTime(LocalDateTime.parse(uploadDisposingResultParam.getLimitTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
writ.setRectifyTime(LocalDateTime.parse(uploadDisposingResultParam.getRectifyTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
writ.setSendTime(LocalDateTime.parse(uploadDisposingResultParam.getSendTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
iWritService.updateById(writ);
imageResources.setUrl(StringUtils
.joinWith(",", uploadDisposingResultParam.getPic()
, uploadDisposingResultParam.getSituationPic()
, uploadDisposingResultParam.getOriginalPic()
, uploadDisposingResultParam.getOtherPic()
, uploadDisposingResultParam.getRectifiedPic()
, uploadDisposingResultParam.getWritPic()));
iImageResourcesService.updateById(imageResources);
}
baseCaseService.update(new LambdaUpdateWrapper().eq(BaseCase::getId, uploadDisposingResultParam.getCaseId()).set(BaseCase::getState, BaseCaseStatus.DISPOSE));
} else {
//当事人
PartyInfo partyInfo = new PartyInfo();
BeanUtils.copyProperties(uploadDisposingResultParam, partyInfo);
partyInfo.setCreateUser(user.getUserId().intValue());
partyInfo.setCreateTime(LocalDateTime.now());
iPartyInfoService.save(partyInfo);
//调查取证
Investigation investigation = new Investigation();
BeanUtils.copyProperties(uploadDisposingResultParam, investigation);
investigation.setBaseCaseId(uploadDisposingResultParam.getCaseId());
investigation.setCreateTime(LocalDateTime.now());
//TODO:改为集合的字符串形式
investigation.setPic(String.join(",", uploadDisposingResultParam.getPic()));
investigation.setCreateUser(user.getUserId());
investigation.setPartyId(partyInfo.getId());
//TODO:前端页面没有调查时间,暂时不填
// investigation.setInvestigationTime(LocalDateTime.parse(uploadDisposingResultParam.getInvestigationTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
iInvestigationService.save(investigation);
//到达
ArrivalSituation arrivalSituation = new ArrivalSituation();
BeanUtils.copyProperties(uploadDisposingResultParam, arrivalSituation);
arrivalSituation.setBaseCaseId(uploadDisposingResultParam.getCaseId());
arrivalSituation.setCreateTime(LocalDateTime.now());
arrivalSituation.setCreateUser(user.getUserId());
//TODO:改为集合的字符串形式
arrivalSituation.setSituationPic(String.join(",", uploadDisposingResultParam.getSituationPic()));
arrivalSituation.setArrivalTime(LocalDateTime.parse(uploadDisposingResultParam.getArrivalTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
iArrivalSituationService.save(arrivalSituation);
//文书
String handType = "02";
ImageResources imageResources = new ImageResources();
imageResources.setType(handType);
imageResources.setBelongToId(uploadDisposingResultParam.getCaseId());
imageResources.setCreateTime(LocalDateTime.now());
imageResources.setCreateUser(user.getUserId());
imageResources.setUrl(StringUtils.joinWith(",",
String.join(",", uploadDisposingResultParam.getPic()),
String.join(",", uploadDisposingResultParam.getSituationPic())));
iImageResourcesService.save(imageResources);
if (uploadDisposingResultParam.getWritCode() != null && uploadDisposingResultParam.getWritType() != null) {
Writ writ = new Writ();
BeanUtils.copyProperties(uploadDisposingResultParam, writ);
writ.setBaseCaseId(uploadDisposingResultParam.getCaseId());
writ.setIllegalBuildingId(uploadDisposingResultParam.getCaseId());
writ.setCreateTime(LocalDateTime.now());
writ.setCreateUser(user.getUserId());
writ.setLimitTime(LocalDateTime.parse(uploadDisposingResultParam.getLimitTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
writ.setRectifyTime(LocalDateTime.parse(uploadDisposingResultParam.getRectifyTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
writ.setSendTime(LocalDateTime.parse(uploadDisposingResultParam.getSendTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
iWritService.save(writ);
imageResources.setUrl(StringUtils
.joinWith(","
, String.join(",", uploadDisposingResultParam.getPic())
, String.join(",", uploadDisposingResultParam.getSituationPic())
, uploadDisposingResultParam.getOriginalPic()
, uploadDisposingResultParam.getOtherPic()
, uploadDisposingResultParam.getRectifiedPic()
, uploadDisposingResultParam.getWritPic()));
iImageResourcesService.updateById(imageResources);
}
baseCaseService.update(new LambdaUpdateWrapper().eq(BaseCase::getId, uploadDisposingResultParam.getCaseId()).set(BaseCase::getState, BaseCaseStatus.DISPOSE));
}
String stepName = StepName.CHECK.getName();
DisposeRecord disposeRecord = new DisposeRecord();
disposeRecord.setBaseCaseId(uploadDisposingResultParam.getCaseId());
disposeRecord.setState(0);
disposeRecord.setCreateTime(LocalDateTime.now());
disposeRecord.setCreateUser(user.getUserId());
disposeRecord.setStepName(stepName);
disposeRecord.setStartTime(LocalDateTime.now());
//结束上传处置流程
QueryWrapper qureyDispatch = new QueryWrapper<>();
qureyDispatch.eq("name", StepName.DISPOSE.getName());
WorkflowConfigStep dispatchStep = workflowConfigStepMapper.selectOne(qureyDispatch);
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("base_case_id", disposeRecord.getBaseCaseId()).eq("workflow_config_step_id", dispatchStep.getId());
DisposeRecord updateRecord = new DisposeRecord();
updateRecord.setState(1);
updateRecord.setEndTime(LocalDateTime.now());
updateRecord.setHandlerId(disposeRecord.getCreateUser());
updateRecord.setResult(uploadDisposingResultParam.getDescription());
baseMapper.update(updateRecord, updateWrapper);
QueryWrapper stepQurey = new QueryWrapper<>();
stepQurey.eq("name", disposeRecord.getStepName());
WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepQurey);
if (workflowConfigStep == null) {
throw new ApiException("未查询到该流程环节");
}
//设置流程环节数据
disposeRecord.setWorkflowConfigStepId(workflowConfigStep.getId());
disposeRecord.setHandlerRoleId(workflowConfigStep.getRoleId());
boolean result = baseMapper.insert(disposeRecord) == 1 ? true : false;
if (!result) {
CommonResult.failed("已提交,请勿重复提交");
}
return CommonResult.success("add success");
}
}