Răsfoiți Sursa

代理人3.0app开发

xuqiang 1 an în urmă
părinte
comite
a64b0dd70e
31 a modificat fișierele cu 785 adăugiri și 81 ștergeri
  1. 4 0
      src/main/java/com/ydtech/modules/admin/dao/SysPartnerAccountMapper.java
  2. 20 0
      src/main/java/com/ydtech/modules/admin/model/SysPartnerAccount.java
  3. 2 2
      src/main/java/com/ydtech/modules/admin/service/impl/SysAgencyFeeApprovalServiceImpl.java
  4. 3 0
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  5. 10 0
      src/main/java/com/ydtech/modules/partner/controller/NewAppPartnerController.java
  6. 13 1
      src/main/java/com/ydtech/modules/partner/controller/PartnerCommissionDetailsController.java
  7. 150 0
      src/main/java/com/ydtech/modules/partner/controller/PartnerExtractHistoryController.java
  8. 10 0
      src/main/java/com/ydtech/modules/partner/controller/PartnerUserController.java
  9. 10 0
      src/main/java/com/ydtech/modules/partner/dao/PartnerExtractHistoryMapper.java
  10. 5 0
      src/main/java/com/ydtech/modules/partner/dao/PartnerPartnerAccountMapper.java
  11. 3 0
      src/main/java/com/ydtech/modules/partner/dao/PartnerPremiumDetailsMapper.java
  12. 5 1
      src/main/java/com/ydtech/modules/partner/dao/PartnerUserMapper.java
  13. 36 0
      src/main/java/com/ydtech/modules/partner/model/PartnerExtractHistory.java
  14. 14 0
      src/main/java/com/ydtech/modules/partner/model/PartnerPartnerAccount.java
  15. 5 0
      src/main/java/com/ydtech/modules/partner/model/PartnerPremiumDetails.java
  16. 4 1
      src/main/java/com/ydtech/modules/partner/model/param/AppHomeParams.java
  17. 2 0
      src/main/java/com/ydtech/modules/partner/model/param/PartnerApp.java
  18. 9 0
      src/main/java/com/ydtech/modules/partner/model/param/PartnerDetailsParam.java
  19. 15 0
      src/main/java/com/ydtech/modules/partner/model/vo/DetailsParam.java
  20. 5 0
      src/main/java/com/ydtech/modules/partner/model/vo/MyUserLevel.java
  21. 53 0
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerExtractHistoryServiceImpl.java
  22. 5 0
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerLiftingRecordServiceImpl.java
  23. 81 9
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerPremiumDetailsServiceImpl.java
  24. 140 49
      src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java
  25. 11 0
      src/main/java/com/ydtech/modules/partner/service/PartnerExtractHistoryService.java
  26. 4 0
      src/main/java/com/ydtech/modules/partner/service/PartnerPremiumDetailsService.java
  27. 6 2
      src/main/java/com/ydtech/modules/partner/service/PartnerUserService.java
  28. 8 2
      src/main/java/com/ydtech/modules/partner/utils/TimedTaskUtils.java
  29. 36 0
      src/main/resources/mapper/modules/admin/SysPartnerAccountMapper.xml
  30. 38 0
      src/main/resources/mapper/modules/partner/PartnerPartnerAccountMapper.xml
  31. 78 14
      src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

+ 4 - 0
src/main/java/com/ydtech/modules/admin/dao/SysPartnerAccountMapper.java

@@ -10,4 +10,8 @@ public interface SysPartnerAccountMapper extends BaseMapper<SysPartnerAccount> {
 
     SysPartnerAccount getByDeptBalanceDto(DeptBalanceDto itemLeader);
 
+
+    SysPartnerAccount selectFee(String userId);
+
+
 }

+ 20 - 0
src/main/java/com/ydtech/modules/admin/model/SysPartnerAccount.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.admin.model;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -52,4 +53,23 @@ public class SysPartnerAccount {
     private Date createTime;
 
 
+    @TableField(exist = false)
+    private BigDecimal unreportedAmount;
+
+    @ApiModelProperty(value = "已转入金额")
+    @TableField(exist = false)
+    private BigDecimal transferAmount;
+
+    @ApiModelProperty(value = "已过期金额")
+    @TableField(exist = false)
+    private BigDecimal expiredAmount;
+
+    @ApiModelProperty(value = "总佣金")
+    @TableField(exist = false)
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "冻结")
+    @TableField(exist = false)
+    private BigDecimal frozenAmount;
+
 }

+ 2 - 2
src/main/java/com/ydtech/modules/admin/service/impl/SysAgencyFeeApprovalServiceImpl.java

@@ -252,7 +252,7 @@ public class SysAgencyFeeApprovalServiceImpl extends ServiceImpl<SysAgencyFeeApp
         }
         //当前登录用户
         SysUser user = BaseController.getUser();
-        PartnerPartnerAccount account = partnerAccountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class).eq(PartnerPartnerAccount::getUserId,user.getId()));
+        SysPartnerAccount account = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<>(SysPartnerAccount.class).eq(SysPartnerAccount::getUserId,user.getId()));
         BigDecimal cashFee = account.getCashFee();
         int compare = cashFee.compareTo(actualFee);
         if (compare < 0) {
@@ -292,7 +292,7 @@ public class SysAgencyFeeApprovalServiceImpl extends ServiceImpl<SysAgencyFeeApp
         }else {
             account.setHistoryFee(account.getHistoryFee().add(actualFee));
         }
-        partnerAccountMapper.updateById(account);
+        sysPartnerAccountMapper.updateById(account);
 
 
         //保存添加记录

+ 3 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -390,6 +390,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             details.setCreateTime(new Date());
             details.setLicenseno(insOrders.getLicenseno());
             details.setSource(partnerUser.getGrade());
+            if (partnerUser.isIdentityStatus()){
+                details.setAppStatus(1);
+            }
             list.add(details);
             SpringUtil.getBean(KickbackChangeUtils.class).before(bigDecimal, details,userId3,userId4);
         }

+ 10 - 0
src/main/java/com/ydtech/modules/partner/controller/NewAppPartnerController.java

@@ -12,6 +12,7 @@ import com.ydtech.modules.admin.service.SysPartnerService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.partner.model.PartnerPartnerAccount;
 import com.ydtech.modules.partner.model.param.AppHomeParams;
 import com.ydtech.modules.partner.model.param.PartnerApp;
 import com.ydtech.modules.partner.service.PartnerUserService;
@@ -61,6 +62,15 @@ public class NewAppPartnerController extends BaseController {
         return partnerUserService.getHomePage(params);
     }
 
