package com.iamberry.wechat.handles.drp;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Sheet;
import jxl.Workbook;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.iamberry.wechat.core.entity.JsonBack;
import com.iamberry.wechat.core.entity.Page;
import com.iamberry.wechat.core.entity.PageBean;
import com.iamberry.wechat.core.entity.ResultMsg;
import com.iamberry.wechat.core.entity.banner.MessageDTO;
import com.iamberry.wechat.core.entity.drp.ApplyPlaceLogs;
import com.iamberry.wechat.core.entity.drp.ApplyUserInfo;
import com.iamberry.wechat.core.entity.drp.PageBeanEarningLogs;
import com.iamberry.wechat.core.entity.drp.PageBeanPlaceInfo;
import com.iamberry.wechat.core.entity.drp.PageBeanPlaceLogs;
import com.iamberry.wechat.core.entity.drp.PageBeanWithdraw;
import com.iamberry.wechat.core.entity.drp.PlaceInfo;
import com.iamberry.wechat.core.entity.drp.PlaceInfoBattleDto;
import com.iamberry.wechat.core.entity.drp.PlaceLogs;
import com.iamberry.wechat.core.entity.drp.PlaceRoleInfo;
import com.iamberry.wechat.core.entity.drp.PlaceWithDrawalsLogs;
import com.iamberry.wechat.core.entity.flow.TemplateInfo;
import com.iamberry.wechat.core.entity.member.Member;
import com.iamberry.wechat.face.drp.DrpRoleInfoService;
import com.iamberry.wechat.face.drp.PlaceInfoService;
import com.iamberry.wechat.face.drp.PlaceLogsService;
import com.iamberry.wechat.face.drp.PlaceWithDrawalsLogsService;
import com.iamberry.wechat.face.flow.TemplateInfoService;
import com.iamberry.wechat.face.member.MemberService;
import com.iamberry.wechat.face.qrcode.QrcodeService;
import com.iamberry.wechat.face.reback.RebackStaticService;
import com.iamberry.wechat.service.wechat.WeChatServiceImpl;
import com.iamberry.wechat.tools.DateTimeUtil;
import com.iamberry.wechat.tools.HttpClient431Util;
import com.iamberry.wechat.tools.ImageUtils;
import com.iamberry.wechat.tools.NameUtils;
import com.iamberry.wechat.tools.ObjectExcelView;
import com.iamberry.wechat.tools.ResultInfo;

/**
 * @description 后台的分销管理
 * @author 欧阳明
 * @date 2016-4-21
 */

@Controller
@RequestMapping("/admin/drp")
public class AdminWithDrp {
	@Autowired
	private PlaceInfoService placeInfoService;
	@Autowired
	private PlaceWithDrawalsLogsService placeWithDrawalsLogsService;
	@Autowired
	private PlaceLogsService placeLogsService;
	@Autowired
	private MemberService memberService;

	@Autowired
	private RebackStaticService rebackStaticService;
	@Autowired
	private QrcodeService qrcodeService;
	@Autowired
	private DrpRoleInfoService drpRoleInfoService;
	@Autowired
	private TemplateInfoService templateInfoService;
	@Autowired
	private WeChatServiceImpl weChatServiceImpl;
	

	/**
	 * 后台-进入商户添加页面(在用)
	 * @return
	 */
	@RequestMapping("/addPlaceInfo")
	public String addPlaceInfo(HttpServletRequest request, Model model) {
		// 获取角色列表
		List<PlaceRoleInfo> roles = drpRoleInfoService.getDrpRoleList2();
		// 获取模板列表
		List<TemplateInfo> templates = templateInfoService.getSelectTemplateInfo();
		model.addAttribute("roles", roles);
		model.addAttribute("templates", templates);
		return "/admin/drp/addPlaceInfo";
	}

	/**
	 * 后台-Drp分销增加页面
	 * 
	 * @return
	 */
	@RequestMapping("/addPlaceInfoBattle")
	public String addPlaceInfoBattle(HttpServletRequest request, Model model) {

		// 获取角色列表
		List<PlaceRoleInfo> roles = drpRoleInfoService.getDrpRoleList2();
		// 获取模板列表
		List<TemplateInfo> templates = templateInfoService.getSelectTemplateInfo();
		model.addAttribute("roles", roles);
		model.addAttribute("templates", templates);
		return "/admin/drp/addPlaceInfoBattle";
	}

	/**
	 * 后台-Drp分销商预生成分销商
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/addPlaceInfoAutoBattle")
	public Map<String, Object> PlaceInfoAddAutoBattle(HttpServletRequest request, PlaceInfoBattleDto placeInfoDto) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		int count = placeInfoDto.getNum();
		if (count < 1) {
			map.put("state", "false");
			map.put("message", "批量生成必须大于10");
		}
		PlaceInfo placeInfo = new PlaceInfo();
		placeInfo.setTemplateId(placeInfoDto.getTemplateId());
		placeInfo.setHasQrcode(placeInfoDto.getHasQrcode());
		placeInfo.setRoleId(placeInfoDto.getRoleId());
		placeInfo.setPlacePid(placeInfoDto.getPlacePid());
		String timeBefore = "a" + new Date().getTime();
		int beginId = 0;
		for (int i = 0; i < count; i++) {
			placeInfo.setName(timeBefore + i);
			placeInfo.setUserName(timeBefore + i);
			placeInfo.setAddr("待定中");
			placeInfo.setTel("13828467890");
			placeInfo.setRemark("批量生成");
			Map<String, Object> map2 = new HashMap<String, Object>();
			try {
				map2 = addPlaceInfoDeal(placeInfo);
			} catch (Exception ex) {
				ex.printStackTrace();
			}
			if (i == 0) {
				beginId = ((PlaceInfo) map2.get("data")).getId();
			}
		}
		map.put("state", "true");
		map.put("message", "批量生成成功");
		map.put("id", beginId);
		return map;
	}

	/**
	 * 后台-Drp预生成分销商修改
	 * 
	 * @return
	 */
	@RequestMapping("/advanceDownLoadPlaceInfos")
	public ModelAndView advanceDownLoadPlaceInfos(HttpServletRequest request) {

		String beginNumStr = request.getParameter("beginNum");
		String numstr = request.getParameter("num");
		Integer beginNum = null;
		Integer num = null;
		if (beginNumStr.equals("") || beginNumStr == null) {
			return null;
		}

		beginNum = Integer.valueOf(beginNumStr);

		// 准备model
		Map<String, Object> model = new HashMap<String, Object>();
		model.put("fileName", "分销商新增记录"); // 下载文件名称
		// 标题
		List<String> titles = new ArrayList<String>();
		titles.add("编号");
		titles.add("公司名");
		titles.add("用户名");
		titles.add("区域名");
		/*
		 * titles.add("是否二维码"); titles.add("父级id"); titles.add("角色id");
		 */
		titles.add("联系方式");
		titles.add("联系地址");
		titles.add("激活码");
		titles.add("备注");
		model.put("titles", titles);
		HashMap<String, Object> mapCondition = new HashMap<String, Object>();
		mapCondition.put("beginNum", beginNum);
		if (!numstr.equals("") && numstr != null) {
			num = Integer.valueOf(numstr);
			mapCondition.put("num", num);
		}
		List<PlaceInfo> placeList = placeInfoService.selectPlaceInfosForDownLoad(mapCondition);
		// 封装导出内容
		List<List<Object>> countexts = new ArrayList<List<Object>>();
		if (placeList != null && placeList.size() > 0) {
			for (PlaceInfo placeInfo : placeList) {
				List<Object> row = new ArrayList<Object>();
				row.add(placeInfo.getId());
				row.add(placeInfo.getName());
				row.add(placeInfo.getUserName());
				row.add(placeInfo.getAreaName());
				row.add(placeInfo.getTel());
				row.add(placeInfo.getAddr());
				row.add(placeInfo.getInitCode());
				row.add(placeInfo.getRemark());
				countexts.add(row);
			}
		}
		model.put("varList", countexts);
		ObjectExcelView erv = new ObjectExcelView();
		ModelAndView mv = new ModelAndView(erv, model);
		return mv;

	}

