| 
					
				 | 
			
			
				@ -2,13 +2,25 @@ package com.yihu.jw.base.service.module; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.base.contant.CommonContant; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.base.dao.module.ModuleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.base.dao.module.SaasModuleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.base.dao.module.SaasTypeModuleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.base.dao.saas.SaasDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.base.dao.saas.SaasTypeDictDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.module.ModuleDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.module.SaasModuleDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.module.SaasTypeModuleDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.saas.SaasDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.saas.SaasTypeDictDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.mysql.query.BaseJpaService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Service - 模块 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by chenweida on 2017/5/19. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -18,6 +30,14 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ModuleDao moduleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SaasModuleDao saasModuleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SaasTypeModuleDao saasTypeModuleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SaasTypeDictDao saasTypeDictDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SaasDao saasDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 新增模块 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -29,13 +49,118 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isBlank(moduleDO.getParentId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            moduleDO.setParentId(CommonContant.DEFAULT_PARENTID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDO.setDel(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDao.save(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //若新增某必选业务模块,则需为所有已创建的租户和租户类型添加此业务模块 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        addSubModule(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return moduleDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 新增模块时,新增租户和租户类型的模块 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param moduleDO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void addSubModule(ModuleDO moduleDO){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (ModuleDO.Must.must.getValue().equals(moduleDO.getIsMust())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //判断父模块是否必选 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            boolean parentIsMust = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ModuleDO parentModule = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(!CommonContant.DEFAULT_PARENTID.equals(moduleDO.getParentId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                parentModule = moduleDao.findOne(moduleDO.getParentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(ModuleDO.Must.nonMust.getValue().equals(parentModule.getIsMust())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    parentIsMust = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //租户类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Iterable<SaasTypeDictDO> saasTypeDictDOs = saasTypeDictDao.findAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<SaasTypeModuleDO> saasTypeModuleDOList = new ArrayList<>(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            while (saasTypeDictDOs.iterator().hasNext()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                SaasTypeDictDO saasTypeDictDO = saasTypeDictDOs.iterator().next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                SaasTypeModuleDO saasTypeModuleDO = new SaasTypeModuleDO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setDel(moduleDO.getDel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setStatus(moduleDO.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setIsEnd(moduleDO.getIsEnd()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setIsMust(moduleDO.getIsMust()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setModuleId(moduleDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setParentModuleId(moduleDO.getParentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setName(moduleDO.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setRemark(moduleDO.getRemark()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setSaasTypeId(saasTypeDictDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setType(moduleDO.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDO.setUrl(moduleDO.getUrl()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasTypeModuleDOList.add(saasTypeModuleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return moduleDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //父模块非必选 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(!parentIsMust){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    int count = saasTypeModuleDao.isExistModule(parentModule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(count==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        SaasTypeModuleDO typeModuleDO = new SaasTypeModuleDO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setDel(parentModule.getDel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setStatus(parentModule.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setIsEnd(parentModule.getIsEnd()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setIsMust(parentModule.getIsMust()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setModuleId(parentModule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setParentModuleId(parentModule.getParentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setName(parentModule.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setRemark(parentModule.getRemark()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setSaasTypeId(saasTypeDictDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setType(parentModule.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        typeModuleDO.setUrl(parentModule.getUrl()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasTypeModuleDOList.add(typeModuleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            saasTypeModuleDao.save(saasTypeModuleDOList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //租户 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Iterable<SaasDO> saasDOs = saasDao.findAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<SaasModuleDO> saasModuleDOList = new ArrayList<>(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            while (saasDOs.iterator().hasNext()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                SaasDO saasDO = saasDOs.iterator().next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                SaasModuleDO saasModuleDO = new SaasModuleDO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setDel(moduleDO.getDel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setStatus(moduleDO.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setIsEnd(moduleDO.getIsEnd()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setIsMust(moduleDO.getIsMust()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setModuleId(moduleDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setParentModuleId(moduleDO.getParentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setName(moduleDO.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setRemark(moduleDO.getRemark()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setSaasId(saasDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setType(moduleDO.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDO.setUrl(moduleDO.getUrl()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                saasModuleDOList.add(saasModuleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //父模块非必选 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(!parentIsMust){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    int count = saasModuleDao.isExistModule(parentModule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(count==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        SaasModuleDO saasModule = new SaasModuleDO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setDel(parentModule.getDel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setStatus(parentModule.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setIsEnd(parentModule.getIsEnd()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setIsMust(parentModule.getIsMust()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setModuleId(parentModule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setParentModuleId(parentModule.getParentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setName(parentModule.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setRemark(parentModule.getRemark()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setSaasId(saasDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setType(parentModule.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModule.setUrl(parentModule.getUrl()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        saasModuleDOList.add(saasModule); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            saasModuleDao.save(saasModuleDOList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -45,9 +170,54 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void updateStatus(String id,Integer status){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDao.updateStatus(id,status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ModuleDO moduleDO = moduleDao.findOne(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //若原业务模块为失效/生效,操作生效/失效后的变更逻辑如以下流程图所示 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(ModuleDO.Status.available.getValue().equals(status)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //生效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            available(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //失效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            unavailable(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 生效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param moduleDO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void available(ModuleDO moduleDO){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDO.setStatus(ModuleDO.Status.unAvailable.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDao.save(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        addSubModule(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ModuleDO parentModule = moduleDao.findOne(moduleDO.getParentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(ModuleDO.Status.unAvailable.getValue().equals(parentModule.getStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            available(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 失效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param moduleDO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void unavailable(ModuleDO moduleDO){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //把本身失效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDO.setStatus(ModuleDO.Status.unAvailable.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDao.save(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        saasTypeModuleDao.deleteByModuleId(moduleDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        saasModuleDao.deleteByModuleId(moduleDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //把子类失效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<ModuleDO> moduleDOList = moduleDao.findByParentId(moduleDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        moduleDOList.forEach(module->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(ModuleDO.Status.available.getValue().equals(module.getStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                unavailable(moduleDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 |