package com.cmsz.ws.impl;

import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.cmsz.dao.UserInfoDaoSupport;
import com.cmsz.vo.ResultVO;
import com.cmsz.vo.UserInfoVO;
import com.cmsz.ws.UserService;
import com.hp.cmsz.entity.UserInfo;
import com.hp.cmsz.repository.RoleInfoDao;
import com.hp.cmsz.repository.UserInfoDao;
import com.hp.cmsz.repository.UserRoleInfoDao;
import com.hp.cmsz.service.authoritymanage.AuthorityManageService;

public class UserServiceImpl implements UserService {

	private static Logger logger = LoggerFactory
			.getLogger(UserServiceImpl.class);

	public SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	/*
	 * @Autowired private UserInfoDao userInfoDao;
	 * 
	 * @Autowired // 自动加载 private UserRoleInfoDao userRoleInfoDao;
	 * 
	 * @Autowired private RoleInfoDao roleInfoDao;
	 * 
	 * @Autowired // 自动加载 private AuthorityManageService authorityManageService;
	 */
	/**
	 * 新增用户
	 */
	public ResultVO addUserInfo(UserInfoVO vo) {
		logger.info("--Begin to add user---------");
		ResultVO resultVO = new ResultVO();
		UserInfoDaoSupport userInfoDao = new UserInfoDaoSupport();
		String descript = "";
		if (vo.getLoginUser() == null || vo.getLoginUser().equals("")) {
			descript = "登录帐号不能为空";
		} else if (vo.getPassword() == null || vo.getPassword().equals("")) {
			descript = "用户密码不能为空";
		} else if (vo.getDepartmentCode() == null
				|| vo.getDepartmentCode().equals("")) {
			descript = "部门编码不能为空";
		} else if (vo.getWorkCode() == null || vo.getWorkCode().equals("")) {
			descript = "工作组编号不能为空";
		} else {
			try {
				List<UserInfoVO> userInfos = userInfoDao.findByUserName(vo
						.getLoginUser());
				if (userInfos != null && userInfos.size() > 0) {
					logger.info("--List size is:" + userInfos.size());
					descript = "登录帐号已存在";
				} else {

					userInfoDao.createUser(vo);
					userInfoDao.closeAll();
					/*
					 * UserInfo newUserInfo = new UserInfo();
					 * newUserInfo.setUserName(vo.getLoginUser());
					 * SimpleDateFormat formatDate = new
					 * SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date =new
					 * Date(); newUserInfo.setCreateTime(new
					 * Timestamp(formatDate
					 * .parse(formatDate.format(date)).getTime()));
					 * newUserInfo.setModifyTime(new
					 * Timestamp(formatDate.parse(formatDate
					 * .format(date)).getTime()));
					 * newUserInfo.setUserDescription(vo.getNote());
					 * newUserInfo.
					 * setDepartmentId(Long.valueOf(vo.getDepartmentCode()));
					 * newUserInfo.setPassword(vo.getPassword());
					 * newUserInfo.setStaffname(vo.getStaffName());
					 * newUserInfo.setFlag(vo.getFlag());
					 * newUserInfo.setValidLength(vo.getValidLength());
					 * newUserInfo.setExpireDate(vo.getExpireDate());
					 * newUserInfo.setLogLock(vo.getLogLock());
					 * userInfoDao.save(newUserInfo);//添加用户
					 * 
					 * //添加用户对应的角色信息 String []roles = null; if
					 * (vo.getWorkCode().indexOf(",") !=-1 ) { roles =
					 * vo.getWorkCode().split("\\,"); } else { roles[0] =
					 * vo.getWorkCode(); } for (int i = 0; i < roles.length;
					 * i++) { UserRoleInfo ur = new UserRoleInfo();
					 * ur.setUserId(newUserInfo.getUserId()); RoleInfo roleInfo
					 * = roleInfoDao.findByRoleType(roles[i]);
					 * ur.setRoleId(roleInfo.getRoleId());
					 * userRoleInfoDao.save(ur); }
					 */

				}

			} catch (SQLException e) {
				descript = "添加用户失败";
				e.printStackTrace();
				try {
					userInfoDao.rollback();
					userInfoDao.closeAll();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		}
		if ("".equals(descript))
			resultVO.setResult("0");
		else
			resultVO.setResult("1");
		resultVO.setResultDesc(descript);

		return resultVO;

	}

	/**
	 * 删除用户
	 */
	public ResultVO delUserInfo(String loginUser) {
		logger.info("开始删除用户----------");
		ResultVO resultVO = new ResultVO();
		String descript = "";
		if (loginUser.equals("") || loginUser == null) {
			descript = "用户帐号不能为空";
		} else {
			UserInfoDaoSupport userInfoDao = new UserInfoDaoSupport();
			try {

				userInfoDao.delUserInfo(loginUser);
				userInfoDao.closeAll();
				/*
				 * UserInfo userInfo = userInfoDao.findByUserName(loginUser);
				 * authorityManageService.deleteUserInfoByUserId(userInfo
				 * .getUserId());
				 * authorityManageService.deleteUserRoleInfoByUserId(userInfo
				 * .getUserId());
				 */
			} catch (SQLException e) {
				descript = "删除用户失败";
				e.printStackTrace();
				try {
					userInfoDao.rollback();
					userInfoDao.closeAll();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		}
		if ("".equals(descript))
			resultVO.setResult("0");
		else
			resultVO.setResult("1");
		resultVO.setResultDesc(descript);

		return resultVO;
	}

	/**
	 * 更新用户
	 */
	public ResultVO modifyUserInfo(UserInfoVO vo) {
		logger.info("开始修改用户信息----------");
		ResultVO resultVO = new ResultVO();
		UserInfoDaoSupport userInfoDao = new UserInfoDaoSupport();
		String descript = "";
		if (vo.getLoginUser() == null || vo.getLoginUser().equals("")) {
			descript = "登录帐号不能为空";
		} else {
			try {
				List<UserInfoVO> userInfoVOs = userInfoDao.findByUserName(vo
						.getLoginUser());
				if (userInfoVOs == null || userInfoVOs.size() == 0) {
					descript = "要更新的用户不存在";
				} else {
					for (UserInfoVO userInfoVO : userInfoVOs) {
						userInfoDao.modifyUserInfo(userInfoVO);
					}
					userInfoDao.closeAll();
					/*
					 * userInfo.setUserName(vo.getLoginUser()); SimpleDateFormat
					 * formatDate = new SimpleDateFormat(
					 * "yyyy-MM-dd hh:mm:ss"); Date date = new Date();
					 * userInfo.setModifyTime(new Timestamp(formatDate.parse(
					 * formatDate.format(date)).getTime()));
					 * userInfo.setUserDescription(vo.getNote());
					 * userInfo.setDepartmentId(Long.valueOf(vo
					 * .getDepartmentCode()));
					 * userInfo.setPassword(vo.getPassword());
					 * userInfo.setStaffname(vo.getStaffName());
					 * userInfo.setFlag(vo.getFlag());
					 * userInfo.setValidLength(vo.getValidLength());
					 * userInfo.setExpireDate(vo.getExpireDate());
					 * userInfo.setLogLock(vo.getLogLock());
					 * userInfoDao.save(userInfo);
					 * 
					 * authorityManageService.deleteUserRoleInfoByUserId(userInfo
					 * .getUserId()); String[] roles = null; if
					 * (vo.getWorkCode().indexOf(",") != -1) { roles =
					 * vo.getWorkCode().split("\\,"); } else { roles[0] =
					 * vo.getWorkCode(); } for (int i = 0; i < roles.length;
					 * i++) { UserRoleInfo ur = new UserRoleInfo();
					 * ur.setUserId(userInfo.getUserId()); RoleInfo roleInfo =
					 * roleInfoDao .findByRoleType(roles[i]);
					 * ur.setRoleId(roleInfo.getRoleId());
					 * userRoleInfoDao.save(ur); }
					 */
				}
			} catch (SQLException e) {
				descript = "用户信息更新失败";
				e.printStackTrace();
				try {
					userInfoDao.rollback();
					userInfoDao.closeAll();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

			}

		}
		if ("".equals(descript))
			resultVO.setResult("0");
		else
			resultVO.setResult("1");
		resultVO.setResultDesc(descript);
		return resultVO;
	}

	/**
	 * 修改密码
	 */
	public ResultVO modifyUserPassword(String loginUser, String oldPassword,
			String newPassword) {
		logger.info("开始更新用户密码----------");
		ResultVO resultVO = new ResultVO();
		String descript = "";
		if (loginUser.equals("") || loginUser == null) {
			descript = "登录帐号不能为空";
		} else if (newPassword.equals("") || newPassword == null) {
			descript = "新密码不能为空";
		} else {
			UserInfoDaoSupport userInfoDao = new UserInfoDaoSupport();
			try {
				userInfoDao.modifyUserPassword(loginUser, oldPassword,
						newPassword);
				userInfoDao.closeAll();
			} catch (SQLException e) {
				descript = "修改密码失败";
				e.printStackTrace();
				try {
					userInfoDao.rollback();
					userInfoDao.closeAll();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
			/*
			 * UserInfo userInfo = userInfoDao.findByUserName(loginUser); if
			 * (userInfo == null) { descript = "登录帐号不存在"; } else {
			 * authorityManageService.modifyUserPassword(loginUser, oldPassword,
			 * newPassword); }
			 */
		}

		if ("".equals(descript))
			resultVO.setResult("0");
		else
			resultVO.setResult("1");
		resultVO.setResultDesc(descript);
		return resultVO;
	}

	/**
	 * 查询用户
	 */
	public List<UserInfoVO> queryUserInfo(String loginUser) {
		// logger.info("Begin to run---------------");
		List<UserInfoVO> userList = new ArrayList<UserInfoVO>();
		UserInfoDaoSupport userInfoDao = new UserInfoDaoSupport();
		try {
			userList = userInfoDao.findByUserName(loginUser);
			userInfoDao.closeAll();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// userList.add(userInfoVO);
		// List<UserInfo> userInfoList = new ArrayList<UserInfo>();
		/*
		 * userInfoList=authorityManageService.getAllUserInfo();
		 * 
		 * if ("".equals(loginUser)|| loginUser == null) {
		 * logger.info("--lginUser is null"); //userInfoList = (List<UserInfo>)
		 * userInfoDao.findAll();
		 * userInfoList=authorityManageService.getAllUserInfo();
		 * 
		 * } else { //userInfoList = (List<UserInfo>)
		 * userInfoDao.findByUserName(loginUser);
		 * logger.info("--llginUser is not null"); UserInfo
		 * userInfo=authorityManageService.getUserInfoByUserName(loginUser);
		 * userInfoList.add(userInfo); }
		 */
		/*
		 * for (int i = 0; i < userInfoList.size(); i++) { UserInfoVO vo = new
		 * UserInfoVO();
		 * vo.setDepartmentCode(String.valueOf(userInfoList.get(i).
		 * getDepartmentId()));
		 * vo.setExpireDate(userInfoList.get(i).getExpireDate());
		 * vo.setFlag(userInfoList.get(i).getFlag());
		 * vo.setLoginUser(userInfoList.get(i).getUserName());
		 * vo.setLogLock(userInfoList.get(i).getLogLock());
		 * vo.setNote(userInfoList.get(i).getUserDescription());
		 * vo.setPassword(userInfoList.get(i).getPassword());
		 * vo.setStaffName(userInfoList.get(i).getStaffname());
		 * vo.setValidLength(userInfoList.get(i).getValidLength());
		 * List<UserRoleInfo> userRoleInfoList =
		 * authorityManageService.getUserRoleInfoByUserId
		 * (userInfoList.get(i).getUserId()); List<String> roleTypeList = new
		 * ArrayList<String>();
		 */
		/*
		 * for (int t = 0; t < userRoleInfoList.size(); t++) { String roleType =
		 * authorityManageService
		 * ..findByRoleId(userRoleInfoList.get(t).getRoleId()).getRoleType();
		 * roleTypeList.add(roleType); } String roleTypeListStr =
		 * CommonUtil.toString(roleTypeList, ",");
		 * vo.setWorkCode(roleTypeListStr);
		 */

		// userList.add(vo);
		// }

		return userList;
	}

	public Date getFormatDate(String date) {
		if (date == null || "".equals(date)) {
			return null;
		}
		try {
			return sdf.parse(date);
		} catch (ParseException e) {
			logger.error("日起转换错误:" + e.getMessage());
			return null;
		}
	}

	public String getFormatDate(Date date) {
		if (date == null)
			return "";
		return sdf.format(date);
	}
}