	/**
	 * 后台-添加一个商户 提交(在用)
	 * 添加一个和批量添加都用此方法
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/addPlaceInfoDeal")
	public Map<String, Object> addPlaceInfoDeal(PlaceInfo placeInfo) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		placeInfo.setStatus(1);
		//默认没完善个人信息	批量的时候添加的 须去掉
		if(placeInfo.getPlaceInfoStus() == null){
			placeInfo.setPlaceInfoStus(1);
		}
		int st = placeInfo.getHasQrcode();
		ResultMsg remsg = placeInfoService.addOne(placeInfo);
		if(!remsg.isStatus()){
			map.put("result", remsg.getResultCode());
			map.put("message", remsg.getMessage());
			return map;
		}
		placeInfo = (PlaceInfo) remsg.getData();
		if (st == 2) {
			qrcodeService.applyPlaceQrcodeUrl(placeInfo.getId());
		}
		if (remsg.getResultCode().equals(ResultInfo.SUCCESSCODE)) {
			map.put("result", ResultInfo.SUCCESSCODE);
			map.put("data", placeInfo);
			map.put("message", "操作成功，激活码是:" + placeInfo.getInitCode());
		} else {
			map.put("result", ResultInfo.ERRORCODE);
			map.put("message", NameUtils.getConfig("ERRORINFO"));
		}
		return map;
	}

	/**
	 * 商户父节点搜索(根据商户名称)(在用  	<一次查出了所有数据 待修改>)
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	@SuppressWarnings("unchecked")
	@ResponseBody
	//@RequestMapping("/searchPlaceInfoParent")
	@RequestMapping(value="/searchPlaceInfoParent",method = RequestMethod.POST)
	public Map<String, Object> searchPlaceInfoParent(HttpServletRequest request, String search, Integer roleId,Integer templateId)
			throws UnsupportedEncodingException {
		Map<String, Object> map = new HashMap<String, Object>();
		PlaceInfo placeInfo = new PlaceInfo();
		if (search == null || search.equals("")) {
			map.put("error", "参数错误异常"); 
			map.put("status", "false");
			return map;
		}
		if (roleId == null || roleId == 0) {
			map.put("error", "请先选择所属角色");
			map.put("status", "false");
			return map;
		}
		if (templateId == null || templateId == 0) {
			map.put("error", "请先选择模板");
			map.put("status", "false");
			return map;
		}
		if (roleId != null) {
			if(roleId == 47){//如果选择为合伙人或钻石会员则直接返回不查询
				return map;
			}
			if(roleId == 53){
				return map;
			}
			placeInfo.setRoleId(roleId);
		}
		if (templateId != null) { 
			if(templateId == 24 ){
				if(roleId == 52){
					placeInfo.setTemplateId(templateId);
				}else{
					map.put("error", "模板与角色不匹配");
					map.put("status", "false");
					return map;
				}
			}else{
				placeInfo.setTemplateId(templateId);
			}
			
		}
		placeInfo.setName(search);

		map = placeInfoService.SearchPlaceInfo(placeInfo);
		return map;
	}

	/**
	 * 用于修改页面增加角色或者模板的下拉列表
	 * @author 欧阳明
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/getSelectList")
	public List getSelectList(HttpServletRequest request) {
		int type = Integer.valueOf(request.getParameter("type"));
		if (type == 1) {
			// 获取角色列表
			List<PlaceRoleInfo> roles = drpRoleInfoService.getDrpRoleList2();
			return roles;
		} else {
			// 获取模板列表
			List<TemplateInfo> templates = templateInfoService.getSelectTemplateInfo();
			return templates;
		}
	}

	/**
	 * 后台-Drp分销编辑页面
	 * @return
	 */
	@RequestMapping("/EditPlaceInfo")
	public String EditPlaceInfoPage(HttpServletRequest request, Model model) {
		int id = Integer.valueOf(request.getParameter("id"));
		PlaceInfo placeInfo = placeInfoService.getPlaceInfoById(id);
		if (placeInfo.getPlacePid() == 0) {
			placeInfo.setParentName(placeInfo.getName());
		} else {
			PlaceInfo parentPlaceInfo = placeInfoService.getPlaceInfoById(placeInfo.getPlacePid());
			placeInfo.setParentName(parentPlaceInfo.getName());
		}
		model.addAttribute("placeInfo", placeInfo);
		return "/admin/drp/editPlaceInfo";
	}

