浏览代码

wxma/wxpay/分销

licailing 5 年之前
父节点
当前提交
4307452037
共有 26 个文件被更改,包括 418 次插入129 次删除
  1. 25 0
      src/main/java/com/izouma/jiashanxia/converter/GoodsDTOListConverter.java
  2. 15 0
      src/main/java/com/izouma/jiashanxia/domain/CacheAmount.java
  3. 1 1
      src/main/java/com/izouma/jiashanxia/domain/CommissionRecord.java
  4. 6 0
      src/main/java/com/izouma/jiashanxia/domain/User.java
  5. 11 1
      src/main/java/com/izouma/jiashanxia/domain/UserPackageFlow.java
  6. 2 0
      src/main/java/com/izouma/jiashanxia/domain/UserPackagePeriod.java
  7. 20 0
      src/main/java/com/izouma/jiashanxia/enums/Member.java
  8. 3 0
      src/main/java/com/izouma/jiashanxia/enums/TransactionType.java
  9. 2 0
      src/main/java/com/izouma/jiashanxia/repo/CommissionRecordRepo.java
  10. 2 0
      src/main/java/com/izouma/jiashanxia/repo/UserPackageFlowRepo.java
  11. 2 0
      src/main/java/com/izouma/jiashanxia/repo/UserPackageRepo.java
  12. 0 5
      src/main/java/com/izouma/jiashanxia/repo/UserRepo.java
  13. 35 4
      src/main/java/com/izouma/jiashanxia/service/CommissionRecordService.java
  14. 93 34
      src/main/java/com/izouma/jiashanxia/service/OrderInfoService.java
  15. 9 5
      src/main/java/com/izouma/jiashanxia/service/OrderRefundService.java
  16. 22 6
      src/main/java/com/izouma/jiashanxia/service/UserPackageFlowService.java
  17. 38 1
      src/main/java/com/izouma/jiashanxia/service/UserPackageService.java
  18. 69 14
      src/main/java/com/izouma/jiashanxia/service/UserService.java
  19. 1 2
      src/main/java/com/izouma/jiashanxia/service/WithdrawService.java
  20. 9 3
      src/main/java/com/izouma/jiashanxia/web/UserController.java
  21. 4 4
      src/main/resources/application.yaml
  22. 二进制
      src/main/resources/cert/apiclient_cert.p12
  23. 20 20
      src/main/resources/cert/apiclient_cert.pem
  24. 26 26
      src/main/resources/cert/apiclient_key.pem
  25. 2 2
      src/test/java/com/izouma/jiashanxia/repo/UserPackageFlowRepoTest.java
  26. 1 1
      src/test/java/com/izouma/jiashanxia/service/OrderInfoServiceTest.java

+ 25 - 0
src/main/java/com/izouma/jiashanxia/converter/GoodsDTOListConverter.java

@@ -0,0 +1,25 @@
+package com.izouma.jiashanxia.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.izouma.jiashanxia.dto.GoodsDTO;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import java.util.List;
+
+public class GoodsDTOListConverter implements AttributeConverter<List<GoodsDTO>, String> {
+    @Override
+    public String convertToDatabaseColumn(List<GoodsDTO> list) {
+        if (list != null)
+            return JSON.toJSONString(list);
+        return null;
+    }
+
+    @Override
+    public List<GoodsDTO> convertToEntityAttribute(String s) {
+        if (StringUtils.isNotEmpty(s)) {
+            return JSON.parseArray(s, GoodsDTO.class);
+        }
+        return null;
+    }
+}

+ 15 - 0
src/main/java/com/izouma/jiashanxia/domain/CacheAmount.java

@@ -0,0 +1,15 @@
+package com.izouma.jiashanxia.domain;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@NoArgsConstructor
+public class CacheAmount {
+    private Long       userId;
+    private BigDecimal distribution;
+    private BigDecimal redistribution;
+    private BigDecimal bigExpertAmount;
+}

+ 1 - 1
src/main/java/com/izouma/jiashanxia/domain/CommissionRecord.java

