package com.happy.action; import com.baidubce.model.User; import com.happy.Model.Booking; import com.happy.Model.HotelDict; import com.happy.Model.weixin.Users; import com.happy.Until.*; import com.happy.Until.Excel.toExcel; import com.happy.common.http.Message; import com.happy.dto.BookTypeEto; import com.happy.dto.IPage; import com.happy.service.BookService; import com.happy.service.HotelDictService; import com.happy.service.UserService; import com.opensymphony.xwork2.ActionSupport; import net.sf.json.JSONObject; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Vector; import java.util.stream.Collectors; public class bookAction extends ActionSupport implements ServletRequestAware { private HttpServletRequest request; public HttpServletResponse response; @Resource public BookService bookService; @Resource public UserService userService; @Resource public HotelDictService hotelDictService; public int page; // 当前页 public int rows;// 每页显示的行数rows public Integer id; public Integer type; public String orderStatus;//订单状态 public String managerId;//商户Id public String payStartTime;//支付开始时间 public String payEndTime;//支付结束时间 public String ledgerParam;//台账列表查询参数 public String hotelTownship;//所属乡镇 public String minTotalPrice;//最小订单总价 public String maxTotalPrice;//最大订单总价 public HttpServletRequest getRequest() { return request; } public void setRequest(HttpServletRequest request) { this.request = request; } public void setServletRequest(HttpServletRequest request) { this.request = request; } public HttpServletResponse getResponse() { return response; } public void setResponse(HttpServletResponse response) { this.response = response; } /** * 描述:修改订单状态接单、入住、退房 * @return */ public String updateBookStatus(){ JSONObject resultJson = new JSONObject(); if (id == null) { resultJson.put("message", "请传入订单id"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } //根据id获取当前订单信息 Booking book = bookService.getById(id); if(book==null){ resultJson.put("message", "未查询到订单"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } //获取用户openId Users user = userService.queryByUserId(book.getCreateUserid()); if(user.getOpenid()==null){ resultJson.put("message", "用户openId为空,请该订单用户授权才能操作。"); resultJson.put("code", 502); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } String msg = ""; String sendMsg = ""; try{ switch (type){ case 1://接单 if(!"2".equals(book.getOrderStatus())){ resultJson.put("message", "已支付状态才能接单"); resultJson.put("code", 502); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } book.setOrderStatus("3"); book.setUpdateTime(UUIDUtil.getNewDate()); msg = "接单"; sendMsg = "商家已接单"; break; case 2://入住 if(!"3".equals(book.getOrderStatus())){ resultJson.put("message", "待入住状态才能办理入住"); resultJson.put("code", 502); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } book.setOrderStatus("4"); book.setUpdateTime(UUIDUtil.getNewDate()); msg = "入住办理"; break; case 3://退房 if(!"4".equals(book.getOrderStatus())){ resultJson.put("message", "已入住状态才能办理退房"); resultJson.put("code", 502); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } book.setCheckOutTime(UUIDUtil.getNewDate());//退房时间 book.setUpdateTime(UUIDUtil.getNewDate()); book.setOrderStatus("5"); msg = "退房"; break; // case 4://退单 // if(!"2".equals(book.getOrderStatus())){ // resultJson.put("message", "已支付状态才能退单"); // resultJson.put("code", 502); // ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); // return null; // } // book.setOrderStatus("8"); // book.setUpdateTime(UUIDUtil.getNewDate()); // msg = "退单"; // sendMsg = "商家已退单"; // break; } int m = bookService.updateBooking(book); if (m > 0) { //推送信息 if(!"".equals(sendMsg)){ String errmsg = Message.wxErrorMsg(Message.send(user.getOpenid(),book.getOrderNum(),book.getUserName(),sendMsg,book.getCreateTime().substring(0,10))); if("请求成功".equals(errmsg)){ resultJson.put("message", msg+"成功"); resultJson.put("code", 200); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } resultJson.put("message", msg+"成功"+",推送消息失败,原因:"+errmsg); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } resultJson.put("message", msg+"成功"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } else { resultJson.put("message", msg+"失败"); resultJson.put("code", 502); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } }catch (Exception e){ e.printStackTrace(); } resultJson.put("message", "未知异常"); resultJson.put("code", 205); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } /** * 描述:分页查询订单 * @return */ public String quearyBookPage(){ JSONObject resultJson = new JSONObject(); StringBuilder s1 = new StringBuilder(""); if(managerId!=null){ s1.append(" and hotel_manager_id = '").append(managerId).append("'"); } if (ledgerParam!=null){ s1.append(" and (order_num like '%").append(ledgerParam).append("%'") .append(" or user_name like '%").append(ledgerParam).append("%'") .append(" or user_phone like '%").append(ledgerParam).append("%')"); } if(orderStatus!=null){ s1.append(" and order_status = ").append(orderStatus); } if(payStartTime!=null && payEndTime!=null){ s1.append(" and pay_time >= '").append(payStartTime).append("'") .append(" and pay_time <= '").append(payEndTime).append("'"); } IPage bookIPage = bookService.queryPage(s1.toString(),page,rows); //获取订单汇总信息 BookTypeEto bookTypeEto = bookService.getBookStatusSum(s1.toString()); bookTypeEto.setBookIPage(bookIPage); if(bookTypeEto!=null && !"".equals(bookTypeEto)){ resultJson.put("message", "查询分页成功"); resultJson.put("code", 200); resultJson.put("data", bookTypeEto); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); }else{ resultJson.put("message", "查询分页失败"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); } return null; } /** * 描述:导出订单 * @return */ public String toBookExcel() { JSONObject resultJson = new JSONObject(); StringBuilder s1 = new StringBuilder(""); s1.append(" and hotel_manager_id = '").append(managerId).append("'"); if (ledgerParam!=null){ s1.append(" and (order_num like '%").append(ledgerParam).append("%'") .append(" or user_name like '%").append(ledgerParam).append("%'") .append(" or user_phone like '%").append(ledgerParam).append("%')"); } if(orderStatus!=null){ s1.append(" and order_status = ").append(orderStatus); } if(payStartTime!=null && payEndTime!=null){ s1.append(" and pay_time >= '").append(payStartTime).append("'") .append(" and pay_time <= '").append(payEndTime).append("'"); } List list = bookService.queryList(s1.toString()); // 查询分页 List vectorsList = new ArrayList<>(); if(list==null){ resultJson.put("code", 500); resultJson.put("message", "无数据无法导出"); ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); } for(Booking book:list){ Vector columnValue = new Vector(); columnValue.add(book.getOrderNum()); columnValue.add(book.getOrderName()); columnValue.add(book.getUserName()); columnValue.add(book.getUserPhone()); columnValue.add(book.getHouseName()); columnValue.add(book.getHouseOrderNumber()); columnValue.add(book.getHouseTotalPrice()); columnValue.add(book.getPayTime()); vectorsList.add(columnValue); } // 项目路径地址 String path = request.getSession().getServletContext() .getRealPath("/download/");// File.separator try{ Vector columnName = new Vector(); columnName.add("订单号"); columnName.add("状态"); columnName.add("预定人"); columnName.add("手机号"); columnName.add("预定房型"); columnName.add("房间数"); columnName.add("订单金额(元)"); columnName.add("支付时间"); String filePathName ="订单信息" + UUIDUtil.generateID() +"Report.xls"; // 导出文件 new toExcel().book(vectorsList, path + filePathName, "sheet1", columnName); String url = "http://"+request.getServerName()+":"+request.getServerPort() + request.getSession().getServletContext().getContextPath(); resultJson.put("downurl", url + "/download/" + filePathName); resultJson.put("code", 200); resultJson.put("message", "导出成功"); ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); } catch (Exception e){ e.printStackTrace(); } return null; } /** * 描述:分页查询台账(查询以消费订单数据) * @return */ public String quearyLedgerPage(){ JSONObject resultJson = new JSONObject(); StringBuilder s1 = new StringBuilder(""); s1.append(" and order_status = 5"); if(managerId!=null){ s1.append(" and hotel_manager_id = '").append(managerId).append("'"); } if (ledgerParam!=null){ s1.append(" and (order_num like '%").append(ledgerParam).append("%'") .append(" or user_name like '%").append(ledgerParam).append("%'") .append(" or user_phone like '%").append(ledgerParam).append("%')"); } if(payStartTime!=null && payEndTime!=null){ s1.append(" and pay_time >= '").append(payStartTime).append("'") .append(" and pay_time <= '").append(payEndTime).append("'"); } if(hotelTownship!=null){ s1.append(" and hotel_township = '").append(hotelTownship).append("'"); } if(minTotalPrice!=null){ s1.append(" and house_total_price >= '").append(minTotalPrice).append("'"); } if(maxTotalPrice!=null){ s1.append(" and house_total_price <= '").append(maxTotalPrice).append("'"); } IPage bookIPage = bookService.queryPage(s1.toString(),page,rows); //获取订单汇总信息 BookTypeEto bookTypeEto = bookService.getBookStatusSum(s1.toString()); bookTypeEto.setBookIPage(bookIPage); if(bookTypeEto!=null && !"".equals(bookTypeEto)){ resultJson.put("message", "查询分页成功"); resultJson.put("code", 200); resultJson.put("data", bookTypeEto); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); }else{ resultJson.put("message", "查询分页失败"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); } return null; } /** * 描述:根据Id查询订单详细 * @return */ public String getById(){ JSONObject resultJson = new JSONObject(); if (id == null) { resultJson.put("message", "请传入id"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } Booking book = bookService.getById(id); if (book != null) { resultJson.put("message", "查询成功"); resultJson.put("code", 200); resultJson.put("data", book); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; }else{ resultJson.put("message", "未查到用户信息"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } } /** * 描述:导出台账 * @return */ public String toLedgerExcel() { JSONObject resultJson = new JSONObject(); StringBuilder s1 = new StringBuilder(""); s1.append(" and order_status = 5"); s1.append(" and hotel_manager_id = '").append(managerId).append("'"); if (ledgerParam!=null){ s1.append(" and (order_num like '%").append(ledgerParam).append("%'") .append(" or user_name like '%").append(ledgerParam).append("%'") .append(" or user_phone like '%").append(ledgerParam).append("%')"); } if(payStartTime!=null && payEndTime!=null){ s1.append(" and pay_time >= '").append(payStartTime).append("'") .append(" and pay_time <= '").append(payEndTime).append("'"); } if(hotelTownship!=null){ s1.append(" and hotel_township = '").append(payStartTime).append("'"); } if(minTotalPrice!=null){ s1.append(" and house_total_price >= '").append(minTotalPrice).append("'"); } if(maxTotalPrice!=null){ s1.append(" and house_total_price <= '").append(maxTotalPrice).append("'"); } List list = bookService.queryList(s1.toString()); // 查询列表 List vectorsList = new ArrayList<>(); for(Booking book:list){ Vector columnValue = new Vector(); columnValue.add(book.getOrderNum()); columnValue.add(book.getUserName()); columnValue.add(book.getUserPhone()); columnValue.add(book.getHouseOrderNumber()); columnValue.add(book.getPayAccount()); columnValue.add(book.getPayTime()); vectorsList.add(columnValue); } // 项目路径地址 String path = request.getSession().getServletContext() .getRealPath("/download/");// File.separator try{ Vector columnName = new Vector(); columnName.add("订单号"); columnName.add("预定人"); columnName.add("手机号"); columnName.add("房间数"); columnName.add("订单金额"); columnName.add("退房时间"); String filePathName ="台账信息" + UUIDUtil.generateID() +"Report.xls"; // 导出文件 new toExcel().book(vectorsList, path + filePathName, "sheet1", columnName); String url = "http://"+request.getServerName()+":"+request.getServerPort() + request.getSession().getServletContext().getContextPath(); resultJson.put("downurl", url + "/download/" + filePathName); resultJson.put("code", 200); resultJson.put("message", "导出成功"); ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); } catch (Exception e){ e.printStackTrace(); } return null; } /** * 描述:导出台账 管理端 * @return */ public String toLedgerAdmimnExcel() { JSONObject resultJson = new JSONObject(); StringBuilder s1 = new StringBuilder(""); s1.append(" and order_status = 5"); if (ledgerParam!=null){ s1.append(" and (order_num like '%").append(ledgerParam).append("%'") .append(" or user_name like '%").append(ledgerParam).append("%'") .append(" or user_phone like '%").append(ledgerParam).append("%')"); } if(payStartTime!=null && payEndTime!=null){ s1.append(" and pay_time >= '").append(payStartTime).append("'") .append(" and pay_time <= '").append(payEndTime).append("'"); } if(hotelTownship!=null){ s1.append(" and hotel_township = '").append(payStartTime).append("'"); } if(minTotalPrice!=null){ s1.append(" and house_total_price >= '").append(minTotalPrice).append("'"); } if(maxTotalPrice!=null){ s1.append(" and house_total_price <= '").append(maxTotalPrice).append("'"); } List list = bookService.queryList(s1.toString()); // 查询列表 List hotelDicts = hotelDictService.queryList("and code = 10"); Map dictMap = null; if(hotelDicts!=null && hotelDicts.size()>0){ dictMap = hotelDicts.stream().collect(Collectors.toMap(HotelDict::getId, HotelDict::getName, (key1, key2) -> key1 )); }else{ resultJson.put("message", "未查到民宿乡镇信息"); resultJson.put("code", 500); ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); return null; } List vectorsList = new ArrayList<>(); for(Booking book:list){ Vector columnValue = new Vector(); columnValue.add(dictMap.get(Integer.valueOf(book.getHotelTownship())));//所属乡镇 columnValue.add(book.getHotelName());//乡宿名称 columnValue.add(book.getOrderNum());//订单号 columnValue.add(book.getPayAccount());//订单金额 columnValue.add(book.getPayTime());//退房时间 vectorsList.add(columnValue); } // 项目路径地址 String path = request.getSession().getServletContext() .getRealPath("/download/");// File.separator try{ Vector columnName = new Vector(); columnName.add("所属乡镇"); columnName.add("民宿名称"); columnName.add("订单号"); columnName.add("订单金额(元)"); columnName.add("退房时间"); String filePathName ="台账信息" + UUIDUtil.generateID() +"Report.xls"; // 导出文件 new toExcel().book(vectorsList, path + filePathName, "sheet1", columnName); String url = "http://"+request.getServerName()+":"+request.getServerPort() + request.getSession().getServletContext().getContextPath(); resultJson.put("downurl", url + "/download/" + filePathName); resultJson.put("code", 200); resultJson.put("message", "导出成功"); ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString()); } catch (Exception e){ e.printStackTrace(); } return null; } }