| package com.matrix.system.hive.action; | 
|   | 
| 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.message.StringUtil; | 
| 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, "项目"); | 
|         } | 
|     } | 
|   | 
|   | 
|   | 
|   | 
|   | 
|     @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:"; | 
|         //PropertiesUtil.getString(AppConstance.FILES_TORAGE_PATH); | 
|   | 
|         File saveFile = new File(dirPath + "/" + fileName); | 
|         file.transferTo(saveFile); | 
|   | 
|         SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); | 
|   | 
|         List<ExcelSheetPO> excelSheetPOList = ExcelUtil.readExcel(saveFile, null, null); | 
|   | 
| /* | 
|         //项目资料导入 | 
|         List<List<Object>> dataList = excelSheetPOList.get(0).getDataList(); | 
|         List<SysProjUse> projUseList = new ArrayList<>(); | 
|         if (CollectionUtils.isNotEmpty(dataList)) { | 
|             for (int j = 1; j < dataList.size(); j++) { | 
|                 List<Object> objects = dataList.get(j); | 
|                 LogUtil.info("导入项目第" + j + "行" + objects); | 
|                 SysProjUse projUse = getProjFromExcelObjs(objects, Dictionary.SHOPPING_GOODS_TYPE_XM, j); | 
|                 projUseDao.insert(projUse); | 
|             } | 
|         } | 
|         //项目资料导入=======end=== | 
|   | 
|   | 
|         //套餐资料导入 | 
|         List<List<Object>> taocanDataList = excelSheetPOList.get(1).getDataList(); | 
|         List<SysProjUse> taocanProjUseList = new ArrayList<>(); | 
|         if (CollectionUtils.isNotEmpty(taocanDataList)) { | 
|             //定义一个空套餐 | 
|             SysProjUse taocan = null; | 
|             for (int j = 1; j < taocanDataList.size(); j++) { | 
|                 List<Object> objects = taocanDataList.get(j); | 
|                 LogUtil.info("导入套餐第" + j + "行" + objects); | 
|                 Object vipName = objects.get(0); | 
|                 String vipNameStr = 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<List<Object>> cardList = excelSheetPOList.get(2).getDataList(); | 
|         List<MoneyCardUse> cardUseArrayList = new ArrayList<>(); | 
|         if (CollectionUtils.isNotEmpty(cardList)) { | 
|             for (int j = 1; j < cardList.size(); j++) { | 
|                 List<Object> 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<Object> 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(telStr); | 
|             if (vipInfo == null) { | 
|                 vipInfo = new SysVipInfo(); | 
|                 vipInfo.setShopId(sysUsers.getShopId()); | 
|                 vipInfo.setPhone(telStr); | 
|                 vipInfo.setPhoto(defaultWoman); | 
|                 vipInfo.setName(objects.get(0).toString()); | 
|                 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<Object> 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(telStr); | 
|             if (vipInfo == null) { | 
|                 vipInfo = new SysVipInfo(); | 
|                 vipInfo.setShopId(sysUsers.getShopId()); | 
|                 vipInfo.setPhone(telStr); | 
|                 vipInfo.setPhoto(defaultWoman); | 
|                 vipInfo.setName(objects.get(0).toString()); | 
|                 vipInfoDao.insert(vipInfo); | 
|             } | 
|             String goodNo = String.valueOf(objects.get(3)); | 
|             String goodName = String.valueOf(objects.get(2)).trim(); | 
|   | 
|   | 
|             ShoppingGoods goods = shoppingGoodsDao.findByCode(goodNo); | 
|             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; | 
|         } | 
|     } | 
|   | 
|   | 
| } |