|
@@ -9,7 +9,6 @@ import cn.com.ty.lift.quan.pay.service.PayService;
|
|
|
import cn.com.xwy.boot.web.dto.RestResponse;
|
|
|
import com.alipay.api.AlipayApiException;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.AllArgsConstructor;
|
|
@@ -19,8 +18,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -47,14 +46,13 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
if (byId == null) {
|
|
|
byId = new Pay();
|
|
|
byId.setUserId(pay.getUserId());
|
|
|
- byId.setAlipayId(pay.getAlipayId());
|
|
|
- } else {
|
|
|
- byId.setAlipayId(pay.getAlipayId());
|
|
|
}
|
|
|
+ //获取前端传过来的用户账号
|
|
|
+ byId.setAlipayAccount(pay.getAlipayAccount());
|
|
|
if (this.saveOrUpdate(byId)) {
|
|
|
return RestResponse.success(null, "成功");
|
|
|
}
|
|
|
- return RestResponse.fail("用户已绑定支付宝账号");
|
|
|
+ return RestResponse.fail();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -62,6 +60,9 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
* @date 2019/12/27 10:35
|
|
|
*/
|
|
|
public RestResponse pay(PayReq req) throws AlipayApiException {
|
|
|
+ if (req.getTotalAmount().compareTo(BigDecimal.ZERO) < 1) {
|
|
|
+ return RestResponse.fail("金额必须大于0");
|
|
|
+ }
|
|
|
Pay byId = this.getById(req.getUserId());
|
|
|
String outTradeNo = IdWorker.getIdStr();
|
|
|
PayRecord record = new PayRecord();
|
|
@@ -71,6 +72,8 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
record.setTotalAmount(req.getTotalAmount());
|
|
|
//设置订单号
|
|
|
record.setOutTradeNo(outTradeNo);
|
|
|
+ //设置订单标题
|
|
|
+ record.setSubject(req.getSubject());
|
|
|
//设置订单创建时间
|
|
|
record.setCreateDatetime(LocalDateTime.now());
|
|
|
//设置订单状态
|
|
@@ -81,13 +84,14 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
if (req.getType().equals(1)) {
|
|
|
//向支付宝发创建充值订单请求
|
|
|
tradeNo = AlipayUtil
|
|
|
- .create(byId.getAlipayId(), outTradeNo, req.getSubject(), req.getBody(), req.getTotalAmount());
|
|
|
+ .create(byId.getAlipayAccount(), outTradeNo, req.getSubject(), req.getBody(), req.getTotalAmount());
|
|
|
if (tradeNo != null) {
|
|
|
record.setType(1);
|
|
|
record.setTradeNo(tradeNo);
|
|
|
//保存订单信息到数据库
|
|
|
- recordService.save(record);
|
|
|
- return RestResponse.success(tradeNo);
|
|
|
+ if (recordService.save(record)) {
|
|
|
+ return RestResponse.success(outTradeNo);
|
|
|
+ }
|
|
|
}
|
|
|
return RestResponse.fail();
|
|
|
}
|
|
@@ -97,28 +101,25 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
if (req.getTotalAmount().compareTo(byId.getMoney()) > 0) {
|
|
|
return RestResponse.fail("账号余额不足");
|
|
|
}
|
|
|
- PayRecord one = recordService.getOne(new QueryWrapper<PayRecord>()
|
|
|
+ if (recordService.getOne(new QueryWrapper<PayRecord>()
|
|
|
.eq("type", 2)
|
|
|
- .eq("status", 0)
|
|
|
- );
|
|
|
- if (one != null) {
|
|
|
+ .eq("status", 0)) != null) {
|
|
|
return RestResponse.fail("已有提现订单");
|
|
|
}
|
|
|
int size = recordService.list(new QueryWrapper<PayRecord>()
|
|
|
.eq("user_id", req.getUserId())
|
|
|
+ .eq("type", 2)
|
|
|
.gt("create_datetime", LocalDate.now() + " 00:00:00")).size();
|
|
|
if (size >= 3) {
|
|
|
return RestResponse.fail("每天仅支持提现3次");
|
|
|
}
|
|
|
//创建提现订单
|
|
|
- outTradeNo = IdWorker.getIdStr();
|
|
|
byId.setFreezeMoney(req.getTotalAmount());
|
|
|
byId.setMoney(byId.getMoney().subtract(req.getTotalAmount()));
|
|
|
record.setType(2);
|
|
|
- record.setOutTradeNo(outTradeNo);
|
|
|
//保存订单信息到数据库
|
|
|
if (this.updateById(byId) && recordService.save(record)) {
|
|
|
- return RestResponse.success(null, "成功");
|
|
|
+ return RestResponse.success(record.getOutTradeNo(), "成功");
|
|
|
}
|
|
|
}
|
|
|
return RestResponse.fail();
|
|
@@ -131,43 +132,56 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
* @date 2019/12/27 14:50
|
|
|
*/
|
|
|
public RestResponse order(PayReq req) throws AlipayApiException {
|
|
|
- Pay payById = this.getById(req.getUserId());
|
|
|
- PayRecord recordById = recordService.getById(req.getId());
|
|
|
+ PayRecord recordByOutTradeNo = recordService.getOne(new QueryWrapper<PayRecord>()
|
|
|
+ .eq(req.getOutTradeNo() != null, "out_trade_no", req.getOutTradeNo()));
|
|
|
+ //如果已经完成的订单
|
|
|
+ if (recordByOutTradeNo.getStatus() == 1) {
|
|
|
+ return RestResponse.fail("订单已完成");
|
|
|
+ }
|
|
|
+ if (recordByOutTradeNo.getStatus() == 2) {
|
|
|
+ return RestResponse.fail("交易已取消");
|
|
|
+ }
|
|
|
//如果记录是充值
|
|
|
- if (recordById.getType() == 1) {
|
|
|
+ if (recordByOutTradeNo.getType() == 1) {
|
|
|
+ Pay payById = this.getById(recordByOutTradeNo.getUserId());
|
|
|
//调用支付宝订单查询接口,查询充值订单是否完成
|
|
|
- if (AlipayUtil.order(recordById.getTradeNo())) {
|
|
|
+ Map<String, Object> orderInfo = AlipayUtil.order(recordByOutTradeNo.getTradeNo());
|
|
|
+ if ((boolean) orderInfo.get("status")) {
|
|
|
//完成就设置用户在平台中的余额
|
|
|
payById.setMoney(payById.getMoney()
|
|
|
- .add(recordById.getTotalAmount()));
|
|
|
+ .add(recordByOutTradeNo.getTotalAmount()));
|
|
|
//设置订单状态为1完成,订单完成时间为当前
|
|
|
if (this.updateById(payById)) {
|
|
|
- recordById.setStatus(1);
|
|
|
- recordById.setFinishDatetime(LocalDateTime.now());
|
|
|
- if (recordService.updateById(recordById)) {
|
|
|
+ recordByOutTradeNo.setStatus(1);
|
|
|
+ recordByOutTradeNo.setFinishDatetime(LocalDateTime.now());
|
|
|
+ payById.setAlipayId(orderInfo.get("alipayId").toString());
|
|
|
+ if (this.updateById(payById) && recordService.updateById(recordByOutTradeNo)) {
|
|
|
//全部保存成功就返回 “成功”
|
|
|
return RestResponse.success(null, "成功");
|
|
|
}
|
|
|
}
|
|
|
- //如果查询充值订单没有完成,就返回 “订单还未支付”
|
|
|
- return RestResponse.fail("订单还未支付");
|
|
|
}
|
|
|
+ //如果查询充值订单没有完成,就返回 “订单还未支付”
|
|
|
+ return RestResponse.fail("订单还未支付");
|
|
|
}
|
|
|
//如果记录是提现
|
|
|
- if (recordById.getType() == 2) {
|
|
|
+ if (recordByOutTradeNo.getType() == 2) {
|
|
|
+ Pay byId = this.getById(recordByOutTradeNo.getUserId());
|
|
|
//调用支付宝企业转账到个人 接口
|
|
|
String tradeNo = AlipayUtil.withdraw(
|
|
|
- req.getAlipayId(),
|
|
|
- recordById.getOutTradeNo(),
|
|
|
- recordById.getRemark(),
|
|
|
- recordById.getTotalAmount(),
|
|
|
- recordById.getRemark());
|
|
|
+ byId.getAlipayId(),
|
|
|
+ recordByOutTradeNo.getOutTradeNo(),
|
|
|
+ recordByOutTradeNo.getSubject(),
|
|
|
+ recordByOutTradeNo.getTotalAmount());
|
|
|
//如果有订单码说明转账成功
|
|
|
if (tradeNo != null) {
|
|
|
- //设置
|
|
|
- recordById.setTradeNo(tradeNo);
|
|
|
- recordById.setStatus(1);
|
|
|
- if (recordService.updateById(recordById)) {
|
|
|
+ //设置冻结金额为0
|
|
|
+ byId.setFreezeMoney(new BigDecimal(0));
|
|
|
+ //设置支付宝订单id,订单状态,订单完成时间
|
|
|
+ recordByOutTradeNo.setTradeNo(tradeNo);
|
|
|
+ recordByOutTradeNo.setStatus(1);
|
|
|
+ recordByOutTradeNo.setFinishDatetime(LocalDateTime.now());
|
|
|
+ if (this.updateById(byId) && recordService.updateById(recordByOutTradeNo)) {
|
|
|
return RestResponse.success(null, "成功");
|
|
|
}
|
|
|
}
|
|
@@ -176,13 +190,50 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
return RestResponse.failParam();
|
|
|
}
|
|
|
|
|
|
+ //充值及提现订单列表
|
|
|
public RestResponse orders(PayReq req) {
|
|
|
List<PayRecord> payRecords = recordService.list(
|
|
|
new QueryWrapper<PayRecord>()
|
|
|
- .eq("user_id", req.getUserId()));
|
|
|
+ .eq("user_id", req.getUserId())
|
|
|
+ .eq(req.getType() != null, "type", req.getType())
|
|
|
+ .eq(req.getStatus() != null, "status", req.getStatus()));
|
|
|
if (payRecords.isEmpty()) {
|
|
|
return RestResponse.success();
|
|
|
}
|
|
|
return RestResponse.success(payRecords);
|
|
|
}
|
|
|
+
|
|
|
+ //取消订单
|
|
|
+ public RestResponse cancel(PayReq req) throws AlipayApiException {
|
|
|
+ PayRecord recordByOutTradeNo = recordService.getOne(new QueryWrapper<PayRecord>()
|
|
|
+ .eq("out_trade_no", req.getOutTradeNo()));
|
|
|
+ if (recordByOutTradeNo == null) {
|
|
|
+ return RestResponse.fail("订单不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ recordByOutTradeNo.setFinishDatetime(LocalDateTime.now());
|
|
|
+
|
|
|
+ //如果订单是充值类型
|
|
|
+ if (recordByOutTradeNo.getStatus() == 0) {
|
|
|
+ if (recordByOutTradeNo.getType() == 1) {
|
|
|
+ if (AlipayUtil.cancel(recordByOutTradeNo.getTradeNo())) {
|
|
|
+ recordByOutTradeNo.setStatus(2);
|
|
|
+ if (recordService.updateById(recordByOutTradeNo)) {
|
|
|
+ return RestResponse.success(null, "成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果订单是提现类型
|
|
|
+ if (recordByOutTradeNo.getType() == 2) {
|
|
|
+ Pay byId = this.getById(recordByOutTradeNo.getUserId());
|
|
|
+ byId.setMoney(byId.getMoney().add(byId.getFreezeMoney()));
|
|
|
+ byId.setFreezeMoney(BigDecimal.ZERO);
|
|
|
+ recordByOutTradeNo.setStatus(2);
|
|
|
+ if (this.updateById(byId) && recordService.updateById(recordByOutTradeNo)) {
|
|
|
+ return RestResponse.success(null, "成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return RestResponse.fail();
|
|
|
+ }
|
|
|
}
|