You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
8.7 KiB
172 lines
8.7 KiB
2 years ago
|
//package com.ynxbd.wx.servlet.remove;
|
||
|
//
|
||
|
//import com.ynxbd.api.service.HCodeService;
|
||
|
//import com.ynxbd.common.bean.PayInfoBean;
|
||
|
//import com.ynxbd.common.bean.ReservationBean4Local;
|
||
|
//import com.ynxbd.common.dao.DBDao;
|
||
|
//import com.ynxbd.common.dao.WSDao;
|
||
|
//import com.ynxbd.api.utils.DateGenerate;
|
||
|
//import com.ynxbd.api.config.WeChatConfig;
|
||
|
//import com.ynxbd.api.utils.CommonUtil;
|
||
|
//import com.ynxbd.api.utils.Global;
|
||
|
//import org.slf4j.Logger;
|
||
|
//import org.slf4j.LoggerFactory;
|
||
|
//import org.slf4j.MDC;
|
||
|
//import weixin.popular.bean.paymch.MchBaseResult;
|
||
|
//import weixin.popular.bean.paymch.MchPayNotify;
|
||
|
//import weixin.popular.util.SignatureUtil;
|
||
|
//import weixin.popular.util.StreamUtils;
|
||
|
//import weixin.popular.util.XMLConverUtil;
|
||
|
//
|
||
|
//import javax.servlet.ServletException;
|
||
|
//import javax.servlet.http.HttpServlet;
|
||
|
//import javax.servlet.http.HttpServletRequest;
|
||
|
//import javax.servlet.http.HttpServletResponse;
|
||
|
//import java.io.IOException;
|
||
|
//import java.nio.charset.StandardCharsets;
|
||
|
//import java.util.HashMap;
|
||
|
//import java.util.List;
|
||
|
//import java.util.Map;
|
||
|
//import java.util.UUID;
|
||
|
//
|
||
|
///**
|
||
|
// * @author 张剑峰
|
||
|
// * @version v1.0.0
|
||
|
// * @Project:微信公众号
|
||
|
// * @date 2017年7月23日下午4:28:39
|
||
|
// * @Copyright: 2017云南新八达科技有限公司 All rights reserved.
|
||
|
// */
|
||
|
//public class PayMchNotifyServlet extends HttpServlet {
|
||
|
//
|
||
|
// private static final Logger logger = LoggerFactory.getLogger(PayMchNotifyServlet.class);
|
||
|
//
|
||
|
// @Override
|
||
|
// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||
|
// MDC.remove("ip");
|
||
|
// MDC.put("ip", Global.getIpAddr(request));
|
||
|
//
|
||
|
// // 获取请求数据
|
||
|
// String xmlData = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
|
||
|
// // 将XML转为MAP,确保所有字段都参与签名验证
|
||
|
// Map<String, String> mapData = XMLConverUtil.convertToMap(xmlData);
|
||
|
// StringBuilder reStr = new StringBuilder();
|
||
|
// for (String key : mapData.keySet()) {
|
||
|
// if (reStr.toString().equals(""))
|
||
|
// reStr = new StringBuilder(key + "=" + mapData.get(key));
|
||
|
// else
|
||
|
// reStr.append(";").append(key).append("=").append(mapData.get(key));
|
||
|
// }
|
||
|
// // 转换数据对象
|
||
|
// MchPayNotify payNotify = XMLConverUtil.convertToObject(MchPayNotify.class, xmlData);
|
||
|
//
|
||
|
// // 已处理 去重
|
||
|
// if (Global.keys.exists(payNotify.getTransaction_id())) {
|
||
|
// return;
|
||
|
// } else {
|
||
|
// Global.keys.add(payNotify.getTransaction_id(), Global.expire);
|
||
|
// }
|
||
|
// // @since 2.8.5
|
||
|
// payNotify.buildDynamicField(mapData);
|
||
|
// // 签名验证
|
||
|
// if (SignatureUtil.validateSign(mapData, WeChatConfig.getMchKey())) {
|
||
|
// MchBaseResult baseResult = new MchBaseResult();
|
||
|
// baseResult.setReturn_code("SUCCESS");
|
||
|
// baseResult.setReturn_msg("OK");
|
||
|
// response.getOutputStream().write(XMLConverUtil.convertToXML(baseResult).getBytes());
|
||
|
// // 保存支付结果
|
||
|
// PayInfoBean payInfo = new PayInfoBean();
|
||
|
// payInfo.setOpenID(payNotify.getOpenid());
|
||
|
// payInfo.setTradeNo(payNotify.getOut_trade_no());
|
||
|
// payInfo.setInfo(reStr.toString());
|
||
|
// DBDao dbDao = new DBDao();
|
||
|
// if (dbDao.hasPayResult(payInfo)) {
|
||
|
// return;
|
||
|
// }
|
||
|
// if (dbDao.hasReserved(payNotify.getOut_trade_no())) {
|
||
|
// return;
|
||
|
// }
|
||
|
// dbDao.savePayResult(payInfo);
|
||
|
//
|
||
|
// String openId = payInfo.getOpenID();
|
||
|
//
|
||
|
// // 更新挂号信息
|
||
|
// logger.info(String.format("更新挂号信息(after pay),%s", payNotify.getTransaction_id()));
|
||
|
// List<String> lstDate = DateGenerate.getDateAndTime(payNotify.getTime_end());
|
||
|
// ReservationBean4Local reservation = dbDao.updateReserve(payNotify.getOut_trade_no(),
|
||
|
// lstDate.get(0), lstDate.get(1), payNotify.getTransaction_id());
|
||
|
// if (reservation == null) {
|
||
|
// logger.info(String.format("挂号失败(reservation=null),开始申请退款:%s", payNotify.getTransaction_id()));
|
||
|
// boolean refundResult = dbDao.refund(1, UUID.randomUUID().toString().replace("-", ""),
|
||
|
// payInfo.getTradeNo(), "", payNotify.getTotal_fee(), payNotify.getTotal_fee(), "挂号信息更新失败");
|
||
|
// if (refundResult) {
|
||
|
// logger.info(String.format("自动退款申请成功:tradeNo=%s", payNotify.getTransaction_id()));
|
||
|
// try {
|
||
|
// CommonUtil.sendMessage(openId, String.format("挂号失败,已申请退款:%s", payNotify.getTransaction_id()));
|
||
|
// } catch (Exception ex) {
|
||
|
// logger.info(ex.getMessage());
|
||
|
// }
|
||
|
// }
|
||
|
// return;
|
||
|
// }
|
||
|
//
|
||
|
// if (reservation.getPatientId() == null) {
|
||
|
// logger.info(String.format("patientId is null, tradeno=%s, transno=%s", payNotify.getOut_trade_no(), payNotify.getTransaction_id()));
|
||
|
// return;
|
||
|
// }
|
||
|
//
|
||
|
// // 预约
|
||
|
// logger.info(String.format("开始调用HIS挂号:patientid=%s", reservation.getPatientId()));
|
||
|
// Map<Object, Object> params = new HashMap<>();
|
||
|
// params.put("patientid", reservation.getPatientId());
|
||
|
// params.put("reservationdate", reservation.getReservationDate());
|
||
|
// params.put("deptcode", reservation.getDeptCode());
|
||
|
// params.put("doctcode", reservation.getDoctCode());
|
||
|
// params.put("cliniccode", reservation.getClinicCode());
|
||
|
// params.put("tid", reservation.getTID());
|
||
|
// params.put("regfee", reservation.getRegFee());
|
||
|
// params.put("clinicfee", reservation.getClinicFee());
|
||
|
// params.put("paymoney", reservation.getPayMoney());
|
||
|
// params.put("paydate", reservation.getPayDate());
|
||
|
// params.put("paytime", reservation.getPayTime());
|
||
|
// // String transNo = java.util.UUID.randomUUID().toString();
|
||
|
// String transNo = reservation.getBankTransNo();
|
||
|
// params.put("transno", transNo);
|
||
|
// params.put("paydeviceid", reservation.getPayDeviceId());
|
||
|
// params.put("banktransno", reservation.getBankTransNo());
|
||
|
//
|
||
|
// WSDao wsDao = new WSDao();
|
||
|
// Map<Object, Object> reservationResult = wsDao.reservation(params);
|
||
|
// String hisTransNo = reservationResult.get("histransno").toString();
|
||
|
// if (!hisTransNo.equals("")) {
|
||
|
// // 更新预约信息
|
||
|
// logger.info(String.format("更新挂号信息(after his reservation):patientid=%s", reservation.getPatientId()));
|
||
|
// dbDao.updateReservationAfterReservation(reservation.getTradeNo(), transNo, hisTransNo);
|
||
|
// logger.info(String.format("挂号成功,patientid=%s", reservation.getPatientId()));
|
||
|
//
|
||
|
// HCodeService.regPayReportHISData(reservation.getOpenId(), reservation.getPatientId(), reservation.getDeptName(), reservation.getReservationDate()); // 电子健康卡上报数据
|
||
|
// } else {
|
||
|
// dbDao.updateReserveAfterFail(reservation.getTradeNo(), reservationResult.get("message").toString());
|
||
|
// logger.info(String.format("挂号失败,开始申请退款:patientid=%s", reservation.getPatientId()));
|
||
|
// boolean refundResult = dbDao.refund(1, UUID.randomUUID().toString().replace("-", ""),
|
||
|
// payInfo.getTradeNo(), "", payNotify.getTotal_fee(), payNotify.getTotal_fee(), reservationResult.get("message").toString());
|
||
|
// if (refundResult) {
|
||
|
// logger.info(String.format("退款申请成功:patientid=%s", reservation.getPatientId()));
|
||
|
// try {
|
||
|
// CommonUtil.sendMessage(openId, "挂号失败,已申请退款! " + reservationResult.get("message").toString());
|
||
|
// } catch (Exception ex) {
|
||
|
// logger.info(ex.getMessage());
|
||
|
// }
|
||
|
//
|
||
|
// }
|
||
|
// }
|
||
|
// } else {
|
||
|
// MchBaseResult baseResult = new MchBaseResult();
|
||
|
// baseResult.setReturn_code("FAIL");
|
||
|
// baseResult.setReturn_msg("ERROR");
|
||
|
// response.getOutputStream().write(XMLConverUtil.convertToXML(baseResult).getBytes());
|
||
|
// logger.info("支付失败!");
|
||
|
// }
|
||
|
// }
|
||
|
//
|
||
|
//}
|