package com.matrix.system.hive.action; import com.matrix.core.anotations.RemoveRequestToken; import com.matrix.core.anotations.SaveRequestToken; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.LogUtil; 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.core.tools.excl.ExcelVersion; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.bean.SystemDictionary; import com.matrix.system.common.dao.CustomerDataDictionaryDao; import com.matrix.system.common.service.SysUsersService; import com.matrix.system.common.service.SystemDictionaryService; import com.matrix.system.common.tools.DataAuthUtil; import com.matrix.system.common.tools.ResponseHeadUtil; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.action.util.QueryUtil; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.MoneyCardUseDao; import com.matrix.system.hive.dao.ShoppingGoodsDao; import com.matrix.system.hive.dao.SysVipLabelDao; import com.matrix.system.hive.dao.VipAnswerDao; import com.matrix.system.hive.pojo.RegisterInfo; import com.matrix.system.hive.service.*; import com.matrix.system.score.dao.ScoreVipDetailDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; /** * @author jyy * @description 会员信息管理action * @date 2016-07-12 */ @Controller @RequestMapping(value = "admin/vipInfo") public class VipInfoController extends BaseController { @Value("${file_storage_path}") private String fileStoragePath; @Resource private SysVipInfoService vipInfoService; @Resource private SysVipLevelService vipLevelService; @Resource private SysUsersService shopstaffInfoService; @Autowired private VipAnswerDao vipAnswerDao; @Resource private QuestionSerivce questionSerivce; @Resource private MoneyCardUseService cardUseService; @Autowired private MoneyCardUseDao moneyCardUseDao; @Autowired private SysVipLabelDao sysVipLabelDao; @Autowired private SystemDictionaryService dataDictionaryService; @Autowired private CustomerDataDictionaryDao customerDataDictionaryDao; @Resource private SysOrderService sysOrderService; @Autowired ShoppingGoodsDao shoppingGoodsDao; @Autowired private ScoreVipDetailDao scoreVipDetailDao; @Resource private SysProjUseService projUseService; @Resource HttpServletResponse response; @RequestMapping(value = "/exportExcel/{vipId}") public void getVipAllProjInfo(@PathVariable Long vipId) throws IOException { List res = new ArrayList<>(); ExcelSheetPO orderSheet = new ExcelSheetPO(); SysVipInfo vipInfo = vipInfoService.findById(vipId); String title = vipInfo.getVipName()+"("+vipInfo.getVipNo()+")会员资料"; orderSheet.setSheetName(title); orderSheet.setTitle(title); String[] header = {"产品类型", "产品名称","来源", "状态", "余额", "余次", "到期时间", "本金", "赠金"}; orderSheet.setHeaders(header); SysProjUse queryUse = new SysProjUse(); queryUse.setVipId(vipId); queryUse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM); queryUse.setTaocanId(-1L); queryUse.setStatus(Dictionary.TAOCAN_STATUS_YX); List projList = projUseService.findInPage(queryUse, null); List> list = new ArrayList<>(); if (projList.size() > 0) { for (SysProjUse item : projList) { List temp = new ArrayList<>(); temp.add("项目"); temp.add(item.getProjName()); temp.add(item.getSource()); temp.add("有效"); temp.add(item.getBalance()); temp.add(item.getSurplusCount()); temp.add(DateUtil.dateToString(item.getFailTimeStr(),DateUtil.DATE_FORMAT_DD)); temp.add(""); temp.add(""); list.add(temp); } } //套餐 //切换到套餐查询条件 SysProjUse queryTaocan = new SysProjUse(); queryTaocan.setType(Dictionary.SHOPPING_GOODS_TYPE_TC); queryTaocan.setStatus(Dictionary.TAOCAN_STATUS_YX); queryTaocan.setVipId(vipId); List taoCanList = projUseService.findInPage(queryTaocan, null); taoCanList.forEach(item->{ item.setTaocanProjUse(projUseService.selectTaocanProjUse(item.getId(), queryUse.getStatus())); item.setProjInfo(shoppingGoodsDao.selectById(item.getProjId())); }); if (taoCanList.size() > 0) { for (SysProjUse item : taoCanList) { List temp = new ArrayList<>(); if(Dictionary.FLAG_YES_Y.equals(item.getIsCourse())){ temp.add("任选套餐"); }else{ temp.add("固定套餐"); } temp.add(item.getProjName()); temp.add(item.getSource()); temp.add("有效"); temp.add(item.getBalance()); temp.add(item.getSurplusCount()); temp.add(DateUtil.dateToString(item.getFailTimeStr(),DateUtil.DATE_FORMAT_DD)); temp.add(""); temp.add(""); list.add(temp); //套餐下项目 List taocanProjUse = item.getTaocanProjUse(); if (taocanProjUse.size() > 0) { for (SysProjUse proj_item : taocanProjUse) { List temp2 = new ArrayList<>(); temp2.add(" |————"); temp2.add(proj_item.getProjName()); temp2.add(proj_item.getSource()); temp2.add("有效"); temp2.add(proj_item.getBalance()); temp2.add(proj_item.getSurplusCount()); temp2.add(DateUtil.dateToString(proj_item.getFailTimeStr(),DateUtil.DATE_FORMAT_DD)); temp2.add(""); temp2.add(""); list.add(temp2); } } } } //储值卡 MoneyCardUse moneyCardUse = new MoneyCardUse(); moneyCardUse.setVipId(vipId); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); List cards = cardUseService.findByModel(moneyCardUse); if (cards.size() > 0) { for (MoneyCardUse item : cards) { List temp = new ArrayList<>(); temp.add("储值卡"); temp.add(item.getCardName()); temp.add(item.getSource()); temp.add("有效"); temp.add(""); temp.add(item.getLastCount()); temp.add(DateUtil.dateToString(item.getFailTime(),DateUtil.DATE_FORMAT_DD)); temp.add(item.getRealMoney()); temp.add(item.getGiftMoney()); list.add(temp); } } orderSheet.setDataList(list); res.add(orderSheet); response = ResponseHeadUtil.setExcelHead(response); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(title + DateUtil.getTimeMark() + ".xlsx".trim(), "UTF-8")); OutputStream os = response.getOutputStream(); ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true); } @RequestMapping(value = "/showVipLevel") public @ResponseBody AjaxResult findVipLevel() { // 会员卡等级信息 List vipLevels = vipLevelService.findByModel(null); return new AjaxResult(AjaxResult.STATUS_SUCCESS, vipLevels, 0); } /** * 显示所有的会员信息 */ @RequestMapping(value = "/showVipInfoList") public @ResponseBody AjaxResult showList(PaginationVO pageVo, SysVipInfo vipInfo) { QueryUtil.setQueryLimit(vipInfo); return showList(vipInfoService, vipInfo, pageVo); } /** * 门店查看会员信息 * * @author luoyuanhong * @date 2016-06-24 */ @SuppressWarnings("unchecked") @RequestMapping(value = "/showVipInfo") public @ResponseBody AjaxResult findByModel(String keyWord) { List vips = vipInfoService.findByVipNoOrTel(keyWord); if (vips.size() > 0) { vips.get(0).setPointAll(scoreVipDetailDao.selectUserTotalScore(vips.get(0).getId())); vips.get(0).setSysOrder(sysOrderService.findSysOrderTjByVipId(vips.get(0).getId())); vips.get(0).setLevelCard(cardUseService.findByVipId(vips.get(0).getId())); vips.get(0).setLabels(sysVipLabelDao.selectByVipId(vips.get(0).getId())); vips.get(0).setAge(DateUtil.getAgeForBirthDay(vips.get(0).getBirthday1())); vips.get(0).setBalance(moneyCardUseDao.selectVipCardTotalMoney(vips.get(0).getId())); vips.get(0).setArrears(sysOrderService.findVipArrearsByVipId(vips.get(0).getId())); AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, vips, 0); return result; } else { return AjaxResult.buildFailInstance("未查到询客户信息"); } } /** * 通过姓名或者电话号码 */ @RequestMapping(value = "/findUserByPhotoOrName") public @ResponseBody AjaxResult findUserByPhotoOrName(String keyWord) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, vipInfoService.findUserByKey(keyWord), 0); } /** * 添加或修改会员信息 */ @RequestMapping(value = "/addOrModify") @RemoveRequestToken public @ResponseBody AjaxResult addOrModify(SysVipInfo vipInfo) { if (vipInfo.getId() != null) { return modify(vipInfoService, vipInfo, "会员信息"); } else { vipInfo.setVipState(Dictionary.VIP_STATE_HY); SysUsers users = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); if(vipInfo.getShopId()==null){ vipInfo.setShopId(users.getShopId()); } return add(vipInfoService, vipInfo, "会员信息"); } } /** * 保存客户的 * * @param vipInfo * @return */ @RequestMapping(value = "/modifyVipArchives") public @ResponseBody AjaxResult modifyVipArchives(@RequestBody SysVipInfo vipInfo) { VipAnswer delAnswer = new VipAnswer(); delAnswer.setVipId(vipInfo.getId()); vipAnswerDao.deleteByModel(delAnswer); if (vipInfo.getVipAnswers() != null && vipInfo.getVipAnswers().size() > 0) { vipAnswerDao.batchInsert(vipInfo.getVipAnswers()); } AjaxResult result = new AjaxResult(); result.setStatus(AjaxResult.STATUS_SUCCESS); result.setInfo("档案更新成功"); return result; } /** * 删除会员信息 */ @RequestMapping(value = "/del") public @ResponseBody AjaxResult del(String keys) { List ids = StringUtils.strToCollToLong(keys, ","); int i = vipInfoService.removeLogic(ids); if (i > 0) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, "成功删除" + i + "条数据"); } else { return new AjaxResult(AjaxResult.STATUS_FAIL, "删除失败"); } // return remove(vipInfoService, keys); } /** * 弹出框,会员信息 */ @RequestMapping(value = "/editForm") @SaveRequestToken public String editForm(Long id, HttpServletRequest request) { SysVipInfo vipInfo; // 查询所有美疗师,由于是手动添加,因此不用框架中的下拉框方式 List mlslist = new ArrayList(); if (!getMe().getShopRole().equals(Dictionary.FLAG_YES_Y)) { mlslist = shopstaffInfoService.findByRoleName(true, Dictionary.STAFF_POST_MLS); } else { mlslist = shopstaffInfoService.findByRoleName(false, Dictionary.STAFF_POST_MLS); } request.setAttribute("mlslist", mlslist); // vip信息 if (id != null) { vipInfo = vipInfoService.findById(id); request.setAttribute("obj", vipInfo); } return "admin/hive/vip/vipInfo-form"; } @RequestMapping(value = "/getVipQuestions") public @ResponseBody AjaxResult getVipQuestions(Long id, HttpServletRequest request) { // 获取会员所有的答案,分类型 SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); List questions = questionSerivce.findByVipId(id, user.getCompanyId()); request.setAttribute("questions", questions); AjaxResult result = new AjaxResult(); result.putInMap("questions", questions); result.setStatus(AjaxResult.STATUS_SUCCESS); return result; } /** * 编辑会员备注 */ @RequestMapping(value = "/editRemarkForm") @SaveRequestToken public String editRemarkForm(Long id, HttpServletRequest request) { SysVipInfo vipInfo; vipInfo = vipInfoService.findById(id); request.setAttribute("obj", vipInfo); return "admin/hive/vip/vipInfo-remark-form"; } /** * 批量修改健康顾问 */ @RequestMapping(value = "/updateVipInfos") public @ResponseBody AjaxResult updateVipInfos(String ids, Long staffId) { int i = vipInfoService.updateStaffId(ids, staffId); return new AjaxResult(AjaxResult.STATUS_SUCCESS, "成功修改" + i + "条数据!"); } /** * 客户到访录入 */ @RequestMapping(value = "/toVisitInfo") public String toVisitInfo() { Long shopId = getMe().getShopId(); SystemDictionary dataDictionary = new SystemDictionary(); // 获取到店途径 dataDictionary.setType("到店途径"); WebUtil.getRequest().setAttribute("ddtj", dataDictionaryService.findByModel(dataDictionary)); // 业务类型 dataDictionary.setType("业务类型"); WebUtil.getRequest().setAttribute("ywlx", dataDictionaryService.findByModel(dataDictionary)); // 门店信息 WebUtil.getRequest().setAttribute("shopNmae", getMe().getShopName()); WebUtil.getRequest().setAttribute("staffName", getMe().getSuName()); // 登录者门店的美疗师信息 WebUtil.getRequest().setAttribute("mls", shopstaffInfoService.findByRoleName(true, Dictionary.STAFF_POST_MLS)); return "admin/hive/mobile/CRM-visit"; } /** * 钉钉点击注册 */ @RequestMapping(value = "/toRegister") public String toRegister() { SystemDictionary dataDictionary = new SystemDictionary(); // 获取到店途径 dataDictionary.setType("到店途径"); WebUtil.getRequest().setAttribute("ddtj", customerDataDictionaryDao.selectByParentCode("DDTJ", getMe().getCompanyId())); // 获取生肖 dataDictionary.setType("生肖"); WebUtil.getRequest().setAttribute("sx", dataDictionaryService.findByModel(dataDictionary)); // 获取星座 dataDictionary.setType("星座"); WebUtil.getRequest().setAttribute("xz", dataDictionaryService.findByModel(dataDictionary)); // 获取 // 获取会员等级 WebUtil.getRequest().setAttribute("level", vipLevelService.findByModel(null)); return "admin/hive/mobile/CRM-vip"; } /** * 会员注册 */ @RequestMapping(value = "/registerVipInfo") public @ResponseBody AjaxResult register(RegisterInfo vipInfo) { vipInfo.setBirthday1(DateUtil.stringToDate(vipInfo.getVoBirthday(), "yyyy-MM-dd")); vipInfo.setVipState(Dictionary.VIP_STATE_HY); vipInfo.setStaffId(getMe().getSuId()); vipInfo.setShopId(getMe().getShopId()); vipInfo.setCompanyId(getMe().getCompanyId()); vipInfo.setVipType(Dictionary.VIP_TYPE_NOCARD); vipInfoService.add(vipInfo); return new AjaxResult(AjaxResult.STATUS_SUCCESS, "会员信息注册成功"); } /** * 修改会员信息 */ @RequestMapping(value = "/modifyVip") public @ResponseBody AjaxResult modifyVip(SysVipInfo vipInfo) { return modify(vipInfoService, vipInfo, "会员"); } /** * 通过电话号码模糊查询 */ @RequestMapping(value = "/findUserByPhoto") public @ResponseBody AjaxResult findUserByPhoto(String keyWord) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, vipInfoService.findUserByKey(keyWord), 0); } /** * 通过Id查询vip信息 */ @RequestMapping(value = "/findUserById") public @ResponseBody AjaxResult findUserById(Long id) { SysVipInfo vipInfo = vipInfoService.findById(id); vipInfo.setBalance(moneyCardUseDao.selectVipCardTotalMoney(id)); vipInfo.setLevelCard(cardUseService.findByVipId(vipInfo.getId())); return new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(vipInfo), 0); } /** * 查询会员等级 */ @RequestMapping(value = "/findVipLevel") public @ResponseBody AjaxResult findVipLevel(SysVipLevel sysVipLevel) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, vipLevelService.findByModel(sysVipLevel), 0); } /** * 通过电话号码精确查询 */ @RequestMapping(value = "/findUserPho") public @ResponseBody AjaxResult findUserPho(SysVipInfo info) { //System.out.println(info.getPhone()); return new AjaxResult(AjaxResult.STATUS_SUCCESS, vipInfoService.findByModel1(info), 0); } /** * 通过会员编号或者手机号查询会员 */ @RequestMapping(value = "/findUserByPhoneOrNo") public @ResponseBody AjaxResult findUserByPhoneOrNo(String keyWord) { List vips = vipInfoService.findByVipNoOrTel(keyWord); return new AjaxResult(AjaxResult.STATUS_SUCCESS, vips, 0); } @RequestMapping(value = "/getBirthday") public @ResponseBody AjaxResult getBirthday(SysVipInfo info) { Calendar c = Calendar.getInstance(); c.setTime(info.getBirthday1()); //获取年份 int year = c.get(Calendar.YEAR); //获取月份 int month = c.get(Calendar.MONTH) + 1; //获取日 int day = c.get(Calendar.DATE); //星座 String xz = DateUtil.getConstellation(month, day); SysVipInfo vip = new SysVipInfo(); vip.setConstell(xz); List vipList = new ArrayList(); vipList.add(vip); return new AjaxResult(AjaxResult.STATUS_SUCCESS, vipList, 0); } @RequestMapping(value = "/exportExcel") public void report( HttpServletResponse response, SysVipInfo vipInfo) throws IOException { SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); if(!DataAuthUtil.hasAllShopAuth()){ vipInfo.setShopId(sysUsers.getShopId()); } List res = new ArrayList<>(); ExcelSheetPO orderSheet = new ExcelSheetPO(); String title = "会员资料"; orderSheet.setSheetName(title); orderSheet.setTitle(title); String[] header = {"会员编号", "姓名", "性别", "手机号码", "会员类型", "会员活跃度", "到店途径", "健康顾问", "所属门店"}; orderSheet.setHeaders(header); QueryUtil.setQueryLimit(vipInfo); List dataList = vipInfoService.findInPage(vipInfo, null); List> list = new ArrayList<>(); if (dataList.size() > 0) { for (SysVipInfo item : dataList) { List temp = new ArrayList<>(); temp.add(item.getVipNo()); temp.add(item.getVipName()); temp.add(item.getSex()); temp.add(item.getPhone()); temp.add(item.getVipType()); temp.add(item.getVipState()); temp.add(item.getArrivalWay()); temp.add(item.getStaffName()); temp.add(item.getShopName()); list.add(temp); } } orderSheet.setDataList(list); res.add(orderSheet); response = ResponseHeadUtil.setExcelHead(response); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(title + DateUtil.getTimeMark() + ".xlsx".trim(), "UTF-8")); OutputStream os = response.getOutputStream(); ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true); } @RequestMapping(value = "/findAllVipInfo") @ResponseBody public AjaxResult findAllVipInfo() { return showList(vipInfoService, null, null); } @RequestMapping(value = "/findAllVipInfoWithShop") @ResponseBody public AjaxResult findAllVipInfoWithShop() { SysVipInfo info = new SysVipInfo(); info.setShopId(getMe().getShopId()); return showList(vipInfoService, info, null); } @RequestMapping(value = "/importVipInfo") @ResponseBody public AjaxResult importVipInfo(HttpServletResponse response, HttpServletRequest request, @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); String dirPath = fileStoragePath; // String dirPath = "C:/Users/wzy19/Desktop/zq"; File fileDir = new File(dirPath); LogUtil.info("#----->{}#", fileDir.exists()); if (!fileDir.exists()) { fileDir.mkdirs(); } File saveFile = new File(dirPath + "/" + fileName); file.transferTo(saveFile); int i = vipInfoService.importVipInfo(saveFile); if (i > 0) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, "导入成功"); } else { return new AjaxResult(AjaxResult.STATUS_FAIL, "导入失败"); } } @RequestMapping(value = "/toImportForm") public String toImportForm() { return "admin/hive/vip/vipImport-form"; } @RequestMapping(value = "/validFlagChange") @ResponseBody public AjaxResult validFlagChange(Long id) { SysVipInfo sysVipInfo = vipInfoService.findById(id); if (sysVipInfo == null) { return AjaxResult.buildFailInstance("用户不存在"); } if (SysVipInfo.VALID_FLAG_Y == sysVipInfo.getValidFlag()) { sysVipInfo.setValidFlag(SysVipInfo.VALID_FLAG_N); } else { sysVipInfo.setValidFlag(SysVipInfo.VALID_FLAG_Y); } vipInfoService.modify(sysVipInfo); return AjaxResult.buildSuccessInstance("设置成功"); } }