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;
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.enums.Access;
import love.sola.netsupport.pojo.Ticket;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.session.WxSession;
import love.sola.netsupport.sql.SQLCore;
import love.sola.netsupport.sql.TableTicket;
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>}
@@ -48,6 +49,7 @@ public class TicketLog extends API {
authorize = Command.LOGIN;
}
@SuppressWarnings("unchecked")
@Override
protected Object process(HttpServletRequest req, WxSession session) throws Exception {
int first;
@@ -61,13 +63,14 @@ public class TicketLog extends API {
end = DateUtils.addDays(end, 1);
try (Session s = SQLCore.sf.openSession()) {
AuditReader reader = TableTicket.getAuditReader(s);
return reader.createQuery()
.forRevisionsOfEntity(Ticket.class, false, true)
.addOrder(AuditEntity.revisionNumber().desc())
.add(AuditEntity.revisionProperty("timestamp").between(start.getTime(), end.getTime()))
.setFirstResult(first)
.setMaxResults(limit)
.getResultList();
List<Object[]> resultList = reader.createQuery()
.forRevisionsOfEntity(Ticket.class, false, true)
.addOrder(AuditEntity.revisionNumber().desc())
.add(AuditEntity.revisionProperty("timestamp").between(start.getTime(), end.getTime()))
.setFirstResult(first)
.setMaxResults(limit)
.getResultList();
return TableTicket.initializeTickets(resultList);
}
}

View File

@@ -17,8 +17,6 @@
package love.sola.netsupport.api.stuff;
import javax.servlet.http.HttpServletRequest;
import love.sola.netsupport.api.API;
import love.sola.netsupport.api.Error;
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.wechat.Command;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author Sola {@literal <dev@sola.love>}
*/
@@ -43,7 +44,8 @@ public class TicketTrack extends API {
if (tid == null) {
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;
import love.sola.netsupport.pojo.Operator;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
@@ -29,6 +30,7 @@ import java.util.List;
import love.sola.netsupport.enums.Status;
import love.sola.netsupport.pojo.Ticket;
import love.sola.netsupport.pojo.User;
import org.hibernate.proxy.HibernateProxy;
/**
* @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;
}
}