EquipmentServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. package com.ruoyi.demo.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.github.pagehelper.PageHelper;
  7. import com.github.pagehelper.PageInfo;
  8. import com.ruoyi.common.core.domain.R;
  9. import com.ruoyi.demo.config.MtStarProperties;
  10. import com.ruoyi.demo.entity.*;
  11. import com.ruoyi.demo.entity.bo.EquipmentBo;
  12. import com.ruoyi.demo.entity.bo.PlanBo;
  13. import com.ruoyi.demo.entity.bo.PlanItemBo;
  14. import com.ruoyi.demo.entity.vo.EquipmentVo;
  15. import com.ruoyi.demo.entity.vo.PlanItemVo;
  16. import com.ruoyi.demo.enums.EquipmentStateEnum;
  17. import com.ruoyi.demo.mapper.*;
  18. import com.ruoyi.demo.service.EquipmentService;
  19. import com.ruoyi.demo.utils.InitMapUtil;
  20. import com.ruoyi.demo.utils.MtStarUtil;
  21. import lombok.extern.slf4j.Slf4j;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.beans.factory.annotation.Qualifier;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import java.time.LocalDateTime;
  27. import java.time.ZoneId;
  28. import java.util.*;
  29. import java.util.concurrent.CompletableFuture;
  30. import java.util.stream.Collectors;
  31. @Service
  32. @Transactional
  33. @Slf4j
  34. public class EquipmentServiceImpl implements EquipmentService {
  35. @Autowired
  36. EquipmentMapper equipmentMapper;
  37. @Autowired
  38. InitMapUtil initMapUtil;
  39. @Autowired
  40. PlanItemMapper planItemMapper;
  41. @Autowired
  42. PlanMapper planMapper;
  43. @Autowired
  44. StatisticsMapper statisticsMapper;
  45. @Autowired
  46. DlUserMapper dlUserMapper;
  47. @Autowired
  48. PlanPushStatisticsMapper planPushStatisticsMapper;
  49. @Autowired
  50. @Qualifier("equipmentStateMap")
  51. HashMap<Integer,String> equipmentStateMap;
  52. @Autowired
  53. @Qualifier("equipmentOnStateMap")
  54. HashMap<Integer,String> equipmentOnStateMap;
  55. @Autowired
  56. MtStarUtil mtStarUtil;
  57. @Override
  58. public Integer addEquipment(EquipmentVo equipmentVo) {
  59. //判断是否已经存在设备Code
  60. QueryWrapper<Equipment> equipmentCode = new QueryWrapper<>();
  61. equipmentCode.eq("equipment_code", equipmentVo.getEquipmentCode());
  62. Long aLong = equipmentMapper.selectCount(equipmentCode);
  63. if (aLong == 0){
  64. Equipment equipment = new Equipment(equipmentVo);
  65. //1.新增地区码映射
  66. equipment.setAddrCodeInfo(initMapUtil.getInitAddrCodeMap(equipment.getAddrCode()));
  67. //2.新增创建时间
  68. equipment.setEnterTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  69. if (equipmentVo.getOnState() == 1){
  70. //唤醒
  71. mtStarUtil.wakeup(equipmentVo.getEquipmentCode());
  72. }else {
  73. //休眠
  74. mtStarUtil.dormancy(equipmentVo.getEquipmentCode());
  75. }
  76. return equipmentMapper.insert(equipment);
  77. }
  78. return 0;
  79. }
  80. @Override
  81. public R updateEquipment(EquipmentVo equipmentVo) {
  82. QueryWrapper<Equipment> queryWrapper = new QueryWrapper<>();
  83. queryWrapper.select("equipment_name","equipment_code","addr_info","addr_code","addr_code_info");
  84. queryWrapper.eq("equipment_id",equipmentVo.getEquipmentId());
  85. Equipment equipment = equipmentMapper.selectOne(queryWrapper);
  86. if (equipment != null){
  87. //2.更新时间
  88. equipmentVo.setUpdateTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  89. UpdateWrapper<Equipment> updateWrapper = new UpdateWrapper<>();
  90. updateWrapper.eq("equipment_id",equipmentVo.getEquipmentId());
  91. updateWrapper.set("equipment_name",equipmentVo.getEquipmentName())
  92. .set("equipment_code",equipmentVo.getEquipmentCode())
  93. .set("annotation",equipmentVo.getAnnotation())
  94. .set("addr_info",equipmentVo.getAddrInfo())
  95. .set("addr_code",equipmentVo.getAddrCode())
  96. .set("addr_code_info",equipmentVo.getAddrCode())
  97. .set("state",equipmentVo.getState())
  98. .set("on_state",equipmentVo.getOnState())
  99. .set("lat",equipmentVo.getLat())
  100. .set("lng",equipmentVo.getLng())
  101. .set("manufacturers",equipmentVo.getManufacturers())
  102. .set("maintain_name",equipmentVo.getMaintainName())
  103. .set("maintain_telephone",equipmentVo.getMaintainTelephone())
  104. .set("update_time",equipmentVo.getUpdateTime());
  105. equipmentMapper.update(null,updateWrapper);
  106. //修改冗余字段
  107. if (!equipment.getEquipmentName().equals(equipmentVo.getEquipmentName()) || !equipment.getEquipmentCode().equals(equipmentVo.getEquipmentCode()) || !equipment.getAddrCode().equals(equipmentVo.getAddrCode())){
  108. UpdateWrapper<PlanItem> updateWrapper1 = new UpdateWrapper<>();
  109. updateWrapper1.eq("equipment_id",equipmentVo.getEquipmentId());
  110. updateWrapper1.set("equipment_name",equipmentVo.getEquipmentName())
  111. .set("equipment_code",equipmentVo.getEquipmentCode())
  112. .set("addr_info",equipmentVo.getAddrInfo())
  113. .set("addr_code",equipmentVo.getAddrCode())
  114. .set("addr_code_info",equipmentVo.getAddrCode());
  115. planItemMapper.update(null,updateWrapper1);
  116. }
  117. if (!equipment.getEquipmentName().equals(equipmentVo.getEquipmentName()) || !equipment.getEquipmentCode().equals(equipmentVo.getEquipmentCode())){
  118. UpdateWrapper<Statistics> updateWrapper2 = new UpdateWrapper<>();
  119. updateWrapper2.eq("equipment_id",equipmentVo.getEquipmentId());
  120. updateWrapper2.set("equipment_name",equipmentVo.getEquipmentName())
  121. .set("equipment_code",equipmentVo.getEquipmentCode());
  122. statisticsMapper.update(null,updateWrapper2);
  123. UpdateWrapper<DlUser> updateWrapper3 = new UpdateWrapper<>();
  124. updateWrapper3.eq("start_equipment_id",equipmentVo.getEquipmentId());
  125. updateWrapper3.set("start_equipment_name",equipmentVo.getEquipmentName())
  126. .set("start_equipment_code",equipmentVo.getEquipmentCode());
  127. dlUserMapper.update(null,updateWrapper3);
  128. UpdateWrapper<DlUser> updateWrapper4 = new UpdateWrapper<>();
  129. updateWrapper4.eq("end_equipment_id",equipmentVo.getEquipmentId());
  130. updateWrapper4.set("end_equipment_name",equipmentVo.getEquipmentName())
  131. .set("end_equipment_code",equipmentVo.getEquipmentCode());
  132. dlUserMapper.update(null,updateWrapper4);
  133. UpdateWrapper<PlanPushStatistics> updateWrapper5 = new UpdateWrapper<>();
  134. updateWrapper5.eq("equipment_id",equipmentVo.getEquipmentId());
  135. updateWrapper5.set("equipment_name",equipmentVo.getEquipmentName())
  136. .set("equipment_code",equipmentVo.getEquipmentCode());
  137. planPushStatisticsMapper.update(null,updateWrapper5);
  138. }
  139. return R.ok("修改成功");
  140. }else {
  141. return R.fail("设备不存在");
  142. }
  143. }
  144. @Override
  145. public EquipmentBo getEquipment(String equipmentId) {
  146. Equipment equipment = equipmentMapper.selectById(equipmentId);
  147. EquipmentBo equipmentBo = new EquipmentBo(equipment);
  148. return equipmentBo;
  149. }
  150. /*
  151. * TODO 需要考虑上面有没有广告
  152. * */
  153. @Override
  154. public String deleteEquipment(String[] equipmentIds) {
  155. //1.查询设备下身份有广告
  156. QueryWrapper<PlanItemBo> queryWrapper = new QueryWrapper<>();
  157. queryWrapper.in("equipment_id",equipmentIds);
  158. queryWrapper.and(planItemBoQueryWrapper -> {
  159. planItemBoQueryWrapper.eq("dl_plan_item.deleted",0);
  160. });
  161. queryWrapper.and(planItemBoQueryWrapper -> {
  162. planItemBoQueryWrapper.gt("plan_end_time",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  163. });
  164. Integer count = planItemMapper.getEuipmentPlanCont(queryWrapper);
  165. if (count > 0)
  166. return "设备下存在广告计划,请移除广告后在删除设备";
  167. equipmentMapper.deleteBatchIds(Arrays.asList(equipmentIds));
  168. return "移除成功";
  169. }
  170. @Override
  171. public Page<Equipment> getEquipmentBySelect(EquipmentVo equipmentVo) {
  172. QueryWrapper<Equipment> queryWrapper = new QueryWrapper<>();
  173. queryWrapper.isNull("store_id");
  174. if (equipmentVo.getSearchText() != null && !equipmentVo.getSearchText().equals("")){
  175. queryWrapper.and(queryWrapper1 -> {
  176. queryWrapper1.likeRight("equipment_id",equipmentVo.getSearchText());
  177. queryWrapper1.or().like("equipment_name",equipmentVo.getSearchText());
  178. queryWrapper1.or().like("equipment_code",equipmentVo.getSearchText());
  179. });
  180. }
  181. Page<Equipment> page = new Page<>();
  182. page.setCurrent(equipmentVo.getPageNum());
  183. page.setSize(equipmentVo.getPageSize());
  184. Page<Equipment> pageInfo = equipmentMapper.selectPage(page, queryWrapper);
  185. return pageInfo;
  186. }
  187. @Override
  188. public void addStoreEquipment(EquipmentVo equipmentVo) {
  189. UpdateWrapper<Equipment> updateWrapper = new UpdateWrapper<>();
  190. updateWrapper.eq("equipment_id",equipmentVo.getEquipmentId());
  191. updateWrapper.set("store_id",equipmentVo.getStoreId());
  192. equipmentMapper.update(null,updateWrapper);
  193. }
  194. @Override
  195. public Page<Equipment> getEquipmentByStoreId(EquipmentVo equipmentVo) {
  196. QueryWrapper<Equipment> queryWrapper = new QueryWrapper<>();
  197. queryWrapper.eq("store_id",equipmentVo.getStoreId());
  198. Page<Equipment> page = new Page<>();
  199. page.setCurrent(equipmentVo.getPageNum());
  200. page.setSize(equipmentVo.getPageSize());
  201. Page<Equipment> pageInfo = equipmentMapper.selectPage(page, queryWrapper);
  202. return pageInfo;
  203. }
  204. /**
  205. * TODO 待测试
  206. * @param equipmentVo
  207. * @return
  208. */
  209. @Override
  210. public IPage<PlanItemBo> getEquipmentPlanList(EquipmentVo equipmentVo) {
  211. Page<PlanItemBo> page = new Page<>();
  212. page.setCurrent(equipmentVo.getPageNum());
  213. page.setSize(equipmentVo.getPageSize());
  214. QueryWrapper<PlanItemBo> queryWrapper = new QueryWrapper<>();
  215. queryWrapper.eq("equipment_id",equipmentVo.getEquipmentId());
  216. queryWrapper.and(planItemBoQueryWrapper -> {
  217. planItemBoQueryWrapper.eq("dl_plan_item.deleted",0);
  218. });
  219. queryWrapper.and(planItemBoQueryWrapper -> {
  220. planItemBoQueryWrapper.eq("dl_plan.state",1);
  221. });
  222. queryWrapper.and(planItemBoQueryWrapper -> {
  223. planItemBoQueryWrapper.eq("dl_plan.on_state",1);
  224. });
  225. queryWrapper.and(planItemBoQueryWrapper -> {
  226. planItemBoQueryWrapper.gt("plan_end_time",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  227. });
  228. queryWrapper.apply("dl_plan.`plan_id` = dl_plan_item.`plan_id`");
  229. if (equipmentVo.getSearchText() != null && !equipmentVo.getSearchText().equals("")){
  230. queryWrapper.and(planItemBoQueryWrapper -> {
  231. planItemBoQueryWrapper.likeRight("plan_id",equipmentVo.getSearchText()).or()
  232. .like("plan_name",equipmentVo.getSearchText());
  233. });
  234. }
  235. queryWrapper.orderByDesc("sort");
  236. IPage<PlanItemBo> euipmentPlanList = planItemMapper.getEuipmentPlanList(page, queryWrapper);
  237. return euipmentPlanList;
  238. }
  239. @Override
  240. public void updateEquipmentPlan(PlanItemVo planItemVo) {
  241. UpdateWrapper<PlanItem> updateWrapper = new UpdateWrapper<>();
  242. updateWrapper.eq("item_id",planItemVo.getItemId());
  243. updateWrapper.set("sort",planItemVo.getSort());
  244. planItemMapper.update(null,updateWrapper);
  245. }
  246. @Override
  247. public HashMap getEquipmentCount() {
  248. QueryWrapper<Equipment> queryWrapper = new QueryWrapper<>();
  249. queryWrapper.select("state","count(*) as onState");
  250. queryWrapper.groupBy("state");
  251. List<Equipment> equipment = equipmentMapper.selectList(queryWrapper);
  252. HashMap<String, Integer> objectObjectHashMap = new HashMap<>();
  253. int total = 0;
  254. for (Equipment equipment1 : equipment) {
  255. objectObjectHashMap.put(String.valueOf(equipment1.getState()),equipment1.getOnState());
  256. total+=equipment1.getOnState();
  257. }
  258. objectObjectHashMap.put("total",total);
  259. return objectObjectHashMap;
  260. }
  261. @Override
  262. public HashMap getEquipmentList(EquipmentVo equipmentVo) {
  263. QueryWrapper<Equipment> queryWrapper = new QueryWrapper<>();
  264. if (equipmentVo.getSearchText() != null && !equipmentVo.getSearchText().equals("")){
  265. queryWrapper.likeRight("equipment_id",equipmentVo.getSearchText());
  266. queryWrapper.or().like("equipment_name",equipmentVo.getSearchText());
  267. queryWrapper.or().like("equipment_code",equipmentVo.getSearchText());
  268. queryWrapper.or().like("maintain_name",equipmentVo.getSearchText());
  269. queryWrapper.or().likeRight("maintain_telephone",equipmentVo.getSearchText());
  270. }
  271. if (equipmentVo.getState() != null){
  272. queryWrapper.and(equipmentQueryWrapper -> {
  273. equipmentQueryWrapper.eq("state",equipmentVo.getState());
  274. });
  275. }
  276. if (equipmentVo.getOnState() != null){
  277. queryWrapper.and(equipmentQueryWrapper -> {
  278. equipmentQueryWrapper.eq("on_state",equipmentVo.getOnState());
  279. });
  280. }
  281. //查询设备
  282. Page<Equipment> page = new Page();
  283. page.setCurrent(equipmentVo.getPageNum());
  284. page.setSize(equipmentVo.getPageSize());
  285. Page<Equipment> equipmentPage = equipmentMapper.selectPage(page, queryWrapper);
  286. //查询广告数
  287. List<String> collect = equipmentPage.getRecords().stream().map(item -> {
  288. return item.getEquipmentId();
  289. }).collect(Collectors.toList());
  290. HashMap<String, Integer> hashMap = new HashMap<>();
  291. List<EquipmentBo> result = new ArrayList<>();
  292. if(!collect.isEmpty()){
  293. QueryWrapper<PlanItem> queryWrapper1 = new QueryWrapper<>();
  294. queryWrapper1.select("equipment_id","count(*) as sort");
  295. queryWrapper1.in("equipment_id",collect);
  296. queryWrapper1.groupBy("equipment_id");
  297. List<PlanItem> planItems = planItemMapper.selectList(queryWrapper1);
  298. for (PlanItem planItem : planItems) {
  299. hashMap.put(planItem.getEquipmentId(),planItem.getSort());
  300. }
  301. //组装
  302. for (Equipment equipment1 : equipmentPage.getRecords()) {
  303. EquipmentBo equipmentBo = new EquipmentBo(equipment1);
  304. Integer integer = hashMap.get(equipmentBo.getEquipmentId());
  305. if (integer == null){
  306. equipmentBo.setPlanCounnt(0);
  307. }else {
  308. equipmentBo.setPlanCounnt(integer);
  309. }
  310. result.add(equipmentBo);
  311. }
  312. }
  313. HashMap<String, Object> objectObjectHashMap = new HashMap<>();
  314. equipmentPage.setRecords(null);
  315. objectObjectHashMap.put("page",equipmentPage);
  316. objectObjectHashMap.put("data",result);
  317. return objectObjectHashMap;
  318. }
  319. @Override
  320. public void deleteStoreEquipment(String[] equipmentIds) {
  321. UpdateWrapper<Equipment> updateWrapper = new UpdateWrapper<>();
  322. updateWrapper.in("equipment_id",equipmentIds);
  323. updateWrapper.set("store_id",null);
  324. equipmentMapper.update(null,updateWrapper);
  325. }
  326. @Override
  327. public void deleteEquipmentPlan(String[] planItemIds) {
  328. planItemMapper.deleteBatchIds(Arrays.asList(planItemIds));
  329. }
  330. @Override
  331. public String equipmentOnStatedormancy(String equipmentCode) {
  332. //调用接口
  333. return mtStarUtil.dormancy(equipmentCode);
  334. }
  335. @Override
  336. public String equipmentOnStateWakeup(String equipmentCode) {
  337. return mtStarUtil.wakeup(equipmentCode);
  338. }
  339. }