From ed8a67e14c23d5ced0c123e4d0a518bd0d399451 Mon Sep 17 00:00:00 2001 From: gongbiao Date: Mon, 26 Nov 2018 22:46:28 +0800 Subject: [PATCH] =?UTF-8?q?[B=E7=AB=AF][=E4=BF=AE=E6=94=B9][=E8=B4=A6?= =?UTF-8?q?=E5=8D=95=E6=94=AF=E4=BB=98OPENID=E4=B8=8D=E5=90=8C=E9=97=AE?= =?UTF-8?q?=E9=A2=98]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/WxPayBillServiceImpl.java | 125 +++++++++++------- 1 file changed, 78 insertions(+), 47 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java index 56ead9547..76b692b44 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java @@ -137,58 +137,89 @@ public class WxPayBillServiceImpl implements WxPayBillService { logger.info("创建支付订单:"+record.toString()); } else { //数据库存在订单信息,更新支付中状态,返回之前的预支付信息 - record = list.get(0); - record.setShare(isShare.getCode()); + WxPayBill wxPayBill = list.get(0); + wxPayBill.setShare(isShare.getCode()); //更新订单状态为支付中 - record.setPayBillStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); - record.setUpdateTime(currentDate); - int sqlRow = wxPayBillMapper.updateByPrimaryKeySelective(record); + wxPayBill.setPayBillStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); + wxPayBill.setUpdateTime(currentDate); + int sqlRow = wxPayBillMapper.updateByPrimaryKeySelective(wxPayBill); if (sqlRow != 1) { - logger.error("pay bill update error: " + record.toString()); + logger.error("pay bill update error: " + wxPayBill.toString()); throw new MallinkException(ErrorCode.DB_FAIL); } - logger.info("数据库存在订单信息,更新支付中状态,返回之前的预支付信息:"+JSONObject.toJSONString(record)); - //订单在120分钟之内没有失效,延用之前预支付订单号 - if(record.getPayTimeEnd().after(new Date())){ - String noncestr = Utility.generate32UUID(); - String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); - Map sighMap = MapUtil.getOrderMap(); - sighMap.put("appId", appInfo.getAppId()); - sighMap.put("timeStamp", timestamp); - sighMap.put("nonceStr", noncestr); - sighMap.put("package", "prepay_id=" + record.getPrepayId()); - sighMap.put("signType", "HMAC-SHA256"); - String signAgent = WxPayment.createSignHMAC(sighMap, payAccount.getApiKey()); - Map returnMap=new HashMap<>(); - returnMap.put("timeStamp", timestamp); - returnMap.put("nonceStr", noncestr); - returnMap.put("package", "prepay_id=" + record.getPrepayId()); - returnMap.put("paySign", signAgent); - returnMap.put("signType", "HMAC-SHA256"); - logger.info("订单在120分钟之内没有失效,延用之前预支付订单号:"+JSONObject.toJSONString(record)); - return new ResultData(Result.SUCCESS, "创建支付订单成功", returnMap); - } - //超过时间关闭订单 - ResultData resultData = payBillClose(appInfo, record); - if(resultData.code!=Result.SUCCESS){ - return new ResultData(ErrorCode.ORDER_IS_FAIL); - } - logger.info("超过时间关闭订单:"+record.toString()); - record=wxPayBillMapper.selectByPrimaryKey(record.getId()); - //创建新的订单号 - payBillNo = record.getId()+DateUtils.getSystemTime("yyMMddHHmmss"); - record.setPayTimeStart(currentDate); - long endtime = currentDate.getTime() + 120 * 60 * 1000; - record.setPayTimeEnd(new Date(endtime)); - record.setPayBillNo(payBillNo); - record.setPayAmount((Integer) bill.get("owe")); - record.setUpdateTime(currentDate); - sqlRow = wxPayBillMapper.updateByPrimaryKeySelective(record); - if (sqlRow != 1) { - logger.error("pay bill update error: " + JSONObject.toJSONString(record)); - throw new MallinkException(ErrorCode.DB_FAIL); + //数据库中openId与再次传来的openId不相同那么关闭此订单再次生成新的订单 + if(!wxPayBill.getOpenId().equals(record.getOpenId())){ + String openId = record.getOpenId(); + //关闭订单 + logger.info("openId不同时关闭之前的订单:"+record.toString()); + ResultData resultData = payBillClose(appInfo, wxPayBill); + if(resultData.code!=Result.SUCCESS){ + return new ResultData(ErrorCode.ORDER_IS_FAIL); + } + + record=wxPayBillMapper.selectByPrimaryKey(wxPayBill.getId()); + record.setOpenId(openId); + //创建新的订单号 + payBillNo = record.getId()+DateUtils.getSystemTime("yyMMddHHmmss"); + record.setPayTimeStart(currentDate); + long endtime = currentDate.getTime() + 120 * 60 * 1000; + record.setPayTimeEnd(new Date(endtime)); + record.setPayBillNo(payBillNo); + record.setPayAmount((Integer) bill.get("owe")); + record.setUpdateTime(currentDate); + sqlRow = wxPayBillMapper.updateByPrimaryKeySelective(record); + if (sqlRow != 1) { + logger.error("pay bill update error: " + JSONObject.toJSONString(record)); + throw new MallinkException(ErrorCode.DB_FAIL); + } + logger.info("新的订单数据:"+JSONObject.toJSONString(record)); + }else{ + logger.info("数据库存在订单信息,更新支付中状态,返回之前的预支付信息:"+JSONObject.toJSONString(wxPayBill)); + //订单在120分钟之内没有失效,延用之前预支付订单号 + if(wxPayBill.getPayTimeEnd().after(new Date())){ + String noncestr = Utility.generate32UUID(); + String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); + Map sighMap = MapUtil.getOrderMap(); + sighMap.put("appId", appInfo.getAppId()); + sighMap.put("timeStamp", timestamp); + sighMap.put("nonceStr", noncestr); + sighMap.put("package", "prepay_id=" + wxPayBill.getPrepayId()); + sighMap.put("signType", "HMAC-SHA256"); + String signAgent = WxPayment.createSignHMAC(sighMap, payAccount.getApiKey()); + Map returnMap=new HashMap<>(); + returnMap.put("timeStamp", timestamp); + returnMap.put("nonceStr", noncestr); + returnMap.put("package", "prepay_id=" + wxPayBill.getPrepayId()); + returnMap.put("paySign", signAgent); + returnMap.put("signType", "HMAC-SHA256"); + logger.info("订单在120分钟之内没有失效,延用之前预支付订单号:"+JSONObject.toJSONString(wxPayBill)); + return new ResultData(Result.SUCCESS, "创建支付订单成功", returnMap); + }else{ + //超过时间关闭订单 + ResultData resultData = payBillClose(appInfo, wxPayBill); + if(resultData.code!=Result.SUCCESS){ + return new ResultData(ErrorCode.ORDER_IS_FAIL); + } + logger.info("超过时间关闭订单:"+wxPayBill.toString()); + record=wxPayBillMapper.selectByPrimaryKey(wxPayBill.getId()); + //创建新的订单号 + payBillNo = record.getId()+DateUtils.getSystemTime("yyMMddHHmmss"); + record.setPayTimeStart(currentDate); + long endtime = currentDate.getTime() + 120 * 60 * 1000; + record.setPayTimeEnd(new Date(endtime)); + record.setPayBillNo(payBillNo); + record.setPayAmount((Integer) bill.get("owe")); + record.setUpdateTime(currentDate); + sqlRow = wxPayBillMapper.updateByPrimaryKeySelective(record); + if (sqlRow != 1) { + logger.error("pay bill update error: " + JSONObject.toJSONString(record)); + throw new MallinkException(ErrorCode.DB_FAIL); + } + logger.info("新的订单数据:"+JSONObject.toJSONString(record)); + } + } - logger.info("新的订单数据:"+JSONObject.toJSONString(record)); + } // 统一下单 // 服务商模式