+    /**
+     * (新)首页钱包
+     */
+    @PostMapping("/getHomeWallet")
+    @ApiOperation(value = "APP首页信息")
+    public HttpResult<PartnerPartnerAccount> getHomeWallet(@RequestBody AppHomeParams params){
+        params.setUserId(getUserId());
+        return partnerUserService.getHomeWallet(params);
+    }
 
     /**
      * (新)人员查询

+ 13 - 1
src/main/java/com/ydtech/modules/partner/controller/PartnerCommissionDetailsController.java

@@ -6,6 +6,7 @@ import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.partner.model.param.PartnerDetailsParam;
 import com.ydtech.modules.partner.service.PartnerPremiumDetailsService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -13,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
 
 @Api(tags = "佣金明细")
 @RestController
@@ -31,4 +31,16 @@ public class PartnerCommissionDetailsController extends BaseController {
         return HttpResult.ok(partnerPremiumDetailsService.queryPage(detailsParam));
     }
 
+
+
+    @ApiModelProperty(dataType = "查询过期锁定记录")
+    @PostMapping("queryExpiredLockRecords")
+    public HttpResult queryExpiredLockRecords(@RequestBody PartnerDetailsParam detailsParam){
+        detailsParam.setPage(buildPageRequest(detailsParam.getPageDto()));
+        detailsParam.setUserId(getUserId());
+        return HttpResult.ok(partnerPremiumDetailsService.queryExpiredLockRecords(detailsParam));
+    }
+
+
+
 }

+ 150 - 0
src/main/java/com/ydtech/modules/partner/controller/PartnerExtractHistoryController.java

@@ -0,0 +1,150 @@
+package com.ydtech.modules.partner.controller;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.dao.SysPartnerAccountMapper;
+import com.ydtech.modules.admin.model.SysPartnerAccount;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.dto.PageDto;
+import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
+import com.ydtech.modules.partner.model.PartnerExtractHistory;
+import com.ydtech.modules.partner.model.PartnerPartnerAccount;
+import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
+import com.ydtech.modules.partner.service.PartnerExtractHistoryService;
+import com.ydtech.modules.partner.service.PartnerRuleService;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+
+@Api(tags = "提现记录")
+@Slf4j
+@RestController
+@RequestMapping("/partnerExtractHistory")
+public class PartnerExtractHistoryController extends BaseController {
+
+
+    @Autowired
+    private PartnerExtractHistoryService partnerExtractHistoryService;
+
+    @Autowired
+    private SysPartnerAccountMapper sysPartnerAccountMapper;
+
+    @Autowired
+    private PartnerPartnerAccountMapper partnerPartnerAccountMapper;
+
+    @Autowired
+    private PartnerRuleService ruleService;
+
+    @PostMapping("/query")
+    public HttpResult query(@RequestBody PartnerExtractHistory extractHistory){
+//        if (StringUtils.isEmpty(extractHistory.getGrade())){
+//            return HttpResult.error("用户等级不能为空");
+//        }
+        if (extractHistory.getPageNum() == null || extractHistory.getPageSize() == null){
+            return HttpResult.error("分页参数不能为空");
+        }
+        PageDto pageDto = new PageDto();
+        pageDto.setPageNum(extractHistory.getPageNum());
+        pageDto.setPageSize(extractHistory.getPageSize());
+        extractHistory.setPage(buildPageRequest(pageDto));
+        extractHistory.setUserId(getUserId());
+        return HttpResult.ok(partnerExtractHistoryService.queryPage(extractHistory));
+    }
+
+    /**
+     * 提现
+     * @param extractHistory
+     * @return
+     */
+    @PostMapping("/extractRecords")
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult extractRecords(@RequestBody PartnerExtractHistory extractHistory){
+        if (StringUtils.isEmpty(extractHistory.getGrade())){
+            return HttpResult.error("用户等级不能为空");
+        }
+        if (null != extractHistory.getAmount() &&extractHistory.getAmount().compareTo(new BigDecimal("0")) <= 0){
+            return HttpResult.error("提现金额不能小于0");
+        }
+        String userId = getUserId();
+        PartnerPartnerAccount partnerAccount = partnerPartnerAccountMapper.selectOne(new LambdaQueryWrapper<PartnerPartnerAccount>()
+                .eq(PartnerPartnerAccount::getUserId, userId)
+                .eq(PartnerPartnerAccount::getGrade, extractHistory.getGrade()));
+        if (null == partnerAccount){
+            return HttpResult.error("账号余额不足");
+        }
+        if (partnerAccount.getCashFee().compareTo(extractHistory.getAmount()) == -1){
+            return HttpResult.error("账号余额不足");
+        }
+        extractHistory.setUserId(userId);
+        boolean save = partnerExtractHistoryService.save(extractHistory);
+        if (save){
+            SysPartnerAccount account = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<SysPartnerAccount>()
+                    .eq(SysPartnerAccount::getUserId,userId));
+            if (account != null){
+                account.setExtractFee(account.getExtractFee().add(extractHistory.getAmount()));
+                account.setCashFee(account.getCashFee().add(extractHistory.getAmount()));
+                sysPartnerAccountMapper.updateById(account);
+            }else {
+                account = new SysPartnerAccount();
+                account.setUserId(userId);
+                account.setExtractFee(extractHistory.getAmount());
+                account.setHistoryFee(new BigDecimal("0"));
+                account.setCashFee(extractHistory.getAmount());
+                account.setCreateTime(new Date());
+                sysPartnerAccountMapper.insert( account);
+            }
+            partnerAccount.setHistoryFee(partnerAccount.getHistoryFee().add(extractHistory.getAmount()));
+            partnerAccount.setCashFee(partnerAccount.getCashFee().subtract(extractHistory.getAmount()));
+            partnerPartnerAccountMapper.updateById(partnerAccount);
+        }
+        return HttpResult.ok(save ? "提取成功" : "提取失败");
+    }
+
+
+    /**
+     * 未转入的金额
+     * @return
+     */
+    @GetMapping("/queryExtractRecords")
+    public HttpResult queryExtractRecords(){
+        List<PartnerPartnerAccount> partnerPartnerAccounts = partnerPartnerAccountMapper.selectList(new LambdaQueryWrapper<PartnerPartnerAccount>()
+                .eq(PartnerPartnerAccount::getUserId,getUserId()));
+        List<Map.Entry<Integer, BigDecimal>> collect = partnerPartnerAccounts.stream()
+                .collect(Collectors.groupingBy(
+                        PartnerPartnerAccount::getGrade,
+                        Collectors.reducing(
+                                BigDecimal.ZERO,
+                                PartnerPartnerAccount::getCashFee,
+                                BigDecimal::add
+                        )
+                ))
+                .entrySet().stream()
+                .sorted(Map.Entry.comparingByKey())
+                .collect(Collectors.toList());
+        List<JSONObject> list = new ArrayList<>();
+        for (Map.Entry<Integer, BigDecimal> entry : collect) {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("grade", entry.getKey().toString());
+            jsonObject.put("cashFee", entry.getValue().toString());
+            PartnerRuleEntity ruleEntity = ruleService.selectByGrade(entry.getKey().toString());
+            jsonObject.put("gradeName", ruleEntity.getGradeName());
+            list.add(jsonObject);
+        }
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("list", list);
+        map.put("total", partnerPartnerAccounts.stream()
+                .map(PartnerPartnerAccount::getCashFee)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add));
+        return HttpResult.ok(map);
+    }
+
+}

+ 10 - 0
src/main/java/com/ydtech/modules/partner/controller/PartnerUserController.java

