add cancel command

This commit is contained in:
Sola
2015-12-11 14:14:42 +08:00
parent 2c121cf353
commit adfaa74084
12 changed files with 135 additions and 57 deletions

View File

@@ -1,5 +1,6 @@
package love.sola.netsupport.wechat;
import love.sola.netsupport.wechat.handler.CancelHandler;
import love.sola.netsupport.wechat.handler.QueryHandler;
import love.sola.netsupport.wechat.handler.RegisterHandler;
import love.sola.netsupport.wechat.handler.SubmitHandler;
@@ -21,6 +22,7 @@ public enum Command {
REGISTER(0, RegisterHandler.class),
QUERY(1, QueryHandler.class),
SUBMIT(2, SubmitHandler.class),
CANCEL(3, CancelHandler.class),
;
private static final Map<Integer, Command> ID_MAP = new HashMap<>();

View File

@@ -0,0 +1,61 @@
package love.sola.netsupport.wechat.handler;
import love.sola.netsupport.enums.Status;
import love.sola.netsupport.pojo.Ticket;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.SQLCore;
import love.sola.netsupport.sql.TableTicket;
import love.sola.netsupport.sql.TableUser;
import love.sola.netsupport.util.ParseUtil;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.WxMpXmlOutNewsMessage;
import me.chanjar.weixin.mp.bean.outxmlbuilder.NewsBuilder;
import org.hibernate.Session;
import java.util.Date;
import java.util.Map;
import static love.sola.netsupport.config.Lang.lang;
/**
* ***********************************************
* Created by Sola on 2015/12/11.
* Don't modify this source without my agreement
* ***********************************************
*/
public class CancelHandler implements WxMpMessageHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
User u = TableUser.getUserByWechat(wxMessage.getFromUserName());
Ticket t = TableTicket.queryLatestOpen(u);
if (t == null) {
return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.content(lang("No_Open_Ticket_Available")).build();
}
try (Session s = SQLCore.sf.openSession()) {
t.setUpdateTime(new Date());
t.setDescription(lang("User_Cancel_Remark"));
t.setStatus(Status.SOLVED);
s.beginTransaction();
s.update(t);
s.getTransaction().commit();
NewsBuilder out = WxMpXmlOutMessage.NEWS().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
item.setTitle(lang("Cancel_Title"));
item.setDescription(ParseUtil.parseTicket(t));
out.addArticle(item);
return out.build();
} catch (Exception e) {
e.printStackTrace();
return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.content(lang("Cancel_Failed")).build();
}
}
}

View File

@@ -1,11 +1,11 @@
package love.sola.netsupport.wechat.handler;
import love.sola.netsupport.api.Authorize;
import love.sola.netsupport.enums.Status;
import love.sola.netsupport.pojo.Ticket;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.TableTicket;
import love.sola.netsupport.sql.TableUser;
import love.sola.netsupport.util.ParseUtil;
import love.sola.netsupport.wechat.Command;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
@@ -16,7 +16,6 @@ import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.WxMpXmlOutNewsMessage;
import me.chanjar.weixin.mp.bean.outxmlbuilder.NewsBuilder;
import java.text.SimpleDateFormat;
import java.util.Map;
import static love.sola.netsupport.config.Lang.format;
@@ -30,12 +29,11 @@ import static love.sola.netsupport.config.Lang.lang;
*/
public class QueryHandler implements WxMpMessageHandler {
public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm EEE");
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
User u = TableUser.getUserByWechat(wxMessage.getFromUserName());
Ticket t = TableTicket.queryLast(u);
Ticket t = TableTicket.queryLatest(u);
if (t == null) {
return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.content(lang("No_Ticket_Available")).build();
@@ -43,20 +41,9 @@ public class QueryHandler implements WxMpMessageHandler {
NewsBuilder out = WxMpXmlOutMessage.NEWS().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
StringBuilder sb = new StringBuilder()
.append(lang("Ticket_Info_Id")).append(t.getId()).append("\n")
.append(lang("Ticket_Info_Desc")).append(t.getDescription()).append("\n")
.append(lang("Ticket_Info_Submit_Time")).append(dateFormat.format(t.getSubmitTime())).append("\n");
if (t.getUpdateTime() != null) {
sb.append(lang("Ticket_Info_Operator")).append(t.getOperator().getId()).append("\n");
sb.append(lang("Ticket_Info_Remark")).append(t.getRemark()).append("\n");
sb.append(lang("Ticket_Info_Update_Time")).append(dateFormat.format(t.getUpdateTime())).append("\n");
}
sb.append(lang("Ticket_Info_Status")).append(Status.getLocalized(t.getStatus())).append("\n");
sb.append(lang("More_Details"));
item.setUrl(format("User_Query_Link", wxMessage.getFromUserName()));
item.setTitle(lang("Query_Title"));
item.setDescription(sb.toString());
item.setDescription(ParseUtil.parseTicket(t) + "\n" + lang("More_Details"));
item.setUrl(format("User_Query_Link", wxMessage.getFromUserName()));
out.addArticle(item);
Authorize.fetchedTime.put(wxMessage.getFromUserName(), System.currentTimeMillis());
Authorize.fetchedCommand.put(wxMessage.getFromUserName(), Command.QUERY);

View File

@@ -31,7 +31,7 @@ public class SubmitHandler implements WxMpMessageHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
User u = TableUser.getUserByWechat(wxMessage.getFromUserName());
Ticket t = TableTicket.queryLastOpen(u);
Ticket t = TableTicket.queryLatestOpen(u);
if (t != null) {
return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.content(lang("Already_Opening_Ticket")).build();