package com.matrix.system.hive.service.imp; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.PaginationVO; 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; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.util.*; /** * * * @date 2016-07-03 20:53 */ @Service("sysVipInfoService") public class SysVipInfoServiceImpl implements SysVipInfoService { @Autowired private SysVipInfoDao sysVipInfoDao; @Autowired private ServiceUtil serviceUtil; @Autowired private MyBeaticianDao myBeaticianDao; @Autowired private VipAnswerDao vipAnswerDao; @Autowired private MoneyCardUseDao moneyCardUseDao; @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 MoneyCardUse addVipDefaultCard(Long vipId){ MoneyCardUse defaultCardUse=new MoneyCardUse(); defaultCardUse.setVipId(vipId); defaultCardUse.setCardName("储值卡"); defaultCardUse.setIsVipCar(Dictionary.FLAG_YES_Y); defaultCardUse.setRealMoney(0D); defaultCardUse.setGiftMoney(0D); defaultCardUse.setSource("-"); defaultCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); moneyCardUseDao.insert(defaultCardUse); return defaultCardUse; } @Override public int add(SysVipInfo sysVipInfo) { if (sysVipInfo.getVipNo() != null && (!sysVipInfo.getVipNo().equals(""))) { if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "VIP_NO", sysVipInfo.getVipNo(), "company_id",sysVipInfo.getCompanyId())) { throw new GlobleException("编号已存在!"); } } if (sysVipInfo.getPhone() != null) { if (sysVipInfo.getPhone().equals("")) { throw new GlobleException("请输入手机号!"); } if (serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "PHONE", sysVipInfo.getPhone(), "company_id",sysVipInfo.getCompanyId() )) { throw new GlobleException(sysVipInfo.getPhone()+"手机已被注册!"); } } sysVipInfo.setCreateTime(new Date()); sysVipInfo.setPointAll(0); sysVipInfo.setIsDeal(SysVipInfo.UNDEAL_VIP); 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); //创建用户默认储值卡 addVipDefaultCard(sysVipInfo.getId()); return i; } @Override @Transactional(rollbackFor = Exception.class) public int modify(SysVipInfo sysVipInfo) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); if (sysVipInfo.getVipNo() != null) { if (sysVipInfo.getVipNo().equals("")) { throw new GlobleException("请输入会员编号!"); } if (serviceUtil.updateCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "VIP_NO", sysVipInfo.getVipNo(), "company_id",user.getCompanyId(), "ID", sysVipInfo.getId())) { throw new GlobleException("编号已被使用!"); } } if (sysVipInfo.getPhone() != null) { if (sysVipInfo.getPhone().equals("")) { throw new GlobleException("请输入手机号!"); } if (serviceUtil.updateCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "PHONE", sysVipInfo.getPhone(), "company_id",user.getCompanyId(), "ID", sysVipInfo.getId())) { throw new GlobleException("手机已被使用!"); } } modifyVipWithOtherInfo(sysVipInfo); return sysVipInfoDao.update(sysVipInfo); } @Override public int remove(List list) { return sysVipInfoDao.deleteByIds(list); } @Override public int removeById(Long id) { return sysVipInfoDao.deleteById(id); } @Override public List findInPage(SysVipInfo sysVipInfo, PaginationVO pageVo) { return sysVipInfoDao.selectInPage(sysVipInfo, pageVo); } @Override public List findAll(SysVipInfo sysVipInfo) { return sysVipInfoDao.selectAll(sysVipInfo); } @Override public List findByModel(SysVipInfo sysVipInfo) { return sysVipInfoDao.selectByModel(sysVipInfo); } @Override public List findByModel1(SysVipInfo sysVipInfo) { return sysVipInfoDao.selectByModel1(sysVipInfo); } @Override public int findTotal(SysVipInfo sysVipInfo) { return sysVipInfoDao.selectTotalRecord(sysVipInfo); } @Override public SysVipInfo findById(Long id) { return sysVipInfoDao.selectById(id); } @Override public List findByVipNoOrTel(String key) { return sysVipInfoDao.selectByVipNoOrTel(key); } @Override public boolean isOnlyPhone(String phone) { return sysVipInfoDao.selectTotalByField("PHONE", phone) > 0; } public boolean isOnlyEmail(String email) { return sysVipInfoDao.selectTotalByField("EMAIl", email) > 0; } @Override public List findListByVo(VipInfoVo infoVo, PaginationVO pageVo) { return sysVipInfoDao.findListByVo(infoVo, pageVo); } @Override public int findListByVoCount(VipInfoVo infoVo) { return sysVipInfoDao.findListByVoCount(infoVo); } //更新会员的问卷信息 @Override public void modifyVipWithOtherInfo(SysVipInfo vipInfo) { //先删除所有问卷答案再添加 VipAnswer delAnswer=new VipAnswer(); if(vipInfo.getId()==null){ throw new GlobleException("会员不存在,请刷新页面!"); } delAnswer.setVipId(vipInfo.getId()); vipAnswerDao.deleteByModel(delAnswer); if(vipInfo.getVipAnswers()!=null&&vipInfo.getVipAnswers().size()>0){ vipAnswerDao.batchInsert(vipInfo.getVipAnswers()); } } @Override public List findUserByPhoto(Long companyId,String keyWord) { return sysVipInfoDao.selectUserByPhoto(companyId,keyWord) ; } @Override public List findUserByKey(String keyWord) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); return sysVipInfoDao.selectUserByKey(keyWord,user.getCompanyId()); } @Override public SysVipInfo login(SysVipInfo user) { return sysVipInfoDao.selectVipByPhonePassWord(user) ; } /** * 批量修改健康顾问 */ @Transactional(rollbackFor = Exception.class) @Override public int updateStaffId(String ids, Long staffId) { if(ids==null||ids.equals("")){ throw new GlobleException("请至少选择一位会员!"); } String[] key=ids.split(","); for (String string : key) { long id=Long.valueOf(string.trim()); SysVipInfo info=new SysVipInfo(); info.setId(id); info.setStaffId(staffId); sysVipInfoDao.update(info); } return key.length; } //修改密码 @Override public int updatePwd(SysVipInfo vipInfo) { //密码MD5加密更新到数据库 try { vipInfo.setPassWord(EncrypUtil.getMD5(vipInfo.getPassWord())); } catch (UnsupportedEncodingException | NoSuchAlgorithmException e) { e.printStackTrace(); } //更新用户的密码 return sysVipInfoDao.update(vipInfo); } /** * 批量导入会员信息 */ @Override public int adds(SysVipInfo sysVipInfo,int s,List errList) { sysVipInfo.setCreateTime(new Date()); sysVipInfo.setPointAll(0); 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; } @Override public List findAllInPage(SysVipInfo sysVipInfo, PaginationVO pageVo) { return sysVipInfoDao.selectAllInPage(sysVipInfo, pageVo); } @Override public int findAllTotal(SysVipInfo sysVipInfo) { return sysVipInfoDao.selectAllTotalRecord(sysVipInfo); } @Override public List findFristInPage(SysVipInfo sysVipInfo, PaginationVO pageVo) { return sysVipInfoDao.selectFristInPage(sysVipInfo, pageVo); } @Override public int findFristTotal(SysVipInfo sysVipInfo) { return sysVipInfoDao.selectFristTotalRecord(sysVipInfo); } @Override public List findSecondInPage(SysVipInfo sysVipInfo, PaginationVO pageVo) { return sysVipInfoDao.selectSecondInPage(sysVipInfo, pageVo); } @Override public int findSecondTotal(SysVipInfo sysVipInfo) { return sysVipInfoDao.selectSecondTotalRecord(sysVipInfo); } @Override public int importVipInfo(File file) throws IOException { SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); List excelList = ExcelUtil.readExcel(file, null,null); int result = 0; for (int i = 0; i < excelList.size(); i++) { List> dataList = excelList.get(i).getDataList(); List vipInfos = new ArrayList<>(); if (CollectionUtils.isNotEmpty(dataList)) { for (int j = 1; j < dataList.size(); j++) { List objects = dataList.get(j); SysVipInfo vipInfo = new SysVipInfo(); vipInfo.setVipNo(objects.get(0).toString()); SysVipInfo exist = sysVipInfoDao.selectByPhone(objects.get(3).toString(),sysUsers.getCompanyId()); if (exist != null) { continue; } List sysVipInfo = sysVipInfoDao.selectVipInfoByVipNo(sysUsers.getCompanyId(), objects.get(0).toString()); if (CollectionUtils.isNotEmpty(sysVipInfo)) { int x = j + 1; throw new GlobleException("第"+ x +"行,会员编号已存在"); } vipInfo.setVipName(objects.get(1).toString()); vipInfo.setSex(objects.get(2).toString()); vipInfo.setPhone(objects.get(3).toString()); vipInfo.setBirthday1(DateUtil.stringToDate(objects.get(4).toString(), DateUtil.DATE_FORMAT_SS)); vipInfo.setShopId(sysUsers.getShopId()); vipInfos.add(vipInfo); } } if (CollectionUtils.isNotEmpty(vipInfos)) { result = sysVipInfoDao.batchInsert(vipInfos); } } return result; } @Override public List findVipAddressBook(VipInfoListDto vipInfoListDto) { SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); if (!DataAuthUtil.hasAllShopAuth()) { vipInfoListDto.setShopId(sysUsers.getShopId()); } QueryUtil.setQueryLimitCom(vipInfoListDto); return sysVipInfoDao.selectVipAddressBookByList(vipInfoListDto); } @Override public com.matrix.system.app.vo.VipInfoVo findApiVipInfoById(Long id) { return sysVipInfoDao.selectVipInfoById(id); } @Override @Transactional public int apiAddVip(AddVipDto addVipDto) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); 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(), "company_id",user.getCompanyId() )) { throw new GlobleException("手机已被注册!"); } SysVipInfo vipInfo = new SysVipInfo(); vipInfo.setPhoto(addVipDto.getPhoto()); vipInfo.setVipName(addVipDto.getVipName()); vipInfo.setVipNo(addVipDto.getVipNo()); vipInfo.setSex(addVipDto.getSex()); vipInfo.setArrivalWay(addVipDto.getArrivalWay()); 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.setVipState(Dictionary.VIP_STATE_HY); vipInfo.setStaffId(user.getSuId()); vipInfo.setShopId(user.getShopId()); vipInfo.setVipType(Dictionary.VIP_TYPE_NOCARD); vipInfo.setShopId(user.getShopId()); vipInfo.setCompanyId(user.getCompanyId()); vipInfo.setCreateTime(new Date()); 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())) { 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 labelList, Long id) { Set labels = new HashSet<>(labelList); Iterator 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 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); } }