EquipmentServiceImpl.java 16 KB

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