|
@@ -1,9 +1,12 @@
|
|
|
package com.caimei365.order.service.impl;
|
|
|
|
|
|
+import com.caimei365.order.components.OrderCommonService;
|
|
|
+import com.caimei365.order.components.ProductService;
|
|
|
import com.caimei365.order.mapper.BaseMapper;
|
|
|
import com.caimei365.order.mapper.OnlinePayMapper;
|
|
|
import com.caimei365.order.mapper.OrderCommonMapper;
|
|
|
import com.caimei365.order.model.ResponseJson;
|
|
|
+import com.caimei365.order.model.po.BalanceRecordPo;
|
|
|
import com.caimei365.order.model.vo.DiscernReceiptVo;
|
|
|
import com.caimei365.order.model.vo.OrderProductVo;
|
|
|
import com.caimei365.order.model.vo.OrderVo;
|
|
@@ -14,6 +17,8 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -34,6 +39,144 @@ public class OnlinePayServiceImpl implements OnlinePayService {
|
|
|
private OnlinePayMapper onlinePayMapper;
|
|
|
@Resource
|
|
|
private OrderCommonMapper orderCommonMapper;
|
|
|
+ @Resource
|
|
|
+ private OrderCommonService orderCommonService;
|
|
|
+ @Resource
|
|
|
+ private ProductService productService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 订单支付前效验付款规则
|
|
|
+ *
|
|
|
+ * @param orderId 订单Id
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<Map<String, Object>> payBeforeCheck(Integer orderId) {
|
|
|
+ // 订单信息
|
|
|
+ OrderVo order = onlinePayMapper.getOrderByOrderId(orderId);
|
|
|
+ if (null == order) {
|
|
|
+ return ResponseJson.error("订单不存在", null);
|
|
|
+ }
|
|
|
+ // 返回数据
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("orderId", orderId);
|
|
|
+ // 查询审核中的退款退货数量
|
|
|
+ int refundCount = onlinePayMapper.getRefundCount(orderId);
|
|
|
+ if (refundCount > 0) {
|
|
|
+ map.put("code", -1);
|
|
|
+ map.put("msg", "订单已申请全部退款,无需再付款!");
|
|
|
+ return ResponseJson.success(map);
|
|
|
+ }
|
|
|
+ // 付款金额
|
|
|
+ orderCommonService.getDiscernReceiptAndSetOrder(order);
|
|
|
+ // 商品数据
|
|
|
+ List<OrderProductVo> orderProductList = orderCommonMapper.getOrderProductByOrderId(orderId);
|
|
|
+ for (OrderProductVo orderProduct : orderProductList) {
|
|
|
+ // 是否充值商品
|
|
|
+ boolean recharge = productService.isRechargeProduct(orderProduct.getProductId());
|
|
|
+ if (recharge) {
|
|
|
+ return ResponseJson.success(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 可用余额
|
|
|
+ Double availableMoney = baseMapper.getAbleUserMoney(order.getUserId());
|
|
|
+ if (MathUtil.compare(availableMoney, 0) > 0) {
|
|
|
+ if (MathUtil.compare(availableMoney, order.getPendingPayments()) >= 0) {
|
|
|
+ map.put("code", 2);
|
|
|
+ map.put("msg", "余额大于或等于待付金额");
|
|
|
+ map.put("ableUserMoney", availableMoney);
|
|
|
+ } else {
|
|
|
+ map.put("code", 1);
|
|
|
+ map.put("msg", "余额不为0且小于待付金额");
|
|
|
+ map.put("ableUserMoney", availableMoney);
|
|
|
+ map.put("pendingPayments", MathUtil.sub(order.getPendingPayments(), availableMoney));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ResponseJson.success(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 订单支付,余额抵扣
|
|
|
+ *
|
|
|
+ * @param orderId 订单Id
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<Map<String, Object>> balanceDeduction(Integer orderId) {
|
|
|
+ // 订单信息
|
|
|
+ OrderVo order = onlinePayMapper.getOrderByOrderId(orderId);
|
|
|
+ if (null == order) {
|
|
|
+ return ResponseJson.error("订单不存在", null);
|
|
|
+ }
|
|
|
+ // 付款金额
|
|
|
+ orderCommonService.getDiscernReceiptAndSetOrder(order);
|
|
|
+ // 可用余额
|
|
|
+ Double availableMoney = baseMapper.getAbleUserMoney(order.getUserId());
|
|
|
+ Double balancePayFee = 0d;
|
|
|
+ if (MathUtil.compare(availableMoney, 0) > 0) {
|
|
|
+ if (MathUtil.compare(availableMoney, order.getPendingPayments()) >= 0) {
|
|
|
+ if (0 != order.getStatus()) {
|
|
|
+ if (1 == order.getSendOutStatus()) {
|
|
|
+ order.setStatus(31);
|
|
|
+ } else if (2 == order.getSendOutStatus()) {
|
|
|
+ order.setStatus(32);
|
|
|
+ } else {
|
|
|
+ order.setStatus(33);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ order.setReceiptStatus(3);
|
|
|
+ balancePayFee = order.getPendingPayments();
|
|
|
+ } else {
|
|
|
+ if (0 != order.getStatus()) {
|
|
|
+ //待确认状态,不修改订单状态
|
|
|
+ if (1 == order.getSendOutStatus()) {
|
|
|
+ order.setStatus(21);
|
|
|
+ } else if (2 == order.getSendOutStatus()) {
|
|
|
+ order.setStatus(22);
|
|
|
+ } else {
|
|
|
+ order.setStatus(23);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ order.setReceiptStatus(2);
|
|
|
+ balancePayFee = availableMoney;
|
|
|
+ }
|
|
|
+
|
|
|
+ order.setBalancePayFee(MathUtil.add(order.getBalancePayFee(), balancePayFee).doubleValue());
|
|
|
+ order.setPayableAmount(MathUtil.sub(order.getPayableAmount(), balancePayFee).doubleValue());
|
|
|
+ Date date = new Date();
|
|
|
+ String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
|
+ order.setUpdateDate(curDateStr);
|
|
|
+ // 更新订单支付状态
|
|
|
+ onlinePayMapper.updateOrderStatus(order);
|
|
|
+ // 剩余待付金额
|
|
|
+ order.setPendingPayments(MathUtil.sub(order.getPendingPayments(), balancePayFee).doubleValue());
|
|
|
+ // 修改账户余额
|
|
|
+ double userMoney = baseMapper.getUserMoney(order.getUserId());
|
|
|
+ if (0 != order.getStatus()) {
|
|
|
+ userMoney = MathUtil.sub(userMoney, balancePayFee).doubleValue();
|
|
|
+ //保存收款记录
|
|
|
+ productService.saveDiscernReceipt(balancePayFee, orderId, "【订单支付,余额抵扣】");
|
|
|
+ }
|
|
|
+ availableMoney = MathUtil.sub(availableMoney, balancePayFee).doubleValue();
|
|
|
+ onlinePayMapper.updateMoneyByUserId(userMoney, availableMoney, order.getUserId());
|
|
|
+ log.info("【订单支付,余额抵扣】>>>>>>>>>>>更新用户余额(update[user])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
|
+ //保存余额到余额收支记录
|
|
|
+ BalanceRecordPo balanceRecord = new BalanceRecordPo();
|
|
|
+ balanceRecord.setUserId(order.getUserId());
|
|
|
+ balanceRecord.setType(2);
|
|
|
+ balanceRecord.setBalanceType(1);
|
|
|
+ balanceRecord.setAddDate(new Date());
|
|
|
+ balanceRecord.setAmount(balancePayFee);
|
|
|
+ balanceRecord.setOrderId(orderId);
|
|
|
+ balanceRecord.setRemark("订单支付,余额抵扣");
|
|
|
+ balanceRecord.setDelFlag(0);
|
|
|
+ // 保存 余额收支记录
|
|
|
+ baseMapper.insertBalanceRecord(balanceRecord);
|
|
|
+ log.info("【订单支付,余额抵扣】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + orderId);
|
|
|
+ }
|
|
|
+ Map<String, Object> map = new HashMap<>(2);
|
|
|
+ map.put("order", order);
|
|
|
+ map.put("balancePayFee", balancePayFee);
|
|
|
+ return ResponseJson.success(map);
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 获取线上支付全局开关状态
|