From b5ef1a23a99f11e5c9649f516327925713084b44 Mon Sep 17 00:00:00 2001
From: phpcjl <phpcjl@gmail.com>
Date: 星期二, 10 十二月 2024 14:33:24 +0800
Subject: [PATCH] 1.
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 196 ++++++++++++++++++++++++++++++++++++------------
1 files changed, 147 insertions(+), 49 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
index bf68034..d0dad92 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -14,11 +14,13 @@
import com.ruoyi.account.api.vo.PaymentUserCoupon;
import com.ruoyi.account.api.vo.PaymentUserCouponVo;
import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.mapper.ShoppingCartMapper;
import com.ruoyi.order.model.Order;
import com.ruoyi.order.model.OrderGood;
import com.ruoyi.order.model.ShoppingCart;
+import com.ruoyi.order.service.CommissionService;
import com.ruoyi.order.service.OrderGoodService;
import com.ruoyi.order.service.OrderService;
import com.ruoyi.order.service.ShoppingCartService;
@@ -36,6 +38,7 @@
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@@ -95,6 +98,9 @@
@Resource
private BalanceChangeRecordClient balanceChangeRecordClient;
+
+ @Resource
+ private CommissionService commissionService;
@@ -321,10 +327,11 @@
@Override
- public void addGoods(ShoppingCart shoppingCart) {
+ public Long addGoods(ShoppingCart shoppingCart) {
Long userid = tokenService.getLoginUserApplet().getUserid();
shoppingCart.setAppUserId(userid);
this.save(shoppingCart);
+ return shoppingCart.getId();
}
@@ -339,11 +346,14 @@
return R.fail("修改数量不能小于等于0");
}
ShoppingCart shoppingCart = this.getById(setGoodsNumber.getId());
- Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
- if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit() && goods.getPurchaseLimit() < setGoodsNumber.getNumber()){
- return R.fail("修改数量不能大于限购数量");
- }
+
if(null != shoppingCart){
+
+ Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
+ if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit() && goods.getPurchaseLimit() < setGoodsNumber.getNumber()){
+ return R.fail("修改数量不能大于限购数量");
+ }
+
shoppingCart.setNumber(setGoodsNumber.getNumber());
this.updateById(shoppingCart);
}
@@ -358,7 +368,22 @@
*/
@Override
public ConfirmOrderVo confirmOrder(ConfirmOrder confirmOrder) {
+ Integer position = confirmOrder.getPosition();
Long userid = tokenService.getLoginUserApplet().getUserid();
+ //直接购买商品
+ if(2 == position){
+ //先加入购物车
+ String goodsJson = confirmOrder.getGoodsJson();
+ JSONArray objects = JSON.parseArray(goodsJson);
+ Long id = objects.getJSONObject(0).getLong("id");
+ Integer num1 = objects.getJSONObject(0).getInteger("num");
+ ShoppingCart shoppingCart = new ShoppingCart();
+ shoppingCart.setAppUserId(userid);
+ shoppingCart.setGoodsId(id.intValue());
+ shoppingCart.setNumber(num1);
+ Long shoppingCarId = addGoods(shoppingCart);
+ confirmOrder.setGoodsJson("[{\"id\": " + shoppingCarId + ", \"num\": " + num1 + "}]");
+ }
AppUser appUser = appUserClient.getAppUserById(userid);
Integer shopId = confirmOrder.getShopId();
Shop shop = shopClient.getShopById(shopId).getData();
@@ -395,7 +420,7 @@
confirmOrderVo.setDiscountAmount(orderMoney.subtract(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
}
BaseSetting baseSetting = baseSettingClient.getBaseSetting(4).getData();
- confirmOrderVo.setUseSimultaneously(baseSetting.getContent().equals("1") ? true : false);
+ confirmOrderVo.setUseSimultaneously(baseSetting.getContent().equals("1"));
int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum();
confirmOrderVo.setEarnPoint(earnPoint);
//支付金额,订单金额-订单优惠
@@ -403,6 +428,7 @@
confirmOrderVo.setResidualPoint(appUser.getLavePoint().intValue());
//获取默认收货地址
UserAddress userAddress = userAddressClient.getDefaultUserAddress(userid).getData();
+ userAddress.setIdStr(userAddress.getId().toString());
confirmOrderVo.setUserAddress(userAddress);
confirmOrderVo.setPaymentType(confirmOrder.getPaymentType());
//获取用户优惠券,用户全部优惠券,不能使用的需要标识出来置灰展示
@@ -412,35 +438,37 @@
paymentUserCoupon.setType(confirmOrder.getType());
if(confirmOrder.getPaymentType() == 1){
List<PaymentUserCouponVo> data = userCouponClient.getPaymentUserCoupon(paymentUserCoupon).getData();
- for (PaymentUserCouponVo couponInfo : data) {
- List<Integer> forGoodIds = couponInfo.getForGoodIds();
- //全部商品适用
- if(null == forGoodIds){
- //满减券
- if(1 == couponInfo.getCouponType() && orderMoney.compareTo(couponInfo.getConditionAmount()) >= 0){
- couponInfo.setAvailable(true);
- }
- //代金券和折扣券
- if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
- couponInfo.setAvailable(true);
- }
- }else{
- //部分商品适用
- BigDecimal goodsMoney = BigDecimal.ZERO;
- for (MyShoppingCartVo myShoppingCartVo : goodsList) {
- Integer goodsId = myShoppingCartVo.getGoodsId();
- BigDecimal cash = myShoppingCartVo.getCash();
- if(forGoodIds.contains(goodsId)){
- goodsMoney = goodsMoney.add(cash);
+ if(null != data){
+ for (PaymentUserCouponVo couponInfo : data) {
+ List<Integer> forGoodIds = couponInfo.getForGoodIds();
+ //全部商品适用
+ if(null == forGoodIds){
+ //满减券
+ if(1 == couponInfo.getCouponType() && orderMoney.compareTo(couponInfo.getConditionAmount()) >= 0){
+ couponInfo.setAvailable(true);
}
- }
- //满减
- if(1 == couponInfo.getCouponType() && couponInfo.getConditionAmount().compareTo(goodsMoney) <= 0){
- couponInfo.setAvailable(true);
- }
- //代金券
- if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
- couponInfo.setAvailable(true);
+ //代金券和折扣券
+ if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
+ couponInfo.setAvailable(true);
+ }
+ }else{
+ //部分商品适用
+ BigDecimal goodsMoney = BigDecimal.ZERO;
+ for (MyShoppingCartVo myShoppingCartVo : goodsList) {
+ Integer goodsId = myShoppingCartVo.getGoodsId();
+ BigDecimal cash = myShoppingCartVo.getCash();
+ if(forGoodIds.contains(goodsId)){
+ goodsMoney = goodsMoney.add(cash);
+ }
+ }
+ //满减
+ if(1 == couponInfo.getCouponType() && couponInfo.getConditionAmount().compareTo(goodsMoney) <= 0){
+ couponInfo.setAvailable(true);
+ }
+ //代金券
+ if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){
+ couponInfo.setAvailable(true);
+ }
}
}
}
@@ -484,7 +512,7 @@
for (ShoppingCart shoppingCart : list) {
Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
MyShoppingCartVo vo = new MyShoppingCartVo();
- vo.setId(shoppingCart.getId());
+ vo.setId(shoppingCart.getId().toString());
vo.setGoodsId(goods.getId());
vo.setHomePicture(goods.getHomePagePicture());
vo.setName(goods.getName());
@@ -501,6 +529,7 @@
//获取支付价格
Price price = getPrice(appUser, shoppingCart.getGoodsId(), shopId);
if(null == price){
+ price = new Price();
//使用商品的基础价格
price.setCash(1 == goods.getCashPayment() ? goods.getSellingPrice() : null);
price.setPoint(1 == goods.getPointPayment() ? goods.getIntegral() : null);
@@ -518,7 +547,7 @@
goodsShop.setGoodsId(shoppingCart.getGoodsId());
goodsShop.setShopId(shopId);
GoodsShop goodsShop1 = goodsShopClient.getGoodsShop(goodsShop).getData();
- vo.setVerifiable(null == goodsShop1 ? false : true);
+ vo.setVerifiable(goods.getAppointStore() == 1 && null == goodsShop1 ? false : true);
//判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
if(null == goods.getPurchaseLimit() || -1 == goods.getPurchaseLimit()){
vo.setPurchaseLimit(false);
@@ -617,12 +646,15 @@
if(data.size() != goodsList.size()){
String goodsName = "";
for (Integer goodsId : goodsIds) {
- if(!collect.contains(goodsId)){
- goodsName = goodsClient.getGoodsById(goodsId).getData().getName();
+ Goods goods = goodsClient.getGoodsById(goodsId).getData();
+ if(1 == goods.getAppointStore() && !collect.contains(goodsId)){
+ goodsName = goods.getName();
break;
}
}
- return R.fail(goodsName + "不能在该门店核销");
+ if(StringUtils.isNotEmpty(goodsName)){
+ return R.fail(goodsName + "不能在该门店核销");
+ }
}
//开始构建支付信息
//现金支付的订单金额
@@ -780,7 +812,7 @@
order.setGoodName(goodName.substring(0, goodName.length() - 1));
Goods goods = goodsClient.getGoodsById(goodsList.get(0).getGoodsId()).getData();
order.setOrderType(goods.getType());
- order.setOrderStatus(1);
+ order.setOrderStatus(goods.getType() == 1 ? 3 : 1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
order.setOrderNumber("QJS" + getNumber(3) + sdf.format(new Date()));
order.setTotalAmount(orderMoney.setScale(2, RoundingMode.HALF_EVEN));
@@ -792,6 +824,9 @@
order.setPaymentAmount(paymentMoney);
order.setPoint(orderPoint);
order.setPayMethod(shoppingCartPayment.getPaymentType());
+ if(StringUtils.isNotEmpty(shoppingCartPayment.getExpectedDeliveryTime())){
+ order.setExpectedDeliveryTime(shoppingCartPayment.getExpectedDeliveryTime());
+ }
if(3 != shoppingCartPayment.getPaymentType() && (fullReductionAmount.compareTo(BigDecimal.ZERO) > 0 ||moneyAmount.compareTo(BigDecimal.ZERO) > 0 || discountAmount.compareTo(BigDecimal.ZERO) > 0)){
order.setCouponJson(JSON.toJSONString(couponInfoVo));
}
@@ -808,13 +843,22 @@
order.setShopId(shoppingCartPayment.getShopId());
order.setDelFlag(0);
order.setCreateTime(LocalDateTime.now());
+ order.setExpressPayMethod(shoppingCartPayment.getFreightPaymentType());
if(2 == shoppingCartPayment.getPaymentType()){
BigDecimal balance = appUser.getBalance();
- if(balance.compareTo(paymentMoney.add(expressFee)) < 0){
+ if(balance.compareTo(paymentMoney) < 0){
return R.fail("账户余额不足");
}
}
+ //判断运费支付是否足够
+ if(null != shoppingCartPayment.getFreightPaymentType() && 2 == shoppingCartPayment.getFreightPaymentType() && expressFee.compareTo(BigDecimal.ZERO) > 0){
+ BigDecimal balance = appUser.getBalance();
+ if(balance.compareTo(expressFee) < 0){
+ return R.fail("账户余额不足");
+ }
+ }
+
orderService.save(order);
//构建订单明细数据
for (MyShoppingCartVo myShoppingCartVo : goodsList) {
@@ -830,10 +874,11 @@
}
for (int i = 0; i < objects.size(); i++) {
Long id = objects.getJSONObject(i).getLong("id");
- if(myShoppingCartVo.getId().equals(id)){
+ if(myShoppingCartVo.getId().equals(id.toString())){
+ ShoppingCart shoppingCart = this.getById(id);
Integer num1 = objects.getJSONObject(i).getInteger("num");
orderGood.setNum(num1);
- Goods goods1 = goodsClient.getGoodsById(myShoppingCartVo.getGoodsId()).getData();
+ Goods goods1 = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
orderGood.setGoodJson(JSON.toJSONString(goods1));
break;
}
@@ -952,13 +997,66 @@
userPoint.setObjectId(order.getId());
userPointClient.saveUserPoint(userPoint);
}
- //修改订支付状态
- order.setPayStatus(2);
- orderService.updateById(order);
- //删除购物车数据
- this.removeBatchByIds(ids);
+ //如果有运费,需要先扣除账户积分,再进行支付。支付成功后修改订单状态,未支付成功则回退积分,删除的订单
+ if(expressFee.compareTo(BigDecimal.ZERO) > 0){
+ if(shoppingCartPayment.getFreightPaymentType() == 1){
+ //调起微信支付
+ }
+ if(shoppingCartPayment.getFreightPaymentType() == 2){
+ BigDecimal totalRedPacketAmount = appUser.getTotalRedPacketAmount();
+ BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount();
+ BigDecimal balance = appUser.getBalance();
+ if(expressFee.compareTo(totalRedPacketAmount) <= 0){
+ totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee);
+ balance = balance.subtract(expressFee);
+ appUser.setTotalRedPacketAmount(totalRedPacketAmount);
+ appUser.setBalance(balance);
+ }else{
+ expressFee = expressFee.subtract(totalRedPacketAmount);
+ totalRedPacketAmount = BigDecimal.ZERO;
+ if(expressFee.compareTo(totalDistributionAmount) <= 0){
+ totalDistributionAmount = totalDistributionAmount.subtract(expressFee);
+ balance = balance.subtract(expressFee);
+ appUser.setTotalRedPacketAmount(totalRedPacketAmount);
+ appUser.setTotalDistributionAmount(totalDistributionAmount);
+ appUser.setBalance(balance);
+ }else{
+ expressFee = expressFee.subtract(totalDistributionAmount);
+ totalDistributionAmount = BigDecimal.ZERO;
+ balance = balance.subtract(expressFee);
+ appUser.setTotalRedPacketAmount(totalRedPacketAmount);
+ appUser.setTotalDistributionAmount(totalDistributionAmount);
+ appUser.setBalance(balance);
+ }
+ }
+
+ appUserClient.editAppUserById(appUser);
+ //构建余额明细变动记录
+ BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
+ balanceChangeRecord.setAppUserId(appUser.getId());
+ balanceChangeRecord.setOrderId(order.getId());
+ balanceChangeRecord.setChangeType(5);
+ balanceChangeRecord.setBeforeAmount(balance.add(paymentMoney));
+ balanceChangeRecord.setChangeAmount(paymentMoney);
+ balanceChangeRecord.setAfterAmount(balance);
+ balanceChangeRecord.setDelFlag(0);
+ balanceChangeRecord.setCreateTime(LocalDateTime.now());
+ balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
+ //修改订支付状态
+ order.setPayStatus(2);
+ orderService.updateById(order);
+ //删除购物车数据
+ this.removeBatchByIds(ids);
+ }
+ }else{
+ //修改订支付状态
+ order.setPayStatus(2);
+ orderService.updateById(order);
+ //删除购物车数据
+ this.removeBatchByIds(ids);
+ }
}
- return R.ok();
+ return R.ok(order.getId().toString());
}
--
Gitblit v1.7.1