package com.nationalelectric.greenH5; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.nationalelectirc.Constant.Constant; import com.nationalelectirc.utils.PushMessageUtil; import com.nationalelectirc.utils.RestResult; import com.nationalelectric.greenH5.bizc.BaseServiceImpl; import com.nationalelectric.greenH5.bizc.IGreenDepartmentBizc; import com.nationalelectric.greenH5.bizc.IGreenGrantAuthBizc; import com.nationalelectric.greenH5.bizc.IGreenOperateLogBizc; import com.nationalelectric.greenH5.bizc.IGreenUserInfoBizc; import com.nationalelectric.greenH5.po.GreenDepartment; import com.nationalelectric.greenH5.po.GreenEAccount; import com.nationalelectric.greenH5.po.GreenGrantAuth; import com.nationalelectric.greenH5.po.GreenOperateLog; import com.nationalelectric.greenH5.po.GreenUserInfo; import com.nationalelectric.greenH5.utils.AesEncryptUtil; import com.nationalelectric.greenH5.utils.DateUtil; import com.nationalelectric.greenH5.utils.MD5Util; import com.sgcc.isc.core.orm.identity.User; import com.sgcc.uap.persistence.IHibernateDao; import net.sf.json.JSONObject; @Component public abstract class GreenBaseController { @Resource private IGreenDepartmentBizc greendepartmentBizc; @Autowired IHibernateDao hibernateDao; @Resource private IGreenUserInfoBizc greenuserinfoBizc; @Resource private IGreenGrantAuthBizc greengainfoBizc; /** * 操作记录接口 */ @Resource private IGreenOperateLogBizc greenoperatelogBizc; @Autowired private BaseServiceImpl baseService; public GreenDepartment getDepartment(Long departmentId) { GreenDepartment department = null; if (departmentId != null) { department = greendepartmentBizc.get(departmentId); } return department; } public GreenUserInfo getUserInfo(String userId) { if (userId == null || userId.trim().equals("")) { return null; } /* * GreenUserInfo userInfo = null; if (userId != null) { * greenuserinfoBizc.get(userId); } */ GreenUserInfo info = greenuserinfoBizc.get(userId); return info; } public GreenGrantAuth getGaInfo(String userId) { if (userId == null || userId.trim().equals("")) { return null; } /* * GreenUserInfo userInfo = null; if (userId != null) { * greenuserinfoBizc.get(userId); } */ GreenGrantAuth info = greengainfoBizc.get(userId); return info; } /** * 描述:获取 post 请求的 byte[] 数组 * *
	 * 举例:
	 * 
* * @param request * @return * @throws IOException */ public byte[] getRequestPostBytes(HttpServletRequest request) throws IOException { int contentLength = request.getContentLength(); if (contentLength < 0) { return null; } byte buffer[] = new byte[contentLength]; for (int i = 0; i < contentLength;) { int readlen = request.getInputStream().read(buffer, i, contentLength - i); if (readlen == -1) { break; } i += readlen; } return buffer; } public Map getBodyStr(HttpServletRequest request) { try { byte[] buffer = getRequestPostBytes(request); String jsonStr = new String(buffer, "UTF-8"); JSONObject jsonObject = JSONObject.fromObject(jsonStr); String sign = jsonObject.getString("sign"); String body = jsonObject.getString("body"); String checkTimeDate = null; if (jsonObject.has("checkTimeDate")) { checkTimeDate = jsonObject.getString("checkTime"); } String md5Sign = MD5Util.encrypt(body); if (!sign.equalsIgnoreCase(md5Sign)) { // System.out.println("====== md5 error "); return null; } String bodyData = AesEncryptUtil.desEncrypt(body); String checkTime = null; if (checkTimeDate != null) { checkTime = AesEncryptUtil.desEncrypt(checkTimeDate); } Map map = new HashMap(); if (bodyData == null) { // System.out.println("====== aes error "); return null; } map.put("bodyData", bodyData); map.put("checkTime", checkTime); return map; } catch (Exception e) { return null; } } /** * 根据图片名字拼接全访问路径 * * @param fileName * @return */ public String getPicUrl(String fileName) { String url = baseService.getAppImgUrl(); return url + fileName; } public static String getRemoteIp1(HttpServletRequest request) { String ip = request.getRemoteAddr(); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } ip = ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip; if (isIP(ip)) return ip; else return null; } public static boolean isIP(String addr) { if (addr.length() < 7 || addr.length() > 15 || "".equals(addr)) { return false; } /** * 判断IP格式和范围 */ String rexp = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}$"; Pattern pat = Pattern.compile(rexp); Matcher mat = pat.matcher(addr); boolean ipAddress = mat.find(); return ipAddress; } /** * 记录错误日志 * @param operatePerson * @param function * @throws Exception */ @Transactional(rollbackFor=Exception.class) public boolean saveErorrLog(String function, String operateType, String operateStatus,String operateContent,String logRank,String userId){ try { GreenOperateLog greenOperateLog = new GreenOperateLog(); ServletRequestAttributes ra= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = ra.getRequest(); //获取当前登录用户ip地址 String ipAddr = getRemoteIp1(request); //获取当前登录用户id // String userId = list.get(0).getId(); //获取当前登录用户名 // String userName = list.get(0).getName(); String userInfoSql = "SELECT * FROM GREEN_USER_INFO WHERE id=?"; List userInfolist = hibernateDao.queryForListWithSql(userInfoSql, new Object[] { userId }, new BeanPropertyRowMapper(GreenUserInfo.class));// 根据用户id获取用户餐卡号 String userName = ""; if(userInfolist.size()>0){ userName = userInfolist.get(0).getRealName(); } //操作人id greenOperateLog.setOperatorId(userId); //操作人姓名 greenOperateLog.setOperatorName(userName); //登录用户ip地址 greenOperateLog.setIpAddr(ipAddr); //操作功能 greenOperateLog.setOperateFunction(function); //操作类型 greenOperateLog.setOperateType(operateType); //操作状态 greenOperateLog.setOperateStatus(operateStatus); //操作时间 greenOperateLog.setOperateTime(DateUtil.now()); //创建者 greenOperateLog.setCreator(userId); //修改者 greenOperateLog.setModifier(userId); //创建时间 greenOperateLog.setGmtCreated(new Date()); //修改时间 greenOperateLog.setGmtModified(new Date()); //删除标识 greenOperateLog.setIsDeleted("N"); //操作内容 greenOperateLog.setOperatorContent(userName+"-"+operateContent+operateStatus); //操作 类型 greenOperateLog.setLogType("3"); //来源 greenOperateLog.setSource("2"); /**0-业务级 1-系统级*/ greenOperateLog.setLogRank(logRank); //执行保存 greenoperatelogBizc.add(greenOperateLog); //返回值 return true; } catch (Exception e) { // e.printStackTrace(); return false; } } //批量发消息给临时停车审批权限人员 @SuppressWarnings("unchecked") public void sendMsg(String role_code,String msgname, String tm, String users,IHibernateDao hibernateDao){ String sql = "SELECT ui.login_name FROM green_role role , green_user_role_rel roler LEFT JOIN green_user_info ui ON roler.user_id = ui.id where role.role_code = ? AND role.id = roler.role_id and roler.is_deleted='N' and ui.is_deleted='N'"; List> queryList = hibernateDao.queryForListWithSql(sql.toString(),new Object[]{role_code}); for (int i = 0; i < queryList.size(); i++) { try { PushMessageUtil.getInstance().pushMessage(msgname, tm, queryList.get(i).get("login_name").toString(),hibernateDao); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Transactional(rollbackFor=Exception.class) public boolean addLog(String function, String operateType, String operateStatus, String operateContent,String logType,String userId) { try { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String url = request.getRequestURL().toString(); GreenUserInfo userInfo = getUserInfo(userId); if (url.contains("/greenMealTicket/scan")) { userInfo = new GreenUserInfo(); userInfo.setId(""); userInfo.setRealName("扫码"); } /*if (userInfo == null) { throw new Exception("返回异常"); }*/ GreenOperateLog greenOperateLog = new GreenOperateLog(); //操作人id greenOperateLog.setOperatorId(userId); //操作人姓名 if(userInfo==null){ greenOperateLog.setOperatorName("非法用户"); }else{ greenOperateLog.setOperatorName(userInfo.getRealName()); } //登录用户ip地址 greenOperateLog.setIpAddr(request.getRemoteAddr()); //操作功能 greenOperateLog.setOperateFunction(function); //操作类型 greenOperateLog.setOperateType(operateType); //操作状态 greenOperateLog.setOperateStatus(operateStatus); //操作时间 greenOperateLog.setOperateTime(DateUtil.now()); //创建者 greenOperateLog.setCreator(userId); //修改者 greenOperateLog.setModifier(userId); //创建时间 greenOperateLog.setGmtCreated(new Date()); //修改时间 greenOperateLog.setGmtModified(new Date()); //删除标识 greenOperateLog.setIsDeleted("N"); //操作内容 if(userInfo==null){ greenOperateLog.setOperatorContent("非法用户"+"-"+operateContent+"失败"); }else{ greenOperateLog.setOperatorContent(userInfo.getRealName()+"-"+operateContent+operateStatus); } //日志 类型 greenOperateLog.setLogType(logType); //来源1=pc/2=app greenOperateLog.setSource("2"); if ("登录".equals(function) || "登出".equals(function)) { greenOperateLog.setLogRank("1"); }else { greenOperateLog.setLogRank("0"); } greenoperatelogBizc.add(greenOperateLog); return true; } catch (Exception e) { e.printStackTrace(); } return false; } /** * 根据字典类型获取字典信息 * @param dataType * @return */ @SuppressWarnings("unchecked") public List> getDictionaryInfo(String dataType) { try { String sql = "SELECT DATA_CODE as \"id\",DATA_VALUE as \"name\",DESCRIPTION as \"description\" FROM GREEN_DICTIONARY_INFO WHERE DATA_TYPE = ? AND IS_DELETED = 'N' "; List> list = hibernateDao.queryForListWithSql(sql,new Object[]{dataType}); return list; } catch (Exception e) { e.printStackTrace(); return null; } } }