소스 검색

Merge branch 'dev-1.3.9' of wujunjie/patient-co-management into dev-1.3.9

trick9191 7 년 전
부모
커밋
ac9770e3ef

+ 162 - 0
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/app/charge/Charge.java

@ -0,0 +1,162 @@
package com.yihu.wlyy.service.app.charge;
/**
 * 医保扣费
 * add by hzp at 20170524
 */
public class Charge {
    private String tradeStatus; //交易状态    0 成功 1 失败  2 已退款
    private String chargeNo;  //医保业务流水号
    private String chargeTime;  //  医保交易成功时间
    private String outChargeNo;  //  接入应用业务流水号
    private String outChargeTime;  //  接入应用内业务时间
    private String medOrgNo;  //  医疗机构编号
    private String medOrgName;  //  医疗机构名称
    private String billNo;  //  待结算费用单据号
    private String cardNo;  //  医保卡号
    private String totalAmount;  //  交易总金额
    private String insuranceAmount;  //  医保支付金额
    private String selfPayAmount;  //  自付金额
    private String userId;  // 用户openId
    private String userName;  // 用户姓名
    private String idType;  // 证件号码
    private String idNo;  // 证件类型
    private String responseContent;  //扣费详情
    public String getResponseContent() {
        return responseContent;
    }
    public void setResponseContent(String responseContent) {
        this.responseContent = responseContent;
    }
    public String getTradeStatus() {
        return tradeStatus;
    }
    public void setTradeStatus(String tradeStatus) {
        this.tradeStatus = tradeStatus;
    }
    public String getChargeNo() {
        return chargeNo;
    }
    public void setChargeNo(String chargeNo) {
        this.chargeNo = chargeNo;
    }
    public String getChargeTime() {
        return chargeTime;
    }
    public void setChargeTime(String chargeTime) {
        this.chargeTime = chargeTime;
    }
    public String getOutChargeNo() {
        return outChargeNo;
    }
    public void setOutChargeNo(String outChargeNo) {
        this.outChargeNo = outChargeNo;
    }
    public String getOutChargeTime() {
        return outChargeTime;
    }
    public void setOutChargeTime(String outChargeTime) {
        this.outChargeTime = outChargeTime;
    }
    public String getMedOrgNo() {
        return medOrgNo;
    }
    public void setMedOrgNo(String medOrgNo) {
        this.medOrgNo = medOrgNo;
    }
    public String getMedOrgName() {
        return medOrgName;
    }
    public void setMedOrgName(String medOrgName) {
        this.medOrgName = medOrgName;
    }
    public String getBillNo() {
        return billNo;
    }
    public void setBillNo(String billNo) {
        this.billNo = billNo;
    }
    public String getCardNo() {
        return cardNo;
    }
    public void setCardNo(String cardNo) {
        this.cardNo = cardNo;
    }
    public String getTotalAmount() {
        return totalAmount;
    }
    public void setTotalAmount(String totalAmount) {
        this.totalAmount = totalAmount;
    }
    public String getInsuranceAmount() {
        return insuranceAmount;
    }
    public void setInsuranceAmount(String insuranceAmount) {
        this.insuranceAmount = insuranceAmount;
    }
    public String getSelfPayAmount() {
        return selfPayAmount;
    }
    public void setSelfPayAmount(String selfPayAmount) {
        this.selfPayAmount = selfPayAmount;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getIdType() {
        return idType;
    }
    public void setIdType(String idType) {
        this.idType = idType;
    }
    public String getIdNo() {
        return idNo;
    }
    public void setIdNo(String idNo) {
        this.idNo = idNo;
    }
}

+ 195 - 2
patient-co/patient-co-wlyy-job/src/main/java/com/yihu/wlyy/service/app/charge/OnePayService.java

@ -67,9 +67,9 @@ public class OnePayService {
    private static final Logger LOGGER = LoggerFactory.getLogger(OnePayService.class);
    /**
     * 家庭医生签约支付查询
     * 家庭医生签约支付查询(v1.4.0作废)
     */
    public String chargeQuery(String code, String accessToken) throws Exception {
    public String chargeQueryBak(String code, String accessToken) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
@ -248,4 +248,197 @@ public class OnePayService {
        return result;
    }
    /**
     * 家庭医生签约支付查询
     */
    public String chargeQuery(String code, String accessToken) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
        String error = "";
        String result = null;
        PayConfigura config = configuraDao.findWorkConfigura();
        try {
            WlyyCharge charge = chargeDao.findByCode(code);
            HospitalMapping hospitalMapping = hospitalMappingDao.findByCode(charge.getHospital());
            OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(), hospitalMapping.getAppId(), hospitalMapping.getAppSecret(), signType, encryptType);
            RequestParams requestParams = new RequestParams();
            requestParams.setAppId(hospitalMapping.getAppId());
            requestParams.setTimestamp(DateUtil.getCurrentDateTime());
            requestParams.setSignType(signType);
            requestParams.setEncryptType(encryptType);
            requestParams.setTransType(config.getChargeQueryType());
            //业务参数
            JSONObject params = new JSONObject();
            params.put("outChargeNo", code);  //接入应用结算业务流水号
            params.put("wxToken", accessToken);
            requestParams.setParam(params);
            msgBody = JSON.toJSONString(requestParams);
            //执行支付 返回原生返回值
            ResponseParams<JSONObject> res = onepayClient.execute(requestParams);
            if (OnepayDefaultClient.isSuccessful(res)) {
                //业务处理*******************
                result = JSON.toJSONString(res.getParam());
                Charge chargeView = objectMapper.readValue(result, Charge.class);
                saveToWlyyCharge(chargeView);
                LOGGER.info("请求成功,返回参数: " + result);
            } else {
                isSuccess = false;
                error = "请求失败,返回结果:" + res.getRespCode() + "," + res.getRespMsg();
            }
        } catch (Exception ex) {
            isSuccess = false;
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            ex.printStackTrace(pw);
            error = sw.toString();
        }
        if (!isSuccess) {
            throw new Exception(error);
        }
        return result;
    }
    /**
     * 只保存到家庭签约支付表
     *
     * @param chargeView 家庭签约支付展示类Charge
     * @throws Exception
     */
    public void saveToWlyyCharge(Charge chargeView) throws Exception {
        String outChargeNo = chargeView.getOutChargeNo();
        WlyyCharge chargePay = chargeDao.findByCode(outChargeNo);
        String tradeStatus = chargeView.getTradeStatus();
        String chargeNo = chargeView.getChargeNo();
        String chargeTime = chargeView.getChargeTime();
        String outChargeTime = chargeView.getOutChargeTime();
        String medOrgNo = chargeView.getMedOrgNo();
        String medOrgName = chargeView.getMedOrgName();
        String billNo = chargeView.getBillNo();
        String cardNo = chargeView.getCardNo();
        String totalAmount = chargeView.getTotalAmount();
        String insuranceAmount = chargeView.getInsuranceAmount();
        String selfPayAmount = chargeView.getSelfPayAmount();
        String userId = chargeView.getUserId();
        String userName = chargeView.getUserName();
        String idType = chargeView.getIdType();
        String idNo = chargeView.getIdNo();
        String responseContent = chargeView.getResponseContent();
        chargePay.setChargeNo(chargeNo);//支付流水号
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
        chargePay.setChargeTime(chargeTime);//支付平台交易成功时间
        chargePay.setCreateTime(formatDate.parse(outChargeTime));//接入应用内业务时间
        chargePay.setMedOrgNo(medOrgNo);//医疗机构编号
        chargePay.setMedOrgName(medOrgName);//医疗机构名称
        chargePay.setBillNo(billNo);//待结算费用单据号
        chargePay.setSsc(cardNo);//医保卡号
        chargePay.setTotalAmount(Integer.parseInt(totalAmount));//交易总金额
        chargePay.setInsuranceAmount(Integer.parseInt(insuranceAmount));//医保支付金额
        chargePay.setSelfpayAmount(Integer.parseInt(selfPayAmount));//自付金额
        chargePay.setOpenid(userId);
        chargePay.setName(userName);
        chargePay.setIdType(idType);//证件类型
        chargePay.setIdNo(idNo);//证件号码
        JSONObject response = JSON.parseObject(responseContent);
        String miRegisterNo = null;//医保挂号
        String miCollectDate = null;//收费日期
        String miCollectTime = null;//收费时间
        String miSettleNo = null;//医保收费单据号 (医保签约号)
        String miCollectStatus = null;//扣费状态
        String miRegisterStatus = null;//登记状态
        String cadresPay = "0";//公务员补助
        String miTotalFee = "0";//本次报销总额
        String healthCarePay = "0";//保健基金支付
        String heathPay = "0";//健康账户支付
        String accountPay = "0";//个人账户支付
        String selfPay = "0";//个人现金支付
        String civilPay = "0";//民政补助金额
        if (response != null && response.containsKey("miRegisterNo")) {
            miRegisterNo = response.getString("miRegisterNo");
        }
        if (response != null && response.containsKey("miCollectDate")) {
            miCollectDate = response.getString("miCollectDate");
        }
        if (response != null && response.containsKey("miCollectTime")) {
            miCollectTime = response.getString("miCollectTime");
        }
        if (response != null && response.containsKey("miSettleNo")) {
            miSettleNo = response.getString("miSettleNo");
        }
        if (response != null && response.containsKey("miCollectStatus")) {
            miCollectStatus = response.getString("miCollectStatus");
        }
        if (response != null && response.containsKey("miRegisterStatus")) {
            miRegisterStatus = response.getString("miRegisterStatus");
        }
        if (response != null && response.containsKey("cadresPay")) {
            cadresPay = response.getString("cadresPay");
        }
        if (response != null && response.containsKey("miTotalFee")) {
            miTotalFee = response.getString("miTotalFee");
        }
        if (response != null && response.containsKey("healthCarePay")) {
            healthCarePay = response.getString("healthCarePay");
        }
        if (response != null && response.containsKey("heathPay")) {
            heathPay = response.getString("heathPay");
        }
        if (response != null && response.containsKey("accountPay")) {
            accountPay = response.getString("accountPay");
        }
        if (response != null && response.containsKey("selfPay")) {
            selfPay = response.getString("selfPay");
        }
        if (response != null && response.containsKey("civilPay")) {
            civilPay = response.getString("civilPay");
        }
        chargePay.setMiRegisterNo(miRegisterNo);//医保挂号
        chargePay.setMiCollectDate(miCollectDate);
        chargePay.setMiCollectTime(miCollectTime);
        chargePay.setMiSettleNo(miSettleNo);
        chargePay.setMiCollectStatus(miCollectStatus);
        chargePay.setMiRegisterStatus(miRegisterStatus);
        chargePay.setCadresPay(cadresPay);
        chargePay.setMiTotalFee(miTotalFee);
        chargePay.setHealthCarePay(healthCarePay);
        chargePay.setHeathPay(heathPay);
        chargePay.setAccountPay(accountPay);
        chargePay.setSelfPay(selfPay);
        chargePay.setCivilPay(civilPay);
        //                判断是否需要更新数据 needUpload为0不需要更新
        LOGGER.info("before  goto " + chargePay.getNeedUpload() + " == " + outChargeNo);
        if (chargePay != null && !("0".equals(chargePay.getNeedUpload()))) {
            updateData(tradeStatus, formatDate.parse(chargeTime), chargeNo, chargePay);
            LOGGER.info("after  goto " + chargePay.getNeedUpload() + " == " + outChargeNo);
        }
    }
    /**
     * 更改数据 wlyy_sign_family wlyy_charge
     */
    public void updateData(String chargeStatus, Date chargeTime, String chargeNo, WlyyCharge charge) throws Exception {
        if ("0".equals(chargeStatus) || "SUCCESS".equals(chargeStatus)) {
            charge.setNeedUpload("1");
            charge.setTradeStatus("0");//交易状态 成功0 失败1
            //        成功支付根据wlyy_charge的code 去查找关联代码signCode在更新签约表
            signFamilyDao.updatePatientBegin(charge.getChargeRelation(), chargeTime, chargeNo, "1", 2);
        } else {
            charge.setTradeStatus("1");//交易状态 成功0 失败1
        }
        charge.setUpdateTime(new Date());
        chargeDao.save(charge);
    }
}