@@ -41,7 +41,7 @@ public class CommissionRecord extends BaseEntity implements Serializable {
     private PayMethod payMethod;
     private PayMethod payMethod;
 
 
     @Searchable
     @Searchable
-    @ApiModelProperty(value = "交易单号", name = "transactionId")
+    @ApiModelProperty(value = "交易id", name = "transactionId")
     private String transactionId;
     private String transactionId;
 
 
     @ApiModelProperty(value = "备注", name = "remark")
     @ApiModelProperty(value = "备注", name = "remark")

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

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.izouma.jiashanxia.annotations.Searchable;
 import com.izouma.jiashanxia.annotations.Searchable;
 import com.izouma.jiashanxia.config.Constants;
 import com.izouma.jiashanxia.config.Constants;
+import com.izouma.jiashanxia.enums.Member;
 import com.izouma.jiashanxia.security.Authority;
 import com.izouma.jiashanxia.security.Authority;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
@@ -21,6 +22,7 @@ import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.HashSet;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
 @Data
 @Data
@@ -96,6 +98,10 @@ public class User extends BaseEntity implements Serializable {
     @ApiModelProperty("是否微信授权")
     @ApiModelProperty("是否微信授权")
     private boolean wxAuthorized;
     private boolean wxAuthorized;
 
 
+    @Enumerated(EnumType.STRING)
+    @ApiModelProperty(value = "会员类型")
+    private Member member;
+
     private boolean isVip;
     private boolean isVip;
 
 
     @Transient
     @Transient

+ 11 - 1
src/main/java/com/izouma/jiashanxia/domain/UserPackageFlow.java

@@ -1,5 +1,7 @@
 package com.izouma.jiashanxia.domain;
 package com.izouma.jiashanxia.domain;
 
 
+import com.izouma.jiashanxia.converter.GoodsDTOListConverter;
+import com.izouma.jiashanxia.dto.GoodsDTO;
 import com.izouma.jiashanxia.enums.FlowType;
 import com.izouma.jiashanxia.enums.FlowType;
 import com.izouma.jiashanxia.enums.PackageType;
 import com.izouma.jiashanxia.enums.PackageType;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
@@ -13,6 +15,7 @@ import org.hibernate.annotations.NotFoundAction;
 import org.hibernate.annotations.Where;
 import org.hibernate.annotations.Where;
 
 
 import javax.persistence.*;
 import javax.persistence.*;
+import java.util.List;
 
 
 @Entity
 @Entity
 @AllArgsConstructor
 @AllArgsConstructor
@@ -27,18 +30,25 @@ public class UserPackageFlow extends BaseEntity {
     @Enumerated(EnumType.STRING)
     @Enumerated(EnumType.STRING)
     private FlowType type;
     private FlowType type;
 
 
+//    @ApiModelProperty(value = "套餐分类")
+//    private Long categoryId;
+
     @Enumerated(EnumType.STRING)
     @Enumerated(EnumType.STRING)
     private PackageType packageType;
     private PackageType packageType;
 
 
 //    @ApiModelProperty(value = "套餐有效期id")
 //    @ApiModelProperty(value = "套餐有效期id")
 //    private Long userPackagePeriodId;
 //    private Long userPackagePeriodId;
 
 
+    private Long orderInfoId;
+
     /*
     /*
     存储内容
     存储内容
     [{"goodsInfoId":11,"num":1},{"goodsInfoId":12,"num":1},{"goodsInfoId":13,"num":4}]
     [{"goodsInfoId":11,"num":1},{"goodsInfoId":12,"num":1},{"goodsInfoId":13,"num":4}]
      */
      */
     @Column(columnDefinition = "TEXT")
     @Column(columnDefinition = "TEXT")
-    private String content;
+//    private String content;
+    @Convert(converter = GoodsDTOListConverter.class)
+    private List<GoodsDTO> content;
 
 
     @ApiModelProperty(value = "核销人")
     @ApiModelProperty(value = "核销人")
     private Long writeOffUserId;
     private Long writeOffUserId;

+ 2 - 0
src/main/java/com/izouma/jiashanxia/domain/UserPackagePeriod.java

@@ -29,4 +29,6 @@ public class UserPackagePeriod extends BaseEntity {
     @ApiModelProperty(value = "截止日期")
     @ApiModelProperty(value = "截止日期")
     private LocalDateTime endDate;
     private LocalDateTime endDate;
 
 
+    private Long orderId;
+
 }
 }

+ 20 - 0
src/main/java/com/izouma/jiashanxia/enums/Member.java

@@ -0,0 +1,20 @@
+package com.izouma.jiashanxia.enums;
+
+public enum Member {
+    /*
+    普通用户
+     */
+    NORMAL,
+    /*
+    达人
+     */
+    EXPERT,
+    /*
+    大达人
+     */
+    BIG_EXPERT,
+    /*
+    创客
+     */
+    MAKER
+}

+ 3 - 0
src/main/java/com/izouma/jiashanxia/enums/TransactionType.java

@@ -3,6 +3,9 @@ package com.izouma.jiashanxia.enums;
 public enum TransactionType {
 public enum TransactionType {
     WITHDRAW("提现"),
     WITHDRAW("提现"),
     PROMOTE("推广新会员"),
     PROMOTE("推广新会员"),
+    CHILDREN_PROMOTE("下级推广新会员"),
+    BIG_EXPERT("成为大达人额外奖励"),
+    MAKER("创客奖励"),
     EMPLOYEES_PROMOTE("员工推广新会员"),
     EMPLOYEES_PROMOTE("员工推广新会员"),
     REFUND("退款"),
     REFUND("退款"),
     ;
     ;

+ 2 - 0
src/main/java/com/izouma/jiashanxia/repo/CommissionRecordRepo.java

@@ -19,6 +19,8 @@ public interface CommissionRecordRepo extends JpaRepository<CommissionRecord, Lo
 
 
     List<CommissionRecord> findAllByUserId(Long userId);
     List<CommissionRecord> findAllByUserId(Long userId);
 
 
+    List<CommissionRecord> findAllByTransactionId(String transactionId);
+
     List<CommissionRecord> findAllByUserIdAndTransactionTypeNot(Long userId, TransactionType type);
     List<CommissionRecord> findAllByUserIdAndTransactionTypeNot(Long userId, TransactionType type);
 
 
     @Query("select sum(c.amount) from CommissionRecord c where c.userId = ?1 and c.transactionType = ?2")
     @Query("select sum(c.amount) from CommissionRecord c where c.userId = ?1 and c.transactionType = ?2")

+ 2 - 0
src/main/java/com/izouma/jiashanxia/repo/UserPackageFlowRepo.java

@@ -17,4 +17,6 @@ public interface UserPackageFlowRepo extends JpaRepository<UserPackageFlow, Long
     void softDelete(Long id);
     void softDelete(Long id);
 
 
     List<UserPackageFlow> findAllByUserIdOrderByCreatedAtDesc(Long userId);
     List<UserPackageFlow> findAllByUserIdOrderByCreatedAtDesc(Long userId);
+
+    UserPackageFlow findByOrderInfoId(Long orderInfoId);
 }
 }

+ 2 - 0
src/main/java/com/izouma/jiashanxia/repo/UserPackageRepo.java

@@ -19,6 +19,8 @@ public interface UserPackageRepo extends JpaRepository<UserPackage, Long>, JpaSp
 
 
     List<UserPackage> findAllByUserIdAndType(Long userId, PackageType type);
     List<UserPackage> findAllByUserIdAndType(Long userId, PackageType type);
 
 
+    List<UserPackage> findAllByUserId(Long userId);
+
 //    List<UserPackage> findAllByUserPackagePeriodId(Long userPackagePeriodId);
 //    List<UserPackage> findAllByUserPackagePeriodId(Long userPackagePeriodId);
 
 
     @Query("update UserPackage t set t.userId = ?2 where t.userId = ?1 and t.type = 'TEAM'")
     @Query("update UserPackage t set t.userId = ?2 where t.userId = ?1 and t.type = 'TEAM'")

+ 0 - 5
src/main/java/com/izouma/jiashanxia/repo/UserRepo.java

@@ -34,11 +34,6 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
 
 
     List<User> findAllByCompanyIdIsNullAndDelFalse();
     List<User> findAllByCompanyIdIsNullAndDelFalse();
 
 
-    @Transactional
-    @Modifying
-    @Query("update User u set u.companyId = null where u.id = ?1")
-    void deleteCompanyIdByUserId(Long id);
-
     // 按企业id删用户
     // 按企业id删用户
     @Transactional
     @Transactional
     @Modifying
     @Modifying

+ 35 - 4
src/main/java/com/izouma/jiashanxia/service/CommissionRecordService.java

@@ -9,6 +9,7 @@ import com.izouma.jiashanxia.domain.Withdraw;
 import com.izouma.jiashanxia.dto.CommissionRecordDTO;
 import com.izouma.jiashanxia.dto.CommissionRecordDTO;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.enums.AuthorityName;
 import com.izouma.jiashanxia.enums.AuthorityName;
+import com.izouma.jiashanxia.enums.PayMethod;
 import com.izouma.jiashanxia.enums.TransactionType;
 import com.izouma.jiashanxia.enums.TransactionType;
 import com.izouma.jiashanxia.repo.CommissionRecordRepo;
 import com.izouma.jiashanxia.repo.CommissionRecordRepo;
 import com.izouma.jiashanxia.repo.UserRepo;
 import com.izouma.jiashanxia.repo.UserRepo;
@@ -30,10 +31,10 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 @AllArgsConstructor
 public class CommissionRecordService {
 public class CommissionRecordService {
 
 
-    private CommissionRecordRepo commissionRecordRepo;
-    private WithdrawService      withdrawService;
-    private UserRepo             userRepo;
-    private WithdrawRepo         withdrawRepo;
+    private final CommissionRecordRepo commissionRecordRepo;
+    private final WithdrawService      withdrawService;
+    private final UserRepo             userRepo;
+    private final WithdrawRepo         withdrawRepo;
 
 
     public Page<CommissionRecord> all(PageQuery pageQuery) {
     public Page<CommissionRecord> all(PageQuery pageQuery) {
         pageQuery.setSort("createdAt,desc");
         pageQuery.setSort("createdAt,desc");
@@ -117,4 +118,34 @@ public class CommissionRecordService {
         return my;
         return my;
 
 
     }
     }
+
+    // 退款流水
+    public void refund(String orderId) {
+        List<CommissionRecord> records = commissionRecordRepo.findAllByTransactionId(orderId);
+        // 相关用户
+        Set<Long> ids = records.stream().map(CommissionRecord::getUserId).collect(Collectors.toSet());
+        Map<Long, User> userMap = userRepo.findAllById(ids)
+                .stream()
+                .collect(Collectors.toMap(User::getId, user -> user));
+
+        records.forEach(record -> {
+            User user = userMap.get(record.getUserId());
+            if (ObjectUtil.isNotEmpty(user)) {
+                user.setCacheAmount(user.getCacheAmount().subtract(record.getAmount()));
+                // 保存流水
+                CommissionRecord build = CommissionRecord.builder()
+                        .amount(record.getAmount().negate())
+                        .payMethod(PayMethod.YUE)
+                        .fromUserId(record.getFromUserId())
+                        .transactionId("R" + orderId)
+                        .remark(record.getRemark())
+                        .transactionType(TransactionType.REFUND)
+                        .userId(record.getUserId())
+                        .fromUserId(record.getFromUserId())
+                        .build();
+                commissionRecordRepo.save(build);
+            }
+        });
+        userRepo.saveAll(userMap.values());
+    }
 }
 }

+ 93 - 34
src/main/java/com/izouma/jiashanxia/service/OrderInfoService.java

@@ -9,10 +9,7 @@ import com.izouma.jiashanxia.domain.Package;
 import com.izouma.jiashanxia.dto.OrderInfoVO;
 import com.izouma.jiashanxia.dto.OrderInfoVO;
 import com.izouma.jiashanxia.dto.PackageGoodsDTO;
 import com.izouma.jiashanxia.dto.PackageGoodsDTO;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.dto.PageQuery;
-import com.izouma.jiashanxia.enums.OrderInfoStatus;
-import com.izouma.jiashanxia.enums.PackageType;
-import com.izouma.jiashanxia.enums.PayMethod;
-import com.izouma.jiashanxia.enums.TransactionType;
+import com.izouma.jiashanxia.enums.*;
 import com.izouma.jiashanxia.exception.BusinessException;
 import com.izouma.jiashanxia.exception.BusinessException;
 import com.izouma.jiashanxia.repo.*;
 import com.izouma.jiashanxia.repo.*;
 import com.izouma.jiashanxia.utils.JpaUtils;
 import com.izouma.jiashanxia.utils.JpaUtils;
@@ -66,7 +63,7 @@ public class OrderInfoService {
     下订单
     下订单
      */
      */
     public OrderInfo createOrder(Long userId, Long packageId, PayMethod payMethod) {
     public OrderInfo createOrder(Long userId, Long packageId, PayMethod payMethod) {
-        Package setInfo = packageRepo.findById(packageId).orElseThrow(new BusinessException("无套餐"));
+        Package aPackage = packageRepo.findById(packageId).orElseThrow(new BusinessException("无套餐"));
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
         String localTime = df.format(LocalDateTime.now());
         String localTime = df.format(LocalDateTime.now());
         String num = String.format("%05d", orderInfoRepo.orderNum() + 1);
         String num = String.format("%05d", orderInfoRepo.orderNum() + 1);
@@ -77,8 +74,8 @@ public class OrderInfoService {
                 .userId(userId)
                 .userId(userId)
                 .payMethod(payMethod)
                 .payMethod(payMethod)
                 .orderNumber(localTime + num)
                 .orderNumber(localTime + num)
-                .price(setInfo.getAmount())
-                .name(setInfo.getName())
+                .price(aPackage.getAmount())
+                .name(aPackage.getName())
                 .num(1)
                 .num(1)
                 .build();
                 .build();
         return orderInfoRepo.save(order);
         return orderInfoRepo.save(order);
@@ -101,18 +98,18 @@ public class OrderInfoService {
         Long userId = order.getUserId();
         Long userId = order.getUserId();
         User user = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
         User user = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
         // 设置用户为vip
         // 设置用户为vip
-        if (!user.isVip()) {
-            user.setVip(true);
-            userRepo.save(user);
-        }
+//        if (!user.isVip()) {
+//            user.setVip(true);
+//            userRepo.save(user);
+//        }
 
 
         // 加入套餐商品
         // 加入套餐商品
-        userPackageService.joinUserPackage(userId, setGoodsList, 1, PackageType.PERSONAL);
+        userPackageService.joinUserPackage(userId, setGoodsList, order.getNum(), PackageType.PERSONAL);
 
 
         // 用户id和上级id相同
         // 用户id和上级id相同
         if (user.getParent() != null && !userId.equals(user.getParent())) {
         if (user.getParent() != null && !userId.equals(user.getParent())) {
             // 上级分销
             // 上级分销
-            this.distribution(userId, user.getParent(), transactionId, order.getPrice());
+            this.distribution(userId, user.getParent(), orderInfoId.toString(), order.getPrice());
         }
         }
     }
     }
 
 
@@ -185,6 +182,89 @@ public class OrderInfoService {
         }
         }
     }
     }
 
 
+    public void distribution1(Long userId, Long parent, String transactionId, BigDecimal amount) {
+        User parentUser = userRepo.findById(parent).orElseThrow(new BusinessException("无用户"));
+        Member member = parentUser.getMember();
+
+        //直推
+        // 达人分销
+        BigDecimal directPush = sysConfigService.getBigDecimal("PERSONAL_AMOUNT_0");
+        BigDecimal directPushAmount = amount.multiply(directPush);
+        // 大达人分销
+        BigDecimal bigExpertPush = sysConfigService.getBigDecimal("BIG_EXPERT_AMOUNT");
+        BigDecimal bigExpertAmount = amount.multiply(bigExpertPush);
+        // 暂存 保存大达人
+        parentUser.setCacheAmount(bigExpertAmount);
+        userRepo.save(parentUser);
+
+        // 保存流水
+        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);
+            case BIG_EXPERT:
+                CommissionRecord commissionRecord = CommissionRecord.builder()
+                        .userId(parentUser.getId())
+                        .amount(bigExpertAmount)
+                        .payMethod(PayMethod.YUE)
+                        .fromUserId(userId)
+                        .transactionType(TransactionType.PROMOTE)
+                        .transactionId(transactionId)
+                        .build();
+                commissionRecordRepo.save(commissionRecord);
+        }
+
+        //分销级别
+        int distributor = sysConfigService.getInt("DISTRIBUTOR");
+
+        // 间推
+        for (int i = 1; i < distributor; i++) {
+            if (ObjectUtil.isEmpty(parentUser.getParent())) {
+                return;
+            }
+            parentUser = userRepo.findById(parentUser.getParent()).orElse(null);
+            if (parentUser == null) {
+                return;
+            }
+            if (Member.NORMAL.equals(member)) {
+                continue;
+            }
+            String name = "PERSONAL_AMOUNT_" + i;
+            // 百分比
+            BigDecimal percentage = sysConfigService.getBigDecimal(name);
+            BigDecimal personalAmount = amount.multiply(percentage);
+            parentUser.setAmount(parentUser.getCacheAmount().add(personalAmount));
+            userRepo.save(parentUser);
+
+            // 个人佣金流水
+            CommissionRecord commissionRecord = CommissionRecord.builder()
+                    .userId(parentUser.getId())
+                    .amount(personalAmount)
+                    .payMethod(PayMethod.YUE)
+                    .fromUserId(userId)
+                    .transactionType(TransactionType.CHILDREN_PROMOTE)
+                    .transactionId(transactionId)
+                    .build();
+            commissionRecordRepo.save(commissionRecord);
+        }
+    }
+
     /*
     /*
     公司分销
     公司分销
     先算个人
     先算个人
@@ -243,25 +323,4 @@ public class OrderInfoService {
         });
         });
     }
     }
 
 
-    public List<OrderInfoVO> toVO(List<OrderInfo> orderInfos) {
-        List<OrderInfoVO> orderInfoVOS = new ArrayList<>();
-        Set<Long> packageIds = orderInfos.stream().map(OrderInfo::getPackageId).collect(Collectors.toSet());
-        Map<Long, Package> packageMap = packageRepo.findAllById(packageIds)
-                .stream()
-                .collect(Collectors.toMap(Package::getId, apackage -> apackage));
-//        Map<Long, String> goodsMap = goodsInfoRepo.findAll()
-//                .stream()
-//                .collect(Collectors.toMap(GoodsInfo::getId, GoodsInfo::getName));
-
-        orderInfos.forEach(orderInfo -> {
-            OrderInfoVO vo = new OrderInfoVO();
-            BeanUtil.copyProperties(orderInfo, vo);
-            vo.setAPackage(packageMap.get(orderInfo.getPackageId()));
-//            List<PackageGoods> packageGoods = packageGoodsRepo.findAllByPackageId(orderInfo.getPackageId());
-            List<PackageGoodsDTO> packageGoodsDTOS = packageGoodsRepo.packageGoods(orderInfo.getPackageId());
-            vo.setGoods(packageGoodsDTOS);
-            orderInfoVOS.add(vo);
-        });
-        return orderInfoVOS;
-    }
 }
 }

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

@@ -34,11 +34,12 @@ import java.util.Map;
 @Slf4j
 @Slf4j
 public class OrderRefundService {
 public class OrderRefundService {
 
 
-    private final OrderRefundRepo orderRefundRepo;
-    private final OrderInfoRepo   orderInfoRepo;
-    private final WxFeeRepo       wxFeeRepo;
-    private final WxPayService    wxPayService;
-    private final Environment     env;
+    private final OrderRefundRepo         orderRefundRepo;
+    private final OrderInfoRepo           orderInfoRepo;
+    private final WxFeeRepo               wxFeeRepo;
+    private final WxPayService            wxPayService;
+    private final Environment             env;
+    private final CommissionRecordService commissionRecordService;
 
 
     public Page<OrderRefund> all(PageQuery pageQuery) {
     public Page<OrderRefund> all(PageQuery pageQuery) {
         return orderRefundRepo.findAll(JpaUtils.toSpecification(pageQuery, OrderRefund.class), JpaUtils.toPageRequest(pageQuery));
         return orderRefundRepo.findAll(JpaUtils.toSpecification(pageQuery, OrderRefund.class), JpaUtils.toPageRequest(pageQuery));
@@ -166,5 +167,8 @@ public class OrderRefundService {
         OrderRefund refund = orderRefundRepo.findByRefundId(notifyResult.getReqInfo().getRefundId());
         OrderRefund refund = orderRefundRepo.findByRefundId(notifyResult.getReqInfo().getRefundId());
         refund.setStatus(RefundStatus.SUCCESS);
         refund.setStatus(RefundStatus.SUCCESS);
         refund.setAuditTime(LocalDateTime.now());
         refund.setAuditTime(LocalDateTime.now());
+        orderRefundRepo.save(refund);
+        // 收回分销
+        commissionRecordService.refund(orderInfo.getId().toString());
     }
     }
 }
 }

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

@@ -111,8 +111,8 @@ public class UserPackageFlowService {
 
 
     }
     }
 
 
-    public List<GoodsVO> toGoodsVO(String content, Map<Long, String> goodsMap) {
-        List<GoodsDTO> goodsDTOS = JSONObject.parseArray(content, GoodsDTO.class);
+    public List<GoodsVO> toGoodsVO(List<GoodsDTO> goodsDTOS, Map<Long, String> goodsMap) {
+//        List<GoodsDTO> goodsDTOS = JSONObject.parseArray(content, GoodsDTO.class);
         List<GoodsVO> goodsVOS = new ArrayList<>();
         List<GoodsVO> goodsVOS = new ArrayList<>();
         goodsDTOS.forEach(goodsDTO ->
         goodsDTOS.forEach(goodsDTO ->
                 goodsVOS.add(GoodsVO.builder()
                 goodsVOS.add(GoodsVO.builder()
@@ -177,11 +177,11 @@ public class UserPackageFlowService {
 //        }
 //        }
 
 
         // 保存套餐流水
         // 保存套餐流水
-        String content = JSONObject.toJSONString(goodsDTOS);
+//        String content = JSONObject.toJSONString(goodsDTOS);
         return userPackageFlowRepo.save(
         return userPackageFlowRepo.save(
                 UserPackageFlow.builder()
                 UserPackageFlow.builder()
                         .userId(writeOffSaveVO.getUserId())
                         .userId(writeOffSaveVO.getUserId())
-                        .content(content)
+                        .content(goodsDTOS)
                         .type(FlowType.WRITE_OFF)
                         .type(FlowType.WRITE_OFF)
 //                        .userPackagePeriodId(writeOffSaveVO.getUserPackagePeriodId())
 //                        .userPackagePeriodId(writeOffSaveVO.getUserPackagePeriodId())
                         .packageType(writeOffSaveVO.getType())
                         .packageType(writeOffSaveVO.getType())
@@ -192,12 +192,13 @@ public class UserPackageFlowService {
     public WriteOffRecordDTO getDTO(Long id) {
     public WriteOffRecordDTO getDTO(Long id) {
         UserPackageFlow writeOffRecord = userPackageFlowRepo.findById(id).orElseThrow(new BusinessException("无核销记录"));
         UserPackageFlow writeOffRecord = userPackageFlowRepo.findById(id).orElseThrow(new BusinessException("无核销记录"));
         // 转vo
         // 转vo
-        List<GoodsDTO> goodsDTOS = JSONObject.parseArray(writeOffRecord.getContent(), GoodsDTO.class);
+//        List<GoodsDTO> goodsDTOS = JSONObject.parseArray(writeOffRecord.getContent(), GoodsDTO.class);
+        List<GoodsDTO> goodsDTOS = writeOffRecord.getContent();
         Set<Long> ids = goodsDTOS.stream().map(GoodsDTO::getGoodsInfoId).collect(Collectors.toSet());
         Set<Long> ids = goodsDTOS.stream().map(GoodsDTO::getGoodsInfoId).collect(Collectors.toSet());
         Map<Long, String> goodsMap = goodsInfoRepo.findAllById(ids)
         Map<Long, String> goodsMap = goodsInfoRepo.findAllById(ids)
                 .stream()
                 .stream()
                 .collect(Collectors.toMap(GoodsInfo::getId, GoodsInfo::getName));
                 .collect(Collectors.toMap(GoodsInfo::getId, GoodsInfo::getName));
-        List<GoodsVO> goodsVOS = this.toGoodsVO(writeOffRecord.getContent(), goodsMap);
+        List<GoodsVO> goodsVOS = this.toGoodsVO(goodsDTOS, goodsMap);
 
 
         WriteOffRecordDTO build = WriteOffRecordDTO.builder()
         WriteOffRecordDTO build = WriteOffRecordDTO.builder()
                 .id(writeOffRecord.getId())
                 .id(writeOffRecord.getId())
@@ -214,4 +215,19 @@ public class UserPackageFlowService {
         }
         }
         return build;
         return build;
     }
     }
+
+    public void getAmount() {
+
+    }
+
+    /*
+    退款收回
+     */
+    public void refund(Long orderId) {
+        UserPackageFlow flow = userPackageFlowRepo.findByOrderInfoId(orderId);
+        if (ObjectUtil.isNull(flow)) {
+            return;
+        }
+        flow.getContent();
+    }
 }
 }

