diff --git a/src/com/tenwa/lease/app/allinpay/servlet/AllinpayServlet.java b/src/com/tenwa/lease/app/allinpay/servlet/AllinpayServlet.java index a275cff1f..f78a04daa 100644 --- a/src/com/tenwa/lease/app/allinpay/servlet/AllinpayServlet.java +++ b/src/com/tenwa/lease/app/allinpay/servlet/AllinpayServlet.java @@ -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 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 xmlMap = allinpayService.allinPaySendMessages(projectId); - String phoneNumber = xmlMap.get("phoneNumber"); - String subjectid = xmlMap.get("subjectid"); - factory = new AllinpayProperties(subjectid); + Map msg = new HashMap<>(); + msg.put("message", "error"); + Map xmlMap = allinpayService.allinPaySendMessages(projectId); + String phoneNumber = xmlMap.get("phoneNumber"); + String subjectid = xmlMap.get("subjectid"); + factory = new AllinpayProperties(subjectid); - Map map = factory.allinPaySendMessages(xmlMap); + Map 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 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 messageMap = allinpayService.allinPaySigning(projectId); - String phoneNumber = messageMap.get("phoneNumber"); - String subjectid = messageMap.get("subjectid"); - factory = new AllinpayProperties(subjectid); - String time = DateAssistant.getTodayNow(); + Map 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 mapXml = new HashMap<>(); - mapXml.put("reqSn", reqSn); - mapXml.put("verCode", verCode); - Map map = factory.allinPaySigning(mapXml); + String verCode = request.getParameter("verCode"); + Map 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 mapXml = new HashMap<>(); + mapXml.put("reqSn", reqSn); + mapXml.put("verCode", verCode); + Map 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; + } } diff --git a/src/com/tenwa/lease/app/allinpay/servlet/SignDto.java b/src/com/tenwa/lease/app/allinpay/servlet/SignDto.java new file mode 100644 index 000000000..1686d136e --- /dev/null +++ b/src/com/tenwa/lease/app/allinpay/servlet/SignDto.java @@ -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; + } +} diff --git a/src/com/tenwa/lease/app/allinpay/servlet/YCPaySignServlet.java b/src/com/tenwa/lease/app/allinpay/servlet/YCPaySignServlet.java new file mode 100644 index 000000000..b45169eed --- /dev/null +++ b/src/com/tenwa/lease/app/allinpay/servlet/YCPaySignServlet.java @@ -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 = "" + matcher.group(3) + ""; + Map 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("DXTZ"); + sb.append("").append(signObj.getAccNumber()).append("")//银行卡号 + .append("").append(signObj.getUserName()).append("")//姓名 + .append("01")//证件类型(身份证) + .append("").append(signObj.getCertId()).append("")//证件号码 + .append("").append(SerialNumberUtil.getYouChuSerialNumber("DXTZ", 4)).append("")//交易流水号 + .append("");//备注 + 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 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 = "" + matcher.group(3) + ""; + Map 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("DXQY"); + sb.append("").append(signObj.getAccNumber()).append("")//银行卡号 + .append("").append(signObj.getUserName()).append("")//姓名 + .append("01")//证件类型(身份证) + .append("").append(signObj.getCertId()).append("")//证件号码 + .append("").append(payId).append("")//签约用户号 + .append("").append(SerialNumberUtil.getYouChuSerialNumber("DXQY", 4)).append("")//交易流水号 + .append("").append(verifyCode).append("")//短信验证码 + .append("");//备注 + 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; + } + + +} + +