2020-08-27 17:21:17 +08:00

265 lines
12 KiB
Java

package com.tenwa.lease.app.allinpay.servlet;
import java.net.MalformedURLException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.allinpay.xstruct.quickpay.FAGRARET;
import com.alibaba.fastjson.JSON;
import com.allinpay.xml.XmlParser;
import com.allinpay.xstruct.common.AipgRsp;
import com.allinpay.xstruct.common.InfoRsp;
import com.allinpay.xstruct.quickpay.FAGRCRET;
import com.amarsoft.app.lc.util.DateAssistant;
import com.amarsoft.are.jbo.BizObject;
import com.amarsoft.are.jbo.BizObjectManager;
import com.amarsoft.are.jbo.JBOFactory;
import com.amarsoft.are.util.DataConvert;
import com.amarsoft.awe.util.ASResultSet;
import com.amarsoft.awe.util.SqlObject;
import com.amarsoft.awe.util.Transaction;
import com.tenwa.lease.app.allinpay.util.AllinpayProperties;
import com.tenwa.lease.app.allinpay.service.AllinpayService;
import com.tenwa.lease.app.allinpay.service.impl.AllinpayServiceImpl;
import com.tenwa.lease.app.allinpay.util.AllinpayUtil;
@WebServlet(urlPatterns = { "/allinpay/sign" })
public class AllinpayServlet extends BaseServlet {
private static final long serialVersionUID = 1L;
private AllinpayProperties factory = new AllinpayProperties();
private AllinpayService allinpayService = new AllinpayServiceImpl();
// ͨÁª¿¨¿Û¶ÌÐÅ·¢ËÍ
public String allinPaySendMessages(HttpServletRequest request, HttpServletResponse response)
throws MalformedURLException, Exception {
Map<String, String> msg = new HashMap<>();
msg.put("message", "error");
String contractId = request.getParameter("contractId");
Map<String, String> xmlMap = allinpayService.allinPaySendMessages(contractId);
String phoneNumber = xmlMap.get("phoneNumber");
String contractNumber = xmlMap.get("contractNumber");
Map<String, String> map = factory.allinPaySendMessages(xmlMap);
if (!"success".equals(map.get("message"))) {
logger.info("ϵͳÒì³£»òͨÁª·´À¡Òì³£:" + map.get("msg"));
throw new Exception(map.get("msg"));
} else {
String requestContent = map.get("request");
String responseContent = map.get("response");
String time = DateAssistant.getTodayNow();
AipgRsp rsp = XmlParser.parseRsp(responseContent);
InfoRsp infoRsp = rsp.getINFO();
FAGRARET ret = (FAGRARET) rsp.trxObj();
SqlObject sqlObject = null;
if ("0000".equals(infoRsp.getRET_CODE())) {
String retCode = ret.getRET_CODE();
if (retCode != null && "0000".equals(retCode)) {
msg.put("message", "success");
String reqSn = infoRsp.getREQ_SN();
Cookie[] cookies = request.getCookies();
Cookie cookie = AllinpayUtil.getCookie(phoneNumber, cookies);
if (cookie == null) {
cookie = new Cookie(phoneNumber, reqSn);
} else {
cookie.setValue(reqSn);
}
cookie.setMaxAge(60 * 10);
response.addCookie(cookie);
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime WHERE CONTRACT_NUMBER=:contractNumber";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("contractNumber", contractNumber);
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE CONTRACT_NUMBER=:contractNumber";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("contractNumber", contractNumber);
}
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE CONTRACT_NUMBER=:contractNumber";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("contractNumber", contractNumber);
}
allinpayService.update(sqlObject);
}
String message = JSON.toJSONString(msg);
response.getWriter().write(message);
return null;
}
// ͨÁª¿¨¿ÛЭÒéǩԼ
public String allinPaySigning(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String, String> msg = new HashMap<>();
msg.put("message", "error");
String verCode = request.getParameter("verCode");
String contractId = request.getParameter("contractId");
Map<String, String> messageMap = allinpayService.allinPaySigning(contractId);
String contractNumber = messageMap.get("contractNumber");
String phoneNumber = messageMap.get("phoneNumber");
String time = DateAssistant.getTodayNow();
Cookie[] cookies = request.getCookies();
Cookie cookie = AllinpayUtil.getCookie(phoneNumber, cookies);
if (cookie == null) {
msg.put("msg", "ÑéÖ¤ÂëʧЧ£¬ÇëÖØÐ»ñÈ¡ÑéÖ¤Âë");
String message = JSON.toJSONString(msg);
response.getWriter().write(message);
return null;
}
String reqSn = cookie.getValue();
Map<String, String> mapXml = new HashMap<>();
mapXml.put("reqSn", reqSn);
mapXml.put("verCode", verCode);
Map<String, String> map = factory.allinPaySigning(mapXml);
if (!"success".equals(map.get("message"))) {
logger.info("ϵͳÒì³£»òͨÁª·´À¡Òì³£:" + map.get("msg"));
throw new Exception(map.get("msg"));
} else {
String requestContent = map.get("request");
String responseContent = map.get("response");
AipgRsp rsp = XmlParser.parseRsp(responseContent);
InfoRsp infoRsp = rsp.getINFO();
SqlObject sqlObject = null;
if ("0000".equals(infoRsp.getRET_CODE())) {
FAGRCRET ret = (FAGRCRET) rsp.trxObj();
String retCode = ret.getRET_CODE();
if (retCode != null && "0000".equals(retCode)) {
msg.put("message", "success");
String agrmNo = ret.getAGRMNO();
String sql = "UPDATE LC_CARD_TLSIGN SET SIGN_TIME=:signTime,AGRMNO=:agrmno,SIGN_STATUS=:signStatus WHERE CONTRACT_NUMBER=:contractNumber";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("agrmno", agrmNo);
sqlObject.setParameter("signStatus", "sign_status2");
sqlObject.setParameter("contractNumber", contractNumber);
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET SIGN_TIME=:signTime,SIGN_STATUS=:signStatus,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE CONTRACT_NUMBER=:contractNumber";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("signStatus", "sign_status3");
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("contractNumber", contractNumber);
msg.put("msg", ret.getERR_MSG());
}
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET SIGN_TIME=:signTime,SIGN_STATUS=:signStatus,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE CONTRACT_NUMBER=:contractNumber";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("signStatus", "sign_status3");
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("contractNumber", contractNumber);
msg.put("msg", infoRsp.getERR_MSG());
}
allinpayService.update(sqlObject);
}
String message = JSON.toJSONString(msg);
response.getWriter().write(message);
return null;
}
// ͨÁªÇ©Ô¼Ò³Ãæ
public void allinPaySign(HttpServletRequest request, HttpServletResponse response) throws Exception {
Transaction Sqlca = null;
ASResultSet res = null;
try {
String contractId = DataConvert.toString(request.getParameter("con"));
String userName = "";
String phoneNumber = "";
String accNumber = "";
String certId = "";
String contractNumber = "";
//String sql = "SELECT O.contract_number,ci.customername customername,ca.mobile phonenumber,ca.acc_number accNumber,cc.certid certId FROM LB_CONTRACT_INFO O LEFT JOIN LB_UNION_LESSEE LUL ON LUL.CONTRACT_ID = O.ID AND LUL.IS_MAIN = 'Y' LEFT JOIN CUSTOMER_INFO CI ON CI.CUSTOMERID = LUL.CUSTOMER_ID and (CI.STATUS <> 'status04' or ci.STATUS is null) LEFT JOIN CUSTOMER_ACCOUNT CA ON CA.CONTRACT_ID = O.ID LEFT JOIN CUSTOMER_TEL CT ON CT.CUSTOMERID = CI.CUSTOMERID and ct.ISNEW='yes' LEFT JOIN CUSTOMER_CERT CC ON CI.CUSTOMERID = CC.CUSTOMERID and cc.STATUS in('valid','status02') WHERE O.id=:Id";
String sql ="SELECT lpi.project_no contract_number,ca.account customername,ca.mobile phonenumber,ca.acc_number accNumber,ca.certid certId FROM lb_project_info lpi LEFT JOIN customer_account ca ON ca.project_id=lpi.ID WHERE lpi.id=:Id";
Sqlca = Transaction.createTransaction("als");
SqlObject sqlObject = new SqlObject(sql);
sqlObject.setParameter("Id", contractId);
res = Sqlca.getASResultSet(sqlObject);
while (res.next()) {
contractNumber = res.getString("contract_number");
userName = res.getString("customername");
phoneNumber = res.getString("phonenumber");
accNumber = res.getString("accNumber");
certId = res.getString("certId");
}
if (userName==null || "".equals(userName) || phoneNumber==null || "".equals(phoneNumber) || accNumber==null || "".equals(accNumber) || certId==null || "".equals(certId)) {
throw new RuntimeException("ÐÅÏ¢²»ÍêÕû,ÇëÁªÏµÒµÎñÈËÔ±!");
}
//
BizObjectManager bomLDC = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_CARD_TLSIGN", Sqlca);
BizObject ldc = bomLDC.createQuery("O.CONTRACT_NUMBER=:CONTRACT_NUMBER").setParameter("CONTRACT_NUMBER", contractNumber).getSingleResult(true);
if(ldc == null){
ldc = bomLDC.newObject();
ldc.setAttributeValue("CONTRACT_NUMBER", contractNumber);
ldc.setAttributeValue("SIGN_STATUS", "sign_status1");
bomLDC.saveObject(ldc);
}
String contractNumberShort = "*****" + contractNumber.substring(contractNumber.length() - 6);
String userNameShort = "*" + userName.substring(1, userName.length());
String phoneNumberShort = "*****" + phoneNumber.substring(phoneNumber.length() - 4);
String accNumberShort = "*****" + accNumber.substring(accNumber.length() - 4);
String certIdShort = certId.substring(certId.length() - 6);
request.setAttribute("userName", userName);
request.setAttribute("contractNumber", contractNumber);
request.setAttribute("phoneNumber", phoneNumber);
request.setAttribute("certId", certId);
request.setAttribute("accNumber", accNumber);
request.setAttribute("contractNumberShort", contractNumberShort);
request.setAttribute("userNameShort", userNameShort);
request.setAttribute("phoneNumberShort", phoneNumberShort);
request.setAttribute("accNumberShort", accNumberShort);
request.setAttribute("certIdShort", certIdShort);
request.setAttribute("contractId", contractId);
request.getRequestDispatcher("/Sign_index.jsp").forward(request, response);
} catch (Exception e) {
if (Sqlca != null)
try {
Sqlca.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
throw new ServletException("ϵͳÒì³££¬ÇëÁªÏµÏà¹ØÒµÎñÈËÔ±");
} finally {
if (res != null) {
try {
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (Sqlca != null)
try {
Sqlca.commit();
Sqlca.disConnect();
Sqlca = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}