瀏覽代碼

初始化

wujiefeng 9 月之前
父節點
當前提交
6484013886

+ 18 - 1
RewardServer/src/main/java/com/zhongshu/reward/server/core/dao/Impl/WalletReceiptsDaoImpl.java

@@ -52,7 +52,7 @@ public class WalletReceiptsDaoImpl implements WalletReceiptsDaoExtend {
 //
 //
 //        criteria.and("createTime").lte(endTime);
 //        criteria.and("createTime").lte(endTime);
 
 
-        criteria.and("ReceiptsType").is(ReceiptsType.COMMISSION);
+        criteria.and("receiptsType").is(ReceiptsType.COMMISSION);
         criteria.and("status").is(ReceiptsStatus.WAIT);
         criteria.and("status").is(ReceiptsStatus.WAIT);
         Query query = Query.query(criteria);
         Query query = Query.query(criteria);
         query.with(Sort.by(Sort.Order.desc("createTime")));
         query.with(Sort.by(Sort.Order.desc("createTime")));
@@ -78,4 +78,21 @@ public class WalletReceiptsDaoImpl implements WalletReceiptsDaoExtend {
         AggregationResults<InviteSuccessModel> groupList = mongoTemplate.aggregate(aggregation, WalletReceipts.class, InviteSuccessModel.class);
         AggregationResults<InviteSuccessModel> groupList = mongoTemplate.aggregate(aggregation, WalletReceipts.class, InviteSuccessModel.class);
         return groupList.getMappedResults();
         return groupList.getMappedResults();
     }
     }
+
+    @Override
+    public List<WalletReceipts> listMonthBySetMealCode(Long startTime, Long endTime, List<String> setMealCodeList) {
+        Criteria criteria = new Criteria();
+        criteria.andOperator(Criteria.where("createTime").gte(startTime),Criteria.where("createTime").lte(endTime));
+
+//        criteria.and("createTime").gte(startTime);
+//
+//        criteria.and("createTime").lte(endTime);
+
+        criteria.and("receiptsType").is(ReceiptsType.COMMISSION);
+        criteria.and("status").in(ReceiptsStatus.WAIT,ReceiptsStatus.RECEIPTS);
+        criteria.and("outTradeNo").in(setMealCodeList);
+        Query query = Query.query(criteria);
+        query.with(Sort.by(Sort.Order.asc("createTime")));
+        return mongoTemplate.find(query, WalletReceipts.class);
+    }
 }
 }

+ 2 - 0
RewardServer/src/main/java/com/zhongshu/reward/server/core/dao/extend/WalletReceiptsDaoExtend.java

@@ -16,4 +16,6 @@ public interface WalletReceiptsDaoExtend {
     List<WalletReceipts> listMonth(Long startTime, Long endTime);
     List<WalletReceipts> listMonth(Long startTime, Long endTime);
 
 
     List<InviteSuccessModel> myInvite(String userId);
     List<InviteSuccessModel> myInvite(String userId);
+
+    List<WalletReceipts> listMonthBySetMealCode(Long startTime, Long endTime, List<String> setMealCodeList);
 }
 }

+ 0 - 1
RewardServer/src/main/java/com/zhongshu/reward/server/core/domain/WalletReceipts.java

@@ -73,6 +73,5 @@ public class WalletReceipts extends SuperEntity {
     /**
     /**
      * 产生入账的订阅消息
      * 产生入账的订阅消息
      */
      */
-    @DBRef(lazy = true)
     private VipUserRecord vipUserRecord;
     private VipUserRecord vipUserRecord;
 }
 }

+ 70 - 15
RewardServer/src/main/java/com/zhongshu/reward/server/core/service/WalletReceiptsService.java

