/**
   * 生成订单,跳转到支付宝支付页面<br>
   *
   * @author 冯鑫<br>
   *     2014-9-12
   * @throws IOException
   * @update 侯杨
   * @see OrderManagerAction#toPayOrder
   * @since vmaque1.5
   */
  public String toPayOrder() throws IOException {
    String price = request.getParameter("price");
    String paytype = request.getParameter("paytype"); // 支付方式
    // 商品总价赋值
    conSumerUserData.setPayType(Integer.parseInt(paytype));
    commodityConfigData.setConfigPrice(Double.parseDouble(price));
    conSumerOrderData =
        orderManagerFacade.createOrder(
            commodityConfigData, conSumerUserData, pageDomainName, goodsNum);
    GoodsInfoData goodsInfoData = new GoodsInfoData();
    goodsInfoData.setId(commodityConfigData.getGoodsInfoData().getId());
    goodsInfoData = goodsInfoFacade.getGoodsInfoData(goodsInfoData);
    String alipayForm;

    conSumerOrderData.setPrice(Double.parseDouble(price));
    if (price.equals("0")) {
      request.setAttribute("ordercode", conSumerOrderData.getOrderCode());
      if (conSumerUserData.getRedPackageId() != null
          && !"".equals(conSumerUserData.getRedPackageId())) {
        request.setAttribute("redpackageId", conSumerUserData.getRedPackageId());
        request.setAttribute("cId", conSumerUserData.getcId());
        request.setAttribute("sId", conSumerUserData.getsId());
      }
      return "payForSuccess_order";
    }
    // 如果为1 则是pc支付
    if ("1".equals(pcFlag)) {
      alipayForm = this.getAlipayForm(conSumerOrderData, goodsInfoData); // 支付的表单getAlipayForm_Phone
    } else {
      alipayForm = this.getAlipayForm_Phone(conSumerOrderData, goodsInfoData);
    }
    request.setAttribute("alipayForm", alipayForm);
    return "toPayJsp";
  }
 /**
  * 支付宝提交 微信接口<br>
  *
  * @author 侯杨<br>
  *     2014-9-21
  * @update
  * @param
  * @return
  * @exception/throws
  * @see OrderManagerAction#getAlipayForm
  * @since vmaque1.5
  */
 private String getAlipayForm_PhoneWeixin(
     ConSumerOrderData conSumerOrderData, GoodsInfoData goodsInfoData) {
   HashMap<String, String> hm = new HashMap<String, String>();
   hm.put("body", goodsInfoData.getGoodsDes()); // 填写在跳到支付宝页面上显示的付款内容信息  
   hm.put("subject", goodsInfoData.getGoodsName()); // 填写在跳到支付宝页面上显示的付款标题信息  
   hm.put("out_trade_no", conSumerOrderData.getOrderCode()); // 外部交易号,最好具有唯一性,在获取支付宝发来的付款信息时使用. 
   hm.put("agent", AlipayConfig.partner); // partnerId(合作伙伴ID)
   hm.put("payment_type", "1"); // 支付类型 1=商品购买,2=服务购买,... 
   hm.put("price", String.valueOf(conSumerOrderData.getPrice())); // 订单金额信息   
   hm.put("quantity", "1"); // 订单商品数量,一般都是写1,它是按照整个订单包来计算 
   return AlipayService.create_direct_token_by_userWeixin(hm); // securityCode(安全码)
 }
 /**
  * 对订单进行付款或者取消订单操作<br>
  *
  * @author 侯杨 <br>
  *     2014年12月08日
  * @update
  * @throws IOException
  * @see OrderManagerAction#payOrclosed_weixin()
  * @since vmaque2.0
  */
 public String payOrclosed_weixin() throws IOException {
   // 操作码 1为付款 2 为取消订单
   String alipayForm;
   String op = request.getParameter("op");
   // 微信id
   String openid = request.getParameter("openid");
   // 订单编号
   String code = request.getParameter("code");
   String callback = request.getParameter("jsoncallback");
   if (op == null || "".equals(op) || code == null || "".equals(code)) {
     String returnJsonStr = callback + "({\"SUCCESS\": false, \"MESSAGE\": \"获取数据失败\"})";
     request.setAttribute("result", returnJsonStr);
     return "closedOrder";
   }
   conSumerOrderData.setOrderCode(code);
   if (op.equals("1")) {
     ConsumerOrderGoodsinfoData orderGoodsinfoData =
         orderManagerFacade.findConSumerOrderGoodsInfoByOrderId(conSumerOrderData);
     GoodsInfoData goodsInfoData = new GoodsInfoData();
     goodsInfoData.setId(orderGoodsinfoData.getGoodsInfId());
     // 查询商品信息
     GoodsInfoData infoData = goodsInfoFacade.getGoodsInfoData(goodsInfoData);
     conSumerOrderData.setPrice(orderGoodsinfoData.getConSumerOrderData().getPrice());
     alipayForm = this.getAlipayForm_PhoneWeixin(conSumerOrderData, infoData);
   } else {
     // 取消订单
     alipayForm = orderManagerFacade.closedConSumerOrderDataWeixin(conSumerOrderData);
   }
   if ("success".equals(alipayForm)) {
     String returnJsonStr = callback + "({\"SUCCESS\": true})";
     request.setAttribute("result", returnJsonStr);
     return "closedOrder";
   } else if ("erro".equals(alipayForm)) {
     String returnJsonStr = callback + "({\"SUCCESS\": false})";
     request.setAttribute("result", returnJsonStr);
     return "closedOrder";
   } else {
     request.setAttribute("alipayForm", alipayForm);
     return "toPayJsp";
   }
 }
 /**
  * 创建支付宝提交Form PC端<br>
  *
  * @author 冯鑫<br>
  *     2014-9-12
  * @update
  * @param ConSumerOrderData conSumerOrderData
  * @return String
  * @see OrderManagerAction#getAlipayForm
  * @since vmaque1.5
  */
 private String getAlipayForm(ConSumerOrderData conSumerOrderData, GoodsInfoData goodsInfoData) {
   HashMap<String, String> hm = new HashMap<String, String>();
   if (goodsInfoData.getGoodsDes() != null && !"".equals(goodsInfoData.getGoodsDes())) {
     hm.put("body", goodsInfoData.getGoodsDes().trim()); // 填写在跳到支付宝页面上显示的付款内容信息
   }
   hm.put("subject", goodsInfoData.getGoodsName()); // 填写在跳到支付宝页面上显示的付款标题信息  
   hm.put("out_trade_no", conSumerOrderData.getOrderCode()); // 外部交易号,最好具有唯一性,在获取支付宝发来的付款信息时使用. 
   hm.put("agent", AlipayConfig.partner); // partnerId(合作伙伴ID)
   hm.put("payment_type", "1"); // 支付类型 1=商品购买,2=服务购买,... 
   hm.put("price", String.valueOf(conSumerOrderData.getPrice())); // 订单金额信息    
   /*hm.put("price","0.01");//订单金额信息  */
   hm.put("quantity", "1"); // 订单商品数量,一般都是写1,它是按照整个订单包来计算 
   hm.put(
       "extra_common_param",
       conSumerUserData.getRedPackageId()
           + "_"
           + conSumerUserData.getcId()
           + "_"
           + conSumerUserData.getsId()); // 红包使用自定义参数
   return AlipayService.create_direct_pay_by_user(hm); // securityCode(安全码)
 }
  /**
   * 生成订单,跳转到微信支付<br>
   *
   * @author 侯杨<br>
   *     2015-01-13
   * @throws IOException
   * @update
   * @see OrderManagerAction#toweixinPayOrder
   * @since vmaque2.0
   */
  public void toweixinPayOrder() throws IOException {
    String price = request.getParameter("price");
    String paytype = request.getParameter("paytype"); // 支付方式
    // 商品总价赋值
    conSumerUserData.setPayType(Integer.parseInt(paytype));
    commodityConfigData.setConfigPrice(Double.parseDouble(price));
    conSumerOrderData =
        orderManagerFacade.createOrder(
            commodityConfigData, conSumerUserData, pageDomainName, goodsNum);
    GoodsInfoData goodsInfoData = new GoodsInfoData();
    goodsInfoData.setId(commodityConfigData.getGoodsInfoData().getId());
    goodsInfoData = goodsInfoFacade.getGoodsInfoData(goodsInfoData);

    conSumerOrderData.setPrice(Double.parseDouble(price));
    conSumerOrderData.setGoodsName(goodsInfoData.getGoodsName());
    if (conSumerOrderData != null) {
      conSumerOrderData.setConSumerUserData(conSumerUserData);
      JSONObject object = JSONObject.fromObject(conSumerOrderData);
      response.getWriter().print(object);
    } else {
      response.getWriter().print("1");
    }
  }
  /**
   * 根据查询条件分页查询出符合条件的商品订单信息
   *
   * @author 左香勇 2014-9-9
   * @update
   * @param conSumerOrderData 查询条件实体信息 pageRoll 分页查询对象
   * @return List<ConsumerOrderGoodsinfoData> 符合查询条件商品订单信息集合
   * @since vmaque 1.5
   */
  public List<ConsumerOrderGoodsinfoData> getConSumerOrderGoodsInfoDataList(
      PageRoll pageRoll, ConSumerOrderData conSumerOrderData) {
    // 定义查询语句
    StringBuffer querySql = new StringBuffer("SELECT ");
    querySql.append("MCG.ID AS ID,MCG.GOODSNUM AS GOODSNUM,");
    querySql.append(
        "MCO.ID AS CONSUMERORDERID,MCO.PRICE AS PRICE,MCO.STATE AS STATE,MCO.CREATETIME AS CREATETIME,MCO.LOGISTICSCOMPANY AS LOGISTICSCOMPANY,MCO.LOGISTICSNUMBER AS LOGISTICSNUMBER,MCO.DELIVERTIME AS DELIVERTIME,");
    querySql.append("MCC.CONFIGNAME AS CONFIGNAME,");
    querySql.append("MGI.GOODSNAME AS GOODSNAME,");
    querySql.append(
        "MCU.USERNAME AS USERNAME,MCU.USERADDRESS AS USERADDRESS,MCU.USERMOBILE AS USERMOBILE ");
    querySql.append("FROM MINI_CONSUMERORDER_GOODSINFO MCG ");
    querySql.append("JOIN MINI_CONSUMERORDER MCO ON MCG.CONSUMERORDERID = MCO.ID ");
    querySql.append("JOIN MINI_COMMODITYCONFIG MCC ON MCG.COMMODITYCONFIGID = MCC.ID ");
    querySql.append("JOIN MINI_GOODSINFO MGI ON MCG.GOODSINFID = MGI.ID ");
    querySql.append("JOIN MINI_CONSUMERUSER MCU ON MCO.CONSUMERUSERID = MCU.ID ");
    querySql.append("JOIN MINI_PAGE_GOODSINFO MPG ON MPG.PAGEID = MCO.PAGEID ");
    querySql.append(
        "WHERE MCG.ISDELETE = 1 AND MCO.ISDELETE = 1 AND MCC.ISDELETE = 1 AND MGI.ISDELETE = 1 AND MCU.ISDELETE = 1 AND MCO.STATE <> 4 ");

    // 定义查询条件
    StringBuffer where = new StringBuffer("");

    List<Object> objects = new ArrayList<Object>();

    // 添加查询条件
    if (conSumerOrderData != null) {

      if (conSumerOrderData.getState() != null) {
        where.append(" AND MCO.STATE=?");
        objects.add(conSumerOrderData.getState());
      }

      if (conSumerOrderData.getPageId() != null && !conSumerOrderData.getPageId().equals("")) {
        where.append("AND MCO.PAGEID=? ");
        objects.add(conSumerOrderData.getPageId());
      }
      querySql.append(where.toString());
    }

    if (conSumerOrderData.getState() != null) {
      querySql.append("ORDER BY MCO.CREATETIME,MCO.PAYTYPE DESC");
    } else {
      querySql.append("ORDER BY MCO.CREATETIME DESC");
    }

    // 分页查询
    pageRoll.setCountSQL("SELECT COUNT(1) FROM (" + querySql.toString() + ")");
    pageRoll.setSearchSQL(querySql.toString());

    JdbcDao jdbcDao = (JdbcDao) SpringContextHelper.getBean("jdbc"); // 获取jdbc
    List<ETIPResultSet> rsList = jdbcDao.search(pageRoll, objects);

    List<ConsumerOrderGoodsinfoData> consumerOrderGoodsinfoDatas =
        new ArrayList<ConsumerOrderGoodsinfoData>();

    for (int i = 0; i < rsList.size(); i++) {
      ConsumerOrderGoodsinfoData consumerOrderGoodsinfoData = new ConsumerOrderGoodsinfoData();
      ConSumerOrderData sumerOrderData = new ConSumerOrderData();
      GoodsInfoData goodsInfoData = new GoodsInfoData();
      CommodityConfigData commodityConfigData = new CommodityConfigData();
      ConSumerUserData conSumerUserData = new ConSumerUserData();

      conSumerUserData.setUserName(rsList.get(i).getString("USERNAME"));
      conSumerUserData.setUserAddress(rsList.get(i).getString("USERADDRESS"));
      conSumerUserData.setUserMobile(rsList.get(i).getString("USERMOBILE"));

      sumerOrderData.setConSumerUserData(conSumerUserData);
      sumerOrderData.setId(rsList.get(i).getString("CONSUMERORDERID"));
      sumerOrderData.setCreateTime(rsList.get(i).getDate("CREATETIME"));
      sumerOrderData.setPrice(rsList.get(i).getDouble("PRICE"));
      sumerOrderData.setState(rsList.get(i).getInt("STATE"));
      sumerOrderData.setLogisticsCompany(rsList.get(i).getString("LOGISTICSCOMPANY"));
      sumerOrderData.setLogisticsNumber(rsList.get(i).getString("LOGISTICSNUMBER"));
      sumerOrderData.setDeliverTime(rsList.get(i).getDate("DELIVERTIME"));

      commodityConfigData.setConfigName(rsList.get(i).getString("CONFIGNAME"));

      goodsInfoData.setGoodsName(rsList.get(i).getString("GOODSNAME"));

      consumerOrderGoodsinfoData.setCommodityConfigData(commodityConfigData);
      consumerOrderGoodsinfoData.setGoodsInfoData(goodsInfoData);
      consumerOrderGoodsinfoData.setConSumerOrderData(sumerOrderData);
      consumerOrderGoodsinfoData.setGoodsNum(rsList.get(i).getInt("GOODSNUM"));
      consumerOrderGoodsinfoData.setId(rsList.get(i).getString("ID"));

      consumerOrderGoodsinfoDatas.add(consumerOrderGoodsinfoData);
    }

    return consumerOrderGoodsinfoDatas;
  }
  /**
   * 根据订单商品信息中间表Id查询的商品订单信息(后台)
   *
   * @author 左香勇 2014-9-15
   * @update
   * @param consumerOrderGoodsinfoDataId 订单商品信息中间表id
   * @return ConsumerOrderGoodsinfoData 订单商品信息中间实体
   * @since vmaque 1.5
   */
  public ConsumerOrderGoodsinfoData getConSumerOrderGoodsInfoDataById(
      String consumerOrderGoodsinfoDataId) {
    // 定义查询语句
    StringBuffer querySql = new StringBuffer("SELECT ");
    querySql.append("MCG.ID AS ID,MCG.GOODSNUM AS GOODSNUM,");
    querySql.append("MCO.ID AS CONSUMERORDERID,MCO.PRICE AS PRICE,MCO.STATE AS STATE,");
    querySql.append("MCO.CREATETIME AS CREATETIME,MCO.LOGISTICSCOMPANY AS LOGISTICSCOMPANY,");
    querySql.append("MCO.LOGISTICSNUMBER AS LOGISTICSNUMBER,MCO.DELIVERTIME AS DELIVERTIME,");
    querySql.append("MCC.CONFIGNAME AS CONFIGNAME,");
    querySql.append("MGI.GOODSNAME AS GOODSNAME,");
    querySql.append(
        "MCU.USERNAME AS USERNAME,MCU.USERADDRESS AS USERADDRESS,MCU.USERMOBILE AS USERMOBILE,");
    querySql.append("MPE.DOMAIN AS DOMAIN,MPG.NAME AS PAGENAME,");
    querySql.append("CSU.RECEIVABLEACCOUNT AS RECEIVABLEACCOUNT,CSU.ACCOUNTTYPE AS ACCOUNTTYPE,");
    querySql.append("CSU.LOGINMAIL AS LOGINMAIL,CSU.LOGINMOBLE AS LOGINMOBLE ");
    querySql.append("FROM MINI_CONSUMERORDER_GOODSINFO MCG ");
    querySql.append("JOIN MINI_CONSUMERORDER MCO ON MCG.CONSUMERORDERID = MCO.ID ");
    querySql.append("JOIN MINI_COMMODITYCONFIG MCC ON MCG.COMMODITYCONFIGID = MCC.ID ");
    querySql.append("JOIN MINI_GOODSINFO MGI ON MCG.GOODSINFID = MGI.ID ");
    querySql.append("JOIN MINI_CONSUMERUSER MCU ON MCO.CONSUMERUSERID = MCU.ID ");
    querySql.append("JOIN MINI_PAGE MPG ON MCO.PAGEID=MPG.ID ");
    querySql.append("JOIN CTN_SYSUSER CSU ON MPG.USER_ID=CSU.ID ");
    querySql.append("RIGHT JOIN MINI_PAGE_INFO_EXTRA MPE ON MPG.ID=MPE.PAGE_ID ");
    querySql.append("WHERE MCG.ISDELETE = 1 AND MCO.ISDELETE = 1 ");
    querySql.append("AND MCC.ISDELETE = 1 AND MGI.ISDELETE = 1 AND MCU.ISDELETE = 1 ");
    querySql.append("AND MCG.ID = ?");

    JdbcDao jdbcDao = (JdbcDao) SpringContextHelper.getBean("jdbc"); // 获取jdbc
    List<ETIPResultSet> rsList =
        jdbcDao.queryForList(querySql.toString(), new Object[] {consumerOrderGoodsinfoDataId});

    if (rsList.size() > 0) {
      ConsumerOrderGoodsinfoData consumerOrderGoodsinfoData = new ConsumerOrderGoodsinfoData();
      ConSumerOrderData sumerOrderData = new ConSumerOrderData();
      GoodsInfoData goodsInfoData = new GoodsInfoData();
      CommodityConfigData commodityConfigData = new CommodityConfigData();
      ConSumerUserData conSumerUserData = new ConSumerUserData();
      PageData pageData = new PageData();
      PageInfoExtraData pageInfoExtraData = new PageInfoExtraData();
      UserData userData = new UserData();

      // 给登录用户表添加数据
      userData.setAccountType(rsList.get(0).getInt("ACCOUNTTYPE"));
      userData.setReceivableAccount(rsList.get(0).getString("RECEIVABLEACCOUNT"));
      userData.setLoginMail(rsList.get(0).getString("LOGINMAIL"));
      userData.setLoginMoble(rsList.get(0).getString("LOGINMOBLE"));

      // 给Page信息表添加数据
      pageInfoExtraData.setDomain(rsList.get(0).getString("DOMAIN"));

      // 给page表添加数据
      pageData.setName(rsList.get(0).getString("PAGENAME"));
      pageData.setUserData(userData);
      pageData.setPageInfoExtra(pageInfoExtraData);

      // 给订单用户信息表添加数据
      conSumerUserData.setUserName(rsList.get(0).getString("USERNAME"));
      conSumerUserData.setUserAddress(rsList.get(0).getString("USERADDRESS"));
      conSumerUserData.setUserMobile(rsList.get(0).getString("USERMOBILE"));

      // 给订单表添加数据
      sumerOrderData.setConSumerUserData(conSumerUserData);
      sumerOrderData.setPageData(pageData);
      sumerOrderData.setId(rsList.get(0).getString("CONSUMERORDERID"));
      sumerOrderData.setCreateTime(rsList.get(0).getDate("CREATETIME"));
      sumerOrderData.setPrice(rsList.get(0).getDouble("PRICE"));
      sumerOrderData.setState(rsList.get(0).getInt("STATE"));
      sumerOrderData.setLogisticsCompany(rsList.get(0).getString("LOGISTICSCOMPANY"));
      sumerOrderData.setLogisticsNumber(rsList.get(0).getString("LOGISTICSNUMBER"));
      sumerOrderData.setDeliverTime(rsList.get(0).getDate("DELIVERTIME"));

      // 给规格表添加数据
      commodityConfigData.setConfigName(rsList.get(0).getString("CONFIGNAME"));

      // 给商品表添加数据
      goodsInfoData.setGoodsName(rsList.get(0).getString("GOODSNAME"));

      // 给订单商品中间表添加数据
      consumerOrderGoodsinfoData.setCommodityConfigData(commodityConfigData);
      consumerOrderGoodsinfoData.setGoodsInfoData(goodsInfoData);
      consumerOrderGoodsinfoData.setConSumerOrderData(sumerOrderData);
      consumerOrderGoodsinfoData.setGoodsNum(rsList.get(0).getInt("GOODSNUM"));
      consumerOrderGoodsinfoData.setId(rsList.get(0).getString("ID"));

      return consumerOrderGoodsinfoData;
    }

    return null;
  }