diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java index f4f4ea43..b89af386 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.common.utils.StakeMarkUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.system.service.ISysDeptService; @@ -18,6 +17,7 @@ import com.zc.business.mapper.*; import com.zc.business.service.IDcEventProcessService; import com.zc.business.service.IDcEventService; import com.zc.business.service.IMiddleDatabaseService; +import com.zc.business.utils.StakeMarkUtils; import com.zc.business.utils.diff.Diff; import com.zc.business.utils.diff.model.Result; import com.zc.common.core.websocket.WebSocketService; @@ -27,8 +27,10 @@ import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.ThreadLocalRandom; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; /** @@ -142,7 +144,7 @@ public class DcEventServiceImpl extends ServiceImpl impl String dcEventId = dcEvent.getId(); //桩号校验 - if (!StakeMarkUtils.checkStakeMark(dcEvent.getStakeMark())){ + if (!com.ruoyi.common.utils.StakeMarkUtils.checkStakeMark(dcEvent.getStakeMark())){ return -1; } //获取事件类型 @@ -1110,6 +1112,65 @@ public class DcEventServiceImpl extends ServiceImpl impl String typeName = ValueConverter.eventTypeName(dcEvent.getEventType().toString()); dcEventProcess.setContext("由" + sourceName + "上报了一起" + typeName + "事件"); dcEventProcessService.insertDcEventProcess(dcEventProcess); + + //插入调度默认数据 + ArrayList> hashMaps = new ArrayList<>(); + String stakeMark = dcEvent.getStakeMark();//传入桩号 + List> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称 + for (HashMap map:mapList){ + if (org.apache.commons.lang3.StringUtils.isBlank(map.get("stakeMark").toString())){ + continue; + } + Long sectionId = (Long) map.get("id");//机构的id + String stakeMarkNew = map.get("stakeMark").toString();//机构桩号 + com.zc.business.utils.StakeMarkUtils stakeMarkUtils = new StakeMarkUtils(); + Integer itselfStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMarkNew);//机构本身的米数 + Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMark);//传入的桩号米数 + Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值 + map.put("difference",difference/1000.0);//米转公里加入到map + map.put("id",sectionId); + hashMaps.add(map); + } + List> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> { + return (Double) map.get("difference"); })).collect(Collectors.toList()); + HashMap hashMap = dcWarningMapper.selectDcDispatch(id);//查询事件是否已经有转的调度记录 + if (!sortedHashMaps.isEmpty()&&hashMap==null) { + HashMap map = sortedHashMaps.get(0); + Long sortId = (Long) map.get("id");//取出最近的机构id + if (sortId != null) { + DcDispatch dcDispatch = new DcDispatch(); + DcDispatchResource dcDispatchResource = new DcDispatchResource(); + dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId()); + dcDispatch.setEventId(id); + dcDispatch.setStartTime(DateUtils.getNowDate()); + dcDispatch.setDispatchStatus(2L);//进行中状态 + dcDispatch.setRemark(dcEvent.getRemark()); + dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录 + Long dispatchId = dcDispatch.getId();//信息记录id + List> employeesMap = dcWarningMapper.selectOrganizationEmployees(sortId);//人员map + if (employeesMap != null&&employeesMap.size()>0) { + // 生成一个随机索引,范围在0到列表长度减1之间 + int randomIndex = ThreadLocalRandom.current().nextInt(employeesMap.size()); + HashMap randomEmployee = employeesMap.get(randomIndex); + Long employeesId = (Long) randomEmployee.get("id");//随机人员id + dcDispatchResource.setResourceId(employeesId);//资源id + dcDispatchResource.setDispatchType(1);//资源类型 + dcDispatchResource.setDispatchId(dispatchId);//信息记录id + dcWarningMapper.insertDispatchResource(dcDispatchResource); + } + List> vehiclesMap = dcWarningMapper.selectVehicles(sortId);//车辆map + if (vehiclesMap != null&&vehiclesMap.size()>0) { + // 生成一个随机索引,范围在0到列表长度减1之间 + int randomIndex = ThreadLocalRandom.current().nextInt(vehiclesMap.size()); + HashMap randomEmployee = employeesMap.get(randomIndex); + Long vehiclesId = (Long) randomEmployee.get("id");//随机车辆id + dcDispatchResource.setResourceId(vehiclesId);//资源id + dcDispatchResource.setDispatchType(2);//资源类型 + dcDispatchResource.setDispatchId(dispatchId);//信息记录id + dcWarningMapper.insertDispatchResource(dcDispatchResource);//绑定车辆信息 + } + } + } } return i; }