package com.huaxu.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.huaxu.common.Reflections; import com.huaxu.common.StringUtils; import com.huaxu.dao.SceneImageMapper; import com.huaxu.dao.SceneMapper; import com.huaxu.dto.DeviceDto; import com.huaxu.entity.DeviceSceneEntity; import com.huaxu.entity.SceneEntity; import com.huaxu.entity.SceneImageEntity; import com.huaxu.entity.SceneTypeEntity; import com.huaxu.model.AjaxMessage; import com.huaxu.model.LoginUser; import com.huaxu.model.ResultStatus; import com.huaxu.util.OrgInfoUtil; import com.huaxu.util.Snowflake; import com.huaxu.util.UserUtil; import javafx.scene.Scene; import org.apache.ibatis.annotations.Param; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import java.util.*; import static com.google.common.collect.Lists.newArrayList; /** * 场景信息Service接口 * * @author: WYY * @date 2020-11-17 21:15 */ @Service public class SceneService extends ServiceImpl { @Resource private SceneMapper sceneMapper; @Resource private SceneImageService sceneImageService; @Autowired private OrgInfoUtil orgInfoUtil; @Autowired private DeviceSceneService deviceSceneService; /** * 自定义分页查询,含关联实体对像 */ public IPage findPage(IPage page, SceneEntity sceneEntity) { LoginUser currentUser = UserUtil.getCurrentUser(); sceneEntity.setTenantId(currentUser.getTenantId()); sceneEntity.setProgramItems(currentUser.getProgramItemList()); sceneEntity.setUserType(currentUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 sceneEntity.setPermissonType(currentUser.getPermissonType()); //分页查询父级节点的信息 Page sceneEntityPage = sceneMapper.findPage(page, sceneEntity); //查询子节点的信息 List sceneEntities = newArrayList(); for (SceneEntity item : sceneEntityPage.getRecords()) { sceneEntities.addAll(findByParentLike(item.getId())); } for (SceneEntity item : sceneEntities) { if (item.getCompanyOrgId() != null) item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId().intValue())); if (item.getDeptOrgId() != null) item.setDeptOrgName(orgInfoUtil.getOrgName(item.getDeptOrgId().intValue())); } List sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1); sceneEntityPage.setRecords(sceneTree); return sceneEntityPage; } public static List getSceneTree(List list, Long id, Integer leve) { List temList = newArrayList(); if (list != null) { for (SceneEntity sceneEntity : list) { if (id.equals(sceneEntity.getParentSceneId())) { List chidren = getSceneTree(list, sceneEntity.getId(), ++leve); SceneEntity temMeanu = new SceneEntity(); BeanUtils.copyProperties(sceneEntity, temMeanu); temMeanu.setChildren(chidren); temList.add(temMeanu); leve--; } } } if (temList.size() > 0) { return temList; } else { return null; } } /** * 查列表 */ public List findAllList(SceneEntity sceneEntity) { LoginUser currentUser = UserUtil.getCurrentUser(); sceneEntity.setTenantId(currentUser.getTenantId()); sceneEntity.setProgramItems(currentUser.getProgramItemList()); sceneEntity.setUserType(currentUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 sceneEntity.setPermissonType(currentUser.getPermissonType()); List sceneEntities = sceneMapper.findList(sceneEntity); List sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1); return sceneTree; } /** * 查列表 */ public List findList(SceneEntity sceneEntity) { LoginUser currentUser = UserUtil.getCurrentUser(); sceneEntity.setTenantId(currentUser.getTenantId()); sceneEntity.setProgramItems(currentUser.getProgramItemList()); sceneEntity.setUserType(currentUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 sceneEntity.setPermissonType(currentUser.getPermissonType()); return sceneMapper.findList(sceneEntity); } /** * 批量删除 */ @Transactional(rollbackFor = Exception.class) public boolean delSceneByIds(Long[] ids) { return this.removeByIds(Arrays.asList(ids)); } /** * 单个删除 */ public boolean delSceneById(Long id) { return this.removeById(id); } /** * 保存 */ public boolean addScene(SceneEntity scene) { LoginUser currentUser = UserUtil.getCurrentUser(); scene.setTenantId(currentUser.getTenantId()); scene.setStatus(1); if (currentUser != null) { scene.setCreateBy(currentUser.getName()); scene.setUpdateBy(currentUser.getName()); scene.setDateUpdate(new Date()); scene.setDateCreate(new Date()); } if (scene.getDeptOrgId() != null && scene.getDeptOrgId() == 0) scene.setDeptOrgId(null); // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体 if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) { scene.setParentSceneId(Long.valueOf(0)); } else { scene.setParentSceneId(scene.getParentSceneId()); } if (scene.getParentSceneId() == null) { scene.setParentSceneIds("0,"); } //查询父节点信息 SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId()); if (this.save(scene)) { Long id = scene.getId(); // 设置新的父节点串 if (sceneEntity != null) { scene.setParentSceneIds(sceneEntity.getParentSceneIds() + id + ","); } else { scene.setParentSceneIds("0," + id + ","); } sceneMapper.updateById(scene); //增加场景图片 if (scene.getSceneImages() != null) { for (SceneImageEntity sceneImage : scene.getSceneImages()) { sceneImage.setCreateBy(currentUser.getName()); sceneImage.setDateCreate(new Date()); sceneImage.setDateUpdate(new Date()); sceneImage.setSceneId(id); sceneImage.setStatus(1); sceneImage.setUpdateBy(currentUser.getName()); } sceneImageService.saveBatch(scene.getSceneImages()); } return true; } return false; } /** * 根据父级ID查询所有子节点及本身 */ public List findByParentLike(Long id) { LoginUser currentUser = UserUtil.getCurrentUser(); SceneEntity scene = new SceneEntity(); if (id != null) scene.setParentSceneIds("%," + id + ",%"); scene.setTenantId(currentUser.getTenantId()); scene.setStatus(1); scene.setProgramItems(currentUser.getProgramItemList()); scene.setUserType(currentUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 scene.setPermissonType(currentUser.getPermissonType()); List list = sceneMapper.findByParentIdsLike(scene); return list; } /** * 根据父级ID查询所有子节点及本身 */ public List findByParentIdsLike(Long id) { LoginUser currentUser = UserUtil.getCurrentUser(); SceneEntity scene = new SceneEntity(); if (id != null) scene.setParentSceneIds("%," + id + ",%"); scene.setTenantId(currentUser.getTenantId()); scene.setStatus(1); scene.setProgramItems(currentUser.getProgramItemList()); scene.setUserType(currentUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 scene.setPermissonType(currentUser.getPermissonType()); List list = sceneMapper.findByParentIdsLike(scene); List longs = newArrayList(); for (SceneEntity item : list) { longs.add(item.getId()); } return longs; } /** * 修改根居ID */ public boolean updateSceneById(SceneEntity scene) { LoginUser currentUser = UserUtil.getCurrentUser(); scene.setUpdateBy(currentUser.getName()); if (scene.getDeptOrgId() != null && scene.getDeptOrgId() == 0) scene.setDeptOrgId(null); // 获取修改前的parentIds,用于更新子节点的parentIds SceneEntity cScene = sceneMapper.findSceneById(scene.getId()); String oldParentIds = cScene.getParentSceneIds(); // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体 if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) { scene.setParentSceneId(Long.valueOf(0)); } else { scene.setParentSceneId(scene.getParentSceneId()); } if (scene.getParentSceneId() == null) { scene.setParentSceneIds("0,"); } //查询父节点信息 SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId()); if (this.updateById(scene)) { // 设置新的父节点串 if (sceneEntity != null) { scene.setParentSceneIds(sceneEntity.getParentSceneIds() + scene.getId() + ","); } else { scene.setParentSceneIds("0," + scene.getId() + ","); } sceneMapper.updateById(scene); // 更新子节点 parentIds Class entityClass = Reflections.getClassGenricType(getClass(), 1); SceneEntity o = null; try { o = entityClass.newInstance(); } catch (Exception e) { } o.setParentSceneIds("%," + scene.getId() + ",%"); List list = sceneMapper.findByParentIdsLike(o); for (SceneEntity e : list) { if (!e.getId().equals(scene.getId()) && e.getParentSceneId() != null && oldParentIds != null) { e.setParentSceneIds(e.getParentSceneIds().replace(oldParentIds, scene.getParentSceneIds())); e.setDeptOrgId(scene.getDeptOrgId()); e.setCompanyOrgId(scene.getCompanyOrgId()); sceneMapper.updateById(e); } } //删除之前的图片信息 sceneImageService.updateBySceneId(scene.getId()); //增加场景图片 if (scene.getSceneImages() != null) { for (SceneImageEntity sceneImage : scene.getSceneImages()) { sceneImage.setCreateBy(currentUser.getName()); sceneImage.setDateCreate(new Date()); sceneImage.setDateUpdate(new Date()); sceneImage.setSceneId(scene.getId()); sceneImage.setStatus(1); sceneImage.setUpdateBy(currentUser.getName()); } sceneImageService.saveBatch(scene.getSceneImages()); } return true; } return false; } /** * 根居ID获取对象 */ public SceneEntity findSceneById(Long id) { SceneEntity sceneEntity = sceneMapper.findSceneById(id); SceneImageEntity sceneImageEntity = new SceneImageEntity(); sceneImageEntity.setSceneId(id); List sceneImageEntities = sceneImageService.findList(sceneImageEntity); sceneEntity.setSceneImages(sceneImageEntities); return sceneEntity; } public List findBySceneTypeIds(Long[] Ids) { return sceneMapper.findBySceneTypeIds(Ids); } public List findByParentSceneIds(Long[] Ids) { return sceneMapper.findByParentSceneIds(Ids); } public List selectByTypeName(SceneEntity sceneEntity) { LoginUser currentUser = UserUtil.getCurrentUser(); sceneEntity.setTenantId(currentUser.getTenantId()); sceneEntity.setProgramItems(currentUser.getProgramItemList()); sceneEntity.setUserType(currentUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 sceneEntity.setPermissonType(currentUser.getPermissonType()); return sceneMapper.selectByTypeName(sceneEntity); } public List findByParentId(Long id) { SceneEntity sceneEntity = new SceneEntity(); LoginUser currentUser = UserUtil.getCurrentUser(); sceneEntity.setTenantId(currentUser.getTenantId()); sceneEntity.setProgramItems(currentUser.getProgramItemList()); sceneEntity.setUserType(currentUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 sceneEntity.setPermissonType(currentUser.getPermissonType()); if (id != null) sceneEntity.setParentSceneIds("%," + id + ",%"); List sceneEntities = sceneMapper.findByParentId(sceneEntity); for (SceneEntity item : sceneEntities) { SceneImageEntity sceneImageEntity = new SceneImageEntity(); sceneImageEntity.setSceneId(item.getId()); List sceneImageEntities = sceneImageService.findList(sceneImageEntity); item.setSceneImages(sceneImageEntities); } List sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1); return sceneTree; } /** * 根据场景id查询一级场景信息 */ public SceneEntity findParentSceneById(Long id) { return sceneMapper.findParentSceneById(id); } public void saveUpdateBatch(List deviceScenes) { //先进行查询判断哪些设备已经被保存 } }