package com.ibeetl.admin.console.service; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import com.ibeetl.admin.console.dao.MoneyConsoleDao; import com.ibeetl.admin.console.dao.PayConsoleDao; import com.ibeetl.admin.console.model.AccountLogModel; import com.ibeetl.admin.console.model.MoneyModel; import com.ibeetl.admin.core.entity.PayLog; import com.ibeetl.admin.core.util.payutil.WxConfig; import com.ibeetl.admin.core.util.payutil.WxRequestParam; import com.ibeetl.admin.core.util.payutil.WxUtil; import com.ibeetl.admin.core.web.JsonResult; import lombok.extern.slf4j.Slf4j; import org.beetl.ext.fn.Json; import org.beetl.sql.core.SQLManager; import org.beetl.sql.core.db.KeyHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; @Service @Slf4j public class PayConsoleService { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Autowired PayConsoleDao dao; @Autowired MoneyConsoleDao moneyConsoleDao; @Autowired WxUtil wxUtil; @Autowired WxRequestParam wxRequestParam; public JsonResult wxXcxPay(Map m, String payFlag){ try { // 添加账户log请求前信息 PayLog payLog = new PayLog(); payLog.setId(IdUtil.getSnowflake(1, 3).nextId()); payLog.setAccountBeforeMoney(Double.parseDouble(m.get("accountBeforeMoney"))); payLog.setUserId(m.get("userId")); payLog.setAccountId(m.get("accountId")); payLog.setWxOpenid(m.get("reOpenid")); payLog.setCreateTime(sdf.format(new Date())); payLog.setPayStatus("0"); payLog.setMoney(Double.parseDouble(m.get("totalAmount"))); payLog.setWithdrawBeforeMoney(Double.parseDouble(m.get("withdrawBeforeMoney"))); payLog.setMchBillno(m.get("payOrderId")); Map mx = new HashMap<>(); if(payFlag.equals("1")){ String param = wxRequestParam.getXcxParam(m); payLog.setRequestParams(param); if(dao.insertPaylog(payLog) == 0){ return JsonResult.failMessage("添加账号日志失败"); } // 小程序红包支付 mx = wxUtil.sendWxXcxPay(WxConfig.WX_SENDMIIPROGRAMHB_URL, param); }else if(payFlag.equals("2")){ String param = wxRequestParam.getQiyePayParam(m); payLog.setRequestParams(param); if(dao.insertPaylog(payLog) == 0){ return JsonResult.failMessage("添加账号日志失败"); } // 微信企业支付 mx = wxUtil.sendWxXcxPay(WxConfig.WX_QIYE_PAY_URL, param); }else{ return JsonResult.failMessage("payFlag错误"); } payLog.setResponseData(mx.toString()); if(mx == null){ payLog.setPayStatus("2"); dao.updatePaylogResponseData(payLog); return JsonResult.failMessage("支付返回结果为空"); } return updateAccount(mx, payLog); }catch (Exception e){ e.printStackTrace(); return JsonResult.failMessage(e.getMessage()); } } @Transactional JsonResult updateAccount(Map map, PayLog payLog){ if(map.toString().indexOf("FAIL")!=-1){ payLog.setPayStatus("2"); dao.updatePaylogResponseData(payLog); return JsonResult.failMessage(map.get("return_msg")); } // 更新账号余额 if(dao.updateAccountMoney(payLog) > 0){ // 更新订单表的状态 MoneyModel moneyModel = new MoneyModel(); moneyModel.setOrderId(map.get("payOrderId")); moneyModel.setPayFlag("2"); moneyConsoleDao.updateMoney(moneyModel); payLog.setPayStatus("1"); payLog.setAccountAfterMoney(payLog.getAccountBeforeMoney() - payLog.getMoney()); payLog.setWithdrawBeforeMoney(payLog.getWithdrawBeforeMoney() - payLog.getMoney()); dao.updatePaylogMoney(payLog); return JsonResult.successMessage(map.toString()); }else{ payLog.setRemark("支付成功,但是余额未扣除成功,原因待查"); dao.updatePaylogRemark(payLog); } return JsonResult.failMessage("账户余额更新失败"); } public void insertAccountLog(AccountLogModel log){ dao.insertAccountLog(log); } }