package com.huateng.netbank.batch.impl;
import java.io.File;
import java.io.FileWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.quartz.CronTrigger;
import org.quartz.SchedulerException;
import com.huateng.netbank.batch.IQuartzService;
import com.huateng.netbank.common.Constants;
import com.huateng.netbank.ebkrole.IRoleService;
import com.huateng.netbank.platform.base.common.tools.ContextUtil;
import com.huateng.netbank.platform.base.exception.CommonException;
import com.huateng.netbank.platform.base.exception.ServiceException;
import com.huateng.netbank.platform.common.ProcessResult;
import com.huateng.netbank.platform.service.IEBankBaseService;
import com.huateng.netbank.platform.service.impl.EBankBaseServiceImpl;
import com.huateng.netbank.vo.EbkGrantVO;
import com.huateng.netbank.vo.EbkIdentityVO;
import com.huateng.netbank.vo.EbkPersonRoleVO;
import com.huateng.netbank.vo.EbkPersonVO;
import com.huateng.netbank.vo.EbkPrincipalVO;
import com.huateng.netbank.vo.EbkQuartzTriggerVO;
import com.huateng.netbank.vo.EbkRoleVO;
import com.huateng.netbank.vo.EbkTargetVO;
import com.huateng.netbank.webapp.util.UIMessageUtil;
import com.huateng.startup.AppEnv;
public class QuartzFeedServiceImpl extends EBankBaseServiceImpl implements
IQuartzService {
private List<EbkTargetVO> roleTaget; // 角色用于的功能权限列表;
private List<EbkTargetVO> targetList; // 功能列表
@Override
public List<EbkQuartzTriggerVO> getUnActiveTrigger()
throws ServiceException {
// TODO Auto-generated method stub
return null;
}
@Override
public List<EbkQuartzTriggerVO> getTriggers() throws ServiceException {
// TODO Auto-generated method stub
return null;
}
@Override
public ProcessResult submitUpdate(EbkQuartzTriggerVO trigger,
EbkPersonVO person) throws ServiceException, CommonException {
// TODO Auto-generated method stub
return null;
}
@Override
public ProcessResult submitEnable(EbkQuartzTriggerVO trigger,
EbkPersonVO person) throws ServiceException, CommonException,
SchedulerException {
// TODO Auto-generated method stub
return null;
}
@Override
public ProcessResult submitDisable(EbkQuartzTriggerVO trigger,
EbkPersonVO person) throws ServiceException, CommonException,
SchedulerException {
// TODO Auto-generated method stub
return null;
}
@Override
public CronTrigger[] setTriggerTime(CronTrigger[] triggers)
throws ServiceException {
// TODO Auto-generated method stub
return null;
}
@Override
public void execute() {
// TODO Auto-generated method stub
try {
logger.info("==定时导出人员角色权限begin==");
export();
logger.info("==定时导出人员角色权限end==");
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error(e);
logger.error("定时导出人员角色权限异常" + e.getMessage());
}
}
/**
* 执行导出方法
*
* @throws Exception
*/
private void export() throws Exception {
this.targetList = getAllTarget();
List<UserAuthorityXMLDomain> userAuthoritylist = new ArrayList<UserAuthorityXMLDomain>();
IEBankBaseService service = (IEBankBaseService) ContextUtil
.getBean(IEBankBaseService.BEANID);
List<EbkIdentityVO> userList = service.findByQuery(EbkIdentityVO.class,
"getBankIdentityQuerySql", new Object[] {});
for (int i = 0; i < userList.size(); i++) {
EbkIdentityVO identity = userList.get(i);
String tlrName = identity.getLoginId();
List<EbkPersonVO> personList = service.findByQuery(
EbkPersonVO.class, "getBankPersonQuerySql",
new Object[] { identity.getObjectId() });
if (personList.size() > 0) {
EbkPersonVO person = personList.get(0);
Set<EbkPersonRoleVO> roles = person.getEbkPersonRoles();
for (Iterator<EbkPersonRoleVO> iterator = roles.iterator(); iterator
.hasNext();) {
EbkPersonRoleVO personRole = iterator.next();
Long roleId = personRole.getEbkRole();
EbkRoleVO role = (EbkRoleVO) service.findByObjectId(
EbkRoleVO.class, personRole.getEbkRole());
String privilege_container_name = role.getRoleName();
Set<EbkPrincipalVO> principalSet = (Set<EbkPrincipalVO>) role
.getEbkPrincipal();
List<EbkPrincipalVO> principalVOlist = new ArrayList<EbkPrincipalVO>(
principalSet);
EbkPrincipalVO ebkPrincipalVO = principalVOlist.get(0);
Set ebkGrant = ebkPrincipalVO.getEbkGrant();
List<EbkGrantVO> ebkGrantList = new ArrayList<EbkGrantVO>(
ebkGrant);
this.roleTaget = getRoleTarget(ebkGrantList,
this.targetList);
UserAuthorityXMLDomain uaxml = null;
for (int j = 0; j < this.roleTaget.size(); j++) {
EbkTargetVO target = this.roleTaget.get(j);
Long funcId = target.getObjectId();
uaxml = new UserAuthorityXMLDomain();
uaxml.setUsername(tlrName);
uaxml.setPrivilegecontainername(privilege_container_name);
uaxml.setPrivilegename(FunctionTranslationReader
.getProperty(funcId.toString()));
userAuthoritylist.add(uaxml);
}
}
}
}
writeXML(userAuthoritylist);
}
/**
* 创建XML对象
*
* @param userMap
* @param funcMap
* @param response
* @throws Exception
*/
private void createMessage(Map<String, List<String>> userMap,
Map<String, List<String>> funcMap) throws Exception {
UserAuthorityXMLDomain uaxml = null;
List<UserAuthorityXMLDomain> userAuthoritylist = new ArrayList<UserAuthorityXMLDomain>();
for (String username : userMap.keySet()) {
List<String> privilege_container_nameList = userMap.get(username);
for (String privilege_container_name : privilege_container_nameList) {
List<String> privilege_namelist = funcMap
.get(privilege_container_name);
if (null != privilege_namelist) {
for (String privilege_name : privilege_namelist) {
uaxml = new UserAuthorityXMLDomain();
uaxml.setUsername(username);
uaxml.setPrivilegecontainername(privilege_container_name);
uaxml.setPrivilegename(privilege_name);
userAuthoritylist.add(uaxml);
}
}
}
}
// 写XML文件
writeXML(userAuthoritylist);
}
/**
* 写XML文件
*
* @param userAuthoritylist
* @throws Exception
*/
private void writeXML(List<UserAuthorityXMLDomain> userAuthoritylist)
throws Exception {
XMLWriter writer = null;// 声明写XML的对象
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");// 设置XML文件的编码格式
Document document = DocumentHelper.createDocument();
document.setXMLEncoding("utf-8");
Element root = document.addElement("rbam");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMdd HH:mm");
root.addElement("file_date").setText(sdf3.format(new Date()));
root.addElement("business_date").setText(sdf.format(new Date()));
String filePath = AppEnv.getInstance().getSystemProps()
.getProperty("feed.download.url");
File file = new File(filePath);
if (!file.exists() && !file.isDirectory()) {
file.mkdirs();
}
String gelid = AppEnv.getInstance().getSystemProps()
.getProperty("feed.gelId"); // 系统ID,固定值,之后会提供
Date current = new Date();
Calendar cal = Calendar.getInstance();
DateFormat d1 = DateFormat.getDateInstance();
String workDate = d1.format(current);
// 开始循环
for (UserAuthorityXMLDomain userAuthority : userAuthoritylist) {
String username = userAuthority.getUsername() == null ? ""
: userAuthority.getUsername(); // 用户名
String privilegecontainername = userAuthority
.getPrivilegecontainername() == null ? "" : userAuthority
.getPrivilegecontainername();// 角色名-角色编码
String privilegename = userAuthority.getPrivilegename() == null ? ""
: userAuthority.getPrivilegename(); // 具体功能名-功能编码
String privilegevalue = ""; // 功能上的操作权限(如查询,执行),没有这一级别就留空
Element privilege = root.addElement("privilege");
privilege.addElement("gel_id").setText(gelid);
privilege.addElement("user_name").setText(username);
privilege.addElement("privilege_container_name").setText(
privilegecontainername);
privilege.addElement("privilege_name").setText(privilegename);
privilege.addElement("privilege_value").setText(privilegevalue);
}
// 结束循环
// 写入配置文件目录
// String filename = filePath + sdf2.format(new Date()) +
// ".xml";//按照当前时间生成文件名
String filename = filePath + gelid + "_" + workDate + "IBanking.xml";// 按照get_id+当前工作日期生成
writer = new XMLWriter(new FileWriter(filename), format);
writer.write(document);
writer.close();
}
/**
* 获得当前角色 可以访问的所有功能
*
* @return
*/
public List<EbkTargetVO> getRoleTarget(List<EbkGrantVO> ebkGrantList,
List<EbkTargetVO> allTarget) {
List<EbkTargetVO> targerList = new ArrayList<EbkTargetVO>();
for (EbkGrantVO grantVo : ebkGrantList) {
for (EbkTargetVO targetVo : allTarget) {
if (targetVo.getObjectId().longValue() == grantVo
.getEbkTargetfk().longValue()) {
targerList.add(targetVo);
}
}
}
return targerList;
}
/**
* 获得当前能访问的所有功能
*
* @param roleType
* @return
*/
public List<EbkTargetVO> getAllTarget() {
List<EbkTargetVO> list = null;
try {
IRoleService roleService = (IRoleService) ContextUtil
.getBean(IRoleService.BEANID);
String targetUserType = Constants.FUNCBANK;
list = roleService.findByQuery(EbkTargetVO.class,
"queryByTargetUserType", new Object[] { targetUserType });
} catch (Exception ex) {
logger.error(ex);
// UIMessageUtil.errorMessageByKey("globle.SystemError.txt");
}
return list;
}
}