public EvEventTbl findOne(UserInfo userInfo, EventForm form) {
    logger.infoCode("I0001"); // I0001=メソッド開始:{0}

    // 定数区分
    Specification<EvEventTbl> whereEventKey =
        StringUtil.isNull(form.getEventKey())
            ? null
            : new Specification<EvEventTbl>() {
              @Override
              public Predicate toPredicate(
                  Root<EvEventTbl> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                return cb.equal(root.get("eventKey"), form.getEventKey());
              }
            };
    Specification<EvEventTbl> whereUpdDate =
        DateUtil.isNull(form.getUpdDate())
            ? null
            : new Specification<EvEventTbl>() {
              @Override
              public Predicate toPredicate(
                  Root<EvEventTbl> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                return cb.equal(root.get("updDate"), form.getUpdDate());
              }
            };

    logger.infoCode("I0002"); // I0002=メソッド終了:{0}
    return evEventTblRepository.findOne(Specifications.where(whereEventKey).and(whereUpdDate));
  }
  @Transactional
  public boolean delete(UserInfo userInfo, EventForm form) {
    logger.infoCode("I0001");
    try {

      if (userInfo.isMgmt2() || userInfo.isMgmt3() || userInfo.isMgmt4()) {
        logger.infoCode("I0002");
        return false;
      }

      EvEventTbl entity = findOne(userInfo, form);

      evEventPublicTblRepository.delete(entity.getEvEventPublicTbls());

      int c1 = evEventTblRepository.delete(form.getEventKey(), form.getUpdDate());

      if (c1 > 0) {
        evEventPublicTblRepository.flush();
        evEventTblRepository.flush();
        logger.infoCode("I0002");
        return true;
      }
    } catch (Exception e) {
      logger.errorCode("E1009", e); // E1009=削除に失敗しました。{0}
    }
    return false;
  }
  /**
   * 一覧取得
   *
   * @param form
   * @param locale
   * @return
   */
  public List<EventDto> findEventBatchTarget(EventForm form, Locale locale) {
    logger.infoCode("I0001"); // I0001=メソッド開始:{0}

    Date today = DateUtil.toDate(DateUtil.getSysdate("yyyyMMdd"));

    // 取得条件:公開
    Specification<EvEventTbl> wherePublicFlag =
        StringUtil.isNull(form.getSearchPublicFlag())
            ? null
            : new Specification<EvEventTbl>() {
              @Override
              public Predicate toPredicate(
                  Root<EvEventTbl> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                return cb.equal(root.get("publicFlag"), form.getSearchPublicFlag());
              }
            };

    // 取得条件:日付
    Specification<EvEventTbl> whereEnDay =
        StringUtil.isNull(form.getSearchDateType())
            ? null
            : new Specification<EvEventTbl>() {
              @Override
              public Predicate toPredicate(
                  Root<EvEventTbl> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                // batch処理
                if (SEARCH_DATE_TYPE_BATCH.equals(form.getSearchDateType().toLowerCase())) {
                  Predicate predicate = cb.conjunction();
                  Predicate predicate2 = cb.conjunction();
                  predicate2 =
                      cb.and(predicate2, cb.equal(root.get("updDate").as(Date.class), today));
                  predicate2 =
                      cb.and(
                          predicate2, cb.lessThan(root.get("eventSendDate").as(Date.class), today));

                  predicate =
                      cb.and(predicate, cb.equal(root.get("eventSendDate").as(Date.class), today));
                  predicate = cb.or(predicate2);
                  return predicate;
                }
                return null;
              }
            };

    List<EvEventTbl> list =
        evEventTblRepository.findAll(Specifications.where(wherePublicFlag).and(whereEnDay));

    logger.infoCode("I0002"); // I0002=メソッド終了:{0}
    return getDtoList(list, locale);
  }
  public boolean insertCmInfo(
      UserInfo userInfo, EventForm form, String opeKbn, String roleCode, String partyCode) {
    boolean result = false;

    try {
      CmInfoTbl entity = new CmInfoTbl();
      entity.setSendDate(DateUtil.getNowTimestamp());
      entity.setTitle(form.getEventTitle());
      entity.setDataKbn("2");
      entity.setOpeKbn(opeKbn);
      entity.setInfoRefKey(form.getEventKey());
      entity.setMakeUserKey(userInfo.getLoginUserKey());
      entity.setUpdDate(DateUtil.getNowTimestamp());
      entity.setUpdUserKey(userInfo.getLoginUserKey());

      entity = cmInfoTblRepository.save(entity);
      String infoKey = entity.getInfoKey();

      if (infoKey != null && StringUtil.isNotNull(infoKey)) {
        CmInfoPublicTbl entitySub = new CmInfoPublicTbl();
        CmInfoPublicTblPK id = new CmInfoPublicTblPK();
        id.setInfoKey(infoKey);
        id.setSeqNo(1);
        entitySub.setId(id);
        entitySub.setPublicKbn("1");
        entitySub.setRole(roleCode);
        entitySub.setPartyCode(partyCode);
        entitySub.setUpdDate(DateUtil.getNowTimestamp());
        entitySub.setUpdUserKey(userInfo.getLoginUserKey());

        cmInfoPublicTblRepository.save(entitySub);

        cmInfoTblRepository.flush();
        cmInfoPublicTblRepository.flush();

        result = true;
      }

    } catch (Exception e) {
      logger.errorCode("E1007", e); // E1007=登録に失敗しました。{0}
    }

    return result;
  }
  @Transactional
  public boolean update(EventForm form, UserInfo userInfo) {
    logger.infoCode("I0001");
    try {
      EvEventTbl entity = new EvEventTbl();

      if (form.getPageMode().equals(CommonConst.PAGE_MODE_EDIT)) {
        entity = findOne(userInfo, form);
        if (entity == null) {
          throw new Exception();
        }
      }

      entity.setUpdUserKey(userInfo.getLoginUserKey());
      entity.setPartyCode(userInfo.getLoginPartyCode());
      entity.setPartyName(userInfo.getLoginPartyName());
      //
      entity.setEventKey(form.getEventKey());
      entity.setEventMemo(form.getEventMemo());
      entity.setEventPlace(form.getEventPlace());
      entity.setEventRecruit(form.getEventRecruit());
      entity.setEventSendDate(form.getEventSendDateAsTimestamp());
      entity.setEventStartDate(form.getEventStartDateAsTimestamp());
      entity.setEventTelno(form.getEventTelno());
      entity.setEventTitle(form.getEventTitle());
      entity.setEventUnit(form.getEventUnit());

      entity.setSubjectInsKbn(form.getSubjectInsKbn());
      entity.setPublicFlag(form.getPublicFlag());
      entity.setUpdDate(DateUtil.getNowTimestamp());

      // 更新テーブル:イベント公開範囲テーブル
      if (form.getPageMode().equals(CommonConst.PAGE_MODE_EDIT)) {
        // イベント公開範囲テーブルから対象データをDELETEする。
        evEventPublicTblRepository.delete(entity.getEvEventPublicTbls());
      }

      entity = evEventTblRepository.save(entity);

      List<EvEventPublicTbl> publicList = new ArrayList<>();
      int count = 1;

      // 企業・研究所などがチェックONの場合、1件出力する。
      if (form.checkHasPublicItem("1")) {
        EvEventPublicTbl tbl = new EvEventPublicTbl();
        EvEventPublicTblPK pk = new EvEventPublicTblPK();
        pk.setEventKey(entity.getEventKey());
        pk.setSeqNo(count);
        tbl.setId(pk);

        // 企業・研究所等が、設定されている分の出力を行う場合、1:ROLE。
        tbl.setPublicKbn("1");
        // 企業・研究所等が、設定されている分の出力を行う場合、1:ROLE。
        tbl.setRole("1");
        // 企業・研究所等が、設定されている分の出力を行う場合、NULL。
        tbl.setPartyCode(null);
        // 現在時刻を設定する。
        tbl.setUpdDate(DateUtil.getNowTimestamp());
        // ログイン者のユーザキーの値を設定する。
        tbl.setUpdUserKey(userInfo.getLoginUserKey());
        publicList.add(tbl);
        count = count + 1;
      }
      if (form.checkHasPublicItem("2")) {
        // 大學がチェックONの場合、公開範囲(公開)で選択されている件数出力する。
        for (int i = 0; i < form.getPublicPartyArray().length; i++) {
          EvEventPublicTbl tbl = new EvEventPublicTbl();
          EvEventPublicTblPK pk = new EvEventPublicTblPK();
          pk.setEventKey(entity.getEventKey());
          pk.setSeqNo(count);
          tbl.setId(pk);

          // 大學が、設定されている分の出力を行う場合、2:組織。
          tbl.setPublicKbn("2");
          // 大學が、設定されている分の出力を行う場合、NULL。
          tbl.setRole(null);
          // 大學が、設定されている分の出力を行う場合、対象大学の組織コード。
          tbl.setPartyCode(form.getPublicPartyArray()[i]);
          // 現在時刻を設定する。
          tbl.setUpdDate(DateUtil.getNowTimestamp());
          // ログイン者のユーザキーの値を設定する。
          tbl.setUpdUserKey(userInfo.getLoginUserKey());
          publicList.add(tbl);
          count = count + 1;
        }
      }
      if (form.getPageMode().equals(CommonConst.PAGE_MODE_ADD)
          || form.getPageMode().equals(CommonConst.PAGE_MODE_COPY)) {
        // お知らせ情報、お知らせ情報公開範囲登録
        this.insertCmInfo(userInfo, form, "201", userInfo.getTargetRole().getAuthority(), null);
      }

      evEventPublicTblRepository.save(publicList);

      if (entity != null) {
        logger.infoCode("I0002");
        return true;
      }

    } catch (Exception e) {
      logger.errorCode("E1007", e); // E1007=登録に失敗しました。{0}
    }
    return false;
  }