package com.matrix.system.hive.action; import cn.hutool.core.util.StrUtil; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.exception.GlobleException; 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.system.common.bean.SysUsers; import com.matrix.system.constance.Dictionary; 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.SysProjUseDao; import com.matrix.system.hive.dao.SysVipInfoDao; import com.matrix.system.hive.plugin.util.CollectionUtils; import com.matrix.system.hive.service.MoneyCardUseService; import com.matrix.system.hive.service.SysProjUseService; import com.matrix.system.hive.service.SysProjuseFreezeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; 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.util.ArrayList; import java.util.List; /** * 会员项目管理 * * @author jyy * @date 2016-09-03 */ @Controller @RequestMapping(value = "admin/projUser") public class ProjUseController extends BaseController { @Resource private SysProjUseService projUseService; @Resource private SysProjuseFreezeService sysProjuseFreezeService; @Resource private MoneyCardUseService moneyCardUseService; @Resource private SysProjUseDao projUseDao; @Autowired SysVipInfoDao vipInfoDao; @Autowired ShoppingGoodsDao shoppingGoodsDao; @Autowired MoneyCardUseDao moneyCardUseDao; @Value("${default.vip.photo.woman}") String defaultWoman; @Value("${default.vip.photo.man}") String defaultman; public static final String fnCode = "projUse"; public static final String search = fnCode + ":search"; public static final String edit = fnCode + ":edit"; public static final String del = fnCode + ":del"; public static final String add = fnCode + ":add"; //权限放到会员管理那里去 public static final String viptc = "vipInfo:viptc"; /** * 查看会员项目使用情况 * * @author jiangyouyao * @date 2016-09-03 */ @RequestMapping(value = "/showList") public @ResponseBody AjaxResult showTc(PaginationVO pageVo, SysProjUse sysProjUse) { sysProjUse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM); sysProjUse.setTaocanId(-1L); return new AjaxResult(AjaxResult.STATUS_SUCCESS, projUseService.findInPage(sysProjUse, pageVo), projUseService.findTotal(sysProjUse)); } /** * 查看会员项目使用情况 * * @author jiangyouyao * @date 2016-09-03 */ @RequestMapping(value = "/findProjUseFlow") public @ResponseBody AjaxResult findProjUseFlow(PaginationVO pageVo, SysProjUseFlow projUseFlow) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, projUseDao.selectProjUseFlow(projUseFlow, pageVo), projUseDao.selectProjUseFlowTotal(projUseFlow)); } /** * 将项目设置为有效 * * @author jiangyouyao * @date 2016-09-03 */ @RequestMapping(value = "/activeProj") public @ResponseBody AjaxResult activeTc(SysProjUse sysProjUse) { return projUseService.activeProj(sysProjUse); } /** * 将项目设置为无效 * * @author jiangyouyao * @date 2016-09-03 */ @RequestMapping(value = "/invalidProj") public @ResponseBody AjaxResult invalidTc(SysProjUse sysProjUse) { int i = projUseService.invalidProj(sysProjUse); if (i > 0) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, "已设置为无效"); } else { return new AjaxResult(AjaxResult.STATUS_FAIL, "设置失败"); } } /** * 转让项目 * * @param sysProjUse 转让信息 * 被转让的会员id * @return * @author jiangyouyao * @date 2016-09-04 */ @RequestMapping(value = "/transferProj") public @ResponseBody AjaxResult transferTc(SysProjUse sysProjUse, Long vipId2) { int i = projUseService.transferProj(sysProjUse, vipId2); if (i > 0) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, "项目转让成功"); } return new AjaxResult(AjaxResult.STATUS_FAIL, "项目转让失败"); } /** * 冻结会员项目 * * @param sysProjUse * @return */ @RequestMapping(value = "/freezeProj") public @ResponseBody AjaxResult freezeTc(SysProjUse sysProjUse) { int i = projUseService.freezeProj(sysProjUse); if (i > 0) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, "冻结成功"); } return new AjaxResult(AjaxResult.STATUS_FAIL, "冻结失败"); } /** * 冻结会员项目 * * @return */ @RequestMapping(value = "/editForm") public String editForm(Long id, HttpServletRequest request) { if (id != null) { SysProjUse sysProjUse = projUseService.findById(id); request.setAttribute("obj", sysProjUse); } return "admin/hive/vip/projUse-form"; } /** * 添加或修改会员項目信息 */ @Transactional @RequestMapping(value = "/addOrModify") public @ResponseBody AjaxResult addOrModify(SysProjUse sysProjUse) { if (sysProjUse.getId() != null) { SysUsers user=getMe(); //插入修改记录 SysProjUse oldProjUse = projUseService.findById(sysProjUse.getId()); SysProjUseFlow projUseFlow=new SysProjUseFlow(); projUseFlow.setProjUseId(sysProjUse.getId()); projUseFlow.setOptionType("人工修改"); projUseFlow.setProjName(oldProjUse.getProjName()); projUseFlow.setCreateBy(user.getSuName()); projUseFlow.setUpdateBy(user.getSuName()); projUseFlow.setPrice(sysProjUse.getPrice()); projUseFlow.setStatus(sysProjUse.getStatus()); projUseFlow.setBalance(sysProjUse.getBalance()); projUseFlow.setFailTime(sysProjUse.getFailTime()); projUseFlow.setIsOver(sysProjUse.getIsOver()); projUseFlow.setRemark(sysProjUse.getUpdateRemark()); projUseFlow.setSurplusCount(sysProjUse.getSurplusCount()); projUseDao.insertFlow(projUseFlow); return modify(projUseService, sysProjUse, "项目"); } else { return add(projUseService, sysProjUse, "项目"); } } @Value("${file_storage_path}") private String fileStoragePath; @RequestMapping(value = "/importProjUse") @ResponseBody @Transactional public AjaxResult importVipInfo(HttpServletResponse response, HttpServletRequest request, @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); // String dirPath = "E:"; String dirPath = fileStoragePath; File saveFile =new File (new File(dirPath).getAbsolutePath() + File.separator + fileName); if (!saveFile.exists()) { if (!saveFile.getParentFile().exists()) { saveFile.getParentFile().mkdirs(); } } file.transferTo(saveFile.getAbsoluteFile()); SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); List excelSheetPOList = ExcelUtil.readExcel(saveFile, null, null); //项目资料导入 List> dataList = excelSheetPOList.get(0).getDataList(); List projUseList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(dataList)) { for (int j = 1; j < dataList.size(); j++) { List objects = dataList.get(j); LogUtil.info("导入项目第" + j + "行" + objects); SysProjUse projUse = getProjFromExcelObjs(objects, Dictionary.SHOPPING_GOODS_TYPE_XM, j); projUseDao.insert(projUse); } } //项目资料导入=======end=== //套餐资料导入 List> taocanDataList = excelSheetPOList.get(1).getDataList(); List taocanProjUseList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(taocanDataList)) { //定义一个空套餐 SysProjUse taocan = null; for (int j = 1; j < taocanDataList.size(); j++) { List objects = taocanDataList.get(j); LogUtil.info("导入套餐第" + j + "行" + objects); Object vipName = objects.get(0); String vipNameStr = vipName==null?"":vipName.toString(); if (taocan == null || (taocan != null && StringUtils.isNotBlank(vipNameStr))) { //切换下一个套餐 taocan = getProjFromExcelObjs(objects, Dictionary.SHOPPING_GOODS_TYPE_TC, j); projUseDao.insert(taocan); } else if (taocan != null && StringUtils.isBlank(vipNameStr)) { //添加套餐中的项目 SysProjUse projUse = getProjFromExcelObjs(objects, Dictionary.SHOPPING_GOODS_TYPE_XM, j); projUse.setTaocanId(taocan.getId()); projUseDao.insert(projUse); } else { throw new GlobleException("第" + j + "行套餐导入格式不符合要求"); } } } //套餐资料导入=======end=== //充值卡资料导入 List> cardList = excelSheetPOList.get(2).getDataList(); List cardUseArrayList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(cardList)) { for (int j = 1; j < cardList.size(); j++) { List objects = cardList.get(j); LogUtil.info("导入项目第" + j + "行" + objects); MoneyCardUse moneyCardUse = getMoneyCarFromExcelObjs(objects, j); moneyCardUseDao.insert(moneyCardUse); } } //充值卡资料导入=======end=== return new AjaxResult(AjaxResult.STATUS_SUCCESS, "导入成功"); } private SysProjUse getProjFromExcelObjs(List objects, String type, int line) { SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); SysProjUse projUse = new SysProjUse(); Object tel = objects.get(1); if (tel != null) { String telStr = tel.toString(); SysVipInfo vipInfo = vipInfoDao.selectByPhone(StrUtil.trim(telStr),sysUsers.getCompanyId()); if (vipInfo == null) { vipInfo = new SysVipInfo(); vipInfo.setShopId(sysUsers.getShopId()); vipInfo.setPhone(telStr); vipInfo.setPhoto(defaultWoman); vipInfo.setName(objects.get(0).toString()); vipInfo.setIsDelete(Dictionary.DELETED_N); vipInfoDao.insert(vipInfo); } if (vipInfo != null) { String goodNo = String.valueOf(objects.get(3)); ShoppingGoods goods = shoppingGoodsDao.findByCode(goodNo); if (goods != null) { projUse.setVipId(vipInfo.getId()); projUse.setProjName(objects.get(2).toString()); projUse.setProjId(goods.getId()); projUse.setBalance(Double.valueOf(getDefautZero(objects.get(4) + ""))); projUse.setSurplusCount(Integer.parseInt(getDefautZero(objects.get(5) + ""))); projUse.setPrice(Double.parseDouble(getDefautZero(objects.get(6) + ""))); projUse.setDeductionNum(1); String timeStr = objects.get(7) + ""; if (StringUtils.isNotBlank(timeStr)) { projUse.setFailTime(DateUtil.stringToDate(timeStr, DateUtil.DATE_FORMAT_DD)); } projUse.setSource(objects.get(8) + ""); projUse.setRemark(objects.get(9) + ""); projUse.setIsOver(Dictionary.DELETED_N); projUse.setStatus(Dictionary.TAOCAN_STATUS_YX); if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(type)) { projUse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM); } else { projUse.setType(Dictionary.SHOPPING_GOODS_TYPE_TC); projUse.setIsCourse(goods.getIsCourse()); } } else { throw new GlobleException("第" + line + "行产品编号" + goodNo + "在系统中不存在"); } } else { throw new GlobleException("第" + line + "行会员" + telStr + "在系统中不存在"); } } else { throw new GlobleException("第" + line + "行会员号码为空"); } return projUse; } private MoneyCardUse getMoneyCarFromExcelObjs(List objects, int line) { MoneyCardUse moneyCardUse = new MoneyCardUse(); SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); Object tel = objects.get(1); if (tel != null) { String telStr = tel.toString(); SysVipInfo vipInfo = vipInfoDao.selectByPhone(StrUtil.trim(telStr),sysUsers.getCompanyId()); if (vipInfo == null) { vipInfo = new SysVipInfo(); vipInfo.setShopId(sysUsers.getShopId()); vipInfo.setPhone(telStr); vipInfo.setPhoto(defaultWoman); vipInfo.setName(objects.get(0).toString()); vipInfo.setIsDelete(Dictionary.DELETED_N); vipInfoDao.insert(vipInfo); } String goodNo = String.valueOf(objects.get(3)); ShoppingGoods goods = shoppingGoodsDao.findByCode(goodNo); String goodName = String.valueOf(objects.get(2)).trim(); if("储值卡".equals(goodName)){ goods= shoppingGoodsDao.selectVipCzGoods(); } if (goods != null || "储值卡".equals(goodName)) { moneyCardUse.setVipId(vipInfo.getId()); moneyCardUse.setCardName(objects.get(2).toString()); if (!"储值卡".equals(goodName)) { moneyCardUse.setGoodsId(goods.getId()); } moneyCardUse.setRealMoney(Double.valueOf(getDefautZero(objects.get(4) + ""))); moneyCardUse.setGiftMoney(Double.valueOf(getDefautZero(objects.get(5) + ""))); moneyCardUse.setLastCount(Integer.valueOf(getDefautZero(objects.get(6) + ""))); moneyCardUse.setUseTotal(moneyCardUse.getLastCount()); String timeStr = objects.get(7) + ""; if (StringUtils.isNotBlank(timeStr)) { moneyCardUse.setFailTime(DateUtil.stringToDate(timeStr, DateUtil.DATE_FORMAT_DD)); } moneyCardUse.setSource(objects.get(8) + ""); moneyCardUse.setRemark(objects.get(9) + ""); moneyCardUse.setIsOver(Dictionary.DELETED_N); moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_YX); if ("储值卡".equals(moneyCardUse.getCardName())) { moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y); } else if(Dictionary.FLAG_YES.equals(goods.getCarIsAll())){ moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y); }else{ moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N); } } else { throw new GlobleException("第" + line + "行产品编号" + goodNo + "在系统中不存在"); } } else { throw new GlobleException("第" + line + "行会员号码为空"); } return moneyCardUse; } private String getDefautZero(String s) { if (StringUtils.isBlank(s)) { return "0"; } else { return s; } } }