public String updateSendStatus() {
    if (IDUtils.isNotCorrect(id)) {
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.promotion.award.id.required");
      return SUCCESS;
    }

    DcPromotionAwardSendStatusEnums statusEnums =
        DcPromotionAwardSendStatusEnums.getInstance(status);

    if (statusEnums == DcPromotionAwardSendStatusEnums.UNKNOWN) {
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.promotion.award.status.required");
      return SUCCESS;
    }

    try {
      int effectCount = dcPromotionAwardService.updateSendStatusById(id, statusEnums);
      if (effectCount > 0) {}

      json.setCode(JsonModel.CODE_SUCCESS);
    } catch (Exception e) {
      log.error(e.getMessage(), e);
      json.setCode(JsonModel.CODE_FAIL);
      json.setDetail(e.getMessage());
    }

    return SUCCESS;
  }
  /**
   * 更新审核状态
   *
   * @return
   */
  public String updateReviewStatus() {

    if (IDUtils.isNotCorrect(id)) {
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.promotion.award.id.required");
      return SUCCESS;
    }

    DcPromotionAwardReviewStatusEnums statusEnums =
        DcPromotionAwardReviewStatusEnums.getInstance(status);

    if (statusEnums == DcPromotionAwardReviewStatusEnums.UNKNOWN) {
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.promotion.award.status.required");
      return SUCCESS;
    }
    try {
      int effectCount = dcPromotionAwardService.updateReviewStatusById(id, statusEnums);
      if (effectCount > 0) {
        // 更新该会员的未读消息
        DcPromotionAwardDTO awardDO = dcPromotionAwardService.getAwardById(id);
        if (awardDO != null) {
          Long userId = awardDO.getUserId();
          if (IDUtils.isCorrect(userId)) {
            dcUserService.incrUnreadMsgCountByUser(userId, 1); // 添加一条未读消息
          }
        }
      }
      json.setCode(JsonModel.CODE_SUCCESS);
    } catch (Exception e) {
      log.error(e.getMessage(), e);
      json.setCode(JsonModel.CODE_FAIL);
      json.setDetail(e.getMessage());
    }

    return SUCCESS;
  }
  @Override
  public String execute() throws Exception {

    DcUserDTO user = dcAuthz.getUser();

    if (user == null) {
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.user.notLogin");
      return SUCCESS;
    }

    Long userId = user.getUserId();

    List<DcWinnerGameConfigDTO> configList = dcWinnerGameConfigService.getConfigs();

    // 没有配置
    if (CollectionUtils.isEmpty(configList)) {
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.winner.config.error");
      return SUCCESS;
    }

    // 今天是不是已经玩了太多次 ,每天最多玩10次// TODO 需要优化。目前是直接COUNT
    if (!dcUserFilterService.isWhiteListUser(userId)) {
      int todayPlayCount = dcWinnerGamePlayDetailService.countTodayPlayDetaiByUser(userId);

      if (todayPlayCount > 10) {
        json.setCode(JsonModel.CODE_ILL_ARGS);
        json.setDetail("dcome.winner.play.limit");
        return SUCCESS;
      }
    }

    List<KeyValuePair> betParamList = DcWinnerGameUtils.parseBetParam(betParam);
    if (CollectionUtils.isEmpty(betParamList)) {
      // 没有下注
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.winner.config.betParam.error");
      return SUCCESS;
    }

    // 计算要消耗多少积分
    int needIntegralCount = DcWinnerGameUtils.calcIntegral(betParamList);

    try {

      // 生成随机数
      int randomNum = RandomUtils.nextInt(new Random(System.currentTimeMillis()), 10000);

      DcWinnerGameConfigParser configParser = new DcWinnerGameConfigParser(configList);

      DcWinnerGameConfigDTO winConfig = configParser.win(randomNum);

      if (winConfig == null) {
        json.setCode(JsonModel.CODE_ILL_ARGS);
        json.setDetail("dcome.winner.config.error");
        return SUCCESS;
      }

      // 把分数加到积分
      dcUserService.updateWinnerScoreToIntegralByUser(userId);

      // kou扣除积分
      int comsumeIntegral = dcUserIntegralBO.doWinnerGame(userId, -needIntegralCount);

      DcWinnerGameResultModel resultModel = new DcWinnerGameResultModel();
      resultModel.setBetParamList(betParamList);
      resultModel.setWinCardName(winConfig.getCardName());
      resultModel.setWinCardScore(winConfig.getScore());

      int totalScore = DcWinnerGameUtils.calcTotalWinScore(betParamList, winConfig);

      dcUserService.incrWinnerScoreByUser(userId, totalScore);

      resultModel.setWinScore(totalScore);

      DcUserDTO userdto = dcUserService.getUser(userId);
      int integral = userdto.getIntegralCount();
      resultModel.setUserIntegralCount(integral);

      // 插入detail
      DcWinnerGamePlayDetailDO detail = new DcWinnerGamePlayDetailDO();
      detail.setBetParam(JacksonHelper.toJSON(betParamList));
      detail.setUserId(userId);
      detail.setUserNick(user.getNick());
      detail.setWinScore(totalScore);
      detail.setResult(JacksonHelper.toJSON(resultModel));
      detail.setBetIntegral(Math.abs(comsumeIntegral));
      dcWinnerGamePlayDetailService.insertPlayDetail(detail);

      json.setCode(JsonModel.CODE_SUCCESS);
      json.setData(resultModel);

    } catch (IntegralNotEnoughException e) {
      // 积分不足
      json.setCode(JsonModel.CODE_ILL_ARGS);
      json.setDetail("dcome.winner.user.integral.notEnough");
      return SUCCESS;
    } catch (Exception e) {
      json.setCode(JsonModel.CODE_FAIL);
      return SUCCESS;
    }

    return SUCCESS;
  }