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<String, String> 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<String, String> 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<String, String> 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);
|
}
|
|
}
|