@@ -76,7 +76,7 @@ public class WalletReceiptsService {
         com.zswl.cloud.bdb.client.ret.ResultContent<InviteReceiptsRoleVo> rulerResultContent = inviteReceiptsRoleFeignService.getOne(vipUserRecord.getPlanningId());
         com.zswl.cloud.bdb.client.ret.ResultContent<InviteReceiptsRoleVo> rulerResultContent = inviteReceiptsRoleFeignService.getOne(vipUserRecord.getPlanningId());
         if (rulerResultContent.getState().equals(com.zswl.cloud.bdb.client.ret.ResultState.Success)){
         if (rulerResultContent.getState().equals(com.zswl.cloud.bdb.client.ret.ResultState.Success)){
             InviteReceiptsRoleVo rulerVo = rulerResultContent.getContent();
             InviteReceiptsRoleVo rulerVo = rulerResultContent.getContent();
-            if (vipUserRecord.getSuc().equals(1)){
+            if (rulerVo.isFirst() && vipUserRecord.getSuc().equals(1)){
                 vipUserRecord.setFirst(false);
                 vipUserRecord.setFirst(false);
                 //订阅
                 //订阅
                 //查询邀请关系
                 //查询邀请关系
@@ -84,7 +84,6 @@ public class WalletReceiptsService {
                 if (Objects.nonNull(inviteRecord) && inviteRecord.getUserType().equals(UserType.NEW)){
                 if (Objects.nonNull(inviteRecord) && inviteRecord.getUserType().equals(UserType.NEW)){
                     if (rulerVo.getFirstPurchaseDay()!=null && !vipUserRecordDao.existsByCpIdAndSucIn(vipUserRecord.getCpId(), List.of(1))) {
                     if (rulerVo.getFirstPurchaseDay()!=null && !vipUserRecordDao.existsByCpIdAndSucIn(vipUserRecord.getCpId(), List.of(1))) {
                         vipUserRecord.setFirst(true);
                         vipUserRecord.setFirst(true);
-                        BigDecimal total = BigDecimal.ZERO;
                         //订阅入账
                         //订阅入账
                         WalletReceipts walletReceipts = new WalletReceipts();
                         WalletReceipts walletReceipts = new WalletReceipts();
                         //获取邀请人userid
                         //获取邀请人userid
@@ -95,12 +94,12 @@ public class WalletReceiptsService {
                         walletReceipts.setUserId(vipUserRecord.getCpId());
                         walletReceipts.setUserId(vipUserRecord.getCpId());
                         walletReceipts.setReceiptsType(ReceiptsType.COMMISSION);
                         walletReceipts.setReceiptsType(ReceiptsType.COMMISSION);
                         walletReceipts.setOutTradeNo(vipUserRecord.getPlanningId());
                         walletReceipts.setOutTradeNo(vipUserRecord.getPlanningId());
-                        walletReceipts.setTotal(total);
+                        walletReceipts.setTotal(rulerVo.getBaseTotal());
                         walletReceipts.setEstimatedTime(DateUtils.nextMonthDayStartTime(rulerVo.getDay()));
                         walletReceipts.setEstimatedTime(DateUtils.nextMonthDayStartTime(rulerVo.getDay()));
                         walletReceipts.setVipUserRecord(vipUserRecord);
                         walletReceipts.setVipUserRecord(vipUserRecord);
                         //邀请人钱包
                         //邀请人钱包
                         walletReceipts.setStatus(ReceiptsStatus.WAIT);
                         walletReceipts.setStatus(ReceiptsStatus.WAIT);
-                        wallet.setWaitAmount(wallet.getWaitAmount().add(total));
+                        wallet.setWaitAmount(wallet.getWaitAmount().add(rulerVo.getBaseTotal()));
                         walletDao.save(wallet);
                         walletDao.save(wallet);
                         walletReceiptsDao.save(walletReceipts);
                         walletReceiptsDao.save(walletReceipts);
                 }
                 }
@@ -138,7 +137,7 @@ public class WalletReceiptsService {
         //首次订购
         //首次订购
         list.forEach(it -> {
         list.forEach(it -> {
             if (it.getVipUserRecord().isFirst()) {
             if (it.getVipUserRecord().isFirst()) {
-                addAmount(receipts, wallets, it);
+                addAmount(it);
             }
             }
         });
         });
 
 
@@ -153,41 +152,97 @@ public class WalletReceiptsService {
         keep.forEach(it->{
         keep.forEach(it->{
             boolean cancel = vipUserRecordDao.existsByCpIdAndSucIn(it.getUserId(), List.of(-1, 5));
             boolean cancel = vipUserRecordDao.existsByCpIdAndSucIn(it.getUserId(), List.of(-1, 5));
             if (!cancel){//无退订消息
             if (!cancel){//无退订消息
-                addAmount(receipts, wallets, it);
+                addAmount(it);
             }else {
             }else {
                 VipUserRecord cancelRecord = vipUserRecordDao.findTopOneByOperateTime(it.getUserId(), DateUtils.lastMonthDayStartTime(1), DateUtils.lastMonthDayStartTime(6));
                 VipUserRecord cancelRecord = vipUserRecordDao.findTopOneByOperateTime(it.getUserId(), DateUtils.lastMonthDayStartTime(1), DateUtils.lastMonthDayStartTime(6));
                 if (ObjectUtils.isEmpty(cancelRecord) || cancelRecord.getSuc().equals(1) || cancelRecord.getSuc().equals(4)){
                 if (ObjectUtils.isEmpty(cancelRecord) || cancelRecord.getSuc().equals(1) || cancelRecord.getSuc().equals(4)){
                     //上月1-5号无退订消息或消息为订购:默认扣款成功。。。
                     //上月1-5号无退订消息或消息为订购:默认扣款成功。。。
-                    addAmount(receipts, wallets, it);
+                    addAmount(it);
                 }else {
                 }else {
-                    cancel(receipts, wallets, it);
+                    cancel(it);
                 }
                 }
             }
             }
         });
         });
         walletDao.saveAll(wallets);
         walletDao.saveAll(wallets);
         walletReceiptsDao.saveAll(receipts);
         walletReceiptsDao.saveAll(receipts);
+
     }
     }
 
 
     public void autoReceipts(){
     public void autoReceipts(){
-//        inviteReceiptsRoleFeignService.getOne()
+        //获取设置持续订购返利的套餐规则
+        com.zswl.cloud.bdb.client.ret.ResultContent<List<InviteReceiptsRoleVo>> rulerResult = inviteReceiptsRoleFeignService.listKeep();
+        if (rulerResult.getState().equals(com.zswl.cloud.bdb.client.ret.ResultState.Success)){
+            List<InviteReceiptsRoleVo> rulerList = rulerResult.getContent();
+            if (rulerList.isEmpty()){
+                return;
+            }
+            List<String> setMealCodeList = rulerList.stream().map(InviteReceiptsRoleVo::getSetMealCode).collect(Collectors.toList());
+
+            //获取上月所有入帐单(待结算和已结算的)
+            Long startTime = DateUtils.lastMonthStartTime();
+            Long endTime = DateUtils.lastMonthEndTime();
+            List<WalletReceipts> walletReceiptsList = walletReceiptsDao.listMonthBySetMealCode(startTime, endTime, setMealCodeList);
+            if (walletReceiptsList.isEmpty()){
+                return;
+            }
+
+            rulerList.forEach(ruler->{
+                walletReceiptsList.forEach(walletReceipts -> {
+                    //匹配规则
+                    if (walletReceipts.getOutTradeNo().equals(ruler.getSetMealCode())){
+                        //上月最新消息
+                        VipUserRecord topOne = vipUserRecordDao.findTopOneByOperateTime(walletReceipts.getUserId(), startTime, endTime);
+                        if (Objects.isNull(topOne)){
+                            //上月无消息,生成入账
+                            insertReceipts(ruler, walletReceipts);
+                        }else if (topOne.getSuc().equals(1) || topOne.getSuc().equals(4)){
+                            //上月最后消息为订购,生成入账
+                            insertReceipts(ruler, walletReceipts);
+                        }
+                    }
+                });
+            });
+        }
     }
     }
 
 
-    private static void addAmount(List<WalletReceipts> receipts, List<Wallet> wallets, WalletReceipts it) {
+
+    private void insertReceipts(InviteReceiptsRoleVo ruler, WalletReceipts it) {
+        WalletReceipts walletReceipts = new WalletReceipts();
+        walletReceipts.setWallet(it.getWallet());
+        walletReceipts.setInviteUserId(it.getInviteUserId());
+        walletReceipts.setUserId(it.getUserId());
+        walletReceipts.setEstimatedTime(DateUtils.nextMonthDayStartTime(ruler.getDay()));
+        walletReceipts.setReceiptsType(ReceiptsType.COMMISSION);
+        walletReceipts.setTotal(ruler.getBaseTotal());
+        walletReceipts.setStatus(ReceiptsStatus.WAIT);
+        walletReceipts.setOutTradeNo(ruler.getSetMealCode());
+        VipUserRecord vipUserRecord = it.getVipUserRecord();
+        vipUserRecord.setId(null);
+        vipUserRecord.setFirst(false);
+        vipUserRecord.setPlanningId(ruler.getSetMealCode());
+        walletReceipts.setVipUserRecord(vipUserRecord);
+        Wallet wallet = walletReceipts.getWallet();
+        wallet.setWaitAmount(wallet.getWaitAmount().add(ruler.getBaseTotal()));
+        walletDao.save(wallet);
+        walletReceiptsDao.save(walletReceipts);
+    }
+
+    private void addAmount(WalletReceipts it) {
         it.setStatus(ReceiptsStatus.RECEIPTS);
         it.setStatus(ReceiptsStatus.RECEIPTS);
         it.setReceiptsTime(new Date().getTime());
         it.setReceiptsTime(new Date().getTime());
         Wallet wallet = it.getWallet();
         Wallet wallet = it.getWallet();
         wallet.setWaitAmount(wallet.getWaitAmount().subtract(it.getTotal()));
         wallet.setWaitAmount(wallet.getWaitAmount().subtract(it.getTotal()));
         wallet.setAmount(wallet.getAmount().add(it.getTotal()));
         wallet.setAmount(wallet.getAmount().add(it.getTotal()));
-        receipts.add(it);
-        wallets.add(wallet);
+        walletDao.save(wallet);
+        walletReceiptsDao.save(it);
     }
     }
 
 
-    private static void cancel(List<WalletReceipts> receipts, List<Wallet> wallets, WalletReceipts it){
+    private void cancel(WalletReceipts it){
         it.setStatus(ReceiptsStatus.CANCEL);
         it.setStatus(ReceiptsStatus.CANCEL);
         Wallet wallet = it.getWallet();
         Wallet wallet = it.getWallet();
         wallet.setWaitAmount(wallet.getWaitAmount().subtract(it.getTotal()));
         wallet.setWaitAmount(wallet.getWaitAmount().subtract(it.getTotal()));
-        receipts.add(it);
-        wallets.add(wallet);
+        walletDao.save(wallet);
+        walletReceiptsDao.save(it);
     }
     }
 
 
     /**
     /**