ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java
@@ -21,13 +21,9 @@ return R.fail("保存积分流水记录失败:" + cause.getMessage()); } @Override public R saveUserPointCopy(UserPointCopy userPoint) { return R.fail("保存积分流水记录失败:" + cause.getMessage()); } @Override public R deleteUserPointCopy(Long id, List<Integer> type) { public R deleteUserPoint(Long id) { return R.fail("删除积分流水记录失败:" + cause.getMessage()); } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java
@@ -28,11 +28,8 @@ @PostMapping("/user-point/saveUserPoint") R saveUserPoint(@RequestBody UserPoint userPoint); @PostMapping("/user-point/saveUserPointCopy") R saveUserPointCopy(@RequestBody UserPointCopy userPoint); @DeleteMapping("/user-point/deleteUserPointCopy") R deleteUserPointCopy(@RequestParam("orderId") Long orderId, @RequestParam("type") List<Integer> type); @DeleteMapping("/user-point/deleteUserPoint") R deleteUserPoint(@RequestParam("orderId") Long orderId); @PostMapping("/user-point/getUserPointCopy") R<List<UserPointCopy>> getUserPointCopy(@RequestParam("orderId") Long orderId, @RequestParam("type") List<Integer> type); ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/AppUser.java
@@ -87,23 +87,27 @@ private LocalDateTime lastLoginTime; @ApiModelProperty(value = "绑定门店id") @ApiModelProperty(value = "门店id") @TableField("shop_id") private Integer shopId; @ApiModelProperty(value = "绑定门店名称") @ApiModelProperty(value = "门店名称") @TableField(exist = false) private String shopName; @ApiModelProperty(value = "绑定门店列表") @ApiModelProperty(value = "门店列表") @TableField(exist = false) private List<String> shopNames; @ApiModelProperty(value = "绑定门店封面") @ApiModelProperty(value = "门店封面") @TableField(exist = false) private String shopCover; @ApiModelProperty(value = "绑定门店地址") @ApiModelProperty(value = "门店地址") @TableField(exist = false) private String shopAddress; @ApiModelProperty(value = "消费总金额") @ApiModelProperty(value = "门店状态(0-未拥有门店,1-正常,2-冻结)") @TableField(exist = false) private Integer shopStatus; @ApiModelProperty(value = "消费总金额(微信支付总金额)") @TableField("shop_amount") private BigDecimal shopAmount; @@ -121,7 +125,7 @@ @ApiModelProperty(value = "充值积分") @TableField("recharge_point") private BigDecimal rechargePoint; private Integer rechargePoint; @ApiModelProperty(value = "取消订单积分") @@ -202,9 +206,9 @@ public Integer getUserTotalPoint(){ if (totalPoint == null){ totalPoint = 0; } totalPoint = rechargePoint+cancelPoint+exchangePoint+transferableInPoint+transferableOutPoint; return totalPoint ; } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/ApplyForAdmission.java
New file @@ -0,0 +1,89 @@ package com.ruoyi.account.api.model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; import java.time.LocalDateTime; @Data @EqualsAndHashCode(callSuper = false) @TableName("t_apply_for_admission") @ApiModel(value="ApplyForAdmission对象", description="申请入驻对象") public class ApplyForAdmission implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键") @TableId("id") private Long id; @ApiModelProperty(value = "申请用户id") @TableId("apply_user_id") private Long applyUserId; @ApiModelProperty("商家名称") @TableId("shop_name") private String shopName; @ApiModelProperty("商家封面图") @TableId("home_picture") private String homePicture; @ApiModelProperty("店铺详情图") @TableId("details_picture") private String detailsPicture; @ApiModelProperty("资质证书图片") @TableId("certification") private String certification; @ApiModelProperty("店长姓名") @TableId("shop_manager") private String shopManager; @ApiModelProperty("电话") @TableId("phone") private String phone; @ApiModelProperty(value = "客服电话(同步到t_phone表)") @TableField("service_tel") private String serviceTel; @ApiModelProperty(value = "营业星期:1-周一到周日 2-周一周五 3-仅周末") @TableId("business_date") private Integer businessDate; @ApiModelProperty(value = "经度") @TableId("longitude") private String longitude; @ApiModelProperty(value = "纬度") @TableId("latitude") private String latitude; @ApiModelProperty(value = "详细地址") @TableId("address") private String address; @ApiModelProperty(value = "状态(0-待审核,1-审核通过,2-审核不通过)") @TableField("status") private Integer status; @ApiModelProperty(value = "备注") @TableField("remark") private String remark; @ApiModelProperty(value = "创建时间") @TableField("create_time") private LocalDateTime createTime; @ApiModelProperty(value = "修改时间") @TableField("update_time") private LocalDateTime updateTime; } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserPoint.java
@@ -38,9 +38,8 @@ @TableId("id") private Long id; @ApiModelProperty(value = "变动类型(1-消费,2-返佣,3-拉新,4-每日分享,5-每日签到,6-使用时长, 7-注册积分, 8-门店业绩," + "9-门店返佣,14-下级门店返佣,10-技师业绩,11-兑换商品,12-他人赠送,13-赠与他人,15-兑换券)") @Excel(name = "变动类型", readConverterExp = "1=消费积分,2=返佣积分,3=拉新人积分,4=每日分享,5=每日签到,6=使用时长,7=注册积分,8=门店业绩,9=门店返佣,14=下级门店返佣,10=技师业绩,11=兑换商品,12=他人赠送,13=赠与他人,15=兑换券") @ApiModelProperty(value = "变动类型(4=兑换商品,12=他人赠送,13=赠与他人,16=取消订单,17=充值 )") @Excel(name = "变动类型", readConverterExp = "4=兑换商品,12=他人赠送,13=赠与他人,16=取消订单,17=充值 ") @TableField("type") private Integer type; ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,2 +1,2 @@ com.ruoyi.account.api.factory.AppUserClientFallbackFactory com.ruoyi.account.api.factory.UserPointFallbackFactory ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java
@@ -37,11 +37,11 @@ @ApiModelProperty(value = "1待发货2待收货3待使用4已完成5已取消6已退款7售后中8已评价") @ApiModelProperty(value = "3待使用4已完成5已取消6已退款7售后中8已评价") @TableField("order_status") private Integer orderStatus; @ApiModelProperty(value = "1待发货2待收货3待使用4已完成5已取消6已退款7售后中8已评价") @ApiModelProperty(value = "3待使用4已完成5已取消6已退款7售后中8已评价") @TableField("old_order_status") private Integer oldOrderStatus; ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Shop.java
@@ -94,48 +94,9 @@ @TableField("status") private Integer status; @ApiModelProperty(value = "门店积分总数") @TableField("shop_all_point") private Integer shopAllPoint; @ApiModelProperty(value = "绑定下级门店分佣积分") @TableField("lower_level_share_point") private Integer lowerLevelSharePoint; @ApiModelProperty(value = "门店返佣积分") @TableField("share_point") private Integer sharePoint; @ApiModelProperty(value = "门店服务积分") @TableField("server_point") private Integer serverPoint; @ApiModelProperty(value = "门店已用积分") @TableField("use_point") private Integer usePoint; @ApiModelProperty(value = "门店剩余积分") @TableField("lave_point") private Integer lavePoint; @TableField(exist = false) private Integer laveUsePoint; @ApiModelProperty(value = "门店分佣总金额") @TableField("giveaway_all_money") private BigDecimal giveawayAllMoney; @ApiModelProperty(value = "门店分佣金额") @TableField("giveaway_money") private BigDecimal giveawayMoney; @ApiModelProperty(value = "绑定下级门店分佣金额") @TableField("lower_level_giveaway_money") private BigDecimal lowerLevelGiveawayMoney; @ApiModelProperty(value = "门店服务分佣金额") @TableField("server_giveaway_money") private BigDecimal serverGiveawayMoney; @ApiModelProperty(value = "评分") @TableField("score") private Double score; @ApiModelProperty(value = "可提现金额") @TableField("can_withdraw_money") @@ -157,13 +118,6 @@ @TableField("order_number") private Integer orderNumber; @ApiModelProperty(value = "门店服务订单数") @TableField("server_order_number") private Integer serverOrderNumber; @ApiModelProperty(value = "单品自提订单数") @TableField("custom_order_number") private Integer customOrderNumber; @ApiModelProperty(value = "删除(0=否,1=是)") @TableField("del_flag") @@ -221,8 +175,7 @@ @TableField(exist = false) private Double distance; @TableField(exist = false) private Double score; @ApiModelProperty(value = "自己打分") @TableField(exist = false) ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java
@@ -50,9 +50,9 @@ @TableField(exist = false) @Excel(name = "联系电话") private String phone; @ApiModelProperty(value = "变动类型(1=服务商分佣,2=高级服务商分佣,3=核销门店服务费,4=提现,5=订单收入)") @ApiModelProperty(value = "变动类型(4=提现,5=订单收入,6=订单退款)") @TableField("type") @Excel(name = "变更类型",readConverterExp = "1=服务商分佣,2=高级服务商分佣,3=核销门店服务费,5=订单收入") @Excel(name = "变更类型",readConverterExp = "5=订单收入,6=订单退款") private Integer type; @ApiModelProperty(value = "历史余额") ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -7,5 +7,6 @@ com.ruoyi.other.api.factory.StoreFallbackFactory com.ruoyi.other.api.factory.PointSettingClientFallbackFactory com.ruoyi.other.api.factory.RegionClientFallbackFactory com.ruoyi.other.api.factory.ShopBalanceStatementClientFallbackFactory ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.model.*; import com.ruoyi.account.dto.ApplyForAdmissionDTO; import com.ruoyi.account.dto.ChangeAppUserInfo; import com.ruoyi.account.mapper.AppUserMapper; import com.ruoyi.account.service.*; @@ -189,64 +190,22 @@ } @ResponseBody @GetMapping("/recommend") @ApiOperation(value = "推广中心", tags = {"小程序-推广中心"}) public R<AppUser> recommend() { Long userId = tokenService.getLoginUserApplet().getUserid(); //获取绑定门店 AppUser user = appUserService.getById(userId); return R.ok(user); } @GetMapping("/index") @ApiOperation(value = "个人中心首页", tags = {"小程序-个人中心首页"}) @ApiOperation(value = "个人信息", tags = {"小程序-个人中心首页"}) public R<AppUser> index() { Long userId = tokenService.getLoginUserApplet().getUserid(); //当前用户信息 AppUser user = appUserService.getById(userId); return R.ok(user); return R.ok(appUserService.index()); } /** * 获取门店作为服务商的所有用户 * @param shopId * @return */ public Set<Long> getShopServerUser(Integer shopId){ Shop shop = shopClient.getShopById(shopId).getData(); List<Shop> shopList = shopClient.getAllShop().getData(); List<Long> appUserIds = shopList.stream().map(Shop::getAppUserId).collect(Collectors.toList()); Long appUserId = shop.getAppUserId(); //所有未开店的用户 List<AppUser> list = appUserService.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0) .ne(AppUser::getStatus, 3).notIn(AppUser::getId, appUserIds)); Set<Long> ids = new HashSet<>(); getShopServerUser(appUserId, list, ids); return ids; } public void getShopServerUser(Long appUserId, List<AppUser> appUserList, Set<Long> ids){ List<AppUser> collect = appUserList.stream().filter(s->s.getInviteUserId().equals(appUserId)).collect(Collectors.toList()); if(collect.size() == 0){ return; } Set<Long> appUserSet = collect.stream().map(AppUser::getId).collect(Collectors.toSet()); if(ids.containsAll(appUserSet)){ return; } ids.addAll(appUserSet); for (AppUser appUser : collect) { getShopServerUser(appUser.getId(), appUserList, ids); } } @@ -266,34 +225,6 @@ return R.ok(); } /** * 获取用户的祖籍列表 */ @GetMapping("/getUserAncestorList") public R<List<AppUser>> getUserAncestorList(Long id) { List<AppUser> list = appUserService.getUserAncestorList(id, null); return R.ok(list); } /** * 获取用户的直帮上级用户 */ @ResponseBody @PostMapping("/getSuperiorLeader") @ApiOperation(value = "获取用户的直帮上级用户") public R<AppUser> getSuperiorLeader(@RequestParam("id") Long id) { AppUser superiorLeader = appUserService.getSuperiorLeader(id); return R.ok(superiorLeader); } @ResponseBody @PostMapping("/onlineRecord") @ApiOperation(value = "10分钟定时任务调用,记录用户在线时长", tags = {"小程序-个人中心首页"}) public R onlineRecord() { appUserService.onlineRecord(); return R.ok(); } /** @@ -357,8 +288,8 @@ List<Order> orders = orderClient.getRedeemedOrdersByShop(shopId).getData(); List<Long> userIds = orders.stream().map(Order::getAppUserId).collect(Collectors.toList()); //门店作为服务商的用户 Set<Long> shopServerUser = getShopServerUser(shopId); userIds.addAll(shopServerUser); /* Set<Long> shopServerUser = getShopServerUser(shopId); userIds.addAll(shopServerUser);*/ queryWrapper.in(!CollectionUtils.isEmpty(userIds), "id", userIds) .like(StringUtils.isNotEmpty( appUser.getName()),"name", appUser.getName()); } @@ -391,12 +322,6 @@ appUser.setExcludeStatus(3); IPage<AppUser> appuserPage = appUserService.getAppuserPage(pageNum, pageSize, appUser, shopId, userId); for (AppUser record : appuserPage.getRecords()) { if (record.getInviteUserId() != null) { AppUser byId1 = appUserService.getById(record.getInviteUserId()); if (byId1!=null) { record.setInviteUserName(byId1.getName()); } } Shop shop1 = shopClient.getServiceProvider(record.getId()).getData(); if(null != shop1){ record.setShopName(shop1.getName()); @@ -425,12 +350,12 @@ } IPage<AppUser> appuserPage = appUserService.getAppuserPage(pageNum, pageSize, appUser, shopId, userId); for (AppUser record : appuserPage.getRecords()) { if (record.getInviteUserId() != null) { /* if (record.getInviteUserId() != null) { AppUser byId1 = appUserService.getById(record.getInviteUserId()); if (byId1!=null) { record.setInviteUserName(byId1.getName()); } } }*/ if (record.getShopId()!=null){ R<Shop> shopById = shopClient.getShopById(record.getShopId()); if (shopById.getData()!=null){ @@ -461,8 +386,8 @@ for (Order datum : listR.getData()) { userIds.add(datum.getAppUserId()); } Set<Long> shopServerUser = getShopServerUser(objectId); userIds.addAll(shopServerUser); /* Set<Long> shopServerUser = getShopServerUser(objectId); userIds.addAll(shopServerUser);*/ } IPage<AppUser> appuserPage = appUserService.getAppuserPage1(pageCurr, pageSize, appUser, userIds); return R.ok(appuserPage); @@ -530,19 +455,19 @@ byId.setShopNames(shopName); } //推广人 if (byId.getInviteUserId() != null) { /*if (byId.getInviteUserId() != null) { AppUser appUser = appUserService.getById(byId.getInviteUserId()); if(null != appUser){ byId.setInviteUserName(appUser.getName()); } } }*/ //最后下单时间 R<Order> lastOrder = remoteOrderGoodsClient.getLastOrder(id); if (lastOrder.getData() != null) { byId.setLastOrderTime(lastOrder.getData().getCreateTime()); } List<AppUser> list = appUserService.lambdaQuery().eq(AppUser::getInviteUserId, id).list(); byId.setBottomUsers(list); /*List<AppUser> list = appUserService.lambdaQuery().eq(AppUser::getInviteUserId, id).list(); byId.setBottomUsers(list);*/ //消费总金额 if(null == shopId || 1 == sysUser.getRoleType()){ shopId = -1; @@ -561,31 +486,7 @@ return R.ok(byId); } /** * 获取指定用户的下级用户 */ @GetMapping("/bottom/list") @ApiOperation(value = "用户列表-下级用户", tags = {"管理后台"}) public R<Page<AppUser>> bottom(Integer pageNum, Integer pageSize, Long userId){ Page<AppUser> page = appUserService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<AppUser>() .eq(AppUser::getInviteUserId, userId)); return R.ok(page); } @GetMapping("/bottom") @ApiOperation(value = "用户列表-绑定下级列表", tags = {"管理后台"}) public R<Page<AppUser>> bottom(Long id, Integer pageNum, Integer pageSize) { //绑定下级 Page<AppUser> page = appUserService.lambdaQuery() .eq(AppUser::getInviteUserId, id) .eq(AppUser::getDelFlag, 0) .eq(AppUser::getStatus, 1) .page(Page.of(pageNum, pageSize)); return R.ok(page); } @GetMapping("/orders") @ApiOperation(value = "用户列表-订单列表", tags = {"管理后台"}) @@ -639,16 +540,6 @@ } /** * 设置指定用户的下级用户绑定门店 */ @PostMapping("/setLowerUserShop") public R<Void> setLowerUserShop(@RequestParam("userId") Long userId,@RequestParam("shopId") Integer shopId) { appUserService.update(new LambdaUpdateWrapper<AppUser>() .set(AppUser::getShopId,shopId) .eq(AppUser::getInviteUserId, userId)); return R.ok(); } /** @@ -718,8 +609,8 @@ shopId = data.getObjectId(); if(null == userId){ userIds = orderClient.getAppUserByShoppingShop(shopId).getData(); Set<Long> shopServerUser = getShopServerUser(shopId); userIds.addAll(shopServerUser); /* Set<Long> shopServerUser = getShopServerUser(shopId); userIds.addAll(shopServerUser);*/ }else{ userIds = new HashSet<>(); userIds.add(userId); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserApplyForAdmissionController.java
New file @@ -0,0 +1,40 @@ package com.ruoyi.account.controller; import com.ruoyi.account.api.model.ApplyForAdmission; import com.ruoyi.account.dto.ApplyForAdmissionDTO; import com.ruoyi.account.service.UserApplyForAdmissionService; import com.ruoyi.common.core.domain.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; 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 javax.annotation.Resource; @Api(tags = {"申请入驻"}) @RestController @RequestMapping("/user-applyForAdmission") @Slf4j public class UserApplyForAdmissionController { @Resource private UserApplyForAdmissionService userApplyForAdmissionService; @PostMapping("/apply") @ApiOperation(value = "入驻申请", tags = {"小程序-个人中心首页-申请合作"}) public R apply(ApplyForAdmissionDTO applyForAdmissionDTO) { userApplyForAdmissionService.apply(applyForAdmissionDTO); return R.ok(); } @GetMapping("/read") @ApiOperation(value = "查看入驻申请", tags = {"小程序-个人中心首页-申请合作"}) public R<ApplyForAdmission> read() { return R.ok(userApplyForAdmissionService.read()); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -49,6 +49,7 @@ private OrderClient orderClient; /** * 获取个人积分 */ @@ -64,9 +65,7 @@ @GetMapping("/getUserPointDetail") @ApiOperation("获取变更明细") public R<PageInfo<UserPointDetailVO>> getUserPointDetail(@ApiParam("指定日期") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date, @ApiParam("变动类型(1=消费积分,2=返佣积分,3=拉新人积分,4=兑换商品 " + "5 = 门店业绩积分 6 =门店返佣积分7=技师业绩积分8 =转赠积分 9 =做工积分 " + "10 =注册积分 )") Integer type, Integer pageCurr, Integer pageSize) { @ApiParam("变动类型(4=兑换商品,12=他人赠送,13=赠与他人,16=取消订单,17=充值 )") Integer type, Integer pageCurr, Integer pageSize) { LocalDateTime startTime = null; LocalDateTime endTime = null; if (date != null) { @@ -107,7 +106,17 @@ return R.ok(); } /** * 删除用户积分流水 */ @DeleteMapping("/deleteUserPoint") public R deleteUserPoint(@RequestParam("orderId") Long orderId) { userPointService.remove(new LambdaQueryWrapper<UserPoint>().eq(UserPoint::getObjectId, orderId)); return R.ok(); } /** * 积分统计 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/dto/ApplyForAdmissionDTO.java
New file @@ -0,0 +1,45 @@ package com.ruoyi.account.dto; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ApplyForAdmissionDTO { @ApiModelProperty("商家名称") private String shopName; @ApiModelProperty("商家封面图") private String homePicture; @ApiModelProperty("店铺详情图") private String detailsPicture; @ApiModelProperty("资质证书图片") private String certification; @ApiModelProperty("店长姓名") private String shopManager; @ApiModelProperty("电话") private String phone; @ApiModelProperty(value = "客服电话(同步到t_phone表)") private String serviceTel; @ApiModelProperty(value = "营业星期:1-周一到周日 2-周一周五 3-仅周末") private Integer businessDate; @ApiModelProperty(value = "经度") private String longitude; @ApiModelProperty(value = "纬度") private String latitude; @ApiModelProperty(value = "详细地址") private String address; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/ApplyForAdmissionMapper.java
New file @@ -0,0 +1,8 @@ package com.ruoyi.account.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.account.api.model.AppUserBank; import com.ruoyi.account.api.model.ApplyForAdmission; public interface ApplyForAdmissionMapper extends BaseMapper<ApplyForAdmission> { } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.dto.ApplyForAdmissionDTO; import com.ruoyi.account.vo.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -48,32 +49,12 @@ /** * 注册账号 * @param registerAccount * @return */ // R<LoginVo> registerAccount(RegisterAccount registerAccount); /** * 获取用户的祖籍列表 */ List<AppUser> getUserAncestorList(Long id,List<AppUser> list); /** * 获取指定用户的直帮上级用户(消费用户绑定的上级,最近一个用户会员类型为【创业者】的用户) */ AppUser getSuperiorLeader(Long id); /** * 解绑推广人 */ void unbindThePromoter(); /** * 在线记录操作,用于赠送积分 */ void onlineRecord(); IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser, Integer shopId, Set<Long> userId); @@ -81,4 +62,8 @@ IPage<AppUser> getAppuserPage1(Integer pageNum, Integer pageSize, AppUser appUser,List<Long> userIds); List<AppUser> getAppUserByPhoneNoFilter(String phone); AppUser index(); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserApplyForAdmissionService.java
New file @@ -0,0 +1,12 @@ package com.ruoyi.account.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.ApplyForAdmission; import com.ruoyi.account.dto.ApplyForAdmissionDTO; public interface UserApplyForAdmissionService extends IService<ApplyForAdmission> { void apply(ApplyForAdmissionDTO applyForAdmissionDTO); ApplyForAdmission read(); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.model.*; import com.ruoyi.account.dto.ApplyForAdmissionDTO; import com.ruoyi.account.mapper.AppUserMapper; import com.ruoyi.account.service.*; import com.ruoyi.account.util.GeodesyUtil; @@ -30,7 +31,9 @@ import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -267,8 +270,6 @@ /** * 注册账号 * @param registerAccount * @return */ /* @Override @@ -473,149 +474,9 @@ @Override public List<AppUser> getUserAncestorList(Long id, List<AppUser> list) { if (list == null) { list = new ArrayList<>(); } Set<Long> visitedIds = new HashSet<>(); Long currentId = id; while (currentId != null && !visitedIds.contains(currentId)) { AppUser appUser = getById(currentId); if (appUser == null) { break; // 如果用户不存在,终止循环 } Long inviteUserId = appUser.getInviteUserId(); if (inviteUserId != null) { AppUser invitedUser = getById(inviteUserId); if (invitedUser != null) { list.add(invitedUser); visitedIds.add(currentId); currentId = inviteUserId; } else { break; // 如果邀请用户不存在,终止循环 } } else { break; // 如果没有邀请用户,终止循环 } } return list; } @Override public AppUser getSuperiorLeader(Long id) { AppUser appUser = getById(id); Long inviteUserId = appUser.getInviteUserId(); AppUser inviteUser = getById(inviteUserId); if (inviteUser == null){ return null; } if (inviteUser.getVipId() > 3) { return inviteUser; }else { return getSuperiorLeader(inviteUserId); } } /** * 定时解绑推广人 */ @Override public void unbindThePromoter() { //注册X天后没有升级成黄金会员则自动解绑推广人 //解绑推广人 Set<Long> unbind_promoter = redisTemplate.opsForZSet().rangeByScore("unbind_promoter", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); if(unbind_promoter.size() > 0){ List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).isNotNull(AppUser::getInviteUserId) .eq(AppUser::getStatus, 1).in(AppUser::getId, unbind_promoter)); for (AppUser appUser : list) { UpdateWrapper<AppUser> updateWrapper = new UpdateWrapper<>(); updateWrapper.set("invite_user_id", null).set("shop_id", null).eq("id", appUser.getId()); this.update(updateWrapper); } redisTemplate.opsForZSet().remove("unbind_promoter", unbind_promoter.toArray()); } //可更换推广人 Set<Long> replaceable = redisTemplate.opsForZSet().rangeByScore("replaceable", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); if(replaceable.size() > 0){ List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0) .eq(AppUser::getStatus, 1).in(AppUser::getId, replaceable)); for (AppUser appUser : list) { Long data = orderClient.getOrderCountByAppUserId(appUser.getId()).getData(); if(data == 0L){ appUser.setChangePromoter(1); this.updateById(appUser); } } redisTemplate.opsForZSet().remove("replaceable", replaceable.toArray()); } } /** * 在线记录操作,用于赠送积分 */ @Override public void onlineRecord() { Long userid = tokenService.getLoginUserApplet().getUserid(); Object cacheObject = redisService.getCacheObject("ONLINE_" + userid); if(null == cacheObject){ JSONObject jsonObject = new JSONObject(); jsonObject.put("time", System.currentTimeMillis()); jsonObject.put("online", 0); redisService.setCacheObject("ONLINE_" + userid, jsonObject, 1L, TimeUnit.HOURS); }else{ JSONObject jsonObject = (JSONObject) cacheObject; long time = System.currentTimeMillis() - jsonObject.getInteger("time"); Integer online = jsonObject.getInteger("online"); online++; //时间满足1小时,并且次数记录满足6次(10分钟记录一次) if(time >= 3600000 && 6 <= online){ jsonObject.put("time", System.currentTimeMillis()); jsonObject.put("online", 0); redisService.setCacheObject("ONLINE_" + userid, jsonObject, 1L, TimeUnit.HOURS); AppUser appUser = this.getById(userid); PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData(); if(null != pointSetting){ int hourPoint = pointSetting.getHourPoint().intValue(); int hourPoint1 = 0; if(1 == pointSetting.getWorkPointOpen()){ hourPoint1 = new BigDecimal(hourPoint).multiply(pointSetting.getWorkPoint().divide(new BigDecimal(100))).intValue(); } //添加积分变动记录 if(hourPoint > 0){ Integer lavePoint = appUser.getLavePoint(); appUser.setTotalPoint(appUser.getTotalPoint() + hourPoint); appUser.setLavePoint(appUser.getLavePoint() + hourPoint); appUser.setAvailablePoint(appUser.getAvailablePoint() + hourPoint1); appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + hourPoint1); if(null != pointSetting && 1 == pointSetting.getWorkPointGift()){ appUser.setTransferablePoint(appUser.getTransferablePoint() + hourPoint1); } appUser.setTotalHourPoint(appUser.getTotalHourPoint() + hourPoint); this.updateById(appUser); UserPoint userPoint = new UserPoint(); userPoint.setType(6); userPoint.setHistoricalPoint(lavePoint); userPoint.setVariablePoint(hourPoint); userPoint.setBalance(appUser.getLavePoint()); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPointService.save(userPoint); } } }else{ jsonObject.put("online", online); redisService.setCacheObject("ONLINE_" + userid, jsonObject, 1L, TimeUnit.HOURS); } } } @Override public IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser, Integer shopId, Set<Long> userId) { @@ -643,4 +504,26 @@ public List<AppUser> getAppUserByPhoneNoFilter(String phone) { return this.baseMapper.getAppUserByPhoneNoFilter(phone); } /** * 小程序-个人中心 * @return */ @Override public AppUser index() { Long userId = tokenService.getLoginUserApplet().getUserid(); //当前用户信息 AppUser user = this.getById(userId); //查询门店,如果门店被冻结 List<Shop> shopList = shopClient.getShopByUserId(userId).getData(); user.setShopStatus(0);//未拥有门店 if (shopList != null && !shopList.isEmpty()) { for (Shop shop : shopList) { user.setShopStatus(shop.getStatus());//门店状态 } } return user; } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserApplyForAdmissionServiceImpl.java
New file @@ -0,0 +1,49 @@ package com.ruoyi.account.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.ApplyForAdmission; import com.ruoyi.account.dto.ApplyForAdmissionDTO; import com.ruoyi.account.mapper.AppUserMapper; import com.ruoyi.account.mapper.ApplyForAdmissionMapper; import com.ruoyi.account.service.UserApplyForAdmissionService; import com.ruoyi.common.security.service.TokenService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @Slf4j @Service public class UserApplyForAdmissionServiceImpl extends ServiceImpl<ApplyForAdmissionMapper, ApplyForAdmission> implements UserApplyForAdmissionService { @Autowired private TokenService tokenService; @Autowired private ApplyForAdmissionMapper userApplyForAdmissionMapper; /** * 申请入驻 */ @Override public void apply(ApplyForAdmissionDTO applyForAdmissionDTO) { Long userid = tokenService.getLoginUserApplet().getUserid(); ApplyForAdmission applyForAdmission = new ApplyForAdmission(); BeanUtils.copyProperties(applyForAdmissionDTO, applyForAdmission); applyForAdmission.setCreateTime(LocalDateTime.now()); applyForAdmission.setApplyUserId(userid); applyForAdmission.setStatus(0); this.save(applyForAdmission); } /** * 查看 */ @Override public ApplyForAdmission read() { Long userid = tokenService.getLoginUserApplet().getUserid(); return userApplyForAdmissionMapper.selectOne(new LambdaQueryWrapper<ApplyForAdmission>().eq(ApplyForAdmission::getApplyUserId, userid)); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -50,18 +50,14 @@ @Override public UserPointVO getUserPoint(Long userId) { AppUser appUser = appUserService.getById(userId); int totalPoint = 0; int sharePoint = 0; int shopAchievementPoint = 0; int shopSharePoint = 0; UserPointVO userPointVO = new UserPointVO(); userPointVO.setTotalPoint(appUser.getTotalPoint() + totalPoint); userPointVO.setTotalPoint(appUser.getUserTotalPoint() ); userPointVO.setConsumePoint(appUser.getAvailablePoint()); userPointVO.setShopPoint(appUser.getShopPoint()); userPointVO.setSharePoint(appUser.getSharePoint() + sharePoint); userPointVO.setPullNewPoint(appUser.getTotalInvitePoint()); userPointVO.setShopAchievementPoint(appUser.getShopAchievementPoint() + shopAchievementPoint); userPointVO.setShopSharePoint(appUser.getShopSharePoint() + shopSharePoint); userPointVO.setRechargePoint(appUser.getRechargePoint()); userPointVO.setCancelPoint(appUser.getCancelPoint()); userPointVO.setExpendPoint(appUser.getExchangePoint()); userPointVO.setTransferableInPoint(appUser.getTransferableInPoint()); userPointVO.setTransferableOutPoint(appUser.getTransferableOutPoint()); return userPointVO; } @@ -107,10 +103,8 @@ if (appUser == null) { return R.fail("用户未找到"); } // 可转赠积分总数 Integer transferablePoint = appUser.getTransferablePoint(); if (point > transferablePoint) { return R.fail("可转赠积分不足"); if (appUser.getAvailablePoint() < point) { return R.fail("用户可用积分不足"); } AppUser appUserForPhoe = appUserService.getOne(new LambdaQueryWrapper<AppUser>() @@ -124,38 +118,43 @@ 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); Integer historicalPoint = appUserForPhoe.getAvailablePoint();//历史积分 Integer balance = historicalPoint +point;//变动后积分 appUserForPhoe.setAvailablePoint(balance);//可用积分增加 appUserForPhoe.setTotalPoint(appUserForPhoe.getUserTotalPoint() + point);//总积分增加 appUserForPhoe.setTransferableInPoint(appUserForPhoe.getTransferableInPoint() + point);//转入积分增加 appUserService.updateById(appUserForPhoe); //构建积分流水记录 if(point > 0){ //转入用户 UserPoint userPoint = new UserPoint(); userPoint.setType(12); userPoint.setHistoricalPoint(lavePoint1); userPoint.setHistoricalPoint(historicalPoint); userPoint.setVariablePoint(point); userPoint.setBalance(appUserForPhoe.getLavePoint()); userPoint.setBalance(balance); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUserForPhoe.getId()); userPoint.setObjectId(userid); userPointService.save(userPoint); } Integer lavePoint = appUser.getLavePoint(); appUser.setLavePoint(appUser.getLavePoint() - point); appUser.setTransferablePoint(appUser.getTransferablePoint() - point); appUser.setAvailablePoint(appUser.getAvailablePoint() - point); Integer historicalPoint2 = appUserForPhoe.getAvailablePoint();//历史积分 Integer balance2 = historicalPoint - point;//变动后积分 appUser.setAvailablePoint(balance);//可用积分减少 appUser.setTransferableOutPoint(appUserForPhoe.getTransferableOutPoint() + point);//转出积分增加 appUserService.updateById(appUser); //构建积分流水记录 if(point > 0){ UserPoint userPoint = new UserPoint(); userPoint.setType(13); userPoint.setHistoricalPoint(lavePoint); userPoint.setHistoricalPoint(historicalPoint2); userPoint.setVariablePoint(point); userPoint.setBalance(appUser.getLavePoint()); userPoint.setBalance(balance2); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPoint.setObjectId(appUserForPhoe.getId()); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/UserPointVO.java
@@ -14,21 +14,18 @@ @ApiModelProperty(value = "可消费积分") private Integer consumePoint; @ApiModelProperty(value = "消费积分数") private Integer shopPoint; @ApiModelProperty(value = "充值积分") private Integer rechargePoint; @ApiModelProperty(value = "取消订单积分") private Integer sharePoint; @ApiModelProperty(value = "充值积分") private Integer pullNewPoint; private Integer cancelPoint; @ApiModelProperty(value = "兑换商品") private Integer shopAchievementPoint; private Integer expendPoint; @ApiModelProperty(value = "转增(转入)") private Integer shopSharePoint; private Integer transferableInPoint; @ApiModelProperty(value = "转增(转出)") private Integer giftPoint; private Integer transferableOutPoint; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEventListener.java
@@ -90,10 +90,9 @@ .eq(OrderGood::getOrderId, orderId)); String expressJson = tOrder.getExpressJson(); JSONObject jsonObject = JSONObject.parseObject(expressJson); String com = jsonObject.getString("com"); String num = jsonObject.getString("num"); Order order = new Order(); order.setDelivery_mode(1); @@ -111,8 +110,6 @@ Goods goods = JSONObject.parseObject(goodJson, Goods.class); String name = goods.getName(); Shipping shipping = new Shipping(); shipping.setTracking_no(num); shipping.setExpress_company(com); shipping.setItem_desc(name + "*" + orderGoodNum); String phone = maskPhoneNumber(shop.getPhone()); Contact contact = new Contact(); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -318,9 +318,6 @@ /** * 小程序取消订单 * * @param orderId * @return */ @Override public R cancel(Long orderId) { @@ -339,14 +336,9 @@ return R.fail("订单取消失败"); } order.setOrderStatus(5); //todo 商品销售数量 R r = refundPayMoney(order); if (200 == r.getCode()) { this.updateById(order); } R r2 = userPointClient.deleteUserPointCopy(orderId, Arrays.asList(8));//门店业绩 if (200 != r2.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致 throw new RuntimeException("订单取消失败"); } return r; } @@ -379,71 +371,82 @@ /** * 返回订单支付金额和回退积分和会员等级 * * @param order * 回退积分和返回订单支付金额 */ public R refundPayMoney(Order order) { //开始退款 //先回退积分 AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); if (order.getPoint()>0) { //返回订单抵扣积分 Integer historicalPoint = appUser.getAvailablePoint(); Integer availablePoint = appUser.getAvailablePoint() + order.getPoint();//可用积分 Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分 appUser.setAvailablePoint(availablePoint); appUser.setCancelPoint(cancelPoint); appUserClient.editAppUserById(appUser); //构建积分流水 UserPoint userPoint = new UserPoint(); userPoint.setType(16);//取消订单 userPoint.setHistoricalPoint(historicalPoint); userPoint.setVariablePoint(order.getPoint()); userPoint.setBalance(availablePoint); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(order.getAppUserId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); } BigDecimal paymentAmount = order.getPaymentAmount(); AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); if (BigDecimal.ZERO.compareTo(order.getPaymentAmount()) < 0) {//支付的金额是否大于0 //微信退款 RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback"); if ("100".equals(refund.getRa_Status())) { order.setRefundStatus(1); return R.ok(); } else { return R.fail(refund.getRc_CodeMsg()); if (!"100".equals(refund.getRa_Status())) { return R.fail(refund.getRc_CodeMsg());//退款失败 } } if (0 != order.getPoint()) {//使用的积分是否为0 Integer lavePoint = appUser.getAvailablePoint(); //积分退款 appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint()); appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint()); UserPoint userPoint1 = new UserPoint(); userPoint1.setType(11); userPoint1.setObjectId(order.getId()); List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();//用户积分流水 Integer transferablePoint = order.getPoint(); if (data.size() > 0) { UserPoint userPoint = data.get(0); transferablePoint = Integer.valueOf(userPoint.getExtention()); } //构建积分流水明细 if (order.getPoint() > 0) { UserPoint userPoint = new UserPoint(); userPoint.setType(11); userPoint.setHistoricalPoint(lavePoint); userPoint.setVariablePoint(order.getPoint()); userPoint.setBalance(appUser.getAvailablePoint()); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(order.getAppUserId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); } appUserClient.editAppUserById(appUser); } order.setRefundStatus(2); order.setRefundTime(LocalDateTime.now()); orderMapper.updateById(order); //todo 退款后店铺积分流水以及退款前店铺积分流水 /* shopPointClient.deleteShopPointCopy(order.getId(), Arrays.asList(1,2,3)); shopBalanceStatementClient.deleteShopBalanceStatementCopy(order.getId(), Arrays.asList(1,2,3)); appUserGiveawayTemporaryClient.delAppUserGiveawayTemporary(order.getId()); shopGiveawayTemporaryClient.delShopGiveawayTemporary(order.getId());*/ //商品销售数量 OrderGood orderGood = orderGoodService.getOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId())); goodsClient.editGoodsNum(orderGood.getGoodsId(), -1); //获取商品json Goods good = JSON.parseObject(orderGood.getGoodJson(), Goods.class); //门店减少冻结资金 即减少余额, 冻结资金=余额-可用资金 Shop shop = shopClient.getShopById(order.getShopId()).getData(); BigDecimal historicalBalance=shop.getBalance();//历史余额 BigDecimal variableAmount=good.getSellingPrice();//变动金额 BigDecimal balance=shop.getBalance().subtract(good.getSellingPrice());//变动后余额 shop.setBalance(balance); shopClient.updateShop(shop); //门店余额流水记录 ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); shopBalanceStatement.setShopId(shop.getId()); shopBalanceStatement.setShopName(shop.getName()); shopBalanceStatement.setShopManagerName(shop.getShopManager()); shopBalanceStatement.setPhone(shop.getPhone()); shopBalanceStatement.setType(6);//变更类型,订单退款 shopBalanceStatement.setHistoricalBalance(historicalBalance); shopBalanceStatement.setVariableAmount(variableAmount); shopBalanceStatement.setCreateTime(LocalDateTime.now()); shopBalanceStatement.setBalance(balance); shopBalanceStatement.setCreateUserId(appUser.getId()); shopBalanceStatement.setObjectId(order.getId()); shopBalanceStatementClient.saveShopBalanceStatement(shopBalanceStatement); return R.ok(); } /** * 取消订单后回调处理 * 退款后后回调处理 * * @return */ @@ -664,7 +667,6 @@ /** * 订单支付 * todo 用户积分流水情况 */ @Override public R orderPayment(OrderPayment orderPayment) { @@ -712,7 +714,7 @@ return R.fail("支付方式不正确"); } //现金支付的订单总金额 //订单总金额 BigDecimal orderMoney = BigDecimal.ZERO; //积分支付的订单积分 Integer orderPoint = 0; @@ -793,28 +795,27 @@ //判断积分是否为零,积分支付 if (0 != order.getPoint()){ //积分支付 Integer lavePoint = appUser.getAvailablePoint(); Integer historicalPoint = appUser.getAvailablePoint();//历史积分 Integer availablePoint = historicalPoint - orderPoint;//可用积分 Integer exchangePoint = appUser.getExchangePoint() + orderPoint;//兑换商品消费积分 //扣减订单支付积分 appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);//剩余积分 appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);//可用积分 appUser.setAvailablePoint(availablePoint); appUser.setExchangePoint(exchangePoint ); //构建积分流水记录 if(orderPoint > 0){ UserPoint userPoint = new UserPoint(); userPoint.setType(11); userPoint.setHistoricalPoint(lavePoint); userPoint.setVariablePoint(orderPoint); userPoint.setBalance(appUser.getAvailablePoint()); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); } UserPoint userPoint = new UserPoint(); userPoint.setType(4);//兑换商品 userPoint.setHistoricalPoint(historicalPoint); userPoint.setVariablePoint(orderPoint); userPoint.setBalance(availablePoint); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); //用户积分变动 appUser.setLastShopTime(LocalDateTime.now()); appUserClient.editAppUserById(appUser); /* //变更等级 applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));*/ } //判断需要支付的金额是否大于0 @@ -842,10 +843,12 @@ //商品销量增加 goodsClient.editGoodsNum(orderGood.getGoodsId(), 1); //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金 //门店增加冻结资金 即增加余额, 冻结资金=余额-可用资金 Shop shop = shopClient.getShopById(order.getShopId()).getData(); BigDecimal historicalBalance=shop.getBalance();//历史余额 BigDecimal variableAmount=goods.getSellingPrice();//变动金额 BigDecimal balance=shop.getBalance().add(goods.getSellingPrice());//变动后余额 shop.setBalance(balance); shop.setOrderNumber(shop.getOrderNumber()+1); shopClient.updateShop(shop); @@ -858,7 +861,7 @@ shopBalanceStatement.setPhone(shop.getPhone()); shopBalanceStatement.setType(5);//变更类型,订单收入 shopBalanceStatement.setHistoricalBalance(historicalBalance); shopBalanceStatement.setVariableAmount(goods.getSellingPrice()); shopBalanceStatement.setVariableAmount(variableAmount); shopBalanceStatement.setCreateTime(LocalDateTime.now()); shopBalanceStatement.setBalance(balance); shopBalanceStatement.setCreateUserId(appUser.getId()); @@ -879,7 +882,7 @@ AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); BigDecimal paymentMoney = order.getPaymentAmount(); //构建积分流水记录 //增加用户消费总金额(微信支付金额) appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));//消费总金额 appUser.setLastShopTime(LocalDateTime.now()); appUserClient.editAppUserById(appUser); @@ -895,11 +898,14 @@ OrderGood orderGood = orderGoodService.getOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId())); //商品销量增加 goodsClient.editGoodsNum(orderGood.getGoodsId(), 1); Goods goods = JSON.parseObject(orderGood.getGoodJson(), Goods.class); //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金 Shop shop = shopClient.getShopById(order.getShopId()).getData(); BigDecimal historicalBalance=shop.getBalance();//历史余额 BigDecimal balance=shop.getBalance().add(order.getTotalAmount());//变动后余额 BigDecimal variableAmount=goods.getSellingPrice();//变动余额 BigDecimal balance=shop.getBalance().add(variableAmount);//变动后余额 shop.setBalance(balance); shop.setOrderNumber(shop.getOrderNumber()+1); shopClient.updateShop(shop); @@ -912,7 +918,7 @@ shopBalanceStatement.setPhone(shop.getPhone()); shopBalanceStatement.setType(5);//变更类型,订单收入 shopBalanceStatement.setHistoricalBalance(historicalBalance); shopBalanceStatement.setVariableAmount(order.getTotalAmount()); shopBalanceStatement.setVariableAmount(variableAmount); shopBalanceStatement.setCreateTime(LocalDateTime.now()); shopBalanceStatement.setBalance(balance); shopBalanceStatement.setCreateUserId(appUser.getId()); @@ -924,7 +930,6 @@ /** * 定时任务关闭订单 * todo 关闭订单前,检查是否先支付过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水,门店余额流水的删除 */ @Override public void closeOrder() { @@ -946,6 +951,30 @@ log.error("关闭订单失败:{}---->{}", order.getOrderNumber(), JSON.toJSONString(closeOrderResult)); } redisTemplate.opsForZSet().remove("OrderPayment", order.getOrderNumber()); //关闭订单后,检查是否先有过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水的删除 if (order.getPoint()>0) { //返回订单抵扣积分 AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); Integer availablePoint = appUser.getAvailablePoint();//可用积分 Integer variablePoint = order.getPoint();//变动积分 Integer balance = appUser.getAvailablePoint() + order.getPoint();//变动后积分 Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分 appUser.setAvailablePoint(availablePoint); appUser.setCancelPoint(cancelPoint); //构建积分流水记录 UserPoint userPoint = new UserPoint(); userPoint.setType(16);//取消订单 userPoint.setHistoricalPoint(availablePoint); userPoint.setVariablePoint(variablePoint); userPoint.setBalance(balance); userPoint.setCreateTime(LocalDateTime.now()); userPoint.setAppUserId(appUser.getId()); userPoint.setObjectId(order.getId()); userPointClient.saveUserPoint(userPoint); appUserClient.editAppUserById(appUser); } } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/TaskUtil.java
@@ -1,6 +1,7 @@ package com.ruoyi.order.util; import com.ruoyi.account.api.feignClient.UserPointClient; import com.ruoyi.order.service.OrderService; import org.springframework.scheduling.annotation.Scheduled; @@ -21,10 +22,10 @@ @Resource private OrderService orderService; //每分钟 @Scheduled(fixedRate = 60000) public void taskMonth() { orderService.closeOrder();//定时任务关闭订单 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -16,6 +16,7 @@ import com.ruoyi.order.vo.OrderSaleNum; import com.ruoyi.order.vo.VerifiableShopVo; import com.ruoyi.other.api.domain.*; import com.ruoyi.other.enums.PhoneType; import com.ruoyi.other.mapper.ShopMapper; import com.ruoyi.other.mapper.ShopScoreMapper; import com.ruoyi.other.service.*; @@ -103,6 +104,10 @@ } LoginUser loginUserApplet = tokenService.getLoginUserApplet(); shopScore.setAppUserId(loginUserApplet.getUserid()); ShopScore one1 = shopScoreService.getOne(new LambdaQueryWrapper<ShopScore>().eq(ShopScore::getAppUserId, loginUserApplet.getUserid())); if (null!=one1){ return R.fail("不能重复评分"); } shopScore.setCreateTime(LocalDateTime.now()); shopScoreService.save(shopScore); //计算,更新到门店中 @@ -144,7 +149,7 @@ if (appUser == null){ return R.fail("该手机号未注册"); } shop.setShopAllPoint(0); /* shop.setShopAllPoint(0); shop.setLowerLevelSharePoint(0); shop.setSharePoint(0); shop.setServerPoint(0); @@ -152,12 +157,12 @@ shop.setGiveawayAllMoney(BigDecimal.ZERO); shop.setGiveawayMoney(BigDecimal.ZERO); shop.setLowerLevelGiveawayMoney(BigDecimal.ZERO); shop.setServerGiveawayMoney(BigDecimal.ZERO); shop.setServerGiveawayMoney(BigDecimal.ZERO);*/ shop.setCanWithdrawMoney(BigDecimal.ZERO); shop.setWithdrawMoney(BigDecimal.ZERO); shop.setOrderNumber(0); shop.setServerOrderNumber(0); shop.setCustomOrderNumber(0); /* shop.setServerOrderNumber(0); shop.setCustomOrderNumber(0);*/ shop.setAppUserId(appUser.getId()); String city = TencentMapUtil.inverseGeographicalAnalysis(shop.getLongitude(), shop.getLatitude(), false); if(!StringUtils.hasLength(city)){ @@ -458,9 +463,9 @@ @ApiOperation(value = "门店列表", tags = {"管理后台-门店管理"}) public R<IPage<Shop>> list(@ApiParam("页码") @RequestParam("pageNum") Integer pageNum,@ApiParam("每一页数据大小") @RequestParam("pageSize") Integer pageSize,Shop shop){ IPage<Shop> shopIPage = shopService.getShopList(pageNum, pageSize, shop); for (Shop record : shopIPage.getRecords()) { /*for (Shop record : shopIPage.getRecords()) { record.setLaveUsePoint(record.getLavePoint()); } }*/ return R.ok(shopIPage); } @@ -531,6 +536,8 @@ @ApiParam("纬度") @RequestParam BigDecimal latitude) { return R.ok(shopService.getShopDetail(shopId, longitude, latitude)); } @@ -801,76 +808,17 @@ List<Shop> shopList = shopService.list(queryWrapper); BigDecimal serverGiveawayMoney = BigDecimal.ZERO; BigDecimal giveawayMoney = BigDecimal.ZERO; for (Shop shop : shopList) { /* for (Shop shop : shopList) { serverGiveawayMoney = serverGiveawayMoney.add(shop.getServerGiveawayMoney()); giveawayMoney = giveawayMoney.add(shop.getGiveawayMoney().add(shop.getLowerLevelGiveawayMoney())); } }*/ Map<String, BigDecimal> map = new HashMap<>(); map.put("serverGiveawayMoney", serverGiveawayMoney); map.put("giveawayMoney", giveawayMoney); return R.ok(map); } /** * 获取指定用户的服务商 * @return */ @GetMapping("/getServiceProvider") public R<Shop> getServiceProvider(@RequestParam("appUserId") Long appUserId){ //向上找获取第一个开店的门店 List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getStatus, 1)); AppUser appUser = appUserClient.getAppUserById(appUserId); //上级集合,防止循环关联 Set<Long> pid = new HashSet<>(); Shop shop = getSuperiorStore(appUser, list, 1, 1, pid); return R.ok(shop); } public Shop getSuperiorStore(AppUser appUser, List<Shop> list, Integer hierarchy, Integer num, Set<Long> pid){ if(null == appUser.getInviteUserId()){ return null; } if(pid.contains(appUser.getInviteUserId())){ return null; } AppUser appUser1 = appUserClient.getAppUserById(appUser.getInviteUserId()); if(null != appUser1){ Optional<Shop> first = list.stream().filter(shop -> shop.getAppUserId().equals(appUser1.getId())).findFirst(); if(first.isPresent()){ if(hierarchy.equals(num)){ return first.get(); } num++; } } return getSuperiorStore(appUser1, list, hierarchy, num, pid); } /** * 获取指定用户的高级服务商 * @return */ @GetMapping("/getSuperiorServiceProvider") public R<Shop> getSuperiorServiceProvider(@RequestParam("appUserId") Long appUserId){ //向上找获取第一个开店的门店 List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getStatus, 1)); AppUser appUser = appUserClient.getAppUserById(appUserId); //上级集合,防止循环关联 Set<Long> pid = new HashSet<>(); Shop shop = getSuperiorStore(appUser, list, 2, 1, pid); return R.ok(shop); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java
New file @@ -0,0 +1,29 @@ package com.ruoyi.other.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.mapper.ShopBalanceStatementMapper; import com.ruoyi.other.service.ShopBalanceStatementService; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> * 服务实现类 * </p> * * @author luodangjia * @since 2024-11-20 */ @Service public class ShopBalanceStatementServiceImpl extends ServiceImpl<ShopBalanceStatementMapper, ShopBalanceStatement> implements ShopBalanceStatementService { } ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml
@@ -29,6 +29,7 @@ ts.longitude, ts.latitude, ts.status, ts.phone, (select ROUND(AVG(score), 1) from t_shop_score where shop_id = ts.id) as score FROM t_shop ts