@@ -130,6 +130,16 @@ public class PartnerUserController extends BaseController {
         return HttpResult.ok(partnerUserService.getUserGradeList(userId));
     }
 
+    /**
+     * 查询当前用户的身份
+     * @param userId
+     * @return
+     */
+    @GetMapping("getUserGradeListMap")
+    public HttpResult getUserGradeListMap() {
+        return HttpResult.ok(partnerUserService.getUserGradeListMap(getUserId()));
+    }
+
 
 
     /**

+ 10 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerExtractHistoryMapper.java

@@ -0,0 +1,10 @@
+package com.ydtech.modules.partner.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.partner.model.PartnerExtractHistory;
+import org.apache.ibatis.annotations.Mapper;
+
+
+@Mapper
+public interface PartnerExtractHistoryMapper extends BaseMapper<PartnerExtractHistory> {
+}

+ 5 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerPartnerAccountMapper.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.partner.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.partner.model.PartnerPartnerAccount;
+import com.ydtech.modules.partner.model.param.AppHomeParams;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -18,4 +19,8 @@ public interface PartnerPartnerAccountMapper extends BaseMapper<PartnerPartnerAc
 
     @Select("SELECT cash_fee FROM partner_partner_account WHERE user_id = #{userId} AND grade = #{grade}")
     BigDecimal selectCashFee(@Param("userId") String userId,@Param("grade") Integer grade);
+
+    PartnerPartnerAccount selectStatisticalData(@Param("params") AppHomeParams params);
+
+
 }

+ 3 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerPremiumDetailsMapper.java

@@ -49,4 +49,7 @@ public interface PartnerPremiumDetailsMapper extends BaseMapper<PartnerPremiumDe
 
     @Select("SELECT SUM(extract_fee) AS commission FROM partner_premium_details WHERE user_id = #{userId} AND source = #{grade} AND create_time >= #{createTime}")
     BigDecimal commissionAfterUserLocking(@Param("userId") String userId,@Param("grade") Integer grade,@Param("createTime") Date createTime);
+
+    @Select("UPDATE partner_user SET app_status = #{status} WHERE grade = #{originalLevel} AND user_id = #{userId} AND create_time BETWEEN DATE_FORMAT(identityTime, '%Y-%m-%d 00:00:00') AND TIMESTAMP(DATE(NOW()), '23:59:59') ")
+    void updateAppStatus(@Param("originalLevel") String originalLevel,@Param("userId") String userId, @Param("status")int status, @Param("identityTime")Date identityTime);
 }

+ 5 - 1
src/main/java/com/ydtech/modules/partner/dao/PartnerUserMapper.java

@@ -36,7 +36,7 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     @Delete("delete from partner_user where user_id=#{id}")
     void deleteByUserId(String id);
 
-    Object selectStatistics(@Param("grade") String grade,@Param("params")AppHomeParams params);
+    Object selectStatisticsMap(@Param("grade") String grade,@Param("params")AppHomeParams params);
 
     SelectUserVo selectUser(AppHomeParams params);
 
@@ -194,4 +194,8 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
 
     @Select("SELECT max(grade) FROM partner_user WHERE identity_status = 1 and user_id = #{id}")
     Integer selectMax(String id);
+
+    @Select("SELECT identity_time FROM partner_user WHERE user_id = #{userId} AND grade = #{originalLevel}")
+    Date selectLockTime(@Param("userId") String userId, @Param("originalLevel")String originalLevel);
+
 }

+ 36 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerExtractHistory.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.partner.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.base.model.BaseEntity;
+import lombok.Data;
+import java.math.BigDecimal;
+
+
+@Data
+public class PartnerExtractHistory extends BaseEntity {
+
+    private String id;
+
+    private String userId;
+
+    private String grade;
+
+    private BigDecimal amount;
+
+    @TableField(exist = false)
+    private String startTime;
+
+    @TableField(exist = false)
+    private String endTime;
+
+    @TableField(exist = false)
+    private Integer pageNum;
+
+    @TableField(exist = false)
+    private Integer pageSize;
+
+    @TableField(exist = false)
+    private Page page;
+
+}

+ 14 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerPartnerAccount.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.partner.model;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -61,5 +62,18 @@ public class PartnerPartnerAccount {
 
     private Integer grade;
 
+    /**
+     * 冻结
+     */
+    @TableField(exist = false)
+    @JsonFormat(pattern = "0.00")
+    private BigDecimal freeze;
+
+    /**
+     * 过期
+     */
+    @TableField(exist = false)
+    @JsonFormat(pattern = "0.00")
+    private BigDecimal expired;
 
 }

+ 5 - 0
src/main/java/com/ydtech/modules/partner/model/PartnerPremiumDetails.java

