jyy
2021-09-03 3868b706ee3ee115a400d77abc3b69b83ea448c7
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
@@ -3,23 +3,35 @@
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.*;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.EncrypUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.core.tools.excl.ExcelSheetPO;
import com.matrix.core.tools.excl.ExcelUtil;
import com.matrix.system.app.dto.AddVipDto;
import com.matrix.system.app.dto.ModifyVipDto;
import com.matrix.system.app.dto.VipInfoListDto;
import com.matrix.system.app.vo.VipInfoDetailVo;
import com.matrix.system.app.vo.VipInfoListVo;
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.tools.DataAuthUtil;
import com.matrix.system.common.tools.ServiceUtil;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.constance.TableMapping;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.pojo.VipInfoVo;
import com.matrix.system.hive.service.SysVipInfoService;
import com.matrix.system.score.constant.ScoreSettingConstant;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -56,13 +68,25 @@
   @Autowired
   private SysVipLabelDao sysVipLabelDao;
   @Value("${default.vip.photo.woman}")
   String defaultWoman;
   @Value("${default.vip.photo.man}")
   String defaultMan;
   @Autowired
   BusParameterSettingsDao busParameterSettingsDao;
   @Autowired
   ScoreVipDetailService scoreVipDetailService;
   /**
    * 新增会员储值卡
    * @param vipId
    * @return
    */
   @Override
   public  int addVipDefaultCard(Long vipId){
   public MoneyCardUse addVipDefaultCard(Long vipId){
      MoneyCardUse defaultCardUse=new MoneyCardUse();
      defaultCardUse.setVipId(vipId);
      defaultCardUse.setCardName("储值卡");
@@ -71,17 +95,18 @@
      defaultCardUse.setGiftMoney(0D);
      defaultCardUse.setSource("-");
      defaultCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
      return  moneyCardUseDao.insert(defaultCardUse);
      moneyCardUseDao.insert(defaultCardUse);
      return  defaultCardUse;
   }
   @Override
   public int add(SysVipInfo sysVipInfo) {
      SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      if (sysVipInfo.getVipNo() != null && (!sysVipInfo.getVipNo().equals(""))) {
         if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "VIP_NO", sysVipInfo.getVipNo(),
               "company_id",user.getCompanyId())) {
               "company_id",sysVipInfo.getCompanyId())) {
            throw new GlobleException("编号已存在!");
         }
      }
@@ -90,20 +115,26 @@
            throw new GlobleException("请输入手机号!");
         }
         if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "PHONE", sysVipInfo.getPhone(),
               "company_id",user.getCompanyId() )) {
            throw new GlobleException("手机已被注册!");
               "company_id",sysVipInfo.getCompanyId() )) {
            throw new GlobleException(sysVipInfo.getPhone()+"手机已被注册!");
         }
      }
      sysVipInfo.setShopId(user.getShopId());
      sysVipInfo.setCompanyId(user.getCompanyId());
      SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      if(user!=null){
         sysVipInfo.setCompanyId(user.getCompanyId());
      }
      sysVipInfo.setCreateTime(new Date());
      sysVipInfo.setPointAll(0);
      sysVipInfo.setIsDeal(SysVipInfo.UNDEAL_VIP);
      sysVipInfo.setZjm(StringUtils.toHanyuPinyin(sysVipInfo.getVipName())+","+StringUtils.toHeadWordHanyuPinyin(sysVipInfo.getVipName()));
      if(StringUtils.isNotBlank(sysVipInfo.getVipName())){
         sysVipInfo.setZjm(StringUtils.toHanyuPinyin(sysVipInfo.getVipName())+","+StringUtils.toHeadWordHanyuPinyin(sysVipInfo.getVipName()));
      }
      if(Dictionary.SEX_MAN.equals(sysVipInfo.getSex())){
         sysVipInfo.setPhoto(defaultMan);
      }else{
         sysVipInfo.setPhoto(defaultWoman);
      }
      int i=sysVipInfoDao.insert(sysVipInfo);
      modifyVipWithOtherInfo(sysVipInfo);
      //创建用户默认储值卡
      addVipDefaultCard(sysVipInfo.getId());
      return i;
@@ -195,8 +226,7 @@
   @Override
   public List<SysVipInfo> findByVipNoOrTel(String key) {
      SysUsers users = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      return sysVipInfoDao.selectByVipNoOrTel(key, users.getShopId());
      return sysVipInfoDao.selectByVipNoOrTel(key);
   }
