|
|
@@ -24,9 +24,16 @@ import com.xunmei.system.api.RemoteNfcBindService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.TransactionManager;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.transaction.support.TransactionSynchronization;
|
|
|
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
|
|
|
+import org.springframework.transaction.support.TransactionSynchronizationManager;
|
|
|
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 【请填写功能名称】Service业务层处理
|
|
|
@@ -87,48 +94,82 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@Override
|
|
|
- public int insertCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
|
|
|
- //如果进来的NFC不是本机构和不是设备间就不让扫
|
|
|
- if (StringUtils.isNotEmpty(coreMonitoringTaskRegistration.getStartNfc())) {
|
|
|
- List<Long> longs = remoteNfcBindService.selectNfcByCode(coreMonitoringTaskRegistration.getStartNfc(), SecurityConstants.INNER);
|
|
|
- if (!longs.contains(SecurityUtils.getLoginUser().getOrgId())) {
|
|
|
+ public CoreMonitoringTaskRegistration insertCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
|
|
|
+
|
|
|
+ Integer monitorFlag = coreMonitoringTaskRegistration.getMonitorFlag();
|
|
|
+ if(monitorFlag != null && monitorFlag.equals(0)){
|
|
|
+ /**
|
|
|
+ * 每次调阅开始的逻辑。
|
|
|
+ * 1、如果任务的状态是待调阅,则需要将任务修改为调阅中的状态。
|
|
|
+ * 2、如果任务的状态是调阅中的状态,则不修改任务数据
|
|
|
+ * 3、添加一条调阅时间记录。并且只有开始时间没有结束时间。
|
|
|
+ */
|
|
|
+ //监控调阅开始
|
|
|
+ //如果进来的NFC不是本机构和不是设备间就不让扫
|
|
|
+
|
|
|
+ //第一步判断nfc是不是本机构的
|
|
|
+ if(!validateOrgNFC(coreMonitoringTaskRegistration.getStartNfc(),SecurityUtils.getLoginUser().getOrgId())){
|
|
|
throw new ServiceException("请扫描本机构NFC");
|
|
|
}
|
|
|
- }
|
|
|
- CoreMonitoringRetrievalTask coreMonitoringRetrievalTask = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
|
|
|
- //jiaoyan
|
|
|
- QueryWrapper queryWrapper = new QueryWrapper();
|
|
|
- queryWrapper.eq("task_id", coreMonitoringTaskRegistration.getTaskId());
|
|
|
- queryWrapper.eq("del_flag", 0);
|
|
|
- List<CoreMonitoringTaskRegistration> list = baseMapper.selectList(queryWrapper);
|
|
|
- if (CollectionUtils.isNotEmpty(list) && !coreMonitoringRetrievalTask.getStatus().equals(ZERO)) {
|
|
|
- if (StringUtils.isEmpty(coreMonitoringTaskRegistration.getEndNfc()) && StringUtils.isEmpty(coreMonitoringTaskRegistration.getEndPicture())) {
|
|
|
- throw new ServiceException("请勿重复扫描");
|
|
|
+ //第二步判断任务状态
|
|
|
+ CoreMonitoringRetrievalTask task = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
|
|
|
+ if(task == null){
|
|
|
+ throw new ServiceException("任务不存在,请确认!");
|
|
|
}
|
|
|
- CoreMonitoringTaskRegistration coreMonitoringTaskRegistration1 = list.get(0);
|
|
|
- coreMonitoringTaskRegistration1.setEndPicture(coreMonitoringTaskRegistration.getEndPicture());
|
|
|
- coreMonitoringTaskRegistration1.setEndNfc(coreMonitoringTaskRegistration.getEndNfc());
|
|
|
- Long time = DateUtils.getNowDate().getTime() - coreMonitoringTaskRegistration1.getTaskStartTime().getTime();
|
|
|
- Double avg = (double) time / 1000 / 3600;
|
|
|
- coreMonitoringTaskRegistration1.setAverageDuration(Double.valueOf(String.format("%.2f", avg)));
|
|
|
- return baseMapper.updateById(coreMonitoringTaskRegistration1);
|
|
|
- } else {
|
|
|
- if (coreMonitoringRetrievalTask.getStatus().equals(ZERO)) {
|
|
|
- coreMonitoringTaskRegistrationMapper.deleteByTaskId(coreMonitoringTaskRegistration.getTaskId());
|
|
|
+ String status = task.getStatus();
|
|
|
+ if(status.equals(ZERO)){
|
|
|
+ //任务状态是待调阅
|
|
|
+ task.setStatus(ONE);
|
|
|
+ task.setStartTime(DateUtils.getNowDate());
|
|
|
+ iCoreMonitoringRetrievalTaskService.updateCoreMonitoringRetrievalTask(task);
|
|
|
}
|
|
|
+ //第三步,增加扫描记录数据
|
|
|
coreMonitoringTaskRegistration.setCreateTime(DateUtils.getNowDate());
|
|
|
coreMonitoringTaskRegistration.setTaskStartTime(DateUtils.getNowDate());
|
|
|
coreMonitoringTaskRegistration.setDelFlag("0");
|
|
|
coreMonitoringTaskRegistration.setCreateBy(SecurityUtils.getUsername());
|
|
|
- //修改任务状态为进行中
|
|
|
-
|
|
|
- coreMonitoringRetrievalTask.setStatus(ONE);
|
|
|
- coreMonitoringRetrievalTask.setStartTime(DateUtils.getNowDate());
|
|
|
- coreMonitoringRetrievalTaskMapper.updateById(coreMonitoringRetrievalTask);
|
|
|
coreMonitoringTaskRegistration.setId(IdWorker.getId());
|
|
|
- return coreMonitoringTaskRegistrationMapper.insert(coreMonitoringTaskRegistration);
|
|
|
+ coreMonitoringTaskRegistrationMapper.insert(coreMonitoringTaskRegistration);
|
|
|
+ return coreMonitoringTaskRegistration;
|
|
|
+ }else{
|
|
|
+ //监控调阅结束
|
|
|
+ //如果进来的NFC不是本机构和不是设备间就不让扫
|
|
|
+ if(!validateOrgNFC(coreMonitoringTaskRegistration.getEndNfc(),SecurityUtils.getLoginUser().getOrgId())){
|
|
|
+ throw new ServiceException("请扫描本机构NFC");
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取现有只有开始时间的记录数据
|
|
|
+ QueryWrapper<CoreMonitoringTaskRegistration> qw = new QueryWrapper<>();
|
|
|
+ qw.lambda().eq(CoreMonitoringTaskRegistration::getTaskId,coreMonitoringTaskRegistration.getTaskId())
|
|
|
+ .isNull(CoreMonitoringTaskRegistration::getTaskEndTime);
|
|
|
+ List<CoreMonitoringTaskRegistration> cmts = coreMonitoringTaskRegistrationMapper.selectList(qw);
|
|
|
+ if(cmts.size() > 0){
|
|
|
+ CoreMonitoringTaskRegistration cmtr = cmts.get(0);
|
|
|
+ cmtr.setEndPicture(coreMonitoringTaskRegistration.getEndPicture());
|
|
|
+ cmtr.setEndNfc(coreMonitoringTaskRegistration.getEndNfc());
|
|
|
+ Long time = DateUtils.getNowDate().getTime() - cmtr.getTaskStartTime().getTime();
|
|
|
+ /*Double avg = (double) time / 1000 / 3600;
|
|
|
+ cmtr.setAverageDuration(Double.valueOf(String.format("%.2f", avg)));*/
|
|
|
+ cmtr.setAverageDuration(time.doubleValue());
|
|
|
+ cmtr.setTaskEndTime(new Date());
|
|
|
+ baseMapper.updateById(cmtr);
|
|
|
+ return cmtr;
|
|
|
+ }
|
|
|
+ coreMonitoringTaskRegistration.setAverageDuration(0d);
|
|
|
+ return coreMonitoringTaskRegistration;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ private boolean validateOrgNFC(String nfcCode, Long orgId){
|
|
|
+ if(StringUtils.isEmpty(nfcCode)){
|
|
|
+ //为空则表示不用验证
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ List<Long> longs = remoteNfcBindService.selectNfcByCode(nfcCode, SecurityConstants.INNER);
|
|
|
+ if (!longs.contains(orgId)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -138,25 +179,96 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public int updateCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
|
|
|
coreMonitoringTaskRegistration.setUpdateTime(DateUtils.getNowDate());
|
|
|
coreMonitoringTaskRegistration.setUpdateBy(SecurityUtils.getUsername());
|
|
|
+ coreMonitoringTaskRegistration.setMonitorFlag(1);
|
|
|
//修改任务状态已完成
|
|
|
CoreMonitoringRetrievalTask coreMonitoringRetrievalTask = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
|
|
|
coreMonitoringRetrievalTask.setStatus(TWO);
|
|
|
coreMonitoringRetrievalTask.setEndTime(DateUtils.getNowDate());
|
|
|
- /*coreMonitoringRetrievalTask.setUpdateBy(SecurityUtils.getUsername());
|
|
|
- coreMonitoringRetrievalTask.setUpdateTime(DateUtils.getNowDate());*/
|
|
|
coreMonitoringRetrievalTask.setSubmitTime(DateUtils.getNowDate());
|
|
|
coreMonitoringRetrievalTask.setRetrievalUser(SecurityUtils.getUserId());
|
|
|
coreMonitoringRetrievalTask.setSignImg(coreMonitoringTaskRegistration.getSignImgUrl());
|
|
|
|
|
|
+
|
|
|
+ //更新调阅记录表
|
|
|
+ CoreMonitoringTaskRegistration cmt = insertCoreMonitoringTaskRegistration(coreMonitoringTaskRegistration);
|
|
|
+
|
|
|
int i = coreMonitoringTaskMonitorInfoMapper.selectAbnormalByTaskId(coreMonitoringTaskRegistration.getTaskId());
|
|
|
coreMonitoringRetrievalTask.setExceptionCount(i);
|
|
|
+ coreMonitoringRetrievalTask.setDurationTotal(coreMonitoringRetrievalTask.getDurationTotal() + cmt.getAverageDuration());
|
|
|
coreMonitoringRetrievalTaskMapper.updateCoreMonitoringRetrievalTask(coreMonitoringRetrievalTask);
|
|
|
- //生成pdf
|
|
|
- itMonitoringRetrievalPlanService.buildPdf(coreMonitoringTaskRegistration.getTaskId());
|
|
|
- return coreMonitoringTaskRegistrationMapper.updateById(coreMonitoringTaskRegistration);
|
|
|
+
|
|
|
+ //springboot 事务结束后调用方法
|
|
|
+ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
|
|
+ @Override
|
|
|
+ public void afterCommit() {
|
|
|
+ //生成pdf
|
|
|
+ itMonitoringRetrievalPlanService.buildPdf(coreMonitoringTaskRegistration.getTaskId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void storageTask(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
|
|
|
+
|
|
|
+ coreMonitoringTaskRegistration.setMonitorFlag(1);
|
|
|
+ CoreMonitoringTaskRegistration cmt = insertCoreMonitoringTaskRegistration(coreMonitoringTaskRegistration);
|
|
|
+
|
|
|
+ coreMonitoringTaskRegistration.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ coreMonitoringTaskRegistration.setUpdateBy(SecurityUtils.getUsername());
|
|
|
+ //修改任务状态已完成
|
|
|
+ CoreMonitoringRetrievalTask coreMonitoringRetrievalTask =
|
|
|
+ coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
|
|
|
+ coreMonitoringRetrievalTask.setEndTime(DateUtils.getNowDate());
|
|
|
+ coreMonitoringRetrievalTask.setSubmitTime(DateUtils.getNowDate());
|
|
|
+ coreMonitoringRetrievalTask.setRetrievalUser(SecurityUtils.getUserId());
|
|
|
+ coreMonitoringRetrievalTask.setSignImg(coreMonitoringTaskRegistration.getSignImgUrl());
|
|
|
+ coreMonitoringRetrievalTask.setDurationTotal(coreMonitoringRetrievalTask.getDurationTotal() + cmt.getAverageDuration());
|
|
|
+ coreMonitoringRetrievalTaskMapper.updateCoreMonitoringRetrievalTask(coreMonitoringRetrievalTask);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> storageStart(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ QueryWrapper<CoreMonitoringTaskRegistration> qw = new QueryWrapper<>();
|
|
|
+ qw.lambda().eq(CoreMonitoringTaskRegistration::getTaskId,coreMonitoringTaskRegistration.getTaskId());
|
|
|
+ List<CoreMonitoringTaskRegistration> list = list(qw);
|
|
|
+ map.put("dayNums",0);
|
|
|
+ map.put("noComplete",0);
|
|
|
+ /**
|
|
|
+ * list 判断属于今天的记录有多少条,通过taskStartTime判断
|
|
|
+ */
|
|
|
+ if(list.size() > 0){
|
|
|
+ int dayNums = list.stream().filter(cmt -> {
|
|
|
+ return isToday(cmt.getTaskStartTime());
|
|
|
+ }).collect(Collectors.toList()).size();
|
|
|
+
|
|
|
+ int noComplete = list.stream().filter(cmt -> {
|
|
|
+ return cmt.getTaskEndTime() == null;
|
|
|
+ }).collect(Collectors.toList()).size();
|
|
|
+
|
|
|
+ map.put("dayNums",dayNums);
|
|
|
+ map.put("noComplete",noComplete);
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isToday(Date dateToCheck) {
|
|
|
+ // 将传入的 java.util.Date 转换为 LocalDate
|
|
|
+ LocalDate dateToCheckLocal = dateToCheck.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+
|
|
|
+ // 获取当前的 LocalDate
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+
|
|
|
+ // 比较两个 LocalDate 是否相等
|
|
|
+ return dateToCheckLocal.equals(today);
|
|
|
}
|
|
|
|
|
|
/**
|