@@ -115,6 +115,8 @@ public class PartnerPremiumDetails {
     @ApiModelProperty(value = "车牌号")
     private String licenseno;
 
+    private int appStatus;
+
     /**
      * 费用来源(1,2,3,4,5级)
      */
@@ -127,4 +129,7 @@ public class PartnerPremiumDetails {
     @TableField(exist = false)
     private String deptId;
 
+
+
+
 }

+ 4 - 1
src/main/java/com/ydtech/modules/partner/model/param/AppHomeParams.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.partner.model.param;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -17,10 +18,12 @@ public class AppHomeParams {
     @ApiModelProperty(value = "关联人员列表")
     private Set<String> relatedPerList;
 
-
     @ApiModelProperty(value = "时间范围")
     private List<String> timeFrame;
 
+    private String startTime;
+
+    private String endTime;
 
     @ApiModelProperty(value = "统计视图查询条件  Day, Week, Month")
     private String countCycle;

+ 2 - 0
src/main/java/com/ydtech/modules/partner/model/param/PartnerApp.java

@@ -20,6 +20,8 @@ public class PartnerApp {
 
     private Integer pageSize;
 
+    private Integer appStatus;
+
     private Page page;
 
 }

+ 9 - 0
src/main/java/com/ydtech/modules/partner/model/param/PartnerDetailsParam.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.partner.model.param;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.core.page.PageRequest;
 import io.swagger.annotations.ApiModelProperty;
@@ -31,6 +32,14 @@ public class PartnerDetailsParam extends PageRequest {
     @ApiModelProperty(value = "签单时间")
     private List<String> signingTime;
 
+    @TableField(exist = false)
+    private String startTime;
+
+    @TableField(exist = false)
+    private String endTime;
+
+    @ApiModelProperty(value = "状态")
+    private Integer appStatus;
 
     private Page page;
 

+ 15 - 0
src/main/java/com/ydtech/modules/partner/model/vo/DetailsParam.java

@@ -0,0 +1,15 @@
+package com.ydtech.modules.partner.model.vo;
+
+
+import lombok.Data;
+
+@Data
+public class DetailsParam {
+
+    private String userId;
+
+    private String grade;
+
+    private Integer appStatus;
+
+}

+ 5 - 0
src/main/java/com/ydtech/modules/partner/model/vo/MyUserLevel.java

@@ -40,4 +40,9 @@ public class MyUserLevel {
     @ApiModelProperty(value = "购买保级金额")
     private BigDecimal fallAmount;
 
+    @ApiModelProperty(value = "有效日期")
+    private String expiryDate;
+
+    private String proportional;
+
 }

+ 53 - 0
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerExtractHistoryServiceImpl.java

@@ -0,0 +1,53 @@
+package com.ydtech.modules.partner.service.Impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.partner.dao.PartnerExtractHistoryMapper;
+import com.ydtech.modules.partner.model.PartnerExtractHistory;
+import com.ydtech.modules.partner.service.PartnerExtractHistoryService;
+import com.ydtech.utils.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+
+@Service
+public class PartnerExtractHistoryServiceImpl extends ServiceImpl<PartnerExtractHistoryMapper, PartnerExtractHistory> implements PartnerExtractHistoryService {
+    @Override
+    public JSONObject queryPage(PartnerExtractHistory extractHistory) {
+        LambdaQueryWrapper<PartnerExtractHistory> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(PartnerExtractHistory::getUserId,extractHistory.getUserId());
+        if (StringUtils.isNotEmpty(extractHistory.getGrade())){
+            lambdaQueryWrapper.eq(PartnerExtractHistory::getGrade,extractHistory.getGrade());
+        }
+        if (extractHistory.getStartTime() != null && extractHistory.getEndTime() != null){
+            lambdaQueryWrapper.between(PartnerExtractHistory::getCreateTime,extractHistory.getStartTime(),extractHistory.getEndTime());
+        }
+        lambdaQueryWrapper.orderByDesc(PartnerExtractHistory::getCreateTime);
+        Page page = baseMapper.selectPage(extractHistory.getPage(), lambdaQueryWrapper);
+        List<PartnerExtractHistory> list = baseMapper.selectList(lambdaQueryWrapper);
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("totalAmount",calculateTotalAmount(list));
+        map.put("size",list.size());
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("page",page);
+        jsonObject.put("total",map);
+        return jsonObject;
+
+    }
+
+    public BigDecimal calculateTotalAmount(List<PartnerExtractHistory> histories) {
+        return histories.stream()
+                .map(PartnerExtractHistory::getAmount)
+                .filter(amount -> amount != null)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+    }
+
+
+
+
+
+}

+ 5 - 0
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerLiftingRecordServiceImpl.java

@@ -50,6 +50,8 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
     @Autowired
     private PartnerPremiumDetailsMapper detailsMapper;
 
+    @Autowired
+    private PartnerPremiumDetailsMapper premiumDetailsMapper;
 
     @Override
     public Map<String,Object> queryPage(PartnerLiftingRecordParam recordParam) {
@@ -226,6 +228,9 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
             purchaseRecordService.save( record);
             //更新用户锁定状态
             partnerUserMapper.updateIdentityStatus(liftingRecord.getUserId(),liftingRecord.getOriginalLevel(),0);
+            Date lockTime = partnerUserMapper.selectLockTime(liftingRecord.getUserId(),liftingRecord.getOriginalLevel());
+            //更新单据状态
+            premiumDetailsMapper.updateAppStatus(liftingRecord.getOriginalLevel(), record.getUserId(),0,lockTime);
         }
         return HttpResult.ok("解锁成功");
     }

+ 81 - 9
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerPremiumDetailsServiceImpl.java

@@ -1,23 +1,51 @@
 package com.ydtech.modules.partner.service.Impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.partner.dao.PartnerPremiumDetailsMapper;
+import com.ydtech.modules.partner.dao.PartnerUserMapper;
+import com.ydtech.modules.partner.model.PartnerExtractHistory;
 import com.ydtech.modules.partner.model.PartnerPremiumDetails;
+import com.ydtech.modules.partner.model.PartnerUser;
 import com.ydtech.modules.partner.model.param.PartnerDetailsParam;
+import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
+import com.ydtech.modules.partner.model.vo.CommissionRulesVo;
+import com.ydtech.modules.partner.service.PartnerCommissionService;
 import com.ydtech.modules.partner.service.PartnerPremiumDetailsService;
+import com.ydtech.modules.partner.service.PartnerRuleService;
+import com.ydtech.modules.partner.utils.PartnerDateUtils;
 import com.ydtech.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 @Service
 public class PartnerPremiumDetailsServiceImpl extends ServiceImpl<PartnerPremiumDetailsMapper, PartnerPremiumDetails> implements PartnerPremiumDetailsService {
+
+    @Autowired
+    private PartnerUserMapper partnerUserMapper;
+
+    @Autowired
+    private PartnerRuleService ruleService;
+
+    @Autowired
+    private  PartnerCommissionService commissionService;
+
+    @Value("${partner.expireDays}")
+    private Integer expireDays;
+
     @Override
     public IPage queryPage(PartnerDetailsParam detailsParam) {
 
@@ -46,17 +74,61 @@ public class PartnerPremiumDetailsServiceImpl extends ServiceImpl<PartnerPremium
         return baseMapper.queryPage(detailsParam.getPage(), queryWrapper);
     }
 
+    @Override
+    public JSONObject queryExpiredLockRecords(PartnerDetailsParam detailsParam) {
+        LambdaQueryWrapper<PartnerPremiumDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(StringUtils.isNotBlank(detailsParam.getUserId()), PartnerPremiumDetails::getUserId,detailsParam.getUserId());
+        lambdaQueryWrapper.eq(StringUtils.isNotBlank(detailsParam.getGrade()), PartnerPremiumDetails::getSource,detailsParam.getGrade());
+        lambdaQueryWrapper.eq(null != detailsParam.getAppStatus(), PartnerPremiumDetails::getAppStatus,detailsParam.getAppStatus());
+        if (detailsParam.getStartTime() != null && detailsParam.getEndTime() != null){
+            lambdaQueryWrapper.between(PartnerPremiumDetails::getCreateTime, detailsParam.getStartTime(), detailsParam.getEndTime());
+        }
+        List<PartnerPremiumDetails> partnerPremiumDetails = baseMapper.selectList(lambdaQueryWrapper);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("size",partnerPremiumDetails.size());
+        jsonObject.put("grade",detailsParam.getGrade());
+        jsonObject.put("gradeName",ruleService.selectByGrade(detailsParam.getGrade()).getGradeName());
+        jsonObject.put("totalAmount",calculateTotalAmount(partnerPremiumDetails));
+        jsonObject.put("dateTime",queryTime(detailsParam));
+        return jsonObject;
+    }
 
+    public Map<String,String> queryTime(PartnerDetailsParam detailsParam){
+        LambdaQueryWrapper<PartnerUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(StringUtils.isNotBlank(detailsParam.getUserId()), PartnerUser::getUserId,detailsParam.getUserId());
+        lambdaQueryWrapper.eq(StringUtils.isNotBlank(detailsParam.getGrade()), PartnerUser::getGrade,detailsParam.getGrade());
+        PartnerUser partnerUser = partnerUserMapper.selectOne(lambdaQueryWrapper);
+        PartnerRuleEntity ruleEntity = ruleService.selectByGrade(String.valueOf(partnerUser.getGrade()));
+        Map<String,String> jsonObject = new HashMap<>();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (partnerUser.getUpgradeTime() != null){
+            jsonObject.put("upgradeTimeStart",formatter.format(partnerUser.getUpgradeTime()));
+            jsonObject.put("upgradeTimeEnd",formatter.format(PartnerDateUtils.addDays(partnerUser.getUpgradeTime(), Integer.valueOf(ruleEntity.getCycle().getFixedDays())) ));
+        }else {
+            jsonObject.put("upgradeTimeStart","");
+            jsonObject.put("upgradeTimeEnd","");
+        }
+        if (partnerUser.getIdentityTime() != null){
+            jsonObject.put("freezeStart",formatter.format(partnerUser.getIdentityTime()) );
+            jsonObject.put("freezeEnd", formatter.format(PartnerDateUtils.addDays(partnerUser.getIdentityTime(),expireDays )) );
+        }else {
+            jsonObject.put("freezeStart","");
+            jsonObject.put("freezeEnd","");
+        }
+        if (partnerUser.getIdentityTime() != null){
+            jsonObject.put("expired",formatter.format(PartnerDateUtils.addDays(partnerUser.getIdentityTime(),expireDays)) + "(" + expireDays + "天过期)");
+        }else {
+            jsonObject.put("expired","");
+        }
 
+        return jsonObject;
+    }
 
-
-
-
-
-
-
-
-
-
+    public BigDecimal calculateTotalAmount(List<PartnerPremiumDetails> details) {
+        return details.stream()
+                .map(PartnerPremiumDetails::getExtractFee)
+                .filter(amount -> amount != null)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+    }
 
 }

+ 140 - 49
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java

@@ -16,7 +16,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.dao.SysPartnerAccountMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
+import com.ydtech.modules.admin.model.SysPartnerAccount;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.vo.AppUserInfoVo;
 import com.ydtech.modules.admin.service.impl.SysUserServiceImpl;
@@ -69,15 +71,15 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     @Autowired
     private PartnerLiftingRecordMapper liftingRecordMapper;
 
-    @Autowired
-    private PartnerPartnerAccountMapper accountMapper;
-
     @Autowired
     private PartnerCommissionService commissionService;
 
     @Autowired
     private PartnerRuleService partnerRuleService;
 
+    @Autowired
+    private SysPartnerAccountMapper sysPartnerAccountMapper;
+
     @Value("${partner.expireDays}")
     private Long expireDays;
 
@@ -279,44 +281,49 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
 
 
         List<PartnerUser> partnerUsers = baseMapper.selectList(new LambdaQueryWrapper<>(PartnerUser.class)
-                .eq(PartnerUser::getUserId,params.getUserId())
-                .in(PartnerUser::getGrade, getGradeList(teamOverviewVos)));
+                .eq(PartnerUser::getUserId,params.getUserId()));
 
         Map<Integer, PartnerUser> userMap = partnerUsers.stream()
                 .collect(Collectors.toMap(PartnerUser::getGrade, Function.identity()));
 
         Integer max = baseMapper.selectMax(params.getUserId());
 
+        if (!userMap.containsKey(1)){
+            teamOverviewVos.removeIf(team -> Objects.equals(team.getGrade(), "1"));
+        }
+
         for (TeamOverviewVo overviewVo : teamOverviewVos) {
-            overviewVo.setLockGrade(max);
             PartnerUser partnerUser = userMap.get(Integer.valueOf(overviewVo.getGrade()));
-            switch (overviewVo.getGrade()){
-                case "1":
-                    overviewVo.setVo1(baseMapper.selectStatistics(overviewVo.getGrade(), params));
-                    break;
-                case "2":
-                    overviewVo.setVo2(baseMapper.selectStatistics(overviewVo.getGrade(), params));
-                    break;
-                case "3":
-                    overviewVo.setVo3(baseMapper.selectStatistics(overviewVo.getGrade(), params));
-                    break;
-                case "4":
-                    overviewVo.setVo4(baseMapper.selectStatistics(overviewVo.getGrade(), params));
-                    break;
-            }
-            if (null == partnerUser){
-                overviewVo.setParentStatus("0");
-            }else {
-                if (partnerUser.isIdentityStatus()){
-                    overviewVo.setParentStatus("2");
-                    overviewVo.setLockCommission(liftingRecordService.queryLockCommission(partnerUser.getUserId(),overviewVo.getGrade()));
-                    Long difference = calculateTimeDifference(partnerUser.getUserId(), partnerUser.getGrade());
-                    overviewVo.setZeroDays(difference);
-                    PartnerRuleEntity rule = partnerRuleService.selectByGrade(overviewVo.getGrade());
-                    overviewVo.setFallAmount(rule.getFallAmount());
-                    getRule(overviewVo, partnerUser);
+            if (null != partnerUser){
+                overviewVo.setLockGrade(max);
+                switch (overviewVo.getGrade()){
+                    case "1":
+                        overviewVo.setVo1(baseMapper.selectStatisticsMap(overviewVo.getGrade(), params));
+                        break;
+                    case "2":
+                        overviewVo.setVo2(baseMapper.selectStatisticsMap(overviewVo.getGrade(), params));
+                        break;
+                    case "3":
+                        overviewVo.setVo3(baseMapper.selectStatisticsMap(overviewVo.getGrade(), params));
+                        break;
+                    case "4":
+                        overviewVo.setVo4(baseMapper.selectStatisticsMap(overviewVo.getGrade(), params));
+                        break;
+                }
+                if (null == partnerUser){
+                    overviewVo.setParentStatus("0");
                 }else {
-                    overviewVo.setParentStatus("1");
+                    if (partnerUser.isIdentityStatus()){
+                        overviewVo.setParentStatus("2");
+                        overviewVo.setLockCommission(liftingRecordService.queryLockCommission(partnerUser.getUserId(),overviewVo.getGrade()));
+                        Long difference = calculateTimeDifference(partnerUser.getUserId(), partnerUser.getGrade());
+                        overviewVo.setZeroDays(difference);
+                        PartnerRuleEntity rule = partnerRuleService.selectByGrade(overviewVo.getGrade());
+                        overviewVo.setFallAmount(rule.getFallAmount());
+                        getRule(overviewVo, partnerUser);
+                    }else {
+                        overviewVo.setParentStatus("1");
+                    }
                 }
             }
         }
@@ -396,12 +403,46 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                 ));
 
         List<MyUserLevel> list = getUserLevels(userId, partnerRules, userMap);
-        list.sort((o1, o2) -> Integer.compare(o2.getGrade(), o1.getGrade()));
+        //list.sort((o1, o2) -> Integer.compare(o2.getGrade(), o1.getGrade()));
         return HttpResult.ok(list);
     }
 
