ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java
@@ -24,6 +24,11 @@ public R<List<UserPoint>> getUserPointList(UserPoint userPoint) { return R.fail("获取积分变动明细失败:" + cause.getMessage()); } @Override public R<Boolean> judgmentDailyShare(Long appUserId) { return R.fail("判断当天是否分享获得过积分失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java
@@ -7,6 +7,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; @@ -33,4 +34,13 @@ */ @PostMapping("/user-point/getUserPointList") R<List<UserPoint>> getUserPointList(@RequestBody UserPoint userPoint); /** * 判断当天是否分享获得过积分 * @param appUserId * @return */ @PostMapping("/user-point/judgmentDailyShare") R<Boolean> judgmentDailyShare(@RequestParam("appUserId") Long appUserId); } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
@@ -152,6 +152,18 @@ @TableField(exist = false) private String payMethod; /** * 排序字段 */ @TableField(exist = false) private String orderByColumn; /** * 排序方式 */ @TableField(exist = false) private String isAsc; public String getIdStr() { return String.valueOf(id); ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java
@@ -34,6 +34,11 @@ public R<List<Goods>> getGoodsById(String [] ids) { return R.fail("根据ids获取商品详情失败:" + cause.getMessage()); } @Override public R editGoodsList(List<Goods> goods) { return R.fail("编辑商品信息失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java
@@ -6,6 +6,7 @@ import com.ruoyi.other.api.factory.GoodsClientFallbackFactory; 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; @@ -34,7 +35,17 @@ */ @PostMapping("/goods/getGoodsById") R<Goods> getGoodsById(@RequestParam("id") Integer id); @PostMapping("/goods/getGoodsByIds") R<List<Goods>> getGoodsById(@RequestParam("ids") String[] ids); /** * 编辑商品信息 * @param goods * @return */ @PostMapping("/goods/editGoods") R editGoodsList(@RequestBody List<Goods> goods); } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java
@@ -45,8 +45,8 @@ @PostMapping("/shop/getShopByUserIds") R<List<Shop>> getShopByUserIds(@RequestBody List<Long> userIds); @GetMapping("/shop/getShopIdByName") R<Set<Integer>> getShopIdByName(String shopName); @PostMapping("/shop/getShopIdByName") R<Set<Integer>> getShopIdByName(@RequestParam("shopName") String shopName); @PostMapping("/shop-balance-statement/getList") R<List<ShopBalanceStatement>> getShopBalanceStatementList(@RequestBody ShopBalanceStatement shopBalanceStatement); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.UserCancellationLog; import com.ruoyi.account.api.model.UserCoupon; @@ -140,7 +141,11 @@ @ResponseBody @PostMapping("/getCouponCount") public R<Long> getCouponCount(@RequestParam("userId") Long userId, @RequestParam("couponId") Integer couponId) { Long count = userCouponService.lambdaQuery().eq(UserCoupon::getAppUserId, userId).eq(UserCoupon::getCouponId, couponId).count(); LambdaQueryChainWrapper<UserCoupon> chainWrapper = userCouponService.lambdaQuery().eq(UserCoupon::getCouponId, couponId); if(null != userId && -1 == userId){ chainWrapper.eq(UserCoupon::getAppUserId, userId); } Long count = chainWrapper.count(); return R.ok(count); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -2,6 +2,7 @@ import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.model.AppUser; @@ -98,8 +99,6 @@ } } record.setCouponInfoVo(vo); if (record.getUseTime()==null){ record.setStatus(1); @@ -109,7 +108,6 @@ }else { record.setStatus(2); } AppUser appUser = appUserService.getById(record.getAppUserId()); record.setUserName(appUser.getName()); @@ -149,8 +147,6 @@ } } record.setCouponInfoVo(vo); if (record.getUseTime()==null){ record.setStatus(1); @@ -160,7 +156,6 @@ }else { record.setStatus(2); } AppUser appUser = appUserService.getById(record.getAppUserId()); record.setUserName(appUser.getName()); @@ -184,6 +179,16 @@ if (data==null){ return R.fail("当前优惠券不存在,请刷新后重试"); } long count = userCouponService.count(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getCouponId, couponId).eq(UserCoupon::getDelFlag, 0)); if(data.getSendNum() <= count){ return R.fail("当前优惠券已全部领取完毕"); } count = userCouponService.count(new LambdaQueryWrapper<UserCoupon>().eq(UserCoupon::getCouponId, couponId) .eq(UserCoupon::getAppUserId, userid).eq(UserCoupon::getDelFlag, 0)); if(data.getMaxNum() <= count){ return R.fail("当前优惠券已达到最大领取限制"); } if (data.getSendType()!=1&& byId.getLavePoint().compareTo(data.getNeedPoint().intValue()) < 0){ return R.fail("当前积分不足,兑换失败"); } @@ -201,7 +206,7 @@ appUserService.updateById(byId); UserPoint userPoint = new UserPoint(); userPoint.setType(4); userPoint.setType(11); userPoint.setHistoricalPoint(lavePoint); userPoint.setVariablePoint(point); userPoint.setBalance(byId.getLavePoint()); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -173,5 +173,19 @@ List<UserPoint> list = userPointService.list(queryWrapper); return R.ok(list); } /** * 判断当天是否分享获得过积分 * @param appUserId * @return */ @PostMapping("/judgmentDailyShare") public R<Boolean> judgmentDailyShare(@RequestParam("appUserId") Long appUserId){ long count = userPointService.count(new LambdaQueryWrapper<UserPoint>().eq(UserPoint::getAppUserId, appUserId) .eq(UserPoint::getType, 4).last(" and DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(create_time, '%Y-%m-%d')")); return R.ok(count != 0); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserSignRecordController.java
@@ -1,6 +1,7 @@ package com.ruoyi.account.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.account.api.model.UserSignRecord; @@ -61,6 +62,11 @@ @ApiOperation(value = "签到", tags = {"小程序-签到"}) public R<SignBackRDto> sign(){ Long userId1 = tokenService.getLoginUserApplet().getUserid(); UserSignRecord one = userSignRecordService.getOne(new LambdaQueryWrapper<UserSignRecord>().eq(UserSignRecord::getAppUserId, userId1) .eq(UserSignRecord::getDelFlag, 0).last(" and DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(create_time, '%Y-%m-%d')")); if(null != one){ return R.fail("今天已经签过到了"); } AppUser appUser = appUserService.getById(userId1); //获取当前用户的会员信息 PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData(); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java
@@ -102,7 +102,7 @@ List<BalanceChangeRecord> list = balanceChangeRecordService.list(new LambdaQueryWrapper<BalanceChangeRecord>() .eq(changeType != null, BalanceChangeRecord::getChangeType, changeType) .between(startTime != null, BalanceChangeRecord::getCreateTime, startTime, endTime) .eq(BalanceChangeRecord::getAppUserId, userId)); .eq(BalanceChangeRecord::getAppUserId, userId).orderByDesc(BalanceChangeRecord::getCreateTime)); List<Long> orderIds = list.stream().map(BalanceChangeRecord::getOrderId).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(orderIds)){ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -16,6 +16,7 @@ import com.ruoyi.account.util.payment.model.SinglePay; import com.ruoyi.account.util.payment.model.SinglePayCallbackResult; import com.ruoyi.account.util.payment.model.SinglePayResult; import com.ruoyi.account.vo.WithdrawalAuth; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import io.swagger.annotations.Api; @@ -78,13 +79,16 @@ @PostMapping("/auth") @ApiOperation(value = "提现申请审批", tags = {"后台"}) public R auth(@RequestParam("id") Long id,@ApiParam("2'审核通过',3'审核拒绝'") @RequestParam("auditStatus") Integer auditStatus){ WithdrawalRequests withdrawal = withdrawalRequestsService.getById(id); public R auth(@RequestBody WithdrawalAuth withdrawalAuth){ WithdrawalRequests withdrawal = withdrawalRequestsService.getById(withdrawalAuth.getId()); BigDecimal withdrawalAmount = withdrawal.getWithdrawalAmount(); if(withdrawal.getAuditStatus() != 1){ return R.fail("不能重复审核"); } Integer auditStatus = withdrawalAuth.getAuditStatus(); if (auditStatus==2){ //执行转账操作 if(withdrawal.getWithdrawalMethod() == 2){ //先检查账户余额是否充足 AccountBalanceQueryResult accountBalanceQueryResult = TransferUtil.accountBalanceQuery(); if(null == accountBalanceQueryResult){ @@ -94,11 +98,9 @@ if(useAbleSettAmount < withdrawal.getArrivalAmount().doubleValue()){ return R.fail("账户可用余额不足,请先补充账户余额"); } //执行转账操作 if(withdrawal.getWithdrawalMethod() == 2){ //银行卡转账 SinglePay singlePay = new SinglePay(); singlePay.setTradeMerchantNo(""); singlePay.setTradeMerchantNo(TransferUtil.sysTradeMerchantNo); singlePay.setMerchantOrderNo(withdrawal.getId().toString()); singlePay.setReceiverAccountNoEnc(withdrawal.getBankCardNumber()); singlePay.setReceiverNameEnc(withdrawal.getAccountHolder()); @@ -114,6 +116,7 @@ withdrawal.setStatus(1); }else{ //微信转账 return R.fail("微信转账开发中"); } } if(3 == auditStatus){ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
@@ -84,6 +84,8 @@ void onlineRecord(); IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser, Integer shopId, Set<Long> userId); IPage<AppUser> getAppuserPage1(Integer pageNum, Integer pageSize, AppUser appUser,Integer objectId,List<Long> userIds); /** ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -123,7 +123,7 @@ if (vipSetting == null) { return R.fail("VIP 设置未找到"); } if (vipSetting.getId() == 0 && vipSetting.getVipGiftRole() == 0) { if (vipSetting.getVipGiftRole() == 0) { return R.fail("转赠积分权限未开启"); } @@ -131,27 +131,29 @@ if (appUser == null) { return R.fail("用户未找到"); } PointSetting pointSetting = pointSettingService.getPointSettingByAppUserId(userid); if (pointSetting == null) { return R.fail("积分设置未找到"); } // 可转赠积分总数 Integer transferablePoint = appUser.getTransferablePoint(); if (point > transferablePoint) { return R.fail("转赠积分不足"); return R.fail("可转赠积分不足"); } AppUser appUserForPhoe = appUserService.getOne(new LambdaQueryWrapper<AppUser>() .eq(AppUser::getPhone, phone)); .eq(AppUser::getPhone, phone).eq(AppUser::getDelFlag, 0).ne(AppUser::getStatus, 3)); if (appUserForPhoe == null) { return R.fail("目标用户未找到"); return R.fail("目标用户不存在"); } if(appUserForPhoe.getStatus() == 2){ return R.fail("目标用户已被冻结"); } if(appUserForPhoe.getId().equals(userid)){ return R.fail("不能转增给自己"); } Integer lavePoint1 = appUserForPhoe.getLavePoint(); appUserForPhoe.setLavePoint(appUserForPhoe.getLavePoint() + point); appUserForPhoe.setTotalPoint(appUserForPhoe.getTotalPoint() + point); appUserForPhoe.setTransferablePoint(transferablePoint + point); appUserForPhoe.setAvailablePoint(appUserForPhoe.getAvailablePoint() + point); appUserForPhoe.setTotalAvailablePoint(appUserForPhoe.getTotalAvailablePoint() + point); appUserService.updateById(appUserForPhoe); //构建积分流水记录 UserPoint userPoint = new UserPoint(); @@ -164,9 +166,7 @@ userPointService.save(userPoint); Integer lavePoint = appUser.getLavePoint(); appUser.setLavePoint(lavePoint - point); Integer totalPoint = appUser.getTotalPoint(); appUser.setTotalPoint(totalPoint - point); appUser.setLavePoint(appUser.getLavePoint() - point); appUser.setTransferablePoint(appUser.getTransferablePoint() - point); appUser.setAvailablePoint(appUser.getAvailablePoint() - point); appUserService.updateById(appUser); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/TransferUtil.java
@@ -31,6 +31,10 @@ * 商户号 */ private static final String merchantNo = "888122600004175"; /** * 平台-报备商户号 */ public static final String sysTradeMerchantNo = "777168500885852"; private static final String format = "yyyy-MM-dd HH:mm:ss"; /** @@ -90,7 +94,7 @@ */ body.put("paidUse", singlePay.getPaidUse()); //商户通知地址 body.put("callbackUrl", singlePay.getCallbackUrl()); body.put("callbackUrl", callbackUrl + singlePay.getCallbackUrl()); String sign = null; try { sign = sign(body); @@ -211,13 +215,13 @@ public static String sign(JSONObject body) throws Exception{ 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()).toString().compareTo(o2.getKey()); return (o1.getKey()).compareTo(o2.getKey()); } }); // 构造签名键值对的格式 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WithdrawalAuth.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.account.vo; import lombok.Data; /** * @author zhibing.pu * @date 2025/1/11 9:23 */ @Data public class WithdrawalAuth { /** * 申请id */ private Long id; /** * 审核状态 */ private Integer auditStatus; } ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
@@ -45,7 +45,7 @@ point(#{nearbyReferrer.longitude},#{nearbyReferrer.latitude}), point(longitude, latitude) ) as distance from t_app_user where city_code = #{cityCode} and del_flag = 0 and status = 1 from t_app_user where city_code = #{cityCode} and del_flag = 0 and status = 1 and vip_id >= 4 <if test="null != nearbyReferrer.name and '' != nearbyReferrer.name"> and `name` like CONCAT('%', #{nearbyReferrer.name}, '%') </if> ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -22,10 +22,7 @@ import com.ruoyi.order.model.OrderBalancePayment; import com.ruoyi.order.model.OrderGood; import com.ruoyi.order.model.RefundPass; import com.ruoyi.order.service.CommissionService; import com.ruoyi.order.service.OrderBalancePaymentService; import com.ruoyi.order.service.OrderService; import com.ruoyi.order.service.RefundPassService; import com.ruoyi.order.service.*; import com.ruoyi.order.util.ExpressDeliveryUtil; import com.ruoyi.order.util.payment.PaymentUtil; import com.ruoyi.order.util.payment.model.RefundCallbackResult; @@ -102,6 +99,9 @@ private TechnicianSubscribeClient technicianSubscribeClient; @Resource private ShopBalanceStatementClient shopBalanceStatementClient; @Resource private OrderGoodService orderGoodService; @@ -484,7 +484,6 @@ userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); appUserClient.editAppUserById(appUser); } if(3 == payMethod){ //开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款 @@ -655,9 +654,6 @@ userPoint.setAppUserId(order.getAppUserId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); order.setRefundStatus(2); order.setRefundTime(LocalDateTime.now()); return R.ok(); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -485,19 +485,24 @@ //满XX才打折,只有现金才能优惠 if((confirmOrderVo.getUseSimultaneously() || (!confirmOrderVo.getUseSimultaneously() && activityAmount.equals(BigDecimal.ZERO))) && null != orderActivityInfo && confirmOrder.getPaymentType() == 1){ BigDecimal zyh = BigDecimal.ZERO; OrderActivityInfo activityInfo1 = null; for (OrderActivityInfo activityInfo : orderActivityInfo) { if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){ confirmOrderVo.setActivityName(activityInfo.getActivityName()); //优惠后的支付金额 BigDecimal multiply = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney); //优惠金额 BigDecimal bigDecimal = paymentMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN); paymentMoney = multiply; activityAmount = activityAmount.add(bigDecimal); break; if(bigDecimal.compareTo(zyh) > 0){ zyh = bigDecimal; activityInfo1 = activityInfo; } } } confirmOrderVo.setActivityName(activityInfo1.getActivityName()); paymentMoney = paymentMoney.subtract(zyh); activityAmount = activityAmount.add(zyh); } confirmOrderVo.setDiscountAmount(activityAmount); int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum(); @@ -761,9 +766,6 @@ for (MyShoppingCartVo myShoppingCartVo : goodsList) { orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber()); } if(appUser.getLavePoint().intValue() < orderPoint){ return R.fail("账户剩余积分不足"); } } //现金的支付金额 BigDecimal paymentMoney = orderMoney; @@ -856,17 +858,22 @@ OrderActivityInfo orderActivityInfo1 = null; if((1 == status || null == shoppingCartPayment.getUserCouponId()) && null != orderActivityInfo && shoppingCartPayment.getPaymentType() != 3){ //找出最优会的金额 BigDecimal zyh = BigDecimal.ZERO; for (OrderActivityInfo activityInfo : orderActivityInfo) { if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){ BigDecimal paymentMoney1 = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney); BigDecimal bigDecimal = paymentMoney.subtract(paymentMoney1).setScale(2, RoundingMode.HALF_EVEN); discount = activityInfo.getDiscount(); paymentMoney = paymentMoney1; activityAmount = activityAmount.add(bigDecimal); if(bigDecimal.compareTo(zyh) > 0){ zyh = bigDecimal; orderActivityInfo1 = activityInfo; break; } } } discount = orderActivityInfo1.getDiscount(); paymentMoney = paymentMoney.subtract(zyh); activityAmount = activityAmount.add(zyh); } //可获得的消费积分 @@ -932,7 +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)); } if(activityAmount.compareTo(BigDecimal.ZERO) > 0){ if(null != orderActivityInfo1){ order.setActivityJson(JSON.toJSONString(orderActivityInfo1)); } if(null != shoppingCartPayment.getUserAddressId()){ @@ -956,7 +963,7 @@ if(3 == shoppingCartPayment.getPaymentType()){ Integer availablePoint = appUser.getAvailablePoint(); if(availablePoint < orderPoint){ return R.fail("账户积分不足"); return R.fail("账户可用积分不足"); } } //判断运费支付是否足够 @@ -1043,27 +1050,28 @@ BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount(); BigDecimal balance = appUser.getBalance(); //红包金额满足支付 if(paymentMoney.compareTo(totalRedPacketAmount) <= 0){ totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney); balance = balance.subtract(paymentMoney); BigDecimal paymentMoney1 = paymentMoney; if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){ totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1); balance = balance.subtract(paymentMoney1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setBalance(balance); redPacketAmount = paymentMoney; redPacketAmount = paymentMoney1; }else{ paymentMoney = paymentMoney.subtract(totalRedPacketAmount); paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount); redPacketAmount = totalRedPacketAmount; totalRedPacketAmount = BigDecimal.ZERO; if(paymentMoney.compareTo(totalDistributionAmount) <= 0){ totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney); balance = balance.subtract(paymentMoney); if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){ totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1); balance = balance.subtract(paymentMoney1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); distributionAmount = paymentMoney; distributionAmount = paymentMoney1; }else{ paymentMoney = paymentMoney.subtract(totalDistributionAmount); paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount); totalDistributionAmount = BigDecimal.ZERO; balance = balance.subtract(paymentMoney); balance = balance.subtract(paymentMoney1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); @@ -1189,27 +1197,28 @@ 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); BigDecimal expressFee1 = expressFee; if(expressFee1.compareTo(totalRedPacketAmount) <= 0){ totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee1); balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setBalance(balance); redPacketAmount = expressFee; redPacketAmount = expressFee1; }else{ expressFee = expressFee.subtract(totalRedPacketAmount); expressFee1 = expressFee1.subtract(totalRedPacketAmount); redPacketAmount = totalRedPacketAmount; totalRedPacketAmount = BigDecimal.ZERO; if(expressFee.compareTo(totalDistributionAmount) <= 0){ totalDistributionAmount = totalDistributionAmount.subtract(expressFee); balance = balance.subtract(expressFee); if(expressFee1.compareTo(totalDistributionAmount) <= 0){ totalDistributionAmount = totalDistributionAmount.subtract(expressFee1); balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); distributionAmount = expressFee; distributionAmount = expressFee1; }else{ expressFee = expressFee.subtract(totalDistributionAmount); expressFee1 = expressFee1.subtract(totalDistributionAmount); totalDistributionAmount = BigDecimal.ZERO; balance = balance.subtract(expressFee); balance = balance.subtract(expressFee1); appUser.setTotalRedPacketAmount(totalRedPacketAmount); appUser.setTotalDistributionAmount(totalDistributionAmount); appUser.setBalance(balance); @@ -1223,8 +1232,8 @@ balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(5); balanceChangeRecord.setBeforeAmount(balance.add(paymentMoney)); balanceChangeRecord.setChangeAmount(paymentMoney); balanceChangeRecord.setBeforeAmount(balance.add(expressFee)); balanceChangeRecord.setChangeAmount(expressFee); balanceChangeRecord.setAfterAmount(balance); balanceChangeRecord.setDelFlag(0); balanceChangeRecord.setCreateTime(LocalDateTime.now()); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BannerController.java
@@ -2,10 +2,20 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.ServletUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.other.api.domain.Banner; import com.ruoyi.other.api.domain.Goods; import com.ruoyi.other.api.domain.SeckillActivityInfo; import com.ruoyi.other.service.BannerService; import com.ruoyi.other.service.GoodsService; import com.ruoyi.other.service.GoodsVipService; import com.ruoyi.other.service.SeckillActivityInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -28,6 +38,19 @@ public class BannerController { @Resource private BannerService bannerService; @Resource private GoodsService goodsService; @Resource private GoodsVipService goodsVipService; @Resource private SeckillActivityInfoService seckillActivityInfoService; @Resource private TokenService tokenService; @Resource private AppUserClient appUserClient; @GetMapping("/list") @ApiOperation(value = "banner列表", tags = {"小程序-banner"}) public R<List<Banner>> list(@ApiParam("名称") String name, @@ -37,6 +60,36 @@ .eq(jumpType!=null,Banner::getJumpType, jumpType) .eq(position!=null,Banner::getPosition, position) .list(); Integer vipId = 0; String token = SecurityUtils.getToken(ServletUtils.getRequest()); if(StringUtils.isNotEmpty(token)){ Long userid = tokenService.getLoginUserApplet().getUserid(); AppUser appUser = appUserClient.getAppUserById(userid); vipId = appUser.getVipId(); } for (Banner banner : list) { Integer jumpType1 = banner.getJumpType(); //商品详情 if(null != jumpType1 && 3 == jumpType1){ Goods goods = goodsService.getById(banner.getContent()); if(null == goods || goods.getDelFlag() == 1){ banner.setJumpType(1); } if(!goods.getCommodityAuthority().contains("-1") && !goods.getCommodityAuthority().contains(vipId.toString())){ banner.setJumpType(1); } } //秒杀活动 if(null != jumpType1 && 4 == jumpType1){ SeckillActivityInfo activityInfo = seckillActivityInfoService.getById(banner.getContent()); if(null == activityInfo || activityInfo.getDelFlag() == 1){ banner.setJumpType(1); } if(!activityInfo.getVipIds().contains(vipId.toString())){ banner.setJumpType(1); } } } return R.ok(list); } @PostMapping("/add") ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
@@ -159,19 +159,25 @@ //查出指定人员可领取优惠券 List<CouponInfo> list1 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 2).apply("FIND_IN_SET('" + appUserById.getId() + "', person_ids)").list(); //查出指定会员可领取优惠劵 List<CouponInfo> list2 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 3).apply("FIND_IN_SET('" + appUserById.getVipId() + "', person_ids)").list(); List<CouponInfo> list2 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 3).apply("FIND_IN_SET('" + appUserById.getVipId() + "', vip_ids)").list(); List<CouponInfo> returnList = new ArrayList<>(); count(userid, list, returnList); count(userid, list1, returnList); count(userid, list2, returnList); return R.ok(returnList); } private void count(Long userid, List<CouponInfo> list1, List<CouponInfo> returnList) { for (CouponInfo couponInfo : list1) { Long count = appUserClient.getCouponCount(userid, couponInfo.getId()).getData(); Long count = appUserClient.getCouponCount(-1L, couponInfo.getId()).getData(); if(couponInfo.getSendNum() <= count){ couponInfo.setMaxNum(count.intValue() - couponInfo.getSendNum()); for (int i = 0; i < couponInfo.getMaxNum(); i++) { returnList.add(couponInfo); } continue; } count = appUserClient.getCouponCount(userid, couponInfo.getId()).getData(); couponInfo.setMaxNum(couponInfo.getMaxNum() - count.intValue()); for (int i = 0; i < couponInfo.getMaxNum(); i++) { returnList.add(couponInfo); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
@@ -198,5 +198,16 @@ return R.ok(goods); } /** * 编辑商品 * @param goods * @return */ @PostMapping("/editGoodsList") public R editGoodsList(@RequestBody List<Goods> goods){ goodsService.updateBatchById(goods); return R.ok(); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
@@ -4,16 +4,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.feignClient.UserPointClient; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.ServletUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.other.api.domain.PointSetting; import com.ruoyi.other.api.domain.Share; import com.ruoyi.other.api.domain.Shop; import com.ruoyi.other.api.feignClient.ShopClient; import com.ruoyi.other.enums.ShareAddType; import com.ruoyi.other.enums.ShareAuditStatus; import com.ruoyi.other.service.PointSettingService; import com.ruoyi.other.service.ShareService; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; @@ -22,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; /** @@ -46,6 +53,10 @@ private ShopClient shopClient; @Resource private SysUserClient sysUserClient; @Resource private UserPointClient userPointClient; @Resource private PointSettingService pointSettingService; @@ -235,6 +246,38 @@ @GetMapping("/auth/getAppletShare") public R<Share> getAppletShare(){ Share one = shareService.getOne(new LambdaQueryWrapper<Share>().eq(Share::getDelFlag, 0).eq(Share::getAppletShare, 1).eq(Share::getAuditStatus, 1).last(" limit 0, 1")); //添加每日分享积分 String token = SecurityUtils.getToken(ServletUtils.getRequest()); if(StringUtils.isNotEmpty(token)){ Long userid = tokenService.getLoginUserApplet().getUserid(); Boolean data = userPointClient.judgmentDailyShare(userid).getData(); if(!data){ AppUser appUser = appUserClient.getAppUserById(userid); PointSetting pointSetting = pointSettingService.getOne(new LambdaQueryWrapper<PointSetting>().eq(PointSetting::getId, appUser.getVipId()).eq(PointSetting::getDelFlag, 0)); if(null != pointSetting){ Integer everySharePoint = pointSetting.getEverySharePoint(); Integer lavePoint = appUser.getLavePoint(); appUser.setTotalSharePoint(appUser.getTotalSharePoint() + everySharePoint); appUser.setLavePoint(appUser.getLavePoint() + everySharePoint); appUser.setAvailablePoint(appUser.getAvailablePoint() + everySharePoint); appUser.setTransferablePoint(appUser.getTransferablePoint() + everySharePoint); appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + everySharePoint); appUser.setTotalPoint(appUser.getTotalPoint() + everySharePoint); appUserClient.editAppUserById(appUser); //添加积分流水 UserPoint userPoint = new UserPoint(); userPoint.setAppUserId(userid); userPoint.setType(4); userPoint.setHistoricalPoint(lavePoint); userPoint.setVariablePoint(everySharePoint); userPoint.setBalance(appUser.getLavePoint()); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPointClient.saveUserPoint(userPoint); } } } return R.ok(one); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -503,8 +503,13 @@ return R.ok(list); } @GetMapping("/getShopIdByName") R<Set<Integer>> getShopIdByName(@RequestParam String shopName){ /** * 根据名称查询门店id * @param shopName * @return */ @PostMapping("/getShopIdByName") public R<Set<Integer>> getShopIdByName(@RequestParam("shopName") String shopName){ List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>() .like(Shop::getName, shopName)); return R.ok(list.stream().map(Shop::getId).collect(Collectors.toSet())); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
@@ -184,7 +184,7 @@ } //银行卡转账 SinglePay singlePay = new SinglePay(); singlePay.setTradeMerchantNo(""); singlePay.setTradeMerchantNo(TransferUtil.sysTradeMerchantNo); singlePay.setMerchantOrderNo(shopWithdraw1.getId().toString()); singlePay.setReceiverAccountNoEnc(shop.getReceiverAccountNoEnc()); singlePay.setReceiverNameEnc(shop.getReceiverNameEnc()); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java
@@ -26,10 +26,9 @@ /** * 获取商品列表 * @param pageInfo * @param goodsCategoryId * @param name * @return */ List<GoodsVO> goodsList(PageInfo<GoodsVO> pageInfo, @Param("goodsCategoryId") Integer goodsCategoryId, @Param("name") String name, @Param("vip") Integer vip); List<GoodsVO> goodsList(@Param("goodsCategoryId") Integer goodsCategoryId, @Param("name") String name, @Param("vip") Integer vip); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java
@@ -16,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; /** @@ -45,6 +46,7 @@ }else { LoginUser loginUserApplet = tokenService.getLoginUserApplet(); goodsEvaluate.setAppUserId(loginUserApplet.getUserid()); goodsEvaluate.setCreateTime(LocalDateTime.now()); save(goodsEvaluate); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -1,5 +1,6 @@ package com.ruoyi.other.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -91,7 +92,6 @@ @Override public PageInfo<GoodsVO> goodsList(Goods search) { PageInfo<GoodsVO> pageInfo = new PageInfo(search.getPageCurr(), search.getPageSize()); Integer vipId = 0; String provinceCode = null; String cityCode = null; @@ -105,7 +105,7 @@ cityCode = appUser.getCityCode(); districtCode = appUser.getDistrictCode(); } List<GoodsVO> list = this.baseMapper.goodsList(pageInfo, search.getGoodsCategoryId(), search.getName(), vipId); List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(), vipId); for (GoodsVO goods : list) { Price price = getPrice(vipId, goods.getGoodsId(), null, 1, provinceCode, cityCode, districtCode); if(null != price){ @@ -116,6 +116,66 @@ } Integer data = orderClient.getGoodsSaleNum(goods.getGoodsId(), 1).getData(); goods.setSaleNum(data); } //手动排序 if(StringUtils.isNotEmpty(search.getOrderByColumn())){ if("selling_price".equals(search.getOrderByColumn())){ list.sort(new Comparator<GoodsVO>() { @Override public int compare(GoodsVO o1, GoodsVO o2) { if(null != o1.getSellingPrice() && null != o2.getSellingPrice()){ return o1.getSellingPrice().compareTo(o2.getSellingPrice()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1); } if(null == o1.getSellingPrice() && null != o2.getSellingPrice()){ return BigDecimal.ZERO.compareTo(o2.getSellingPrice()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1); } if(null != o1.getSellingPrice() && null == o2.getSellingPrice()){ return o1.getSellingPrice().compareTo(BigDecimal.ZERO) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1); } return 0; } }); } if("integral".equals(search.getOrderByColumn())){ list.sort(new Comparator<GoodsVO>() { @Override public int compare(GoodsVO o1, GoodsVO o2) { if(null != o1.getIntegral() && null != o2.getIntegral()){ return o1.getIntegral().compareTo(o2.getIntegral()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1); } if(null == o1.getIntegral() && null != o2.getIntegral()){ return Integer.valueOf(0).compareTo(o2.getIntegral()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1); } if(null != o1.getIntegral() && null == o2.getIntegral()){ return o1.getIntegral().compareTo(Integer.valueOf(0)) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1); } return 0; } }); } if("sale_num".equals(search.getOrderByColumn())){ list.sort(new Comparator<GoodsVO>() { @Override public int compare(GoodsVO o1, GoodsVO o2) { return o1.getSaleNum().compareTo(o2.getSaleNum()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1); } }); } } //手动处理分页 PageInfo<GoodsVO> pageInfo = new PageInfo<>(); pageInfo.setSize(search.getPageSize()); pageInfo.setTotal(list.size()); Integer pageSize = search.getPageSize(); Integer pageNum = (search.getPageCurr() - 1) * pageSize; if(list.size() >= (pageNum + 1) * pageSize){ list = list.subList(pageNum, pageNum + pageSize); }else if(pageNum < list.size() && list.size() < (pageNum + 1) * pageSize){ list = list.subList(pageNum, list.size()); }else{ list = new ArrayList<>(); } return pageInfo.setRecords(list); } @@ -141,6 +201,15 @@ } Goods goods = this.getById(goodsId); if(null == goods || goods.getDelFlag() == 1){ throw new RuntimeException("商品不存在"); } if(goods.getStatus() == 1){ throw new RuntimeException("商品已被下架"); } if(!goods.getCommodityAuthority().contains("-1") && !goods.getCommodityAuthority().contains(vipId.toString())){ throw new RuntimeException("权限不足"); } GoodsVO goodsVO = new GoodsVO(); BeanUtils.copyBeanProp(goodsVO, goods); goodsVO.setGoodsId(goods.getId()); @@ -265,7 +334,10 @@ @Override public void updateManageGoods(Goods goods) { goodsMapper.updateById(goods); this.updateById(goods); //修改个别字段 this.update(new LambdaUpdateWrapper<Goods>().eq(Goods::getId, goods.getId()).set(Goods::getSellingPrice, goods.getSellingPrice()) .set(Goods::getIntegral, goods.getIntegral())); // 指定门店 List<GoodsShop> goodsShopList = goods.getGoodsShopList(); saveGoodsShopList(goodsShopList, goods.getId()); @@ -283,6 +355,10 @@ saveGoodsAreaList(goodsAreaList, goods.getId()); } private void saveGoodsAreaList(List<GoodsArea> goodsAreaList, Integer id) { goodsAreaService.remove(new LambdaQueryWrapper<GoodsArea>() .eq(GoodsArea::getGoodsId, id)); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java
@@ -90,6 +90,16 @@ AppUser appUser = appUserClient.getAppUserById(userid); vipId = appUser.getVipId(); } SeckillActivityInfo activityInfo = this.getById(seckillActivityId); if(null == activityInfo || activityInfo.getDelFlag() == 1){ throw new RuntimeException("活动不存在"); } if(activityInfo.getIsShelves() == 0){ throw new RuntimeException("活动已下架"); } if(!activityInfo.getVipIds().contains(vipId.toString())){ throw new RuntimeException("权限不足"); } SeckillActivityDetailVO seckillActivityDetailVO = seckillActivityInfoMapper.selectDetail(seckillActivityId, vipId); Integer goodsId = seckillActivityDetailVO.getGoodsId(); @@ -127,6 +137,12 @@ @Override @Transactional(rollbackFor = Exception.class) public void saveSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) { Integer goodId = seckillActivityInfo.getGoodId(); long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0) .eq(SeckillActivityInfo::getIsShelves, 1).last(" and now() between start_time and end_time")); if(0 < count){ throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在"); } this.baseMapper.insert(seckillActivityInfo); List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills(); for (GoodsSeckill goodsSeckill : goodsSeckills) { @@ -140,6 +156,12 @@ @Override @Transactional(rollbackFor = Exception.class) public void updateSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) { Integer goodId = seckillActivityInfo.getGoodId(); long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0) .eq(SeckillActivityInfo::getIsShelves, 1).last(" and now() between start_time and end_time")); if(1 < count){ throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在"); } this.baseMapper.updateById(seckillActivityInfo); goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId())); List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills(); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java
@@ -73,7 +73,7 @@ List<NearbyShopVO> nearbyShopVOS = shopMapper.selectNearbyShopList(); for (NearbyShopVO nearbyShopVO : nearbyShopVOS) { Double wgs84 = GeodesyUtil.getDistance(nearbyShopVO.getLongitude() + "," + nearbyShopVO.getLatitude(), longitude + "," + latitude).get("WGS84"); nearbyShopVO.setDistance(wgs84); nearbyShopVO.setDistance(new BigDecimal(wgs84).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); } nearbyShopVOS.sort(new Comparator<NearbyShopVO>() { @Override @@ -100,7 +100,7 @@ vo.setAddress(shop.getAddress()); vo.setHomePicture(shop.getHomePicture()); Double wgs84 = GeodesyUtil.getDistance(longitude.toString() + "," + latitude.toString(), shop.getLongitude() + "," + shop.getLatitude()).get("WGS84"); vo.setDistance(wgs84); vo.setDistance(new BigDecimal(wgs84).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); nearbyShopVOS.add(0, vo); } } @@ -117,6 +117,7 @@ Map<Long, List<ShopScore>> shopScoreMap = shopScores.stream().collect(Collectors.groupingBy(ShopScore::getShopId)); AppUser finalAppUser1 = appUser; nearbyShopVOS.forEach(nearbyShopVO -> { nearbyShopVO.setScore("5"); List<ShopScore> scores = shopScoreMap.get(nearbyShopVO.getId()); if (scores != null && !scores.isEmpty()){ BigDecimal score = scores.stream() ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/TransferUtil.java
@@ -31,8 +31,16 @@ * 商户号 */ 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"; /** @@ -86,7 +94,7 @@ */ body.put("paidUse", singlePay.getPaidUse()); //商户通知地址 body.put("callbackUrl", singlePay.getCallbackUrl()); body.put("callbackUrl", callbackUrl + singlePay.getCallbackUrl()); String sign = null; try { sign = sign(body); @@ -207,13 +215,13 @@ public static String sign(JSONObject body) throws Exception{ 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()).toString().compareTo(o2.getKey()); return (o1.getKey()).compareTo(o2.getKey()); } }); // 构造签名键值对的格式 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml
@@ -71,5 +71,6 @@ <if test="null != vip"> and (FIND_IN_SET(#{vip}, commodity_authority) or commodity_authority like '%-1%') </if> order by sort desc </select> </mapper>