ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/BalanceChangeRecordClientFallbackFactory.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.account.api.factory; import com.ruoyi.account.api.feignClient.BalanceChangeRecordClient; import com.ruoyi.account.api.model.BalanceChangeRecord; import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FallbackFactory; /** * @author zhibing.pu * @Date 2024/12/2 15:35 */ public class BalanceChangeRecordClientFallbackFactory implements FallbackFactory<BalanceChangeRecordClient> { @Override public BalanceChangeRecordClient create(Throwable cause) { return new BalanceChangeRecordClient(){ @Override public R saveBalanceChangeRecord(BalanceChangeRecord balanceChangeRecord) { return R.fail("保存账户流水记录失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java
@@ -18,6 +18,11 @@ public R<UserAddress> getDefaultUserAddress(Long userId) { return R.fail("获取用户默认地址失败:" + cause.getMessage()); } @Override public R<UserAddress> getUserAddressById(Integer id) { return R.fail("根据id获取用户地址信息失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java
@@ -22,6 +22,11 @@ public R<List<PaymentUserCouponVo>> getPaymentUserCoupon(PaymentUserCoupon paymentUserCoupon) { return R.fail("根据id获取优惠券数据失败:" + cause.getMessage()); } @Override public R<CouponInfoVo> getCouponInfo(Long userCouponId) { return R.fail("根据用户优惠券id获取优惠券详情失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.account.api.factory; import com.ruoyi.account.api.feignClient.UserPointClient; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FallbackFactory; /** * @author zhibing.pu * @Date 2024/12/2 15:04 */ public class UserPointFallbackFactory implements FallbackFactory<UserPointClient> { @Override public UserPointClient create(Throwable cause) { return new UserPointClient() { @Override public R saveUserPoint(UserPoint userPoint) { return R.fail("保存积分流水记录失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/BalanceChangeRecordClient.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.account.api.feignClient; import com.ruoyi.account.api.factory.BalanceChangeRecordClientFallbackFactory; import com.ruoyi.account.api.model.BalanceChangeRecord; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; /** * @author zhibing.pu * @Date 2024/12/2 15:34 */ @FeignClient(contextId = "BalanceChangeRecordClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = BalanceChangeRecordClientFallbackFactory.class) public interface BalanceChangeRecordClient { /** * 保存账户流水记录 * @param balanceChangeRecord * @return */ @PostMapping("/balanceChangeRecord/saveBalanceChangeRecord") R saveBalanceChangeRecord(@RequestBody BalanceChangeRecord balanceChangeRecord); } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java
@@ -22,4 +22,13 @@ */ @PostMapping("/user-address/getDefaultUserAddress") R<UserAddress> getDefaultUserAddress(@RequestParam("userId") Long userId); /** * 根据id获取用户地址信息 * @param id * @return */ @PostMapping("/user-address/getUserAddressById") R<UserAddress> getUserAddressById(@RequestParam("id") Integer id); } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java
@@ -9,6 +9,7 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -26,4 +27,13 @@ */ @PostMapping("/user-coupon/getPaymentUserCoupon") R<List<PaymentUserCouponVo>> getPaymentUserCoupon(@RequestBody PaymentUserCoupon paymentUserCoupon); /** * 根据用户优惠券id获取优惠券详情 * @param userCouponId * @return */ @PostMapping("/user-coupon/getCouponInfo") R<CouponInfoVo> getCouponInfo(@RequestParam("userCouponId") Long userCouponId); } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.account.api.feignClient; import com.ruoyi.account.api.factory.UserPointFallbackFactory; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; /** * @author zhibing.pu * @Date 2024/12/2 15:04 */ @FeignClient(contextId = "UserPointClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = UserPointFallbackFactory.class) public interface UserPointClient { /** * 保存积分流水记录 * @param userPoint * @return */ @PostMapping("/user-point/saveUserPoint") R saveUserPoint(@RequestBody UserPoint userPoint); } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/AppUser.java
@@ -100,19 +100,19 @@ @ApiModelProperty(value = "合伙人积分数") @TableField("part_point") private BigDecimal partPoint; private Integer partPoint; @ApiModelProperty(value = "合伙人培育积分数") @TableField("part_grow_point") private BigDecimal partGrowPoint; private Integer partGrowPoint; @ApiModelProperty(value = "消费积分数") @TableField("shop_point") private BigDecimal shopPoint; private Integer shopPoint; @ApiModelProperty(value = "返佣积分数") @TableField("share_point") private BigDecimal sharePoint; private Integer sharePoint; @ApiModelProperty(value = "消费总金额") @TableField("shop_amount") @@ -142,9 +142,13 @@ @TableField("total_distribution_amount") private BigDecimal totalDistributionAmount; @ApiModelProperty(value = "账户余额") @TableField("balance") private BigDecimal balance; @ApiModelProperty(value = "剩余积分") @TableField("lave_point") private BigDecimal lavePoint; private Integer lavePoint; @ApiModelProperty(value = "是否可更换推广人(0=否,1=是)") @TableField("change_promoter") ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java
@@ -31,7 +31,7 @@ private Long orderId; @ApiModelProperty("类型:1充值2提现3红包4分佣5商城购物") private Integer type; private Integer changeType; @ApiModelProperty("变更前金额") private BigDecimal beforeAmount; ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserPoint.java
@@ -38,15 +38,15 @@ @ApiModelProperty(value = "历史余额") @TableField("historical_point") private BigDecimal historicalPoint; private Integer historicalPoint; @ApiModelProperty(value = "变动金额") @TableField("variable_point") private BigDecimal variablePoint; private Integer variablePoint; @ApiModelProperty(value = "变动后余额") @TableField("balance") private BigDecimal balance; private Integer balance; @ApiModelProperty(value = "变动时间") @TableField("create_time") ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/PaymentUserCouponVo.java
@@ -5,6 +5,7 @@ import lombok.Data; import java.math.BigDecimal; import java.util.List; /** * @author zhibing.pu @@ -31,6 +32,8 @@ private String periodStartTime; @ApiModelProperty("有效期结束时间") private String periodEndTime; @ApiModelProperty("适用商品id集合,为null表示全部适用") private List<Integer> forGoodIds; @ApiModelProperty("是否可用") private Boolean available; } ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,5 @@ com.ruoyi.account.api.factory.AppUserClientFallbackFactory com.ruoyi.account.api.factory.UserAddressClientFallbackFactory com.ruoyi.account.api.factory.UserCouponClientFallbackFactory com.ruoyi.account.api.factory.UserCouponClientFallbackFactory com.ruoyi.account.api.factory.UserPointFallbackFactory com.ruoyi.account.api.factory.BalanceChangeRecordClientFallbackFactory ruoyi-api/ruoyi-api-order/src/main/java/model/Order.java
@@ -103,7 +103,7 @@ @ApiModelProperty(value = "使用积分") @TableField("point") private BigDecimal point; private Integer point; @ApiModelProperty(value = "1wx2积分") @TableField("pay_method") @@ -135,7 +135,7 @@ @ApiModelProperty(value = "本单获取的积分") @TableField("get_point") private BigDecimal getPoint; private Integer getPoint; @ApiModelProperty(value = "微信支付号") @TableField("serial_number") ruoyi-api/ruoyi-api-order/src/main/java/model/OrderGood.java
@@ -31,11 +31,11 @@ @ApiModelProperty(value = "商品id") @TableField("goods_id") private Long goodsId; private Integer goodsId; @ApiModelProperty(value = "订单id") @TableField("order_id") private Integer orderId; private Long orderId; @ApiModelProperty(value = "商品券优惠金额") @TableField("good_amount") @@ -61,6 +61,50 @@ @ApiModelProperty(value = "添加时间") @TableField("create_time") private LocalDateTime createTime; @ApiModelProperty(value = "可获得消费积分") @TableField("earn_spending_points") private Integer earnSpendingPoints; @ApiModelProperty(value = "上级获得分佣金额") @TableField("superior_subcommission") private BigDecimal superiorSubcommission; @ApiModelProperty(value = "上级获得返佣积分") @TableField("superior_rebate_points") private Integer superiorRebatePoints; @ApiModelProperty(value = "获取返佣积分上级类型(1=直推上级,2=直帮上级)") @TableField("superior_type") private Integer superiorType; @ApiModelProperty(value = "核销门店可获得服务费") @TableField("servuce_shop_charges") private BigDecimal servuceShopCharges; @ApiModelProperty(value = "核销门店可获得服务积分") @TableField("servuce_shop_points") private Integer servuceShopPoints; @ApiModelProperty(value = "技师可获得服务积分") @TableField("technician_points") private Integer technicianPoints; @ApiModelProperty(value = "绑定门店可获得分佣金额") @TableField("bound_shop_charges") private BigDecimal boundShopCharges; @ApiModelProperty(value = "绑定门店可获得返佣积分") @TableField("bound_shop_points") private Integer boundShopPoints; @ApiModelProperty(value = "绑定门店上级门店可获得分佣金额") @TableField("bound_shop_superiors_charges") private BigDecimal boundShopSuperiorsCharges; @ApiModelProperty(value = "绑定门店上级门店可获得返佣积分") @TableField("bound_shop_superiors_points") private Integer boundShopSuperiorsPoints; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
@@ -28,7 +28,7 @@ @ApiModelProperty(value = "主键") @TableId(value = "id", type = IdType.AUTO) private Long id; private Integer id; @ApiModelProperty(value = "名称") @TableField("name") ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsShopClientFallbackFactory.java
@@ -3,7 +3,10 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.GoodsShop; import com.ruoyi.other.api.feignClient.GoodsShopClient; import com.ruoyi.other.api.vo.GetGoodsShopByGoodsIds; import org.springframework.cloud.openfeign.FallbackFactory; import java.util.List; /** * @author zhibing.pu @@ -19,6 +22,11 @@ public R<GoodsShop> getGoodsShop(GoodsShop goodsShop) { return R.fail("获取商品门店关系数据失败:" + cause.getMessage()); } @Override public R<List<GoodsShop>> getGoodsShopByGoodsIds(GetGoodsShopByGoodsIds goodsIds) { return R.fail("根据商品id集合和门店id查询数据失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsShopClient.java
@@ -4,9 +4,12 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.GoodsShop; import com.ruoyi.other.api.factory.GoodsShopClientFallbackFactory; import com.ruoyi.other.api.vo.GetGoodsShopByGoodsIds; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; /** * @author zhibing.pu @@ -22,4 +25,12 @@ */ @PostMapping("/goods-shop/getGoodsShop") R<GoodsShop> getGoodsShop(@RequestBody GoodsShop goodsShop); /** * 根据商品id集合和门店id查询数据 * @param goodsIds * @return */ @PostMapping("/goods-shop/getGoodsShopByGoodsIds") R<List<GoodsShop>> getGoodsShopByGoodsIds(@RequestBody GetGoodsShopByGoodsIds goodsIds); } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/vo/GetGoodsShopByGoodsIds.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.other.api.vo; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2024/12/2 10:18 */ @Data public class GetGoodsShopByGoodsIds { /** * 门店id */ private Integer shopId; /** * 商品id集合 */ private List<Integer> goodsIds; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
New file @@ -0,0 +1,37 @@ package com.ruoyi.account.controller; import com.ruoyi.account.api.model.BalanceChangeRecord; import com.ruoyi.account.service.BalanceChangeRecordService; import com.ruoyi.common.core.domain.R; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @author zhibing.pu * @Date 2024/12/2 15:36 */ @RestController @RequestMapping("/balanceChangeRecord") public class BalanceChangeRecordController { @Resource private BalanceChangeRecordService balanceChangeRecordService; /** * 保存账户流水记录 * @param balanceChangeRecord * @return */ @PostMapping("/saveBalanceChangeRecord") public R saveBalanceChangeRecord(@RequestBody BalanceChangeRecord balanceChangeRecord){ balanceChangeRecordService.save(balanceChangeRecord); return R.ok(); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java
@@ -99,6 +99,18 @@ userAddressService.updateById(byId); return R.ok(); } /** * 根据id获取用户地址信息 * @param id * @return */ @ResponseBody @PostMapping("/getUserAddressById") public R<UserAddress> getUserAddressById(@RequestParam("id") Integer id){ UserAddress userAddress = userAddressService.getById(id); return R.ok(userAddress); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -147,9 +147,24 @@ @ResponseBody @PostMapping("/getPaymentUserCoupon") public R<List<PaymentUserCouponVo>> getPaymentUserCoupon(@RequestBody PaymentUserCoupon paymentUserCoupon){ List<PaymentUserCouponVo> userCoupon = userCouponService.getUserCoupon(paymentUserCoupon.getUserId(), paymentUserCoupon.getOrderMoney(), paymentUserCoupon.getType()); List<PaymentUserCouponVo> userCoupon = userCouponService.getUserCoupon(paymentUserCoupon.getUserId(), paymentUserCoupon.getType()); return R.ok(userCoupon); } /** * 根据用户优惠券id获取优惠券详情 * @param userCouponId * @return */ @ResponseBody @PostMapping("/getCouponInfo") public R<CouponInfoVo> getCouponInfo(@RequestParam("userCouponId") Long userCouponId){ UserCoupon userCoupon = userCouponService.getById(userCouponId); CouponInfo data = couponClient.detail(userCoupon.getCouponId()).getData(); CouponInfoVo couponInfoVo = new CouponInfoVo(); BeanUtils.copyProperties(data, couponInfoVo); return R.ok(couponInfoVo); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -1,6 +1,7 @@ package com.ruoyi.account.controller; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.account.service.UserPointService; import com.ruoyi.account.vo.UserPointDetailVO; import com.ruoyi.account.vo.UserPointVO; @@ -11,10 +12,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; @@ -68,5 +66,17 @@ public R<Void> transferPoint(@ApiParam("积分") BigDecimal point, @ApiParam("手机号") Long phone){ return R.ok(); } /** * 保存积分流水记录 * @param userPoint * @return */ @PostMapping("/saveUserPoint") public R saveUserPoint(@RequestBody UserPoint userPoint){ userPointService.save(userPoint); return R.ok(); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserCouponService.java
@@ -24,5 +24,5 @@ * @param userId * @return */ List<PaymentUserCouponVo> getUserCoupon(Long userId, BigDecimal orderMoney, Integer type); List<PaymentUserCouponVo> getUserCoupon(Long userId, Integer type); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -109,7 +109,7 @@ */ @Override public R<LoginVo> mobileLogin(MobileLogin mobileLogin) { //校验验证码 //校验验证码 TODO 待完善 // String code = redisService.getCacheObject(mobileLogin.getPhone()); // if(null == code || !code.equals(mobileLogin.getCode())){ // return R.fail("验证码错误"); @@ -188,6 +188,7 @@ */ @Override public R<LoginVo> registerAccount(RegisterAccount registerAccount) { // TODO 待完善 //校验验证码 // String code = redisService.getCacheObject(registerAccount.getPhone()); // if(null == code || !code.equals(registerAccount.getCode())){ @@ -229,22 +230,23 @@ AppUser appUser2 = this.getById(registerAccount.getPromoter()); appUser.setInviteUserId(registerAccount.getPromoter()); appUser.setShopId(appUser2.getShopId()); appUser.setPartPoint(BigDecimal.ZERO); appUser.setPartGrowPoint(BigDecimal.ZERO); appUser.setShopPoint(BigDecimal.ZERO); appUser.setSharePoint(BigDecimal.ZERO); appUser.setPartPoint(0); appUser.setPartGrowPoint(0); appUser.setShopPoint(0); appUser.setSharePoint(0); appUser.setShopAmount(BigDecimal.ZERO); appUser.setWithdrawableAmount(BigDecimal.ZERO); appUser.setWithdrawnAmount(BigDecimal.ZERO); appUser.setTotalRechargeAmount(BigDecimal.ZERO); appUser.setTotalRedPacketAmount(BigDecimal.ZERO); appUser.setTotalDistributionAmount(BigDecimal.ZERO); appUser.setLavePoint(BigDecimal.ZERO); appUser.setBalance(BigDecimal.ZERO); appUser.setLavePoint(0); //根据平台的配置未达标,则标注为可修改推广人 appUser.setChangePromoter(0); appUser.setLongitude(registerAccount.getLongitude()); appUser.setLatitude(registerAccount.getLatitude()); //调用地图获取省市区数据 //调用地图获取省市区数据 TODO 待完善 // appUser.setProvince(); // appUser.setProvinceCode(); // appUser.setCity(); @@ -324,7 +326,7 @@ //使用地图获取省市区数据 String longitude = nearbyReferrer.getLongitude(); String latitude = nearbyReferrer.getLatitude(); String cityCode = ""; String cityCode = ""; // TODO 待完善 List<NearbyReferrerVo> list = this.baseMapper.getNearbyReferrer(cityCode, nearbyReferrer); return list; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserCouponServiceImpl.java
@@ -1,5 +1,6 @@ package com.ruoyi.account.service.impl; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.vo.CouponInfoVo; @@ -13,6 +14,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.Instant; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -41,7 +43,7 @@ * @return */ @Override public List<PaymentUserCouponVo> getUserCoupon(Long userId, BigDecimal orderMoney, Integer type) { public List<PaymentUserCouponVo> getUserCoupon(Long userId, Integer type) { List<UserCoupon> list = this.list(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getAppUserId, userId).eq(UserCoupon::getDelFlag, 0) .last(" and now() between start_time and end_time")); List<Integer> couponIds = list.stream().map(UserCoupon::getCouponId).collect(Collectors.toList()); @@ -54,6 +56,10 @@ List<PaymentUserCouponVo> infoVoList = new ArrayList<>(); for (UserCoupon userCoupon : list) { CouponInfo couponInfo = couponInfoList.stream().filter(s -> s.getId().equals(userCoupon.getCouponId())).findFirst().get(); //排除商品券(商品券线下领取) if(4 == couponInfo.getCouponType()){ continue; } PaymentUserCouponVo couponInfoVo = new PaymentUserCouponVo(); couponInfoVo.setId(userCoupon.getId()); couponInfoVo.setName(couponInfo.getCouponName()); @@ -64,19 +70,14 @@ couponInfoVo.setDiscount(couponInfo.getDiscount()); couponInfoVo.setPeriodEndTime(couponInfo.getPeriodStartTime().format(formatter)); couponInfoVo.setPeriodEndTime(couponInfo.getPeriodEndTime().format(formatter)); String forGoodIds = couponInfo.getForGoodIds(); Integer instant = JSON.parseArray(forGoodIds).getInteger(0); if(-1 == instant){ couponInfoVo.setForGoodIds(null); }else{ couponInfoVo.setForGoodIds(JSON.parseArray(forGoodIds, Integer.class)); } couponInfoVo.setAvailable(false); //满减券 if(1 == couponInfo.getCouponType() && orderMoney.compareTo(couponInfo.getConditionAmount()) >= 0){ couponInfoVo.setAvailable(true); } //代金券和折扣券 if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){ couponInfoVo.setAvailable(true); } //商品券 if(4 == couponInfo.getCouponType() && 2 == type){ couponInfoVo.setAvailable(true); } infoVoList.add(couponInfoVo); } return infoVoList; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -3,13 +3,14 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.feignClient.UserAddressClient; import com.ruoyi.account.api.feignClient.UserCouponClient; 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.vo.CouponInfoVo; import com.ruoyi.account.api.vo.PaymentUserCoupon; import com.ruoyi.account.api.vo.PaymentUserCouponVo; @@ -24,6 +25,7 @@ import com.ruoyi.other.api.domain.*; import com.ruoyi.other.api.feignClient.*; import com.ruoyi.other.api.vo.GetGoodsBargainPrice; import com.ruoyi.other.api.vo.GetGoodsShopByGoodsIds; import com.ruoyi.other.api.vo.GetSeckillActivityInfo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -35,10 +37,9 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @Service @@ -92,6 +93,12 @@ @Resource private SystemConfigClient systemConfigClient; @Resource private UserPointClient userPointClient; @Resource private BalanceChangeRecordClient balanceChangeRecordClient; @@ -112,7 +119,7 @@ if(null == data){ throw new RuntimeException("根据类型(1=服务商品,2=单品商品)获取商品数据失败"); } List<Long> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList()); List<Integer> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList()); //查询符合商品类型的商品数据 List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid).in(ShoppingCart::getGoodsId, goodsIds)); //构建返回数据 @@ -164,6 +171,16 @@ price.setCashPayment(goodsVip.getCashPayment() == 1 ? true : false); price.setPointPayment(goodsVip.getPointPayment() == 1 ? true : false); price.setEarnSpendingPoints(goodsVip.getEarnSpendingPoints()); price.setSuperiorSubcommission(goodsVip.getSuperiorSubcommission()); price.setSuperiorRebatePoints(goodsVip.getSuperiorRebatePoints()); price.setSuperiorType(goodsVip.getSuperiorType()); price.setServuceShopCharges(goodsVip.getServuceShopCharges()); price.setServuceShopPoints(goodsVip.getServuceShopPoints()); price.setTechnicianPoints(goodsVip.getTechnicianPoints()); price.setBoundShopCharges(goodsVip.getBoundShopCharges()); price.setBoundShopPoints(goodsVip.getBoundShopPoints()); price.setBoundShopSuperiorsCharges(goodsVip.getBoundShopSuperiorsCharges()); price.setBoundShopSuperiorsPoints(goodsVip.getBoundShopSuperiorsPoints()); } }else{ price.setCash(goodsArea.getSellingPrice()); @@ -171,6 +188,16 @@ price.setCashPayment(goodsArea.getCashPayment() == 1 ? true : false); price.setPointPayment(goodsArea.getPointPayment() == 1 ? true : false); price.setEarnSpendingPoints(goodsArea.getEarnSpendingPoints()); price.setSuperiorSubcommission(goodsArea.getSuperiorSubcommission()); price.setSuperiorRebatePoints(goodsArea.getSuperiorRebatePoints()); price.setSuperiorType(goodsArea.getSuperiorType()); price.setServuceShopCharges(goodsArea.getServuceShopCharges()); price.setServuceShopPoints(goodsArea.getServuceShopPoints()); price.setTechnicianPoints(goodsArea.getTechnicianPoints()); price.setBoundShopCharges(goodsArea.getBoundShopCharges()); price.setBoundShopPoints(goodsArea.getBoundShopPoints()); price.setBoundShopSuperiorsCharges(goodsArea.getBoundShopSuperiorsCharges()); price.setBoundShopSuperiorsPoints(goodsArea.getBoundShopSuperiorsPoints()); } }else{ price.setCash(bargainPriceDetail.getSellingPrice()); @@ -185,6 +212,16 @@ area.setVip(appUser.getVipId()); GoodsArea goodsArea = goodsAreaClient.getGoodsArea(area).getData(); price.setEarnSpendingPoints(goodsArea.getEarnSpendingPoints()); price.setSuperiorSubcommission(goodsArea.getSuperiorSubcommission()); price.setSuperiorRebatePoints(goodsArea.getSuperiorRebatePoints()); price.setSuperiorType(goodsArea.getSuperiorType()); price.setServuceShopCharges(goodsArea.getServuceShopCharges()); price.setServuceShopPoints(goodsArea.getServuceShopPoints()); price.setTechnicianPoints(goodsArea.getTechnicianPoints()); price.setBoundShopCharges(goodsArea.getBoundShopCharges()); price.setBoundShopPoints(goodsArea.getBoundShopPoints()); price.setBoundShopSuperiorsCharges(goodsArea.getBoundShopSuperiorsCharges()); price.setBoundShopSuperiorsPoints(goodsArea.getBoundShopSuperiorsPoints()); } }else{ //构建价格数据 @@ -202,6 +239,16 @@ price.setPointPayment(goodsSeckill.getPointPayment() == 1 ? true : false); price.setEndTime(goodsSeckill.getEndTime()); price.setEarnSpendingPoints(goodsSeckill.getEarnSpendingPoints()); price.setSuperiorSubcommission(goodsSeckill.getSuperiorSubcommission()); price.setSuperiorRebatePoints(goodsSeckill.getSuperiorRebatePoints()); price.setSuperiorType(goodsSeckill.getSuperiorType()); price.setServuceShopCharges(goodsSeckill.getServuceShopCharges()); price.setServuceShopPoints(goodsSeckill.getServuceShopPoints()); price.setTechnicianPoints(goodsSeckill.getTechnicianPoints()); price.setBoundShopCharges(goodsSeckill.getBoundShopCharges()); price.setBoundShopPoints(goodsSeckill.getBoundShopPoints()); price.setBoundShopSuperiorsCharges(goodsSeckill.getBoundShopSuperiorsCharges()); price.setBoundShopSuperiorsPoints(goodsSeckill.getBoundShopSuperiorsPoints()); } return price; } @@ -233,6 +280,46 @@ * 可获得消费积分 */ private Integer earnSpendingPoints; /** * 上级获得分佣金额 */ private BigDecimal superiorSubcommission; /** * 上级获得返佣积分 */ private Integer superiorRebatePoints; /** * 获取返佣积分上级类型(1=直推上级,2=直帮上级) */ private Integer superiorType; /** * 核销门店可获得服务费 */ private BigDecimal servuceShopCharges; /** * 核销门店可获得服务积分 */ private Integer servuceShopPoints; /** * 技师可获得服务积分 */ private Integer technicianPoints; /** * 绑定门店可获得分佣金额 */ private BigDecimal boundShopCharges; /** * 绑定门店可获得返佣积分 */ private Integer boundShopPoints; /** * 绑定门店上级门店可获得分佣金额 */ private BigDecimal boundShopSuperiorsCharges; /** * 绑定门店上级门店可获得返佣积分 */ private Integer boundShopSuperiorsPoints; } @@ -326,8 +413,42 @@ paymentUserCoupon.setUserId(userid); paymentUserCoupon.setOrderMoney(orderMoney); paymentUserCoupon.setType(confirmOrder.getType()); List<PaymentUserCouponVo> data = userCouponClient.getPaymentUserCoupon(paymentUserCoupon).getData(); confirmOrderVo.setCoupon(data); 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(1 == couponInfo.getCouponType() && couponInfo.getConditionAmount().compareTo(goodsMoney) <= 0){ couponInfo.setAvailable(true); } //代金券 if(2 == couponInfo.getCouponType() || 3 == couponInfo.getCouponType()){ couponInfo.setAvailable(true); } } } confirmOrderVo.setCoupon(data); } //获取快递策略 SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData(); JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); @@ -367,6 +488,7 @@ Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); MyShoppingCartVo vo = new MyShoppingCartVo(); vo.setId(shoppingCart.getId()); vo.setGoodsId(goods.getId()); vo.setHomePicture(goods.getHomePagePicture()); vo.setName(goods.getName()); int num = shoppingCart.getNumber(); @@ -414,8 +536,18 @@ } vo.setPurchaseLimit((num + sum) > goods.getPurchaseLimit() ? true : false); } vo.setEarnSpendingPoints(price.getEarnSpendingPoints()); vo.setDistributionMode(goods.getDistributionMode()); vo.setEarnSpendingPoints(price.getEarnSpendingPoints()); vo.setSuperiorSubcommission(price.getSuperiorSubcommission()); vo.setSuperiorRebatePoints(price.getSuperiorRebatePoints()); vo.setSuperiorType(price.getSuperiorType()); vo.setServuceShopCharges(price.getServuceShopCharges()); vo.setServuceShopPoints(price.getServuceShopPoints()); vo.setTechnicianPoints(price.getTechnicianPoints()); vo.setBoundShopCharges(price.getBoundShopCharges()); vo.setBoundShopPoints(price.getBoundShopPoints()); vo.setBoundShopSuperiorsCharges(price.getBoundShopSuperiorsCharges()); vo.setBoundShopSuperiorsPoints(price.getBoundShopSuperiorsPoints()); page.add(vo); } return page; @@ -432,22 +564,412 @@ Long userid = tokenService.getLoginUserApplet().getUserid(); AppUser appUser = appUserClient.getAppUserById(userid); Integer shopId = shoppingCartPayment.getShopId(); Shop shop = shopClient.getShopById(shopId).getData(); String goodsJson = shoppingCartPayment.getGoodsJson(); List<Long> ids = new ArrayList<>(); Integer num = 0; JSONArray objects = JSON.parseArray(goodsJson); for (int i = 0; i < objects.size(); i++) { Long id = objects.getJSONObject(i).getLong("id"); Integer num1 = objects.getJSONObject(i).getInteger("num"); num += num1; ShoppingCart shoppingCart = this.getById(id); //判断当前数量是否已经超出限购数量(需要计算已经购买的数量) Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit()){ List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8))); List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList()); int sum = 0; if(orderIds.size() > 0){ List<OrderGood> orderGoodList = orderGoodService.list(new LambdaQueryWrapper<OrderGood>().in(OrderGood::getOrderId, orderIds) .eq(OrderGood::getGoodsId, shoppingCart.getGoodsId()).eq(OrderGood::getDelFlag, 0)); sum = orderGoodList.stream().mapToInt(OrderGood::getNum).sum(); } if((num1 + sum) > goods.getPurchaseLimit()){ return R.fail(goods.getName() + "已超出购买上限"); } } ids.add(id); } List<ShoppingCart> list = this.listByIds(ids); ConfirmOrderVo confirmOrderVo = new ConfirmOrderVo(); //构建商品明细列表 List<MyShoppingCartVo> goodsList = buildDetail(appUser, shopId, list, objects); //判断支付当时是否正确 if(1 == shoppingCartPayment.getPaymentType() || 2 == shoppingCartPayment.getPaymentType()){ //现金支付 long count = goodsList.stream().filter(s -> s.getCashPayment()).count(); if(count != goodsList.size()){ return R.fail("支付方式不正确"); } } else if(3 == shoppingCartPayment.getPaymentType()){ //积分支付 long count = goodsList.stream().filter(s -> s.getPointPayment()).count(); if(count != goodsList.size()){ return R.fail("支付方式不正确"); } }else{ return R.fail("支付方式不正确"); } //判断门店是都可以核销所有的商品 List<Integer> goodsIds = goodsList.stream().map(MyShoppingCartVo::getGoodsId).collect(Collectors.toList()); GetGoodsShopByGoodsIds goodsShopByGoodsIds = new GetGoodsShopByGoodsIds(); goodsShopByGoodsIds.setGoodsIds(goodsIds); goodsShopByGoodsIds.setShopId(shopId); List<GoodsShop> data = goodsShopClient.getGoodsShopByGoodsIds(goodsShopByGoodsIds).getData(); List<Integer> collect = data.stream().map(GoodsShop::getGoodsId).collect(Collectors.toList()); if(data.size() != goodsList.size()){ String goodsName = ""; for (Integer goodsId : goodsIds) { if(!collect.contains(goodsId)){ goodsName = goodsClient.getGoodsById(goodsId).getData().getName(); break; } } return R.fail(goodsName + "不能在该门店核销"); } //开始构建支付信息 //现金支付的订单金额 BigDecimal orderMoney = BigDecimal.ZERO; //折扣(9折) BigDecimal discount = null; //积分支付的订单积分 Integer orderPoint = 0; if(3 != shoppingCartPayment.getPaymentType()){ orderMoney = goodsList.stream().map(MyShoppingCartVo::getCash).reduce(BigDecimal::add).get(); }else{ orderPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getPoint).sum(); if(appUser.getLavePoint().intValue() < orderPoint){ return R.fail("账户剩余积分不足"); } } //现金的支付金额 BigDecimal paymentMoney = orderMoney; //满减金额 BigDecimal fullReductionAmount = BigDecimal.ZERO; //代金券抵扣金额 BigDecimal moneyAmount = BigDecimal.ZERO; //折扣券抵扣金额 BigDecimal discountAmount = BigDecimal.ZERO; //活动优惠金额 BigDecimal activityAmount = BigDecimal.ZERO; //减去优惠券优惠金额 CouponInfoVo couponInfoVo = null; if(null != shoppingCartPayment.getUserCouponId() && 3 != shoppingCartPayment.getPaymentType()){ couponInfoVo = userCouponClient.getCouponInfo(shoppingCartPayment.getUserCouponId()).getData(); String forGoodIds = couponInfoVo.getForGoodIds(); List<Integer> parseArray = JSON.parseArray(forGoodIds, Integer.class); //全部商品 if(parseArray.contains(-1)){ //满减 if(1 == couponInfoVo.getCouponType() && couponInfoVo.getConditionAmount().compareTo(paymentMoney) <= 0){ paymentMoney = paymentMoney.subtract(couponInfoVo.getDiscountAmount()); fullReductionAmount = fullReductionAmount.add(couponInfoVo.getDiscountAmount()); } //代金券 if(2 == couponInfoVo.getCouponType()){ paymentMoney = paymentMoney.subtract(couponInfoVo.getMoneyAmount()); moneyAmount = moneyAmount.add(couponInfoVo.getMoneyAmount()); if(paymentMoney.compareTo(BigDecimal.ZERO) < 0){ paymentMoney = BigDecimal.ZERO; } } //折扣券 if(3 == couponInfoVo.getCouponType()){ BigDecimal paymentMoney1 = couponInfoVo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney); BigDecimal bigDecimal = paymentMoney.subtract(paymentMoney1).setScale(2, RoundingMode.HALF_EVEN); discount = couponInfoVo.getDiscount(); paymentMoney = paymentMoney1; discountAmount = discountAmount.add(bigDecimal); } }else{ //部分商品,需要计算参与优惠商品的支付金额,然后再对商品进行优惠券处理 paymentMoney = BigDecimal.ZERO; BigDecimal goodsMoney = BigDecimal.ZERO; for (MyShoppingCartVo myShoppingCartVo : goodsList) { Integer goodsId = myShoppingCartVo.getGoodsId(); BigDecimal cash = myShoppingCartVo.getCash(); if(parseArray.contains(goodsId)){ goodsMoney = goodsMoney.add(cash); }else{ paymentMoney = paymentMoney.add(cash); } } //满减 if(1 == couponInfoVo.getCouponType() && couponInfoVo.getConditionAmount().compareTo(goodsMoney) <= 0){ goodsMoney = goodsMoney.subtract(couponInfoVo.getDiscountAmount()); fullReductionAmount = fullReductionAmount.add(couponInfoVo.getDiscountAmount()); } //代金券 if(2 == couponInfoVo.getCouponType()){ goodsMoney = goodsMoney.subtract(couponInfoVo.getMoneyAmount()); moneyAmount = moneyAmount.add(couponInfoVo.getMoneyAmount()); if(goodsMoney.compareTo(BigDecimal.ZERO) < 0){ goodsMoney = BigDecimal.ZERO; } } //折扣券 if(3 == couponInfoVo.getCouponType()){ BigDecimal paymentMoney1 = couponInfoVo.getDiscount().divide(new BigDecimal(10)).multiply(goodsMoney); BigDecimal bigDecimal = goodsMoney.subtract(paymentMoney1).setScale(2, RoundingMode.HALF_EVEN); discount = couponInfoVo.getDiscount(); goodsMoney = paymentMoney1; discountAmount = discountAmount.add(bigDecimal); } paymentMoney = paymentMoney.add(goodsMoney); } } //查询当前是否有订单活动 OrderActivityInfo orderActivityInfo = orderActivityInfoClient.getNowOrderActivityInfo(appUser.getVipId()).getData(); BaseSetting baseSetting = baseSettingClient.getBaseSetting(4).getData(); //系统活动设置(优惠券和活动能否同时使用) boolean useSimultaneously = baseSetting.getContent().equals("1") ? true : false; //满XX才打折,只有现金才能优惠 //如果使用优惠券,则需要判断是否可以和同时使用,且活动满足使用条件。 //没有使用优惠券,只需要判断是都满足使用条件 if(((useSimultaneously && null != shoppingCartPayment.getUserCouponId()) || null == shoppingCartPayment.getUserCouponId()) && null != orderActivityInfo && shoppingCartPayment.getPaymentType() != 3 && orderActivityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){ BigDecimal paymentMoney1 = orderActivityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney); BigDecimal bigDecimal = paymentMoney.subtract(paymentMoney1).setScale(2, RoundingMode.HALF_EVEN); discount = orderActivityInfo.getDiscount(); paymentMoney = paymentMoney1; activityAmount = activityAmount.add(bigDecimal); } //可获得的消费积分 int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum(); if(null != shoppingCartPayment.getUserAddressId()){ userAddressClient.getUserAddressById(shoppingCartPayment.getUserAddressId()).getData(); } return null; //获取快递策略,计算快递费 BigDecimal expressFee = BigDecimal.ZERO; if(null != shoppingCartPayment.getUserAddressId()){ SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData(); JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); //快递费 expressFee = jsonObject.getBigDecimal("expressFee"); List<Integer> vip = jsonObject.getJSONArray("vip").toList(Integer.class); //包邮条件(所有会员或者满足条件的会员) if(vip.get(0) == -1 || vip.contains(appUser.getVipId())){ if(shoppingCartPayment.getPaymentType() != 3){ //现金支付,支付金额满足包邮条件 BigDecimal cash = jsonObject.getBigDecimal("cash"); if(paymentMoney.compareTo(cash) >= 0){ expressFee = BigDecimal.ZERO; } }else{ //积分支付,支付积分是否满足包邮条件 Integer point = jsonObject.getInteger("point"); if(orderPoint.compareTo(point) >= 0){ expressFee = BigDecimal.ZERO; } } } } //构建订单明细 Order order = new Order(); order.setAppUserId(userid); order.setNum(num); String goodPics = ""; String goodName = ""; for (MyShoppingCartVo myShoppingCartVo : goodsList) { goodPics += myShoppingCartVo.getHomePicture() + ","; goodName += myShoppingCartVo.getName() + ","; } order.setGoodPics(goodPics.substring(0, goodPics.length() - 1)); order.setGoodName(goodName.substring(0, goodName.length() - 1)); Goods goods = goodsClient.getGoodsById(goodsList.get(0).getGoodsId()).getData(); order.setOrderType(goods.getType()); order.setOrderStatus(1); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); order.setOrderNumber("QJS" + getNumber(3) + sdf.format(new Date())); order.setTotalAmount(orderMoney.setScale(2, RoundingMode.HALF_EVEN)); order.setFullReductionAmount(fullReductionAmount); order.setMoneyAmount(moneyAmount); order.setDiscountAmount(discountAmount); order.setActivityAmount(activityAmount); order.setDiscountTotalAmount(fullReductionAmount.add(moneyAmount).add(discountAmount).add(activityAmount)); order.setPaymentAmount(paymentMoney); order.setPoint(orderPoint); order.setPayMethod(shoppingCartPayment.getPaymentType()); if(3 != shoppingCartPayment.getPaymentType() && (fullReductionAmount.compareTo(BigDecimal.ZERO) > 0 ||moneyAmount.compareTo(BigDecimal.ZERO) > 0 || discountAmount.compareTo(BigDecimal.ZERO) > 0)){ order.setCouponJson(JSON.toJSONString(couponInfoVo)); } if(activityAmount.compareTo(BigDecimal.ZERO) > 0){ order.setActivityJson(JSON.toJSONString(orderActivityInfo)); } if(null != shoppingCartPayment.getUserAddressId()){ UserAddress address = userAddressClient.getUserAddressById(shoppingCartPayment.getUserAddressId()).getData(); order.setExpressAmount(expressFee); order.setAddressJson(JSON.toJSONString(address)); } order.setGetPoint(earnPoint); order.setPayStatus(1); order.setShopId(shoppingCartPayment.getShopId()); order.setDelFlag(0); order.setCreateTime(LocalDateTime.now()); if(2 == shoppingCartPayment.getPaymentType()){ BigDecimal balance = appUser.getBalance(); if(balance.compareTo(paymentMoney.add(expressFee)) < 0){ return R.fail("账户余额不足"); } } orderService.save(order); //构建订单明细数据 for (MyShoppingCartVo myShoppingCartVo : goodsList) { OrderGood orderGood = new OrderGood(); orderGood.setGoodsId(myShoppingCartVo.getGoodsId()); orderGood.setOrderId(order.getId()); GetSeckillActivityInfo info = new GetSeckillActivityInfo(); info.setGoodsId(myShoppingCartVo.getGoodsId()); info.setVip(appUser.getVipId()); GoodsSeckill goodsSeckill = seckillActivityInfoClient.getSeckillActivityInfo(info).getData(); if(null != goodsSeckill){ orderGood.setSeckillJson(JSON.toJSONString(goodsSeckill)); } for (int i = 0; i < objects.size(); i++) { Long id = objects.getJSONObject(i).getLong("id"); if(myShoppingCartVo.getId().equals(id)){ Integer num1 = objects.getJSONObject(i).getInteger("num"); orderGood.setNum(num1); Goods goods1 = goodsClient.getGoodsById(myShoppingCartVo.getGoodsId()).getData(); orderGood.setGoodJson(JSON.toJSONString(goods1)); break; } } orderGood.setDelFlag(0); orderGood.setCreateTime(LocalDateTime.now()); orderGood.setEarnSpendingPoints(myShoppingCartVo.getEarnSpendingPoints()); orderGood.setSuperiorSubcommission(myShoppingCartVo.getSuperiorSubcommission()); orderGood.setSuperiorRebatePoints(myShoppingCartVo.getSuperiorRebatePoints()); orderGood.setSuperiorType(myShoppingCartVo.getSuperiorType()); orderGood.setServuceShopCharges(myShoppingCartVo.getServuceShopCharges()); orderGood.setServuceShopPoints(myShoppingCartVo.getServuceShopPoints()); orderGood.setTechnicianPoints(myShoppingCartVo.getTechnicianPoints()); orderGood.setBoundShopCharges(myShoppingCartVo.getBoundShopCharges()); orderGood.setBoundShopPoints(myShoppingCartVo.getBoundShopPoints()); orderGood.setBoundShopSuperiorsCharges(myShoppingCartVo.getBoundShopSuperiorsCharges()); orderGood.setBoundShopSuperiorsPoints(myShoppingCartVo.getBoundShopSuperiorsPoints()); orderGoodService.save(orderGood); } //开始构建支付数据 //现金支付 paymentMoney = paymentMoney.add(expressFee).setScale(2, RoundingMode.HALF_EVEN); if(1 == shoppingCartPayment.getPaymentType()){ //调起微信支付 TODO 待完善 } //账户余额 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); }else{ paymentMoney = paymentMoney.subtract(totalRedPacketAmount); totalRedPacketAmount = BigDecimal.ZERO; if(paymentMoney.compareTo(totalDistributionAmount) <= 0){ totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney); balance = balance.subtract(paymentMoney); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); }else{ paymentMoney = paymentMoney.subtract(totalDistributionAmount); totalDistributionAmount = BigDecimal.ZERO; balance = balance.subtract(paymentMoney); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); } } //构建积分流水记录 if(earnPoint > 0){ appUser.setShopPoint(appUser.getShopPoint() + earnPoint); appUser.setLavePoint(appUser.getLavePoint() + earnPoint); UserPoint 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); } 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); } //积分支付 if(3 == shoppingCartPayment.getPaymentType()){ Integer lavePoint = appUser.getLavePoint(); appUser.setLavePoint(lavePoint - orderPoint); appUser.setShopPoint(appUser.getShopPoint() + earnPoint); appUser.setLavePoint(appUser.getLavePoint() + earnPoint); appUserClient.editAppUserById(appUser); //构建积分流水记录 UserPoint userPoint = new UserPoint(); userPoint.setType(4); userPoint.setHistoricalPoint(lavePoint); userPoint.setVariablePoint(orderPoint); 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); } //修改订支付状态 order.setPayStatus(2); orderService.updateById(order); //删除购物车数据 this.removeBatchByIds(ids); } return R.ok(); } public String getNumber(Integer size){ String str = ""; for (Integer i = 0; i < size; i++) { str += Double.valueOf(Math.random() * 10).intValue(); } return str; } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java
@@ -15,6 +15,8 @@ public class MyShoppingCartVo { @ApiModelProperty("数据id") private Long id; @ApiModelProperty("商品id") private Integer goodsId; @ApiModelProperty("封面图") private String homePicture; @ApiModelProperty("商品名称") @@ -43,4 +45,44 @@ * 可获得消费积分 */ private Integer earnSpendingPoints; /** * 上级获得分佣金额 */ private BigDecimal superiorSubcommission; /** * 上级获得返佣积分 */ private Integer superiorRebatePoints; /** * 获取返佣积分上级类型(1=直推上级,2=直帮上级) */ private Integer superiorType; /** * 核销门店可获得服务费 */ private BigDecimal servuceShopCharges; /** * 核销门店可获得服务积分 */ private Integer servuceShopPoints; /** * 技师可获得服务积分 */ private Integer technicianPoints; /** * 绑定门店可获得分佣金额 */ private BigDecimal boundShopCharges; /** * 绑定门店可获得返佣积分 */ private Integer boundShopPoints; /** * 绑定门店上级门店可获得分佣金额 */ private BigDecimal boundShopSuperiorsCharges; /** * 绑定门店上级门店可获得返佣积分 */ private Integer boundShopSuperiorsPoints; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java
@@ -13,12 +13,12 @@ public class ShoppingCartPayment { @ApiModelProperty(value = "购物车数据id,数量 JSON[{id:1212,num:2}]", required = true) private String goodsJson; @ApiModelProperty(value = "支付方式(1=现金,2=积分)", required = true) @ApiModelProperty(value = "支付方式(1=微信,2=账户余额,3=积分)", required = true) private Integer paymentType; @ApiModelProperty(value = "核销门店id", required = true) private Integer shopId; @ApiModelProperty(value = "优惠券id", required = false) private String userCouponId; private Long userCouponId; @ApiModelProperty(value = "配送方式(1=自提,2=快递)", required = false) private Integer distributionMode; @ApiModelProperty(value = "配送地址id", required = false) ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsShopController.java
@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.GoodsShop; import com.ruoyi.other.api.vo.GetGoodsShopByGoodsIds; import com.ruoyi.other.service.GoodsShopService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> @@ -39,5 +41,16 @@ } /** * 根据商品id集合和门店id查询数据 * @param goodsIds * @return */ @ResponseBody @PostMapping("/getGoodsShopByGoodsIds") public R<List<GoodsShop>> getGoodsShopByGoodsIds(@RequestBody GetGoodsShopByGoodsIds goodsIds) { List<GoodsShop> list = goodsShopService.list(new LambdaQueryWrapper<GoodsShop>().eq(GoodsShop::getShopId, goodsIds.getShopId()).in(GoodsShop::getGoodsId, goodsIds.getGoodsIds())); return R.ok(list); } }