public String detail() {

    type = "0"; // 产品搜索标识
    supply = supplyService.getEntityById(supplyId);

    if (supply.getStatus() == 1) {
      return "list";
    }

    /*
     *	2012/9/11
     *  判断产品是否被禁止,不用查看
     *  能够查看的条件:
     *  1. 登录 & 是自己的产品
     *  2. 登录 & 后台管理员
     */
    PTags tag = supply.getPtags();
    boolean pass = tag == null ? true : tag.getPass();
    if (!pass) {
      if (Struts2Utils.getSession().getAttribute(SystemVariables.ADMIN_USER) == null
          || Struts2Utils.getSession().getAttribute(SystemVariables.CUSTOME_USER) == null
          || (Struts2Utils.getSession().getAttribute(SystemVariables.CUSTOME_USER) != null
              && ((Enterprise) Struts2Utils.getSession().getAttribute(SystemVariables.CUSTOME_USER))
                      .getId()
                  != supply.getCreator().getId())) {
        return "list";
      }
    }

    List<Map<String, String>> units = Unit.getInstance().getUnits();
    if (supply != null && units != null) {
      for (int i = 0; i < units.size(); i++) {
        Map map = units.get(i);
        if (map != null
            && map.get("id") != null
            && map.get("id").toString().equals(supply.getUnit())) {
          unitname = map.get("name").toString();
          break;
        }
      }
    }
    // 获取SEO关键字
    if (supply != null && supply.getCategory() != null) {
      int level = supply.getCategory().getCategoryLevel().intValue();
      String firstName = supply.getCategory().getName(); // 显示在最前面的类别名称
      switch (level) {
        case 1: // 第一级
          seoStr = firstName;
          break;
        case 2: // 第二级
          seoStr = firstName + "," + supply.getCategory().getCategory().getName();
          break;
        case 3: // 第三级
          seoStr =
              firstName
                  + ","
                  + supply.getCategory().getCategory().getName()
                  + ","
                  + supply.getCategory().getCategory().getCategory().getName();
          break;
        case 4: // 第四级
          seoStr =
              firstName
                  + ","
                  + supply.getCategory().getCategory().getName()
                  + ","
                  + supply.getCategory().getCategory().getCategory().getName()
                  + supply.getCategory().getCategory().getCategory().getCategory().getName();
          break;
        default:
          seoStr = "";
          break;
      }
      seoStr = supply.getName() + "," + seoStr;
    }

    entInfo = entInfoService.getEntInfoByEnterpriseId(supply.getCreator().getId());

    HttpServletRequest request = ServletActionContext.getRequest();
    HttpServletResponse response = ServletActionContext.getResponse();

    clickedKeywordExecute(request);

    // 将最近浏览过的产品添加到cookie当中
    String ids = CookieUtil.setSupplyIdCookies(request, response, supplyId + "");
    // 将最近浏览过的产品添加到session当中
    List<Long> supplyIds = CookieUtil.getSupplyIdByString(ids);
    request.getSession().setAttribute(SystemVariables.RECENTLY_BROWSE_SUPPLY, supplyIds);

    Enterprise ent = supply.getCreator();
    Long enterpriseId = ent.getId();
    recommends = supplyService.getRecommendSupplies(enterpriseId, 5);

    // 商品的点击率
    int hit = supply.getHit() == null ? 0 : supply.getHit();
    supply.setHit(hit + 1);
    supplyService.update(supply);

    return "detail";
  }
  public void clickedKeywordExecute(HttpServletRequest request) {

    String __flag = (String) request.getSession().getAttribute("__flag");
    String __key = (String) request.getSession().getAttribute("__key");
    String __ip = request.getRemoteAddr();

    Long enterpriseId = supply.getCreator().getId();

    if (__key != null && __flag != null && __flag.equals("1")) {

      ClickedKeyword ck = new ClickedKeyword();
      ck.setClickedTime(new Date());
      ck.setEnterpriseId(enterpriseId);
      ck.setIp(__ip);
      ck.setKeyword(__key);

      ClickedKeyword clickedKeyword = clickedKeywordService.add(ck); // 添加点击记录

      // 扣费处理
      if (clickedKeyword != null) {
        EnterpriseKeyword enterpriseKeyword = clickedKeyword.getEnterpriseKeyword();
        Keyword keyword = enterpriseKeyword.getKeyword();

        // 判断是否过期,过期将不再进行扣费
        Date deadTime = keyword.getDeadTime();
        boolean expired = (deadTime.getTime() < System.currentTimeMillis());
        float amount = clickedKeyword.getEnterpriseKeyword().getPrice();

        String supplyName = supply.getName();
        String desc = "产品关键词点击扣费[" + supplyName + "|" + keyword.getKeyword() + "|" + amount + "]";
        try {
          if (!expired) { // 关键词为过期
            log.info(
                "==>关键字点击扣费处理[enterprise.id: "
                    + enterpriseId
                    + ", IP: "
                    + __ip
                    + ", keyword: "
                    + __key
                    + "]");
            log.info(desc);
            enterpriseService.pay(enterpriseId, amount, desc);
          } else {
            log.info(
                "%%% 该关键字已经过期[enterprise.id: "
                    + enterpriseId
                    + ", IP: "
                    + __ip
                    + ", keyword: "
                    + __key
                    + "]");
            log.debug("%%% 删除过期关键字的点击记录 begin %%%");
            clickedKeywordService.delete(clickedKeyword);
            log.debug("%%% 删除过期关键字的点击记录 end %%%");
          }
        } catch (Exception e) { // 没有足够的费用,将关键字排序作废
          log.error("==>点击扣费出错:" + e.getMessage());
          supplyService.invalidKeyword(supply.getId());
        }
      }
    }

    // 去掉session
    request.getSession().removeAttribute("__flag");
    request.getSession().removeAttribute("__key");
  }