mirror of
				https://github.com/ZSCNetSupportDept/WechatTicketSystem.git
				synced 2025-11-01 02:46:19 +08:00 
			
		
		
		
	| @@ -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); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sola
					Sola