| @@ -137,58 +137,89 @@ public class WxPayBillServiceImpl implements WxPayBillService { | |||||
| logger.info("创建支付订单:"+record.toString()); | logger.info("创建支付订单:"+record.toString()); | ||||
| } else { | } 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) { | 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); | 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<String, String> 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<String,String> 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<String, String> 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<String,String> 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)); | |||||
| } | } | ||||
| // 统一下单 // 服务商模式 | // 统一下单 // 服务商模式 | ||||