RoleServiceImpl.java 5.35 KB
package com.bsth.service.sys.impl;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;

import com.bsth.data.BasicData;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.entity.sys.Resource;
import com.bsth.repository.sys.ResourceRepository;
import com.bsth.security.SecurityMetadataSourceService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.stereotype.Service;

import com.bsth.common.ResponseCode;
import com.bsth.entity.sys.Module;
import com.bsth.entity.sys.Role;
import com.bsth.entity.sys.SysUser;
import com.bsth.repository.sys.ModuleRepository;
import com.bsth.repository.sys.RoleRepository;
import com.bsth.service.impl.BaseServiceImpl;
import com.bsth.service.sys.RoleService;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;

@Service
public class RoleServiceImpl extends BaseServiceImpl<Role, Integer> implements
		RoleService {

	Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	RoleRepository roleRepository;

	@Autowired
	ModuleRepository moduleRepository;

	@Autowired
	ResourceRepository resourceRepository;

	@Autowired
    SecurityMetadataSourceService securityMetadataSourceService;

	@Autowired
	JdbcTemplate jdbcTemplate;
	
	SimpleDateFormat sdfMinute = new SimpleDateFormat("yyyy-MM-dd HH:mm");

	@Override
	public Map<String, Object> save(Role t) {
		if (t.getId() != null) {
			// 更新
			Map<String, Object> map = new HashMap<>();
			try {
				roleRepository.update(t.getCodeName(), t.getRoleName(),
						t.isEnable(), t.getDescriptions(), t.getId());
				map.put("status", ResponseCode.SUCCESS);
			} catch (Exception e) {
				map.put("status", ResponseCode.ERROR);
			}
			return map;
		}
		return super.save(t);
	}

	@Override
	public Map<String, Object> settRoleModules(Integer roleId, String mIds) {

		Map<String, Object> map = new HashMap<>();
		try {
			Role role = roleRepository.findOne(roleId);

			List<Integer> idList = new ArrayList<>();
			String[] array = mIds.split(",");
			for (String id : array) {
				if (null == id || id.trim().equals(""))
					continue;
				idList.add(Integer.parseInt(id));
			}

			Set<Module> mList = moduleRepository.findByIds(idList);
			role.setModules(mList);
			roleRepository.save(role);
			map.put("status", ResponseCode.SUCCESS);
		} catch (Exception e) {
			logger.error("", e);
			map.put("status", ResponseCode.ERROR);
		}
		return map;
	}

	@Override
	public Map<String, Object> roleInfo(Integer id) {
		Map<String, Object> map = new HashMap<>();
		Role role = roleRepository.findOne(id);
		map.put("codeName", role.getCodeName());
		map.put("roleName", role.getRoleName());
		map.put("createDate", sdfMinute.format(role.getCreateDate()));
		map.put("updateDate", sdfMinute.format(role.getUpdateDate()));
		map.put("enable", role.isEnable()==true?1:0);
		map.put("descriptions", role.getDescriptions());
		map.put("modules", role.getModules().size());
		map.put("resources", role.getResources().size());
		String userNames = "";
		Set<SysUser> users = role.getUsers();
		if(!users.isEmpty()){
			Iterator<SysUser> it = users.iterator();
			while(it.hasNext()){
				SysUser user = it.next();
				userNames = user.getUserName()+"...";
			}
		}
		map.put("userNames", userNames);
		return map;
	}

    @Override
    public Map<String, Object> settRoleResources(final Integer roleId, String rIds){
        Map<String, Object> map = new HashMap<>();
		DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();
		def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
		TransactionStatus status = tran.getTransaction(def);
        final String[] ids = rIds.split(",");
		try{
			jdbcTemplate.update("delete from bsth_c_sys_resource_roles where roles = ?", roleId);
			jdbcTemplate.batchUpdate("insert into  bsth_c_sys_resource_roles(resources,roles)" +
					" VALUES (?, ?)", new BatchPreparedStatementSetter() {
				@Override
				public void setValues(PreparedStatement ps, int i) throws SQLException {
					ps.setInt(1, Integer.parseInt(ids[i]));
                    ps.setInt(2, roleId);
				}

				@Override
				public int getBatchSize() {
					return ids.length;
				}
			});
			tran.commit(status);
			//重新加载security资源
            securityMetadataSourceService.loadResourceDefine();
            map.put("status", ResponseCode.SUCCESS);
		}catch (Exception e){
			tran.rollback(status);
            logger.error("【RoleServiceImpl】【settRoleResources】 : ", e);
            map.put("status", ResponseCode.ERROR);
		}
        return map;
	}
}