Helius
2021-03-17 9974b1fffff1cad712b7c30fb4c708ef45ec4b8c
zq-erp/src/main/java/com/matrix/system/fenxiao/service/ShopSalesmanApplyService.java
@@ -1,26 +1,36 @@
package com.matrix.system.fenxiao.service;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
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.matrix.biz.bean.BizUser;
import com.matrix.biz.dao.BizUserDao;
import com.matrix.biz.service.BizUserService;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.VerificationResult;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.interceptor.HostInterceptor;
import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant;
import com.matrix.system.fenxiao.dao.ShopSalesmanApplyDao;
import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao;
import com.matrix.system.fenxiao.dto.*;
import com.matrix.system.fenxiao.entity.ShopSalesmanApply;
import com.matrix.system.fenxiao.vo.ShopSalesmanApplyVo;
import com.matrix.system.fenxiao.entity.ShopSalesmanGrade;
import com.matrix.system.fenxiao.vo.*;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.shopXcx.dao.ShopOrderV2Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -37,7 +47,10 @@
    BusParameterSettingsDao busParameterSettingsDao;
    @Autowired
    ShopSalesmanApplyDao salesmanApplyDao;
    ShopSalesmanApplyDao shopSalesmanApplyDao;
    @Autowired
    ShopSalesmanGradeDao shopSalesmanGradeDao;
    @Autowired
    private BizUserDao bizUserDao;
