添加邮储签约

This commit is contained in:
gityjf 2021-01-04 13:35:02 +08:00
parent 912135f6d7
commit f38f65d1a9
3 changed files with 503 additions and 241 deletions

View File

@ -1,20 +1,10 @@
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.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.FAGRARET;
import com.allinpay.xstruct.quickpay.FAGRCRET;
import com.amarsoft.app.lc.util.DateAssistant;
import com.amarsoft.are.jbo.BizObject;
@ -24,254 +14,276 @@ 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.AllinpayProperties;
import com.tenwa.lease.app.allinpay.util.AllinpayUtil;
import org.apache.commons.lang3.StringUtils;
@WebServlet(urlPatterns = { "/allinpay/sign" })
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
@WebServlet(urlPatterns = {"/allinpay/sign"})
public class AllinpayServlet extends BaseServlet {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
private AllinpayProperties factory ;
private AllinpayProperties factory;
private AllinpayService allinpayService = new AllinpayServiceImpl();
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");
// 通联卡扣短信发送
public String allinPaySendMessages(HttpServletRequest request, HttpServletResponse response)
throws MalformedURLException, Exception {
String signType = request.getParameter("signType");
String projectId = request.getParameter("projectId");
if (signType.equals("YCcollect")) {
return new YCPaySignServlet().ycDXNotice(request, response, getSignObj(projectId));
}
String projectId = request.getParameter("projectId");
Map<String, String> xmlMap = allinpayService.allinPaySendMessages(projectId);
String phoneNumber = xmlMap.get("phoneNumber");
String subjectid = xmlMap.get("subjectid");
factory = new AllinpayProperties(subjectid);
Map<String, String> msg = new HashMap<>();
msg.put("message", "error");
Map<String, String> xmlMap = allinpayService.allinPaySendMessages(projectId);
String phoneNumber = xmlMap.get("phoneNumber");
String subjectid = xmlMap.get("subjectid");
factory = new AllinpayProperties(subjectid);
Map<String, String> map = factory.allinPaySendMessages(xmlMap);
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);
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 PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("projectId", projectId);
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
}
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
}
allinpayService.update(sqlObject);
}
String message = JSON.toJSONString(msg);
response.getWriter().write(message);
return null;
}
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime WHERE PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("projectId", projectId);
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
}
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("customerLaunchTime", time);
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
}
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");
// 通联卡扣协议签约
public String allinPaySigning(HttpServletRequest request, HttpServletResponse response) throws Exception {
String signType = request.getParameter("signType");
String projectId = request.getParameter("projectId");
if (signType.equals("YCcollect")) {
return new YCPaySignServlet().ycDXSign(request, response, getSignObj(projectId));
}
String verCode = request.getParameter("verCode");
String projectId = request.getParameter("projectId");
Map<String, String> messageMap = allinpayService.allinPaySigning(projectId);
String phoneNumber = messageMap.get("phoneNumber");
String subjectid = messageMap.get("subjectid");
factory = new AllinpayProperties(subjectid);
String time = DateAssistant.getTodayNow();
Map<String, String> msg = new HashMap<>();
msg.put("message", "error");
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);
String verCode = request.getParameter("verCode");
Map<String, String> messageMap = allinpayService.allinPaySigning(projectId);
String phoneNumber = messageMap.get("phoneNumber");
String subjectid = messageMap.get("subjectid");
factory = new AllinpayProperties(subjectid);
String time = DateAssistant.getTodayNow();
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 PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("agrmno", agrmNo);
sqlObject.setParameter("signStatus", "sign_status2");
sqlObject.setParameter("projectId", projectId);
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET SIGN_TIME=:signTime,SIGN_STATUS=:signStatus,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("signStatus", "sign_status3");
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
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 PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("signStatus", "sign_status3");
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
msg.put("msg", infoRsp.getERR_MSG());
}
allinpayService.update(sqlObject);
}
String message = JSON.toJSONString(msg);
response.getWriter().write(message);
return null;
}
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);
// 通联签约页面
public void allinPaySign(HttpServletRequest request, HttpServletResponse response) throws Exception {
Transaction Sqlca = null;
ASResultSet res = null;
try {
String projectId = DataConvert.toString(request.getParameter("con"));
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 PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("agrmno", agrmNo);
sqlObject.setParameter("signStatus", "sign_status2");
sqlObject.setParameter("projectId", projectId);
} else {
String sql = "UPDATE LC_CARD_TLSIGN SET SIGN_TIME=:signTime,SIGN_STATUS=:signStatus,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent WHERE PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("signStatus", "sign_status3");
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
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 PROJECT_ID=:projectId";
sqlObject = new SqlObject(sql);
sqlObject.setParameter("signTime", time);
sqlObject.setParameter("signStatus", "sign_status3");
sqlObject.setParameter("requestContent", requestContent);
sqlObject.setParameter("responseContent", responseContent);
sqlObject.setParameter("projectId", projectId);
msg.put("msg", infoRsp.getERR_MSG());
}
allinpayService.update(sqlObject);
}
String message = JSON.toJSONString(msg);
response.getWriter().write(message);
return null;
}
String userName = "";
String phoneNumber = "";
String accNumber = "";
String certId = "";
String sql ="SELECT 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", projectId);
res = Sqlca.getASResultSet(sqlObject);
while (res.next()) {
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)) {
logger.error(""+projectId+"】信息不完整:userName="+userName+",phoneNumber="+phoneNumber+"accNumber="+accNumber+"certId="+certId);
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", "您的信息不完整,请联系业务人员");
request.getRequestDispatcher("/error.jsp").forward(request, response);
return;
}
// 签约页面通联/邮储
public String allinPaySign(HttpServletRequest request, HttpServletResponse response) {
String errorPage = "/error.jsp";
try {
String projectId = DataConvert.toString(request.getParameter("con"));
SignDto signObj = getSignObj(projectId);
String userName = "", phoneNumber = "", accNumber = "", certId = "", collectType = "";
if (signObj != null) {
userName = signObj.getUserName();
phoneNumber = signObj.getPhoneNumber();
accNumber = signObj.getAccNumber();
certId = signObj.getCertId();
collectType = signObj.getCollectType();
}
if(StringUtils.isEmpty(collectType) || "YLcollect".equals(collectType)){
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", "签约渠道与签约类型【"+collectType+"】不一致,请联系业务人员");
return errorPage;
}
if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(phoneNumber) || StringUtils.isEmpty(accNumber) || StringUtils.isEmpty(certId) || StringUtils.isEmpty(collectType)) {
logger.error("" + projectId + "】信息不完整:userName=" + userName + ",phoneNumber=" + phoneNumber + "accNumber=" + accNumber + "certId=" + certId + "collectType=" + collectType);
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", "您的信息不完整,请联系业务人员");
return errorPage;
}
BizObjectManager bomLDC = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_CARD_TLSIGN");
BizObject ldc = bomLDC.createQuery("O.PROJECT_ID=:PROJECT_ID").setParameter("PROJECT_ID", projectId).getSingleResult(true);
if (ldc == null) {
ldc = bomLDC.newObject();
ldc.setAttributeValue("PROJECT_ID", projectId);
ldc.setAttributeValue("sign_type", collectType);
ldc.setAttributeValue("SIGN_STATUS", "sign_status1");
bomLDC.saveObject(ldc);
} else if ("sign_status2".equals(ldc.getAttribute("SIGN_STATUS").toString())) {
logger.error("" + projectId + "】无签约业务需求");
request.setAttribute("state", "404");
request.setAttribute("title", "UH OH!页面丢失");
request.setAttribute("message", "已签约,不能重复签约");
return errorPage;
}
request.setAttribute("userName", userName);
request.setAttribute("phoneNumber", phoneNumber);
request.setAttribute("accNumber", accNumber);
request.setAttribute("certId", certId);
request.setAttribute("projectId", projectId);
request.setAttribute("signType", collectType);
//
BizObjectManager bomLDC = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_CARD_TLSIGN", Sqlca);
BizObject ldc = bomLDC.createQuery("O.PROJECT_ID=:PROJECT_ID").setParameter("PROJECT_ID", projectId).getSingleResult(true);
if(ldc == null){
ldc = bomLDC.newObject();
ldc.setAttributeValue("PROJECT_ID", projectId);
ldc.setAttributeValue("sign_type", "TL");
ldc.setAttributeValue("SIGN_STATUS", "sign_status1");
bomLDC.saveObject(ldc);
}else if("sign_status2".equals(ldc.getAttribute("SIGN_STATUS").toString())) {
logger.error(""+projectId+"】无签约业务需求");
request.setAttribute("state", "404");
request.setAttribute("title", "UH OH!页面丢失");
request.setAttribute("message", "已签约,不能重复签约");
request.getRequestDispatcher("/error.jsp").forward(request, response);
return;
}
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("projectId", projectId);
request.getRequestDispatcher("/Sign_index.jsp").forward(request, response);
} catch (Exception e) {
if (Sqlca != null)
try {
Sqlca.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message",e.getMessage());
request.getRequestDispatcher("/error.jsp").forward(request, response);
} 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();
}
}
}
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("userNameShort", userNameShort);
request.setAttribute("phoneNumberShort", phoneNumberShort);
request.setAttribute("accNumberShort", accNumberShort);
request.setAttribute("certIdShort", certIdShort);
return "/Sign_index.jsp";
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", e.getMessage());
return errorPage;
}
}
/**
* 获取前台展示业务数据
*
* @param projectId
* @return
* @throws Exception
*/
private SignDto getSignObj(String projectId) throws Exception {
Transaction Sqlca = null;
SignDto signDto = null;
try {
Sqlca = Transaction.createTransaction(JBOFactory.createJBOTransaction());
String sql = "SELECT ca.account customername,ca.mobile phonenumber,ca.acc_number accNumber,ca.certid certId,ca.collect_type collectType FROM lb_project_info lpi JOIN customer_account ca ON ca.project_id=lpi.ID WHERE lpi.id=:Id limit 1";
ASResultSet res = Sqlca.getASResultSet(new SqlObject(sql));
if (res.next()) {
String userName = res.getString("customername");
String phoneNumber = res.getString("phonenumber");
String accNumber = res.getString("accNumber");
String certId = res.getString("certId");
String collectType = res.getString("collectType");
signDto = new SignDto(userName, phoneNumber, accNumber, certId, collectType);
}
Sqlca.commit();
} catch (Exception e) {
e.printStackTrace();
Sqlca.rollback();
}
return signDto;
}
}