+ 38 - 1
src/main/java/com/izouma/jiashanxia/service/UserPackageService.java

@@ -74,7 +74,44 @@ public class UserPackageService {
                 .userId(userId)
                 .userId(userId)
                 .type(FlowType.BUY)
                 .type(FlowType.BUY)
                 .packageType(type)
                 .packageType(type)
-                .content(JSONObject.toJSONString(goodsDTOS))
+//                .content(JSONObject.toJSONString(goodsDTOS))
+                .content(goodsDTOS)
+                .build());
+    }
+
+    public void joinUserPackage1(Long userId, List<PackageGoods> packageGoodsList, Integer num, Long orderId) {
+        // 用户已有套餐
+        Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserId(userId)
+                .stream()
+                .collect(Collectors.toMap(UserPackage::getGoodsInfoId, userSet -> userSet));
+
+        // 加入用户套餐
+        packageGoodsList.forEach(setGoods -> {
+            UserPackage goods = userPackageMap.get(setGoods.getGoodsInfoId());
+            if (ObjectUtil.isNotEmpty(goods)) {
+                goods.setNum(goods.getNum() + setGoods.getNum() * num);
+                goods.setRemark(setGoods.getRemark());
+
+            } else {
+                goods = UserPackage.builder()
+                        .userId(userId)
+                        .goodsInfoId(setGoods.getGoodsInfoId())
+                        .num(setGoods.getNum() * num)
+                        .remark(setGoods.getRemark())
+                        .build();
+            }
+            userPackageRepo.save(goods);
+        });
+
+        // 记录套餐流水
+        List<GoodsDTO> goodsDTOS = JSONObject.parseArray(JSONObject.toJSONString(packageGoodsList), GoodsDTO.class);
+        userPackageFlowRepo.save(UserPackageFlow.builder()
+                .userId(userId)
+                .type(FlowType.BUY)
+//                .packageType(type)
+                .orderInfoId(orderId)
+//                .content(JSONObject.toJSONString(goodsDTOS))
+                .content(goodsDTOS)
                 .build());
                 .build());
     }
     }
 }
 }

