package com.ccb.p2.ca.action; import java.util.HashMap; import java.util.Map; import javax.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Value; import com.ccb.msgcenter.McConnection; import com.ccb.openframework.security.SecurityManagerUtils; import com.ccb.openframework.swaparea.SwapAreaUtils; import com.ccb.p2.ca.constant.AuthConstant; import com.ccb.p2.ca.service.AuthCancelService; import com.ccb.p2.ca.utils.AuthUtils; import com.ccb.p2.script.service.CommonService; import com.ccb.p2.util.exception.P2CommonException; /** * 授权Action,统一的授权入口,目前仅仅是为影像采集界面传递交易数据用 未来交易是否授权会在此类中进行判断 * * @author danyb * */ public class AuthAction { private Log logger = LogFactory.getLog(AuthAction.class); // 交易内容json字符串 private String transContent; // 影像采集提示,由于影像采集配置到分行,机构号+操作码+功能号确定缓存一条记录,后台取分行机构号不合适,所以影响采集提示放到前台页面取 // nouse private String imageTipsInfo; private String instLevel1BranchId; // 一级分行号 private String appReqInfo = "helloworld"; // PBCS页面字段xmlcontent @Value("${p2FileUploadServiceAdapter.srvFileBaseDir}") private String serverPath = ""; @Value("${auth.uploadPath}") private String authPath = ""; @Resource(name = "commonService") private CommonService commonService; @Resource(name = "authCancelService") private AuthCancelService authCancelService; // 返回给页面的其他要素json格式 private String resultContent = "resultContent"; public String execute() throws Exception { logger.info("授权请求action开始"); if (StringUtils.isEmpty(transContent)) { // for test transContent = "{'APP_REQ_TXCODE6':'111111', 'APP_REQ_FUNC':'222222', 'AUTH_SEQ_NO':'123456789', 'APP_REQ_SYS':'02'}"; } Map<String, Object> transMap = AuthUtils.getMapFromJsonString(transContent); logger.info("transContent=======> 转换为 transMap: " + transMap); //授权流水号 String authSeqNo = (String)transMap.get("AUTH_SEQ_NO"); //请求系统 String appReqSys = (String)transMap.get("APP_REQ_SYS"); // 交易码 String frTranId = (String)transMap.get("APP_REQ_TXCODE"); // 功能号 String frFuncId = (String)transMap.get("APP_REQ_FUNC"); // 请求机构号 String appReqOrg = (String)transMap.get("APP_REQ_ORG"); // 请求8位员工号默认 曹操 String defaulttellerId8 = "57000355"; // return TOP field // CSID String csId = (String)transMap.get("MCC_RCV_CSID"); // 安全节点号 String appMsgSecId = (String)transMap.get("APP_MSG_SECID"); // TTY String tty = (String)transMap.get("MCC_SND_TTY"); // CRA997104交易状态查询 // 全局跟踪号 String serialNo = SecurityManagerUtils.generalGlobalSerialNo((String) SwapAreaUtils.getValue("['_host_name']")); // 组请求报文数据 Map<String, Object> outboundData = new HashMap<String, Object>(); outboundData.put("FR_SYS_ID", appReqSys); outboundData.put("FR_TRAN_ID", frTranId); outboundData.put("FR_FUNC_ID", frFuncId); outboundData.put("OPER_CODE", defaulttellerId8); outboundData.put("BRANCH_ID", appReqOrg); Map<String, Object> transResult = new HashMap<String, Object>(); try { // 外呼COSRA997104 transResult = commonService.service("CRA997104", serialNo, outboundData); // 记录数据库 SwapAreaUtils.setValue("['resp_for_log']", transResult); } catch (Exception e) { logger.error("授权流水号:" + authSeqNo + ", 发送CRA997104交易状态查询失败"); transResult = null; } // AUTH_TRAN_STAT 授权交易状态 C 1 Y // 授权交易状态 1 0 正常 // 2 1 非业务处理时间 // 3 2 故障隔离 // AUTH_RE_DATE 授权交易恢复日期 C 8 N // AUTH_RE_TIME 授权交易恢复时间 C 6 N // 取得CRA997104返回的结果 Map<String, Object> returnMap = getCRA997104Response(transResult); logger.info("=====getCRA997104Response==》returnMap : " + returnMap); String appResInfo1 = (String)returnMap.get("BK_DESC") + "(" +(String)returnMap.get("BK_CODE") + ")"; returnMap.put("APP_RES_INFO1", appResInfo1); returnMap.put("APP_RES_RSLT", "c"); logger.info("==========appResInfo1========>" + appResInfo1); String bkStatus = (String)returnMap.get("BK_STATUS"); logger.info("==========bkStatus========>" + bkStatus); resultContent = AuthUtils.getJsonStringFormMap(returnMap); logger.info("=========resultContent==========>" + resultContent); // 远程授权标志 boolean authFlag = false; if(StringUtils.isNotEmpty(bkStatus) && "00".equals(bkStatus)) { authFlag = true; // 处理PBCS页面要素字段文件 if(StringUtils.isNotEmpty(appReqSys) && appReqSys.equals(AuthConstant.AUTH_APPLY_SYSTEM_PBCS)){ String filePath = serverPath + authPath + authSeqNo + ".xml"; AuthUtils.createTransFile(appReqInfo, filePath); logger.info("pbcs页面要素文件生成成功"); } } // authFlag=true 返回影像采集界面,否则返回错误页面并通知原系统 if (authFlag) { return "success"; } else { // 如果原系统是TOP,发消息中心通知原系统转本地授权 if(AuthConstant.AUTH_APPLY_SYSTEM_CCBS.equals(appReqSys)) { logger.info("远程授权状态authFlag=false,不可以做远程授权"); Map<String, Object> returnTOPMap = new HashMap<String, Object>(); returnTOPMap.put("safetyCode", appMsgSecId); returnTOPMap.put("MCC_SND_TTY", tty); returnTOPMap.put("APP_REQ_SYS", appReqSys); returnTOPMap.put("AUTH_SEQ_NO", authSeqNo); // 系统异常转本终端授权 c returnTOPMap.put("APP_RES_RSLT", "c"); logger.info("================通知TOP转本地授权开始================="); authCancelService.cancelToSourceSystem(csId, returnTOPMap); logger.info("================通知TOP转本地授权结束================="); } return "success"; } } public String getTransContent() { return transContent; } public void setTransContent(String transContent) { this.transContent = transContent; } public String getImageTipsInfo() { return imageTipsInfo; } public void setImageTipsInfo(String imageTipsInfo) { this.imageTipsInfo = imageTipsInfo; } public String getInstLevel1BranchId() { return instLevel1BranchId; } public void setInstLevel1BranchId(String instLevel1BranchId) { this.instLevel1BranchId = instLevel1BranchId; } public String getAppReqInfo() { return appReqInfo; } public void setAppReqInfo(String appReqInfo) { this.appReqInfo = appReqInfo; } public String getServerPath() { return serverPath; } public void setServerPath(String serverPath) { this.serverPath = serverPath; } public String getAuthPath() { return authPath; } public void setAuthPath(String authPath) { this.authPath = authPath; } @SuppressWarnings({"rawtypes", "unchecked" }) public Map<String, Object> getCRA997104Response(Map rawData) { if(rawData == null) { rawData = new HashMap<String, Object>(); rawData.put("BK_DESC", "发送COSRA外呼交易失败,系统异常"); rawData.put("BK_CODE", "SYSTEM_ERROR"); rawData.put("BK_STATUS", "01"); return rawData; } Map resultMap = (Map)((Map)rawData.get("TX_BODY")).get("ENTITY"); if(resultMap == null) { resultMap = new HashMap(); } if (((Map) rawData.get("TX_HEADER")).get("SYS_TX_STATUS") != null) ((Map) resultMap).put("BK_STATUS", ((Map) rawData.get("TX_HEADER")).get("SYS_TX_STATUS")); else logger.info("TX_HEADER===>SYS_TX_STATUS为空"); //((Map) resultMap).put("BK_STATUS", inData); if (((Map) rawData.get("TX_HEADER")).get("SYS_RESP_CODE") != null) ((Map) resultMap).put("BK_CODE", ((Map) rawData.get("TX_HEADER")).get("SYS_RESP_CODE")); else logger.info("TX_HEADER===>SYS_RESP_CODE为空"); if (((Map) rawData.get("TX_HEADER")).get("SYS_RESP_DESC") != null) { String bkDesc = (String)((Map) rawData.get("TX_HEADER")).get("SYS_RESP_DESC"); int i = bkDesc.indexOf("<br>"); if( i > 0) { bkDesc = bkDesc.substring(0, i); } ((Map) resultMap).put("BK_DESC", bkDesc); } else //((Map) resultMap).put("BK_DESC", okDesc); logger.info("TX_HEADER===>SYS_RESP_DESC为空"); return (Map<String, Object>) resultMap; } public void setResultContent(String resultContent) { this.resultContent = resultContent; } public String getResultContent() { return resultContent; } }