package com.norteksoft.product.api.impl; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import com.norteksoft.acs.base.enumeration.OperatorType; import com.norteksoft.acs.base.orm.hibernate.SimpleHibernateTemplate; import com.norteksoft.product.api.entity.BusinessSystem; import com.norteksoft.acs.entity.log.Log; import com.norteksoft.acs.entity.organization.Company; import com.norteksoft.product.api.entity.User; import com.norteksoft.acs.service.organization.CompanyManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.api.BussinessLogService; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.web.struts2.Struts2Utils; @Service @Transactional public class BussinessLogServiceImpl implements BussinessLogService { private SimpleHibernateTemplate<Log, Long> logDao; public void log(String operationType, String message) { debugSaveOrUpdateLOG(operationType, message, null); } public void log(String operationType, String message, Long systemId) { debugSaveOrUpdateLOG(operationType, message, systemId); } public void log(String operator, String operationType, String message) { Log log = createLog(message, null); log.setOperator(operator); log.setOperationType(operationType); logDao.save(log); } private void debugSaveOrUpdateLOG(String optType, String message, Long systemId){ Log log = createLog(message, systemId); log.setOperationType(optType); logDao.save(log); } private Log createLog(String message, Long systemId){ Log log = new Log(); HttpServletRequest request= Struts2Utils.getRequest(); if(request!=null){ log.setIpAddress(request.getRemoteHost()); log.setOperator(ContextUtils.getUserName()); log.setOperatorType(getOperatorType()); }else{ log.setIpAddress("0.0.0.0"); log.setOperator("系统日志"); log.setOperatorType(OperatorType.SYSTEM_ADMIN); } log.setAdminLog(false); log.setCreatedTime(new Date()); log.setMessage(message); Assert.notNull(ContextUtils.getCompanyId(), "company不能为null"); Assert.notNull(ContextUtils.getCompanyName(), "companyName不能为null"); Assert.notNull(ContextUtils.getSystemId(), "systemId不能为null"); log.setCompanyId(ContextUtils.getCompanyId()); log.setCompanyName(ContextUtils.getCompanyName()); if(systemId != null){ log.setSystemId(systemId); BusinessSystem system=ApiFactory.getAcsService().getSystemById(systemId); if(system!=null)log.setSystemName(system.getName()); }else{ log.setSystemName(ContextUtils.getSystemName()); log.setSystemId(ContextUtils.getSystemId()); } return log; } private OperatorType getOperatorType(){ if(ContextUtils.isSystemAdmin()){ return OperatorType.SYSTEM_ADMIN; }else if(ContextUtils.isSecurityAdmin()){ return OperatorType.SECURITY_ADMIN; }else if(ContextUtils.isAuditAdmin()){ return OperatorType.AUDIT_ADMIN; } return OperatorType.COMMON_USER; } @Autowired public void setSessionFactory(SessionFactory sessionFactory) { logDao = new SimpleHibernateTemplate<Log, Long>(sessionFactory, Log.class); } public void log(Long operatorId, String operationType, String message) { User user = ApiFactory.getAcsService().getUserById(operatorId); if(user == null) throw new RuntimeException("记录日志时,没有找到给定的用户,用户ID:["+operatorId+"]. "); Log log = new Log(); log.setOperationType(operationType); log.setIpAddress("0.0.0.0"); log.setOperator(user.getName()); log.setOperatorType(getOperatorType2(user)); log.setAdminLog(false); log.setCreatedTime(new Date()); log.setMessage(message); log.setCompanyId(user.getCompanyId()); log.setCompanyName(getCompanyNameById(user.getCompanyId())); log.setSystemName(ContextUtils.getSystemName()); log.setSystemId(ContextUtils.getSystemId()); logDao.save(log); } private String getCompanyNameById(Long id){ CompanyManager cm = (CompanyManager) ContextUtils.getBean("companyManager"); Company c = cm.getCompany(id); if(c != null) c.getName(); return null; } private OperatorType getOperatorType2(User user){ String codes = getRoleCodesStartComma(user); if(codes != null && codes.contains(",acsSystemAdmin,")){ return OperatorType.SYSTEM_ADMIN; }else if(codes != null && codes.contains(",acsSecurityAdmin,")){ return OperatorType.SECURITY_ADMIN; }else if(codes != null && codes.contains(",acsAuditAdmin,")){ return OperatorType.AUDIT_ADMIN; } return OperatorType.COMMON_USER; } private String getRoleCodesStartComma(User user){ String roleCode = ApiFactory.getAcsService().getRolesExcludeTrustedRole(user); if(!roleCode.startsWith(",")) roleCode=","+roleCode+","; return roleCode; } }