+ 69 - 14
src/main/java/com/izouma/jiashanxia/service/UserService.java

@@ -8,6 +8,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.jiashanxia.config.Constants;
 import com.izouma.jiashanxia.config.Constants;
 import com.izouma.jiashanxia.domain.User;
 import com.izouma.jiashanxia.domain.User;
+import com.izouma.jiashanxia.enums.Member;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.dto.PromotionDTO;
 import com.izouma.jiashanxia.dto.PromotionDTO;
 import com.izouma.jiashanxia.dto.UserRegister;
 import com.izouma.jiashanxia.dto.UserRegister;
@@ -19,7 +20,6 @@ import com.izouma.jiashanxia.repo.OrderInfoRepo;
 import com.izouma.jiashanxia.repo.UserRepo;
 import com.izouma.jiashanxia.repo.UserRepo;
 import com.izouma.jiashanxia.security.Authority;
 import com.izouma.jiashanxia.security.Authority;
 import com.izouma.jiashanxia.security.JwtTokenUtil;
 import com.izouma.jiashanxia.security.JwtTokenUtil;
-import com.izouma.jiashanxia.security.JwtUser;
 import com.izouma.jiashanxia.security.JwtUserFactory;
 import com.izouma.jiashanxia.security.JwtUserFactory;
 import com.izouma.jiashanxia.service.sms.SmsService;
 import com.izouma.jiashanxia.service.sms.SmsService;
 import com.izouma.jiashanxia.service.storage.StorageService;
 import com.izouma.jiashanxia.service.storage.StorageService;
