From 63dbede8fd302de185b4ea7e085cbc9fab7419ec Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期一, 13 一月 2025 11:07:42 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java | 4 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java | 8 ++ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java | 13 +-- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 30 ++++++- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/TransferUtil.java | 45 ++++++----- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java | 1 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java | 17 +++ ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java | 19 ++++ ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java | 40 +++------ ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java | 11 ++ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java | 23 +++++ 12 files changed, 153 insertions(+), 61 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java index 2438809..5371e8d 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserCouponClientFallbackFactory.java @@ -1,6 +1,7 @@ package com.ruoyi.account.api.factory; import com.ruoyi.account.api.feignClient.UserCouponClient; +import com.ruoyi.account.api.model.UserCoupon; import com.ruoyi.account.api.vo.CouponInfoVo; import com.ruoyi.account.api.vo.PaymentUserCoupon; import com.ruoyi.account.api.vo.PaymentUserCouponVo; @@ -32,6 +33,16 @@ public R<Long> getCouponCount(Integer couponId) { return R.fail("根据优惠券id获取优惠券数量失败:" + cause.getMessage()); } + + @Override + public R<UserCoupon> getUserCoupon(Long id) { + return R.fail("获取用户优惠券失败:" + cause.getMessage()); + } + + @Override + public R editUserCoupon(UserCoupon userCoupon) { + return R.fail("编辑用户优惠券失败:" + cause.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java index 6f75679..2a05f83 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserCouponClient.java @@ -1,6 +1,7 @@ package com.ruoyi.account.api.feignClient; import com.ruoyi.account.api.factory.UserCouponClientFallbackFactory; +import com.ruoyi.account.api.model.UserCoupon; import com.ruoyi.account.api.vo.CouponInfoVo; import com.ruoyi.account.api.vo.PaymentUserCoupon; import com.ruoyi.account.api.vo.PaymentUserCouponVo; @@ -40,4 +41,22 @@ @GetMapping("/user-coupon/getCouponCount") R<Long> getCouponCount(@RequestParam("couponId") Integer couponId); + + + /** + * 获取用户优惠券 + * @param id + * @return + */ + @PostMapping("/user-coupon/getUserCoupon") + R<UserCoupon> getUserCoupon(@RequestParam("id") Long id); + + + /** + * 编辑用户优惠券 + * @param userCoupon + * @return + */ + @PostMapping("/user-coupon/editUserCoupon") + R editUserCoupon(@RequestBody UserCoupon userCoupon); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java index 6442849..5ca828a 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java @@ -99,6 +99,10 @@ @TableField("good_amount") private BigDecimal goodAmount; + @ApiModelProperty(value = "用户优惠券id") + @TableField("user_coupon_id") + private Long userCouponId; + @ApiModelProperty(value = "活动优惠金额") @TableField("activity_amount") private BigDecimal activityAmount; diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java index f808871..28eb386 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java @@ -326,5 +326,28 @@ userCouponService.updateById(userCoupon); return R.ok(); } + + + /** + * 获取用户优惠券详情 + * @param id + * @return + */ + @PostMapping("/getUserCoupon") + public R<UserCoupon> getUserCoupon(@RequestParam("id") Long id){ + UserCoupon userCoupon = userCouponService.getById(id); + return R.ok(userCoupon); + } + + + /** + * 编辑用户优惠券 + * @return + */ + @PostMapping("/editUserCoupon") + public R editUserCoupon(@RequestBody UserCoupon userCoupon){ + userCouponService.updateById(userCoupon); + return R.ok(); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java index 150588f..6fe833e 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java @@ -287,6 +287,7 @@ appUser = appUser1; }else if(null == appUser){ appUser = new AppUser(); + appUser.setAvatar(registerAccount.getAvatar()); appUser.setName(registerAccount.getName()); appUser.setPhone(registerAccount.getPhone()); appUser.setWxOpenid(openid); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java index d8dbcab..6ce1a8b 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java @@ -56,7 +56,7 @@ //商户编号 body.put("userNo", merchantNo); //报备商户号 - body.put("tradeMerchantNo", singlePay.getTradeMerchantNo()); +// body.put("tradeMerchantNo", singlePay.getTradeMerchantNo()); //产品类型 body.put("productCode", "BANK_PAY_DAILY_ORDER"); //交易请求时间 @@ -216,17 +216,11 @@ public static String sign(JSONObject body) { + //构建字段顺序必须按照文档签名顺序 Set<Map.Entry<String, Object>> entries = body.entrySet(); - List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries); - // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) - Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() { - public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) { - return (o1.getKey()).compareTo(o2.getKey()); - } - }); // 构造签名键值对的格式 StringBuilder sb = new StringBuilder(); - for (Map.Entry<String, Object> item : infoIds) { + for (Map.Entry<String, Object> item : entries) { if (item.getKey() != null || item.getKey() != "") { Object val = item.getValue(); if (!(val == "" || val == null)) { @@ -235,6 +229,7 @@ } } sb.append(key); + log.info("待签名串:{}", sb.toString()); return MD5AndKL.MD5(sb.toString()); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java index bad6bc9..3a3a40b 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java @@ -68,6 +68,9 @@ List<OrderGood> orderGoods = orderGoodService.list(new LambdaQueryWrapper<OrderGood>() .eq(OrderGood::getOrderId, order.getId())); AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); + if(null == appUser){ + return; + } //直推上级分佣金额 BigDecimal ztsj_price = BigDecimal.ZERO; //直帮上级分佣金额 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 4010b15..0bad0c1 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 @@ -500,9 +500,11 @@ } } - confirmOrderVo.setActivityName(activityInfo1.getActivityName()); - paymentMoney = paymentMoney.subtract(zyh); - activityAmount = activityAmount.add(zyh); + if(null != activityInfo1){ + confirmOrderVo.setActivityName(activityInfo1.getActivityName()); + paymentMoney = paymentMoney.subtract(zyh); + activityAmount = activityAmount.add(zyh); + } } confirmOrderVo.setDiscountAmount(activityAmount); int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum(); @@ -871,7 +873,6 @@ } } - discount = orderActivityInfo1.getDiscount(); paymentMoney = paymentMoney.subtract(zyh); activityAmount = activityAmount.add(zyh); } @@ -938,6 +939,7 @@ } if(3 != shoppingCartPayment.getPaymentType() && (fullReductionAmount.compareTo(BigDecimal.ZERO) > 0 ||moneyAmount.compareTo(BigDecimal.ZERO) > 0 || discountAmount.compareTo(BigDecimal.ZERO) > 0)){ order.setCouponJson(JSON.toJSONString(couponInfoVo)); + order.setUserCouponId(shoppingCartPayment.getUserCouponId()); } if(null != orderActivityInfo1){ order.setActivityJson(JSON.toJSONString(orderActivityInfo1)); @@ -1136,6 +1138,15 @@ orderService.updateById(order); //删除购物车数据 this.removeBatchByIds(ids); + //处理优惠券 + if(null != order.getUserCouponId()){ + UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData(); + if(null != userCoupon && 1 == userCoupon.getStatus()){ + userCoupon.setStatus(2); + userCoupon.setUseTime(LocalDateTime.now()); + userCouponClient.editUserCoupon(userCoupon); + } + } } //积分支付 if(3 == shoppingCartPayment.getPaymentType()){ @@ -1339,6 +1350,17 @@ order.setOrderStatus(2); } orderService.updateById(order); + + //处理优惠券 + if(null != order.getUserCouponId()){ + UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData(); + if(null != userCoupon && 1 == userCoupon.getStatus()){ + userCoupon.setStatus(2); + userCoupon.setUseTime(LocalDateTime.now()); + userCouponClient.editUserCoupon(userCoupon); + } + } + //删除购物车数据 Long userid = tokenService.getLoginUserApplet().getUserid(); List<OrderGood> list = orderGoodService.list(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId())); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/TransferUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/TransferUtil.java index 9d04792..5d457f9 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/TransferUtil.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/TransferUtil.java @@ -28,10 +28,18 @@ * 商户号 */ private static final String merchantNo = "888122600004175"; - + /** + * 平台-报备商户号 + */ + public static final String sysTradeMerchantNo = "777168500885852"; + private static final String format = "yyyy-MM-dd HH:mm:ss"; - - + /** + * 支付回调地址 + */ + private static final String callbackUrl = "http://221.182.45.100:9000"; + + /** * 单笔代付 * @param singlePay @@ -45,7 +53,7 @@ //商户编号 body.put("userNo", merchantNo); //报备商户号 - body.put("tradeMerchantNo", singlePay.getTradeMerchantNo()); +// body.put("tradeMerchantNo", singlePay.getTradeMerchantNo()); //产品类型 body.put("productCode", "BANK_PAY_DAILY_ORDER"); //交易请求时间 @@ -83,7 +91,7 @@ */ body.put("paidUse", singlePay.getPaidUse()); //商户通知地址 - body.put("callbackUrl", singlePay.getCallbackUrl()); + body.put("callbackUrl", callbackUrl + singlePay.getCallbackUrl()); String sign = null; try { sign = sign(body); @@ -113,8 +121,8 @@ SinglePayResult uniPayResult = jsonObject.getObject("data", SinglePayResult.class); return uniPayResult; } - - + + /** * 单笔代付查询接口 * @param merchantOrderNo 订单号 @@ -158,8 +166,8 @@ SinglePayQueryResult uniPayResult = jsonObject.getObject("data", SinglePayQueryResult.class); return uniPayResult; } - - + + /** * 可取余额查询 * @return @@ -200,22 +208,16 @@ AccountBalanceQueryResult uniPayResult = jsonObject.getObject("data", AccountBalanceQueryResult.class); return uniPayResult; } - - - - + + + + public static String sign(JSONObject body) { + //构建字段顺序必须按照文档签名顺序 Set<Map.Entry<String, Object>> entries = body.entrySet(); - List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries); - // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) - Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() { - public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) { - return (o1.getKey()).compareTo(o2.getKey()); - } - }); // 构造签名键值对的格式 StringBuilder sb = new StringBuilder(); - for (Map.Entry<String, Object> item : infoIds) { + for (Map.Entry<String, Object> item : entries) { if (item.getKey() != null || item.getKey() != "") { Object val = item.getValue(); if (!(val == "" || val == null)) { @@ -224,6 +226,7 @@ } } sb.append(key); + log.info("待签名串:{}", sb.toString()); return MD5AndKL.MD5(sb.toString()); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java index ff9f10e..ee2356d 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java @@ -187,6 +187,14 @@ @DeleteMapping("/deleteShop") @ApiOperation(value = "删除门店", tags = {"管理后台-门店管理"}) public R<Void> deleteShop(@ApiParam("门店id") @RequestParam("id") Integer id){ + List<Goods> list1 = goodsService.list(new LambdaQueryWrapper<Goods>().eq(Goods::getDelFlag, 0).eq(Goods::getAppointStore, 1).eq(Goods::getStatus, 2)); + if(list1.size() > 0){ + Set<Integer> collect1 = list1.stream().map(Goods::getId).collect(Collectors.toSet()); + long count = goodsShopService.count(new LambdaQueryWrapper<GoodsShop>().eq(GoodsShop::getShopId, id).in(GoodsShop::getGoodsId, collect1)); + if(0 < count){ + return R.fail("门店已被商品使用,不能删除"); + } + } Shop shop = shopService.getById(id); shop.setDelFlag(1); shopService.updateById(shop); diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java index cce5829..883a4c3 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java @@ -3,13 +3,17 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.ShopPoint; import com.ruoyi.other.api.enums.PointChangeType; import com.ruoyi.other.mapper.ShopPointMapper; import com.ruoyi.other.service.ShopPointService; import com.ruoyi.other.vo.ShopPointStatistics; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -29,8 +33,18 @@ @Service public class ShopPointServiceImpl extends ServiceImpl<ShopPointMapper, ShopPoint> implements ShopPointService { + @Resource + private TokenService tokenService; + @Resource + private SysUserClient sysUserClient; + + + + @Override public ShopPointStatistics statistics(IPage<ShopPoint> page, ShopPoint shopPoint) { + Long userid = tokenService.getLoginUser().getUserid(); + SysUser sysUser = sysUserClient.getSysUser(userid).getData(); List<ShopPoint> shopPoints = this.baseMapper.selectShopPointList(shopPoint); Map<Integer, Integer> shopPointMap = shopPoints.stream() .collect(Collectors.groupingBy( @@ -54,8 +68,7 @@ LocalDateTime endTime = shopPoint.getEndTime(); if(null != startTime){ List<ShopPoint> list = this.list(new LambdaUpdateWrapper<ShopPoint>() - // todo bug说应展示所有门店积分数据 -// .eq(ShopPoint::getShopId, shopPoint.getShopId()) + .eq(ShopPoint::getShopId, sysUser.getObjectId()) .last(" and create_time between '" + startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "' and '" + endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "'")); List<String> date = new ArrayList<>(); List<Map<String, Integer>> data = new ArrayList<>(); diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java index 9525a52..a54b3ec 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java @@ -35,14 +35,14 @@ * 平台-报备商户号 */ public static final String sysTradeMerchantNo = "777168500885852"; - + private static final String format = "yyyy-MM-dd HH:mm:ss"; /** * 支付回调地址 */ private static final String callbackUrl = "http://221.182.45.100:9000"; - - + + /** * 单笔代付 * @param singlePay @@ -56,7 +56,7 @@ //商户编号 body.put("userNo", merchantNo); //报备商户号 - body.put("tradeMerchantNo", singlePay.getTradeMerchantNo()); +// body.put("tradeMerchantNo", singlePay.getTradeMerchantNo()); //产品类型 body.put("productCode", "BANK_PAY_DAILY_ORDER"); //交易请求时间 @@ -124,8 +124,8 @@ SinglePayResult uniPayResult = jsonObject.getObject("data", SinglePayResult.class); return uniPayResult; } - - + + /** * 单笔代付查询接口 * @param merchantOrderNo 订单号 @@ -169,8 +169,8 @@ SinglePayQueryResult uniPayResult = jsonObject.getObject("data", SinglePayQueryResult.class); return uniPayResult; } - - + + /** * 可取余额查询 * @return @@ -211,22 +211,16 @@ AccountBalanceQueryResult uniPayResult = jsonObject.getObject("data", AccountBalanceQueryResult.class); return uniPayResult; } - - - - + + + + public static String sign(JSONObject body) { + //构建字段顺序必须按照文档签名顺序 Set<Map.Entry<String, Object>> entries = body.entrySet(); - List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries); - // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) - Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() { - public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) { - return (o1.getKey()).compareTo(o2.getKey()); - } - }); // 构造签名键值对的格式 StringBuilder sb = new StringBuilder(); - for (Map.Entry<String, Object> item : infoIds) { + for (Map.Entry<String, Object> item : entries) { if (item.getKey() != null || item.getKey() != "") { Object val = item.getValue(); if (!(val == "" || val == null)) { @@ -235,12 +229,8 @@ } } sb.append(key); + log.info("待签名串:{}", sb.toString()); return MD5AndKL.MD5(sb.toString()); - } - - - public static void main(String[] args) { - TransferUtil.accountBalanceQuery(); } } -- Gitblit v1.7.1