@@ -238,31 +268,7 @@
      }
      
      
        //如果会员id不为空则表示是修改,删除原有的绑定关系,建立新的关系
         if(vipInfo.getId()!=null && !vipInfo.getId().equals("")){
            MyBeatician query=new MyBeatician();
            query.setVipId(vipInfo.getId());
            List<MyBeatician> listDel= myBeaticianDao.selectByModel(query);
            if(listDel!=null && listDel.size()>0){
            List<Long> delIds=new ArrayList<>();
               for (int i = 0; i < listDel.size(); i++) {
               delIds.add(listDel.get(i).getId());
             }
            myBeaticianDao.deleteByIds(delIds);
             }
         }
         //添加客户的美疗师
       List<MyBeatician> list=vipInfo.getBeauticains();
       if(list!=null && list.size()>0){
          List<MyBeatician> saveList=new ArrayList<>();
          //此处由于前台传递过来list中的下标可能是不连续的。因此要过滤掉空的,即要过滤掉美疗师的id为空的数据
          for (MyBeatician temp:list) {
             if(temp.getBeauticainId()!=null && !temp.getBeauticainId().equals("")){
                saveList.add(temp);
                }
             }
          myBeaticianDao.insertAll(saveList,vipInfo.getId());
         }
          
   }
   
@@ -277,8 +283,8 @@
   @Override
   public List<SysVipInfo> findUserByKey(String keyWord) {
      SysUsers users = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      return sysVipInfoDao.selectUserByKey(keyWord, users.getShopId());
      SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      return sysVipInfoDao.selectUserByKey(keyWord,user.getCompanyId());
   }
   
@@ -334,6 +340,11 @@
      SysUsers users = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
      sysVipInfo.setCompanyId(users.getCompanyId());
      sysVipInfo.setShopId(users.getShopId());
      if(sysVipInfo.getSex().equals(Dictionary.SEX_MAN)){
         sysVipInfo.setPhoto(defaultMan);
      }else{
         sysVipInfo.setPhoto(defaultWoman);
      }
      int i=sysVipInfoDao.insert(sysVipInfo);
      modifyVipWithOtherInfo(sysVipInfo);
      return i;
@@ -392,7 +403,7 @@
               SysVipInfo vipInfo = new SysVipInfo();
               vipInfo.setVipNo(objects.get(0).toString());
               SysVipInfo exist = sysVipInfoDao.selectByPhone(objects.get(3).toString());
               SysVipInfo exist = sysVipInfoDao.selectByPhone(objects.get(3).toString(),sysUsers.getCompanyId());
               if (exist != null) {
                  continue;
               }
@@ -418,10 +429,12 @@
   @Override
   public List<VipInfoListVo> findVipAddressBook(VipInfoListDto vipInfoListDto) {
      //todo 会员查询单独做控制
      SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      if (!DataAuthUtil.hasAllShopAuth()) {
      if (!DataAuthUtil.hasAllCustomerAuth()) {
         vipInfoListDto.setShopId(sysUsers.getShopId());
      }
      QueryUtil.setQueryLimitCom(vipInfoListDto);
      return sysVipInfoDao.selectVipAddressBookByList(vipInfoListDto);
   }
@@ -431,12 +444,15 @@
   }
   @Override
   @Transactional
   public int apiAddVip(AddVipDto addVipDto) {
      SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "VIP_NO", addVipDto.getVipNo(),
            "company_id",user.getCompanyId())) {
         throw new GlobleException("编号已存在!");
      if (StringUtils.isNotBlank(addVipDto.getVipNo())) {
         if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "VIP_NO", addVipDto.getVipNo(),
               "company_id", user.getCompanyId())) {
            throw new GlobleException("编号已存在!");
         }
      }
      if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "PHONE", addVipDto.getPhone(),
@@ -445,6 +461,8 @@
      }
      SysVipInfo vipInfo = new SysVipInfo();
      vipInfo.setPhoto(addVipDto.getPhoto());
      vipInfo.setVipName(addVipDto.getVipName());
      vipInfo.setVipNo(addVipDto.getVipNo());
      vipInfo.setSex(addVipDto.getSex());