@@ -49,15 +49,16 @@ import java.util.stream.Collectors;
 @Slf4j
 @Slf4j
 @AllArgsConstructor
 @AllArgsConstructor
 public class UserService {
 public class UserService {
-    private UserRepo             userRepo;
-    private WxMaService          wxMaService;
-    private WxMpService          wxMpService;
-    private SmsService           smsService;
-    private StorageService       storageService;
-    private JwtTokenUtil         jwtTokenUtil;
-    private CaptchaService       captchaService;
-    private OrderInfoRepo        orderInfoRepo;
-    private CommissionRecordRepo commissionRecordRepo;
+    private final UserRepo             userRepo;
+    private final WxMaService          wxMaService;
+    private final WxMpService          wxMpService;
+    private final SmsService           smsService;
+    private final StorageService       storageService;
+    private final JwtTokenUtil         jwtTokenUtil;
+    private final CaptchaService       captchaService;
+    private final OrderInfoRepo        orderInfoRepo;
+    private final CommissionRecordRepo commissionRecordRepo;
+    private final SysConfigService     sysConfigService;
 
 
     public Page<User> all(PageQuery pageQuery) {
     public Page<User> all(PageQuery pageQuery) {
         pageQuery.setSort("createdAt,desc");
         pageQuery.setSort("createdAt,desc");
@@ -70,6 +71,7 @@ public class UserService {
         user.setVip(false);
         user.setVip(false);
         user.setWxAuthorized(false);
         user.setWxAuthorized(false);
         user.setAmount(BigDecimal.ZERO);
         user.setAmount(BigDecimal.ZERO);
+        user.setMember(Member.NORMAL);
         if (StringUtils.isNotBlank(userRegister.getPassword())) {
         if (StringUtils.isNotBlank(userRegister.getPassword())) {
             user.setPassword(new BCryptPasswordEncoder().encode(userRegister.getPassword()));
             user.setPassword(new BCryptPasswordEncoder().encode(userRegister.getPassword()));
         }
         }
@@ -121,10 +123,13 @@ public class UserService {
             String sessionKey = result.getSessionKey();
             String sessionKey = result.getSessionKey();
             User userInfo = userRepo.findByOpenIdAndDelFalse(openId);
             User userInfo = userRepo.findByOpenIdAndDelFalse(openId);
             if (userInfo != null) {
             if (userInfo != null) {
-                // 上级不为空 && 用户上级为空
-                if (ObjectUtil.isNotEmpty(parent) && ObjectUtil.isNull(userInfo.getParent())) {
-                    userInfo.setParent(parent);
-                    userRepo.saveAndFlush(userInfo);
+                // 插入上级
+                if (ObjectUtil.isNotNull(parent)) {
+                    Long parent1 = this.getParent(parent, userInfo);
+                    if (ObjectUtil.isNotNull(parent1)) {
+                        userInfo.setParent(parent);
+                        userRepo.saveAndFlush(userInfo);
+                    }
                 }
                 }
                 userInfo.setSessionKey(sessionKey);
                 userInfo.setSessionKey(sessionKey);
                 return userInfo;
                 return userInfo;
@@ -139,7 +144,15 @@ public class UserService {
                     .amount(BigDecimal.ZERO)
                     .amount(BigDecimal.ZERO)
                     .teamFounder(false)
                     .teamFounder(false)
                     .sessionKey(sessionKey)
                     .sessionKey(sessionKey)
+                    .member(Member.NORMAL)
                     .build();
                     .build();
+            // 插入上级
+            if (ObjectUtil.isNotNull(parent)) {
+                Long parent1 = this.getParent(parent, userInfo);
+                if (ObjectUtil.isNotNull(parent1)) {
+                    userInfo.setParent(parent);
+                }
+            }
             userInfo = userRepo.saveAndFlush(userInfo);
             userInfo = userRepo.saveAndFlush(userInfo);
             log.info("loginMa {}", userInfo.getCreatedAt());
             log.info("loginMa {}", userInfo.getCreatedAt());
             return userInfo;
             return userInfo;
@@ -149,6 +162,31 @@ public class UserService {
         throw new BusinessException("登录失败");
         throw new BusinessException("登录失败");
     }
     }
 
 
+    /*
+    获取上级
+     */
+    public Long getParent(Long parent, User userInfo) {
+        // 用户上级为空
+        if (ObjectUtil.isNull(userInfo.getParent())) {
+            return parent;
+        }
+        // 用户原有上级不为空
+        User userParent = userRepo.findById(userInfo.getParent()).orElse(null);
+        if (ObjectUtil.isNull(userParent)) {
+            return parent;
+        }
+        // 不是达人
+        if (Member.NORMAL.equals(userParent.getMember())) {
+            // 传过来的上级
+            User user1 = userRepo.findById(parent).orElse(null);
+
+            if (ObjectUtil.isNotNull(user1) && !Member.NORMAL.equals(user1.getMember())) {
+                return parent;
+            }
+        }
+        return null;
+    }
+
     public User getMaUserInfo(String sessionKey, String rawData, String signature,
     public User getMaUserInfo(String sessionKey, String rawData, String signature,
                               String encryptedData, String iv) {
                               String encryptedData, String iv) {
         // 用户信息校验
         // 用户信息校验
@@ -186,6 +224,7 @@ public class UserService {
                     .amount(BigDecimal.ZERO)
                     .amount(BigDecimal.ZERO)
                     .teamFounder(false)
                     .teamFounder(false)
                     .wxAuthorized(true)
                     .wxAuthorized(true)
+                    .member(Member.NORMAL)
                     .build();
                     .build();
             user = userRepo.save(user);
             user = userRepo.save(user);
 
 
@@ -367,4 +406,20 @@ public class UserService {
         map.put("promote", userRepo.countByParentAndDelFalse(userId));
         map.put("promote", userRepo.countByParentAndDelFalse(userId));
         return map;
         return map;
     }
     }
+
+    /*
+    成为达人
+     */
+    public User becomeExpert(User user) {
+        if (!Member.NORMAL.equals(user.getMember())) {
+            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);
+    }
 }
 }

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

@@ -109,7 +109,7 @@ public class WithdrawService {
                     .amount(withdraw.getAmount().negate())
                     .amount(withdraw.getAmount().negate())
                     .payMethod(PayMethod.YUE)
                     .payMethod(PayMethod.YUE)
                     .transactionType(TransactionType.WITHDRAW)
                     .transactionType(TransactionType.WITHDRAW)
-                    .transactionId(withdrawId.toString())
+                    .transactionId("W"+withdrawId)
                     .build());
                     .build());
             withdrawRepo.save(withdraw);
             withdrawRepo.save(withdraw);
             return;
             return;
@@ -123,5 +123,4 @@ public class WithdrawService {
         withdrawRepo.save(withdraw);
         withdrawRepo.save(withdraw);
     }
     }
 
 
-
 }
 }

+ 9 - 3
src/main/java/com/izouma/jiashanxia/web/UserController.java

@@ -33,9 +33,9 @@ import java.util.Set;
 @RestController
 @RestController
 @RequestMapping("/user")
 @RequestMapping("/user")
 public class UserController extends BaseController {
 public class UserController extends BaseController {
-    private UserRepo     userRepo;
-    private UserService  userService;
-    private JwtTokenUtil jwtTokenUtil;
+    private final UserRepo     userRepo;
+    private final UserService  userService;
+    private final JwtTokenUtil jwtTokenUtil;
 
 
     @PostMapping("/register")
     @PostMapping("/register")
     public User register(@RequestParam String username,
     public User register(@RequestParam String username,
@@ -189,4 +189,10 @@ public class UserController extends BaseController {
         }
         }
         return users;
         return users;
     }
     }
+
+    @PostMapping("/becomeExpert")
+    @ApiOperation("成为达人")
+    public User becomeExpert() {
+        return userService.becomeExpert(SecurityUtils.getAuthenticatedUser());
+    }
 }
 }

+ 4 - 4
src/main/resources/application.yaml

@@ -60,14 +60,14 @@ wx:
         app_id: wx2375cba2eec2c479
         app_id: wx2375cba2eec2c479
         app_secret: 28e4829124860d9ef9e2f32aeefd1111
         app_secret: 28e4829124860d9ef9e2f32aeefd1111
     ma:
     ma:
-        app_id: wxde386c1d6f9fc0c8
-        app_secret: 43169574cac6803f3a16d88bbcaba814
+        app_id: wx29e886237ed709b2
+        app_secret: 257c23ed1e257f260ab13ce6400ebf4f
         msg_token: msgToken
         msg_token: msgToken
         msg_aes_key: aesKey
         msg_aes_key: aesKey
         msg_format: JSON
         msg_format: JSON
     pay:
     pay:
-        appId: wxde386c1d6f9fc0c8
-        mchId: 1604487424
+        appId: wx29e886237ed709b2
+        mchId: 1605678260
         mchKey: SGZSquBjfa8Apt5WkLu5knNUXq8MgGD2
         mchKey: SGZSquBjfa8Apt5WkLu5knNUXq8MgGD2
         subAppId: #服务商模式下的子商户公众账号ID
         subAppId: #服务商模式下的子商户公众账号ID
         subMchId: #服务商模式下的子商户号
         subMchId: #服务商模式下的子商户号

二进制
src/main/resources/cert/apiclient_cert.p12


+ 20 - 20
src/main/resources/cert/apiclient_cert.pem

@@ -1,24 +1,24 @@
 -----BEGIN CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIID9jCCAt6gAwIBAgIUP9MvML164b5s/yPg1wkePkD5igYwDQYJKoZIhvcNAQEL
+MIID8DCCAtigAwIBAgIUFy2GOyS5t1uY8JZkF3y1Lveok2EwDQYJKoZIhvcNAQEL
 BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
 BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
 FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
 FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
-Q0EwHhcNMjAxMTI3MDczNjE1WhcNMjUxMTI2MDczNjE1WjCBhzETMBEGA1UEAwwK
-MTYwNDQ4NzQyNDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTMwMQYDVQQL
-DCrlj6XlrrnluILnlLLlsbHkuIvppJDppa7nrqHnkIbmnInpmZDlhazlj7gxCzAJ
-BgNVBAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALQciCMgqu25CK4cLcN1+fHA6fwxDz9kT/2sXC1YDyXjGkPz
-EvKzE5PbOBUBqOCSM18Myt7XSZxmlg30AE9tDp5P8NxHPfNh8eBUHueHeCNRn4x4
-Nzcm1wBEmProtOfliv7TXzczLbkQPJ4+B8kelrTUlBbvGZqVhkl8Fo94mLYuyUF0
-1fCrkevM7f0mlKRst4mHaSrSF5wBLVgmqg7V/3Nmry2dRR/qU2zmjB4TKNCX9xiL
-vOzBPchWZyGuh2amyypnQ7k8qCCZZNHhsc1d3bEu+ZRlcLZ9At5ByJPA3TJ4lWJf
-jf/OLujokTCRNxW2tmop80ppolyw84EILnV3/qMCAwEAAaOBgTB/MAkGA1UdEwQC
-MAAwCwYDVR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0
-cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2
-QUQzOTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAC29mf3Jm
-lTEWUsuqFdGwJJ8QDUj0JM/Z9vvTmyR2BTbura37RTLfqqR031mWJuG2aizRbAT9
-hOKLN4mj0t5cYmmSTdI7ErbM7qN+zBk5oXFrijIhJqbE8vBlSW4fQ+mttj/9YarC
-1Z+3OImb0vmHhc0uYXH5lYmr8w7qPpopbyhrNfk6JjMnQ5JU/wNHB6oXQWnptObe
-hSOZn9N7DX16oWIXxH6mk1q+3S19CSaPUwGckXvcn1eGnJU3LeDYmjQMT4Etg8CK
-wPiUjYdRsUjH1zDdY2/Da0/jW/lD2LQ4q6tMDxg9ocoJ32SEVDe5b5Rb0XjCN+Ft
-Z+JcT0ie2GPjpg==
+Q0EwHhcNMjEwMTEzMDYyMTU0WhcNMjYwMTEyMDYyMTU0WjCBgTETMBEGA1UEAwwK
+MTYwNTY3ODI2MDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL
+DCTljZfkuqzojavotqPnlLXlrZDllYbliqHmnInpmZDlhazlj7gxCzAJBgNVBAYM
+AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALoXjDkMyJMLdJTEXfW4Y+kyCnIUj6N/AZ+jPmnvWSsWGIhsXuh/dqDG
+jsnxqaoO3U3yYdn4P1MH8LK/paKvjzbwFBdS/qAYS/6l9Qz6tSLbCaSj5BQawBDs
+7e/ub2F+HAiwmMB5PKr1t4cs/G91GFCPZcGhnz46sbGiokffuQNugcatWX9yE7Wt
+1B0PRX67mRm/mq9h+WaA5OthqhnQPN6+FRUdw234GGbxye1IfBYSgJMNq8Yy6nw+
+6lAn8v/cRvzMGM1eNojur8MdvvmSaDbJ4e8u3qJBSzE5Jn02ZDbaHSEOB2Sox2CW
+VVbZwTvDr+ZKWc5x0KZsAygtaBImIfkCAwEAAaOBgTB/MAkGA1UdEwQCMAAwCwYD
+VR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVzLmNv
+bS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1
+NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAg1LeNPspjAoKb4SG
+RWLgNVvz28/y0eY0SZGebimpJv2Rf7tbLuWaJr5LKRa6mXzBagY0fNtcqDDYHrem
+V9NfwRZizYv1Vu69ddTCxQsni359qOCeMrHiOtFLuHXTA4l5fz6goeP4lByjMB+g
+4ZVaxbJGBwPsXskjS88VA9FaGQ/H0SkF/JwstqI2rjAxI8Q8CjyV7hr76X1xyhfG
+56ZVwGhbfxSlQ4ipeP/lUKttr88RJMEwlFKA/UofG8EXUq+myoYMbD3knHKenZEi
+8oAfkl+MSjG+TP5mvsZQVLk5xzfTw0BLGXQBozmtCFmTw42jArRmB55RmfNb9PzI
+3U1Wjw==
 -----END CERTIFICATE-----
 -----END CERTIFICATE-----

+ 26 - 26
src/main/resources/cert/apiclient_key.pem

@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
 -----BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC0HIgjIKrtuQiu
-HC3DdfnxwOn8MQ8/ZE/9rFwtWA8l4xpD8xLysxOT2zgVAajgkjNfDMre10mcZpYN
-9ABPbQ6eT/DcRz3zYfHgVB7nh3gjUZ+MeDc3JtcARJj66LTn5Yr+0183My25EDye
-PgfJHpa01JQW7xmalYZJfBaPeJi2LslBdNXwq5HrzO39JpSkbLeJh2kq0hecAS1Y
-JqoO1f9zZq8tnUUf6lNs5oweEyjQl/cYi7zswT3IVmchrodmpssqZ0O5PKggmWTR
-4bHNXd2xLvmUZXC2fQLeQciTwN0yeJViX43/zi7o6JEwkTcVtrZqKfNKaaJcsPOB
-CC51d/6jAgMBAAECggEBAJ3CkAwUxSNMe6nlzL/0SmXTECBx6GUiPF555pNhGoOZ
-FJyIAQTMjk1oKwtbVMy/wndzAQ+Hi1aPFMhL/SmU4MUSSGrpi/3uwKo5hIhQRI7L
-I/EqK1MHljMJ4uWDh1HH4aOrCS+UiGwdKLuCodcsD918hepArDCW3/Tl1+z7OOf5
-QdjT36919RNwosvzXmpHSJtZAI5e7euEtW/ZnYdF1FUDIYYg6ygKlqOMPCxlxUHi
-WVvZ7stmIjtZKMg34FF0XfrHmFSGp5LKNBIDNOwRYvCiV7RDXfElGzxJP8gbHL23
-IQqRyFG282rAJdlljB7L8pJzUuH1V+IVpO0M8X292MECgYEA55XmynW1o4rYujhL
-MAS7bx7ZzPaudLNwGDduV4OzhHaF/bXWKI30x609rI9DpAGH2jTYWw/xHkKEZJKR
-cqedcuvk4PyAgvo0Ac++fDKMrbwW8lZDKOqONdyXmeCo1IacMqQEYnO7/xRMvhLb
-5ry287vToBWNzcwL6pwAzKZFu4sCgYEAxxlupZcDZZZIiFatSbK8hq3Zx1cEBnjQ
-lVAIKUwGZ4f8C9Bsk1owNGbmgac9nEkrSMMmDdZegKobRaS2iwb53QmhCUJHP8bB
-i6AnbIztspjvP35f2Vs3OSw+OUEBACifr9oL9FJLo7gxpbpi5LDfAL+K+m++Fds9
-BeLBSInBDEkCgYABbI+NwSmLxufMRVpZAj5w0Xy/YOjzuMLAs16PVTT+ZIgwZjTZ
-7P2LWMpfTEY7NPMz6U1HShLOf9Q2lhwk21kBgufWZlcX9xfoxvFB7EGnM9fkR5mE
-H+Ud+axI+vOu0uEVAqMwQ8vtJp/OL2mAwrpRR19mxZson8+W8ryihYc6PwKBgEW4
-rDyko3XhqMjFwa07QDXRj5/04t35VOHUwubjTqLWxfbFKCB5xsOy/SmODU87eELk
-w+C4nyNjbmV3Bs2sxbcX9iKt6RF2YrSoguXKfDq8v5t2f8432SDWU3vtPZJ2p2UH
-cIRAhWhxykEFAjifj5hNeze0BdbVjYsQGytxwf6xAoGBALnQkK4XJNZdtp/jERoQ
-Tv9OqV5j/BUj8PGhJDK7f2tEUd9LKsQUbISeehAmBPqQzkUwgb7E0q67J4g3TpDH
-oyibxYZm0EpOl4O4Cs3Sn5wv6vEnkgSagZFRdHDopqag5sb9jVTq8qcsRvUqYyqz
-IA++NUsvxvfS49ock4vCN6wO
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6F4w5DMiTC3SU
+xF31uGPpMgpyFI+jfwGfoz5p71krFhiIbF7of3agxo7J8amqDt1N8mHZ+D9TB/Cy
+v6Wir4828BQXUv6gGEv+pfUM+rUi2wmko+QUGsAQ7O3v7m9hfhwIsJjAeTyq9beH
+LPxvdRhQj2XBoZ8+OrGxoqJH37kDboHGrVl/chO1rdQdD0V+u5kZv5qvYflmgOTr
+YaoZ0DzevhUVHcNt+Bhm8cntSHwWEoCTDavGMup8PupQJ/L/3Eb8zBjNXjaI7q/D
+Hb75kmg2yeHvLt6iQUsxOSZ9NmQ22h0hDgdkqMdgllVW2cE7w6/mSlnOcdCmbAMo
+LWgSJiH5AgMBAAECggEBAKd0GxUXIMHY9A4OabJ8O0OTaPzg7aQk3HQnNDmlTGrO
+FkNkqT6zvC7OnZyw3oiNmazTaCP5FBqGMZzXgZfUPJ4mCR4367JqSrAZ7FnCnA6C
+ZboGVG2W6LASU8WsnANxtI5JQxsnvWTleUGlRH6TMs8DSoCkDCS2MkHzY+4jLlwb
+oqDH71c4fJxwUp7GLBnedal+P7uyr2gcjskLbEDZO3+Ii7YlqXU/J7oK6G04kFh9
+28I0l5CCWSkJXR2whzw4P5mp+hSURBTNC0fOIEuxhb8cyaPEUnY6l5BBPIUHioV6
+N8uFziRijzdR2Hnt/nyb1rvlXbAUDLaRAn0Nc1yoaYECgYEA4SwSiqIgUsf4rvi+
+yVG9ZZvNhaymx+NocW1c8h+zLxDZIzIHQAekuir2UUqpK+S+zUpCAm2cErd4IRJH
+eTwGrJxpLeXOhszbFyRqeexqlgGU8r35h9wF25alkMmvLNfSp4hSUqogtIik10A0
+igDlF5CFJq/rEh4NZ9DhUalNa/ECgYEA05HG7vlYbA3iFj5D/yNmvg5RZ4l9j1Ne
+/O3YYg8yCn9aW70UxRnGOvM2PdhNg48jhe38O8462bdRNdSxPwhih2/u6R9Qr/x0
++PJac/t+MQVCKZAVslciLT+YUUGNKlXPX3M6nrkzPWGXQxQLCAhGK0qBS7NB/i6B
+Bq8pvW/DPokCgYAhq716DZRXzJ9bSsb8w8RWlV2+R3sJGPBdRcVIT4Uz3Ikbwjdj
+U8FGNXZv4YI6lhISELCePFXCVr0X9OvLLTaySRFRU7P2ZFu+sitZ4AhwNfxX8CCI
+OFaH55cKd55CTmOpubDVu6r4VBaSOX+hw1B+nZXLmzLDmsrWY13OIEr7gQKBgQCx
+olbltILyDmICDPtoT1/nOPxOMxkx6mz5bfVct6drOuwx1DqJFo/iVOv41xCV4euQ
+enVp/UhaHdlYmiDLbI3VazyrjPhhGlVX45vgf4q/O8wGO4yL9S6j0R5hMumEXxHC
+8WuJcrO72KF4124/qzrHBEI0vegtsvvwEce43wqOCQKBgHZQS7v14B0fH9Bdhd//
+JRWjmf6mhycqD1HjRXM12qOHx4wWECJ5Ay3a2EN3K3bOhkyiCGaQRPQ7tHeedFaD
+ypsOu5j/m19oU9KhI1Vru7pntjgwB7SsgCA8J/LNUa7n/RcIkM/mqMOHFN4bwlP5
+SBTbuT1HeVzJ+JH3Kpwt3uPm
 -----END PRIVATE KEY-----
 -----END PRIVATE KEY-----

+ 2 - 2
src/test/java/com/izouma/jiashanxia/repo/UserPackageFlowRepoTest.java

@@ -25,11 +25,11 @@ public class UserPackageFlowRepoTest {
     public void test() {
     public void test() {
         List<PackageGoods> setGoodsList = packageGoodsRepo.findAllByPackageId(17L);
         List<PackageGoods> setGoodsList = packageGoodsRepo.findAllByPackageId(17L);
         List<GoodsDTO> goodsDTOS = JSONObject.parseArray(JSONObject.toJSONString(setGoodsList), GoodsDTO.class);
         List<GoodsDTO> goodsDTOS = JSONObject.parseArray(JSONObject.toJSONString(setGoodsList), GoodsDTO.class);
-        String str = JSONObject.toJSONString(goodsDTOS);
+//        String str = JSONObject.toJSONString(goodsDTOS);
         userPackageFlowRepo.save(UserPackageFlow.builder()
         userPackageFlowRepo.save(UserPackageFlow.builder()
                 .userId(2L)
                 .userId(2L)
                 .type(FlowType.BUY)
                 .type(FlowType.BUY)
-                .content(str)
+                .content(goodsDTOS)
                 .build());
                 .build());
     }
     }
 
 

+ 1 - 1
src/test/java/com/izouma/jiashanxia/service/OrderInfoServiceTest.java

@@ -44,6 +44,6 @@ public class OrderInfoServiceTest {
 
 
     @Test
     @Test
     public void test1() {
     public void test1() {
-        orderInfoService.distribution(636L,255L,"xxx", BigDecimal.valueOf(600));
+        orderInfoService.distribution(636L,255L,"1234", BigDecimal.valueOf(600));
     }
     }
 }
 }