add toolscheck api

This commit is contained in:
Sola
2016-05-22 16:28:15 +08:00
parent abb6b34aeb
commit 402dc2985e
6 changed files with 137 additions and 9 deletions

View File

@@ -20,8 +20,11 @@ package love.sola.netsupport.api;
import love.sola.netsupport.enums.Access;
import love.sola.netsupport.session.WxSession;
import love.sola.netsupport.wechat.Command;
import org.apache.commons.lang3.time.DateUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.Calendar;
import java.util.Date;
/**
* @author Sola {@literal <dev@sola.love>}
@@ -43,4 +46,20 @@ public abstract class API {
'}';
}
public static String getParameterWithDefault(String obj, String def) {
return obj == null ? def : obj;
}
public static Date getParameterAsDate(String obj, Date def) {
return obj == null ? def : new Date(Long.valueOf(obj));
}
public static Date getToday() {
return DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
}
public static Date getDay(Date date) {
return DateUtils.truncate(date, Calendar.DAY_OF_MONTH);
}
}

View File

@@ -131,6 +131,11 @@ public class APIRouter extends HttpServlet {
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
private static WxSession getSession(HttpServletRequest req) {
String t = req.getParameter("token");
if (t == null || t.isEmpty()) return null;

View File

@@ -31,7 +31,6 @@ import org.hibernate.envers.query.AuditEntity;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
@@ -70,8 +69,4 @@ public class TicketLog extends API {
}
}
private static Date getToday() {
return DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
}
}

View File

@@ -0,0 +1,104 @@
/*
* This file is part of WechatTicketSystem.
*
* WechatTicketSystem is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* WechatTicketSystem is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with WechatTicketSystem. If not, see <http://www.gnu.org/licenses/>.
*/
package love.sola.netsupport.api.stuff;
import love.sola.netsupport.api.API;
import love.sola.netsupport.api.Error;
import love.sola.netsupport.enums.Access;
import love.sola.netsupport.enums.Attribute;
import love.sola.netsupport.pojo.Operator;
import love.sola.netsupport.session.WxSession;
import love.sola.netsupport.sql.SQLCore;
import love.sola.netsupport.wechat.Command;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.hibernate.type.IntegerType;
import org.hibernate.type.Type;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
/**
* @author Sola
*/
public class ToolsCheck extends API {
public ToolsCheck() {
url = "/admin/toolscheck";
access = Access.MEMBER;
authorize = Command.LOGIN;
}
@Override
protected Object process(HttpServletRequest req, WxSession session) throws Exception {
if (req.getMethod().equals("GET")) {
return query(req, session);
} else if (req.getMethod().equals("POST")) {
return submit(req, session);
}
return null;
}
private Object submit(HttpServletRequest req, WxSession session) {
Operator op = session.getAttribute(Attribute.OPERATOR);
int status = Integer.valueOf(getParameterWithDefault(req.getParameter("status"), "0"));
String remark = req.getParameter("remark");
if (status != 0 && StringUtils.isBlank(remark)) {
return Error.PARAMETER_REQUIRED;
}
try (Session s = SQLCore.sf.openSession()) {
s.beginTransaction();
s.save(new love.sola.netsupport.pojo.ToolsCheck(
null,
op,
op.getBlock(),
new Date(),
status,
remark
)
);
s.getTransaction().commit();
return Error.OK;
}
}
private Object query(HttpServletRequest req, WxSession session) {
int status = Integer.valueOf(getParameterWithDefault(req.getParameter("status"), "0"));
Date after = getParameterAsDate(req.getParameter("after"), getToday());
Date before = getParameterAsDate(req.getParameter("before"), getToday());
before = DateUtils.addDays(before, 1);
int block = Integer.valueOf(getParameterWithDefault(req.getParameter("block"), "0"));
try (Session s = SQLCore.sf.openSession()) {
Criteria query = s.createCriteria(love.sola.netsupport.pojo.ToolsCheck.class);
query.add(
Restrictions.sqlRestriction(
"{alias}.status & ? = ?",
new Object[]{status, status},
new Type[]{IntegerType.INSTANCE, IntegerType.INSTANCE}
)
);
query.add(Restrictions.between("checkTime", after, before));
if (block != 0) query.add(Restrictions.eq("block", block));
return query.list();
}
}
}

View File

@@ -3,6 +3,7 @@ package love.sola.netsupport.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
import javax.persistence.*;
@@ -17,7 +18,7 @@ import java.util.Date;
@Entity
@Table(name = "toolschk", indexes = {
@Index(columnList = "block,chktime,status"),
@Index(columnList = "block,chktime")
@Index(columnList = "chktime,status")
})
@DynamicInsert
public class ToolsCheck {
@@ -26,11 +27,14 @@ public class ToolsCheck {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne(optional = false)
@JoinColumn(name = "opsid")
private User operator;
@JoinColumn(name = "opsid", nullable = false)
private Operator operator;
@Column(nullable = false)
private Integer block;
@Column(name = "chktime")
@Column(name = "chktime", nullable = false)
private Date checkTime = new Date();
@ColumnDefault("0")
private Integer status = 0;
private String remark;
}

View File

@@ -40,6 +40,7 @@
<mapping class="love.sola.netsupport.pojo.User"/>
<mapping class="love.sola.netsupport.pojo.Ticket"/>
<mapping class="love.sola.netsupport.pojo.Operator"/>
<mapping class="love.sola.netsupport.pojo.ToolsCheck"/>
</session-factory>