package com.ssm.common;


import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dgtis.sso.model.UserModel;
import com.ssm.model.system.SysUser;
import com.ssm.service.system.SysUserService;

/**
 * Oneportal 在导入用户、新增用户、修改用户、删除用户 时会调用以下相应的接口
 * 需要各系统根据需要自行实现相应的接口进行用户的相关处理，比如：新增用户账号、修改用户信息、分配默认权限、....
 *
 * 注：该接口的URL是固定，不可以修改(不要修改 @RequestMapping)，否则oneportal将无法调用
 * @author tracy
 *
 */
@Controller
@RequestMapping("/")
public class OneportalUserManageController {
	
	@Autowired
	private SysUserService sysUserService;
	/**
	 * 该接口是 oneportal 向其它系统推送用户信息
	 * 前置条件：oneportal新增用户 和 oneportal 修改用户 时调用
	 * 
	 * 需要各系统的接口实现者判断用户是否已经存在，如果存在则执行用户信息修改操作，否则执行用户信息新增操作
	 * @param userModel 用户信息实体类（来自SSO jar包）
	 * @return true ： 表示各系统用户信息处理成功； false ： 表示各系统用户信息处理失败
	 */
	@RequestMapping("saveUser")
	@ResponseBody
	public boolean addUser(UserModel model){
		if(model != null){
			String loginId = model.getLoginName();
			SysUser sysuser = sysUserService.findByEmployeeno(loginId);
			if(sysuser != null){
				//更新密码
				if(StringUtils.isNotBlank(model.getPassword())){
					sysuser.setEmployeeno(model.getLoginName());
					sysuser.setPassword(model.getPassword());
					sysuser.setMobilenumber(model.getLoginName());
					sysuser.setUsername(model.getRealName());
					sysuser.setEmailaddress(model.getEmali());
					sysuser.setIsdeleted(false);
					sysuser.setIsenabled(false);
					sysUserService.updateByPrimaryKeySelective(sysuser);
				}
				if(model.isAdmin()){//校验权限，没有赋予权限
					int sysUserRoldCount = sysUserService.selectUserRoleByUserIdAndRoldId(sysuser.getUserid() ,1);
					if(sysUserRoldCount == 0){
						sysUserService.insertUserRole(sysuser.getUserid() ,1);
					}
				} else {
					int sysUserRoldCount = sysUserService.selectUserRoleByUserIdAndRoldId(sysuser.getUserid() ,2);
					if(sysUserRoldCount == 0){
						sysUserService.insertUserRole(sysuser.getUserid() ,2);
					}
				}
			} else {
				sysUserService.insertUserSave(model);
			}
			return true;
		} else 
			return false;
		
	}
	
	/**
	 * 该接口是 oneportal 向其它系统推送用户删除操作消息
	 * 前置条件： oneportal 取消分配给用户的 app 时调用
	 * 
	 * 各系统可以根据需要实现该接口（如果认为oneportal取消分配的app对自身系统不会有影响可以不需要实现），
	 * 否则可以考虑在 oneportal 取消分配用户的app时 是否需要在对应系统删除该用户或标识账号暂时不可用
	 * @param userModel 用户信息实体类（来自SSO jar包）, oneportal 删除用户的时候只会将 loginName(用户名) 传过来
	 * @return true : 表示各系统删除用户操作成功; false : 表示各系统删除用户操作失败
	 */
	@RequestMapping("deleteUser")
	@ResponseBody
	public boolean deleteUser(UserModel model){
		if(model != null){
			String loginId = model.getLoginName();
			SysUser sysuser = sysUserService.findByEmployeeno(loginId);
			if(sysuser != null){
				sysUserService.deleteUser(sysuser.getUserid());
				return true;
			}
		}
		return false;
	}
}
