Przeglądaj źródła

fix:商城余额

liujunchi 2 lat temu
rodzic
commit
012dd2c9b5

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -22,6 +22,7 @@ import com.ym.mec.thirdparty.adapay.entity.BaseResult;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -258,4 +259,7 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 
     // 订单收货状态更新
     void receive(String orderNo, boolean autoReceive);
+
+    // 查询余额
+    BigDecimal balance(Long userId);
 }

+ 15 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -429,7 +429,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         order.setPaymentBusinessChannel(rpMap.get("channelType"));
         order.setTenantId(this.get(order.getId()).getTenantId());
         TenantContextHolder.setTenantId(order.getTenantId());
-        callOrderCallBack(order);
+        if (StringUtils.isEmpty(rpMap.get("callback")) || !"0".equals(rpMap.get("callback"))) {
+            callOrderCallBack(order);
+        }
 
         if (status.equals(DealStatusEnum.SUCCESS)
                 && StringUtils.isNotBlank(order.getPaymentChannel())
@@ -1164,6 +1166,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             studentPaymentRouteOrderService.addRouteOrder(model.getOrderNo(), student.getOrganId(), balance);
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
+            notifyMap.put("callback", "0");
+            notifyMap.put("balanceAmount",studentPaymentOrder.getBalancePaymentAmount() == null?"0":studentPaymentOrder.getBalancePaymentAmount().toString());
             notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
             studentPaymentOrderService.updateOrder(notifyMap);
             notifyMap.put("orderNo", model.getOrderNo());
@@ -1184,6 +1188,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 student.getOrganId(),
                 "mall_buy"
         );
+        payMap.put("balanceAmount",studentPaymentOrder.getBalancePaymentAmount() == null?BigDecimal.ZERO:studentPaymentOrder.getBalancePaymentAmount());
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrderService.update(studentPaymentOrder);
@@ -1342,4 +1347,13 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         }
         studentPaymentOrderDao.update(orderByOrderNo);
     }
+
+    @Override
+    public BigDecimal balance(Long userId) {
+        SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId.intValue());
+        if (userCashAccount == null) {
+            throw new BizException("用户账户不存在");
+        }
+        return userCashAccount.getBalance() == null?BigDecimal.ZERO:userCashAccount.getBalance();
+    }
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/web/WebFeignService.java

@@ -12,6 +12,7 @@ import com.ym.mec.web.fallback.WebFeignServiceFallback;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -74,4 +75,8 @@ public interface WebFeignService {
 	// 商城获取 退款数据  只能全额退款
 	@PostMapping("/api/receive")
 	HttpResponseResult receive(@RequestParam("orderNo") String orderNo,@RequestParam("autoReceive") boolean autoReceive);
+
+	// 商城获取 收货状态
+	@PostMapping("/balance")
+	HttpResponseResult<BigDecimal> balance(@RequestParam("userId") Long userId);
 }

+ 6 - 0
mec-client-api/src/main/java/com/ym/mec/web/fallback/WebFeignServiceFallback.java

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Component;
 import com.ym.mec.web.WebFeignService;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -102,4 +103,9 @@ public class WebFeignServiceFallback implements WebFeignService {
 	public HttpResponseResult receive(String orderNo, boolean autoReceive) {
 		return null;
 	}
+
+	@Override
+	public HttpResponseResult<BigDecimal> balance(Long userId) {
+		return null;
+	}
 }

+ 35 - 22
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -240,28 +240,38 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             }
             handleCouponAmount(orderItemList, couponAmount);
         }
+        BigDecimal balanceAmount = BigDecimal.ZERO;
         //判断是否使用积分
