From 5ac355eaa1dd42ebf65eef9538e85f9314ac23b0 Mon Sep 17 00:00:00 2001 From: Koda Date: Mon, 10 Jul 2017 22:32:48 +0900 Subject: [PATCH 001/138] #795 Add a read or unread label to knowledge list --- document/database/A5M2_knowledge.pdf | Bin 70119 -> 70126 bytes document/database/knowledge.a5er | 33 ++++++++------- .../knowledge/config/SystemConfig.java | 2 + .../control/open/KnowledgeControl.java | 2 + .../project/knowledge/dao/KnowledgesDao.java | 5 +++ .../knowledge/dao/ViewHistoriesDao.java | 31 ++++++++++++++ .../knowledge/dao/gen/GenKnowledgesDao.java | 3 ++ .../entity/gen/GenKnowledgesEntity.java | 19 +++++++++ .../knowledge/logic/KnowledgeLogic.java | 39 +++++++++++++++++- .../project/knowledge/vo/StockKnowledge.java | 16 +++++++ src/main/resources/appresource.properties | 2 + src/main/resources/appresource_ja.properties | 2 + .../KnowledgesDao/KnowledgesDao_insert.sql | 2 + .../KnowledgesDao_raw_insert.sql | 2 + .../KnowledgesDao/KnowledgesDao_update.sql | 1 + .../project/knowledge/database/ddl.sql | 8 ++++ .../open/knowledge/partials/common_list.jsp | 23 +++++++---- src/main/webapp/css/knowledge-list.css | 6 ++- 18 files changed, 171 insertions(+), 25 deletions(-) diff --git a/document/database/A5M2_knowledge.pdf b/document/database/A5M2_knowledge.pdf index a6ef73af790775e0587713114342c785e6a2803d..ec98598a6a76b5df7ac4bd55c29db5fea1899619 100755 GIT binary patch delta 23069 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 diff --git a/document/database/knowledge.a5er b/document/database/knowledge.a5er index 34604e0ca..c6e152e15 100755 --- a/document/database/knowledge.a5er +++ b/document/database/knowledge.a5er @@ -228,7 +228,7 @@ Fields1=KNOWLEDGE_ID Fields2=ITEM_NO Cardinarity1= Cardinarity2= -Position="MAIN",0,4194,5115,6185,R,R +Position="MAIN",0,4194,5115,6199,R,R Dependence=0 Caption= PName= @@ -236,7 +236,7 @@ ModifiedDateTime=20170220204434 LineMode=0 Bar1=419 Bar2=512 -Bar3=618 +Bar3=620 TermPos1=R TermPos2=R @@ -267,7 +267,7 @@ Fields1=KNOWLEDGE_ID Fields2=KNOWLEDGE_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,4662,4335,5351,R,R +Position="MAIN",0,4662,4335,5353,R,R Dependence=0 Caption= PName= @@ -303,7 +303,7 @@ Fields1=KNOWLEDGE_ID,ITEM_NO Fields2=KNOWLEDGE_ID,ITEM_NO Cardinarity1= Cardinarity2= -Position="MAIN",0,4139,4896,5177,R,R +Position="MAIN",0,4139,4896,5178,R,R Dependence=1 Caption= PName= @@ -420,7 +420,7 @@ Fields1=KNOWLEDGE_ID Fields2=KNOWLEDGE_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,4320,4611,5405,R,R +Position="MAIN",0,4320,4611,5418,R,R Dependence=1 Caption= PName= @@ -428,7 +428,7 @@ ModifiedDateTime=20170222215225 LineMode=0 Bar1=432 Bar2=461 -Bar3=540 +Bar3=542 TermPos1=R TermPos2=R @@ -570,7 +570,7 @@ Fields1=HOOK_ID Fields2=HOOK Cardinarity1= Cardinarity2= -Position="MAIN",0,4124,4194,3050,R,R +Position="MAIN",0,4124,4194,3043,R,R Dependence=0 Caption= PName= @@ -578,7 +578,7 @@ ModifiedDateTime=20161206104307 LineMode=0 Bar1=412 Bar2=419 -Bar3=305 +Bar3=304 TermPos1=R TermPos2=R @@ -1108,7 +1108,7 @@ Fields1=KNOWLEDGE_ID Fields2=KNOWLEDGE_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,5026,7091,5584,R,R +Position="MAIN",0,5026,7091,6143,R,R Dependence=1 Caption= PName= @@ -1116,7 +1116,7 @@ ModifiedDateTime=20150910041644 LineMode=0 Bar1=503 Bar2=709 -Bar3=558 +Bar3=614 TermPos1=R TermPos2=R @@ -1376,10 +1376,12 @@ Field="HISTORY_NO","HISTORY_NO","BIGSERIAL","NOT NULL",0,"","",$FFFFFFFF,"" Field="ナレッジID","KNOWLEDGE_ID","bigint","NOT NULL",,"","",$FFFFFFFF,"" Field="日時","VIEW_DATE_TIME","@DATETIME","NOT NULL",,"","",$FFFFFFFF,"" Index=IDX_VIEW_HISTORIES_KNOWLEDGE_ID=0,KNOWLEDGE_ID +Index=IDX_VIEW_HISTORIES_INSERT_USER=0,INSERT_USER +Index=IDX_VIEW_HISTORIES_KNOWLEDGE_ID_INSERT_USER=0,KNOWLEDGE_ID,INSERT_USER EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20150416233623 +ModifiedDateTime=20170705135644 Position="MAIN",50,1400 [Relation] @@ -1391,7 +1393,7 @@ Fields1=KNOWLEDGE_ID Fields2=KNOWLEDGE_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,2082,5725,4629,R,R +Position="MAIN",0,2082,5725,4638,R,R Dependence=1 Caption= PName= @@ -1399,7 +1401,7 @@ ModifiedDateTime=20150910042925 LineMode=0 Bar1=208 Bar2=572 -Bar3=463 +Bar3=464 TermPos1=R TermPos2=R @@ -1503,7 +1505,7 @@ Fields1=TAG_ID Fields2=TAG_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,4552,5672,4658,R,R +Position="MAIN",0,4552,5672,4659,R,R Dependence=1 Caption= PName= @@ -1626,12 +1628,13 @@ Field="タグID一覧","TAG_IDS","@VARCHAR(1024)",,,"","",$FFFFFFFF,"" Field="タグ名称一覧","TAG_NAMES","text",,,"","",$FFFFFFFF,"" Field="いいね件数","LIKE_COUNT","bigint",,,"","",$FFFFFFFF,"" Field="コメント件数","COMMENT_COUNT","@INT",,,"","",$FFFFFFFF,"" +Field="参照件数","VIEW_COUNT","bigint",,,"","",$FFFFFFFF,"" Field="テンプレートの種類ID","TYPE_ID","@INT",,,"","",$FFFFFFFF,"" Field="通知ステータス","NOTIFY_STATUS","@INT",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20161118153424 +ModifiedDateTime=20170705135801 Position="MAIN",700,1100 [Comment] diff --git a/src/main/java/org/support/project/knowledge/config/SystemConfig.java b/src/main/java/org/support/project/knowledge/config/SystemConfig.java index 27e880533..087112f17 100644 --- a/src/main/java/org/support/project/knowledge/config/SystemConfig.java +++ b/src/main/java/org/support/project/knowledge/config/SystemConfig.java @@ -17,6 +17,8 @@ public class SystemConfig { //public static final String KNOWLEDGE_ENV_KEY = "KNOWLEDGE_HOME"; + public static final int SYSTEM_USER_ID = -1; + /** システム設定情報 */ private static ServiceConfigsEntity serviceConfigsEntity = null; /** 言語毎のシステム設定情報 */ diff --git a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java index 40ccb4300..dc42d50d9 100644 --- a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java @@ -470,6 +470,7 @@ public Boundary list() throws Exception { } List stocks = knowledgeLogic.setStockInfo(knowledges, loginedUser); + KnowledgeLogic.get().setViewed(stocks, getLoginedUser()); setAttribute("knowledges", stocks); LOG.trace("検索終了"); @@ -516,6 +517,7 @@ public Boundary events() throws InvalidParamException { Participations participations = EventsLogic.get().isParticipation(stock.getKnowledgeId(), getLoginUserId()); stock.setParticipations(participations); } + KnowledgeLogic.get().setViewed(stocks, getLoginedUser()); setAttribute("knowledges", stocks); } catch (java.text.ParseException e) { return sendError(HttpStatus.SC_400_BAD_REQUEST, "BAD REQUEST"); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java index a303f82df..e83dc86f3 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java @@ -311,4 +311,9 @@ public List selectAccessAbleKnowledgeOnIdPrefix(String q, Logi return executeQueryList(sql, KnowledgesEntity.class, params.toArray(new Object[0])); } + public void updateViewCount(Long count, Long knowledgeId) { + String sql = "UPDATE KNOWLEDGES SET VIEW_COUNT = ? WHERE KNOWLEDGE_ID = ?"; + executeUpdate(sql, count, knowledgeId); + } + } diff --git a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java index 188cb3f4a..bd8144f58 100644 --- a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java @@ -1,9 +1,13 @@ package org.support.project.knowledge.dao; +import java.util.ArrayList; +import java.util.List; + import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; import org.support.project.knowledge.dao.gen.GenViewHistoriesDao; +import org.support.project.knowledge.vo.StockKnowledge; /** * ナレッジの参照履歴 @@ -22,5 +26,32 @@ public class ViewHistoriesDao extends GenViewHistoriesDao { public static ViewHistoriesDao get() { return Container.getComp(ViewHistoriesDao.class); } + + /** + * 指定のKnowledgeを参照したことがあるか検索して取得 + * @param stocks + * @param userId + * @return + */ + public List selectViewdKnowledgeIds(List stocks, Integer userId) { + if (stocks == null || stocks.isEmpty()) { + return new ArrayList<>(); + } + StringBuilder sql = new StringBuilder(); + sql.append("SELECT DISTINCT KNOWLEDGE_ID FROM VIEW_HISTORIES WHERE KNOWLEDGE_ID IN ("); + int cnt = 0; + List params = new ArrayList<>(); + for (StockKnowledge knowledge : stocks) { + if (cnt > 0) { + sql.append(", "); + } + params.add(knowledge.getKnowledgeId()); + sql.append("?"); + cnt++; + } + sql.append(") AND INSERT_USER = ?"); + params.add(userId); + return executeQueryList(sql.toString(), Long.class, params.toArray(new Object[0])); + } } diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java index eed483399..edfa1ffb7 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java @@ -127,6 +127,7 @@ public KnowledgesEntity rawPhysicalInsert(KnowledgesEntity entity) { entity.getTagNames(), entity.getLikeCount(), entity.getCommentCount(), + entity.getViewCount(), entity.getTypeId(), entity.getNotifyStatus(), entity.getInsertUser(), @@ -159,6 +160,7 @@ public KnowledgesEntity physicalInsert(KnowledgesEntity entity) { entity.getTagNames(), entity.getLikeCount(), entity.getCommentCount(), + entity.getViewCount(), entity.getTypeId(), entity.getNotifyStatus(), entity.getInsertUser(), @@ -213,6 +215,7 @@ public KnowledgesEntity physicalUpdate(KnowledgesEntity entity) { entity.getTagNames(), entity.getLikeCount(), entity.getCommentCount(), + entity.getViewCount(), entity.getTypeId(), entity.getNotifyStatus(), entity.getInsertUser(), diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java index e63499d45..381eefd72 100644 --- a/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java @@ -65,6 +65,8 @@ public GenKnowledgesEntity(Long knowledgeId) { private Long likeCount; /** コメント件数 */ private Integer commentCount; + /** 参照件数 */ + private Long viewCount; /** テンプレートの種類ID */ private Integer typeId; /** 通知ステータス */ @@ -208,6 +210,22 @@ public GenKnowledgesEntity setCommentCount(Integer commentCount) { return this; } + /** + * Get 参照件数. + * @return 参照件数 + */ + public Long getViewCount() { + return this.viewCount; + } + /** + * Set 参照件数. + * @param viewCount 参照件数 + * @return this object */ + public GenKnowledgesEntity setViewCount(Long viewCount) { + this.viewCount = viewCount; + return this; + } + /** * Get テンプレートの種類ID. * @return テンプレートの種類ID @@ -376,6 +394,7 @@ public String toString() { builder.append("tagNames = ").append(tagNames).append("\n"); builder.append("likeCount = ").append(likeCount).append("\n"); builder.append("commentCount = ").append(commentCount).append("\n"); + builder.append("viewCount = ").append(viewCount).append("\n"); builder.append("typeId = ").append(typeId).append("\n"); builder.append("notifyStatus = ").append(notifyStatus).append("\n"); builder.append("insertUser = ").append(insertUser).append("\n"); diff --git a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java index 1c6f1063c..62c0f99b6 100644 --- a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java @@ -20,6 +20,7 @@ import org.support.project.di.Instance; import org.support.project.knowledge.bat.FileParseBat; import org.support.project.knowledge.config.IndexType; +import org.support.project.knowledge.config.SystemConfig; import org.support.project.knowledge.dao.CommentsDao; import org.support.project.knowledge.dao.DraftItemValuesDao; import org.support.project.knowledge.dao.DraftKnowledgesDao; @@ -1078,6 +1079,7 @@ public void deleteOnUser(Integer loginUserId) throws Exception { * @param knowledgeId * @param loginedUser */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void addViewHistory(Long knowledgeId, LoginedUser loginedUser) { ViewHistoriesDao historiesDao = ViewHistoriesDao.get(); ViewHistoriesEntity historiesEntity = new ViewHistoriesEntity(); @@ -1085,8 +1087,20 @@ public void addViewHistory(Long knowledgeId, LoginedUser loginedUser) { historiesEntity.setViewDateTime(new Timestamp(new Date().getTime())); if (loginedUser != null) { historiesEntity.setInsertUser(loginedUser.getUserId()); + } else { + historiesEntity.setInsertUser(SystemConfig.SYSTEM_USER_ID); } historiesDao.insert(historiesEntity); + + KnowledgesEntity entity = KnowledgesDao.get().selectOnKey(knowledgeId); + if (entity != null) { + Long count = entity.getViewCount(); + if (count == null) { + count = new Long(0); + } + count = count + 1; + KnowledgesDao.get().updateViewCount(count, knowledgeId); + } } /** @@ -1559,7 +1573,28 @@ public List selectAccessAbleKnowledge(String q, LoginedUser lo } return KnowledgesDao.get().selectAccessAbleKnowledgeOnIdPrefix(q, loginedUser, limit, offset); } - - + /** + * 参照済かどうかをセットする + * @param stocks + * @param loginedUser + */ + public void setViewed(List stocks, LoginedUser loginedUser) { + if (stocks == null) { + return; + } + if (loginedUser == null) { + // 未ログインユーザは、未読かんりしないので、全て既読にする + for (StockKnowledge knowledge : stocks) { + knowledge.setViewed(true); + } + return; + } + List knowledgeIds = ViewHistoriesDao.get().selectViewdKnowledgeIds(stocks, loginedUser.getUserId()); + for (StockKnowledge knowledge : stocks) { + if (knowledgeIds.contains(knowledge.getKnowledgeId())) { + knowledge.setViewed(true); + } + } + } } diff --git a/src/main/java/org/support/project/knowledge/vo/StockKnowledge.java b/src/main/java/org/support/project/knowledge/vo/StockKnowledge.java index 0c015a2fc..65e4b4d0b 100644 --- a/src/main/java/org/support/project/knowledge/vo/StockKnowledge.java +++ b/src/main/java/org/support/project/knowledge/vo/StockKnowledge.java @@ -15,6 +15,8 @@ public class StockKnowledge extends KnowledgesEntity { private Participations participations; + private boolean viewed = false; + /** * Get stocks * @return the stocks @@ -44,6 +46,20 @@ public Participations getParticipations() { public void setParticipations(Participations participations) { this.participations = participations; } + + /** + * @return the viewed + */ + public boolean isViewed() { + return viewed; + } + + /** + * @param viewed the viewed to set + */ + public void setViewed(boolean viewed) { + this.viewed = viewed; + } } diff --git a/src/main/resources/appresource.properties b/src/main/resources/appresource.properties index 26c0a01be..233424a67 100644 --- a/src/main/resources/appresource.properties +++ b/src/main/resources/appresource.properties @@ -113,6 +113,8 @@ label.new=New label.initialize=Initialize label.move.up=Move Up label.move.down=Move Down +label.unread=Unread +label.read=Read label.public.view= [Public] label.protect.view= [Protection] diff --git a/src/main/resources/appresource_ja.properties b/src/main/resources/appresource_ja.properties index f8494e4d8..701f9fe3c 100644 --- a/src/main/resources/appresource_ja.properties +++ b/src/main/resources/appresource_ja.properties @@ -113,6 +113,8 @@ label.new=新規作成 label.initialize=初期化 label.move.up=上へ移動 label.move.down=下へ移動 +label.unread=未読 +label.read=既読 label.public.view= [公開] label.protect.view= [保護] diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql index b6d05f0b4..f40c1b718 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql @@ -8,6 +8,7 @@ KNOWLEDGE_ID , TAG_NAMES , LIKE_COUNT , COMMENT_COUNT + , VIEW_COUNT , TYPE_ID , NOTIFY_STATUS , INSERT_USER @@ -31,4 +32,5 @@ DEFAULT , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql index ad7d0565e..11925a065 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql @@ -8,6 +8,7 @@ KNOWLEDGE_ID , TAG_NAMES , LIKE_COUNT , COMMENT_COUNT + , VIEW_COUNT , TYPE_ID , NOTIFY_STATUS , INSERT_USER @@ -31,4 +32,5 @@ KNOWLEDGE_ID , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql index e9e7eac9a..88ac91462 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql @@ -7,6 +7,7 @@ SET , TAG_NAMES = ? , LIKE_COUNT = ? , COMMENT_COUNT = ? + , VIEW_COUNT = ? , TYPE_ID = ? , NOTIFY_STATUS = ? , INSERT_USER = ? diff --git a/src/main/resources/org/support/project/knowledge/database/ddl.sql b/src/main/resources/org/support/project/knowledge/database/ddl.sql index aa7ff4623..4c6e5eb0a 100644 --- a/src/main/resources/org/support/project/knowledge/database/ddl.sql +++ b/src/main/resources/org/support/project/knowledge/database/ddl.sql @@ -617,6 +617,12 @@ create table VIEW_HISTORIES ( create index IDX_VIEW_HISTORIES_KNOWLEDGE_ID on VIEW_HISTORIES(KNOWLEDGE_ID); +create index IDX_VIEW_HISTORIES_INSERT_USER + on VIEW_HISTORIES(INSERT_USER); + +create index IDX_VIEW_HISTORIES_KNOWLEDGE_ID_INSERT_USER + on VIEW_HISTORIES(KNOWLEDGE_ID,INSERT_USER); + -- ストックしたナレッジ drop table if exists STOCK_KNOWLEDGES cascade; @@ -723,6 +729,7 @@ create table KNOWLEDGES ( , TAG_NAMES text , LIKE_COUNT bigint , COMMENT_COUNT integer + , VIEW_COUNT bigint , TYPE_ID integer , NOTIFY_STATUS integer , INSERT_USER integer @@ -1218,6 +1225,7 @@ comment on column KNOWLEDGES.TAG_IDS is 'タグID一覧'; comment on column KNOWLEDGES.TAG_NAMES is 'タグ名称一覧'; comment on column KNOWLEDGES.LIKE_COUNT is 'いいね件数'; comment on column KNOWLEDGES.COMMENT_COUNT is 'コメント件数'; +comment on column KNOWLEDGES.VIEW_COUNT is '参照件数'; comment on column KNOWLEDGES.TYPE_ID is 'テンプレートの種類ID'; comment on column KNOWLEDGES.NOTIFY_STATUS is '通知ステータス'; comment on column KNOWLEDGES.INSERT_USER is '登録ユーザ'; diff --git a/src/main/webapp/WEB-INF/views/open/knowledge/partials/common_list.jsp b/src/main/webapp/WEB-INF/views/open/knowledge/partials/common_list.jsp index b7ae0718a..e70d5a60e 100644 --- a/src/main/webapp/WEB-INF/views/open/knowledge/partials/common_list.jsp +++ b/src/main/webapp/WEB-INF/views/open/knowledge/partials/common_list.jsp @@ -31,8 +31,19 @@ - <% KnowledgesEntity knowledge = (KnowledgesEntity) pageContext.getAttribute("knowledge"); %> -
+ <% KnowledgesEntity knowledge = (KnowledgesEntity) pageContext.getAttribute("knowledge"); + StockKnowledge stock = null; + String unread = ""; + String unreadLabel = ""; + if (knowledge instanceof StockKnowledge) { + stock = (StockKnowledge) knowledge; + if (!stock.isViewed()) { + unread = "unread"; + unreadLabel = "[" + jspUtil.label("label.unread") + "]"; + } + } + %> +
+ <%= unreadLabel %> " alt="icon" width="20" height="20" /> @@ -69,11 +81,8 @@
  <%= jspUtil.label("knowledge.list.event.datetime") %>: <%= knowledge.getLocalStartDateTime(jspUtil.locale(), timezone) %> - <% - if (knowledge instanceof StockKnowledge) { - StockKnowledge stock = (StockKnowledge) knowledge; - if (stock.getParticipations() != null) { + if (stock != null && stock.getParticipations() != null) { %>  <%= stock.getParticipations().getCount() %> / <%= stock.getParticipations().getLimit() %> <% if (stock.getParticipations().getStatus() != null) { %> @@ -85,7 +94,7 @@ <% } %> <% } %> - <% } } %> + <% } %>
<% } %>
diff --git a/src/main/webapp/css/knowledge-list.css b/src/main/webapp/css/knowledge-list.css index c9b79df07..3cbed54a9 100644 --- a/src/main/webapp/css/knowledge-list.css +++ b/src/main/webapp/css/knowledge-list.css @@ -10,7 +10,6 @@ padding-right: 5px; border-bottom: 1px solid #cccccc; } - .knowledge_item:hover { border: 1px solid #ccc; color:black; @@ -25,6 +24,11 @@ text-decoration: none; outline: 0; } +.unread { + background-color: #e5fcff; +} + + .list-title { font-size: 20px; padding-top: 10px; From 9bab2f1937d3622331d4bfda780983382460204c Mon Sep 17 00:00:00 2001 From: Koda Date: Thu, 13 Jul 2017 07:12:37 +0900 Subject: [PATCH 002/138] #795 Add migrate database to v 1.11.0 --- .../project/knowledge/deploy/InitDB.java | 4 +++- .../deploy/v1_11_0/Migrate_1_11_0.java | 21 +++++++++++++++++++ .../deploy/v1_11_0/migrate_v1_11_0.sql | 12 +++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_0.java create mode 100644 src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql diff --git a/src/main/java/org/support/project/knowledge/deploy/InitDB.java b/src/main/java/org/support/project/knowledge/deploy/InitDB.java index f71d5c0d4..a3661fc7d 100644 --- a/src/main/java/org/support/project/knowledge/deploy/InitDB.java +++ b/src/main/java/org/support/project/knowledge/deploy/InitDB.java @@ -20,6 +20,7 @@ import org.support.project.knowledge.deploy.v1_10_0.Migrate_1_10_0; import org.support.project.knowledge.deploy.v1_10_0.Migrate_1_10_1; import org.support.project.knowledge.deploy.v1_10_0.Migrate_1_10_2; +import org.support.project.knowledge.deploy.v1_11_0.Migrate_1_11_0; import org.support.project.knowledge.deploy.v1_1_0pre1.Migrate_1_1_0pre1; import org.support.project.knowledge.deploy.v1_4_0.Migrate_1_4_0; import org.support.project.knowledge.deploy.v1_5_0.Migrate_1_5_0; @@ -44,7 +45,7 @@ public class InitDB { private static final Map MAP = new LinkedHashMap<>(); private static final Migrate INIT = InitializeSystem.get(); - public static final String CURRENT = "1.10.2"; + public static final String CURRENT = "1.11.0"; public InitDB() { super(); @@ -74,6 +75,7 @@ public InitDB() { MAP.put("1.10.0", Migrate_1_10_0.get()); MAP.put("1.10.1", Migrate_1_10_1.get()); MAP.put("1.10.2", Migrate_1_10_2.get()); + MAP.put("1.11.0", Migrate_1_11_0.get()); } public static void main(String[] args) throws Exception { diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_0.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_0.java new file mode 100644 index 000000000..34afd71c2 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_0.java @@ -0,0 +1,21 @@ +package org.support.project.knowledge.deploy.v1_11_0; + +import org.support.project.knowledge.deploy.Migrate; +import org.support.project.ormapping.tool.dao.InitializeDao; + +public class Migrate_1_11_0 implements Migrate { + + public static Migrate_1_11_0 get() { + return org.support.project.di.Container.getComp(Migrate_1_11_0.class); + } + + @Override + public boolean doMigrate() throws Exception { + InitializeDao initializeDao = InitializeDao.get(); + String[] sqlpaths = { + "/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql", + }; + initializeDao.initializeDatabase(sqlpaths); + return true; + } +} \ No newline at end of file diff --git a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql new file mode 100644 index 000000000..d4422c850 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql @@ -0,0 +1,12 @@ +ALTER TABLE KNOWLEDGES DROP COLUMN IF EXISTS VIEW_COUNT; +ALTER TABLE KNOWLEDGES ADD COLUMN VIEW_COUNT bigint; + +comment on column KNOWLEDGES.VIEW_COUNT is '参照件数'; + +create index IDX_VIEW_HISTORIES_INSERT_USER + on VIEW_HISTORIES(INSERT_USER); + +create index IDX_VIEW_HISTORIES_KNOWLEDGE_ID_INSERT_USER + on VIEW_HISTORIES(KNOWLEDGE_ID,INSERT_USER); + + \ No newline at end of file From b94ead1d9eb55dc21fd9f342243ea63ec9d5da85 Mon Sep 17 00:00:00 2001 From: Koda Date: Thu, 13 Jul 2017 07:58:47 +0900 Subject: [PATCH 003/138] #795 Add a read or unread label to list of popular / stock / history --- .../project/knowledge/control/open/KnowledgeControl.java | 6 ++++-- .../project/knowledge/entity/gen/GenKnowledgesEntity.java | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java index dc42d50d9..18230dc1d 100644 --- a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java @@ -490,7 +490,7 @@ public Boundary list() throws Exception { } /** - * 閲覧履歴の表示 + * イベント一覧 * * @return * @throws InvalidParamException @@ -563,6 +563,7 @@ public Boundary show_history() throws InvalidParamException { } List histories = knowledgeLogic.getKnowledges(historyIds, loginedUser); List stocks = knowledgeLogic.setStockInfo(histories, loginedUser); + KnowledgeLogic.get().setViewed(stocks, getLoginedUser()); setAttribute("histories", stocks); LOG.trace("履歴取得完了"); @@ -587,6 +588,7 @@ public Boundary show_popularity() throws InvalidParamException { List list = knowledgeLogic.getPopularityKnowledges(loginedUser, 0, 20); List stocks = knowledgeLogic.setStockInfo(list, loginedUser); + KnowledgeLogic.get().setViewed(stocks, getLoginedUser()); setAttribute("popularities", stocks); LOG.trace("取得完了"); // ナレッジの公開先の情報を取得 @@ -625,7 +627,7 @@ public Boundary stocks() throws InvalidParamException { KnowledgeLogic knowledgeLogic = KnowledgeLogic.get(); List list = knowledgeLogic.getStocks(loginedUser, offset * PAGE_LIMIT, PAGE_LIMIT, stockid); List stocks = knowledgeLogic.setStockInfo(list, loginedUser); -// setAttribute("stocks", list); + KnowledgeLogic.get().setViewed(stocks, getLoginedUser()); setAttribute("popularities", stocks); LOG.trace("取得完了"); diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java index 381eefd72..4ddbd2667 100644 --- a/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java @@ -62,11 +62,11 @@ public GenKnowledgesEntity(Long knowledgeId) { /** タグ名称一覧 */ private String tagNames; /** いいね件数 */ - private Long likeCount; + private Long likeCount = new Long(0); /** コメント件数 */ - private Integer commentCount; + private Integer commentCount = 0; /** 参照件数 */ - private Long viewCount; + private Long viewCount = new Long(0); /** テンプレートの種類ID */ private Integer typeId; /** 通知ステータス */ From 06a4a16f5dab385760a586881522b6aa96aad6ce Mon Sep 17 00:00:00 2001 From: Koda Date: Thu, 13 Jul 2017 08:20:22 +0900 Subject: [PATCH 004/138] #795 Add set view count to migrate sql --- .../project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql index d4422c850..ec7c35aba 100644 --- a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql +++ b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_0.sql @@ -3,10 +3,17 @@ ALTER TABLE KNOWLEDGES ADD COLUMN VIEW_COUNT bigint; comment on column KNOWLEDGES.VIEW_COUNT is '参照件数'; +drop index if exists IDX_VIEW_HISTORIES_INSERT_USER; create index IDX_VIEW_HISTORIES_INSERT_USER on VIEW_HISTORIES(INSERT_USER); +drop index if exists IDX_VIEW_HISTORIES_KNOWLEDGE_ID_INSERT_USER; create index IDX_VIEW_HISTORIES_KNOWLEDGE_ID_INSERT_USER on VIEW_HISTORIES(KNOWLEDGE_ID,INSERT_USER); - \ No newline at end of file +UPDATE KNOWLEDGES + SET VIEW_COUNT = ( + SELECT COUNT(*) FROM VIEW_HISTORIES + WHERE VIEW_HISTORIES.KNOWLEDGE_ID = KNOWLEDGES.KNOWLEDGE_ID + GROUP BY VIEW_HISTORIES.KNOWLEDGE_ID + ); From 92ffc4ec3316d9b8d31834972ea59418797e8da7 Mon Sep 17 00:00:00 2001 From: Koda Date: Sat, 22 Jul 2017 11:44:05 +0900 Subject: [PATCH 005/138] #806 Make group members' batch registration available for non-administrators --- gulpfile.js | 1 + .../knowledge/control/protect/GroupControl.java | 14 ++++++-------- .../WEB-INF/views/protect/group/view_group.jsp | 12 +++++------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 28e36ec58..12a580126 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,6 +14,7 @@ gulp.task('min', function() { .pipe(replace('href="<%= request.getContextPath() %>/css', 'href="/css')) .pipe(replace('src="<%= request.getContextPath() %>/bower', 'src="/bower')) .pipe(replace('src="<%= request.getContextPath() %>/js', 'src="/js')) + .pipe(replace('<%= request.getContextPath() %>/EasyWizard', '/EasyWizard')) .pipe(usemin({ css: [rev], htmlmin: [ function () {return minifyHtml({ empty: true });} ], diff --git a/src/main/java/org/support/project/knowledge/control/protect/GroupControl.java b/src/main/java/org/support/project/knowledge/control/protect/GroupControl.java index 18ca6139e..1708e5625 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/GroupControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/GroupControl.java @@ -534,13 +534,17 @@ public Boundary extractEmail() { /** * メールアドレスの一覧から、グループのユーザを一括登録 - * (メールアドレスの存在チェックができてしまうので、いったん管理者だけの機能にする) * @return */ @Post(subscribeToken = "knowledge") - @Auth(roles = "admin") public Boundary addUsersOnEmail() { Integer groupId = getParam("group", Integer.class); + GroupsEntity group = GroupLogic.get().getEditAbleGroup(groupId, getLoginedUser()); + if (group == null) { + // 編集可能なグループが存在しない + return sendError(HttpStatus.SC_403_FORBIDDEN, ""); + } + String emails = getParam("emails"); String[] mails = emails.split("\n"); MessageResult result = new MessageResult(MessageStatus.Success, HttpStatus.SC_200_OK, "", ""); @@ -571,10 +575,4 @@ public Boundary addUsersOnEmail() { return send(result); } - - - - - - } diff --git a/src/main/webapp/WEB-INF/views/protect/group/view_group.jsp b/src/main/webapp/WEB-INF/views/protect/group/view_group.jsp index d7931d708..ce289cf0e 100644 --- a/src/main/webapp/WEB-INF/views/protect/group/view_group.jsp +++ b/src/main/webapp/WEB-INF/views/protect/group/view_group.jsp @@ -13,12 +13,12 @@ - + - + + + +

<%= jspUtil.label("knowledge.notification.title") %>

+
<%= jspUtil.label("knowledge.notification.list.only.unread") %> @@ -36,6 +47,13 @@ <%= jspUtil.label("knowledge.notification.list.all") %> +
+
+ +
-
+
 <%= jspUtil.out("content") %>
 
diff --git a/src/main/webapp/js/notification-detail.js b/src/main/webapp/js/notification-detail.js new file mode 100644 index 000000000..a98fcb676 --- /dev/null +++ b/src/main/webapp/js/notification-detail.js @@ -0,0 +1,5 @@ +$(document).ready(function() { + $("#content").each(function(){ + $(this).html( $(this).html().replace(/((http|https):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g, '
$1 ') ); + }); +}); \ No newline at end of file From 4c302b7bcc3b68fc40461ec9241706c86cb370b6 Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 22 Aug 2017 02:29:59 +0900 Subject: [PATCH 032/138] #836 Change a page path that is after sign in to list page --- src/main/webapp/WEB-INF/web.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index cda9b0d33..1158de252 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -73,6 +73,14 @@ login-error-page /WEB-INF/views/auth/form.jsp + + initial-page + /open.knowledge/list + + + out-page + /open.knowledge/list + auth-class-name org.support.project.web.logic.impl.DefaultAuthenticationLogicImpl @@ -85,11 +93,6 @@ cookie-secure false - - outPage - /open.knowledge/list - - From bc9dc1dcfd4251c0f221b14a3a412b75d29df863 Mon Sep 17 00:00:00 2001 From: Koda Date: Thu, 24 Aug 2017 06:48:20 +0900 Subject: [PATCH 033/138] #444 Refactor desktop notification processing --- .../project/knowledge/bat/NotifyMailBat.java | 10 +- .../knowledge/logic/KnowledgeLogic.java | 4 + .../project/knowledge/logic/MailLogic.java | 11 +- .../project/knowledge/logic/NotifyLogic.java | 58 ++++--- .../project/knowledge/logic/WebhookLogic.java | 4 +- .../AbstractQueueNotification.java | 9 + .../CommentInsertNotification.java | 69 +++++++- .../notification/DesktopNotification.java | 17 ++ .../KnowledgeUpdateNotification.java | 32 +++- .../notification/LikeInsertNotification.java | 32 +++- .../logic/notification/QueueNotification.java | 18 +- .../support/project/knowledge/vo/Notify.java | 162 ------------------ .../knowledge/websocket/NotifyAction.java | 4 +- .../knowledge/websocket/SessionObserver.java | 10 +- 14 files changed, 222 insertions(+), 218 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/logic/notification/DesktopNotification.java delete mode 100644 src/main/java/org/support/project/knowledge/vo/Notify.java diff --git a/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java b/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java index d8a0f4b56..5423f68ed 100644 --- a/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java +++ b/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java @@ -12,7 +12,7 @@ import org.support.project.knowledge.logic.notification.CommentInsertNotification; import org.support.project.knowledge.logic.notification.KnowledgeUpdateNotification; import org.support.project.knowledge.logic.notification.LikeInsertNotification; -import org.support.project.knowledge.vo.Notify; +import org.support.project.knowledge.logic.notification.QueueNotification; /** * メッセージ処理を処理する定期的なバッチプログラム @@ -52,12 +52,12 @@ private void start() throws Exception { NotifyQueuesDao notifyQueuesDao = NotifyQueuesDao.get(); List notifyQueuesEntities = notifyQueuesDao.selectAll(); for (NotifyQueuesEntity notifyQueuesEntity : notifyQueuesEntities) { - if (notifyQueuesEntity.getType() == Notify.TYPE_KNOWLEDGE_INSERT - || notifyQueuesEntity.getType() == Notify.TYPE_KNOWLEDGE_UPDATE) { + if (notifyQueuesEntity.getType() == QueueNotification.TYPE_KNOWLEDGE_INSERT + || notifyQueuesEntity.getType() == QueueNotification.TYPE_KNOWLEDGE_UPDATE) { KnowledgeUpdateNotification.get().notify(notifyQueuesEntity); - } else if (notifyQueuesEntity.getType() == Notify.TYPE_KNOWLEDGE_COMMENT) { + } else if (notifyQueuesEntity.getType() == QueueNotification.TYPE_KNOWLEDGE_COMMENT) { CommentInsertNotification.get().notify(notifyQueuesEntity); - } else if (notifyQueuesEntity.getType() == Notify.TYPE_KNOWLEDGE_LIKE) { + } else if (notifyQueuesEntity.getType() == QueueNotification.TYPE_KNOWLEDGE_LIKE) { LikeInsertNotification.get().notify(notifyQueuesEntity); } // 通知のキューから削除 diff --git a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java index eaf2f8226..4265fc1eb 100644 --- a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java @@ -1194,6 +1194,10 @@ public Long addLikeComment(Long commentNo, LoginedUser loginedUser, Locale local like.setCommentNo(commentNo); LikeCommentsDao.get().insert(like); Long count = LikeCommentsDao.get().selectOnCommentNo(commentNo); + + // 通知 TODO +// NotifyLogic.get().notifyOnKnowledgeLiked(knowledgeId, likesEntity); + return count; } diff --git a/src/main/java/org/support/project/knowledge/logic/MailLogic.java b/src/main/java/org/support/project/knowledge/logic/MailLogic.java index 5d234c1a8..44c3ddc5c 100644 --- a/src/main/java/org/support/project/knowledge/logic/MailLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/MailLogic.java @@ -76,7 +76,7 @@ public class MailLogic { public static final String NOTIFY_EVENT = "notify_event"; - public static String[] TEMPLATE_IDS = { + public static final String[] TEMPLATE_IDS = { INVITATION, MAIL_CONFIRM, NOTIFY_ACCEPT_USER, NOTIFY_ADD_USER, NOTIFY_INSERT_COMMENT_MYITEM, NOTIFY_INSERT_COMMENT, NOTIFY_INSERT_KNOWLEDGE, NOTIFY_INSERT_LIKE_MYITEM, NOTIFY_UPDATE_KNOWLEDGE, PASSWORD_RESET, TEST_MAIL, @@ -154,7 +154,8 @@ public MailLocaleTemplatesEntity load(Locale locale, String configName) { * @throws NoSuchAlgorithmException * @throws InvalidKeyException */ - public void startSendMails() throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException { + public void startSendMails() throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, + IllegalBlockSizeException, BadPaddingException { MailConfigsDao mailConfigsDao = MailConfigsDao.get(); MailConfigsEntity mailConfigsEntity = mailConfigsDao.selectOnKey(AppConfig.get().getSystemName()); if (mailConfigsEntity == null) { @@ -214,7 +215,8 @@ public void startSendMails() throws InvalidKeyException, NoSuchAlgorithmExceptio * @throws IllegalBlockSizeException * @throws BadPaddingException */ - private Session getSession(MailConfigsEntity config) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException { + private Session getSession(MailConfigsEntity config) throws InvalidKeyException, NoSuchAlgorithmException, + NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException { String host = config.getHost(); String port = String.valueOf(config.getPort()); @@ -279,7 +281,8 @@ public void mailSend(MailConfigsEntity config, MailsEntity entity) throws Invali * @throws NoSuchAlgorithmException * @throws InvalidKeyException */ - private void mailSend(Session session, MailConfigsEntity config, MailsEntity entity) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, + private void mailSend(Session session, MailConfigsEntity config, MailsEntity entity) + throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException, MessagingException { String to = entity.getToAddress(); String toName = entity.getToName(); diff --git a/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java b/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java index 330b32376..5800b046a 100644 --- a/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java @@ -25,7 +25,11 @@ import org.support.project.knowledge.entity.LikesEntity; import org.support.project.knowledge.entity.NotifyConfigsEntity; import org.support.project.knowledge.entity.NotifyQueuesEntity; -import org.support.project.knowledge.vo.Notify; +import org.support.project.knowledge.logic.notification.CommentInsertNotification; +import org.support.project.knowledge.logic.notification.DesktopNotification; +import org.support.project.knowledge.logic.notification.KnowledgeUpdateNotification; +import org.support.project.knowledge.logic.notification.LikeInsertNotification; +import org.support.project.knowledge.logic.notification.QueueNotification; import org.support.project.knowledge.websocket.NotifyAction; import org.support.project.web.bean.LoginedUser; import org.support.project.web.bean.MessageResult; @@ -78,31 +82,33 @@ public String makeURL(Long knowledgeId) { * * @param notify */ - private void notify(Notify notify) { + private void notifyMail(QueueNotification notify) { // Mail通知 NotifyQueuesDao notifyQueuesDao = NotifyQueuesDao.get(); NotifyQueuesEntity notifyQueuesEntity = notify.getQueue(); // 重複チェックし - if (NumberUtils.is(notifyQueuesEntity.getType(), Notify.TYPE_KNOWLEDGE_INSERT)) { + if (NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_INSERT)) { // ナレッジの新規登録は必ず通知のキューに入れる notifyQueuesDao.insert(notifyQueuesEntity); - } else if (NumberUtils.is(notifyQueuesEntity.getType(), Notify.TYPE_KNOWLEDGE_UPDATE)) { + } else if (NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_UPDATE)) { // ナレッジが更新された場合、キューに「登録通知」もしくは「更新通知」が存在しているのであれば登録しない NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(notifyQueuesEntity.getType(), notifyQueuesEntity.getId()); if (exist == null) { - exist = notifyQueuesDao.selectOnTypeAndId(Notify.TYPE_KNOWLEDGE_INSERT, notifyQueuesEntity.getId()); + exist = notifyQueuesDao.selectOnTypeAndId(QueueNotification.TYPE_KNOWLEDGE_INSERT, notifyQueuesEntity.getId()); if (exist == null) { notifyQueuesDao.insert(notifyQueuesEntity); } } - } else if (NumberUtils.is(notifyQueuesEntity.getType(), Notify.TYPE_KNOWLEDGE_LIKE) - || NumberUtils.is(notifyQueuesEntity.getType(), Notify.TYPE_KNOWLEDGE_COMMENT)) { + } else if (NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_LIKE) + || NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_COMMENT)) { NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(notifyQueuesEntity.getType(), notifyQueuesEntity.getId()); if (exist == null) { notifyQueuesDao.insert(notifyQueuesEntity); } } - + } + + private void notifyDeskTop(DesktopNotification notify) { // Desktop通知は、多数のユーザを処理するので、別スレッドで処理する Thread t = new Thread(new Runnable() { @Override @@ -123,9 +129,11 @@ public void run() { * @param knowledgesEntity */ public void notifyOnKnowledgeInsert(KnowledgesEntity knowledgesEntity) { - Notify notify = new Notify(); - notify.inserted(knowledgesEntity); - notify(notify); + KnowledgeUpdateNotification notify = KnowledgeUpdateNotification.get(); + notify.setKnowledge(knowledgesEntity); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_INSERT); + notifyMail(notify); + notifyDeskTop(notify); } /** @@ -134,10 +142,11 @@ public void notifyOnKnowledgeInsert(KnowledgesEntity knowledgesEntity) { * @param knowledgesEntity */ public void notifyOnKnowledgeUpdate(KnowledgesEntity knowledgesEntity) { - Notify notify = new Notify(); - notify.updated(knowledgesEntity); - - notify(notify); + KnowledgeUpdateNotification notify = KnowledgeUpdateNotification.get(); + notify.setKnowledge(knowledgesEntity); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_UPDATE); + notifyMail(notify); + notifyDeskTop(notify); } /** @@ -146,10 +155,11 @@ public void notifyOnKnowledgeUpdate(KnowledgesEntity knowledgesEntity) { * @param knowledgeId */ public void notifyOnKnowledgeLiked(Long knowledgeId, LikesEntity likesEntity) { - Notify notify = new Notify(); - notify.liked(likesEntity); - - notify(notify); + LikeInsertNotification notify = LikeInsertNotification.get(); + notify.setLike(likesEntity); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_LIKE); + notifyMail(notify); + notifyDeskTop(notify); } /** @@ -158,12 +168,12 @@ public void notifyOnKnowledgeLiked(Long knowledgeId, LikesEntity likesEntity) { * @param knowledgeId */ public void notifyOnKnowledgeComment(Long knowledgeId, CommentsEntity commentsEntity) { - Notify notify = new Notify(); - notify.commented(commentsEntity); - - notify(notify); + CommentInsertNotification notify = CommentInsertNotification.get(); + notify.setComment(commentsEntity); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_COMMENT); + notifyMail(notify); + notifyDeskTop(notify); } - /** * 指定のナレッジは、自分宛てのナレッジかどうかを判定し、メッセージを取得する * diff --git a/src/main/java/org/support/project/knowledge/logic/WebhookLogic.java b/src/main/java/org/support/project/knowledge/logic/WebhookLogic.java index 69a0f29bb..f6c9d27a8 100644 --- a/src/main/java/org/support/project/knowledge/logic/WebhookLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/WebhookLogic.java @@ -26,7 +26,7 @@ import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.TagsEntity; import org.support.project.knowledge.entity.WebhookConfigsEntity; -import org.support.project.knowledge.vo.Notify; +import org.support.project.knowledge.logic.notification.QueueNotification; import org.support.project.web.bean.LabelValue; import org.support.project.web.dao.UsersDao; import org.support.project.web.entity.ProxyConfigsEntity; @@ -85,7 +85,7 @@ public Map getKnowledgeData(KnowledgesEntity knowledge, Integer jsonObject.put("became_public", became_public); if (type != null) { - if (Notify.TYPE_KNOWLEDGE_INSERT == type) { + if (QueueNotification.TYPE_KNOWLEDGE_INSERT == type) { jsonObject.put("status", "created"); } else { jsonObject.put("status", "updated"); diff --git a/src/main/java/org/support/project/knowledge/logic/notification/AbstractQueueNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/AbstractQueueNotification.java index 8968ed849..db68fa2d2 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/AbstractQueueNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/AbstractQueueNotification.java @@ -1,6 +1,15 @@ package org.support.project.knowledge.logic.notification; public abstract class AbstractQueueNotification extends AbstractNotification implements QueueNotification { + /** notify type */ + private int type; + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java index 91eaebf00..264f6d6a1 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java @@ -6,8 +6,10 @@ import java.util.Map; import org.support.project.aop.Aspect; +import org.support.project.common.config.Resources; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.common.util.StringUtils; import org.support.project.di.Container; import org.support.project.di.DI; @@ -17,11 +19,13 @@ import org.support.project.knowledge.config.NotifyType; import org.support.project.knowledge.dao.CommentsDao; import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.dao.NotifyConfigsDao; import org.support.project.knowledge.dao.WebhookConfigsDao; import org.support.project.knowledge.dao.WebhooksDao; import org.support.project.knowledge.entity.CommentsEntity; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.MailLocaleTemplatesEntity; +import org.support.project.knowledge.entity.NotifyConfigsEntity; import org.support.project.knowledge.entity.NotifyQueuesEntity; import org.support.project.knowledge.entity.WebhookConfigsEntity; import org.support.project.knowledge.entity.WebhooksEntity; @@ -33,6 +37,7 @@ import org.support.project.knowledge.logic.WebhookLogic; import org.support.project.knowledge.vo.notification.CommentInsert; import org.support.project.web.bean.LoginedUser; +import org.support.project.web.bean.MessageResult; import org.support.project.web.dao.MailConfigsDao; import org.support.project.web.dao.MailsDao; import org.support.project.web.dao.NotificationsDao; @@ -48,8 +53,8 @@ * ナレッジにコメントが登録された場合の通知 * @author koda */ -@DI(instance = Instance.Singleton) -public class CommentInsertNotification extends AbstractQueueNotification { +@DI(instance = Instance.Prototype) +public class CommentInsertNotification extends AbstractQueueNotification implements DesktopNotification { /** ログ */ private static final Log LOG = LogFactory.getLog(CommentInsertNotification.class); /** インスタンス取得 */ @@ -57,9 +62,28 @@ public static CommentInsertNotification get() { return Container.getComp(CommentInsertNotification.class); } + /** Added CommentsEntity */ + private CommentsEntity comment; + public CommentsEntity getComment() { + return comment; + } + public void setComment(CommentsEntity comment) { + this.comment = comment; + } + /** knowledge id what is sended */ private List sendedCommentKnowledgeIds = new ArrayList<>(); + @Override + public NotifyQueuesEntity getQueue() { + NotifyQueuesEntity entity = new NotifyQueuesEntity(); + entity.setHash(RandomUtil.randamGen(30)); + entity.setType(TYPE_KNOWLEDGE_COMMENT); + entity.setId(comment.getCommentNo()); + return entity; + } + + @Override @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void notify(NotifyQueuesEntity notifyQueue) throws Exception { @@ -155,7 +179,8 @@ private NotificationsEntity insertNotificationOnComentInsert(KnowledgesEntity kn * @param user メールの送信先 * @throws Exception */ - private void sendCommentMail(CommentsEntity comment, KnowledgesEntity knowledge, UsersEntity commentUser, UsersEntity user, MailLocaleTemplatesEntity template) + private void sendCommentMail(CommentsEntity comment, KnowledgesEntity knowledge, UsersEntity commentUser, + UsersEntity user, MailLocaleTemplatesEntity template) throws Exception { MailConfigsDao mailConfigsDao = MailConfigsDao.get(); MailConfigsEntity mailConfigsEntity = mailConfigsDao.selectOnKey(AppConfig.get().getSystemName()); @@ -256,5 +281,43 @@ public void convNotification(NotificationsEntity notificationsEntity, LoginedUse notificationsEntity.setContent(contents); } } + @Override + public MessageResult getMessage(LoginedUser loginuser, Locale locale) { + NotifyConfigsDao dao = NotifyConfigsDao.get(); + NotifyConfigsEntity entity = dao.selectOnKey(loginuser.getUserId()); // ログインユーザのデスクトップ通知設定 + if (!NotifyLogic.get().flagCheck(entity.getNotifyDesktop())) { + // デスクトップ通知対象外 + return null; + } + + KnowledgesDao knowledgesDao = KnowledgesDao.get(); + KnowledgesEntity knowledge = knowledgesDao.selectOnKey(comment.getKnowledgeId()); + // 登録者に通知 + UsersEntity user = NotifyCommentLogic.get().getInsertUserOnComment(NotifyType.Desktop, comment, knowledge); + if (user != null) { + if (user.getUserId().intValue() == loginuser.getUserId().intValue()) { + // ログインユーザはナレッジ登録者で、自分の登録したナレッジにコメントがついたら通知を希望 + MessageResult messageResult = new MessageResult(); + messageResult.setMessage(Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.myitem.comment", + StringUtils.abbreviate(knowledge.getTitle(), 80))); + messageResult.setResult(NotifyLogic.get().makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク + return messageResult; + } + } + // 宛先のナレッジにコメント追加で通知が欲しいユーザに通知 + List users = NotifyCommentLogic.get().getTargetUsersOnComment(NotifyType.Desktop, comment, knowledge); + for (UsersEntity target : users) { + if (target.getUserId().intValue() == loginuser.getUserId().intValue()) { + // 自分宛てのナレッジにコメントがついたので通知 + MessageResult messageResult = new MessageResult(); + messageResult.setMessage( + Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.to.comment", + StringUtils.abbreviate(knowledge.getTitle(), 80))); + messageResult.setResult(NotifyLogic.get().makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク + return messageResult; + } + } + return null; + } } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/DesktopNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/DesktopNotification.java new file mode 100644 index 000000000..dfafe1cc6 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/notification/DesktopNotification.java @@ -0,0 +1,17 @@ +package org.support.project.knowledge.logic.notification; + +import java.util.Locale; + +import org.support.project.web.bean.LoginedUser; +import org.support.project.web.bean.MessageResult; + +public interface DesktopNotification { + /** + * デスクトップ通知するメッセージを取得 + * + * @param loginuser + * @param locale + * @return + */ + MessageResult getMessage(LoginedUser loginuser, Locale locale); +} diff --git a/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java index 76d0cff15..fbcb36b26 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java @@ -10,6 +10,7 @@ import org.support.project.common.config.INT_FLAG; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.common.util.StringUtils; import org.support.project.di.Container; import org.support.project.di.DI; @@ -41,6 +42,7 @@ import org.support.project.knowledge.vo.GroupUser; import org.support.project.knowledge.vo.notification.KnowledgeUpdate; import org.support.project.web.bean.LoginedUser; +import org.support.project.web.bean.MessageResult; import org.support.project.web.dao.MailConfigsDao; import org.support.project.web.dao.MailsDao; import org.support.project.web.dao.NotificationsDao; @@ -56,8 +58,8 @@ * ナレッジを登録・更新した際の通知処理 * @author koda */ -@DI(instance = Instance.Singleton) -public class KnowledgeUpdateNotification extends AbstractQueueNotification { +@DI(instance = Instance.Prototype) +public class KnowledgeUpdateNotification extends AbstractQueueNotification implements DesktopNotification { /** ログ */ private static final Log LOG = LogFactory.getLog(KnowledgeUpdateNotification.class); /** インスタンス取得 */ @@ -65,6 +67,24 @@ public static KnowledgeUpdateNotification get() { return Container.getComp(KnowledgeUpdateNotification.class); } + /** Updated KnowledgesEntity */ + private KnowledgesEntity knowledge; + public KnowledgesEntity getKnowledge() { + return knowledge; + } + public void setKnowledge(KnowledgesEntity knowledge) { + this.knowledge = knowledge; + } + @Override + public NotifyQueuesEntity getQueue() { + NotifyQueuesEntity entity = new NotifyQueuesEntity(); + entity.setHash(RandomUtil.randamGen(30)); + entity.setType(getType()); + entity.setId(knowledge.getKnowledgeId()); + return entity; + } + + @Override @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void notify(NotifyQueuesEntity notifyQueue) throws Exception { @@ -203,7 +223,8 @@ private void notifyKnowledgeUpdateToUsers(NotifyQueuesEntity notifyQueuesEntity, * @param config * @throws Exception */ - private void insertNotifyKnowledgeUpdateMailQue(KnowledgesEntity knowledge, UsersEntity usersEntity, MailLocaleTemplatesEntity template, String content) throws Exception { + private void insertNotifyKnowledgeUpdateMailQue(KnowledgesEntity knowledge, UsersEntity usersEntity, + MailLocaleTemplatesEntity template, String content) throws Exception { MailConfigsDao mailConfigsDao = MailConfigsDao.get(); MailConfigsEntity mailConfigsEntity = mailConfigsDao.selectOnKey(AppConfig.get().getSystemName()); if (mailConfigsEntity == null) { @@ -350,6 +371,9 @@ public void convNotification(NotificationsEntity notificationsEntity, LoginedUse } } } - + @Override + public MessageResult getMessage(LoginedUser loginuser, Locale locale) { + return NotifyLogic.get().getInsertKnowledgeMessage(loginuser, locale, knowledge); + } } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java index 4887a7fca..fcf11168d 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java @@ -8,6 +8,7 @@ import org.support.project.common.config.INT_FLAG; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.common.util.StringUtils; import org.support.project.di.Container; import org.support.project.di.DI; @@ -27,6 +28,7 @@ import org.support.project.knowledge.logic.NotifyLogic; import org.support.project.knowledge.vo.notification.LikeInsert; import org.support.project.web.bean.LoginedUser; +import org.support.project.web.bean.MessageResult; import org.support.project.web.dao.MailConfigsDao; import org.support.project.web.dao.MailsDao; import org.support.project.web.dao.NotificationsDao; @@ -42,8 +44,8 @@ * イイネが押されたことを通知 * @author koda */ -@DI(instance = Instance.Singleton) -public class LikeInsertNotification extends AbstractQueueNotification { +@DI(instance = Instance.Prototype) +public class LikeInsertNotification extends AbstractQueueNotification implements DesktopNotification { /** ログ */ private static final Log LOG = LogFactory.getLog(LikeInsertNotification.class); /** インスタンス取得 */ @@ -54,6 +56,24 @@ public static LikeInsertNotification get() { /** like id what is sended */ private List sendedLikeKnowledgeIds = new ArrayList<>(); + /** Added LikesEntity */ + private LikesEntity like; + public LikesEntity getLike() { + return like; + } + public void setLike(LikesEntity like) { + this.like = like; + } + + @Override + public NotifyQueuesEntity getQueue() { + NotifyQueuesEntity entity = new NotifyQueuesEntity(); + entity.setHash(RandomUtil.randamGen(30)); + entity.setType(TYPE_KNOWLEDGE_LIKE); + entity.setId(like.getNo()); + return entity; + } + @Override @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void notify(NotifyQueuesEntity notifyQueue) throws Exception { @@ -130,8 +150,8 @@ private NotificationsEntity insertNotificationOnLikeMyItem(KnowledgesEntity know * @param template * @throws Exception */ - private void sendLikeMail(LikesEntity like, KnowledgesEntity knowledge, UsersEntity likeUser, UsersEntity user, MailLocaleTemplatesEntity template) - throws Exception { + private void sendLikeMail(LikesEntity like, KnowledgesEntity knowledge, UsersEntity likeUser, UsersEntity user, + MailLocaleTemplatesEntity template) throws Exception { MailConfigsDao mailConfigsDao = MailConfigsDao.get(); MailConfigsEntity mailConfigsEntity = mailConfigsDao.selectOnKey(AppConfig.get().getSystemName()); if (mailConfigsEntity == null) { @@ -204,5 +224,9 @@ public void convNotification(NotificationsEntity notificationsEntity, LoginedUse } + @Override + public MessageResult getMessage(LoginedUser loginuser, Locale locale) { + return NotifyLogic.get().getSaveLikeMessage(loginuser, locale, like); + } } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java index d7b13e945..a9c23843b 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java @@ -3,13 +3,25 @@ import org.support.project.knowledge.entity.NotifyQueuesEntity; public interface QueueNotification extends Notification { - + /** notify type: insert knowledge */ + int TYPE_KNOWLEDGE_INSERT = 1; + /** notify type: update knowledge */ + int TYPE_KNOWLEDGE_UPDATE = 2; + /** notify type: add comment */ + int TYPE_KNOWLEDGE_COMMENT = 11; + /** notify type: add like */ + int TYPE_KNOWLEDGE_LIKE = 21; + + /** + * メール通知のキューを取得 + * + * @return + */ + NotifyQueuesEntity getQueue(); /** * 通知キューに入っている、通知を処理する * @param notifyQueue */ void notify(NotifyQueuesEntity notifyQueue) throws Exception; - - } diff --git a/src/main/java/org/support/project/knowledge/vo/Notify.java b/src/main/java/org/support/project/knowledge/vo/Notify.java deleted file mode 100644 index ff40e4d09..000000000 --- a/src/main/java/org/support/project/knowledge/vo/Notify.java +++ /dev/null @@ -1,162 +0,0 @@ -package org.support.project.knowledge.vo; - -import java.util.List; -import java.util.Locale; - -import org.support.project.common.config.Resources; -import org.support.project.common.util.RandomUtil; -import org.support.project.common.util.StringUtils; -import org.support.project.knowledge.config.NotifyType; -import org.support.project.knowledge.dao.KnowledgesDao; -import org.support.project.knowledge.dao.NotifyConfigsDao; -import org.support.project.knowledge.entity.CommentsEntity; -import org.support.project.knowledge.entity.KnowledgesEntity; -import org.support.project.knowledge.entity.LikesEntity; -import org.support.project.knowledge.entity.NotifyConfigsEntity; -import org.support.project.knowledge.entity.NotifyQueuesEntity; -import org.support.project.knowledge.logic.NotifyCommentLogic; -import org.support.project.knowledge.logic.NotifyLogic; -import org.support.project.web.bean.LoginedUser; -import org.support.project.web.bean.MessageResult; -import org.support.project.web.entity.UsersEntity; - -/** - * Class for notify - * @author Koda - */ -public class Notify { - /** notify type: insert knowledge */ - public static final int TYPE_KNOWLEDGE_INSERT = 1; - /** notify type: update knowledge */ - public static final int TYPE_KNOWLEDGE_UPDATE = 2; - /** notify type: add comment */ - public static final int TYPE_KNOWLEDGE_COMMENT = 11; - /** notify type: add like */ - public static final int TYPE_KNOWLEDGE_LIKE = 21; - - /** notify type */ - private int type; - - /** Updated KnowledgesEntity */ - private KnowledgesEntity knowledge; - /** Added CommentsEntity */ - private CommentsEntity comment; - /** Added LikesEntity */ - private LikesEntity like; - - /** - * Knowledge inserted. - * @param entity - */ - public void inserted(KnowledgesEntity entity) { - type = TYPE_KNOWLEDGE_INSERT; - knowledge = entity; - } - /** - * Knowledge updated. - * @param entity - */ - public void updated(KnowledgesEntity entity) { - type = TYPE_KNOWLEDGE_UPDATE; - knowledge = entity; - } - /** - * Comment added. - * @param commentsEntity - */ - public void commented(CommentsEntity commentsEntity) { - type = TYPE_KNOWLEDGE_COMMENT; - comment = commentsEntity; - } - /** - * Like added. - * @param entity - */ - public void liked(LikesEntity entity) { - type = TYPE_KNOWLEDGE_LIKE; - like = entity; - } - /** - * メール通知のキューを取得 - * - * @return - */ - public NotifyQueuesEntity getQueue() { - NotifyQueuesEntity entity = new NotifyQueuesEntity(); - entity.setHash(RandomUtil.randamGen(30)); - entity.setType(type); - - if (type == TYPE_KNOWLEDGE_INSERT || type == TYPE_KNOWLEDGE_UPDATE) { - entity.setId(knowledge.getKnowledgeId()); - } else if (type == TYPE_KNOWLEDGE_COMMENT) { - entity.setId(comment.getCommentNo()); - } else if (type == TYPE_KNOWLEDGE_LIKE) { - entity.setId(like.getNo()); - } - return entity; - } - - /** - * デスクトップ通知するメッセージを取得 - * - * @param loginuser - * @param locale - * @return - */ - public MessageResult getMessage(LoginedUser loginuser, Locale locale) { - if (type == TYPE_KNOWLEDGE_INSERT) { - return NotifyLogic.get().getInsertKnowledgeMessage(loginuser, locale, knowledge); - } else if (type == TYPE_KNOWLEDGE_UPDATE) { - return NotifyLogic.get().getUpdateKnowledgeMessage(loginuser, locale, knowledge); - } else if (type == TYPE_KNOWLEDGE_COMMENT) { - return this.getSaveCommentMessage(loginuser, locale, comment); - } else if (type == TYPE_KNOWLEDGE_LIKE) { - return NotifyLogic.get().getSaveLikeMessage(loginuser, locale, like); - } - return null; - } - /** - * コメント更新時のデスクトップメッセージを取得 - * @param loginuser - * @param locale - * @param comment - * @return - */ - private MessageResult getSaveCommentMessage(LoginedUser loginuser, Locale locale, CommentsEntity comment) { - NotifyConfigsDao dao = NotifyConfigsDao.get(); - NotifyConfigsEntity entity = dao.selectOnKey(loginuser.getUserId()); // ログインユーザのデスクトップ通知設定 - if (!NotifyLogic.get().flagCheck(entity.getNotifyDesktop())) { - // デスクトップ通知対象外 - return null; - } - - KnowledgesDao knowledgesDao = KnowledgesDao.get(); - KnowledgesEntity knowledge = knowledgesDao.selectOnKey(comment.getKnowledgeId()); - // 登録者に通知 - UsersEntity user = NotifyCommentLogic.get().getInsertUserOnComment(NotifyType.Desktop, comment, knowledge); - if (user != null) { - if (user.getUserId().intValue() == loginuser.getUserId().intValue()) { - // ログインユーザはナレッジ登録者で、自分の登録したナレッジにコメントがついたら通知を希望 - MessageResult messageResult = new MessageResult(); - messageResult.setMessage(Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.myitem.comment", - StringUtils.abbreviate(knowledge.getTitle(), 80))); - messageResult.setResult(NotifyLogic.get().makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク - return messageResult; - } - } - // 宛先のナレッジにコメント追加で通知が欲しいユーザに通知 - List users = NotifyCommentLogic.get().getTargetUsersOnComment(NotifyType.Desktop, comment, knowledge); - for (UsersEntity target : users) { - if (target.getUserId().intValue() == loginuser.getUserId().intValue()) { - // 自分宛てのナレッジにコメントがついたので通知 - MessageResult messageResult = new MessageResult(); - messageResult.setMessage( - Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.to.comment", - StringUtils.abbreviate(knowledge.getTitle(), 80))); - messageResult.setResult(NotifyLogic.get().makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク - return messageResult; - } - } - return null; - } -} diff --git a/src/main/java/org/support/project/knowledge/websocket/NotifyAction.java b/src/main/java/org/support/project/knowledge/websocket/NotifyAction.java index 806796eaf..78e1a6938 100644 --- a/src/main/java/org/support/project/knowledge/websocket/NotifyAction.java +++ b/src/main/java/org/support/project/knowledge/websocket/NotifyAction.java @@ -5,7 +5,7 @@ import org.support.project.common.exception.ArgumentException; import org.support.project.di.DI; import org.support.project.di.Instance; -import org.support.project.knowledge.vo.Notify; +import org.support.project.knowledge.logic.notification.DesktopNotification; @DI(instance = Instance.Singleton) public class NotifyAction extends Observable { @@ -17,7 +17,7 @@ public class NotifyAction extends Observable { */ @Override public void notifyObservers(Object arg) { - if (!(arg instanceof Notify)) { + if (!(arg instanceof DesktopNotification)) { if (arg == null) { throw new ArgumentException("notify is invalid. only Notify.class. notify is null"); } else { diff --git a/src/main/java/org/support/project/knowledge/websocket/SessionObserver.java b/src/main/java/org/support/project/knowledge/websocket/SessionObserver.java index d97b6fa6a..176a01800 100644 --- a/src/main/java/org/support/project/knowledge/websocket/SessionObserver.java +++ b/src/main/java/org/support/project/knowledge/websocket/SessionObserver.java @@ -9,7 +9,7 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; -import org.support.project.knowledge.vo.Notify; +import org.support.project.knowledge.logic.notification.DesktopNotification; import org.support.project.web.bean.LoginedUser; import org.support.project.web.bean.MessageResult; import org.support.project.web.websocket.EndpointConfigurator; @@ -56,15 +56,15 @@ public void update(Observable o, Object message) { } } - if (message instanceof Notify && loginuser != null) { - Notify notify = (Notify) message; + if (message instanceof DesktopNotification && loginuser != null) { + DesktopNotification notify = (DesktopNotification) message; MessageResult result = notify.getMessage(loginuser, locale); if (result != null) { - if (LOG.isInfoEnabled()) { + if (LOG.isDebugEnabled()) { StringBuilder builder = new StringBuilder(); builder.append("[Notify] ").append("User id: ").append(session.getUserPrincipal().getName()).append(" "); builder.append("Session id: ").append(session.getId()).append(" ").append(result.getMessage()); - LOG.info(builder.toString()); + LOG.debug(builder.toString()); } session.getBasicRemote().sendText(JSON.encode(result)); } From 11bbb6d0c75332ec9a51af5fa7fe2f86278bc56f Mon Sep 17 00:00:00 2001 From: Koda Date: Sat, 26 Aug 2017 17:41:02 +0900 Subject: [PATCH 034/138] #444 Refactor desktop notification processing --- .../knowledge/dao/NotifyQueuesDao.java | 12 + .../project/knowledge/logic/NotifyLogic.java | 249 +++--------------- .../CommentInsertNotification.java | 10 +- .../KnowledgeUpdateNotification.java | 116 +++++++- .../notification/LikeInsertNotification.java | 31 ++- .../logic/notification/QueueNotification.java | 4 +- .../support/project/knowledge/TestCommon.java | 15 ++ .../CommentInsertNotificationTest.java | 56 ++++ .../KnowledgeUpdateNotificationTest.java | 75 ++++++ .../LikeInsertNotificationTest.java | 56 ++++ .../notification/NotificationTestCommon.java | 35 +++ 11 files changed, 434 insertions(+), 225 deletions(-) create mode 100644 src/test/java/org/support/project/knowledge/logic/notification/CommentInsertNotificationTest.java create mode 100644 src/test/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotificationTest.java create mode 100644 src/test/java/org/support/project/knowledge/logic/notification/LikeInsertNotificationTest.java create mode 100644 src/test/java/org/support/project/knowledge/logic/notification/NotificationTestCommon.java diff --git a/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java b/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java index 7e36273d5..3e3b31037 100644 --- a/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java @@ -1,5 +1,7 @@ package org.support.project.knowledge.dao; +import java.util.List; + import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -24,6 +26,16 @@ public static NotifyQueuesDao get() { return Container.getComp(NotifyQueuesDao.class); } + /** + * Select all data that not deleted. + * @return all data + */ + @Override + public List selectAll() { + String sql = "SELECT * FROM NOTIFY_QUEUES WHERE DELETE_FLAG = 0 ORDER BY INSERT_DATETIME ASC;"; + return executeQueryList(sql, NotifyQueuesEntity.class); + } + /** * 通知キューに、同一の通知種類/IDの情報が無いか検索する * diff --git a/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java b/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java index 5800b046a..8263863e6 100644 --- a/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java @@ -1,40 +1,25 @@ package org.support.project.knowledge.logic; import java.util.List; -import java.util.Locale; import org.support.project.common.config.INT_FLAG; -import org.support.project.common.config.Resources; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; -import org.support.project.common.util.NumberUtils; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.config.SystemConfig; -import org.support.project.knowledge.dao.KnowledgeGroupsDao; -import org.support.project.knowledge.dao.KnowledgeUsersDao; -import org.support.project.knowledge.dao.KnowledgesDao; -import org.support.project.knowledge.dao.NotifyConfigsDao; -import org.support.project.knowledge.dao.NotifyQueuesDao; import org.support.project.knowledge.entity.CommentsEntity; -import org.support.project.knowledge.entity.KnowledgeGroupsEntity; -import org.support.project.knowledge.entity.KnowledgeUsersEntity; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.LikesEntity; -import org.support.project.knowledge.entity.NotifyConfigsEntity; -import org.support.project.knowledge.entity.NotifyQueuesEntity; import org.support.project.knowledge.logic.notification.CommentInsertNotification; import org.support.project.knowledge.logic.notification.DesktopNotification; import org.support.project.knowledge.logic.notification.KnowledgeUpdateNotification; import org.support.project.knowledge.logic.notification.LikeInsertNotification; import org.support.project.knowledge.logic.notification.QueueNotification; import org.support.project.knowledge.websocket.NotifyAction; -import org.support.project.web.bean.LoginedUser; -import org.support.project.web.bean.MessageResult; import org.support.project.web.dao.SystemConfigsDao; -import org.support.project.web.entity.GroupsEntity; import org.support.project.web.entity.SystemConfigsEntity; import org.support.project.web.entity.UsersEntity; /** @@ -53,7 +38,6 @@ public class NotifyLogic { public static NotifyLogic get() { return Container.getComp(NotifyLogic.class); } - /** * 指定のナレッジにアクセスするURLを作成 * @@ -76,38 +60,10 @@ public String makeURL(Long knowledgeId) { builder.append(knowledgeId); return builder.toString(); } - /** - * 通知を処理 - * + * デスクトップ通知を処理(別スレッドで実行) * @param notify */ - private void notifyMail(QueueNotification notify) { - // Mail通知 - NotifyQueuesDao notifyQueuesDao = NotifyQueuesDao.get(); - NotifyQueuesEntity notifyQueuesEntity = notify.getQueue(); - // 重複チェックし - if (NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_INSERT)) { - // ナレッジの新規登録は必ず通知のキューに入れる - notifyQueuesDao.insert(notifyQueuesEntity); - } else if (NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_UPDATE)) { - // ナレッジが更新された場合、キューに「登録通知」もしくは「更新通知」が存在しているのであれば登録しない - NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(notifyQueuesEntity.getType(), notifyQueuesEntity.getId()); - if (exist == null) { - exist = notifyQueuesDao.selectOnTypeAndId(QueueNotification.TYPE_KNOWLEDGE_INSERT, notifyQueuesEntity.getId()); - if (exist == null) { - notifyQueuesDao.insert(notifyQueuesEntity); - } - } - } else if (NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_LIKE) - || NumberUtils.is(notifyQueuesEntity.getType(), QueueNotification.TYPE_KNOWLEDGE_COMMENT)) { - NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(notifyQueuesEntity.getType(), notifyQueuesEntity.getId()); - if (exist == null) { - notifyQueuesDao.insert(notifyQueuesEntity); - } - } - } - private void notifyDeskTop(DesktopNotification notify) { // Desktop通知は、多数のユーザを処理するので、別スレッドで処理する Thread t = new Thread(new Runnable() { @@ -122,7 +78,35 @@ public void run() { t.setDaemon(true); t.start(); } - + /** + * Integer型のフラグをチェック + * + * @param check + * @return + */ + public boolean flagCheck(Integer check) { + if (check == null) { + return false; + } + if (check.intValue() == INT_FLAG.ON.getValue()) { + return true; + } + return false; + } + /** + * 既に指定のユーザが追加されているのか確認 + * @param users + * @param groupUser + * @return + */ + protected boolean contains(List users, UsersEntity groupUser) { + for (UsersEntity usersEntity : users) { + if (usersEntity.equalsOnKey(groupUser)) { + return true; + } + } + return false; + } /** * ナレッジが登録された際の通知 * @@ -132,7 +116,7 @@ public void notifyOnKnowledgeInsert(KnowledgesEntity knowledgesEntity) { KnowledgeUpdateNotification notify = KnowledgeUpdateNotification.get(); notify.setKnowledge(knowledgesEntity); notify.setType(QueueNotification.TYPE_KNOWLEDGE_INSERT); - notifyMail(notify); + notify.insertNotifyQueue(); notifyDeskTop(notify); } @@ -145,7 +129,7 @@ public void notifyOnKnowledgeUpdate(KnowledgesEntity knowledgesEntity) { KnowledgeUpdateNotification notify = KnowledgeUpdateNotification.get(); notify.setKnowledge(knowledgesEntity); notify.setType(QueueNotification.TYPE_KNOWLEDGE_UPDATE); - notifyMail(notify); + notify.insertNotifyQueue(); notifyDeskTop(notify); } @@ -158,7 +142,7 @@ public void notifyOnKnowledgeLiked(Long knowledgeId, LikesEntity likesEntity) { LikeInsertNotification notify = LikeInsertNotification.get(); notify.setLike(likesEntity); notify.setType(QueueNotification.TYPE_KNOWLEDGE_LIKE); - notifyMail(notify); + notify.insertNotifyQueue(); notifyDeskTop(notify); } @@ -171,174 +155,9 @@ public void notifyOnKnowledgeComment(Long knowledgeId, CommentsEntity commentsEn CommentInsertNotification notify = CommentInsertNotification.get(); notify.setComment(commentsEntity); notify.setType(QueueNotification.TYPE_KNOWLEDGE_COMMENT); - notifyMail(notify); + notify.insertNotifyQueue(); notifyDeskTop(notify); } - /** - * 指定のナレッジは、自分宛てのナレッジかどうかを判定し、メッセージを取得する - * - * @param loginuser - * @param knowledge - * @return - */ - public MessageResult getInsertKnowledgeMessage(LoginedUser loginuser, Locale locale, KnowledgesEntity knowledge) { - if (isToKnowledgeSave(loginuser, knowledge)) { - MessageResult messageResult = new MessageResult(); - messageResult.setMessage( - Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.to.insert", String.valueOf(knowledge.getKnowledgeId()))); - messageResult.setResult(makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク - return messageResult; - } - return null; - } - - /** - * 指定のナレッジは、自分宛てのナレッジかどうかを判定し、メッセージを取得する - * - * @param loginuser - * @param knowledge - * @return - */ - public MessageResult getUpdateKnowledgeMessage(LoginedUser loginuser, Locale locale, KnowledgesEntity knowledge) { - // TODO ストック機能ができたら、ストックしたナレッジの更新かどうかを判定する - if (isToKnowledgeSave(loginuser, knowledge)) { - MessageResult messageResult = new MessageResult(); - messageResult.setMessage( - Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.to.update", String.valueOf(knowledge.getKnowledgeId()))); - messageResult.setResult(makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク - return messageResult; - } - return null; - } - - /** - * 自分宛てのナレッジが登録/更新されたか判定する - * - * @param loginuser - * @param knowledge - * @return - */ - private boolean isToKnowledgeSave(LoginedUser loginuser, KnowledgesEntity knowledge) { - NotifyConfigsDao dao = NotifyConfigsDao.get(); - NotifyConfigsEntity entity = dao.selectOnKey(loginuser.getUserId()); - if (!flagCheck(entity.getNotifyDesktop())) { - // デスクトップ通知対象外 - return false; - } -// 自分が登録した場合は、通知する必要無し?いったんは通知する -// if (knowledge.getInsertUser().intValue() == loginuser.getUserId().intValue()) { -// return false; -// } - if (!flagCheck(entity.getToItemSave())) { - // 自分宛てのナレッジが登録/更新されたら通知するがOFF - return false; - } - return isToKnowledge(loginuser, knowledge, entity); - } - - /** - * 指定のナレッジは、自分宛てのナレッジかどうかを判定する 自分宛ては以下の場合を言う ・公開区分が「公開」でかつ、「公開」でも通知する設定になっている場合 ・公開区分が「保護」でかつ、宛先に自分が入っている場合 - * - * @param loginuser - * @param knowledge - * @param entity - * @return - */ - private boolean isToKnowledge(LoginedUser loginuser, KnowledgesEntity knowledge, NotifyConfigsEntity entity) { - if (knowledge.getPublicFlag() == KnowledgeLogic.PUBLIC_FLAG_PUBLIC) { - // 公開のナレッジ - if (!flagCheck(entity.getToItemIgnorePublic())) { - // 公開も除外しない - return true; - } - } else if (knowledge.getPublicFlag() == KnowledgeLogic.PUBLIC_FLAG_PROTECT) { - // 保護のナレッジ - KnowledgeGroupsDao knowledgeGroupsDao = KnowledgeGroupsDao.get(); - List groupsEntities = knowledgeGroupsDao.selectOnKnowledgeId(knowledge.getKnowledgeId()); - List groups = loginuser.getGroups(); - for (KnowledgeGroupsEntity knowledgeGroupsEntity : groupsEntities) { - for (GroupsEntity groupsEntity : groups) { - if (knowledgeGroupsEntity.getGroupId().intValue() == groupsEntity.getGroupId().intValue()) { - return true; - } - } - } - - KnowledgeUsersDao knowledgeUsersDao = KnowledgeUsersDao.get(); - List usersEntities = knowledgeUsersDao.selectOnKnowledgeId(knowledge.getKnowledgeId()); - for (KnowledgeUsersEntity knowledgeUsersEntity : usersEntities) { - if (knowledgeUsersEntity.getUserId().intValue() == loginuser.getUserId().intValue()) { - return true; - } - } - } - return false; - } - - /** - * Integer型のフラグをチェック - * - * @param check - * @return - */ - public boolean flagCheck(Integer check) { - if (check == null) { - return false; - } - if (check.intValue() == INT_FLAG.ON.getValue()) { - return true; - } - return false; - } - /** - * 指定の「イイネ」の追加で通知するかどうかを判定し、通知する場合はメッセージを取得する - * - * @param loginuser - * @param locale - * @param like - * @return - */ - public MessageResult getSaveLikeMessage(LoginedUser loginuser, Locale locale, LikesEntity like) { - NotifyConfigsDao dao = NotifyConfigsDao.get(); - NotifyConfigsEntity entity = dao.selectOnKey(loginuser.getUserId()); - if (!flagCheck(entity.getNotifyDesktop())) { - // デスクトップ通知対象外 - return null; - } - KnowledgesDao knowledgesDao = KnowledgesDao.get(); - KnowledgesEntity knowledge = knowledgesDao.selectOnKey(like.getKnowledgeId()); - - if (flagCheck(entity.getMyItemLike()) && knowledge.getInsertUser().intValue() == loginuser.getUserId().intValue()) { - // 自分で投稿したナレッジにイイネが押されたので通知 - MessageResult messageResult = new MessageResult(); - messageResult.setMessage(Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.myitem.like", - String.valueOf(knowledge.getKnowledgeId()))); - messageResult.setResult(makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク - return messageResult; - } - - return null; - } - - - - /** - * 既に指定のユーザが追加されているのか確認 - * @param users - * @param groupUser - * @return - */ - protected boolean contains(List users, UsersEntity groupUser) { - for (UsersEntity usersEntity : users) { - if (usersEntity.equalsOnKey(groupUser)) { - return true; - } - } - return false; - } - - - } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java index 264f6d6a1..40e4f4dec 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/CommentInsertNotification.java @@ -20,6 +20,7 @@ import org.support.project.knowledge.dao.CommentsDao; import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.dao.NotifyConfigsDao; +import org.support.project.knowledge.dao.NotifyQueuesDao; import org.support.project.knowledge.dao.WebhookConfigsDao; import org.support.project.knowledge.dao.WebhooksDao; import org.support.project.knowledge.entity.CommentsEntity; @@ -75,12 +76,17 @@ public void setComment(CommentsEntity comment) { private List sendedCommentKnowledgeIds = new ArrayList<>(); @Override - public NotifyQueuesEntity getQueue() { + public void insertNotifyQueue() { NotifyQueuesEntity entity = new NotifyQueuesEntity(); entity.setHash(RandomUtil.randamGen(30)); entity.setType(TYPE_KNOWLEDGE_COMMENT); entity.setId(comment.getCommentNo()); - return entity; + + NotifyQueuesDao notifyQueuesDao = NotifyQueuesDao.get(); + NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(entity.getType(), entity.getId()); + if (exist == null) { + notifyQueuesDao.insert(entity); + } } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java index fbcb36b26..4baf6ac84 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotification.java @@ -8,8 +8,10 @@ import org.support.project.aop.Aspect; import org.support.project.common.config.INT_FLAG; +import org.support.project.common.config.Resources; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.NumberUtils; import org.support.project.common.util.RandomUtil; import org.support.project.common.util.StringUtils; import org.support.project.di.Container; @@ -18,14 +20,19 @@ import org.support.project.knowledge.bat.WebhookBat; import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.dao.ExUsersDao; +import org.support.project.knowledge.dao.KnowledgeGroupsDao; import org.support.project.knowledge.dao.KnowledgeItemValuesDao; +import org.support.project.knowledge.dao.KnowledgeUsersDao; import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.dao.NotifyConfigsDao; +import org.support.project.knowledge.dao.NotifyQueuesDao; import org.support.project.knowledge.dao.TargetsDao; import org.support.project.knowledge.dao.TemplateMastersDao; import org.support.project.knowledge.dao.WebhookConfigsDao; import org.support.project.knowledge.dao.WebhooksDao; +import org.support.project.knowledge.entity.KnowledgeGroupsEntity; import org.support.project.knowledge.entity.KnowledgeItemValuesEntity; +import org.support.project.knowledge.entity.KnowledgeUsersEntity; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.MailLocaleTemplatesEntity; import org.support.project.knowledge.entity.NotifyConfigsEntity; @@ -76,12 +83,27 @@ public void setKnowledge(KnowledgesEntity knowledge) { this.knowledge = knowledge; } @Override - public NotifyQueuesEntity getQueue() { + public void insertNotifyQueue() { NotifyQueuesEntity entity = new NotifyQueuesEntity(); entity.setHash(RandomUtil.randamGen(30)); entity.setType(getType()); entity.setId(knowledge.getKnowledgeId()); - return entity; + + NotifyQueuesDao notifyQueuesDao = NotifyQueuesDao.get(); + // 重複チェックし + if (NumberUtils.is(entity.getType(), QueueNotification.TYPE_KNOWLEDGE_INSERT)) { + // ナレッジの新規登録は必ず通知のキューに入れる + notifyQueuesDao.insert(entity); + } else if (NumberUtils.is(entity.getType(), QueueNotification.TYPE_KNOWLEDGE_UPDATE)) { + // ナレッジが更新された場合、キューに「登録通知」もしくは「更新通知」が存在しているのであれば登録しない + NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(entity.getType(), entity.getId()); + if (exist == null) { + exist = notifyQueuesDao.selectOnTypeAndId(QueueNotification.TYPE_KNOWLEDGE_INSERT, entity.getId()); + if (exist == null) { + notifyQueuesDao.insert(entity); + } + } + } } @@ -373,7 +395,95 @@ public void convNotification(NotificationsEntity notificationsEntity, LoginedUse } @Override public MessageResult getMessage(LoginedUser loginuser, Locale locale) { - return NotifyLogic.get().getInsertKnowledgeMessage(loginuser, locale, knowledge); + if (getType() == TYPE_KNOWLEDGE_UPDATE) { + return getUpdateKnowledgeMessage(loginuser, locale, "knowledge.notify.msg.desktop.to.update"); + } else { + return getUpdateKnowledgeMessage(loginuser, locale, "knowledge.notify.msg.desktop.to.insert"); + } + } + + /** + * 指定のナレッジは、自分宛てのナレッジかどうかを判定し、メッセージを取得する + * + * @param loginuser + * @param knowledge + * @return + */ + private MessageResult getUpdateKnowledgeMessage(LoginedUser loginuser, Locale locale, String title) { + // TODO ストック機能ができたら、ストックしたナレッジの更新かどうかを判定する + if (isToKnowledgeSave(loginuser, knowledge)) { + MessageResult messageResult = new MessageResult(); + messageResult.setMessage( + Resources.getInstance(locale).getResource(title, String.valueOf(knowledge.getKnowledgeId()))); + messageResult.setResult(NotifyLogic.get().makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク + return messageResult; + } + return null; } + + /** + * 自分宛てのナレッジが登録/更新されたか判定する + * + * @param loginuser + * @param knowledge + * @return + */ + private boolean isToKnowledgeSave(LoginedUser loginuser, KnowledgesEntity knowledge) { + NotifyConfigsDao dao = NotifyConfigsDao.get(); + NotifyConfigsEntity entity = dao.selectOnKey(loginuser.getUserId()); + if (!NotifyLogic.get().flagCheck(entity.getNotifyDesktop())) { + // デスクトップ通知対象外 + return false; + } +// 自分が登録した場合は、通知する必要無し?いったんは通知する +// if (knowledge.getInsertUser().intValue() == loginuser.getUserId().intValue()) { +// return false; +// } + if (!NotifyLogic.get().flagCheck(entity.getToItemSave())) { + // 自分宛てのナレッジが登録/更新されたら通知するがOFF + return false; + } + return isToKnowledge(loginuser, knowledge, entity); + } + + /** + * 指定のナレッジは、自分宛てのナレッジかどうかを判定する 自分宛ては以下の場合を言う ・公開区分が「公開」でかつ、「公開」でも通知する設定になっている場合 ・公開区分が「保護」でかつ、宛先に自分が入っている場合 + * + * @param loginuser + * @param knowledge + * @param entity + * @return + */ + private boolean isToKnowledge(LoginedUser loginuser, KnowledgesEntity knowledge, NotifyConfigsEntity entity) { + if (knowledge.getPublicFlag() == KnowledgeLogic.PUBLIC_FLAG_PUBLIC) { + // 公開のナレッジ + if (!NotifyLogic.get().flagCheck(entity.getToItemIgnorePublic())) { + // 公開も除外しない + return true; + } + } else if (knowledge.getPublicFlag() == KnowledgeLogic.PUBLIC_FLAG_PROTECT) { + // 保護のナレッジ + KnowledgeGroupsDao knowledgeGroupsDao = KnowledgeGroupsDao.get(); + List groupsEntities = knowledgeGroupsDao.selectOnKnowledgeId(knowledge.getKnowledgeId()); + List groups = loginuser.getGroups(); + for (KnowledgeGroupsEntity knowledgeGroupsEntity : groupsEntities) { + for (GroupsEntity groupsEntity : groups) { + if (knowledgeGroupsEntity.getGroupId().intValue() == groupsEntity.getGroupId().intValue()) { + return true; + } + } + } + + KnowledgeUsersDao knowledgeUsersDao = KnowledgeUsersDao.get(); + List usersEntities = knowledgeUsersDao.selectOnKnowledgeId(knowledge.getKnowledgeId()); + for (KnowledgeUsersEntity knowledgeUsersEntity : usersEntities) { + if (knowledgeUsersEntity.getUserId().intValue() == loginuser.getUserId().intValue()) { + return true; + } + } + } + return false; + } + } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java index fcf11168d..ce5c34bf8 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java @@ -6,6 +6,7 @@ import org.support.project.aop.Aspect; import org.support.project.common.config.INT_FLAG; +import org.support.project.common.config.Resources; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; import org.support.project.common.util.RandomUtil; @@ -17,6 +18,7 @@ import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.dao.LikesDao; import org.support.project.knowledge.dao.NotifyConfigsDao; +import org.support.project.knowledge.dao.NotifyQueuesDao; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.LikesEntity; import org.support.project.knowledge.entity.MailLocaleTemplatesEntity; @@ -66,12 +68,17 @@ public void setLike(LikesEntity like) { } @Override - public NotifyQueuesEntity getQueue() { + public void insertNotifyQueue() { NotifyQueuesEntity entity = new NotifyQueuesEntity(); entity.setHash(RandomUtil.randamGen(30)); entity.setType(TYPE_KNOWLEDGE_LIKE); entity.setId(like.getNo()); - return entity; + + NotifyQueuesDao notifyQueuesDao = NotifyQueuesDao.get(); + NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(entity.getType(), entity.getId()); + if (exist == null) { + notifyQueuesDao.insert(entity); + } } @Override @@ -226,7 +233,25 @@ public void convNotification(NotificationsEntity notificationsEntity, LoginedUse } @Override public MessageResult getMessage(LoginedUser loginuser, Locale locale) { - return NotifyLogic.get().getSaveLikeMessage(loginuser, locale, like); + NotifyConfigsDao dao = NotifyConfigsDao.get(); + NotifyConfigsEntity entity = dao.selectOnKey(loginuser.getUserId()); + if (!NotifyLogic.get().flagCheck(entity.getNotifyDesktop())) { + // デスクトップ通知対象外 + return null; + } + KnowledgesDao knowledgesDao = KnowledgesDao.get(); + KnowledgesEntity knowledge = knowledgesDao.selectOnKey(like.getKnowledgeId()); + + if (NotifyLogic.get().flagCheck(entity.getMyItemLike()) && knowledge.getInsertUser().intValue() == loginuser.getUserId().intValue()) { + // 自分で投稿したナレッジにイイネが押されたので通知 + MessageResult messageResult = new MessageResult(); + messageResult.setMessage(Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.myitem.like", + String.valueOf(knowledge.getKnowledgeId()))); + messageResult.setResult(NotifyLogic.get().makeURL(knowledge.getKnowledgeId())); // Knowledgeへのリンク + return messageResult; + } + + return null; } } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java index a9c23843b..24ba16cc1 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java @@ -13,11 +13,11 @@ public interface QueueNotification extends Notification { int TYPE_KNOWLEDGE_LIKE = 21; /** - * メール通知のキューを取得 + * メール通知のキューを保存 * * @return */ - NotifyQueuesEntity getQueue(); + void insertNotifyQueue(); /** * 通知キューに入っている、通知を処理する * @param notifyQueue diff --git a/src/test/java/org/support/project/knowledge/TestCommon.java b/src/test/java/org/support/project/knowledge/TestCommon.java index 0433c8d59..f8e66ca0d 100644 --- a/src/test/java/org/support/project/knowledge/TestCommon.java +++ b/src/test/java/org/support/project/knowledge/TestCommon.java @@ -20,6 +20,9 @@ import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.dao.gen.DatabaseControlDao; import org.support.project.knowledge.deploy.InitDB; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.logic.KnowledgeLogic; +import org.support.project.knowledge.vo.KnowledgeData; import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.ormapping.tool.config.ORmappingToolConfig; @@ -196,4 +199,16 @@ protected static List addUser(LoginedUser user, String userName, In return rolesEntities; } + protected KnowledgesEntity insertKnowledge(String title, LoginedUser loginedUser) throws Exception { + KnowledgesEntity entity = new KnowledgesEntity(); + entity.setTitle(title); + entity.setContent("contens of " + title); + entity.setTypeId(-100); + entity.setPublicFlag(KnowledgeLogic.PUBLIC_FLAG_PUBLIC); + KnowledgeData data = new KnowledgeData(); + data.setKnowledge(entity); + entity = KnowledgeLogic.get().insert(data, loginedUser); + return entity; + } + } diff --git a/src/test/java/org/support/project/knowledge/logic/notification/CommentInsertNotificationTest.java b/src/test/java/org/support/project/knowledge/logic/notification/CommentInsertNotificationTest.java new file mode 100644 index 000000000..f74407dd6 --- /dev/null +++ b/src/test/java/org/support/project/knowledge/logic/notification/CommentInsertNotificationTest.java @@ -0,0 +1,56 @@ +package org.support.project.knowledge.logic.notification; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.support.project.common.test.Order; +import org.support.project.common.test.OrderedRunner; +import org.support.project.knowledge.dao.NotifyQueuesDao; +import org.support.project.knowledge.entity.CommentsEntity; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.NotifyQueuesEntity; +import org.support.project.knowledge.logic.KnowledgeLogic; +import org.support.project.knowledge.logic.NotificationLogic; +import org.support.project.knowledge.logic.notification.Notification.TARGET; +import org.support.project.web.bean.MessageResult; +import org.support.project.web.entity.NotificationsEntity; + +@RunWith(OrderedRunner.class) +public class CommentInsertNotificationTest extends NotificationTestCommon { + @Test + @Order(order = 1) + public void testNotification() throws Exception { + // Knowledgeを登録し、それにコメント登録 + KnowledgesEntity knowledge = super.insertKnowledge("テスト", loginedUser); + CommentsEntity comment = KnowledgeLogic.get().saveComment(knowledge.getKnowledgeId(), "コメント", new ArrayList<>(), loginedUser); + + List list = NotifyQueuesDao.get().selectAll(); + LOG.info(list); + + Assert.assertEquals(2, list.size()); // Knowledge登録と、イイネの通知が登録されている + Assert.assertEquals(knowledge.getKnowledgeId(), list.get(0).getId()); + Assert.assertEquals(QueueNotification.TYPE_KNOWLEDGE_INSERT, list.get(0).getType().intValue()); + Assert.assertEquals(QueueNotification.TYPE_KNOWLEDGE_COMMENT, list.get(1).getType().intValue()); + + CommentInsertNotification.get().notify(list.get(1)); // Likeの通知キューを処理 + + List notifications = NotificationLogic.get().getNotification(loginedUser.getUserId(), 0, false); + LOG.info(notifications.get(0)); + Assert.assertEquals(1, notifications.size()); // 登録した通知が届いている + + // 変換処理がエラーにならないこと + CommentInsertNotification.get().convNotification(notifications.get(0), loginedUser, TARGET.detail); + + // Desktop notification + CommentInsertNotification notify = CommentInsertNotification.get(); + notify.setComment(comment); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_COMMENT); + + MessageResult result = notify.getMessage(loginedUser, loginedUser.getLocale()); + LOG.info(result.getMessage()); + } + +} diff --git a/src/test/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotificationTest.java b/src/test/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotificationTest.java new file mode 100644 index 000000000..e2543fd6a --- /dev/null +++ b/src/test/java/org/support/project/knowledge/logic/notification/KnowledgeUpdateNotificationTest.java @@ -0,0 +1,75 @@ +package org.support.project.knowledge.logic.notification; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.support.project.common.config.INT_FLAG; +import org.support.project.common.test.Order; +import org.support.project.common.test.OrderedRunner; +import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.dao.NotifyQueuesDao; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.NotifyQueuesEntity; +import org.support.project.knowledge.logic.NotificationLogic; +import org.support.project.knowledge.logic.notification.Notification.TARGET; +import org.support.project.web.bean.MessageResult; +import org.support.project.web.entity.NotificationsEntity; + +@RunWith(OrderedRunner.class) +public class KnowledgeUpdateNotificationTest extends NotificationTestCommon { + @Test + @Order(order = 1) + public void testInsertNotifyQueue() throws Exception { + KnowledgesEntity entity = new KnowledgesEntity(); + entity.setKnowledgeId(new Long(-1)); + KnowledgeUpdateNotification notify = KnowledgeUpdateNotification.get(); + notify.setKnowledge(entity); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_INSERT); + notify.insertNotifyQueue(); + + List list = NotifyQueuesDao.get().selectAll(); + LOG.info(list); + + Assert.assertEquals(1, list.size()); + Assert.assertEquals(new Long(-1), list.get(0).getId()); + Assert.assertEquals(QueueNotification.TYPE_KNOWLEDGE_INSERT, list.get(0).getType().intValue()); + + NotifyQueuesDao.get().delete(list.get(0)); + } + + @Test + @Order(order = 2) + public void testNotify() throws Exception { + KnowledgesEntity entity = insertKnowledge("テスト", loginedUser); + entity = KnowledgesDao.get().selectOnKey(entity.getKnowledgeId()); + Assert.assertEquals(INT_FLAG.OFF.getValue(), entity.getNotifyStatus().intValue()); + + List list = NotifyQueuesDao.get().selectAll(); + LOG.info(list); + + Assert.assertEquals(1, list.size()); + + KnowledgeUpdateNotification.get().notify(list.get(0)); + + entity = KnowledgesDao.get().selectOnKey(entity.getKnowledgeId()); + Assert.assertEquals(INT_FLAG.ON.getValue(), entity.getNotifyStatus().intValue()); + + List notifications = NotificationLogic.get().getNotification(loginedUser.getUserId(), 0, false); + LOG.info(notifications.get(0)); + Assert.assertEquals(1, notifications.size()); // 登録した通知が届いている + + // 変換処理がエラーにならないこと + KnowledgeUpdateNotification.get().convNotification(notifications.get(0), loginedUser, TARGET.detail); + + // Desktop notification + KnowledgeUpdateNotification notify = KnowledgeUpdateNotification.get(); + notify.setKnowledge(entity); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_INSERT); + + MessageResult result = notify.getMessage(loginedUser, loginedUser.getLocale()); + LOG.info(result); + } + +} diff --git a/src/test/java/org/support/project/knowledge/logic/notification/LikeInsertNotificationTest.java b/src/test/java/org/support/project/knowledge/logic/notification/LikeInsertNotificationTest.java new file mode 100644 index 000000000..66c349f6b --- /dev/null +++ b/src/test/java/org/support/project/knowledge/logic/notification/LikeInsertNotificationTest.java @@ -0,0 +1,56 @@ +package org.support.project.knowledge.logic.notification; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.support.project.common.test.Order; +import org.support.project.common.test.OrderedRunner; +import org.support.project.knowledge.dao.LikesDao; +import org.support.project.knowledge.dao.NotifyQueuesDao; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.LikesEntity; +import org.support.project.knowledge.entity.NotifyQueuesEntity; +import org.support.project.knowledge.logic.KnowledgeLogic; +import org.support.project.knowledge.logic.NotificationLogic; +import org.support.project.knowledge.logic.notification.Notification.TARGET; +import org.support.project.web.bean.MessageResult; +import org.support.project.web.entity.NotificationsEntity; + +@RunWith(OrderedRunner.class) +public class LikeInsertNotificationTest extends NotificationTestCommon { + @Test + @Order(order = 1) + public void testNotification() throws Exception { + // Knowledgeを登録し、それにいいねを押した + KnowledgesEntity knowledge = super.insertKnowledge("テスト", loginedUser); + KnowledgeLogic.get().addLike(knowledge.getKnowledgeId(), loginedUser2, loginedUser.getLocale()); + + List list = NotifyQueuesDao.get().selectAll(); + LOG.info(list); + + Assert.assertEquals(2, list.size()); // Knowledge登録と、イイネの通知が登録されている + Assert.assertEquals(knowledge.getKnowledgeId(), list.get(0).getId()); + Assert.assertEquals(QueueNotification.TYPE_KNOWLEDGE_INSERT, list.get(0).getType().intValue()); + Assert.assertEquals(QueueNotification.TYPE_KNOWLEDGE_LIKE, list.get(1).getType().intValue()); + + LikeInsertNotification.get().notify(list.get(1)); // Likeの通知キューを処理 + + List notifications = NotificationLogic.get().getNotification(loginedUser.getUserId(), 0, false); + LOG.info(notifications.get(0)); + Assert.assertEquals(1, notifications.size()); // 登録した通知が届いている + + // 変換処理がエラーにならないこと + LikeInsertNotification.get().convNotification(notifications.get(0), loginedUser, TARGET.detail); + + // Desktop notification + LikesEntity like = LikesDao.get().selectOnKnowledge(knowledge.getKnowledgeId(), 0, 100).get(0); + LikeInsertNotification notify = LikeInsertNotification.get(); + notify.setLike(like); + notify.setType(QueueNotification.TYPE_KNOWLEDGE_LIKE); + + MessageResult result = notify.getMessage(loginedUser, loginedUser.getLocale()); + LOG.info(result.getMessage()); + } +} diff --git a/src/test/java/org/support/project/knowledge/logic/notification/NotificationTestCommon.java b/src/test/java/org/support/project/knowledge/logic/notification/NotificationTestCommon.java new file mode 100644 index 000000000..01ba79ed4 --- /dev/null +++ b/src/test/java/org/support/project/knowledge/logic/notification/NotificationTestCommon.java @@ -0,0 +1,35 @@ +package org.support.project.knowledge.logic.notification; + +import org.junit.BeforeClass; +import org.support.project.common.config.INT_FLAG; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.knowledge.TestCommon; +import org.support.project.knowledge.dao.NotifyConfigsDao; +import org.support.project.knowledge.entity.NotifyConfigsEntity; +import org.support.project.knowledge.logic.AddUserProcessLogic; + +public abstract class NotificationTestCommon extends TestCommon { + /** ログ */ + protected Log LOG = LogFactory.getLog(this.getClass()); + + /** + * @BeforeClass + * @throws Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + TestCommon.setUpBeforeClass(); + AddUserProcessLogic logic = new AddUserProcessLogic(); + logic.addUserProcess(loginedUser.getLoginUser().getUserKey()); + // デスクトップ通知をONにする + NotifyConfigsEntity notifyConfig = NotifyConfigsDao.get().selectOnKey(loginedUser.getUserId()); + if (notifyConfig != null) { + // デスクトプ通知はONにする + notifyConfig.setNotifyDesktop(INT_FLAG.ON.getValue()); + NotifyConfigsDao.get().update(notifyConfig); + } + } + + +} From 1f529624133d7c71284e65163abca6450adeea73 Mon Sep 17 00:00:00 2001 From: Koda Date: Mon, 28 Aug 2017 21:50:11 +0900 Subject: [PATCH 035/138] #444 Add a notification at comment liked --- .../project/knowledge/bat/NotifyMailBat.java | 3 + .../knowledge/logic/KnowledgeLogic.java | 6 +- .../project/knowledge/logic/MailLogic.java | 1 + .../knowledge/logic/NotificationLogic.java | 3 + .../project/knowledge/logic/NotifyLogic.java | 10 + .../CommentLikedNotification.java | 191 ++++++++++++++++++ .../notification/LikeInsertNotification.java | 6 +- .../logic/notification/QueueNotification.java | 2 + .../knowledge/vo/notification/LikeInsert.java | 17 ++ .../mail/notify_insert_like_myitem_ja.xml | 2 +- .../CommentLikedNotificationTest.java | 57 ++++++ 11 files changed, 290 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/logic/notification/CommentLikedNotification.java create mode 100644 src/test/java/org/support/project/knowledge/logic/notification/CommentLikedNotificationTest.java diff --git a/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java b/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java index 5423f68ed..504617199 100644 --- a/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java +++ b/src/main/java/org/support/project/knowledge/bat/NotifyMailBat.java @@ -10,6 +10,7 @@ import org.support.project.knowledge.entity.NotifyQueuesEntity; import org.support.project.knowledge.logic.MailEventLogic; import org.support.project.knowledge.logic.notification.CommentInsertNotification; +import org.support.project.knowledge.logic.notification.CommentLikedNotification; import org.support.project.knowledge.logic.notification.KnowledgeUpdateNotification; import org.support.project.knowledge.logic.notification.LikeInsertNotification; import org.support.project.knowledge.logic.notification.QueueNotification; @@ -59,6 +60,8 @@ private void start() throws Exception { CommentInsertNotification.get().notify(notifyQueuesEntity); } else if (notifyQueuesEntity.getType() == QueueNotification.TYPE_KNOWLEDGE_LIKE) { LikeInsertNotification.get().notify(notifyQueuesEntity); + } else if (notifyQueuesEntity.getType() == QueueNotification.TYPE_COMMENT_LIKE) { + CommentLikedNotification.get().notify(notifyQueuesEntity); } // 通知のキューから削除 //notifyQueuesDao.delete(notifyQueuesEntity); diff --git a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java index 4265fc1eb..6b7bf9506 100644 --- a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java @@ -1192,11 +1192,11 @@ public Long addLikeComment(Long commentNo, LoginedUser loginedUser, Locale local } LikeCommentsEntity like = new LikeCommentsEntity(); like.setCommentNo(commentNo); - LikeCommentsDao.get().insert(like); + like = LikeCommentsDao.get().insert(like); Long count = LikeCommentsDao.get().selectOnCommentNo(commentNo); - // 通知 TODO -// NotifyLogic.get().notifyOnKnowledgeLiked(knowledgeId, likesEntity); + // 通知 + NotifyLogic.get().notifyOnCommentLiked(like); return count; } diff --git a/src/main/java/org/support/project/knowledge/logic/MailLogic.java b/src/main/java/org/support/project/knowledge/logic/MailLogic.java index 44c3ddc5c..ddbf945d3 100644 --- a/src/main/java/org/support/project/knowledge/logic/MailLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/MailLogic.java @@ -67,6 +67,7 @@ public class MailLogic { public static final String NOTIFY_INSERT_KNOWLEDGE = "notify_insert_knowledge"; public static final String NOTIFY_UPDATE_KNOWLEDGE = "notify_update_knowledge"; public static final String NOTIFY_INSERT_LIKE_MYITEM = "notify_insert_like_myitem"; + public static final String NOTIFY_INSERT_LIKE_COMMENT_MYITEM = "notify_insert_like_my_comment_item"; public static final String NOTIFY_INSERT_COMMENT = "notify_insert_comment"; public static final String NOTIFY_INSERT_COMMENT_MYITEM = "notify_insert_comment_myitem"; public static final String NOTIFY_ADD_PARTICIPATE = "notify_add_participate"; diff --git a/src/main/java/org/support/project/knowledge/logic/NotificationLogic.java b/src/main/java/org/support/project/knowledge/logic/NotificationLogic.java index b83eb3ce8..dae78c3cf 100644 --- a/src/main/java/org/support/project/knowledge/logic/NotificationLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/NotificationLogic.java @@ -9,6 +9,7 @@ import org.support.project.knowledge.logic.notification.AcceptCheckUserNotification; import org.support.project.knowledge.logic.notification.AddUserNotification; import org.support.project.knowledge.logic.notification.CommentInsertNotification; +import org.support.project.knowledge.logic.notification.CommentLikedNotification; import org.support.project.knowledge.logic.notification.EventNotificationByWeek; import org.support.project.knowledge.logic.notification.KnowledgeUpdateNotification; import org.support.project.knowledge.logic.notification.LikeInsertNotification; @@ -52,6 +53,8 @@ public Notification getNotification(String category) { return CommentInsertNotification.get(); } else if (MailLogic.NOTIFY_INSERT_LIKE_MYITEM.equals(category)) { return LikeInsertNotification.get(); + } else if (MailLogic.NOTIFY_INSERT_LIKE_COMMENT_MYITEM.equals(category)) { + return CommentLikedNotification.get(); } else if (MailLogic.NOTIFY_EVENT.equals(category)) { return EventNotificationByWeek.get(); } else if (MailLogic.NOTIFY_REGISTRATION_EVENT.equals(category)) { diff --git a/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java b/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java index 8263863e6..cb7c57267 100644 --- a/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/NotifyLogic.java @@ -12,8 +12,10 @@ import org.support.project.knowledge.config.SystemConfig; import org.support.project.knowledge.entity.CommentsEntity; import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.LikeCommentsEntity; import org.support.project.knowledge.entity.LikesEntity; import org.support.project.knowledge.logic.notification.CommentInsertNotification; +import org.support.project.knowledge.logic.notification.CommentLikedNotification; import org.support.project.knowledge.logic.notification.DesktopNotification; import org.support.project.knowledge.logic.notification.KnowledgeUpdateNotification; import org.support.project.knowledge.logic.notification.LikeInsertNotification; @@ -158,6 +160,14 @@ public void notifyOnKnowledgeComment(Long knowledgeId, CommentsEntity commentsEn notify.insertNotifyQueue(); notifyDeskTop(notify); } + + public void notifyOnCommentLiked(LikeCommentsEntity like) { + CommentLikedNotification notify = CommentLikedNotification.get(); + notify.setLike(like); + notify.setType(QueueNotification.TYPE_COMMENT_LIKE); + notify.insertNotifyQueue(); + notifyDeskTop(notify); + } } diff --git a/src/main/java/org/support/project/knowledge/logic/notification/CommentLikedNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/CommentLikedNotification.java new file mode 100644 index 000000000..644157ab0 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/notification/CommentLikedNotification.java @@ -0,0 +1,191 @@ +package org.support.project.knowledge.logic.notification; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.support.project.common.config.INT_FLAG; +import org.support.project.common.config.Resources; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; +import org.support.project.common.util.StringUtils; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.dao.CommentsDao; +import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.dao.LikeCommentsDao; +import org.support.project.knowledge.dao.NotifyConfigsDao; +import org.support.project.knowledge.dao.NotifyQueuesDao; +import org.support.project.knowledge.entity.CommentsEntity; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.LikeCommentsEntity; +import org.support.project.knowledge.entity.MailLocaleTemplatesEntity; +import org.support.project.knowledge.entity.NotifyConfigsEntity; +import org.support.project.knowledge.entity.NotifyQueuesEntity; +import org.support.project.knowledge.logic.MailLogic; +import org.support.project.knowledge.logic.NotificationLogic; +import org.support.project.knowledge.logic.NotifyLogic; +import org.support.project.knowledge.vo.notification.LikeInsert; +import org.support.project.web.bean.LoginedUser; +import org.support.project.web.bean.MessageResult; +import org.support.project.web.dao.NotificationsDao; +import org.support.project.web.dao.UsersDao; +import org.support.project.web.entity.NotificationsEntity; +import org.support.project.web.entity.UsersEntity; + +import net.arnx.jsonic.JSON; + +@DI(instance = Instance.Prototype) +public class CommentLikedNotification extends AbstractQueueNotification implements DesktopNotification { + /** ログ */ + private static final Log LOG = LogFactory.getLog(CommentLikedNotification.class); + /** インスタンス取得 */ + public static CommentLikedNotification get() { + return Container.getComp(CommentLikedNotification.class); + } + + private LikeCommentsEntity like; + /** + * @return the like + */ + public LikeCommentsEntity getLike() { + return like; + } + /** + * @param like the like to set + */ + public void setLike(LikeCommentsEntity like) { + this.like = like; + } + + /** like id what is sended */ + private List sended = new ArrayList<>(); + + + @Override + public void insertNotifyQueue() { + NotifyQueuesEntity entity = new NotifyQueuesEntity(); + entity.setHash(RandomUtil.randamGen(30)); + entity.setType(TYPE_COMMENT_LIKE); + entity.setId(like.getNo()); + + NotifyQueuesDao notifyQueuesDao = NotifyQueuesDao.get(); + NotifyQueuesEntity exist = notifyQueuesDao.selectOnTypeAndId(entity.getType(), entity.getId()); + if (exist == null) { + notifyQueuesDao.insert(entity); + } + } + @Override + public void notify(NotifyQueuesEntity notifyQueue) throws Exception { + LikeCommentsEntity like = LikeCommentsDao.get().selectOnKey(notifyQueue.getId()); + if (null == like) { + LOG.warn("LikeComment record not found. id: " + notifyQueue.getId()); + return; + } + CommentsEntity comment = CommentsDao.get().selectOnKey(like.getCommentNo()); + if (null == comment) { + LOG.warn("Comment record not found."); + return; + } + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(comment.getKnowledgeId()); + if (null == knowledge) { + LOG.warn("Knowledge record not found."); + return; + } + + if (sended.contains(comment.getCommentNo())) { + // この通知キューでは、コメント対し何件のイイネがあっても1回送るだけになる + if (LOG.isDebugEnabled()) { + LOG.debug("comment [" + comment.getCommentNo() + "] "); + } + return; + } else { + sended.add(comment.getCommentNo()); + } + + // イイネを押したユーザ + UsersEntity likeUser = UsersDao.get().selectOnKey(like.getInsertUser()); + + // 宛先のユーザ(コメントを登録したユーザ) + UsersEntity user = UsersDao.get().selectOnKey(comment.getInsertUser()); + if (user != null) { + NotifyConfigsDao notifyConfigsDao = NotifyConfigsDao.get(); + NotifyConfigsEntity notifyConfigsEntity = notifyConfigsDao.selectOnKey(user.getUserId()); + // 登録者でかつイイネが登録した場合に通知が欲しい + if (notifyConfigsEntity != null && INT_FLAG.flagCheck(notifyConfigsEntity.getMyItemLike())) { + // 通知情報生成 + NotificationsEntity notification = new NotificationsEntity(); + notification.setTitle(MailLogic.NOTIFY_INSERT_LIKE_COMMENT_MYITEM); + + LikeInsert info = new LikeInsert(); + info.setKnowledgeId(knowledge.getKnowledgeId()); + info.setKnowledgeTitle(knowledge.getTitle()); + info.setCommentNo(comment.getCommentNo()); + + info.setUpdateUser(user.getUserName()); + info.setLikeInsertUser(like.getUserName()); + + notification.setContent(JSON.encode(info)); + notification = NotificationsDao.get().insert(notification); + + // 通知とユーザの紐付け + NotificationLogic.get().insertUserNotification(notification, user); + + // メール送信 + Locale locale = user.getLocale(); + MailLocaleTemplatesEntity template = MailLogic.get().load(locale, MailLogic.NOTIFY_INSERT_LIKE_MYITEM); + LikeInsertNotification.get().sendLikeMail(knowledge, likeUser, user, template); + } + } + } + + @Override + public void convNotification(NotificationsEntity notificationsEntity, LoginedUser loginedUser, TARGET target) { + LikeInsert info = JSON.decode(notificationsEntity.getContent(), LikeInsert.class); + MailLocaleTemplatesEntity template = MailLogic.get().load(loginedUser.getLocale(), MailLogic.NOTIFY_INSERT_LIKE_MYITEM); + + String title = template.getTitle(); + title = title.replace("{KnowledgeId}", String.valueOf(info.getKnowledgeId())); + title = title.replace("{KnowledgeTitle}", StringUtils.abbreviate(info.getKnowledgeTitle(), 80)); + notificationsEntity.setTitle(title); + + if (target == TARGET.detail) { + String contents = template.getContent(); + contents = contents.replace("{KnowledgeId}", String.valueOf(info.getKnowledgeId())); + contents = contents.replace("{KnowledgeTitle}", info.getKnowledgeTitle()); + contents = contents.replace("{User}", info.getUpdateUser()); + contents = contents.replace("{URL}", NotifyLogic.get().makeURL(info.getKnowledgeId())); + CommentsEntity entity = CommentsDao.get().selectOnKey(info.getCommentNo()); + if (entity != null) { + contents = contents.replace("{Contents}", entity.getComment()); + } else { + contents = contents.replace("{Contents}", ""); + } + contents = contents.replace("{LikeInsertUser}", info.getLikeInsertUser()); + notificationsEntity.setContent(contents); + } + } + @Override + public MessageResult getMessage(LoginedUser loginuser, Locale locale) { + NotifyConfigsDao dao = NotifyConfigsDao.get(); + NotifyConfigsEntity entity = dao.selectOnKey(loginuser.getUserId()); + if (!NotifyLogic.get().flagCheck(entity.getNotifyDesktop())) { + // デスクトップ通知対象外 + return null; + } + CommentsEntity comment = CommentsDao.get().selectOnKey(like.getCommentNo()); + + if (NotifyLogic.get().flagCheck(entity.getMyItemLike()) && comment.getInsertUser().intValue() == loginuser.getUserId().intValue()) { + // 自分で投稿したナレッジにイイネが押されたので通知 + MessageResult messageResult = new MessageResult(); + messageResult.setMessage(Resources.getInstance(locale).getResource("knowledge.notify.msg.desktop.myitem.like", + String.valueOf(comment.getKnowledgeId()))); + messageResult.setResult(NotifyLogic.get().makeURL(comment.getKnowledgeId())); // Knowledgeへのリンク + return messageResult; + } + return null; + } + +} diff --git a/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java index ce5c34bf8..7f5e1607f 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/LikeInsertNotification.java @@ -125,7 +125,7 @@ public void notify(NotifyQueuesEntity notifyQueue) throws Exception { // メール送信 Locale locale = user.getLocale(); MailLocaleTemplatesEntity template = MailLogic.get().load(locale, MailLogic.NOTIFY_INSERT_LIKE_MYITEM); - sendLikeMail(like, knowledge, likeUser, user, template); + sendLikeMail(knowledge, likeUser, user, template); } } } @@ -157,7 +157,7 @@ private NotificationsEntity insertNotificationOnLikeMyItem(KnowledgesEntity know * @param template * @throws Exception */ - private void sendLikeMail(LikesEntity like, KnowledgesEntity knowledge, UsersEntity likeUser, UsersEntity user, + public void sendLikeMail(KnowledgesEntity knowledge, UsersEntity likeUser, UsersEntity user, MailLocaleTemplatesEntity template) throws Exception { MailConfigsDao mailConfigsDao = MailConfigsDao.get(); MailConfigsEntity mailConfigsEntity = mailConfigsDao.selectOnKey(AppConfig.get().getSystemName()); @@ -228,8 +228,6 @@ public void convNotification(NotificationsEntity notificationsEntity, LoginedUse contents = contents.replace("{LikeInsertUser}", info.getLikeInsertUser()); notificationsEntity.setContent(contents); } - - } @Override public MessageResult getMessage(LoginedUser loginuser, Locale locale) { diff --git a/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java b/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java index 24ba16cc1..c4e618073 100644 --- a/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java +++ b/src/main/java/org/support/project/knowledge/logic/notification/QueueNotification.java @@ -11,6 +11,8 @@ public interface QueueNotification extends Notification { int TYPE_KNOWLEDGE_COMMENT = 11; /** notify type: add like */ int TYPE_KNOWLEDGE_LIKE = 21; + /** notify type: add like */ + int TYPE_COMMENT_LIKE = 22; /** * メール通知のキューを保存 diff --git a/src/main/java/org/support/project/knowledge/vo/notification/LikeInsert.java b/src/main/java/org/support/project/knowledge/vo/notification/LikeInsert.java index 1653a60f4..8e7e29abe 100644 --- a/src/main/java/org/support/project/knowledge/vo/notification/LikeInsert.java +++ b/src/main/java/org/support/project/knowledge/vo/notification/LikeInsert.java @@ -2,6 +2,9 @@ public class LikeInsert extends KnowledgeUpdate { private String likeInsertUser; + + /** コメントにイイネが投稿された場合は、コメントのNoを保持 */ + private Long commentNo; /** * @return the likeInsertUser @@ -18,4 +21,18 @@ public void setLikeInsertUser(String likeInsertUser) { this.likeInsertUser = likeInsertUser; } + /** + * @return the commentNo + */ + public Long getCommentNo() { + return commentNo; + } + + /** + * @param commentNo the commentNo to set + */ + public void setCommentNo(Long commentNo) { + this.commentNo = commentNo; + } + } diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml index 4a5d7d0b9..805c1a3c3 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml @@ -2,7 +2,7 @@ [Knowledge] 評価の通知 {KnowledgeId} - {KnowledgeTitle} -以下のナレッジに「いいね!」が押されました! +あなたの投稿に、「いいね!」が登録されました。 {URL} diff --git a/src/test/java/org/support/project/knowledge/logic/notification/CommentLikedNotificationTest.java b/src/test/java/org/support/project/knowledge/logic/notification/CommentLikedNotificationTest.java new file mode 100644 index 000000000..d62e9fbad --- /dev/null +++ b/src/test/java/org/support/project/knowledge/logic/notification/CommentLikedNotificationTest.java @@ -0,0 +1,57 @@ +package org.support.project.knowledge.logic.notification; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.support.project.common.test.Order; +import org.support.project.knowledge.dao.LikeCommentsDao; +import org.support.project.knowledge.dao.NotifyQueuesDao; +import org.support.project.knowledge.entity.CommentsEntity; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.LikeCommentsEntity; +import org.support.project.knowledge.entity.NotifyQueuesEntity; +import org.support.project.knowledge.logic.KnowledgeLogic; +import org.support.project.knowledge.logic.NotificationLogic; +import org.support.project.knowledge.logic.notification.Notification.TARGET; +import org.support.project.web.bean.MessageResult; +import org.support.project.web.entity.NotificationsEntity; + +public class CommentLikedNotificationTest extends NotificationTestCommon { + @Test + @Order(order = 1) + public void testNotification() throws Exception { + // Knowledgeを登録し、そこにコメント登録し、それにいいねを押した + KnowledgesEntity knowledge = super.insertKnowledge("テスト", loginedUser2); + CommentsEntity comment = KnowledgeLogic.get().saveComment(knowledge.getKnowledgeId(), "コメント", new ArrayList<>(), loginedUser); + KnowledgeLogic.get().addLikeComment(comment.getCommentNo(), loginedUser2, loginedUser.getLocale()); + + List list = NotifyQueuesDao.get().selectAll(); + LOG.info(list); + + Assert.assertEquals(3, list.size()); // Knowledge登録と、コメントの登録、イイネの通知が登録されている + Assert.assertEquals(knowledge.getKnowledgeId(), list.get(0).getId()); + Assert.assertEquals(QueueNotification.TYPE_KNOWLEDGE_INSERT, list.get(0).getType().intValue()); + Assert.assertEquals(QueueNotification.TYPE_KNOWLEDGE_COMMENT, list.get(1).getType().intValue()); + Assert.assertEquals(QueueNotification.TYPE_COMMENT_LIKE, list.get(2).getType().intValue()); + + CommentLikedNotification.get().notify(list.get(2)); // Likeの通知キューを処理 + + List notifications = NotificationLogic.get().getNotification(loginedUser.getUserId(), 0, false); + Assert.assertEquals(1, notifications.size()); // 登録した通知が届いている + LOG.info(notifications.get(0)); + + // 変換処理がエラーにならないこと + CommentLikedNotification.get().convNotification(notifications.get(0), loginedUser, TARGET.detail); + + // Desktop notification + LikeCommentsEntity like = LikeCommentsDao.get().selectOnCommentNo(comment.getCommentNo(), 0, 100).get(0); + CommentLikedNotification notify = CommentLikedNotification.get(); + notify.setLike(like); + notify.setType(QueueNotification.TYPE_COMMENT_LIKE); + + MessageResult result = notify.getMessage(loginedUser, loginedUser.getLocale()); + LOG.info(result.getMessage()); + } +} From fa69fd850f7748a5d18d08fc3aa7ba20b3515c1e Mon Sep 17 00:00:00 2001 From: Koda Date: Mon, 28 Aug 2017 21:51:16 +0900 Subject: [PATCH 036/138] #444 Change notification resources --- .../project/knowledge/mail/notify_add_participate.xml | 2 +- .../project/knowledge/mail/notify_add_participate_ja.xml | 2 +- .../project/knowledge/mail/notify_insert_comment.xml | 7 ++++--- .../project/knowledge/mail/notify_insert_comment_ja.xml | 7 ++++--- .../knowledge/mail/notify_insert_comment_myitem.xml | 8 +++++--- .../knowledge/mail/notify_insert_comment_myitem_ja.xml | 7 ++++--- .../project/knowledge/mail/notify_insert_knowledge.xml | 1 - .../project/knowledge/mail/notify_insert_like_myitem.xml | 3 ++- .../knowledge/mail/notify_insert_like_myitem_ja.xml | 3 ++- .../project/knowledge/mail/notify_registration_event.xml | 2 +- .../knowledge/mail/notify_registration_event_ja.xml | 2 +- .../project/knowledge/mail/notify_remove_participate.xml | 2 +- .../knowledge/mail/notify_remove_participate_ja.xml | 2 +- 13 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_add_participate.xml b/src/main/resources/org/support/project/knowledge/mail/notify_add_participate.xml index abc7348f2..4f23da0f7 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_add_participate.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_add_participate.xml @@ -15,7 +15,7 @@ Add a participant for your event. Please understand that it can not reply to this email. -Add Participant +Add a Participant Service send a notice on add a participant for event. diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_add_participate_ja.xml b/src/main/resources/org/support/project/knowledge/mail/notify_add_participate_ja.xml index 46d9c48fd..cd8b93e51 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_add_participate_ja.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_add_participate_ja.xml @@ -15,7 +15,7 @@ このメールに対する返信は出来ませんので御了承ください。 -参加者登録 +参加登録の通知 参加者が登録された場合に、開催者(=登録者)に通知をだします。 diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment.xml index 512d493bf..0c0789c29 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment.xml @@ -7,13 +7,14 @@ Comment was added:{KnowledgeId} {URL} ------------------------------------------ -{CommentInsertUser} +User: {CommentInsertUser} -{CommentContents} +Comment: {CommentContents} ------------------------------------------ -{KnowledgeTitle} +Title: {KnowledgeTitle} +------------------------------------------ {Contents} ------------------------------------------ diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_ja.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_ja.xml index 87b489bb0..52015a1f6 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_ja.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_ja.xml @@ -7,13 +7,14 @@ {URL} ------------------------------------------ -{CommentInsertUser} +User: {CommentInsertUser} -{CommentContents} +Comment: {CommentContents} ------------------------------------------ -{KnowledgeTitle} +Title: {KnowledgeTitle} +------------------------------------------ {Contents} ------------------------------------------ diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem.xml index c6221b87a..9935d955b 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem.xml @@ -7,16 +7,18 @@ Comment has been registered to your registered knowledge:{KnowledgeId} {URL} ------------------------------------------ -{CommentInsertUser} +User: {CommentInsertUser} -{CommentContents} +Comment: {CommentContents} ------------------------------------------ -{KnowledgeTitle} +Title: {KnowledgeTitle} +------------------------------------------ {Contents} ------------------------------------------ + This e-mail has been sent automatically from the system. Please understand that it can not reply to this email. diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem_ja.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem_ja.xml index 706fc9192..e6a6dabfd 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem_ja.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_comment_myitem_ja.xml @@ -7,13 +7,14 @@ {URL} ------------------------------------------ -{CommentInsertUser} +User: {CommentInsertUser} -{CommentContents} +Comment: {CommentContents} ------------------------------------------ -{KnowledgeTitle} +Title: {KnowledgeTitle} +------------------------------------------ {Contents} ------------------------------------------ diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_knowledge.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_knowledge.xml index 68217d433..c6c8622d7 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_knowledge.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_knowledge.xml @@ -11,7 +11,6 @@ User: {User} Title: {KnowledgeTitle} ------------------------------------------ - {Contents} ------------------------------------------ diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem.xml index 69a0cb09d..adf3fe976 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem.xml @@ -7,8 +7,9 @@ {URL} ------------------------------------------ -{KnowledgeTitle} +Title: {KnowledgeTitle} +------------------------------------------ {Contents} ------------------------------------------ diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml b/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml index 805c1a3c3..def1ba614 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_insert_like_myitem_ja.xml @@ -7,8 +7,9 @@ {URL} ------------------------------------------ -{KnowledgeTitle} +Title: {KnowledgeTitle} +------------------------------------------ {Contents} ------------------------------------------ diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_registration_event.xml b/src/main/resources/org/support/project/knowledge/mail/notify_registration_event.xml index 711de8264..66af5dfcf 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_registration_event.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_registration_event.xml @@ -16,7 +16,7 @@ Status: {Status} Please understand that it can not reply to this email. -Registration to event +Registration to the event System will notify the user who registered for participation. diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_registration_event_ja.xml b/src/main/resources/org/support/project/knowledge/mail/notify_registration_event_ja.xml index 257662c89..e97e429ac 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_registration_event_ja.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_registration_event_ja.xml @@ -16,7 +16,7 @@ Status: {Status} このメールに対する返信は出来ませんので御了承ください。 -参加者登録 +イベントへの参加を登録しました 参加登録したユーザに通知を出します。 diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate.xml b/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate.xml index 6302d8099..fb8365356 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate.xml @@ -15,7 +15,7 @@ Remove a participant for your event. Please understand that it can not reply to this email. -Add Participant +Remove a participant Service send a notice on remove a participant for event. diff --git a/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate_ja.xml b/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate_ja.xml index de1fe65d4..2eea0ecdd 100644 --- a/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate_ja.xml +++ b/src/main/resources/org/support/project/knowledge/mail/notify_remove_participate_ja.xml @@ -15,7 +15,7 @@ このメールに対する返信は出来ませんので御了承ください。 -参加者登録 +参加取り消しの通知 参加者が参加取り消しを実施した場合に、開催者(=登録者)に通知をだします。 From 3d5571634f50c789fddd45927d5c33d1bd86501a Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 29 Aug 2017 23:37:25 +0900 Subject: [PATCH 037/138] #820 Change database migration process timing. Before: auto execute at startup After: execute on the maintenance screen --- document/database/knowledge.a5er | 184 ++++++++++++++++-- .../project/knowledge/config/AppConfig.java | 16 ++ .../control/admin/ConfigControl.java | 7 + .../project/knowledge/deploy/InitDB.java | 38 +++- .../deploy/InitializationListener.java | 24 ++- .../deploy/v1_11_0/Migrate_1_11_2.java | 26 +++ .../filter/MaintenanceModeFilter.java | 89 +++++++++ .../knowledge/listener/CronListener.java | 24 +++ .../GlobalInitializationListener.java | 1 - .../websocket/DataExportEndpoint.java | 5 + .../knowledge/websocket/MigrateEndpoint.java | 67 +++++++ src/main/resources/appresource.properties | 9 + src/main/resources/appresource_ja.properties | 9 + .../project/knowledge/database/ddl.sql | 89 +++++++++ .../deploy/v1_11_0/migrate_v1_11_2.sql | 92 +++++++++ .../WEB-INF/views/admin/config/system.jsp | 5 +- .../WEB-INF/views/commons/maintenance.jsp | 94 +++++++++ .../webapp/WEB-INF/views/commons/migrate.jsp | 112 +++++++++++ src/main/webapp/WEB-INF/web.xml | 14 +- 19 files changed, 881 insertions(+), 24 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java create mode 100644 src/main/java/org/support/project/knowledge/filter/MaintenanceModeFilter.java create mode 100644 src/main/java/org/support/project/knowledge/websocket/MigrateEndpoint.java create mode 100644 src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql create mode 100644 src/main/webapp/WEB-INF/views/commons/maintenance.jsp create mode 100644 src/main/webapp/WEB-INF/views/commons/migrate.jsp diff --git a/document/database/knowledge.a5er b/document/database/knowledge.a5er index 0693be842..735705f81 100755 --- a/document/database/knowledge.a5er +++ b/document/database/knowledge.a5er @@ -46,6 +46,165 @@ SqlSeparator=0 ShowTag=1 ShowCommonAttributes=0 +[Relation] +Entity1=BADGES +Entity2=USER_BADGES +RelationType1=2 +RelationType2=3 +Fields1=NO +Fields2=NO +Cardinarity1= +Cardinarity2= +Position="MAIN",0,5330,5968,5735,R,R +Dependence=1 +Caption= +PName= +ModifiedDateTime=20170829163644 +LineMode=0 +Bar1=533 +Bar2=597 +Bar3=574 +TermPos1=R +TermPos2=R + +[Relation] +Entity1=USERS +Entity2=USER_BADGES +RelationType1=1 +RelationType2=3 +Fields1=USER_ID +Fields2=USER_ID +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4363,5637,3229,R,R +Dependence=1 +Caption= +PName= +LineMode=0 +Bar1=436 +Bar2=564 +Bar3=323 +TermPos1=R +TermPos2=R + +[Entity] +PName=USER_BADGES +LName=ユーザの称号 +Comment= +TableOption= +Page=Main +Left=2950 +Top=850 +Field="ユーザID","USER_ID","INTEGER","NOT NULL",0,"","",$FFFFFFFF,"" +Field="番号","NO","INTEGER","NOT NULL",1,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20170829163555 +Position="Main",2950,850 + +[Comment] +Comment=種類 / ターゲット : 意味\n------------------------\n1 / knowledge_id : ナレッジを登録した [+]\n2 / knowledge_id : ナレッジを参照した [+]\n3 / knowledge_id : ナレッジにイイネを押した [+]\n4 / knowledge_id : ナレッジにイイネが押された\n5 / knowledge_id : イベントに参加登録した [+]\n6 / knowledge_id : イベント参加者が増えた\n7 / knowledge_id : ナレッジがストックされた [+]\n8 / knowledge_id : ナレッジのアンケートに回答した [+]\n9 / knowledge_id : ナレッジのアンケートに回答があった\n10 / knowledge_id : ナレッジにコメントが登録された [+]\n11 / knowledge_id : コメントにイイネが押された [+]\n\n101 / knowledge_id : 参加をやめた(マイナス)\n\n1002 / comment_no : コメントを登録した\n1003 / comment_no : コメントにイイネを押した\n1004 / comment_no : コメントにイイネが押された\n\nユーザのポイントは、USER_CONFIGSテーブルへ格納する\n\n\n\n +FontName=Tahoma +FontBold=0 +FontItalic=0 +FontUnderline=0 +FontSize=6 +FontColor=$000000 +LineColor=$000000 +BkColor=$FFFFFF +Page=Main +Left=3500 +Top=950 +Width=564 +Height=586 + +[Relation] +Entity1=USERS +Entity2=ACTIVITIES +RelationType1=2 +RelationType2=3 +Fields1=USER_ID +Fields2=USER_ID +Cardinarity1= +Cardinarity2= +Position="MAIN",0,3081,6033,4726,R,R +Dependence=1 +Caption= +PName= +ModifiedDateTime=20170829161626 +LineMode=0 +Bar1=308 +Bar2=603 +Bar3=473 +TermPos1=R +TermPos2=R + +[Entity] +PName=ACTIVITIES +LName=アクティビティ +Comment= +TableOption= +Page=Main +Left=3500 +Top=800 +Field="番号","NO","BIGSERIAL","NOT NULL",0,"","",$FFFFFFFF,"" +Field="ユーザID","USER_ID","INTEGER","NOT NULL",,"","",$FFFFFFFF,"" +Field="種類","TYPE","@INT","NOT NULL",,"","",$FFFFFFFF,"" +Field="ターゲットID","TARGET","BIGINT","NOT NULL",,"","",$FFFFFFFF,"" +Field="獲得ポイント","POINT","@INT","NOT NULL",,"","",$FFFFFFFF,"" +Index=IDX_ACTIVITIES_USER_ID=0,USER_ID +Index=IDX_ACTIVITIES_TYPE_TARGET=0,TYPE,TARGET +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20170829163512 +Position="Main",3500,800 + +[Entity] +PName=USERS +LName=ユーザ +Comment= +TableOption= +Page=Main +Left=3500 +Top=500 +Field="ユーザID","USER_ID","SERIAL","NOT NULL",0,"","",$FFFFFFFF,"" +Field="ユーザKEY","USER_KEY","@VARCHAR(256)","NOT NULL",,"","ユニーク",$FFFFFFFF,"" +Field="ユーザ名","USER_NAME","@VARCHAR(256)","NOT NULL",,"","",$FFFFFFFF,"" +Field="パスワード","PASSWORD","@VARCHAR(1024)","NOT NULL",,"","ハッシュ(不可逆)",$FFFFFFFF,"" +Field="SALT","SALT","@VARCHAR(1024)",,,"","",$FFFFFFFF,"" +Field="ロケール","LOCALE_KEY","@VARCHAR(12)",,,"","",$FFFFFFFF,"" +Field="メールアドレス","MAIL_ADDRESS","@VARCHAR(256)",,,"","",$FFFFFFFF,"" +Field="LDAP認証ユーザかどうか","AUTH_LDAP","@INT",,,"","",$FFFFFFFF,"" +Index=IDX_USERS_USER_KEY=1,USER_KEY +NoDDL=1 +UsingCommonColumns=0 +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20170829160846 +Position="Main",3500,500 + +[Entity] +PName=BADGES +LName=称号 +Comment= +TableOption= +Page=Main +Left=2900 +Top=600 +Field="番号","NO","SERIAL","NOT NULL",0,"","",$FFFFFFFF,"" +Field="名称","NAME","@VARCHAR(128)","NOT NULL",,"","",$FFFFFFFF,"" +Field="表示名","DISPLAY_TEXT","@VARCHAR(32)","NOT NULL",,"","",$FFFFFFFF,"" +Field="説明","DESCRIPTION","text",,,"","",$FFFFFFFF,"" +Field="画像の種類","IMAGE_CATEGORY","@INT",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20170829161444 +Position="Main",2900,600 + [Relation] Entity1=COMMENTS Entity2=LIKE_COMMENTS @@ -71,7 +230,7 @@ PName=LIKE_COMMENTS LName=コメントのイイネ Comment= TableOption= -Page=Main +Page=MAIN Left=1600 Top=1450 Field="NO","NO","BIGSERIAL","NOT NULL",0,"","",$FFFFFFFF,"" @@ -82,7 +241,7 @@ EffectMode=None Color=$000000 BkColor=$FFFFFF ModifiedDateTime=20170809123907 -Position="Main",1600,1450 +Position="MAIN",1600,1450 [Entity] PName=TOKENS @@ -266,7 +425,7 @@ Fields1=KNOWLEDGE_ID Fields2=ITEM_NO Cardinarity1= Cardinarity2= -Position="MAIN",0,4194,5115,6198,R,R +Position="MAIN",0,4194,5115,6185,R,R Dependence=0 Caption= PName= @@ -274,7 +433,7 @@ ModifiedDateTime=20170220204434 LineMode=0 Bar1=419 Bar2=512 -Bar3=620 +Bar3=618 TermPos1=R TermPos2=R @@ -305,7 +464,7 @@ Fields1=KNOWLEDGE_ID Fields2=KNOWLEDGE_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,4662,4335,5353,R,R +Position="MAIN",0,4662,4335,5351,R,R Dependence=0 Caption= PName= @@ -458,7 +617,7 @@ Fields1=KNOWLEDGE_ID Fields2=KNOWLEDGE_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,4320,4611,5418,R,R +Position="MAIN",0,4320,4611,5405,R,R Dependence=1 Caption= PName= @@ -466,7 +625,7 @@ ModifiedDateTime=20170222215225 LineMode=0 Bar1=432 Bar2=461 -Bar3=542 +Bar3=540 TermPos1=R TermPos2=R @@ -608,7 +767,7 @@ Fields1=HOOK_ID Fields2=HOOK Cardinarity1= Cardinarity2= -Position="MAIN",0,4124,4194,3043,R,R +Position="MAIN",0,4124,4194,3050,R,R Dependence=0 Caption= PName= @@ -616,7 +775,7 @@ ModifiedDateTime=20161206104307 LineMode=0 Bar1=412 Bar2=419 -Bar3=304 +Bar3=305 TermPos1=R TermPos2=R @@ -1432,7 +1591,7 @@ Fields1=KNOWLEDGE_ID Fields2=KNOWLEDGE_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,2082,5725,4638,R,R +Position="MAIN",0,2082,5725,4629,R,R Dependence=1 Caption= PName= @@ -1440,7 +1599,7 @@ ModifiedDateTime=20150910042925 LineMode=0 Bar1=208 Bar2=572 -Bar3=464 +Bar3=463 TermPos1=R TermPos2=R @@ -1670,10 +1829,11 @@ Field="コメント件数","COMMENT_COUNT","@INT",,,"","",$FFFFFFFF,"" Field="参照件数","VIEW_COUNT","bigint",,,"","",$FFFFFFFF,"" Field="テンプレートの種類ID","TYPE_ID","@INT",,,"","",$FFFFFFFF,"" Field="通知ステータス","NOTIFY_STATUS","@INT",,,"","",$FFFFFFFF,"" +Field="ポイント","POINT","@INT","NOT NULL",,"0","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20170705135801 +ModifiedDateTime=20170829164715 Position="MAIN",700,1100 [Comment] diff --git a/src/main/java/org/support/project/knowledge/config/AppConfig.java b/src/main/java/org/support/project/knowledge/config/AppConfig.java index ed82a5101..3cb6fd6c7 100644 --- a/src/main/java/org/support/project/knowledge/config/AppConfig.java +++ b/src/main/java/org/support/project/knowledge/config/AppConfig.java @@ -22,6 +22,8 @@ public static AppConfig get() { private boolean convSlidePath = false; + private boolean maintenanceMode = false; + /** * @return the indexPath @@ -71,4 +73,18 @@ public void setSlidePath(String slidePath) { this.slidePath = slidePath; } + /** + * @return the maintenanceMode + */ + public boolean isMaintenanceMode() { + return maintenanceMode; + } + + /** + * @param maintenanceMode the maintenanceMode to set + */ + public void setMaintenanceMode(boolean maintenanceMode) { + this.maintenanceMode = maintenanceMode; + } + } diff --git a/src/main/java/org/support/project/knowledge/control/admin/ConfigControl.java b/src/main/java/org/support/project/knowledge/control/admin/ConfigControl.java index d1a65b3a4..e75525723 100644 --- a/src/main/java/org/support/project/knowledge/control/admin/ConfigControl.java +++ b/src/main/java/org/support/project/knowledge/control/admin/ConfigControl.java @@ -21,10 +21,12 @@ import org.support.project.web.dao.MailConfigsDao; import org.support.project.web.dao.SystemAttributesDao; import org.support.project.web.dao.SystemConfigsDao; +import org.support.project.web.dao.SystemsDao; import org.support.project.web.entity.LdapConfigsEntity; import org.support.project.web.entity.MailConfigsEntity; import org.support.project.web.entity.SystemAttributesEntity; import org.support.project.web.entity.SystemConfigsEntity; +import org.support.project.web.entity.SystemsEntity; @DI(instance = Instance.Prototype) public class ConfigControl extends Control { @@ -139,6 +141,11 @@ public Boundary system() { setAttribute("like_config", config.getConfigValue()); } + SystemsEntity entity = SystemsDao.get().selectOnKey(AppConfig.get().getSystemName()); + if (entity != null) { + setAttribute("db_version", entity.getVersion()); + } + return forward("system.jsp"); } diff --git a/src/main/java/org/support/project/knowledge/deploy/InitDB.java b/src/main/java/org/support/project/knowledge/deploy/InitDB.java index b06fa6a47..72b8c1df8 100644 --- a/src/main/java/org/support/project/knowledge/deploy/InitDB.java +++ b/src/main/java/org/support/project/knowledge/deploy/InitDB.java @@ -7,6 +7,8 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.PropertyUtil; +import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.deploy.v0_0_1.InitializeSystem; import org.support.project.knowledge.deploy.v0_4_4.Migrate_0_4_4; import org.support.project.knowledge.deploy.v0_5_0.Migrate_0_5_0; @@ -22,6 +24,7 @@ import org.support.project.knowledge.deploy.v1_10_0.Migrate_1_10_2; import org.support.project.knowledge.deploy.v1_11_0.Migrate_1_11_0; import org.support.project.knowledge.deploy.v1_11_0.Migrate_1_11_1; +import org.support.project.knowledge.deploy.v1_11_0.Migrate_1_11_2; import org.support.project.knowledge.deploy.v1_1_0pre1.Migrate_1_1_0pre1; import org.support.project.knowledge.deploy.v1_4_0.Migrate_1_4_0; import org.support.project.knowledge.deploy.v1_5_0.Migrate_1_5_0; @@ -37,6 +40,7 @@ import org.support.project.knowledge.deploy.v1_8_0.Migrate_1_8_5; import org.support.project.web.dao.SystemsDao; import org.support.project.web.entity.SystemsEntity; +import org.support.project.web.logic.DBConnenctionLogic; public class InitDB { /** ログ */ @@ -46,7 +50,7 @@ public class InitDB { private static final Map MAP = new LinkedHashMap<>(); private static final Migrate INIT = InitializeSystem.get(); - public static final String CURRENT = "1.11.1"; + public static final String CURRENT = "1.11.2"; public InitDB() { super(); @@ -78,6 +82,7 @@ public InitDB() { MAP.put("1.10.2", Migrate_1_10_2.get()); MAP.put("1.11.0", Migrate_1_11_0.get()); MAP.put("1.11.1", Migrate_1_11_1.get()); + MAP.put("1.11.2", Migrate_1_11_2.get()); } public static void main(String[] args) throws Exception { @@ -85,9 +90,40 @@ public static void main(String[] args) throws Exception { TimeZone zone = TimeZone.getTimeZone("GMT"); TimeZone.setDefault(zone); + AppConfig.get(); + String envValue = System.getenv(AppConfig.getEnvKey()); + LOG.info("migrate is start."); + if (LOG.isDebugEnabled()) { + LOG.debug("Env [" + AppConfig.getEnvKey() + "] is [" + envValue + "]."); + LOG.debug("Config :" + PropertyUtil.reflectionToString(AppConfig.get())); + } + DBConnenctionLogic.get().connectCustomConnection(); + InitDB init = new InitDB(); init.start(); } + + private String doInit() throws Exception { + String version = CURRENT; + Migrate migrate = INIT; + doMigrate(migrate, version); + return CURRENT; + } + public String init() throws Exception { + SystemsDao dao = SystemsDao.get(); + try { + SystemsEntity entity = dao.selectOnKey(SYSTEM_NAME); + if (entity != null) { + LOG.info("The database of this service is arleady inited. database version is " + entity.getVersion() + "."); + return entity.getVersion(); + } else { + return doInit(); + } + } catch (Exception e) { + // テーブルが存在しない(初めての起動) + return doInit(); + } + } public void start() throws Exception { String version = ""; diff --git a/src/main/java/org/support/project/knowledge/deploy/InitializationListener.java b/src/main/java/org/support/project/knowledge/deploy/InitializationListener.java index 7de390742..3e5a09846 100644 --- a/src/main/java/org/support/project/knowledge/deploy/InitializationListener.java +++ b/src/main/java/org/support/project/knowledge/deploy/InitializationListener.java @@ -1,20 +1,17 @@ package org.support.project.knowledge.deploy; import java.io.File; -import java.util.List; +import java.util.TimeZone; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; +import org.support.project.common.exception.SystemException; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; import org.support.project.knowledge.config.AnalyticsConfig; import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.config.SystemConfig; -import org.support.project.knowledge.dao.ServiceConfigsDao; -import org.support.project.knowledge.dao.ServiceLocaleConfigsDao; -import org.support.project.knowledge.entity.ServiceConfigsEntity; -import org.support.project.knowledge.entity.ServiceLocaleConfigsEntity; import org.support.project.knowledge.logic.ServiceConfigLogic; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.web.dao.SystemAttributesDao; @@ -35,7 +32,16 @@ public void contextDestroyed(ServletContextEvent contextEvent) { @Override public void contextInitialized(ServletContextEvent contextEvent) { LOG.debug("contextInitialized"); - InitializationLogic.get().init(); + // DBの初期化処理 + TimeZone zone = TimeZone.getTimeZone("GMT"); + TimeZone.setDefault(zone); + InitDB initDB = new InitDB(); + String version; + try { + version = initDB.init(); + } catch (Exception e) { + throw new SystemException(e); + } // 添付ファイル格納ディレクトリ(テンポラリディレクトリ)が存在しなければ生成 AppConfig appConfig = AppConfig.get(); @@ -66,6 +72,12 @@ public void contextInitialized(ServletContextEvent contextEvent) { // トップページ情報を取得 ServiceConfigLogic.get().load(); + + if (!InitDB.CURRENT.equals(version)) { + // Databaseのマイグレーションが必要 + appConfig.setMaintenanceMode(true); + LOG.warn("The database version of this service is " + version + ". but lastest version is " + InitDB.CURRENT + ". Then this service start MaintenanceMode"); + } } } diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java new file mode 100644 index 000000000..88335c6f0 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -0,0 +1,26 @@ +package org.support.project.knowledge.deploy.v1_11_0; + +import org.support.project.knowledge.deploy.Migrate; +import org.support.project.ormapping.tool.dao.InitializeDao; + +public class Migrate_1_11_2 implements Migrate { + + public static Migrate_1_11_2 get() { + return org.support.project.di.Container.getComp(Migrate_1_11_2.class); + } + + @Override + public boolean doMigrate() throws Exception { + InitializeDao initializeDao = InitializeDao.get(); + String[] sqlpaths = { + "/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql", + }; + initializeDao.initializeDatabase(sqlpaths); + + // 参照回数を集計 + + // ポイント修正 + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/org/support/project/knowledge/filter/MaintenanceModeFilter.java b/src/main/java/org/support/project/knowledge/filter/MaintenanceModeFilter.java new file mode 100644 index 000000000..3e704f39c --- /dev/null +++ b/src/main/java/org/support/project/knowledge/filter/MaintenanceModeFilter.java @@ -0,0 +1,89 @@ +package org.support.project.knowledge.filter; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.support.project.knowledge.config.AppConfig; +import org.support.project.web.bean.LoginedUser; +import org.support.project.web.common.HttpUtil; +import org.support.project.web.config.CommonWebParameter; +import org.support.project.web.dao.SystemsDao; +import org.support.project.web.entity.SystemsEntity; + +public class MaintenanceModeFilter implements Filter { + + private Pattern pattern = Pattern.compile("^/bower|^/images|^/css|^/js|^/favicon.ico|^/lang|css$|js$|jpg$|jpeg$|gif$|png$|ico$|html$"); + + @Override + public void destroy() { + } + + @Override + public void init(FilterConfig config) throws ServletException { + } + + @Override + public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) + throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) servletrequest; + HttpServletResponse res = (HttpServletResponse) servletresponse; + + StringBuilder pathBuilder = new StringBuilder(); + pathBuilder.append(req.getServletPath()); + if (req.getPathInfo() != null && req.getPathInfo().length() > 0) { + pathBuilder.append(req.getPathInfo()); + } + String path = pathBuilder.toString(); + + if (AppConfig.get().isMaintenanceMode()) { + // アクセス遮断の対象外のものは、普通にアクセス可能 + Matcher matcher = pattern.matcher(path); + if (matcher.find()) { + // 対象外なのでスルー + filterchain.doFilter(servletrequest, servletresponse); + return; + } + + // メンテナンスモード中にして、一般のユーザはアクセスできないようにする + LoginedUser user = (LoginedUser) req.getSession().getAttribute(CommonWebParameter.LOGIN_USER_INFO_SESSION_KEY); + if (user != null && user.isAdmin()) { + // 管理者 + if (path.equals("/protect.migrate")) { + SystemsEntity entity = SystemsDao.get().selectOnKey(AppConfig.get().getSystemName()); + if (entity != null) { + req.setAttribute("db_version", entity.getVersion()); + } + HttpUtil.forward(res, req, "/WEB-INF/views/commons/migrate.jsp"); + return; + } else if (path.equals("/migrate")) { + // マイグレーションのWebSocketパス + filterchain.doFilter(servletrequest, servletresponse); + return; + } + } + HttpUtil.forward(res, req, "/WEB-INF/views/commons/maintenance.jsp"); + return; + } else { + if (path.equals("/protect.migrate")) { + SystemsEntity entity = SystemsDao.get().selectOnKey(AppConfig.get().getSystemName()); + if (entity != null) { + req.setAttribute("db_version", entity.getVersion()); + } + HttpUtil.forward(res, req, "/WEB-INF/views/commons/migrate.jsp"); + return; + } + filterchain.doFilter(servletrequest, servletresponse); + } + } + +} diff --git a/src/main/java/org/support/project/knowledge/listener/CronListener.java b/src/main/java/org/support/project/knowledge/listener/CronListener.java index 4ff9f14f5..e6685fbd3 100644 --- a/src/main/java/org/support/project/knowledge/listener/CronListener.java +++ b/src/main/java/org/support/project/knowledge/listener/CronListener.java @@ -45,6 +45,10 @@ public void contextInitialized(final ServletContextEvent sce) { fileClearfuture = service.scheduleAtFixedRate(new Runnable() { @Override public void run() { + if (AppConfig.get().isMaintenanceMode()) { + LOG.debug("This service is maintenance mode now."); + return; + } LOG.trace("called. [fileClearfuture]"); // Java を別のVMで実行(添付ファイルの定期的なクリア) JavaJob job = new JavaJob(); @@ -73,6 +77,10 @@ public void run() { parsefuture = service.scheduleAtFixedRate(new Runnable() { @Override public void run() { + if (AppConfig.get().isMaintenanceMode()) { + LOG.debug("This service is maintenance mode now."); + return; + } LOG.trace("called. [parsefuture]"); // 添付ファイルの中身を抽出し検索可能にする JavaJob job = new JavaJob(); @@ -101,6 +109,10 @@ public void run() { mailfuture = service.scheduleAtFixedRate(new Runnable() { @Override public void run() { + if (AppConfig.get().isMaintenanceMode()) { + LOG.debug("This service is maintenance mode now."); + return; + } LOG.trace("called. [mailfuture]"); // メール送信 JavaJob job = new JavaJob(); @@ -129,6 +141,10 @@ public void run() { webhookfuture = service.scheduleAtFixedRate(new Runnable() { @Override public void run() { + if (AppConfig.get().isMaintenanceMode()) { + LOG.debug("This service is maintenance mode now."); + return; + } LOG.trace("called. [webhookfuture]"); // Webhook JavaJob job = new JavaJob(); @@ -157,6 +173,10 @@ public void run() { mailHookfuture = service.scheduleAtFixedRate(new Runnable() { @Override public void run() { + if (AppConfig.get().isMaintenanceMode()) { + LOG.debug("This service is maintenance mode now."); + return; + } LOG.trace("called. [mailHookfuture]"); // メールからの投稿用のメールの読み込み JavaJob job = new JavaJob(); @@ -185,6 +205,10 @@ public void run() { notifyfuture = service.scheduleAtFixedRate(new Runnable() { @Override public void run() { + if (AppConfig.get().isMaintenanceMode()) { + LOG.debug("This service is maintenance mode now."); + return; + } LOG.trace("called. [notifyfuture]"); // Java を別のVMで実行(添付ファイルの中身を抽出し検索可能にする) JavaJob job = new JavaJob(); diff --git a/src/main/java/org/support/project/knowledge/listener/GlobalInitializationListener.java b/src/main/java/org/support/project/knowledge/listener/GlobalInitializationListener.java index e22962035..e7355ef2e 100644 --- a/src/main/java/org/support/project/knowledge/listener/GlobalInitializationListener.java +++ b/src/main/java/org/support/project/knowledge/listener/GlobalInitializationListener.java @@ -11,7 +11,6 @@ import org.support.project.common.log.LogFactory; import org.support.project.common.util.StringUtils; import org.support.project.knowledge.config.AppConfig; -import org.support.project.knowledge.config.SystemConfig; public class GlobalInitializationListener implements ServletContextListener { private static final Log LOG = LogFactory.getLog(GlobalInitializationListener.class); diff --git a/src/main/java/org/support/project/knowledge/websocket/DataExportEndpoint.java b/src/main/java/org/support/project/knowledge/websocket/DataExportEndpoint.java index 08df2c9cb..23711655c 100644 --- a/src/main/java/org/support/project/knowledge/websocket/DataExportEndpoint.java +++ b/src/main/java/org/support/project/knowledge/websocket/DataExportEndpoint.java @@ -9,6 +9,7 @@ import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; +import org.support.project.common.bat.JobResult; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; import org.support.project.knowledge.bat.CreateExportDataBat; @@ -44,4 +45,8 @@ public void onError(Throwable t) { LOG.warn("websocket error -> ", t); } } + + @Override + protected void finishJob(JobResult result, Session session) { + } } diff --git a/src/main/java/org/support/project/knowledge/websocket/MigrateEndpoint.java b/src/main/java/org/support/project/knowledge/websocket/MigrateEndpoint.java new file mode 100644 index 000000000..e277484b7 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/websocket/MigrateEndpoint.java @@ -0,0 +1,67 @@ +package org.support.project.knowledge.websocket; + +import java.io.IOException; + +import javax.websocket.OnClose; +import javax.websocket.OnError; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; +import javax.websocket.server.ServerEndpoint; + +import org.support.project.common.bat.JobResult; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.knowledge.config.AppConfig; +import org.support.project.knowledge.deploy.InitDB; +import org.support.project.web.dao.SystemsDao; +import org.support.project.web.entity.SystemsEntity; +import org.support.project.web.websocket.CallBatchEndpoint; +import org.support.project.web.websocket.EndpointConfigurator; + +import net.arnx.jsonic.JSONException; + +@ServerEndpoint(value = "/migrate", configurator = EndpointConfigurator.class) +public class MigrateEndpoint extends CallBatchEndpoint { + /** ログ */ + private static final Log LOG = LogFactory.getLog(ReindexingEndpoint.class); + + @OnOpen + public void onOpen(Session session) throws IOException { + if (super.isAdmin(session)) { + this.setSendPlefix(""); + call(session, InitDB.class); + } + } + + @OnClose + public void onClose(Session session) { + } + + @OnMessage + public void onMessage(String text) throws JSONException, IOException { + } + + @OnError + public void onError(Throwable t) { + LOG.warn("websocket on error." + t.getClass().getName() + " : " + t.getMessage()); + if (LOG.isDebugEnabled()) { + LOG.warn("websocket error -> ", t); + } + } + + @Override + protected void finishJob(JobResult result, Session session) { + SystemsEntity entity = SystemsDao.get().selectOnKey(AppConfig.get().getSystemName()); + if (entity != null) { + if (InitDB.CURRENT.equals(entity.getVersion())) { + AppConfig.get().setMaintenanceMode(false); + } + } + try { + session.close(); + } catch (IOException e) { + LOG.warn("websocket on error." + e.getClass().getName() + " : " + e.getMessage()); + } + } +} diff --git a/src/main/resources/appresource.properties b/src/main/resources/appresource.properties index 59d000938..fe20e305c 100644 --- a/src/main/resources/appresource.properties +++ b/src/main/resources/appresource.properties @@ -843,3 +843,12 @@ knowledge.notification.title=Notifications knowledge.notification.list.all=All items knowledge.notification.list.only.unread=Only unread knowledge.notification.view.not.found=Data is not found on "{1}". + +knowledge.maintenance.status=Site is down for maintenance +knowledge.maintenance.do.migrate=Execute maintenance +knowledge.maintenance.do.migrate.no.login=Execute maintenance(only administrator) +knowledge.maintenance.migrate.title=Database migration +knowledge.maintenance.migrate.message=You can execute database migration. recommend to backup database data. + + + diff --git a/src/main/resources/appresource_ja.properties b/src/main/resources/appresource_ja.properties index c9b742b26..9591363ec 100644 --- a/src/main/resources/appresource_ja.properties +++ b/src/main/resources/appresource_ja.properties @@ -843,3 +843,12 @@ knowledge.notification.title=通知 knowledge.notification.list.all=すべて表示 knowledge.notification.list.only.unread=未読のみ knowledge.notification.view.not.found=「{1}」 にデータがありません + +knowledge.maintenance.status=メンテナンス中 +knowledge.maintenance.do.migrate=メンテナンス管理を実行 +knowledge.maintenance.do.migrate.no.login=メンテナンス管理を実行(管理者のみアクセス可能) +knowledge.maintenance.migrate.title=Database migration +knowledge.maintenance.migrate.message=DBのマイグレーションを実行します。事前にDBのバックアップを取ることをオススメします。 + + + diff --git a/src/main/resources/org/support/project/knowledge/database/ddl.sql b/src/main/resources/org/support/project/knowledge/database/ddl.sql index 3e207c597..3c240ff4f 100644 --- a/src/main/resources/org/support/project/knowledge/database/ddl.sql +++ b/src/main/resources/org/support/project/knowledge/database/ddl.sql @@ -1,3 +1,57 @@ +-- ユーザの称号 +drop table if exists USER_BADGES cascade; + +create table USER_BADGES ( + USER_ID INTEGER not null + , NO INTEGER not null + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint USER_BADGES_PKC primary key (USER_ID,NO) +) ; + +-- アクティビティ +drop table if exists ACTIVITIES cascade; + +create table ACTIVITIES ( + NO BIGSERIAL not null + , USER_ID INTEGER not null + , TYPE integer not null + , TARGET BIGINT not null + , POINT integer not null + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint ACTIVITIES_PKC primary key (NO) +) ; + +create index IDX_ACTIVITIES_USER_ID + on ACTIVITIES(USER_ID); + +create index IDX_ACTIVITIES_TYPE_TARGET + on ACTIVITIES(TYPE,TARGET); + +-- 称号 +drop table if exists BADGES cascade; + +create table BADGES ( + NO SERIAL not null + , NAME character varying(128) not null + , DISPLAY_TEXT character varying(32) not null + , DESCRIPTION text + , IMAGE_CATEGORY integer + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint BADGES_PKC primary key (NO) +) ; + -- コメントのイイネ drop table if exists LIKE_COMMENTS cascade; @@ -751,6 +805,7 @@ create table KNOWLEDGES ( , VIEW_COUNT bigint , TYPE_ID integer , NOTIFY_STATUS integer + , POINT integer default 0 not null , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer @@ -759,6 +814,39 @@ create table KNOWLEDGES ( , constraint KNOWLEDGES_PKC primary key (KNOWLEDGE_ID) ) ; +comment on table USER_BADGES is 'ユーザの称号'; +comment on column USER_BADGES.USER_ID is 'ユーザID'; +comment on column USER_BADGES.NO is '番号'; +comment on column USER_BADGES.INSERT_USER is '登録ユーザ'; +comment on column USER_BADGES.INSERT_DATETIME is '登録日時'; +comment on column USER_BADGES.UPDATE_USER is '更新ユーザ'; +comment on column USER_BADGES.UPDATE_DATETIME is '更新日時'; +comment on column USER_BADGES.DELETE_FLAG is '削除フラグ'; + +comment on table ACTIVITIES is 'アクティビティ'; +comment on column ACTIVITIES.NO is '番号'; +comment on column ACTIVITIES.USER_ID is 'ユーザID'; +comment on column ACTIVITIES.TYPE is '種類'; +comment on column ACTIVITIES.TARGET is 'ターゲットID'; +comment on column ACTIVITIES.POINT is '獲得ポイント'; +comment on column ACTIVITIES.INSERT_USER is '登録ユーザ'; +comment on column ACTIVITIES.INSERT_DATETIME is '登録日時'; +comment on column ACTIVITIES.UPDATE_USER is '更新ユーザ'; +comment on column ACTIVITIES.UPDATE_DATETIME is '更新日時'; +comment on column ACTIVITIES.DELETE_FLAG is '削除フラグ'; + +comment on table BADGES is '称号'; +comment on column BADGES.NO is '番号'; +comment on column BADGES.NAME is '名称'; +comment on column BADGES.DISPLAY_TEXT is '表示名'; +comment on column BADGES.DESCRIPTION is '説明'; +comment on column BADGES.IMAGE_CATEGORY is '画像の種類'; +comment on column BADGES.INSERT_USER is '登録ユーザ'; +comment on column BADGES.INSERT_DATETIME is '登録日時'; +comment on column BADGES.UPDATE_USER is '更新ユーザ'; +comment on column BADGES.UPDATE_DATETIME is '更新日時'; +comment on column BADGES.DELETE_FLAG is '削除フラグ'; + comment on table LIKE_COMMENTS is 'コメントのイイネ'; comment on column LIKE_COMMENTS.NO is 'NO'; comment on column LIKE_COMMENTS.COMMENT_NO is 'コメント番号'; @@ -1258,6 +1346,7 @@ comment on column KNOWLEDGES.COMMENT_COUNT is 'コメント件数'; comment on column KNOWLEDGES.VIEW_COUNT is '参照件数'; comment on column KNOWLEDGES.TYPE_ID is 'テンプレートの種類ID'; comment on column KNOWLEDGES.NOTIFY_STATUS is '通知ステータス'; +comment on column KNOWLEDGES.POINT is 'ポイント'; comment on column KNOWLEDGES.INSERT_USER is '登録ユーザ'; comment on column KNOWLEDGES.INSERT_DATETIME is '登録日時'; comment on column KNOWLEDGES.UPDATE_USER is '更新ユーザ'; diff --git a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql new file mode 100644 index 000000000..e6ebeb79d --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql @@ -0,0 +1,92 @@ +-- ユーザの称号 +drop table if exists USER_BADGES cascade; + +create table USER_BADGES ( + USER_ID INTEGER not null + , NO INTEGER not null + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint USER_BADGES_PKC primary key (USER_ID,NO) +) ; + +-- アクティビティ +drop table if exists ACTIVITIES cascade; + +create table ACTIVITIES ( + NO BIGSERIAL not null + , USER_ID INTEGER not null + , TYPE integer not null + , TARGET BIGINT not null + , POINT integer not null + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint ACTIVITIES_PKC primary key (NO) +) ; + +create index IDX_ACTIVITIES_USER_ID + on ACTIVITIES(USER_ID); + +create index IDX_ACTIVITIES_TYPE_TARGET + on ACTIVITIES(TYPE,TARGET); + +-- 称号 +drop table if exists BADGES cascade; + +create table BADGES ( + NO SERIAL not null + , NAME character varying(128) not null + , DISPLAY_TEXT character varying(32) not null + , DESCRIPTION text + , IMAGE_CATEGORY integer + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint BADGES_PKC primary key (NO) +) ; + +comment on table USER_BADGES is 'ユーザの称号'; +comment on column USER_BADGES.USER_ID is 'ユーザID'; +comment on column USER_BADGES.NO is '番号'; +comment on column USER_BADGES.INSERT_USER is '登録ユーザ'; +comment on column USER_BADGES.INSERT_DATETIME is '登録日時'; +comment on column USER_BADGES.UPDATE_USER is '更新ユーザ'; +comment on column USER_BADGES.UPDATE_DATETIME is '更新日時'; +comment on column USER_BADGES.DELETE_FLAG is '削除フラグ'; + +comment on table ACTIVITIES is 'アクティビティ'; +comment on column ACTIVITIES.NO is '番号'; +comment on column ACTIVITIES.USER_ID is 'ユーザID'; +comment on column ACTIVITIES.TYPE is '種類'; +comment on column ACTIVITIES.TARGET is 'ターゲットID'; +comment on column ACTIVITIES.POINT is '獲得ポイント'; +comment on column ACTIVITIES.INSERT_USER is '登録ユーザ'; +comment on column ACTIVITIES.INSERT_DATETIME is '登録日時'; +comment on column ACTIVITIES.UPDATE_USER is '更新ユーザ'; +comment on column ACTIVITIES.UPDATE_DATETIME is '更新日時'; +comment on column ACTIVITIES.DELETE_FLAG is '削除フラグ'; + +comment on table BADGES is '称号'; +comment on column BADGES.NO is '番号'; +comment on column BADGES.NAME is '名称'; +comment on column BADGES.DISPLAY_TEXT is '表示名'; +comment on column BADGES.DESCRIPTION is '説明'; +comment on column BADGES.IMAGE_CATEGORY is '画像の種類'; +comment on column BADGES.INSERT_USER is '登録ユーザ'; +comment on column BADGES.INSERT_DATETIME is '登録日時'; +comment on column BADGES.UPDATE_USER is '更新ユーザ'; +comment on column BADGES.UPDATE_DATETIME is '更新日時'; +comment on column BADGES.DELETE_FLAG is '削除フラグ'; + + +ALTER TABLE KNOWLEDGES DROP COLUMN IF EXISTS POINT; +ALTER TABLE KNOWLEDGES ADD COLUMN POINT integer default 0 not null; +comment on column KNOWLEDGES.POINT is 'ポイント'; + diff --git a/src/main/webapp/WEB-INF/views/admin/config/system.jsp b/src/main/webapp/WEB-INF/views/admin/config/system.jsp index 859cae6ec..46a74abd3 100644 --- a/src/main/webapp/WEB-INF/views/admin/config/system.jsp +++ b/src/main/webapp/WEB-INF/views/admin/config/system.jsp @@ -75,11 +75,12 @@
- - +
+Database version: <%= jspUtil.out("db_version") %>
+ diff --git a/src/main/webapp/WEB-INF/views/commons/maintenance.jsp b/src/main/webapp/WEB-INF/views/commons/maintenance.jsp new file mode 100644 index 000000000..721d8c3c9 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/commons/maintenance.jsp @@ -0,0 +1,94 @@ +<%@page pageEncoding="UTF-8" isELIgnored="false" session="false" errorPage="/WEB-INF/views/commons/errors/jsp_error.jsp"%> + +<%@page import="org.support.project.common.util.StringUtils"%> +<%@page import="org.support.project.web.util.JspUtil"%> +<%@page import="org.support.project.knowledge.config.SystemConfig"%> + +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + +<% JspUtil jspUtil = new JspUtil(request, pageContext); %> + + + + + + + + + + + + + + + + + + + + +" name="title"> +" name="description"> + + +"/> +" /> +<%-- --%> + + + + + +<% if (StringUtils.isNotEmpty(jspUtil.out("thema"))) { %> +/bootstrap.min.css" /> +<% } else { %> +/bootstrap.min.css" /> +<% } %> + + + + + + + + + +
+ +
+

+ +

+

+ Site is down for maintenance +

+
+ +
+ +<% if(jspUtil.logined()) { %> + <% if (jspUtil.isAdmin()) { %> + + <%= jspUtil.label("knowledge.maintenance.do.migrate") %> +
+ <% } else { %> + <% } %> + +  <%= jspUtil.label("knowledge.navbar.signout") %> + +<% } else { %> + + <%= jspUtil.label("knowledge.maintenance.do.migrate.no.login") %> + +<% } %> + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/commons/migrate.jsp b/src/main/webapp/WEB-INF/views/commons/migrate.jsp new file mode 100644 index 000000000..6e76ac028 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/commons/migrate.jsp @@ -0,0 +1,112 @@ +<%@page import="org.support.project.knowledge.deploy.InitDB"%> +<%@page pageEncoding="UTF-8" isELIgnored="false" session="false" errorPage="/WEB-INF/views/commons/errors/jsp_error.jsp"%> + +<%@page import="org.support.project.common.util.StringUtils"%> +<%@page import="org.support.project.web.util.JspUtil"%> +<%@page import="org.support.project.knowledge.config.SystemConfig"%> + +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + +<% JspUtil jspUtil = new JspUtil(request, pageContext); %> + + + + + + + + + + + + + + + + + + + + +" name="title"> +" name="description"> + + +"/> +" /> +<%-- --%> + + + + + +<% if (StringUtils.isNotEmpty(jspUtil.out("thema"))) { %> +/bootstrap.min.css" /> +<% } else { %> +/bootstrap.min.css" /> +<% } %> + + + + + + + + + + +

+<%= jspUtil.label("knowledge.maintenance.migrate.title") %> +

+

+<%= jspUtil.label("knowledge.maintenance.migrate.message") %> +

+service database version: <%= jspUtil.out("db_version") %>
+latest database version: <%= InitDB.CURRENT %>
+ +
+
+ +-- Execute Log--
+ + + +Back to knowledge top + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 1158de252..2b095dd62 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -94,11 +94,16 @@ false - + MultipartFilter org.support.project.web.filter.MultipartFilter + + + MaintenanceModeFilter + org.support.project.knowledge.filter.MaintenanceModeFilter + ControlFilter @@ -113,7 +118,6 @@ - EncodingFilter /* @@ -156,6 +160,12 @@ /* REQUEST + + + MaintenanceModeFilter + /* + REQUEST + ControlFilter From 411d03f9c68aaec452383e9043af6e458f0c42cd Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 29 Aug 2017 23:40:23 +0900 Subject: [PATCH 038/138] #840 Add some model and dao to save contribution point data --- document/database/A5M2_knowledge.pdf | Bin 70693 -> 78943 bytes .../project/knowledge/dao/ActivitiesDao.java | 27 ++ .../project/knowledge/dao/BadgesDao.java | 48 ++ .../project/knowledge/dao/UserBadgesDao.java | 27 ++ .../knowledge/dao/gen/DatabaseControlDao.java | 62 +-- .../knowledge/dao/gen/GenActivitiesDao.java | 388 ++++++++++++++++ .../knowledge/dao/gen/GenBadgesDao.java | 388 ++++++++++++++++ .../knowledge/dao/gen/GenKnowledgesDao.java | 3 + .../knowledge/dao/gen/GenUserBadgesDao.java | 416 +++++++++++++++++ .../knowledge/entity/ActivitiesEntity.java | 49 ++ .../knowledge/entity/BadgesEntity.java | 49 ++ .../knowledge/entity/UserBadgesEntity.java | 50 +++ .../entity/gen/GenActivitiesEntity.java | 423 ++++++++++++++++++ .../knowledge/entity/gen/GenBadgesEntity.java | 413 +++++++++++++++++ .../entity/gen/GenKnowledgesEntity.java | 39 ++ .../entity/gen/GenUserBadgesEntity.java | 341 ++++++++++++++ .../ActivitiesDao/ActivitiesDao_delete.sql | 4 + .../ActivitiesDao/ActivitiesDao_insert.sql | 24 + .../ActivitiesDao_physical_select_all.sql | 2 + ...tiesDao_physical_select_all_with_pager.sql | 3 + .../ActivitiesDao_physical_select_on_key.sql | 4 + .../ActivitiesDao_raw_insert.sql | 24 + .../ActivitiesDao_select_all.sql | 3 + .../ActivitiesDao_select_all_with_pager.sql | 4 + .../ActivitiesDao_select_count_all.sql | 2 + .../ActivitiesDao_select_on_key.sql | 4 + .../ActivitiesDao/ActivitiesDao_update.sql | 14 + .../dao/sql/BadgesDao/BadgesDao_delete.sql | 4 + .../dao/sql/BadgesDao/BadgesDao_insert.sql | 24 + .../BadgesDao_physical_select_all.sql | 2 + ...dgesDao_physical_select_all_with_pager.sql | 3 + .../BadgesDao_physical_select_on_key.sql | 4 + .../sql/BadgesDao/BadgesDao_raw_insert.sql | 24 + .../sql/BadgesDao/BadgesDao_select_all.sql | 3 + .../BadgesDao_select_all_with_pager.sql | 4 + .../BadgesDao/BadgesDao_select_count_all.sql | 2 + .../sql/BadgesDao/BadgesDao_select_on_key.sql | 4 + .../dao/sql/BadgesDao/BadgesDao_update.sql | 14 + .../KnowledgesDao/KnowledgesDao_insert.sql | 2 + .../KnowledgesDao_raw_insert.sql | 2 + .../KnowledgesDao/KnowledgesDao_update.sql | 1 + .../UserBadgesDao/UserBadgesDao_delete.sql | 5 + .../UserBadgesDao/UserBadgesDao_insert.sql | 18 + .../UserBadgesDao_physical_select_all.sql | 2 + ...dgesDao_physical_select_all_with_pager.sql | 3 + .../UserBadgesDao_physical_select_on_key.sql | 5 + .../UserBadgesDao_physical_select_on_no.sql | 4 + ...erBadgesDao_physical_select_on_user_id.sql | 4 + .../UserBadgesDao_raw_insert.sql | 18 + .../UserBadgesDao_select_all.sql | 3 + .../UserBadgesDao_select_all_with_pager.sql | 4 + .../UserBadgesDao_select_count_all.sql | 2 + .../UserBadgesDao_select_on_key.sql | 5 + .../UserBadgesDao_select_on_no.sql | 4 + .../UserBadgesDao_select_on_user_id.sql | 4 + .../UserBadgesDao/UserBadgesDao_update.sql | 11 + 56 files changed, 2968 insertions(+), 28 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/BadgesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/UserBadgesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java create mode 100644 src/main/java/org/support/project/knowledge/entity/ActivitiesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/BadgesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/UserBadgesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/gen/GenUserBadgesEntity.java create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_count_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_delete.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_count_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_delete.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_no.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_user_id.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_raw_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_count_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_no.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_user_id.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_update.sql diff --git a/document/database/A5M2_knowledge.pdf b/document/database/A5M2_knowledge.pdf index 0fd79f626738cecb554bbd71fb176beed74928df..0874648cef844ad429883d16bab8a5f35e9af92c 100755 GIT binary patch delta 78273 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 ZA%{;*I!6c5AaJlTvcr>;3&{w>|1TG_MKS;Y delta 69981 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 physicalSelectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql"); + return executeQueryList(sql, ActivitiesEntity.class); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @return all data on limit and offset + */ + public List physicalSelectAllWithPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql"); + return executeQueryList(sql, ActivitiesEntity.class, limit, offset); + } + /** + * Select data on key. + * @param no no + * @return data + */ + public ActivitiesEntity physicalSelectOnKey(Long no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql"); + return executeQuerySingle(sql, ActivitiesEntity.class, no); + } + /** + * Select all data that not deleted. + * @return all data + */ + public List selectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql"); + return executeQueryList(sql, ActivitiesEntity.class); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @return all data + */ + public List selectAllWidthPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql"); + return executeQueryList(sql, ActivitiesEntity.class, limit, offset); + } + /** + * Select count that not deleted. + * @return count + */ + public Integer selectCountAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_count_all.sql"); + return executeQuerySingle(sql, Integer.class); + } + /** + * Select data that not deleted on key. + * @param no no + * @return data + */ + public ActivitiesEntity selectOnKey(Long no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql"); + return executeQuerySingle(sql, ActivitiesEntity.class, no); + } + /** + * Count all data + * @return count + */ + public int physicalCountAll() { + String sql = "SELECT COUNT(*) FROM ACTIVITIES"; + return executeQuerySingle(sql, Integer.class); + } + /** + * Physical Insert. + * it is not create key on database sequence. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity rawPhysicalInsert(ActivitiesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql"); + executeUpdate(sql, + entity.getNo(), + entity.getUserId(), + entity.getType(), + entity.getTarget(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + String driverClass = ConnectionManager.getInstance().getDriverClass(getConnectionName()); + if (ORMappingParameter.DRIVER_NAME_POSTGRESQL.equals(driverClass)) { + String setValSql = "select setval('ACTIVITIES_NO_seq', (select max(NO) from ACTIVITIES));"; + executeQuerySingle(setValSql, Long.class); + } + return entity; + } + /** + * Physical Insert. + * if key column have sequence, key value create by database. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity physicalInsert(ActivitiesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql"); + Class type = PropertyUtil.getPropertyType(entity, "no"); + Object key = executeInsert(sql, type, + entity.getUserId(), + entity.getType(), + entity.getTarget(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + PropertyUtil.setPropertyValue(entity, "no", key); + return entity; + } + /** + * Insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity insert(Integer user, ActivitiesEntity entity) { + entity.setInsertUser(user); + entity.setInsertDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setDeleteFlag(0); + return physicalInsert(entity); + } + /** + * Insert. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity insert(ActivitiesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return insert(userId, entity); + } + /** + * Physical Update. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity physicalUpdate(ActivitiesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql"); + executeUpdate(sql, + entity.getUserId(), + entity.getType(), + entity.getTarget(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag(), + entity.getNo()); + return entity; + } + /** + * Update. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity update(Integer user, ActivitiesEntity entity) { + ActivitiesEntity db = selectOnKey(entity.getNo()); + entity.setInsertUser(db.getInsertUser()); + entity.setInsertDatetime(db.getInsertDatetime()); + entity.setDeleteFlag(db.getDeleteFlag()); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + return physicalUpdate(entity); + } + /** + * Update. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity update(ActivitiesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return update(userId, entity); + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity save(Integer user, ActivitiesEntity entity) { + ActivitiesEntity db = selectOnKey(entity.getNo()); + if (db == null) { + return insert(user, entity); + } else { + return update(user, entity); + } + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public ActivitiesEntity save(ActivitiesEntity entity) { + ActivitiesEntity db = selectOnKey(entity.getNo()); + if (db == null) { + return insert(entity); + } else { + return update(entity); + } + } + /** + * Physical Delete. + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(Long no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql"); + executeUpdate(sql, no); + } + /** + * Physical Delete. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(ActivitiesEntity entity) { + physicalDelete(entity.getNo()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, Long no) { + ActivitiesEntity db = selectOnKey(no); + db.setDeleteFlag(1); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Long no) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + delete(user, no); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, ActivitiesEntity entity) { + delete(user, entity.getNo()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(ActivitiesEntity entity) { + delete(entity.getNo()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, Long no) { + ActivitiesEntity db = physicalSelectOnKey(no); + db.setDeleteFlag(0); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Long no) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + activation(user, no); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, ActivitiesEntity entity) { + activation(user, entity.getNo()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(ActivitiesEntity entity) { + activation(entity.getNo()); + + } + +} diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java new file mode 100644 index 000000000..e15451c26 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java @@ -0,0 +1,388 @@ +package org.support.project.knowledge.dao.gen; + +import java.util.List; + +import java.sql.Timestamp; + + +import org.support.project.knowledge.entity.BadgesEntity; +import org.support.project.ormapping.dao.AbstractDao; +import org.support.project.ormapping.exception.ORMappingException; +import org.support.project.ormapping.common.SQLManager; +import org.support.project.ormapping.common.DBUserPool; +import org.support.project.ormapping.common.IDGen; +import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.connection.ConnectionManager; +import org.support.project.common.util.PropertyUtil; + +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.aop.Aspect; + +/** + * 称号 + * this class is auto generate and not edit. + * if modify dao method, you can edit BadgesDao. + */ +@DI(instance = Instance.Singleton) +public class GenBadgesDao extends AbstractDao { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenBadgesDao get() { + return Container.getComp(GenBadgesDao.class); + } + + /** + * Select all data. + * @return all data + */ + public List physicalSelectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql"); + return executeQueryList(sql, BadgesEntity.class); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @return all data on limit and offset + */ + public List physicalSelectAllWithPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql"); + return executeQueryList(sql, BadgesEntity.class, limit, offset); + } + /** + * Select data on key. + * @param no no + * @return data + */ + public BadgesEntity physicalSelectOnKey(Integer no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_on_key.sql"); + return executeQuerySingle(sql, BadgesEntity.class, no); + } + /** + * Select all data that not deleted. + * @return all data + */ + public List selectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql"); + return executeQueryList(sql, BadgesEntity.class); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @return all data + */ + public List selectAllWidthPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql"); + return executeQueryList(sql, BadgesEntity.class, limit, offset); + } + /** + * Select count that not deleted. + * @return count + */ + public Integer selectCountAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_count_all.sql"); + return executeQuerySingle(sql, Integer.class); + } + /** + * Select data that not deleted on key. + * @param no no + * @return data + */ + public BadgesEntity selectOnKey(Integer no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_on_key.sql"); + return executeQuerySingle(sql, BadgesEntity.class, no); + } + /** + * Count all data + * @return count + */ + public int physicalCountAll() { + String sql = "SELECT COUNT(*) FROM BADGES"; + return executeQuerySingle(sql, Integer.class); + } + /** + * Physical Insert. + * it is not create key on database sequence. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity rawPhysicalInsert(BadgesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql"); + executeUpdate(sql, + entity.getNo(), + entity.getName(), + entity.getDisplayText(), + entity.getDescription(), + entity.getImageCategory(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + String driverClass = ConnectionManager.getInstance().getDriverClass(getConnectionName()); + if (ORMappingParameter.DRIVER_NAME_POSTGRESQL.equals(driverClass)) { + String setValSql = "select setval('BADGES_NO_seq', (select max(NO) from BADGES));"; + executeQuerySingle(setValSql, Long.class); + } + return entity; + } + /** + * Physical Insert. + * if key column have sequence, key value create by database. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity physicalInsert(BadgesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql"); + Class type = PropertyUtil.getPropertyType(entity, "no"); + Object key = executeInsert(sql, type, + entity.getName(), + entity.getDisplayText(), + entity.getDescription(), + entity.getImageCategory(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + PropertyUtil.setPropertyValue(entity, "no", key); + return entity; + } + /** + * Insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity insert(Integer user, BadgesEntity entity) { + entity.setInsertUser(user); + entity.setInsertDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setDeleteFlag(0); + return physicalInsert(entity); + } + /** + * Insert. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity insert(BadgesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return insert(userId, entity); + } + /** + * Physical Update. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity physicalUpdate(BadgesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql"); + executeUpdate(sql, + entity.getName(), + entity.getDisplayText(), + entity.getDescription(), + entity.getImageCategory(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag(), + entity.getNo()); + return entity; + } + /** + * Update. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity update(Integer user, BadgesEntity entity) { + BadgesEntity db = selectOnKey(entity.getNo()); + entity.setInsertUser(db.getInsertUser()); + entity.setInsertDatetime(db.getInsertDatetime()); + entity.setDeleteFlag(db.getDeleteFlag()); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + return physicalUpdate(entity); + } + /** + * Update. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity update(BadgesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return update(userId, entity); + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity save(Integer user, BadgesEntity entity) { + BadgesEntity db = selectOnKey(entity.getNo()); + if (db == null) { + return insert(user, entity); + } else { + return update(user, entity); + } + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public BadgesEntity save(BadgesEntity entity) { + BadgesEntity db = selectOnKey(entity.getNo()); + if (db == null) { + return insert(entity); + } else { + return update(entity); + } + } + /** + * Physical Delete. + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(Integer no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_delete.sql"); + executeUpdate(sql, no); + } + /** + * Physical Delete. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(BadgesEntity entity) { + physicalDelete(entity.getNo()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, Integer no) { + BadgesEntity db = selectOnKey(no); + db.setDeleteFlag(1); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer no) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + delete(user, no); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, BadgesEntity entity) { + delete(user, entity.getNo()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(BadgesEntity entity) { + delete(entity.getNo()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, Integer no) { + BadgesEntity db = physicalSelectOnKey(no); + db.setDeleteFlag(0); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param no no + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer no) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + activation(user, no); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, BadgesEntity entity) { + activation(user, entity.getNo()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(BadgesEntity entity) { + activation(entity.getNo()); + + } + +} diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java index edfa1ffb7..0497b7936 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java @@ -130,6 +130,7 @@ public KnowledgesEntity rawPhysicalInsert(KnowledgesEntity entity) { entity.getViewCount(), entity.getTypeId(), entity.getNotifyStatus(), + entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), @@ -163,6 +164,7 @@ public KnowledgesEntity physicalInsert(KnowledgesEntity entity) { entity.getViewCount(), entity.getTypeId(), entity.getNotifyStatus(), + entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), @@ -218,6 +220,7 @@ public KnowledgesEntity physicalUpdate(KnowledgesEntity entity) { entity.getViewCount(), entity.getTypeId(), entity.getNotifyStatus(), + entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java new file mode 100644 index 000000000..7b347930a --- /dev/null +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java @@ -0,0 +1,416 @@ +package org.support.project.knowledge.dao.gen; + +import java.util.List; + +import java.sql.Timestamp; + + +import org.support.project.knowledge.entity.UserBadgesEntity; +import org.support.project.ormapping.dao.AbstractDao; +import org.support.project.ormapping.exception.ORMappingException; +import org.support.project.ormapping.common.SQLManager; +import org.support.project.ormapping.common.DBUserPool; +import org.support.project.ormapping.common.IDGen; +import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.connection.ConnectionManager; +import org.support.project.common.util.PropertyUtil; + +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.aop.Aspect; + +/** + * ユーザの称号 + * this class is auto generate and not edit. + * if modify dao method, you can edit UserBadgesDao. + */ +@DI(instance = Instance.Singleton) +public class GenUserBadgesDao extends AbstractDao { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenUserBadgesDao get() { + return Container.getComp(GenUserBadgesDao.class); + } + + /** + * Select all data. + * @return all data + */ + public List physicalSelectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql"); + return executeQueryList(sql, UserBadgesEntity.class); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @return all data on limit and offset + */ + public List physicalSelectAllWithPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql"); + return executeQueryList(sql, UserBadgesEntity.class, limit, offset); + } + /** + * Select data on key. + * @param no no + * @param userId userId + * @return data + */ + public UserBadgesEntity physicalSelectOnKey(Integer no, Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_key.sql"); + return executeQuerySingle(sql, UserBadgesEntity.class, no, userId); + } + /** + * Select all data that not deleted. + * @return all data + */ + public List selectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql"); + return executeQueryList(sql, UserBadgesEntity.class); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @return all data + */ + public List selectAllWidthPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql"); + return executeQueryList(sql, UserBadgesEntity.class, limit, offset); + } + /** + * Select count that not deleted. + * @return count + */ + public Integer selectCountAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_count_all.sql"); + return executeQuerySingle(sql, Integer.class); + } + /** + * Select data that not deleted on key. + * @param no no + * @param userId userId + * @return data + */ + public UserBadgesEntity selectOnKey(Integer no, Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_key.sql"); + return executeQuerySingle(sql, UserBadgesEntity.class, no, userId); + } + /** + * Select data that not deleted on NO column. + * @param no no + * @return list + */ + public List selectOnNo(Integer no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_no.sql"); + return executeQueryList(sql, UserBadgesEntity.class, no); + } + /** + * Select data that not deleted on USER_ID column. + * @param userId userId + * @return list + */ + public List selectOnUserId(Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_user_id.sql"); + return executeQueryList(sql, UserBadgesEntity.class, userId); + } + /** + * Select data on NO column. + * @param no no + * @return list + */ + public List physicalSelectOnNo(Integer no) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_no.sql"); + return executeQueryList(sql, UserBadgesEntity.class, no); + } + /** + * Select data on USER_ID column. + * @param userId userId + * @return list + */ + public List physicalSelectOnUserId(Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_user_id.sql"); + return executeQueryList(sql, UserBadgesEntity.class, userId); + } + /** + * Count all data + * @return count + */ + public int physicalCountAll() { + String sql = "SELECT COUNT(*) FROM USER_BADGES"; + return executeQuerySingle(sql, Integer.class); + } + /** + * Physical Insert. + * it is not create key on database sequence. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity rawPhysicalInsert(UserBadgesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_raw_insert.sql"); + executeUpdate(sql, + entity.getNo(), + entity.getUserId(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + return entity; + } + /** + * Physical Insert. + * if key column have sequence, key value create by database. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity physicalInsert(UserBadgesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_insert.sql"); + executeUpdate(sql, + entity.getNo(), + entity.getUserId(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + return entity; + } + /** + * Insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity insert(Integer user, UserBadgesEntity entity) { + entity.setInsertUser(user); + entity.setInsertDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setDeleteFlag(0); + return physicalInsert(entity); + } + /** + * Insert. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity insert(UserBadgesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return insert(userId, entity); + } + /** + * Physical Update. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity physicalUpdate(UserBadgesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_update.sql"); + executeUpdate(sql, + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag(), + entity.getNo(), + entity.getUserId()); + return entity; + } + /** + * Update. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity update(Integer user, UserBadgesEntity entity) { + UserBadgesEntity db = selectOnKey(entity.getNo(), entity.getUserId()); + entity.setInsertUser(db.getInsertUser()); + entity.setInsertDatetime(db.getInsertDatetime()); + entity.setDeleteFlag(db.getDeleteFlag()); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + return physicalUpdate(entity); + } + /** + * Update. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity update(UserBadgesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return update(userId, entity); + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity save(Integer user, UserBadgesEntity entity) { + UserBadgesEntity db = selectOnKey(entity.getNo(), entity.getUserId()); + if (db == null) { + return insert(user, entity); + } else { + return update(user, entity); + } + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public UserBadgesEntity save(UserBadgesEntity entity) { + UserBadgesEntity db = selectOnKey(entity.getNo(), entity.getUserId()); + if (db == null) { + return insert(entity); + } else { + return update(entity); + } + } + /** + * Physical Delete. + * @param no no + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(Integer no, Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_delete.sql"); + executeUpdate(sql, no, userId); + } + /** + * Physical Delete. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(UserBadgesEntity entity) { + physicalDelete(entity.getNo(), entity.getUserId()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param no no + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, Integer no, Integer userId) { + UserBadgesEntity db = selectOnKey(no, userId); + db.setDeleteFlag(1); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * @param no no + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer no, Integer userId) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + delete(user, no, userId); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, UserBadgesEntity entity) { + delete(user, entity.getNo(), entity.getUserId()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(UserBadgesEntity entity) { + delete(entity.getNo(), entity.getUserId()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param no no + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, Integer no, Integer userId) { + UserBadgesEntity db = physicalSelectOnKey(no, userId); + db.setDeleteFlag(0); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param no no + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer no, Integer userId) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + activation(user, no, userId); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, UserBadgesEntity entity) { + activation(user, entity.getNo(), entity.getUserId()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(UserBadgesEntity entity) { + activation(entity.getNo(), entity.getUserId()); + + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/ActivitiesEntity.java b/src/main/java/org/support/project/knowledge/entity/ActivitiesEntity.java new file mode 100644 index 000000000..edbb7647c --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/ActivitiesEntity.java @@ -0,0 +1,49 @@ +package org.support.project.knowledge.entity; + +import org.support.project.knowledge.entity.gen.GenActivitiesEntity; + +import java.util.List; +import java.util.Map; + +import org.support.project.common.bean.ValidateError; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +import java.sql.Timestamp; + + +/** + * アクティビティ + */ +@DI(instance = Instance.Prototype) +public class ActivitiesEntity extends GenActivitiesEntity { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static ActivitiesEntity get() { + return Container.getComp(ActivitiesEntity.class); + } + + /** + * Constructor. + */ + public ActivitiesEntity() { + super(); + } + + /** + * Constructor + * @param no 番号 + */ + + public ActivitiesEntity(Long no) { + super( no); + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/BadgesEntity.java b/src/main/java/org/support/project/knowledge/entity/BadgesEntity.java new file mode 100644 index 000000000..f68781ee4 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/BadgesEntity.java @@ -0,0 +1,49 @@ +package org.support.project.knowledge.entity; + +import org.support.project.knowledge.entity.gen.GenBadgesEntity; + +import java.util.List; +import java.util.Map; + +import org.support.project.common.bean.ValidateError; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +import java.sql.Timestamp; + + +/** + * 称号 + */ +@DI(instance = Instance.Prototype) +public class BadgesEntity extends GenBadgesEntity { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static BadgesEntity get() { + return Container.getComp(BadgesEntity.class); + } + + /** + * Constructor. + */ + public BadgesEntity() { + super(); + } + + /** + * Constructor + * @param no 番号 + */ + + public BadgesEntity(Integer no) { + super( no); + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/UserBadgesEntity.java b/src/main/java/org/support/project/knowledge/entity/UserBadgesEntity.java new file mode 100644 index 000000000..060308566 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/UserBadgesEntity.java @@ -0,0 +1,50 @@ +package org.support.project.knowledge.entity; + +import org.support.project.knowledge.entity.gen.GenUserBadgesEntity; + +import java.util.List; +import java.util.Map; + +import org.support.project.common.bean.ValidateError; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +import java.sql.Timestamp; + + +/** + * ユーザの称号 + */ +@DI(instance = Instance.Prototype) +public class UserBadgesEntity extends GenUserBadgesEntity { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static UserBadgesEntity get() { + return Container.getComp(UserBadgesEntity.class); + } + + /** + * Constructor. + */ + public UserBadgesEntity() { + super(); + } + + /** + * Constructor + * @param no 番号 + * @param userId ユーザID + */ + + public UserBadgesEntity(Integer no, Integer userId) { + super( no, userId); + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java new file mode 100644 index 000000000..201cbe360 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java @@ -0,0 +1,423 @@ +package org.support.project.knowledge.entity.gen; + +import java.io.Serializable; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; + +import java.sql.Timestamp; + + + +import org.support.project.common.bean.ValidateError; +import org.support.project.common.validate.Validator; +import org.support.project.common.validate.ValidatorFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +/** + * アクティビティ + */ +@DI(instance = Instance.Prototype) +public class GenActivitiesEntity implements Serializable { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenActivitiesEntity get() { + return Container.getComp(GenActivitiesEntity.class); + } + + /** + * Constructor. + */ + public GenActivitiesEntity() { + super(); + } + + /** + * Constructor + * @param no 番号 + */ + + public GenActivitiesEntity(Long no) { + super(); + this.no = no; + } + /** 番号 */ + private Long no; + /** ユーザID */ + private Integer userId; + /** 種類 */ + private Integer type; + /** ターゲットID */ + private Long target; + /** 獲得ポイント */ + private Integer point; + /** 登録ユーザ */ + private Integer insertUser; + /** 登録日時 */ + private Timestamp insertDatetime; + /** 更新ユーザ */ + private Integer updateUser; + /** 更新日時 */ + private Timestamp updateDatetime; + /** 削除フラグ */ + private Integer deleteFlag; + + /** + * Get 番号. + * @return 番号 + */ + public Long getNo() { + return this.no; + } + /** + * Set 番号. + * @param no 番号 + * @return this object */ + public GenActivitiesEntity setNo(Long no) { + this.no = no; + return this; + } + + /** + * Get ユーザID. + * @return ユーザID + */ + public Integer getUserId() { + return this.userId; + } + /** + * Set ユーザID. + * @param userId ユーザID + * @return this object */ + public GenActivitiesEntity setUserId(Integer userId) { + this.userId = userId; + return this; + } + + /** + * Get 種類. + * @return 種類 + */ + public Integer getType() { + return this.type; + } + /** + * Set 種類. + * @param type 種類 + * @return this object */ + public GenActivitiesEntity setType(Integer type) { + this.type = type; + return this; + } + + /** + * Get ターゲットID. + * @return ターゲットID + */ + public Long getTarget() { + return this.target; + } + /** + * Set ターゲットID. + * @param target ターゲットID + * @return this object */ + public GenActivitiesEntity setTarget(Long target) { + this.target = target; + return this; + } + + /** + * Get 獲得ポイント. + * @return 獲得ポイント + */ + public Integer getPoint() { + return this.point; + } + /** + * Set 獲得ポイント. + * @param point 獲得ポイント + * @return this object */ + public GenActivitiesEntity setPoint(Integer point) { + this.point = point; + return this; + } + + /** + * Get 登録ユーザ. + * @return 登録ユーザ + */ + public Integer getInsertUser() { + return this.insertUser; + } + /** + * Set 登録ユーザ. + * @param insertUser 登録ユーザ + * @return this object */ + public GenActivitiesEntity setInsertUser(Integer insertUser) { + this.insertUser = insertUser; + return this; + } + + /** + * Get 登録日時. + * @return 登録日時 + */ + public Timestamp getInsertDatetime() { + return this.insertDatetime; + } + /** + * Set 登録日時. + * @param insertDatetime 登録日時 + * @return this object */ + public GenActivitiesEntity setInsertDatetime(Timestamp insertDatetime) { + this.insertDatetime = insertDatetime; + return this; + } + + /** + * Get 更新ユーザ. + * @return 更新ユーザ + */ + public Integer getUpdateUser() { + return this.updateUser; + } + /** + * Set 更新ユーザ. + * @param updateUser 更新ユーザ + * @return this object */ + public GenActivitiesEntity setUpdateUser(Integer updateUser) { + this.updateUser = updateUser; + return this; + } + + /** + * Get 更新日時. + * @return 更新日時 + */ + public Timestamp getUpdateDatetime() { + return this.updateDatetime; + } + /** + * Set 更新日時. + * @param updateDatetime 更新日時 + * @return this object */ + public GenActivitiesEntity setUpdateDatetime(Timestamp updateDatetime) { + this.updateDatetime = updateDatetime; + return this; + } + + /** + * Get 削除フラグ. + * @return 削除フラグ + */ + public Integer getDeleteFlag() { + return this.deleteFlag; + } + /** + * Set 削除フラグ. + * @param deleteFlag 削除フラグ + * @return this object */ + public GenActivitiesEntity setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + return this; + } + + /** + * Get key values + * @return values + */ + public Object[] getKeyValues() { + Object[] keyValues = new Object[1]; + keyValues[0] = this.no; + return keyValues; + } + /** + * Set key values + * @param no 番号 + */ + public void setKeyValues(Long no) { + this.no = no; + } + /** + * compare on key + * @param entity entity + * @return result + */ + public boolean equalsOnKey(GenActivitiesEntity entity) { + Object[] keyValues1 = getKeyValues(); + Object[] keyValues2 = entity.getKeyValues(); + for (int i = 0; i < keyValues1.length; i++) { + Object val1 = keyValues1[i]; + Object val2 = keyValues2[i]; + if (val1 == null && val2 != null) { + return false; + } + if (val1 != null && val2 == null) { + return false; + } + if (val1 != null && val2 != null) { + if (!val1.equals(val2)) { + return false; + } + } + + } + return true; + } + /** + * ToString + * @return string + */ + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("no = ").append(no).append("\n"); + builder.append("userId = ").append(userId).append("\n"); + builder.append("type = ").append(type).append("\n"); + builder.append("target = ").append(target).append("\n"); + builder.append("point = ").append(point).append("\n"); + builder.append("insertUser = ").append(insertUser).append("\n"); + builder.append("insertDatetime = ").append(insertDatetime).append("\n"); + builder.append("updateUser = ").append(updateUser).append("\n"); + builder.append("updateDatetime = ").append(updateDatetime).append("\n"); + builder.append("deleteFlag = ").append(deleteFlag).append("\n"); + return builder.toString(); + } + /** + * Convert label to display + * @param label label + * @return convert label + */ + protected String convLabelName(String label) { + return label; + } + /** + * validate + * @return validate error list + */ + public List validate() { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.userId, convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.userId, convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.type, convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.type, convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.target, convLabelName("Target")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.insertUser, convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.updateUser, convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.deleteFlag, convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + /** + * validate + * @param values value map + * @return validate error list + */ + public List validate(Map values) { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("userId"), convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("userId"), convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("type"), convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("type"), convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("target"), convLabelName("Target")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("updateUser"), convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("deleteFlag"), convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java new file mode 100644 index 000000000..d1ac98afb --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java @@ -0,0 +1,413 @@ +package org.support.project.knowledge.entity.gen; + +import java.io.Serializable; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; + +import java.sql.Timestamp; + + + +import org.support.project.common.bean.ValidateError; +import org.support.project.common.validate.Validator; +import org.support.project.common.validate.ValidatorFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +/** + * 称号 + */ +@DI(instance = Instance.Prototype) +public class GenBadgesEntity implements Serializable { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenBadgesEntity get() { + return Container.getComp(GenBadgesEntity.class); + } + + /** + * Constructor. + */ + public GenBadgesEntity() { + super(); + } + + /** + * Constructor + * @param no 番号 + */ + + public GenBadgesEntity(Integer no) { + super(); + this.no = no; + } + /** 番号 */ + private Integer no; + /** 名称 */ + private String name; + /** 表示名 */ + private String displayText; + /** 説明 */ + private String description; + /** 画像の種類 */ + private Integer imageCategory; + /** 登録ユーザ */ + private Integer insertUser; + /** 登録日時 */ + private Timestamp insertDatetime; + /** 更新ユーザ */ + private Integer updateUser; + /** 更新日時 */ + private Timestamp updateDatetime; + /** 削除フラグ */ + private Integer deleteFlag; + + /** + * Get 番号. + * @return 番号 + */ + public Integer getNo() { + return this.no; + } + /** + * Set 番号. + * @param no 番号 + * @return this object */ + public GenBadgesEntity setNo(Integer no) { + this.no = no; + return this; + } + + /** + * Get 名称. + * @return 名称 + */ + public String getName() { + return this.name; + } + /** + * Set 名称. + * @param name 名称 + * @return this object */ + public GenBadgesEntity setName(String name) { + this.name = name; + return this; + } + + /** + * Get 表示名. + * @return 表示名 + */ + public String getDisplayText() { + return this.displayText; + } + /** + * Set 表示名. + * @param displayText 表示名 + * @return this object */ + public GenBadgesEntity setDisplayText(String displayText) { + this.displayText = displayText; + return this; + } + + /** + * Get 説明. + * @return 説明 + */ + public String getDescription() { + return this.description; + } + /** + * Set 説明. + * @param description 説明 + * @return this object */ + public GenBadgesEntity setDescription(String description) { + this.description = description; + return this; + } + + /** + * Get 画像の種類. + * @return 画像の種類 + */ + public Integer getImageCategory() { + return this.imageCategory; + } + /** + * Set 画像の種類. + * @param imageCategory 画像の種類 + * @return this object */ + public GenBadgesEntity setImageCategory(Integer imageCategory) { + this.imageCategory = imageCategory; + return this; + } + + /** + * Get 登録ユーザ. + * @return 登録ユーザ + */ + public Integer getInsertUser() { + return this.insertUser; + } + /** + * Set 登録ユーザ. + * @param insertUser 登録ユーザ + * @return this object */ + public GenBadgesEntity setInsertUser(Integer insertUser) { + this.insertUser = insertUser; + return this; + } + + /** + * Get 登録日時. + * @return 登録日時 + */ + public Timestamp getInsertDatetime() { + return this.insertDatetime; + } + /** + * Set 登録日時. + * @param insertDatetime 登録日時 + * @return this object */ + public GenBadgesEntity setInsertDatetime(Timestamp insertDatetime) { + this.insertDatetime = insertDatetime; + return this; + } + + /** + * Get 更新ユーザ. + * @return 更新ユーザ + */ + public Integer getUpdateUser() { + return this.updateUser; + } + /** + * Set 更新ユーザ. + * @param updateUser 更新ユーザ + * @return this object */ + public GenBadgesEntity setUpdateUser(Integer updateUser) { + this.updateUser = updateUser; + return this; + } + + /** + * Get 更新日時. + * @return 更新日時 + */ + public Timestamp getUpdateDatetime() { + return this.updateDatetime; + } + /** + * Set 更新日時. + * @param updateDatetime 更新日時 + * @return this object */ + public GenBadgesEntity setUpdateDatetime(Timestamp updateDatetime) { + this.updateDatetime = updateDatetime; + return this; + } + + /** + * Get 削除フラグ. + * @return 削除フラグ + */ + public Integer getDeleteFlag() { + return this.deleteFlag; + } + /** + * Set 削除フラグ. + * @param deleteFlag 削除フラグ + * @return this object */ + public GenBadgesEntity setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + return this; + } + + /** + * Get key values + * @return values + */ + public Object[] getKeyValues() { + Object[] keyValues = new Object[1]; + keyValues[0] = this.no; + return keyValues; + } + /** + * Set key values + * @param no 番号 + */ + public void setKeyValues(Integer no) { + this.no = no; + } + /** + * compare on key + * @param entity entity + * @return result + */ + public boolean equalsOnKey(GenBadgesEntity entity) { + Object[] keyValues1 = getKeyValues(); + Object[] keyValues2 = entity.getKeyValues(); + for (int i = 0; i < keyValues1.length; i++) { + Object val1 = keyValues1[i]; + Object val2 = keyValues2[i]; + if (val1 == null && val2 != null) { + return false; + } + if (val1 != null && val2 == null) { + return false; + } + if (val1 != null && val2 != null) { + if (!val1.equals(val2)) { + return false; + } + } + + } + return true; + } + /** + * ToString + * @return string + */ + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("no = ").append(no).append("\n"); + builder.append("name = ").append(name).append("\n"); + builder.append("displayText = ").append(displayText).append("\n"); + builder.append("description = ").append(description).append("\n"); + builder.append("imageCategory = ").append(imageCategory).append("\n"); + builder.append("insertUser = ").append(insertUser).append("\n"); + builder.append("insertDatetime = ").append(insertDatetime).append("\n"); + builder.append("updateUser = ").append(updateUser).append("\n"); + builder.append("updateDatetime = ").append(updateDatetime).append("\n"); + builder.append("deleteFlag = ").append(deleteFlag).append("\n"); + return builder.toString(); + } + /** + * Convert label to display + * @param label label + * @return convert label + */ + protected String convLabelName(String label) { + return label; + } + /** + * validate + * @return validate error list + */ + public List validate() { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.no, convLabelName("No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.name, convLabelName("Name")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(this.name, convLabelName("Name"), 128); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.displayText, convLabelName("Display Text")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(this.displayText, convLabelName("Display Text"), 32); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.imageCategory, convLabelName("Image Category")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.insertUser, convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.updateUser, convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.deleteFlag, convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + /** + * validate + * @param values value map + * @return validate error list + */ + public List validate(Map values) { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("no"), convLabelName("No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("name"), convLabelName("Name")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(values.get("name"), convLabelName("Name"), 128); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("displayText"), convLabelName("Display Text")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(values.get("displayText"), convLabelName("Display Text"), 32); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("imageCategory"), convLabelName("Image Category")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("updateUser"), convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("deleteFlag"), convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java index 381eefd72..97f242a7e 100644 --- a/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenKnowledgesEntity.java @@ -71,6 +71,8 @@ public GenKnowledgesEntity(Long knowledgeId) { private Integer typeId; /** 通知ステータス */ private Integer notifyStatus; + /** ポイント */ + private Integer point; /** 登録ユーザ */ private Integer insertUser; /** 登録日時 */ @@ -258,6 +260,22 @@ public GenKnowledgesEntity setNotifyStatus(Integer notifyStatus) { return this; } + /** + * Get ポイント. + * @return ポイント + */ + public Integer getPoint() { + return this.point; + } + /** + * Set ポイント. + * @param point ポイント + * @return this object */ + public GenKnowledgesEntity setPoint(Integer point) { + this.point = point; + return this; + } + /** * Get 登録ユーザ. * @return 登録ユーザ @@ -397,6 +415,7 @@ public String toString() { builder.append("viewCount = ").append(viewCount).append("\n"); builder.append("typeId = ").append(typeId).append("\n"); builder.append("notifyStatus = ").append(notifyStatus).append("\n"); + builder.append("point = ").append(point).append("\n"); builder.append("insertUser = ").append(insertUser).append("\n"); builder.append("insertDatetime = ").append(insertDatetime).append("\n"); builder.append("updateUser = ").append(updateUser).append("\n"); @@ -455,6 +474,16 @@ public List validate() { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(this.insertUser, convLabelName("Insert User")); if (error != null) { @@ -516,6 +545,16 @@ public List validate(Map values) { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); if (error != null) { diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenUserBadgesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenUserBadgesEntity.java new file mode 100644 index 000000000..fbabbd8ee --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenUserBadgesEntity.java @@ -0,0 +1,341 @@ +package org.support.project.knowledge.entity.gen; + +import java.io.Serializable; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; + +import java.sql.Timestamp; + + + +import org.support.project.common.bean.ValidateError; +import org.support.project.common.validate.Validator; +import org.support.project.common.validate.ValidatorFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +/** + * ユーザの称号 + */ +@DI(instance = Instance.Prototype) +public class GenUserBadgesEntity implements Serializable { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenUserBadgesEntity get() { + return Container.getComp(GenUserBadgesEntity.class); + } + + /** + * Constructor. + */ + public GenUserBadgesEntity() { + super(); + } + + /** + * Constructor + * @param no 番号 + * @param userId ユーザID + */ + + public GenUserBadgesEntity(Integer no, Integer userId) { + super(); + this.no = no; + this.userId = userId; + } + /** ユーザID */ + private Integer userId; + /** 番号 */ + private Integer no; + /** 登録ユーザ */ + private Integer insertUser; + /** 登録日時 */ + private Timestamp insertDatetime; + /** 更新ユーザ */ + private Integer updateUser; + /** 更新日時 */ + private Timestamp updateDatetime; + /** 削除フラグ */ + private Integer deleteFlag; + + /** + * Get ユーザID. + * @return ユーザID + */ + public Integer getUserId() { + return this.userId; + } + /** + * Set ユーザID. + * @param userId ユーザID + * @return this object */ + public GenUserBadgesEntity setUserId(Integer userId) { + this.userId = userId; + return this; + } + + /** + * Get 番号. + * @return 番号 + */ + public Integer getNo() { + return this.no; + } + /** + * Set 番号. + * @param no 番号 + * @return this object */ + public GenUserBadgesEntity setNo(Integer no) { + this.no = no; + return this; + } + + /** + * Get 登録ユーザ. + * @return 登録ユーザ + */ + public Integer getInsertUser() { + return this.insertUser; + } + /** + * Set 登録ユーザ. + * @param insertUser 登録ユーザ + * @return this object */ + public GenUserBadgesEntity setInsertUser(Integer insertUser) { + this.insertUser = insertUser; + return this; + } + + /** + * Get 登録日時. + * @return 登録日時 + */ + public Timestamp getInsertDatetime() { + return this.insertDatetime; + } + /** + * Set 登録日時. + * @param insertDatetime 登録日時 + * @return this object */ + public GenUserBadgesEntity setInsertDatetime(Timestamp insertDatetime) { + this.insertDatetime = insertDatetime; + return this; + } + + /** + * Get 更新ユーザ. + * @return 更新ユーザ + */ + public Integer getUpdateUser() { + return this.updateUser; + } + /** + * Set 更新ユーザ. + * @param updateUser 更新ユーザ + * @return this object */ + public GenUserBadgesEntity setUpdateUser(Integer updateUser) { + this.updateUser = updateUser; + return this; + } + + /** + * Get 更新日時. + * @return 更新日時 + */ + public Timestamp getUpdateDatetime() { + return this.updateDatetime; + } + /** + * Set 更新日時. + * @param updateDatetime 更新日時 + * @return this object */ + public GenUserBadgesEntity setUpdateDatetime(Timestamp updateDatetime) { + this.updateDatetime = updateDatetime; + return this; + } + + /** + * Get 削除フラグ. + * @return 削除フラグ + */ + public Integer getDeleteFlag() { + return this.deleteFlag; + } + /** + * Set 削除フラグ. + * @param deleteFlag 削除フラグ + * @return this object */ + public GenUserBadgesEntity setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + return this; + } + + /** + * Get key values + * @return values + */ + public Object[] getKeyValues() { + Object[] keyValues = new Object[2]; + keyValues[0] = this.no; + keyValues[1] = this.userId; + return keyValues; + } + /** + * Set key values + * @param no 番号 + * @param userId ユーザID + */ + public void setKeyValues(Integer no, Integer userId) { + this.no = no; + this.userId = userId; + } + /** + * compare on key + * @param entity entity + * @return result + */ + public boolean equalsOnKey(GenUserBadgesEntity entity) { + Object[] keyValues1 = getKeyValues(); + Object[] keyValues2 = entity.getKeyValues(); + for (int i = 0; i < keyValues1.length; i++) { + Object val1 = keyValues1[i]; + Object val2 = keyValues2[i]; + if (val1 == null && val2 != null) { + return false; + } + if (val1 != null && val2 == null) { + return false; + } + if (val1 != null && val2 != null) { + if (!val1.equals(val2)) { + return false; + } + } + + } + return true; + } + /** + * ToString + * @return string + */ + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("no = ").append(no).append("\n"); + builder.append("userId = ").append(userId).append("\n"); + builder.append("insertUser = ").append(insertUser).append("\n"); + builder.append("insertDatetime = ").append(insertDatetime).append("\n"); + builder.append("updateUser = ").append(updateUser).append("\n"); + builder.append("updateDatetime = ").append(updateDatetime).append("\n"); + builder.append("deleteFlag = ").append(deleteFlag).append("\n"); + return builder.toString(); + } + /** + * Convert label to display + * @param label label + * @return convert label + */ + protected String convLabelName(String label) { + return label; + } + /** + * validate + * @return validate error list + */ + public List validate() { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.userId, convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.userId, convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.no, convLabelName("No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.no, convLabelName("No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.insertUser, convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.updateUser, convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.deleteFlag, convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + /** + * validate + * @param values value map + * @return validate error list + */ + public List validate(Map values) { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("userId"), convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("userId"), convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("no"), convLabelName("No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("no"), convLabelName("No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("updateUser"), convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("deleteFlag"), convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + +} diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql new file mode 100644 index 000000000..deec12bff --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql @@ -0,0 +1,4 @@ +DELETE FROM ACTIVITIES +WHERE +NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql new file mode 100644 index 000000000..abd8c0132 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO ACTIVITIES +( +NO + , USER_ID + , TYPE + , TARGET + , POINT + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +DEFAULT + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql new file mode 100644 index 000000000..102b8deff --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql @@ -0,0 +1,2 @@ +SELECT * FROM ACTIVITIES +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql new file mode 100644 index 000000000..23c6aa4ac --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql @@ -0,0 +1,3 @@ +SELECT * FROM ACTIVITIES +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql new file mode 100644 index 000000000..d45f96d47 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql @@ -0,0 +1,4 @@ +SELECT * FROM ACTIVITIES + WHERE +NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql new file mode 100644 index 000000000..b4011813e --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO ACTIVITIES +( +NO + , USER_ID + , TYPE + , TARGET + , POINT + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql new file mode 100644 index 000000000..c91673718 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql @@ -0,0 +1,3 @@ +SELECT * FROM ACTIVITIES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql new file mode 100644 index 000000000..04fd4dd78 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql @@ -0,0 +1,4 @@ +SELECT * FROM ACTIVITIES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_count_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_count_all.sql new file mode 100644 index 000000000..199c26999 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_count_all.sql @@ -0,0 +1,2 @@ +SELECT COUNT(*) FROM ACTIVITIES +WHERE DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql new file mode 100644 index 000000000..a3507a4ca --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql @@ -0,0 +1,4 @@ +SELECT * FROM ACTIVITIES + WHERE +NO = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql new file mode 100644 index 000000000..0c776a106 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql @@ -0,0 +1,14 @@ +UPDATE ACTIVITIES +SET + USER_ID = ? + , TYPE = ? + , TARGET = ? + , POINT = ? + , INSERT_USER = ? + , INSERT_DATETIME = ? + , UPDATE_USER = ? + , UPDATE_DATETIME = ? + , DELETE_FLAG = ? +WHERE +NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_delete.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_delete.sql new file mode 100644 index 000000000..1245387a7 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_delete.sql @@ -0,0 +1,4 @@ +DELETE FROM BADGES +WHERE +NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql new file mode 100644 index 000000000..678b16284 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO BADGES +( +NO + , NAME + , DISPLAY_TEXT + , DESCRIPTION + , IMAGE_CATEGORY + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +DEFAULT + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql new file mode 100644 index 000000000..672bd3f10 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql @@ -0,0 +1,2 @@ +SELECT * FROM BADGES +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql new file mode 100644 index 000000000..8148bf1cc --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql @@ -0,0 +1,3 @@ +SELECT * FROM BADGES +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_on_key.sql new file mode 100644 index 000000000..1e0328d3c --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_on_key.sql @@ -0,0 +1,4 @@ +SELECT * FROM BADGES + WHERE +NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql new file mode 100644 index 000000000..7185b80af --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO BADGES +( +NO + , NAME + , DISPLAY_TEXT + , DESCRIPTION + , IMAGE_CATEGORY + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql new file mode 100644 index 000000000..39228e58a --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql @@ -0,0 +1,3 @@ +SELECT * FROM BADGES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql new file mode 100644 index 000000000..537924423 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql @@ -0,0 +1,4 @@ +SELECT * FROM BADGES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_count_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_count_all.sql new file mode 100644 index 000000000..2a9f07b6d --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_count_all.sql @@ -0,0 +1,2 @@ +SELECT COUNT(*) FROM BADGES +WHERE DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_on_key.sql new file mode 100644 index 000000000..4f1a4f87a --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_on_key.sql @@ -0,0 +1,4 @@ +SELECT * FROM BADGES + WHERE +NO = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql new file mode 100644 index 000000000..4a7eec486 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql @@ -0,0 +1,14 @@ +UPDATE BADGES +SET + NAME = ? + , DISPLAY_TEXT = ? + , DESCRIPTION = ? + , IMAGE_CATEGORY = ? + , INSERT_USER = ? + , INSERT_DATETIME = ? + , UPDATE_USER = ? + , UPDATE_DATETIME = ? + , DELETE_FLAG = ? +WHERE +NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql index f40c1b718..d3768942d 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_insert.sql @@ -11,6 +11,7 @@ KNOWLEDGE_ID , VIEW_COUNT , TYPE_ID , NOTIFY_STATUS + , POINT , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -33,4 +34,5 @@ DEFAULT , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql index 11925a065..3560bb8e9 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_raw_insert.sql @@ -11,6 +11,7 @@ KNOWLEDGE_ID , VIEW_COUNT , TYPE_ID , NOTIFY_STATUS + , POINT , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -33,4 +34,5 @@ KNOWLEDGE_ID , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql index 88ac91462..825629212 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_update.sql @@ -10,6 +10,7 @@ SET , VIEW_COUNT = ? , TYPE_ID = ? , NOTIFY_STATUS = ? + , POINT = ? , INSERT_USER = ? , INSERT_DATETIME = ? , UPDATE_USER = ? diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_delete.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_delete.sql new file mode 100644 index 000000000..764be295d --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_delete.sql @@ -0,0 +1,5 @@ +DELETE FROM USER_BADGES +WHERE +NO = ? + AND USER_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_insert.sql new file mode 100644 index 000000000..85e3dfebe --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_insert.sql @@ -0,0 +1,18 @@ +INSERT INTO USER_BADGES +( +NO + , USER_ID + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql new file mode 100644 index 000000000..2716b818a --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql @@ -0,0 +1,2 @@ +SELECT * FROM USER_BADGES +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql new file mode 100644 index 000000000..44cd4f122 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql @@ -0,0 +1,3 @@ +SELECT * FROM USER_BADGES +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_key.sql new file mode 100644 index 000000000..e9763e138 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_key.sql @@ -0,0 +1,5 @@ +SELECT * FROM USER_BADGES + WHERE +NO = ? + AND USER_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_no.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_no.sql new file mode 100644 index 000000000..6d824b86d --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_no.sql @@ -0,0 +1,4 @@ +SELECT * FROM USER_BADGES + WHERE +NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_user_id.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_user_id.sql new file mode 100644 index 000000000..326332e4d --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_user_id.sql @@ -0,0 +1,4 @@ +SELECT * FROM USER_BADGES + WHERE +USER_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_raw_insert.sql new file mode 100644 index 000000000..85e3dfebe --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_raw_insert.sql @@ -0,0 +1,18 @@ +INSERT INTO USER_BADGES +( +NO + , USER_ID + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql new file mode 100644 index 000000000..be3e4b966 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql @@ -0,0 +1,3 @@ +SELECT * FROM USER_BADGES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql new file mode 100644 index 000000000..4c7e11199 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql @@ -0,0 +1,4 @@ +SELECT * FROM USER_BADGES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_count_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_count_all.sql new file mode 100644 index 000000000..f8d6d444a --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_count_all.sql @@ -0,0 +1,2 @@ +SELECT COUNT(*) FROM USER_BADGES +WHERE DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_key.sql new file mode 100644 index 000000000..3268f3642 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_key.sql @@ -0,0 +1,5 @@ +SELECT * FROM USER_BADGES + WHERE +NO = ? + AND USER_ID = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_no.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_no.sql new file mode 100644 index 000000000..8c7789e96 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_no.sql @@ -0,0 +1,4 @@ +SELECT * FROM USER_BADGES + WHERE +NO = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_user_id.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_user_id.sql new file mode 100644 index 000000000..420fcb6dc --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_user_id.sql @@ -0,0 +1,4 @@ +SELECT * FROM USER_BADGES + WHERE +USER_ID = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_update.sql new file mode 100644 index 000000000..4e7b159bb --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_update.sql @@ -0,0 +1,11 @@ +UPDATE USER_BADGES +SET + INSERT_USER = ? + , INSERT_DATETIME = ? + , UPDATE_USER = ? + , UPDATE_DATETIME = ? + , DELETE_FLAG = ? +WHERE +NO = ? + AND USER_ID = ? +; From 331c05efc938244eac641a0c50bc4ea5dceddbaa Mon Sep 17 00:00:00 2001 From: Koda Date: Thu, 31 Aug 2017 23:57:16 +0900 Subject: [PATCH 039/138] #840 Add add point process at knowledge insert --- document/database/A5M2_knowledge.pdf | Bin 78943 -> 75518 bytes document/database/knowledge.a5er | 203 +++++++-- .../project/knowledge/config/UserConfig.java | 11 + .../control/open/KnowledgeControl.java | 10 + .../control/protect/AccountControl.java | 9 +- .../control/protect/EventControl.java | 11 + .../control/protect/KnowledgeControl.java | 17 +- .../control/protect/SurveyControl.java | 5 + .../project/knowledge/dao/ActivitiesDao.java | 5 + .../project/knowledge/dao/KnowledgesDao.java | 8 + .../dao/PointKnowledgeHistoriesDao.java | 30 ++ .../knowledge/dao/PointUserHistoriesDao.java | 31 ++ .../knowledge/dao/gen/DatabaseControlDao.java | 192 ++++---- .../knowledge/dao/gen/GenActivitiesDao.java | 77 ++-- .../knowledge/dao/gen/GenBadgesDao.java | 9 +- .../gen/GenPointKnowledgeHistoriesDao.java | 425 +++++++++++++++++ .../dao/gen/GenPointUserHistoriesDao.java | 425 +++++++++++++++++ .../deploy/v1_11_0/Migrate_1_11_2.java | 45 +- .../entity/PointKnowledgeHistoriesEntity.java | 50 ++ .../entity/PointUserHistoriesEntity.java | 50 ++ .../entity/gen/GenActivitiesEntity.java | 119 ++--- .../knowledge/entity/gen/GenBadgesEntity.java | 55 ++- .../gen/GenPointKnowledgeHistoriesEntity.java | 428 ++++++++++++++++++ .../gen/GenPointUserHistoriesEntity.java | 428 ++++++++++++++++++ .../activity/AbstractActivityProcessor.java | 151 ++++++ .../AbstractAddPointForCommentProcessor.java | 19 + ...AbstractAddPointForKnowledgeProcessor.java | 19 + .../knowledge/logic/activity/Activity.java | 112 +++++ .../logic/activity/ActivityLogic.java | 79 ++++ .../logic/activity/ActivityProcessor.java | 36 ++ .../activity/KnowledgeInsertActivity.java | 63 +++ .../ActivitiesDao/ActivitiesDao_delete.sql | 2 +- .../ActivitiesDao/ActivitiesDao_insert.sql | 6 +- .../ActivitiesDao_physical_select_on_key.sql | 2 +- .../ActivitiesDao_raw_insert.sql | 6 +- .../ActivitiesDao_select_on_key.sql | 2 +- .../ActivitiesDao/ActivitiesDao_update.sql | 5 +- .../dao/sql/BadgesDao/BadgesDao_insert.sql | 4 +- .../sql/BadgesDao/BadgesDao_raw_insert.sql | 4 +- .../dao/sql/BadgesDao/BadgesDao_update.sql | 3 +- .../PointKnowledgeHistoriesDao_delete.sql | 5 + .../PointKnowledgeHistoriesDao_insert.sql | 24 + ...wledgeHistoriesDao_physical_select_all.sql | 2 + ...riesDao_physical_select_all_with_pager.sql | 3 + ...oriesDao_physical_select_on_history_no.sql | 4 + ...dgeHistoriesDao_physical_select_on_key.sql | 5 + ...iesDao_physical_select_on_knowledge_id.sql | 4 + .../PointKnowledgeHistoriesDao_raw_insert.sql | 24 + .../PointKnowledgeHistoriesDao_select_all.sql | 3 + ...edgeHistoriesDao_select_all_with_pager.sql | 4 + ...KnowledgeHistoriesDao_select_count_all.sql | 2 + ...ledgeHistoriesDao_select_on_history_no.sql | 4 + ...intKnowledgeHistoriesDao_select_on_key.sql | 5 + ...dgeHistoriesDao_select_on_knowledge_id.sql | 4 + .../PointKnowledgeHistoriesDao_update.sql | 14 + .../PointUserHistoriesDao_delete.sql | 5 + .../PointUserHistoriesDao_insert.sql | 24 + ...ntUserHistoriesDao_physical_select_all.sql | 2 + ...riesDao_physical_select_all_with_pager.sql | 3 + ...oriesDao_physical_select_on_history_no.sql | 4 + ...serHistoriesDao_physical_select_on_key.sql | 5 + ...istoriesDao_physical_select_on_user_id.sql | 4 + .../PointUserHistoriesDao_raw_insert.sql | 24 + .../PointUserHistoriesDao_select_all.sql | 3 + ...UserHistoriesDao_select_all_with_pager.sql | 4 + ...PointUserHistoriesDao_select_count_all.sql | 2 + ...tUserHistoriesDao_select_on_history_no.sql | 4 + .../PointUserHistoriesDao_select_on_key.sql | 5 + ...ointUserHistoriesDao_select_on_user_id.sql | 4 + .../PointUserHistoriesDao_update.sql | 14 + .../project/knowledge/database/ddl.sql | 84 +++- .../deploy/v1_11_0/migrate_v1_11_2.sql | 85 +++- 72 files changed, 3214 insertions(+), 325 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/config/UserConfig.java create mode 100644 src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java create mode 100644 src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java create mode 100644 src/main/java/org/support/project/knowledge/entity/PointKnowledgeHistoriesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/PointUserHistoriesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/gen/GenPointKnowledgeHistoriesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/Activity.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_delete.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_history_no.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_knowledge_id.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_count_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_history_no.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_knowledge_id.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_delete.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_history_no.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_user_id.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_count_all.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_history_no.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_key.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_user_id.sql create mode 100644 src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql diff --git a/document/database/A5M2_knowledge.pdf b/document/database/A5M2_knowledge.pdf index 0874648cef844ad429883d16bab8a5f35e9af92c..8c0a55c7fed957289992cb0480665f3058551910 100755 GIT binary patch delta 73994 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

j?r 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 delta 77494 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 GBK#jdO6_t0 diff --git a/document/database/knowledge.a5er b/document/database/knowledge.a5er index 735705f81..729651da1 100755 --- a/document/database/knowledge.a5er +++ b/document/database/knowledge.a5er @@ -46,6 +46,127 @@ SqlSeparator=0 ShowTag=1 ShowCommonAttributes=0 +[Relation] +Entity1=ACTIVITIES +Entity2=POINT_USER_HISTORIES +RelationType1=1 +RelationType2=3 +Fields1=ACTIVITY_NO +Fields2=ACTIVITY_NO +Cardinarity1= +Cardinarity2= +Position="MAIN",0,5105,3901,4800,R,R +Dependence=0 +Caption= +PName= +LineMode=0 +Bar1=510 +Bar2=390 +Bar3=480 +TermPos1=R +TermPos2=R + +[Relation] +Entity1=USERS +Entity2=POINT_USER_HISTORIES +RelationType1=4 +RelationType2=3 +Fields1=USER_ID +Fields2=USER_ID +Cardinarity1= +Cardinarity2= +Position="MAIN",0,3441,6398,4308,R,R +Dependence=0 +Caption= +PName= +ModifiedDateTime=20170831112338 +LineMode=0 +Bar1=344 +Bar2=640 +Bar3=431 +TermPos1=R +TermPos2=R + +[Entity] +PName=POINT_USER_HISTORIES +LName=ユーザのポイント獲得履歴 +Comment= +TableOption= +Page=MAIN +Left=3500 +Top=850 +Field="ユーザID","USER_ID","INTEGER","NOT NULL",0,"","",$FFFFFFFF,"" +Field="履歴番号","HISTORY_NO","BIGINT","NOT NULL",1,"","",$FFFFFFFF,"" +Field="アクティビティ番号","ACTIVITY_NO","BIGINT","NOT NULL",,"","",$FFFFFFFF,"" +Field="獲得のタイプ","TYPE","@INT","NOT NULL",,"","",$FFFFFFFF,"" +Field="獲得ポイント","POINT","@INT",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20170831113951 +Position="MAIN",3500,850 + +[Relation] +Entity1=ACTIVITIES +Entity2=POINT_KNOWLEDGE_HISTORIES +RelationType1=4 +RelationType2=3 +Fields1=ACTIVITY_NO +Fields2=ACTIVITY_NO +Cardinarity1= +Cardinarity2= +Position="MAIN",0,5388,4612,4310,R,R +Dependence=0 +Caption= +PName= +ModifiedDateTime=20170831112218 +LineMode=0 +Bar1=539 +Bar2=461 +Bar3=431 +TermPos1=R +TermPos2=R + +[Relation] +Entity1=KNOWLEDGES +Entity2=POINT_KNOWLEDGE_HISTORIES +RelationType1=4 +RelationType2=3 +Fields1=KNOWLEDGE_ID +Fields2=KNOWLEDGE_ID +Cardinarity1= +Cardinarity2= +Position="MAIN",0,2911,5347,6275,R,R +Dependence=0 +Caption= +PName= +ModifiedDateTime=20170831112209 +LineMode=0 +Bar1=291 +Bar2=535 +Bar3=628 +TermPos1=R +TermPos2=R + +[Entity] +PName=POINT_KNOWLEDGE_HISTORIES +LName=ナレッジのポイント獲得履歴 +Comment= +TableOption= +Page=MAIN +Left=2450 +Top=1100 +Field="ナレッジID","KNOWLEDGE_ID","BIGINT","NOT NULL",0,"","",$FFFFFFFF,"" +Field="履歴番号","HISTORY_NO","BIGINT","NOT NULL",1,"","",$FFFFFFFF,"" +Field="アクティビティ番号","ACTIVITY_NO","BIGINT","NOT NULL",,"","",$FFFFFFFF,"" +Field="獲得のタイプ","TYPE","@INT","NOT NULL",,"","",$FFFFFFFF,"" +Field="獲得ポイント","POINT","@INT","NOT NULL",,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20170831112825 +Position="MAIN",2450,1100 + [Relation] Entity1=BADGES Entity2=USER_BADGES @@ -55,15 +176,15 @@ Fields1=NO Fields2=NO Cardinarity1= Cardinarity2= -Position="MAIN",0,5330,5968,5735,R,R +Position="MAIN",0,4598,5968,5732,R,R Dependence=1 Caption= PName= ModifiedDateTime=20170829163644 LineMode=0 -Bar1=533 +Bar1=460 Bar2=597 -Bar3=574 +Bar3=573 TermPos1=R TermPos2=R @@ -76,13 +197,13 @@ Fields1=USER_ID Fields2=USER_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,4363,5637,3229,R,R +Position="MAIN",0,4363,7074,3229,R,R Dependence=1 Caption= PName= LineMode=0 Bar1=436 -Bar2=564 +Bar2=707 Bar3=323 TermPos1=R TermPos2=R @@ -92,32 +213,16 @@ PName=USER_BADGES LName=ユーザの称号 Comment= TableOption= -Page=Main -Left=2950 -Top=850 +Page=MAIN +Left=2900 +Top=800 Field="ユーザID","USER_ID","INTEGER","NOT NULL",0,"","",$FFFFFFFF,"" Field="番号","NO","INTEGER","NOT NULL",1,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF ModifiedDateTime=20170829163555 -Position="Main",2950,850 - -[Comment] -Comment=種類 / ターゲット : 意味\n------------------------\n1 / knowledge_id : ナレッジを登録した [+]\n2 / knowledge_id : ナレッジを参照した [+]\n3 / knowledge_id : ナレッジにイイネを押した [+]\n4 / knowledge_id : ナレッジにイイネが押された\n5 / knowledge_id : イベントに参加登録した [+]\n6 / knowledge_id : イベント参加者が増えた\n7 / knowledge_id : ナレッジがストックされた [+]\n8 / knowledge_id : ナレッジのアンケートに回答した [+]\n9 / knowledge_id : ナレッジのアンケートに回答があった\n10 / knowledge_id : ナレッジにコメントが登録された [+]\n11 / knowledge_id : コメントにイイネが押された [+]\n\n101 / knowledge_id : 参加をやめた(マイナス)\n\n1002 / comment_no : コメントを登録した\n1003 / comment_no : コメントにイイネを押した\n1004 / comment_no : コメントにイイネが押された\n\nユーザのポイントは、USER_CONFIGSテーブルへ格納する\n\n\n\n -FontName=Tahoma -FontBold=0 -FontItalic=0 -FontUnderline=0 -FontSize=6 -FontColor=$000000 -LineColor=$000000 -BkColor=$FFFFFF -Page=Main -Left=3500 -Top=950 -Width=564 -Height=586 +Position="MAIN",2900,800 [Relation] Entity1=USERS @@ -128,15 +233,15 @@ Fields1=USER_ID Fields2=USER_ID Cardinarity1= Cardinarity2= -Position="MAIN",0,3081,6033,4726,R,R +Position="MAIN",3,9500,5578,9500,R,R Dependence=1 Caption= PName= -ModifiedDateTime=20170829161626 -LineMode=0 -Bar1=308 -Bar2=603 -Bar3=473 +ModifiedDateTime=20170831112359 +LineMode=3 +Bar1=950 +Bar2=558 +Bar3=950 TermPos1=R TermPos2=R @@ -145,28 +250,27 @@ PName=ACTIVITIES LName=アクティビティ Comment= TableOption= -Page=Main -Left=3500 -Top=800 -Field="番号","NO","BIGSERIAL","NOT NULL",0,"","",$FFFFFFFF,"" -Field="ユーザID","USER_ID","INTEGER","NOT NULL",,"","",$FFFFFFFF,"" -Field="種類","TYPE","@INT","NOT NULL",,"","",$FFFFFFFF,"" -Field="ターゲットID","TARGET","BIGINT","NOT NULL",,"","",$FFFFFFFF,"" -Field="獲得ポイント","POINT","@INT","NOT NULL",,"","",$FFFFFFFF,"" +Page=MAIN +Left=3450 +Top=1100 +Field="アクティビティ番号","ACTIVITY_NO","BIGSERIAL","NOT NULL",0,"","",$FFFFFFFF,"" +Field="イベントをおこしたユーザ","USER_ID","INTEGER","NOT NULL",,"","",$FFFFFFFF,"" +Field="アクティビティの種類","KIND","@INT","NOT NULL",,"","",$FFFFFFFF,"" +Field="ターゲットID","TARGET","@VARCHAR(64)","NOT NULL",,"","",$FFFFFFFF,"" Index=IDX_ACTIVITIES_USER_ID=0,USER_ID -Index=IDX_ACTIVITIES_TYPE_TARGET=0,TYPE,TARGET +Index=IDX_ACTIVITIES_KIND_TARGET=0,KIND,TARGET EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20170829163512 -Position="Main",3500,800 +ModifiedDateTime=20170831112153 +Position="MAIN",3450,1100 [Entity] PName=USERS LName=ユーザ Comment= TableOption= -Page=Main +Page=MAIN Left=3500 Top=500 Field="ユーザID","USER_ID","SERIAL","NOT NULL",0,"","",$FFFFFFFF,"" @@ -184,26 +288,27 @@ EffectMode=None Color=$000000 BkColor=$FFFFFF ModifiedDateTime=20170829160846 -Position="Main",3500,500 +Position="MAIN",3500,500 [Entity] PName=BADGES LName=称号 Comment= TableOption= -Page=Main +Page=MAIN Left=2900 -Top=600 +Top=550 Field="番号","NO","SERIAL","NOT NULL",0,"","",$FFFFFFFF,"" Field="名称","NAME","@VARCHAR(128)","NOT NULL",,"","",$FFFFFFFF,"" Field="表示名","DISPLAY_TEXT","@VARCHAR(32)","NOT NULL",,"","",$FFFFFFFF,"" Field="説明","DESCRIPTION","text",,,"","",$FFFFFFFF,"" -Field="画像の種類","IMAGE_CATEGORY","@INT",,,"","",$FFFFFFFF,"" +Field="画像","IMAGE","@VARCHAR(64)",,,"","",$FFFFFFFF,"" +Field="獲得ポイント","POINT","@INT",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20170829161444 -Position="Main",2900,600 +ModifiedDateTime=20170831113107 +Position="MAIN",2900,550 [Relation] Entity1=COMMENTS diff --git a/src/main/java/org/support/project/knowledge/config/UserConfig.java b/src/main/java/org/support/project/knowledge/config/UserConfig.java new file mode 100644 index 000000000..708eda64f --- /dev/null +++ b/src/main/java/org/support/project/knowledge/config/UserConfig.java @@ -0,0 +1,11 @@ +package org.support.project.knowledge.config; + +/** ユーザー設定(USER_CONFIGSテーブル)の設定キーを管理 */ +public class UserConfig { + + public static final String DEFAULT_PUBLIC_FLAG = "DEFAULT_PUBLIC_FLAG"; + public static final String DEFAULT_TARGET = "DEFAULT_TARGET"; + public static final String POINT = "POINT"; + + +} diff --git a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java index e96e66c8d..2d34a4140 100644 --- a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java @@ -50,6 +50,8 @@ import org.support.project.knowledge.logic.TemplateLogic; import org.support.project.knowledge.logic.TimeZoneLogic; import org.support.project.knowledge.logic.UploadedFileLogic; +import org.support.project.knowledge.logic.activity.Activity; +import org.support.project.knowledge.logic.activity.ActivityLogic; import org.support.project.knowledge.vo.LikeCount; import org.support.project.knowledge.vo.ListData; import org.support.project.knowledge.vo.MarkDown; @@ -215,6 +217,8 @@ public Boundary view() throws InvalidParamException, ParseException { List stocks = StocksDao.get().selectStockOnKnowledge(entity, loginedUser); setAttribute("stocks", stocks); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, getLoginedUser(), entity); + return forward("view.jsp"); } @@ -658,6 +662,9 @@ public Boundary like() throws InvalidParamException { LikeCount likeCount = new LikeCount(); likeCount.setKnowledgeId(knowledgeId); likeCount.setCount(count); + + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, getLoginedUser(), + KnowledgesDao.get().selectOnKey(knowledgeId)); return send(likeCount); } /** @@ -672,6 +679,9 @@ public Boundary likecomment() throws InvalidParamException { Long count = knowledgeLogic.addLikeComment(commentNo, getLoginedUser(), getLocale()); LikeCount likeCount = new LikeCount(); likeCount.setCount(count); + + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_LIKE, getLoginedUser(), + CommentsDao.get().selectOnKey(commentNo)); return send(likeCount); } diff --git a/src/main/java/org/support/project/knowledge/control/protect/AccountControl.java b/src/main/java/org/support/project/knowledge/control/protect/AccountControl.java index 18970dab0..cc5d4734b 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/AccountControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/AccountControl.java @@ -16,6 +16,7 @@ import org.support.project.di.Instance; import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.config.SystemConfig; +import org.support.project.knowledge.config.UserConfig; import org.support.project.knowledge.control.Control; import org.support.project.knowledge.logic.AccountLogic; import org.support.project.knowledge.logic.TargetLogic; @@ -315,11 +316,11 @@ public Boundary confirm_mail() throws InvalidParamException { @Get(publishToken = "knowledge") public Boundary targets() { UserConfigsEntity publicFlag = UserConfigsDao.get().physicalSelectOnKey( - "DEFAULT_PUBLIC_FLAG", AppConfig.get().getSystemName(), getLoginUserId()); + UserConfig.DEFAULT_PUBLIC_FLAG, AppConfig.get().getSystemName(), getLoginUserId()); if (publicFlag != null) { setAttribute("publicFlag", publicFlag.getConfigValue()); UserConfigsEntity targets = UserConfigsDao.get().physicalSelectOnKey( - "DEFAULT_TARGET", AppConfig.get().getSystemName(), getLoginUserId()); + UserConfig.DEFAULT_TARGET, AppConfig.get().getSystemName(), getLoginUserId()); if (targets != null) { if (StringUtils.isNotEmpty(targets.getConfigValue())) { String[] targetKeys = targets.getConfigValue().split(","); @@ -336,11 +337,11 @@ public Boundary targets() { public Boundary savetargets() { String publicFlag = getParam("publicFlag"); String viewers = getParam("viewers"); - UserConfigsEntity publicFlagEntiry = new UserConfigsEntity("DEFAULT_PUBLIC_FLAG", AppConfig.get().getSystemName(), getLoginUserId()); + UserConfigsEntity publicFlagEntiry = new UserConfigsEntity(UserConfig.DEFAULT_PUBLIC_FLAG, AppConfig.get().getSystemName(), getLoginUserId()); publicFlagEntiry.setConfigValue(publicFlag); UserConfigsDao.get().save(publicFlagEntiry); - UserConfigsEntity targetsEntity = new UserConfigsEntity("DEFAULT_TARGET", AppConfig.get().getSystemName(), getLoginUserId()); + UserConfigsEntity targetsEntity = new UserConfigsEntity(UserConfig.DEFAULT_TARGET, AppConfig.get().getSystemName(), getLoginUserId()); targetsEntity.setConfigValue(viewers); List results = targetsEntity.validate(); diff --git a/src/main/java/org/support/project/knowledge/control/protect/EventControl.java b/src/main/java/org/support/project/knowledge/control/protect/EventControl.java index c783d28e9..97e8f2f7e 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/EventControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/EventControl.java @@ -3,7 +3,10 @@ import org.support.project.di.DI; import org.support.project.di.Instance; import org.support.project.knowledge.control.Control; +import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.logic.EventsLogic; +import org.support.project.knowledge.logic.activity.Activity; +import org.support.project.knowledge.logic.activity.ActivityLogic; import org.support.project.web.bean.LabelValue; import org.support.project.web.boundary.Boundary; import org.support.project.web.control.service.Delete; @@ -29,6 +32,10 @@ public Boundary participation() throws InvalidParamException { } else { labelValue.setLabel(getResource("knowledge.view.msg.wait.cansel")); } + + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_ADD, getLoginedUser(), + KnowledgesDao.get().selectOnKey(knowledgeId)); + return send(labelValue); } /** @@ -40,6 +47,10 @@ public Boundary participation() throws InvalidParamException { public Boundary nonparticipation() throws InvalidParamException { Long knowledgeId = getPathLong(); EventsLogic.get().removeParticipation(knowledgeId, getLoginUserId()); + + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_DELETE, getLoginedUser(), + KnowledgesDao.get().selectOnKey(knowledgeId)); + return send(getResource("knowledge.view.msg.participate.delete")); } diff --git a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java index 72dc43137..0ea46236c 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java @@ -18,6 +18,7 @@ import org.support.project.di.DI; import org.support.project.di.Instance; import org.support.project.knowledge.config.AppConfig; +import org.support.project.knowledge.config.UserConfig; import org.support.project.knowledge.control.KnowledgeControlBase; import org.support.project.knowledge.dao.CommentsDao; import org.support.project.knowledge.dao.DraftKnowledgesDao; @@ -37,6 +38,8 @@ import org.support.project.knowledge.logic.TargetLogic; import org.support.project.knowledge.logic.TemplateLogic; import org.support.project.knowledge.logic.UploadedFileLogic; +import org.support.project.knowledge.logic.activity.Activity; +import org.support.project.knowledge.logic.activity.ActivityLogic; import org.support.project.knowledge.vo.KnowledgeData; import org.support.project.knowledge.vo.Stock; import org.support.project.knowledge.vo.UploadFile; @@ -100,11 +103,11 @@ public Boundary view_add() { if (getAttribute("publicFlag") == null) { UserConfigsEntity publicFlag = UserConfigsDao.get().physicalSelectOnKey( - "DEFAULT_PUBLIC_FLAG", AppConfig.get().getSystemName(), getLoginUserId()); + UserConfig.DEFAULT_PUBLIC_FLAG, AppConfig.get().getSystemName(), getLoginUserId()); if (publicFlag != null) { setAttribute("publicFlag", publicFlag.getConfigValue()); UserConfigsEntity targets = UserConfigsDao.get().physicalSelectOnKey( - "DEFAULT_TARGET", AppConfig.get().getSystemName(), getLoginUserId()); + UserConfig.DEFAULT_TARGET, AppConfig.get().getSystemName(), getLoginUserId()); if (targets != null) { if (StringUtils.isNotEmpty(targets.getConfigValue())) { String[] targetKeys = targets.getConfigValue().split(","); @@ -210,7 +213,8 @@ private Boundary add(KnowledgesEntity entity) throws Exception, ParseException { LOG.trace("save"); KnowledgesEntity insertedEntity = knowledgeLogic.insert(data, super.getLoginedUser()); - + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, getLoginedUser(), insertedEntity); + return sendMsg(MessageStatus.Success, HttpStatus.SC_200_OK, String.valueOf(insertedEntity.getKnowledgeId()), "message.success.insert"); } @@ -484,7 +488,8 @@ public Boundary comment() throws Exception { return super.devolution(HttpMethod.get, "open.Knowledge/view", String.valueOf(knowledgeId)); } - KnowledgeLogic.get().saveComment(knowledgeId, comment, fileNos, getLoginedUser()); + CommentsEntity commentsEntity = KnowledgeLogic.get().saveComment(knowledgeId, comment, fileNos, getLoginedUser()); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_ADD, getLoginedUser(), commentsEntity); return super.redirect(getRequest().getContextPath() + "/open.knowledge/view/" + knowledgeId + params); } @@ -667,6 +672,7 @@ public Boundary delete_comment() throws Exception { } KnowledgeLogic.get().deleteComment(db, getLoginedUser()); + addMsgSuccess("message.success.delete.target", getResource("label.comment")); setAttribute("comment", null); return devolution(HttpMethod.get, "open.Knowledge/view", String.valueOf(db.getKnowledgeId())); @@ -723,6 +729,9 @@ public Boundary stock() throws IOException, InvalidParamException { dao.physicalDelete(entity); } } + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_STOCK, getLoginedUser(), + KnowledgesDao.get().selectOnKey(knowledgeId)); + return sendMsg(MessageStatus.Success, HttpStatus.SC_200_OK, "saved", "message.success.save"); }; diff --git a/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java b/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java index afe817e91..fedbd75e6 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java @@ -12,6 +12,7 @@ import org.support.project.di.DI; import org.support.project.di.Instance; import org.support.project.knowledge.control.admin.TemplateControl; +import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.entity.ItemChoicesEntity; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.SurveyAnswersEntity; @@ -23,6 +24,8 @@ import org.support.project.knowledge.entity.TemplateMastersEntity; import org.support.project.knowledge.logic.KnowledgeLogic; import org.support.project.knowledge.logic.SurveyLogic; +import org.support.project.knowledge.logic.activity.Activity; +import org.support.project.knowledge.logic.activity.ActivityLogic; import org.support.project.knowledge.vo.SurveyReport; import org.support.project.web.boundary.Boundary; import org.support.project.web.common.HttpStatus; @@ -222,6 +225,8 @@ public Boundary answer() throws InstantiationException, IllegalAccessException, LOG.debug(PropertyUtil.reflectionToString(answer)); } SurveyLogic.get().saveAnswer(answer, getLoginUserId()); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SURVEY, getLoginedUser(), + KnowledgesDao.get().selectOnKey(knowledgeId)); // メッセージ送信 return sendMsg(MessageStatus.Success, HttpStatus.SC_200_OK, "saved", "message.success.save"); diff --git a/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java b/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java index f0e222bbb..fd931f03e 100644 --- a/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java @@ -5,6 +5,7 @@ import org.support.project.di.Instance; import org.support.project.knowledge.dao.gen.GenActivitiesDao; +import org.support.project.knowledge.entity.ActivitiesEntity; /** * アクティビティ @@ -21,6 +22,10 @@ public class ActivitiesDao extends GenActivitiesDao { public static ActivitiesDao get() { return Container.getComp(ActivitiesDao.class); } + public ActivitiesEntity select(int userId, int type, String target) { + String sql = "SELECT * FROM ACTIVITIES WHERE USER_ID = ? AND KIND = ? AND TARGET = ?"; + return executeQuerySingle(sql, ActivitiesEntity.class, userId, type, target); + } diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java index e83dc86f3..56d4fa5a9 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java @@ -315,5 +315,13 @@ public void updateViewCount(Long count, Long knowledgeId) { String sql = "UPDATE KNOWLEDGES SET VIEW_COUNT = ? WHERE KNOWLEDGE_ID = ?"; executeUpdate(sql, count, knowledgeId); } + public int selectPoint(long knowledgeId) { + String sql = "SELECT POINT FROM KNOWLEDGES WHERE KNOWLEDGE_ID = ?"; + return executeQuerySingle(sql, Integer.class, knowledgeId); + } + public void updatePoint(long knowledgeId, int point) { + String sql = "UPDATE KNOWLEDGES SET POINT = ? WHERE KNOWLEDGE_ID = ?"; + executeUpdate(sql, point, knowledgeId); + } } diff --git a/src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java new file mode 100644 index 000000000..f8129e13d --- /dev/null +++ b/src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java @@ -0,0 +1,30 @@ +package org.support.project.knowledge.dao; + +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.dao.gen.GenPointKnowledgeHistoriesDao; + +/** + * ナレッジのポイント獲得履歴 + */ +@DI(instance = Instance.Singleton) +public class PointKnowledgeHistoriesDao extends GenPointKnowledgeHistoriesDao { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + /** + * Get instance from DI container. + * @return instance + */ + public static PointKnowledgeHistoriesDao get() { + return Container.getComp(PointKnowledgeHistoriesDao.class); + } + public long selectNumOnKnowledge(long knowledgeId) { + String sql = "SELECT MAX(HISTORY_NO) FROM POINT_KNOWLEDGE_HISTORIES WHERE KNOWLEDGE_ID = ?"; + return executeQuerySingle(sql, Long.class, knowledgeId); + } + + + +} diff --git a/src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java new file mode 100644 index 000000000..d5f615351 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java @@ -0,0 +1,31 @@ +package org.support.project.knowledge.dao; + +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.dao.gen.GenPointUserHistoriesDao; + +/** + * ユーザのポイント獲得履歴 + */ +@DI(instance = Instance.Singleton) +public class PointUserHistoriesDao extends GenPointUserHistoriesDao { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + /** + * Get instance from DI container. + * @return instance + */ + public static PointUserHistoriesDao get() { + return Container.getComp(PointUserHistoriesDao.class); + } + + public long selectNumOnUser(int user) { + String sql = "SELECT MAX(HISTORY_NO) FROM POINT_USER_HISTORIES WHERE USER_ID = ?"; + return executeQuerySingle(sql, Long.class, user); + } + + + +} diff --git a/src/main/java/org/support/project/knowledge/dao/gen/DatabaseControlDao.java b/src/main/java/org/support/project/knowledge/dao/gen/DatabaseControlDao.java index 46102cb4c..a7f891d2c 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/DatabaseControlDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/DatabaseControlDao.java @@ -20,54 +20,56 @@ public class DatabaseControlDao extends AbstractDao { /** Drop all tables */ public void dropAllTable() { - String[] sqls = new String[47]; + String[] sqls = new String[49]; sqls[0] = "DROP TABLE IF EXISTS KNOWLEDGES CASCADE;"; - sqls[1] = "DROP TABLE IF EXISTS SERVICE_LOCALE_CONFIGS CASCADE;"; - sqls[2] = "DROP TABLE IF EXISTS ACCOUNT_IMAGES CASCADE;"; - sqls[3] = "DROP TABLE IF EXISTS EVENTS CASCADE;"; - sqls[4] = "DROP TABLE IF EXISTS MAIL_POSTS CASCADE;"; - sqls[5] = "DROP TABLE IF EXISTS MAIL_PROPERTIES CASCADE;"; - sqls[6] = "DROP TABLE IF EXISTS WEBHOOK_CONFIGS CASCADE;"; - sqls[7] = "DROP TABLE IF EXISTS MAIL_LOCALE_TEMPLATES CASCADE;"; - sqls[8] = "DROP TABLE IF EXISTS VOTES CASCADE;"; - sqls[9] = "DROP TABLE IF EXISTS COMMENTS CASCADE;"; - sqls[10] = "DROP TABLE IF EXISTS SURVEY_CHOICES CASCADE;"; - sqls[11] = "DROP TABLE IF EXISTS TOKENS CASCADE;"; - sqls[12] = "DROP TABLE IF EXISTS KNOWLEDGE_GROUPS CASCADE;"; - sqls[13] = "DROP TABLE IF EXISTS MAIL_HOOK_CONDITIONS CASCADE;"; - sqls[14] = "DROP TABLE IF EXISTS SURVEY_ITEM_ANSWERS CASCADE;"; - sqls[15] = "DROP TABLE IF EXISTS LIKES CASCADE;"; - sqls[16] = "DROP TABLE IF EXISTS DRAFT_ITEM_VALUES CASCADE;"; - sqls[17] = "DROP TABLE IF EXISTS VIEW_HISTORIES CASCADE;"; - sqls[18] = "DROP TABLE IF EXISTS KNOWLEDGE_EDIT_GROUPS CASCADE;"; - sqls[19] = "DROP TABLE IF EXISTS WEBHOOKS CASCADE;"; - sqls[20] = "DROP TABLE IF EXISTS KNOWLEDGE_FILES CASCADE;"; - sqls[21] = "DROP TABLE IF EXISTS NOTIFY_QUEUES CASCADE;"; - sqls[22] = "DROP TABLE IF EXISTS TEMPLATE_MASTERS CASCADE;"; - sqls[23] = "DROP TABLE IF EXISTS SERVICE_CONFIGS CASCADE;"; - sqls[24] = "DROP TABLE IF EXISTS ITEM_CHOICES CASCADE;"; - sqls[25] = "DROP TABLE IF EXISTS KNOWLEDGE_EDIT_USERS CASCADE;"; - sqls[26] = "DROP TABLE IF EXISTS PINS CASCADE;"; - sqls[27] = "DROP TABLE IF EXISTS KNOWLEDGE_HISTORIES CASCADE;"; - sqls[28] = "DROP TABLE IF EXISTS KNOWLEDGE_ITEM_VALUES CASCADE;"; - sqls[29] = "DROP TABLE IF EXISTS KNOWLEDGE_TAGS CASCADE;"; - sqls[30] = "DROP TABLE IF EXISTS LIKE_COMMENTS CASCADE;"; - sqls[31] = "DROP TABLE IF EXISTS BADGES CASCADE;"; - sqls[32] = "DROP TABLE IF EXISTS SURVEY_ANSWERS CASCADE;"; - sqls[33] = "DROP TABLE IF EXISTS SURVEYS CASCADE;"; - sqls[34] = "DROP TABLE IF EXISTS ACTIVITIES CASCADE;"; - sqls[35] = "DROP TABLE IF EXISTS MAIL_TEMPLATES CASCADE;"; - sqls[36] = "DROP TABLE IF EXISTS USER_BADGES CASCADE;"; - sqls[37] = "DROP TABLE IF EXISTS NOTIFY_CONFIGS CASCADE;"; - sqls[38] = "DROP TABLE IF EXISTS SURVEY_ITEMS CASCADE;"; - sqls[39] = "DROP TABLE IF EXISTS MAIL_HOOKS CASCADE;"; - sqls[40] = "DROP TABLE IF EXISTS DRAFT_KNOWLEDGES CASCADE;"; - sqls[41] = "DROP TABLE IF EXISTS STOCKS CASCADE;"; - sqls[42] = "DROP TABLE IF EXISTS STOCK_KNOWLEDGES CASCADE;"; - sqls[43] = "DROP TABLE IF EXISTS KNOWLEDGE_USERS CASCADE;"; - sqls[44] = "DROP TABLE IF EXISTS PARTICIPANTS CASCADE;"; - sqls[45] = "DROP TABLE IF EXISTS TAGS CASCADE;"; - sqls[46] = "DROP TABLE IF EXISTS TEMPLATE_ITEMS CASCADE;"; + sqls[1] = "DROP TABLE IF EXISTS EVENTS CASCADE;"; + sqls[2] = "DROP TABLE IF EXISTS MAIL_POSTS CASCADE;"; + sqls[3] = "DROP TABLE IF EXISTS WEBHOOK_CONFIGS CASCADE;"; + sqls[4] = "DROP TABLE IF EXISTS SURVEY_CHOICES CASCADE;"; + sqls[5] = "DROP TABLE IF EXISTS KNOWLEDGE_GROUPS CASCADE;"; + sqls[6] = "DROP TABLE IF EXISTS SURVEY_ITEM_ANSWERS CASCADE;"; + sqls[7] = "DROP TABLE IF EXISTS DRAFT_ITEM_VALUES CASCADE;"; + sqls[8] = "DROP TABLE IF EXISTS KNOWLEDGE_EDIT_GROUPS CASCADE;"; + sqls[9] = "DROP TABLE IF EXISTS WEBHOOKS CASCADE;"; + sqls[10] = "DROP TABLE IF EXISTS KNOWLEDGE_FILES CASCADE;"; + sqls[11] = "DROP TABLE IF EXISTS NOTIFY_QUEUES CASCADE;"; + sqls[12] = "DROP TABLE IF EXISTS TEMPLATE_MASTERS CASCADE;"; + sqls[13] = "DROP TABLE IF EXISTS ITEM_CHOICES CASCADE;"; + sqls[14] = "DROP TABLE IF EXISTS KNOWLEDGE_ITEM_VALUES CASCADE;"; + sqls[15] = "DROP TABLE IF EXISTS KNOWLEDGE_TAGS CASCADE;"; + sqls[16] = "DROP TABLE IF EXISTS USER_BADGES CASCADE;"; + sqls[17] = "DROP TABLE IF EXISTS NOTIFY_CONFIGS CASCADE;"; + sqls[18] = "DROP TABLE IF EXISTS MAIL_HOOKS CASCADE;"; + sqls[19] = "DROP TABLE IF EXISTS DRAFT_KNOWLEDGES CASCADE;"; + sqls[20] = "DROP TABLE IF EXISTS STOCK_KNOWLEDGES CASCADE;"; + sqls[21] = "DROP TABLE IF EXISTS KNOWLEDGE_USERS CASCADE;"; + sqls[22] = "DROP TABLE IF EXISTS PARTICIPANTS CASCADE;"; + sqls[23] = "DROP TABLE IF EXISTS TAGS CASCADE;"; + sqls[24] = "DROP TABLE IF EXISTS SERVICE_LOCALE_CONFIGS CASCADE;"; + sqls[25] = "DROP TABLE IF EXISTS ACCOUNT_IMAGES CASCADE;"; + sqls[26] = "DROP TABLE IF EXISTS MAIL_PROPERTIES CASCADE;"; + sqls[27] = "DROP TABLE IF EXISTS POINT_KNOWLEDGE_HISTORIES CASCADE;"; + sqls[28] = "DROP TABLE IF EXISTS MAIL_LOCALE_TEMPLATES CASCADE;"; + sqls[29] = "DROP TABLE IF EXISTS VOTES CASCADE;"; + sqls[30] = "DROP TABLE IF EXISTS COMMENTS CASCADE;"; + sqls[31] = "DROP TABLE IF EXISTS TOKENS CASCADE;"; + sqls[32] = "DROP TABLE IF EXISTS MAIL_HOOK_CONDITIONS CASCADE;"; + sqls[33] = "DROP TABLE IF EXISTS LIKES CASCADE;"; + sqls[34] = "DROP TABLE IF EXISTS VIEW_HISTORIES CASCADE;"; + sqls[35] = "DROP TABLE IF EXISTS SERVICE_CONFIGS CASCADE;"; + sqls[36] = "DROP TABLE IF EXISTS KNOWLEDGE_EDIT_USERS CASCADE;"; + sqls[37] = "DROP TABLE IF EXISTS PINS CASCADE;"; + sqls[38] = "DROP TABLE IF EXISTS KNOWLEDGE_HISTORIES CASCADE;"; + sqls[39] = "DROP TABLE IF EXISTS LIKE_COMMENTS CASCADE;"; + sqls[40] = "DROP TABLE IF EXISTS BADGES CASCADE;"; + sqls[41] = "DROP TABLE IF EXISTS SURVEY_ANSWERS CASCADE;"; + sqls[42] = "DROP TABLE IF EXISTS SURVEYS CASCADE;"; + sqls[43] = "DROP TABLE IF EXISTS ACTIVITIES CASCADE;"; + sqls[44] = "DROP TABLE IF EXISTS MAIL_TEMPLATES CASCADE;"; + sqls[45] = "DROP TABLE IF EXISTS POINT_USER_HISTORIES CASCADE;"; + sqls[46] = "DROP TABLE IF EXISTS SURVEY_ITEMS CASCADE;"; + sqls[47] = "DROP TABLE IF EXISTS STOCKS CASCADE;"; + sqls[48] = "DROP TABLE IF EXISTS TEMPLATE_ITEMS CASCADE;"; for (String sql : sqls) { LOG.debug(sql); executeUpdate(sql); @@ -75,54 +77,56 @@ public void dropAllTable() { } /** Delete all table data */ public void dropAllData() { - String[] sqls = new String[47]; + String[] sqls = new String[49]; sqls[0] = "TRUNCATE TABLE KNOWLEDGES;"; - sqls[1] = "TRUNCATE TABLE SERVICE_LOCALE_CONFIGS;"; - sqls[2] = "TRUNCATE TABLE ACCOUNT_IMAGES;"; - sqls[3] = "TRUNCATE TABLE EVENTS;"; - sqls[4] = "TRUNCATE TABLE MAIL_POSTS;"; - sqls[5] = "TRUNCATE TABLE MAIL_PROPERTIES;"; - sqls[6] = "TRUNCATE TABLE WEBHOOK_CONFIGS;"; - sqls[7] = "TRUNCATE TABLE MAIL_LOCALE_TEMPLATES;"; - sqls[8] = "TRUNCATE TABLE VOTES;"; - sqls[9] = "TRUNCATE TABLE COMMENTS;"; - sqls[10] = "TRUNCATE TABLE SURVEY_CHOICES;"; - sqls[11] = "TRUNCATE TABLE TOKENS;"; - sqls[12] = "TRUNCATE TABLE KNOWLEDGE_GROUPS;"; - sqls[13] = "TRUNCATE TABLE MAIL_HOOK_CONDITIONS;"; - sqls[14] = "TRUNCATE TABLE SURVEY_ITEM_ANSWERS;"; - sqls[15] = "TRUNCATE TABLE LIKES;"; - sqls[16] = "TRUNCATE TABLE DRAFT_ITEM_VALUES;"; - sqls[17] = "TRUNCATE TABLE VIEW_HISTORIES;"; - sqls[18] = "TRUNCATE TABLE KNOWLEDGE_EDIT_GROUPS;"; - sqls[19] = "TRUNCATE TABLE WEBHOOKS;"; - sqls[20] = "TRUNCATE TABLE KNOWLEDGE_FILES;"; - sqls[21] = "TRUNCATE TABLE NOTIFY_QUEUES;"; - sqls[22] = "TRUNCATE TABLE TEMPLATE_MASTERS;"; - sqls[23] = "TRUNCATE TABLE SERVICE_CONFIGS;"; - sqls[24] = "TRUNCATE TABLE ITEM_CHOICES;"; - sqls[25] = "TRUNCATE TABLE KNOWLEDGE_EDIT_USERS;"; - sqls[26] = "TRUNCATE TABLE PINS;"; - sqls[27] = "TRUNCATE TABLE KNOWLEDGE_HISTORIES;"; - sqls[28] = "TRUNCATE TABLE KNOWLEDGE_ITEM_VALUES;"; - sqls[29] = "TRUNCATE TABLE KNOWLEDGE_TAGS;"; - sqls[30] = "TRUNCATE TABLE LIKE_COMMENTS;"; - sqls[31] = "TRUNCATE TABLE BADGES;"; - sqls[32] = "TRUNCATE TABLE SURVEY_ANSWERS;"; - sqls[33] = "TRUNCATE TABLE SURVEYS;"; - sqls[34] = "TRUNCATE TABLE ACTIVITIES;"; - sqls[35] = "TRUNCATE TABLE MAIL_TEMPLATES;"; - sqls[36] = "TRUNCATE TABLE USER_BADGES;"; - sqls[37] = "TRUNCATE TABLE NOTIFY_CONFIGS;"; - sqls[38] = "TRUNCATE TABLE SURVEY_ITEMS;"; - sqls[39] = "TRUNCATE TABLE MAIL_HOOKS;"; - sqls[40] = "TRUNCATE TABLE DRAFT_KNOWLEDGES;"; - sqls[41] = "TRUNCATE TABLE STOCKS;"; - sqls[42] = "TRUNCATE TABLE STOCK_KNOWLEDGES;"; - sqls[43] = "TRUNCATE TABLE KNOWLEDGE_USERS;"; - sqls[44] = "TRUNCATE TABLE PARTICIPANTS;"; - sqls[45] = "TRUNCATE TABLE TAGS;"; - sqls[46] = "TRUNCATE TABLE TEMPLATE_ITEMS;"; + sqls[1] = "TRUNCATE TABLE EVENTS;"; + sqls[2] = "TRUNCATE TABLE MAIL_POSTS;"; + sqls[3] = "TRUNCATE TABLE WEBHOOK_CONFIGS;"; + sqls[4] = "TRUNCATE TABLE SURVEY_CHOICES;"; + sqls[5] = "TRUNCATE TABLE KNOWLEDGE_GROUPS;"; + sqls[6] = "TRUNCATE TABLE SURVEY_ITEM_ANSWERS;"; + sqls[7] = "TRUNCATE TABLE DRAFT_ITEM_VALUES;"; + sqls[8] = "TRUNCATE TABLE KNOWLEDGE_EDIT_GROUPS;"; + sqls[9] = "TRUNCATE TABLE WEBHOOKS;"; + sqls[10] = "TRUNCATE TABLE KNOWLEDGE_FILES;"; + sqls[11] = "TRUNCATE TABLE NOTIFY_QUEUES;"; + sqls[12] = "TRUNCATE TABLE TEMPLATE_MASTERS;"; + sqls[13] = "TRUNCATE TABLE ITEM_CHOICES;"; + sqls[14] = "TRUNCATE TABLE KNOWLEDGE_ITEM_VALUES;"; + sqls[15] = "TRUNCATE TABLE KNOWLEDGE_TAGS;"; + sqls[16] = "TRUNCATE TABLE USER_BADGES;"; + sqls[17] = "TRUNCATE TABLE NOTIFY_CONFIGS;"; + sqls[18] = "TRUNCATE TABLE MAIL_HOOKS;"; + sqls[19] = "TRUNCATE TABLE DRAFT_KNOWLEDGES;"; + sqls[20] = "TRUNCATE TABLE STOCK_KNOWLEDGES;"; + sqls[21] = "TRUNCATE TABLE KNOWLEDGE_USERS;"; + sqls[22] = "TRUNCATE TABLE PARTICIPANTS;"; + sqls[23] = "TRUNCATE TABLE TAGS;"; + sqls[24] = "TRUNCATE TABLE SERVICE_LOCALE_CONFIGS;"; + sqls[25] = "TRUNCATE TABLE ACCOUNT_IMAGES;"; + sqls[26] = "TRUNCATE TABLE MAIL_PROPERTIES;"; + sqls[27] = "TRUNCATE TABLE POINT_KNOWLEDGE_HISTORIES;"; + sqls[28] = "TRUNCATE TABLE MAIL_LOCALE_TEMPLATES;"; + sqls[29] = "TRUNCATE TABLE VOTES;"; + sqls[30] = "TRUNCATE TABLE COMMENTS;"; + sqls[31] = "TRUNCATE TABLE TOKENS;"; + sqls[32] = "TRUNCATE TABLE MAIL_HOOK_CONDITIONS;"; + sqls[33] = "TRUNCATE TABLE LIKES;"; + sqls[34] = "TRUNCATE TABLE VIEW_HISTORIES;"; + sqls[35] = "TRUNCATE TABLE SERVICE_CONFIGS;"; + sqls[36] = "TRUNCATE TABLE KNOWLEDGE_EDIT_USERS;"; + sqls[37] = "TRUNCATE TABLE PINS;"; + sqls[38] = "TRUNCATE TABLE KNOWLEDGE_HISTORIES;"; + sqls[39] = "TRUNCATE TABLE LIKE_COMMENTS;"; + sqls[40] = "TRUNCATE TABLE BADGES;"; + sqls[41] = "TRUNCATE TABLE SURVEY_ANSWERS;"; + sqls[42] = "TRUNCATE TABLE SURVEYS;"; + sqls[43] = "TRUNCATE TABLE ACTIVITIES;"; + sqls[44] = "TRUNCATE TABLE MAIL_TEMPLATES;"; + sqls[45] = "TRUNCATE TABLE POINT_USER_HISTORIES;"; + sqls[46] = "TRUNCATE TABLE SURVEY_ITEMS;"; + sqls[47] = "TRUNCATE TABLE STOCKS;"; + sqls[48] = "TRUNCATE TABLE TEMPLATE_ITEMS;"; for (String sql : sqls) { LOG.debug(sql); executeUpdate(sql); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java index 308493eae..98b7a15b1 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java @@ -59,12 +59,12 @@ public List physicalSelectAllWithPager(int limit, int offset) } /** * Select data on key. - * @param no no + * @param activityNo activityNo * @return data */ - public ActivitiesEntity physicalSelectOnKey(Long no) { + public ActivitiesEntity physicalSelectOnKey(Long activityNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql"); - return executeQuerySingle(sql, ActivitiesEntity.class, no); + return executeQuerySingle(sql, ActivitiesEntity.class, activityNo); } /** * Select all data that not deleted. @@ -94,12 +94,12 @@ public Integer selectCountAll() { } /** * Select data that not deleted on key. - * @param no no + * @param activityNo activityNo * @return data */ - public ActivitiesEntity selectOnKey(Long no) { + public ActivitiesEntity selectOnKey(Long activityNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql"); - return executeQuerySingle(sql, ActivitiesEntity.class, no); + return executeQuerySingle(sql, ActivitiesEntity.class, activityNo); } /** * Count all data @@ -119,11 +119,10 @@ public int physicalCountAll() { public ActivitiesEntity rawPhysicalInsert(ActivitiesEntity entity) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql"); executeUpdate(sql, - entity.getNo(), + entity.getActivityNo(), entity.getUserId(), - entity.getType(), + entity.getKind(), entity.getTarget(), - entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), @@ -131,7 +130,7 @@ public ActivitiesEntity rawPhysicalInsert(ActivitiesEntity entity) { entity.getDeleteFlag()); String driverClass = ConnectionManager.getInstance().getDriverClass(getConnectionName()); if (ORMappingParameter.DRIVER_NAME_POSTGRESQL.equals(driverClass)) { - String setValSql = "select setval('ACTIVITIES_NO_seq', (select max(NO) from ACTIVITIES));"; + String setValSql = "select setval('ACTIVITIES_ACTIVITY_NO_seq', (select max(ACTIVITY_NO) from ACTIVITIES));"; executeQuerySingle(setValSql, Long.class); } return entity; @@ -145,18 +144,17 @@ public ActivitiesEntity rawPhysicalInsert(ActivitiesEntity entity) { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ActivitiesEntity physicalInsert(ActivitiesEntity entity) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql"); - Class type = PropertyUtil.getPropertyType(entity, "no"); + Class type = PropertyUtil.getPropertyType(entity, "activityNo"); Object key = executeInsert(sql, type, entity.getUserId(), - entity.getType(), + entity.getKind(), entity.getTarget(), - entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), entity.getUpdateDatetime(), entity.getDeleteFlag()); - PropertyUtil.setPropertyValue(entity, "no", key); + PropertyUtil.setPropertyValue(entity, "activityNo", key); return entity; } /** @@ -197,15 +195,14 @@ public ActivitiesEntity physicalUpdate(ActivitiesEntity entity) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql"); executeUpdate(sql, entity.getUserId(), - entity.getType(), + entity.getKind(), entity.getTarget(), - entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), entity.getUpdateDatetime(), entity.getDeleteFlag(), - entity.getNo()); + entity.getActivityNo()); return entity; } /** @@ -217,7 +214,7 @@ public ActivitiesEntity physicalUpdate(ActivitiesEntity entity) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ActivitiesEntity update(Integer user, ActivitiesEntity entity) { - ActivitiesEntity db = selectOnKey(entity.getNo()); + ActivitiesEntity db = selectOnKey(entity.getActivityNo()); entity.setInsertUser(db.getInsertUser()); entity.setInsertDatetime(db.getInsertDatetime()); entity.setDeleteFlag(db.getDeleteFlag()); @@ -247,7 +244,7 @@ public ActivitiesEntity update(ActivitiesEntity entity) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ActivitiesEntity save(Integer user, ActivitiesEntity entity) { - ActivitiesEntity db = selectOnKey(entity.getNo()); + ActivitiesEntity db = selectOnKey(entity.getActivityNo()); if (db == null) { return insert(user, entity); } else { @@ -262,7 +259,7 @@ public ActivitiesEntity save(Integer user, ActivitiesEntity entity) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ActivitiesEntity save(ActivitiesEntity entity) { - ActivitiesEntity db = selectOnKey(entity.getNo()); + ActivitiesEntity db = selectOnKey(entity.getActivityNo()); if (db == null) { return insert(entity); } else { @@ -271,12 +268,12 @@ public ActivitiesEntity save(ActivitiesEntity entity) { } /** * Physical Delete. - * @param no no + * @param activityNo activityNo */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void physicalDelete(Long no) { + public void physicalDelete(Long activityNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql"); - executeUpdate(sql, no); + executeUpdate(sql, activityNo); } /** * Physical Delete. @@ -284,7 +281,7 @@ public void physicalDelete(Long no) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void physicalDelete(ActivitiesEntity entity) { - physicalDelete(entity.getNo()); + physicalDelete(entity.getActivityNo()); } /** @@ -292,11 +289,11 @@ public void physicalDelete(ActivitiesEntity entity) { * if delete flag is exists, the data is logical delete. * set saved user id. * @param user saved userid - * @param no no + * @param activityNo activityNo */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void delete(Integer user, Long no) { - ActivitiesEntity db = selectOnKey(no); + public void delete(Integer user, Long activityNo) { + ActivitiesEntity db = selectOnKey(activityNo); db.setDeleteFlag(1); db.setUpdateUser(user); db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); @@ -305,13 +302,13 @@ public void delete(Integer user, Long no) { /** * Delete. * if delete flag is exists, the data is logical delete. - * @param no no + * @param activityNo activityNo */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void delete(Long no) { + public void delete(Long activityNo) { DBUserPool pool = Container.getComp(DBUserPool.class); Integer user = (Integer) pool.getUser(); - delete(user, no); + delete(user, activityNo); } /** * Delete. @@ -322,7 +319,7 @@ public void delete(Long no) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void delete(Integer user, ActivitiesEntity entity) { - delete(user, entity.getNo()); + delete(user, entity.getActivityNo()); } /** @@ -333,7 +330,7 @@ public void delete(Integer user, ActivitiesEntity entity) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void delete(ActivitiesEntity entity) { - delete(entity.getNo()); + delete(entity.getActivityNo()); } /** @@ -341,11 +338,11 @@ public void delete(ActivitiesEntity entity) { * if delete flag is exists and delete flag is true, delete flug is false to activate. * set saved user id. * @param user saved userid - * @param no no + * @param activityNo activityNo */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void activation(Integer user, Long no) { - ActivitiesEntity db = physicalSelectOnKey(no); + public void activation(Integer user, Long activityNo) { + ActivitiesEntity db = physicalSelectOnKey(activityNo); db.setDeleteFlag(0); db.setUpdateUser(user); db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); @@ -354,13 +351,13 @@ public void activation(Integer user, Long no) { /** * Ativation. * if delete flag is exists and delete flag is true, delete flug is false to activate. - * @param no no + * @param activityNo activityNo */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void activation(Long no) { + public void activation(Long activityNo) { DBUserPool pool = Container.getComp(DBUserPool.class); Integer user = (Integer) pool.getUser(); - activation(user, no); + activation(user, activityNo); } /** * Ativation. @@ -371,7 +368,7 @@ public void activation(Long no) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void activation(Integer user, ActivitiesEntity entity) { - activation(user, entity.getNo()); + activation(user, entity.getActivityNo()); } /** @@ -381,7 +378,7 @@ public void activation(Integer user, ActivitiesEntity entity) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void activation(ActivitiesEntity entity) { - activation(entity.getNo()); + activation(entity.getActivityNo()); } diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java index e15451c26..3c968a909 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java @@ -123,7 +123,8 @@ public BadgesEntity rawPhysicalInsert(BadgesEntity entity) { entity.getName(), entity.getDisplayText(), entity.getDescription(), - entity.getImageCategory(), + entity.getImage(), + entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), @@ -150,7 +151,8 @@ public BadgesEntity physicalInsert(BadgesEntity entity) { entity.getName(), entity.getDisplayText(), entity.getDescription(), - entity.getImageCategory(), + entity.getImage(), + entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), @@ -199,7 +201,8 @@ public BadgesEntity physicalUpdate(BadgesEntity entity) { entity.getName(), entity.getDisplayText(), entity.getDescription(), - entity.getImageCategory(), + entity.getImage(), + entity.getPoint(), entity.getInsertUser(), entity.getInsertDatetime(), entity.getUpdateUser(), diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java new file mode 100644 index 000000000..aa16c0934 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java @@ -0,0 +1,425 @@ +package org.support.project.knowledge.dao.gen; + +import java.util.List; + +import java.sql.Timestamp; + + +import org.support.project.knowledge.entity.PointKnowledgeHistoriesEntity; +import org.support.project.ormapping.dao.AbstractDao; +import org.support.project.ormapping.exception.ORMappingException; +import org.support.project.ormapping.common.SQLManager; +import org.support.project.ormapping.common.DBUserPool; +import org.support.project.ormapping.common.IDGen; +import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.connection.ConnectionManager; +import org.support.project.common.util.PropertyUtil; + +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.aop.Aspect; + +/** + * ナレッジのポイント獲得履歴 + * this class is auto generate and not edit. + * if modify dao method, you can edit PointKnowledgeHistoriesDao. + */ +@DI(instance = Instance.Singleton) +public class GenPointKnowledgeHistoriesDao extends AbstractDao { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenPointKnowledgeHistoriesDao get() { + return Container.getComp(GenPointKnowledgeHistoriesDao.class); + } + + /** + * Select all data. + * @return all data + */ + public List physicalSelectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @return all data on limit and offset + */ + public List physicalSelectAllWithPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, limit, offset); + } + /** + * Select data on key. + * @param historyNo historyNo + * @param knowledgeId knowledgeId + * @return data + */ + public PointKnowledgeHistoriesEntity physicalSelectOnKey(Long historyNo, Long knowledgeId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_key.sql"); + return executeQuerySingle(sql, PointKnowledgeHistoriesEntity.class, historyNo, knowledgeId); + } + /** + * Select all data that not deleted. + * @return all data + */ + public List selectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @return all data + */ + public List selectAllWidthPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, limit, offset); + } + /** + * Select count that not deleted. + * @return count + */ + public Integer selectCountAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_count_all.sql"); + return executeQuerySingle(sql, Integer.class); + } + /** + * Select data that not deleted on key. + * @param historyNo historyNo + * @param knowledgeId knowledgeId + * @return data + */ + public PointKnowledgeHistoriesEntity selectOnKey(Long historyNo, Long knowledgeId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_key.sql"); + return executeQuerySingle(sql, PointKnowledgeHistoriesEntity.class, historyNo, knowledgeId); + } + /** + * Select data that not deleted on HISTORY_NO column. + * @param historyNo historyNo + * @return list + */ + public List selectOnHistoryNo(Long historyNo) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_history_no.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, historyNo); + } + /** + * Select data that not deleted on KNOWLEDGE_ID column. + * @param knowledgeId knowledgeId + * @return list + */ + public List selectOnKnowledgeId(Long knowledgeId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_knowledge_id.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, knowledgeId); + } + /** + * Select data on HISTORY_NO column. + * @param historyNo historyNo + * @return list + */ + public List physicalSelectOnHistoryNo(Long historyNo) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_history_no.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, historyNo); + } + /** + * Select data on KNOWLEDGE_ID column. + * @param knowledgeId knowledgeId + * @return list + */ + public List physicalSelectOnKnowledgeId(Long knowledgeId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_knowledge_id.sql"); + return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, knowledgeId); + } + /** + * Count all data + * @return count + */ + public int physicalCountAll() { + String sql = "SELECT COUNT(*) FROM POINT_KNOWLEDGE_HISTORIES"; + return executeQuerySingle(sql, Integer.class); + } + /** + * Physical Insert. + * it is not create key on database sequence. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity rawPhysicalInsert(PointKnowledgeHistoriesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql"); + executeUpdate(sql, + entity.getHistoryNo(), + entity.getKnowledgeId(), + entity.getActivityNo(), + entity.getType(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + return entity; + } + /** + * Physical Insert. + * if key column have sequence, key value create by database. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity physicalInsert(PointKnowledgeHistoriesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql"); + executeUpdate(sql, + entity.getHistoryNo(), + entity.getKnowledgeId(), + entity.getActivityNo(), + entity.getType(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + return entity; + } + /** + * Insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity insert(Integer user, PointKnowledgeHistoriesEntity entity) { + entity.setInsertUser(user); + entity.setInsertDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setDeleteFlag(0); + return physicalInsert(entity); + } + /** + * Insert. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity insert(PointKnowledgeHistoriesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return insert(userId, entity); + } + /** + * Physical Update. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity physicalUpdate(PointKnowledgeHistoriesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql"); + executeUpdate(sql, + entity.getActivityNo(), + entity.getType(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag(), + entity.getHistoryNo(), + entity.getKnowledgeId()); + return entity; + } + /** + * Update. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity update(Integer user, PointKnowledgeHistoriesEntity entity) { + PointKnowledgeHistoriesEntity db = selectOnKey(entity.getHistoryNo(), entity.getKnowledgeId()); + entity.setInsertUser(db.getInsertUser()); + entity.setInsertDatetime(db.getInsertDatetime()); + entity.setDeleteFlag(db.getDeleteFlag()); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + return physicalUpdate(entity); + } + /** + * Update. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity update(PointKnowledgeHistoriesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return update(userId, entity); + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity save(Integer user, PointKnowledgeHistoriesEntity entity) { + PointKnowledgeHistoriesEntity db = selectOnKey(entity.getHistoryNo(), entity.getKnowledgeId()); + if (db == null) { + return insert(user, entity); + } else { + return update(user, entity); + } + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointKnowledgeHistoriesEntity save(PointKnowledgeHistoriesEntity entity) { + PointKnowledgeHistoriesEntity db = selectOnKey(entity.getHistoryNo(), entity.getKnowledgeId()); + if (db == null) { + return insert(entity); + } else { + return update(entity); + } + } + /** + * Physical Delete. + * @param historyNo historyNo + * @param knowledgeId knowledgeId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(Long historyNo, Long knowledgeId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_delete.sql"); + executeUpdate(sql, historyNo, knowledgeId); + } + /** + * Physical Delete. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(PointKnowledgeHistoriesEntity entity) { + physicalDelete(entity.getHistoryNo(), entity.getKnowledgeId()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param historyNo historyNo + * @param knowledgeId knowledgeId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, Long historyNo, Long knowledgeId) { + PointKnowledgeHistoriesEntity db = selectOnKey(historyNo, knowledgeId); + db.setDeleteFlag(1); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * @param historyNo historyNo + * @param knowledgeId knowledgeId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Long historyNo, Long knowledgeId) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + delete(user, historyNo, knowledgeId); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, PointKnowledgeHistoriesEntity entity) { + delete(user, entity.getHistoryNo(), entity.getKnowledgeId()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(PointKnowledgeHistoriesEntity entity) { + delete(entity.getHistoryNo(), entity.getKnowledgeId()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param historyNo historyNo + * @param knowledgeId knowledgeId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, Long historyNo, Long knowledgeId) { + PointKnowledgeHistoriesEntity db = physicalSelectOnKey(historyNo, knowledgeId); + db.setDeleteFlag(0); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param historyNo historyNo + * @param knowledgeId knowledgeId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Long historyNo, Long knowledgeId) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + activation(user, historyNo, knowledgeId); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, PointKnowledgeHistoriesEntity entity) { + activation(user, entity.getHistoryNo(), entity.getKnowledgeId()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(PointKnowledgeHistoriesEntity entity) { + activation(entity.getHistoryNo(), entity.getKnowledgeId()); + + } + +} diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java new file mode 100644 index 000000000..0407be1bb --- /dev/null +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java @@ -0,0 +1,425 @@ +package org.support.project.knowledge.dao.gen; + +import java.util.List; + +import java.sql.Timestamp; + + +import org.support.project.knowledge.entity.PointUserHistoriesEntity; +import org.support.project.ormapping.dao.AbstractDao; +import org.support.project.ormapping.exception.ORMappingException; +import org.support.project.ormapping.common.SQLManager; +import org.support.project.ormapping.common.DBUserPool; +import org.support.project.ormapping.common.IDGen; +import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.connection.ConnectionManager; +import org.support.project.common.util.PropertyUtil; + +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.aop.Aspect; + +/** + * ユーザのポイント獲得履歴 + * this class is auto generate and not edit. + * if modify dao method, you can edit PointUserHistoriesDao. + */ +@DI(instance = Instance.Singleton) +public class GenPointUserHistoriesDao extends AbstractDao { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenPointUserHistoriesDao get() { + return Container.getComp(GenPointUserHistoriesDao.class); + } + + /** + * Select all data. + * @return all data + */ + public List physicalSelectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @return all data on limit and offset + */ + public List physicalSelectAllWithPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class, limit, offset); + } + /** + * Select data on key. + * @param historyNo historyNo + * @param userId userId + * @return data + */ + public PointUserHistoriesEntity physicalSelectOnKey(Long historyNo, Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_key.sql"); + return executeQuerySingle(sql, PointUserHistoriesEntity.class, historyNo, userId); + } + /** + * Select all data that not deleted. + * @return all data + */ + public List selectAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @return all data + */ + public List selectAllWidthPager(int limit, int offset) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class, limit, offset); + } + /** + * Select count that not deleted. + * @return count + */ + public Integer selectCountAll() { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_count_all.sql"); + return executeQuerySingle(sql, Integer.class); + } + /** + * Select data that not deleted on key. + * @param historyNo historyNo + * @param userId userId + * @return data + */ + public PointUserHistoriesEntity selectOnKey(Long historyNo, Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_key.sql"); + return executeQuerySingle(sql, PointUserHistoriesEntity.class, historyNo, userId); + } + /** + * Select data that not deleted on HISTORY_NO column. + * @param historyNo historyNo + * @return list + */ + public List selectOnHistoryNo(Long historyNo) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_history_no.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class, historyNo); + } + /** + * Select data that not deleted on USER_ID column. + * @param userId userId + * @return list + */ + public List selectOnUserId(Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_user_id.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class, userId); + } + /** + * Select data on HISTORY_NO column. + * @param historyNo historyNo + * @return list + */ + public List physicalSelectOnHistoryNo(Long historyNo) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_history_no.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class, historyNo); + } + /** + * Select data on USER_ID column. + * @param userId userId + * @return list + */ + public List physicalSelectOnUserId(Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_user_id.sql"); + return executeQueryList(sql, PointUserHistoriesEntity.class, userId); + } + /** + * Count all data + * @return count + */ + public int physicalCountAll() { + String sql = "SELECT COUNT(*) FROM POINT_USER_HISTORIES"; + return executeQuerySingle(sql, Integer.class); + } + /** + * Physical Insert. + * it is not create key on database sequence. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity rawPhysicalInsert(PointUserHistoriesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql"); + executeUpdate(sql, + entity.getHistoryNo(), + entity.getUserId(), + entity.getActivityNo(), + entity.getType(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + return entity; + } + /** + * Physical Insert. + * if key column have sequence, key value create by database. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity physicalInsert(PointUserHistoriesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql"); + executeUpdate(sql, + entity.getHistoryNo(), + entity.getUserId(), + entity.getActivityNo(), + entity.getType(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag()); + return entity; + } + /** + * Insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity insert(Integer user, PointUserHistoriesEntity entity) { + entity.setInsertUser(user); + entity.setInsertDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + entity.setDeleteFlag(0); + return physicalInsert(entity); + } + /** + * Insert. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity insert(PointUserHistoriesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return insert(userId, entity); + } + /** + * Physical Update. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity physicalUpdate(PointUserHistoriesEntity entity) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql"); + executeUpdate(sql, + entity.getActivityNo(), + entity.getType(), + entity.getPoint(), + entity.getInsertUser(), + entity.getInsertDatetime(), + entity.getUpdateUser(), + entity.getUpdateDatetime(), + entity.getDeleteFlag(), + entity.getHistoryNo(), + entity.getUserId()); + return entity; + } + /** + * Update. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity update(Integer user, PointUserHistoriesEntity entity) { + PointUserHistoriesEntity db = selectOnKey(entity.getHistoryNo(), entity.getUserId()); + entity.setInsertUser(db.getInsertUser()); + entity.setInsertDatetime(db.getInsertDatetime()); + entity.setDeleteFlag(db.getDeleteFlag()); + entity.setUpdateUser(user); + entity.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + return physicalUpdate(entity); + } + /** + * Update. + * saved user id is auto set. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity update(PointUserHistoriesEntity entity) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer userId = (Integer) pool.getUser(); + return update(userId, entity); + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * set saved user id. + * @param user saved userid + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity save(Integer user, PointUserHistoriesEntity entity) { + PointUserHistoriesEntity db = selectOnKey(entity.getHistoryNo(), entity.getUserId()); + if (db == null) { + return insert(user, entity); + } else { + return update(user, entity); + } + } + /** + * Save. + * if same key data is exists, the data is update. otherwise the data is insert. + * @param entity entity + * @return saved entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public PointUserHistoriesEntity save(PointUserHistoriesEntity entity) { + PointUserHistoriesEntity db = selectOnKey(entity.getHistoryNo(), entity.getUserId()); + if (db == null) { + return insert(entity); + } else { + return update(entity); + } + } + /** + * Physical Delete. + * @param historyNo historyNo + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(Long historyNo, Integer userId) { + String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_delete.sql"); + executeUpdate(sql, historyNo, userId); + } + /** + * Physical Delete. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void physicalDelete(PointUserHistoriesEntity entity) { + physicalDelete(entity.getHistoryNo(), entity.getUserId()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param historyNo historyNo + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, Long historyNo, Integer userId) { + PointUserHistoriesEntity db = selectOnKey(historyNo, userId); + db.setDeleteFlag(1); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * @param historyNo historyNo + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Long historyNo, Integer userId) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + delete(user, historyNo, userId); + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(Integer user, PointUserHistoriesEntity entity) { + delete(user, entity.getHistoryNo(), entity.getUserId()); + + } + /** + * Delete. + * if delete flag is exists, the data is logical delete. + * set saved user id. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void delete(PointUserHistoriesEntity entity) { + delete(entity.getHistoryNo(), entity.getUserId()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param historyNo historyNo + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, Long historyNo, Integer userId) { + PointUserHistoriesEntity db = physicalSelectOnKey(historyNo, userId); + db.setDeleteFlag(0); + db.setUpdateUser(user); + db.setUpdateDatetime(new Timestamp(new java.util.Date().getTime())); + physicalUpdate(db); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param historyNo historyNo + * @param userId userId + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Long historyNo, Integer userId) { + DBUserPool pool = Container.getComp(DBUserPool.class); + Integer user = (Integer) pool.getUser(); + activation(user, historyNo, userId); + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * set saved user id. + * @param user saved userid + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(Integer user, PointUserHistoriesEntity entity) { + activation(user, entity.getHistoryNo(), entity.getUserId()); + + } + /** + * Ativation. + * if delete flag is exists and delete flag is true, delete flug is false to activate. + * @param entity entity + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void activation(PointUserHistoriesEntity entity) { + activation(entity.getHistoryNo(), entity.getUserId()); + + } + +} diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index 88335c6f0..14cac53d4 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -1,9 +1,23 @@ package org.support.project.knowledge.deploy.v1_11_0; +import java.util.List; + +import org.support.project.aop.Aspect; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.deploy.Migrate; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.logic.activity.Activity; +import org.support.project.knowledge.logic.activity.ActivityLogic; import org.support.project.ormapping.tool.dao.InitializeDao; +import org.support.project.web.bean.LoginedUser; +import org.support.project.web.dao.UsersDao; +import org.support.project.web.entity.UsersEntity; public class Migrate_1_11_2 implements Migrate { + /** ログ */ + private static final Log LOG = LogFactory.getLog(Migrate_1_11_2.class); public static Migrate_1_11_2 get() { return org.support.project.di.Container.getComp(Migrate_1_11_2.class); @@ -17,10 +31,39 @@ public boolean doMigrate() throws Exception { }; initializeDao.initializeDatabase(sqlpaths); + // Knowledgeを登録したイベントによりポイントを集計 + doAddPointByKnowledge(); + + // 参照回数を集計 - // ポイント修正 return true; } + + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void doAddPointByKnowledge() { + // ポイント修正 + LOG.info("Aggregate point by knowledge insert"); + List knowledges; + int offset = 0; + int limit = 50; + do { + knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); + for (KnowledgesEntity knowledge : knowledges) { + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(knowledge.getInsertUser()); + if (account == null) { + LOG.info("insert user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge insert."); + continue; + } + user.setLoginUser(account); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, user, knowledge); + } + offset = offset + limit; + } while (knowledges.size() > 0); + } + } \ No newline at end of file diff --git a/src/main/java/org/support/project/knowledge/entity/PointKnowledgeHistoriesEntity.java b/src/main/java/org/support/project/knowledge/entity/PointKnowledgeHistoriesEntity.java new file mode 100644 index 000000000..02d9d6ed7 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/PointKnowledgeHistoriesEntity.java @@ -0,0 +1,50 @@ +package org.support.project.knowledge.entity; + +import org.support.project.knowledge.entity.gen.GenPointKnowledgeHistoriesEntity; + +import java.util.List; +import java.util.Map; + +import org.support.project.common.bean.ValidateError; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +import java.sql.Timestamp; + + +/** + * ナレッジのポイント獲得履歴 + */ +@DI(instance = Instance.Prototype) +public class PointKnowledgeHistoriesEntity extends GenPointKnowledgeHistoriesEntity { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static PointKnowledgeHistoriesEntity get() { + return Container.getComp(PointKnowledgeHistoriesEntity.class); + } + + /** + * Constructor. + */ + public PointKnowledgeHistoriesEntity() { + super(); + } + + /** + * Constructor + * @param historyNo 履歴番号 + * @param knowledgeId ナレッジID + */ + + public PointKnowledgeHistoriesEntity(Long historyNo, Long knowledgeId) { + super( historyNo, knowledgeId); + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/PointUserHistoriesEntity.java b/src/main/java/org/support/project/knowledge/entity/PointUserHistoriesEntity.java new file mode 100644 index 000000000..47459c8af --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/PointUserHistoriesEntity.java @@ -0,0 +1,50 @@ +package org.support.project.knowledge.entity; + +import org.support.project.knowledge.entity.gen.GenPointUserHistoriesEntity; + +import java.util.List; +import java.util.Map; + +import org.support.project.common.bean.ValidateError; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +import java.sql.Timestamp; + + +/** + * ユーザのポイント獲得履歴 + */ +@DI(instance = Instance.Prototype) +public class PointUserHistoriesEntity extends GenPointUserHistoriesEntity { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static PointUserHistoriesEntity get() { + return Container.getComp(PointUserHistoriesEntity.class); + } + + /** + * Constructor. + */ + public PointUserHistoriesEntity() { + super(); + } + + /** + * Constructor + * @param historyNo 履歴番号 + * @param userId ユーザID + */ + + public PointUserHistoriesEntity(Long historyNo, Integer userId) { + super( historyNo, userId); + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java index 201cbe360..b9e5eb558 100644 --- a/src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenActivitiesEntity.java @@ -42,23 +42,21 @@ public GenActivitiesEntity() { /** * Constructor - * @param no 番号 + * @param activityNo アクティビティ番号 */ - public GenActivitiesEntity(Long no) { + public GenActivitiesEntity(Long activityNo) { super(); - this.no = no; + this.activityNo = activityNo; } - /** 番号 */ - private Long no; - /** ユーザID */ + /** アクティビティ番号 */ + private Long activityNo; + /** イベントをおこしたユーザ */ private Integer userId; - /** 種類 */ - private Integer type; + /** アクティビティの種類 */ + private Integer kind; /** ターゲットID */ - private Long target; - /** 獲得ポイント */ - private Integer point; + private String target; /** 登録ユーザ */ private Integer insertUser; /** 登録日時 */ @@ -71,31 +69,31 @@ public GenActivitiesEntity(Long no) { private Integer deleteFlag; /** - * Get 番号. - * @return 番号 + * Get アクティビティ番号. + * @return アクティビティ番号 */ - public Long getNo() { - return this.no; + public Long getActivityNo() { + return this.activityNo; } /** - * Set 番号. - * @param no 番号 + * Set アクティビティ番号. + * @param activityNo アクティビティ番号 * @return this object */ - public GenActivitiesEntity setNo(Long no) { - this.no = no; + public GenActivitiesEntity setActivityNo(Long activityNo) { + this.activityNo = activityNo; return this; } /** - * Get ユーザID. - * @return ユーザID + * Get イベントをおこしたユーザ. + * @return イベントをおこしたユーザ */ public Integer getUserId() { return this.userId; } /** - * Set ユーザID. - * @param userId ユーザID + * Set イベントをおこしたユーザ. + * @param userId イベントをおこしたユーザ * @return this object */ public GenActivitiesEntity setUserId(Integer userId) { this.userId = userId; @@ -103,18 +101,18 @@ public GenActivitiesEntity setUserId(Integer userId) { } /** - * Get 種類. - * @return 種類 + * Get アクティビティの種類. + * @return アクティビティの種類 */ - public Integer getType() { - return this.type; + public Integer getKind() { + return this.kind; } /** - * Set 種類. - * @param type 種類 + * Set アクティビティの種類. + * @param kind アクティビティの種類 * @return this object */ - public GenActivitiesEntity setType(Integer type) { - this.type = type; + public GenActivitiesEntity setKind(Integer kind) { + this.kind = kind; return this; } @@ -122,34 +120,18 @@ public GenActivitiesEntity setType(Integer type) { * Get ターゲットID. * @return ターゲットID */ - public Long getTarget() { + public String getTarget() { return this.target; } /** * Set ターゲットID. * @param target ターゲットID * @return this object */ - public GenActivitiesEntity setTarget(Long target) { + public GenActivitiesEntity setTarget(String target) { this.target = target; return this; } - /** - * Get 獲得ポイント. - * @return 獲得ポイント - */ - public Integer getPoint() { - return this.point; - } - /** - * Set 獲得ポイント. - * @param point 獲得ポイント - * @return this object */ - public GenActivitiesEntity setPoint(Integer point) { - this.point = point; - return this; - } - /** * Get 登録ユーザ. * @return 登録ユーザ @@ -236,15 +218,15 @@ public GenActivitiesEntity setDeleteFlag(Integer deleteFlag) { */ public Object[] getKeyValues() { Object[] keyValues = new Object[1]; - keyValues[0] = this.no; + keyValues[0] = this.activityNo; return keyValues; } /** * Set key values - * @param no 番号 + * @param activityNo アクティビティ番号 */ - public void setKeyValues(Long no) { - this.no = no; + public void setKeyValues(Long activityNo) { + this.activityNo = activityNo; } /** * compare on key @@ -278,11 +260,10 @@ public boolean equalsOnKey(GenActivitiesEntity entity) { */ public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("no = ").append(no).append("\n"); + builder.append("activityNo = ").append(activityNo).append("\n"); builder.append("userId = ").append(userId).append("\n"); - builder.append("type = ").append(type).append("\n"); + builder.append("kind = ").append(kind).append("\n"); builder.append("target = ").append(target).append("\n"); - builder.append("point = ").append(point).append("\n"); builder.append("insertUser = ").append(insertUser).append("\n"); builder.append("insertDatetime = ").append(insertDatetime).append("\n"); builder.append("updateUser = ").append(updateUser).append("\n"); @@ -317,12 +298,12 @@ public List validate() { errors.add(error); } validator = ValidatorFactory.getInstance(Validator.REQUIRED); - error = validator.validate(this.type, convLabelName("Type")); + error = validator.validate(this.kind, convLabelName("Kind")); if (error != null) { errors.add(error); } validator = ValidatorFactory.getInstance(Validator.INTEGER); - error = validator.validate(this.type, convLabelName("Type")); + error = validator.validate(this.kind, convLabelName("Kind")); if (error != null) { errors.add(error); } @@ -331,13 +312,8 @@ public List validate() { if (error != null) { errors.add(error); } - validator = ValidatorFactory.getInstance(Validator.REQUIRED); - error = validator.validate(this.point, convLabelName("Point")); - if (error != null) { - errors.add(error); - } - validator = ValidatorFactory.getInstance(Validator.INTEGER); - error = validator.validate(this.point, convLabelName("Point")); + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(this.target, convLabelName("Target"), 64); if (error != null) { errors.add(error); } @@ -378,12 +354,12 @@ public List validate(Map values) { errors.add(error); } validator = ValidatorFactory.getInstance(Validator.REQUIRED); - error = validator.validate(values.get("type"), convLabelName("Type")); + error = validator.validate(values.get("kind"), convLabelName("Kind")); if (error != null) { errors.add(error); } validator = ValidatorFactory.getInstance(Validator.INTEGER); - error = validator.validate(values.get("type"), convLabelName("Type")); + error = validator.validate(values.get("kind"), convLabelName("Kind")); if (error != null) { errors.add(error); } @@ -392,13 +368,8 @@ public List validate(Map values) { if (error != null) { errors.add(error); } - validator = ValidatorFactory.getInstance(Validator.REQUIRED); - error = validator.validate(values.get("point"), convLabelName("Point")); - if (error != null) { - errors.add(error); - } - validator = ValidatorFactory.getInstance(Validator.INTEGER); - error = validator.validate(values.get("point"), convLabelName("Point")); + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(values.get("target"), convLabelName("Target"), 64); if (error != null) { errors.add(error); } diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java index d1ac98afb..8029db0ca 100644 --- a/src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenBadgesEntity.java @@ -57,8 +57,10 @@ public GenBadgesEntity(Integer no) { private String displayText; /** 説明 */ private String description; - /** 画像の種類 */ - private Integer imageCategory; + /** 画像 */ + private String image; + /** 獲得ポイント */ + private Integer point; /** 登録ユーザ */ private Integer insertUser; /** 登録日時 */ @@ -135,18 +137,34 @@ public GenBadgesEntity setDescription(String description) { } /** - * Get 画像の種類. - * @return 画像の種類 + * Get 画像. + * @return 画像 */ - public Integer getImageCategory() { - return this.imageCategory; + public String getImage() { + return this.image; } /** - * Set 画像の種類. - * @param imageCategory 画像の種類 + * Set 画像. + * @param image 画像 * @return this object */ - public GenBadgesEntity setImageCategory(Integer imageCategory) { - this.imageCategory = imageCategory; + public GenBadgesEntity setImage(String image) { + this.image = image; + return this; + } + + /** + * Get 獲得ポイント. + * @return 獲得ポイント + */ + public Integer getPoint() { + return this.point; + } + /** + * Set 獲得ポイント. + * @param point 獲得ポイント + * @return this object */ + public GenBadgesEntity setPoint(Integer point) { + this.point = point; return this; } @@ -282,7 +300,8 @@ public String toString() { builder.append("name = ").append(name).append("\n"); builder.append("displayText = ").append(displayText).append("\n"); builder.append("description = ").append(description).append("\n"); - builder.append("imageCategory = ").append(imageCategory).append("\n"); + builder.append("image = ").append(image).append("\n"); + builder.append("point = ").append(point).append("\n"); builder.append("insertUser = ").append(insertUser).append("\n"); builder.append("insertDatetime = ").append(insertDatetime).append("\n"); builder.append("updateUser = ").append(updateUser).append("\n"); @@ -331,8 +350,13 @@ public List validate() { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(this.image, convLabelName("Image"), 64); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); - error = validator.validate(this.imageCategory, convLabelName("Image Category")); + error = validator.validate(this.point, convLabelName("Point")); if (error != null) { errors.add(error); } @@ -387,8 +411,13 @@ public List validate(Map values) { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.MAX_LENGTH); + error = validator.validate(values.get("image"), convLabelName("Image"), 64); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); - error = validator.validate(values.get("imageCategory"), convLabelName("Image Category")); + error = validator.validate(values.get("point"), convLabelName("Point")); if (error != null) { errors.add(error); } diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenPointKnowledgeHistoriesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenPointKnowledgeHistoriesEntity.java new file mode 100644 index 000000000..4edb02c74 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenPointKnowledgeHistoriesEntity.java @@ -0,0 +1,428 @@ +package org.support.project.knowledge.entity.gen; + +import java.io.Serializable; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; + +import java.sql.Timestamp; + + + +import org.support.project.common.bean.ValidateError; +import org.support.project.common.validate.Validator; +import org.support.project.common.validate.ValidatorFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +/** + * ナレッジのポイント獲得履歴 + */ +@DI(instance = Instance.Prototype) +public class GenPointKnowledgeHistoriesEntity implements Serializable { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenPointKnowledgeHistoriesEntity get() { + return Container.getComp(GenPointKnowledgeHistoriesEntity.class); + } + + /** + * Constructor. + */ + public GenPointKnowledgeHistoriesEntity() { + super(); + } + + /** + * Constructor + * @param historyNo 履歴番号 + * @param knowledgeId ナレッジID + */ + + public GenPointKnowledgeHistoriesEntity(Long historyNo, Long knowledgeId) { + super(); + this.historyNo = historyNo; + this.knowledgeId = knowledgeId; + } + /** ナレッジID */ + private Long knowledgeId; + /** 履歴番号 */ + private Long historyNo; + /** アクティビティ番号 */ + private Long activityNo; + /** 獲得のタイプ */ + private Integer type; + /** 獲得ポイント */ + private Integer point; + /** 登録ユーザ */ + private Integer insertUser; + /** 登録日時 */ + private Timestamp insertDatetime; + /** 更新ユーザ */ + private Integer updateUser; + /** 更新日時 */ + private Timestamp updateDatetime; + /** 削除フラグ */ + private Integer deleteFlag; + + /** + * Get ナレッジID. + * @return ナレッジID + */ + public Long getKnowledgeId() { + return this.knowledgeId; + } + /** + * Set ナレッジID. + * @param knowledgeId ナレッジID + * @return this object */ + public GenPointKnowledgeHistoriesEntity setKnowledgeId(Long knowledgeId) { + this.knowledgeId = knowledgeId; + return this; + } + + /** + * Get 履歴番号. + * @return 履歴番号 + */ + public Long getHistoryNo() { + return this.historyNo; + } + /** + * Set 履歴番号. + * @param historyNo 履歴番号 + * @return this object */ + public GenPointKnowledgeHistoriesEntity setHistoryNo(Long historyNo) { + this.historyNo = historyNo; + return this; + } + + /** + * Get アクティビティ番号. + * @return アクティビティ番号 + */ + public Long getActivityNo() { + return this.activityNo; + } + /** + * Set アクティビティ番号. + * @param activityNo アクティビティ番号 + * @return this object */ + public GenPointKnowledgeHistoriesEntity setActivityNo(Long activityNo) { + this.activityNo = activityNo; + return this; + } + + /** + * Get 獲得のタイプ. + * @return 獲得のタイプ + */ + public Integer getType() { + return this.type; + } + /** + * Set 獲得のタイプ. + * @param type 獲得のタイプ + * @return this object */ + public GenPointKnowledgeHistoriesEntity setType(Integer type) { + this.type = type; + return this; + } + + /** + * Get 獲得ポイント. + * @return 獲得ポイント + */ + public Integer getPoint() { + return this.point; + } + /** + * Set 獲得ポイント. + * @param point 獲得ポイント + * @return this object */ + public GenPointKnowledgeHistoriesEntity setPoint(Integer point) { + this.point = point; + return this; + } + + /** + * Get 登録ユーザ. + * @return 登録ユーザ + */ + public Integer getInsertUser() { + return this.insertUser; + } + /** + * Set 登録ユーザ. + * @param insertUser 登録ユーザ + * @return this object */ + public GenPointKnowledgeHistoriesEntity setInsertUser(Integer insertUser) { + this.insertUser = insertUser; + return this; + } + + /** + * Get 登録日時. + * @return 登録日時 + */ + public Timestamp getInsertDatetime() { + return this.insertDatetime; + } + /** + * Set 登録日時. + * @param insertDatetime 登録日時 + * @return this object */ + public GenPointKnowledgeHistoriesEntity setInsertDatetime(Timestamp insertDatetime) { + this.insertDatetime = insertDatetime; + return this; + } + + /** + * Get 更新ユーザ. + * @return 更新ユーザ + */ + public Integer getUpdateUser() { + return this.updateUser; + } + /** + * Set 更新ユーザ. + * @param updateUser 更新ユーザ + * @return this object */ + public GenPointKnowledgeHistoriesEntity setUpdateUser(Integer updateUser) { + this.updateUser = updateUser; + return this; + } + + /** + * Get 更新日時. + * @return 更新日時 + */ + public Timestamp getUpdateDatetime() { + return this.updateDatetime; + } + /** + * Set 更新日時. + * @param updateDatetime 更新日時 + * @return this object */ + public GenPointKnowledgeHistoriesEntity setUpdateDatetime(Timestamp updateDatetime) { + this.updateDatetime = updateDatetime; + return this; + } + + /** + * Get 削除フラグ. + * @return 削除フラグ + */ + public Integer getDeleteFlag() { + return this.deleteFlag; + } + /** + * Set 削除フラグ. + * @param deleteFlag 削除フラグ + * @return this object */ + public GenPointKnowledgeHistoriesEntity setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + return this; + } + + /** + * Get key values + * @return values + */ + public Object[] getKeyValues() { + Object[] keyValues = new Object[2]; + keyValues[0] = this.historyNo; + keyValues[1] = this.knowledgeId; + return keyValues; + } + /** + * Set key values + * @param historyNo 履歴番号 + * @param knowledgeId ナレッジID + */ + public void setKeyValues(Long historyNo, Long knowledgeId) { + this.historyNo = historyNo; + this.knowledgeId = knowledgeId; + } + /** + * compare on key + * @param entity entity + * @return result + */ + public boolean equalsOnKey(GenPointKnowledgeHistoriesEntity entity) { + Object[] keyValues1 = getKeyValues(); + Object[] keyValues2 = entity.getKeyValues(); + for (int i = 0; i < keyValues1.length; i++) { + Object val1 = keyValues1[i]; + Object val2 = keyValues2[i]; + if (val1 == null && val2 != null) { + return false; + } + if (val1 != null && val2 == null) { + return false; + } + if (val1 != null && val2 != null) { + if (!val1.equals(val2)) { + return false; + } + } + + } + return true; + } + /** + * ToString + * @return string + */ + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("historyNo = ").append(historyNo).append("\n"); + builder.append("knowledgeId = ").append(knowledgeId).append("\n"); + builder.append("activityNo = ").append(activityNo).append("\n"); + builder.append("type = ").append(type).append("\n"); + builder.append("point = ").append(point).append("\n"); + builder.append("insertUser = ").append(insertUser).append("\n"); + builder.append("insertDatetime = ").append(insertDatetime).append("\n"); + builder.append("updateUser = ").append(updateUser).append("\n"); + builder.append("updateDatetime = ").append(updateDatetime).append("\n"); + builder.append("deleteFlag = ").append(deleteFlag).append("\n"); + return builder.toString(); + } + /** + * Convert label to display + * @param label label + * @return convert label + */ + protected String convLabelName(String label) { + return label; + } + /** + * validate + * @return validate error list + */ + public List validate() { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.knowledgeId, convLabelName("Knowledge Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.historyNo, convLabelName("History No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.activityNo, convLabelName("Activity No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.type, convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.type, convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.insertUser, convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.updateUser, convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.deleteFlag, convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + /** + * validate + * @param values value map + * @return validate error list + */ + public List validate(Map values) { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("knowledgeId"), convLabelName("Knowledge Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("historyNo"), convLabelName("History No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("activityNo"), convLabelName("Activity No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("type"), convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("type"), convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("updateUser"), convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("deleteFlag"), convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + +} diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java new file mode 100644 index 000000000..66af41553 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java @@ -0,0 +1,428 @@ +package org.support.project.knowledge.entity.gen; + +import java.io.Serializable; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; + +import java.sql.Timestamp; + + + +import org.support.project.common.bean.ValidateError; +import org.support.project.common.validate.Validator; +import org.support.project.common.validate.ValidatorFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +/** + * ユーザのポイント獲得履歴 + */ +@DI(instance = Instance.Prototype) +public class GenPointUserHistoriesEntity implements Serializable { + + /** SerialVersion */ + private static final long serialVersionUID = 1L; + + /** + * Get instance from DI container. + * @return instance + */ + public static GenPointUserHistoriesEntity get() { + return Container.getComp(GenPointUserHistoriesEntity.class); + } + + /** + * Constructor. + */ + public GenPointUserHistoriesEntity() { + super(); + } + + /** + * Constructor + * @param historyNo 履歴番号 + * @param userId ユーザID + */ + + public GenPointUserHistoriesEntity(Long historyNo, Integer userId) { + super(); + this.historyNo = historyNo; + this.userId = userId; + } + /** ユーザID */ + private Integer userId; + /** 履歴番号 */ + private Long historyNo; + /** アクティビティ番号 */ + private Long activityNo; + /** 獲得のタイプ */ + private Integer type; + /** 獲得ポイント */ + private Integer point; + /** 登録ユーザ */ + private Integer insertUser; + /** 登録日時 */ + private Timestamp insertDatetime; + /** 更新ユーザ */ + private Integer updateUser; + /** 更新日時 */ + private Timestamp updateDatetime; + /** 削除フラグ */ + private Integer deleteFlag; + + /** + * Get ユーザID. + * @return ユーザID + */ + public Integer getUserId() { + return this.userId; + } + /** + * Set ユーザID. + * @param userId ユーザID + * @return this object */ + public GenPointUserHistoriesEntity setUserId(Integer userId) { + this.userId = userId; + return this; + } + + /** + * Get 履歴番号. + * @return 履歴番号 + */ + public Long getHistoryNo() { + return this.historyNo; + } + /** + * Set 履歴番号. + * @param historyNo 履歴番号 + * @return this object */ + public GenPointUserHistoriesEntity setHistoryNo(Long historyNo) { + this.historyNo = historyNo; + return this; + } + + /** + * Get アクティビティ番号. + * @return アクティビティ番号 + */ + public Long getActivityNo() { + return this.activityNo; + } + /** + * Set アクティビティ番号. + * @param activityNo アクティビティ番号 + * @return this object */ + public GenPointUserHistoriesEntity setActivityNo(Long activityNo) { + this.activityNo = activityNo; + return this; + } + + /** + * Get 獲得のタイプ. + * @return 獲得のタイプ + */ + public Integer getType() { + return this.type; + } + /** + * Set 獲得のタイプ. + * @param type 獲得のタイプ + * @return this object */ + public GenPointUserHistoriesEntity setType(Integer type) { + this.type = type; + return this; + } + + /** + * Get 獲得ポイント. + * @return 獲得ポイント + */ + public Integer getPoint() { + return this.point; + } + /** + * Set 獲得ポイント. + * @param point 獲得ポイント + * @return this object */ + public GenPointUserHistoriesEntity setPoint(Integer point) { + this.point = point; + return this; + } + + /** + * Get 登録ユーザ. + * @return 登録ユーザ + */ + public Integer getInsertUser() { + return this.insertUser; + } + /** + * Set 登録ユーザ. + * @param insertUser 登録ユーザ + * @return this object */ + public GenPointUserHistoriesEntity setInsertUser(Integer insertUser) { + this.insertUser = insertUser; + return this; + } + + /** + * Get 登録日時. + * @return 登録日時 + */ + public Timestamp getInsertDatetime() { + return this.insertDatetime; + } + /** + * Set 登録日時. + * @param insertDatetime 登録日時 + * @return this object */ + public GenPointUserHistoriesEntity setInsertDatetime(Timestamp insertDatetime) { + this.insertDatetime = insertDatetime; + return this; + } + + /** + * Get 更新ユーザ. + * @return 更新ユーザ + */ + public Integer getUpdateUser() { + return this.updateUser; + } + /** + * Set 更新ユーザ. + * @param updateUser 更新ユーザ + * @return this object */ + public GenPointUserHistoriesEntity setUpdateUser(Integer updateUser) { + this.updateUser = updateUser; + return this; + } + + /** + * Get 更新日時. + * @return 更新日時 + */ + public Timestamp getUpdateDatetime() { + return this.updateDatetime; + } + /** + * Set 更新日時. + * @param updateDatetime 更新日時 + * @return this object */ + public GenPointUserHistoriesEntity setUpdateDatetime(Timestamp updateDatetime) { + this.updateDatetime = updateDatetime; + return this; + } + + /** + * Get 削除フラグ. + * @return 削除フラグ + */ + public Integer getDeleteFlag() { + return this.deleteFlag; + } + /** + * Set 削除フラグ. + * @param deleteFlag 削除フラグ + * @return this object */ + public GenPointUserHistoriesEntity setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + return this; + } + + /** + * Get key values + * @return values + */ + public Object[] getKeyValues() { + Object[] keyValues = new Object[2]; + keyValues[0] = this.historyNo; + keyValues[1] = this.userId; + return keyValues; + } + /** + * Set key values + * @param historyNo 履歴番号 + * @param userId ユーザID + */ + public void setKeyValues(Long historyNo, Integer userId) { + this.historyNo = historyNo; + this.userId = userId; + } + /** + * compare on key + * @param entity entity + * @return result + */ + public boolean equalsOnKey(GenPointUserHistoriesEntity entity) { + Object[] keyValues1 = getKeyValues(); + Object[] keyValues2 = entity.getKeyValues(); + for (int i = 0; i < keyValues1.length; i++) { + Object val1 = keyValues1[i]; + Object val2 = keyValues2[i]; + if (val1 == null && val2 != null) { + return false; + } + if (val1 != null && val2 == null) { + return false; + } + if (val1 != null && val2 != null) { + if (!val1.equals(val2)) { + return false; + } + } + + } + return true; + } + /** + * ToString + * @return string + */ + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("historyNo = ").append(historyNo).append("\n"); + builder.append("userId = ").append(userId).append("\n"); + builder.append("activityNo = ").append(activityNo).append("\n"); + builder.append("type = ").append(type).append("\n"); + builder.append("point = ").append(point).append("\n"); + builder.append("insertUser = ").append(insertUser).append("\n"); + builder.append("insertDatetime = ").append(insertDatetime).append("\n"); + builder.append("updateUser = ").append(updateUser).append("\n"); + builder.append("updateDatetime = ").append(updateDatetime).append("\n"); + builder.append("deleteFlag = ").append(deleteFlag).append("\n"); + return builder.toString(); + } + /** + * Convert label to display + * @param label label + * @return convert label + */ + protected String convLabelName(String label) { + return label; + } + /** + * validate + * @return validate error list + */ + public List validate() { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.userId, convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.userId, convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.historyNo, convLabelName("History No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.activityNo, convLabelName("Activity No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.type, convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.type, convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.insertUser, convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.updateUser, convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.deleteFlag, convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + /** + * validate + * @param values value map + * @return validate error list + */ + public List validate(Map values) { + List errors = new ArrayList<>(); + Validator validator; + ValidateError error; + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("userId"), convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("userId"), convLabelName("User Id")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("historyNo"), convLabelName("History No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("activityNo"), convLabelName("Activity No")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("type"), convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("type"), convLabelName("Type")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("updateUser"), convLabelName("Update User")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("deleteFlag"), convLabelName("Delete Flag")); + if (error != null) { + errors.add(error); + } + return errors; + } + +} diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java new file mode 100644 index 000000000..2c98f441a --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java @@ -0,0 +1,151 @@ +package org.support.project.knowledge.logic.activity; + + +import java.sql.Timestamp; + +import org.support.project.common.config.INT_FLAG; +import org.support.project.common.util.StringUtils; +import org.support.project.knowledge.config.AppConfig; +import org.support.project.knowledge.config.UserConfig; +import org.support.project.knowledge.dao.ActivitiesDao; +import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.dao.PointKnowledgeHistoriesDao; +import org.support.project.knowledge.dao.PointUserHistoriesDao; +import org.support.project.knowledge.entity.ActivitiesEntity; +import org.support.project.knowledge.entity.PointKnowledgeHistoriesEntity; +import org.support.project.knowledge.entity.PointUserHistoriesEntity; +import org.support.project.web.bean.LoginedUser; +import org.support.project.web.dao.UserConfigsDao; +import org.support.project.web.entity.UserConfigsEntity; + +/** + * Activityに対応して、ポイントを付与する + * + * @author koda + */ +public abstract class AbstractActivityProcessor implements ActivityProcessor { + private static Object lockUser = new Object(); + private static Object lockKnowledge = new Object(); + + private LoginedUser user; + /** + * @return the user + */ + public LoginedUser getUser() { + return user; + } + /** + * @param user the user to set + */ + public void setUser(LoginedUser user) { + this.user = user; + } + /** + * 対象のactivityが既に登録されているかチェック + * @param userId アクティビティを実行したユーザ + * @param kind アクティビティの種類 + * @param target そのアクティビティでポイントを付与する対象 + * @return + */ + protected boolean isExistsActivity(int userId, Activity kind, String target) { + ActivitiesEntity entity = ActivitiesDao.get().select(userId, kind.getValue(), target); + if (entity == null) { + return false; + } + return true; + } + + /** + * activity登録 + * @param userId アクティビティを実行したユーザ + * @param kind アクティビティの種類 + * @param target そのアクティビティでポイントを付与する対象 + * @param eventTime そのアクティビティが実行されたタイミング + */ + protected ActivitiesEntity addActivity(int userId, Activity kind, String target, Timestamp eventTime) { + ActivitiesEntity entity = new ActivitiesEntity(); + entity.setUserId(userId); + entity.setKind(kind.getValue()); + entity.setTarget(target); + entity.setInsertUser(userId); + entity.setInsertDatetime(eventTime); + entity.setDeleteFlag(INT_FLAG.OFF.getValue()); + entity = ActivitiesDao.get().physicalInsert(entity); + return entity; + } + + /** + * ポイントをユーザに加算 + * @param eventUser + * @param eventTime + * @param targetUser + * @param activityNo + * @param type + * @param point + * @return + */ + protected int addPointForUser(int eventUser, Timestamp eventTime, int targetUser, long activityNo, int type, int point) { + synchronized(lockUser) { + long num = PointUserHistoriesDao.get().selectNumOnUser(targetUser); + num++; + PointUserHistoriesEntity history = new PointUserHistoriesEntity(); + history.setUserId(targetUser); + history.setHistoryNo(num); + history.setActivityNo(activityNo); + history.setType(type); + history.setPoint(point); + history.setInsertUser(eventUser); + history.setInsertDatetime(eventTime); + history.setDeleteFlag(INT_FLAG.OFF.getValue()); + PointUserHistoriesDao.get().physicalInsert(history); + + UserConfigsEntity config = UserConfigsDao.get().selectOnKey(UserConfig.POINT, AppConfig.get().getSystemName(), targetUser); + if (config == null) { + config = new UserConfigsEntity(UserConfig.POINT, AppConfig.get().getSystemName(), targetUser); + config.setConfigValue("0"); + } + if (!StringUtils.isInteger(config.getConfigValue())) { + config.setConfigValue("0"); + } + + int now = Integer.parseInt(config.getConfigValue()); + now = now + point; + config.setConfigValue(String.valueOf(now)); + UserConfigsDao.get().save(config); + return now; + } + } + /** + * 記事にポイントを加算 + * @param eventUser + * @param eventTime + * @param knowledgeId + * @param activityNo + * @param type + * @param point + * @return + */ + protected int addPointForKnowledge(int eventUser, Timestamp eventTime, long knowledgeId, long activityNo, int type, int point) { + synchronized (lockKnowledge) { + long num = PointKnowledgeHistoriesDao.get().selectNumOnKnowledge(knowledgeId); + num++; + PointKnowledgeHistoriesEntity history = new PointKnowledgeHistoriesEntity(); + history.setKnowledgeId(knowledgeId); + history.setHistoryNo(num); + history.setActivityNo(activityNo); + history.setType(type); + history.setPoint(point); + history.setInsertUser(eventUser); + history.setInsertDatetime(eventTime); + history.setDeleteFlag(INT_FLAG.OFF.getValue()); + PointKnowledgeHistoriesDao.get().physicalInsert(history); + + // Daoのupdateメソッドなどを使うと、「更新者」が更新されるので、ポイントのみを更新するメソッドを呼ぶ + // なお、記事の存在チェックは行わない + int now = KnowledgesDao.get().selectPoint(knowledgeId); + now = now + point; + KnowledgesDao.get().updatePoint(knowledgeId, point); + return now; + } + } +} diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java new file mode 100644 index 000000000..2ecf4f345 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java @@ -0,0 +1,19 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.knowledge.entity.CommentsEntity; + +public abstract class AbstractAddPointForCommentProcessor extends AbstractActivityProcessor { + private CommentsEntity comment; + /** + * @return the comment + */ + public CommentsEntity getComment() { + return comment; + } + /** + * @param comment the comment to set + */ + public void setComment(CommentsEntity comment) { + this.comment = comment; + } +} diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java new file mode 100644 index 000000000..5992aeed6 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java @@ -0,0 +1,19 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.knowledge.entity.KnowledgesEntity; + +public abstract class AbstractAddPointForKnowledgeProcessor extends AbstractActivityProcessor { + private KnowledgesEntity knowledge; + /** + * @return the knowledge + */ + public KnowledgesEntity getKnowledge() { + return knowledge; + } + /** + * @param knowledge the knowledge to set + */ + public void setKnowledge(KnowledgesEntity knowledge) { + this.knowledge = knowledge; + } +} diff --git a/src/main/java/org/support/project/knowledge/logic/activity/Activity.java b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java new file mode 100644 index 000000000..95127e871 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java @@ -0,0 +1,112 @@ +package org.support.project.knowledge.logic.activity; + +/** + * ポイントが増減するアクティビティの種類 + * + * 種類 | ターゲット文字列 | イベントの内容 + * 1 | knowledge_id | 記事を登録 + * 2 | knowledge_id | 記事参照 + * 3 | knowledge_id | 記事へイイネを登録 + * 4 | knowledge_id | 記事をストック + * 5 | knowledge_id | アンケート回答 + * 6 | knowledge_id | イベント参加 + * 101 | comment_no | コメント登録 + * 102 | comment_no | コメントにイイネ登録 + * -6 | knowledge_id | イベント参加の取り消し + * + * --------------------------------------------------------------------------- + * + * ポイント操作 + * + * 種類 | 獲得のタイプ | ポイント付与先 | ポイント | 獲得タイプの意味 + * 1 | 11 | 記事登録者 | 50 | 記事を投稿したら投稿者にポイント追加 + * 1 | 12 | 記事 | 50 | 登録された記事のポイント初期値 + * 2 | 21 | 参照者 | 1 | 記事を参照するアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) + * 2 | 22 | 記事登録者 | 1 | 自分が登録された記事が参照されたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 2 | 23 | 記事 | 1 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 3 | 31 | 参照者 | 2 | 記事にイイネのアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) + * 3 | 32 | 記事登録者 | 10 | 自分が登録された記事にイイネがついたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 3 | 33 | 記事 | 10 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 4 | 41 | 参照者 | 0 | ストックした場合、ストックした人にポイントは付与しない + * 4 | 42 | 記事登録者 | 2 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 4 | 43 | 記事 | 2 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 5 | 51 | 参照者 | 3 | アンケート回答者にポイント付与 + * 5 | 52 | 記事登録者 | 3 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 5 | 53 | 記事 | 3 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 6 | 61 | 参照者 | 5 | イベント参加者にポイント付与 + * 6 | 62 | 記事登録者 | 5 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 6 | 63 | 記事 | 5 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 101 | 1011 | 登録者 | 20 | コメントを投稿すると、投稿者にポイント追加 + * 101 | 1012 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 + * 102 | 1021 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 + * 102 | 1022 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く + * 102 | 1023 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 + * -6 | -61 | 参照者 | 5 | イベント参加者にポイント付与(取り消しなのでマイナス) + * -6 | -62 | 記事登録者 | 5 | 記事の登録者にポイント追加(取り消しなのでマイナス) + * -6 | -63 | 記事 | 5 | 記事のポイントが追加(取り消しなのでマイナス) + * + * ユーザのポイントは、USER_CONFIGSテーブルへ格納する + * ポイントはランダムで少し増減した方が面白い?? + * + * @author koda + */ +public enum Activity { + NONE, + KNOWLEDGE_INSERT, // 記事登録 + KNOWLEDGE_SHOW, // 記事参照 + KNOWLEDGE_LIKE, // イイネを押した + KNOWLEDGE_STOCK, // ストックした + KNOWLEDGE_SURVEY, // アンケートに回答した + KNOWLEDGE_EVENT_ADD, // イベントに参加した + KNOWLEDGE_EVENT_DELETE, // イベント参加キャンセル + KNOWLEDGE_COMMENT_ADD, // コメント追加 + KNOWLEDGE_COMMENT_LIKE; // コメントにイイネを押した + + public int getValue() { + if (this == KNOWLEDGE_INSERT) { + return 1; + } else if (this ==KNOWLEDGE_SHOW) { + return 2; + } else if (this ==KNOWLEDGE_LIKE) { + return 3; + } else if (this ==KNOWLEDGE_STOCK) { + return 4; + } else if (this ==KNOWLEDGE_SURVEY) { + return 5; + } else if (this ==KNOWLEDGE_EVENT_ADD) { + return 6; + } else if (this ==KNOWLEDGE_EVENT_DELETE) { + return -6; + } else if (this ==KNOWLEDGE_COMMENT_ADD) { + return 101; + } else if (this ==KNOWLEDGE_COMMENT_LIKE) { + return 102; + } + return Integer.MIN_VALUE; + } + + public static Activity getType(int type) { + if (type == 1) { + return KNOWLEDGE_INSERT; + } else if (type == 2) { + return KNOWLEDGE_SHOW; + } else if (type == 3) { + return KNOWLEDGE_LIKE; + } else if (type == 4) { + return KNOWLEDGE_STOCK; + } else if (type == 5) { + return KNOWLEDGE_SURVEY; + } else if (type == 6) { + return KNOWLEDGE_EVENT_ADD; + } else if (type == -6) { + return KNOWLEDGE_EVENT_DELETE; + } else if (type == 101) { + return KNOWLEDGE_COMMENT_ADD; + } else if (type == 102) { + return KNOWLEDGE_COMMENT_LIKE; + } + return NONE; + } + +} + diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java new file mode 100644 index 000000000..c6f792147 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java @@ -0,0 +1,79 @@ +package org.support.project.knowledge.logic.activity; + +import java.util.ArrayList; +import java.util.List; + +import org.support.project.aop.Aspect; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.entity.CommentsEntity; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.web.bean.LoginedUser; + +@DI(instance = Instance.Singleton) +public class ActivityLogic { + /** ログ */ + private static final Log LOG = LogFactory.getLog(ActivityLogic.class); + + public static ActivityLogic get() { + return Container.getComp(ActivityLogic.class); + } + + private List getActivityProcessors(Activity activity) { + List array = new ArrayList<>(); + if (activity == Activity.KNOWLEDGE_INSERT) { + array.add(KnowledgeInsertActivity.get()); + } + + + return array; + } + private void execute(Activity activity, LoginedUser user, KnowledgesEntity knowledge, CommentsEntity comment) { + List processors = this.getActivityProcessors(activity); + for (ActivityProcessor activityProcessor : processors) { + if (activityProcessor instanceof AbstractActivityProcessor) { + AbstractActivityProcessor processor = (AbstractActivityProcessor) activityProcessor; + processor.setUser(user); + } + if (activityProcessor instanceof AbstractAddPointForKnowledgeProcessor) { + if (knowledge == null) { + LOG.warn("bad parameter [knowledge]"); + continue; + } + AbstractAddPointForKnowledgeProcessor processor = (AbstractAddPointForKnowledgeProcessor) activityProcessor; + processor.setKnowledge(knowledge); + } else if (activityProcessor instanceof AbstractAddPointForCommentProcessor) { + if (knowledge == null) { + LOG.warn("bad parameter [comment]"); + continue; + } + AbstractAddPointForCommentProcessor processor = (AbstractAddPointForCommentProcessor) activityProcessor; + processor.setComment(comment); + } + try { + activityProcessor.execute(); + } catch (Exception e) { + // Activity処理は失敗しても、いったん無視する + LOG.error("error", e); + } + } + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void processActivity(Activity activity, LoginedUser user) { + execute(activity, user, null, null); + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void processActivity(Activity activity, LoginedUser user, KnowledgesEntity knowledge) { + execute(activity, user, knowledge, null); + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void processActivity(Activity activity, LoginedUser user, CommentsEntity comment) { + execute(activity, user, null, comment); + } +} diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java new file mode 100644 index 000000000..8641ba757 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java @@ -0,0 +1,36 @@ +package org.support.project.knowledge.logic.activity; + +public interface ActivityProcessor { + /* + * 種類 | 獲得のタイプ | ポイント付与先 | ポイント | 獲得タイプの意味 + * 1 | 11 | 記事登録者 | 50 | 記事を投稿したら投稿者にポイント追加 + * 1 | 12 | 記事 | 50 | 登録された記事のポイント初期値 + * 2 | 21 | 参照者 | 1 | 記事を参照するアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) + * 2 | 22 | 記事登録者 | 1 | 自分が登録された記事が参照されたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 2 | 23 | 記事 | 1 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 3 | 31 | 参照者 | 2 | 記事にイイネのアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) + * 3 | 32 | 記事登録者 | 10 | 自分が登録された記事にイイネがついたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 3 | 33 | 記事 | 10 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 4 | 41 | 参照者 | 0 | ストックした場合、ストックした人にポイントは付与しない + * 4 | 42 | 記事登録者 | 2 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 4 | 43 | 記事 | 2 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 5 | 51 | 参照者 | 3 | アンケート回答者にポイント付与 + * 5 | 52 | 記事登録者 | 3 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 5 | 53 | 記事 | 3 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 6 | 61 | 参照者 | 5 | イベント参加者にポイント付与 + * 6 | 62 | 記事登録者 | 5 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 6 | 63 | 記事 | 5 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * 101 | 1011 | 登録者 | 20 | コメントを投稿すると、投稿者にポイント追加 + * 101 | 1012 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 + * 102 | 1021 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 + * 102 | 1022 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く + * 102 | 1023 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 + * -6 | -61 | 参照者 | 5 | イベント参加者にポイント付与(取り消しなのでマイナス) + * -6 | -62 | 記事登録者 | 5 | 記事の登録者にポイント追加(取り消しなのでマイナス) + * -6 | -63 | 記事 | 5 | 記事のポイントが追加(取り消しなのでマイナス) * + */ + public static final int TYPE_KNOWLEDGE_DO_INSERT = 11; + public static final int TYPE_KNOWLEDGE_INSERTED = 12; + + void execute() throws Exception; +} diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java new file mode 100644 index 000000000..3afde96ab --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java @@ -0,0 +1,63 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.entity.ActivitiesEntity; + +/** + * ナレッジ登録時のポイント付与 + * + * 種類 | 獲得のタイプ | ポイント付与先 | ポイント | 獲得タイプの意味 + * 1 | 11 | 記事登録者 | 50 | 記事を投稿したら投稿者にポイント追加 + * 1 | 12 | 記事 | 50 | 登録された記事のポイント初期値 + * @author koda + */ +@DI(instance = Instance.Prototype) +public class KnowledgeInsertActivity extends AbstractAddPointForKnowledgeProcessor { + private static final Log LOG = LogFactory.getLog(KnowledgeInsertActivity.class); + public static KnowledgeInsertActivity get() { + return Container.getComp(KnowledgeInsertActivity.class); + } + + @Override + public void execute() throws Exception { + if (getKnowledge() == null || getUser() == null) { + // ありえないけど念のため確認 + return; + } + if (isExistsActivity(getUser().getUserId(), Activity.KNOWLEDGE_INSERT, String.valueOf(getKnowledge().getKnowledgeId()))) { + // 既に指定のKnowledge登録済 + return; + } + //int point = RandomUtil.randamNum(30, 50); + int point = 50; + + LOG.debug("Add point by knowledge insert:" + point); + + // ポイント発行アクティビティを生成 + ActivitiesEntity activity = addActivity( + getUser().getUserId(), + Activity.KNOWLEDGE_INSERT, + String.valueOf(getKnowledge().getKnowledgeId()), + getKnowledge().getInsertDatetime()); + // 登録者のポイントをアップ + addPointForUser( + getUser().getUserId(), + getKnowledge().getInsertDatetime(), + getUser().getUserId(), + activity.getActivityNo(), + TYPE_KNOWLEDGE_DO_INSERT, + point); + // 記事のポイントアップ + addPointForKnowledge( + getUser().getUserId(), + getKnowledge().getInsertDatetime(), + getKnowledge().getKnowledgeId(), + activity.getActivityNo(), + TYPE_KNOWLEDGE_INSERTED, + point); + } +} diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql index deec12bff..be3ba4fc8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_delete.sql @@ -1,4 +1,4 @@ DELETE FROM ACTIVITIES WHERE -NO = ? +ACTIVITY_NO = ? ; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql index abd8c0132..995d8561a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_insert.sql @@ -1,10 +1,9 @@ INSERT INTO ACTIVITIES ( -NO +ACTIVITY_NO , USER_ID - , TYPE + , KIND , TARGET - , POINT , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -20,5 +19,4 @@ DEFAULT , ? , ? , ? - , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql index d45f96d47..b0b963e3a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql @@ -1,4 +1,4 @@ SELECT * FROM ACTIVITIES WHERE -NO = ? +ACTIVITY_NO = ? ; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql index b4011813e..3169468de 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_raw_insert.sql @@ -1,10 +1,9 @@ INSERT INTO ACTIVITIES ( -NO +ACTIVITY_NO , USER_ID - , TYPE + , KIND , TARGET - , POINT , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -20,5 +19,4 @@ NO , ? , ? , ? - , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql index a3507a4ca..7fd4c7d0b 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql @@ -1,4 +1,4 @@ SELECT * FROM ACTIVITIES WHERE -NO = ? +ACTIVITY_NO = ? AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql index 0c776a106..b490022e7 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_update.sql @@ -1,14 +1,13 @@ UPDATE ACTIVITIES SET USER_ID = ? - , TYPE = ? + , KIND = ? , TARGET = ? - , POINT = ? , INSERT_USER = ? , INSERT_DATETIME = ? , UPDATE_USER = ? , UPDATE_DATETIME = ? , DELETE_FLAG = ? WHERE -NO = ? +ACTIVITY_NO = ? ; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql index 678b16284..6e6e992e8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_insert.sql @@ -4,7 +4,8 @@ NO , NAME , DISPLAY_TEXT , DESCRIPTION - , IMAGE_CATEGORY + , IMAGE + , POINT , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -21,4 +22,5 @@ DEFAULT , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql index 7185b80af..6135deb4d 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_raw_insert.sql @@ -4,7 +4,8 @@ NO , NAME , DISPLAY_TEXT , DESCRIPTION - , IMAGE_CATEGORY + , IMAGE + , POINT , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -21,4 +22,5 @@ NO , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql index 4a7eec486..2cbd6ba3b 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_update.sql @@ -3,7 +3,8 @@ SET NAME = ? , DISPLAY_TEXT = ? , DESCRIPTION = ? - , IMAGE_CATEGORY = ? + , IMAGE = ? + , POINT = ? , INSERT_USER = ? , INSERT_DATETIME = ? , UPDATE_USER = ? diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_delete.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_delete.sql new file mode 100644 index 000000000..c5e58e3eb --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_delete.sql @@ -0,0 +1,5 @@ +DELETE FROM POINT_KNOWLEDGE_HISTORIES +WHERE +HISTORY_NO = ? + AND KNOWLEDGE_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql new file mode 100644 index 000000000..4ada9a3f2 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO POINT_KNOWLEDGE_HISTORIES +( +HISTORY_NO + , KNOWLEDGE_ID + , ACTIVITY_NO + , TYPE + , POINT + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql new file mode 100644 index 000000000..53862db97 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql @@ -0,0 +1,2 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql new file mode 100644 index 000000000..b22d177d2 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql @@ -0,0 +1,3 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_history_no.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_history_no.sql new file mode 100644 index 000000000..9c1667b97 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_history_no.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES + WHERE +HISTORY_NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_key.sql new file mode 100644 index 000000000..c2d200af3 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_key.sql @@ -0,0 +1,5 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES + WHERE +HISTORY_NO = ? + AND KNOWLEDGE_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_knowledge_id.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_knowledge_id.sql new file mode 100644 index 000000000..5216a7c27 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_knowledge_id.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES + WHERE +KNOWLEDGE_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql new file mode 100644 index 000000000..4ada9a3f2 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO POINT_KNOWLEDGE_HISTORIES +( +HISTORY_NO + , KNOWLEDGE_ID + , ACTIVITY_NO + , TYPE + , POINT + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql new file mode 100644 index 000000000..364e92359 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql @@ -0,0 +1,3 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql new file mode 100644 index 000000000..25db49873 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_count_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_count_all.sql new file mode 100644 index 000000000..c953d8f53 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_count_all.sql @@ -0,0 +1,2 @@ +SELECT COUNT(*) FROM POINT_KNOWLEDGE_HISTORIES +WHERE DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_history_no.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_history_no.sql new file mode 100644 index 000000000..a64adb685 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_history_no.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES + WHERE +HISTORY_NO = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_key.sql new file mode 100644 index 000000000..bbbf73e0d --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_key.sql @@ -0,0 +1,5 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES + WHERE +HISTORY_NO = ? + AND KNOWLEDGE_ID = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_knowledge_id.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_knowledge_id.sql new file mode 100644 index 000000000..91b7cd596 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_knowledge_id.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_KNOWLEDGE_HISTORIES + WHERE +KNOWLEDGE_ID = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql new file mode 100644 index 000000000..dfe5bc637 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql @@ -0,0 +1,14 @@ +UPDATE POINT_KNOWLEDGE_HISTORIES +SET + ACTIVITY_NO = ? + , TYPE = ? + , POINT = ? + , INSERT_USER = ? + , INSERT_DATETIME = ? + , UPDATE_USER = ? + , UPDATE_DATETIME = ? + , DELETE_FLAG = ? +WHERE +HISTORY_NO = ? + AND KNOWLEDGE_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_delete.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_delete.sql new file mode 100644 index 000000000..354e1b214 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_delete.sql @@ -0,0 +1,5 @@ +DELETE FROM POINT_USER_HISTORIES +WHERE +HISTORY_NO = ? + AND USER_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql new file mode 100644 index 000000000..fba9e04af --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO POINT_USER_HISTORIES +( +HISTORY_NO + , USER_ID + , ACTIVITY_NO + , TYPE + , POINT + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql new file mode 100644 index 000000000..61a114237 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql @@ -0,0 +1,2 @@ +SELECT * FROM POINT_USER_HISTORIES +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql new file mode 100644 index 000000000..82a1295a5 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql @@ -0,0 +1,3 @@ +SELECT * FROM POINT_USER_HISTORIES +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_history_no.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_history_no.sql new file mode 100644 index 000000000..8e70af128 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_history_no.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_USER_HISTORIES + WHERE +HISTORY_NO = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_key.sql new file mode 100644 index 000000000..9431c3d68 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_key.sql @@ -0,0 +1,5 @@ +SELECT * FROM POINT_USER_HISTORIES + WHERE +HISTORY_NO = ? + AND USER_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_user_id.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_user_id.sql new file mode 100644 index 000000000..b2675a637 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_user_id.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_USER_HISTORIES + WHERE +USER_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql new file mode 100644 index 000000000..fba9e04af --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql @@ -0,0 +1,24 @@ +INSERT INTO POINT_USER_HISTORIES +( +HISTORY_NO + , USER_ID + , ACTIVITY_NO + , TYPE + , POINT + , INSERT_USER + , INSERT_DATETIME + , UPDATE_USER + , UPDATE_DATETIME + , DELETE_FLAG +) VALUES ( +? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? + , ? +); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql new file mode 100644 index 000000000..cd439a370 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql @@ -0,0 +1,3 @@ +SELECT * FROM POINT_USER_HISTORIES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql new file mode 100644 index 000000000..b45c1578c --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_USER_HISTORIES +WHERE DELETE_FLAG = 0 +ORDER BY INSERT_DATETIME DESC +LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_count_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_count_all.sql new file mode 100644 index 000000000..95d55869a --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_count_all.sql @@ -0,0 +1,2 @@ +SELECT COUNT(*) FROM POINT_USER_HISTORIES +WHERE DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_history_no.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_history_no.sql new file mode 100644 index 000000000..9d9590055 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_history_no.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_USER_HISTORIES + WHERE +HISTORY_NO = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_key.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_key.sql new file mode 100644 index 000000000..1eb98437f --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_key.sql @@ -0,0 +1,5 @@ +SELECT * FROM POINT_USER_HISTORIES + WHERE +HISTORY_NO = ? + AND USER_ID = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_user_id.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_user_id.sql new file mode 100644 index 000000000..5f8c92072 --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_user_id.sql @@ -0,0 +1,4 @@ +SELECT * FROM POINT_USER_HISTORIES + WHERE +USER_ID = ? + AND DELETE_FLAG = 0; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql new file mode 100644 index 000000000..e67e9d91a --- /dev/null +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql @@ -0,0 +1,14 @@ +UPDATE POINT_USER_HISTORIES +SET + ACTIVITY_NO = ? + , TYPE = ? + , POINT = ? + , INSERT_USER = ? + , INSERT_DATETIME = ? + , UPDATE_USER = ? + , UPDATE_DATETIME = ? + , DELETE_FLAG = ? +WHERE +HISTORY_NO = ? + AND USER_ID = ? +; diff --git a/src/main/resources/org/support/project/knowledge/database/ddl.sql b/src/main/resources/org/support/project/knowledge/database/ddl.sql index 3c240ff4f..1fe60dc25 100644 --- a/src/main/resources/org/support/project/knowledge/database/ddl.sql +++ b/src/main/resources/org/support/project/knowledge/database/ddl.sql @@ -1,3 +1,37 @@ +-- ユーザのポイント獲得履歴 +drop table if exists POINT_USER_HISTORIES cascade; + +create table POINT_USER_HISTORIES ( + USER_ID INTEGER not null + , HISTORY_NO BIGINT not null + , ACTIVITY_NO BIGINT not null + , TYPE integer not null + , POINT integer + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint POINT_USER_HISTORIES_PKC primary key (USER_ID,HISTORY_NO) +) ; + +-- ナレッジのポイント獲得履歴 +drop table if exists POINT_KNOWLEDGE_HISTORIES cascade; + +create table POINT_KNOWLEDGE_HISTORIES ( + KNOWLEDGE_ID BIGINT not null + , HISTORY_NO BIGINT not null + , ACTIVITY_NO BIGINT not null + , TYPE integer not null + , POINT integer not null + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint POINT_KNOWLEDGE_HISTORIES_PKC primary key (KNOWLEDGE_ID,HISTORY_NO) +) ; + -- ユーザの称号 drop table if exists USER_BADGES cascade; @@ -16,24 +50,23 @@ create table USER_BADGES ( drop table if exists ACTIVITIES cascade; create table ACTIVITIES ( - NO BIGSERIAL not null + ACTIVITY_NO BIGSERIAL not null , USER_ID INTEGER not null - , TYPE integer not null - , TARGET BIGINT not null - , POINT integer not null + , KIND integer not null + , TARGET character varying(64) not null , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer , UPDATE_DATETIME timestamp , DELETE_FLAG integer - , constraint ACTIVITIES_PKC primary key (NO) + , constraint ACTIVITIES_PKC primary key (ACTIVITY_NO) ) ; create index IDX_ACTIVITIES_USER_ID on ACTIVITIES(USER_ID); -create index IDX_ACTIVITIES_TYPE_TARGET - on ACTIVITIES(TYPE,TARGET); +create index IDX_ACTIVITIES_KIND_TARGET + on ACTIVITIES(KIND,TARGET); -- 称号 drop table if exists BADGES cascade; @@ -43,7 +76,8 @@ create table BADGES ( , NAME character varying(128) not null , DISPLAY_TEXT character varying(32) not null , DESCRIPTION text - , IMAGE_CATEGORY integer + , IMAGE character varying(64) + , POINT integer , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer @@ -814,6 +848,30 @@ create table KNOWLEDGES ( , constraint KNOWLEDGES_PKC primary key (KNOWLEDGE_ID) ) ; +comment on table POINT_USER_HISTORIES is 'ユーザのポイント獲得履歴'; +comment on column POINT_USER_HISTORIES.USER_ID is 'ユーザID'; +comment on column POINT_USER_HISTORIES.HISTORY_NO is '履歴番号'; +comment on column POINT_USER_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; +comment on column POINT_USER_HISTORIES.TYPE is '獲得のタイプ'; +comment on column POINT_USER_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_USER_HISTORIES.INSERT_USER is '登録ユーザ'; +comment on column POINT_USER_HISTORIES.INSERT_DATETIME is '登録日時'; +comment on column POINT_USER_HISTORIES.UPDATE_USER is '更新ユーザ'; +comment on column POINT_USER_HISTORIES.UPDATE_DATETIME is '更新日時'; +comment on column POINT_USER_HISTORIES.DELETE_FLAG is '削除フラグ'; + +comment on table POINT_KNOWLEDGE_HISTORIES is 'ナレッジのポイント獲得履歴'; +comment on column POINT_KNOWLEDGE_HISTORIES.KNOWLEDGE_ID is 'ナレッジID'; +comment on column POINT_KNOWLEDGE_HISTORIES.HISTORY_NO is '履歴番号'; +comment on column POINT_KNOWLEDGE_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; +comment on column POINT_KNOWLEDGE_HISTORIES.TYPE is '獲得のタイプ'; +comment on column POINT_KNOWLEDGE_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_USER is '登録ユーザ'; +comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_DATETIME is '登録日時'; +comment on column POINT_KNOWLEDGE_HISTORIES.UPDATE_USER is '更新ユーザ'; +comment on column POINT_KNOWLEDGE_HISTORIES.UPDATE_DATETIME is '更新日時'; +comment on column POINT_KNOWLEDGE_HISTORIES.DELETE_FLAG is '削除フラグ'; + comment on table USER_BADGES is 'ユーザの称号'; comment on column USER_BADGES.USER_ID is 'ユーザID'; comment on column USER_BADGES.NO is '番号'; @@ -824,11 +882,10 @@ comment on column USER_BADGES.UPDATE_DATETIME is '更新日時'; comment on column USER_BADGES.DELETE_FLAG is '削除フラグ'; comment on table ACTIVITIES is 'アクティビティ'; -comment on column ACTIVITIES.NO is '番号'; -comment on column ACTIVITIES.USER_ID is 'ユーザID'; -comment on column ACTIVITIES.TYPE is '種類'; +comment on column ACTIVITIES.ACTIVITY_NO is 'アクティビティ番号'; +comment on column ACTIVITIES.USER_ID is 'イベントをおこしたユーザ'; +comment on column ACTIVITIES.KIND is 'アクティビティの種類'; comment on column ACTIVITIES.TARGET is 'ターゲットID'; -comment on column ACTIVITIES.POINT is '獲得ポイント'; comment on column ACTIVITIES.INSERT_USER is '登録ユーザ'; comment on column ACTIVITIES.INSERT_DATETIME is '登録日時'; comment on column ACTIVITIES.UPDATE_USER is '更新ユーザ'; @@ -840,7 +897,8 @@ comment on column BADGES.NO is '番号'; comment on column BADGES.NAME is '名称'; comment on column BADGES.DISPLAY_TEXT is '表示名'; comment on column BADGES.DESCRIPTION is '説明'; -comment on column BADGES.IMAGE_CATEGORY is '画像の種類'; +comment on column BADGES.IMAGE is '画像'; +comment on column BADGES.POINT is '獲得ポイント'; comment on column BADGES.INSERT_USER is '登録ユーザ'; comment on column BADGES.INSERT_DATETIME is '登録日時'; comment on column BADGES.UPDATE_USER is '更新ユーザ'; diff --git a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql index e6ebeb79d..85d8ed223 100644 --- a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql +++ b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql @@ -1,3 +1,37 @@ +-- ユーザのポイント獲得履歴 +drop table if exists POINT_USER_HISTORIES cascade; + +create table POINT_USER_HISTORIES ( + USER_ID INTEGER not null + , HISTORY_NO BIGINT not null + , ACTIVITY_NO BIGINT not null + , TYPE integer not null + , POINT integer + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint POINT_USER_HISTORIES_PKC primary key (USER_ID,HISTORY_NO) +) ; + +-- ナレッジのポイント獲得履歴 +drop table if exists POINT_KNOWLEDGE_HISTORIES cascade; + +create table POINT_KNOWLEDGE_HISTORIES ( + KNOWLEDGE_ID BIGINT not null + , HISTORY_NO BIGINT not null + , ACTIVITY_NO BIGINT not null + , TYPE integer not null + , POINT integer not null + , INSERT_USER integer + , INSERT_DATETIME timestamp + , UPDATE_USER integer + , UPDATE_DATETIME timestamp + , DELETE_FLAG integer + , constraint POINT_KNOWLEDGE_HISTORIES_PKC primary key (KNOWLEDGE_ID,HISTORY_NO) +) ; + -- ユーザの称号 drop table if exists USER_BADGES cascade; @@ -16,24 +50,23 @@ create table USER_BADGES ( drop table if exists ACTIVITIES cascade; create table ACTIVITIES ( - NO BIGSERIAL not null + ACTIVITY_NO BIGSERIAL not null , USER_ID INTEGER not null - , TYPE integer not null - , TARGET BIGINT not null - , POINT integer not null + , KIND integer not null + , TARGET character varying(64) not null , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer , UPDATE_DATETIME timestamp , DELETE_FLAG integer - , constraint ACTIVITIES_PKC primary key (NO) + , constraint ACTIVITIES_PKC primary key (ACTIVITY_NO) ) ; create index IDX_ACTIVITIES_USER_ID on ACTIVITIES(USER_ID); -create index IDX_ACTIVITIES_TYPE_TARGET - on ACTIVITIES(TYPE,TARGET); +create index IDX_ACTIVITIES_KIND_TARGET + on ACTIVITIES(KIND,TARGET); -- 称号 drop table if exists BADGES cascade; @@ -43,7 +76,8 @@ create table BADGES ( , NAME character varying(128) not null , DISPLAY_TEXT character varying(32) not null , DESCRIPTION text - , IMAGE_CATEGORY integer + , IMAGE character varying(64) + , POINT integer , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer @@ -52,6 +86,31 @@ create table BADGES ( , constraint BADGES_PKC primary key (NO) ) ; + +comment on table POINT_USER_HISTORIES is 'ユーザのポイント獲得履歴'; +comment on column POINT_USER_HISTORIES.USER_ID is 'ユーザID'; +comment on column POINT_USER_HISTORIES.HISTORY_NO is '履歴番号'; +comment on column POINT_USER_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; +comment on column POINT_USER_HISTORIES.TYPE is '獲得のタイプ'; +comment on column POINT_USER_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_USER_HISTORIES.INSERT_USER is '登録ユーザ'; +comment on column POINT_USER_HISTORIES.INSERT_DATETIME is '登録日時'; +comment on column POINT_USER_HISTORIES.UPDATE_USER is '更新ユーザ'; +comment on column POINT_USER_HISTORIES.UPDATE_DATETIME is '更新日時'; +comment on column POINT_USER_HISTORIES.DELETE_FLAG is '削除フラグ'; + +comment on table POINT_KNOWLEDGE_HISTORIES is 'ナレッジのポイント獲得履歴'; +comment on column POINT_KNOWLEDGE_HISTORIES.KNOWLEDGE_ID is 'ナレッジID'; +comment on column POINT_KNOWLEDGE_HISTORIES.HISTORY_NO is '履歴番号'; +comment on column POINT_KNOWLEDGE_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; +comment on column POINT_KNOWLEDGE_HISTORIES.TYPE is '獲得のタイプ'; +comment on column POINT_KNOWLEDGE_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_USER is '登録ユーザ'; +comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_DATETIME is '登録日時'; +comment on column POINT_KNOWLEDGE_HISTORIES.UPDATE_USER is '更新ユーザ'; +comment on column POINT_KNOWLEDGE_HISTORIES.UPDATE_DATETIME is '更新日時'; +comment on column POINT_KNOWLEDGE_HISTORIES.DELETE_FLAG is '削除フラグ'; + comment on table USER_BADGES is 'ユーザの称号'; comment on column USER_BADGES.USER_ID is 'ユーザID'; comment on column USER_BADGES.NO is '番号'; @@ -62,11 +121,10 @@ comment on column USER_BADGES.UPDATE_DATETIME is '更新日時'; comment on column USER_BADGES.DELETE_FLAG is '削除フラグ'; comment on table ACTIVITIES is 'アクティビティ'; -comment on column ACTIVITIES.NO is '番号'; -comment on column ACTIVITIES.USER_ID is 'ユーザID'; -comment on column ACTIVITIES.TYPE is '種類'; +comment on column ACTIVITIES.ACTIVITY_NO is 'アクティビティ番号'; +comment on column ACTIVITIES.USER_ID is 'イベントをおこしたユーザ'; +comment on column ACTIVITIES.KIND is 'アクティビティの種類'; comment on column ACTIVITIES.TARGET is 'ターゲットID'; -comment on column ACTIVITIES.POINT is '獲得ポイント'; comment on column ACTIVITIES.INSERT_USER is '登録ユーザ'; comment on column ACTIVITIES.INSERT_DATETIME is '登録日時'; comment on column ACTIVITIES.UPDATE_USER is '更新ユーザ'; @@ -78,7 +136,8 @@ comment on column BADGES.NO is '番号'; comment on column BADGES.NAME is '名称'; comment on column BADGES.DISPLAY_TEXT is '表示名'; comment on column BADGES.DESCRIPTION is '説明'; -comment on column BADGES.IMAGE_CATEGORY is '画像の種類'; +comment on column BADGES.IMAGE is '画像'; +comment on column BADGES.POINT is '獲得ポイント'; comment on column BADGES.INSERT_USER is '登録ユーザ'; comment on column BADGES.INSERT_DATETIME is '登録日時'; comment on column BADGES.UPDATE_USER is '更新ユーザ'; From a54e58656eed9e0bd6cc26f6ecf83b2d13c56a5e Mon Sep 17 00:00:00 2001 From: Koda Date: Fri, 1 Sep 2017 06:45:58 +0900 Subject: [PATCH 040/138] #840 Add add point process at knowledge show --- .../knowledge/dao/ViewHistoriesDao.java | 5 + .../deploy/v1_11_0/Migrate_1_11_2.java | 107 +++++++++++++++--- .../activity/AbstractActivityProcessor.java | 14 +++ ...AbstractAddPointForKnowledgeProcessor.java | 62 ++++++++++ .../logic/activity/ActivityProcessor.java | 3 + .../activity/KnowledgeInsertActivity.java | 53 +++------ .../logic/activity/KnowledgeShowActivity.java | 43 +++++++ 7 files changed, 233 insertions(+), 54 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java diff --git a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java index bd8144f58..6cf0c3258 100644 --- a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java @@ -54,4 +54,9 @@ public List selectViewdKnowledgeIds(List stocks, Integer u return executeQueryList(sql.toString(), Long.class, params.toArray(new Object[0])); } + public long selectCountOnKnowledgeId(Long knowledgeId) { + String sql = "SELECT COUNT(*) FROM VIEW_HISTORIES WHERE KNOWLEDGE_ID = ?"; + return executeQuerySingle(sql, Long.class, knowledgeId); + } + } diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index 14cac53d4..6568485df 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -6,8 +6,10 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.dao.ViewHistoriesDao; import org.support.project.knowledge.deploy.Migrate; import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.ViewHistoriesEntity; import org.support.project.knowledge.logic.activity.Activity; import org.support.project.knowledge.logic.activity.ActivityLogic; import org.support.project.ormapping.tool.dao.InitializeDao; @@ -31,39 +33,112 @@ public boolean doMigrate() throws Exception { }; initializeDao.initializeDatabase(sqlpaths); + // 参照回数を集計 + doSetViewCountToKnowledge(); + // Knowledgeを登録したイベントによりポイントを集計 doAddPointByKnowledge(); + // Knowledgeを参照したイベントによりポイントを集計 + doAddPointByKnowledgeShow(); - // 参照回数を集計 return true; } + + private void doAddPointByKnowledgeShow() throws InterruptedException { + List list; + int offset = 0; + int limit = 50; + do { + list = doAddPointByKnowledgeShow(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(200); + } + } while (list.size() > 0); + } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void doAddPointByKnowledge() { - // ポイント修正 - LOG.info("Aggregate point by knowledge insert"); + private List doAddPointByKnowledgeShow(int offset, int limit) { + LOG.info("Aggregate point by knowledge show"); + List list; + list = ViewHistoriesDao.get().selectAllWidthPager(limit, offset); + for (ViewHistoriesEntity viewHistoriesEntity : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(viewHistoriesEntity.getKnowledgeId()); + if (knowledge == null) { + LOG.info(" knowledge [" + viewHistoriesEntity.getKnowledgeId() + "] is not found. so skip add point by knowledge show."); + continue; + } + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(viewHistoriesEntity.getInsertUser()); + if (account == null) { + LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge show."); + continue; + } + user.setLoginUser(account); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, user, knowledge); + } + return list; + } + + public void doAddPointByKnowledge() throws InterruptedException { List knowledges; int offset = 0; int limit = 50; do { - knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); - for (KnowledgesEntity knowledge : knowledges) { - LoginedUser user = new LoginedUser(); - UsersEntity account = UsersDao.get().selectOnKey(knowledge.getInsertUser()); - if (account == null) { - LOG.info("insert user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge insert."); - continue; - } - user.setLoginUser(account); - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, user, knowledge); - } + knowledges = doAddPointByKnowledge(offset, limit); offset = offset + limit; + synchronized (this) { + wait(200); + } } while (knowledges.size() > 0); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private List doAddPointByKnowledge(int offset, int limit) { + LOG.info("Aggregate point by knowledge insert"); + List knowledges; + knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); + for (KnowledgesEntity knowledge : knowledges) { + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(knowledge.getInsertUser()); + if (account == null) { + LOG.info(" insert user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge insert."); + continue; + } + user.setLoginUser(account); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, user, knowledge); + } + return knowledges; + } + private void doSetViewCountToKnowledge() throws InterruptedException { + List knowledges; + int offset = 0; + int limit = 50; + do { + knowledges = doSetViewCountToKnowledge(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(200); + } + } while (knowledges.size() > 0); + } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private List doSetViewCountToKnowledge(int offset, int limit) { + LOG.info("Set view count to Knowledge"); + List knowledges; + knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); + for (KnowledgesEntity knowledge : knowledges) { + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + long count = ViewHistoriesDao.get().selectCountOnKnowledgeId(knowledge.getKnowledgeId()); + KnowledgesDao.get().updateViewCount(count, knowledge.getKnowledgeId()); + } + return knowledges; + } } \ No newline at end of file diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java index 2c98f441a..d457965b4 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java @@ -40,6 +40,20 @@ public LoginedUser getUser() { public void setUser(LoginedUser user) { this.user = user; } + + /** + * ポイントと種類を保持する内部クラス + * @author koda + */ + protected class TypeAndPoint { + int type; + int point; + TypeAndPoint(int type, int point) { + this.type = type; + this.point = point; + } + } + /** * 対象のactivityが既に登録されているかチェック * @param userId アクティビティを実行したユーザ diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java index 5992aeed6..d65bd2c87 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.logic.activity; +import org.support.project.knowledge.entity.ActivitiesEntity; import org.support.project.knowledge.entity.KnowledgesEntity; public abstract class AbstractAddPointForKnowledgeProcessor extends AbstractActivityProcessor { @@ -16,4 +17,65 @@ public KnowledgesEntity getKnowledge() { public void setKnowledge(KnowledgesEntity knowledge) { this.knowledge = knowledge; } + + protected abstract Activity getActivity(); + protected abstract TypeAndPoint getTypeAndPointForActivityExecuter(); + protected abstract TypeAndPoint getTypeAndPointForKnowledgeOwner(); + protected abstract TypeAndPoint getTypeAndPointForKnowledge(); + + @Override + public void execute() throws Exception { + if (getKnowledge() == null || getUser() == null) { + // ありえないけど念のため確認 + return; + } + if (isExistsActivity(getUser().getUserId(), getActivity(), String.valueOf(getKnowledge().getKnowledgeId()))) { + // 既に指定のKnowledge登録済 + return; + } + // ポイント発行アクティビティを生成 + ActivitiesEntity activity = addActivity( + getUser().getUserId(), + getActivity(), + String.valueOf(getKnowledge().getKnowledgeId()), + getKnowledge().getInsertDatetime()); + + + + // 実行したユーザのポイントアップ + TypeAndPoint exec = getTypeAndPointForActivityExecuter(); + if (exec != null) { + addPointForUser( + getUser().getUserId(), + getKnowledge().getInsertDatetime(), + getUser().getUserId(), // ターゲットは、実行したユーザ + activity.getActivityNo(), + exec.type, + exec.point); + } + // 記事の登録者のポイントをアップ + TypeAndPoint owner = getTypeAndPointForKnowledgeOwner(); + if (owner != null) { + addPointForUser( + getUser().getUserId(), + getKnowledge().getInsertDatetime(), + getKnowledge().getInsertUser(), // ターゲットは登録者 + activity.getActivityNo(), + exec.type, + exec.point); + } + // 記事のポイントアップ + TypeAndPoint knowledge = getTypeAndPointForKnowledge(); + if (knowledge != null) { + addPointForKnowledge( + getUser().getUserId(), + getKnowledge().getInsertDatetime(), + getKnowledge().getKnowledgeId(), + activity.getActivityNo(), + exec.type, + exec.point); + } + } + + } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java index 8641ba757..486d782ae 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java @@ -31,6 +31,9 @@ public interface ActivityProcessor { */ public static final int TYPE_KNOWLEDGE_DO_INSERT = 11; public static final int TYPE_KNOWLEDGE_INSERTED = 12; + public static final int TYPE_KNOWLEDGE_DO_SHOW = 21; + public static final int TYPE_KNOWLEDGE_SHOWN_BY_OHER = 22; + public static final int TYPE_KNOWLEDGE_SHOWN = 23; void execute() throws Exception; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java index 3afde96ab..fd43d6fe2 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java @@ -5,7 +5,6 @@ import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; -import org.support.project.knowledge.entity.ActivitiesEntity; /** * ナレッジ登録時のポイント付与 @@ -21,43 +20,21 @@ public class KnowledgeInsertActivity extends AbstractAddPointForKnowledgeProcess public static KnowledgeInsertActivity get() { return Container.getComp(KnowledgeInsertActivity.class); } - @Override - public void execute() throws Exception { - if (getKnowledge() == null || getUser() == null) { - // ありえないけど念のため確認 - return; - } - if (isExistsActivity(getUser().getUserId(), Activity.KNOWLEDGE_INSERT, String.valueOf(getKnowledge().getKnowledgeId()))) { - // 既に指定のKnowledge登録済 - return; - } - //int point = RandomUtil.randamNum(30, 50); - int point = 50; - - LOG.debug("Add point by knowledge insert:" + point); - - // ポイント発行アクティビティを生成 - ActivitiesEntity activity = addActivity( - getUser().getUserId(), - Activity.KNOWLEDGE_INSERT, - String.valueOf(getKnowledge().getKnowledgeId()), - getKnowledge().getInsertDatetime()); - // 登録者のポイントをアップ - addPointForUser( - getUser().getUserId(), - getKnowledge().getInsertDatetime(), - getUser().getUserId(), - activity.getActivityNo(), - TYPE_KNOWLEDGE_DO_INSERT, - point); - // 記事のポイントアップ - addPointForKnowledge( - getUser().getUserId(), - getKnowledge().getInsertDatetime(), - getKnowledge().getKnowledgeId(), - activity.getActivityNo(), - TYPE_KNOWLEDGE_INSERTED, - point); + protected Activity getActivity() { + LOG.info("Start add point process on insert knowledge."); + return Activity.KNOWLEDGE_INSERT; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_INSERT, 50); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { + return null; + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_KNOWLEDGE_INSERTED, 50); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java new file mode 100644 index 000000000..5e6f28328 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java @@ -0,0 +1,43 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; + +/** + * + * 種類 | 獲得のタイプ | ポイント付与先 | ポイント | 獲得タイプの意味 + * 2 | 21 | 参照者 | 1 | 記事を参照するアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) + * 2 | 22 | 記事登録者 | 1 | 自分が登録された記事が参照されたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 2 | 23 | 記事 | 1 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * + * @author koda + */ +@DI(instance = Instance.Prototype) +public class KnowledgeShowActivity extends AbstractAddPointForKnowledgeProcessor { + private static final Log LOG = LogFactory.getLog(KnowledgeShowActivity.class); + public static KnowledgeShowActivity get() { + return Container.getComp(KnowledgeShowActivity.class); + } + + @Override + protected Activity getActivity() { + LOG.info("Start add point process on show knowledge."); + return Activity.KNOWLEDGE_SHOW; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_SHOW, 1); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { + return new TypeAndPoint(TYPE_KNOWLEDGE_SHOWN_BY_OHER, 1); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_KNOWLEDGE_SHOWN, 1); + } + +} From a4523032f65fc982e6958d54136889617b299c84 Mon Sep 17 00:00:00 2001 From: Koda Date: Fri, 1 Sep 2017 22:14:11 +0900 Subject: [PATCH 041/138] #840 Add add point process at knowledge like and stock --- .../control/open/KnowledgeControl.java | 6 +- .../control/protect/EventControl.java | 6 +- .../control/protect/KnowledgeControl.java | 7 +- .../control/protect/SurveyControl.java | 3 +- .../deploy/v1_11_0/Migrate_1_11_2.java | 91 ++++++++++++++++++- .../activity/AbstractActivityProcessor.java | 39 ++++---- ...AbstractAddPointForKnowledgeProcessor.java | 18 +--- .../logic/activity/ActivityLogic.java | 24 +++-- .../logic/activity/ActivityProcessor.java | 6 ++ .../activity/KnowledgeInsertActivity.java | 2 +- .../logic/activity/KnowledgeLikeActivity.java | 39 ++++++++ .../logic/activity/KnowledgeShowActivity.java | 2 +- .../activity/KnowledgeStockActivity.java | 39 ++++++++ 13 files changed, 225 insertions(+), 57 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java diff --git a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java index 2d34a4140..7d3da5b87 100644 --- a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java @@ -217,7 +217,7 @@ public Boundary view() throws InvalidParamException, ParseException { List stocks = StocksDao.get().selectStockOnKnowledge(entity, loginedUser); setAttribute("stocks", stocks); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, getLoginedUser(), entity); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, getLoginedUser(), new Date(), entity); return forward("view.jsp"); } @@ -663,7 +663,7 @@ public Boundary like() throws InvalidParamException { likeCount.setKnowledgeId(knowledgeId); likeCount.setCount(count); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, getLoginedUser(), + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, getLoginedUser(), new Date(), KnowledgesDao.get().selectOnKey(knowledgeId)); return send(likeCount); } @@ -680,7 +680,7 @@ public Boundary likecomment() throws InvalidParamException { LikeCount likeCount = new LikeCount(); likeCount.setCount(count); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_LIKE, getLoginedUser(), + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_LIKE, getLoginedUser(), new Date(), CommentsDao.get().selectOnKey(commentNo)); return send(likeCount); } diff --git a/src/main/java/org/support/project/knowledge/control/protect/EventControl.java b/src/main/java/org/support/project/knowledge/control/protect/EventControl.java index 97e8f2f7e..69206b8ec 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/EventControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/EventControl.java @@ -1,5 +1,7 @@ package org.support.project.knowledge.control.protect; +import java.util.Date; + import org.support.project.di.DI; import org.support.project.di.Instance; import org.support.project.knowledge.control.Control; @@ -33,7 +35,7 @@ public Boundary participation() throws InvalidParamException { labelValue.setLabel(getResource("knowledge.view.msg.wait.cansel")); } - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_ADD, getLoginedUser(), + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_ADD, getLoginedUser(), new Date(), KnowledgesDao.get().selectOnKey(knowledgeId)); return send(labelValue); @@ -48,7 +50,7 @@ public Boundary nonparticipation() throws InvalidParamException { Long knowledgeId = getPathLong(); EventsLogic.get().removeParticipation(knowledgeId, getLoginUserId()); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_DELETE, getLoginedUser(), + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_DELETE, getLoginedUser(), new Date(), KnowledgesDao.get().selectOnKey(knowledgeId)); return send(getResource("knowledge.view.msg.participate.delete")); diff --git a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java index 0ea46236c..638ec6a9c 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java @@ -3,6 +3,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; +import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -213,7 +214,7 @@ private Boundary add(KnowledgesEntity entity) throws Exception, ParseException { LOG.trace("save"); KnowledgesEntity insertedEntity = knowledgeLogic.insert(data, super.getLoginedUser()); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, getLoginedUser(), insertedEntity); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, getLoginedUser(), new Date(), insertedEntity); return sendMsg(MessageStatus.Success, HttpStatus.SC_200_OK, String.valueOf(insertedEntity.getKnowledgeId()), "message.success.insert"); @@ -489,7 +490,7 @@ public Boundary comment() throws Exception { } CommentsEntity commentsEntity = KnowledgeLogic.get().saveComment(knowledgeId, comment, fileNos, getLoginedUser()); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_ADD, getLoginedUser(), commentsEntity); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_ADD, getLoginedUser(), new Date(), commentsEntity); return super.redirect(getRequest().getContextPath() + "/open.knowledge/view/" + knowledgeId + params); } @@ -729,7 +730,7 @@ public Boundary stock() throws IOException, InvalidParamException { dao.physicalDelete(entity); } } - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_STOCK, getLoginedUser(), + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_STOCK, getLoginedUser(), new Date(), KnowledgesDao.get().selectOnKey(knowledgeId)); return sendMsg(MessageStatus.Success, HttpStatus.SC_200_OK, "saved", "message.success.save"); diff --git a/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java b/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java index fedbd75e6..a1cea44fc 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.support.project.common.bean.ValidateError; @@ -225,7 +226,7 @@ public Boundary answer() throws InstantiationException, IllegalAccessException, LOG.debug(PropertyUtil.reflectionToString(answer)); } SurveyLogic.get().saveAnswer(answer, getLoginUserId()); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SURVEY, getLoginedUser(), + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SURVEY, getLoginedUser(), new Date(), KnowledgesDao.get().selectOnKey(knowledgeId)); // メッセージ送信 diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index 6568485df..a777d6514 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -6,9 +6,13 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.dao.LikesDao; +import org.support.project.knowledge.dao.StockKnowledgesDao; import org.support.project.knowledge.dao.ViewHistoriesDao; import org.support.project.knowledge.deploy.Migrate; import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.LikesEntity; +import org.support.project.knowledge.entity.StockKnowledgesEntity; import org.support.project.knowledge.entity.ViewHistoriesEntity; import org.support.project.knowledge.logic.activity.Activity; import org.support.project.knowledge.logic.activity.ActivityLogic; @@ -38,10 +42,14 @@ public boolean doMigrate() throws Exception { // Knowledgeを登録したイベントによりポイントを集計 doAddPointByKnowledge(); - // Knowledgeを参照したイベントによりポイントを集計 doAddPointByKnowledgeShow(); - + // Knowledgeにイイネを押したイベントによりポイント集計 + doAddPointByKnowledgeShow(); + // Knowledgeにイイネを押したイベントによりポイント集計 + doAddPointByKnowledgeLike(); + // Knowledgeをストックイベントによりポイント集計 + doAddPointByKnowledgeStock(); return true; @@ -49,6 +57,80 @@ public boolean doMigrate() throws Exception { + private void doAddPointByKnowledgeStock() throws InterruptedException { + List list; + int offset = 0; + int limit = 50; + do { + list = doAddPointByKnowledgeStock(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(200); + } + } while (list.size() > 0); + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private List doAddPointByKnowledgeStock(int offset, int limit) { + LOG.info("Aggregate point by knowledge stock"); + List list; + list = StockKnowledgesDao.get().selectAllWidthPager(limit, offset); + for (StockKnowledgesEntity stock : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(stock.getKnowledgeId()); + if (knowledge == null) { + LOG.info(" knowledge [" + stock.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + continue; + } + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(stock.getInsertUser()); + if (account == null) { + LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + continue; + } + user.setLoginUser(account); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, user, stock.getInsertDatetime(), knowledge); + } + return list; + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private void doAddPointByKnowledgeLike() throws InterruptedException { + List list; + int offset = 0; + int limit = 50; + do { + list = doAddPointByKnowledgeLike(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(200); + } + } while (list.size() > 0); + } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private List doAddPointByKnowledgeLike(int offset, int limit) { + LOG.info("Aggregate point by knowledge like"); + List list; + list = LikesDao.get().selectAllWidthPager(limit, offset); + for (LikesEntity like : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(like.getKnowledgeId()); + if (knowledge == null) { + LOG.info(" knowledge [" + like.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + continue; + } + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(like.getInsertUser()); + if (account == null) { + LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + continue; + } + user.setLoginUser(account); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, user, like.getInsertDatetime(), knowledge); + } + return list; + } + private void doAddPointByKnowledgeShow() throws InterruptedException { List list; int offset = 0; @@ -61,7 +143,6 @@ private void doAddPointByKnowledgeShow() throws InterruptedException { } } while (list.size() > 0); } - @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) private List doAddPointByKnowledgeShow(int offset, int limit) { LOG.info("Aggregate point by knowledge show"); @@ -81,7 +162,7 @@ private List doAddPointByKnowledgeShow(int offset, int limi } user.setLoginUser(account); LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, user, knowledge); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, user, viewHistoriesEntity.getInsertDatetime(), knowledge); } return list; } @@ -112,7 +193,7 @@ private List doAddPointByKnowledge(int offset, int limit) { } user.setLoginUser(account); LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, user, knowledge); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, user, knowledge.getInsertDatetime(), knowledge); } return knowledges; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java index d457965b4..4cc5bf77a 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java @@ -2,6 +2,7 @@ import java.sql.Timestamp; +import java.util.Date; import org.support.project.common.config.INT_FLAG; import org.support.project.common.util.StringUtils; @@ -27,18 +28,19 @@ public abstract class AbstractActivityProcessor implements ActivityProcessor { private static Object lockUser = new Object(); private static Object lockKnowledge = new Object(); - private LoginedUser user; + protected LoginedUser eventUser; + protected Date eventDateTime; /** - * @return the user + * @param eventUser the eventUser to set */ - public LoginedUser getUser() { - return user; + public void setEventUser(LoginedUser eventUser) { + this.eventUser = eventUser; } /** - * @param user the user to set + * @param eventDateTime the eventDateTime to set */ - public void setUser(LoginedUser user) { - this.user = user; + public void setEventDateTime(Date eventDateTime) { + this.eventDateTime = eventDateTime; } /** @@ -71,18 +73,16 @@ protected boolean isExistsActivity(int userId, Activity kind, String target) { /** * activity登録 - * @param userId アクティビティを実行したユーザ * @param kind アクティビティの種類 * @param target そのアクティビティでポイントを付与する対象 - * @param eventTime そのアクティビティが実行されたタイミング */ - protected ActivitiesEntity addActivity(int userId, Activity kind, String target, Timestamp eventTime) { + protected ActivitiesEntity addActivity(Activity kind, String target) { ActivitiesEntity entity = new ActivitiesEntity(); - entity.setUserId(userId); + entity.setUserId(eventUser.getUserId()); entity.setKind(kind.getValue()); entity.setTarget(target); - entity.setInsertUser(userId); - entity.setInsertDatetime(eventTime); + entity.setInsertUser(eventUser.getUserId()); + entity.setInsertDatetime(new Timestamp(eventDateTime.getTime())); entity.setDeleteFlag(INT_FLAG.OFF.getValue()); entity = ActivitiesDao.get().physicalInsert(entity); return entity; @@ -98,7 +98,7 @@ protected ActivitiesEntity addActivity(int userId, Activity kind, String target, * @param point * @return */ - protected int addPointForUser(int eventUser, Timestamp eventTime, int targetUser, long activityNo, int type, int point) { + protected int addPointForUser(int targetUser, long activityNo, int type, int point) { synchronized(lockUser) { long num = PointUserHistoriesDao.get().selectNumOnUser(targetUser); num++; @@ -108,8 +108,8 @@ protected int addPointForUser(int eventUser, Timestamp eventTime, int targetUser history.setActivityNo(activityNo); history.setType(type); history.setPoint(point); - history.setInsertUser(eventUser); - history.setInsertDatetime(eventTime); + history.setInsertUser(eventUser.getUserId()); + history.setInsertDatetime(new Timestamp(eventDateTime.getTime())); history.setDeleteFlag(INT_FLAG.OFF.getValue()); PointUserHistoriesDao.get().physicalInsert(history); @@ -139,7 +139,7 @@ protected int addPointForUser(int eventUser, Timestamp eventTime, int targetUser * @param point * @return */ - protected int addPointForKnowledge(int eventUser, Timestamp eventTime, long knowledgeId, long activityNo, int type, int point) { + protected int addPointForKnowledge(long knowledgeId, long activityNo, int type, int point) { synchronized (lockKnowledge) { long num = PointKnowledgeHistoriesDao.get().selectNumOnKnowledge(knowledgeId); num++; @@ -149,8 +149,8 @@ protected int addPointForKnowledge(int eventUser, Timestamp eventTime, long know history.setActivityNo(activityNo); history.setType(type); history.setPoint(point); - history.setInsertUser(eventUser); - history.setInsertDatetime(eventTime); + history.setInsertUser(eventUser.getUserId()); + history.setInsertDatetime(new Timestamp(eventDateTime.getTime())); history.setDeleteFlag(INT_FLAG.OFF.getValue()); PointKnowledgeHistoriesDao.get().physicalInsert(history); @@ -162,4 +162,5 @@ protected int addPointForKnowledge(int eventUser, Timestamp eventTime, long know return now; } } + } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java index d65bd2c87..f9653ab02 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java @@ -25,30 +25,24 @@ public void setKnowledge(KnowledgesEntity knowledge) { @Override public void execute() throws Exception { - if (getKnowledge() == null || getUser() == null) { + if (getKnowledge() == null || eventUser == null) { // ありえないけど念のため確認 return; } - if (isExistsActivity(getUser().getUserId(), getActivity(), String.valueOf(getKnowledge().getKnowledgeId()))) { + if (isExistsActivity(eventUser.getUserId(), getActivity(), String.valueOf(getKnowledge().getKnowledgeId()))) { // 既に指定のKnowledge登録済 return; } // ポイント発行アクティビティを生成 ActivitiesEntity activity = addActivity( - getUser().getUserId(), getActivity(), - String.valueOf(getKnowledge().getKnowledgeId()), - getKnowledge().getInsertDatetime()); - - + String.valueOf(getKnowledge().getKnowledgeId())); // 実行したユーザのポイントアップ TypeAndPoint exec = getTypeAndPointForActivityExecuter(); if (exec != null) { addPointForUser( - getUser().getUserId(), - getKnowledge().getInsertDatetime(), - getUser().getUserId(), // ターゲットは、実行したユーザ + eventUser.getUserId(), // ターゲットは、実行したユーザ activity.getActivityNo(), exec.type, exec.point); @@ -57,8 +51,6 @@ public void execute() throws Exception { TypeAndPoint owner = getTypeAndPointForKnowledgeOwner(); if (owner != null) { addPointForUser( - getUser().getUserId(), - getKnowledge().getInsertDatetime(), getKnowledge().getInsertUser(), // ターゲットは登録者 activity.getActivityNo(), exec.type, @@ -68,8 +60,6 @@ public void execute() throws Exception { TypeAndPoint knowledge = getTypeAndPointForKnowledge(); if (knowledge != null) { addPointForKnowledge( - getUser().getUserId(), - getKnowledge().getInsertDatetime(), getKnowledge().getKnowledgeId(), activity.getActivityNo(), exec.type, diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java index c6f792147..ed109694b 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java @@ -1,6 +1,7 @@ package org.support.project.knowledge.logic.activity; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.support.project.aop.Aspect; @@ -26,17 +27,24 @@ private List getActivityProcessors(Activity activity) { List array = new ArrayList<>(); if (activity == Activity.KNOWLEDGE_INSERT) { array.add(KnowledgeInsertActivity.get()); + } else if (activity == Activity.KNOWLEDGE_SHOW) { + array.add(KnowledgeShowActivity.get()); + } else if (activity == Activity.KNOWLEDGE_LIKE) { + array.add(KnowledgeLikeActivity.get()); + } else if (activity == Activity.KNOWLEDGE_STOCK) { + array.add(KnowledgeStockActivity.get()); } return array; } - private void execute(Activity activity, LoginedUser user, KnowledgesEntity knowledge, CommentsEntity comment) { + private void execute(Activity activity, LoginedUser eventUser, Date eventDateTime, KnowledgesEntity knowledge, CommentsEntity comment) { List processors = this.getActivityProcessors(activity); for (ActivityProcessor activityProcessor : processors) { if (activityProcessor instanceof AbstractActivityProcessor) { AbstractActivityProcessor processor = (AbstractActivityProcessor) activityProcessor; - processor.setUser(user); + processor.setEventUser(eventUser); + processor.setEventDateTime(eventDateTime); } if (activityProcessor instanceof AbstractAddPointForKnowledgeProcessor) { if (knowledge == null) { @@ -63,17 +71,17 @@ private void execute(Activity activity, LoginedUser user, KnowledgesEntity knowl } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void processActivity(Activity activity, LoginedUser user) { - execute(activity, user, null, null); + public void processActivity(Activity activity, LoginedUser eventUser, Date eventDateTime) { + execute(activity, eventUser, eventDateTime, null, null); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void processActivity(Activity activity, LoginedUser user, KnowledgesEntity knowledge) { - execute(activity, user, knowledge, null); + public void processActivity(Activity activity, LoginedUser eventUser, Date eventDateTime, KnowledgesEntity knowledge) { + execute(activity, eventUser, eventDateTime, knowledge, null); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - public void processActivity(Activity activity, LoginedUser user, CommentsEntity comment) { - execute(activity, user, null, comment); + public void processActivity(Activity activity, LoginedUser eventUser, Date eventDateTime, CommentsEntity comment) { + execute(activity, eventUser, eventDateTime, null, comment); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java index 486d782ae..d2ef7b8f9 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java @@ -34,6 +34,12 @@ public interface ActivityProcessor { public static final int TYPE_KNOWLEDGE_DO_SHOW = 21; public static final int TYPE_KNOWLEDGE_SHOWN_BY_OHER = 22; public static final int TYPE_KNOWLEDGE_SHOWN = 23; + public static final int TYPE_KNOWLEDGE_DO_LIKE = 31; + public static final int TYPE_KNOWLEDGE_LIKED_BY_OHER = 32; + public static final int TYPE_KNOWLEDGE_LIKED = 33; + public static final int TYPE_KNOWLEDGE_DO_STOCK = 41; + public static final int TYPE_KNOWLEDGE_STOCKED_BY_OHER = 42; + public static final int TYPE_KNOWLEDGE_STOCKED = 43; void execute() throws Exception; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java index fd43d6fe2..75a36ded1 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java @@ -22,7 +22,7 @@ public static KnowledgeInsertActivity get() { } @Override protected Activity getActivity() { - LOG.info("Start add point process on insert knowledge."); + LOG.debug("Start add point process on insert knowledge."); return Activity.KNOWLEDGE_INSERT; } @Override diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java new file mode 100644 index 000000000..c74b9000f --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java @@ -0,0 +1,39 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; + +/** + * + * 3 | 31 | 参照者 | 2 | 記事にイイネのアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) + * 3 | 32 | 記事登録者 | 10 | 自分が登録された記事にイイネがついたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 3 | 33 | 記事 | 10 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * + * @author koda + */ +public class KnowledgeLikeActivity extends AbstractAddPointForKnowledgeProcessor { + private static final Log LOG = LogFactory.getLog(KnowledgeLikeActivity.class); + public static KnowledgeLikeActivity get() { + return Container.getComp(KnowledgeLikeActivity.class); + } + + @Override + protected Activity getActivity() { + LOG.debug("Start add point process on like knowledge."); + return Activity.KNOWLEDGE_LIKE; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_LIKE, 2); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { + return new TypeAndPoint(TYPE_KNOWLEDGE_LIKED_BY_OHER, 10); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_KNOWLEDGE_LIKED, 10); + } + +} diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java index 5e6f28328..559d89218 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java @@ -24,7 +24,7 @@ public static KnowledgeShowActivity get() { @Override protected Activity getActivity() { - LOG.info("Start add point process on show knowledge."); + LOG.debug("Start add point process on show knowledge."); return Activity.KNOWLEDGE_SHOW; } @Override diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java new file mode 100644 index 000000000..338e92b3e --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java @@ -0,0 +1,39 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; + +/** + * + * 4 | 41 | 参照者 | 0 | ストックした場合、ストックした人にポイントは付与しない + * 4 | 42 | 記事登録者 | 2 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 4 | 43 | 記事 | 2 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * + * @author koda + */ +public class KnowledgeStockActivity extends AbstractAddPointForKnowledgeProcessor { + private static final Log LOG = LogFactory.getLog(KnowledgeStockActivity.class); + public static KnowledgeStockActivity get() { + return Container.getComp(KnowledgeStockActivity.class); + } + + @Override + protected Activity getActivity() { + LOG.debug("Start add point process on stock knowledge."); + return Activity.KNOWLEDGE_STOCK; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return null; + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { + return new TypeAndPoint(TYPE_KNOWLEDGE_STOCKED_BY_OHER, 2); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_KNOWLEDGE_STOCKED, 2); + } + +} From 8de0c2034e114bba8803e20b97939e5b8ffc52e1 Mon Sep 17 00:00:00 2001 From: Koda Date: Sun, 3 Sep 2017 12:50:45 +0900 Subject: [PATCH 042/138] #840 Add add point process at knowledge answer --- .../control/protect/KnowledgeControl.java | 3 + .../control/protect/SurveyControl.java | 2 +- .../project/knowledge/deploy/InitDB.java | 3 + .../deploy/v1_11_0/Migrate_1_11_2.java | 55 ++++++++++++++++++- ...AbstractAddPointForKnowledgeProcessor.java | 8 +-- .../knowledge/logic/activity/Activity.java | 7 ++- .../logic/activity/ActivityLogic.java | 3 + .../logic/activity/ActivityProcessor.java | 3 + .../activity/KnowledgeAnswerActivity.java | 39 +++++++++++++ .../logic/hook/BeforeSavePointHook.java | 21 +++++++ .../knowledge/logic/hook/HookFactory.java | 1 + 11 files changed, 136 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java create mode 100644 src/main/java/org/support/project/knowledge/logic/hook/BeforeSavePointHook.java diff --git a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java index 638ec6a9c..1f345d056 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java @@ -329,6 +329,9 @@ private Boundary update(KnowledgesEntity entity) throws Exception { @Post(subscribeToken = "knowledge", checkReqToken = true) public Boundary save(KnowledgesEntity entity) throws Exception { try { + if (entity.getPoint() == null) { + entity.setPoint(0); // 初期値 + } if (entity.getKnowledgeId() != null && entity.getKnowledgeId() >= 1) { return update(entity); } else { diff --git a/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java b/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java index a1cea44fc..ad433e846 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/SurveyControl.java @@ -226,7 +226,7 @@ public Boundary answer() throws InstantiationException, IllegalAccessException, LOG.debug(PropertyUtil.reflectionToString(answer)); } SurveyLogic.get().saveAnswer(answer, getLoginUserId()); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SURVEY, getLoginedUser(), new Date(), + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_ANSWER, getLoginedUser(), new Date(), KnowledgesDao.get().selectOnKey(knowledgeId)); // メッセージ送信 diff --git a/src/main/java/org/support/project/knowledge/deploy/InitDB.java b/src/main/java/org/support/project/knowledge/deploy/InitDB.java index 72b8c1df8..e222e874b 100644 --- a/src/main/java/org/support/project/knowledge/deploy/InitDB.java +++ b/src/main/java/org/support/project/knowledge/deploy/InitDB.java @@ -126,6 +126,8 @@ public String init() throws Exception { } public void start() throws Exception { + LOG.info("Lastest database version is " + CURRENT + " now"); + String version = ""; Migrate migrate; @@ -151,6 +153,7 @@ public void start() throws Exception { doMigrate(migrate, version); return; } + LOG.info("Current database version is " + version + " now"); // バージョンアップ Iterator versions = MAP.keySet().iterator(); diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index a777d6514..66ad2ac4a 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -5,19 +5,24 @@ import org.support.project.aop.Aspect; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.knowledge.config.AppConfig; +import org.support.project.knowledge.config.UserConfig; import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.dao.LikesDao; import org.support.project.knowledge.dao.StockKnowledgesDao; +import org.support.project.knowledge.dao.SurveyAnswersDao; import org.support.project.knowledge.dao.ViewHistoriesDao; import org.support.project.knowledge.deploy.Migrate; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.LikesEntity; import org.support.project.knowledge.entity.StockKnowledgesEntity; +import org.support.project.knowledge.entity.SurveyAnswersEntity; import org.support.project.knowledge.entity.ViewHistoriesEntity; import org.support.project.knowledge.logic.activity.Activity; import org.support.project.knowledge.logic.activity.ActivityLogic; import org.support.project.ormapping.tool.dao.InitializeDao; import org.support.project.web.bean.LoginedUser; +import org.support.project.web.dao.UserConfigsDao; import org.support.project.web.dao.UsersDao; import org.support.project.web.entity.UsersEntity; @@ -39,6 +44,8 @@ public boolean doMigrate() throws Exception { // 参照回数を集計 doSetViewCountToKnowledge(); + // ユーザについているポイントをクリア + clearUserPoint(); // Knowledgeを登録したイベントによりポイントを集計 doAddPointByKnowledge(); @@ -50,6 +57,8 @@ public boolean doMigrate() throws Exception { doAddPointByKnowledgeLike(); // Knowledgeをストックイベントによりポイント集計 doAddPointByKnowledgeStock(); + // Knowledgeのアンケートを回答したイベントによりポイント集計 + doAddPointByKnowledgeAnswer(); return true; @@ -57,6 +66,43 @@ public boolean doMigrate() throws Exception { + private void doAddPointByKnowledgeAnswer() throws InterruptedException { + List list; + int offset = 0; + int limit = 50; + do { + list = doAddPointByKnowledgeAnswer(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(200); + } + } while (list.size() > 0); + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private List doAddPointByKnowledgeAnswer(int offset, int limit) { + LOG.info("Aggregate point by knowledge answer"); + List list; + list = SurveyAnswersDao.get().selectAllWidthPager(limit, offset); + for (SurveyAnswersEntity answer : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(answer.getKnowledgeId()); + if (knowledge == null) { + LOG.info(" knowledge [" + answer.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + continue; + } + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(answer.getInsertUser()); + if (account == null) { + LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + continue; + } + user.setLoginUser(account); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_ANSWER, user, answer.getInsertDatetime(), knowledge); + } + return list; + } + private void doAddPointByKnowledgeStock() throws InterruptedException { List list; int offset = 0; @@ -89,7 +135,7 @@ private List doAddPointByKnowledgeStock(int offset, int l } user.setLoginUser(account); LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, user, stock.getInsertDatetime(), knowledge); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_STOCK, user, stock.getInsertDatetime(), knowledge); } return list; } @@ -219,7 +265,14 @@ private List doSetViewCountToKnowledge(int offset, int limit) LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); long count = ViewHistoriesDao.get().selectCountOnKnowledgeId(knowledge.getKnowledgeId()); KnowledgesDao.get().updateViewCount(count, knowledge.getKnowledgeId()); + + //ついでにポイントも初期化 + KnowledgesDao.get().updatePoint(knowledge.getKnowledgeId(), 0); } return knowledges; } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private void clearUserPoint() { + UserConfigsDao.get().removeAllUserConfig(AppConfig.get().getSystemName(), UserConfig.POINT); + } } \ No newline at end of file diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java index f9653ab02..1d3c70e9f 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java @@ -53,8 +53,8 @@ public void execute() throws Exception { addPointForUser( getKnowledge().getInsertUser(), // ターゲットは登録者 activity.getActivityNo(), - exec.type, - exec.point); + owner.type, + owner.point); } // 記事のポイントアップ TypeAndPoint knowledge = getTypeAndPointForKnowledge(); @@ -62,8 +62,8 @@ public void execute() throws Exception { addPointForKnowledge( getKnowledge().getKnowledgeId(), activity.getActivityNo(), - exec.type, - exec.point); + knowledge.type, + knowledge.point); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/Activity.java b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java index 95127e871..4bcd0c21c 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/Activity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java @@ -47,6 +47,7 @@ * * ユーザのポイントは、USER_CONFIGSテーブルへ格納する * ポイントはランダムで少し増減した方が面白い?? + * ポイントは、だいたいの定義で、各実装の処理内で拡張する(例えば、イイネは、件数が増える毎に、ナレッジに付くポイントは増加するとか) * * @author koda */ @@ -56,7 +57,7 @@ public enum Activity { KNOWLEDGE_SHOW, // 記事参照 KNOWLEDGE_LIKE, // イイネを押した KNOWLEDGE_STOCK, // ストックした - KNOWLEDGE_SURVEY, // アンケートに回答した + KNOWLEDGE_ANSWER, // アンケートに回答した KNOWLEDGE_EVENT_ADD, // イベントに参加した KNOWLEDGE_EVENT_DELETE, // イベント参加キャンセル KNOWLEDGE_COMMENT_ADD, // コメント追加 @@ -71,7 +72,7 @@ public int getValue() { return 3; } else if (this ==KNOWLEDGE_STOCK) { return 4; - } else if (this ==KNOWLEDGE_SURVEY) { + } else if (this ==KNOWLEDGE_ANSWER) { return 5; } else if (this ==KNOWLEDGE_EVENT_ADD) { return 6; @@ -95,7 +96,7 @@ public static Activity getType(int type) { } else if (type == 4) { return KNOWLEDGE_STOCK; } else if (type == 5) { - return KNOWLEDGE_SURVEY; + return KNOWLEDGE_ANSWER; } else if (type == 6) { return KNOWLEDGE_EVENT_ADD; } else if (type == -6) { diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java index ed109694b..931af3460 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java @@ -33,9 +33,12 @@ private List getActivityProcessors(Activity activity) { array.add(KnowledgeLikeActivity.get()); } else if (activity == Activity.KNOWLEDGE_STOCK) { array.add(KnowledgeStockActivity.get()); + } else if (activity == Activity.KNOWLEDGE_ANSWER) { + array.add(KnowledgeAnswerActivity.get()); } + return array; } private void execute(Activity activity, LoginedUser eventUser, Date eventDateTime, KnowledgesEntity knowledge, CommentsEntity comment) { diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java index d2ef7b8f9..26b791ddb 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java @@ -40,6 +40,9 @@ public interface ActivityProcessor { public static final int TYPE_KNOWLEDGE_DO_STOCK = 41; public static final int TYPE_KNOWLEDGE_STOCKED_BY_OHER = 42; public static final int TYPE_KNOWLEDGE_STOCKED = 43; + public static final int TYPE_KNOWLEDGE_DO_ANSWER = 51; + public static final int TYPE_KNOWLEDGE_ANSWERD_BY_OHER = 52; + public static final int TYPE_KNOWLEDGE_ANSWERD = 53; void execute() throws Exception; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java new file mode 100644 index 000000000..cce7d92f7 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java @@ -0,0 +1,39 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; + +/** + * + * 5 | 51 | 参照者 | 3 | アンケート回答者にポイント付与 + * 5 | 52 | 記事登録者 | 3 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 5 | 53 | 記事 | 3 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * + * @author koda + */ +public class KnowledgeAnswerActivity extends AbstractAddPointForKnowledgeProcessor { + private static final Log LOG = LogFactory.getLog(KnowledgeAnswerActivity.class); + public static KnowledgeAnswerActivity get() { + return Container.getComp(KnowledgeAnswerActivity.class); + } + + @Override + protected Activity getActivity() { + LOG.debug("Start add point process on answer knowledge."); + return Activity.KNOWLEDGE_ANSWER; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_ANSWER, 3); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { + return new TypeAndPoint(TYPE_KNOWLEDGE_ANSWERD_BY_OHER, 3); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_KNOWLEDGE_ANSWERD, 3); + } + +} diff --git a/src/main/java/org/support/project/knowledge/logic/hook/BeforeSavePointHook.java b/src/main/java/org/support/project/knowledge/logic/hook/BeforeSavePointHook.java new file mode 100644 index 000000000..00e40c088 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/hook/BeforeSavePointHook.java @@ -0,0 +1,21 @@ +package org.support.project.knowledge.logic.hook; + +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.vo.KnowledgeData; +import org.support.project.web.bean.LoginedUser; + +@DI(instance = Instance.Singleton) +public class BeforeSavePointHook implements BeforeSaveHook { + + @Override + public void beforeSave(KnowledgeData data, KnowledgesEntity db, LoginedUser loginedUser) throws Exception { + if (data.getKnowledge().getKnowledgeId() == null) { + // 新規登録 + data.getKnowledge().setPoint(0); + } else { + data.getKnowledge().setPoint(db.getPoint()); // ポイントは、現在のDBの値をコピー + } + } +} diff --git a/src/main/java/org/support/project/knowledge/logic/hook/HookFactory.java b/src/main/java/org/support/project/knowledge/logic/hook/HookFactory.java index 5b6e827ac..cdd4f0298 100644 --- a/src/main/java/org/support/project/knowledge/logic/hook/HookFactory.java +++ b/src/main/java/org/support/project/knowledge/logic/hook/HookFactory.java @@ -22,6 +22,7 @@ public static List getBeforeSaveHookInstance(KnowledgeData knowl hooks.add(Container.getComp(BeforeSaveOldEventRemoveHook.class)); } } + hooks.add(Container.getComp(BeforeSavePointHook.class)); return hooks; } From cf5b3f26fe2d81d7c723b924df70b8da242133df Mon Sep 17 00:00:00 2001 From: Koda Date: Sun, 3 Sep 2017 18:19:55 +0900 Subject: [PATCH 043/138] #840 Add add point process at knowledge join event --- .../deploy/v1_11_0/Migrate_1_11_2.java | 39 +++++++++++++++++++ .../logic/activity/ActivityLogic.java | 2 + .../logic/activity/ActivityProcessor.java | 3 ++ .../activity/KnowledgeEventActivity.java | 39 +++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index 66ad2ac4a..9d51a8289 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -9,12 +9,14 @@ import org.support.project.knowledge.config.UserConfig; import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.dao.LikesDao; +import org.support.project.knowledge.dao.ParticipantsDao; import org.support.project.knowledge.dao.StockKnowledgesDao; import org.support.project.knowledge.dao.SurveyAnswersDao; import org.support.project.knowledge.dao.ViewHistoriesDao; import org.support.project.knowledge.deploy.Migrate; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.LikesEntity; +import org.support.project.knowledge.entity.ParticipantsEntity; import org.support.project.knowledge.entity.StockKnowledgesEntity; import org.support.project.knowledge.entity.SurveyAnswersEntity; import org.support.project.knowledge.entity.ViewHistoriesEntity; @@ -59,12 +61,49 @@ public boolean doMigrate() throws Exception { doAddPointByKnowledgeStock(); // Knowledgeのアンケートを回答したイベントによりポイント集計 doAddPointByKnowledgeAnswer(); + // Knowledgeイベント参加したイベントによりポイント集計 + doAddPointByKnowledgeJoinEvent(); return true; } + private void doAddPointByKnowledgeJoinEvent() throws InterruptedException { + List list; + int offset = 0; + int limit = 50; + do { + list = doAddPointByKnowledgeJoinEvent(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(200); + } + } while (list.size() > 0); + } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private List doAddPointByKnowledgeJoinEvent(int offset, int limit) { + LOG.info("Aggregate point by knowledge join event"); + List list; + list = ParticipantsDao.get().selectAllWidthPager(limit, offset); + for (ParticipantsEntity item : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); + if (knowledge == null) { + LOG.info(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + continue; + } + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); + if (account == null) { + LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + continue; + } + user.setLoginUser(account); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_ADD, user, item.getInsertDatetime(), knowledge); + } + return list; + } private void doAddPointByKnowledgeAnswer() throws InterruptedException { List list; diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java index 931af3460..b2e7c1e16 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java @@ -35,6 +35,8 @@ private List getActivityProcessors(Activity activity) { array.add(KnowledgeStockActivity.get()); } else if (activity == Activity.KNOWLEDGE_ANSWER) { array.add(KnowledgeAnswerActivity.get()); + } else if (activity == Activity.KNOWLEDGE_EVENT_ADD) { + array.add(KnowledgeEventActivity.get()); } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java index 26b791ddb..8cd8ac780 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java @@ -43,6 +43,9 @@ public interface ActivityProcessor { public static final int TYPE_KNOWLEDGE_DO_ANSWER = 51; public static final int TYPE_KNOWLEDGE_ANSWERD_BY_OHER = 52; public static final int TYPE_KNOWLEDGE_ANSWERD = 53; + public static final int TYPE_KNOWLEDGE_DO_JOIN_EVENT = 61; + public static final int TYPE_KNOWLEDGE_JOINED_BY_OHER = 62; + public static final int TYPE_KNOWLEDGE_JOINED = 63; void execute() throws Exception; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java new file mode 100644 index 000000000..b75a76fe5 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java @@ -0,0 +1,39 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; + +/** + * + * 6 | 61 | 参照者 | 5 | イベント参加者にポイント付与 + * 6 | 62 | 記事登録者 | 5 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) + * 6 | 63 | 記事 | 5 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) + * + * @author koda + */ +public class KnowledgeEventActivity extends AbstractAddPointForKnowledgeProcessor { + private static final Log LOG = LogFactory.getLog(KnowledgeEventActivity.class); + public static KnowledgeEventActivity get() { + return Container.getComp(KnowledgeEventActivity.class); + } + + @Override + protected Activity getActivity() { + LOG.debug("Start add point process on answer knowledge."); + return Activity.KNOWLEDGE_ANSWER; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_JOIN_EVENT, 5); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { + return new TypeAndPoint(TYPE_KNOWLEDGE_JOINED_BY_OHER, 5); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_KNOWLEDGE_JOINED, 5); + } + +} From 9f8d10493b98f482b7efa729cb8439dc65186874 Mon Sep 17 00:00:00 2001 From: Koda Date: Mon, 4 Sep 2017 22:24:18 +0900 Subject: [PATCH 044/138] #840 Add aspect of start transaction for select method --- .../project/knowledge/dao/AccountImagesDao.java | 2 ++ .../project/knowledge/dao/ActivitiesDao.java | 2 ++ .../support/project/knowledge/dao/BadgesDao.java | 2 ++ .../project/knowledge/dao/CommentsDao.java | 3 +++ .../knowledge/dao/DraftItemValuesDao.java | 2 ++ .../knowledge/dao/DraftKnowledgesDao.java | 4 +++- .../support/project/knowledge/dao/EventsDao.java | 4 ++++ .../project/knowledge/dao/ExGroupsDao.java | 7 +++++++ .../project/knowledge/dao/ExUsersDao.java | 4 ++++ .../project/knowledge/dao/ItemChoicesDao.java | 2 ++ .../knowledge/dao/KnowledgeEditGroupsDao.java | 2 ++ .../knowledge/dao/KnowledgeEditUsersDao.java | 2 ++ .../project/knowledge/dao/KnowledgeFilesDao.java | 6 ++++++ .../knowledge/dao/KnowledgeHistoriesDao.java | 4 ++++ .../knowledge/dao/KnowledgeItemValuesDao.java | 2 ++ .../project/knowledge/dao/KnowledgeTagsDao.java | 2 ++ .../project/knowledge/dao/KnowledgeUsersDao.java | 2 ++ .../project/knowledge/dao/KnowledgesDao.java | 16 ++++++++++++++++ .../project/knowledge/dao/LikeCommentsDao.java | 4 ++++ .../support/project/knowledge/dao/LikesDao.java | 4 ++++ .../knowledge/dao/MailHookConditionsDao.java | 2 ++ .../project/knowledge/dao/MailHooksDao.java | 3 +++ .../project/knowledge/dao/NotifyConfigsDao.java | 4 ++++ .../project/knowledge/dao/NotifyQueuesDao.java | 3 +++ .../project/knowledge/dao/ParticipantsDao.java | 2 ++ .../support/project/knowledge/dao/PinsDao.java | 2 ++ .../dao/PointKnowledgeHistoriesDao.java | 2 ++ .../knowledge/dao/PointUserHistoriesDao.java | 2 ++ .../knowledge/dao/StockKnowledgesDao.java | 4 ++++ .../support/project/knowledge/dao/StocksDao.java | 5 +++++ .../project/knowledge/dao/SurveyAnswersDao.java | 3 +++ .../project/knowledge/dao/SurveyChoicesDao.java | 2 ++ .../knowledge/dao/SurveyItemAnswersDao.java | 3 +++ .../project/knowledge/dao/SurveyItemsDao.java | 2 ++ .../project/knowledge/dao/SurveysDao.java | 3 +++ .../support/project/knowledge/dao/TagsDao.java | 9 +++++++++ .../project/knowledge/dao/TargetsDao.java | 8 ++++++++ .../knowledge/dao/TemplateMastersDao.java | 3 +++ .../support/project/knowledge/dao/TokensDao.java | 2 ++ .../project/knowledge/dao/ViewHistoriesDao.java | 3 +++ .../project/knowledge/dao/WebhookConfigsDao.java | 3 +++ .../project/knowledge/dao/WebhooksDao.java | 2 ++ .../knowledge/dao/gen/GenAccountImagesDao.java | 8 ++++++++ .../knowledge/dao/gen/GenActivitiesDao.java | 8 ++++++++ .../project/knowledge/dao/gen/GenBadgesDao.java | 8 ++++++++ .../knowledge/dao/gen/GenCommentsDao.java | 8 ++++++++ .../knowledge/dao/gen/GenDraftItemValuesDao.java | 14 ++++++++++++++ .../knowledge/dao/gen/GenDraftKnowledgesDao.java | 8 ++++++++ .../project/knowledge/dao/gen/GenEventsDao.java | 8 ++++++++ .../knowledge/dao/gen/GenItemChoicesDao.java | 14 ++++++++++++++ .../dao/gen/GenKnowledgeEditGroupsDao.java | 12 ++++++++++++ .../dao/gen/GenKnowledgeEditUsersDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenKnowledgeFilesDao.java | 8 ++++++++ .../knowledge/dao/gen/GenKnowledgeGroupsDao.java | 12 ++++++++++++ .../dao/gen/GenKnowledgeHistoriesDao.java | 12 ++++++++++++ .../dao/gen/GenKnowledgeItemValuesDao.java | 14 ++++++++++++++ .../knowledge/dao/gen/GenKnowledgeTagsDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenKnowledgeUsersDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenKnowledgesDao.java | 8 ++++++++ .../knowledge/dao/gen/GenLikeCommentsDao.java | 8 ++++++++ .../project/knowledge/dao/gen/GenLikesDao.java | 8 ++++++++ .../dao/gen/GenMailHookConditionsDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenMailHooksDao.java | 8 ++++++++ .../dao/gen/GenMailLocaleTemplatesDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenMailPostsDao.java | 8 ++++++++ .../knowledge/dao/gen/GenMailPropertiesDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenMailTemplatesDao.java | 8 ++++++++ .../knowledge/dao/gen/GenNotifyConfigsDao.java | 8 ++++++++ .../knowledge/dao/gen/GenNotifyQueuesDao.java | 8 ++++++++ .../knowledge/dao/gen/GenParticipantsDao.java | 12 ++++++++++++ .../project/knowledge/dao/gen/GenPinsDao.java | 8 ++++++++ .../dao/gen/GenPointKnowledgeHistoriesDao.java | 12 ++++++++++++ .../dao/gen/GenPointUserHistoriesDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenServiceConfigsDao.java | 8 ++++++++ .../dao/gen/GenServiceLocaleConfigsDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenStockKnowledgesDao.java | 12 ++++++++++++ .../project/knowledge/dao/gen/GenStocksDao.java | 8 ++++++++ .../knowledge/dao/gen/GenSurveyAnswersDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenSurveyChoicesDao.java | 14 ++++++++++++++ .../dao/gen/GenSurveyItemAnswersDao.java | 14 ++++++++++++++ .../knowledge/dao/gen/GenSurveyItemsDao.java | 12 ++++++++++++ .../project/knowledge/dao/gen/GenSurveysDao.java | 8 ++++++++ .../project/knowledge/dao/gen/GenTagsDao.java | 8 ++++++++ .../knowledge/dao/gen/GenTemplateItemsDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenTemplateMastersDao.java | 8 ++++++++ .../project/knowledge/dao/gen/GenTokensDao.java | 8 ++++++++ .../knowledge/dao/gen/GenUserBadgesDao.java | 12 ++++++++++++ .../knowledge/dao/gen/GenViewHistoriesDao.java | 8 ++++++++ .../project/knowledge/dao/gen/GenVotesDao.java | 8 ++++++++ .../knowledge/dao/gen/GenWebhookConfigsDao.java | 8 ++++++++ .../knowledge/dao/gen/GenWebhooksDao.java | 8 ++++++++ 91 files changed, 641 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/support/project/knowledge/dao/AccountImagesDao.java b/src/main/java/org/support/project/knowledge/dao/AccountImagesDao.java index 8a7111e71..6f24511f7 100644 --- a/src/main/java/org/support/project/knowledge/dao/AccountImagesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/AccountImagesDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -24,6 +25,7 @@ public static AccountImagesDao get() { return Container.getComp(AccountImagesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public AccountImagesEntity selectOnUserId(Integer userId) { String sql = "SELECT * FROM ACCOUNT_IMAGES WHERE USER_ID = ?"; return executeQuerySingle(sql, AccountImagesEntity.class, userId); diff --git a/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java b/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java index fd931f03e..887366adc 100644 --- a/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ActivitiesDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -22,6 +23,7 @@ public class ActivitiesDao extends GenActivitiesDao { public static ActivitiesDao get() { return Container.getComp(ActivitiesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ActivitiesEntity select(int userId, int type, String target) { String sql = "SELECT * FROM ACTIVITIES WHERE USER_ID = ? AND KIND = ? AND TARGET = ?"; return executeQuerySingle(sql, ActivitiesEntity.class, userId, type, target); diff --git a/src/main/java/org/support/project/knowledge/dao/BadgesDao.java b/src/main/java/org/support/project/knowledge/dao/BadgesDao.java index d9947622b..1bd55820f 100644 --- a/src/main/java/org/support/project/knowledge/dao/BadgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/BadgesDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -32,6 +33,7 @@ public static BadgesDao get() { * Get Next id * @return next id */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(NO) FROM BADGES;"; Integer integer = executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/CommentsDao.java b/src/main/java/org/support/project/knowledge/dao/CommentsDao.java index 548eb64c0..9dc93b6f6 100644 --- a/src/main/java/org/support/project/knowledge/dao/CommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/CommentsDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -26,6 +27,7 @@ public static CommentsDao get() { return Container.getComp(CommentsDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { StringBuilder builder = new StringBuilder(); builder.append("SELECT COMMENTS.*, UPDATE_USER.USER_NAME AS UPDATE_USER_NAME, INSERT_USER.USER_NAME AS INSERT_USER_NAME FROM COMMENTS "); @@ -42,6 +44,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer countOnKnowledgeId(Long knowledgeId) { String sql = "SELECT COUNT(*) FROM COMMENTS WHERE KNOWLEDGE_ID = ? AND DELETE_FLAG = 0 "; return super.executeQuerySingle(sql, Integer.class, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/DraftItemValuesDao.java b/src/main/java/org/support/project/knowledge/dao/DraftItemValuesDao.java index 4e16779fa..24e5dcd72 100644 --- a/src/main/java/org/support/project/knowledge/dao/DraftItemValuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/DraftItemValuesDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -27,6 +28,7 @@ public static DraftItemValuesDao get() { * @param draftId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int deleteOnDraftId(Long draftId) { String sql = "DELETE FROM DRAFT_ITEM_VALUES WHERE DRAFT_ID = ?"; return super.executeUpdate(sql, draftId); diff --git a/src/main/java/org/support/project/knowledge/dao/DraftKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/DraftKnowledgesDao.java index b8a38325f..2045e765c 100644 --- a/src/main/java/org/support/project/knowledge/dao/DraftKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/DraftKnowledgesDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -25,12 +26,13 @@ public static DraftKnowledgesDao get() { return Container.getComp(DraftKnowledgesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnUser(Integer loginUserId, int limit, int offset) { String sql = "SELECT * FROM DRAFT_KNOWLEDGES WHERE INSERT_USER = ? limit ? offset ?"; return super.executeQueryList(sql, DraftKnowledgesEntity.class, loginUserId, limit, offset); } - + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public DraftKnowledgesEntity selectOnKnowledgeAndUser(Long knowledgeId, Integer loginUserId) { String sql = "SELECT * FROM DRAFT_KNOWLEDGES WHERE INSERT_USER = ? AND KNOWLEDGE_ID = ?"; return super.executeQuerySingle(sql, DraftKnowledgesEntity.class, loginUserId, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/EventsDao.java b/src/main/java/org/support/project/knowledge/dao/EventsDao.java index 33edbfc6a..3ed0ec4a7 100644 --- a/src/main/java/org/support/project/knowledge/dao/EventsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/EventsDao.java @@ -5,6 +5,7 @@ import java.util.Calendar; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -31,6 +32,7 @@ public static EventsDao get() { return Container.getComp(EventsDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAccessAbleEvents(Calendar start, Calendar end, LoginedUser loginedUser) { String sql; if (loginedUser != null && loginedUser.isAdmin()) { @@ -49,6 +51,7 @@ public List selectAccessAbleEvents(Calendar start, Calendar end, L return executeQueryList(sql, EventsEntity.class, params.toArray(new Object[0])); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) private String addAccessCondition(LoginedUser loginedUser, String sql, List params) { Integer loginuserId = Integer.MIN_VALUE; if (loginedUser != null) { @@ -79,6 +82,7 @@ private String addAccessCondition(LoginedUser loginedUser, String sql, List selectAccessAbleEvents(Calendar start, LoginedUser loginedUser, int limit, int offset) { String sql; if (loginedUser != null && loginedUser.isAdmin()) { diff --git a/src/main/java/org/support/project/knowledge/dao/ExGroupsDao.java b/src/main/java/org/support/project/knowledge/dao/ExGroupsDao.java index d8b8236cb..439ee8a1c 100644 --- a/src/main/java/org/support/project/knowledge/dao/ExGroupsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ExGroupsDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -41,6 +42,7 @@ public static ExGroupsDao get() { * @return */ @Override + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectMyGroup(LoginedUser loginedUser, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ExGroupsDao/ExGroupsDao_selectMyGroup.sql"); return executeQueryList(sql, GroupsEntity.class, loginedUser.getUserId(), limit, offset); @@ -56,6 +58,7 @@ public List selectMyGroup(LoginedUser loginedUser, int offset, int * @return */ @Override + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAccessAbleGroups(LoginedUser loginedUser, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ExGroupsDao/ExGroupsDao_selectAccessAbleGroups.sql"); return executeQueryList(sql, GroupsEntity.class, loginedUser.getUserId(), limit, offset); @@ -71,6 +74,7 @@ public List selectAccessAbleGroups(LoginedUser loginedUser, int of * @return */ @Override + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKeyword(String keyword, LoginedUser loginedUser, int offset, int limit) { if (loginedUser != null && loginedUser.isAdmin()) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ExGroupsDao/ExGroupsDao_selectAdminOnKeyword.sql"); @@ -92,6 +96,7 @@ public List selectOnKeyword(String keyword, LoginedUser loginedUse * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectGroupsWithCount(int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ExGroupsDao/ExGroupsDao_selectGroupsWithCount.sql"); return executeQueryList(sql, GroupsEntity.class, limit, offset); @@ -102,6 +107,7 @@ public List selectGroupsWithCount(int offset, int limit) { * @param groupId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectGroupKnowledgeCount(int groupId) { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_GROUPS WHERE GROUP_ID = ?"; return executeQuerySingle(sql, Integer.class, groupId); @@ -111,6 +117,7 @@ public Integer selectGroupKnowledgeCount(int groupId) { * @param groupId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectGroupUserCount(int groupId) { String sql = "SELECT COUNT(*) FROM USER_GROUPS WHERE GROUP_ID = ?"; return executeQuerySingle(sql, Integer.class, groupId); diff --git a/src/main/java/org/support/project/knowledge/dao/ExUsersDao.java b/src/main/java/org/support/project/knowledge/dao/ExUsersDao.java index 1c7476e76..82f4d1dac 100644 --- a/src/main/java/org/support/project/knowledge/dao/ExUsersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ExUsersDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.knowledge.vo.AccountInfo; import org.support.project.knowledge.vo.GroupUser; @@ -35,6 +36,7 @@ public static ExUsersDao get() { * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectGroupUser(Integer groupId, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ExUsersDao/selectGroupUser.sql"); return executeQueryList(sql, GroupUser.class, groupId, limit, offset); @@ -45,6 +47,7 @@ public List selectGroupUser(Integer groupId, int offset, int limit) { * * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectNotifyPublicUsers() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ExUsersDao/selectNotifyPublicUsers.sql"); return executeQueryList(sql, UsersEntity.class); @@ -58,6 +61,7 @@ public List selectNotifyPublicUsers() { * @param userId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public AccountInfo selectAccountInfoOnKey(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ExUsersDao/selectAccountInfoOnKey.sql"); AccountInfo info = executeQuerySingle(sql, AccountInfo.class, userId); diff --git a/src/main/java/org/support/project/knowledge/dao/ItemChoicesDao.java b/src/main/java/org/support/project/knowledge/dao/ItemChoicesDao.java index f22a32bc8..044bd0b00 100644 --- a/src/main/java/org/support/project/knowledge/dao/ItemChoicesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ItemChoicesDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -33,6 +34,7 @@ public static ItemChoicesDao get() { * @param itemNo * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItem(Integer typeId, Integer itemNo) { String sql = "SELECT * FROM ITEM_CHOICES WHERE TYPE_ID = ? AND ITEM_NO = ? AND DELETE_FLAG = 0"; return super.executeQueryList(sql, ItemChoicesEntity.class, typeId, itemNo); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgeEditGroupsDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgeEditGroupsDao.java index 7c803b2f5..5b7436d83 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgeEditGroupsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgeEditGroupsDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -23,6 +24,7 @@ public static KnowledgeEditGroupsDao get() { return Container.getComp(KnowledgeEditGroupsDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM KNOWLEDGE_EDIT_GROUPS WHERE KNOWLEDGE_ID = ?"; super.executeUpdate(sql, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgeEditUsersDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgeEditUsersDao.java index 017206923..b89d67846 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgeEditUsersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgeEditUsersDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -23,6 +24,7 @@ public static KnowledgeEditUsersDao get() { return Container.getComp(KnowledgeEditUsersDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM KNOWLEDGE_EDIT_USERS WHERE KNOWLEDGE_ID = ?"; super.executeUpdate(sql, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgeFilesDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgeFilesDao.java index b1c40149e..655db7219 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgeFilesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgeFilesDao.java @@ -37,6 +37,7 @@ public static KnowledgeFilesDao get() { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { StringBuilder sql = new StringBuilder(); sql.append("SELECT FILE_NO, KNOWLEDGE_ID, COMMENT_NO, DRAFT_ID, FILE_NAME, FILE_SIZE, PARSE_STATUS, "); @@ -50,6 +51,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param draftId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnDraftId(Long draftId) { StringBuilder sql = new StringBuilder(); sql.append("SELECT FILE_NO, KNOWLEDGE_ID, COMMENT_NO, DRAFT_ID, FILE_NAME, FILE_SIZE, PARSE_STATUS, "); @@ -63,6 +65,7 @@ public List selectOnDraftId(Long draftId) { /** * キーで1件取得 (ファイルのバイナリは取得しない) */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeFilesEntity selectOnKeyWithoutBinary(Long fileNo) { StringBuilder sql = new StringBuilder(); sql.append("SELECT FILE_NO, KNOWLEDGE_ID, COMMENT_NO, DRAFT_ID, FILE_NAME, FILE_SIZE, PARSE_STATUS, "); @@ -79,6 +82,7 @@ public KnowledgeFilesEntity selectOnKeyWithoutBinary(Long fileNo) { * @param commentNo Nullがありえる * @param loginedUser */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void connectKnowledge(Long fileNo, Long knowledgeId, Long commentNo, LoginedUser loginedUser) { StringBuilder sql = new StringBuilder(); sql.append("UPDATE KNOWLEDGE_FILES "); @@ -104,6 +108,7 @@ public List deleteNotConnectFiles() { * * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectWaitStateFiles() { StringBuilder sql = new StringBuilder(); sql.append("SELECT FILE_NO, KNOWLEDGE_ID, COMMENT_NO, FILE_NAME, DRAFT_ID, FILE_SIZE, INSERT_USER, "); @@ -133,6 +138,7 @@ public void changeStatus(Long fileNo, int parseStatus, Integer updateUserId) { * @param entity ファイルEntity * @param updateUserId 更新者 */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void updateDraftId(KnowledgeFilesEntity entity, Integer updateUserId) { StringBuilder sql = new StringBuilder(); sql.append("UPDATE KNOWLEDGE_FILES "); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgeHistoriesDao.java index 55baba386..29175aee5 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgeHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgeHistoriesDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -33,17 +34,20 @@ public static KnowledgeHistoriesDao get() { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int selectMaxHistoryNo(Long knowledgeId) { String sql = "SELECT MAX(HISTORY_NO) FROM KNOWLEDGE_HISTORIES WHERE KNOWLEDGE_ID = ? "; return executeQuerySingle(sql, Integer.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledge(Long knowledgeId, int offset, int limit) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_selectOnKnowledge.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class, knowledgeId, limit, offset); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeHistoriesEntity selectOnKeyWithName(Integer historyNo, Long knowledgeId) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_selectOnKeyWithName.sql"); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgeItemValuesDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgeItemValuesDao.java index f5be69599..06c05fb3c 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgeItemValuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgeItemValuesDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -26,6 +27,7 @@ public static KnowledgeItemValuesDao get() { return Container.getComp(KnowledgeItemValuesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnTypeIdAndItemNoAndStatus(int typeId, int itemNo, int status) { String sql = "SELECT * FROM KNOWLEDGE_ITEM_VALUES WHERE TYPE_ID = ? AND ITEM_NO = ? AND ITEM_STATUS = ? AND DELETE_FLAG = 0"; return executeQueryList(sql, KnowledgeItemValuesEntity.class, typeId, itemNo, status); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgeTagsDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgeTagsDao.java index 5d64baf8b..0cecb934b 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgeTagsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgeTagsDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -28,6 +29,7 @@ public static KnowledgeTagsDao get() { * * @param knowledgeId */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM KNOWLEDGE_TAGS WHERE KNOWLEDGE_ID = ?"; super.executeUpdate(sql, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgeUsersDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgeUsersDao.java index 8ae763951..8aaf89d3a 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgeUsersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgeUsersDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -28,6 +29,7 @@ public static KnowledgeUsersDao get() { * * @param knowledgeId */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM KNOWLEDGE_USERS WHERE KNOWLEDGE_ID = ?"; super.executeUpdate(sql, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java index 56d4fa5a9..5f016fade 100644 --- a/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/KnowledgesDao.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -40,6 +41,7 @@ public static KnowledgesDao get() { /** * IDを採番 ※コミットしなくても次のIDを採番する為、保存しなければ欠番になる */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(KNOWLEDGE_ID) FROM KNOWLEDGES;"; Integer integer = executeQuerySingle(sql, Integer.class); @@ -50,6 +52,7 @@ public Integer getNextId() { return currentId; } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectKnowledge(int offset, int limit, Integer userId) { // String sql = "SELECT * FROM KNOWLEDGES WHERE DELETE_FLAG = 0 ORDER BY UPDATE_DATETIME DESC Limit ? offset ?;"; String sql = SQLManager.getInstance() @@ -63,6 +66,7 @@ public List selectKnowledge(int offset, int limit, Integer use * @param knowledgeIds * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectKnowledges(List knowledgeIds) { if (knowledgeIds == null || knowledgeIds.isEmpty()) { return new ArrayList(); @@ -97,6 +101,7 @@ public List selectKnowledges(List knowledgeIds) { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgesEntity selectOnKeyWithUserName(Long knowledgeId) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_selectOnKeyWithUserName.sql"); @@ -109,6 +114,7 @@ public KnowledgesEntity selectOnKeyWithUserName(Long knowledgeId) { * @param userId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnUser(Integer userId) { String sql = "SELECT KNOWLEDGE_ID FROM KNOWLEDGES WHERE INSERT_USER = ? ORDER BY KNOWLEDGE_ID DESC"; return executeQueryList(sql, Long.class, userId); @@ -119,6 +125,7 @@ public List selectOnUser(Integer userId) { * * @param loginUserId */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnUser(Integer loginUserId) { String sql = "UPDATE KNOWLEDGES SET DELETE_FLAG = 1 , UPDATE_USER = ? , UPDATE_DATETIME = ? WHERE INSERT_USER = ?"; super.executeUpdate(sql, loginUserId, new Timestamp(new Date().getTime()), loginUserId); @@ -131,6 +138,7 @@ public void deleteOnUser(Integer loginUserId) { * @param end * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectBetween(Long start, Long end) { String sql = "SELECT * FROM knowledges WHERE knowledge_id BETWEEN ? AND ? AND DELETE_FLAG = 0 ORDER BY knowledge_id"; return executeQueryList(sql, KnowledgesEntity.class, start, end); @@ -145,6 +153,7 @@ public List selectBetween(Long start, Long end) { * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectPopularity(Timestamp start, Timestamp end, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_selectPopularity.sql"); return executeQueryList(sql, KnowledgesEntity.class, start, end, limit, offset); @@ -160,6 +169,7 @@ public List selectPopularity(Timestamp start, Timestamp end, i * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectPopularityWithAccessControl(LoginedUser loginedUser, Timestamp start, Timestamp end, int offset, int limit) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_selectPopularityWithAccessControl.sql"); @@ -198,6 +208,7 @@ public List selectPopularityWithAccessControl(LoginedUser logi return executeQueryList(sql, KnowledgesEntity.class, params.toArray(new Object[0])); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectStocks(LoginedUser loginedUser, int offset, int limit, Long stockid) { if (loginedUser == null) { // ログインしていないのであれば、ストックは無し @@ -263,6 +274,7 @@ public List selectStocks(LoginedUser loginedUser, int offset, * @param q * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectKnowledgeOnIdPrefix(String q, int limit, int offset) { String sql = "SELECT KNOWLEDGE_ID, TITLE FROM KNOWLEDGES " + "WHERE CAST(KNOWLEDGE_ID AS VARCHAR(20)) LIKE ? || '%' ORDER BY KNOWLEDGES.KNOWLEDGE_ID DESC LIMIT ? OFFSET ?;"; @@ -274,6 +286,7 @@ public List selectKnowledgeOnIdPrefix(String q, int limit, int * @param q * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAccessAbleKnowledgeOnIdPrefix(String q, LoginedUser loginedUser, int limit, int offset) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_selectAccessAbleKnowledgeOnIdPrefix.sql"); @@ -311,14 +324,17 @@ public List selectAccessAbleKnowledgeOnIdPrefix(String q, Logi return executeQueryList(sql, KnowledgesEntity.class, params.toArray(new Object[0])); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void updateViewCount(Long count, Long knowledgeId) { String sql = "UPDATE KNOWLEDGES SET VIEW_COUNT = ? WHERE KNOWLEDGE_ID = ?"; executeUpdate(sql, count, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int selectPoint(long knowledgeId) { String sql = "SELECT POINT FROM KNOWLEDGES WHERE KNOWLEDGE_ID = ?"; return executeQuerySingle(sql, Integer.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void updatePoint(long knowledgeId, int point) { String sql = "UPDATE KNOWLEDGES SET POINT = ? WHERE KNOWLEDGE_ID = ?"; executeUpdate(sql, point, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java b/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java index 3893b0861..f5da3524a 100644 --- a/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -25,16 +26,19 @@ public static LikeCommentsDao get() { return Container.getComp(LikeCommentsDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Long selectOnCommentNo(Long commentNo) { String sql = "SELECT COUNT(*) FROM LIKE_COMMENTS WHERE COMMENT_NO = ?"; return super.executeQuerySingle(sql, Long.class, commentNo); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnCommentNo(Long commentNo, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_selectOnCommentNo.sql"); return executeQueryList(sql, LikeCommentsEntity.class, commentNo, limit, offset); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public LikeCommentsEntity selectExistsOnUser(Long commentNo, Integer userId) { String sql = "SELECT * FROM LIKE_COMMENTS WHERE COMMENT_NO = ? AND INSERT_USER = ? LIMIT 1 OFFSET 0"; return super.executeQuerySingle(sql, LikeCommentsEntity.class, commentNo, userId); diff --git a/src/main/java/org/support/project/knowledge/dao/LikesDao.java b/src/main/java/org/support/project/knowledge/dao/LikesDao.java index 48e432335..758299ace 100644 --- a/src/main/java/org/support/project/knowledge/dao/LikesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/LikesDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -27,16 +28,19 @@ public static LikesDao get() { return Container.getComp(LikesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Long countOnKnowledgeId(Long knowledgeId) { String sql = "SELECT COUNT(*) FROM LIKES WHERE KNOWLEDGE_ID = ?"; return super.executeQuerySingle(sql, Long.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledge(Long knowledgeId, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_selectOnKnowledge.sql"); return executeQueryList(sql, LikesEntity.class, knowledgeId, limit, offset); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public LikesEntity selectExistsOnUser(Long knowledgeId, Integer userId) { String sql = "SELECT * FROM LIKES WHERE KNOWLEDGE_ID = ? AND INSERT_USER = ? LIMIT 1 OFFSET 0"; return super.executeQuerySingle(sql, LikesEntity.class, knowledgeId, userId); diff --git a/src/main/java/org/support/project/knowledge/dao/MailHookConditionsDao.java b/src/main/java/org/support/project/knowledge/dao/MailHookConditionsDao.java index 426bc5147..6d3068de2 100644 --- a/src/main/java/org/support/project/knowledge/dao/MailHookConditionsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/MailHookConditionsDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -29,6 +30,7 @@ public static MailHookConditionsDao get() { * @param hookId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int nextConditionNo(Integer hookId) { String sql = "SELECT COUNT(*) FROM MAIL_HOOK_CONDITIONS WHERE HOOK_ID = ?"; int num = super.executeQuerySingle(sql, Integer.class, hookId); diff --git a/src/main/java/org/support/project/knowledge/dao/MailHooksDao.java b/src/main/java/org/support/project/knowledge/dao/MailHooksDao.java index 017a14a03..195b108e5 100644 --- a/src/main/java/org/support/project/knowledge/dao/MailHooksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/MailHooksDao.java @@ -2,6 +2,7 @@ import java.sql.Timestamp; +import org.support.project.aop.Aspect; import org.support.project.common.config.INT_FLAG; import org.support.project.di.Container; import org.support.project.di.DI; @@ -36,6 +37,7 @@ public static MailHooksDao get() { * Get Next id * @return next id */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(HOOK_ID) FROM MAIL_HOOKS;"; Integer integer = executeQuerySingle(sql, Integer.class); @@ -52,6 +54,7 @@ public Integer getNextId() { * @see org.support.project.knowledge.dao.gen.GenMailHooksDao#save(org.support.project.knowledge.entity.MailHooksEntity) */ @Override + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailHooksEntity save(MailHooksEntity entity) { if (entity.getHookId() != null) { MailHooksEntity db = physicalSelectOnKey(entity.getHookId()); diff --git a/src/main/java/org/support/project/knowledge/dao/NotifyConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/NotifyConfigsDao.java index dbb24cc5b..acf515f1b 100644 --- a/src/main/java/org/support/project/knowledge/dao/NotifyConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/NotifyConfigsDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -35,6 +36,7 @@ public static NotifyConfigsDao get() { /** * IDを採番 ※コミットしなくても次のIDを採番する為、保存しなければ欠番になる */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(USER_ID) FROM NOTIFY_CONFIGS;"; Integer integer = executeQuerySingle(sql, Integer.class); @@ -52,6 +54,7 @@ public Integer getNextId() { * @param offset * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List getNotifyDesktopUsersOnPublicComment(int limit, int offset) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/GetNotifyDesktopUsersOnPublicComment.sql"); @@ -65,6 +68,7 @@ public List getNotifyDesktopUsersOnPublicComment(int limit, int off * @param offset * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List getNotifyMailUsersOnPublicComment(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/GetNotifyMailUsersOnPublicComment.sql"); return executeQueryList(sql, UsersEntity.class, limit, offset); diff --git a/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java b/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java index 3e3b31037..a358c9e4a 100644 --- a/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/NotifyQueuesDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -31,6 +32,7 @@ public static NotifyQueuesDao get() { * @return all data */ @Override + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = "SELECT * FROM NOTIFY_QUEUES WHERE DELETE_FLAG = 0 ORDER BY INSERT_DATETIME ASC;"; return executeQueryList(sql, NotifyQueuesEntity.class); @@ -43,6 +45,7 @@ public List selectAll() { * @param id * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public NotifyQueuesEntity selectOnTypeAndId(Integer type, Long id) { String sql = "SELECT * FROM NOTIFY_QUEUES WHERE TYPE = ? AND ID = ? AND DELETE_FLAG = 0"; return super.executeQuerySingle(sql, NotifyQueuesEntity.class, type, id); diff --git a/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java b/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java index 46fd820a2..6c7b70fff 100644 --- a/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -32,6 +33,7 @@ public static ParticipantsDao get() { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectParticipations(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_selectParticipations.sql"); return executeQueryList(sql, Participation.class, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/PinsDao.java b/src/main/java/org/support/project/knowledge/dao/PinsDao.java index 9dc1eeeb4..07ef71e8d 100644 --- a/src/main/java/org/support/project/knowledge/dao/PinsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/PinsDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -31,6 +32,7 @@ public static PinsDao get() { * IDを採番 * ※コミットしなくても次のIDを採番する為、保存しなければ欠番になる */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(no) FROM pins;"; Integer integer = executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java index f8129e13d..49e460488 100644 --- a/src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/PointKnowledgeHistoriesDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -20,6 +21,7 @@ public class PointKnowledgeHistoriesDao extends GenPointKnowledgeHistoriesDao { public static PointKnowledgeHistoriesDao get() { return Container.getComp(PointKnowledgeHistoriesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public long selectNumOnKnowledge(long knowledgeId) { String sql = "SELECT MAX(HISTORY_NO) FROM POINT_KNOWLEDGE_HISTORIES WHERE KNOWLEDGE_ID = ?"; return executeQuerySingle(sql, Long.class, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java index d5f615351..fc74bc844 100644 --- a/src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/PointUserHistoriesDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -21,6 +22,7 @@ public static PointUserHistoriesDao get() { return Container.getComp(PointUserHistoriesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public long selectNumOnUser(int user) { String sql = "SELECT MAX(HISTORY_NO) FROM POINT_USER_HISTORIES WHERE USER_ID = ?"; return executeQuerySingle(sql, Long.class, user); diff --git a/src/main/java/org/support/project/knowledge/dao/StockKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/StockKnowledgesDao.java index 186d668e1..64426a1d8 100644 --- a/src/main/java/org/support/project/knowledge/dao/StockKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/StockKnowledgesDao.java @@ -3,6 +3,7 @@ import java.util.Date; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -37,6 +38,7 @@ public static StockKnowledgesDao get() { * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnStockIdWithKnowledgeInfo(Long stockId, int offset, int limit) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_selectOnStockIdWithKnowledgeInfo.sql"); @@ -47,6 +49,7 @@ public List selectOnStockIdWithKnowledgeInfo(Long stockId * @param stockId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectActiveOnStockId(Long stockId) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_active_on_stock_id.sql"); @@ -57,6 +60,7 @@ public List selectActiveOnStockId(Long stockId) { * 指定のナレッジが削除されたときに、ストックからも消す * @param knowledgeId */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { DBUserPool pool = Container.getComp(DBUserPool.class); Integer user = (Integer) pool.getUser(); diff --git a/src/main/java/org/support/project/knowledge/dao/StocksDao.java b/src/main/java/org/support/project/knowledge/dao/StocksDao.java index ef78e67ef..950214495 100644 --- a/src/main/java/org/support/project/knowledge/dao/StocksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/StocksDao.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -39,6 +40,7 @@ public static StocksDao get() { * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectMyStocksWithKnowledgeCount(LoginedUser loginedUser, int offset, int limit) { String sql = SQLManager.getInstance() .getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_selectMyStocksWithKnowledgeCount.sql"); @@ -54,6 +56,7 @@ public List selectMyStocksWithKnowledgeCount(LoginedUser loginedUs * @param listLimit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectMyStocksWithStocked(LoginedUser loginedUser, Long knowledgeId, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_selectMyStocksWithStocked.sql"); return executeQueryList(sql, Stock.class, knowledgeId, loginedUser.getUserId(), limit, offset); @@ -65,6 +68,7 @@ public List selectMyStocksWithStocked(LoginedUser loginedUser, Long knowl * @param loginedUser * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectStockOnKnowledge(KnowledgesEntity knowledgesEntity, LoginedUser loginedUser) { if (knowledgesEntity == null || loginedUser == null) { return new ArrayList<>(); @@ -80,6 +84,7 @@ public List selectStockOnKnowledge(KnowledgesEntity knowledgesEnti * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectMyStocks(LoginedUser loginedUser, int offset, int limit) { String sql = "SELECT * FROM STOCKS WHERE STOCKS.INSERT_USER = ? AND STOCKS.DELETE_FLAG = 0 ORDER BY STOCKS.INSERT_DATETIME LIMIT ? OFFSET ?"; return executeQueryList(sql, StocksEntity.class, loginedUser.getUserId(), limit, offset); diff --git a/src/main/java/org/support/project/knowledge/dao/SurveyAnswersDao.java b/src/main/java/org/support/project/knowledge/dao/SurveyAnswersDao.java index 3cb0d0fc2..4f516c61b 100644 --- a/src/main/java/org/support/project/knowledge/dao/SurveyAnswersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/SurveyAnswersDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -21,10 +22,12 @@ public class SurveyAnswersDao extends GenSurveyAnswersDao { public static SurveyAnswersDao get() { return Container.getComp(SurveyAnswersDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM SURVEY_ANSWERS WHERE KNOWLEDGE_ID = ?"; executeUpdate(sql, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int selectCountOnKnowledgeId(Long knowledgeId) { String sql = "SELECT COUNT(*) FROM SURVEY_ANSWERS WHERE KNOWLEDGE_ID = ?"; return executeQuerySingle(sql, Integer.class, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/SurveyChoicesDao.java b/src/main/java/org/support/project/knowledge/dao/SurveyChoicesDao.java index 3d9351875..64518df12 100644 --- a/src/main/java/org/support/project/knowledge/dao/SurveyChoicesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/SurveyChoicesDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -22,6 +23,7 @@ public static SurveyChoicesDao get() { return Container.getComp(SurveyChoicesDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM SURVEY_CHOICES WHERE KNOWLEDGE_ID = ?"; executeUpdate(sql, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/SurveyItemAnswersDao.java b/src/main/java/org/support/project/knowledge/dao/SurveyItemAnswersDao.java index ebb910684..a8f60761f 100644 --- a/src/main/java/org/support/project/knowledge/dao/SurveyItemAnswersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/SurveyItemAnswersDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -24,10 +25,12 @@ public class SurveyItemAnswersDao extends GenSurveyItemAnswersDao { public static SurveyItemAnswersDao get() { return Container.getComp(SurveyItemAnswersDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM SURVEY_ITEM_ANSWERS WHERE KNOWLEDGE_ID = ?"; executeUpdate(sql, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeIdAndAnswerId(Long knowledgeId, Integer userId) { String sql = "SELECT * FROM SURVEY_ITEM_ANSWERS WHERE KNOWLEDGE_ID = ? AND ANSWER_ID = ?"; return executeQueryList(sql, SurveyItemAnswersEntity.class, knowledgeId, userId); diff --git a/src/main/java/org/support/project/knowledge/dao/SurveyItemsDao.java b/src/main/java/org/support/project/knowledge/dao/SurveyItemsDao.java index cda8433c6..8d28c54d9 100644 --- a/src/main/java/org/support/project/knowledge/dao/SurveyItemsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/SurveyItemsDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -21,6 +22,7 @@ public static SurveyItemsDao get() { return Container.getComp(SurveyItemsDao.class); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void deleteOnKnowledgeId(Long knowledgeId) { String sql = "DELETE FROM SURVEY_ITEMS WHERE KNOWLEDGE_ID = ?"; executeUpdate(sql, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/SurveysDao.java b/src/main/java/org/support/project/knowledge/dao/SurveysDao.java index bc3aa36de..e0b369421 100644 --- a/src/main/java/org/support/project/knowledge/dao/SurveysDao.java +++ b/src/main/java/org/support/project/knowledge/dao/SurveysDao.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -35,6 +36,7 @@ public static SurveysDao get() { * @param offset * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectWithKnowledgeTitle(String idPrefix, int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_with_knowledge_title.sql"); return executeQueryList(sql, SurveysEntity.class, idPrefix, limit, offset); @@ -49,6 +51,7 @@ public List selectWithKnowledgeTitle(String idPrefix, int limit, * @param offset * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectWithKnowledgeTitleOnlyAccessAble(LoginedUser loginedUser, String idPrefix, int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_on_accessable.sql"); List params = new ArrayList<>(); diff --git a/src/main/java/org/support/project/knowledge/dao/TagsDao.java b/src/main/java/org/support/project/knowledge/dao/TagsDao.java index 03a42ee5a..706f03a5d 100644 --- a/src/main/java/org/support/project/knowledge/dao/TagsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/TagsDao.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.common.util.StringJoinBuilder; import org.support.project.di.Container; import org.support.project.di.DI; @@ -38,6 +39,7 @@ public static TagsDao get() { /** * IDを採番 ※コミットしなくても次のIDを採番する為、保存しなければ欠番になる */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(TAG_ID) FROM TAGS;"; Integer integer = executeQuerySingle(sql, Integer.class); @@ -54,6 +56,7 @@ public Integer getNextId() { * @param tag * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TagsEntity selectOnTagName(String tag) { String sql = "SELECT * FROM TAGS WHERE TAG_NAME = ?"; return executeQuerySingle(sql, TagsEntity.class, tag); @@ -65,6 +68,7 @@ public TagsEntity selectOnTagName(String tag) { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_selectOnKnowledgeId.sql"); return executeQueryList(sql, TagsEntity.class, knowledgeId); @@ -77,6 +81,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectTagsWithCount(int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_selectTagsWithCount.sql"); return executeQueryList(sql, TagsEntity.class, limit, offset); @@ -91,6 +96,7 @@ public List selectTagsWithCount(int offset, int limit) { * @return * @deprecated */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectTagsWithCountOnUser(int userid, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_selectTagsWithCountOnUser.sql"); return executeQueryList(sql, TagsEntity.class, userid, limit, offset); @@ -104,6 +110,7 @@ public List selectTagsWithCountOnUser(int userid, int offset, int li * @param loginedUser * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectWithKnowledgeCount(int userId, List groups, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_selectWithKnowledgeCount.sql"); StringJoinBuilder builder = new StringJoinBuilder(); @@ -130,6 +137,7 @@ public List selectWithKnowledgeCount(int userId, List * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectWithKnowledgeCountAdmin(int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_selectWithKnowledgeCountAdmin.sql"); return executeQueryList(sql, TagsEntity.class, limit, offset); @@ -142,6 +150,7 @@ public List selectWithKnowledgeCountAdmin(int offset, int limit) { * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectWithKnowledgeCountOnTagName(String keyword, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_selectWithKnowledgeCountOnTagName.sql"); StringBuilder builder = new StringBuilder(); diff --git a/src/main/java/org/support/project/knowledge/dao/TargetsDao.java b/src/main/java/org/support/project/knowledge/dao/TargetsDao.java index e10230fdc..e80be9665 100644 --- a/src/main/java/org/support/project/knowledge/dao/TargetsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/TargetsDao.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.common.util.StringJoinBuilder; import org.support.project.di.Container; import org.support.project.ormapping.common.SQLManager; @@ -32,6 +33,7 @@ public static TargetsDao get() { * @param limit * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKeyword(String keyword, int offset, int limit) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TargetsDao/selectOnKeyword.sql"); return executeQueryList(sql, LabelValue.class, keyword, keyword, limit, offset); @@ -43,6 +45,7 @@ public List selectOnKeyword(String keyword, int offset, int limit) { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectGroupsOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TargetsDao/selectGroupsOnKnowledgeId.sql"); return executeQueryList(sql, GroupsEntity.class, knowledgeId); @@ -54,6 +57,7 @@ public List selectGroupsOnKnowledgeId(Long knowledgeId) { * @param knowledgeIds * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectGroupsOnKnowledgeIds(List knowledgeIds) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TargetsDao/selectGroupsOnKnowledgeIds.sql"); @@ -75,6 +79,7 @@ public List selectGroupsOnKnowledgeIds(List knowledgeIds) { * @param knowledgeId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectUsersOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TargetsDao/selectUsersOnKnowledgeId.sql"); return executeQueryList(sql, UsersEntity.class, knowledgeId); @@ -86,6 +91,7 @@ public List selectUsersOnKnowledgeId(Long knowledgeId) { * @param knowledgeIds * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectUsersOnKnowledgeIds(List knowledgeIds) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TargetsDao/selectUsersOnKnowledgeIds.sql"); @@ -101,11 +107,13 @@ public List selectUsersOnKnowledgeIds(List knowledgeIds) { return executeQueryList(sql, UsersEntity.class, params.toArray(new Long[0])); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectEditorGroupsOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TargetsDao/selectEditorGroupsOnKnowledgeId.sql"); return executeQueryList(sql, GroupsEntity.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectEditorUsersOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TargetsDao/selectEditorUsersOnKnowledgeId.sql"); return executeQueryList(sql, UsersEntity.class, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/TemplateMastersDao.java b/src/main/java/org/support/project/knowledge/dao/TemplateMastersDao.java index b417e7822..bc86dfd32 100644 --- a/src/main/java/org/support/project/knowledge/dao/TemplateMastersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/TemplateMastersDao.java @@ -37,6 +37,7 @@ public static TemplateMastersDao get() { /** * IDを採番 ※コミットしなくても次のIDを採番する為、保存しなければ欠番になる */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(TYPE_ID) FROM TEMPLATE_MASTERS;"; Integer integer = executeQuerySingle(sql, Integer.class); @@ -52,6 +53,7 @@ public Integer getNextId() { * * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TemplateMastersEntity selectWithItems(Integer typeId) { TemplateMastersEntity template = selectOnKey(typeId); List items = TemplateItemsDao.get().selectOnTypeId(typeId); @@ -93,6 +95,7 @@ public void resetSequence() { * @param template * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TemplateMastersEntity selectOnName(String template) { String sql = "SELECT * FROM TEMPLATE_MASTERS WHERE TYPE_NAME = ? AND DELETE_FLAG = 0"; return executeQuerySingle(sql, TemplateMastersEntity.class, template); diff --git a/src/main/java/org/support/project/knowledge/dao/TokensDao.java b/src/main/java/org/support/project/knowledge/dao/TokensDao.java index 02fed72dc..a1e7b781c 100644 --- a/src/main/java/org/support/project/knowledge/dao/TokensDao.java +++ b/src/main/java/org/support/project/knowledge/dao/TokensDao.java @@ -1,5 +1,6 @@ package org.support.project.knowledge.dao; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -28,6 +29,7 @@ public static TokensDao get() { * @param userId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TokensEntity selectOnUserId(Integer userId) { String sql = "SELECT * FROM TOKENS WHERE USER_ID = ? AND DELETE_FLAG = 0"; return executeQuerySingle(sql, TokensEntity.class, userId); diff --git a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java index 6cf0c3258..5e72ee923 100644 --- a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -33,6 +34,7 @@ public static ViewHistoriesDao get() { * @param userId * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectViewdKnowledgeIds(List stocks, Integer userId) { if (stocks == null || stocks.isEmpty()) { return new ArrayList<>(); @@ -54,6 +56,7 @@ public List selectViewdKnowledgeIds(List stocks, Integer u return executeQueryList(sql.toString(), Long.class, params.toArray(new Object[0])); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public long selectCountOnKnowledgeId(Long knowledgeId) { String sql = "SELECT COUNT(*) FROM VIEW_HISTORIES WHERE KNOWLEDGE_ID = ?"; return executeQuerySingle(sql, Long.class, knowledgeId); diff --git a/src/main/java/org/support/project/knowledge/dao/WebhookConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/WebhookConfigsDao.java index 5821fde95..40508082c 100644 --- a/src/main/java/org/support/project/knowledge/dao/WebhookConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/WebhookConfigsDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -34,6 +35,7 @@ public static WebhookConfigsDao get() { /** * IDを採番 ※コミットしなくても次のIDを採番する為、保存しなければ欠番になる */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer getNextId() { String sql = "SELECT MAX(HOOK_ID) FROM WEBHOOK_CONFIGS;"; Integer integer = executeQuerySingle(sql, Integer.class); @@ -50,6 +52,7 @@ public Integer getNextId() { * @param hook * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnHook(String hook) { String sql = "SELECT * FROM WEBHOOK_CONFIGS WHERE HOOK = ? AND DELETE_FLAG = 0"; return executeQueryList(sql, WebhookConfigsEntity.class, hook); diff --git a/src/main/java/org/support/project/knowledge/dao/WebhooksDao.java b/src/main/java/org/support/project/knowledge/dao/WebhooksDao.java index 1676196fb..2780c729a 100644 --- a/src/main/java/org/support/project/knowledge/dao/WebhooksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/WebhooksDao.java @@ -2,6 +2,7 @@ import java.util.List; +import org.support.project.aop.Aspect; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -32,6 +33,7 @@ public static WebhooksDao get() { * @param status * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnStatus(int status) { String sql = "SELECT * FROM WEBHOOKS WHERE STATUS = ? AND DELETE_FLAG = 0"; return executeQueryList(sql, WebhooksEntity.class, status); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java index ca9d49904..48f17cdc7 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java @@ -44,6 +44,7 @@ public static GenAccountImagesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all.sql"); return executeQueryList(sql, AccountImagesEntity.class); @@ -54,6 +55,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, AccountImagesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param imageId imageId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public AccountImagesEntity physicalSelectOnKey(Long imageId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, AccountImagesEntity.class, imageId); @@ -71,6 +74,7 @@ public AccountImagesEntity physicalSelectOnKey(Long imageId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all.sql"); return executeQueryList(sql, AccountImagesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all_with_pager.sql"); return executeQueryList(sql, AccountImagesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -98,6 +104,7 @@ public Integer selectCountAll() { * @param imageId imageId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public AccountImagesEntity selectOnKey(Long imageId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_on_key.sql"); return executeQuerySingle(sql, AccountImagesEntity.class, imageId); @@ -106,6 +113,7 @@ public AccountImagesEntity selectOnKey(Long imageId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM ACCOUNT_IMAGES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java index 98b7a15b1..84312aa0b 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java @@ -43,6 +43,7 @@ public static GenActivitiesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql"); return executeQueryList(sql, ActivitiesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, ActivitiesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) * @param activityNo activityNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ActivitiesEntity physicalSelectOnKey(Long activityNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, ActivitiesEntity.class, activityNo); @@ -70,6 +73,7 @@ public ActivitiesEntity physicalSelectOnKey(Long activityNo) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql"); return executeQueryList(sql, ActivitiesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql"); return executeQueryList(sql, ActivitiesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param activityNo activityNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ActivitiesEntity selectOnKey(Long activityNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_on_key.sql"); return executeQuerySingle(sql, ActivitiesEntity.class, activityNo); @@ -105,6 +112,7 @@ public ActivitiesEntity selectOnKey(Long activityNo) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM ACTIVITIES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java index 3c968a909..ec4abda90 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java @@ -43,6 +43,7 @@ public static GenBadgesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql"); return executeQueryList(sql, BadgesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, BadgesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public BadgesEntity physicalSelectOnKey(Integer no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, BadgesEntity.class, no); @@ -70,6 +73,7 @@ public BadgesEntity physicalSelectOnKey(Integer no) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql"); return executeQueryList(sql, BadgesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql"); return executeQueryList(sql, BadgesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public BadgesEntity selectOnKey(Integer no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_on_key.sql"); return executeQuerySingle(sql, BadgesEntity.class, no); @@ -105,6 +112,7 @@ public BadgesEntity selectOnKey(Integer no) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM BADGES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java index 58fe6004a..ee8ea80fe 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java @@ -43,6 +43,7 @@ public static GenCommentsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all.sql"); return executeQueryList(sql, CommentsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, CommentsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param commentNo commentNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public CommentsEntity physicalSelectOnKey(Long commentNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, CommentsEntity.class, commentNo); @@ -70,6 +73,7 @@ public CommentsEntity physicalSelectOnKey(Long commentNo) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all.sql"); return executeQueryList(sql, CommentsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all_with_pager.sql"); return executeQueryList(sql, CommentsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param commentNo commentNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public CommentsEntity selectOnKey(Long commentNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_on_key.sql"); return executeQuerySingle(sql, CommentsEntity.class, commentNo); @@ -105,6 +112,7 @@ public CommentsEntity selectOnKey(Long commentNo) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM COMMENTS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java index 9ae137501..292ea2e95 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java @@ -43,6 +43,7 @@ public static GenDraftItemValuesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all.sql"); return executeQueryList(sql, DraftItemValuesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, limit, offset); @@ -64,6 +66,7 @@ public List physicalSelectAllWithPager(int limit, int off * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public DraftItemValuesEntity physicalSelectOnKey(Long draftId, Integer itemNo, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, DraftItemValuesEntity.class, draftId, itemNo, typeId); @@ -72,6 +75,7 @@ public DraftItemValuesEntity physicalSelectOnKey(Long draftId, Integer itemNo, I * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all.sql"); return executeQueryList(sql, DraftItemValuesEntity.class); @@ -82,6 +86,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all_with_pager.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, limit, offset); @@ -90,6 +95,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -101,6 +107,7 @@ public Integer selectCountAll() { * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public DraftItemValuesEntity selectOnKey(Long draftId, Integer itemNo, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_on_key.sql"); return executeQuerySingle(sql, DraftItemValuesEntity.class, draftId, itemNo, typeId); @@ -110,6 +117,7 @@ public DraftItemValuesEntity selectOnKey(Long draftId, Integer itemNo, Integer t * @param draftId draftId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnDraftId(Long draftId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_on_draft_id.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, draftId); @@ -119,6 +127,7 @@ public List selectOnDraftId(Long draftId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_on_item_no.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, itemNo); @@ -128,6 +137,7 @@ public List selectOnItemNo(Integer itemNo) { * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_on_type_id.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, typeId); @@ -137,6 +147,7 @@ public List selectOnTypeId(Integer typeId) { * @param draftId draftId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnDraftId(Long draftId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_on_draft_id.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, draftId); @@ -146,6 +157,7 @@ public List physicalSelectOnDraftId(Long draftId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_on_item_no.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, itemNo); @@ -155,6 +167,7 @@ public List physicalSelectOnItemNo(Integer itemNo) { * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_on_type_id.sql"); return executeQueryList(sql, DraftItemValuesEntity.class, typeId); @@ -163,6 +176,7 @@ public List physicalSelectOnTypeId(Integer typeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM DRAFT_ITEM_VALUES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java index 32e39228b..5a5a22fd7 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java @@ -43,6 +43,7 @@ public static GenDraftKnowledgesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all.sql"); return executeQueryList(sql, DraftKnowledgesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, DraftKnowledgesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int off * @param draftId draftId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public DraftKnowledgesEntity physicalSelectOnKey(Long draftId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, DraftKnowledgesEntity.class, draftId); @@ -70,6 +73,7 @@ public DraftKnowledgesEntity physicalSelectOnKey(Long draftId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all.sql"); return executeQueryList(sql, DraftKnowledgesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all_with_pager.sql"); return executeQueryList(sql, DraftKnowledgesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param draftId draftId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public DraftKnowledgesEntity selectOnKey(Long draftId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_on_key.sql"); return executeQuerySingle(sql, DraftKnowledgesEntity.class, draftId); @@ -105,6 +112,7 @@ public DraftKnowledgesEntity selectOnKey(Long draftId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM DRAFT_KNOWLEDGES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java index a67a057e1..9364fcd38 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java @@ -43,6 +43,7 @@ public static GenEventsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all.sql"); return executeQueryList(sql, EventsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, EventsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public EventsEntity physicalSelectOnKey(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, EventsEntity.class, knowledgeId); @@ -70,6 +73,7 @@ public EventsEntity physicalSelectOnKey(Long knowledgeId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all.sql"); return executeQueryList(sql, EventsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all_with_pager.sql"); return executeQueryList(sql, EventsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public EventsEntity selectOnKey(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_on_key.sql"); return executeQuerySingle(sql, EventsEntity.class, knowledgeId); @@ -105,6 +112,7 @@ public EventsEntity selectOnKey(Long knowledgeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM EVENTS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java index 3d45fed52..0160a8b26 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java @@ -43,6 +43,7 @@ public static GenItemChoicesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all.sql"); return executeQueryList(sql, ItemChoicesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, ItemChoicesEntity.class, limit, offset); @@ -64,6 +66,7 @@ public List physicalSelectAllWithPager(int limit, int offset) * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ItemChoicesEntity physicalSelectOnKey(Integer choiceNo, Integer itemNo, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, ItemChoicesEntity.class, choiceNo, itemNo, typeId); @@ -72,6 +75,7 @@ public ItemChoicesEntity physicalSelectOnKey(Integer choiceNo, Integer itemNo, I * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all.sql"); return executeQueryList(sql, ItemChoicesEntity.class); @@ -82,6 +86,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all_with_pager.sql"); return executeQueryList(sql, ItemChoicesEntity.class, limit, offset); @@ -90,6 +95,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -101,6 +107,7 @@ public Integer selectCountAll() { * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ItemChoicesEntity selectOnKey(Integer choiceNo, Integer itemNo, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_on_key.sql"); return executeQuerySingle(sql, ItemChoicesEntity.class, choiceNo, itemNo, typeId); @@ -110,6 +117,7 @@ public ItemChoicesEntity selectOnKey(Integer choiceNo, Integer itemNo, Integer t * @param choiceNo choiceNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnChoiceNo(Integer choiceNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_on_choice_no.sql"); return executeQueryList(sql, ItemChoicesEntity.class, choiceNo); @@ -119,6 +127,7 @@ public List selectOnChoiceNo(Integer choiceNo) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_on_item_no.sql"); return executeQueryList(sql, ItemChoicesEntity.class, itemNo); @@ -128,6 +137,7 @@ public List selectOnItemNo(Integer itemNo) { * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_on_type_id.sql"); return executeQueryList(sql, ItemChoicesEntity.class, typeId); @@ -137,6 +147,7 @@ public List selectOnTypeId(Integer typeId) { * @param choiceNo choiceNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnChoiceNo(Integer choiceNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_on_choice_no.sql"); return executeQueryList(sql, ItemChoicesEntity.class, choiceNo); @@ -146,6 +157,7 @@ public List physicalSelectOnChoiceNo(Integer choiceNo) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_on_item_no.sql"); return executeQueryList(sql, ItemChoicesEntity.class, itemNo); @@ -155,6 +167,7 @@ public List physicalSelectOnItemNo(Integer itemNo) { * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_on_type_id.sql"); return executeQueryList(sql, ItemChoicesEntity.class, typeId); @@ -163,6 +176,7 @@ public List physicalSelectOnTypeId(Integer typeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM ITEM_CHOICES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java index 10293959e..da6171a3f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java @@ -43,6 +43,7 @@ public static GenKnowledgeEditGroupsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeEditGroupsEntity physicalSelectOnKey(Integer groupId, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeEditGroupsEntity.class, groupId, knowledgeId); @@ -71,6 +74,7 @@ public KnowledgeEditGroupsEntity physicalSelectOnKey(Integer groupId, Long knowl * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeEditGroupsEntity selectOnKey(Integer groupId, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeEditGroupsEntity.class, groupId, knowledgeId); @@ -108,6 +115,7 @@ public KnowledgeEditGroupsEntity selectOnKey(Integer groupId, Long knowledgeId) * @param groupId groupId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnGroupId(Integer groupId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_on_group_id.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, groupId); @@ -117,6 +125,7 @@ public List selectOnGroupId(Integer groupId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, knowledgeId); @@ -126,6 +135,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param groupId groupId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnGroupId(Integer groupId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_on_group_id.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, groupId); @@ -135,6 +145,7 @@ public List physicalSelectOnGroupId(Integer groupId) * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, knowledgeId); @@ -143,6 +154,7 @@ public List physicalSelectOnKnowledgeId(Long knowledg * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_EDIT_GROUPS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java index f57274531..2f1718f82 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java @@ -43,6 +43,7 @@ public static GenKnowledgeEditUsersDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeEditUsersEntity physicalSelectOnKey(Long knowledgeId, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeEditUsersEntity.class, knowledgeId, userId); @@ -71,6 +74,7 @@ public KnowledgeEditUsersEntity physicalSelectOnKey(Long knowledgeId, Integer us * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeEditUsersEntity selectOnKey(Long knowledgeId, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeEditUsersEntity.class, knowledgeId, userId); @@ -108,6 +115,7 @@ public KnowledgeEditUsersEntity selectOnKey(Long knowledgeId, Integer userId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class, knowledgeId); @@ -117,6 +125,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_on_user_id.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class, userId); @@ -126,6 +135,7 @@ public List selectOnUserId(Integer userId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class, knowledgeId); @@ -135,6 +145,7 @@ public List physicalSelectOnKnowledgeId(Long knowledge * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_on_user_id.sql"); return executeQueryList(sql, KnowledgeEditUsersEntity.class, userId); @@ -143,6 +154,7 @@ public List physicalSelectOnUserId(Integer userId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_EDIT_USERS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java index dd5f775b0..f2194f67f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java @@ -44,6 +44,7 @@ public static GenKnowledgeFilesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeFilesEntity.class); @@ -54,6 +55,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeFilesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offs * @param fileNo fileNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeFilesEntity physicalSelectOnKey(Long fileNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeFilesEntity.class, fileNo); @@ -71,6 +74,7 @@ public KnowledgeFilesEntity physicalSelectOnKey(Long fileNo) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all.sql"); return executeQueryList(sql, KnowledgeFilesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeFilesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -98,6 +104,7 @@ public Integer selectCountAll() { * @param fileNo fileNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeFilesEntity selectOnKey(Long fileNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeFilesEntity.class, fileNo); @@ -106,6 +113,7 @@ public KnowledgeFilesEntity selectOnKey(Long fileNo) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_FILES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java index a2192177a..6fd2d3d8f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java @@ -43,6 +43,7 @@ public static GenKnowledgeGroupsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int off * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeGroupsEntity physicalSelectOnKey(Integer groupId, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeGroupsEntity.class, groupId, knowledgeId); @@ -71,6 +74,7 @@ public KnowledgeGroupsEntity physicalSelectOnKey(Integer groupId, Long knowledge * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeGroupsEntity selectOnKey(Integer groupId, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeGroupsEntity.class, groupId, knowledgeId); @@ -108,6 +115,7 @@ public KnowledgeGroupsEntity selectOnKey(Integer groupId, Long knowledgeId) { * @param groupId groupId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnGroupId(Integer groupId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_on_group_id.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class, groupId); @@ -117,6 +125,7 @@ public List selectOnGroupId(Integer groupId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class, knowledgeId); @@ -126,6 +135,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param groupId groupId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnGroupId(Integer groupId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_on_group_id.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class, groupId); @@ -135,6 +145,7 @@ public List physicalSelectOnGroupId(Integer groupId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeGroupsEntity.class, knowledgeId); @@ -143,6 +154,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_GROUPS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java index 46ad29627..4031d8d38 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java @@ -43,6 +43,7 @@ public static GenKnowledgeHistoriesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeHistoriesEntity physicalSelectOnKey(Integer historyNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeHistoriesEntity.class, historyNo, knowledgeId); @@ -71,6 +74,7 @@ public KnowledgeHistoriesEntity physicalSelectOnKey(Integer historyNo, Long know * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeHistoriesEntity selectOnKey(Integer historyNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeHistoriesEntity.class, historyNo, knowledgeId); @@ -108,6 +115,7 @@ public KnowledgeHistoriesEntity selectOnKey(Integer historyNo, Long knowledgeId) * @param historyNo historyNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnHistoryNo(Integer historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_on_history_no.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class, historyNo); @@ -117,6 +125,7 @@ public List selectOnHistoryNo(Integer historyNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class, knowledgeId); @@ -126,6 +135,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param historyNo historyNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnHistoryNo(Integer historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_on_history_no.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class, historyNo); @@ -135,6 +145,7 @@ public List physicalSelectOnHistoryNo(Integer historyN * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeHistoriesEntity.class, knowledgeId); @@ -143,6 +154,7 @@ public List physicalSelectOnKnowledgeId(Long knowledge * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_HISTORIES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java index 8f1a94493..e3545f10e 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java @@ -43,6 +43,7 @@ public static GenKnowledgeItemValuesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, limit, offset); @@ -64,6 +66,7 @@ public List physicalSelectAllWithPager(int limit, int * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeItemValuesEntity physicalSelectOnKey(Integer itemNo, Long knowledgeId, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeItemValuesEntity.class, itemNo, knowledgeId, typeId); @@ -72,6 +75,7 @@ public KnowledgeItemValuesEntity physicalSelectOnKey(Integer itemNo, Long knowle * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class); @@ -82,6 +86,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, limit, offset); @@ -90,6 +95,7 @@ public List selectAllWidthPager(int limit, int offset * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -101,6 +107,7 @@ public Integer selectCountAll() { * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeItemValuesEntity selectOnKey(Integer itemNo, Long knowledgeId, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeItemValuesEntity.class, itemNo, knowledgeId, typeId); @@ -110,6 +117,7 @@ public KnowledgeItemValuesEntity selectOnKey(Integer itemNo, Long knowledgeId, I * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_on_item_no.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, itemNo); @@ -119,6 +127,7 @@ public List selectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, knowledgeId); @@ -128,6 +137,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_on_type_id.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, typeId); @@ -137,6 +147,7 @@ public List selectOnTypeId(Integer typeId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_on_item_no.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, itemNo); @@ -146,6 +157,7 @@ public List physicalSelectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, knowledgeId); @@ -155,6 +167,7 @@ public List physicalSelectOnKnowledgeId(Long knowledg * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_on_type_id.sql"); return executeQueryList(sql, KnowledgeItemValuesEntity.class, typeId); @@ -163,6 +176,7 @@ public List physicalSelectOnTypeId(Integer typeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_ITEM_VALUES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java index f3ddcbeeb..0a82fea17 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java @@ -43,6 +43,7 @@ public static GenKnowledgeTagsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param tagId tagId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeTagsEntity physicalSelectOnKey(Long knowledgeId, Integer tagId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeTagsEntity.class, knowledgeId, tagId); @@ -71,6 +74,7 @@ public KnowledgeTagsEntity physicalSelectOnKey(Long knowledgeId, Integer tagId) * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param tagId tagId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeTagsEntity selectOnKey(Long knowledgeId, Integer tagId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeTagsEntity.class, knowledgeId, tagId); @@ -108,6 +115,7 @@ public KnowledgeTagsEntity selectOnKey(Long knowledgeId, Integer tagId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class, knowledgeId); @@ -117,6 +125,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param tagId tagId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnTagId(Integer tagId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_on_tag_id.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class, tagId); @@ -126,6 +135,7 @@ public List selectOnTagId(Integer tagId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class, knowledgeId); @@ -135,6 +145,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) { * @param tagId tagId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnTagId(Integer tagId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_on_tag_id.sql"); return executeQueryList(sql, KnowledgeTagsEntity.class, tagId); @@ -143,6 +154,7 @@ public List physicalSelectOnTagId(Integer tagId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_TAGS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java index 3d246f340..6a4331f8f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java @@ -43,6 +43,7 @@ public static GenKnowledgeUsersDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offs * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeUsersEntity physicalSelectOnKey(Long knowledgeId, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeUsersEntity.class, knowledgeId, userId); @@ -71,6 +74,7 @@ public KnowledgeUsersEntity physicalSelectOnKey(Long knowledgeId, Integer userId * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgeUsersEntity selectOnKey(Long knowledgeId, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgeUsersEntity.class, knowledgeId, userId); @@ -108,6 +115,7 @@ public KnowledgeUsersEntity selectOnKey(Long knowledgeId, Integer userId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class, knowledgeId); @@ -117,6 +125,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_on_user_id.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class, userId); @@ -126,6 +135,7 @@ public List selectOnUserId(Integer userId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class, knowledgeId); @@ -135,6 +145,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_on_user_id.sql"); return executeQueryList(sql, KnowledgeUsersEntity.class, userId); @@ -143,6 +154,7 @@ public List physicalSelectOnUserId(Integer userId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGE_USERS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java index 0497b7936..a0c862c2d 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java @@ -43,6 +43,7 @@ public static GenKnowledgesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all.sql"); return executeQueryList(sql, KnowledgesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgesEntity physicalSelectOnKey(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, KnowledgesEntity.class, knowledgeId); @@ -70,6 +73,7 @@ public KnowledgesEntity physicalSelectOnKey(Long knowledgeId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all.sql"); return executeQueryList(sql, KnowledgesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all_with_pager.sql"); return executeQueryList(sql, KnowledgesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public KnowledgesEntity selectOnKey(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_on_key.sql"); return executeQuerySingle(sql, KnowledgesEntity.class, knowledgeId); @@ -105,6 +112,7 @@ public KnowledgesEntity selectOnKey(Long knowledgeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM KNOWLEDGES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java index 6389575a8..83ddaf3fd 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java @@ -43,6 +43,7 @@ public static GenLikeCommentsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all.sql"); return executeQueryList(sql, LikeCommentsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, LikeCommentsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public LikeCommentsEntity physicalSelectOnKey(Long no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, LikeCommentsEntity.class, no); @@ -70,6 +73,7 @@ public LikeCommentsEntity physicalSelectOnKey(Long no) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all.sql"); return executeQueryList(sql, LikeCommentsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all_with_pager.sql"); return executeQueryList(sql, LikeCommentsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public LikeCommentsEntity selectOnKey(Long no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_on_key.sql"); return executeQuerySingle(sql, LikeCommentsEntity.class, no); @@ -105,6 +112,7 @@ public LikeCommentsEntity selectOnKey(Long no) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM LIKE_COMMENTS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java index 4b7e4b128..2497deb0b 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java @@ -43,6 +43,7 @@ public static GenLikesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all.sql"); return executeQueryList(sql, LikesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, LikesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public LikesEntity physicalSelectOnKey(Long no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, LikesEntity.class, no); @@ -70,6 +73,7 @@ public LikesEntity physicalSelectOnKey(Long no) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all.sql"); return executeQueryList(sql, LikesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all_with_pager.sql"); return executeQueryList(sql, LikesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public LikesEntity selectOnKey(Long no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_on_key.sql"); return executeQuerySingle(sql, LikesEntity.class, no); @@ -105,6 +112,7 @@ public LikesEntity selectOnKey(Long no) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM LIKES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java index 1f488fa5a..1074dba68 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java @@ -43,6 +43,7 @@ public static GenMailHookConditionsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all.sql"); return executeQueryList(sql, MailHookConditionsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, MailHookConditionsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int * @param hookId hookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailHookConditionsEntity physicalSelectOnKey(Integer conditionNo, Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, MailHookConditionsEntity.class, conditionNo, hookId); @@ -71,6 +74,7 @@ public MailHookConditionsEntity physicalSelectOnKey(Integer conditionNo, Integer * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all.sql"); return executeQueryList(sql, MailHookConditionsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all_with_pager.sql"); return executeQueryList(sql, MailHookConditionsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param hookId hookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailHookConditionsEntity selectOnKey(Integer conditionNo, Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_on_key.sql"); return executeQuerySingle(sql, MailHookConditionsEntity.class, conditionNo, hookId); @@ -108,6 +115,7 @@ public MailHookConditionsEntity selectOnKey(Integer conditionNo, Integer hookId) * @param conditionNo conditionNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnConditionNo(Integer conditionNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_on_condition_no.sql"); return executeQueryList(sql, MailHookConditionsEntity.class, conditionNo); @@ -117,6 +125,7 @@ public List selectOnConditionNo(Integer conditionNo) { * @param hookId hookId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnHookId(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_on_hook_id.sql"); return executeQueryList(sql, MailHookConditionsEntity.class, hookId); @@ -126,6 +135,7 @@ public List selectOnHookId(Integer hookId) { * @param conditionNo conditionNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnConditionNo(Integer conditionNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_on_condition_no.sql"); return executeQueryList(sql, MailHookConditionsEntity.class, conditionNo); @@ -135,6 +145,7 @@ public List physicalSelectOnConditionNo(Integer condit * @param hookId hookId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnHookId(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_on_hook_id.sql"); return executeQueryList(sql, MailHookConditionsEntity.class, hookId); @@ -143,6 +154,7 @@ public List physicalSelectOnHookId(Integer hookId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM MAIL_HOOK_CONDITIONS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java index 68196a8ea..daae414e7 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java @@ -43,6 +43,7 @@ public static GenMailHooksDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all.sql"); return executeQueryList(sql, MailHooksEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, MailHooksEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param hookId hookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailHooksEntity physicalSelectOnKey(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_on_key.sql"); return executeQuerySingle(sql, MailHooksEntity.class, hookId); @@ -70,6 +73,7 @@ public MailHooksEntity physicalSelectOnKey(Integer hookId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all.sql"); return executeQueryList(sql, MailHooksEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all_with_pager.sql"); return executeQueryList(sql, MailHooksEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param hookId hookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailHooksEntity selectOnKey(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_on_key.sql"); return executeQuerySingle(sql, MailHooksEntity.class, hookId); @@ -105,6 +112,7 @@ public MailHooksEntity selectOnKey(Integer hookId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM MAIL_HOOKS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java index 88db5e38f..9d4c8852d 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java @@ -43,6 +43,7 @@ public static GenMailLocaleTemplatesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int * @param templateId templateId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailLocaleTemplatesEntity physicalSelectOnKey(String key, String templateId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, MailLocaleTemplatesEntity.class, key, templateId); @@ -71,6 +74,7 @@ public MailLocaleTemplatesEntity physicalSelectOnKey(String key, String template * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all_with_pager.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param templateId templateId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailLocaleTemplatesEntity selectOnKey(String key, String templateId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_on_key.sql"); return executeQuerySingle(sql, MailLocaleTemplatesEntity.class, key, templateId); @@ -108,6 +115,7 @@ public MailLocaleTemplatesEntity selectOnKey(String key, String templateId) { * @param key key * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKey(String key) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_on_col_key.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class, key); @@ -117,6 +125,7 @@ public List selectOnKey(String key) { * @param templateId templateId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnTemplateId(String templateId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_on_template_id.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class, templateId); @@ -126,6 +135,7 @@ public List selectOnTemplateId(String templateId) { * @param key key * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKey(String key) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_on_col_key.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class, key); @@ -135,6 +145,7 @@ public List physicalSelectOnKey(String key) { * @param templateId templateId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnTemplateId(String templateId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_on_template_id.sql"); return executeQueryList(sql, MailLocaleTemplatesEntity.class, templateId); @@ -143,6 +154,7 @@ public List physicalSelectOnTemplateId(String templat * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM MAIL_LOCALE_TEMPLATES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java index a5c5c8fc4..b017644a7 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java @@ -43,6 +43,7 @@ public static GenMailPostsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all.sql"); return executeQueryList(sql, MailPostsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, MailPostsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param messageId messageId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailPostsEntity physicalSelectOnKey(String messageId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, MailPostsEntity.class, messageId); @@ -70,6 +73,7 @@ public MailPostsEntity physicalSelectOnKey(String messageId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all.sql"); return executeQueryList(sql, MailPostsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all_with_pager.sql"); return executeQueryList(sql, MailPostsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param messageId messageId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailPostsEntity selectOnKey(String messageId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_on_key.sql"); return executeQuerySingle(sql, MailPostsEntity.class, messageId); @@ -105,6 +112,7 @@ public MailPostsEntity selectOnKey(String messageId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM MAIL_POSTS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java index 6f4dd9ddf..8c5170010 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java @@ -43,6 +43,7 @@ public static GenMailPropertiesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all.sql"); return executeQueryList(sql, MailPropertiesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, MailPropertiesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offs * @param propertyKey propertyKey * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailPropertiesEntity physicalSelectOnKey(Integer hookId, String propertyKey) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, MailPropertiesEntity.class, hookId, propertyKey); @@ -71,6 +74,7 @@ public MailPropertiesEntity physicalSelectOnKey(Integer hookId, String propertyK * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all.sql"); return executeQueryList(sql, MailPropertiesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all_with_pager.sql"); return executeQueryList(sql, MailPropertiesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param propertyKey propertyKey * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailPropertiesEntity selectOnKey(Integer hookId, String propertyKey) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_on_key.sql"); return executeQuerySingle(sql, MailPropertiesEntity.class, hookId, propertyKey); @@ -108,6 +115,7 @@ public MailPropertiesEntity selectOnKey(Integer hookId, String propertyKey) { * @param hookId hookId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnHookId(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_on_hook_id.sql"); return executeQueryList(sql, MailPropertiesEntity.class, hookId); @@ -117,6 +125,7 @@ public List selectOnHookId(Integer hookId) { * @param propertyKey propertyKey * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnPropertyKey(String propertyKey) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_on_property_key.sql"); return executeQueryList(sql, MailPropertiesEntity.class, propertyKey); @@ -126,6 +135,7 @@ public List selectOnPropertyKey(String propertyKey) { * @param hookId hookId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnHookId(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_on_hook_id.sql"); return executeQueryList(sql, MailPropertiesEntity.class, hookId); @@ -135,6 +145,7 @@ public List physicalSelectOnHookId(Integer hookId) { * @param propertyKey propertyKey * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnPropertyKey(String propertyKey) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_on_property_key.sql"); return executeQueryList(sql, MailPropertiesEntity.class, propertyKey); @@ -143,6 +154,7 @@ public List physicalSelectOnPropertyKey(String propertyKey * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM MAIL_PROPERTIES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java index 0698f0c0b..2905d7d54 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java @@ -43,6 +43,7 @@ public static GenMailTemplatesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all.sql"); return executeQueryList(sql, MailTemplatesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, MailTemplatesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param templateId templateId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailTemplatesEntity physicalSelectOnKey(String templateId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, MailTemplatesEntity.class, templateId); @@ -70,6 +73,7 @@ public MailTemplatesEntity physicalSelectOnKey(String templateId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all.sql"); return executeQueryList(sql, MailTemplatesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all_with_pager.sql"); return executeQueryList(sql, MailTemplatesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param templateId templateId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public MailTemplatesEntity selectOnKey(String templateId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_on_key.sql"); return executeQuerySingle(sql, MailTemplatesEntity.class, templateId); @@ -105,6 +112,7 @@ public MailTemplatesEntity selectOnKey(String templateId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM MAIL_TEMPLATES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java index d5fe87ffc..c61819a45 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java @@ -43,6 +43,7 @@ public static GenNotifyConfigsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all.sql"); return executeQueryList(sql, NotifyConfigsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, NotifyConfigsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public NotifyConfigsEntity physicalSelectOnKey(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, NotifyConfigsEntity.class, userId); @@ -70,6 +73,7 @@ public NotifyConfigsEntity physicalSelectOnKey(Integer userId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all.sql"); return executeQueryList(sql, NotifyConfigsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all_with_pager.sql"); return executeQueryList(sql, NotifyConfigsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public NotifyConfigsEntity selectOnKey(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_on_key.sql"); return executeQuerySingle(sql, NotifyConfigsEntity.class, userId); @@ -105,6 +112,7 @@ public NotifyConfigsEntity selectOnKey(Integer userId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM NOTIFY_CONFIGS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java index 1e6a56304..9889901db 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java @@ -43,6 +43,7 @@ public static GenNotifyQueuesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all.sql"); return executeQueryList(sql, NotifyQueuesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, NotifyQueuesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset * @param hash hash * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public NotifyQueuesEntity physicalSelectOnKey(String hash) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, NotifyQueuesEntity.class, hash); @@ -70,6 +73,7 @@ public NotifyQueuesEntity physicalSelectOnKey(String hash) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all.sql"); return executeQueryList(sql, NotifyQueuesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all_with_pager.sql"); return executeQueryList(sql, NotifyQueuesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param hash hash * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public NotifyQueuesEntity selectOnKey(String hash) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_on_key.sql"); return executeQuerySingle(sql, NotifyQueuesEntity.class, hash); @@ -105,6 +112,7 @@ public NotifyQueuesEntity selectOnKey(String hash) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM NOTIFY_QUEUES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java index 60718bebb..a5bdaba5c 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java @@ -43,6 +43,7 @@ public static GenParticipantsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all.sql"); return executeQueryList(sql, ParticipantsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, ParticipantsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offset * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ParticipantsEntity physicalSelectOnKey(Long knowledgeId, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, ParticipantsEntity.class, knowledgeId, userId); @@ -71,6 +74,7 @@ public ParticipantsEntity physicalSelectOnKey(Long knowledgeId, Integer userId) * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all.sql"); return executeQueryList(sql, ParticipantsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all_with_pager.sql"); return executeQueryList(sql, ParticipantsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ParticipantsEntity selectOnKey(Long knowledgeId, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_on_key.sql"); return executeQuerySingle(sql, ParticipantsEntity.class, knowledgeId, userId); @@ -108,6 +115,7 @@ public ParticipantsEntity selectOnKey(Long knowledgeId, Integer userId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_on_knowledge_id.sql"); return executeQueryList(sql, ParticipantsEntity.class, knowledgeId); @@ -117,6 +125,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_on_user_id.sql"); return executeQueryList(sql, ParticipantsEntity.class, userId); @@ -126,6 +135,7 @@ public List selectOnUserId(Integer userId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, ParticipantsEntity.class, knowledgeId); @@ -135,6 +145,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) { * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_on_user_id.sql"); return executeQueryList(sql, ParticipantsEntity.class, userId); @@ -143,6 +154,7 @@ public List physicalSelectOnUserId(Integer userId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM PARTICIPANTS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java index 948eeab27..7dc6cbe85 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java @@ -43,6 +43,7 @@ public static GenPinsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all.sql"); return executeQueryList(sql, PinsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, PinsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public PinsEntity physicalSelectOnKey(Integer no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, PinsEntity.class, no); @@ -70,6 +73,7 @@ public PinsEntity physicalSelectOnKey(Integer no) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all.sql"); return executeQueryList(sql, PinsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all_with_pager.sql"); return executeQueryList(sql, PinsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param no no * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public PinsEntity selectOnKey(Integer no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_on_key.sql"); return executeQuerySingle(sql, PinsEntity.class, no); @@ -105,6 +112,7 @@ public PinsEntity selectOnKey(Integer no) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM PINS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java index aa16c0934..3716ff87f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java @@ -43,6 +43,7 @@ public static GenPointKnowledgeHistoriesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public PointKnowledgeHistoriesEntity physicalSelectOnKey(Long historyNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, PointKnowledgeHistoriesEntity.class, historyNo, knowledgeId); @@ -71,6 +74,7 @@ public PointKnowledgeHistoriesEntity physicalSelectOnKey(Long historyNo, Long kn * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int of * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public PointKnowledgeHistoriesEntity selectOnKey(Long historyNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_key.sql"); return executeQuerySingle(sql, PointKnowledgeHistoriesEntity.class, historyNo, knowledgeId); @@ -108,6 +115,7 @@ public PointKnowledgeHistoriesEntity selectOnKey(Long historyNo, Long knowledgeI * @param historyNo historyNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnHistoryNo(Long historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_history_no.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, historyNo); @@ -117,6 +125,7 @@ public List selectOnHistoryNo(Long historyNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_on_knowledge_id.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, knowledgeId); @@ -126,6 +135,7 @@ public List selectOnKnowledgeId(Long knowledgeId) * @param historyNo historyNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnHistoryNo(Long historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_history_no.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, historyNo); @@ -135,6 +145,7 @@ public List physicalSelectOnHistoryNo(Long histor * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, knowledgeId); @@ -143,6 +154,7 @@ public List physicalSelectOnKnowledgeId(Long know * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM POINT_KNOWLEDGE_HISTORIES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java index 0407be1bb..ce6789c18 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java @@ -43,6 +43,7 @@ public static GenPointUserHistoriesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public PointUserHistoriesEntity physicalSelectOnKey(Long historyNo, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, PointUserHistoriesEntity.class, historyNo, userId); @@ -71,6 +74,7 @@ public PointUserHistoriesEntity physicalSelectOnKey(Long historyNo, Integer user * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public PointUserHistoriesEntity selectOnKey(Long historyNo, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_key.sql"); return executeQuerySingle(sql, PointUserHistoriesEntity.class, historyNo, userId); @@ -108,6 +115,7 @@ public PointUserHistoriesEntity selectOnKey(Long historyNo, Integer userId) { * @param historyNo historyNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnHistoryNo(Long historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_history_no.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class, historyNo); @@ -117,6 +125,7 @@ public List selectOnHistoryNo(Long historyNo) { * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_on_user_id.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class, userId); @@ -126,6 +135,7 @@ public List selectOnUserId(Integer userId) { * @param historyNo historyNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnHistoryNo(Long historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_history_no.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class, historyNo); @@ -135,6 +145,7 @@ public List physicalSelectOnHistoryNo(Long historyNo) * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_on_user_id.sql"); return executeQueryList(sql, PointUserHistoriesEntity.class, userId); @@ -143,6 +154,7 @@ public List physicalSelectOnUserId(Integer userId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM POINT_USER_HISTORIES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java index 8ff4d6cc2..f57b994ff 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java @@ -44,6 +44,7 @@ public static GenServiceConfigsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all.sql"); return executeQueryList(sql, ServiceConfigsEntity.class); @@ -54,6 +55,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, ServiceConfigsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offs * @param serviceName serviceName * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ServiceConfigsEntity physicalSelectOnKey(String serviceName) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, ServiceConfigsEntity.class, serviceName); @@ -71,6 +74,7 @@ public ServiceConfigsEntity physicalSelectOnKey(String serviceName) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all.sql"); return executeQueryList(sql, ServiceConfigsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all_with_pager.sql"); return executeQueryList(sql, ServiceConfigsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -98,6 +104,7 @@ public Integer selectCountAll() { * @param serviceName serviceName * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ServiceConfigsEntity selectOnKey(String serviceName) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_on_key.sql"); return executeQuerySingle(sql, ServiceConfigsEntity.class, serviceName); @@ -106,6 +113,7 @@ public ServiceConfigsEntity selectOnKey(String serviceName) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM SERVICE_CONFIGS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java index 3f8aace86..2252396bb 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java @@ -43,6 +43,7 @@ public static GenServiceLocaleConfigsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, in * @param serviceName serviceName * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ServiceLocaleConfigsEntity physicalSelectOnKey(String localeKey, String serviceName) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, ServiceLocaleConfigsEntity.class, localeKey, serviceName); @@ -71,6 +74,7 @@ public ServiceLocaleConfigsEntity physicalSelectOnKey(String localeKey, String s * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all_with_pager.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offse * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param serviceName serviceName * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ServiceLocaleConfigsEntity selectOnKey(String localeKey, String serviceName) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_on_key.sql"); return executeQuerySingle(sql, ServiceLocaleConfigsEntity.class, localeKey, serviceName); @@ -108,6 +115,7 @@ public ServiceLocaleConfigsEntity selectOnKey(String localeKey, String serviceNa * @param localeKey localeKey * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnLocaleKey(String localeKey) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_on_locale_key.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, localeKey); @@ -117,6 +125,7 @@ public List selectOnLocaleKey(String localeKey) { * @param serviceName serviceName * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnServiceName(String serviceName) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_on_service_name.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, serviceName); @@ -126,6 +135,7 @@ public List selectOnServiceName(String serviceName) * @param localeKey localeKey * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnLocaleKey(String localeKey) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_on_locale_key.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, localeKey); @@ -135,6 +145,7 @@ public List physicalSelectOnLocaleKey(String localeK * @param serviceName serviceName * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnServiceName(String serviceName) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_on_service_name.sql"); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, serviceName); @@ -143,6 +154,7 @@ public List physicalSelectOnServiceName(String servi * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM SERVICE_LOCALE_CONFIGS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java index 80c53a332..55bd4da6e 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java @@ -43,6 +43,7 @@ public static GenStockKnowledgesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all.sql"); return executeQueryList(sql, StockKnowledgesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, StockKnowledgesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int off * @param stockId stockId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public StockKnowledgesEntity physicalSelectOnKey(Long knowledgeId, Long stockId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, StockKnowledgesEntity.class, knowledgeId, stockId); @@ -71,6 +74,7 @@ public StockKnowledgesEntity physicalSelectOnKey(Long knowledgeId, Long stockId) * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all.sql"); return executeQueryList(sql, StockKnowledgesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all_with_pager.sql"); return executeQueryList(sql, StockKnowledgesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param stockId stockId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public StockKnowledgesEntity selectOnKey(Long knowledgeId, Long stockId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_on_key.sql"); return executeQuerySingle(sql, StockKnowledgesEntity.class, knowledgeId, stockId); @@ -108,6 +115,7 @@ public StockKnowledgesEntity selectOnKey(Long knowledgeId, Long stockId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_on_knowledge_id.sql"); return executeQueryList(sql, StockKnowledgesEntity.class, knowledgeId); @@ -117,6 +125,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param stockId stockId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnStockId(Long stockId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_on_stock_id.sql"); return executeQueryList(sql, StockKnowledgesEntity.class, stockId); @@ -126,6 +135,7 @@ public List selectOnStockId(Long stockId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, StockKnowledgesEntity.class, knowledgeId); @@ -135,6 +145,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) * @param stockId stockId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnStockId(Long stockId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_on_stock_id.sql"); return executeQueryList(sql, StockKnowledgesEntity.class, stockId); @@ -143,6 +154,7 @@ public List physicalSelectOnStockId(Long stockId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM STOCK_KNOWLEDGES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java index f63916e62..c82ae33e1 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java @@ -43,6 +43,7 @@ public static GenStocksDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all.sql"); return executeQueryList(sql, StocksEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, StocksEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param stockId stockId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public StocksEntity physicalSelectOnKey(Long stockId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_on_key.sql"); return executeQuerySingle(sql, StocksEntity.class, stockId); @@ -70,6 +73,7 @@ public StocksEntity physicalSelectOnKey(Long stockId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all.sql"); return executeQueryList(sql, StocksEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all_with_pager.sql"); return executeQueryList(sql, StocksEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param stockId stockId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public StocksEntity selectOnKey(Long stockId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_on_key.sql"); return executeQuerySingle(sql, StocksEntity.class, stockId); @@ -105,6 +112,7 @@ public StocksEntity selectOnKey(Long stockId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM STOCKS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java index adddcdbbd..a6f854a62 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java @@ -43,6 +43,7 @@ public static GenSurveyAnswersDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all.sql"); return executeQueryList(sql, SurveyAnswersEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, SurveyAnswersEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyAnswersEntity physicalSelectOnKey(Integer answerId, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_on_key.sql"); return executeQuerySingle(sql, SurveyAnswersEntity.class, answerId, knowledgeId); @@ -71,6 +74,7 @@ public SurveyAnswersEntity physicalSelectOnKey(Integer answerId, Long knowledgeI * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all.sql"); return executeQueryList(sql, SurveyAnswersEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all_with_pager.sql"); return executeQueryList(sql, SurveyAnswersEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyAnswersEntity selectOnKey(Integer answerId, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_on_key.sql"); return executeQuerySingle(sql, SurveyAnswersEntity.class, answerId, knowledgeId); @@ -108,6 +115,7 @@ public SurveyAnswersEntity selectOnKey(Integer answerId, Long knowledgeId) { * @param answerId answerId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnAnswerId(Integer answerId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_on_answer_id.sql"); return executeQueryList(sql, SurveyAnswersEntity.class, answerId); @@ -117,6 +125,7 @@ public List selectOnAnswerId(Integer answerId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyAnswersEntity.class, knowledgeId); @@ -126,6 +135,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param answerId answerId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnAnswerId(Integer answerId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_on_answer_id.sql"); return executeQueryList(sql, SurveyAnswersEntity.class, answerId); @@ -135,6 +145,7 @@ public List physicalSelectOnAnswerId(Integer answerId) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyAnswersEntity.class, knowledgeId); @@ -143,6 +154,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM SURVEY_ANSWERS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java index 87e425952..bfc5ebfa4 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java @@ -43,6 +43,7 @@ public static GenSurveyChoicesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all.sql"); return executeQueryList(sql, SurveyChoicesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, limit, offset); @@ -64,6 +66,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyChoicesEntity physicalSelectOnKey(Integer choiceNo, Integer itemNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, SurveyChoicesEntity.class, choiceNo, itemNo, knowledgeId); @@ -72,6 +75,7 @@ public SurveyChoicesEntity physicalSelectOnKey(Integer choiceNo, Integer itemNo, * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all.sql"); return executeQueryList(sql, SurveyChoicesEntity.class); @@ -82,6 +86,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all_with_pager.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, limit, offset); @@ -90,6 +95,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -101,6 +107,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyChoicesEntity selectOnKey(Integer choiceNo, Integer itemNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_on_key.sql"); return executeQuerySingle(sql, SurveyChoicesEntity.class, choiceNo, itemNo, knowledgeId); @@ -110,6 +117,7 @@ public SurveyChoicesEntity selectOnKey(Integer choiceNo, Integer itemNo, Long kn * @param choiceNo choiceNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnChoiceNo(Integer choiceNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_on_choice_no.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, choiceNo); @@ -119,6 +127,7 @@ public List selectOnChoiceNo(Integer choiceNo) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_on_item_no.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, itemNo); @@ -128,6 +137,7 @@ public List selectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, knowledgeId); @@ -137,6 +147,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param choiceNo choiceNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnChoiceNo(Integer choiceNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_on_choice_no.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, choiceNo); @@ -146,6 +157,7 @@ public List physicalSelectOnChoiceNo(Integer choiceNo) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_on_item_no.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, itemNo); @@ -155,6 +167,7 @@ public List physicalSelectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyChoicesEntity.class, knowledgeId); @@ -163,6 +176,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM SURVEY_CHOICES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java index f56e4ffc6..2e6f67cf4 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java @@ -43,6 +43,7 @@ public static GenSurveyItemAnswersDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, limit, offset); @@ -64,6 +66,7 @@ public List physicalSelectAllWithPager(int limit, int o * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyItemAnswersEntity physicalSelectOnKey(Integer answerId, Integer itemNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_on_key.sql"); return executeQuerySingle(sql, SurveyItemAnswersEntity.class, answerId, itemNo, knowledgeId); @@ -72,6 +75,7 @@ public SurveyItemAnswersEntity physicalSelectOnKey(Integer answerId, Integer ite * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class); @@ -82,6 +86,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all_with_pager.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, limit, offset); @@ -90,6 +95,7 @@ public List selectAllWidthPager(int limit, int offset) * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -101,6 +107,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyItemAnswersEntity selectOnKey(Integer answerId, Integer itemNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_on_key.sql"); return executeQuerySingle(sql, SurveyItemAnswersEntity.class, answerId, itemNo, knowledgeId); @@ -110,6 +117,7 @@ public SurveyItemAnswersEntity selectOnKey(Integer answerId, Integer itemNo, Lon * @param answerId answerId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnAnswerId(Integer answerId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_on_answer_id.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, answerId); @@ -119,6 +127,7 @@ public List selectOnAnswerId(Integer answerId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_on_item_no.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, itemNo); @@ -128,6 +137,7 @@ public List selectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, knowledgeId); @@ -137,6 +147,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param answerId answerId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnAnswerId(Integer answerId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_on_answer_id.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, answerId); @@ -146,6 +157,7 @@ public List physicalSelectOnAnswerId(Integer answerId) * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_on_item_no.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, itemNo); @@ -155,6 +167,7 @@ public List physicalSelectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyItemAnswersEntity.class, knowledgeId); @@ -163,6 +176,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeI * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM SURVEY_ITEM_ANSWERS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java index c1c1f8160..c12079fb9 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java @@ -43,6 +43,7 @@ public static GenSurveyItemsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all.sql"); return executeQueryList(sql, SurveyItemsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, SurveyItemsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offset) * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyItemsEntity physicalSelectOnKey(Integer itemNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, SurveyItemsEntity.class, itemNo, knowledgeId); @@ -71,6 +74,7 @@ public SurveyItemsEntity physicalSelectOnKey(Integer itemNo, Long knowledgeId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all.sql"); return executeQueryList(sql, SurveyItemsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all_with_pager.sql"); return executeQueryList(sql, SurveyItemsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveyItemsEntity selectOnKey(Integer itemNo, Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_on_key.sql"); return executeQuerySingle(sql, SurveyItemsEntity.class, itemNo, knowledgeId); @@ -108,6 +115,7 @@ public SurveyItemsEntity selectOnKey(Integer itemNo, Long knowledgeId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_on_item_no.sql"); return executeQueryList(sql, SurveyItemsEntity.class, itemNo); @@ -117,6 +125,7 @@ public List selectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyItemsEntity.class, knowledgeId); @@ -126,6 +135,7 @@ public List selectOnKnowledgeId(Long knowledgeId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_on_item_no.sql"); return executeQueryList(sql, SurveyItemsEntity.class, itemNo); @@ -135,6 +145,7 @@ public List physicalSelectOnItemNo(Integer itemNo) { * @param knowledgeId knowledgeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnKnowledgeId(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_on_knowledge_id.sql"); return executeQueryList(sql, SurveyItemsEntity.class, knowledgeId); @@ -143,6 +154,7 @@ public List physicalSelectOnKnowledgeId(Long knowledgeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM SURVEY_ITEMS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java index e46f71947..18f58d1bc 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java @@ -43,6 +43,7 @@ public static GenSurveysDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all.sql"); return executeQueryList(sql, SurveysEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, SurveysEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveysEntity physicalSelectOnKey(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_on_key.sql"); return executeQuerySingle(sql, SurveysEntity.class, knowledgeId); @@ -70,6 +73,7 @@ public SurveysEntity physicalSelectOnKey(Long knowledgeId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all.sql"); return executeQueryList(sql, SurveysEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all_with_pager.sql"); return executeQueryList(sql, SurveysEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param knowledgeId knowledgeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public SurveysEntity selectOnKey(Long knowledgeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_on_key.sql"); return executeQuerySingle(sql, SurveysEntity.class, knowledgeId); @@ -105,6 +112,7 @@ public SurveysEntity selectOnKey(Long knowledgeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM SURVEYS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java index ef6e4230b..07fb18b97 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java @@ -43,6 +43,7 @@ public static GenTagsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all.sql"); return executeQueryList(sql, TagsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, TagsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param tagId tagId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TagsEntity physicalSelectOnKey(Integer tagId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, TagsEntity.class, tagId); @@ -70,6 +73,7 @@ public TagsEntity physicalSelectOnKey(Integer tagId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all.sql"); return executeQueryList(sql, TagsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all_with_pager.sql"); return executeQueryList(sql, TagsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param tagId tagId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TagsEntity selectOnKey(Integer tagId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_on_key.sql"); return executeQuerySingle(sql, TagsEntity.class, tagId); @@ -105,6 +112,7 @@ public TagsEntity selectOnKey(Integer tagId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM TAGS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java index 0fa446953..31f633392 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java @@ -43,6 +43,7 @@ public static GenTemplateItemsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all.sql"); return executeQueryList(sql, TemplateItemsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, TemplateItemsEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TemplateItemsEntity physicalSelectOnKey(Integer itemNo, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, TemplateItemsEntity.class, itemNo, typeId); @@ -71,6 +74,7 @@ public TemplateItemsEntity physicalSelectOnKey(Integer itemNo, Integer typeId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all.sql"); return executeQueryList(sql, TemplateItemsEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all_with_pager.sql"); return executeQueryList(sql, TemplateItemsEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TemplateItemsEntity selectOnKey(Integer itemNo, Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_on_key.sql"); return executeQuerySingle(sql, TemplateItemsEntity.class, itemNo, typeId); @@ -108,6 +115,7 @@ public TemplateItemsEntity selectOnKey(Integer itemNo, Integer typeId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_on_item_no.sql"); return executeQueryList(sql, TemplateItemsEntity.class, itemNo); @@ -117,6 +125,7 @@ public List selectOnItemNo(Integer itemNo) { * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_on_type_id.sql"); return executeQueryList(sql, TemplateItemsEntity.class, typeId); @@ -126,6 +135,7 @@ public List selectOnTypeId(Integer typeId) { * @param itemNo itemNo * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnItemNo(Integer itemNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_on_item_no.sql"); return executeQueryList(sql, TemplateItemsEntity.class, itemNo); @@ -135,6 +145,7 @@ public List physicalSelectOnItemNo(Integer itemNo) { * @param typeId typeId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnTypeId(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_on_type_id.sql"); return executeQueryList(sql, TemplateItemsEntity.class, typeId); @@ -143,6 +154,7 @@ public List physicalSelectOnTypeId(Integer typeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM TEMPLATE_ITEMS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java index 3f00ac3d6..c81db6ee2 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java @@ -43,6 +43,7 @@ public static GenTemplateMastersDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all.sql"); return executeQueryList(sql, TemplateMastersEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, TemplateMastersEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int off * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TemplateMastersEntity physicalSelectOnKey(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_on_key.sql"); return executeQuerySingle(sql, TemplateMastersEntity.class, typeId); @@ -70,6 +73,7 @@ public TemplateMastersEntity physicalSelectOnKey(Integer typeId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all.sql"); return executeQueryList(sql, TemplateMastersEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all_with_pager.sql"); return executeQueryList(sql, TemplateMastersEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param typeId typeId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TemplateMastersEntity selectOnKey(Integer typeId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_on_key.sql"); return executeQuerySingle(sql, TemplateMastersEntity.class, typeId); @@ -105,6 +112,7 @@ public TemplateMastersEntity selectOnKey(Integer typeId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM TEMPLATE_MASTERS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java index 81d688106..c2157d24f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java @@ -43,6 +43,7 @@ public static GenTokensDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all.sql"); return executeQueryList(sql, TokensEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, TokensEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param token token * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TokensEntity physicalSelectOnKey(String token) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_on_key.sql"); return executeQuerySingle(sql, TokensEntity.class, token); @@ -70,6 +73,7 @@ public TokensEntity physicalSelectOnKey(String token) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all.sql"); return executeQueryList(sql, TokensEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all_with_pager.sql"); return executeQueryList(sql, TokensEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param token token * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public TokensEntity selectOnKey(String token) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_on_key.sql"); return executeQuerySingle(sql, TokensEntity.class, token); @@ -105,6 +112,7 @@ public TokensEntity selectOnKey(String token) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM TOKENS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java index 7b347930a..93c84ffa5 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java @@ -43,6 +43,7 @@ public static GenUserBadgesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql"); return executeQueryList(sql, UserBadgesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, UserBadgesEntity.class, limit, offset); @@ -63,6 +65,7 @@ public List physicalSelectAllWithPager(int limit, int offset) * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public UserBadgesEntity physicalSelectOnKey(Integer no, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, UserBadgesEntity.class, no, userId); @@ -71,6 +74,7 @@ public UserBadgesEntity physicalSelectOnKey(Integer no, Integer userId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql"); return executeQueryList(sql, UserBadgesEntity.class); @@ -81,6 +85,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql"); return executeQueryList(sql, UserBadgesEntity.class, limit, offset); @@ -89,6 +94,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -99,6 +105,7 @@ public Integer selectCountAll() { * @param userId userId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public UserBadgesEntity selectOnKey(Integer no, Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_key.sql"); return executeQuerySingle(sql, UserBadgesEntity.class, no, userId); @@ -108,6 +115,7 @@ public UserBadgesEntity selectOnKey(Integer no, Integer userId) { * @param no no * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnNo(Integer no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_no.sql"); return executeQueryList(sql, UserBadgesEntity.class, no); @@ -117,6 +125,7 @@ public List selectOnNo(Integer no) { * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_on_user_id.sql"); return executeQueryList(sql, UserBadgesEntity.class, userId); @@ -126,6 +135,7 @@ public List selectOnUserId(Integer userId) { * @param no no * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnNo(Integer no) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_no.sql"); return executeQueryList(sql, UserBadgesEntity.class, no); @@ -135,6 +145,7 @@ public List physicalSelectOnNo(Integer no) { * @param userId userId * @return list */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectOnUserId(Integer userId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_on_user_id.sql"); return executeQueryList(sql, UserBadgesEntity.class, userId); @@ -143,6 +154,7 @@ public List physicalSelectOnUserId(Integer userId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM USER_BADGES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java index 5341053d6..8ce0c10d3 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java @@ -43,6 +43,7 @@ public static GenViewHistoriesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all.sql"); return executeQueryList(sql, ViewHistoriesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, ViewHistoriesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offse * @param historyNo historyNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ViewHistoriesEntity physicalSelectOnKey(Long historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, ViewHistoriesEntity.class, historyNo); @@ -70,6 +73,7 @@ public ViewHistoriesEntity physicalSelectOnKey(Long historyNo) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all.sql"); return executeQueryList(sql, ViewHistoriesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all_with_pager.sql"); return executeQueryList(sql, ViewHistoriesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param historyNo historyNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public ViewHistoriesEntity selectOnKey(Long historyNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_on_key.sql"); return executeQuerySingle(sql, ViewHistoriesEntity.class, historyNo); @@ -105,6 +112,7 @@ public ViewHistoriesEntity selectOnKey(Long historyNo) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM VIEW_HISTORIES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java index 748de697d..572b6d1d9 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java @@ -43,6 +43,7 @@ public static GenVotesDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all.sql"); return executeQueryList(sql, VotesEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, VotesEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param voteNo voteNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public VotesEntity physicalSelectOnKey(Long voteNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_on_key.sql"); return executeQuerySingle(sql, VotesEntity.class, voteNo); @@ -70,6 +73,7 @@ public VotesEntity physicalSelectOnKey(Long voteNo) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all.sql"); return executeQueryList(sql, VotesEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all_with_pager.sql"); return executeQueryList(sql, VotesEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param voteNo voteNo * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public VotesEntity selectOnKey(Long voteNo) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_on_key.sql"); return executeQuerySingle(sql, VotesEntity.class, voteNo); @@ -105,6 +112,7 @@ public VotesEntity selectOnKey(Long voteNo) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM VOTES"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java index ecbf46f84..09e519a3b 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java @@ -43,6 +43,7 @@ public static GenWebhookConfigsDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all.sql"); return executeQueryList(sql, WebhookConfigsEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, WebhookConfigsEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offs * @param hookId hookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public WebhookConfigsEntity physicalSelectOnKey(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_on_key.sql"); return executeQuerySingle(sql, WebhookConfigsEntity.class, hookId); @@ -70,6 +73,7 @@ public WebhookConfigsEntity physicalSelectOnKey(Integer hookId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all.sql"); return executeQueryList(sql, WebhookConfigsEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all_with_pager.sql"); return executeQueryList(sql, WebhookConfigsEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param hookId hookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public WebhookConfigsEntity selectOnKey(Integer hookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_on_key.sql"); return executeQuerySingle(sql, WebhookConfigsEntity.class, hookId); @@ -105,6 +112,7 @@ public WebhookConfigsEntity selectOnKey(Integer hookId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM WEBHOOK_CONFIGS"; return executeQuerySingle(sql, Integer.class); diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java index b92181fa3..00aba93cb 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java @@ -43,6 +43,7 @@ public static GenWebhooksDao get() { * Select all data. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all.sql"); return executeQueryList(sql, WebhooksEntity.class); @@ -53,6 +54,7 @@ public List physicalSelectAll() { * @param offset offset * @return all data on limit and offset */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all_with_pager.sql"); return executeQueryList(sql, WebhooksEntity.class, limit, offset); @@ -62,6 +64,7 @@ public List physicalSelectAllWithPager(int limit, int offset) { * @param webhookId webhookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public WebhooksEntity physicalSelectOnKey(String webhookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_on_key.sql"); return executeQuerySingle(sql, WebhooksEntity.class, webhookId); @@ -70,6 +73,7 @@ public WebhooksEntity physicalSelectOnKey(String webhookId) { * Select all data that not deleted. * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all.sql"); return executeQueryList(sql, WebhooksEntity.class); @@ -80,6 +84,7 @@ public List selectAll() { * @param offset offset * @return all data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all_with_pager.sql"); return executeQueryList(sql, WebhooksEntity.class, limit, offset); @@ -88,6 +93,7 @@ public List selectAllWidthPager(int limit, int offset) { * Select count that not deleted. * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public Integer selectCountAll() { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_count_all.sql"); return executeQuerySingle(sql, Integer.class); @@ -97,6 +103,7 @@ public Integer selectCountAll() { * @param webhookId webhookId * @return data */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public WebhooksEntity selectOnKey(String webhookId) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_on_key.sql"); return executeQuerySingle(sql, WebhooksEntity.class, webhookId); @@ -105,6 +112,7 @@ public WebhooksEntity selectOnKey(String webhookId) { * Count all data * @return count */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public int physicalCountAll() { String sql = "SELECT COUNT(*) FROM WEBHOOKS"; return executeQuerySingle(sql, Integer.class); From 00da34e25ed44d2ae32bd0ee4c999e8f6abed5db Mon Sep 17 00:00:00 2001 From: Koda Date: Mon, 4 Sep 2017 23:05:28 +0900 Subject: [PATCH 045/138] #840 Add add point process at comment insert --- .../deploy/v1_11_0/Migrate_1_11_2.java | 166 ++++++++++-------- .../activity/AbstractActivityProcessor.java | 10 +- .../AbstractAddPointForCommentProcessor.java | 76 ++++++++ ...AbstractAddPointForKnowledgeProcessor.java | 24 ++- .../knowledge/logic/activity/Activity.java | 4 +- .../logic/activity/ActivityLogic.java | 12 +- .../logic/activity/ActivityProcessor.java | 8 +- .../activity/KnowledgeCommentActivity.java | 38 ++++ src/main/resources/log4j.xml | 7 + 9 files changed, 259 insertions(+), 86 deletions(-) create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/KnowledgeCommentActivity.java diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index 9d51a8289..06774d849 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -7,6 +7,7 @@ import org.support.project.common.log.LogFactory; import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.config.UserConfig; +import org.support.project.knowledge.dao.CommentsDao; import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.dao.LikesDao; import org.support.project.knowledge.dao.ParticipantsDao; @@ -14,6 +15,7 @@ import org.support.project.knowledge.dao.SurveyAnswersDao; import org.support.project.knowledge.dao.ViewHistoriesDao; import org.support.project.knowledge.deploy.Migrate; +import org.support.project.knowledge.entity.CommentsEntity; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.LikesEntity; import org.support.project.knowledge.entity.ParticipantsEntity; @@ -29,12 +31,14 @@ import org.support.project.web.entity.UsersEntity; public class Migrate_1_11_2 implements Migrate { + private static final int _WAIT = 50; /** ログ */ private static final Log LOG = LogFactory.getLog(Migrate_1_11_2.class); public static Migrate_1_11_2 get() { return org.support.project.di.Container.getComp(Migrate_1_11_2.class); } + private int limit = 1; // 1件毎にコミットいれないと、別コネクションで取得して結果をクリアしてしまう? @Override public boolean doMigrate() throws Exception { @@ -48,14 +52,11 @@ public boolean doMigrate() throws Exception { doSetViewCountToKnowledge(); // ユーザについているポイントをクリア clearUserPoint(); - // Knowledgeを登録したイベントによりポイントを集計 doAddPointByKnowledge(); // Knowledgeを参照したイベントによりポイントを集計 doAddPointByKnowledgeShow(); // Knowledgeにイイネを押したイベントによりポイント集計 - doAddPointByKnowledgeShow(); - // Knowledgeにイイネを押したイベントによりポイント集計 doAddPointByKnowledgeLike(); // Knowledgeをストックイベントによりポイント集計 doAddPointByKnowledgeStock(); @@ -63,255 +64,278 @@ public boolean doMigrate() throws Exception { doAddPointByKnowledgeAnswer(); // Knowledgeイベント参加したイベントによりポイント集計 doAddPointByKnowledgeJoinEvent(); + // コメントを登録したイベントによりポイント集計 + doAddPointByKnowledgeComment(); return true; } + private void doAddPointByKnowledgeComment() throws InterruptedException { + LOG.info("Aggregate point by comment"); + List list; + int offset = 0; + do { + list = doAddPointByKnowledgeComment(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(_WAIT); + } + } while (list.size() > 0); + } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List doAddPointByKnowledgeComment(int offset, int limit) { + List list; + list = CommentsDao.get().selectAllWidthPager(limit, offset); + for (CommentsEntity item : list) { + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); + if (account == null) { + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); + continue; + } + user.setLoginUser(account); + LOG.debug(" comment [" + item.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_ADD, user, item.getInsertDatetime(), item); + } + return list; + } + private void doAddPointByKnowledgeJoinEvent() throws InterruptedException { + LOG.info("Aggregate point by knowledge join event"); List list; int offset = 0; - int limit = 50; do { list = doAddPointByKnowledgeJoinEvent(offset, limit); offset = offset + limit; synchronized (this) { - wait(200); + wait(_WAIT); } } while (list.size() > 0); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private List doAddPointByKnowledgeJoinEvent(int offset, int limit) { - LOG.info("Aggregate point by knowledge join event"); + public List doAddPointByKnowledgeJoinEvent(int offset, int limit) { List list; list = ParticipantsDao.get().selectAllWidthPager(limit, offset); for (ParticipantsEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.info(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); continue; } LoginedUser user = new LoginedUser(); UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); continue; } user.setLoginUser(account); - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); + LOG.debug(" knowledge [" + knowledge.getKnowledgeId() + "] "); ActivityLogic.get().processActivity(Activity.KNOWLEDGE_EVENT_ADD, user, item.getInsertDatetime(), knowledge); } return list; } private void doAddPointByKnowledgeAnswer() throws InterruptedException { + LOG.info("Aggregate point by knowledge answer"); List list; int offset = 0; - int limit = 50; do { list = doAddPointByKnowledgeAnswer(offset, limit); offset = offset + limit; synchronized (this) { - wait(200); + wait(_WAIT); } } while (list.size() > 0); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private List doAddPointByKnowledgeAnswer(int offset, int limit) { - LOG.info("Aggregate point by knowledge answer"); + public List doAddPointByKnowledgeAnswer(int offset, int limit) { List list; list = SurveyAnswersDao.get().selectAllWidthPager(limit, offset); - for (SurveyAnswersEntity answer : list) { - KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(answer.getKnowledgeId()); + for (SurveyAnswersEntity item : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.info(" knowledge [" + answer.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); continue; } LoginedUser user = new LoginedUser(); - UsersEntity account = UsersDao.get().selectOnKey(answer.getInsertUser()); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); continue; } user.setLoginUser(account); - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_ANSWER, user, answer.getInsertDatetime(), knowledge); + LOG.debug(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_ANSWER, user, item.getInsertDatetime(), knowledge); } return list; } private void doAddPointByKnowledgeStock() throws InterruptedException { + LOG.info("Aggregate point by knowledge stock"); List list; int offset = 0; - int limit = 50; do { list = doAddPointByKnowledgeStock(offset, limit); offset = offset + limit; synchronized (this) { - wait(200); + wait(_WAIT); } } while (list.size() > 0); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private List doAddPointByKnowledgeStock(int offset, int limit) { - LOG.info("Aggregate point by knowledge stock"); + public List doAddPointByKnowledgeStock(int offset, int limit) { List list; list = StockKnowledgesDao.get().selectAllWidthPager(limit, offset); - for (StockKnowledgesEntity stock : list) { - KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(stock.getKnowledgeId()); + for (StockKnowledgesEntity item : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.info(" knowledge [" + stock.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); continue; } LoginedUser user = new LoginedUser(); - UsersEntity account = UsersDao.get().selectOnKey(stock.getInsertUser()); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); continue; } user.setLoginUser(account); - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_STOCK, user, stock.getInsertDatetime(), knowledge); + LOG.debug(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_STOCK, user, item.getInsertDatetime(), knowledge); } return list; } - @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) private void doAddPointByKnowledgeLike() throws InterruptedException { + LOG.info("Aggregate point by knowledge like"); List list; int offset = 0; - int limit = 50; do { list = doAddPointByKnowledgeLike(offset, limit); offset = offset + limit; synchronized (this) { - wait(200); + wait(_WAIT); } } while (list.size() > 0); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private List doAddPointByKnowledgeLike(int offset, int limit) { - LOG.info("Aggregate point by knowledge like"); + public List doAddPointByKnowledgeLike(int offset, int limit) { List list; list = LikesDao.get().selectAllWidthPager(limit, offset); - for (LikesEntity like : list) { - KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(like.getKnowledgeId()); + for (LikesEntity item : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.info(" knowledge [" + like.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); continue; } LoginedUser user = new LoginedUser(); - UsersEntity account = UsersDao.get().selectOnKey(like.getInsertUser()); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); continue; } user.setLoginUser(account); - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, user, like.getInsertDatetime(), knowledge); + LOG.debug(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_LIKE, user, item.getInsertDatetime(), knowledge); } return list; } private void doAddPointByKnowledgeShow() throws InterruptedException { + LOG.info("Aggregate point by knowledge show"); List list; int offset = 0; - int limit = 50; do { list = doAddPointByKnowledgeShow(offset, limit); offset = offset + limit; synchronized (this) { - wait(200); + wait(_WAIT); } } while (list.size() > 0); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private List doAddPointByKnowledgeShow(int offset, int limit) { - LOG.info("Aggregate point by knowledge show"); + public List doAddPointByKnowledgeShow(int offset, int limit) { List list; list = ViewHistoriesDao.get().selectAllWidthPager(limit, offset); - for (ViewHistoriesEntity viewHistoriesEntity : list) { - KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(viewHistoriesEntity.getKnowledgeId()); + for (ViewHistoriesEntity item : list) { + KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.info(" knowledge [" + viewHistoriesEntity.getKnowledgeId() + "] is not found. so skip add point by knowledge show."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge show."); continue; } LoginedUser user = new LoginedUser(); - UsersEntity account = UsersDao.get().selectOnKey(viewHistoriesEntity.getInsertUser()); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.info(" event user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge show."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge show."); continue; } user.setLoginUser(account); - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, user, viewHistoriesEntity.getInsertDatetime(), knowledge); + LOG.debug(" knowledge [" + knowledge.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, user, item.getInsertDatetime(), knowledge); } return list; } public void doAddPointByKnowledge() throws InterruptedException { + LOG.info("Aggregate point by knowledge insert"); List knowledges; int offset = 0; - int limit = 50; do { knowledges = doAddPointByKnowledge(offset, limit); offset = offset + limit; synchronized (this) { - wait(200); + wait(_WAIT); } } while (knowledges.size() > 0); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private List doAddPointByKnowledge(int offset, int limit) { - LOG.info("Aggregate point by knowledge insert"); + public List doAddPointByKnowledge(int offset, int limit) { List knowledges; knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); - for (KnowledgesEntity knowledge : knowledges) { + for (KnowledgesEntity item : knowledges) { LoginedUser user = new LoginedUser(); - UsersEntity account = UsersDao.get().selectOnKey(knowledge.getInsertUser()); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.info(" insert user [" + knowledge.getInsertUser() + "] is not found. so skip add point by knowledge insert."); + LOG.debug(" insert user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge insert."); continue; } user.setLoginUser(account); - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, user, knowledge.getInsertDatetime(), knowledge); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] "); + ActivityLogic.get().processActivity(Activity.KNOWLEDGE_INSERT, user, item.getInsertDatetime(), item); } return knowledges; } private void doSetViewCountToKnowledge() throws InterruptedException { + LOG.info("Set view count to Knowledge"); List knowledges; int offset = 0; - int limit = 50; do { knowledges = doSetViewCountToKnowledge(offset, limit); offset = offset + limit; synchronized (this) { - wait(200); + wait(_WAIT); } } while (knowledges.size() > 0); } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private List doSetViewCountToKnowledge(int offset, int limit) { - LOG.info("Set view count to Knowledge"); + public List doSetViewCountToKnowledge(int offset, int limit) { List knowledges; knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); for (KnowledgesEntity knowledge : knowledges) { - LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] "); long count = ViewHistoriesDao.get().selectCountOnKnowledgeId(knowledge.getKnowledgeId()); KnowledgesDao.get().updateViewCount(count, knowledge.getKnowledgeId()); - //ついでにポイントも初期化 KnowledgesDao.get().updatePoint(knowledge.getKnowledgeId(), 0); + LOG.info(" knowledge [" + knowledge.getKnowledgeId() + "] is updated. view count : " + count); } return knowledges; } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) - private void clearUserPoint() { + public void clearUserPoint() { UserConfigsDao.get().removeAllUserConfig(AppConfig.get().getSystemName(), UserConfig.POINT); } } \ No newline at end of file diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java index 4cc5bf77a..33f361902 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java @@ -4,7 +4,10 @@ import java.sql.Timestamp; import java.util.Date; +import org.support.project.aop.Aspect; import org.support.project.common.config.INT_FLAG; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; import org.support.project.common.util.StringUtils; import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.config.UserConfig; @@ -25,6 +28,7 @@ * @author koda */ public abstract class AbstractActivityProcessor implements ActivityProcessor { + private static final Log LOG = LogFactory.getLog(AbstractActivityProcessor.class); private static Object lockUser = new Object(); private static Object lockKnowledge = new Object(); @@ -76,6 +80,7 @@ protected boolean isExistsActivity(int userId, Activity kind, String target) { * @param kind アクティビティの種類 * @param target そのアクティビティでポイントを付与する対象 */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) protected ActivitiesEntity addActivity(Activity kind, String target) { ActivitiesEntity entity = new ActivitiesEntity(); entity.setUserId(eventUser.getUserId()); @@ -98,6 +103,7 @@ protected ActivitiesEntity addActivity(Activity kind, String target) { * @param point * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) protected int addPointForUser(int targetUser, long activityNo, int type, int point) { synchronized(lockUser) { long num = PointUserHistoriesDao.get().selectNumOnUser(targetUser); @@ -139,6 +145,7 @@ protected int addPointForUser(int targetUser, long activityNo, int type, int poi * @param point * @return */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) protected int addPointForKnowledge(long knowledgeId, long activityNo, int type, int point) { synchronized (lockKnowledge) { long num = PointKnowledgeHistoriesDao.get().selectNumOnKnowledge(knowledgeId); @@ -157,8 +164,9 @@ protected int addPointForKnowledge(long knowledgeId, long activityNo, int type, // Daoのupdateメソッドなどを使うと、「更新者」が更新されるので、ポイントのみを更新するメソッドを呼ぶ // なお、記事の存在チェックは行わない int now = KnowledgesDao.get().selectPoint(knowledgeId); + LOG.info("Add point [knowledge]" + knowledgeId + " [point]" + point + " [now]" + now); now = now + point; - KnowledgesDao.get().updatePoint(knowledgeId, point); + KnowledgesDao.get().updatePoint(knowledgeId, now); return now; } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java index 2ecf4f345..78e8c289d 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java @@ -1,8 +1,15 @@ package org.support.project.knowledge.logic.activity; +import org.support.project.aop.Aspect; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.entity.ActivitiesEntity; import org.support.project.knowledge.entity.CommentsEntity; +import org.support.project.knowledge.entity.KnowledgesEntity; public abstract class AbstractAddPointForCommentProcessor extends AbstractActivityProcessor { + private static final Log LOG = LogFactory.getLog(AbstractAddPointForCommentProcessor.class); private CommentsEntity comment; /** * @return the comment @@ -16,4 +23,73 @@ public CommentsEntity getComment() { public void setComment(CommentsEntity comment) { this.comment = comment; } + + protected abstract Activity getActivity(); + protected abstract TypeAndPoint getTypeAndPointForActivityExecuter(); + protected abstract TypeAndPoint getTypeAndPointForCommentOwner(); + protected abstract TypeAndPoint getTypeAndPointForKnowledge(); + + @Override + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public void execute() throws Exception { + if (getComment() == null || eventUser == null) { + // ありえないけど念のため確認 + return; + } + if (isExistsActivity(eventUser.getUserId(), getActivity(), String.valueOf(getComment().getCommentNo()))) { + LOG.info("This activity is already exists. [Activity]" + getActivity().toString() + " [user]" + eventUser.getUserId() + + " [comment]" + getComment().getCommentNo()); + return; + } + KnowledgesEntity parentKnowledge = KnowledgesDao.get().selectOnKey(getComment().getKnowledgeId()); + if (parentKnowledge == null) { + LOG.info("Knowledge is not found. [comment] " + getComment().getCommentNo() + " [knowledge]" + getComment().getKnowledgeId()); + return; + } + + LOG.info("activity process started. [Activity]" + getActivity().toString() + " [user]" + eventUser.getUserId() + + " [comment]" + getComment().getCommentNo()); + + StringBuilder logmsg = new StringBuilder(); + logmsg.append("Activity : " + getActivity().toString()); + + // ポイント発行アクティビティを生成 + ActivitiesEntity activity = addActivity( + getActivity(), + String.valueOf(getComment().getCommentNo())); + + // 実行したユーザのポイントアップ + TypeAndPoint exec = getTypeAndPointForActivityExecuter(); + if (exec != null) { + int point = addPointForUser( + eventUser.getUserId(), // ターゲットは、実行したユーザ + activity.getActivityNo(), + exec.type, + exec.point); + logmsg.append("\n\tAdd event user: [id]" + eventUser.getUserId() + " [type]" + exec.type + " [add]" + exec.point + " [result]" + point); + } + // コメントの登録者のポイントをアップ + TypeAndPoint owner = getTypeAndPointForCommentOwner(); + if (owner != null) { + int point = addPointForUser( + getComment().getInsertUser(), // ターゲットは登録者 + activity.getActivityNo(), + owner.type, + owner.point); + logmsg.append("\n\tAdd owner user: [id]" + getComment().getInsertUser() + " [type]" + owner.type + " [add]" + owner.point + " [result]" + point); + } + // 記事のポイントアップ(コメントにはポイントをもっていないので、親のナレッジのポイントをアップ) + TypeAndPoint knowledge = getTypeAndPointForKnowledge(); + if (knowledge != null) { + int point = addPointForKnowledge( + parentKnowledge.getKnowledgeId(), + activity.getActivityNo(), + knowledge.type, + knowledge.point); + logmsg.append("\n\tAdd knowledge: [id]" + parentKnowledge.getKnowledgeId() + " [type]" + knowledge.type + " [add]" + knowledge.point + " [result]" + point); + } + LOG.info(logmsg.toString()); + } + + } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java index 1d3c70e9f..51334644a 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java @@ -1,9 +1,13 @@ package org.support.project.knowledge.logic.activity; +import org.support.project.aop.Aspect; +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; import org.support.project.knowledge.entity.ActivitiesEntity; import org.support.project.knowledge.entity.KnowledgesEntity; public abstract class AbstractAddPointForKnowledgeProcessor extends AbstractActivityProcessor { + private static final Log LOG = LogFactory.getLog(AbstractAddPointForKnowledgeProcessor.class); private KnowledgesEntity knowledge; /** * @return the knowledge @@ -24,47 +28,61 @@ public void setKnowledge(KnowledgesEntity knowledge) { protected abstract TypeAndPoint getTypeAndPointForKnowledge(); @Override + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public void execute() throws Exception { if (getKnowledge() == null || eventUser == null) { // ありえないけど念のため確認 return; } if (isExistsActivity(eventUser.getUserId(), getActivity(), String.valueOf(getKnowledge().getKnowledgeId()))) { + LOG.info("This activity is already exists. [Activity]" + getActivity().toString() + " [user]" + eventUser.getUserId() + + " [knowledge]" + getKnowledge().getKnowledgeId()); // 既に指定のKnowledge登録済 return; } + LOG.info("activity process started. [Activity]" + getActivity().toString() + " [user]" + eventUser.getUserId() + + " [knowledge]" + getKnowledge().getKnowledgeId()); + + StringBuilder logmsg = new StringBuilder(); + logmsg.append("Activity : " + getActivity().toString()); + // ポイント発行アクティビティを生成 ActivitiesEntity activity = addActivity( getActivity(), String.valueOf(getKnowledge().getKnowledgeId())); + // 実行したユーザのポイントアップ TypeAndPoint exec = getTypeAndPointForActivityExecuter(); if (exec != null) { - addPointForUser( + int point = addPointForUser( eventUser.getUserId(), // ターゲットは、実行したユーザ activity.getActivityNo(), exec.type, exec.point); + logmsg.append("\n\tAdd event user: [id]" + eventUser.getUserId() + " [type]" + exec.type + " [add]" + exec.point + " [result]" + point); } // 記事の登録者のポイントをアップ TypeAndPoint owner = getTypeAndPointForKnowledgeOwner(); if (owner != null) { - addPointForUser( + int point = addPointForUser( getKnowledge().getInsertUser(), // ターゲットは登録者 activity.getActivityNo(), owner.type, owner.point); + logmsg.append("\n\tAdd owner user: [id]" + getKnowledge().getInsertUser() + " [type]" + owner.type + " [add]" + owner.point + " [result]" + point); } // 記事のポイントアップ TypeAndPoint knowledge = getTypeAndPointForKnowledge(); if (knowledge != null) { - addPointForKnowledge( + int point = addPointForKnowledge( getKnowledge().getKnowledgeId(), activity.getActivityNo(), knowledge.type, knowledge.point); + logmsg.append("\n\tAdd knowledge: [id]" + getKnowledge().getKnowledgeId() + " [type]" + knowledge.type + " [add]" + knowledge.point + " [result]" + point); } + LOG.info(logmsg.toString()); } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/Activity.java b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java index 4bcd0c21c..280f57261 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/Activity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java @@ -20,7 +20,7 @@ * * 種類 | 獲得のタイプ | ポイント付与先 | ポイント | 獲得タイプの意味 * 1 | 11 | 記事登録者 | 50 | 記事を投稿したら投稿者にポイント追加 - * 1 | 12 | 記事 | 50 | 登録された記事のポイント初期値 + * 1 | 13 | 記事 | 50 | 登録された記事のポイント初期値 * 2 | 21 | 参照者 | 1 | 記事を参照するアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) * 2 | 22 | 記事登録者 | 1 | 自分が登録された記事が参照されたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) * 2 | 23 | 記事 | 1 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) @@ -37,7 +37,7 @@ * 6 | 62 | 記事登録者 | 5 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) * 6 | 63 | 記事 | 5 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) * 101 | 1011 | 登録者 | 20 | コメントを投稿すると、投稿者にポイント追加 - * 101 | 1012 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 + * 101 | 1013 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 * 102 | 1021 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 * 102 | 1022 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く * 102 | 1023 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java index b2e7c1e16..3f5160c0c 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java @@ -37,12 +37,12 @@ private List getActivityProcessors(Activity activity) { array.add(KnowledgeAnswerActivity.get()); } else if (activity == Activity.KNOWLEDGE_EVENT_ADD) { array.add(KnowledgeEventActivity.get()); + } else if (activity == Activity.KNOWLEDGE_COMMENT_ADD) { + array.add(KnowledgeCommentActivity.get()); } - - - return array; } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) private void execute(Activity activity, LoginedUser eventUser, Date eventDateTime, KnowledgesEntity knowledge, CommentsEntity comment) { List processors = this.getActivityProcessors(activity); for (ActivityProcessor activityProcessor : processors) { @@ -53,14 +53,14 @@ private void execute(Activity activity, LoginedUser eventUser, Date eventDateTim } if (activityProcessor instanceof AbstractAddPointForKnowledgeProcessor) { if (knowledge == null) { - LOG.warn("bad parameter [knowledge]"); + LOG.warn("bad parameter [knowledge], because it is null."); continue; } AbstractAddPointForKnowledgeProcessor processor = (AbstractAddPointForKnowledgeProcessor) activityProcessor; processor.setKnowledge(knowledge); } else if (activityProcessor instanceof AbstractAddPointForCommentProcessor) { - if (knowledge == null) { - LOG.warn("bad parameter [comment]"); + if (comment == null) { + LOG.warn("bad parameter [comment], because it is null."); continue; } AbstractAddPointForCommentProcessor processor = (AbstractAddPointForCommentProcessor) activityProcessor; diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java index 8cd8ac780..941865b1b 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java @@ -4,7 +4,7 @@ public interface ActivityProcessor { /* * 種類 | 獲得のタイプ | ポイント付与先 | ポイント | 獲得タイプの意味 * 1 | 11 | 記事登録者 | 50 | 記事を投稿したら投稿者にポイント追加 - * 1 | 12 | 記事 | 50 | 登録された記事のポイント初期値 + * 1 | 13 | 記事 | 50 | 登録された記事のポイント初期値 * 2 | 21 | 参照者 | 1 | 記事を参照するアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) * 2 | 22 | 記事登録者 | 1 | 自分が登録された記事が参照されたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) * 2 | 23 | 記事 | 1 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) @@ -21,7 +21,7 @@ public interface ActivityProcessor { * 6 | 62 | 記事登録者 | 5 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) * 6 | 63 | 記事 | 5 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) * 101 | 1011 | 登録者 | 20 | コメントを投稿すると、投稿者にポイント追加 - * 101 | 1012 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 + * 101 | 1013 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 * 102 | 1021 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 * 102 | 1022 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く * 102 | 1023 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 @@ -30,7 +30,7 @@ public interface ActivityProcessor { * -6 | -63 | 記事 | 5 | 記事のポイントが追加(取り消しなのでマイナス) * */ public static final int TYPE_KNOWLEDGE_DO_INSERT = 11; - public static final int TYPE_KNOWLEDGE_INSERTED = 12; + public static final int TYPE_KNOWLEDGE_INSERTED = 13; public static final int TYPE_KNOWLEDGE_DO_SHOW = 21; public static final int TYPE_KNOWLEDGE_SHOWN_BY_OHER = 22; public static final int TYPE_KNOWLEDGE_SHOWN = 23; @@ -46,6 +46,8 @@ public interface ActivityProcessor { public static final int TYPE_KNOWLEDGE_DO_JOIN_EVENT = 61; public static final int TYPE_KNOWLEDGE_JOINED_BY_OHER = 62; public static final int TYPE_KNOWLEDGE_JOINED = 63; + public static final int TYPE_KNOWLEDGE_DO_ADD_COMMENT = 1011; + public static final int TYPE_KNOWLEDGE_ADDED_COMMENT = 1013; void execute() throws Exception; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeCommentActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeCommentActivity.java new file mode 100644 index 000000000..a37dbfc68 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeCommentActivity.java @@ -0,0 +1,38 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; + +/** + * + * 101 | 1011 | 登録者 | 20 | コメントを投稿すると、投稿者にポイント追加 + * 101 | 1012 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 + * + * @author koda + */ +public class KnowledgeCommentActivity extends AbstractAddPointForCommentProcessor { + private static final Log LOG = LogFactory.getLog(KnowledgeCommentActivity.class); + public static KnowledgeCommentActivity get() { + return Container.getComp(KnowledgeCommentActivity.class); + } + + @Override + protected Activity getActivity() { + LOG.debug("Start add point process on add comment knowledge."); + return Activity.KNOWLEDGE_COMMENT_ADD; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_ADD_COMMENT, 20); + } + @Override + protected TypeAndPoint getTypeAndPointForCommentOwner() { + return null; + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_KNOWLEDGE_ADDED_COMMENT, 20); + } + +} diff --git a/src/main/resources/log4j.xml b/src/main/resources/log4j.xml index c75941cea..e90bbdae9 100644 --- a/src/main/resources/log4j.xml +++ b/src/main/resources/log4j.xml @@ -44,6 +44,13 @@ + + + + + + + From 6ab8f5f30ac38592f068e1f9c5266bb8423102af Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 5 Sep 2017 00:02:17 +0900 Subject: [PATCH 046/138] #840 Add sort order --- .../dao/gen/GenAccountImagesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenActivitiesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenBadgesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenCommentsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenDraftItemValuesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenDraftKnowledgesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenEventsDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenItemChoicesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeEditGroupsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeEditUsersDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeFilesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeGroupsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeHistoriesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeItemValuesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeTagsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenKnowledgeUsersDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenKnowledgesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenLikeCommentsDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenLikesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenMailHookConditionsDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenMailHooksDao.java | 45 +++++++++++++++++++ .../dao/gen/GenMailLocaleTemplatesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenMailPostsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenMailPropertiesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenMailTemplatesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenNotifyConfigsDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenNotifyQueuesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenParticipantsDao.java | 45 +++++++++++++++++++ .../project/knowledge/dao/gen/GenPinsDao.java | 45 +++++++++++++++++++ .../gen/GenPointKnowledgeHistoriesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenPointUserHistoriesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenServiceConfigsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenServiceLocaleConfigsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenStockKnowledgesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenStocksDao.java | 45 +++++++++++++++++++ .../dao/gen/GenSurveyAnswersDao.java | 45 +++++++++++++++++++ .../dao/gen/GenSurveyChoicesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenSurveyItemAnswersDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenSurveyItemsDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenSurveysDao.java | 45 +++++++++++++++++++ .../project/knowledge/dao/gen/GenTagsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenTemplateItemsDao.java | 45 +++++++++++++++++++ .../dao/gen/GenTemplateMastersDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenTokensDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenUserBadgesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenViewHistoriesDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenVotesDao.java | 45 +++++++++++++++++++ .../dao/gen/GenWebhookConfigsDao.java | 45 +++++++++++++++++++ .../knowledge/dao/gen/GenWebhooksDao.java | 45 +++++++++++++++++++ .../AccountImagesDao_physical_select_all.sql | 2 +- ...agesDao_physical_select_all_with_pager.sql | 2 +- .../AccountImagesDao_select_all.sql | 2 +- ...AccountImagesDao_select_all_with_pager.sql | 2 +- .../ActivitiesDao_physical_select_all.sql | 2 +- ...tiesDao_physical_select_all_with_pager.sql | 2 +- .../ActivitiesDao_select_all.sql | 2 +- .../ActivitiesDao_select_all_with_pager.sql | 2 +- .../BadgesDao_physical_select_all.sql | 2 +- ...dgesDao_physical_select_all_with_pager.sql | 2 +- .../sql/BadgesDao/BadgesDao_select_all.sql | 2 +- .../BadgesDao_select_all_with_pager.sql | 2 +- .../CommentsDao_physical_select_all.sql | 2 +- ...entsDao_physical_select_all_with_pager.sql | 2 +- .../CommentsDao/CommentsDao_select_all.sql | 2 +- .../CommentsDao_select_all_with_pager.sql | 2 +- ...DraftItemValuesDao_physical_select_all.sql | 2 +- ...luesDao_physical_select_all_with_pager.sql | 2 +- .../DraftItemValuesDao_select_all.sql | 2 +- ...aftItemValuesDao_select_all_with_pager.sql | 2 +- ...DraftKnowledgesDao_physical_select_all.sql | 2 +- ...dgesDao_physical_select_all_with_pager.sql | 2 +- .../DraftKnowledgesDao_select_all.sql | 2 +- ...aftKnowledgesDao_select_all_with_pager.sql | 2 +- .../EventsDao_physical_select_all.sql | 2 +- ...entsDao_physical_select_all_with_pager.sql | 2 +- .../sql/EventsDao/EventsDao_select_all.sql | 2 +- .../EventsDao_select_all_with_pager.sql | 2 +- .../ItemChoicesDao_physical_select_all.sql | 2 +- ...icesDao_physical_select_all_with_pager.sql | 2 +- .../ItemChoicesDao_select_all.sql | 2 +- .../ItemChoicesDao_select_all_with_pager.sql | 2 +- ...ledgeEditGroupsDao_physical_select_all.sql | 2 +- ...oupsDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeEditGroupsDao_select_all.sql | 2 +- ...dgeEditGroupsDao_select_all_with_pager.sql | 2 +- ...wledgeEditUsersDao_physical_select_all.sql | 2 +- ...sersDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeEditUsersDao_select_all.sql | 2 +- ...edgeEditUsersDao_select_all_with_pager.sql | 2 +- .../KnowledgeFilesDao_physical_select_all.sql | 2 +- ...ilesDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeFilesDao_select_all.sql | 2 +- ...nowledgeFilesDao_select_all_with_pager.sql | 2 +- ...KnowledgeGroupsDao_physical_select_all.sql | 2 +- ...oupsDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeGroupsDao_select_all.sql | 2 +- ...owledgeGroupsDao_select_all_with_pager.sql | 2 +- ...wledgeHistoriesDao_physical_select_all.sql | 2 +- ...riesDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeHistoriesDao_select_all.sql | 2 +- ...edgeHistoriesDao_select_all_with_pager.sql | 2 +- ...ledgeItemValuesDao_physical_select_all.sql | 2 +- ...luesDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeItemValuesDao_select_all.sql | 2 +- ...dgeItemValuesDao_select_all_with_pager.sql | 2 +- .../KnowledgeTagsDao_physical_select_all.sql | 2 +- ...TagsDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeTagsDao_select_all.sql | 2 +- ...KnowledgeTagsDao_select_all_with_pager.sql | 2 +- .../KnowledgeUsersDao_physical_select_all.sql | 2 +- ...sersDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgeUsersDao_select_all.sql | 2 +- ...nowledgeUsersDao_select_all_with_pager.sql | 2 +- .../KnowledgesDao_physical_select_all.sql | 2 +- ...dgesDao_physical_select_all_with_pager.sql | 2 +- .../KnowledgesDao_select_all.sql | 2 +- .../KnowledgesDao_select_all_with_pager.sql | 2 +- .../LikeCommentsDao_physical_select_all.sql | 2 +- ...entsDao_physical_select_all_with_pager.sql | 2 +- .../LikeCommentsDao_select_all.sql | 2 +- .../LikeCommentsDao_select_all_with_pager.sql | 2 +- .../LikesDao/LikesDao_physical_select_all.sql | 2 +- ...ikesDao_physical_select_all_with_pager.sql | 2 +- .../dao/sql/LikesDao/LikesDao_select_all.sql | 2 +- .../LikesDao_select_all_with_pager.sql | 2 +- ...lHookConditionsDao_physical_select_all.sql | 2 +- ...ionsDao_physical_select_all_with_pager.sql | 2 +- .../MailHookConditionsDao_select_all.sql | 2 +- ...ookConditionsDao_select_all_with_pager.sql | 2 +- .../MailHooksDao_physical_select_all.sql | 2 +- ...ooksDao_physical_select_all_with_pager.sql | 2 +- .../MailHooksDao/MailHooksDao_select_all.sql | 2 +- .../MailHooksDao_select_all_with_pager.sql | 2 +- ...LocaleTemplatesDao_physical_select_all.sql | 2 +- ...atesDao_physical_select_all_with_pager.sql | 2 +- .../MailLocaleTemplatesDao_select_all.sql | 2 +- ...caleTemplatesDao_select_all_with_pager.sql | 2 +- .../MailPostsDao_physical_select_all.sql | 2 +- ...ostsDao_physical_select_all_with_pager.sql | 2 +- .../MailPostsDao/MailPostsDao_select_all.sql | 2 +- .../MailPostsDao_select_all_with_pager.sql | 2 +- .../MailPropertiesDao_physical_select_all.sql | 2 +- ...tiesDao_physical_select_all_with_pager.sql | 2 +- .../MailPropertiesDao_select_all.sql | 2 +- ...ailPropertiesDao_select_all_with_pager.sql | 2 +- .../MailTemplatesDao_physical_select_all.sql | 2 +- ...atesDao_physical_select_all_with_pager.sql | 2 +- .../MailTemplatesDao_select_all.sql | 2 +- ...MailTemplatesDao_select_all_with_pager.sql | 2 +- .../NotifyConfigsDao_physical_select_all.sql | 2 +- ...figsDao_physical_select_all_with_pager.sql | 2 +- .../NotifyConfigsDao_select_all.sql | 2 +- ...NotifyConfigsDao_select_all_with_pager.sql | 2 +- .../NotifyQueuesDao_physical_select_all.sql | 2 +- ...euesDao_physical_select_all_with_pager.sql | 2 +- .../NotifyQueuesDao_select_all.sql | 2 +- .../NotifyQueuesDao_select_all_with_pager.sql | 2 +- .../ParticipantsDao_physical_select_all.sql | 2 +- ...antsDao_physical_select_all_with_pager.sql | 2 +- .../ParticipantsDao_select_all.sql | 2 +- .../ParticipantsDao_select_all_with_pager.sql | 2 +- .../PinsDao/PinsDao_physical_select_all.sql | 2 +- ...PinsDao_physical_select_all_with_pager.sql | 2 +- .../dao/sql/PinsDao/PinsDao_select_all.sql | 2 +- .../PinsDao/PinsDao_select_all_with_pager.sql | 2 +- ...wledgeHistoriesDao_physical_select_all.sql | 2 +- ...riesDao_physical_select_all_with_pager.sql | 2 +- .../PointKnowledgeHistoriesDao_select_all.sql | 2 +- ...edgeHistoriesDao_select_all_with_pager.sql | 2 +- ...ntUserHistoriesDao_physical_select_all.sql | 2 +- ...riesDao_physical_select_all_with_pager.sql | 2 +- .../PointUserHistoriesDao_select_all.sql | 2 +- ...UserHistoriesDao_select_all_with_pager.sql | 2 +- .../ServiceConfigsDao_physical_select_all.sql | 2 +- ...figsDao_physical_select_all_with_pager.sql | 2 +- .../ServiceConfigsDao_select_all.sql | 2 +- ...erviceConfigsDao_select_all_with_pager.sql | 2 +- ...ceLocaleConfigsDao_physical_select_all.sql | 2 +- ...figsDao_physical_select_all_with_pager.sql | 2 +- .../ServiceLocaleConfigsDao_select_all.sql | 2 +- ...LocaleConfigsDao_select_all_with_pager.sql | 2 +- ...StockKnowledgesDao_physical_select_all.sql | 2 +- ...dgesDao_physical_select_all_with_pager.sql | 2 +- .../StockKnowledgesDao_select_all.sql | 2 +- ...ockKnowledgesDao_select_all_with_pager.sql | 2 +- .../StocksDao_physical_select_all.sql | 2 +- ...ocksDao_physical_select_all_with_pager.sql | 2 +- .../sql/StocksDao/StocksDao_select_all.sql | 2 +- .../StocksDao_select_all_with_pager.sql | 2 +- .../SurveyAnswersDao_physical_select_all.sql | 2 +- ...wersDao_physical_select_all_with_pager.sql | 2 +- .../SurveyAnswersDao_select_all.sql | 2 +- ...SurveyAnswersDao_select_all_with_pager.sql | 2 +- .../SurveyChoicesDao_physical_select_all.sql | 2 +- ...icesDao_physical_select_all_with_pager.sql | 2 +- .../SurveyChoicesDao_select_all.sql | 2 +- ...SurveyChoicesDao_select_all_with_pager.sql | 2 +- ...rveyItemAnswersDao_physical_select_all.sql | 2 +- ...wersDao_physical_select_all_with_pager.sql | 2 +- .../SurveyItemAnswersDao_select_all.sql | 2 +- ...eyItemAnswersDao_select_all_with_pager.sql | 2 +- .../SurveyItemsDao_physical_select_all.sql | 2 +- ...temsDao_physical_select_all_with_pager.sql | 2 +- .../SurveyItemsDao_select_all.sql | 2 +- .../SurveyItemsDao_select_all_with_pager.sql | 2 +- .../SurveysDao_physical_select_all.sql | 2 +- ...veysDao_physical_select_all_with_pager.sql | 2 +- .../sql/SurveysDao/SurveysDao_select_all.sql | 2 +- .../SurveysDao_select_all_with_pager.sql | 2 +- .../TagsDao/TagsDao_physical_select_all.sql | 2 +- ...TagsDao_physical_select_all_with_pager.sql | 2 +- .../dao/sql/TagsDao/TagsDao_select_all.sql | 2 +- .../TagsDao/TagsDao_select_all_with_pager.sql | 2 +- .../TemplateItemsDao_physical_select_all.sql | 2 +- ...temsDao_physical_select_all_with_pager.sql | 2 +- .../TemplateItemsDao_select_all.sql | 2 +- ...TemplateItemsDao_select_all_with_pager.sql | 2 +- ...TemplateMastersDao_physical_select_all.sql | 2 +- ...tersDao_physical_select_all_with_pager.sql | 2 +- .../TemplateMastersDao_select_all.sql | 2 +- ...mplateMastersDao_select_all_with_pager.sql | 2 +- .../TokensDao_physical_select_all.sql | 2 +- ...kensDao_physical_select_all_with_pager.sql | 2 +- .../sql/TokensDao/TokensDao_select_all.sql | 2 +- .../TokensDao_select_all_with_pager.sql | 2 +- .../UserBadgesDao_physical_select_all.sql | 2 +- ...dgesDao_physical_select_all_with_pager.sql | 2 +- .../UserBadgesDao_select_all.sql | 2 +- .../UserBadgesDao_select_all_with_pager.sql | 2 +- .../ViewHistoriesDao_physical_select_all.sql | 2 +- ...riesDao_physical_select_all_with_pager.sql | 2 +- .../ViewHistoriesDao_select_all.sql | 2 +- ...ViewHistoriesDao_select_all_with_pager.sql | 2 +- .../VotesDao/VotesDao_physical_select_all.sql | 2 +- ...otesDao_physical_select_all_with_pager.sql | 2 +- .../dao/sql/VotesDao/VotesDao_select_all.sql | 2 +- .../VotesDao_select_all_with_pager.sql | 2 +- .../WebhookConfigsDao_physical_select_all.sql | 2 +- ...figsDao_physical_select_all_with_pager.sql | 2 +- .../WebhookConfigsDao_select_all.sql | 2 +- ...ebhookConfigsDao_select_all_with_pager.sql | 2 +- .../WebhooksDao_physical_select_all.sql | 2 +- ...ooksDao_physical_select_all_with_pager.sql | 2 +- .../WebhooksDao/WebhooksDao_select_all.sql | 2 +- .../WebhooksDao_select_all_with_pager.sql | 2 +- 245 files changed, 2401 insertions(+), 196 deletions(-) diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java index 48f17cdc7..0827f862c 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenAccountImagesDao.java @@ -13,6 +13,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -46,7 +47,17 @@ public static GenAccountImagesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, AccountImagesEntity.class); } /** @@ -57,7 +68,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, AccountImagesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public AccountImagesEntity physicalSelectOnKey(Long imageId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, AccountImagesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, AccountImagesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java index 84312aa0b..77bcf0065 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenActivitiesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenActivitiesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ActivitiesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ActivitiesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public ActivitiesEntity physicalSelectOnKey(Long activityNo) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ActivitiesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ActivitiesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java index ec4abda90..8c159b812 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenBadgesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenBadgesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, BadgesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, BadgesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public BadgesEntity physicalSelectOnKey(Integer no) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, BadgesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, BadgesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java index ee8ea80fe..f8f48dfd7 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenCommentsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenCommentsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, CommentsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, CommentsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public CommentsEntity physicalSelectOnKey(Long commentNo) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, CommentsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, CommentsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java index 292ea2e95..25123fdd0 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftItemValuesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenDraftItemValuesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftItemValuesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftItemValuesEntity.class, limit, offset); } /** @@ -77,7 +100,17 @@ public DraftItemValuesEntity physicalSelectOnKey(Long draftId, Integer itemNo, I */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftItemValuesEntity.class); } /** @@ -88,7 +121,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftItemValuesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java index 5a5a22fd7..943943414 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenDraftKnowledgesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenDraftKnowledgesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftKnowledgesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftKnowledgesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public DraftKnowledgesEntity physicalSelectOnKey(Long draftId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftKnowledgesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, DraftKnowledgesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java index 9364fcd38..b3af83bab 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenEventsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenEventsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, EventsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, EventsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public EventsEntity physicalSelectOnKey(Long knowledgeId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, EventsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, EventsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java index 0160a8b26..d7f63210c 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenItemChoicesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenItemChoicesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ItemChoicesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ItemChoicesEntity.class, limit, offset); } /** @@ -77,7 +100,17 @@ public ItemChoicesEntity physicalSelectOnKey(Integer choiceNo, Integer itemNo, I */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ItemChoicesEntity.class); } /** @@ -88,7 +121,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ItemChoicesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java index da6171a3f..d64b1b6d1 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditGroupsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgeEditGroupsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditGroupsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public KnowledgeEditGroupsEntity physicalSelectOnKey(Integer groupId, Long knowl */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditGroupsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditGroupsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java index 2f1718f82..6e08954f4 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeEditUsersDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgeEditUsersDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditUsersEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditUsersEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public KnowledgeEditUsersEntity physicalSelectOnKey(Long knowledgeId, Integer us */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditUsersEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeEditUsersEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java index f2194f67f..a996f7a7c 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeFilesDao.java @@ -13,6 +13,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -46,7 +47,17 @@ public static GenKnowledgeFilesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeFilesEntity.class); } /** @@ -57,7 +68,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeFilesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public KnowledgeFilesEntity physicalSelectOnKey(Long fileNo) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeFilesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeFilesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java index 6fd2d3d8f..d99a468a7 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeGroupsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgeGroupsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeGroupsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeGroupsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public KnowledgeGroupsEntity physicalSelectOnKey(Integer groupId, Long knowledge */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeGroupsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeGroupsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java index 4031d8d38..146c02755 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeHistoriesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgeHistoriesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeHistoriesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeHistoriesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public KnowledgeHistoriesEntity physicalSelectOnKey(Integer historyNo, Long know */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeHistoriesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeHistoriesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java index e3545f10e..3aff11032 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeItemValuesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgeItemValuesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeItemValuesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeItemValuesEntity.class, limit, offset); } /** @@ -77,7 +100,17 @@ public KnowledgeItemValuesEntity physicalSelectOnKey(Integer itemNo, Long knowle */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeItemValuesEntity.class); } /** @@ -88,7 +121,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeItemValuesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java index 0a82fea17..e7ecb1997 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeTagsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgeTagsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeTagsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeTagsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public KnowledgeTagsEntity physicalSelectOnKey(Long knowledgeId, Integer tagId) */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeTagsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeTagsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java index 6a4331f8f..5928b2047 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgeUsersDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgeUsersDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeUsersEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeUsersEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public KnowledgeUsersEntity physicalSelectOnKey(Long knowledgeId, Integer userId */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeUsersEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgeUsersEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java index a0c862c2d..96d323737 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenKnowledgesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenKnowledgesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public KnowledgesEntity physicalSelectOnKey(Long knowledgeId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, KnowledgesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java index 83ddaf3fd..95dc16aae 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenLikeCommentsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenLikeCommentsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikeCommentsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikeCommentsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public LikeCommentsEntity physicalSelectOnKey(Long no) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikeCommentsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikeCommentsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java index 2497deb0b..2b8a4a564 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenLikesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenLikesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public LikesEntity physicalSelectOnKey(Long no) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, LikesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java index 1074dba68..3f940e367 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHookConditionsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenMailHookConditionsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHookConditionsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHookConditionsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public MailHookConditionsEntity physicalSelectOnKey(Integer conditionNo, Integer */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHookConditionsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHookConditionsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java index daae414e7..a34ab4d24 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailHooksDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenMailHooksDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHooksEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHooksEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public MailHooksEntity physicalSelectOnKey(Integer hookId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHooksEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailHooksEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java index 9d4c8852d..64557990e 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailLocaleTemplatesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenMailLocaleTemplatesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailLocaleTemplatesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailLocaleTemplatesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public MailLocaleTemplatesEntity physicalSelectOnKey(String key, String template */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailLocaleTemplatesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailLocaleTemplatesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java index b017644a7..4587eac5a 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPostsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenMailPostsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPostsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPostsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public MailPostsEntity physicalSelectOnKey(String messageId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPostsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPostsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java index 8c5170010..6a27f700d 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailPropertiesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenMailPropertiesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPropertiesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPropertiesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public MailPropertiesEntity physicalSelectOnKey(Integer hookId, String propertyK */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPropertiesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailPropertiesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java index 2905d7d54..b7f085f95 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenMailTemplatesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenMailTemplatesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailTemplatesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailTemplatesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public MailTemplatesEntity physicalSelectOnKey(String templateId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailTemplatesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, MailTemplatesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java index c61819a45..0ae77eb7a 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyConfigsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenNotifyConfigsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyConfigsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyConfigsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public NotifyConfigsEntity physicalSelectOnKey(Integer userId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyConfigsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyConfigsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java index 9889901db..faf2a0dba 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenNotifyQueuesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenNotifyQueuesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyQueuesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyQueuesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public NotifyQueuesEntity physicalSelectOnKey(String hash) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyQueuesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, NotifyQueuesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java index a5bdaba5c..64d102d1e 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenParticipantsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenParticipantsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ParticipantsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ParticipantsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public ParticipantsEntity physicalSelectOnKey(Long knowledgeId, Integer userId) */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ParticipantsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ParticipantsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java index 7dc6cbe85..689df893e 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPinsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenPinsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PinsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PinsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public PinsEntity physicalSelectOnKey(Integer no) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PinsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PinsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java index 3716ff87f..7eb1dd082 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPointKnowledgeHistoriesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenPointKnowledgeHistoriesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public PointKnowledgeHistoriesEntity physicalSelectOnKey(Long historyNo, Long kn */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointKnowledgeHistoriesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java index ce6789c18..120b27492 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenPointUserHistoriesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenPointUserHistoriesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointUserHistoriesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointUserHistoriesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public PointUserHistoriesEntity physicalSelectOnKey(Long historyNo, Integer user */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointUserHistoriesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, PointUserHistoriesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java index f57b994ff..07b16964c 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceConfigsDao.java @@ -13,6 +13,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -46,7 +47,17 @@ public static GenServiceConfigsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceConfigsEntity.class); } /** @@ -57,7 +68,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceConfigsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public ServiceConfigsEntity physicalSelectOnKey(String serviceName) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceConfigsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceConfigsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java index 2252396bb..a110f295a 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenServiceLocaleConfigsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenServiceLocaleConfigsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceLocaleConfigsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public ServiceLocaleConfigsEntity physicalSelectOnKey(String localeKey, String s */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceLocaleConfigsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ServiceLocaleConfigsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java index 55bd4da6e..022821c5f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenStockKnowledgesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenStockKnowledgesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StockKnowledgesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StockKnowledgesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public StockKnowledgesEntity physicalSelectOnKey(Long knowledgeId, Long stockId) */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StockKnowledgesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StockKnowledgesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java index c82ae33e1..6c30ac221 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenStocksDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenStocksDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StocksEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StocksEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public StocksEntity physicalSelectOnKey(Long stockId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StocksEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, StocksEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java index a6f854a62..b26ec4394 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyAnswersDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenSurveyAnswersDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyAnswersEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyAnswersEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public SurveyAnswersEntity physicalSelectOnKey(Integer answerId, Long knowledgeI */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyAnswersEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyAnswersEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java index bfc5ebfa4..923e04691 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyChoicesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenSurveyChoicesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyChoicesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyChoicesEntity.class, limit, offset); } /** @@ -77,7 +100,17 @@ public SurveyChoicesEntity physicalSelectOnKey(Integer choiceNo, Integer itemNo, */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyChoicesEntity.class); } /** @@ -88,7 +121,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyChoicesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java index 2e6f67cf4..efea18977 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemAnswersDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenSurveyItemAnswersDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemAnswersEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemAnswersEntity.class, limit, offset); } /** @@ -77,7 +100,17 @@ public SurveyItemAnswersEntity physicalSelectOnKey(Integer answerId, Integer ite */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemAnswersEntity.class); } /** @@ -88,7 +121,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemAnswersEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java index c12079fb9..4002ab94d 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveyItemsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenSurveyItemsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public SurveyItemsEntity physicalSelectOnKey(Integer itemNo, Long knowledgeId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveyItemsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java index 18f58d1bc..2775e5e4f 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenSurveysDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenSurveysDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveysEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveysEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public SurveysEntity physicalSelectOnKey(Long knowledgeId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveysEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, SurveysEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java index 07fb18b97..e1c181ce2 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTagsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenTagsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TagsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TagsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public TagsEntity physicalSelectOnKey(Integer tagId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TagsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TagsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java index 31f633392..b1efca39d 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateItemsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenTemplateItemsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateItemsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateItemsEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public TemplateItemsEntity physicalSelectOnKey(Integer itemNo, Integer typeId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateItemsEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateItemsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java index c81db6ee2..e32d8a4a8 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTemplateMastersDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenTemplateMastersDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateMastersEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateMastersEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public TemplateMastersEntity physicalSelectOnKey(Integer typeId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateMastersEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TemplateMastersEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java index c2157d24f..c6a66487e 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenTokensDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenTokensDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TokensEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TokensEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public TokensEntity physicalSelectOnKey(String token) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TokensEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, TokensEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java index 93c84ffa5..34d535ce0 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenUserBadgesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenUserBadgesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, UserBadgesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, UserBadgesEntity.class, limit, offset); } /** @@ -76,7 +99,17 @@ public UserBadgesEntity physicalSelectOnKey(Integer no, Integer userId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, UserBadgesEntity.class); } /** @@ -87,7 +120,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, UserBadgesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java index 8ce0c10d3..a3c0cc933 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenViewHistoriesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenViewHistoriesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ViewHistoriesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ViewHistoriesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public ViewHistoriesEntity physicalSelectOnKey(Long historyNo) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ViewHistoriesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, ViewHistoriesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java index 572b6d1d9..18f5d4148 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenVotesDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenVotesDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, VotesEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, VotesEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public VotesEntity physicalSelectOnKey(Long voteNo) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, VotesEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, VotesEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java index 09e519a3b..9900d3901 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhookConfigsDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenWebhookConfigsDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhookConfigsEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhookConfigsEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public WebhookConfigsEntity physicalSelectOnKey(Integer hookId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhookConfigsEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhookConfigsEntity.class, limit, offset); } /** diff --git a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java index 00aba93cb..b59db8fd9 100644 --- a/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java +++ b/src/main/java/org/support/project/knowledge/dao/gen/GenWebhooksDao.java @@ -12,6 +12,7 @@ import org.support.project.ormapping.common.DBUserPool; import org.support.project.ormapping.common.IDGen; import org.support.project.ormapping.config.ORMappingParameter; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.connection.ConnectionManager; import org.support.project.common.util.PropertyUtil; @@ -45,7 +46,17 @@ public static GenWebhooksDao get() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAll() { + return physicalSelectAll(Order.DESC); + } + /** + * Select all data. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhooksEntity.class); } /** @@ -56,7 +67,19 @@ public List physicalSelectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List physicalSelectAllWithPager(int limit, int offset) { + return physicalSelectAllWithPager(limit, offset, Order.DESC); + } + /** + * Select all data with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data on limit and offset + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List physicalSelectAllWithPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhooksEntity.class, limit, offset); } /** @@ -75,7 +98,17 @@ public WebhooksEntity physicalSelectOnKey(String webhookId) { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAll() { + return selectAll(Order.DESC); + } + /** + * Select all data that not deleted. + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAll(Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhooksEntity.class); } /** @@ -86,7 +119,19 @@ public List selectAll() { */ @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectAllWidthPager(int limit, int offset) { + return selectAllWidthPager(limit, offset, Order.DESC); + } + /** + * Select all data that not deleted with pager. + * @param limit limit + * @param offset offset + * @param order order + * @return all data + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectAllWidthPager(int limit, int offset, Order order) { String sql = SQLManager.getInstance().getSql("/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all_with_pager.sql"); + sql = String.format(sql, order.toString()); return executeQueryList(sql, WebhooksEntity.class, limit, offset); } /** diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all.sql index 05c99dcbc..d9fe88d5b 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM ACCOUNT_IMAGES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all_with_pager.sql index 6f6c461dc..b4bb78832 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM ACCOUNT_IMAGES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all.sql index 9b8cb5f2b..67457d91a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM ACCOUNT_IMAGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all_with_pager.sql index b15971f09..00dc47770 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/AccountImagesDao/AccountImagesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM ACCOUNT_IMAGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql index 102b8deff..3cc74a316 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM ACTIVITIES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql index 23c6aa4ac..bc56c5983 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM ACTIVITIES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql index c91673718..acdb93dba 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM ACTIVITIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql index 04fd4dd78..d7a72ffd4 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ActivitiesDao/ActivitiesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM ACTIVITIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql index 672bd3f10..b17af757e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM BADGES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql index 8148bf1cc..4be7e5ffa 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM BADGES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql index 39228e58a..f1ae31120 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM BADGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql index 537924423..32eb748e2 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/BadgesDao/BadgesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM BADGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all.sql index cff77c4a1..2a882635e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM COMMENTS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all_with_pager.sql index f24694900..10e1969ad 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM COMMENTS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all.sql index 9eb803227..85f3cddc8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM COMMENTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all_with_pager.sql index 13b473781..15d797739 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/CommentsDao/CommentsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM COMMENTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all.sql index dc88dde4b..4b37341fa 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM DRAFT_ITEM_VALUES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all_with_pager.sql index 4f4440c74..08d96ce3a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM DRAFT_ITEM_VALUES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all.sql index 8a6863a14..27e0ee3bd 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM DRAFT_ITEM_VALUES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all_with_pager.sql index cc17a2082..9c79a450f 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftItemValuesDao/DraftItemValuesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM DRAFT_ITEM_VALUES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all.sql index da016fc70..0b6da5ba1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM DRAFT_KNOWLEDGES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all_with_pager.sql index 8a6a8e269..53269d0a0 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM DRAFT_KNOWLEDGES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all.sql index 5a120a2e3..44c90e2bb 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM DRAFT_KNOWLEDGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all_with_pager.sql index bef5717f9..65d374e64 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/DraftKnowledgesDao/DraftKnowledgesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM DRAFT_KNOWLEDGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all.sql index 5fc15c5e3..d3652cd9e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM EVENTS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all_with_pager.sql index 1d7431868..786652b8a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM EVENTS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all.sql index 3ab913f89..e5d7da632 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM EVENTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all_with_pager.sql index a17c1dd65..759c4e703 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/EventsDao/EventsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM EVENTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all.sql index 51103ce9f..c61416e20 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM ITEM_CHOICES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all_with_pager.sql index 552054a79..9f62bd6bd 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM ITEM_CHOICES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all.sql index f8bd11b3e..4e361e439 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM ITEM_CHOICES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all_with_pager.sql index 5c08c1e32..fc952e1a8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ItemChoicesDao/ItemChoicesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM ITEM_CHOICES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all.sql index 4a5aa5b18..5b0b10105 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_EDIT_GROUPS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all_with_pager.sql index 15f675a44..7ddb83fa0 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_EDIT_GROUPS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all.sql index a5d58e789..d66f58541 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_EDIT_GROUPS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all_with_pager.sql index d682a9915..335bc46c8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditGroupsDao/KnowledgeEditGroupsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_EDIT_GROUPS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all.sql index 5952e4ec0..dcb01c1ef 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_EDIT_USERS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all_with_pager.sql index 3ab1ee664..ab77bd414 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_EDIT_USERS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all.sql index 873e8fed0..ea63bc117 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_EDIT_USERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all_with_pager.sql index decbb8817..e3cb3b46b 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeEditUsersDao/KnowledgeEditUsersDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_EDIT_USERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all.sql index b4cf17aa9..9bd4613f0 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_FILES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all_with_pager.sql index 9b0d48881..dbd1f2747 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_FILES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all.sql index b76b0624b..1d2d6882b 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_FILES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all_with_pager.sql index d2c530fb5..e3e7905ae 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeFilesDao/KnowledgeFilesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_FILES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all.sql index 865195387..1c59cbf65 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_GROUPS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all_with_pager.sql index aac8b1817..a6213dbd5 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_GROUPS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all.sql index 9c0beab79..68c770c2e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_GROUPS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all_with_pager.sql index 5f3c4244f..2bb96212a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeGroupsDao/KnowledgeGroupsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_GROUPS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all.sql index d343d5899..c69c550c5 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_HISTORIES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all_with_pager.sql index eac6b6fa3..e53aa2891 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_HISTORIES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all.sql index d646b1029..b581cbc26 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all_with_pager.sql index 58710fc5d..25e535d0a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeHistoriesDao/KnowledgeHistoriesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all.sql index 31ff00706..3af609b6d 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_ITEM_VALUES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all_with_pager.sql index 33f03e067..fbbe3d8c8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_ITEM_VALUES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all.sql index 3d74ff94b..f15f7f345 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_ITEM_VALUES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all_with_pager.sql index 8d691d7cb..e9f5a4d09 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeItemValuesDao/KnowledgeItemValuesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_ITEM_VALUES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all.sql index 3c99636c5..73f783cc4 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_TAGS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all_with_pager.sql index 76146a855..2ac548fc8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_TAGS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all.sql index db26f8e55..0bf0a1f09 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_TAGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all_with_pager.sql index dd6d2371c..037d3b4a1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeTagsDao/KnowledgeTagsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_TAGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all.sql index 807327e25..f8ce5b1b7 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGE_USERS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all_with_pager.sql index 869bca4c3..bceeef594 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_USERS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all.sql index e44aab5fe..20eef7b2c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGE_USERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all_with_pager.sql index f06c235f4..f55d07a63 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgeUsersDao/KnowledgeUsersDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGE_USERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all.sql index 80d3e5083..fc9021de1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM KNOWLEDGES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all_with_pager.sql index 42e31d59a..c13f85dd3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all.sql index 83836cfcc..cf0889603 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM KNOWLEDGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all_with_pager.sql index 5784aca68..923c907fa 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/KnowledgesDao/KnowledgesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM KNOWLEDGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all.sql index ab669161d..ab3ca5e9a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM LIKE_COMMENTS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all_with_pager.sql index 65d77d109..5af12b4a4 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM LIKE_COMMENTS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all.sql index 55b863319..47a16a313 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM LIKE_COMMENTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all_with_pager.sql index e883b0d22..479bf92d3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikeCommentsDao/LikeCommentsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM LIKE_COMMENTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all.sql index 6eafc36d9..dfa07252c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM LIKES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all_with_pager.sql index 1c8c02b4a..add355e85 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM LIKES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all.sql index 79bbb0642..56da73612 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM LIKES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all_with_pager.sql index 5e8f556ce..1b3ff62f2 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/LikesDao/LikesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM LIKES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all.sql index 751881b13..0cae96353 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM MAIL_HOOK_CONDITIONS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all_with_pager.sql index 2fce7f7ce..dd8f0c1cd 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_HOOK_CONDITIONS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all.sql index d26f458f6..16fa652a7 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_HOOK_CONDITIONS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all_with_pager.sql index 68c1ba998..96c6c2cac 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHookConditionsDao/MailHookConditionsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM MAIL_HOOK_CONDITIONS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all.sql index 1f79ec4ba..6dd63c3f2 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM MAIL_HOOKS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all_with_pager.sql index 3a9e3be60..b696cca5e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_HOOKS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all.sql index 487a61997..8fe047012 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_HOOKS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all_with_pager.sql index baa251941..d8a1b7fda 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailHooksDao/MailHooksDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM MAIL_HOOKS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all.sql index 3de9feaf5..d51fe6edf 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM MAIL_LOCALE_TEMPLATES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all_with_pager.sql index 3e83de1c0..7a4f944ac 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_LOCALE_TEMPLATES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all.sql index da3eb9940..5eda535d3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_LOCALE_TEMPLATES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all_with_pager.sql index c39e67d11..aa2256a30 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailLocaleTemplatesDao/MailLocaleTemplatesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM MAIL_LOCALE_TEMPLATES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all.sql index 521589bef..2a432aba1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM MAIL_POSTS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all_with_pager.sql index 65f5d0cf5..7ef1f4491 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_POSTS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all.sql index 217caa8a9..113b27e83 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_POSTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all_with_pager.sql index b51f174d9..a76903f9d 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPostsDao/MailPostsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM MAIL_POSTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all.sql index ebdc6ad4b..973937acd 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM MAIL_PROPERTIES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all_with_pager.sql index a7c99c6a9..bef27148e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_PROPERTIES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all.sql index 91b5059e6..206d7c05f 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_PROPERTIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all_with_pager.sql index 20be0fa61..54c1a3b90 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailPropertiesDao/MailPropertiesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM MAIL_PROPERTIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all.sql index 9324bd15e..39a556ce3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM MAIL_TEMPLATES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all_with_pager.sql index bc7166145..6c4b64477 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_TEMPLATES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all.sql index 7acefcace..26cb0d58e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM MAIL_TEMPLATES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all_with_pager.sql index 5012a9ba6..fa22d0c0a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/MailTemplatesDao/MailTemplatesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM MAIL_TEMPLATES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all.sql index 7efa15f35..1160b23eb 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM NOTIFY_CONFIGS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all_with_pager.sql index b079c2ecd..abfb51cce 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM NOTIFY_CONFIGS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all.sql index b5816a083..6326a8392 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM NOTIFY_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all_with_pager.sql index fd30f7386..831949d1a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyConfigsDao/NotifyConfigsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM NOTIFY_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all.sql index 93682534c..cfc34e0ee 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM NOTIFY_QUEUES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all_with_pager.sql index 7873229a7..cd55e48e3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM NOTIFY_QUEUES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all.sql index e5efdad2b..a682db2d1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM NOTIFY_QUEUES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all_with_pager.sql index 72cbb0d88..bfb34d7e4 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/NotifyQueuesDao/NotifyQueuesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM NOTIFY_QUEUES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all.sql index 65ef42da1..dc0687834 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM PARTICIPANTS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all_with_pager.sql index fe52c87b0..724efafda 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM PARTICIPANTS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all.sql index dcb1a4ec2..5d6b08ca5 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM PARTICIPANTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all_with_pager.sql index 10786f4a8..c76715ee2 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ParticipantsDao/ParticipantsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM PARTICIPANTS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all.sql index 1d5f064c4..c55a0acf5 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM PINS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all_with_pager.sql index b8592b739..c04f0bed1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM PINS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all.sql index 93f9c9001..50af119a1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM PINS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all_with_pager.sql index f9ac0fb5e..168f5c8f9 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PinsDao/PinsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM PINS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql index 53862db97..dcf926a57 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM POINT_KNOWLEDGE_HISTORIES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql index b22d177d2..fd313ad42 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM POINT_KNOWLEDGE_HISTORIES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql index 364e92359..5d269ac93 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM POINT_KNOWLEDGE_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql index 25db49873..9a1204373 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM POINT_KNOWLEDGE_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql index 61a114237..f3e595980 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM POINT_USER_HISTORIES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql index 82a1295a5..dd9233042 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM POINT_USER_HISTORIES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql index cd439a370..dd2d18683 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM POINT_USER_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql index b45c1578c..c5d8eadcc 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM POINT_USER_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all.sql index a2fae29db..5fcdfe052 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM SERVICE_CONFIGS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all_with_pager.sql index 80b8fcfe4..287941361 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM SERVICE_CONFIGS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all.sql index f0b7b3af5..83311d3fc 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM SERVICE_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all_with_pager.sql index b0c65d984..5992ef29f 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceConfigsDao/ServiceConfigsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM SERVICE_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all.sql index c2742dce3..f92fe405e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM SERVICE_LOCALE_CONFIGS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all_with_pager.sql index 01e2470d3..18c7740d2 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM SERVICE_LOCALE_CONFIGS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all.sql index 0de3d42e5..e2c839120 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM SERVICE_LOCALE_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all_with_pager.sql index 40c4d4157..5d31741ad 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ServiceLocaleConfigsDao/ServiceLocaleConfigsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM SERVICE_LOCALE_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all.sql index 5a3b9b827..286ff6de1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM STOCK_KNOWLEDGES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all_with_pager.sql index f18418b4f..9a83dd42d 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM STOCK_KNOWLEDGES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all.sql index 368b5477c..270d613d9 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM STOCK_KNOWLEDGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all_with_pager.sql index 3897cf73d..ddb52a4e1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StockKnowledgesDao/StockKnowledgesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM STOCK_KNOWLEDGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all.sql index 08bf43ad8..22bfcb081 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM STOCKS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all_with_pager.sql index 782f3c3ba..bc6417e51 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM STOCKS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all.sql index 223478509..728acc91c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM STOCKS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all_with_pager.sql index 00a05d7ca..48747e5f3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/StocksDao/StocksDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM STOCKS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all.sql index 688165e03..3496f3812 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM SURVEY_ANSWERS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all_with_pager.sql index 920aa2768..2e4520470 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_ANSWERS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all.sql index b55bb41b9..b689ac79e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_ANSWERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all_with_pager.sql index 7295ee4f1..bf83cc1ea 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyAnswersDao/SurveyAnswersDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM SURVEY_ANSWERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all.sql index cbcfb099c..f45ad33a2 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM SURVEY_CHOICES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all_with_pager.sql index f5da780b6..453d80bbb 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_CHOICES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all.sql index 302e5fb15..88c8f7f4a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_CHOICES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all_with_pager.sql index 3e14b4ff8..9add32f50 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyChoicesDao/SurveyChoicesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM SURVEY_CHOICES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all.sql index bb4ecfda2..0398829e7 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM SURVEY_ITEM_ANSWERS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all_with_pager.sql index 5da5b9fcb..862d4d143 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_ITEM_ANSWERS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all.sql index 911883289..de7d43064 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_ITEM_ANSWERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all_with_pager.sql index 7b4f30d02..c59b4076c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemAnswersDao/SurveyItemAnswersDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM SURVEY_ITEM_ANSWERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all.sql index 6f4724c6d..ebfcbe64c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM SURVEY_ITEMS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all_with_pager.sql index bedb3c232..fa8f7d29b 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_ITEMS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all.sql index 6e462336a..44868f7a3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEY_ITEMS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all_with_pager.sql index a943b170c..276c68d47 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveyItemsDao/SurveyItemsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM SURVEY_ITEMS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all.sql index 3e48ed5f8..4de782d95 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM SURVEYS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all_with_pager.sql index 6500107ce..c61836dfa 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEYS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all.sql index 68ea205c7..0dd9e2c06 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM SURVEYS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all_with_pager.sql index 90b8d9e5b..5eb1c8192 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/SurveysDao/SurveysDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM SURVEYS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all.sql index 0e8fa2bf5..199fbf136 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM TAGS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all_with_pager.sql index f7f5b4eb4..ed0923d51 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM TAGS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all.sql index 6caa5ff3f..98980af47 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM TAGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all_with_pager.sql index b5e442b6a..ba0394559 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TagsDao/TagsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM TAGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all.sql index 998e37de2..acc8d942c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM TEMPLATE_ITEMS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all_with_pager.sql index 8f5cb2908..1ce066257 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM TEMPLATE_ITEMS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all.sql index aa87cd125..c377b9fed 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM TEMPLATE_ITEMS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all_with_pager.sql index 9dda3c85e..a43f889ba 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateItemsDao/TemplateItemsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM TEMPLATE_ITEMS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all.sql index 87f5440ef..f289b8ce1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM TEMPLATE_MASTERS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all_with_pager.sql index 1e788b305..16fa79cb1 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM TEMPLATE_MASTERS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all.sql index 2f4751cb6..703b44581 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM TEMPLATE_MASTERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all_with_pager.sql index 983b18b6f..33d760355 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TemplateMastersDao/TemplateMastersDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM TEMPLATE_MASTERS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all.sql index 7fa82fc05..e6066449c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM TOKENS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all_with_pager.sql index b704def52..50f99adfa 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM TOKENS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all.sql index d3cb05f49..2ef2dce3a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM TOKENS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all_with_pager.sql index 1787498bd..3db81a7a8 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/TokensDao/TokensDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM TOKENS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql index 2716b818a..312c4b02a 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM USER_BADGES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql index 44cd4f122..a07313184 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM USER_BADGES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql index be3e4b966..d2548e8dd 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM USER_BADGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql index 4c7e11199..971425eeb 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/UserBadgesDao/UserBadgesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM USER_BADGES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all.sql index f1fd776a2..6458998a9 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM VIEW_HISTORIES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all_with_pager.sql index 1b6e981cb..7b35865fa 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM VIEW_HISTORIES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all.sql index 77eb26044..cd276008e 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM VIEW_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all_with_pager.sql index 06f9c9472..c292e2788 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/ViewHistoriesDao/ViewHistoriesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM VIEW_HISTORIES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all.sql index db5d760cf..752b1a715 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM VOTES -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all_with_pager.sql index 3f5340933..314ffb518 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM VOTES -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all.sql index 917e7c1ca..b24b56c74 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM VOTES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all_with_pager.sql index c73001927..405a2063c 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/VotesDao/VotesDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM VOTES WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all.sql index e86af8ba3..9a33ff531 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM WEBHOOK_CONFIGS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all_with_pager.sql index 9cf9036ec..1849952b4 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM WEBHOOK_CONFIGS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all.sql index 71f2f9726..29fb81048 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM WEBHOOK_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all_with_pager.sql index f886be5cd..c8c10d953 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhookConfigsDao/WebhookConfigsDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM WEBHOOK_CONFIGS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all.sql index 063debb21..4eeeece46 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all.sql @@ -1,2 +1,2 @@ SELECT * FROM WEBHOOKS -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all_with_pager.sql index 08c0b7067..2214e3a73 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_physical_select_all_with_pager.sql @@ -1,3 +1,3 @@ SELECT * FROM WEBHOOKS -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all.sql index 0b4ba969b..4d09aa4a4 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all.sql @@ -1,3 +1,3 @@ SELECT * FROM WEBHOOKS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC; +ORDER BY INSERT_DATETIME %s; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all_with_pager.sql b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all_with_pager.sql index 03192ce1e..0a94e7fc3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all_with_pager.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/WebhooksDao/WebhooksDao_select_all_with_pager.sql @@ -1,4 +1,4 @@ SELECT * FROM WEBHOOKS WHERE DELETE_FLAG = 0 -ORDER BY INSERT_DATETIME DESC +ORDER BY INSERT_DATETIME %s LIMIT ? OFFSET ?; From b64486631f3a6497a6d3ce2c28931392f632d8f3 Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 5 Sep 2017 00:21:56 +0900 Subject: [PATCH 047/138] #840 Set order for data select sql --- .../project/knowledge/dao/ViewHistoriesDao.java | 12 ++++++++++++ .../deploy/v1_11_0/Migrate_1_11_2.java | 17 +++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java index 5e72ee923..483dd47fc 100644 --- a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java @@ -8,6 +8,7 @@ import org.support.project.di.DI; import org.support.project.di.Instance; import org.support.project.knowledge.dao.gen.GenViewHistoriesDao; +import org.support.project.knowledge.entity.ViewHistoriesEntity; import org.support.project.knowledge.vo.StockKnowledge; /** @@ -62,4 +63,15 @@ public long selectCountOnKnowledgeId(Long knowledgeId) { return executeQuerySingle(sql, Long.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public List selectDistinctAllWidthPager(int limit, int offset) { + String sql = "SELECT * FROM VIEW_HISTORIES AS M WHERE NOT EXISTS (" + + "SELECT 1 FROM VIEW_HISTORIES AS S WHERE M.KNOWLEDGE_ID = S.KNOWLEDGE_ID " + + "AND M.INSERT_USER = S.INSERT_USER " + + "AND M.INSERT_DATETIME > S.INSERT_DATETIME" + + ") AND M.INSERT_USER IS NOT NULL " + + "ORDER BY M.KNOWLEDGE_ID ASC LIMIT ? OFFSET ?;"; + return executeQueryList(sql.toString(), ViewHistoriesEntity.class, limit, offset); + } + } diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index 06774d849..d655eff53 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -24,6 +24,7 @@ import org.support.project.knowledge.entity.ViewHistoriesEntity; import org.support.project.knowledge.logic.activity.Activity; import org.support.project.knowledge.logic.activity.ActivityLogic; +import org.support.project.ormapping.config.Order; import org.support.project.ormapping.tool.dao.InitializeDao; import org.support.project.web.bean.LoginedUser; import org.support.project.web.dao.UserConfigsDao; @@ -87,7 +88,7 @@ private void doAddPointByKnowledgeComment() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doAddPointByKnowledgeComment(int offset, int limit) { List list; - list = CommentsDao.get().selectAllWidthPager(limit, offset); + list = CommentsDao.get().selectAllWidthPager(limit, offset, Order.ASC); for (CommentsEntity item : list) { LoginedUser user = new LoginedUser(); UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); @@ -117,7 +118,7 @@ private void doAddPointByKnowledgeJoinEvent() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doAddPointByKnowledgeJoinEvent(int offset, int limit) { List list; - list = ParticipantsDao.get().selectAllWidthPager(limit, offset); + list = ParticipantsDao.get().selectAllWidthPager(limit, offset, Order.ASC); for (ParticipantsEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { @@ -153,7 +154,7 @@ private void doAddPointByKnowledgeAnswer() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doAddPointByKnowledgeAnswer(int offset, int limit) { List list; - list = SurveyAnswersDao.get().selectAllWidthPager(limit, offset); + list = SurveyAnswersDao.get().selectAllWidthPager(limit, offset, Order.ASC); for (SurveyAnswersEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { @@ -189,7 +190,7 @@ private void doAddPointByKnowledgeStock() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doAddPointByKnowledgeStock(int offset, int limit) { List list; - list = StockKnowledgesDao.get().selectAllWidthPager(limit, offset); + list = StockKnowledgesDao.get().selectAllWidthPager(limit, offset, Order.ASC); for (StockKnowledgesEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { @@ -224,7 +225,7 @@ private void doAddPointByKnowledgeLike() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doAddPointByKnowledgeLike(int offset, int limit) { List list; - list = LikesDao.get().selectAllWidthPager(limit, offset); + list = LikesDao.get().selectAllWidthPager(limit, offset, Order.ASC); for (LikesEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { @@ -259,7 +260,7 @@ private void doAddPointByKnowledgeShow() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doAddPointByKnowledgeShow(int offset, int limit) { List list; - list = ViewHistoriesDao.get().selectAllWidthPager(limit, offset); + list = ViewHistoriesDao.get().selectDistinctAllWidthPager(limit, offset); for (ViewHistoriesEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { @@ -294,7 +295,7 @@ public void doAddPointByKnowledge() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doAddPointByKnowledge(int offset, int limit) { List knowledges; - knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); + knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset, Order.ASC); for (KnowledgesEntity item : knowledges) { LoginedUser user = new LoginedUser(); UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); @@ -324,7 +325,7 @@ private void doSetViewCountToKnowledge() throws InterruptedException { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List doSetViewCountToKnowledge(int offset, int limit) { List knowledges; - knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset); + knowledges = KnowledgesDao.get().selectAllWidthPager(limit, offset, Order.ASC); for (KnowledgesEntity knowledge : knowledges) { long count = ViewHistoriesDao.get().selectCountOnKnowledgeId(knowledge.getKnowledgeId()); KnowledgesDao.get().updateViewCount(count, knowledge.getKnowledgeId()); From 219320ba362299f3c294ca92a49ac3e032c8a9ab Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 5 Sep 2017 06:23:21 +0900 Subject: [PATCH 048/138] #840 Add add point process at comment like --- .../control/open/KnowledgeControl.java | 2 +- .../control/protect/KnowledgeControl.java | 2 +- .../deploy/v1_11_0/Migrate_1_11_2.java | 66 +++++++++++++++---- .../knowledge/logic/activity/Activity.java | 20 +++--- .../logic/activity/ActivityLogic.java | 6 +- .../logic/activity/ActivityProcessor.java | 35 ++-------- ...tivity.java => CommentInsertActivity.java} | 14 ++-- .../logic/activity/CommentLikeActivity.java | 39 +++++++++++ 8 files changed, 119 insertions(+), 65 deletions(-) rename src/main/java/org/support/project/knowledge/logic/activity/{KnowledgeCommentActivity.java => CommentInsertActivity.java} (65%) create mode 100644 src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java diff --git a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java index 7d3da5b87..4c2219713 100644 --- a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java @@ -680,7 +680,7 @@ public Boundary likecomment() throws InvalidParamException { LikeCount likeCount = new LikeCount(); likeCount.setCount(count); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_LIKE, getLoginedUser(), new Date(), + ActivityLogic.get().processActivity(Activity.COMMENT_LIKE, getLoginedUser(), new Date(), CommentsDao.get().selectOnKey(commentNo)); return send(likeCount); } diff --git a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java index 1f345d056..b61667683 100644 --- a/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/protect/KnowledgeControl.java @@ -493,7 +493,7 @@ public Boundary comment() throws Exception { } CommentsEntity commentsEntity = KnowledgeLogic.get().saveComment(knowledgeId, comment, fileNos, getLoginedUser()); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_ADD, getLoginedUser(), new Date(), commentsEntity); + ActivityLogic.get().processActivity(Activity.COMMENT_INSERT, getLoginedUser(), new Date(), commentsEntity); return super.redirect(getRequest().getContextPath() + "/open.knowledge/view/" + knowledgeId + params); } diff --git a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java index d655eff53..84dce4acb 100644 --- a/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java +++ b/src/main/java/org/support/project/knowledge/deploy/v1_11_0/Migrate_1_11_2.java @@ -9,6 +9,7 @@ import org.support.project.knowledge.config.UserConfig; import org.support.project.knowledge.dao.CommentsDao; import org.support.project.knowledge.dao.KnowledgesDao; +import org.support.project.knowledge.dao.LikeCommentsDao; import org.support.project.knowledge.dao.LikesDao; import org.support.project.knowledge.dao.ParticipantsDao; import org.support.project.knowledge.dao.StockKnowledgesDao; @@ -17,6 +18,7 @@ import org.support.project.knowledge.deploy.Migrate; import org.support.project.knowledge.entity.CommentsEntity; import org.support.project.knowledge.entity.KnowledgesEntity; +import org.support.project.knowledge.entity.LikeCommentsEntity; import org.support.project.knowledge.entity.LikesEntity; import org.support.project.knowledge.entity.ParticipantsEntity; import org.support.project.knowledge.entity.StockKnowledgesEntity; @@ -66,15 +68,51 @@ public boolean doMigrate() throws Exception { // Knowledgeイベント参加したイベントによりポイント集計 doAddPointByKnowledgeJoinEvent(); // コメントを登録したイベントによりポイント集計 - doAddPointByKnowledgeComment(); - + doAddPointByCommentInsert(); + // コメントへのイイネイベントによりポイント集計 + doAddPointByCommentLike(); return true; } - - private void doAddPointByKnowledgeComment() throws InterruptedException { - LOG.info("Aggregate point by comment"); + private void doAddPointByCommentLike() throws InterruptedException { + LOG.info("Aggregate point by comment like"); + List list; + int offset = 0; + do { + list = doAddPointByCommentLike(offset, limit); + offset = offset + limit; + synchronized (this) { + wait(_WAIT); + } + } while (list.size() > 0); + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + private List doAddPointByCommentLike(int offset, int limit2) { + List list; + list = LikeCommentsDao.get().selectAllWidthPager(limit, offset, Order.ASC); + for (LikeCommentsEntity item : list) { + CommentsEntity comment = CommentsDao.get().selectOnKey(item.getCommentNo()); + if (comment == null) { + LOG.debug(" comment [" + item.getCommentNo() + "] is not found. so skip add point by comment like."); + continue; + } + LoginedUser user = new LoginedUser(); + UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); + if (account == null) { + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by comment like."); + continue; + } + user.setLoginUser(account); + LOG.debug(" comment [" + item.getCommentNo() + "], knowledge [ " + comment.getKnowledgeId() + "]"); + ActivityLogic.get().processActivity(Activity.COMMENT_LIKE, user, item.getInsertDatetime(), comment); + } + return list; + } + + private void doAddPointByCommentInsert() throws InterruptedException { + LOG.info("Aggregate point by comment insert"); List list; int offset = 0; do { @@ -93,12 +131,12 @@ public List doAddPointByKnowledgeComment(int offset, int limit) LoginedUser user = new LoginedUser(); UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by comment insert."); continue; } user.setLoginUser(account); - LOG.debug(" comment [" + item.getKnowledgeId() + "] "); - ActivityLogic.get().processActivity(Activity.KNOWLEDGE_COMMENT_ADD, user, item.getInsertDatetime(), item); + LOG.debug(" comment [" + item.getCommentNo() + "], knowledge [ " + item.getKnowledgeId() + "]"); + ActivityLogic.get().processActivity(Activity.COMMENT_INSERT, user, item.getInsertDatetime(), item); } return list; } @@ -122,13 +160,13 @@ public List doAddPointByKnowledgeJoinEvent(int offset, int l for (ParticipantsEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge event."); continue; } LoginedUser user = new LoginedUser(); UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge event."); continue; } user.setLoginUser(account); @@ -158,13 +196,13 @@ public List doAddPointByKnowledgeAnswer(int offset, int lim for (SurveyAnswersEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge survey answer."); continue; } LoginedUser user = new LoginedUser(); UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge survey answer."); continue; } user.setLoginUser(account); @@ -194,13 +232,13 @@ public List doAddPointByKnowledgeStock(int offset, int li for (StockKnowledgesEntity item : list) { KnowledgesEntity knowledge = KnowledgesDao.get().selectOnKey(item.getKnowledgeId()); if (knowledge == null) { - LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" knowledge [" + item.getKnowledgeId() + "] is not found. so skip add point by knowledge stock."); continue; } LoginedUser user = new LoginedUser(); UsersEntity account = UsersDao.get().selectOnKey(item.getInsertUser()); if (account == null) { - LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge like."); + LOG.debug(" event user [" + item.getInsertUser() + "] is not found. so skip add point by knowledge stock."); continue; } user.setLoginUser(account); diff --git a/src/main/java/org/support/project/knowledge/logic/activity/Activity.java b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java index 280f57261..db5d3e730 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/Activity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/Activity.java @@ -11,7 +11,7 @@ * 5 | knowledge_id | アンケート回答 * 6 | knowledge_id | イベント参加 * 101 | comment_no | コメント登録 - * 102 | comment_no | コメントにイイネ登録 + * 103 | comment_no | コメントにイイネ登録 * -6 | knowledge_id | イベント参加の取り消し * * --------------------------------------------------------------------------- @@ -38,9 +38,9 @@ * 6 | 63 | 記事 | 5 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) * 101 | 1011 | 登録者 | 20 | コメントを投稿すると、投稿者にポイント追加 * 101 | 1013 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 - * 102 | 1021 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 - * 102 | 1022 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く - * 102 | 1023 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 + * 103 | 1031 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 + * 103 | 1032 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く + * 103 | 1033 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 * -6 | -61 | 参照者 | 5 | イベント参加者にポイント付与(取り消しなのでマイナス) * -6 | -62 | 記事登録者 | 5 | 記事の登録者にポイント追加(取り消しなのでマイナス) * -6 | -63 | 記事 | 5 | 記事のポイントが追加(取り消しなのでマイナス) @@ -60,8 +60,8 @@ public enum Activity { KNOWLEDGE_ANSWER, // アンケートに回答した KNOWLEDGE_EVENT_ADD, // イベントに参加した KNOWLEDGE_EVENT_DELETE, // イベント参加キャンセル - KNOWLEDGE_COMMENT_ADD, // コメント追加 - KNOWLEDGE_COMMENT_LIKE; // コメントにイイネを押した + COMMENT_INSERT, // コメント追加 + COMMENT_LIKE; // コメントにイイネを押した public int getValue() { if (this == KNOWLEDGE_INSERT) { @@ -78,9 +78,9 @@ public int getValue() { return 6; } else if (this ==KNOWLEDGE_EVENT_DELETE) { return -6; - } else if (this ==KNOWLEDGE_COMMENT_ADD) { + } else if (this ==COMMENT_INSERT) { return 101; - } else if (this ==KNOWLEDGE_COMMENT_LIKE) { + } else if (this ==COMMENT_LIKE) { return 102; } return Integer.MIN_VALUE; @@ -102,9 +102,9 @@ public static Activity getType(int type) { } else if (type == -6) { return KNOWLEDGE_EVENT_DELETE; } else if (type == 101) { - return KNOWLEDGE_COMMENT_ADD; + return COMMENT_INSERT; } else if (type == 102) { - return KNOWLEDGE_COMMENT_LIKE; + return COMMENT_LIKE; } return NONE; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java index 3f5160c0c..d5ea5dd0d 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityLogic.java @@ -37,8 +37,10 @@ private List getActivityProcessors(Activity activity) { array.add(KnowledgeAnswerActivity.get()); } else if (activity == Activity.KNOWLEDGE_EVENT_ADD) { array.add(KnowledgeEventActivity.get()); - } else if (activity == Activity.KNOWLEDGE_COMMENT_ADD) { - array.add(KnowledgeCommentActivity.get()); + } else if (activity == Activity.COMMENT_INSERT) { + array.add(CommentInsertActivity.get()); + } else if (activity == Activity.COMMENT_LIKE) { + array.add(CommentLikeActivity.get()); } return array; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java index 941865b1b..647c2093b 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/ActivityProcessor.java @@ -1,34 +1,6 @@ package org.support.project.knowledge.logic.activity; public interface ActivityProcessor { - /* - * 種類 | 獲得のタイプ | ポイント付与先 | ポイント | 獲得タイプの意味 - * 1 | 11 | 記事登録者 | 50 | 記事を投稿したら投稿者にポイント追加 - * 1 | 13 | 記事 | 50 | 登録された記事のポイント初期値 - * 2 | 21 | 参照者 | 1 | 記事を参照するアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) - * 2 | 22 | 記事登録者 | 1 | 自分が登録された記事が参照されたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) - * 2 | 23 | 記事 | 1 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) - * 3 | 31 | 参照者 | 2 | 記事にイイネのアクションを行うと、参照者にポイント追加(一つの記事に付き1回のみ) - * 3 | 32 | 記事登録者 | 10 | 自分が登録された記事にイイネがついたら、登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) - * 3 | 33 | 記事 | 10 | 記事が参照されると、その記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) - * 4 | 41 | 参照者 | 0 | ストックした場合、ストックした人にポイントは付与しない - * 4 | 42 | 記事登録者 | 2 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) - * 4 | 43 | 記事 | 2 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) - * 5 | 51 | 参照者 | 3 | アンケート回答者にポイント付与 - * 5 | 52 | 記事登録者 | 3 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) - * 5 | 53 | 記事 | 3 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) - * 6 | 61 | 参照者 | 5 | イベント参加者にポイント付与 - * 6 | 62 | 記事登録者 | 5 | 記事の登録者にポイント追加(一つの記事に対し、参照者毎に1回のみ) - * 6 | 63 | 記事 | 5 | 記事のポイントが追加(一つの記事に対し、参照者毎に1回のみ) - * 101 | 1011 | 登録者 | 20 | コメントを投稿すると、投稿者にポイント追加 - * 101 | 1013 | 記事 | 20 | 記事にコメントが付くと、その記事に対しポイント追加 - * 102 | 1021 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 - * 102 | 1022 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く - * 102 | 1023 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 - * -6 | -61 | 参照者 | 5 | イベント参加者にポイント付与(取り消しなのでマイナス) - * -6 | -62 | 記事登録者 | 5 | 記事の登録者にポイント追加(取り消しなのでマイナス) - * -6 | -63 | 記事 | 5 | 記事のポイントが追加(取り消しなのでマイナス) * - */ public static final int TYPE_KNOWLEDGE_DO_INSERT = 11; public static final int TYPE_KNOWLEDGE_INSERTED = 13; public static final int TYPE_KNOWLEDGE_DO_SHOW = 21; @@ -46,8 +18,11 @@ public interface ActivityProcessor { public static final int TYPE_KNOWLEDGE_DO_JOIN_EVENT = 61; public static final int TYPE_KNOWLEDGE_JOINED_BY_OHER = 62; public static final int TYPE_KNOWLEDGE_JOINED = 63; - public static final int TYPE_KNOWLEDGE_DO_ADD_COMMENT = 1011; - public static final int TYPE_KNOWLEDGE_ADDED_COMMENT = 1013; + public static final int TYPE_COMMENT_DO_INSERT = 1011; + public static final int TYPE_COMMENT_INSERTED = 1013; + public static final int TYPE_COMMENT_DO_LIKE = 1031; + public static final int TYPE_COMMENT_LIKED_BY_OHER = 1032; + public static final int TYPE_COMMENT_LIKED = 1033; void execute() throws Exception; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeCommentActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/CommentInsertActivity.java similarity index 65% rename from src/main/java/org/support/project/knowledge/logic/activity/KnowledgeCommentActivity.java rename to src/main/java/org/support/project/knowledge/logic/activity/CommentInsertActivity.java index a37dbfc68..e7bc061a5 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeCommentActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/CommentInsertActivity.java @@ -11,20 +11,20 @@ * * @author koda */ -public class KnowledgeCommentActivity extends AbstractAddPointForCommentProcessor { - private static final Log LOG = LogFactory.getLog(KnowledgeCommentActivity.class); - public static KnowledgeCommentActivity get() { - return Container.getComp(KnowledgeCommentActivity.class); +public class CommentInsertActivity extends AbstractAddPointForCommentProcessor { + private static final Log LOG = LogFactory.getLog(CommentInsertActivity.class); + public static CommentInsertActivity get() { + return Container.getComp(CommentInsertActivity.class); } @Override protected Activity getActivity() { LOG.debug("Start add point process on add comment knowledge."); - return Activity.KNOWLEDGE_COMMENT_ADD; + return Activity.COMMENT_INSERT; } @Override protected TypeAndPoint getTypeAndPointForActivityExecuter() { - return new TypeAndPoint(TYPE_KNOWLEDGE_DO_ADD_COMMENT, 20); + return new TypeAndPoint(TYPE_COMMENT_DO_INSERT, 20); } @Override protected TypeAndPoint getTypeAndPointForCommentOwner() { @@ -32,7 +32,7 @@ protected TypeAndPoint getTypeAndPointForCommentOwner() { } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_KNOWLEDGE_ADDED_COMMENT, 20); + return new TypeAndPoint(TYPE_COMMENT_INSERTED, 20); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java new file mode 100644 index 000000000..64c0d8783 --- /dev/null +++ b/src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java @@ -0,0 +1,39 @@ +package org.support.project.knowledge.logic.activity; + +import org.support.project.common.log.Log; +import org.support.project.common.log.LogFactory; +import org.support.project.di.Container; + +/** + * + * 103 | 1031 | 参照者 | 2 | イイネを押すと、押した人にポイント追加 + * 103 | 1032 | 登録者 | 10 | コメントにイイネが付くと、そのコメントを登録したユーザにポイントが付く + * 103 | 1033 | 記事 | 10 | コメントにイイネがつくと、そのコメントの記事に対しポイント追加 + * + * @author koda + */ +public class CommentLikeActivity extends AbstractAddPointForCommentProcessor { + private static final Log LOG = LogFactory.getLog(CommentLikeActivity.class); + public static CommentLikeActivity get() { + return Container.getComp(CommentLikeActivity.class); + } + + @Override + protected Activity getActivity() { + LOG.debug("Start add point process on add comment knowledge."); + return Activity.COMMENT_LIKE; + } + @Override + protected TypeAndPoint getTypeAndPointForActivityExecuter() { + return new TypeAndPoint(TYPE_COMMENT_DO_LIKE, 2); + } + @Override + protected TypeAndPoint getTypeAndPointForCommentOwner() { + return new TypeAndPoint(TYPE_COMMENT_LIKED_BY_OHER, 10); + } + @Override + protected TypeAndPoint getTypeAndPointForKnowledge() { + return new TypeAndPoint(TYPE_COMMENT_LIKED, 10); + } + +} From fbc84166d553b0708540d4d628c4a5d5d87beb9c Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 5 Sep 2017 06:57:25 +0900 Subject: [PATCH 049/138] #840 Adjust points --- .../project/knowledge/dao/LikesDao.java | 9 ++++++++ .../knowledge/dao/ViewHistoriesDao.java | 6 ++++++ .../activity/KnowledgeInsertActivity.java | 16 ++++++++++++-- .../logic/activity/KnowledgeLikeActivity.java | 21 +++++++++++++++++-- .../logic/activity/KnowledgeShowActivity.java | 20 ++++++++++++++++-- 5 files changed, 66 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/support/project/knowledge/dao/LikesDao.java b/src/main/java/org/support/project/knowledge/dao/LikesDao.java index 758299ace..55accd9be 100644 --- a/src/main/java/org/support/project/knowledge/dao/LikesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/LikesDao.java @@ -33,6 +33,14 @@ public Long countOnKnowledgeId(Long knowledgeId) { String sql = "SELECT COUNT(*) FROM LIKES WHERE KNOWLEDGE_ID = ?"; return super.executeQuerySingle(sql, Long.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public long selectUniqueUserCountOnKnowledgeId(Long knowledgeId) { + String sql = "SELECT COUNT(*) FROM (" + + "SELECT KNOWLEDGE_ID, INSERT_USER FROM LIKES WHERE KNOWLEDGE_ID = ? GROUP BY KNOWLEDGE_ID, INSERT_USER) AS SUBQ"; + return super.executeQuerySingle(sql, Long.class, knowledgeId); + } + + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectOnKnowledge(Long knowledgeId, int offset, int limit) { @@ -46,4 +54,5 @@ public LikesEntity selectExistsOnUser(Long knowledgeId, Integer userId) { return super.executeQuerySingle(sql, LikesEntity.class, knowledgeId, userId); } + } diff --git a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java index 483dd47fc..4e8cbe0a7 100644 --- a/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ViewHistoriesDao.java @@ -62,6 +62,12 @@ public long selectCountOnKnowledgeId(Long knowledgeId) { String sql = "SELECT COUNT(*) FROM VIEW_HISTORIES WHERE KNOWLEDGE_ID = ?"; return executeQuerySingle(sql, Long.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public long selectUniqueUserCountOnKnowledgeId(Long knowledgeId) { + String sql = "SELECT COUNT(*) FROM (" + + "SELECT KNOWLEDGE_ID, INSERT_USER FROM VIEW_HISTORIES WHERE KNOWLEDGE_ID = ? GROUP BY KNOWLEDGE_ID, INSERT_USER) AS SUBQ"; + return executeQuerySingle(sql, Long.class, knowledgeId); + } @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) public List selectDistinctAllWidthPager(int limit, int offset) { diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java index 75a36ded1..b1aa66db0 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java @@ -2,6 +2,7 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.StringUtils; import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; @@ -25,9 +26,20 @@ protected Activity getActivity() { LOG.debug("Start add point process on insert knowledge."); return Activity.KNOWLEDGE_INSERT; } + + private int getPoint() { + // 文章が多い力先はポイントが高いように調整 + int point = 50; + if (StringUtils.isNotEmpty(getKnowledge().getContent()) && getKnowledge().getContent().length() > 700) { + int add = (getKnowledge().getContent().length() - 700) / 50; + point += add; + } + return point; + } + @Override protected TypeAndPoint getTypeAndPointForActivityExecuter() { - return new TypeAndPoint(TYPE_KNOWLEDGE_DO_INSERT, 50); + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_INSERT, getPoint()); } @Override protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { @@ -35,6 +47,6 @@ protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_KNOWLEDGE_INSERTED, 50); + return new TypeAndPoint(TYPE_KNOWLEDGE_INSERTED, getPoint()); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java index c74b9000f..68d8a134b 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java @@ -3,6 +3,7 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; import org.support.project.di.Container; +import org.support.project.knowledge.dao.LikesDao; /** * @@ -18,6 +19,22 @@ public static KnowledgeLikeActivity get() { return Container.getComp(KnowledgeLikeActivity.class); } + private int getPoint() { + // ユニークユーザのイイネ件数によりポイントを増やす + int point = 10; + long count = LikesDao.get().selectUniqueUserCountOnKnowledgeId(getKnowledge().getKnowledgeId()); + int add = 0; + if (count > 100) { + add = 1000; + } else if (count > 100){ + add = ((int) count - 100 ) / 2; // 100人を超えると、2人毎に1ポイント増えるようになる + } else if (count > 10){ + add = (int) count / 5; // 5人を超えると、ポイントが増える(5人毎に1ポイント) + } + point += add; + return point; + } + @Override protected Activity getActivity() { LOG.debug("Start add point process on like knowledge."); @@ -29,11 +46,11 @@ protected TypeAndPoint getTypeAndPointForActivityExecuter() { } @Override protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { - return new TypeAndPoint(TYPE_KNOWLEDGE_LIKED_BY_OHER, 10); + return new TypeAndPoint(TYPE_KNOWLEDGE_LIKED_BY_OHER, getPoint()); } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_KNOWLEDGE_LIKED, 10); + return new TypeAndPoint(TYPE_KNOWLEDGE_LIKED, getPoint()); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java index 559d89218..9b559b924 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeShowActivity.java @@ -5,6 +5,7 @@ import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; +import org.support.project.knowledge.dao.ViewHistoriesDao; /** * @@ -27,17 +28,32 @@ protected Activity getActivity() { LOG.debug("Start add point process on show knowledge."); return Activity.KNOWLEDGE_SHOW; } + private int getPoint() { + // ユニークな参照者が多くなると、ポイントが増えるように調整(投稿数が少なくても、良い記事を書けばポイントが高くなる) + int point = 1; + long count = ViewHistoriesDao.get().selectUniqueUserCountOnKnowledgeId(getKnowledge().getKnowledgeId()); + int add = 0; + if (count > 1000) { + add = 200; + } else if (count > 100){ + add = ((int) count - 100 ) / 5; // 100人を超えると、5人毎に1ポイント増えるようになる + } else if (count > 10){ + add = (int) count / 10; // 10人を超えると、ポイントが増える(10人毎に1ポイント) + } + point += add; + return point; + } @Override protected TypeAndPoint getTypeAndPointForActivityExecuter() { return new TypeAndPoint(TYPE_KNOWLEDGE_DO_SHOW, 1); } @Override protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { - return new TypeAndPoint(TYPE_KNOWLEDGE_SHOWN_BY_OHER, 1); + return new TypeAndPoint(TYPE_KNOWLEDGE_SHOWN_BY_OHER, getPoint()); } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_KNOWLEDGE_SHOWN, 1); + return new TypeAndPoint(TYPE_KNOWLEDGE_SHOWN, getPoint()); } } From 37fb798b0bdff8b7ebe05cbb0c5d961d5c661489 Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 5 Sep 2017 22:22:55 +0900 Subject: [PATCH 050/138] #840 Show Contribution Point on account and knowledge page --- .gitignore | 1 + .../control/open/AccountControl.java | 6 ++ .../control/open/KnowledgeControl.java | 5 +- .../project/knowledge/dao/CommentsDao.java | 7 ++ .../knowledge/dao/LikeCommentsDao.java | 7 ++ .../knowledge/dao/ParticipantsDao.java | 9 ++- .../project/knowledge/logic/AccountLogic.java | 22 ++++++ .../activity/AbstractActivityProcessor.java | 3 + .../AbstractAddPointForCommentProcessor.java | 3 + ...AbstractAddPointForKnowledgeProcessor.java | 3 + .../logic/activity/CommentInsertActivity.java | 32 +++++++- .../logic/activity/CommentLikeActivity.java | 34 ++++++++- .../activity/KnowledgeAnswerActivity.java | 18 ++++- .../activity/KnowledgeEventActivity.java | 36 ++++++++- .../logic/activity/KnowledgeLikeActivity.java | 12 +++ .../activity/KnowledgeStockActivity.java | 20 ++++- src/main/resources/appresource.properties | 3 + src/main/resources/appresource_ja.properties | 7 +- .../WEB-INF/views/open/account/account.jsp | 34 ++++++++- .../partials/partials-view-count.jsp | 75 ++++++++++++------- .../partials/partials-view-editor.jsp | 2 +- .../WEB-INF/views/open/knowledge/view.jsp | 8 +- 22 files changed, 295 insertions(+), 52 deletions(-) diff --git a/.gitignore b/.gitignore index 8e24992a0..c965ba72d 100755 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ target .eclipse-pmd .checkstyle node +.idea diff --git a/src/main/java/org/support/project/knowledge/control/open/AccountControl.java b/src/main/java/org/support/project/knowledge/control/open/AccountControl.java index 67b1c1aa9..775c8bfc3 100644 --- a/src/main/java/org/support/project/knowledge/control/open/AccountControl.java +++ b/src/main/java/org/support/project/knowledge/control/open/AccountControl.java @@ -21,6 +21,7 @@ import org.support.project.knowledge.entity.AccountImagesEntity; import org.support.project.knowledge.entity.KnowledgesEntity; import org.support.project.knowledge.entity.TemplateMastersEntity; +import org.support.project.knowledge.logic.AccountLogic; import org.support.project.knowledge.logic.IdenticonLogic; import org.support.project.knowledge.logic.KnowledgeLogic; import org.support.project.knowledge.vo.AccountInfo; @@ -93,6 +94,7 @@ public Boundary info() throws Exception { } List knowledges = KnowledgeLogic.get().showKnowledgeOnUser(userId, getLoginedUser(), offset * PAGE_LIMIT, PAGE_LIMIT); List stocks = KnowledgeLogic.get().setStockInfo(knowledges, getLoginedUser()); + KnowledgeLogic.get().setViewed(stocks, getLoginedUser()); setAttribute("knowledges", stocks); int previous = offset - 1; @@ -110,6 +112,10 @@ public Boundary info() throws Exception { } setAttribute("templates", templates); + long point = AccountLogic.get().getPoint(userId); + setAttribute("point", point); + + return forward("account.jsp"); } diff --git a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java index 4c2219713..6f9ae8f89 100644 --- a/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java +++ b/src/main/java/org/support/project/knowledge/control/open/KnowledgeControl.java @@ -204,7 +204,8 @@ public Boundary view() throws InvalidParamException, ParseException { // 編集権限 List editors = TargetLogic.get().selectEditorsViewOnKnowledgeId(knowledgeId, loginedUser); setAttribute("editors", editors); - boolean edit = knowledgeLogic.isEditor(loginedUser, entity, editors); + List editors2 = TargetLogic.get().selectEditorsOnKnowledgeId(knowledgeId); + boolean edit = knowledgeLogic.isEditor(loginedUser, entity, editors2); setAttribute("edit", edit); ArrayList knowledgeIds = new ArrayList(); @@ -218,6 +219,8 @@ public Boundary view() throws InvalidParamException, ParseException { setAttribute("stocks", stocks); ActivityLogic.get().processActivity(Activity.KNOWLEDGE_SHOW, getLoginedUser(), new Date(), entity); + long point = KnowledgesDao.get().selectPoint(entity.getKnowledgeId()); + setAttribute("point", point); return forward("view.jsp"); } diff --git a/src/main/java/org/support/project/knowledge/dao/CommentsDao.java b/src/main/java/org/support/project/knowledge/dao/CommentsDao.java index 9dc93b6f6..1d5f5dba5 100644 --- a/src/main/java/org/support/project/knowledge/dao/CommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/CommentsDao.java @@ -50,4 +50,11 @@ public Integer countOnKnowledgeId(Long knowledgeId) { return super.executeQuerySingle(sql, Integer.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public long selectUniqueUserCountOnKnowledgeId(Long knowledgeId) { + String sql = "SELECT COUNT(*) FROM (" + + "SELECT KNOWLEDGE_ID, INSERT_USER FROM COMMENTS WHERE KNOWLEDGE_ID = ? GROUP BY KNOWLEDGE_ID, INSERT_USER) AS SUBQ"; + return super.executeQuerySingle(sql, Long.class, knowledgeId); + } + } diff --git a/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java b/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java index f5da3524a..30c4c61f3 100644 --- a/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/LikeCommentsDao.java @@ -44,6 +44,13 @@ public LikeCommentsEntity selectExistsOnUser(Long commentNo, Integer userId) { return super.executeQuerySingle(sql, LikeCommentsEntity.class, commentNo, userId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public long selectUniqueUserCountOnCommentNo(Long commentNo) { + String sql = "SELECT COUNT(*) FROM (" + + "SELECT COMMENT_NO, INSERT_USER FROM LIKE_COMMENTS WHERE COMMENT_NO = ? GROUP BY COMMENT_NO, INSERT_USER) AS SUBQ"; + return super.executeQuerySingle(sql, Long.class, commentNo); + } + } diff --git a/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java b/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java index 6c7b70fff..3dcc571d8 100644 --- a/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java +++ b/src/main/java/org/support/project/knowledge/dao/ParticipantsDao.java @@ -6,9 +6,7 @@ import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; - import org.support.project.knowledge.dao.gen.GenParticipantsDao; -import org.support.project.knowledge.vo.GroupUser; import org.support.project.knowledge.vo.Participation; import org.support.project.ormapping.common.SQLManager; @@ -39,6 +37,13 @@ public List selectParticipations(Long knowledgeId) { return executeQueryList(sql, Participation.class, knowledgeId); } + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public long selectUniqueUserCountOnKnowledgeId(Long knowledgeId) { + String sql = "SELECT COUNT(*) FROM (" + + "SELECT KNOWLEDGE_ID, USER_ID FROM PARTICIPANTS WHERE KNOWLEDGE_ID = ? GROUP BY KNOWLEDGE_ID, USER_ID) AS SUBQ"; + return super.executeQuerySingle(sql, Long.class, knowledgeId); + } + } diff --git a/src/main/java/org/support/project/knowledge/logic/AccountLogic.java b/src/main/java/org/support/project/knowledge/logic/AccountLogic.java index 81b4b4e62..1be5ac7d8 100644 --- a/src/main/java/org/support/project/knowledge/logic/AccountLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/AccountLogic.java @@ -19,6 +19,8 @@ import org.support.project.di.Container; import org.support.project.di.DI; import org.support.project.di.Instance; +import org.support.project.knowledge.config.AppConfig; +import org.support.project.knowledge.config.UserConfig; import org.support.project.knowledge.dao.AccountImagesDao; import org.support.project.knowledge.entity.AccountImagesEntity; import org.support.project.knowledge.vo.UploadFile; @@ -26,10 +28,12 @@ import org.support.project.web.dao.ConfirmMailChangesDao; import org.support.project.web.dao.GroupsDao; import org.support.project.web.dao.RolesDao; +import org.support.project.web.dao.UserConfigsDao; import org.support.project.web.dao.UsersDao; import org.support.project.web.entity.ConfirmMailChangesEntity; import org.support.project.web.entity.GroupsEntity; import org.support.project.web.entity.RolesEntity; +import org.support.project.web.entity.UserConfigsEntity; import org.support.project.web.entity.UsersEntity; @DI(instance = Instance.Singleton) @@ -237,4 +241,22 @@ public LoginedUser createLoginUser(String userKey) { return loginedUser; } + /** + * ユーザのポイント取得 + * @param user ユーザ + * @return + */ + @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) + public int getPoint(int user) { + UserConfigsEntity config = UserConfigsDao.get().selectOnKey(UserConfig.POINT, AppConfig.get().getSystemName(), user); + if (config == null) { + config = new UserConfigsEntity(UserConfig.POINT, AppConfig.get().getSystemName(), user); + config.setConfigValue("0"); + } + if (!StringUtils.isInteger(config.getConfigValue())) { + config.setConfigValue("0"); + } + int now = Integer.parseInt(config.getConfigValue()); + return now; + } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java index 33f361902..671c1c0a0 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java @@ -9,6 +9,8 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; import org.support.project.common.util.StringUtils; +import org.support.project.di.DI; +import org.support.project.di.Instance; import org.support.project.knowledge.config.AppConfig; import org.support.project.knowledge.config.UserConfig; import org.support.project.knowledge.dao.ActivitiesDao; @@ -27,6 +29,7 @@ * * @author koda */ +@DI(instance = Instance.Prototype) public abstract class AbstractActivityProcessor implements ActivityProcessor { private static final Log LOG = LogFactory.getLog(AbstractActivityProcessor.class); private static Object lockUser = new Object(); diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java index 78e8c289d..3a5fc0ce1 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForCommentProcessor.java @@ -3,11 +3,14 @@ import org.support.project.aop.Aspect; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.di.DI; +import org.support.project.di.Instance; import org.support.project.knowledge.dao.KnowledgesDao; import org.support.project.knowledge.entity.ActivitiesEntity; import org.support.project.knowledge.entity.CommentsEntity; import org.support.project.knowledge.entity.KnowledgesEntity; +@DI(instance = Instance.Prototype) public abstract class AbstractAddPointForCommentProcessor extends AbstractActivityProcessor { private static final Log LOG = LogFactory.getLog(AbstractAddPointForCommentProcessor.class); private CommentsEntity comment; diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java index 51334644a..a8323cbb4 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractAddPointForKnowledgeProcessor.java @@ -3,9 +3,12 @@ import org.support.project.aop.Aspect; import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.di.DI; +import org.support.project.di.Instance; import org.support.project.knowledge.entity.ActivitiesEntity; import org.support.project.knowledge.entity.KnowledgesEntity; +@DI(instance = Instance.Prototype) public abstract class AbstractAddPointForKnowledgeProcessor extends AbstractActivityProcessor { private static final Log LOG = LogFactory.getLog(AbstractAddPointForKnowledgeProcessor.class); private KnowledgesEntity knowledge; diff --git a/src/main/java/org/support/project/knowledge/logic/activity/CommentInsertActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/CommentInsertActivity.java index e7bc061a5..6f2546a38 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/CommentInsertActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/CommentInsertActivity.java @@ -2,7 +2,11 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.dao.CommentsDao; /** * @@ -11,12 +15,38 @@ * * @author koda */ +@DI(instance = Instance.Prototype) public class CommentInsertActivity extends AbstractAddPointForCommentProcessor { private static final Log LOG = LogFactory.getLog(CommentInsertActivity.class); public static CommentInsertActivity get() { return Container.getComp(CommentInsertActivity.class); } + private int point = 0; + + private int getPoint() { + if (point != 0) { + return point; + } + // 指定の記事に登録した、ユニークなユーザ数によりポイントを変える + int point = 20; + long count = CommentsDao.get().selectUniqueUserCountOnKnowledgeId(getComment().getKnowledgeId()); + int add = 0; + if (count > 100) { + add = 1000; + } else if (count > 100){ + add = ((int) count - 100 ) / 2; // 100人を超えると、2人毎に1ポイント増えるようになる + } else if (count > 10){ + add = (int) count / 5; // 5人を超えると、ポイントが増える(5人毎に1ポイント) + int[] points = {1,1,1,1,1,2,2,2,2,3}; + add += points[RandomUtil.randamNum(0, 10)]; // ランダムで値が増減するボーナスポイント + } + point += add; + this.point = point; + return point; + } + + @Override protected Activity getActivity() { LOG.debug("Start add point process on add comment knowledge."); @@ -32,7 +62,7 @@ protected TypeAndPoint getTypeAndPointForCommentOwner() { } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_COMMENT_INSERTED, 20); + return new TypeAndPoint(TYPE_COMMENT_INSERTED, getPoint()); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java index 64c0d8783..d86647964 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/CommentLikeActivity.java @@ -2,7 +2,11 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.dao.LikeCommentsDao; /** * @@ -12,12 +16,38 @@ * * @author koda */ +@DI(instance = Instance.Prototype) public class CommentLikeActivity extends AbstractAddPointForCommentProcessor { private static final Log LOG = LogFactory.getLog(CommentLikeActivity.class); public static CommentLikeActivity get() { return Container.getComp(CommentLikeActivity.class); } + private int point = 0; + + private int getPoint() { + if (point != 0) { + return point; + } + // 指定のコメントについたイイネの件数(ユニーク件数)でポイントを増やす + int point = 10; + long count = LikeCommentsDao.get().selectUniqueUserCountOnCommentNo(getComment().getCommentNo()); + int add = 0; + if (count > 100) { + add = 1000; + } else if (count > 100){ + add = ((int) count - 100 ) / 2; // 100人を超えると、2人毎に1ポイント増えるようになる + } else if (count > 10){ + add = (int) count / 5; // 5人を超えると、ポイントが増える(5人毎に1ポイント) + int[] points = {1,1,1,1,1,2,2,2,2,3}; + add += points[RandomUtil.randamNum(0, 10)]; // ランダムで値が増減するボーナスポイント + } + point += add; + this.point = point; + return point; + } + + @Override protected Activity getActivity() { LOG.debug("Start add point process on add comment knowledge."); @@ -29,11 +59,11 @@ protected TypeAndPoint getTypeAndPointForActivityExecuter() { } @Override protected TypeAndPoint getTypeAndPointForCommentOwner() { - return new TypeAndPoint(TYPE_COMMENT_LIKED_BY_OHER, 10); + return new TypeAndPoint(TYPE_COMMENT_LIKED_BY_OHER, getPoint()); } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_COMMENT_LIKED, 10); + return new TypeAndPoint(TYPE_COMMENT_LIKED, getPoint()); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java index cce7d92f7..edad428e1 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeAnswerActivity.java @@ -2,7 +2,10 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; /** * @@ -12,12 +15,23 @@ * * @author koda */ +@DI(instance = Instance.Prototype) public class KnowledgeAnswerActivity extends AbstractAddPointForKnowledgeProcessor { private static final Log LOG = LogFactory.getLog(KnowledgeAnswerActivity.class); public static KnowledgeAnswerActivity get() { return Container.getComp(KnowledgeAnswerActivity.class); } + private int point = 0; + private int getPoint() { + if (point != 0) { + return point; + } + int[] points = {1,1,2,2,2,2,3,3,3,4}; + this.point = points[RandomUtil.randamNum(0, 10)]; // ランダムで値を増減してみた + return point; + } + @Override protected Activity getActivity() { LOG.debug("Start add point process on answer knowledge."); @@ -29,11 +43,11 @@ protected TypeAndPoint getTypeAndPointForActivityExecuter() { } @Override protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { - return new TypeAndPoint(TYPE_KNOWLEDGE_ANSWERD_BY_OHER, 3); + return new TypeAndPoint(TYPE_KNOWLEDGE_ANSWERD_BY_OHER, getPoint()); } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_KNOWLEDGE_ANSWERD, 3); + return new TypeAndPoint(TYPE_KNOWLEDGE_ANSWERD, getPoint()); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java index b75a76fe5..1e1935f72 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeEventActivity.java @@ -2,7 +2,11 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; +import org.support.project.knowledge.dao.ParticipantsDao; /** * @@ -12,12 +16,38 @@ * * @author koda */ +@DI(instance = Instance.Prototype) public class KnowledgeEventActivity extends AbstractAddPointForKnowledgeProcessor { private static final Log LOG = LogFactory.getLog(KnowledgeEventActivity.class); public static KnowledgeEventActivity get() { return Container.getComp(KnowledgeEventActivity.class); } + private int point = 0; + + private int getPoint() { + if (point != 0) { + return point; + } + // 参加者人数により増減 + int point = 10; + long count = ParticipantsDao.get().selectUniqueUserCountOnKnowledgeId(getKnowledge().getKnowledgeId()); + int add = 0; + if (count > 100) { + add = 1000; + } else if (count > 100){ + add = ((int) count - 100 ) / 2; // 100人を超えると、2人毎に1ポイント増えるようになる + } else if (count > 10){ + add = (int) count / 5; // 5人を超えると、ポイントが増える(5人毎に1ポイント) + int[] points = {1,1,1,1,1,2,2,2,2,3}; + add += points[RandomUtil.randamNum(0, 10)]; // ランダムで値が増減するボーナスポイント + } + point += add; + this.point = point; + return point; + } + + @Override protected Activity getActivity() { LOG.debug("Start add point process on answer knowledge."); @@ -25,15 +55,15 @@ protected Activity getActivity() { } @Override protected TypeAndPoint getTypeAndPointForActivityExecuter() { - return new TypeAndPoint(TYPE_KNOWLEDGE_DO_JOIN_EVENT, 5); + return new TypeAndPoint(TYPE_KNOWLEDGE_DO_JOIN_EVENT, 5); // 参加者には固定のポイント } @Override protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { - return new TypeAndPoint(TYPE_KNOWLEDGE_JOINED_BY_OHER, 5); + return new TypeAndPoint(TYPE_KNOWLEDGE_JOINED_BY_OHER, getPoint()); } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_KNOWLEDGE_JOINED, 5); + return new TypeAndPoint(TYPE_KNOWLEDGE_JOINED, getPoint()); } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java index 68d8a134b..f9b2dd8d7 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeLikeActivity.java @@ -2,7 +2,10 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; import org.support.project.knowledge.dao.LikesDao; /** @@ -13,13 +16,19 @@ * * @author koda */ +@DI(instance = Instance.Prototype) public class KnowledgeLikeActivity extends AbstractAddPointForKnowledgeProcessor { private static final Log LOG = LogFactory.getLog(KnowledgeLikeActivity.class); public static KnowledgeLikeActivity get() { return Container.getComp(KnowledgeLikeActivity.class); } + private int point = 0; + private int getPoint() { + if (point != 0) { + return point; + } // ユニークユーザのイイネ件数によりポイントを増やす int point = 10; long count = LikesDao.get().selectUniqueUserCountOnKnowledgeId(getKnowledge().getKnowledgeId()); @@ -30,8 +39,11 @@ private int getPoint() { add = ((int) count - 100 ) / 2; // 100人を超えると、2人毎に1ポイント増えるようになる } else if (count > 10){ add = (int) count / 5; // 5人を超えると、ポイントが増える(5人毎に1ポイント) + int[] points = {1,1,1,1,1,2,2,2,2,3}; + add += points[RandomUtil.randamNum(0, 10)]; // ランダムで値が増減するボーナスポイント } point += add; + this.point = point; return point; } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java index 338e92b3e..ecd805968 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeStockActivity.java @@ -2,7 +2,10 @@ import org.support.project.common.log.Log; import org.support.project.common.log.LogFactory; +import org.support.project.common.util.RandomUtil; import org.support.project.di.Container; +import org.support.project.di.DI; +import org.support.project.di.Instance; /** * @@ -12,12 +15,25 @@ * * @author koda */ +@DI(instance = Instance.Prototype) public class KnowledgeStockActivity extends AbstractAddPointForKnowledgeProcessor { private static final Log LOG = LogFactory.getLog(KnowledgeStockActivity.class); public static KnowledgeStockActivity get() { return Container.getComp(KnowledgeStockActivity.class); } + private int point = 0; + + private int getPoint() { + if (point != 0) { + return point; + } + int[] points = {1,1,1,1,1,2,2,2,2,3}; + this.point = points[RandomUtil.randamNum(0, 10)]; // ランダムで値を増減してみた + return point; + } + + @Override protected Activity getActivity() { LOG.debug("Start add point process on stock knowledge."); @@ -29,11 +45,11 @@ protected TypeAndPoint getTypeAndPointForActivityExecuter() { } @Override protected TypeAndPoint getTypeAndPointForKnowledgeOwner() { - return new TypeAndPoint(TYPE_KNOWLEDGE_STOCKED_BY_OHER, 2); + return new TypeAndPoint(TYPE_KNOWLEDGE_STOCKED_BY_OHER, getPoint()); } @Override protected TypeAndPoint getTypeAndPointForKnowledge() { - return new TypeAndPoint(TYPE_KNOWLEDGE_STOCKED, 2); + return new TypeAndPoint(TYPE_KNOWLEDGE_STOCKED, getPoint()); } } diff --git a/src/main/resources/appresource.properties b/src/main/resources/appresource.properties index fe20e305c..c1b946d15 100644 --- a/src/main/resources/appresource.properties +++ b/src/main/resources/appresource.properties @@ -740,7 +740,10 @@ knowledge.analytics.msg.info=In this page, you will register the script for the knowledge.account.label.knowledge.count=Knowledge Count knowledge.account.label.like.count=Like Count knowledge.account.label.stock.count=Stock Count +knowledge.account.label.cp=Contribution Point knowledge.account.label.knowledges=Knowledges +knowledge.account.label.like=Likes +knowledge.account.label.activity=Activities knowledge.admin.notice.title=Message from service administrator knowledge.admin.notice.msg=Manage messages from administrator. diff --git a/src/main/resources/appresource_ja.properties b/src/main/resources/appresource_ja.properties index 9591363ec..8778aff81 100644 --- a/src/main/resources/appresource_ja.properties +++ b/src/main/resources/appresource_ja.properties @@ -737,10 +737,13 @@ knowledge.analytics.title=アナリティクスの設定 knowledge.analytics.label.script=アナリティクス用のスクリプト knowledge.analytics.msg.info=GoogleAnalyticsやPiwikといったアクセス解析用のスクリプトを登録します。
ここで登録したスクリプトは、全ての画面に適用されます。 -knowledge.account.label.knowledge.count=ナレッジ登録件数 +knowledge.account.label.knowledge.count=ナレッジ投稿件数 knowledge.account.label.like.count=いいね!獲得件数 knowledge.account.label.stock.count=ストックされた件数 -knowledge.account.label.knowledges=このユーザが登録したナレッジ +knowledge.account.label.cp=Contribution Point +knowledge.account.label.knowledges=投稿 +knowledge.account.label.like=イイネした投稿 +knowledge.account.label.activity=活動状況 knowledge.admin.notice.title=全体メッセージ knowledge.admin.notice.msg=アクセスユーザに対し、管理者からメッセージを登録します diff --git a/src/main/webapp/WEB-INF/views/open/account/account.jsp b/src/main/webapp/WEB-INF/views/open/account/account.jsp index 2c07fb4ad..7f8c20ffa 100644 --- a/src/main/webapp/WEB-INF/views/open/account/account.jsp +++ b/src/main/webapp/WEB-INF/views/open/account/account.jsp @@ -34,8 +34,15 @@ width="64" height="64" />  <%= jspUtil.out("userName") %> - -
+ +
+
+  <%= jspUtil.label("knowledge.account.label.cp") %> +
+
+  <%= jspUtil.out("point") %> +
+
 <%= jspUtil.label("knowledge.account.label.knowledge.count") %> @@ -60,12 +67,33 @@  <%= jspUtil.out("stockCount") %>
+ +
+
+ CPのグラフ

+ + + + +
-<%= jspUtil.label("knowledge.account.label.knowledges") %> +
diff --git a/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-count.jsp b/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-count.jsp index ba0977df3..d39495ed7 100644 --- a/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-count.jsp +++ b/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-count.jsp @@ -11,33 +11,50 @@ <% JspUtil jspUtil = new JspUtil(request, pageContext); %> -<%=jspUtil.out("params")%>" class="text-primary btn-link"> -  <%=jspUtil.label("knowledge.view.like")%> × <%=jspUtil.out("like_count")%> - - -  <%=jspUtil.label("knowledge.view.comment.label")%> - × <%=jspUtil.out("comments.size()")%> - + +
+
+ <% + int num = 0; + List attachs = jspUtil.getValue("files", List.class); + for (int i = 0; i < attachs.size(); i++) { + UploadFile attach = attachs.get(i); + if (attach.getCommentNo() == null || attach.getCommentNo() == 0) { + num++; + } + } + %> + +  <%=jspUtil.label("knowledge.view.label.attach")%> + × <%= num %> + +
+
+ <% if (jspUtil.is(TemplateLogic.TYPE_ID_EVENT, "typeId")) { %> + +  <%= jspUtil.label("knowledge.view.label.participants") %> + + + <% } %> +
+
+
+
-<% - int num = 0; - List attachs = jspUtil.getValue("files", List.class); - for (int i = 0; i < attachs.size(); i++) { - UploadFile attach = attachs.get(i); - if (attach.getCommentNo() == null || attach.getCommentNo() == 0) { - num++; - } - } -%> - - -  <%=jspUtil.label("knowledge.view.label.attach")%> - × <%= num %> - - -<% if (jspUtil.is(TemplateLogic.TYPE_ID_EVENT, "typeId")) { %> - -  <%= jspUtil.label("knowledge.view.label.participants") %> - - -<% } %> diff --git a/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-editor.jsp b/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-editor.jsp index c6acf437d..ed1b0c96c 100644 --- a/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-editor.jsp +++ b/src/main/webapp/WEB-INF/views/open/knowledge/partials/partials-view-editor.jsp @@ -12,7 +12,7 @@
" alt="icon" width="24" - height="24" style="float: left" /> + height="24" /> <% String insertLink = "" + jspUtil.out("insertUserName", JspUtil.ESCAPE_CLEAR) + ""; diff --git a/src/main/webapp/WEB-INF/views/open/knowledge/view.jsp b/src/main/webapp/WEB-INF/views/open/knowledge/view.jsp index 246a5fb3c..a75ca4a76 100644 --- a/src/main/webapp/WEB-INF/views/open/knowledge/view.jsp +++ b/src/main/webapp/WEB-INF/views/open/knowledge/view.jsp @@ -35,10 +35,6 @@ <%-- いいね、コメント、参加者 --%>
-
- <%-- 更新者情報 --%> - -
<%-- テンプレートの種類表示 --%> @@ -49,6 +45,10 @@ <%-- 公開区分 --%>
+
+ <%-- 更新者情報 --%> + +
<%-- 右上のボタン部分 --%> From 042788137f479e1fe9cb089fa232617b494758ee Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 5 Sep 2017 23:02:36 +0900 Subject: [PATCH 051/138] #840 Add total point column to user and activity table --- document/database/A5M2_knowledge.pdf | Bin 75518 -> 75584 bytes document/database/knowledge.a5er | 16 +++--- .../gen/GenPointKnowledgeHistoriesDao.java | 3 ++ .../dao/gen/GenPointUserHistoriesDao.java | 3 ++ .../gen/GenPointKnowledgeHistoriesEntity.java | 39 ++++++++++++++ .../gen/GenPointUserHistoriesEntity.java | 49 ++++++++++++++++++ .../activity/AbstractActivityProcessor.java | 42 ++++++++------- .../activity/KnowledgeInsertActivity.java | 7 ++- .../PointKnowledgeHistoriesDao_insert.sql | 2 + .../PointKnowledgeHistoriesDao_raw_insert.sql | 2 + .../PointKnowledgeHistoriesDao_update.sql | 1 + .../PointUserHistoriesDao_insert.sql | 2 + .../PointUserHistoriesDao_raw_insert.sql | 2 + .../PointUserHistoriesDao_update.sql | 1 + .../project/knowledge/database/ddl.sql | 6 ++- .../deploy/v1_11_0/migrate_v1_11_2.sql | 7 ++- 16 files changed, 151 insertions(+), 31 deletions(-) diff --git a/document/database/A5M2_knowledge.pdf b/document/database/A5M2_knowledge.pdf index 8c0a55c7fed957289992cb0480665f3058551910..b87fb4d9a91b8ca300b5d9cfcb0fa3480b24962b 100755 GIT binary patch delta 1475 zcmV;!1w8ux%>=;C1dzlDIWRRcGBhwUFp08`?1A{=I;e=W4=#tPO-ms0MOERG+M;F+S!pPAj zg&-kEmteGM3Ku%MoRCduhWBNsh%0kf?0IYMwRtNMaqeFsT>tX?>zCe^7zR78csmXn z@_@B68rSF0SUJN5qSTUn{}6*ltxGAq0bWL{BSr?GQM;qyegy_#1P>&gU6*u!R*z)6 zCQtUaDz(}#>l?NBi1bXT3_rf^@Q%^ik#ERM;HVYoNeCWBPi;F{{-%^@W2Gn^BEZ$ldI=XHg!H;{lDk@$d6}fB;-M;@Ebqh`;FbP$9BeB_?jnw!vmbEtrPE_2E*Gu0mH?~+(J=G4GV-Ro!0EHm?BJ4?$;b< z;>eB>An{sr3sMiV=VB4y#LPy%1q$n_xI_&fH13a1<1{Qz!m%0{J4E`>KDE- z`rYE&+imna)w88CtA-i2y<1xNP(b)qNr`cKh9CG5pMLCX@?(5|I@WklkK4)w58{$} zi{D<`gcR%YR!FH_TizO&k$@aJf@!}wFC`n9i|AosOQ~coa)9V^a}kf*5p5qCaDDqSP}#Hlrqyi$_LY##Ih`{o@>2;eaE_c7xwT7(QqXTJ24_~4YpfBBc|!O%Q;&m}ZscHjr8vViGRZ3|Kob2Iqesx(Z<$vf3#`;{Otb+mV;=&w|F4| zQUn1wm&+vqI6`GKH8NvlHfA<5WnnTfGB{#kHDfkqH(@zrFgH0lIb}XPFkxmmF*spm zHDfh6IX5+7Vq!L9IAmjEFf=t~VlXvkmqjK4E>znIfItjH(L1|7R)4I)D(t~d?8idH zJ_Nh42$85E`8b3bNC32dN;Y1TZE=)YqxP*(LCQZ${cMcw)0Px d%fB4>n7x;h3^JFr`f2n_u*FNL-oS+bcP~bO0osbnyt4H(v zQ-IhdQRH^$Y6ogyd`G<+Go>rjj+tKn_0PYz*qI?U_aLDad+%+(TQZ((^I$lgO3u?d zkOjuKhHhP2rkl-vWB6FJ8MM)-Z*dQQ3<80M6K1)iOG1Zu!#0jC$%LL9U0^>7BS)7M zf`lAhg3+caTLN=ip-j|&suFPGr=dHQd=B-4;xqpRl{mb*OUwT_&80@&>?Ko)2 z1J=rDT%SW@US4kOSHr*ck{0RnTiBw7h~RDxq6g*51D zaYL08f0Rnf4KZgE(=_JeIzF`PJ6#F0<@!OT>U2>)$Q!D{&$70Y? zptsV{B{OO1*_rHs%<;ENgk&P;O3I1eL=i}9Nc+Lg+ zct$Eh9^?zygr?v10QpePC$T}RC`V$$*pqi`qPm5fa?)Ahh;98p_p~+L?)4BZPUe2-Rz?6w;_E*dEi81FQp5ahUn2)ONwL~a-gLw zHx2Q)9aZ)b^47Nv6$}p{j})%TYc~u!(tO)jANU4<{Ct!uQ1WJKVDyJlZFPR^(Nq}p zx1~ZTc9NM2))WVS34T7pZR&fHrcSh&gJUbEvsD)K62?}YNU`9dvS&vytJ?zXDWYN$RR7tI}X0Cs*Qs0wYy1b}54e!mvGzv-swc z(n4^s2JSJISPi*AQE&%tj+V((-&6o=o4iNz&zcuJH!pDMpGyh?+(W^yL7yyL4{Ab* zAEb*zei%}ErbKc*+H@wdAn0a65)4LEqG-5Ghmxv|-E>%knfItj{;eU2{EL_ll3OwKhE1VHRI3WWUs2~NJ_VA^d zNm>9i!2k&|NaGp1+$@eQlHN^j validate() { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.total, convLabelName("Total")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.total, convLabelName("Total")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(this.insertUser, convLabelName("Insert User")); if (error != null) { @@ -407,6 +436,16 @@ public List validate(Map values) { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("total"), convLabelName("Total")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("total"), convLabelName("Total")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); if (error != null) { diff --git a/src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java b/src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java index 66af41553..93268628d 100644 --- a/src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java +++ b/src/main/java/org/support/project/knowledge/entity/gen/GenPointUserHistoriesEntity.java @@ -61,6 +61,8 @@ public GenPointUserHistoriesEntity(Long historyNo, Integer userId) { private Integer type; /** 獲得ポイント */ private Integer point; + /** トータルポイント */ + private Integer total; /** 登録ユーザ */ private Integer insertUser; /** 登録日時 */ @@ -152,6 +154,22 @@ public GenPointUserHistoriesEntity setPoint(Integer point) { return this; } + /** + * Get トータルポイント. + * @return トータルポイント + */ + public Integer getTotal() { + return this.total; + } + /** + * Set トータルポイント. + * @param total トータルポイント + * @return this object */ + public GenPointUserHistoriesEntity setTotal(Integer total) { + this.total = total; + return this; + } + /** * Get 登録ユーザ. * @return 登録ユーザ @@ -288,6 +306,7 @@ public String toString() { builder.append("activityNo = ").append(activityNo).append("\n"); builder.append("type = ").append(type).append("\n"); builder.append("point = ").append(point).append("\n"); + builder.append("total = ").append(total).append("\n"); builder.append("insertUser = ").append(insertUser).append("\n"); builder.append("insertDatetime = ").append(insertDatetime).append("\n"); builder.append("updateUser = ").append(updateUser).append("\n"); @@ -341,11 +360,26 @@ public List validate() { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.point, convLabelName("Point")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(this.point, convLabelName("Point")); if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(this.total, convLabelName("Total")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(this.total, convLabelName("Total")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(this.insertUser, convLabelName("Insert User")); if (error != null) { @@ -402,11 +436,26 @@ public List validate(Map values) { if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("point"), convLabelName("Point")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(values.get("point"), convLabelName("Point")); if (error != null) { errors.add(error); } + validator = ValidatorFactory.getInstance(Validator.REQUIRED); + error = validator.validate(values.get("total"), convLabelName("Total")); + if (error != null) { + errors.add(error); + } + validator = ValidatorFactory.getInstance(Validator.INTEGER); + error = validator.validate(values.get("total"), convLabelName("Total")); + if (error != null) { + errors.add(error); + } validator = ValidatorFactory.getInstance(Validator.INTEGER); error = validator.validate(values.get("insertUser"), convLabelName("Insert User")); if (error != null) { diff --git a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java index 671c1c0a0..abc0f842e 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/AbstractActivityProcessor.java @@ -109,19 +109,6 @@ protected ActivitiesEntity addActivity(Activity kind, String target) { @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) protected int addPointForUser(int targetUser, long activityNo, int type, int point) { synchronized(lockUser) { - long num = PointUserHistoriesDao.get().selectNumOnUser(targetUser); - num++; - PointUserHistoriesEntity history = new PointUserHistoriesEntity(); - history.setUserId(targetUser); - history.setHistoryNo(num); - history.setActivityNo(activityNo); - history.setType(type); - history.setPoint(point); - history.setInsertUser(eventUser.getUserId()); - history.setInsertDatetime(new Timestamp(eventDateTime.getTime())); - history.setDeleteFlag(INT_FLAG.OFF.getValue()); - PointUserHistoriesDao.get().physicalInsert(history); - UserConfigsEntity config = UserConfigsDao.get().selectOnKey(UserConfig.POINT, AppConfig.get().getSystemName(), targetUser); if (config == null) { config = new UserConfigsEntity(UserConfig.POINT, AppConfig.get().getSystemName(), targetUser); @@ -135,6 +122,21 @@ protected int addPointForUser(int targetUser, long activityNo, int type, int poi now = now + point; config.setConfigValue(String.valueOf(now)); UserConfigsDao.get().save(config); + + long num = PointUserHistoriesDao.get().selectNumOnUser(targetUser); + num++; + PointUserHistoriesEntity history = new PointUserHistoriesEntity(); + history.setUserId(targetUser); + history.setHistoryNo(num); + history.setActivityNo(activityNo); + history.setType(type); + history.setPoint(point); + history.setTotal(now); + history.setInsertUser(eventUser.getUserId()); + history.setInsertDatetime(new Timestamp(eventDateTime.getTime())); + history.setDeleteFlag(INT_FLAG.OFF.getValue()); + PointUserHistoriesDao.get().physicalInsert(history); + return now; } } @@ -151,6 +153,13 @@ protected int addPointForUser(int targetUser, long activityNo, int type, int poi @Aspect(advice = org.support.project.ormapping.transaction.Transaction.class) protected int addPointForKnowledge(long knowledgeId, long activityNo, int type, int point) { synchronized (lockKnowledge) { + // Daoのupdateメソッドなどを使うと、「更新者」が更新されるので、ポイントのみを更新するメソッドを呼ぶ + // なお、記事の存在チェックは行わない + int now = KnowledgesDao.get().selectPoint(knowledgeId); + LOG.info("Add point [knowledge]" + knowledgeId + " [point]" + point + " [now]" + now); + now = now + point; + KnowledgesDao.get().updatePoint(knowledgeId, now); + long num = PointKnowledgeHistoriesDao.get().selectNumOnKnowledge(knowledgeId); num++; PointKnowledgeHistoriesEntity history = new PointKnowledgeHistoriesEntity(); @@ -159,17 +168,12 @@ protected int addPointForKnowledge(long knowledgeId, long activityNo, int type, history.setActivityNo(activityNo); history.setType(type); history.setPoint(point); + history.setTotal(now); history.setInsertUser(eventUser.getUserId()); history.setInsertDatetime(new Timestamp(eventDateTime.getTime())); history.setDeleteFlag(INT_FLAG.OFF.getValue()); PointKnowledgeHistoriesDao.get().physicalInsert(history); - // Daoのupdateメソッドなどを使うと、「更新者」が更新されるので、ポイントのみを更新するメソッドを呼ぶ - // なお、記事の存在チェックは行わない - int now = KnowledgesDao.get().selectPoint(knowledgeId); - LOG.info("Add point [knowledge]" + knowledgeId + " [point]" + point + " [now]" + now); - now = now + point; - KnowledgesDao.get().updatePoint(knowledgeId, now); return now; } } diff --git a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java index b1aa66db0..973fdd701 100644 --- a/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java +++ b/src/main/java/org/support/project/knowledge/logic/activity/KnowledgeInsertActivity.java @@ -30,8 +30,11 @@ protected Activity getActivity() { private int getPoint() { // 文章が多い力先はポイントが高いように調整 int point = 50; - if (StringUtils.isNotEmpty(getKnowledge().getContent()) && getKnowledge().getContent().length() > 700) { - int add = (getKnowledge().getContent().length() - 700) / 50; + if (StringUtils.isNotEmpty(getKnowledge().getContent()) && getKnowledge().getContent().length() > 1000) { + int add = (getKnowledge().getContent().length() - 1000) / 100; + if (add > 100) { + add = 100; + } point += add; } return point; diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql index 4ada9a3f2..6e8c5fdb3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_insert.sql @@ -5,6 +5,7 @@ HISTORY_NO , ACTIVITY_NO , TYPE , POINT + , TOTAL , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -21,4 +22,5 @@ HISTORY_NO , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql index 4ada9a3f2..6e8c5fdb3 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_raw_insert.sql @@ -5,6 +5,7 @@ HISTORY_NO , ACTIVITY_NO , TYPE , POINT + , TOTAL , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -21,4 +22,5 @@ HISTORY_NO , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql index dfe5bc637..d412e7545 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointKnowledgeHistoriesDao/PointKnowledgeHistoriesDao_update.sql @@ -3,6 +3,7 @@ SET ACTIVITY_NO = ? , TYPE = ? , POINT = ? + , TOTAL = ? , INSERT_USER = ? , INSERT_DATETIME = ? , UPDATE_USER = ? diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql index fba9e04af..3063beabb 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_insert.sql @@ -5,6 +5,7 @@ HISTORY_NO , ACTIVITY_NO , TYPE , POINT + , TOTAL , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -21,4 +22,5 @@ HISTORY_NO , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql index fba9e04af..3063beabb 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_raw_insert.sql @@ -5,6 +5,7 @@ HISTORY_NO , ACTIVITY_NO , TYPE , POINT + , TOTAL , INSERT_USER , INSERT_DATETIME , UPDATE_USER @@ -21,4 +22,5 @@ HISTORY_NO , ? , ? , ? + , ? ); diff --git a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql index e67e9d91a..ec002a027 100644 --- a/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql +++ b/src/main/resources/org/support/project/knowledge/dao/sql/PointUserHistoriesDao/PointUserHistoriesDao_update.sql @@ -3,6 +3,7 @@ SET ACTIVITY_NO = ? , TYPE = ? , POINT = ? + , TOTAL = ? , INSERT_USER = ? , INSERT_DATETIME = ? , UPDATE_USER = ? diff --git a/src/main/resources/org/support/project/knowledge/database/ddl.sql b/src/main/resources/org/support/project/knowledge/database/ddl.sql index 1fe60dc25..2dba85486 100644 --- a/src/main/resources/org/support/project/knowledge/database/ddl.sql +++ b/src/main/resources/org/support/project/knowledge/database/ddl.sql @@ -6,7 +6,8 @@ create table POINT_USER_HISTORIES ( , HISTORY_NO BIGINT not null , ACTIVITY_NO BIGINT not null , TYPE integer not null - , POINT integer + , POINT integer not null + , TOTAL integer not null , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer @@ -24,6 +25,7 @@ create table POINT_KNOWLEDGE_HISTORIES ( , ACTIVITY_NO BIGINT not null , TYPE integer not null , POINT integer not null + , TOTAL integer not null , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer @@ -854,6 +856,7 @@ comment on column POINT_USER_HISTORIES.HISTORY_NO is '履歴番号'; comment on column POINT_USER_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; comment on column POINT_USER_HISTORIES.TYPE is '獲得のタイプ'; comment on column POINT_USER_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_USER_HISTORIES.TOTAL is 'トータルポイント'; comment on column POINT_USER_HISTORIES.INSERT_USER is '登録ユーザ'; comment on column POINT_USER_HISTORIES.INSERT_DATETIME is '登録日時'; comment on column POINT_USER_HISTORIES.UPDATE_USER is '更新ユーザ'; @@ -866,6 +869,7 @@ comment on column POINT_KNOWLEDGE_HISTORIES.HISTORY_NO is '履歴番号'; comment on column POINT_KNOWLEDGE_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; comment on column POINT_KNOWLEDGE_HISTORIES.TYPE is '獲得のタイプ'; comment on column POINT_KNOWLEDGE_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_KNOWLEDGE_HISTORIES.TOTAL is 'トータルポイント'; comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_USER is '登録ユーザ'; comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_DATETIME is '登録日時'; comment on column POINT_KNOWLEDGE_HISTORIES.UPDATE_USER is '更新ユーザ'; diff --git a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql index 85d8ed223..e7d784738 100644 --- a/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql +++ b/src/main/resources/org/support/project/knowledge/deploy/v1_11_0/migrate_v1_11_2.sql @@ -6,7 +6,8 @@ create table POINT_USER_HISTORIES ( , HISTORY_NO BIGINT not null , ACTIVITY_NO BIGINT not null , TYPE integer not null - , POINT integer + , POINT integer not null + , TOTAL integer not null , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer @@ -24,6 +25,7 @@ create table POINT_KNOWLEDGE_HISTORIES ( , ACTIVITY_NO BIGINT not null , TYPE integer not null , POINT integer not null + , TOTAL integer not null , INSERT_USER integer , INSERT_DATETIME timestamp , UPDATE_USER integer @@ -86,13 +88,13 @@ create table BADGES ( , constraint BADGES_PKC primary key (NO) ) ; - comment on table POINT_USER_HISTORIES is 'ユーザのポイント獲得履歴'; comment on column POINT_USER_HISTORIES.USER_ID is 'ユーザID'; comment on column POINT_USER_HISTORIES.HISTORY_NO is '履歴番号'; comment on column POINT_USER_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; comment on column POINT_USER_HISTORIES.TYPE is '獲得のタイプ'; comment on column POINT_USER_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_USER_HISTORIES.TOTAL is 'トータルポイント'; comment on column POINT_USER_HISTORIES.INSERT_USER is '登録ユーザ'; comment on column POINT_USER_HISTORIES.INSERT_DATETIME is '登録日時'; comment on column POINT_USER_HISTORIES.UPDATE_USER is '更新ユーザ'; @@ -105,6 +107,7 @@ comment on column POINT_KNOWLEDGE_HISTORIES.HISTORY_NO is '履歴番号'; comment on column POINT_KNOWLEDGE_HISTORIES.ACTIVITY_NO is 'アクティビティ番号'; comment on column POINT_KNOWLEDGE_HISTORIES.TYPE is '獲得のタイプ'; comment on column POINT_KNOWLEDGE_HISTORIES.POINT is '獲得ポイント'; +comment on column POINT_KNOWLEDGE_HISTORIES.TOTAL is 'トータルポイント'; comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_USER is '登録ユーザ'; comment on column POINT_KNOWLEDGE_HISTORIES.INSERT_DATETIME is '登録日時'; comment on column POINT_KNOWLEDGE_HISTORIES.UPDATE_USER is '更新ユーザ'; From 026a7d6d33b3c51cd52a4fd663e50a4694586d8b Mon Sep 17 00:00:00 2001 From: Koda Date: Tue, 5 Sep 2017 23:48:22 +0900 Subject: [PATCH 052/138] #840 Add chart.js --- Third_party_license.txt | 3 ++ bower.json | 3 +- .../WEB-INF/views/open/account/account.jsp | 8 +++-- .../WEB-INF/views/open/license/index.jsp | 3 ++ src/main/webapp/js/account-page.js | 29 +++++++++++++++++++ 5 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/main/webapp/js/account-page.js diff --git a/Third_party_license.txt b/Third_party_license.txt index de0235b13..cf50d436c 100644 --- a/Third_party_license.txt +++ b/Third_party_license.txt @@ -202,5 +202,8 @@ - License: [BSD License] https://github.com/kpdecker/jsdiff/blob/master/LICENSE - project-url: https://github.com/kpdecker/jsdiff +- Chart.js + - License: [MIT License] https://github.com/chartjs/Chart.js/blob/master/LICENSE.md + - project-url: https://github.com/chartjs/Chart.js \ No newline at end of file diff --git a/bower.json b/bower.json index b223fe2b6..dbe3860f6 100644 --- a/bower.json +++ b/bower.json @@ -35,7 +35,8 @@ "bootstrap-table": "1.11.1", "tableExport.jquery.plugin": "1.8.1", "diff2html": "2.3.0", - "jsdiff": "3.2.0" + "jsdiff": "3.2.0", + "chart.js": "2.6.0" }, "devDependencies": {}, "resolutions": { diff --git a/src/main/webapp/WEB-INF/views/open/account/account.jsp b/src/main/webapp/WEB-INF/views/open/account/account.jsp index 7f8c20ffa..625a715ec 100644 --- a/src/main/webapp/WEB-INF/views/open/account/account.jsp +++ b/src/main/webapp/WEB-INF/views/open/account/account.jsp @@ -21,7 +21,11 @@ + + + + @@ -70,12 +74,10 @@
- CPのグラフ +
-
-