|
@@ -8,15 +8,19 @@ import cn.com.ty.lift.quan.pay.dao.mapper.PayMapper;
|
|
|
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.annotation.TableId;
|
|
|
+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;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.HashMap;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -33,88 +37,152 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
|
|
|
|
|
|
private final PayRecordServiceImpl recordService;
|
|
|
|
|
|
- //更新用户的支付宝id
|
|
|
- public RestResponse updateAlipayId(Pay req) {
|
|
|
- Pay byId = this.getById(req.getUserId());
|
|
|
+ public RestResponse bind(Pay pay) {
|
|
|
+ //查询用户表,如果用户不存在就返回 "用户不存在"
|
|
|
+ if (this.getBaseMapper().selectUserByUserId(pay.getUserId()).get("count") < 1L) {
|
|
|
+ return RestResponse.fail("用户不存在");
|
|
|
+ }
|
|
|
+ //如果用户资金表不存在这个记录,就新增一个记录
|
|
|
+ Pay byId = this.getById(pay.getUserId());
|
|
|
if (byId == null) {
|
|
|
- return RestResponse.failParam();
|
|
|
+ byId = new Pay();
|
|
|
+ byId.setUserId(pay.getUserId());
|
|
|
+ byId.setAlipayId(pay.getAlipayId());
|
|
|
+ } else {
|
|
|
+ byId.setAlipayId(pay.getAlipayId());
|
|
|
}
|
|
|
-
|
|
|
- byId.setAlipayId(req.getAlipayId());
|
|
|
- if (this.updateById(byId)) {
|
|
|
+ if (this.saveOrUpdate(byId)) {
|
|
|
return RestResponse.success(null, "成功");
|
|
|
}
|
|
|
- return RestResponse.fail();
|
|
|
+ return RestResponse.fail("用户已绑定支付宝账号");
|
|
|
}
|
|
|
|
|
|
- //创建充值订单,创建提现待审核订单
|
|
|
+ /**
|
|
|
+ * @description 创建充值订单,创建提现待审核订单
|
|
|
+ * @date 2019/12/27 10:35
|
|
|
+ */
|
|
|
public RestResponse pay(PayReq req) throws AlipayApiException {
|
|
|
Pay byId = this.getById(req.getUserId());
|
|
|
String outTradeNo = IdWorker.getIdStr();
|
|
|
PayRecord record = new PayRecord();
|
|
|
+ //设置用户id
|
|
|
+ record.setUserId(req.getUserId());
|
|
|
+ //设置操作金额
|
|
|
+ record.setTotalAmount(req.getTotalAmount());
|
|
|
+ //设置订单号
|
|
|
+ record.setOutTradeNo(outTradeNo);
|
|
|
+ //设置订单创建时间
|
|
|
+ record.setCreateDatetime(LocalDateTime.now());
|
|
|
+ //设置订单状态
|
|
|
+ record.setStatus(0);
|
|
|
+ //设置支付宝订单号
|
|
|
+ String tradeNo;
|
|
|
//type 1 创建充值订单
|
|
|
if (req.getType().equals(1)) {
|
|
|
- String tradeNo = AlipayUtil
|
|
|
+ //向支付宝发创建充值订单请求
|
|
|
+ tradeNo = AlipayUtil
|
|
|
.create(byId.getAlipayId(), outTradeNo, req.getSubject(), req.getBody(), req.getTotalAmount());
|
|
|
if (tradeNo != null) {
|
|
|
- record.setUserId(req.getUserId());
|
|
|
record.setType(1);
|
|
|
record.setTradeNo(tradeNo);
|
|
|
- record.setOutTradeNo(outTradeNo);
|
|
|
- record.setCreateDatetime(LocalDateTime.now());
|
|
|
- recordService.save();
|
|
|
+ //保存订单信息到数据库
|
|
|
+ recordService.save(record);
|
|
|
return RestResponse.success(tradeNo);
|
|
|
}
|
|
|
return RestResponse.fail();
|
|
|
}
|
|
|
|
|
|
- //type 2 提现
|
|
|
+ //type 2 创建提现审核订单
|
|
|
if (req.getType().equals(2)) {
|
|
|
- //如果提现成功,更新用户金额,及金额操作记录表
|
|
|
- if (AlipayUtil
|
|
|
- .withdraw(byId.getAlipayId(), outTradeNo, "提现业务", req.getTotalAmount(), "备注")) {
|
|
|
-
|
|
|
- PayRecord record = new PayRecord();
|
|
|
- //设置原金额
|
|
|
- record.setOldMoney(byId.getMoney());
|
|
|
- //设置新金额
|
|
|
- record.setNewMoney(byId.getMoney().subtract(req.getTotalAmount()));
|
|
|
- record.setCreateDatetime(LocalDateTime.now());
|
|
|
- record.setType(2);
|
|
|
- record.setUserId(byId.getUserId());
|
|
|
- recordService.save(record);
|
|
|
+ if (req.getTotalAmount().compareTo(byId.getMoney()) > 0) {
|
|
|
+ return RestResponse.fail("账号余额不足");
|
|
|
+ }
|
|
|
+ PayRecord one = recordService.getOne(new QueryWrapper<PayRecord>()
|
|
|
+ .eq("type", 2)
|
|
|
+ .eq("status", 0)
|
|
|
+ );
|
|
|
+ if (one != null) {
|
|
|
+ return RestResponse.fail("已有提现订单");
|
|
|
+ }
|
|
|
+ int size = recordService.list(new QueryWrapper<PayRecord>()
|
|
|
+ .eq("user_id", req.getUserId())
|
|
|
+ .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.fail();
|
|
|
}
|
|
|
-
|
|
|
return RestResponse.fail();
|
|
|
}
|
|
|
|
|
|
- //获取订单状态,type 1已支付 2未支付
|
|
|
+ /**
|
|
|
+ * @param //用户id,资金操作记录id
|
|
|
+ * @return status 1完成 0未完成
|
|
|
+ * @description 审核订单
|
|
|
+ * @date 2019/12/27 14:50
|
|
|
+ */
|
|
|
public RestResponse order(PayReq req) throws AlipayApiException {
|
|
|
- Pay byId = this.getById(req.getUserId());
|
|
|
- HashMap<Object, Object> result = new HashMap<>();
|
|
|
- //如果订单已支付,更新用户金额,及金额操作记录表
|
|
|
- if (AlipayUtil.order(req.getTradeNo())) {
|
|
|
- PayRecord record = new PayRecord();
|
|
|
- //设置原金额
|
|
|
- record.setOldMoney(byId.getMoney());
|
|
|
- //设置新金额
|
|
|
- record.setNewMoney(byId.getMoney().subtract(req.getTotalAmount()));
|
|
|
- record.setCreateDatetime(LocalDateTime.now());
|
|
|
- record.setType(2);
|
|
|
- record.setUserId(byId.getUserId());
|
|
|
-
|
|
|
- this.save(byId);
|
|
|
- result.put("type", 1);
|
|
|
- return RestResponse.success(result);
|
|
|
+ Pay payById = this.getById(req.getUserId());
|
|
|
+ PayRecord recordById = recordService.getById(req.getId());
|
|
|
+ //如果记录是充值
|
|
|
+ if (recordById.getType() == 1) {
|
|
|
+ //调用支付宝订单查询接口,查询充值订单是否完成
|
|
|
+ if (AlipayUtil.order(recordById.getTradeNo())) {
|
|
|
+ //完成就设置用户在平台中的余额
|
|
|
+ payById.setMoney(payById.getMoney()
|
|
|
+ .add(recordById.getTotalAmount()));
|
|
|
+ //设置订单状态为1完成,订单完成时间为当前
|
|
|
+ if (this.updateById(payById)) {
|
|
|
+ recordById.setStatus(1);
|
|
|
+ recordById.setFinishDatetime(LocalDateTime.now());
|
|
|
+ if (recordService.updateById(recordById)) {
|
|
|
+ //全部保存成功就返回 “成功”
|
|
|
+ return RestResponse.success(null, "成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果查询充值订单没有完成,就返回 “订单还未支付”
|
|
|
+ return RestResponse.fail("订单还未支付");
|
|
|
+ }
|
|
|
}
|
|
|
- result.put("type", 2);
|
|
|
- return RestResponse.success(result);
|
|
|
+ //如果记录是提现
|
|
|
+ if (recordById.getType() == 2) {
|
|
|
+ //调用支付宝企业转账到个人 接口
|
|
|
+ String tradeNo = AlipayUtil.withdraw(
|
|
|
+ req.getAlipayId(),
|
|
|
+ recordById.getOutTradeNo(),
|
|
|
+ recordById.getRemark(),
|
|
|
+ recordById.getTotalAmount(),
|
|
|
+ recordById.getRemark());
|
|
|
+ //如果有订单码说明转账成功
|
|
|
+ if (tradeNo != null) {
|
|
|
+ //设置
|
|
|
+ recordById.setTradeNo(tradeNo);
|
|
|
+ recordById.setStatus(1);
|
|
|
+ if (recordService.updateById(recordById)) {
|
|
|
+ return RestResponse.success(null, "成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return RestResponse.fail();
|
|
|
+ }
|
|
|
+ return RestResponse.failParam();
|
|
|
}
|
|
|
|
|
|
- public RestResponse audit() {
|
|
|
-
|
|
|
+ public RestResponse orders(PayReq req) {
|
|
|
+ List<PayRecord> payRecords = recordService.list(
|
|
|
+ new QueryWrapper<PayRecord>()
|
|
|
+ .eq("user_id", req.getUserId()));
|
|
|
+ if (payRecords.isEmpty()) {
|
|
|
+ return RestResponse.success();
|
|
|
+ }
|
|
|
+ return RestResponse.success(payRecords);
|
|
|
}
|
|
|
-}
|
|
|
+}
|