public Set<SaleWorkerCmd> getAfterSaleCanRunCmds(Period period) {
    Set<SaleWorkerCmd> cmds = new HashSet<SaleWorkerCmd>(0);

    PeriodSales singleSale =
        getPeriodManager().getPeriodSales(new PeriodSalesId(period.getId(), SalesMode.SINGLE));
    PeriodSales polySale =
        getPeriodManager().getPeriodSales(new PeriodSalesId(period.getId(), SalesMode.COMPOUND));
    boolean allSaleFinished =
        singleSale.isSaleFinished() && polySale.isSaleFinished(); // 单复式销售流程都完成了

    if (period.isCurrent() && allSaleFinished) {
      List<Period> currentIssues = getPeriodManager().findCurrentPeriods(period.getLotteryType());
      if (currentIssues != null && currentIssues.size() > 1) {
        cmds.add(SaleWorkerCmd.HideIssue);
      }
    } else {
      cmds.add(SaleWorkerCmd.ShowIssue);
    }

    if (!period.isResultUpdate()) {
      cmds.add(SaleWorkerCmd.UpdateResult);
    } else if (!period.isPrizeUpdate()) {
      cmds.add(SaleWorkerCmd.UpdateResult);
    } else if (!period.isPrizeDelived()) {
      cmds.add(SaleWorkerCmd.UpdateResult);
      cmds.add(SaleWorkerCmd.DelivePrize);
    } else if (!period.isFinished()) {
      cmds.add(SaleWorkerCmd.UpdateResult);
      cmds.add(SaleWorkerCmd.DelivePrize);
      if (period.isStarted() && period.isSaleEnded() && allSaleFinished) {
        cmds.add(SaleWorkerCmd.CloseIssue);
      }
    }
    return cmds;
  }
 /**
  * 设置全部结束
  *
  * @return
  * @throws WebDataException
  */
 public String setIssueClose() {
   Map<String, Object> map = new HashMap<String, Object>();
   try {
     AdminUser adminUser = getAdminUser();
     if (null == adminUser) {
       throw new WebDataException("你还没有登录!");
     }
     if (this.id == null) {
       throw new DataException("期号ID不能为空.");
     }
     kenoService.updateIssueState(this.getId(), IssueState.ISSUE_SATE_FINISH);
     I issueData = kenoService.findIssueDataById(this.getId());
     // 同传统彩的期实体传数据
     Period period = new Period();
     period.setId(issueData.getId());
     period.setPeriodNumber(issueData.getPeriodNumber());
     // 记录操作日志
     eventLogManager.saveSimpleEventLog(
         period, getLottery(), adminUser, EventLogType.CloseIssue, "期号为ID:" + this.getId());
     map.put("success", true);
     map.put("msg", "期号设置结束成功");
   } catch (DataException e) {
     e.printStackTrace();
     map.put("success", false);
     map.put("msg", e.getMessage());
   } catch (Exception e) {
     e.printStackTrace();
     map.put("success", false);
     map.put("msg", "期号设置结束发生异常!");
   }
   Struts2Utils.renderJson(map);
   return null;
 }
  public Set<SaleWorkerCmd> getCanRunCmds(Period period) {
    Set<SaleWorkerCmd> cmds = new HashSet<SaleWorkerCmd>(0);
    if (period.isOnSale()) cmds.add(SaleWorkerCmd.PauseSale);
    else if (period.isPaused()) cmds.add(SaleWorkerCmd.ResumeSale);
    if (period.isStarted()) cmds.addAll(getAfterSaleCanRunCmds(period));

    if (period.isFinished()) cmds.addAll(getAfterFinishCanRunCmds(period));

    return cmds;
  }
 /**
  * 更新开奖号码
  *
  * @return
  * @throws WebDataException
  */
 public String updateResults() throws WebDataException {
   AdminUser adminUser = getAdminUser();
   if (null == adminUser) {
     throw new WebDataException("你还没有登录!");
   }
   if (issueData != null && issueData.getId() != null) {
     if (!StringUtils.isBlank(issueData.getResults())) {
       String results = issueData.getResults().trim();
       boolean result = false;
       if (Lottery.KLSF.equals(getLottery())) {
         result =
             results.matches(
                 "\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2}");
       } else if (Lottery.EL11TO5.equals(getLottery())
           || Lottery.SDEL11TO5.equals(getLottery())
           || Lottery.XJEL11TO5.equals(getLottery())) {
         result = results.matches("\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2}");
       } else if (Lottery.SSC.equals(getLottery())) {
         result = results.matches("\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2}");
       } else if (Lottery.QYH.equals(getLottery())) {
         result = results.matches("\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2},\\d{1,2}");
       }
       if (!result) {
         addActionError("开奖号码格式不正确!");
         return error();
       }
       kenoService.updateResults(issueData);
       addActionMessage("操作成功.");
       I issueDataTemp = kenoService.findIssueDataById(issueData.getId());
       // 同传统彩的期实体传数据
       Period period = new Period();
       period.setId(issueDataTemp.getId());
       period.setPeriodNumber(issueDataTemp.getPeriodNumber());
       // 记录操作日志
       eventLogManager.saveSimpleEventLog(
           period,
           getLottery(),
           adminUser,
           EventLogType.SetResult,
           "期ID为" + issueData.getId() + "开奖号码为" + results + "期实体为" + issueData.toString());
     }
   }
   return "save";
 }
  public String index() throws WebDataException {
    this.lotteryType = getLotteryType();
    if (null == this.queryForm) {
      this.queryForm = new PasscountQueryForm();
    }

    if (this.queryForm.getPeriodNumber() == null) {
      periodData = getPeriodDataEntityManagerImpl().getNewestResultPeriodData();
      period = periodEntityManager.getPeriod(periodData.getPeriodId());
    } else {

      period = periodEntityManager.loadPeriod(getLotteryType(), this.queryForm.getPeriodNumber());
      periodData = getPeriodDataEntityManagerImpl().getPeriodData(period.getId());
    }

    if (period == null) throw new WebDataException("期号不存在.");
    if (periodData == null) throw new WebDataException("期数据不存在.");

    periods = periodEntityManager.getDrawPeriodList(getLotteryType(), 20);

    User user = this.getLoginUser();
    if (null != mine && mine) {
      if (null == user) {
        // 先登录
        CookieUtil.addReUrlCookie();
        return GlobalResults.FWD_LOGIN;
      } else {
        this.getQueryForm().setSponsorNames(user.getUserName());
      }
    }

    this.queryForm.setPeriodId(period.getId());
    this.queryForm.setPeriodNumber(period.getPeriodNumber());

    this.pagination =
        queryService.findByCriteriaAndPagination(buildListDetachedCriteria(), this.pagination);

    return "index";
  }
  public String lsbd() {
    if (count == null || count <= 0) {
      count = 50;
    }
    formatNum();
    DetachedCriteria c = DetachedCriteria.forClass(SsqPeriodData.class);
    c.add(Restrictions.isNotNull("result"));
    c.addOrder(Order.desc("id"));
    List<SsqPeriodData> list = periodDataEntityManagerImpl.findByDetachedCriteria(c, 0, count);

    List<Long> periodIdList = new ArrayList<Long>();
    for (SsqPeriodData data : list) {
      periodIdList.add(data.getPeriodId());
      String[] rs = data.getRsultArr();
      if (red1 == null) {
        red1 = rs[0];
        red2 = rs[1];
        red3 = rs[2];
        red4 = rs[3];
        red5 = rs[4];
        red6 = rs[5];
        blue = rs[6];
        data.setPrizePool(7l);
      } else {
        long hits = 0;
        String[] rs1 = (String[]) ArrayUtils.subarray(rs, 0, 6);
        if (ArrayUtils.contains(rs1, red1)) {
          hits++;
        }
        if (ArrayUtils.contains(rs1, red2)) {
          hits++;
        }
        if (ArrayUtils.contains(rs1, red3)) {
          hits++;
        }
        if (ArrayUtils.contains(rs1, red4)) {
          hits++;
        }
        if (ArrayUtils.contains(rs1, red5)) {
          hits++;
        }
        if (ArrayUtils.contains(rs1, red6)) {
          hits++;
        }
        if (blue.equals(rs[6])) {
          hits++;
        }
        data.setPrizePool(hits);
      }
    }
    Collections.sort(
        list,
        new Comparator<SsqPeriodData>() {
          @Override
          public int compare(SsqPeriodData o1, SsqPeriodData o2) {
            if (o1.getPrizePool() < o2.getPrizePool()) {
              return 1;
            }
            return -1;
          }
        });
    c = DetachedCriteria.forClass(Period.class);
    c.add(Restrictions.in("id", periodIdList));
    c.addOrder(Order.desc("id"));
    List<Period> periodList = periodDataEntityManagerImpl.findByDetachedCriteria(c);
    Map<Long, Period> periodMap = new HashMap<Long, Period>();
    for (Period data : periodList) {
      periodMap.put(data.getId(), data);
    }
    Struts2Utils.setAttribute("periodMap", periodMap);
    Struts2Utils.setAttribute("list", list);

    loadForecastAndSkillsNewsList();

    return "lsbd";
  }