licailing 5 лет назад
Родитель
Сommit
53bf332eec

+ 11 - 5
src/main/java/com/izouma/jiashanxia/domain/Package.java

@@ -40,9 +40,9 @@ public class Package extends BaseEntity {
     @ApiModelProperty(value = "详情")
     private String detail;
 
-    @Enumerated(EnumType.STRING)
-    @ApiModelProperty(value = "套餐类型")
-    private PackageType type;
+//    @Enumerated(EnumType.STRING)
+//    @ApiModelProperty(value = "套餐类型")
+//    private PackageType type;
 
     @ApiModelProperty(value = "套餐分类")
     private Long categoryId;
@@ -55,12 +55,18 @@ public class Package extends BaseEntity {
     @ApiModelProperty(value = "多次使用")
     private boolean repeatedly;
 
-    @ApiModelProperty(value = "大达人奖励比例")
-    private BigDecimal bigExpertRatio;
+    @ApiModelProperty(value = "是否单独分销")
+    private boolean separateDistribution;
+
+    @ApiModelProperty(value = "108将奖励比例")
+    private BigDecimal generalRatio;
 
     @ApiModelProperty(value = "创客奖励比例")
     private BigDecimal makerRatio;
 
+    @ApiModelProperty(value = "创客和108将奖励比例")
+    private BigDecimal generalMakerRatio;
+
     @ApiModelProperty(value = "直推奖励比例")
     private BigDecimal personalRatio0;
 

+ 4 - 4
src/main/java/com/izouma/jiashanxia/domain/User.java

@@ -84,11 +84,11 @@ public class User extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "推广")
     private BigDecimal promote;
 
-    @ApiModelProperty(value = "间推")
-    private BigDecimal childPromote;
+    private BigDecimal maker;
 
-    @ApiModelProperty(value = "大达人额外奖励")
-    private BigDecimal bigExpert;
+    private BigDecimal general;
+
+    private BigDecimal employeesPromote;
 
     private Long parent;
 

+ 0 - 6
src/main/java/com/izouma/jiashanxia/dto/WriteOffSaveVO.java

@@ -22,12 +22,6 @@ public class WriteOffSaveVO {
     @ApiModelProperty(value = "核销人")
     private Long writeOffUserId;
 
-//    @ApiModelProperty(value = "类型")
-//    private PackageType type;
-
-//    @ApiModelProperty(value = "套餐有效期id")
-//    private Long userPackagePeriodId;
-
     /*
     单次使用传订单号
      */

+ 12 - 3
src/main/java/com/izouma/jiashanxia/enums/Member.java

@@ -10,11 +10,20 @@ public enum Member {
      */
     EXPERT,
     /*
-    大达人
+    108将
      */
-    BIG_EXPERT,
+    GENERAL,
     /*
     创客
      */
-    MAKER
+    MAKER,
+    /*
+    员工
+     */
+    EMPLOYEE,
+    /*
+    108将+创客
+     */
+    GENERAL_MAKER
+
 }

+ 2 - 1
src/main/java/com/izouma/jiashanxia/enums/TransactionType.java

@@ -4,8 +4,9 @@ public enum TransactionType {
     WITHDRAW("提现"),
     PROMOTE("推广新会员"),
     CHILD_PROMOTE("下级推广新会员"),
-    BIG_EXPERT("成为大达人额外奖励"),
+//    BIG_EXPERT("成为大达人额外奖励"),
     MAKER("创客奖励"),
+    GENERAL("108将奖励"),
     EMPLOYEES_PROMOTE("员工推广新会员"),
     REFUND("退款"),
     ;

+ 1 - 1
src/main/java/com/izouma/jiashanxia/repo/PackageRepo.java

@@ -17,7 +17,7 @@ public interface PackageRepo extends JpaRepository<Package, Long>, JpaSpecificat
     @Transactional
     void softDelete(Long id);
 
-    List<Package> findAllByTypeAndDelFalse(PackageType type);
+//    List<Package> findAllByTypeAndDelFalse(PackageType type);
 
     List<Package> findAllByAttractionsId(Long attractionsId);
 

+ 13 - 10
src/main/java/com/izouma/jiashanxia/service/CommissionRecordService.java

@@ -22,6 +22,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import javax.persistence.criteria.Predicate;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -161,21 +162,23 @@ public class CommissionRecordService {
                 .collect(Collectors.toMap(User::getId, user -> user));
         records.forEach(record -> {
             User user = userMap.get(record.getUserId());
+            BigDecimal amount = record.getAmount();
             if (ObjectUtil.isNotEmpty(user)) {
-                user.setCacheAmount(user.getCacheAmount().subtract(record.getAmount()));
+                user.setCacheAmount(user.getCacheAmount().subtract(amount));
                 switch (record.getTransactionType()) {
                     case PROMOTE:
-                        user.setPromote(user.getPromote().add(record.getAmount()));
+                        user.setPromote(user.getPromote().add(amount));
+                        userRepo.save(user);
+                        break;
+                    case GENERAL:
+                        user.setGeneral(user.getGeneral().add(amount));
+                        userRepo.save(user);
                         break;
-                    case CHILD_PROMOTE:
-                        user.setChildPromote(user.getChildPromote().add(record.getAmount()));
+                    case MAKER:
+                        user.setMaker(user.getMaker().add(amount));
+                        userRepo.save(user);
                         break;
-                    case BIG_EXPERT:
-                        if (Member.EXPERT.equals(user.getMember())) {
-                            user.setBigExpert(user.getBigExpert().add(record.getAmount()));
-                        } else {
-                            user.setPromote(user.getBigExpert().add(record.getAmount()));
-                        }
+                    default:
                         break;
                 }
             }

+ 2 - 1
src/main/java/com/izouma/jiashanxia/service/ConsumptionService.java

@@ -97,7 +97,8 @@ public class ConsumptionService {
                 .userId(userId)
                 .orderId(orderId)
                 .build());
-        orderInfoService.completed(orderId, transactionId);
+//        orderInfoService.completed(orderId, transactionId);
+        orderInfoService.completed1(orderId, transactionId);
     }
 
 

+ 91 - 53
src/main/java/com/izouma/jiashanxia/service/OrderInfoService.java

@@ -128,7 +128,6 @@ public class OrderInfoService {
         Long userId = order.getUserId();
 
         // 套餐内商品
-        Package aPackage = packageRepo.findById(order.getPackageId()).orElseThrow(new BusinessException("无套餐"));
         List<PackageGoods> packageGoodsList = packageGoodsRepo.findAllByPackageId(order.getPackageId());
         if (order.isRepeatedly()) {
             // 多次使用加入套餐余额
@@ -149,7 +148,7 @@ public class OrderInfoService {
         // 用户id和上级id相同
         if (user.getParent() != null && !userId.equals(user.getParent())) {
             // 上级分销
-            this.distribution1(userId, user.getParent(), orderInfoId.toString(), order.getPrice(), aPackage);
+            this.distribution1(userId, user.getParent(), order);
         }
     }
 
@@ -222,72 +221,80 @@ public class OrderInfoService {
         }
     }
 
-    public void distribution1(Long userId, Long parent, String transactionId, BigDecimal amount, Package aPackage) {
+    public void distribution1(Long userId, Long parent, OrderInfo orderInfo) {
+        Package aPackage = packageRepo.findById(orderInfo.getPackageId()).orElseThrow(new BusinessException("无套餐"));
+
         User parentUser = userRepo.findById(parent).orElseThrow(new BusinessException("无用户"));
         Member member = parentUser.getMember();
         if (Member.NORMAL.equals(member)) {
             return;
         }
+        BigDecimal amount = orderInfo.getPrice();
+        String transactionId = orderInfo.getId().toString();
 
-        //直推
-        // 达人分销
-        BigDecimal directPush = aPackage.getPersonalRatio0();
-        // 套餐有额外分销
-        if (ObjectUtil.isNull(directPush)) {
-            directPush = sysConfigService.getBigDecimal("PERSONAL_RATIO_0");
-        }
-        BigDecimal directPushAmount = amount.multiply(directPush);
-
-        // 大达人分销
-        BigDecimal bigExpertPush = aPackage.getBigExpertRatio();
-        // 套餐有额外分销
-        if (ObjectUtil.isNotNull(bigExpertPush)) {
-            bigExpertPush = sysConfigService.getBigDecimal("BIG_EXPERT_RATIO");
-        }
-        BigDecimal bigExpertAmount = amount.multiply(bigExpertPush);
-
-        // 暂存 保存大达人
-        parentUser.setCacheAmount(bigExpertAmount);
-        userRepo.save(parentUser);
-
+        BigDecimal ratio;
         // 保存流水
         switch (member) {
             case EXPERT:
-                CommissionRecord commissionRecord1 = CommissionRecord.builder()
-                        .userId(parent)
-                        .amount(directPushAmount)
-                        .payMethod(PayMethod.YUE)
-                        .fromUserId(userId)
-                        .transactionType(TransactionType.PROMOTE)
-                        .transactionId(transactionId)
-                        .build();
-                commissionRecordRepo.save(commissionRecord1);
-                CommissionRecord commissionRecord2 = CommissionRecord.builder()
-                        .userId(parent)
-                        .amount(bigExpertAmount.subtract(directPushAmount))
-                        .payMethod(PayMethod.YUE)
-                        .fromUserId(userId)
-                        .transactionType(TransactionType.BIG_EXPERT)
-                        .transactionId(transactionId)
-                        .build();
-                commissionRecordRepo.save(commissionRecord2);
+                // 达人分销
+                ratio = aPackage.getPersonalRatio0();
+                // 套餐有额外分销
+                if (ObjectUtil.isNull(ratio)) {
+                    ratio = sysConfigService.getBigDecimal("PERSONAL_RATIO_0");
+                }
+                break;
+            case GENERAL:
+                // 108将分销
+                ratio = aPackage.getGeneralRatio();
+                // 套餐有额外分销
+                if (ObjectUtil.isNull(ratio)) {
+                    ratio = sysConfigService.getBigDecimal("GENERAL_RATIO");
+                }
                 break;
-            case BIG_EXPERT:
             case MAKER:
-                CommissionRecord commissionRecord = CommissionRecord.builder()
-                        .userId(parent)
-                        .amount(bigExpertAmount)
-                        .payMethod(PayMethod.YUE)
-                        .fromUserId(userId)
-                        .transactionType(TransactionType.PROMOTE)
-                        .transactionId(transactionId)
-                        .build();
-                commissionRecordRepo.save(commissionRecord);
+                // 创客分销
+                ratio = aPackage.getMakerRatio();
+                // 套餐有额外分销
+                if (ObjectUtil.isNull(ratio)) {
+                    ratio = sysConfigService.getBigDecimal("MAKER_RATIO");
+                }
+                break;
+            case GENERAL_MAKER:
+                // 108将+创客分销
+                ratio = aPackage.getGeneralMakerRatio();
+                // 套餐有额外分销
+                if (ObjectUtil.isNull(ratio)) {
+                    ratio = sysConfigService.getBigDecimal("PROMOTE_MAKER_RATIO");
+                }
+                break;
+            default:
+                ratio = BigDecimal.ZERO;
         }
+        // 钱和流水
+        if (BigDecimal.ZERO.compareTo(ratio) < 0) {
+            BigDecimal directPushAmount = amount.multiply(ratio);
+            CommissionRecord commissionRecord1 = CommissionRecord.builder()
+                    .userId(parent)
+                    .amount(directPushAmount)
+                    .payMethod(PayMethod.YUE)
+                    .fromUserId(userId)
+                    .transactionType(TransactionType.PROMOTE)
+                    .transactionId(transactionId)
+                    .build();
+            commissionRecordRepo.save(commissionRecord1);
+        }
+
+
+        // 间推
+        this.indirect(parentUser, aPackage, userId, transactionId, amount);
+    }
 
+    /*
+    间推
+     */
+    public void indirect(User parentUser, Package aPackage, Long userId, String transactionId, BigDecimal amount) {
         //分销级别
         int distributor = sysConfigService.getInt("DISTRIBUTOR");
-
         // 间推
         for (int i = 1; i < distributor; i++) {
             if (ObjectUtil.isEmpty(parentUser.getParent())) {
@@ -382,4 +389,35 @@ public class OrderInfoService {
         });
     }
 
+    /*
+    创客分销
+    创客和108将捞到二者之一就停还是两个都捞到?
+     */
+    public void makerDistribution(User user, BigDecimal amount, Boolean isCache, Long orderId) {
+        BigDecimal makerRatio = sysConfigService.getBigDecimal("MAKER_RATIO");
+        BigDecimal maker = amount.multiply(makerRatio);
+
+        User parent = userRepo.findById(user.getParent()).orElse(null);
+        while (parent != null) {
+            if (Member.MAKER.equals(parent.getMember())) {
+                if (isCache) {
+                    parent.setCacheAmount(parent.getCacheAmount().add(maker));
+                } else {
+                    parent.setMaker(maker.add(parent.getCacheAmount()));
+                }
+                userRepo.save(parent);
+                commissionRecordRepo.save(CommissionRecord.builder()
+                        .userId(parent.getId())
+                        .fromUserId(user.getId())
+                        .transactionType(TransactionType.MAKER)
+                        .payMethod(PayMethod.YUE)
+                        .transactionId(orderId.toString())
+                        .amount(maker)
+                        .build());
+                return;
+            }
+            parent = userRepo.findById(parent.getParent()).orElse(null);
+        }
+    }
+
 }

+ 18 - 18
src/main/java/com/izouma/jiashanxia/service/OrderRefundService.java

@@ -68,24 +68,24 @@ public class OrderRefundService {
 
         // 可多次使用
         if (orderInfo.isRepeatedly()) {
-
-            UserPackageFlow flow = userPackageFlowRepo.findByOrderInfoId(orderId);
-            List<GoodsDTO> content = flow.getContent();
-            Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserId(orderInfo.getUserId())
-                    .stream()
-                    .collect(Collectors.toMap(UserPackage::getGoodsInfoId, aPackage -> aPackage));
-            for (GoodsDTO goods : content) {
-                UserPackage userPackage = userPackageMap.get(goods.getGoodsInfoId());
-                if (ObjectUtil.isNull(userPackage)) {
-                    throw new BusinessException("已使用无法退款");
-                }
-                if (userPackage.getNum() < goods.getNum()) {
-                    throw new BusinessException("已使用无法退款");
-                }
-                // 先扣款
-                userPackage.setNum(userPackage.getNum() - goods.getNum());
-                userPackageRepo.save(userPackage);
-            }
+            throw new BusinessException("此套餐无法退款");
+//            UserPackageFlow flow = userPackageFlowRepo.findByOrderInfoId(orderId);
+//            List<GoodsDTO> content = flow.getContent();
+//            Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserId(orderInfo.getUserId())
+//                    .stream()
+//                    .collect(Collectors.toMap(UserPackage::getGoodsInfoId, aPackage -> aPackage));
+//            for (GoodsDTO goods : content) {
+//                UserPackage userPackage = userPackageMap.get(goods.getGoodsInfoId());
+//                if (ObjectUtil.isNull(userPackage)) {
+//                    throw new BusinessException("已使用无法退款");
+//                }
+//                if (userPackage.getNum() < goods.getNum()) {
+//                    throw new BusinessException("已使用无法退款");
+//                }
+//                // 先扣款
+//                userPackage.setNum(userPackage.getNum() - goods.getNum());
+//                userPackageRepo.save(userPackage);
+//            }
         }
 
         orderInfo.setStatus(OrderInfoStatus.REQUEST_REFUND);

+ 6 - 6
src/main/java/com/izouma/jiashanxia/service/PackageService.java

@@ -44,9 +44,9 @@ public class PackageService {
     public void openTeamSet(Long userId, Long packageId) {
 
         Package set = packageRepo.findById(packageId).orElseThrow(new BusinessException("无套餐"));
-        if (!PackageType.TEAM.equals(set.getType())) {
-            throw new BusinessException("不是团队套餐");
-        }
+//        if (!PackageType.TEAM.equals(set.getType())) {
+//            throw new BusinessException("不是团队套餐");
+//        }
         // 新建订单
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
         String localTime = df.format(LocalDateTime.now());
@@ -95,9 +95,9 @@ public class PackageService {
      */
     public void recharge(Long userId, Long packageId, Integer num) {
         Package set = packageRepo.findById(packageId).orElseThrow(new BusinessException("无套餐"));
-        if (!PackageType.TEAM.equals(set.getType())) {
-            throw new BusinessException("不是团队套餐");
-        }
+//        if (!PackageType.TEAM.equals(set.getType())) {
+//            throw new BusinessException("不是团队套餐");
+//        }
         // 新建订单
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
         String localTime = df.format(LocalDateTime.now());

+ 0 - 5
src/main/java/com/izouma/jiashanxia/service/UserService.java

@@ -415,11 +415,6 @@ public class UserService {
             return user;
         }
         user.setMember(Member.EXPERT);
-        long num = userRepo.countByParentAndDelFalse(user.getId());
-        int players_required = sysConfigService.getInt("PLAYERS_REQUIRED");
-        if (num >= players_required) {
-            user.setMember(Member.BIG_EXPERT);
-        }
         return userRepo.save(user);
     }
 }

+ 5 - 5
src/main/java/com/izouma/jiashanxia/web/PackageController.java

@@ -86,11 +86,11 @@ public class PackageController extends BaseController {
         ExcelUtils.export(response, data);
     }
 
-    @GetMapping("/team")
-    @ApiOperation("团队套餐")
-    public List<Package> team() {
-        return packageRepo.findAllByTypeAndDelFalse(PackageType.TEAM);
-    }
+//    @GetMapping("/team")
+//    @ApiOperation("团队套餐")
+//    public List<Package> team() {
+//        return packageRepo.findAllByTypeAndDelFalse(PackageType.TEAM);
+//    }
 
     @PostMapping("/openTeamSet")
     @ApiOperation("开通团队套餐")

+ 1 - 1
src/main/java/com/izouma/jiashanxia/web/UserPackageFlowController.java

@@ -92,7 +92,7 @@ public class UserPackageFlowController extends BaseController {
     @PostMapping("/writeOff")
     @ApiOperation("核销")
     public UserPackageFlow writeOff(@RequestBody WriteOffSaveVO vo) {
-        return userPackageFlowService.writeOff(vo);
+        return userPackageFlowService.writeOff1(vo);
     }
 
 }

+ 7 - 1
src/main/vue/src/views/UserList.vue

@@ -73,7 +73,13 @@ export default {
             search: '',
             url: '/user/all',
             downloading: false,
-            sortStr: 'createdAt,desc'
+            sortStr: 'createdAt,desc',
+            member: [
+                { label: '普通用户', value: 'NORMAL' },
+                { label: '达人', value: 'EXPERT' },
+                { label: '大达人', value: 'BIG_EXPERT' },
+                { label: '创客', value: 'MAKER' }
+            ]
         };
     },
     computed: {