	/**
	 * 后台-Drp分销编辑页面
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/EditPlaceInfoSubmit")
	public Map EditPlaceInfoSubmit(PlaceInfo placeInfo) {
		int st = placeInfo.getHasQrcode();

		PlaceInfo orgin = placeInfoService.getPlaceInfoById(placeInfo.getId());
		if (orgin.getHasQrcode() == 1 && st == 2) {
			qrcodeService.applyPlaceQrcodeUrl(placeInfo.getId());
		}
		if (orgin.getHasQrcode() == 2 && st == 1) {
			qrcodeService.updateQRcodeStatusByUserOpenid(String.valueOf(orgin.getId()));
		}

		ResultMsg remsg = placeInfoService.update(placeInfo);
		HashMap map = new HashMap();
		if (remsg.getResultCode().equals(ResultInfo.SUCCESSCODE)) {
			map.put("result", ResultInfo.SUCCESSCODE);
			map.put("message", remsg.getMessage());
		} else {
			map.put("result", ResultInfo.ERRORCODE);
			map.put("message", NameUtils.getConfig("ERRORINFO"));
		}
		return map;
	}

	/**
	 * 删除分销商-属于逻辑删除
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/deletePlaceInfo")
	public Map deletePlaceInfo(HttpServletRequest request) {
		int id2 = Integer.valueOf(request.getParameter("id"));

		PlaceInfo placeInfo = new PlaceInfo();
		placeInfo.setId(id2);
		placeInfo.setStatus(2);
		ResultMsg remsg = placeInfoService.update(placeInfo);
		HashMap map = new HashMap();
		if (remsg.getResultCode().equals(ResultInfo.SUCCESSCODE)) {
			map.put("result", ResultInfo.SUCCESSCODE);
			map.put("message", remsg.getMessage());
		} else {
			map.put("result", ResultInfo.ERRORCODE);
			map.put("message", NameUtils.getConfig("ERRORINFO"));
		}
		return map;
	}

	/**
	 * 后台-Drp分销绑定页面
	 * 
	 * @return
	 */
	@RequestMapping("/bindingPlaceInfo")
	public String bindingPlaceInfo(
			@RequestParam(value = "pageNO", defaultValue = "1", required = false) int pageNO,
			@RequestParam(value = "pageSize", defaultValue = "5", required = false) int pageSize,
			HttpServletRequest request,Model model) {
		String userInput = request.getParameter("userInput");
		
		Page page = new Page();
		if(userInput !=null && !userInput.equals("")){
			page.getParams().put("userInput", userInput);
			model.addAttribute("userInput", userInput);
		}
		page.setPageNo((pageNO - 1) * pageSize);
		int count = memberService.getCount();
		int pageCount = count % pageSize == 0 ? count / pageSize : count
				/ pageSize + 1;
		page.setPageSize(pageSize);
		List<Member> memberList = memberService.getMemberByPage(page);
		model.addAttribute("memberList", memberList);
		model.addAttribute("pageNO", pageNO);
		model.addAttribute("pageSize", pageCount);
		model.addAttribute("url", "/admin/drp/bindingPlaceInfo?pageSize=" + pageSize
				+ "&pageNO=");
		String initCode = request.getParameter("initCode");
		model.addAttribute("initCode", initCode);
		return "/admin/drp/bindingPlaceInfo";
	}
	/**
	 * 后台-Drp分销绑定
	 * 
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/bindingPlaceInfoSubmit")
	public Map bindingPlaceInfoSubmit(HttpServletRequest request,Model model) {
		String initCode = request.getParameter("initCode");
		String openId = request.getParameter("openId");
		HashMap map = new HashMap();
		if(initCode == null|| initCode.equals("") || openId == null || openId.equals("")){
			map.put("result", ResultInfo.ERRORCODE);	
		}
		weChatServiceImpl.bulidPlace(initCode, openId);
		map.put("result", ResultInfo.SUCCESSCODE);
		return map;
	}
	
	/**
	 * 后台-Drp分销管理主界面
	 * @param pageNO
	 * @param pageSize
	 * @return
	 */
	@RequestMapping("/index")
	public String index() {
		return "/admin/drp/placeInfolist";
	}

	/**
	 * 分销商综合查询
	 * @param str
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/initTable")
	public Map initPlaceInfoTable2(@RequestBody PageBeanPlaceInfo tmp) throws Exception {
		if (tmp != null && tmp.getCondition().getUserNickname() != null
				&& !"".equals(tmp.getCondition().getUserNickname())) {
			tmp.getCondition().setUserNickname(URLEncoder.encode(tmp.getCondition().getUserNickname(), "UTF-8"));
		}
		PageBean page = new PageBean();
		page.setCondition(tmp.getCondition());
		page.setPageNumber(tmp.getPageNumber());
		page.setPageSize(tmp.getPageSize());
		PlaceInfo pinfo = new PlaceInfo();
		if (page.getCondition() == null) {
			page.setCondition(pinfo);
		}
		Map map = placeInfoService.SearchPlaceInfoPage(page);
		page = (PageBean) map.get("page");

		return map;
	}

	// ===================================分销提现管理==========================================
	/**
	 * 分销提现页面
	 * @param str
	 * @return
	 */
	@RequestMapping("/initWithdraw")
	public String withdraw() {
		return "/admin/drp/withdrawlist";
	}

	@RequestMapping("/downLoadWithdraw")
	public ModelAndView downLoadWithdraw(HttpServletRequest request, PlaceWithDrawalsLogs tmp) {
		// 准备model
		Map<String, Object> model = new HashMap<String, Object>();
		model.put("fileName", "分销提现记录"); // 下载文件名称

		// 标题
		List<String> titles = new ArrayList<String>();
		titles.add("分销商");
		titles.add("角色");
		titles.add("金额");
		titles.add("收款人");
		titles.add("收款人联系方式");
		titles.add("收款人卡号");
		titles.add("所属银行");
		titles.add("申请状态");
		titles.add("创建时间");
		model.put("titles", titles);

		// 查询分销提现记录
		PageBean page = new PageBean();
		// page.setCondition(tmp.getCondition());
		PlaceWithDrawalsLogs pinfo = new PlaceWithDrawalsLogs();
		if (page.getCondition() == null) {
			page.setCondition(pinfo);
		}
		List<PlaceWithDrawalsLogs> placeList = placeWithDrawalsLogsService.selectAllMore(tmp);
		// 封装导出内容
		List<List<Object>> countexts = new ArrayList<List<Object>>();
		if (placeList != null && placeList.size() > 0) {
			for (PlaceWithDrawalsLogs drawalsLogs : placeList) {
				List<Object> row = new ArrayList<Object>();
				row.add(drawalsLogs.getName());
				row.add(drawalsLogs.getRoleName());
				row.add(drawalsLogs.getWithDrawalsNum());
				row.add(drawalsLogs.getWithDrawalsName());
				row.add(drawalsLogs.getTel());

				row.add(drawalsLogs.getAccountNo());
				row.add(drawalsLogs.getBankLocal());
				String status = "";
				switch (drawalsLogs.getStatus()) {
				case 1:
					status = "申请中";
					break;
				case 2:
					status = "申请成功";
					break;
				case 3:
					status = "申请失败";
					break;
				}
				row.add(status);
				if (drawalsLogs.getCreateDate() != null) {
					row.add(DateTimeUtil.format(drawalsLogs.getCreateDate(), NameUtils.getConfig("DATE_TIME_FORMAT")));
				}
				countexts.add(row);
			}
		}
		model.put("varList", countexts);
		ObjectExcelView erv = new ObjectExcelView();
		ModelAndView mv = new ModelAndView(erv, model);
		return mv;
	}

	/**
	 * 分销提现管理
	 * 
	 * @param str
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/withdrawTable")
	public Map withdrawTable(@RequestBody PageBeanWithdraw tmp) {
		PageBean page = new PageBean();
		page.setCondition(tmp.getCondition());
		page.setPageNumber(tmp.getPageNumber());
		page.setPageSize(tmp.getPageSize());
		PlaceWithDrawalsLogs pinfo = new PlaceWithDrawalsLogs();
		if (page.getCondition() == null) {
			page.setCondition(pinfo);
		}
		Map map = placeWithDrawalsLogsService.HistoryRecordsManager(page);
		// page=(PageBean)map.get("page");
		return map;
	}

	/**
	 * 进入提现处理页
	 * 
	 * @param str
	 * @return
	 */
	@RequestMapping("/withdrawPaper")
	public String withdrawPaper(HttpServletRequest request, Model model) {
		int id = Integer.valueOf(request.getParameter("id"));
		PlaceWithDrawalsLogs placeWithDrawalsLogs = placeWithDrawalsLogsService.getOne(id);
		model.addAttribute("placeWithDrawalsLogs", placeWithDrawalsLogs);
		return "/admin/drp/withdrawPaper";
	}