@@ -45,62 +58,368 @@
    @Autowired
    BizUserService bizUserService;
    @Autowired
    ShopOrderV2Dao shopOrderV2Dao;
    /**
     * 申请成为推广员
     * @param openId
     * @param invitationId
     * @return
     */
    public ShopSalesmanApply applyToBeAnSalesman(String openId, String invitationId) {
    public ShopSalesmanApply applyToBeAnSalesman(String openId,String gradeId,String invitationId,int applyWay) {
        BizUser loginUser=bizUserDao.findByOpenId(openId);
        //校验审核状态,和是否重复发起
        QueryWrapper<ShopSalesmanApply> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id",loginUser.getOpenId());
        ShopSalesmanApply checkApply = salesmanApplyDao.selectOne(queryWrapper);
        if(checkApply==null||
                checkApply.getApplyStatus()==ShopSalesmanApply.APPLY_STATUS_WTG){
        //验证申请条件
        VerificationResult verificationResult = isAbleToBeAnSalesman(openId);
        if(verificationResult.isJudgeResult()){
            //校验审核状态,和是否重复发起
            QueryWrapper<ShopSalesmanApply> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("user_id",loginUser.getOpenId());
            queryWrapper.in("apply_status",Arrays.asList("1,2".split(",")));
            ShopSalesmanApply checkApply = shopSalesmanApplyDao.selectOne(queryWrapper);
            if(checkApply==null||
                    checkApply.getApplyStatus()==ShopSalesmanApply.APPLY_STATUS_WTG){
            ShopSalesmanApply shopSalesmanApply=new ShopSalesmanApply();
            shopSalesmanApply.setUserId(loginUser.getUserId());
            shopSalesmanApply.setCreateBy(loginUser.getNickName());
            shopSalesmanApply.setApplyWay(ShopSalesmanApply.APPLY_WAY_SELF);
                ShopSalesmanApply shopSalesmanApply=new ShopSalesmanApply();
                shopSalesmanApply.setUserId(openId);
            shopSalesmanApply.setCompanyId(loginUser.getCompanyId());
            shopSalesmanApply.setUpdateBy(loginUser.getNickName());
            Date date = new Date();
            shopSalesmanApply.setCreateTime(date);
            shopSalesmanApply.setUpdateTime(date);
                shopSalesmanApply.setCreateBy(MatrixConstance.SYSTEM_USER);
                shopSalesmanApply.setApplyWay(ShopSalesmanApply.APPLY_WAY_SELF);
            if(StringUtils.isNotBlank(invitationId)){
                shopSalesmanApply.setParentUserId(invitationId);
            }else if(StringUtils.isNotBlank(loginUser.getParentOpenId())){
                //如果曾经是被邀请进来的则自动绑定为之前邀请人的下级
                shopSalesmanApply.setParentUserId(loginUser.getParentOpenId());
            }
                shopSalesmanApply.setCompanyId(loginUser.getCompanyId());
                shopSalesmanApply.setUpdateBy(MatrixConstance.SYSTEM_USER);
                Date date = new Date();
                shopSalesmanApply.setCreateTime(date);
                shopSalesmanApply.setUpdateTime(date);
            BusParameterSettings busParameterSettings = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_AUDIT_METHOD, HostInterceptor.getCompanyId());
            if(busParameterSettings!=null
                    &&busParameterSettings.getParamValue().equals("1")){
                //自动审核
                shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_TG);
                bizUserService.setToBeAnSalesman(loginUser.getOpenId(),invitationId);
                if(StringUtils.isNotBlank(invitationId)){
                    shopSalesmanApply.setParentUserId(invitationId);
                }else if(StringUtils.isNotBlank(loginUser.getParentOpenId())){
                    //如果曾经是被邀请进来的则自动绑定为之前邀请人的下级
                    shopSalesmanApply.setParentUserId(loginUser.getParentOpenId());
                }
                if(StringUtils.isNotBlank(gradeId)){
                    shopSalesmanApply.setGradeId(Long.parseLong(gradeId));
                }else{
                    //获取初始等级ID(公司id,是否为初始等级)
                    QueryWrapper<ShopSalesmanGrade> queryWrapperOrepool = new QueryWrapper<>();
                    queryWrapperOrepool.eq("company_id", loginUser.getCompanyId());
                    queryWrapperOrepool.eq("is_default", 1);
                    ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectOne(queryWrapperOrepool);
                    shopSalesmanApply.setGradeId(shopSalesmanGrade.getId());
                }
                shopSalesmanApply.setApplyWay(applyWay);
                BusParameterSettings busParameterSettings = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_AUDIT_METHOD, loginUser.getCompanyId());
                if(busParameterSettings!=null
                        &&busParameterSettings.getParamValue().equals("1")){
                    //自动审核
                    shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_TG);
                    bizUserService.setToBeAnSalesman(loginUser.getOpenId(),invitationId);
                }else{
                    shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_DSH);
                }
                shopSalesmanApplyDao.insert(shopSalesmanApply);
                return  shopSalesmanApply;
            }else{
                shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_DSH);
                throw  new GlobleException("不能重复申请");
            }
            salesmanApplyDao.insert(shopSalesmanApply);
            return  shopSalesmanApply;
        }else{
            throw  new GlobleException("不能重复申请");
            throw  new GlobleException(verificationResult.getMsg());
        }
    }
   public List<ShopSalesmanApplyVo> selectFenXiaoUserApplyByCompanyId(Long companyId) {
      //获取当前登录人员信息
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        List<ShopSalesmanApplyVo> shopSalesmanApplyVos = salesmanApplyDao.selectFenXiaoUserApplyByCompanyId(companyId);
      return shopSalesmanApplyVos;
    /**
     * 判断是否满足申请成为分销员的条件
     */
    public VerificationResult isAbleToBeAnSalesman(String openId) {
        BizUser bizUser = bizUserDao.findByOpenId(openId);
        VerificationResult verificationResult=null;
        //申请条件
        BusParameterSettings applyCondition = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_APPLY_CONDITION, bizUser.getCompanyId());
        switch (applyCondition.getParamValue()){
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_WTJ:
                VerificationResult.buildVerificationResult(true);
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_XFZDCP:
                VerificationResult.buildVerificationResult(true);
                int buyZdcpCount= shopOrderV2Dao.countBuyZdcp(openId,applyCondition.getParamValue1());
                if(buyZdcpCount>0){
                    verificationResult= VerificationResult.buildVerificationResult(true);
                }else{
                    verificationResult= VerificationResult.buildVerificationResult(false,"不符合申请条件,请消费指定产品后再申请!");
                }
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_XFRYCP:
                //判断用户是否有确认收货的产品
                int receivedOrderCount= shopOrderV2Dao.selectReceivedOrderCount(openId);
                if(receivedOrderCount>0){
                    verificationResult= VerificationResult.buildVerificationResult(true);
                }else{
                    verificationResult= VerificationResult.buildVerificationResult(false,"不符合申请条件,请消费任意产品后再申请!");
                }
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_XCZDJE:
                Double zdje=Double.parseDouble(applyCondition.getParamValue2());
                Double yxfje=shopOrderV2Dao.countOrderAmount(openId);
                if(zdje<yxfje){
                    verificationResult=VerificationResult.buildVerificationResult(true);
                }else{
                    verificationResult= VerificationResult.buildVerificationResult(false,"不符合申请条件,请消费满"+zdje+"元后再申请!");
                }
                VerificationResult.buildVerificationResult(true);
            default:
                VerificationResult.buildVerificationResult(true);
        }
        return verificationResult;
    }
    public IPage<ShopSalesmanApplyVo> findShopSalesmanApplyList(Page<ShopSalesmanApplyVo> page, ShopSalesmanApplyDto shopSalesmanApplyDto) {
        return shopSalesmanApplyDao.findShopSalesmanApplyList(page,shopSalesmanApplyDto);
    }
   public IPage<ShopSalesmanAppliingVo> findShopSalesmanAppliingList(Page<ShopSalesmanAppliingVo> page,
         ShopSalesmanAppliingDto shopSalesmanAppliingDto) {
      return shopSalesmanApplyDao.findShopSalesmanAppliingList(page,shopSalesmanAppliingDto);
   }
    public IPage<ShopSalesmanAppliingVo> selectBizUserApplyList(Page<ShopSalesmanAppliingVo> page, ShopSalesmanAppliingDto shopSalesmanAppliingDto) {
        return shopSalesmanApplyDao.selectBizUserApplyList(page,shopSalesmanAppliingDto);
    }
   public List<ShopSalesmanGradeVo> getShopSalesmanGradeVo(Long companyId) {
      return shopSalesmanGradeDao.getShopSalesmanGradeVo(companyId);
   }
   @Transactional(rollbackFor = Exception.class)
   public void addSaleManApply(String userId,String gradeId) {
      BizUser user = bizUserDao.findByOpenId(userId);
      applyToBeAnSalesman(user.getOpenId(),gradeId, "",ShopSalesmanApply.APPLY_WAY_HAND_ADD);
   }
   @Transactional(rollbackFor = Exception.class)
   public void examineSaleManApply(ShopSalesmanApply shopSalesmanApply, Integer applyState) {
      String userId = shopSalesmanApply.getUserId();
      String parentUserId = shopSalesmanApply.getParentUserId();
      BizUser bizUser = bizUserDao.findByOpenId(userId);
      //修改审核记录
      if(ShopSalesmanApply.APPLY_STATUS_TG == applyState) {
         shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_TG);
         bizUser.setIsSales(BizUser.IS_SALES);
      }else {
         shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_WTG);
         bizUser.setIsSales(BizUser.NOT_SALES);
      }
      shopSalesmanApplyDao.updateById(shopSalesmanApply);
      //修改USER的状态
      bizUser.setParentOpenId(parentUserId);
      bizUser.setBindingParentTime(new Date());
      bizUserDao.updateByModel(bizUser);
   }
   public IPage<ShopSalesmanApplyVo> findShopSalesmanDetail(Page<ShopSalesmanApplyVo> page,
         ShopSalesmanDetailDto shopSalesmanDetailDto) {
      // TODO Auto-generated method stub
      return null;
   }
   public SalesmanBasicDetailVo selectShopSalesmanDetailByOpenId(String userId, long applyId) {
      //获取个人信息
      BizUser bizUser = bizUserDao.findByOpenId(userId);
      Long companyId = bizUser.getCompanyId();
      return shopSalesmanApplyDao.selectShopSalesmanDetailByOpenId(userId,companyId,applyId);
   }
   public IPage<ShopCustomDetailVo> findCustomDetail(Page<ShopCustomDetailVo> page,
                                                      ShopSalesmanDetailDto shopSalesmanDetailDto) {
      return shopSalesmanApplyDao.findCustomDetail(page,shopSalesmanDetailDto);
   }
   public IPage<ShopCustomDetailVo> findCustomLow(Page<ShopCustomDetailVo> pageLow,
         ShopSalesmanDetailDto shopSalesmanDetailDto) {
      return shopSalesmanApplyDao.findCustomLow(pageLow,shopSalesmanDetailDto);
   }
   public IPage<ShopOrderDetailVo> findShopOrderDetail(Page<ShopOrderDetailVo> pageOrder,
         ShopSalesmanDetailDto shopSalesmanDetailDto) {
      return shopSalesmanApplyDao.findShopOrderDetail(pageOrder,shopSalesmanDetailDto);
   }
    @Transactional(rollbackFor = Exception.class)
   public AjaxResult changeSaleManGrade(ChangeSaleManGradeDto changeSaleManGradeDto) {
        //设置用户公司ID
        QueryUtil.setQueryLimitCom(changeSaleManGradeDto);
        String userId = changeSaleManGradeDto.getUserId();
        Long companyId = changeSaleManGradeDto.getCompanyId();
        //获取对应的公司的等级
        QueryWrapper<ShopSalesmanGrade> queryWrapperOrepool = new QueryWrapper<>();
        queryWrapperOrepool.eq("is_default", 1);
        queryWrapperOrepool.eq("company_id", companyId);
        ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectOne(queryWrapperOrepool);
        //修改Biz_User的salesman_grade
        BizUser findByOpenId = bizUserDao.findByOpenId(userId);
        if(ObjectUtil.isEmpty(findByOpenId)) {
            return AjaxResult.buildFailInstance("当前用户已不存在");
        }
        //不是分销员不允许修改
        Integer isSales = findByOpenId.getIsSales();
        if(BizUser.IS_SALES != isSales) {
           return AjaxResult.buildFailInstance("当前用户未通过审核,不允许修改");
        }
        //修改申请记录的等级
        QueryWrapper<ShopSalesmanApply> queryShopSalesmanApply = new QueryWrapper<>();
        queryShopSalesmanApply.eq("apply_status", 2);
        queryShopSalesmanApply.eq("user_id", userId);
        queryShopSalesmanApply.eq("company_id", companyId);
        ShopSalesmanApply shopSalesmanApply = shopSalesmanApplyDao.selectOne(queryShopSalesmanApply);
        Long gradeId = changeSaleManGradeDto.getGradeId();
        if(ObjectUtil.isEmpty(gradeId)) {
           findByOpenId.setSalesmanGrade(shopSalesmanGrade.getId());
           shopSalesmanApply.setGradeId(shopSalesmanGrade.getId());
        }else {
           findByOpenId.setSalesmanGrade(gradeId);
           shopSalesmanApply.setGradeId(gradeId);
        }
        bizUserDao.updateByModel(findByOpenId);
        shopSalesmanApplyDao.updateById(shopSalesmanApply);
        return AjaxResult.buildFailInstance("修改等级成功");
   }
    @Transactional(rollbackFor = Exception.class)
   public AjaxResult unbundlingSaleMan(UnbundlingSaleManDto unbundlingSaleManDto) {
        //设置用户公司ID
        QueryUtil.setQueryLimitCom(unbundlingSaleManDto);
        String userId = unbundlingSaleManDto.getUserId();
        //将Biz_User的parent_open_id置空
        BizUser findByOpenId = bizUserDao.findByOpenId(userId);
        if(ObjectUtil.isEmpty(findByOpenId)) {
           return AjaxResult.buildFailInstance("当前用户已不存在");
        }
        findByOpenId.setParentOpenId("");
        bizUserDao.updateByModel(findByOpenId);
        return AjaxResult.buildFailInstance("解绑成功");
   }
    @Transactional(rollbackFor = Exception.class)
   public AjaxResult delSaleManGradeApply(DelSaleManGradeApplyDto delSaleManGradeApplyDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(delSaleManGradeApplyDto);
        String userId = delSaleManGradeApplyDto.getUserId();
        Long applyid = delSaleManGradeApplyDto.getApplyId();
        //将biz_user的is_sale设置成否
        BizUser findByOpenId = bizUserDao.findByOpenId(userId);
        if(ObjectUtil.isEmpty(findByOpenId)) {
           return AjaxResult.buildFailInstance("当前用户已不存在");
        }
        findByOpenId.setIsSales(BizUser.NOT_SALES);
        bizUserDao.updateByModel(findByOpenId);
        //将记录设置成系统取消
        ShopSalesmanApply selectById = shopSalesmanApplyDao.selectById(applyid);
        selectById.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_XTQX);
        shopSalesmanApplyDao.updateById(selectById);
      return AjaxResult.buildFailInstance("操作成功");
   }
   public IPage<FyfaManageVo> findFyfaManageList(Page<FyfaManageVo> page, FyfaManageDto fyfaManageDto) {
      return shopSalesmanGradeDao.findFyfaManageList(page,fyfaManageDto);
   }
    @Transactional(rollbackFor = Exception.class)
   public void addFyfa(SysUsers user) {
      ShopSalesmanGrade shopSalesmanGrade = new ShopSalesmanGrade();
      shopSalesmanGrade.setIsDefault(2);
      shopSalesmanGrade.setCreateBy(user.getSuName());
      shopSalesmanGrade.setUpdateBy(user.getSuName());
      shopSalesmanGrade.setCreateTime(new Date());
      shopSalesmanGrade.setUpdateTime(new Date());
      shopSalesmanGrade.setCompanyId(user.getCompanyId());
      shopSalesmanGradeDao.insert(shopSalesmanGrade);
   }
    @Transactional(rollbackFor = Exception.class)
   public AjaxResult delFyfaApply(DelFyfaApplyDto delFyfaApplyDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(delFyfaApplyDto);
        Long gradeId = delFyfaApplyDto.getGradeId();
        ShopSalesmanGrade selectById = shopSalesmanGradeDao.selectById(gradeId);
        if(ObjectUtil.isEmpty(selectById)) {
           return AjaxResult.buildFailInstance("当前行数据不存在,请刷新页面");
        }
        shopSalesmanGradeDao.deleteById(gradeId);
      return AjaxResult.buildFailInstance("操作成功");
   }
    @Transactional(rollbackFor = Exception.class)
   public AjaxResult updateFyfa(UpdateFyfaDto updateFyfaDto) {
        ShopSalesmanGrade selectById = shopSalesmanGradeDao.selectById(updateFyfaDto.getId());
        if(ObjectUtil.isEmpty(selectById)) {
           return AjaxResult.buildFailInstance("当前行数据不存在,请刷新页面");
        }
        String name = updateFyfaDto.getName();
        if(StrUtil.isEmpty(name)) {
           return AjaxResult.buildFailInstance("请输入方案名称");
        }
        Double sealesCommission = updateFyfaDto.getSealesCommission();
        if(ObjectUtil.isEmpty(sealesCommission)) {
           return AjaxResult.buildFailInstance("请输入正确的推广提成");
        }
        Double invitationCommission = updateFyfaDto.getInvitationCommission();
        if(ObjectUtil.isEmpty(invitationCommission)) {
           return AjaxResult.buildFailInstance("请输入正确的邀请提成");
        }
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(updateFyfaDto);
        selectById.setCompanyId(updateFyfaDto.getCompanyId());
        selectById.setName(updateFyfaDto.getName());
        selectById.setSealesCommission(sealesCommission);
        selectById.setInvitationCommission(invitationCommission);
        selectById.setGradeCondition(updateFyfaDto.getGradeCondition());
        shopSalesmanGradeDao.updateById(selectById);
      return AjaxResult.buildFailInstance("操作成功");
   }
    @Transactional(rollbackFor = Exception.class)
   public AjaxResult updateTgjh(UpdateTgjhDto updateTgjhDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(updateTgjhDto);
        //获取推广计划的Param
        Long companyId = updateTgjhDto.getCompanyId();
        BusParameterSettings busParameterSettings = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_TG_PLAN, companyId);
        busParameterSettings.setParamValue3(updateTgjhDto.getTgfa());
        busParameterSettingsDao.updateByModel(busParameterSettings);
      return AjaxResult.buildFailInstance("保存成功");
   }
    @Transactional(rollbackFor = Exception.class)
   public AjaxResult updateTgtp(UpdateTgtpDto updateTgtpDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(updateTgtpDto);
        //获取推广计划的Param
        Long companyId = updateTgtpDto.getCompanyId();
        BusParameterSettings busParameterSettings = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_TG_POSTER, companyId);
        busParameterSettings.setParamValue(updateTgtpDto.getImageUrl());
        busParameterSettingsDao.updateByModel(busParameterSettings);
      return AjaxResult.buildFailInstance("保存成功");
   }
}