-        if (orderParam.getUseIntegration() == null || orderParam.getUseIntegration().equals(0)) {
-            //不使用积分
-            for (OmsOrderItem orderItem : orderItemList) {
-                orderItem.setIntegrationAmount(new BigDecimal(0));
+        if (orderParam.isUseBalance()) {
+
+            // 查询余额
+            HttpResponseResult<BigDecimal> balance = webFeignService.balance(orderParam.getUserId());
+            if(balance.getStatus()) {
+                balanceAmount = balance.getData();
+            } else {
+                LOG.error("余额查询失败:{}",balance.getMsg());
             }
+
+            //不使用积分
+            // for (OmsOrderItem orderItem : orderItemList) {
+            //     orderItem.setIntegrationAmount(new BigDecimal(0));
+            // }
         } else {
             //使用积分
-            BigDecimal totalAmount = calcTotalAmount(orderItemList);
-            BigDecimal integrationAmount = getUseIntegrationAmount(orderParam.getUseIntegration(), totalAmount,
-                                                                   currentMember, orderParam.getCouponId() != null);
-            if (integrationAmount.compareTo(new BigDecimal(0)) == 0) {
-                Asserts.fail("积分不可用");
-            } else {
-                //可用情况下分摊到可用商品中
-                for (OmsOrderItem orderItem : orderItemList) {
-                    BigDecimal perAmount = orderItem.getProductPrice()
-                                                    .divide(totalAmount, 3, RoundingMode.HALF_EVEN)
-                                                    .multiply(integrationAmount);
-                    orderItem.setIntegrationAmount(perAmount);
-                }
-            }
+            // BigDecimal totalAmount = calcTotalAmount(orderItemList);
+            // BigDecimal integrationAmount = getUseIntegrationAmount(orderParam.getUseIntegration(), totalAmount,
+            //                                                        currentMember, orderParam.getCouponId() != null);
+            // if (integrationAmount.compareTo(new BigDecimal(0)) == 0) {
+            //     Asserts.fail("积分不可用");
+            // } else {
+            //     //可用情况下分摊到可用商品中
+            //     for (OmsOrderItem orderItem : orderItemList) {
+            //         BigDecimal perAmount = orderItem.getProductPrice()
+            //                                         .divide(totalAmount, 3, RoundingMode.HALF_EVEN)
+            //                                         .multiply(integrationAmount);
+            //         orderItem.setIntegrationAmount(perAmount);
+            //     }
+            // }
         }
         //计算order_item的实付金额
         handleRealAmount(orderItemList);
@@ -286,18 +296,18 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             order.setCouponId(orderParam.getCouponId());
             order.setCouponAmount(couponAmount);
         }
-        if (orderParam.getUseIntegration() == null) {
+        if (!orderParam.isUseBalance()) {
             order.setIntegration(0);
             order.setIntegrationAmount(new BigDecimal(0));
         } else {
-            order.setIntegration(orderParam.getUseIntegration());
-            order.setIntegrationAmount(calcIntegrationAmount(orderItemList));
+            order.setIntegration(0);
+            order.setIntegrationAmount(balanceAmount);
         }
         LOG.info("payAmount:{},totalAmount:{},couponAmount:{}",order.getTotalAmount().subtract(couponAmount),order.getTotalAmount(),couponAmount);
         if (orderParam.getOrderAmount().compareTo(order.getTotalAmount().subtract(couponAmount)) != 0) {
             throw new BizException("订单金额校验不通过");
         }
-        order.setPayAmount(orderParam.getOrderAmount());
+        order.setPayAmount(orderParam.getOrderAmount().subtract(balanceAmount));
         //转化为订单信息并插入数据库
         order.setMemberId(currentMember.getId());
         order.setCreateTime(new Date());
@@ -395,6 +405,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             userOrderPayment.setStatus(TradeStatusEnum.succeeded.getCode());
             userOrderPaymentService.saveOrUpdate(userOrderPayment);
         }
+        if (balanceAmount.compareTo(MapUtil.get(data, "balanceAmount",BigDecimal.class)) != 0 ) {
+            throw new BizException("余额有变动,订单生成失败");
+        }
         result.put("pay",data);
 
         return result;

+ 17 - 0
mec-web/src/main/java/com/ym/mec/web/controller/APIController.java

@@ -25,6 +25,7 @@ import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.common.controller.BaseController;
 
+import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -255,4 +256,20 @@ public class APIController extends BaseController {
 			return failed();
 		}
 	}
+
+
+
+	// 商城获取 收货状态
+	@PostMapping("/balance")
+	public HttpResponseResult<BigDecimal> balance(@RequestParam Long userId) {
+
+		try {
+			BigDecimal balance = studentPaymentOrderService.balance(userId);
+
+			return succeed(balance);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return failed();
+		}
+	}
 }