SceneService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  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.entity.SceneEntity;
  8. import com.huaxu.entity.SceneImageEntity;
  9. import com.huaxu.entity.SceneTypeEntity;
  10. import com.huaxu.model.AjaxMessage;
  11. import com.huaxu.model.LoginUser;
  12. import com.huaxu.model.ResultStatus;
  13. import com.huaxu.util.Snowflake;
  14. import com.huaxu.util.UserUtil;
  15. import javafx.scene.Scene;
  16. import org.apache.ibatis.annotations.Param;
  17. import org.springframework.beans.BeanUtils;
  18. import org.springframework.stereotype.Service;
  19. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  20. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  21. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  22. import javax.annotation.Resource;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import java.util.Date;
  25. import java.util.Map;
  26. import java.util.List;
  27. import java.util.Arrays;
  28. import static com.google.common.collect.Lists.newArrayList;
  29. /**
  30. * 场景信息Service接口
  31. *
  32. * @author: WYY
  33. * @date 2020-11-17 21:15
  34. */
  35. @Service
  36. public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
  37. @Resource
  38. private SceneMapper sceneMapper;
  39. @Resource
  40. private SceneImageService sceneImageService;
  41. /**
  42. * 自定义分页查询,含关联实体对像
  43. */
  44. public IPage<SceneEntity> findPage(IPage<SceneEntity> page, SceneEntity sceneEntity) {
  45. LoginUser currentUser = UserUtil.getCurrentUser();
  46. sceneEntity.setTenantId(currentUser.getTenantId());
  47. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  48. sceneEntity.setUserType(currentUser.getType());
  49. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  50. sceneEntity.setPermissonType(currentUser.getPermissonType());
  51. //分页查询父级节点的信息
  52. Page<SceneEntity> sceneEntityPage = sceneMapper.findPage(page, sceneEntity);
  53. //查询子节点的信息
  54. for (SceneEntity item : sceneEntityPage.getRecords()) {
  55. SceneEntity parentItem = new SceneEntity();
  56. parentItem.setParentSceneId(item.getId());
  57. List<SceneEntity> sceneEntities = findList(parentItem);
  58. item.setChildren(sceneEntities);
  59. }
  60. return sceneEntityPage;
  61. }
  62. public static List<SceneEntity> getSceneTree(List<SceneEntity> list, Long id, Integer leve) {
  63. List<SceneEntity> temList = newArrayList();
  64. if (list != null) {
  65. for (SceneEntity sceneEntity : list) {
  66. if (id.equals(sceneEntity.getParentSceneId())) {
  67. List<SceneEntity> chidren = getSceneTree(list, sceneEntity.getId(), ++leve);
  68. SceneEntity temMeanu = new SceneEntity();
  69. BeanUtils.copyProperties(sceneEntity, temMeanu);
  70. temMeanu.setChildren(chidren);
  71. temList.add(temMeanu);
  72. leve--;
  73. }
  74. }
  75. }
  76. if (temList.size() > 0) {
  77. return temList;
  78. } else {
  79. return null;
  80. }
  81. }
  82. /**
  83. * 查列表
  84. */
  85. public List<SceneEntity> findAllList(SceneEntity sceneEntity) {
  86. LoginUser currentUser = UserUtil.getCurrentUser();
  87. sceneEntity.setTenantId(currentUser.getTenantId());
  88. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  89. sceneEntity.setUserType(currentUser.getType());
  90. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  91. sceneEntity.setPermissonType(currentUser.getPermissonType());
  92. List<SceneEntity> sceneEntities = sceneMapper.findList(sceneEntity);
  93. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  94. return sceneTree;
  95. }
  96. /**
  97. * 查列表
  98. */
  99. public List<SceneEntity> findList(SceneEntity sceneEntity) {
  100. LoginUser currentUser = UserUtil.getCurrentUser();
  101. sceneEntity.setTenantId(currentUser.getTenantId());
  102. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  103. sceneEntity.setUserType(currentUser.getType());
  104. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  105. sceneEntity.setPermissonType(currentUser.getPermissonType());
  106. return sceneMapper.findList(sceneEntity);
  107. }
  108. /**
  109. * 批量删除
  110. */
  111. @Transactional(rollbackFor = Exception.class)
  112. public boolean delSceneByIds(Long[] ids) {
  113. return this.removeByIds(Arrays.asList(ids));
  114. }
  115. /**
  116. * 单个删除
  117. */
  118. public boolean delSceneById(Long id) {
  119. return this.removeById(id);
  120. }
  121. /**
  122. * 保存
  123. */
  124. public boolean addScene(SceneEntity scene) {
  125. LoginUser currentUser = UserUtil.getCurrentUser();
  126. scene.setTenantId(currentUser.getTenantId());
  127. scene.setStatus(1);
  128. // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
  129. if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) {
  130. scene.setParentSceneId(Long.valueOf(0));
  131. } else {
  132. scene.setParentSceneId(scene.getParentSceneId());
  133. }
  134. if (scene.getParentSceneId() == null) {
  135. scene.setParentSceneIds("0,");
  136. }
  137. //查询父节点信息
  138. SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId());
  139. if (this.save(scene)) {
  140. Long id = scene.getId();
  141. // 设置新的父节点串
  142. if (sceneEntity != null) {
  143. scene.setParentSceneIds(sceneEntity.getParentSceneIds() + id + ",");
  144. } else {
  145. scene.setParentSceneIds("0," + id + ",");
  146. }
  147. sceneMapper.updateById(scene);
  148. //增加场景图片
  149. if (scene.getSceneImages() != null) {
  150. for (SceneImageEntity sceneImage : scene.getSceneImages()) {
  151. sceneImage.setCreateBy(currentUser.getName());
  152. sceneImage.setDateCreate(new Date());
  153. sceneImage.setDateUpdate(new Date());
  154. sceneImage.setSceneId(id);
  155. sceneImage.setStatus(1);
  156. sceneImage.setUpdateBy(currentUser.getName());
  157. }
  158. sceneImageService.saveBatch(scene.getSceneImages());
  159. }
  160. return true;
  161. }
  162. return false;
  163. }
  164. /**
  165. * 根据父级ID查询所有子节点及本身
  166. */
  167. public List<Long> findByParentIdsLike(Long id) {
  168. LoginUser currentUser = UserUtil.getCurrentUser();
  169. SceneEntity scene = new SceneEntity();
  170. if (id != null)
  171. scene.setParentSceneIds("%," + id + ",%");
  172. scene.setTenantId(currentUser.getTenantId());
  173. scene.setStatus(1);
  174. scene.setProgramItems(currentUser.getProgramItemList());
  175. scene.setUserType(currentUser.getType());
  176. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  177. scene.setPermissonType(currentUser.getPermissonType());
  178. List<SceneEntity> list = sceneMapper.findByParentIdsLike(scene);
  179. List<Long> longs = newArrayList();
  180. for (SceneEntity item : list) {
  181. longs.add(item.getId());
  182. }
  183. return longs;
  184. }
  185. /**
  186. * 修改根居ID
  187. */
  188. public boolean updateSceneById(SceneEntity scene) {
  189. LoginUser currentUser = UserUtil.getCurrentUser();
  190. scene.setUpdateBy(currentUser.getName());
  191. // 获取修改前的parentIds,用于更新子节点的parentIds
  192. SceneEntity cScene = sceneMapper.findSceneById(scene.getId());
  193. String oldParentIds = cScene.getParentSceneIds();
  194. // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
  195. if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) {
  196. scene.setParentSceneId(Long.valueOf(0));
  197. } else {
  198. scene.setParentSceneId(scene.getParentSceneId());
  199. }
  200. if (scene.getParentSceneId() == null) {
  201. scene.setParentSceneIds("0,");
  202. }
  203. //查询父节点信息
  204. SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId());
  205. if (this.updateById(scene)) {
  206. // 设置新的父节点串
  207. if (sceneEntity != null) {
  208. scene.setParentSceneIds(sceneEntity.getParentSceneIds() + scene.getId() + ",");
  209. } else {
  210. scene.setParentSceneIds("0," + scene.getId() + ",");
  211. }
  212. sceneMapper.updateById(scene);
  213. // 更新子节点 parentIds
  214. Class<SceneEntity> entityClass = Reflections.getClassGenricType(getClass(), 1);
  215. SceneEntity o = null;
  216. try {
  217. o = entityClass.newInstance();
  218. } catch (Exception e) {
  219. }
  220. o.setParentSceneIds("%,"+scene.getId()+",%");
  221. List<SceneEntity> list = sceneMapper.findByParentIdsLike(o);
  222. for (SceneEntity e : list) {
  223. if (!e.getId().equals(scene.getId()) && e.getParentSceneId() != null && oldParentIds != null) {
  224. e.setParentSceneIds(e.getParentSceneIds().replace(oldParentIds, scene.getParentSceneIds()));
  225. sceneMapper.updateById(e);
  226. }
  227. }
  228. //删除之前的图片信息
  229. sceneImageService.updateBySceneId(scene.getId());
  230. //增加场景图片
  231. if(scene.getSceneImages()!=null) {
  232. for (SceneImageEntity sceneImage : scene.getSceneImages()) {
  233. sceneImage.setCreateBy(currentUser.getName());
  234. sceneImage.setDateCreate(new Date());
  235. sceneImage.setDateUpdate(new Date());
  236. sceneImage.setSceneId(scene.getId());
  237. sceneImage.setStatus(1);
  238. sceneImage.setUpdateBy(currentUser.getName());
  239. }
  240. sceneImageService.saveBatch(scene.getSceneImages());
  241. }
  242. return true;
  243. }
  244. return false;
  245. }
  246. /**
  247. * 根居ID获取对象
  248. */
  249. public SceneEntity findSceneById(Long id) {
  250. return sceneMapper.findSceneById(id);
  251. }
  252. public List<SceneEntity> findBySceneTypeIds(Long[] Ids) {
  253. return sceneMapper.findBySceneTypeIds(Ids);
  254. }
  255. public List<SceneEntity> findByParentSceneIds(Long[] Ids) {
  256. return sceneMapper.findByParentSceneIds(Ids);
  257. }
  258. }