	/**
	 * 处理提现
	 * 
	 * @param str
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/dealWithdraw")
	public Map<String, String> dealWithdrawPaper(PlaceWithDrawalsLogs placeWithDrawalsLogs) {
		ResultMsg remsg = placeWithDrawalsLogsService.dealApply(placeWithDrawalsLogs);
		HashMap<String, String> map = new HashMap<String, String>();
		if (placeWithDrawalsLogs == null) {
			return map;
		}
		PlaceWithDrawalsLogs withDrawalsLogs = placeWithDrawalsLogsService.getOne(placeWithDrawalsLogs.getId());
		if (remsg.getResultCode().equals(ResultInfo.SUCCESSCODE)) {
			map.put("result", ResultInfo.SUCCESSCODE);
			map.put("message", remsg.getMessage());

			// 返现后给用户推送微信消息
			if (placeWithDrawalsLogs.getStatus() == 2) { // 审核通过
				if (withDrawalsLogs != null && StringUtils.isNotEmpty(withDrawalsLogs.getOpenid())
						&& withDrawalsLogs.getWithDrawalsNum() > 0) {
					Member member = memberService.getMemberByUserOpenId(withDrawalsLogs.getOpenid());
				}
			} else if (placeWithDrawalsLogs.getStatus() == 3) { // 审核不通过
				if (withDrawalsLogs != null && StringUtils.isNotEmpty(withDrawalsLogs.getOpenid())
						&& withDrawalsLogs.getWithDrawalsNum() > 0) {
					try {
						Member member = memberService.getMemberByUserOpenId(withDrawalsLogs.getOpenid());
						String temp = ResultInfo.INCOMEREMINDTEMP;
						temp = temp.replaceFirst("firstValueIamberry", ResultInfo.INCOMEREJECTMESSAGE)
								.replaceFirst("accountValueIamberry",
										URLDecoder.decode(member.getUserNickname(), "UTF-8"))
								.replaceFirst("timeValueIamberry",
										DateTimeUtil.format(new Date(), NameUtils.getConfig("DATE_TIME_FORMAT")))
								.replaceFirst("typeValueIamberry", "申请提现："
										+ new Double(withDrawalsLogs.getWithDrawalsNum() / 100.0).toString() + "元")
								.replaceFirst("remarkValueIamberry", ResultInfo.INTOSHOP);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		} else {
			map.put("result", ResultInfo.ERRORCODE);
			map.put("message", NameUtils.getConfig("ERRORINFO"));
		}
		return map;
	}

	// ===============================分销收支记录管理========================================
	/**
	 * 现金记录页面
	 * 
	 * @param str
	 * @return
	 */
	@RequestMapping("/initlogs")
	public String logs() {
		return "/admin/drp/placeLogslist";
	}

	/**
	 * 初始化订单表格
	 * 
	 * @param str
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/logsTable")
	public Map orderTable(@RequestBody PageBeanPlaceLogs tmp) {
		PageBean page = new PageBean();
		page.setCondition(tmp.getCondition());
		page.setPageNumber(tmp.getPageNumber());
		page.setPageSize(tmp.getPageSize());
		PlaceLogs pLogs = new PlaceLogs();
		if (page.getCondition() == null) {
			page.setCondition(pLogs);
		}
		Map map = placeLogsService.SearchPlaceLogsPage(page);
		return map;
	}

	// =================================分销订单收入记录===================================

	/**
	 * 分销订单收入记录
	 * 
	 * @param str
	 * @return
	 */
	@RequestMapping("/initOrderlogs")
	public String initOrderlogs() {
		return "/admin/drp/orderEarningLogslist";
	}

