SceneService.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. package com.huaxu.service;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.huaxu.common.Reflections;
  4. import com.huaxu.common.StringUtils;
  5. import com.huaxu.dao.SceneImageMapper;
  6. import com.huaxu.dao.SceneMapper;
  7. import com.huaxu.dto.DeviceDto;
  8. import com.huaxu.entity.DeviceSceneEntity;
  9. import com.huaxu.entity.SceneEntity;
  10. import com.huaxu.entity.SceneImageEntity;
  11. import com.huaxu.entity.SceneTypeEntity;
  12. import com.huaxu.model.AjaxMessage;
  13. import com.huaxu.model.LoginUser;
  14. import com.huaxu.model.ResultStatus;
  15. import com.huaxu.util.OrgInfoUtil;
  16. import com.huaxu.util.Snowflake;
  17. import com.huaxu.util.UserUtil;
  18. import javafx.scene.Scene;
  19. import org.apache.ibatis.annotations.Param;
  20. import org.springframework.beans.BeanUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  24. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  25. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  26. import javax.annotation.Resource;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import java.util.*;
  29. import static com.google.common.collect.Lists.newArrayList;
  30. /**
  31. * 场景信息Service接口
  32. *
  33. * @author: WYY
  34. * @date 2020-11-17 21:15
  35. */
  36. @Service
  37. public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
  38. @Resource
  39. private SceneMapper sceneMapper;
  40. @Resource
  41. private SceneImageService sceneImageService;
  42. @Autowired
  43. private OrgInfoUtil orgInfoUtil;
  44. @Autowired
  45. private DeviceSceneService deviceSceneService;
  46. /**
  47. * 自定义分页查询,含关联实体对像
  48. */
  49. public IPage<SceneEntity> findPage(IPage<SceneEntity> page, SceneEntity sceneEntity) {
  50. LoginUser currentUser = UserUtil.getCurrentUser();
  51. sceneEntity.setTenantId(currentUser.getTenantId());
  52. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  53. sceneEntity.setUserType(currentUser.getType());
  54. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  55. sceneEntity.setPermissonType(currentUser.getPermissonType());
  56. //分页查询父级节点的信息
  57. Page<SceneEntity> sceneEntityPage = sceneMapper.findPage(page, sceneEntity);
  58. //查询子节点的信息
  59. List<SceneEntity> sceneEntities = newArrayList();
  60. for (SceneEntity item : sceneEntityPage.getRecords()) {
  61. sceneEntities.addAll(findByParentLike(item.getId()));
  62. }
  63. for (SceneEntity item : sceneEntities) {
  64. if (item.getCompanyOrgId() != null)
  65. item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId().intValue()));
  66. if (item.getDeptOrgId() != null)
  67. item.setDeptOrgName(orgInfoUtil.getOrgName(item.getDeptOrgId().intValue()));
  68. }
  69. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  70. sceneEntityPage.setRecords(sceneTree);
  71. return sceneEntityPage;
  72. }
  73. public static List<SceneEntity> getSceneTree(List<SceneEntity> list, Long id, Integer leve) {
  74. List<SceneEntity> temList = newArrayList();
  75. if (list != null) {
  76. for (SceneEntity sceneEntity : list) {
  77. if (id.equals(sceneEntity.getParentSceneId())) {
  78. List<SceneEntity> chidren = getSceneTree(list, sceneEntity.getId(), ++leve);
  79. SceneEntity temMeanu = new SceneEntity();
  80. BeanUtils.copyProperties(sceneEntity, temMeanu);
  81. temMeanu.setChildren(chidren);
  82. temList.add(temMeanu);
  83. leve--;
  84. }
  85. }
  86. }
  87. if (temList.size() > 0) {
  88. return temList;
  89. } else {
  90. return null;
  91. }
  92. }
  93. /**
  94. * 查列表
  95. */
  96. public List<SceneEntity> findAllList(SceneEntity sceneEntity) {
  97. LoginUser currentUser = UserUtil.getCurrentUser();
  98. sceneEntity.setTenantId(currentUser.getTenantId());
  99. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  100. sceneEntity.setUserType(currentUser.getType());
  101. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  102. sceneEntity.setPermissonType(currentUser.getPermissonType());
  103. List<SceneEntity> sceneEntities = sceneMapper.findList(sceneEntity);
  104. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  105. return sceneTree;
  106. }
  107. /**
  108. * 查列表
  109. */
  110. public List<SceneEntity> findList(SceneEntity sceneEntity) {
  111. LoginUser currentUser = UserUtil.getCurrentUser();
  112. sceneEntity.setTenantId(currentUser.getTenantId());
  113. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  114. sceneEntity.setUserType(currentUser.getType());
  115. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  116. sceneEntity.setPermissonType(currentUser.getPermissonType());
  117. return sceneMapper.findList(sceneEntity);
  118. }
  119. /**
  120. * 批量删除
  121. */
  122. @Transactional(rollbackFor = Exception.class)
  123. public boolean delSceneByIds(Long[] ids) {
  124. return this.removeByIds(Arrays.asList(ids));
  125. }
  126. /**
  127. * 单个删除
  128. */
  129. public boolean delSceneById(Long id) {
  130. return this.removeById(id);
  131. }
  132. /**
  133. * 保存
  134. */
  135. public boolean addScene(SceneEntity scene) {
  136. LoginUser currentUser = UserUtil.getCurrentUser();
  137. scene.setTenantId(currentUser.getTenantId());
  138. scene.setStatus(1);
  139. if (currentUser != null) {
  140. scene.setCreateBy(currentUser.getName());
  141. scene.setUpdateBy(currentUser.getName());
  142. scene.setDateUpdate(new Date());
  143. scene.setDateCreate(new Date());
  144. }
  145. if (scene.getDeptOrgId() != null && scene.getDeptOrgId() == 0)
  146. scene.setDeptOrgId(null);
  147. // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
  148. if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) {
  149. scene.setParentSceneId(Long.valueOf(0));
  150. } else {
  151. scene.setParentSceneId(scene.getParentSceneId());
  152. }
  153. if (scene.getParentSceneId() == null) {
  154. scene.setParentSceneIds("0,");
  155. }
  156. //查询父节点信息
  157. SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId());
  158. if (this.save(scene)) {
  159. Long id = scene.getId();
  160. // 设置新的父节点串
  161. if (sceneEntity != null) {
  162. scene.setParentSceneIds(sceneEntity.getParentSceneIds() + id + ",");
  163. } else {
  164. scene.setParentSceneIds("0," + id + ",");
  165. }
  166. sceneMapper.updateById(scene);
  167. //增加场景图片
  168. if (scene.getSceneImages() != null) {
  169. for (SceneImageEntity sceneImage : scene.getSceneImages()) {
  170. sceneImage.setCreateBy(currentUser.getName());
  171. sceneImage.setDateCreate(new Date());
  172. sceneImage.setDateUpdate(new Date());
  173. sceneImage.setSceneId(id);
  174. sceneImage.setStatus(1);
  175. sceneImage.setUpdateBy(currentUser.getName());
  176. }
  177. sceneImageService.saveBatch(scene.getSceneImages());
  178. }
  179. return true;
  180. }
  181. return false;
  182. }
  183. /**
  184. * 根据父级ID查询所有子节点及本身
  185. */
  186. public List<SceneEntity> findByParentLike(Long id) {
  187. LoginUser currentUser = UserUtil.getCurrentUser();
  188. SceneEntity scene = new SceneEntity();
  189. if (id != null)
  190. scene.setParentSceneIds("%," + id + ",%");
  191. scene.setTenantId(currentUser.getTenantId());
  192. scene.setStatus(1);
  193. scene.setProgramItems(currentUser.getProgramItemList());
  194. scene.setUserType(currentUser.getType());
  195. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  196. scene.setPermissonType(currentUser.getPermissonType());
  197. List<SceneEntity> list = sceneMapper.findByParentIdsLike(scene);
  198. return list;
  199. }
  200. /**
  201. * 根据父级ID查询所有子节点及本身
  202. */
  203. public List<Long> findByParentIdsLike(Long id) {
  204. LoginUser currentUser = UserUtil.getCurrentUser();
  205. SceneEntity scene = new SceneEntity();
  206. if (id != null)
  207. scene.setParentSceneIds("%," + id + ",%");
  208. scene.setTenantId(currentUser.getTenantId());
  209. scene.setStatus(1);
  210. scene.setProgramItems(currentUser.getProgramItemList());
  211. scene.setUserType(currentUser.getType());
  212. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  213. scene.setPermissonType(currentUser.getPermissonType());
  214. List<SceneEntity> list = sceneMapper.findByParentIdsLike(scene);
  215. List<Long> longs = newArrayList();
  216. for (SceneEntity item : list) {
  217. longs.add(item.getId());
  218. }
  219. return longs;
  220. }
  221. /**
  222. * 根据父级ID查询所有子节点及本身
  223. */
  224. public List<Long> findByParentIdsByCom(Long id) {
  225. LoginUser currentUser = UserUtil.getCurrentUser();
  226. SceneEntity scene = new SceneEntity();
  227. scene.setTenantId(currentUser.getTenantId());
  228. scene.setStatus(1);
  229. scene.setCompanyOrgId(id);
  230. scene.setProgramItems(currentUser.getProgramItemList());
  231. scene.setUserType(currentUser.getType());
  232. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  233. scene.setPermissonType(currentUser.getPermissonType());
  234. List<SceneEntity> list = sceneMapper.findByParentIdsLike(scene);
  235. List<Long> longs = newArrayList();
  236. for (SceneEntity item : list) {
  237. longs.add(item.getId());
  238. }
  239. return longs;
  240. }
  241. /**
  242. * 修改根居ID
  243. */
  244. public boolean updateSceneById(SceneEntity scene) {
  245. LoginUser currentUser = UserUtil.getCurrentUser();
  246. scene.setUpdateBy(currentUser.getName());
  247. if (scene.getDeptOrgId() != null && scene.getDeptOrgId() == 0)
  248. scene.setDeptOrgId(null);
  249. // 获取修改前的parentIds,用于更新子节点的parentIds
  250. SceneEntity cScene = sceneMapper.findSceneById(scene.getId());
  251. String oldParentIds = cScene.getParentSceneIds();
  252. // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
  253. if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) {
  254. scene.setParentSceneId(Long.valueOf(0));
  255. } else {
  256. scene.setParentSceneId(scene.getParentSceneId());
  257. }
  258. if (scene.getParentSceneId() == null) {
  259. scene.setParentSceneIds("0,");
  260. }
  261. //查询父节点信息
  262. SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId());
  263. if (this.updateById(scene)) {
  264. // 设置新的父节点串
  265. if (sceneEntity != null) {
  266. scene.setParentSceneIds(sceneEntity.getParentSceneIds() + scene.getId() + ",");
  267. } else {
  268. scene.setParentSceneIds("0," + scene.getId() + ",");
  269. }
  270. sceneMapper.updateById(scene);
  271. // 更新子节点 parentIds
  272. Class<SceneEntity> entityClass = Reflections.getClassGenricType(getClass(), 1);
  273. SceneEntity o = null;
  274. try {
  275. o = entityClass.newInstance();
  276. } catch (Exception e) {
  277. }
  278. o.setParentSceneIds("%," + scene.getId() + ",%");
  279. List<SceneEntity> list = sceneMapper.findByParentIdsLike(o);
  280. for (SceneEntity e : list) {
  281. if (!e.getId().equals(scene.getId()) && e.getParentSceneId() != null && oldParentIds != null) {
  282. e.setParentSceneIds(e.getParentSceneIds().replace(oldParentIds, scene.getParentSceneIds()));
  283. e.setDeptOrgId(scene.getDeptOrgId());
  284. e.setCompanyOrgId(scene.getCompanyOrgId());
  285. sceneMapper.updateById(e);
  286. }
  287. }
  288. //删除之前的图片信息
  289. sceneImageService.updateBySceneId(scene.getId());
  290. //增加场景图片
  291. if (scene.getSceneImages() != null) {
  292. for (SceneImageEntity sceneImage : scene.getSceneImages()) {
  293. sceneImage.setCreateBy(currentUser.getName());
  294. sceneImage.setDateCreate(new Date());
  295. sceneImage.setDateUpdate(new Date());
  296. sceneImage.setSceneId(scene.getId());
  297. sceneImage.setStatus(1);
  298. sceneImage.setUpdateBy(currentUser.getName());
  299. }
  300. sceneImageService.saveBatch(scene.getSceneImages());
  301. }
  302. return true;
  303. }
  304. return false;
  305. }
  306. /**
  307. * 根居ID获取对象
  308. */
  309. public SceneEntity findSceneById(Long id) {
  310. SceneEntity sceneEntity = sceneMapper.findSceneById(id);
  311. SceneImageEntity sceneImageEntity = new SceneImageEntity();
  312. sceneImageEntity.setSceneId(id);
  313. List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
  314. sceneEntity.setSceneImages(sceneImageEntities);
  315. return sceneEntity;
  316. }
  317. public List<SceneEntity> findBySceneTypeIds(Long[] Ids) {
  318. return sceneMapper.findBySceneTypeIds(Ids);
  319. }
  320. public List<SceneEntity> findByParentSceneIds(Long[] Ids) {
  321. return sceneMapper.findByParentSceneIds(Ids);
  322. }
  323. public List<SceneEntity> selectByTypeName(SceneEntity sceneEntity) {
  324. LoginUser currentUser = UserUtil.getCurrentUser();
  325. sceneEntity.setTenantId(currentUser.getTenantId());
  326. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  327. sceneEntity.setUserType(currentUser.getType());
  328. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  329. sceneEntity.setPermissonType(currentUser.getPermissonType());
  330. return sceneMapper.selectByTypeName(sceneEntity);
  331. }
  332. public List<SceneEntity> findByParentId(Long id) {
  333. SceneEntity sceneEntity = new SceneEntity();
  334. LoginUser currentUser = UserUtil.getCurrentUser();
  335. sceneEntity.setTenantId(currentUser.getTenantId());
  336. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  337. sceneEntity.setUserType(currentUser.getType());
  338. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  339. sceneEntity.setPermissonType(currentUser.getPermissonType());
  340. if (id != null)
  341. sceneEntity.setParentSceneIds("%," + id + ",%");
  342. List<SceneEntity> sceneEntities = sceneMapper.findByParentId(sceneEntity);
  343. for (SceneEntity item : sceneEntities) {
  344. SceneImageEntity sceneImageEntity = new SceneImageEntity();
  345. sceneImageEntity.setSceneId(item.getId());
  346. List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
  347. item.setSceneImages(sceneImageEntities);
  348. }
  349. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  350. return sceneTree;
  351. }
  352. /**
  353. * 根据场景id查询一级场景信息
  354. */
  355. public SceneEntity findParentSceneById(Long id) {
  356. return sceneMapper.findParentSceneById(id);
  357. }
  358. public void saveUpdateBatch(List<DeviceSceneEntity> deviceScenes) {
  359. //先进行查询判断哪些设备已经被保存
  360. }
  361. public List<SceneEntity> selectByTypeNameForCom(SceneEntity sceneEntity, Long companyOrgId) {
  362. LoginUser currentUser = UserUtil.getCurrentUser();
  363. sceneEntity.setTenantId(currentUser.getTenantId());
  364. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  365. sceneEntity.setUserType(currentUser.getType());
  366. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  367. sceneEntity.setPermissonType(currentUser.getPermissonType());
  368. sceneEntity.setCompanyOrgId(companyOrgId);
  369. return sceneMapper.selectByTypeName(sceneEntity);
  370. }
  371. }