+ 193 - 8
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/weixin/wxpay/service/OnePayService.java

@ -392,9 +392,9 @@ public class OnePayService {
    }
    /**
     * 家庭医生签约支付查询
     * 家庭医生签约支付查询(v1.4.0作废)
     */
    public String chargeQuery(String code, String accessToken) throws Exception {
    public String chargeQueryBak(String code, String accessToken) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
@ -538,9 +538,9 @@ public class OnePayService {
                }
                if ("0".equals(chargeStatus) || "SUCCESS".equals(chargeStatus)) {
                    chargePay.setTradeStatus("1");//交易状态 成功1 失败0
                    chargePay.setTradeStatus("0");//交易状态 成功0 失败1
                } else {
                    chargePay.setTradeStatus("0");//交易状态 成功1 失败0
                    chargePay.setTradeStatus("1");//交易状态 成功0 失败1
                }
                chargePay.setChargeNo(chargeNo);//支付流水号
                SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
@ -583,6 +583,68 @@ public class OnePayService {
        return result;
    }
    /**
     * 家庭医生签约支付查询
     */
    public String chargeQuery(String code, String accessToken) throws Exception {
        Boolean isSuccess = true;
        String msgBody = "";
        String response = "";
        String error = "";
        String result = null;
        PayConfigura config = configuraDao.findWorkConfigura();
        try {
            WlyyCharge charge = chargeDao.findByCode(code);
            HospitalMapping hospitalMapping = hospitalMappingDao.findByCode(charge.getHospital());
            OnepayDefaultClient onepayClient = new OnepayDefaultClient(config.getOnepayApi(), hospitalMapping.getAppId(), hospitalMapping.getAppSecret(), signType, encryptType);
            RequestParams requestParams = new RequestParams();
            requestParams.setAppId(hospitalMapping.getAppId());
            requestParams.setTimestamp(DateUtil.getCurrentDateTime());
            requestParams.setSignType(signType);
            requestParams.setEncryptType(encryptType);
            requestParams.setTransType(config.getChargeQueryType());
            //业务参数
            JSONObject params = new JSONObject();
            params.put("outChargeNo", code);  //接入应用结算业务流水号
            params.put("wxToken", accessToken);
            requestParams.setParam(params);
            msgBody = JSON.toJSONString(requestParams);
            //执行支付 返回原生返回值
            ResponseParams<JSONObject> res = onepayClient.execute(requestParams);
            response = JSON.toJSONString(res);
            if (OnepayDefaultClient.isSuccessful(res)) {
                //业务处理*******************
                result = JSON.toJSONString(res.getParam());
                Charge chargeView = objectMapper.readValue(result, Charge.class);
                saveToWlyyCharge(chargeView);
                LOGGER.info("请求成功,返回参数: " + result);
            } else {
                isSuccess = false;
                error = "请求失败,返回结果:" + res.getRespCode() + "," + res.getRespMsg();
            }
        } catch (Exception ex) {
            isSuccess = false;
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            ex.printStackTrace(pw);
            error = sw.toString();
        }
        //type = 3易联众接口保存http日志
        logService.saveHttpLog(isSuccess, config.getChargeType(), "家庭医生签约支付查询", "POST", null, msgBody, response, error, logService.onepayType);
        if (!isSuccess) {
            throw new Exception(error);
        }
        return result;
    }
    /**
     * 生成电子社保卡
     */
@ -712,12 +774,135 @@ public class OnePayService {
     * 更改数据 wlyy_sign_family wlyy_charge
     */
    public void updateData(String chargeStatus, Date chargeTime, String chargeNo, WlyyCharge charge) throws Exception {
        charge.setUploadLog("1");
        if ("0".equals(chargeStatus) || "SUCCESS".equals(chargeStatus)) {
            charge.setNeedUpload("1");
            charge.setTradeStatus("0");//交易状态 0 成功 1 失败
            //        成功支付根据wlyy_charge的code 去查找关联代码signCode在更新签约表
            signFamilyDao.updatePatientBegin(charge.getChargeRelation(), chargeTime, chargeNo, "1", 2);
        } else {
            charge.setTradeStatus("1");//交易状态 0 成功 1 失败
        }
        charge.setUpdateTime(new Date());
        chargeDao.save(charge);
//        成功支付根据wlyy_charge的code 去查找关联代码signCode在更新签约表
        if ("0".equals(chargeStatus)) {
            signFamilyDao.updatePatientBegin(charge.getChargeRelation(), chargeTime, chargeNo, "1", 2);
    }
    /**
     * 只保存到家庭签约支付表
     *
     * @param chargeView 家庭签约支付展示类Charge
     * @throws Exception
     */
    public void saveToWlyyCharge(Charge chargeView) throws Exception {
        String outChargeNo = chargeView.getOutChargeNo();
        WlyyCharge chargePay = chargeDao.findByCode(outChargeNo);
        String tradeStatus = chargeView.getTradeStatus();
        String chargeNo = chargeView.getChargeNo();
        String chargeTime = chargeView.getChargeTime();
        String outChargeTime = chargeView.getOutChargeTime();
        String medOrgNo = chargeView.getMedOrgNo();
        String medOrgName = chargeView.getMedOrgName();
        String billNo = chargeView.getBillNo();
        String cardNo = chargeView.getCardNo();
        String totalAmount = chargeView.getTotalAmount();
        String insuranceAmount = chargeView.getInsuranceAmount();
        String selfPayAmount = chargeView.getSelfPayAmount();
        String userId = chargeView.getUserId();
        String userName = chargeView.getUserName();
        String idType = chargeView.getIdType();
        String idNo = chargeView.getIdNo();
        String responseContent = chargeView.getResponseContent();
        chargePay.setChargeNo(chargeNo);//支付流水号
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
        chargePay.setChargeTime(chargeTime);//支付平台交易成功时间
        chargePay.setCreateTime(formatDate.parse(outChargeTime));//接入应用内业务时间
        chargePay.setMedOrgNo(medOrgNo);//医疗机构编号
        chargePay.setMedOrgName(medOrgName);//医疗机构名称
        chargePay.setBillNo(billNo);//待结算费用单据号
        chargePay.setSsc(cardNo);//医保卡号
        chargePay.setTotalAmount(Integer.parseInt(totalAmount));//交易总金额
        chargePay.setInsuranceAmount(Integer.parseInt(insuranceAmount));//医保支付金额
        chargePay.setSelfpayAmount(Integer.parseInt(selfPayAmount));//自付金额
        chargePay.setOpenid(userId);
        chargePay.setName(userName);
        chargePay.setIdType(idType);//证件类型
        chargePay.setIdNo(idNo);//证件号码
        JSONObject response = JSON.parseObject(responseContent);
        String miRegisterNo = null;//医保挂号
        String miCollectDate = null;//收费日期
        String miCollectTime = null;//收费时间
        String miSettleNo = null;//医保收费单据号 (医保签约号)
        String miCollectStatus = null;//扣费状态
        String miRegisterStatus = null;//登记状态
        String cadresPay = "0";//公务员补助
        String miTotalFee = "0";//本次报销总额
        String healthCarePay = "0";//保健基金支付
        String heathPay = "0";//健康账户支付
        String accountPay = "0";//个人账户支付
        String selfPay = "0";//个人现金支付
        String civilPay = "0";//民政补助金额
        if (response != null && response.containsKey("miRegisterNo")) {
            miRegisterNo = response.getString("miRegisterNo");
        }
        if (response != null && response.containsKey("miCollectDate")) {
            miCollectDate = response.getString("miCollectDate");
        }
        if (response != null && response.containsKey("miCollectTime")) {
            miCollectTime = response.getString("miCollectTime");
        }
        if (response != null && response.containsKey("miSettleNo")) {
            miSettleNo = response.getString("miSettleNo");
        }
        if (response != null && response.containsKey("miCollectStatus")) {
            miCollectStatus = response.getString("miCollectStatus");
        }
        if (response != null && response.containsKey("miRegisterStatus")) {
            miRegisterStatus = response.getString("miRegisterStatus");
        }
        if (response != null && response.containsKey("cadresPay")) {
            cadresPay = response.getString("cadresPay");
        }
        if (response != null && response.containsKey("miTotalFee")) {
            miTotalFee = response.getString("miTotalFee");
        }
        if (response != null && response.containsKey("healthCarePay")) {
            healthCarePay = response.getString("healthCarePay");
        }
        if (response != null && response.containsKey("heathPay")) {
            heathPay = response.getString("heathPay");
        }
        if (response != null && response.containsKey("accountPay")) {
            accountPay = response.getString("accountPay");
        }
        if (response != null && response.containsKey("selfPay")) {
            selfPay = response.getString("selfPay");
        }
        if (response != null && response.containsKey("civilPay")) {
            civilPay = response.getString("civilPay");
        }
        chargePay.setMiRegisterNo(miRegisterNo);//医保挂号
        chargePay.setMiCollectDate(miCollectDate);
        chargePay.setMiCollectTime(miCollectTime);
        chargePay.setMiSettleNo(miSettleNo);
        chargePay.setMiCollectStatus(miCollectStatus);
        chargePay.setMiRegisterStatus(miRegisterStatus);
        chargePay.setCadresPay(cadresPay);
        chargePay.setMiTotalFee(miTotalFee);
        chargePay.setHealthCarePay(healthCarePay);
        chargePay.setHeathPay(heathPay);
        chargePay.setAccountPay(accountPay);
        chargePay.setSelfPay(selfPay);
        chargePay.setCivilPay(civilPay);
        //                判断是否需要更新数据 needUpload为0不需要更新
        LOGGER.info("before  goto " + chargePay.getNeedUpload() + " == " + outChargeNo);
        if (chargePay != null && !("0".equals(chargePay.getNeedUpload()))) {
            updateData(tradeStatus, formatDate.parse(chargeTime), chargeNo, chargePay);
            LOGGER.info("after  goto " + chargePay.getNeedUpload() + " == " + outChargeNo);
        }
    }

+ 135 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/wx/OnePayController.java

@ -34,6 +34,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.RequestMapping;
@ -81,6 +82,8 @@ public class OnePayController extends WeixinBaseController {
    private HospitalMappingDao mappingDao;
    @Autowired
    ObjectMapper objectMapper;
    @Autowired
    JdbcTemplate jdbcTemplate;
    @RequestMapping(value = "bindCard", method = RequestMethod.POST)
    @ApiOperation("查询绑卡信息")
@ -289,15 +292,15 @@ public class OnePayController extends WeixinBaseController {
    }
    /**
     * 页面回调更新数据
     * 页面回调更新数据(v1.4.0 作废)
     *
     * @param request
     * @param response
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/returnUrl")
    public void returnUrl(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
    @RequestMapping(value = "/returnUrlBak")
    public void returnUrlBak(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
        PayConfigura config = configuraDao.findWorkConfigura();
        Boolean isSuccess = false;
@ -437,15 +440,49 @@ public class OnePayController extends WeixinBaseController {
    }
    /**
     * 支付真正完成,异步回调返回支付参数 后台做数据操作
     * 页面回调更新数据
     *
     * @param request
     * @param response
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/receiveNotify")
    public void receiveNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
    @RequestMapping(value = "/returnUrl")
    public void returnUrl(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
        PayConfigura config = configuraDao.findWorkConfigura();
        Boolean isSuccess = false;
        String error = "";
        String responses = "";
        response.setContentType("text/html;charset=utf-8");
        try {
            //		如:查询显示订单信息
            isSuccess = true;
            String outChargeNo = request.getParameter("outChargeNo");//接入应用业务流水号
            pay.chargeQuery(outChargeNo, getAccessToken());//业务出参
        } catch (Exception e) {
            isSuccess = false;
            response.getWriter().write(e.getMessage());
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            error = sw.toString();
        }
        //                记录log日志到数据库
        logService.saveHttpLog(isSuccess, config.getReturnUrl(), "支付页面跳转", "POST", null, "", responses, error, logService.onepayType);
    }
    /**
     * 支付真正完成,异步回调返回支付参数 后台做数据操作(v1.4.0作废)
     *
     * @param request
     * @param response
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/receiveNotifyBak")
    public void receiveNotifyBak(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
        PayConfigura config = configuraDao.findWorkConfigura();
        Boolean isSuccess = false;
@ -617,6 +654,74 @@ public class OnePayController extends WeixinBaseController {
        logService.saveHttpLog(isSuccess, config.getReceiveNotify(), "异步支付通知", "POST", null, params, responses, error, logService.onepayType);
    }
    /**
     * 支付真正完成,异步回调返回支付参数 后台做数据操作
     *
     * @param request
     * @param response
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/receiveNotify")
    public void receiveNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, PayException {
        SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");
        PayConfigura config = configuraDao.findWorkConfigura();
        Boolean isSuccess = false;
        String error = "";
        String responses = "";
        response.setContentType("text/html;charset=utf-8");
        InputStream inputStream = request.getInputStream();
        String params = StreamUtils.copyToString(inputStream, Charset.forName("UTF-8"));
        try {
            JSONObject json = new JSONObject(params);
            String appId = json.getString("appId");
            HospitalMapping hospital = mappingDao.findByAppId(appId);
            String appSecret = hospital.getAppSecret();
            LOGGER.info("回调参数:{}", params);
            if (StringUtil.isEmpty(params)) {
                response.getWriter().write("empty");
                return;
            }
            // 参数转换
            ResponseParams<?> encryptRes = JSON.parseObject(params, ResponseParams.class);
            OnepayDefaultClient client = new OnepayDefaultClient("", appId, appSecret, encryptRes.getSignType(), encryptRes.getEncryptType());
            LOGGER.info("解密前:{}", JSON.toJSONString(encryptRes));
            ResponseParams<?> decryptRes = client.decryptNotifyResponse(encryptRes);
            LOGGER.info("解密后:{}", JSON.toJSONString(decryptRes));
            boolean isDecrypt = ("-1".equals(decryptRes.getRespCode()) ? false : true); // 是否解密失败
            if (!isDecrypt) {
                response.getWriter().write("DECRYPT FAILURE");
            } else {
                boolean isVerify = client.verifyResponseSign(decryptRes);
                LOGGER.info("验签结果:{}", isVerify);
                if (!isVerify) {
                    response.getWriter().write("FAILURE");
                } else {
//					业务逻辑代码
                    isSuccess = true;
                    responses = JSON.toJSONString(decryptRes);
                    JSONObject requestParam = new JSONObject(responses);//业务出参
                    JSONObject responseParam = requestParam.getJSONObject("param");
                    Charge chargeView = objectMapper.readValue(responseParam.toString(), Charge.class);
                    pay.saveToWlyyCharge(chargeView);
                    response.getWriter().write("SUCCESS");
                }
            }
        } catch (Exception e) {
            response.getWriter().write(e.getMessage());
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            error = sw.toString();
        }
        //                记录log日志到数据库
        logService.saveHttpLog(isSuccess, config.getReceiveNotify(), "异步支付通知", "POST", null, params, responses, error, logService.onepayType);
    }
    /**
     * 获取按月缴费总金额
     *
@ -641,4 +746,28 @@ public class OnePayController extends WeixinBaseController {
            return write(-1, "查询签约金额失败!");
        }
    }
    /**
     * 支付数据整理
     *
     * @throws IOException
     * @throws PayException
     */
    @RequestMapping(value = "/cleaData", method = RequestMethod.POST)
    @ApiOperation("支付数据整理")
    @ResponseBody
    public String cleaData() throws IOException, PayException {
        try {
            String sql = "SELECT t.code FROM wlyy_charge t WHERE (t.need_upload != '0' OR t.need_upload is null) AND (t.trade_status = '0' OR t.trade_status = '1')";
            List<Map<String, Object>> codes = jdbcTemplate.queryForList(sql);
            for (Map<String, Object> code :codes) {
                String outChargeNo = code.get("code").toString();
                pay.chargeQuery(outChargeNo,getAccessToken());
            }
            return write(200, "数据整理成功!");
        } catch (Exception e) {
            return write(-1, "数据整理成功失败!");
        }
    }
}