fix ticket log

Signed-off-by: Sola <dev@sola.love>
This commit is contained in:
Sola
2018-08-28 20:54:46 +08:00
parent 427c713e50
commit 97e5319e0f
3 changed files with 49 additions and 20 deletions

View File

@@ -17,23 +17,24 @@
package love.sola.netsupport.api.stuff; package love.sola.netsupport.api.stuff;
import org.apache.commons.lang3.time.DateUtils;
import org.hibernate.Session;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.query.AuditEntity;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import love.sola.netsupport.api.API; import love.sola.netsupport.api.API;
import love.sola.netsupport.enums.Access; import love.sola.netsupport.enums.Access;
import love.sola.netsupport.pojo.Ticket; import love.sola.netsupport.pojo.Ticket;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.session.WxSession; import love.sola.netsupport.session.WxSession;
import love.sola.netsupport.sql.SQLCore; import love.sola.netsupport.sql.SQLCore;
import love.sola.netsupport.sql.TableTicket; import love.sola.netsupport.sql.TableTicket;
import love.sola.netsupport.wechat.Command; import love.sola.netsupport.wechat.Command;
import org.apache.commons.lang3.time.DateUtils;
import org.hibernate.Session;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.query.AuditEntity;
import org.hibernate.proxy.HibernateProxy;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/** /**
* @author Sola {@literal <dev@sola.love>} * @author Sola {@literal <dev@sola.love>}
@@ -48,6 +49,7 @@ public class TicketLog extends API {
authorize = Command.LOGIN; authorize = Command.LOGIN;
} }
@SuppressWarnings("unchecked")
@Override @Override
protected Object process(HttpServletRequest req, WxSession session) throws Exception { protected Object process(HttpServletRequest req, WxSession session) throws Exception {
int first; int first;
@@ -61,13 +63,14 @@ public class TicketLog extends API {
end = DateUtils.addDays(end, 1); end = DateUtils.addDays(end, 1);
try (Session s = SQLCore.sf.openSession()) { try (Session s = SQLCore.sf.openSession()) {
AuditReader reader = TableTicket.getAuditReader(s); AuditReader reader = TableTicket.getAuditReader(s);
return reader.createQuery() List<Object[]> resultList = reader.createQuery()
.forRevisionsOfEntity(Ticket.class, false, true) .forRevisionsOfEntity(Ticket.class, false, true)
.addOrder(AuditEntity.revisionNumber().desc()) .addOrder(AuditEntity.revisionNumber().desc())
.add(AuditEntity.revisionProperty("timestamp").between(start.getTime(), end.getTime())) .add(AuditEntity.revisionProperty("timestamp").between(start.getTime(), end.getTime()))
.setFirstResult(first) .setFirstResult(first)
.setMaxResults(limit) .setMaxResults(limit)
.getResultList(); .getResultList();
return TableTicket.initializeTickets(resultList);
} }
} }

View File

@@ -17,8 +17,6 @@
package love.sola.netsupport.api.stuff; package love.sola.netsupport.api.stuff;
import javax.servlet.http.HttpServletRequest;
import love.sola.netsupport.api.API; import love.sola.netsupport.api.API;
import love.sola.netsupport.api.Error; import love.sola.netsupport.api.Error;
import love.sola.netsupport.enums.Access; import love.sola.netsupport.enums.Access;
@@ -26,6 +24,9 @@ import love.sola.netsupport.session.WxSession;
import love.sola.netsupport.sql.TableTicket; import love.sola.netsupport.sql.TableTicket;
import love.sola.netsupport.wechat.Command; import love.sola.netsupport.wechat.Command;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/** /**
* @author Sola {@literal <dev@sola.love>} * @author Sola {@literal <dev@sola.love>}
*/ */
@@ -43,7 +44,8 @@ public class TicketTrack extends API {
if (tid == null) { if (tid == null) {
return Error.PARAMETER_REQUIRED; return Error.PARAMETER_REQUIRED;
} }
return TableTicket.track(Integer.parseInt(tid)); List<Object[]> results = TableTicket.track(Integer.parseInt(tid));
return TableTicket.initializeTickets(results);
} }
} }

View File

@@ -17,6 +17,7 @@
package love.sola.netsupport.sql; package love.sola.netsupport.sql;
import love.sola.netsupport.pojo.Operator;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.criterion.Order; import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections; import org.hibernate.criterion.Projections;
@@ -29,6 +30,7 @@ import java.util.List;
import love.sola.netsupport.enums.Status; import love.sola.netsupport.enums.Status;
import love.sola.netsupport.pojo.Ticket; import love.sola.netsupport.pojo.Ticket;
import love.sola.netsupport.pojo.User; import love.sola.netsupport.pojo.User;
import org.hibernate.proxy.HibernateProxy;
/** /**
* @author Sola {@literal <dev@sola.love>} * @author Sola {@literal <dev@sola.love>}
@@ -114,4 +116,26 @@ public class TableTicket extends SQLCore {
} }
} }
/**
* this is a hacky method to initialize all related entities of ticket
*/
public static List<Object[]> initializeTickets(List<Object[]> resultList) {
for (Object[] result : resultList) {
Ticket value = ((Ticket) result[0]);
HibernateProxy proxiedUser = (HibernateProxy) value.getUser();
if (proxiedUser != null) {
User unproxiedUser = ((User) proxiedUser.getHibernateLazyInitializer()
.getImplementation());
value.setUser(unproxiedUser);
}
HibernateProxy proxiedOperator = (HibernateProxy) value.getOperator();
if (proxiedOperator != null) {
Operator unproxiedOperator = ((Operator) proxiedOperator.getHibernateLazyInitializer()
.getImplementation());
value.setOperator(unproxiedOperator);
}
}
return resultList;
}
} }