+
+    public String proportional(String grade, String userId){
+        if (StringUtils.equals("1", grade)){
+            return "100";
+        }
+        HttpResult<PartnerRuleEntity> httpResult = queryDowngradeTask(grade, userId);
+        PartnerRuleEntity data = httpResult.getData();
+
+        List<PartnerAttribute> strategyArray = data.getRequirement();
+
+        PartnerAttribute yq = strategyArray.get(0);
+
+        BigDecimal min = new BigDecimal(yq.getMin());
+        BigDecimal achieve = new BigDecimal(yq.getAchieve());
+
+        BigDecimal yqPercent = achieve.divide(min, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("0.33"));
+
+        PartnerAttribute bf = strategyArray.get(1);
+        BigDecimal bfMin = new BigDecimal(bf.getMin());
+        BigDecimal bfAchieve = new BigDecimal(bf.getAchieve());
+        BigDecimal bfPercent = bfAchieve.divide(bfMin, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("0.34"));
+
+        PartnerAttribute gr = strategyArray.get(2);
+        BigDecimal grMin = new BigDecimal(gr.getMin());
+        BigDecimal grAchieve = new BigDecimal(gr.getAchieve());
+        BigDecimal grPercent = grAchieve.divide(grMin, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("0.33"));
+
+        BigDecimal multiply = yqPercent.add(bfPercent).add(grPercent).multiply(new BigDecimal("100"));
+
+        return String.valueOf(BigDecimal.ZERO.compareTo(multiply) == 0 ? "0" : multiply.setScale(2, RoundingMode.HALF_UP).toString());
+    }
+
+
+
     @Override
