BaseVehicleServiceImpl.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. package com.ozs.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.github.pagehelper.PageHelper;
  6. import com.ozs.common.core.domain.AjaxResult;
  7. import com.ozs.common.exception.ServiceException;
  8. import com.ozs.common.utils.StringUtils;
  9. import com.ozs.common.utils.bean.BeanUtils;
  10. import com.ozs.common.utils.bean.BeanValidators;
  11. import com.ozs.entity.BaseTerminal;
  12. import com.ozs.entity.BaseVehicle;
  13. import com.ozs.entity.BaseVehicleTerminal;
  14. import com.ozs.entity.vo.BaseVehicleTerminalDto;
  15. import com.ozs.entity.vo.BaseVehicleTerminalVo;
  16. import com.ozs.entity.vo.BaseVehicleVo;
  17. import com.ozs.entity.vo.VehicleTreeVo;
  18. import com.ozs.mapper.BaseDeviceDynamicManagementMapper;
  19. import com.ozs.mapper.BaseTerminalMapper;
  20. import com.ozs.mapper.BaseVehicleMapper;
  21. import com.ozs.mapper.BaseVehicleTerminalMapper;
  22. import com.ozs.service.BaseVehicleService;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.util.ObjectUtils;
  26. import javax.validation.Validator;
  27. import java.util.ArrayList;
  28. import java.util.Date;
  29. import java.util.List;
  30. import java.util.stream.Collectors;
  31. /**
  32. * <p>
  33. * 机车信息表 服务实现类
  34. * </p>
  35. *
  36. * @author ozs
  37. * @since 2023-04-11
  38. */
  39. @Service
  40. public class BaseVehicleServiceImpl extends ServiceImpl<BaseVehicleMapper, BaseVehicle> implements BaseVehicleService {
  41. @Autowired
  42. private BaseVehicleMapper baseVehicleMapper;
  43. @Autowired
  44. private BaseTerminalMapper baseTerminalMapper;
  45. @Autowired
  46. BaseDeviceDynamicManagementMapper baseDeviceDynamicManagementMapper;
  47. @Autowired
  48. private BaseVehicleTerminalMapper baseVehicleTerminalMapper;
  49. @Autowired
  50. protected Validator validator;
  51. @Override
  52. public IPage<BaseVehicle> vehicleList(BaseVehicleVo baseVehicle) {
  53. LambdaQueryWrapper<BaseVehicle> wrapper = new LambdaQueryWrapper<BaseVehicle>();
  54. if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getVehicleName())) {
  55. wrapper.eq(BaseVehicle::getVehicleName, baseVehicle.getVehicleName());
  56. }
  57. if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getVehicleCode())) {
  58. wrapper.eq(BaseVehicle::getVehicleCode, baseVehicle.getVehicleCode());
  59. }
  60. wrapper.orderByDesc(BaseVehicle::getCreateTime);
  61. int pageNum = Integer.parseInt(baseVehicle.getPageNum().toString());
  62. int pageSize = Integer.parseInt(baseVehicle.getPageSize().toString());
  63. com.github.pagehelper.Page<BaseVehicle> page = PageHelper.startPage(pageNum, pageSize)
  64. .doSelectPage(() -> baseVehicleMapper.selectList(wrapper));
  65. if (!StringUtils.isEmptySunhh(page) && page.getResult().size() > 0) {
  66. List<BaseVehicle> dto1 = page.getResult().stream().map(o -> {
  67. BaseTerminal baseTerminal = baseTerminalMapper.selectTerminal(o.getVehicleCode());
  68. if (!StringUtils.isEmptySunhh(baseTerminal) && !StringUtils.isEmptySunhh(baseTerminal.getVehicleCode())) {
  69. LambdaQueryWrapper<BaseVehicleTerminal> wrapperBaseVehicleTerminal = new LambdaQueryWrapper<>();
  70. if (!StringUtils.isEmptySunhh(baseTerminal) && !StringUtils.isEmptySunhh(baseTerminal.getTerminalCode())) {
  71. wrapperBaseVehicleTerminal.eq(BaseVehicleTerminal::getTerminalCode, baseTerminal.getTerminalCode());
  72. }
  73. BaseVehicleTerminal baseVehicleTerminal = baseVehicleTerminalMapper.selectOne(wrapperBaseVehicleTerminal);
  74. if (!StringUtils.isEmptySunhh(baseVehicleTerminal) && !StringUtils.isEmptySunhh(baseVehicleTerminal.getTerminalName())) {
  75. o.setTerminalName(baseVehicleTerminal.getTerminalName());
  76. }
  77. }
  78. return o;
  79. }).collect(Collectors.toList());
  80. }
  81. com.baomidou.mybatisplus.extension.plugins.pagination.Page<BaseVehicle> pageR =
  82. new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize);
  83. pageR.setRecords(page.getResult());
  84. pageR.setTotal(page.getTotal());
  85. return pageR;
  86. }
  87. @Override
  88. public AjaxResult vehicleAdd(BaseVehicle baseVehicle, String userId) {
  89. LambdaQueryWrapper<BaseVehicle> wrapper = new LambdaQueryWrapper<BaseVehicle>();
  90. if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getVehicleCode())) {
  91. wrapper.eq(BaseVehicle::getVehicleCode, baseVehicle.getVehicleCode());
  92. }
  93. List<BaseVehicle> baseVehicles = baseVehicleMapper.selectList(wrapper);
  94. if (baseVehicles.size() > 0) {
  95. return AjaxResult.error("机车编码已存在!");
  96. }
  97. Date date = new Date();
  98. baseVehicle.setCreateBy(userId);
  99. baseVehicle.setUpdateBy(userId);
  100. baseVehicle.setCreateTime(date);
  101. baseVehicle.setUpdateTime(date);
  102. int insert = baseVehicleMapper.insert(baseVehicle);
  103. if (insert > 0) {
  104. return AjaxResult.success();
  105. } else {
  106. return AjaxResult.error();
  107. }
  108. }
  109. @Override
  110. public AjaxResult vehicleUpdate(BaseVehicle baseVehicle, String userId) {
  111. LambdaQueryWrapper<BaseVehicle> wrapper = new LambdaQueryWrapper<>();
  112. if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getVehicleCode())) {
  113. wrapper.eq(BaseVehicle::getVehicleCode, baseVehicle.getVehicleCode());
  114. }
  115. if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getId())) {
  116. wrapper.ne(BaseVehicle::getId, baseVehicle.getId());
  117. }
  118. List<BaseVehicle> baseVehicles = baseVehicleMapper.selectList(wrapper);
  119. if (baseVehicles.size() > 0) {
  120. return AjaxResult.error("机车编码已存在!");
  121. }
  122. baseVehicle.setUpdateBy(userId);
  123. baseVehicle.setUpdateTime(new Date());
  124. int update = baseVehicleMapper.updateById(baseVehicle);
  125. if (update > 0) {
  126. return AjaxResult.success();
  127. } else {
  128. return AjaxResult.error();
  129. }
  130. }
  131. @Override
  132. public String importBaseVehicle(List<BaseVehicle> accountManageList, boolean updateSupport, String userId) {
  133. int successNum = 0;
  134. int failureNum = 0;
  135. StringBuilder successMsg = new StringBuilder();
  136. StringBuilder failureMsg = new StringBuilder();
  137. for (BaseVehicle baseVehicle2 : accountManageList) {
  138. try {
  139. BaseVehicle baseVehicle = new BaseVehicle();
  140. BeanUtils.copyProperties(baseVehicle2, baseVehicle);
  141. // 判断机车编码是否存在
  142. LambdaQueryWrapper<BaseVehicle> lw = new LambdaQueryWrapper<BaseVehicle>();
  143. if (!StringUtils.isEmptySunhh(baseVehicle.getVehicleCode())) {
  144. lw.eq(BaseVehicle::getVehicleCode, baseVehicle.getVehicleCode());
  145. }
  146. BaseVehicle baseVehicle1 = baseVehicleMapper.selectOne(lw);
  147. if (StringUtils.isEmptySunhh(baseVehicle1)) {
  148. BeanValidators.validateWithException(validator, baseVehicle);
  149. baseVehicle.setUpdateBy(userId);
  150. baseVehicle.setCreateBy(userId);
  151. Date date = new Date();
  152. baseVehicle.setCreateTime(date);
  153. baseVehicle.setUpdateTime(date);
  154. int insert = baseVehicleMapper.insert(baseVehicle);
  155. successNum++;
  156. successMsg.append(successNum + "、机车编码 " + baseVehicle.getVehicleCode() + " 导入成功");
  157. } else if (updateSupport) {
  158. BeanValidators.validateWithException(validator, baseVehicle);
  159. LambdaQueryWrapper<BaseVehicle> lambdaQueryWrapper = new LambdaQueryWrapper<BaseVehicle>();
  160. if (!StringUtils.isEmptySunhh(baseVehicle.getVehicleCode())) {
  161. lambdaQueryWrapper.eq(BaseVehicle::getVehicleCode, baseVehicle.getVehicleCode());
  162. }
  163. BaseVehicle baseVehicle4 = baseVehicleMapper.selectOne(lambdaQueryWrapper);
  164. if (StringUtils.isEmptySunhh(baseVehicle4)) {
  165. baseVehicle.setUpdateBy(userId);
  166. baseVehicle.setUpdateTime(new Date());
  167. baseVehicle.setId(baseVehicle4.getId());
  168. baseVehicleMapper.updateById(baseVehicle);
  169. successNum++;
  170. successMsg.append(successNum + "、机车编码 " + baseVehicle.getVehicleCode() + " 更新成功");
  171. } else {
  172. failureNum++;
  173. failureMsg.append(failureNum + "、机车编码 " + baseVehicle.getVehicleCode() + "不存在");
  174. }
  175. }
  176. } catch (Exception e) {
  177. failureNum++;
  178. String msg = failureNum + "、机车编码 " + baseVehicle2.getVehicleCode() + " 导入失败:";
  179. failureMsg.append(msg);
  180. log.error(msg, e);
  181. }
  182. }
  183. if (failureNum > 0) {
  184. failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  185. throw new ServiceException(failureMsg.toString());
  186. } else {
  187. successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条。");
  188. }
  189. return successMsg.toString();
  190. }
  191. @Override
  192. public AjaxResult vehicleDetails(BaseVehicle baseVehicle) {
  193. BaseVehicle baseVehicle1 = baseVehicleMapper.selectById(baseVehicle.getId());
  194. return AjaxResult.success(baseVehicle1);
  195. }
  196. @Override
  197. public List<BaseVehicle> exportBaseVehicle(BaseVehicle baseVehicle) {
  198. LambdaQueryWrapper<BaseVehicle> wrapper = new LambdaQueryWrapper<>();
  199. if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getVehicleName())) {
  200. wrapper.eq(BaseVehicle::getVehicleName, baseVehicle.getVehicleName());
  201. }
  202. if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getVehicleCode())) {
  203. wrapper.eq(BaseVehicle::getVehicleCode, baseVehicle.getVehicleCode());
  204. }
  205. List<BaseVehicle> baseVehicles = baseVehicleMapper.selectList(wrapper);
  206. for (BaseVehicle baseVehicle1 : baseVehicles) {
  207. BaseTerminal baseTerminal = baseTerminalMapper.selectTerminal(baseVehicle1.getVehicleCode());
  208. if (!StringUtils.isEmptySunhh(baseTerminal) && !StringUtils.isEmptySunhh(baseTerminal.getVehicleCode())) {
  209. LambdaQueryWrapper<BaseVehicleTerminal> wrapperBaseVehicleTerminal = new LambdaQueryWrapper<>();
  210. if (!StringUtils.isEmptySunhh(baseTerminal) && !StringUtils.isEmptySunhh(baseTerminal.getTerminalCode())) {
  211. wrapperBaseVehicleTerminal.eq(BaseVehicleTerminal::getTerminalCode, baseTerminal.getTerminalCode());
  212. }
  213. BaseVehicleTerminal baseVehicleTerminal = baseVehicleTerminalMapper.selectOne(wrapperBaseVehicleTerminal);
  214. if (!StringUtils.isEmptySunhh(baseVehicleTerminal) && !StringUtils.isEmptySunhh(baseVehicleTerminal.getTerminalName())) {
  215. baseVehicle1.setTerminalName(baseVehicleTerminal.getTerminalName());
  216. } else {
  217. baseVehicle1.setTerminalName("");
  218. }
  219. }
  220. }
  221. return baseVehicles;
  222. }
  223. @Override
  224. public IPage<BaseVehicleTerminalVo> vehicleTerminal(BaseVehicleVo baseVehicleVo) {
  225. BaseTerminal baseTerminal = baseTerminalMapper.selectTerminal(baseVehicleVo.getVehicleCode());
  226. List<String> terminalCodeList = baseTerminalMapper.selectMountCode(baseVehicleVo.getVehicleCode());
  227. // List<String> collect = terminalCodeList.stream().map(BaseTerminal::getTerminalCode).collect(Collectors.toList());
  228. LambdaQueryWrapper<BaseVehicleTerminal> wrapper = new LambdaQueryWrapper<>();
  229. if (!StringUtils.isEmptySunhh(terminalCodeList) && terminalCodeList.size() > 0) {
  230. wrapper.notIn(BaseVehicleTerminal::getTerminalCode, terminalCodeList);
  231. }
  232. // List<BaseVehicleTerminal> baseVehicleTerminalList = baseVehicleTerminalMapper.selectList(wrapper);
  233. int pageNum = Integer.parseInt(baseVehicleVo.getPageNum().toString());
  234. int pageSize = Integer.parseInt(baseVehicleVo.getPageSize().toString());
  235. com.github.pagehelper.Page<BaseVehicleTerminal> page = PageHelper
  236. .startPage(pageNum, pageSize).doSelectPage(() -> baseVehicleTerminalMapper.selectList(wrapper));
  237. com.baomidou.mybatisplus.extension.plugins.pagination.Page<BaseVehicleTerminalVo> pageR =
  238. new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize);
  239. if (!ObjectUtils.isEmpty(page) && page.getResult().size() > 0) {
  240. List<BaseVehicleTerminalVo> dto1 = page.getResult().stream().map(o -> {
  241. BaseVehicleTerminalVo baseVehicleTerminalVo = new BaseVehicleTerminalVo();
  242. BeanUtils.copyProperties(o, baseVehicleTerminalVo);
  243. if (!StringUtils.isEmptySunhh(baseTerminal)) {
  244. if (baseTerminal.getTerminalCode().equals(o.getTerminalCode())) {
  245. baseVehicleTerminalVo.setIsMount("2");
  246. } else {
  247. baseVehicleTerminalVo.setIsMount("1");
  248. }
  249. } else {
  250. baseVehicleTerminalVo.setIsMount("1");
  251. }
  252. return baseVehicleTerminalVo;
  253. }).collect(Collectors.toList());
  254. pageR.setRecords(dto1);
  255. }
  256. return pageR;
  257. }
  258. @Override
  259. public AjaxResult vehicleTerminalAdd(BaseTerminal baseTerminal1, String userId) {
  260. LambdaQueryWrapper<BaseTerminal> wrapper1 = new LambdaQueryWrapper<>();
  261. if (!StringUtils.isEmptySunhh(baseTerminal1) && !StringUtils.isEmptySunhh(baseTerminal1.getVehicleCode())) {
  262. wrapper1.ne(BaseTerminal::getVehicleCode, baseTerminal1.getVehicleCode());
  263. }
  264. if (!StringUtils.isEmptySunhh(baseTerminal1) && !StringUtils.isEmptySunhh(baseTerminal1.getTerminalCode())) {
  265. wrapper1.eq(BaseTerminal::getTerminalCode, baseTerminal1.getTerminalCode());
  266. }
  267. List<BaseTerminal> baseTerminals = baseTerminalMapper.selectList(wrapper1);
  268. if (!StringUtils.isEmptySunhh(baseTerminals) && baseTerminals.size() > 0) {
  269. return AjaxResult.error("此终端已经挂载其他机车!");
  270. }
  271. LambdaQueryWrapper<BaseTerminal> wrapper = new LambdaQueryWrapper<>();
  272. if (!StringUtils.isEmptySunhh(baseTerminal1) && !StringUtils.isEmptySunhh(baseTerminal1.getVehicleCode())) {
  273. wrapper.eq(BaseTerminal::getVehicleCode, baseTerminal1.getVehicleCode());
  274. }
  275. BaseTerminal baseTerminal = baseTerminalMapper.selectOne(wrapper);
  276. if (StringUtils.isEmptySunhh(baseTerminal)) {
  277. BaseTerminal baseTerminal2 = new BaseTerminal();
  278. baseTerminal2.setVehicleCode(baseTerminal1.getVehicleCode());
  279. baseTerminal2.setTerminalCode(baseTerminal1.getTerminalCode());
  280. baseTerminal2.setCreateBy(userId);
  281. baseTerminal2.setUpdateBy(userId);
  282. Date date = new Date();
  283. baseTerminal2.setCreateTime(date);
  284. baseTerminal2.setUpdateTime(date);
  285. int insert = baseTerminalMapper.insert(baseTerminal2);
  286. } else {
  287. baseTerminal.setUpdateBy(userId);
  288. baseTerminal.setUpdateTime(new Date());
  289. baseTerminal.setVehicleCode(baseTerminal1.getVehicleCode());
  290. baseTerminal.setTerminalCode(baseTerminal1.getTerminalCode());
  291. int updateById = baseTerminalMapper.updateById(baseTerminal);
  292. }
  293. return AjaxResult.success();
  294. }
  295. @Override
  296. public Boolean isMount(BaseVehicleVo baseVehicleVo) {
  297. LambdaQueryWrapper<BaseTerminal> wrapper = new LambdaQueryWrapper<>();
  298. if (!StringUtils.isEmptySunhh(baseVehicleVo) && !StringUtils.isEmptySunhh(baseVehicleVo.getVehicleCode())) {
  299. wrapper.eq(BaseTerminal::getVehicleCode, baseVehicleVo.getVehicleCode());
  300. }
  301. BaseTerminal baseTerminal = baseTerminalMapper.selectOne(wrapper);
  302. if (StringUtils.isEmptySunhh(baseTerminal)) {
  303. return true;
  304. }
  305. return false;
  306. }
  307. @Override
  308. public List<BaseVehicleTerminalDto> vehicleList() {
  309. List<BaseVehicleTerminalDto> dtoList = baseDeviceDynamicManagementMapper.vehicleTreelist(null);
  310. List<String> strings = dtoList.stream().map(BaseVehicleTerminalDto::getVehicleCode).collect(Collectors.toList());
  311. LambdaQueryWrapper<BaseVehicle> bw = new LambdaQueryWrapper<>();
  312. bw.in(BaseVehicle::getVehicleCode, strings);
  313. List<BaseVehicle> vehicles = baseVehicleMapper.selectList(bw);
  314. for (BaseVehicleTerminalDto terminalDto : dtoList) {
  315. for (BaseVehicle vehicle : vehicles) {
  316. if (terminalDto.getVehicleCode().equals(vehicle.getVehicleCode())) {
  317. terminalDto.setVehicleName(vehicle.getVehicleName());
  318. break;
  319. }
  320. }
  321. }
  322. return dtoList;
  323. }
  324. @Override
  325. public List<BaseVehicle> vehicleListDT() {
  326. //查到所有机车数据
  327. List<BaseVehicle> baseVehicles = baseVehicleMapper.selectList(new LambdaQueryWrapper<>());
  328. //查到机车关联的终端
  329. if (!StringUtils.isEmptySunhh(baseVehicles)) {
  330. List<String> terminalCodeList = new ArrayList<>();
  331. baseVehicles = baseVehicles.stream().map(o -> {
  332. //查到已保存的关联信息
  333. BaseTerminal baseTerminal = baseTerminalMapper.selectTerminal(o.getVehicleCode());
  334. if (!StringUtils.isEmptySunhh(baseTerminal) && !StringUtils.isEmptySunhh(baseTerminal.getVehicleCode())) {
  335. terminalCodeList.add(baseTerminal.getVehicleCode());
  336. LambdaQueryWrapper<BaseVehicleTerminal> wrapperBaseVehicleTerminal = new LambdaQueryWrapper<>();
  337. if (!StringUtils.isEmptySunhh(baseTerminal) && !StringUtils.isEmptySunhh(baseTerminal.getTerminalCode())) {
  338. wrapperBaseVehicleTerminal.eq(BaseVehicleTerminal::getTerminalCode, baseTerminal.getTerminalCode());
  339. }
  340. //根据编码获取终端名称
  341. BaseVehicleTerminal baseVehicleTerminal = baseVehicleTerminalMapper.selectOne(wrapperBaseVehicleTerminal);
  342. if (!StringUtils.isEmptySunhh(baseVehicleTerminal) && !StringUtils.isEmptySunhh(baseVehicleTerminal.getTerminalName())) {
  343. o.setTerminalName(baseVehicleTerminal.getTerminalName());
  344. }
  345. }
  346. return o;
  347. }).collect(Collectors.toList());
  348. VehicleTreeVo vehicleTreeVo = new VehicleTreeVo();
  349. vehicleTreeVo.setTerminalCodeList(terminalCodeList);
  350. //机车和终端在行驶记录中最后的位置信息
  351. List<BaseVehicleTerminalDto> list = baseDeviceDynamicManagementMapper.vehicleTreelist(vehicleTreeVo);
  352. for (BaseVehicle vehicle : baseVehicles) {
  353. for (BaseVehicleTerminalDto terminalDto : list) {
  354. if (terminalDto.getVehicleCode().equals(vehicle.getVehicleCode())) {
  355. vehicle.setVehicleTerminalDto(terminalDto);
  356. break;
  357. }
  358. }
  359. }
  360. }
  361. return baseVehicles;
  362. }
  363. @Override
  364. public AjaxResult vehicleTerminalUnmount(BaseTerminal baseTerminal) {
  365. LambdaQueryWrapper<BaseTerminal> wrapper = new LambdaQueryWrapper<>();
  366. if (!StringUtils.isEmptySunhh(baseTerminal) && !StringUtils.isEmptySunhh(baseTerminal.getVehicleCode())) {
  367. wrapper.eq(BaseTerminal::getVehicleCode, baseTerminal.getVehicleCode());
  368. }
  369. baseTerminalMapper.delete(wrapper);
  370. return AjaxResult.success();
  371. }
  372. }