From bbe0a2fd03063316e50cf141986bda984599bbda Mon Sep 17 00:00:00 2001 From: 935090232@qq.com <ak473600000> Date: Tue, 22 Feb 2022 23:41:42 +0800 Subject: [PATCH] Merge branch 'developer' --- zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java | 201 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 168 insertions(+), 33 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java index cb91885..1adc3d1 100644 --- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java @@ -1,18 +1,21 @@ package com.matrix.system.shopXcx.api.action; -import com.matrix.biz.dao.BizUserDao; -import com.matrix.component.rabbitmq.RabiitMqTemplate; -import com.matrix.core.pojo.AjaxResult; -import com.matrix.core.tools.LogUtil; +import com.matrix.component.asyncmessage.AsyncMessageManager; import com.matrix.component.wechat.externalInterface.common.Signature; import com.matrix.component.wechat.externalInterface.common.Util; import com.matrix.component.wechat.externalInterface.protocol.queryProtocol.NotifyData; +import com.matrix.core.pojo.AjaxResult; +import com.matrix.core.tools.LogUtil; import com.matrix.system.common.bean.BusParameterSettings; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.dao.BusParameterSettingsDao; -import com.matrix.system.common.interceptor.HostInterceptor; +import com.matrix.system.hive.bean.MoneyCardUse; +import com.matrix.system.hive.bean.MoneyCardUseFlow; import com.matrix.system.hive.bean.SysVipInfo; +import com.matrix.system.hive.dao.MoneyCardUseDao; +import com.matrix.system.hive.dao.MoneyCardUseFlowDao; import com.matrix.system.hive.dao.SysVipInfoDao; +import com.matrix.system.score.service.ScoreVipDetailService; import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoin; import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoinUser; import com.matrix.system.shopXcx.bean.ShopOrder; @@ -21,7 +24,8 @@ import com.matrix.system.shopXcx.dao.ShopActivitiesGroupJoinUserDao; import com.matrix.system.shopXcx.dao.ShopOrderDao; import com.matrix.system.shopXcx.dao.ShopPayLogDao; -import com.matrix.system.shopXcx.mqTask.MQTaskRouting; +import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; @@ -29,12 +33,10 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import org.xml.sax.SAXException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -66,8 +68,6 @@ @Autowired private ShopPayLogDao shopPayLogDao; - @Autowired - private RabiitMqTemplate rabiitMqTemplate; @Autowired private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao; @@ -81,17 +81,17 @@ @Autowired BusParameterSettingsDao busParameterSettingsDao; + @Autowired + ScoreVipDetailService scoreVipDetailService; + + @Autowired + AsyncMessageManager asyncMessageManager; @Value("${evn}") private String evn; /** * 微信支付回调接口 - * - * @param response - * @param request - * @throws IOException - * @throws Exception */ @Transactional(rollbackFor = Exception.class) @RequestMapping(value = "/wxapi/wxpayCallback") @@ -110,16 +110,25 @@ notityXml.append(inputLine); } request.getReader().close(); - // XMl转对象 - NotifyData data = (NotifyData) Util.getObjectFromXML(notityXml.toString(), NotifyData.class); - LogUtil.info(data.toString()); LogUtil.info("notityXml ---- :{} ", notityXml); + + + // XMl转对象 + Object bb = Util.getObjectFromXML(notityXml.toString(), NotifyData.class); + NotifyData data = new NotifyData(); + BeanUtils.copyProperties(bb,data); LogUtil.info("----return_code = {}", data.getReturn_code()); + // 返回状态码 SUCCESS/FAIL if (AppConstance.CODE_SUCCESS.equals(data.getReturn_code())) { + + orderId = data.getAttach(); + // 检验订单状态 + ShopOrder order = shopOrderDao.selectById(Integer.valueOf(orderId)); + // 校验签名 - BusParameterSettings paySecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_SECRET, HostInterceptor.getCompanyId()); + BusParameterSettings paySecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_SECRET, order.getCompanyId()); if (Signature.checkIsSignValidFromResponseString(notityXml.toString(),paySecret.getParamValue())) { // 校验业务结果 if (AppConstance.CODE_SUCCESS.equals(data.getResult_code())) { @@ -129,14 +138,13 @@ Double total_fee = Double.parseDouble(data.getTotal_fee()); // 商户订单号 String payNum = data.getOut_trade_no(); - orderId = data.getAttach(); + LogUtil.info("支付回调关键信息---total_fee:{},payNum:{},orderId:{}", total_fee, payNum, orderId); // 订单ID BigDecimal payMoney = new BigDecimal(total_fee).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - // 检验订单状态 - ShopOrder order = shopOrderDao.selectById(Integer.valueOf(orderId)); + if (order != null && ShopOrder.ORDER_PAY_STATUS_WAIT == order.getPayStatus()) { ShopPayLog payLog = new ShopPayLog(); // TODO 校验支付金额 @@ -150,12 +158,12 @@ //设置支付状态为支付成功 modifyMap.put("payStatus", ShopOrder.ORDER_PAY_STATUS_SUCCESS); //设置订单状态 - if (ShopOrder.ORDER_TYPE_GOODS == order.getOrderType()) { + if (ShopOrder.SHIPPING_METHOD_WL == order.getShippingMethod()) { //如果是商品订单则进入待发货 modifyMap.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_SEND); - } else { - //如果是服务订单则进入待评价 - modifyMap.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_REMARK); + } else if (ShopOrder.SHIPPING_METHOD_MDZT == order.getShippingMethod()) { + //如果是门店自提则进入待收款 + modifyMap.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_RECEIVE); } shopOrderDao.updateByMap(modifyMap); @@ -178,7 +186,7 @@ } shopActivitiesGroupJoinDao.updateByModel(groupJoin); - SysVipInfo sysVipInfo = sysVipInfoDao.selectByPhone(order.getUserTel()); + SysVipInfo sysVipInfo = sysVipInfoDao.selectByPhone(order.getUserTel(), order.getCompanyId()); if(sysVipInfo!=null){ sysVipInfo.setIsDeal(SysVipInfo.DEAL_VIP); sysVipInfoDao.update(sysVipInfo); @@ -187,14 +195,14 @@ } // 根据订单类型创建不同的处理任务 - rabiitMqTemplate.sendMsg(MQTaskRouting.CREATE_ORDER+evn, orderId); + asyncMessageManager.sendMsg(AsyncMessageRouting.CREATE_ORDER,"orderId=%s",orderId); threadResult.putInMap("status", "success"); resXml = AppConstance.RESULT_XML_SUCCESS; //支付记录 - recordPayLog(Integer.valueOf(orderId), payMoney, order, payLog, "支付成功", ShopOrder.ORDER_PAY_STATUS_SUCCESS); + recordPayLog(Integer.valueOf(orderId), 1, order.getOrderNo(), payMoney, "支付成功", ShopOrder.ORDER_PAY_STATUS_SUCCESS); } else { @@ -219,7 +227,7 @@ threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:003)"); resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "通信标识失败"); } - } catch (ParserConfigurationException | IOException | SAXException e) { + } catch (Exception e) { LogUtil.error("支付回调签名错误", e); threadResult.putInMap("status", "err"); threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:004)"); @@ -233,12 +241,137 @@ } - private void recordPayLog(Integer orderId, BigDecimal payMoney, ShopOrder order, ShopPayLog payLog, String payRemark, int payStatus) { + + @Autowired + MoneyCardUseFlowDao moneyCardUseFlowDao; + + @Autowired + MoneyCardUseDao moneyCardUseDao; + + /** + * 微信充值回调 + */ + @Transactional(rollbackFor = Exception.class) + @RequestMapping(value = "/wxapi/rechargeCallBack") + public void rechargeCallBack(HttpServletResponse response, HttpServletRequest request) throws IOException { + LogUtil.info("微信充值回调start...."); + + // 获取输入参数 + String inputLine; + StringBuffer notityXml = new StringBuffer(); + String resXml = ""; + String moneyCardUseFlowId = ""; + + AjaxResult threadResult = new AjaxResult(AjaxResult.STATUS_SUCCESS, ""); + try { + while ((inputLine = request.getReader().readLine()) != null) { + notityXml.append(inputLine); + } + request.getReader().close(); + LogUtil.info("notityXml ---- :{} ", notityXml); + + + // XMl转对象 + Object bb = Util.getObjectFromXML(notityXml.toString(), NotifyData.class); + NotifyData data = new NotifyData(); + BeanUtils.copyProperties(bb,data); + LogUtil.info("----return_code = {}", data.getReturn_code()); + + + // 返回状态码 SUCCESS/FAIL + if (AppConstance.CODE_SUCCESS.equals(data.getReturn_code())) { + + moneyCardUseFlowId = data.getAttach(); + // 检验订单状态 + MoneyCardUseFlow moneyCardUseFlow = moneyCardUseFlowDao.selectById(Long.valueOf(moneyCardUseFlowId)); + SysVipInfo user=sysVipInfoDao.selectById(moneyCardUseFlow.getVipId()); + + // 校验签名 + BusParameterSettings paySecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_SECRET, user.getCompanyId()); + if (Signature.checkIsSignValidFromResponseString(notityXml.toString(),paySecret.getParamValue())) { + // 校验业务结果 + if (AppConstance.CODE_SUCCESS.equals(data.getResult_code())) { + // 返回SUCCESS报文 + resXml = AppConstance.RESULT_XML_SUCCESS; + // 支付费用 + Double total_fee = Double.parseDouble(data.getTotal_fee()); + // 商户订单号 + String payNum = data.getOut_trade_no(); + + LogUtil.info("支付回调关键信息---total_fee:{},payNum:{},moneyCardUseFlowId:{}", total_fee, payNum, moneyCardUseFlowId); + // 订单ID + Double payMoney = new BigDecimal(total_fee).divide(new BigDecimal(100), 2, + BigDecimal.ROUND_HALF_DOWN).doubleValue(); + + if (moneyCardUseFlow.getCarUseId()==null) { + + if(payMoney.equals(moneyCardUseFlow.getTotal())){ + threadResult.putInMap("status", "success"); + resXml = AppConstance.RESULT_XML_SUCCESS; + MoneyCardUse moneyCardUse = moneyCardUseDao.selectVipCard(user.getId()); + moneyCardUseFlow.setCarUseId(moneyCardUse.getId()); + moneyCardUseFlow.setCardName(moneyCardUse.getCardName()); + Double balance=moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney(); + moneyCardUseFlow.setBalance(balance==null?0:balance); + moneyCardUseFlowDao.update(moneyCardUseFlow); + + moneyCardUse.setRealMoney(moneyCardUse.getRealMoney()+payMoney.doubleValue()); + moneyCardUseDao.update(moneyCardUse); + + //充值记录 + recordPayLog(Integer.valueOf(moneyCardUseFlowId),2,moneyCardUseFlow.getPayNo(),new BigDecimal(payMoney), "充值成功", ShopOrder.ORDER_PAY_STATUS_SUCCESS); + }else{ + LogUtil.debug("支付金额不一致,检查支付金额payMoney={},order.getPayMoney()={}", payMoney, moneyCardUseFlow.getTotal()); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "支付金额不一致"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "微信标识业务是失败"); + } + + } else { + LogUtil.info("充值已经确认"); + } + + } else { + LogUtil.info("微信标识业务是失败"); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:001)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "微信标识业务是失败"); + } + } else { + LogUtil.info("无效签名"); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:002)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "微信标识业务是失败"); + } + } else { + LogUtil.info("通信标识失败"); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:003)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "通信标识失败"); + } + } catch (Exception e) { + LogUtil.error("支付回调签名错误", e); + threadResult.putInMap("status", "err"); + threadResult.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:004)"); + resXml = AppConstance.RESULT_XML_FAIL.replace(ERRORMSG, "支付回调签名错误"); + } finally { + // 通知线程消息 + PayThreadPool.notifyThread(Integer.valueOf(moneyCardUseFlowId), threadResult); + sendResultBack(response, resXml); + } + return; + + } + + + + private void recordPayLog(Integer orderId, Integer type,String orderNo, BigDecimal payMoney, String payRemark, int payStatus) { //设置支付类型为收款 - payLog.setPayType(1); + ShopPayLog payLog=new ShopPayLog(); + payLog.setPayType(type); payLog.setJoinId(orderId); payLog.setPayMoney(payMoney); - payLog.setPayOrderNo(order.getOrderNo()); + payLog.setPayOrderNo(orderNo); payLog.setPayRemark(payRemark); payLog.setPayStatus(payStatus); payLog.setCreateBy(AppConstance.SYSTEM_USER); @@ -271,4 +404,6 @@ return null; } + + } \ No newline at end of file -- Gitblit v1.9.1