|
|
@@ -0,0 +1,515 @@
|
|
|
+package com.jzg.organization.service.impl;
|
|
|
+
|
|
|
+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.jzg.commons.core.base.BaseController;
|
|
|
+import com.jzg.commons.core.page.HttpResult;
|
|
|
+import com.jzg.commons.entity.dto.InsFeeOrdersParam;
|
|
|
+import com.jzg.commons.entity.po.*;
|
|
|
+import com.jzg.commons.entity.vo.*;
|
|
|
+import com.jzg.commons.exception.SystemException;
|
|
|
+import com.jzg.commons.util.EasyExcelUtils;
|
|
|
+import com.jzg.commons.util.ServletUtils;
|
|
|
+import com.jzg.organization.client.QuoteClient;
|
|
|
+import com.jzg.organization.mapper.SysDistributionAuditMapper;
|
|
|
+import com.jzg.organization.mapper.SysDistributionSettingMapper;
|
|
|
+import com.jzg.organization.mapper.SysUserJzgInfoMapper;
|
|
|
+import com.jzg.organization.service.*;
|
|
|
+import jakarta.annotation.Resource;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author quchen
|
|
|
+ * @date 2025/8/6 11:42
|
|
|
+ */
|
|
|
+
|
|
|
+@Service
|
|
|
+public class SysDistributionSettingServiceImpl extends ServiceImpl<SysDistributionSettingMapper, SysDistributionSetting> implements SysDistributionSettingService {
|
|
|
+ @Resource
|
|
|
+ private SysDistributionSettingMapper sysDistributionSettingMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private BaseController baseController;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SysDistributionAuditService sysDistributionAuditService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SysUserJzgInfoMapper sysUserJzgInfoMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SysDeptService sysDeptService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SysUserService sysUserService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EsmUserReferrerService esmUserReferrerService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SysDistributionAuditMapper sysDistributionAuditMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private QuoteClient quoteClient;
|
|
|
+ public HttpResult getSettingBySystemCode() {
|
|
|
+ SysDistributionSetting sysDistributionSetting = sysDistributionSettingMapper
|
|
|
+ .selectOne(new LambdaQueryWrapper<SysDistributionSetting>().eq(SysDistributionSetting::getSystemCode, baseController.getUserSystemCode()));
|
|
|
+ if (sysDistributionSetting == null) {
|
|
|
+ return HttpResult.error("该租户未开启分销权限");
|
|
|
+ }
|
|
|
+ List<SysDept> sysDeptList = sysDeptService.list(new LambdaQueryWrapper<SysDept>().eq(SysDept::getIsDistribution, "0").eq(SysDept::getSystemCode, baseController.getUserSystemCode()));
|
|
|
+ sysDistributionSetting.setExcludeDept(sysDeptList);
|
|
|
+ return HttpResult.ok(sysDistributionSetting);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult saveSetting(SysDistributionSettingVo sysDistributionSettingVo) {
|
|
|
+ SysDistributionSetting sysDistributionSetting = sysDistributionSettingMapper
|
|
|
+ .selectOne(new LambdaQueryWrapper<SysDistributionSetting>()
|
|
|
+ .eq(SysDistributionSetting::getSystemCode, baseController.getUserSystemCode()));
|
|
|
+ if (sysDistributionSetting == null) {
|
|
|
+ sysDistributionSetting = new SysDistributionSetting();
|
|
|
+ BeanUtils.copyProperties(sysDistributionSettingVo, sysDistributionSetting);
|
|
|
+ sysDistributionSettingMapper.insert(sysDistributionSetting);
|
|
|
+ } else {
|
|
|
+ BeanUtils.copyProperties(sysDistributionSettingVo, sysDistributionSetting);
|
|
|
+ sysDistributionSettingMapper.updateById(sysDistributionSetting);
|
|
|
+ }
|
|
|
+ if (sysDistributionSettingVo.getExcludeDeptScope().equals("2")) {
|
|
|
+ List<SysDept> sysDeptList = sysDeptService.listByIds(sysDistributionSettingVo.getExcludeDeptIds());
|
|
|
+ sysDeptList.forEach(item->{
|
|
|
+ item.setIsDistribution("0"); //设置不参与分销机构
|
|
|
+ });
|
|
|
+ sysDeptService.updateBatchById(sysDeptList);
|
|
|
+ }
|
|
|
+ return HttpResult.ok("保存成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult updateSetting(SysDistributionSettingVo sysDistributionSettingVo) {
|
|
|
+ SysDistributionSetting sysDistributionSetting = sysDistributionSettingMapper.selectById(sysDistributionSettingVo.getId());
|
|
|
+ if (sysDistributionSetting == null) {
|
|
|
+ return HttpResult.error("该分销设置不存在");
|
|
|
+ }
|
|
|
+ BeanUtils.copyProperties(sysDistributionSettingVo, sysDistributionSetting);
|
|
|
+ sysDistributionSettingMapper.updateById(sysDistributionSetting);
|
|
|
+ if (sysDistributionSettingVo.getExcludeDeptScope().equals("2")) {
|
|
|
+ List<SysDept> sysDeptList = sysDeptService.listByIds(sysDistributionSettingVo.getExcludeDeptIds());
|
|
|
+ sysDeptList.forEach(item -> {
|
|
|
+ item.setIsDistribution("0"); //设置不参与分销机构
|
|
|
+ });
|
|
|
+ sysDeptService.updateBatchById(sysDeptList);
|
|
|
+ }
|
|
|
+ return HttpResult.ok("修改成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<SysDistributionAuditListVo> distributorAuditList(Page page, SysDistributionAuditVo sysDistributionAuditVo) {
|
|
|
+ return sysDistributionSettingMapper.distributorAuditList(page,sysDistributionAuditVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<SysDistributionListVo> distributorList(Page page, SysDistributionListVo sysDistributionListVo) {
|
|
|
+ Page<SysDistributionListVo> pageResult = sysDistributionSettingMapper.distributorList(page,sysDistributionListVo);
|
|
|
+ pageResult.getRecords().forEach(item->{
|
|
|
+ // 初始化保费
|
|
|
+ BigDecimal totalPremium = BigDecimal.ZERO;
|
|
|
+ // 初始化佣金
|
|
|
+ BigDecimal totalFee = BigDecimal.ZERO;
|
|
|
+ // 查询当前关联分销订单
|
|
|
+ InsFeeOrdersParam param = new InsFeeOrdersParam();
|
|
|
+ param.setUserId(item.getId());
|
|
|
+ List<InsFeeOrders> insFeeOrdersList = quoteClient.getInsFeeOrdersList(param);
|
|
|
+ for (InsFeeOrders feeOrder : insFeeOrdersList) {
|
|
|
+ // 累计保费
|
|
|
+ totalPremium = totalPremium.add(feeOrder.getTotalPremium());
|
|
|
+ if (item.getId().equals(feeOrder.getFirstDistributorId())) {
|
|
|
+ // 如果是一级分销,累加一级分销费
|
|
|
+ BigDecimal fee = feeOrder.getFirstDistributionFee() != null ? feeOrder.getFirstDistributionFee() : BigDecimal.ZERO;
|
|
|
+ totalFee = totalFee.add(fee);
|
|
|
+ } else if (item.getId().equals(feeOrder.getSecondDistributorId())) {
|
|
|
+ // 如果是二级分销,累加二级分销费
|
|
|
+ BigDecimal fee = feeOrder.getSecondDistributionFee() != null ? feeOrder.getSecondDistributionFee() : BigDecimal.ZERO;
|
|
|
+ totalFee = totalFee.add(fee);
|
|
|
+ } else if (item.getId().equals(feeOrder.getThirdDistributorId())) {
|
|
|
+ // 如果是三级分销,累加三级分销费
|
|
|
+ BigDecimal fee = feeOrder.getThirdDistributionFee() != null ? feeOrder.getThirdDistributionFee() : BigDecimal.ZERO;
|
|
|
+ totalFee = totalFee.add(fee);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ long esmUserReferrerCount = esmUserReferrerService.count(new LambdaQueryWrapper<EsmUserReferrer>().eq(EsmUserReferrer::getReferrerId, item.getId()));
|
|
|
+ item.setTotalInvite(esmUserReferrerCount);
|
|
|
+ item.setTotalPremium(totalPremium);
|
|
|
+ item.setTotalFee(totalFee);
|
|
|
+ });
|
|
|
+ return pageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult distributorAudit(SysDistributionAuditVo sysDistributionAuditVo) {
|
|
|
+ SysDistributionAudit sysDistributionAudit = sysDistributionAuditService.getById(sysDistributionAuditVo.getId());
|
|
|
+ if (sysDistributionAudit == null) {
|
|
|
+ throw new SystemException("该审核数据不存在");
|
|
|
+ }
|
|
|
+ if (!"0".equals(sysDistributionAudit.getAuditStatus())) {
|
|
|
+ throw new SystemException("该审核数据已审核");
|
|
|
+ }
|
|
|
+ sysDistributionAudit.setAuditStatus(sysDistributionAuditVo.getAuditStatus());
|
|
|
+ sysDistributionAudit.setAuditTime(LocalDateTime.now());
|
|
|
+ sysDistributionAudit.setAuditBy(baseController.getUserName());
|
|
|
+ sysDistributionAudit.setRemark(sysDistributionAuditVo.getRemark());
|
|
|
+ SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoMapper.selectById(sysDistributionAudit.getSysUserJzgInfoId());
|
|
|
+ if ("1".equals(sysDistributionAuditVo.getAuditStatus())) {
|
|
|
+ // 审核通过 改为分销员身份
|
|
|
+ sysDistributionAudit.setAuditApprovalTime(LocalDateTime.now());
|
|
|
+ sysUserJzgInfo.setIsDistribution("1");
|
|
|
+ sysUserJzgInfoMapper.updateById(sysUserJzgInfo);
|
|
|
+ // 添加分销推荐关系
|
|
|
+ SysUserJzgInfo inviter = sysUserJzgInfoMapper.selectById(sysUserJzgInfo.getReferrerId());
|
|
|
+ EsmUserReferrer esmUserReferrer = new EsmUserReferrer(sysUserJzgInfo, inviter);
|
|
|
+ esmUserReferrerService.save(esmUserReferrer);
|
|
|
+ }
|
|
|
+ if ("2".equals(sysDistributionAuditVo.getAuditStatus())) {
|
|
|
+ // 驳回
|
|
|
+ sysUserJzgInfo.setIsDistribution("0");
|
|
|
+ sysUserJzgInfoMapper.updateById(sysUserJzgInfo);
|
|
|
+ }
|
|
|
+ sysDistributionAuditService.updateById(sysDistributionAudit);
|
|
|
+ return HttpResult.ok("审核成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<DistributionCommissionDetailVo> commissionDetails(Page page, DistributionCommissionDetailVo distributionCommissionDetailVo) {
|
|
|
+ return sysDistributionSettingMapper.commissionDetails(page,distributionCommissionDetailVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void exportCommissionDetailsExcel(Page page, DistributionCommissionDetailVo distributionCommissionDetailVo) {
|
|
|
+ Page<DistributionCommissionDetailVo> pageResult = sysDistributionSettingMapper.commissionDetails(page,distributionCommissionDetailVo);
|
|
|
+ pageResult.getRecords().forEach(item->{
|
|
|
+ if (item.getDistributionLevel().equals("1")) {
|
|
|
+ item.setDistributionLevel("一级分销");
|
|
|
+ }
|
|
|
+ if (item.getDistributionLevel().equals("2")) {
|
|
|
+ item.setDistributionLevel("二级分销");
|
|
|
+ }
|
|
|
+ if (item.getDistributionLevel().equals("3")) {
|
|
|
+ item.setDistributionLevel("三级分销");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ List<DistributionCommissionDetailVo> list = pageResult.getRecords();
|
|
|
+ EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), DistributionCommissionDetailVo.class, list, "分销佣金明细");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult distributionCenter(DistributionCenterVo distributionCenterVo) {
|
|
|
+ // 获取个人分销中心信息
|
|
|
+ String mobile = baseController.getUserName();
|
|
|
+ String systemCode = baseController.getAppSystemCode();
|
|
|
+ SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getMobile, mobile));
|
|
|
+ SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoMapper
|
|
|
+ .selectOne(new LambdaQueryWrapper<SysUserJzgInfo>().eq(SysUserJzgInfo::getUserId, sysUser.getId()).eq(SysUserJzgInfo::getSystemCode, systemCode));
|
|
|
+ SysDistributionAudit sysDistributionAudit = sysDistributionAuditService.getOne(new LambdaQueryWrapper<SysDistributionAudit>().eq(SysDistributionAudit::getSysUserJzgInfoId, sysUserJzgInfo.getId()));
|
|
|
+ DistributionCenterVo resultVo = new DistributionCenterVo();
|
|
|
+ resultVo.setName(sysUserJzgInfo.getName());
|
|
|
+ // 查询当前关联分销订单
|
|
|
+ InsFeeOrdersParam param = new InsFeeOrdersParam();
|
|
|
+ param.setDistributorId(sysUserJzgInfo.getId());
|
|
|
+ List<InsFeeOrders> insFeeOrdersList = quoteClient.getInsFeeOrdersList(param);
|
|
|
+ // 查询未审核的分销订单
|
|
|
+ List<InsFeeOrders> insFeeOrdersAudit = quoteClient.getInsFeeOrderAudit(sysUserJzgInfo.getId());
|
|
|
+ // 初始化保费
|
|
|
+ BigDecimal totalPremium = BigDecimal.ZERO;
|
|
|
+ // 初始化今日保费
|
|
|
+ BigDecimal todayPremium = BigDecimal.ZERO;
|
|
|
+ // 初始化累计佣金
|
|
|
+ BigDecimal totalFee = BigDecimal.ZERO;
|
|
|
+ // 初始化待结算佣金
|
|
|
+ BigDecimal pendingAmount = BigDecimal.ZERO;
|
|
|
+ // 初始化一级佣金收益
|
|
|
+ BigDecimal firstLevelCommission = BigDecimal.ZERO;
|
|
|
+ // 初始化二级佣金收益
|
|
|
+ BigDecimal secondLevelCommission = BigDecimal.ZERO;
|
|
|
+ // 初始化三级佣金收益
|
|
|
+ BigDecimal thirdLevelCommission = BigDecimal.ZERO;
|
|
|
+ // 初始化当日一级佣金收益
|
|
|
+ BigDecimal firstLevelCommissionToday = BigDecimal.ZERO;
|
|
|
+ // 初始化当日二级佣金收益
|
|
|
+ BigDecimal secondLevelCommissionToday = BigDecimal.ZERO;
|
|
|
+ // 初始化三级佣金收益
|
|
|
+ BigDecimal thirdLevelCommissionToday = BigDecimal.ZERO;
|
|
|
+ // 初始化当日分销订单数
|
|
|
+ int orderCountToday = 0;
|
|
|
+ // 获取当日时间
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+ for (InsFeeOrders feeOrder : insFeeOrdersList) {
|
|
|
+ // 累计保费
|
|
|
+ totalPremium = totalPremium.add(feeOrder.getTotalPremium());
|
|
|
+ if (sysUserJzgInfo.getId().equals(feeOrder.getFirstDistributorId())) {
|
|
|
+ // 如果是一级分销,累加一级分销费
|
|
|
+ BigDecimal fee = feeOrder.getFirstDistributionFee() != null ? feeOrder.getFirstDistributionFee() : BigDecimal.ZERO;
|
|
|
+ totalFee = totalFee.add(fee);
|
|
|
+ firstLevelCommission = firstLevelCommission.add(fee);
|
|
|
+ } else if (sysUserJzgInfo.getId().equals(feeOrder.getSecondDistributorId())) {
|
|
|
+ // 如果是二级分销,累加二级分销费
|
|
|
+ BigDecimal fee = feeOrder.getSecondDistributionFee() != null ? feeOrder.getSecondDistributionFee() : BigDecimal.ZERO;
|
|
|
+ totalFee = totalFee.add(fee);
|
|
|
+ secondLevelCommission = secondLevelCommission.add(fee);
|
|
|
+ } else if (sysUserJzgInfo.getId().equals(feeOrder.getThirdDistributorId())) {
|
|
|
+ // 如果是三级分销,累加三级分销费
|
|
|
+ BigDecimal fee = feeOrder.getThirdDistributionFee() != null ? feeOrder.getThirdDistributionFee() : BigDecimal.ZERO;
|
|
|
+ totalFee = totalFee.add(fee);
|
|
|
+ thirdLevelCommission = thirdLevelCommission.add(fee);
|
|
|
+ }
|
|
|
+ // 处理当日统计
|
|
|
+ LocalDateTime signingTime = feeOrder.getSigningTime();
|
|
|
+ if (signingTime != null) {
|
|
|
+ LocalDate signingDate = signingTime.toLocalDate();
|
|
|
+ if (today.equals(signingDate)) {
|
|
|
+ todayPremium = todayPremium.add(feeOrder.getTotalPremium());
|
|
|
+ orderCountToday++; // 当日订单数+1
|
|
|
+ if (sysUserJzgInfo.getId().equals(feeOrder.getFirstDistributorId())) {
|
|
|
+ firstLevelCommissionToday = firstLevelCommissionToday.add(feeOrder.getFirstDistributionFee());
|
|
|
+ } else if (sysUserJzgInfo.getId().equals(feeOrder.getSecondDistributorId())) {
|
|
|
+ secondLevelCommissionToday = secondLevelCommissionToday.add(feeOrder.getSecondDistributionFee());
|
|
|
+ } else if (sysUserJzgInfo.getId().equals(feeOrder.getThirdDistributorId())) {
|
|
|
+ thirdLevelCommissionToday = thirdLevelCommissionToday.add(feeOrder.getThirdDistributionFee());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (InsFeeOrders feeOrder : insFeeOrdersAudit) {
|
|
|
+ if (sysUserJzgInfo.getId().equals(feeOrder.getFirstDistributorId())) {
|
|
|
+ // 如果是一级分销,累加一级分销费
|
|
|
+ BigDecimal fee = feeOrder.getFirstDistributionFee() != null ? feeOrder.getFirstDistributionFee() : BigDecimal.ZERO;
|
|
|
+ pendingAmount = pendingAmount.add(fee);
|
|
|
+ } else if (sysUserJzgInfo.getId().equals(feeOrder.getSecondDistributorId())) {
|
|
|
+ // 如果是二级分销,累加二级分销费
|
|
|
+ BigDecimal fee = feeOrder.getSecondDistributionFee() != null ? feeOrder.getSecondDistributionFee() : BigDecimal.ZERO;
|
|
|
+ pendingAmount = pendingAmount.add(fee);
|
|
|
+ } else if (sysUserJzgInfo.getId().equals(feeOrder.getThirdDistributorId())) {
|
|
|
+ // 如果是三级分销,累加三级分销费
|
|
|
+ BigDecimal fee = feeOrder.getThirdDistributionFee() != null ? feeOrder.getThirdDistributionFee() : BigDecimal.ZERO;
|
|
|
+ pendingAmount = pendingAmount.add(fee);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultVo.setAuditApprovalTime(sysDistributionAudit.getAuditApprovalTime());
|
|
|
+ resultVo.setTotalAmount(totalFee); // 累计佣金
|
|
|
+ resultVo.setPendingAmount(pendingAmount); // 待结算佣金
|
|
|
+ resultVo.setTotalPremium(totalPremium); // 累计保费
|
|
|
+ resultVo.setTodayPremium(todayPremium); // 当日保费
|
|
|
+ resultVo.setFirstLevelCommission(firstLevelCommission); // 一级佣金收益
|
|
|
+ resultVo.setSecondLevelCommission(secondLevelCommission); // 二级佣金收益
|
|
|
+ resultVo.setThirdLevelCommission(thirdLevelCommission); // 三级佣金收益
|
|
|
+ resultVo.setDistributionOrderNum(insFeeOrdersList.size()); // 分销订单数
|
|
|
+ resultVo.setTodayDistributionOrderNum(orderCountToday); // 当日分销订单数
|
|
|
+ resultVo.setTodayFirstLevelCommission(firstLevelCommissionToday); // 当日一级佣金收益
|
|
|
+ resultVo.setTodaySecondLevelCommission(secondLevelCommissionToday); // 当日二级佣金收益
|
|
|
+ resultVo.setTodayThirdLevelCommission(thirdLevelCommissionToday); // 当日三级佣金收益
|
|
|
+ // 获取租户分销等级
|
|
|
+ SysDistributionSetting sysDistributionSetting = sysDistributionSettingMapper.selectOne(new LambdaQueryWrapper<SysDistributionSetting>().eq(SysDistributionSetting::getSystemCode, systemCode));
|
|
|
+ // 存储团队人数
|
|
|
+ Set<String> teamIds = new HashSet<>();
|
|
|
+ // 存储当日新增团队成员
|
|
|
+ Set<String> todayNewTeamIds = new HashSet<>();
|
|
|
+ // 获取今天的起始和结束时间(用于筛选当日审核通过的记录)
|
|
|
+ LocalDateTime todayStart = LocalDate.now().atStartOfDay();
|
|
|
+ LocalDateTime todayEnd = LocalDate.now().plusDays(1).atStartOfDay();
|
|
|
+
|
|
|
+ String mode = sysDistributionSetting.getDistributionMode();
|
|
|
+
|
|
|
+ // 根据分销模式查询对应层级的团队成员
|
|
|
+ if ("1".equals(mode)) {
|
|
|
+ // 只查1级推荐
|
|
|
+ collectTeam(teamIds,todayNewTeamIds, sysUserJzgInfo.getId(), 1, esmUserReferrerService, todayStart, todayEnd, sysDistributionAuditMapper);
|
|
|
+ } else if ("2".equals(mode)) {
|
|
|
+ // 查1级 2级推荐
|
|
|
+ collectTeam(teamIds,todayNewTeamIds, sysUserJzgInfo.getId(), 2, esmUserReferrerService, todayStart, todayEnd, sysDistributionAuditMapper);
|
|
|
+ } else if ("3".equals(mode)) {
|
|
|
+ // 查1级 2级 3级推荐
|
|
|
+ collectTeam(teamIds,todayNewTeamIds, sysUserJzgInfo.getId(), 3, esmUserReferrerService, todayStart, todayEnd, sysDistributionAuditMapper);
|
|
|
+ }
|
|
|
+ resultVo.setTeamNum(teamIds.size()); // 团队人数
|
|
|
+ resultVo.setTodayNewNum(todayNewTeamIds.size()); // 当日新增团队成员数
|
|
|
+ return HttpResult.ok(resultVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void collectTeam(Set<String> teamIds,Set<String> todayNewTeamIds, String referrerId,
|
|
|
+ int remainingLevel, EsmUserReferrerService esmUserReferrerService,
|
|
|
+ LocalDateTime todayStart, LocalDateTime todayEnd,
|
|
|
+ SysDistributionAuditMapper sysDistributionAuditMapper) {
|
|
|
+
|
|
|
+ // 剩余层级为0时停止查询
|
|
|
+ if (remainingLevel <= 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 查询当前推荐人直接推荐的用户(下一级)
|
|
|
+ List<String> nextLevelUserIds = esmUserReferrerService.listObjs(
|
|
|
+ new LambdaQueryWrapper<EsmUserReferrer>()
|
|
|
+ .eq(EsmUserReferrer::getReferrerId, referrerId)
|
|
|
+ .select(EsmUserReferrer::getId),
|
|
|
+ userId -> userId != null ? userId.toString() : null
|
|
|
+ );
|
|
|
+ if (nextLevelUserIds == null || nextLevelUserIds.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (String userId : nextLevelUserIds) {
|
|
|
+ // 查询该用户的审核记录,判断是否通过
|
|
|
+ Long count = sysDistributionAuditMapper.selectCount(
|
|
|
+ new LambdaQueryWrapper<SysDistributionAudit>()
|
|
|
+ .eq(SysDistributionAudit::getSysUserJzgInfoId, userId) // 假设关联用户ID的字段是userId
|
|
|
+ .eq(SysDistributionAudit::getAuditStatus, "1")
|
|
|
+ );
|
|
|
+ if (count != null && count > 0) {
|
|
|
+ // 将当前层级的用户加入团队
|
|
|
+ teamIds.add(userId);
|
|
|
+ }
|
|
|
+ // 查询该用户的审核记录,判断是否今日通过
|
|
|
+ Long countToday = sysDistributionAuditMapper.selectCount(
|
|
|
+ new LambdaQueryWrapper<SysDistributionAudit>()
|
|
|
+ .eq(SysDistributionAudit::getSysUserJzgInfoId, userId) // 假设关联用户ID的字段是userId
|
|
|
+ .ge(SysDistributionAudit::getAuditApprovalTime, todayStart)
|
|
|
+ .lt(SysDistributionAudit::getAuditApprovalTime, todayEnd)
|
|
|
+ );
|
|
|
+ // 如果今日有审核通过记录 为当日新增
|
|
|
+ if (countToday != null && countToday > 0) {
|
|
|
+ todayNewTeamIds.add(userId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 递归查询下一级
|
|
|
+ remainingLevel--;
|
|
|
+ for (String userId : nextLevelUserIds) {
|
|
|
+ collectTeam(teamIds,todayNewTeamIds,userId, remainingLevel, esmUserReferrerService,todayStart, todayEnd, sysDistributionAuditMapper);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DistributionTeamVo> distributionTeam() {
|
|
|
+ // 获取个人分销中心信息
|
|
|
+ String mobile = baseController.getUserName();
|
|
|
+ String systemCode = baseController.getAppSystemCode();
|
|
|
+ SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getMobile, mobile));
|
|
|
+ SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoMapper
|
|
|
+ .selectOne(new LambdaQueryWrapper<SysUserJzgInfo>().eq(SysUserJzgInfo::getUserId, sysUser.getId()).eq(SysUserJzgInfo::getSystemCode, systemCode));
|
|
|
+ // 获取租户分销等级
|
|
|
+ SysDistributionSetting sysDistributionSetting = sysDistributionSettingMapper.selectOne(new LambdaQueryWrapper<SysDistributionSetting>().eq(SysDistributionSetting::getSystemCode, systemCode));
|
|
|
+ // 根据分销模式查询对应层级的团队成员
|
|
|
+ String mode = sysDistributionSetting.getDistributionMode();
|
|
|
+ int maxLevel = 0;
|
|
|
+ switch (mode) {
|
|
|
+ case "1":
|
|
|
+ maxLevel = 1;
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ maxLevel = 2;
|
|
|
+ break;
|
|
|
+ case "3":
|
|
|
+ maxLevel = 3;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ List<DistributionTeamVo> distributionTeam = sysDistributionSettingMapper.distributionTeam(sysUserJzgInfo.getId(), maxLevel);
|
|
|
+ distributionTeam.forEach(team -> {
|
|
|
+ // 初始化贡献佣金
|
|
|
+ BigDecimal commission = BigDecimal.ZERO;
|
|
|
+ List<InsFeeOrders> insFeeOrders = quoteClient.getInsFeeOrderListByTopReferrerIdAndUserId(team.getId(),sysUserJzgInfo.getId());
|
|
|
+ for (InsFeeOrders insFeeOrder : insFeeOrders) {
|
|
|
+ if (insFeeOrder.getFirstDistributorId() != null && insFeeOrder.getFirstDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getFirstDistributionFee());
|
|
|
+ }
|
|
|
+ if (insFeeOrder.getSecondDistributorId() != null && insFeeOrder.getSecondDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getSecondDistributionFee());
|
|
|
+ }
|
|
|
+ if (insFeeOrder.getThirdDistributorId() != null && insFeeOrder.getThirdDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getThirdDistributionFee());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ team.setCommission(commission);
|
|
|
+ });
|
|
|
+ return distributionTeam;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DistributionOrderVo getDistributionOrder(DistributionOrderVo distributionOrderVo) {
|
|
|
+ String mobile = baseController.getUserName();
|
|
|
+ String systemCode = baseController.getAppSystemCode();
|
|
|
+ SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getMobile, mobile));
|
|
|
+ SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoMapper
|
|
|
+ .selectOne(new LambdaQueryWrapper<SysUserJzgInfo>().eq(SysUserJzgInfo::getUserId, sysUser.getId()).eq(SysUserJzgInfo::getSystemCode, systemCode));
|
|
|
+ List<DistributionOrder> distributionOrder = sysDistributionSettingMapper.getDistributionOrder(distributionOrderVo);
|
|
|
+ // 初始化佣金总和
|
|
|
+ BigDecimal commissionSum = BigDecimal.ZERO;
|
|
|
+ // 初始化保费总和
|
|
|
+ BigDecimal premiumSum = BigDecimal.ZERO;
|
|
|
+ for (DistributionOrder orderVo : distributionOrder){
|
|
|
+ // 初始化贡献佣金
|
|
|
+ BigDecimal commission = BigDecimal.ZERO;
|
|
|
+ List<InsFeeOrders> insFeeOrders = quoteClient.getInsFeeOrderByOrderNo(orderVo.getOrderNo());
|
|
|
+ for (InsFeeOrders insFeeOrder : insFeeOrders) {
|
|
|
+ if (insFeeOrder.getFirstDistributorId() != null && insFeeOrder.getFirstDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getFirstDistributionFee());
|
|
|
+ }
|
|
|
+ if (insFeeOrder.getSecondDistributorId() != null && insFeeOrder.getSecondDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getSecondDistributionFee());
|
|
|
+ }
|
|
|
+ if (insFeeOrder.getThirdDistributorId() != null && insFeeOrder.getThirdDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getThirdDistributionFee());
|
|
|
+ }
|
|
|
+ premiumSum = premiumSum.add(insFeeOrder.getTotalPremium());
|
|
|
+ }
|
|
|
+ orderVo.setCommission(commission);
|
|
|
+ // 累加至总佣金(使用getAndUpdate原子操作)
|
|
|
+ commissionSum = commissionSum.add(commission);
|
|
|
+
|
|
|
+ };
|
|
|
+ distributionOrderVo.setCommissionSum(commissionSum);
|
|
|
+ distributionOrderVo.setDistributionOrders(distributionOrder);
|
|
|
+ distributionOrderVo.setOrderCount(distributionOrder.size());
|
|
|
+ distributionOrderVo.setPremiumSum(premiumSum);
|
|
|
+ return distributionOrderVo;
|
|
|
+ }
|
|
|
+
|
|
|
+// @Override
|
|
|
+// public List<DistributionOrder> getDistributionOrderByLevel(DistributionOrderVo distributionOrderVo) {
|
|
|
+// return sysDistributionSettingMapper.getDistributionOrderByLevel(distributionOrderVo);
|
|
|
+// }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DistributionTeamVo> inviteeDistributor(String id,String level) {
|
|
|
+ // 获取个人分销中心信息
|
|
|
+ String mobile = baseController.getUserName();
|
|
|
+ String systemCode = baseController.getAppSystemCode();
|
|
|
+ SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getMobile, mobile));
|
|
|
+ SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoMapper
|
|
|
+ .selectOne(new LambdaQueryWrapper<SysUserJzgInfo>().eq(SysUserJzgInfo::getUserId, sysUser.getId()).eq(SysUserJzgInfo::getSystemCode, systemCode));
|
|
|
+ List<DistributionTeamVo> distributionTeam = sysDistributionSettingMapper.inviteeDistributor(id, level);
|
|
|
+ distributionTeam.forEach(team -> {
|
|
|
+ // 初始化贡献佣金
|
|
|
+ BigDecimal commission = BigDecimal.ZERO;
|
|
|
+ List<InsFeeOrders> insFeeOrders = quoteClient.getInsFeeOrderListByTopReferrerIdAndUserId(team.getId(),sysUserJzgInfo.getId());
|
|
|
+ for (InsFeeOrders insFeeOrder : insFeeOrders) {
|
|
|
+ if (insFeeOrder.getFirstDistributorId() != null && insFeeOrder.getFirstDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getFirstDistributionFee());
|
|
|
+ }
|
|
|
+ if (insFeeOrder.getSecondDistributorId() != null && insFeeOrder.getSecondDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getSecondDistributionFee());
|
|
|
+ }
|
|
|
+ if (insFeeOrder.getThirdDistributorId() != null && insFeeOrder.getThirdDistributorId().equals(sysUserJzgInfo.getId())) {
|
|
|
+ commission = commission.add(insFeeOrder.getThirdDistributionFee());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ team.setCommission(commission);
|
|
|
+ team.setLevel(Integer.parseInt(level)+1);
|
|
|
+ });
|
|
|
+ return distributionTeam;
|
|
|
+ }
|
|
|
+}
|