-    public HttpResult queryDowngradeTask(String grade, String userId) {
+    public HttpResult<PartnerRuleEntity> queryDowngradeTask(String grade, String userId) {
         if (StringUtils.equals("1", grade)){
             throw new SystemException("已达到最高身份");
         }
@@ -421,7 +462,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         return getAttribute(partnerRuleEntity,bf, p, ownBf, requirement);
     }
 
-    private HttpResult getAttribute(PartnerRuleEntity partnerRuleEntity, BigDecimal bf, BigDecimal p, BigDecimal ownBf, List<PartnerAttribute> requirement) {
+    private HttpResult<PartnerRuleEntity> getAttribute(PartnerRuleEntity partnerRuleEntity, BigDecimal bf, BigDecimal p, BigDecimal ownBf, List<PartnerAttribute> requirement) {
         requirement.get(0).setAchieve(String.valueOf(p));
         requirement.get(1).setAchieve(null != bf ? bf.toString() : BigDecimal.ZERO.toString());
         requirement.get(2).setAchieve(null != ownBf ? ownBf.toString() : BigDecimal.ZERO.toString());
@@ -473,6 +514,57 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         return HttpResult.ok(map);
     }
 
+    @Override
+    public HttpResult<PartnerPartnerAccount> getHomeWallet(AppHomeParams params) {
+        if (StringUtils.isEmpty(params.getUserId())){
+            return HttpResult.error("用户ID不能为空");
+        }
+        if (StringUtils.isEmpty(params.getGrade())){
+            return HttpResult.error("等级不能为空");
+        }
+        LambdaQueryWrapper<PartnerPartnerAccount> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(PartnerPartnerAccount::getUserId,params.getUserId());
+        lambdaQueryWrapper.eq(PartnerPartnerAccount::getGrade,params.getGrade());
+        //PartnerPartnerAccount account = partnerPartnerAccountMapper.selectOne(lambdaQueryWrapper);
+        PartnerPartnerAccount account = partnerPartnerAccountMapper.selectStatisticalData(params);
+        PartnerUser partnerUser = baseMapper.selectOne(new LambdaQueryWrapper<>(PartnerUser.class).eq(PartnerUser::getUserId, params.getUserId()).eq(PartnerUser::getGrade, params.getGrade()));
+        if (account == null){
+            account = new PartnerPartnerAccount();
+        }else {
+            account.setCashFee(account.getExtractFee().subtract(account.getHistoryFee()));
+            if (partnerUser.isIdentityStatus()){
+                BigDecimal lockCommission = liftingRecordService.queryLockCommission(params.getUserId(), params.getGrade());
+                account.setFreeze(lockCommission);
+                if (null != lockCommission) {
+                    account.setCashFee(account.getCashFee().subtract(lockCommission));
+                }
+            }
+        }
+        return HttpResult.ok(account);
+    }
+
+    @Override
+    public List<Map<String, String>> getUserGradeListMap(String userId) {
+        QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", userId);
+        List<PartnerRuleEntity> ruleEntityList = partnerRuleService.queryAll();
+        List<PartnerUser> partnerUsers = baseMapper.selectList(queryWrapper);
+        List<Map<String,String>> list = new ArrayList<>();
+        for (PartnerRuleEntity ruleEntity : ruleEntityList) {
+            if (ruleEntity.getGrade().equals("5")){
+                continue;
+            }
+            PartnerUser user = partnerUsers.stream().filter(partnerUser -> partnerUser.getGrade().equals(ruleEntity.getGrade())).findAny().orElse(null);
+            HashMap<String, String> map = new HashMap<>();
+            map.put("grade",ruleEntity.getGrade());
+            map.put("userId",userId);
+            map.put("gradeName",ruleEntity.getGradeName());
+            map.put("status",null == user ? "0" : "1");
+            list.add( map);
+        }
+        return list;
+    }
+
 
     private List<MyUserLevel> getUserLevels(String userId, List<PartnerRule> partnerRules, Map<Integer, PartnerUser> userMap) {
         List<MyUserLevel> list = new ArrayList<>();
@@ -481,16 +573,20 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         if (partnerRules == null || userId == null || userMap == null) {
             return list;
         }
-
+        boolean containsKey = userMap.containsKey(1);
         for (PartnerRule rule : partnerRules) {
+            if (!containsKey && rule.getGrade() == 1){
+                continue;
+            }
             Integer grade = rule.getGrade();
             PartnerUser partnerUser = userMap.get(grade);
             MyUserLevel level = createBasicUserLevel(rule);
-
             if (partnerUser == null) {
+                level.setProportional("0");
                 handleUnregisteredUser(userId, userMap, grade, level);
             } else {
                 handleRegisteredUser(userId, partnerUser, level);
+                level.setProportional(proportional(String.valueOf(partnerUser.getGrade()),partnerUser.getUserId()));
             }
 
             list.add(level);
@@ -701,14 +797,6 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                     map.put("data", getPage(page));
                     map.put("total", hashMap);
                     map.put("parentStatus", partnerUser.isIdentityStatus() ? "2" : "1");
-                    BigDecimal lockCommission = null;
-                    Long zeroDays = null;
-                    if (partnerUser.isIdentityStatus()){
-                        lockCommission = accountMapper.selectCashFee(partnerUser.getUserId(), partnerUser.getGrade());
-                        zeroDays = calculateTimeDifference(partnerUser.getUserId(), partnerUser.getGrade());
-                    }
-                    map.put("lockCommission",lockCommission);
-                    map.put("zeroDays",zeroDays);
                     PartnerRuleEntity ruleEntity = partnerRuleService.selectByGrade(overviewVo.getGrade());
                     map.put("fallAmount",ruleEntity.getFallAmount());
                     getRule(overviewVo, partnerUser);
@@ -1379,9 +1467,12 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     }
 
     @Override
-    public PartnerPartnerAccount newGetFee(String userId) {
-        PartnerPartnerAccount account = partnerPartnerAccountMapper.selectByUserId(userId);
-
+    public SysPartnerAccount newGetFee(String userId) {
+        SysPartnerAccount account = sysPartnerAccountMapper.selectFee(userId);
+        if (account == null) {
+            account = new SysPartnerAccount();
+        }
+        //每个身份下锁定的佣金
         List<PartnerUser> partnerUsers = baseMapper.selectList(new LambdaQueryWrapper<>(PartnerUser.class).eq(PartnerUser::getUserId, userId));
         BigDecimal commissionTotal = BigDecimal.ZERO;
         for (PartnerUser user : partnerUsers) {
@@ -1390,7 +1481,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                 commissionTotal = commissionTotal.add(commission);
             }
         }
-        account.setCashFee(account.getCashFee().subtract(commissionTotal));
+        account.setFrozenAmount(null == commissionTotal ? BigDecimal.ZERO : commissionTotal);
         return account;
     }
 

+ 11 - 0
src/main/java/com/ydtech/modules/partner/service/PartnerExtractHistoryService.java

@@ -0,0 +1,11 @@
+package com.ydtech.modules.partner.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.partner.model.PartnerExtractHistory;
+
+public interface PartnerExtractHistoryService extends IService<PartnerExtractHistory> {
+
+    JSONObject queryPage(PartnerExtractHistory extractHistory);
+
+}

+ 4 - 0
src/main/java/com/ydtech/modules/partner/service/PartnerPremiumDetailsService.java

@@ -1,11 +1,15 @@
 package com.ydtech.modules.partner.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ydtech.modules.partner.model.param.PartnerDetailsParam;
 
+import java.util.Map;
+
 public interface PartnerPremiumDetailsService {
 
 
     IPage queryPage(PartnerDetailsParam detailsParam);
 
+    JSONObject queryExpiredLockRecords(PartnerDetailsParam detailsParam);
 }

+ 6 - 2
src/main/java/com/ydtech/modules/partner/service/PartnerUserService.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.partner.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysPartnerAccount;
 import com.ydtech.modules.admin.model.vo.AppUserInfoVo;
 import com.ydtech.modules.partner.model.PartnerPartnerAccount;
 import com.ydtech.modules.partner.model.PartnerUser;
@@ -15,7 +16,6 @@ import com.ydtech.modules.partner.model.vo.RelationalVo;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 
 public interface PartnerUserService extends IService<PartnerUser> {
@@ -67,7 +67,7 @@ public interface PartnerUserService extends IService<PartnerUser> {
 
     PartnerUser selectByUserIdAndGrade(String referrerId, Integer grade);
 
-    PartnerPartnerAccount newGetFee(String userId);
+    SysPartnerAccount newGetFee(String userId);
 
     List<String> getUserGradeList(String userId);
 
@@ -82,4 +82,8 @@ public interface PartnerUserService extends IService<PartnerUser> {
     Integer selectByUserIdMax(String referrerId);
 
     HttpResult selectByIdListData(String id);
+
+    HttpResult<PartnerPartnerAccount> getHomeWallet(AppHomeParams params);
+
+    List<Map<String,String>> getUserGradeListMap(String userId);
 }

+ 8 - 2
src/main/java/com/ydtech/modules/partner/utils/TimedTaskUtils.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import com.ydtech.modules.partner.dao.PartnerExpiredCommissionMapper;
 import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
+import com.ydtech.modules.partner.dao.PartnerPremiumDetailsMapper;
 import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.*;
 import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
@@ -49,6 +50,9 @@ public class TimedTaskUtils {
     @Autowired
     private PartnerExpiredCommissionMapper expiredCommissionMapper;
 
+    @Autowired
+    private PartnerPremiumDetailsMapper premiumDetailsMapper;
+
     @Value("${partner.expireDays}")
     private Integer expireDays;
 
@@ -59,7 +63,7 @@ public class TimedTaskUtils {
     @Scheduled(cron = "0 0 0 * * *")
     public void updateOrderDateNoon() {
         log.info("记录佣金过期定时任务开始执行:{}", expireDays);
-        List<PartnerLiftingRecord> list = liftingRecordService.queryExpireDays(expireDays + 1);
+        List<PartnerLiftingRecord> list = liftingRecordService.queryExpireDays(expireDays);
         for (PartnerLiftingRecord record : list) {
             //清空 当前用户抽成账户表
             PartnerPartnerAccount account = accountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class)
@@ -79,6 +83,8 @@ public class TimedTaskUtils {
                     .eq(PartnerUser::getGrade, record.getOriginalLevel()));
             partnerUser.setIdentityTime(PartnerDateUtils.addDaysToday(new Date(),0));
             partnerUserMapper.updateById(partnerUser);
+            //更新单据状态
+            premiumDetailsMapper.updateAppStatus(record.getOriginalLevel(), record.getUserId(), 2,partnerUser.getIdentityTime());
         }
 
 
@@ -105,7 +111,7 @@ public class TimedTaskUtils {
      * TODO: 更新降级考核时间
      */
     //@XxlJob("checkCommissionExpireTime")
-    @Scheduled(cron = "30 0 0 * * *")
+    @Scheduled(cron = "0 0 0 * * *")
     public void checkCommissionExpireTime() {
         // TODO等级规则
         List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();

+ 36 - 0
src/main/resources/mapper/modules/admin/SysPartnerAccountMapper.xml

@@ -31,4 +31,40 @@
 
     </select>
 
+
+    <select id="selectFee" resultType="com.ydtech.modules.admin.model.SysPartnerAccount">
+        SELECT
+            id,user_id,
+            cash_fee,
+            history_fee,
+            ( SELECT SUM( extract_fee ) FROM partner_partner_account WHERE user_id = sys_partner_account.user_id ) totalAmount,(
+                SELECT
+                    SUM( history_fee )
+                FROM
+                    partner_partner_account
+                WHERE
+                    user_id = sys_partner_account.user_id
+            ) transferAmount ,
+            (
+                SELECT
+                    SUM( expired_amount )
+                FROM
+                    partner_partner_account
+                WHERE
+                    user_id = sys_partner_account.user_id
+            ) expiredAmount ,
+            (
+                SELECT
+                    SUM( cash_fee )
+                FROM
+                    partner_partner_account
+                WHERE
+                    user_id = sys_partner_account.user_id
+            ) unreportedAmount
+        FROM
+            sys_partner_account
+        WHERE
+            user_id = #{userId}
+    </select>
+
 </mapper>

+ 38 - 0
src/main/resources/mapper/modules/partner/PartnerPartnerAccountMapper.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper">
+
+
+    <select id="selectStatisticalData" resultType="com.ydtech.modules.partner.model.PartnerPartnerAccount">
+        SELECT ifnull((
+                   SELECT SUM(sumpremium) FROM partner_premium_details WHERE user_id = #{params.userId} AND source = #{params.grade}
+                           <if test="params.startTime != null and params.endTime != null">
+                               AND DATE(create_time) BETWEEN #{params.startTime} AND #{params.endTime}
+                           </if>
+               ),0) sumPremium,
+                ifnull((
+                           SELECT SUM(extract_fee) FROM partner_premium_details WHERE user_id = #{params.userId} AND source = #{params.grade}
+                                <if test="params.startTime != null and params.endTime != null">
+                                    AND DATE(create_time) BETWEEN #{params.startTime} AND #{params.endTime}
+                                </if>
+                       ),0) extractFee,
+                ifnull((
+                           SELECT SUM(extract_fee) FROM partner_premium_details WHERE user_id = #{params.userId} AND source = #{params.grade} AND app_status = 1
+                                <if test="params.startTime != null and params.endTime != null">
+                                    AND DATE(create_time) BETWEEN #{params.startTime} AND #{params.endTime}
+                                </if>
+                       ),0) freeze,
+                ifnull((
+                           SELECT SUM(extract_fee) FROM partner_premium_details WHERE user_id = #{params.userId} AND source = #{params.grade} AND app_status = 2
+                                <if test="params.startTime != null and params.endTime != null">
+                                    AND DATE(create_time) BETWEEN #{params.startTime} AND #{params.endTime}
+                                </if>
+                       ),0) expired,
+                ifnull((
+                            SELECT SUM(amount) FROM partner_extract_history  WHERE user_id = #{params.userId} AND grade = #{params.grade}
+                            <if test="params.startTime != null and params.endTime != null">
+                                AND DATE(create_time) BETWEEN #{params.startTime} AND #{params.endTime}
+                            </if>
+                        ), 0 ) historyFee
+    </select>
+</mapper>

+ 78 - 14
src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

@@ -93,28 +93,38 @@
     <select id="selectTodayOverview" resultType="com.ydtech.modules.partner.model.vo.TodayOverview">
         SELECT
         ifnull((
-        SELECT COUNT(DISTINCT company_id) FROM partner_premium_details WHERE DATE(create_time) = CURDATE() AND user_id IN
+        SELECT COUNT(DISTINCT company_id) FROM partner_premium_details WHERE  user_id IN
         <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
             #{item}
         </foreach>
-        ),0
-
-        ) numberOrders,
+        <if test="params.startTime != null and params.endTime != null">
+            AND create_time BETWEEN #{params.startTime} AND #{params.endTime}
+        </if>
+        ),0) numberOrders,
         ifnull(
-            (SELECT count(id) FROM partner_user WHERE DATE(create_time) = CURDATE() AND referrer_id = #{params.userId}),0
+            (SELECT count(id) FROM partner_user WHERE  referrer_id = #{params.userId}
+        <if test="params.startTime != null and params.endTime != null">
+            AND create_time BETWEEN #{params.startTime} AND #{params.endTime}
+        </if> ),0
 
         ) addPerNumber,
         ifnull((
             SELECT SUM(db.sumpremium) FROM (SELECT DISTINCT company_id,sumpremium  FROM partner_premium_details
-            WHERE DATE(create_time) = CURDATE() AND  user_id IN
+            WHERE user_id IN
             <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
+        <if test="params.startTime != null and params.endTime != null">
+            AND create_time BETWEEN #{params.startTime} AND #{params.endTime}
+        </if>
             ) db
             ),0
         ) premium,
         ifnull(
-            (SELECT SUM(extract_fee) FROM partner_premium_details where DATE(create_time) = CURDATE() AND user_id  = #{params.userId}),0
+            (SELECT SUM(extract_fee) FROM partner_premium_details where  user_id  = #{params.userId}
+        <if test="params.startTime != null and params.endTime != null">
+            AND create_time BETWEEN #{params.startTime} AND #{params.endTime}
+        </if> ),0
         ) commission
 
     </select>
@@ -142,13 +152,63 @@ SELECT
 
     <select id="selectTeamOverview" resultMap="homeVo">
         SELECT
-            r.grade,
-            r.grade_name
+            grade,
+            grade_name
         FROM
-            partner_user u
-                LEFT JOIN partner_rule r ON u.grade = r.grade
-        WHERE
-            user_id = #{params.userId}
+            partner_rule where grade != 5
+    </select>
+
+
+    <select id="selectStatisticsMap" resultType="java.util.Map">
+        SELECT
+            ifnull(
+                    (
+                        SELECT COUNT( p.id) FROM partner_user p LEFT JOIN sys_user u ON u.id = p.user_id WHERE u.STATUS = 1 AND p.referrer_id = #{params.userId} AND p.grade = (#{grade} + 1)
+        <if test="params.startTime != null and params.endTime != null">
+            and DATE(p.create_time) BETWEEN #{params.startTime} AND #{params.endTime}
+        </if>
+                    ),0
+            ) v1,
+            ifnull(
+                    ( SELECT COUNT(p.id) FROM partner_user p LEFT JOIN sys_user u ON u.id = p.user_id WHERE u.`status` = 1 AND grade = (#{grade} + 2 )
+                        AND p.referrer_id IN( SELECT user_id FROM partner_user WHERE referrer_id = #{params.userId} AND grade = (#{grade} + 1) )
+        <if test="params.startTime != null and params.endTime != null">
+            and DATE(p.create_time) BETWEEN #{params.startTime} AND #{params.endTime}
+        </if>
+                    ),0
+            ) v2,
+            ifnull(
+                    ( SELECT
+                          COUNT( p.id )
+                      FROM
+                          partner_user p
+                              LEFT JOIN sys_user u ON u.id = p.user_id
+                      WHERE
+                          u.STATUS = 1
+                        AND p.referrer_id = #{params.userId}
+                        AND p.grade = (#{grade} + 1)
+                        AND to_days(p.create_time) = to_days(now()) ),0
+            ) v3,
+            ifnull(
+                    (SELECT
+                         COUNT(u1.id)
+                     FROM
+                         partner_user u1
+                             LEFT JOIN sys_user u ON u.id = u1.user_id
+                     WHERE
+                         u.`status` = 1 and  u1.grade = (#{grade} + 2) AND to_days(u1.create_time) = to_days(now())  AND
+                         u1.referrer_id IN (
+                             SELECT
+                                 u.user_id
+                             FROM
+                                 partner_user u
+                                     LEFT JOIN sys_user t ON t.id = u.user_id
+                             WHERE
+                                 t.`status` = 1 AND
+                                 u.grade = (#{grade} + 1)
+                               AND u.referrer_id = #{params.userId}
+                         )),0
+            ) v4
     </select>
 
 
@@ -757,7 +817,8 @@ SELECT
             extract_fee commission,
             create_time issuanceTime,
             source,
-            user_id userId
+            user_id userId,
+            app_status appStatus
         FROM
             partner_premium_details
         WHERE
@@ -765,6 +826,9 @@ SELECT
             <if test="map.startTime != '' and map.startTime != null">
                 and DATE(create_time) BETWEEN #{map.startTime} AND #{map.endTime}
             </if>
+            <if test="map.appStatus != null">
+                and app_status = #{map.appStatus}
+            </if>
     </select>