BaseCameraManagementServiceImpl.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. package com.ozs.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.baomidou.mybatisplus.generator.config.IFileCreate;
  7. import com.github.pagehelper.PageHelper;
  8. import com.ozs.common.core.domain.AjaxResult;
  9. import com.ozs.common.exception.ServiceException;
  10. import com.ozs.common.utils.StringUtils;
  11. import com.ozs.common.utils.bean.BeanUtils;
  12. import com.ozs.common.utils.bean.BeanValidators;
  13. import com.ozs.entity.*;
  14. import com.ozs.entity.vo.BaseCameraManagementHomeVo;
  15. import com.ozs.entity.vo.BaseCameraManagementVo;
  16. import com.ozs.entity.vo.BaseCameraManagementVos;
  17. import com.ozs.mapper.*;
  18. import com.ozs.service.BaseCameraManagementService;
  19. import com.ozs.service.BaseRailwayManagementService;
  20. import com.ozs.service.BaseUserService;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.util.ObjectUtils;
  24. import javax.annotation.Resource;
  25. import javax.validation.Validator;
  26. import java.math.BigDecimal;
  27. import java.math.RoundingMode;
  28. import java.util.*;
  29. /**
  30. * <p>
  31. * 相机台账管理表 服务实现类
  32. * </p>
  33. *
  34. * @author ozs
  35. * @since 2023-02-17
  36. */
  37. @Service
  38. public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManagementMapper, BaseCameraManagement> implements BaseCameraManagementService {
  39. public static final String PATTERN = "^(\\d+.\\d{1,3}|\\d+)$";
  40. @Autowired
  41. protected Validator validator;
  42. @Autowired
  43. BaseDeviceDynamicManagementMapper baseDeviceDynamicManagementMapper;
  44. @Resource
  45. private BaseCameraManagementMapper baseCameraManagementMapper;
  46. @Resource
  47. private BaseUserService baseUserService;
  48. @Resource
  49. private BaseUserMapper baseUserMapper;
  50. @Resource
  51. private MsgAlarmMapper msgAlarmMapper;
  52. @Autowired
  53. private BaseDeptMapper baseDeptMapper;
  54. @Autowired
  55. private BaseRailwayManagementService baseRailwayManagementService;
  56. @Autowired
  57. private SkynetHeartbeatLogMapper skynetHeartbeatLogMapper;
  58. /**
  59. * 相机台账管理表导入
  60. *
  61. * @param accountManageList 相机台账列表
  62. * @param updateSupport 是否更新支持,如果已存在,则进行更新数据
  63. * @return
  64. */
  65. @Override
  66. public String importBaseAccountManagement(List<BaseCameraManagementVos> accountManageList, boolean updateSupport, String userId) {
  67. if (StringUtils.isEmptySunhh(accountManageList) || accountManageList.size() == 0) {
  68. throw new ServiceException("导入相机台账列表信息不能为空!");
  69. }
  70. int successNum = 0;
  71. int failureNum = 0;
  72. StringBuilder successMsg = new StringBuilder();
  73. StringBuilder failureMsg = new StringBuilder();
  74. for (BaseCameraManagementVos cameraManagementVos : accountManageList) {
  75. try {
  76. BaseCameraManagement accountManagement = new BaseCameraManagement();
  77. BeanUtils.copyProperties(cameraManagementVos, accountManagement);
  78. // 判断相机编码是否存在
  79. LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
  80. if (!StringUtils.isEmptySunhh(accountManagement.getCameraCode())) {
  81. lw.eq(BaseCameraManagement::getCameraCode, accountManagement.getCameraCode());
  82. }
  83. BaseCameraManagement baseAccountManagement = baseCameraManagementMapper.selectOne(lw);
  84. if (StringUtils.isEmptySunhh(baseAccountManagement)) {
  85. BeanValidators.validateWithException(validator, accountManagement);
  86. accountManagement.setUpdateBy(userId);
  87. accountManagement.setCreateBy(userId);
  88. // Long deptId = baseDeptMapper.selectDeptByDeptName(accountManagement.getDeptName());
  89. // log.debug(accountManagement.getDeptName() + "主键id:" + deptId);
  90. // if (!ObjectUtils.isEmpty(deptId)) {
  91. // accountManagement.setDeptId(deptId);
  92. LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
  93. if (!StringUtils.isEmptySunhh(accountManagement.getRailwayName())) {
  94. queryWrapper.eq(BaseRailwayManagement::getRailwayName, accountManagement.getRailwayName());
  95. }
  96. // List<BaseRailwayManagement> list = baseRailwayManagementService.list(queryWrapper);
  97. BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
  98. if (!StringUtils.isEmptySunhh(baseRailwayManagement)) {
  99. if (!accountManagement.getBeginMile().toString().matches(PATTERN) || !accountManagement.getInstallMile().toString().matches(PATTERN) || !accountManagement.getEndMile().toString().matches(PATTERN)) {
  100. failureNum++;
  101. failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,里程位置填写格式不正确,请填写数字");
  102. } else {
  103. accountManagement.setRailwayCode(baseRailwayManagement.getRailwayCode());
  104. if (!StringUtils.isEmptySunhh(accountManagement.getBeginMileBD())) {
  105. if (!accountManagement.getBeginMileBD().toString().matches(PATTERN)) {
  106. failureNum++;
  107. String msg = failureNum + "、监控范围开始里程位置填写格式不正确";
  108. failureMsg.append(msg);
  109. log.error(msg);
  110. // return error("监控范围开始里程位置填写格式不正确");
  111. } else {
  112. BigDecimal begin = accountManagement.getBeginMileBD().setScale(3, RoundingMode.HALF_UP);
  113. // BigDecimal begin = BigDecimal.parseDouble(baseCameraManagement.getBeginMile().toString());
  114. accountManagement.setBeginMile(begin.multiply(new BigDecimal("1000")).intValue());
  115. }
  116. }
  117. if (!StringUtils.isEmptySunhh(accountManagement.getInstallMileBD())) {
  118. if (!accountManagement.getInstallMileBD().toString().matches(PATTERN)) {
  119. failureNum++;
  120. String msg = failureNum + "、监控相机安装里程位置填写格式不正确";
  121. failureMsg.append(msg);
  122. log.error(msg);
  123. // return error("监控相机安装里程位置填写格式不正确");
  124. } else {
  125. BigDecimal install = accountManagement.getInstallMileBD().setScale(3, RoundingMode.HALF_UP);
  126. // double install = Double.parseDouble(baseCameraManagement.getInstallMile().toString());
  127. accountManagement.setInstallMile(install.multiply(new BigDecimal("1000")).intValue());
  128. }
  129. }
  130. if (!StringUtils.isEmptySunhh(accountManagement.getInstallMileBD())) {
  131. if (!accountManagement.getInstallMileBD().toString().matches(PATTERN)) {
  132. failureNum++;
  133. String msg = failureNum + "、监控范围结束里程位置填写格式不正确";
  134. failureMsg.append(msg);
  135. log.error(msg);
  136. // return error("监控范围结束里程位置填写格式不正确");
  137. } else {
  138. BigDecimal end = accountManagement.getInstallMileBD().setScale(3, RoundingMode.HALF_UP);
  139. // double end = Double.parseDouble(baseCameraManagement.getEndMile().toString());
  140. accountManagement.setEndMile(end.multiply(new BigDecimal("1000")).intValue());
  141. }
  142. }
  143. // accountManagement.setInstallMile(accountManagement.getInstallMileBD() * 1000);
  144. // accountManagement.setEndMile(accountManagement.getEndMile() * 1000);
  145. // accountManagement.setBeginMile(accountManagement.getBeginMile() * 1000);
  146. if (accountManagement.getBeginMile() < accountManagement.getEndMile()) {
  147. baseCameraManagementMapper.insert(accountManagement);
  148. BaseDeviceDynamicManagement baseDeviceDynamicManagement = new BaseDeviceDynamicManagement();
  149. baseDeviceDynamicManagement.setCameraCode(accountManagement.getCameraCode());
  150. baseDeviceDynamicManagement.setUpdateBy(userId);
  151. baseDeviceDynamicManagement.setCreateBy(userId);
  152. baseDeviceDynamicManagementMapper.insert(baseDeviceDynamicManagement);
  153. successNum++;
  154. successMsg.append(successNum + "、相机编码 " + accountManagement.getCameraCode() + " 导入成功");
  155. } else {
  156. failureNum++;
  157. failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,监控范围开始里程位置不能大于监控范围结束里程位置");
  158. }
  159. }
  160. } else {
  161. failureNum++;
  162. String msg = failureNum + "、相机所属线路名称 " + accountManagement.getRailwayName() + "不存在, 导入失败:";
  163. failureMsg.append(msg);
  164. log.error(msg);
  165. }
  166. // } else {
  167. // failureNum++;
  168. // String msg = failureNum + "、相机所属工务段 " + accountManagement.getDeptName() + "不存在, 导入失败:";
  169. // failureMsg.append(msg);
  170. // log.error(msg);
  171. // }
  172. } else if (updateSupport) {
  173. BeanValidators.validateWithException(validator, accountManagement);
  174. accountManagement.setUpdateBy(userId);
  175. Long deptId = baseDeptMapper.selectDeptByDeptName(accountManagement.getDeptName());
  176. log.debug(accountManagement.getDeptName() + "主键id:" + deptId);
  177. // if (!ObjectUtils.isEmpty(deptId)) {
  178. accountManagement.setDeptId(deptId);
  179. baseCameraManagementMapper.update(accountManagement, lw);
  180. LambdaQueryWrapper<BaseDeviceDynamicManagement> wrapper = new LambdaQueryWrapper<BaseDeviceDynamicManagement>();
  181. if (!StringUtils.isEmptySunhh(baseAccountManagement.getCameraCode())) {
  182. wrapper.eq(BaseDeviceDynamicManagement::getCameraCode, baseAccountManagement.getCameraCode());
  183. }
  184. BaseDeviceDynamicManagement baseDeviceDynamicManagement = baseDeviceDynamicManagementMapper.selectOne(wrapper);
  185. baseDeviceDynamicManagement.setCameraCode(accountManagement.getCameraCode());
  186. baseDeviceDynamicManagement.setUpdateBy(userId);
  187. baseDeviceDynamicManagementMapper.updateById(baseDeviceDynamicManagement);
  188. successNum++;
  189. successMsg.append(successNum + "、相机编码 " + accountManagement.getCameraCode() + " 更新成功");
  190. // } else {
  191. // failureNum++;
  192. // String msg = failureNum + "、相机所属工务段 " + accountManagement.getDeptName() + "不存在, 导入失败:";
  193. // failureMsg.append(msg);
  194. // log.error(msg);
  195. // }
  196. } else {
  197. failureNum++;
  198. failureMsg.append(failureNum + "、相机编码 " + accountManagement.getCameraCode() + " 已存在");
  199. }
  200. } catch (Exception e) {
  201. String msg = null;
  202. failureNum++;
  203. if (ObjectUtils.isEmpty(cameraManagementVos)) {
  204. msg = "导入的文档格式不正确";
  205. } else {
  206. msg = failureNum + "、相机编码 " + cameraManagementVos.getCameraCode() + " 导入失败:";
  207. }
  208. failureMsg.append(msg);
  209. log.error(msg, e);
  210. }
  211. }
  212. if (failureNum > 0) {
  213. failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  214. throw new ServiceException(failureMsg.toString());
  215. } else {
  216. successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条。");
  217. }
  218. return successMsg.toString();
  219. }
  220. /**
  221. * 获取相机列表+数据权限
  222. *
  223. * @return
  224. */
  225. @Override
  226. public List<BaseCameraManagementHomeVo> selectCameraAll(BaseCameraManagementVo baseCameraManagementVo) {
  227. // List<String> userIdList = getUserIds(userId);
  228. // LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
  229. // if (!StringUtils.isEmpty(userIdList)) {
  230. // lw.in(BaseCameraManagement::getCreateBy, userIdList);
  231. // }
  232. // List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementMapper.selectList(lw);
  233. List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo);
  234. List<BaseCameraManagementHomeVo> allListVo = BeanUtils.entityListToVOList(baseCameraManagementList, BaseCameraManagementHomeVo.class);
  235. for (BaseCameraManagementHomeVo baseCameraManagementHomeVo : allListVo) {
  236. Integer isRelease = msgAlarmMapper.selectCameraCode(baseCameraManagementHomeVo.getCameraCode());
  237. baseCameraManagementHomeVo.setIsRelease(isRelease != null ? isRelease : 1);
  238. }
  239. return allListVo;
  240. }
  241. /**
  242. * 根据当前登陆用户ID 查询当前用户数据权限
  243. *
  244. * @param userId
  245. * @return
  246. */
  247. /* public List<String> getUserIds(String userId) {
  248. BaseUser baseUser = baseUserService.getUser(userId);
  249. if (StringUtils.isNull(baseUser) || StringUtils.isNull(baseUser.getDataPermission())
  250. || StringUtils.isNull(baseUser.getDeptId())) {
  251. return null;
  252. }
  253. // 数据权限 1:本人;2:本部门;3:本部门及下级部门;4:本人及本级部门;5:本人及本部门及下级部门;6:全部
  254. Integer dataPermission = baseUser.getDataPermission();
  255. Long deptId = baseUser.getDeptId();
  256. Set<String> set = new HashSet<>();
  257. if (1 == dataPermission) {
  258. set = baseUserMapper.getUserIdList(userId);
  259. } else if (2 == dataPermission) {
  260. set = baseUserMapper.getUserIdByDeptId(deptId);
  261. } else if (3 == dataPermission) {
  262. // 获取部门数据
  263. List<Long> deptList = baseUserMapper.getDeptId(deptId);
  264. // 获取用户列表
  265. set = baseUserMapper.getUserIdByDeptIds(deptList);
  266. } else if (4 == dataPermission) {
  267. set = baseUserMapper.getUserIdByDeptIdAndUserId(userId, deptId);
  268. } else if (5 == dataPermission) {
  269. // 获取本人
  270. Set<String> setUser = baseUserMapper.getUserIdListBy5(userId);
  271. // 获取部门数据
  272. List<Long> deptList5 = baseUserMapper.getDeptId(deptId);
  273. // 获取用户列表
  274. Set<String> setUsers = baseUserMapper.getUserIdByDeptIdsBy5(deptList5);
  275. set.addAll(setUser);
  276. set.addAll(setUsers);
  277. } else if (6 == dataPermission) {
  278. set = baseUserMapper.getUserIdList6();
  279. }
  280. List<String> list = new ArrayList<>(set);
  281. return list;
  282. }*/
  283. /**
  284. * 根据当前登陆用户ID 查询当前用户数据权限
  285. *
  286. * @param userId
  287. * @return
  288. */
  289. @Override
  290. public List<String> getUserIdList(String userId) {
  291. BaseUser baseUser = baseUserService.getUser(userId);
  292. if (StringUtils.isNull(baseUser) || StringUtils.isNull(baseUser.getDataPermission())
  293. || StringUtils.isNull(baseUser.getDeptId())) {
  294. return null;
  295. }
  296. // 数据权限 1:本人;2:本部门;3:本部门及下级部门;4:本人及本级部门;5:本人及本部门及下级部门;6:全部
  297. Integer dataPermission = baseUser.getDataPermission();
  298. Long deptId = baseUser.getDeptId();
  299. Set<String> set = new HashSet<>();
  300. if (1 == dataPermission) {
  301. set = baseUserMapper.getUserIdList(userId);
  302. } else if (2 == dataPermission) {
  303. set = baseUserMapper.getUserIdByDeptId(deptId);
  304. } else if (3 == dataPermission) {
  305. // 获取部门数据
  306. List<Long> deptList = baseUserMapper.getDeptId(deptId);
  307. // 获取用户列表
  308. set = baseUserMapper.getUserIdByDeptIds(deptList);
  309. } else if (4 == dataPermission) {
  310. set = baseUserMapper.getUserIdByDeptIdAndUserId(userId, deptId);
  311. } else if (5 == dataPermission) {
  312. // 获取本人
  313. Set<String> setUser = baseUserMapper.getUserIdListBy5(userId);
  314. // 获取部门数据
  315. List<Long> deptList5 = baseUserMapper.getDeptId(deptId);
  316. // 获取用户列表
  317. Set<String> setUsers = baseUserMapper.getUserIdByDeptIdsBy5(deptList5);
  318. set.addAll(setUser);
  319. set.addAll(setUsers);
  320. } else if (6 == dataPermission) {
  321. set = baseUserMapper.getUserIdsList();
  322. }
  323. List<String> list = new ArrayList<>(set);
  324. return list;
  325. }
  326. @Override
  327. public IPage<BaseCameraManagement> queryPage(BaseCameraManagementVo baseCameraManagementVo) {
  328. int pageNum = Integer.parseInt(baseCameraManagementVo.getPageNum().toString());
  329. int pageSize = Integer.parseInt(baseCameraManagementVo.getPageSize().toString());
  330. com.github.pagehelper.Page<BaseCameraManagement> page = PageHelper.startPage(pageNum, pageSize)
  331. .doSelectPage(() -> baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo));
  332. com.baomidou.mybatisplus.extension.plugins.pagination.Page<BaseCameraManagement> pageR =
  333. new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize);
  334. pageR.setRecords(page.getResult());
  335. pageR.setTotal(page.getTotal());
  336. return pageR;
  337. }
  338. @Override
  339. public List<BaseCameraManagement> baseCameraManagementList(BaseCameraManagementVo baseCameraManagementVo) {
  340. return baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo);
  341. }
  342. @Override
  343. public Map<String, Integer> getMessageStatisticsCamera() {
  344. LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<>();
  345. List<BaseCameraManagement> baseCameraManagements = baseCameraManagementMapper.selectList(lw);
  346. int online = 0;
  347. int offline = 0;
  348. for (BaseCameraManagement baseCameraManagement : baseCameraManagements) {
  349. if (!StringUtils.isEmptySunhh(baseCameraManagement) && !StringUtils.isEmptySunhh(baseCameraManagement.getCameraCode())) {
  350. SkynetHeartbeatLog skynetHeartbeatLog = baseCameraManagementMapper.selectSkynetHeartbeatLogByCameraCode(baseCameraManagement.getCameraCode());
  351. if (StringUtils.isEmptySunhh(skynetHeartbeatLog)) {
  352. offline++;
  353. baseCameraManagement.setOnline(1);
  354. } else {
  355. long timeNow = System.currentTimeMillis();
  356. long createTime = skynetHeartbeatLog.getCreateTime().getTime();
  357. long thereHourMillis = 60 * 60 * 1000 * 3;
  358. long timeNew = timeNow - thereHourMillis;
  359. if (timeNew <= createTime) {
  360. baseCameraManagement.setOnline(2);
  361. online++;
  362. } else {
  363. baseCameraManagement.setOnline(1);
  364. offline++;
  365. }
  366. }
  367. baseCameraManagementMapper.updateById(baseCameraManagement);
  368. }
  369. }
  370. Map<String, Integer> map = new HashMap<>();
  371. map.put("countAllCamera", baseCameraManagements.size());
  372. map.put("online", online);
  373. map.put("offline", offline);
  374. return map;
  375. }
  376. @Override
  377. public AjaxResult nonContactAlarmCamera() {
  378. List<BaseCameraManagement> list = new ArrayList<>();
  379. QueryWrapper<MsgAlarm> wrapper = new QueryWrapper<>();
  380. wrapper.eq("is_release", 2);
  381. List<MsgAlarm> msgAlarms = msgAlarmMapper.selectList(wrapper);
  382. if (!ObjectUtils.isEmpty(msgAlarms)) {
  383. for (MsgAlarm msgAlarm : msgAlarms) {
  384. LambdaQueryWrapper<BaseCameraManagement> camera = new LambdaQueryWrapper<BaseCameraManagement>();
  385. camera.ge(BaseCameraManagement::getEndMile, msgAlarm.getAlarmMile());
  386. camera.le(BaseCameraManagement::getBeginMile, msgAlarm.getAlarmMile());
  387. camera.eq(BaseCameraManagement::getLineDir, msgAlarm.getLineDir());
  388. camera.eq(BaseCameraManagement::getRailwayCode, msgAlarm.getRailwayCode());
  389. camera.eq(BaseCameraManagement::getOnline,2);
  390. camera.eq(BaseCameraManagement::getEnableOrNot,1);
  391. List<BaseCameraManagement> baseCameraManagementList = this.list(camera);
  392. if (!ObjectUtils.isEmpty(baseCameraManagementList)){
  393. list.addAll(baseCameraManagementList);
  394. }
  395. }
  396. }
  397. return AjaxResult.success(list);
  398. }
  399. }