@@ -452,10 +470,19 @@
      vipInfo.setPhone(addVipDto.getPhone());
      vipInfo.setAddr(addVipDto.getAddress());
      vipInfo.setRemark(addVipDto.getRemark());
      vipInfo.setBirthday1(addVipDto.getBirthday());
      vipInfo.setPassWord(addVipDto.getPassword());
      vipInfo.setRecommendId(addVipDto.getRecommendId());
      if (StringUtils.isNotBlank(addVipDto.getAreas())) {
         String[] areas = addVipDto.getAreas().split("-");
         vipInfo.setProvince(areas[0]);
         vipInfo.setCity(areas[1]);
         vipInfo.setArea(areas[2]);
      }
      vipInfo.setInDate(new Date());
      vipInfo.setPointAll(0);
      vipInfo.setBirthday1(addVipDto.getBirthday());
      vipInfo.setVipState(Dictionary.VIP_STATE_HY);
      vipInfo.setStaffId(user.getSuId());
      vipInfo.setShopId(user.getShopId());
@@ -466,23 +493,181 @@
      vipInfo.setPointAll(0);
      vipInfo.setIsDeal(SysVipInfo.UNDEAL_VIP);
      vipInfo.setZjm(StringUtils.toHanyuPinyin(vipInfo.getVipName())+","+StringUtils.toHeadWordHanyuPinyin(vipInfo.getVipName()));
      if(vipInfo.getSex().equals(Dictionary.SEX_MAN)){
         vipInfo.setPhoto(defaultMan);
      }else{
         vipInfo.setPhoto(defaultWoman);
      }
      int i=sysVipInfoDao.insert(vipInfo);
      if (CollectionUtils.isNotEmpty(addVipDto.getLabels())) {
         Set<String> labels = new HashSet<>(addVipDto.getLabels());
         Iterator<String> iterator = labels.iterator();
         if (iterator.hasNext()) {
            SysVipLabel sysVipLabel = new SysVipLabel();
            sysVipLabel.setCreateTime(new Date());
            sysVipLabel.setCreateBy(user.getSuName());
            sysVipLabel.setLabel(iterator.next());
            sysVipLabel.setVipId(vipInfo.getId());
            sysVipLabelDao.insert(sysVipLabel);
         }
         batchInsertLabel(addVipDto.getLabels(), vipInfo.getId());
      }
      //添加推荐人积分
      addReferrerVipScore(vipInfo);
      //创建用户默认储值卡
      addVipDefaultCard(vipInfo.getId());
      return i;
   }
   /**
    * 添加推荐人积分
    * @param vipInfo
    */
   public void addReferrerVipScore(SysVipInfo vipInfo) {
      if(vipInfo.getRecommendId()!=null){
         SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
         BusParameterSettings referrerScoreSetting = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.REFERRALS_CONSUMPTION, user.getCompanyId());
         //推荐注册老带新积分奖励
         SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId());
         if(StringUtils.isNotBlank(referrerScoreSetting.getParamValue())){
            scoreVipDetailService.addScore(
                  referrerVip.getId(),
                  user.getSuId(),
                  vipInfo.getShopId(),
                  Integer.parseInt(referrerScoreSetting.getParamValue()),
                  vipInfo.getId(),
                  ScoreVipDetail.SCORE_VIP_TYPE_REFERRER,
                  "推荐会员"
                  );
         }
         //推荐注册二级带新积分奖励
         if(referrerVip.getRecommendId()!=null){
            SysVipInfo topVipInfo = sysVipInfoDao.selectById(referrerVip.getRecommendId());
            if(StringUtils.isNotBlank(referrerScoreSetting.getParamValue1())){
               scoreVipDetailService.addScore(
                     topVipInfo.getId(),
                     user.getSuId(),
                     vipInfo.getShopId(),
                     Integer.parseInt(referrerScoreSetting.getParamValue1()),
                     vipInfo.getId(),
                     ScoreVipDetail.SCORE_VIP_TYPE_REFERRER,
                     "间接推荐会员"
               );
            }
         }
      }
   }
   @Override
   public int apiModifyVip(ModifyVipDto modifyVipDto) {
      SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
      SysVipInfo vipInfo = sysVipInfoDao.selectById(modifyVipDto.getVipId());
      if (vipInfo == null) {
         throw new GlobleException("用户不存在");
      }
      if (StringUtils.isNotBlank(modifyVipDto.getVipNo())) {
         if (!modifyVipDto.getVipNo().equals(vipInfo.getVipNo())) {
            if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "VIP_NO", modifyVipDto.getVipNo(),
                  "company_id", user.getCompanyId())) {
               throw new GlobleException("编号已存在!");
            }
         }
      }
      if (!vipInfo.getPhone().equals(modifyVipDto.getPhone())) {
         if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "PHONE", modifyVipDto.getPhone(),
               "company_id", user.getCompanyId())) {
            throw new GlobleException("手机已被注册!");
         }
      }
      if (StringUtils.isNotBlank(modifyVipDto.getAreas())) {
         String[] areas = modifyVipDto.getAreas().split("-");
         vipInfo.setProvince(areas[0]);
         vipInfo.setCity(areas[1]);
         vipInfo.setArea(areas[2]);
      }
      vipInfo.setVipName(modifyVipDto.getVipName());
      vipInfo.setSex(modifyVipDto.getSex());
      vipInfo.setArrivalWay(modifyVipDto.getArrivalWay());
      vipInfo.setPhone(modifyVipDto.getPhone());
      vipInfo.setAddr(modifyVipDto.getAddress());
      vipInfo.setRemark(modifyVipDto.getRemark());
      vipInfo.setPassWord(modifyVipDto.getPassword());
      vipInfo.setBirthday1(modifyVipDto.getBirthday());
      vipInfo.setRecommendId(modifyVipDto.getRecommendId());
      vipInfo.setPhoto(modifyVipDto.getPhoto());
      int i = sysVipInfoDao.update(vipInfo);
      if (CollectionUtils.isNotEmpty(modifyVipDto.getLabels())) {
         sysVipLabelDao.deleteRelateByVipId(modifyVipDto.getVipId());
         batchInsertLabel(modifyVipDto.getLabels(), vipInfo.getId());
      }
      return i;
   }
   private void batchInsertLabel(List<String> labelList, Long id) {
      Set<String> labels = new HashSet<>(labelList);
      Iterator<String> iterator = labels.iterator();
      while (iterator.hasNext()) {
         SysVipLabelRelate relate = new SysVipLabelRelate();
         relate.setLabelId(Long.parseLong(iterator.next()));
         relate.setVipId(id);
         sysVipLabelDao.insertRelate(relate);
      }
   }
   @Override
   public VipInfoDetailVo findVipInfoDetail(Long id) {
      SysVipInfo sysVipInfo = sysVipInfoDao.selectById(id);
      if (sysVipInfo == null) {
         throw new GlobleException("用户不存在");
      }
      VipInfoDetailVo vipInfoDetailVo = new VipInfoDetailVo();
      vipInfoDetailVo.setVipName(sysVipInfo.getVipName());
      vipInfoDetailVo.setAddress(sysVipInfo.getAddr());
      vipInfoDetailVo.setPhone(sysVipInfo.getPhone());
      vipInfoDetailVo.setSex(sysVipInfo.getSex());
      vipInfoDetailVo.setArrivalWay(sysVipInfo.getArrivalWay());
      vipInfoDetailVo.setRecommendId(sysVipInfo.getRecommendId());
      vipInfoDetailVo.setId(sysVipInfo.getId());
      vipInfoDetailVo.setProvince(sysVipInfo.getProvince());
      vipInfoDetailVo.setCity(sysVipInfo.getCity());
      vipInfoDetailVo.setArea(sysVipInfo.getArea());
      vipInfoDetailVo.setRemark(sysVipInfo.getRemark());
      vipInfoDetailVo.setBirthday(sysVipInfo.getBirthday1());
      vipInfoDetailVo.setPassword(sysVipInfo.getPassWord());
      vipInfoDetailVo.setPhoto(sysVipInfo.getPhoto());
      vipInfoDetailVo.setVipNo(sysVipInfo.getVipNo());
      List<SysVipLabel> labels = sysVipLabelDao.selectByVipId(sysVipInfo.getId());
      vipInfoDetailVo.setLabels(labels);
      return vipInfoDetailVo;
   }
   @Override
   public SysVipInfo findByOpenId(String openId) {
      return sysVipInfoDao.findByOpenId(openId);
   }
   /**
    * 设置成为推广员
    * @param invitationId
    */
   @Override
   public int setToBeAnSalesman(Long userId,Long invitationId,long gradeId) {
      SysVipInfo sysVipInfo=sysVipInfoDao.selectById(userId);
      sysVipInfo.setIsSales(SysVipInfo.IS_SALES);
      sysVipInfo.setRecommendId(invitationId);
      sysVipInfo.setBindingParentTime(new Date());
      sysVipInfo.setSalesmanGrade(gradeId);
      return sysVipInfoDao.update(sysVipInfo);
   }
}