View File

@ -0,0 +1,45 @@
package com.tenwa.lease.app.allinpay.servlet;
/**
* @program: apzl_leasing
* @author: yjf
* @create: 2020-12-21 16:55
**/
public class SignDto {
private String userName;
private String phoneNumber;
private String certId;
private String collectType;
private String accNumber;
public SignDto() {
}
public SignDto(String userName, String phoneNumber, String certId, String accNumber, String collectType) {
this.userName = userName;
this.phoneNumber = phoneNumber;
this.certId = certId;
this.accNumber = accNumber;
this.collectType = collectType;
}
public String getUserName() {
return userName;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getCertId() {
return certId;
}
public String getAccNumber() {
return accNumber;
}
public String getCollectType() {
return collectType;
}
}

View File

@ -0,0 +1,205 @@
package com.tenwa.lease.app.allinpay.servlet;
import com.alibaba.fastjson.JSONObject;
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.tenwa.collectaudit.yccollect.SocketClientUtil;
import com.tenwa.collectaudit.yccollect.XMLAnalysis;
import com.tenwa.util.SerialNumberUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @program: apzl_leasing
* @author: yjf
* @create: 2020-11-23 15:39
**/
public class YCPaySignServlet {
public static Logger logger = Logger.getLogger(YCPaySignServlet.class);
// 邮储短信通知
public String ycDXNotice(HttpServletRequest request, HttpServletResponse response, SignDto signObj) throws Exception {
String retPath = null;
try (PrintWriter pw = response.getWriter()) {
logger.info("-------------------- 邮储短信通知(YC_DX_NOTICE)执行--------------------");
String projectId = request.getParameter("projectId");
String dxNoticeXml = createDXNoticeXml(signObj);
String retMeg = SocketClientUtil.sendTcpNoticeMsg(dxNoticeXml);
logger.info("-------------------- 邮储短信通知(YC_DX_NOTICE)返回信息--------------------");
logger.info(retMeg);
logger.info("-------------------- 邮储短信通知(YC_DX_NOTICE)返回信息--------------------");
Pattern pattern = Pattern.compile("(\\d{4})(<\\?.*\\?>)(<.*>)(\\s*$)");
Matcher matcher = pattern.matcher(retMeg);
if (matcher.matches()) {
String analysisXml = "<root>" + matcher.group(3) + "</root>";
Map<String, String> respMap = XMLAnalysis.xmlToMap(analysisXml, "GBK");
BizObjectManager bomLDC = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_CARD_TLSIGN");
bomLDC.createQuery("update O SET CUSTOMER_LAUNCH_TIME=:customerLaunchTime,REQUEST_CONTENT=:requestContent,RESPONSE_CONTENT=:responseContent where project_id = :projectId ")
.setParameter("customerLaunchTime", DateAssistant.getTodayNow())
.setParameter("requestContent", dxNoticeXml)
.setParameter("responseContent", retMeg)
.setParameter("projectId", projectId).executeUpdate();
if (respMap.get("respcd").equals("0000")) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", "success");
pw.write(jsonObject.toJSONString());
}
}
} catch (Exception e) {
logger.error("-------------------- 邮储短信通知(YC_DX_NOTICE)异常--------------------", e);
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", e.getMessage());
retPath = "/error.jsp";
}
return retPath;
}
/**
* 生成短信通知xml
*/
private String createDXNoticeXml(SignDto signObj) throws Exception {
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"GBK\"?><sign>DXTZ</sign>");
sb.append("<cardno>").append(signObj.getAccNumber()).append("</cardno>")//银行卡号
.append("<name>").append(signObj.getUserName()).append("</name>")//姓名
.append("<papertype>01</papertype>")//证件类型身份证
.append("<paperid>").append(signObj.getCertId()).append("</paperid>")//证件号码
.append("<transq>").append(SerialNumberUtil.getYouChuSerialNumber("DXTZ", 4)).append("</transq>")//交易流水号
.append("<bak1></bak1><bak2></bak2>");//备注
String xmlLength = String.format("%04d", sb.length());//报文长度
return xmlLength + sb.toString();
}
// 邮储短信签约
public String ycDXSign(HttpServletRequest request, HttpServletResponse response, SignDto signObj) throws Exception {
String retPath = null;
try (PrintWriter pw = response.getWriter()) {
Map<String, String> retMap = new HashMap<>();
retMap.put("status", "error");
logger.info("-------------------- 邮储短信签约(YC_DX_SIGN)执行--------------------");
String projectId = request.getParameter("projectId");
String verCode = request.getParameter("verCode");
String dxNoticeXml = createDXSignXml(signObj, "", verCode);
String retMeg = SocketClientUtil.sendTcpNoticeMsg(dxNoticeXml);
logger.info("-------------------- 邮储短信签约(YC_DX_SIGN)返回信息--------------------");
logger.info(retMeg);
logger.info("-------------------- 邮储短信签约(YC_DX_SIGN)返回信息--------------------");
Pattern pattern = Pattern.compile("(\\d{4})(<\\?.*\\?>)(<.*>)(\\s*$)");
Matcher matcher = pattern.matcher(retMeg);
if (matcher.matches()) {
String analysisXml = "<root>" + matcher.group(3) + "</root>";
Map<String, String> respMap = XMLAnalysis.xmlToMap(analysisXml, "GBK");
BizObjectManager bomLDC = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_CARD_TLSIGN");
String signTime = DateAssistant.getTodayNow();
if (respMap.get("respcd").equals("0000")) {
bomLDC.createQuery("update o set o.SIGN_STATUS = 'sign_status2',o.SIGN_TIME = :signTime where o.project_id = :projectId ")
.setParameter("signTime", signTime).setParameter("projectId", projectId).executeUpdate();
} else {
bomLDC.createQuery("update o set o.SIGN_STATUS = 'sign_status3',o.SIGN_TIME = :signTime where o.project_id = :projectId ")
.setParameter("signTime", signTime).setParameter("projectId", projectId).executeUpdate();
}
}
pw.write(retMap.toString());
} catch (Exception e) {
logger.error("-------------------- 邮储短信签约(YC_DX_SIGN)异常--------------------", e);
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", e.getMessage());
retPath = "/error.jsp";
}
return retPath;
}
/**
* 生成短信签约xml
*/
private String createDXSignXml(SignDto signObj, String payId, String verifyCode) throws Exception {
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"GBK\"?><sign>DXQY</sign>");
sb.append("<cardno>").append(signObj.getAccNumber()).append("</cardno>")//银行卡号
.append("<name>").append(signObj.getUserName()).append("</name>")//姓名
.append("<papertype>01</papertype>")//证件类型身份证
.append("<paperid>").append(signObj.getCertId()).append("</paperid>")//证件号码
.append("<payid>").append(payId).append("</payid>")//签约用户号
.append("<transq>").append(SerialNumberUtil.getYouChuSerialNumber("DXQY", 4)).append("</transq>")//交易流水号
.append("<verifycd>").append(verifyCode).append("</verifycd>")//短信验证码
.append("<bak1></bak1><bak2></bak2>");//备注
String xmlLength = String.format("%04d", sb.length());//报文长度
return xmlLength + sb.toString();
}
// 邮储签约界面
public String ycSignPage(HttpServletRequest request, HttpServletResponse response, SignDto signObj) {
String retPath = "/error.jsp";
try {
String projectId = DataConvert.toString(request.getParameter("con"));
String userName = "", phoneNumber = "", accNumber = "", certId = "";
if (signObj != null) {
userName = signObj.getUserName();
phoneNumber = signObj.getPhoneNumber();
accNumber = signObj.getAccNumber();
certId = signObj.getCertId();
}
if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(phoneNumber) || StringUtils.isEmpty(accNumber) || StringUtils.isEmpty(certId)) {
logger.error("" + projectId + "】信息不完整:userName=" + userName + ",phoneNumber=" + phoneNumber + "accNumber=" + accNumber + "certId=" + certId);
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", "您的信息不完整,请联系业务人员");
return retPath;
}
BizObjectManager bomLDC = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_CARD_TLSIGN");
BizObject ldc = bomLDC.createQuery("O.PROJECT_ID=:PROJECT_ID").setParameter("PROJECT_ID", projectId).getSingleResult(true);
if (ldc == null) {
ldc = bomLDC.newObject();
ldc.setAttributeValue("PROJECT_ID", projectId);
ldc.setAttributeValue("sign_type", "YC");
ldc.setAttributeValue("SIGN_STATUS", "sign_status1");
bomLDC.saveObject(ldc);
} else if ("sign_status2".equals(ldc.getAttribute("SIGN_STATUS").toString())) {
logger.error("" + projectId + "】无签约业务需求");
request.setAttribute("state", "404");
request.setAttribute("title", "UH OH!页面丢失");
request.setAttribute("message", "已签约,不能重复签约");
return retPath;
}
request.setAttribute("userName", userName);
request.setAttribute("phoneNumber", phoneNumber);
request.setAttribute("certId", certId);
request.setAttribute("accNumber", accNumber);
//前台展示短信息
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("userNameShort", userNameShort);
request.setAttribute("phoneNumberShort", phoneNumberShort);
request.setAttribute("accNumberShort", accNumberShort);
request.setAttribute("certIdShort", certIdShort);
request.setAttribute("projectId", projectId);
request.setAttribute("signType", "YC");
retPath = "/ycsign_index.jsp";
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("state", "500");
request.setAttribute("title", "服务器内部异常");
request.setAttribute("message", e.getMessage());
}
return retPath;
}
}