	/**
	 * 初始化订单表格
	 * 
	 * @param str
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/orderEarningTable")
	public Map orderEarningTable(@RequestBody PageBeanEarningLogs tmp) {

		PageBean page = new PageBean();
		page.setCondition(tmp.getCondition());
		page.setPageNumber(tmp.getPageNumber());
		page.setPageSize(tmp.getPageSize());

		// Map map=placeLogsService.searchDrpRecord(page);
		Map map = rebackStaticService.getSearchIncomeDetail(page);
		return map;
	}

	/**
	 * 需要下载二维码的批量打包
	 * 
	 * @param request
	 * @param response
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/battle2w")
	public synchronized Map battle2w(HttpServletRequest request, HttpServletResponse response) {

		Map resultmap = new HashMap<String, String>();
		WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
		ServletContext servletContext = webApplicationContext.getServletContext();
		String realPath = servletContext.getRealPath(ResultInfo.QRCODE_IMAGE);
		String fileName = String.valueOf(new Date().getTime());
		try {
			String name = request.getParameter("name");
			String parentName = request.getParameter("supperName");
			String userName = request.getParameter("openid");
			PlaceInfo placeInfo = new PlaceInfo();
			placeInfo.setName(name);
			placeInfo.setUserName(userName);
			placeInfo.setParentName(parentName);

			List<PlaceInfo> placeList = placeInfoService.getPlaceId(placeInfo);
			ResponseEntity<byte[]> entity = null;
			if (placeList != null && placeList.size() > 0) {
				for (PlaceInfo place : placeList) {
					if (place.getQrcodeUrl() == null || "".equals(place.getQrcodeUrl())) {
						continue;
					}
					String url = place.getQrcodeUrl();
					String qrcode = realPath + "/" + place.getId() + "qrcode.png";
					// url =
					// "http://localhost:8080/iamberry/common/images/default_qrcode.png";
					Map<String, Object> map = this.selectSuperior(String.valueOf(place.getId()));
					String placeName = "";
					String imageName = String.valueOf(place.getId());
					if (map != null) {
						placeName = (String) map.get("name");
						imageName = (String) map.get("name");
					}
					String waterMark = realPath + "/" + imageName + ".png";
					File file = new File(waterMark);
					File files = new File(realPath);
					if (!files.exists()) {
						files.mkdir();
					}
					if (!file.exists()) {
						URL httpurl = new URL(url);
						org.apache.commons.io.FileUtils.copyURLToFile(httpurl, new File(qrcode));
						this.rwFile(servletContext.getRealPath(NameUtils.getConfig("WECHAT_DEFAULT_WATERMARK")),
								realPath, imageName);
						ImageUtils.press(waterMark, qrcode, placeName, -1, 170, 320, 250);
					}
				}

				/*
				 * Task2wm tasks=new Task2wm(placeList,0,placeList.size());
				 * ForkJoinPool pool=new ForkJoinPool(); pool.execute(tasks);
				 * do{
				 * System.out.println("active Thread:"+pool.getActiveThreadCount
				 * ()); }while(!tasks.isDone()); pool.shutdown();
				 */
			}
			String zipName = getZipPath(realPath, fileName, placeList);
			resultmap.put("status", "true");
			resultmap.put("fileName", fileName);
			resultmap.put("message", "success");
		} catch (Exception e) {
			e.printStackTrace();
			resultmap.put("status", "false");
			resultmap.put("fileName", fileName);
			resultmap.put("message", "fail");

		}
		return resultmap;
	}

	/**
	 * 批量下载二维码
	 * 
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value = "/downLoadList")
	public synchronized ResponseEntity<byte[]> downLoadList(HttpServletRequest request, HttpServletResponse response) {
		String filePath = request.getServletContext().getRealPath(ResultInfo.QRCODE_IMAGE);

		String zipName = filePath + "/" + request.getParameter("zipName");
		String fileName = String.valueOf(new Date().getTime());

		ResponseEntity<byte[]> entity = null;
		// 创建HttpHeaders对象
		HttpHeaders headers = new HttpHeaders();
		// 创建一个响应吗
		HttpStatus httpStatus = HttpStatus.OK;
		// 创建对象
		try {
			headers.add("Content-Disposition",
					"attachment;filename=\"" + new String((fileName + ".zip").getBytes("UTF-8"), "ISO-8859-1") + "\"");
			// 添加一个头消息
			headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
			entity = new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File(zipName)), headers, httpStatus);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 手动释放资源
		return entity;
	}

	/**
	 * 压缩文件方法
	 * 
	 * @param zipPath
	 *            压缩路径
	 * @param fileName
	 *            压缩后压缩包名称
	 * @return
	 * @throws Exception
	 */
	public String getZipPath(String zipPath, String fileName, List<PlaceInfo> placeList) throws Exception {
		Map searchmap = new HashMap();
		for (PlaceInfo placeInfo : placeList) {
			searchmap.put(String.valueOf(placeInfo.getId()), placeInfo);
		}

		File sourceFile = new File(zipPath);
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		FileOutputStream fos = null;
		ZipOutputStream zos = null;
		// 判断该压缩文件的目录是否存在
		if (sourceFile.exists() == false) {
			// System.out.println(">>>>>> 待压缩的文件目录：" + zipPath + " 不存在.
			// <<<<<<");
			return "";
		}
		try {
			File zipFile = new File(zipPath + "/" + fileName + ".zip");
			// 如果该压缩文件已经存在，则不再进行压缩
			if (zipFile.exists()) {
				// System.out.println(">>>>>> " + zipPath + " 目录下存在名字为：" +
				// fileName + ".zip" + " 打包文件. <<<<<<");
				return zipPath + "/" + fileName + ".zip";
			}
			File[] sourceFiles = sourceFile.listFiles();
			fos = new FileOutputStream(zipFile);
			zos = new ZipOutputStream(new BufferedOutputStream(fos));
			byte[] buffer = new byte[1024 * 10];
			if (null == sourceFiles || sourceFiles.length < 1) {
				// System.out.println(">>>>>> 待压缩的文件目录：" + zipPath + "
				// 里面不存在文件,无需压缩. <<<<<<");
				return "";
			}
			for (int i = 0; i < sourceFiles.length; i++) {

				String picName = sourceFiles[i].getName();
				// System.out.println("picName"+picName);
				String picNo = "";
				try {
					picNo = picName.substring(0, picName.indexOf("-"));
				} catch (Exception ex) {
					ex.printStackTrace();
					continue;
				}

				if (searchmap.get(picNo) == null) {
					continue;
				}
				if (!sourceFiles[i].getName().endsWith("qrcode.png")) {
					// 创建ZIP实体,并添加进压缩包
					ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
					zos.putNextEntry(zipEntry);
					// 读取待压缩的文件并写进压缩包里
					fis = new FileInputStream(sourceFiles[i]);
					bis = new BufferedInputStream(fis, 1024 * 10);
					int read = 0;
					while ((read = bis.read(buffer, 0, 1024 * 10)) != -1) {
						zos.write(buffer, 0, read);
					}
					searchmap.remove(picNo);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != bis)
					bis.close();
				if (null != zos)
					zos.close();
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
		return zipPath + "/" + fileName + ".zip";
	}

	/**
	 * 分销商下载二维码功能
	 * 
	 * @param request
	 * @param url
	 */
	@RequestMapping(value = "/downLoad")
	public synchronized ResponseEntity<byte[]> downLoad(HttpServletRequest request, HttpServletResponse response) {
		try {
			String openId = request.getParameter("openId");
			WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
			ServletContext servletContext = webApplicationContext.getServletContext();
			String realPath = servletContext.getRealPath(ResultInfo.QRCODE_IMAGE);
			String url = request.getParameter("url");
			String qrcode = realPath + "/" + openId + "qrcode.png";
			// url =
			// "http://localhost:8080/watero/common/images/default_qrcode.png";
			Map<String, Object> map = this.selectSuperior(openId);
			String name = "";
			String code = "";
			String imageName = openId;
			String imageCode = "";
			if (map != null) {
				name = (String) map.get("name");
				code = (String) map.get("code");
				imageName = (String) map.get("imageName");
				imageCode = (String) map.get("imageCode");
			}

			String waterMark = realPath + "/" + imageName + ".png";
			File file = new File(waterMark);
			File files = new File(realPath);
			if (!files.exists()) {
				files.mkdir();
			}
			if (!file.exists()) {
				HttpClient431Util.downloadFile(url, qrcode);
				this.rwFile(servletContext.getRealPath(NameUtils.getConfig("WECHAT_DEFAULT_WATERMARK")), realPath,
						imageName);
				ImageUtils.press(waterMark, qrcode, name, -1, 150, 320, 250);
			}
			if(code != null && !code.equals("")){
				ImageUtils.press(waterMark, qrcode, "门店激活码："+code, -1, 180, 320, 250);
			}
			if(imageCode != null && !imageCode.equals("")){
				ImageUtils.press(waterMark, qrcode, "当前商户激活码："+imageCode, -1, 210, 320, 250);
			}
			
			// 创建HttpHeaders对象
			HttpHeaders headers = new HttpHeaders();
			// 添加一个头消息
			headers.add("Content-Disposition",
					"attachment;filename=\"" + new String((imageName + ".png").getBytes("UTF-8"), "ISO-8859-1") + "\"");
			headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
			// 创建一个响应吗
			HttpStatus httpStatus = HttpStatus.OK;
			// 创建对象
			ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(
					FileUtils.readFileToByteArray(new File(waterMark)), headers, httpStatus);
			// 手动释放资源
			return entity;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	// 查询线下上级，拼接名称
	public Map<String, Object> selectSuperior(String openId) {
		if (null == openId || "".equals(openId)) {
			return null;
		}
		String imageName = "";
		Map<String, Object> map = new HashMap<String, Object>();
		PlaceInfo palceInfo1 = new PlaceInfo();
		palceInfo1.setId(Integer.parseInt(openId));
		StringBuffer name = new StringBuffer();
		PlaceInfo placeInfo = this.placeInfoService.getOnePlaceInfoByInitcode(palceInfo1);
		if (placeInfo == null) {
			return null;
		}
		imageName = openId + "-" + placeInfo.getName();
		map.put("imageName", imageName);
		map.put("imageCode", placeInfo.getInitCode());
		PlaceRoleInfo placeRoleInfo = new PlaceRoleInfo();
		PlaceInfo parentPlace = null;
		PlaceInfo superPlace = null;
		PlaceInfo threePlace = null;
		PlaceInfo fourPlace = null;
		PlaceInfo fivePlace = null;
		// 查询自己的角色信息
		placeRoleInfo.setRoleId(placeInfo.getRoleId());
		placeRoleInfo = drpRoleInfoService.selectDrpRoleInfo(placeRoleInfo);
		if (placeInfo != null && placeRoleInfo != null && placeInfo.getUserName() != null
				&& placeRoleInfo.getRoleName() != null) {
			// System.out.println(placeInfo.getUserName()+" roleName:" +
			// placeRoleInfo.getRoleName());
			name.append(placeInfo.getUserName() + placeRoleInfo.getRoleName());
			// 查询第一级上级角色信息
			if (!"".equals(String.valueOf(placeInfo.getPlacePid()))) {
				parentPlace = this.placeInfoService.getPlaceInfoById(placeInfo.getPlacePid());
				if (null != parentPlace) {
					placeRoleInfo.setRoleId(parentPlace.getRoleId());
					placeRoleInfo = drpRoleInfoService.selectDrpRoleInfo(placeRoleInfo);
					name.insert(0, parentPlace.getUserName() + placeRoleInfo.getRoleName() + "—");
					map.put("code", parentPlace.getInitCode());
					map.put("name", name.toString());
					return map;
				}
			}
			// 查询第二级上级角色信息
			if (null != parentPlace && !"".equals(String.valueOf(parentPlace.getPlacePid()))) {
				superPlace = this.placeInfoService.getPlaceInfoById(parentPlace.getPlacePid());
				if (null != superPlace) {
					placeRoleInfo.setRoleId(superPlace.getRoleId());
					placeRoleInfo = drpRoleInfoService.selectDrpRoleInfo(placeRoleInfo);
					name.insert(0, superPlace.getUserName() + placeRoleInfo.getRoleName() + "—");
					map.put("code", superPlace.getInitCode());
					map.put("name", name.toString());
					return map;
				}
				
			}
			// 查询第三级上级角色信息
			if (null != superPlace && !"".equals(String.valueOf(superPlace.getPlacePid()))) {
				threePlace = this.placeInfoService.getPlaceInfoById(superPlace.getPlacePid());
				if (null != threePlace) {
					placeRoleInfo.setRoleId(threePlace.getRoleId());
					placeRoleInfo = drpRoleInfoService.selectDrpRoleInfo(placeRoleInfo);
					name.insert(0, threePlace.getUserName() + placeRoleInfo.getRoleName() + "—");
					map.put("code", threePlace.getInitCode());
					map.put("name", name.toString());
					return map;
				}
			
			}
			// 查询第四级上级角色信息
			if (null != threePlace && !"".equals(String.valueOf(threePlace.getPlacePid()))) {
				fourPlace = this.placeInfoService.getPlaceInfoById(threePlace.getPlacePid());
				if (null != fourPlace) {
					placeRoleInfo.setRoleId(fourPlace.getRoleId());
					placeRoleInfo = drpRoleInfoService.selectDrpRoleInfo(placeRoleInfo);
					name.insert(0, fourPlace.getUserName() + placeRoleInfo.getRoleName() + "—");
					map.put("code", fourPlace.getInitCode());
					map.put("name", name.toString());
					return map;
				}
				
			}
			// 查询第五级上级角色信息
			if (null != fourPlace && !"".equals(String.valueOf(fourPlace.getPlacePid()))) {
				fivePlace = this.placeInfoService.getPlaceInfoById(fourPlace.getPlacePid());
				if (null != fivePlace) {
					placeRoleInfo.setRoleId(fivePlace.getRoleId());
					placeRoleInfo = drpRoleInfoService.selectDrpRoleInfo(placeRoleInfo);
					name.insert(0, fivePlace.getUserName() + placeRoleInfo.getRoleName() + "—");
					map.put("code", fivePlace.getInitCode());
					map.put("name", name.toString());
					return map;
				}
			
			}
			map.put("name", name.toString());
			return map;
		}
		return null;
	}

	// 从本地获取添加水印的背景图片
	public void rwFile(String str1, String str2, String openId) {
		try {
			File f2 = new File(str2);
			File f1 = new File(str1);
			if (f2.exists()) {
				FileInputStream fis = new FileInputStream(f1);
				FileOutputStream fos = new FileOutputStream(f2 + "\\" + openId + ".png");
				byte[] b = new byte[1024];
				int i = fis.read(b);
				while (i != -1) {
					fos.write(b, 0, i);
					i = fis.read(b);
				}
				fis.close();
				fos.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 分页查询分销角色表数据
	 * 
	 * @param request
	 * @param response
	 * @param pageSize
	 * @param pageNO
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getDrpRoleList")
	public ModelAndView getDrpRoleList(HttpServletRequest request,
			@RequestParam(value = "pageSize", defaultValue = "6", required = false) Integer pageSize,
			@RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO) throws Exception {
		ModelAndView mv = new ModelAndView("admin/drp/roleList");
		String text = request.getParameter("text");
		StringBuffer url = new StringBuffer("/admin/drp/getDrpRoleList?pageSize=" + pageSize);
		PlaceRoleInfo drpRoleInfo = new PlaceRoleInfo();
		if (null != text && !"".equals(text)) {
			if (!request.getMethod().equalsIgnoreCase("post")) {
				text = new String(text.getBytes("ISO-8859-1"), "UTF-8");
			}
			drpRoleInfo.setRoleName(text);
			url.append("&text=" + text);
		}
		url.append("&pageNO=");
		drpRoleInfo.getPage().setPageSize(pageSize);
		drpRoleInfo.getPage().setPageNumber(pageNO);
		drpRoleInfo.getPage().initRecordBegin();
		List<PlaceRoleInfo> drpRoleList = drpRoleInfoService.getDrpRoleList(drpRoleInfo);
		mv.addObject("text", text);
		mv.addObject("drpRoleList", drpRoleList);
		mv.addObject("pageNO", pageNO);
		mv.addObject("url", url.toString());
		mv.addObject("pageSize", drpRoleInfoService.selectDrpRoleCount(drpRoleInfo));
		return mv;
	}

	/**
	 * 进入分销角色添加页面
	 * 
	 * @param request
	 * @param drpRoleInfo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/addDrpRole")
	public ModelAndView addDrpRole(HttpServletRequest request) throws Exception {
		ModelAndView mv = new ModelAndView("admin/drp/addDrpRoleInfo");
		return mv;
	}

	/**
	 * 添加角色信息
	 * 
	 * @param request
	 * @param drpRoleInfo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/addDrpRoleInfo")
	public ModelAndView addDrpRoleInfo(HttpServletRequest request, PlaceRoleInfo drpRoleInfo) throws Exception {
		ModelAndView mv = new ModelAndView("admin/msg/msg");
		Integer num = drpRoleInfoService.addDrpRoleInfo(drpRoleInfo);
		if (num > 0) {
			mv.addObject("msgObj", new MessageDTO(true, "恭喜您,操作成功", "分销角色已添加成功,刷新即可!"));
		} else {
			mv.addObject("msgObj", new MessageDTO(false, "对不起，操作有误", "对不起，您刚才的操作流程有误，请按规定填写数据！"));
		}
		return mv;
	}

	/**
	 * 跳转到修改分销角色信息页面
	 * 
	 * @param request
	 * @param roleId
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/updateDrpRole")
	public ModelAndView updateDrpRole(HttpServletRequest request,
			@RequestParam(value = "roleId", defaultValue = "", required = false) Integer roleId) throws Exception {
		ModelAndView mv = new ModelAndView("admin/drp/updateDrpRoleInfo");
		if ("".equals(roleId.toString())) {
			return mv;
		}
		PlaceRoleInfo drpRoleInfo = new PlaceRoleInfo();
		drpRoleInfo.setRoleId(roleId);
		drpRoleInfo = drpRoleInfoService.selectDrpRoleInfo(drpRoleInfo);
		mv.addObject("drpRoleInfo", drpRoleInfo);
		return mv;
	}

	/**
	 * 修改分销角色数据
	 * 
	 * @param request
	 * @param drpRoleInfo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/updateDrpRoleInfo")
	public ModelAndView updateDrpRoleInfo(HttpServletRequest request, PlaceRoleInfo placeRoleInfo) throws Exception {
		ModelAndView mv = new ModelAndView("admin/msg/msg");
		if (null == placeRoleInfo.getRoleId() || "".equals(placeRoleInfo.getRoleId().toString())) {
			mv.addObject("msgObj", new MessageDTO(false, "对不起，操作有误", "对不起，您刚才的操作流程有误，请按规定填写数据！"));
			return mv;
		}
		Integer num = drpRoleInfoService.updateDrpRoleInfo(placeRoleInfo);
		if (num > 0) {
			mv.addObject("msgObj", new MessageDTO(true, "恭喜您,操作成功", "分销角色已修改成功,刷新即可!"));
		} else {
			mv.addObject("msgObj", new MessageDTO(false, "对不起，操作有误", "对不起，您刚才的操作流程有误，请按规定填写数据！"));
		}
		return mv;
	}

	/**
	 * 修改分销角色状态
	 * 
	 * @param request
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
	@RequestMapping("/updateDrpRoleStatus")
	public String updateDrpRoleStatus(HttpServletRequest request) throws Exception {
		String roleId = request.getParameter("roleId");
		String roleStatus = request.getParameter("roleStatus");
		if (null == roleId || "".equals(roleId)) {
			return "{\"status\":\"修改失败！\"}";
		}
		if ("1".equals(roleStatus)) {
			roleStatus = "2";
		} else if ("2".equals(roleStatus)) {
			roleStatus = "1";
		} else {
			return "{\"status\":\"修改失败！\"}";
		}
		PlaceRoleInfo placeRoleInfo = new PlaceRoleInfo();
		placeRoleInfo.setRoleId(Integer.parseInt(roleId));
		placeRoleInfo.setRoleStatus(Integer.parseInt(roleStatus));
		Integer num = drpRoleInfoService.updateDrpRoleStatus(placeRoleInfo);
		if (num > 0) {
			return "{\"status\":\"修改成功！\"}";
		} else {
			return "{\"status\":\"修改失败！\"}";
		}
	}

	/**
	 * 上传Excel 用于批量修改excel
	 * 
	 * @param request
	 * @param response
	 */
	@ResponseBody
	@RequestMapping("/upLoadExcel")
	public void upLoadExcel(@RequestParam(value = "file", required = false) MultipartFile file,
			HttpServletRequest request, ModelMap model, HttpServletResponse response) throws Exception {

		String path = request.getSession().getServletContext().getRealPath("/common/excelUpload");
		String fileName = file.getOriginalFilename();
		// System.out.println(path);
		File targetFile = new File(path, fileName);
		if (!targetFile.exists()) {
			targetFile.mkdirs();
		}
		// 保存
		try {
			file.transferTo(targetFile);
			List<PlaceInfo> placeInfos = readExcel(path + File.separator + fileName);
			System.err.println(placeInfos);
			int i = placeInfoService.batchUpdate(placeInfos);
			targetFile.delete();
			response.getWriter().write("<script>parent.msg('导入成功!')</script>");
		} catch (Exception e) {
			response.getWriter().write("<script>parent.msg('导入失败!')</script>");
			e.printStackTrace();
		}
	}

	// 通过路径读取excel表的数据
	public List<PlaceInfo> readExcel(String pathname) {
		List<PlaceInfo> placeInfos = new ArrayList<PlaceInfo>();
		// String pathname="D:/Backup/Downloads/iamberry.xls";
		List list = new ArrayList();
		try {
			Workbook rwb = Workbook.getWorkbook(new File(pathname));
			Sheet rs = rwb.getSheet(0);// 或者rwb.getSheet("iamberry-sheet")
			int clos = rs.getColumns();// 得到所有的列
			int rows = rs.getRows();// 得到所有的行

			// System.out.println(clos+" rows:"+rows);
			for (int i = 1; i < rows; i++) {
				PlaceInfo placeInfo = new PlaceInfo();
				for (int j = 0; j < clos; j++) {
					placeInfo.setId(Integer.parseInt(rs.getCell(j, i).getContents()));
					placeInfo.setName(rs.getCell(j + 1, i).getContents());
					placeInfo.setUserName(rs.getCell(j + 2, i).getContents());
					String areaName = rs.getCell(j + 3, i).getContents();
					placeInfo.setAreaName(areaName.endsWith("") ? null : areaName);
					/*
					 * placeInfo.setHasQrcode(Integer.parseInt(rs.getCell(j+4,
					 * i).getContents()));
					 * placeInfo.setPlacePid(Integer.parseInt(rs.getCell(j+5,
					 * i).getContents()));
					 * placeInfo.setRoleId(Integer.parseInt(rs.getCell(j+6,
					 * i).getContents()));
					 */
					placeInfo.setTel(rs.getCell(j + 4, i).getContents());
					placeInfo.setAddr(rs.getCell(j + 5, i).getContents());
					placeInfo.setRemark(rs.getCell(j + 7, i).getContents());

					// System.out.println(placeInfo.toString());
					break;
				}

				placeInfos.add(placeInfo);
			}
			rwb.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return placeInfos;
	}

	
	
	/**
	 * 上传Excel 用于批量添加excel
	 * 
	 * @param request
	 * @param response
	 */
	@ResponseBody
	@RequestMapping("/addLoadExcel")
	public void addLoadExcel(@RequestParam(value = "file2", required = false) MultipartFile file,
			HttpServletRequest request, ModelMap model, HttpServletResponse response) throws Exception {

		String path = request.getSession().getServletContext().getRealPath("/common/excelUpload");
		String fileName = file.getOriginalFilename();
		// System.out.println(path);
		File targetFile = new File(path, fileName);
		if (!targetFile.exists()) {
			targetFile.mkdirs();
		}
		// 保存
		try {
			file.transferTo(targetFile);
			boolean msg = readExcel2(path + File.separator + fileName);
			if(msg){
				targetFile.delete();
				response.getWriter().write("<script>parent.msg('导入成功!')</script>");
			}else{
				response.getWriter().write("<script>parent.msg('导入失败!')</script>");
			}
		} catch (Exception e) {
			response.getWriter().write("<script>parent.msg('导入失败!')</script>");
			e.printStackTrace();
		}
	}
	// 通过路径读取excel表的数据
		public boolean readExcel2(String pathname) {
			List<PlaceInfo> placeInfos = new ArrayList<PlaceInfo>();
			try {
				Workbook rwb = Workbook.getWorkbook(new File(pathname));
				Sheet rs = rwb.getSheet(0);// 或者rwb.getSheet("iamberry-sheet")
				int clos = rs.getColumns();// 得到所有的列
				int rows = rs.getRows();// 得到所有的行
				String partnerId = "";//合夥人id
				Integer storeId  = 0;//門店id
				partnerId = rs.getCell(0, 0).getContents();//得到合夥人id
				for (int i = 1; i < rows; i++) {
					PlaceInfo placeInfo = new PlaceInfo();
					for (int j = 0; j < clos; j++) {
						//获取某一列所有数据
						//获取一列的第一格数据判断是否是门店或vip会员
						String isStoresMembers = rs.getCell(j, i).getContents();
						String name = rs.getCell(j+1, i).getContents();//门店名称/vip会员名称
						//如果第二格为空这表示此行无数据并不在往后取数据
						if(name  == null || name.equals("")){
							break;
						}
						String nickName = rs.getCell(j+2, i).getContents();//门店姓名/vip会员姓名
						String tel = rs.getCell(j+3, i).getContents();//门店手机号/vip会员手机号
						Integer isPerfect = Integer.valueOf(rs.getCell(j+4, i).getContents());//是否已完善信息
						String city = rs.getCell(j+5, i).getContents();//门店地址/vip会员地址
						String note = rs.getCell(j+6, i).getContents();//门店备注/vip会员备注
						//如果不为空表示为门店、反之为vip会员
						placeInfo.setName(name);
						placeInfo.setUserName(nickName);
						placeInfo.setAddr(city);
						placeInfo.setTemplateId(23);
						placeInfo.setTel(tel);
						placeInfo.setStatus(1);
						placeInfo.setCreateDate(new Date());
						placeInfo.setRemark(note);
						placeInfo.setPlaceInfoStus(isPerfect);
						if(isStoresMembers != null&& !isStoresMembers.equals("")){
							//完善门店信息
							placeInfo.setPlacePid(Integer.valueOf(partnerId));
							placeInfo.setHasQrcode(1);// 1表示没有二维码
							placeInfo.setRoleId(48);
							Map<String, Object> msgMap = addPlaceInfoDeal(placeInfo);//添加门店
							PlaceInfo Info = (PlaceInfo) msgMap.get("data");
							storeId = Info.getId();//保存门店id为全局变量 
							
						}else{//vip会员
							placeInfo.setPlacePid(storeId);//门店id
							placeInfo.setHasQrcode(2);// 2表示有二维码
							placeInfo.setRoleId(51);
							addPlaceInfoDeal(placeInfo);//添加vip会员
						}
						break;
					}
				
				}
				rwb.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return true;
		}
	/**
	 * list view
	 * 
	 * @return
	 */
	@RequestMapping("/apply/list")
	public ModelAndView list(@RequestParam(value = "pageNO", defaultValue = "1") Integer pageNO,
			@RequestParam(value = "pageSize", required = false) Integer pageSize, HttpServletRequest request) {
		ModelAndView mv = new ModelAndView("admin/drp/applyList");

		// 分页查找
		List<ApplyPlaceLogs> news = placeInfoService.selectApplyPlaceLogs(pageNO, 10);
		mv.addObject("list", news);

		// 是否已经get过pageSize了？
		if (pageSize == null) {
			pageSize = placeInfoService.getCount(10);
		}

		// 分页数据
		mv.addObject("pageNO", pageNO);
		mv.addObject("pageSize", pageSize);
		mv.addObject("url",
				new StringBuilder(StringUtils.replace(request.getRequestURI(), request.getContextPath(), ""))
						.append("?pageSize=").append(pageSize).append("&pageNO="));
		return mv;
	}

	/**
	 * 审核操作
	 * 
	 * @return
	 */
	@RequestMapping(value = "/apply/{id}/{status}", method = RequestMethod.POST)
	@ResponseBody
	public JsonBack updatePlaceInfo(@PathVariable("id") Integer id, @PathVariable("status") Integer status) {
		JsonBack back = new JsonBack();

		if (status == 2 || status == 3) {
			back.setSuccess(placeInfoService.handlerApplyLogs(id, status));
		} else {
			back.setSuccess(false);
			back.setResponseData("状态不对!");
		}

		return back;
	}
	
	
	
	/**
	 * 分页查询我要代理申请记录
	 * 
	 * @param request
	 * @param response
	 * @param pageSize
	 * @param pageNO
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/applyAgentList")
	public ModelAndView applyAgentList(HttpServletRequest request,
			@RequestParam(value = "pageSize", defaultValue = "6", required = false) Integer pageSize,
			@RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO) throws Exception {
		ModelAndView mv = new ModelAndView("admin/drp/applyAgentList");
		String text = request.getParameter("text");
		StringBuffer url = new StringBuffer("/admin/drp/applyAgentList?pageSize=" + pageSize);
		ApplyUserInfo applyUserInfo = new ApplyUserInfo();
		if (null != text && !"".equals(text)) {
			if (!request.getMethod().equalsIgnoreCase("post")) {
				text = new String(text.getBytes("ISO-8859-1"), "UTF-8");
			}
			applyUserInfo.setUserName(text);
			url.append("&text=" + text);
		}
		url.append("&pageNO=");
		applyUserInfo.getPage().setPageSize(pageSize);
		applyUserInfo.getPage().setPageNumber(pageNO);
		applyUserInfo.getPage().initRecordBegin();
		List<ApplyUserInfo> applyUserList = placeInfoService.getApplyAgentList(applyUserInfo);
		mv.addObject("text", text);
		mv.addObject("applyUserList", applyUserList);
		mv.addObject("pageNO", pageNO);
		mv.addObject("url", url.toString());
		mv.addObject("pageSize", placeInfoService.getApplyAgentCount(applyUserInfo));
		return mv;
	}
}