From 7e9667699856022efcac2941eacddd25e20d0c1f Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 16 十二月 2024 15:40:06 +0800 Subject: [PATCH] 新增加管理后台订单模块接口 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 176 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 133 insertions(+), 43 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 0665cec..67d77ee 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 @@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.feignClient.*; -import com.ruoyi.account.api.model.AppUser; -import com.ruoyi.account.api.model.BalanceChangeRecord; -import com.ruoyi.account.api.model.UserAddress; -import com.ruoyi.account.api.model.UserPoint; +import com.ruoyi.account.api.model.*; import com.ruoyi.account.api.vo.CouponInfoVo; import com.ruoyi.account.api.vo.PaymentUserCoupon; import com.ruoyi.account.api.vo.PaymentUserCouponVo; @@ -18,12 +15,10 @@ import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.mapper.ShoppingCartMapper; import com.ruoyi.order.model.Order; +import com.ruoyi.order.model.OrderBalancePayment; 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; +import com.ruoyi.order.service.*; import com.ruoyi.order.vo.*; import com.ruoyi.other.api.domain.*; import com.ruoyi.other.api.feignClient.*; @@ -101,6 +96,18 @@ @Resource private CommissionService commissionService; + + @Resource + private VipSettingClient vipSettingClient; + + @Resource + private UserChangeLogClient userChangeLogClient; + + @Resource + private PointSettingClient pointSettingClient; + + @Resource + private OrderBalancePaymentService orderBalancePaymentService; @@ -368,7 +375,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(); @@ -572,22 +594,7 @@ */ @Override public R shoppingCartPayment(ShoppingCartPayment shoppingCartPayment) { - Integer position = shoppingCartPayment.getPosition(); Long userid = tokenService.getLoginUserApplet().getUserid(); - //直接购买商品 - if(2 == position){ - //先加入购物车 - String goodsJson = shoppingCartPayment.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); - shoppingCartPayment.setGoodsJson("[{\"id\": " + shoppingCarId + ", \"num\": " + num1 + "}]"); - } AppUser appUser = appUserClient.getAppUserById(userid); Integer shopId = shoppingCartPayment.getShopId(); String goodsJson = shoppingCartPayment.getGoodsJson(); @@ -664,9 +671,14 @@ //积分支付的订单积分 Integer orderPoint = 0; if(3 != shoppingCartPayment.getPaymentType()){ - orderMoney = goodsList.stream().map(MyShoppingCartVo::getCash).reduce(BigDecimal::add).get(); + for (MyShoppingCartVo myShoppingCartVo : goodsList) { + orderMoney = orderMoney.add(myShoppingCartVo.getCash().multiply(new BigDecimal(myShoppingCartVo.getNumber()))); + } }else{ orderPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getPoint).sum(); + for (MyShoppingCartVo myShoppingCartVo : goodsList) { + orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber()); + } if(appUser.getLavePoint().intValue() < orderPoint){ return R.fail("账户剩余积分不足"); } @@ -768,7 +780,10 @@ } //可获得的消费积分 - int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum(); + int earnPoint = 0; + for (MyShoppingCartVo myShoppingCartVo : goodsList) { + earnPoint += (myShoppingCartVo.getEarnSpendingPoints() * myShoppingCartVo.getNumber()); + } if(null != shoppingCartPayment.getUserAddressId()){ userAddressClient.getUserAddressById(shoppingCartPayment.getUserAddressId()).getData(); } @@ -812,7 +827,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)); @@ -909,17 +924,22 @@ } //账户余额 + BigDecimal redPacketAmount = BigDecimal.ZERO; + BigDecimal distributionAmount = BigDecimal.ZERO; if(2 == shoppingCartPayment.getPaymentType()){ BigDecimal totalRedPacketAmount = appUser.getTotalRedPacketAmount(); BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount(); BigDecimal balance = appUser.getBalance(); + //红包金额满足支付 if(paymentMoney.compareTo(totalRedPacketAmount) <= 0){ totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney); balance = balance.subtract(paymentMoney); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setBalance(balance); + redPacketAmount = paymentMoney; }else{ paymentMoney = paymentMoney.subtract(totalRedPacketAmount); + redPacketAmount = totalRedPacketAmount; totalRedPacketAmount = BigDecimal.ZERO; if(paymentMoney.compareTo(totalDistributionAmount) <= 0){ totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney); @@ -927,6 +947,7 @@ appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); + distributionAmount = paymentMoney; }else{ paymentMoney = paymentMoney.subtract(totalDistributionAmount); totalDistributionAmount = BigDecimal.ZERO; @@ -934,16 +955,23 @@ appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); + distributionAmount = totalDistributionAmount; } } //构建积分流水记录 if(earnPoint > 0){ + PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData(); + int earnPoint1 = earnPoint; + if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){ + earnPoint1 = earnPoint1 * (100 - pointSetting.getBuyPoint()); + } appUser.setShopPoint(appUser.getShopPoint() + earnPoint); - appUser.setLavePoint(appUser.getLavePoint() + earnPoint); + appUser.setLavePoint(appUser.getLavePoint() + earnPoint1); + appUser.setTotalPoint(appUser.getTotalPoint() + earnPoint); UserPoint userPoint = new UserPoint(); userPoint.setType(1); - userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint); + userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint1); userPoint.setVariablePoint(earnPoint); userPoint.setBalance(appUser.getLavePoint()); userPoint.setCreateTime(LocalDateTime.now()); @@ -951,6 +979,8 @@ userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); } + appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN)); + appUser.setLastShopTime(LocalDateTime.now()); appUserClient.editAppUserById(appUser); //构建余额明细变动记录 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); @@ -968,35 +998,38 @@ orderService.updateById(order); //删除购物车数据 this.removeBatchByIds(ids); + //检查消费积分满足后升级会员 + vipUpgrade(appUser); } //积分支付 if(3 == shoppingCartPayment.getPaymentType()){ Integer lavePoint = appUser.getLavePoint(); - appUser.setLavePoint(lavePoint - orderPoint); + PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData(); + int earnPoint1 = earnPoint; + //计算可用积分比例 + if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){ + earnPoint1 = earnPoint1 * (100 - pointSetting.getBuyPoint()); + } + appUser.setLavePoint(appUser.getLavePoint() - orderPoint); appUser.setShopPoint(appUser.getShopPoint() + earnPoint); - appUser.setLavePoint(appUser.getLavePoint() + earnPoint); + appUser.setLavePoint(appUser.getLavePoint() + earnPoint1); + appUser.setTotalPoint(appUser.getTotalPoint() + earnPoint); + appUser.setLastShopTime(LocalDateTime.now()); appUserClient.editAppUserById(appUser); + //检查消费积分满足后升级会员 + vipUpgrade(appUser); + //构建积分流水记录 UserPoint userPoint = new UserPoint(); - userPoint.setType(4); + userPoint.setType(1); userPoint.setHistoricalPoint(lavePoint); - userPoint.setVariablePoint(orderPoint); + Integer point = appUser.getLavePoint() - lavePoint; + userPoint.setVariablePoint(point >= 0 ? point : point * -1); userPoint.setBalance(appUser.getLavePoint()); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); - if(earnPoint > 0){ - userPoint = new UserPoint(); - userPoint.setType(1); - userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint); - userPoint.setVariablePoint(earnPoint); - userPoint.setBalance(appUser.getLavePoint()); - userPoint.setCreateTime(LocalDateTime.now()); - userPoint.setAppUserId(appUser.getId()); - userPoint.setObjectId(order.getId()); - userPointClient.saveUserPoint(userPoint); - } //如果有运费,需要先扣除账户积分,再进行支付。支付成功后修改订单状态,未支付成功则回退积分,删除的订单 if(expressFee.compareTo(BigDecimal.ZERO) > 0){ if(shoppingCartPayment.getFreightPaymentType() == 1){ @@ -1011,8 +1044,10 @@ balance = balance.subtract(expressFee); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setBalance(balance); + redPacketAmount = expressFee; }else{ expressFee = expressFee.subtract(totalRedPacketAmount); + redPacketAmount = totalRedPacketAmount; totalRedPacketAmount = BigDecimal.ZERO; if(expressFee.compareTo(totalDistributionAmount) <= 0){ totalDistributionAmount = totalDistributionAmount.subtract(expressFee); @@ -1020,6 +1055,7 @@ appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); + distributionAmount = expressFee; }else{ expressFee = expressFee.subtract(totalDistributionAmount); totalDistributionAmount = BigDecimal.ZERO; @@ -1027,6 +1063,7 @@ appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); + distributionAmount = totalDistributionAmount; } } @@ -1056,6 +1093,14 @@ this.removeBatchByIds(ids); } } + //添加账户余额支付明细 + if(redPacketAmount.compareTo(BigDecimal.ZERO) > 0 || distributionAmount.compareTo(BigDecimal.ZERO) > 0){ + OrderBalancePayment orderBalancePayment = new OrderBalancePayment(); + orderBalancePayment.setOrderId(order.getId()); + orderBalancePayment.setRedPacketAmount(redPacketAmount); + orderBalancePayment.setDistributionAmount(distributionAmount); + orderBalancePaymentService.save(orderBalancePayment); + } return R.ok(order.getId().toString()); } @@ -1067,4 +1112,49 @@ } return str; } + + + /** + * 会员等级变化 + * @param appUser + */ + public void vipUpgrade(AppUser appUser){ + Integer shopPoint = appUser.getShopPoint(); + Integer vipId = appUser.getVipId(); + //钻石会员 + VipSetting vipSetting3 = vipSettingClient.getVipSetting(3).getData(); + Integer vipLevelUpShopRole = vipSetting3.getVipLevelUpShopRole(); + Integer vipLevelUpShop = vipSetting3.getVipLevelUpShop(); + if(1 == vipLevelUpShopRole && appUser.getVipId() < 3 && shopPoint >= vipLevelUpShop){ + appUser.setVipId(3); + appUserClient.editAppUserById(appUser); + //添加等级变化记录 + UserChangeLog userChangeLog = new UserChangeLog(); + userChangeLog.setDelFlag(0); + userChangeLog.setCreateTime(LocalDateTime.now()); + userChangeLog.setAppUserId(appUser.getId()); + userChangeLog.setBeforeVipId(vipId); + userChangeLog.setAfterVipId(appUser.getVipId()); + userChangeLog.setChangeType(1); + userChangeLogClient.saveUserChangeLog(userChangeLog); + return; + } + //黄金会员 + VipSetting vipSetting2 = vipSettingClient.getVipSetting(2).getData(); + vipLevelUpShopRole = vipSetting2.getVipLevelUpShopRole(); + vipLevelUpShop = vipSetting2.getVipLevelUpShop(); + if(1 == vipLevelUpShopRole && appUser.getVipId() < 2 && shopPoint >= vipLevelUpShop){ + appUser.setVipId(2); + appUserClient.editAppUserById(appUser); + //添加等级变化记录 + UserChangeLog userChangeLog = new UserChangeLog(); + userChangeLog.setDelFlag(0); + userChangeLog.setCreateTime(LocalDateTime.now()); + userChangeLog.setAppUserId(appUser.getId()); + userChangeLog.setBeforeVipId(vipId); + userChangeLog.setAfterVipId(appUser.getVipId()); + userChangeLog.setChangeType(1); + userChangeLogClient.saveUserChangeLog(userChangeLog); + } + } } -- Gitblit v1.7.1