From 62f14207fd3e1433e6390b4a758dbef59ff8a377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=A7=E6=96=8C?= <857169072@qq.com> Date: Tue, 18 Oct 2016 13:49:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=B0=E5=BD=95=E5=85=AC?= =?UTF-8?q?=E4=BC=97=E5=8F=B7=E5=90=84=E7=A7=8D=E8=8F=9C=E5=8D=95=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6&=E5=90=84=E7=B1=BB=E6=B6=88=E6=81=AF=EF=BC=8CSQL?= =?UTF-8?q?=E8=AF=A6=E8=A7=81doc/sql.sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/sql.sql | 335 ++++++++++++++++++ .../weixin/demo/WeixinMsgController.java | 16 + src/main/java/com/wechat/record/BeanUtil.java | 118 ++++++ .../com/wechat/record/RecordController.java | 216 +++++++++++ .../com/wechat/record/wechat/EventCustom.java | 20 ++ .../com/wechat/record/wechat/EventFollow.java | 20 ++ .../wechat/record/wechat/EventLocation.java | 46 +++ .../com/wechat/record/wechat/EventMass.java | 20 ++ .../com/wechat/record/wechat/EventMenu.java | 20 ++ .../com/wechat/record/wechat/EventQrCode.java | 20 ++ .../com/wechat/record/wechat/EventShake.java | 20 ++ .../com/wechat/record/wechat/EventSpeech.java | 20 ++ .../wechat/record/wechat/EventTemplate.java | 20 ++ .../com/wechat/record/wechat/MsgImage.java | 20 ++ .../com/wechat/record/wechat/MsgLink.java | 55 +++ .../com/wechat/record/wechat/MsgLocation.java | 31 ++ .../wechat/record/wechat/MsgShortVideo.java | 20 ++ .../com/wechat/record/wechat/MsgText.java | 65 ++++ .../com/wechat/record/wechat/MsgVideo.java | 20 ++ .../com/wechat/record/wechat/MsgVoice.java | 20 ++ 20 files changed, 1122 insertions(+) create mode 100755 doc/sql.sql mode change 100644 => 100755 src/main/java/com/jfinal/weixin/demo/WeixinMsgController.java create mode 100755 src/main/java/com/wechat/record/BeanUtil.java create mode 100755 src/main/java/com/wechat/record/RecordController.java create mode 100755 src/main/java/com/wechat/record/wechat/EventCustom.java create mode 100755 src/main/java/com/wechat/record/wechat/EventFollow.java create mode 100755 src/main/java/com/wechat/record/wechat/EventLocation.java create mode 100755 src/main/java/com/wechat/record/wechat/EventMass.java create mode 100755 src/main/java/com/wechat/record/wechat/EventMenu.java create mode 100755 src/main/java/com/wechat/record/wechat/EventQrCode.java create mode 100755 src/main/java/com/wechat/record/wechat/EventShake.java create mode 100755 src/main/java/com/wechat/record/wechat/EventSpeech.java create mode 100755 src/main/java/com/wechat/record/wechat/EventTemplate.java create mode 100755 src/main/java/com/wechat/record/wechat/MsgImage.java create mode 100755 src/main/java/com/wechat/record/wechat/MsgLink.java create mode 100755 src/main/java/com/wechat/record/wechat/MsgLocation.java create mode 100755 src/main/java/com/wechat/record/wechat/MsgShortVideo.java create mode 100755 src/main/java/com/wechat/record/wechat/MsgText.java create mode 100755 src/main/java/com/wechat/record/wechat/MsgVideo.java create mode 100755 src/main/java/com/wechat/record/wechat/MsgVoice.java diff --git a/doc/sql.sql b/doc/sql.sql new file mode 100755 index 0000000..e7d1c56 --- /dev/null +++ b/doc/sql.sql @@ -0,0 +1,335 @@ +/* +Navicat MySQL Data Transfer + +Source Server : media +Source Server Version : 50623 +Source Host : 563aa99e32727.sh.cdb.myqcloud.com:4202 +Source Database : test + +Target Server Type : MYSQL +Target Server Version : 50623 +File Encoding : 65001 + +Date: 2016-10-13 11:04:24 +*/ + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for event_custom +-- ---------------------------- +DROP TABLE IF EXISTS `event_custom`; +CREATE TABLE `event_custom` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `kfAccount` varchar(255) DEFAULT NULL, + `toKfAccount` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for event_follow +-- ---------------------------- +DROP TABLE IF EXISTS `event_follow`; +CREATE TABLE `event_follow` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `type` varchar(60) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for event_location +-- ---------------------------- +DROP TABLE IF EXISTS `event_location`; +CREATE TABLE `event_location` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(50) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `eventKey` varchar(60) DEFAULT NULL, + `type` varchar(60) DEFAULT NULL, + `latitude` varchar(20) DEFAULT NULL, + `longitude` varchar(20) DEFAULT NULL, + `precision` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1544 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for event_mass +-- ---------------------------- +DROP TABLE IF EXISTS `event_mass`; +CREATE TABLE `event_mass` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `status` varchar(60) DEFAULT NULL, + `totalCount` varchar(20) DEFAULT NULL, + `filterCount` varchar(20) DEFAULT NULL, + `sentCount` varchar(20) DEFAULT NULL, + `errorCount` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for event_menu +-- ---------------------------- +DROP TABLE IF EXISTS `event_menu`; +CREATE TABLE `event_menu` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `eventKey` varchar(500) DEFAULT NULL, + `type` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1297 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for event_qr_code +-- ---------------------------- +DROP TABLE IF EXISTS `event_qr_code`; +CREATE TABLE `event_qr_code` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `eventKey` varchar(60) DEFAULT NULL, + `ticket` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for event_shake +-- ---------------------------- +DROP TABLE IF EXISTS `event_shake`; +CREATE TABLE `event_shake` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `uuid` varchar(60) DEFAULT NULL, + `major` varchar(60) DEFAULT NULL, + `minor` varchar(60) DEFAULT NULL, + `distance` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='摇一摇'; + +-- ---------------------------- +-- Table structure for event_speech +-- ---------------------------- +DROP TABLE IF EXISTS `event_speech`; +CREATE TABLE `event_speech` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `mediaId` varchar(100) DEFAULT NULL, + `format` varchar(60) DEFAULT NULL, + `recognition` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for event_template +-- ---------------------------- +DROP TABLE IF EXISTS `event_template`; +CREATE TABLE `event_template` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `status` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_image +-- ---------------------------- +DROP TABLE IF EXISTS `msg_image`; +CREATE TABLE `msg_image` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `picUrl` varchar(255) DEFAULT NULL, + `mediaId` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_image_miao +-- ---------------------------- +DROP TABLE IF EXISTS `msg_image_miao`; +CREATE TABLE `msg_image_miao` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `picUrl` varchar(255) DEFAULT NULL, + `mediaId` varchar(100) DEFAULT NULL, + `picId` varchar(60) DEFAULT NULL, + `picCode` varchar(60) DEFAULT NULL, + `resultPicUrl` varchar(255) DEFAULT NULL, + `resultPicCode` varchar(60) DEFAULT NULL, + `result` varchar(600) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_link +-- ---------------------------- +DROP TABLE IF EXISTS `msg_link`; +CREATE TABLE `msg_link` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `description` text, + `url` text, + `status` varchar(20) DEFAULT NULL, + `readAmount` int(11) DEFAULT NULL, + `likeAmount` int(11) DEFAULT NULL, + `sort` varchar(20) DEFAULT '0', + `groupId` varchar(60) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_location +-- ---------------------------- +DROP TABLE IF EXISTS `msg_location`; +CREATE TABLE `msg_location` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `label` varchar(20) DEFAULT NULL, + `location_Y` varchar(20) DEFAULT NULL, + `location_X` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `event` varchar(60) DEFAULT NULL, + `latitude` varchar(20) DEFAULT NULL, + `longitude` varchar(20) DEFAULT NULL, + `precision` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_short_video +-- ---------------------------- +DROP TABLE IF EXISTS `msg_short_video`; +CREATE TABLE `msg_short_video` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `mediaId` varchar(100) DEFAULT NULL, + `thumbMediaId` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_text +-- ---------------------------- +DROP TABLE IF EXISTS `msg_text`; +CREATE TABLE `msg_text` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `content` varchar(255) DEFAULT NULL, + `fromUserNickName` varchar(255) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=149 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_text_reply +-- ---------------------------- +DROP TABLE IF EXISTS `msg_text_reply`; +CREATE TABLE `msg_text_reply` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `content` varchar(255) DEFAULT NULL, + `fromUserNickName` varchar(255) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_video +-- ---------------------------- +DROP TABLE IF EXISTS `msg_video`; +CREATE TABLE `msg_video` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `mediaId` varchar(100) DEFAULT NULL, + `thumbMediaId` varchar(60) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for msg_voice +-- ---------------------------- +DROP TABLE IF EXISTS `msg_voice`; +CREATE TABLE `msg_voice` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `msgId` varchar(60) DEFAULT NULL, + `fromUserName` varchar(100) DEFAULT NULL, + `toUserName` varchar(100) DEFAULT NULL, + `createTime` varchar(20) DEFAULT NULL, + `msgType` varchar(255) DEFAULT NULL, + `mediaId` varchar(100) DEFAULT NULL, + `format` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/src/main/java/com/jfinal/weixin/demo/WeixinMsgController.java b/src/main/java/com/jfinal/weixin/demo/WeixinMsgController.java old mode 100644 new mode 100755 index 4a98924..446c401 --- a/src/main/java/com/jfinal/weixin/demo/WeixinMsgController.java +++ b/src/main/java/com/jfinal/weixin/demo/WeixinMsgController.java @@ -13,6 +13,7 @@ import com.jfinal.weixin.sdk.msg.in.event.*; import com.jfinal.weixin.sdk.msg.in.speech_recognition.InSpeechRecognitionResults; import com.jfinal.weixin.sdk.msg.out.OutCustomMsg; import com.jfinal.weixin.sdk.msg.out.OutTextMsg; +import com.wechat.record.RecordController; /** * 将此 DemoController 在YourJFinalConfig 中注册路由, @@ -27,6 +28,7 @@ public class WeixinMsgController extends MsgControllerAdapter { protected void processInTextMsg(InTextMsg inTextMsg) { + RecordController.recordMsgText(inTextMsg); //转发给多客服PC客户端 OutCustomMsg outCustomMsg = new OutCustomMsg(inTextMsg); render(outCustomMsg); @@ -35,6 +37,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInVoiceMsg(InVoiceMsg inVoiceMsg) { + RecordController.recordMsgVoice(inVoiceMsg); //转发给多客服PC客户端 OutCustomMsg outCustomMsg = new OutCustomMsg(inVoiceMsg); render(outCustomMsg); @@ -43,6 +46,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInVideoMsg(InVideoMsg inVideoMsg) { + RecordController.recordMsgVideo(inVideoMsg); //转发给多客服PC客户端 OutCustomMsg outCustomMsg = new OutCustomMsg(inVideoMsg); render(outCustomMsg); @@ -51,6 +55,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInShortVideoMsg(InShortVideoMsg inShortVideoMsg) { + RecordController.recordMsgShortVideo(inShortVideoMsg); //转发给多客服PC客户端 OutCustomMsg outCustomMsg = new OutCustomMsg(inShortVideoMsg); render(outCustomMsg); @@ -59,6 +64,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInLocationMsg(InLocationMsg inLocationMsg) { + RecordController.recordMsgLocation(inLocationMsg); //转发给多客服PC客户端 OutCustomMsg outCustomMsg = new OutCustomMsg(inLocationMsg); render(outCustomMsg); @@ -67,6 +73,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInLinkMsg(InLinkMsg inLinkMsg) { + RecordController.recordMsgLink(inLinkMsg); //转发给多客服PC客户端 OutCustomMsg outCustomMsg = new OutCustomMsg(inLinkMsg); render(outCustomMsg); @@ -75,12 +82,14 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInCustomEvent(InCustomEvent inCustomEvent) { + RecordController.recordEventCustom(inCustomEvent); logger.debug("测试方法:processInCustomEvent()"); renderNull(); } protected void processInImageMsg(InImageMsg inImageMsg) { + RecordController.recordMsgImage(inImageMsg); //转发给多客服PC客户端 OutCustomMsg outCustomMsg = new OutCustomMsg(inImageMsg); render(outCustomMsg); @@ -91,6 +100,7 @@ public class WeixinMsgController extends MsgControllerAdapter { */ protected void processInFollowEvent(InFollowEvent inFollowEvent) { + RecordController.recordEventFollow(inFollowEvent); if (InFollowEvent.EVENT_INFOLLOW_SUBSCRIBE.equals(inFollowEvent.getEvent())) { logger.debug("关注:" + inFollowEvent.getFromUserName()); @@ -108,6 +118,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInQrCodeEvent(InQrCodeEvent inQrCodeEvent) { + RecordController.recordEventQrCode(inQrCodeEvent); if (InQrCodeEvent.EVENT_INQRCODE_SUBSCRIBE.equals(inQrCodeEvent.getEvent())) { logger.debug("扫码未关注:" + inQrCodeEvent.getFromUserName()); @@ -124,6 +135,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInLocationEvent(InLocationEvent inLocationEvent) { + RecordController.recordEventLocation(inLocationEvent); logger.debug("发送地理位置事件:" + inLocationEvent.getFromUserName()); OutTextMsg outMsg = new OutTextMsg(inLocationEvent); outMsg.setContent("地理位置是:" + inLocationEvent.getLatitude()); @@ -133,6 +145,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInMassEvent(InMassEvent inMassEvent) { + RecordController.recordEventMass(inMassEvent); logger.debug("测试方法:processInMassEvent()"); renderNull(); } @@ -142,6 +155,7 @@ public class WeixinMsgController extends MsgControllerAdapter { */ protected void processInMenuEvent(InMenuEvent inMenuEvent) { + RecordController.recordEventMenu(inMenuEvent); logger.debug("菜单事件:" + inMenuEvent.getFromUserName()); OutTextMsg outMsg = new OutTextMsg(inMenuEvent); outMsg.setContent("菜单事件内容是:" + inMenuEvent.getEventKey()); @@ -151,6 +165,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInSpeechRecognitionResults(InSpeechRecognitionResults inSpeechRecognitionResults) { + RecordController.recordEventSpeech(inSpeechRecognitionResults); logger.debug("语音识别事件:" + inSpeechRecognitionResults.getFromUserName()); OutTextMsg outMsg = new OutTextMsg(inSpeechRecognitionResults); outMsg.setContent("语音识别内容是:" + inSpeechRecognitionResults.getRecognition()); @@ -160,6 +175,7 @@ public class WeixinMsgController extends MsgControllerAdapter { @Override protected void processInTemplateMsgEvent(InTemplateMsgEvent inTemplateMsgEvent) { + RecordController.recordEventTemplate(inTemplateMsgEvent); logger.debug("测试方法:processInTemplateMsgEvent()"); renderNull(); } diff --git a/src/main/java/com/wechat/record/BeanUtil.java b/src/main/java/com/wechat/record/BeanUtil.java new file mode 100755 index 0000000..877f22b --- /dev/null +++ b/src/main/java/com/wechat/record/BeanUtil.java @@ -0,0 +1,118 @@ +/** + * + */ +package com.wechat.record; + +import java.beans.BeanInfo; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * + */ +public class BeanUtil { + + public static Map bean2Map(T o) throws Exception { + if (null == o) { + return null; + } + Map result = new HashMap(); + BeanInfo beanInfo = Introspector.getBeanInfo(o.getClass()); + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + for (PropertyDescriptor property : propertyDescriptors) { + String key = property.getName(); + // 过滤class属性 + if (!key.equals("class")) { + // 得到property对应的getter方法 + Method getter = property.getReadMethod(); + Object value = getter.invoke(o); + if (null != value) { + result.put(key, value); + } + } + } + return result; + } + + /** + * 将map转换为bean + * + * @param type + * @param map + * @return + * @throws Exception + */ + public static Object map2Bean(Class type, Map map) throws Exception { + BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性 + Object obj = type.newInstance(); // 创建 JavaBean 对象 + + // 给 JavaBean 对象的属性赋值 + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + for (int i = 0; i < propertyDescriptors.length; i++) { + PropertyDescriptor descriptor = propertyDescriptors[i]; + String propertyName = descriptor.getName(); + + if (map.containsKey(propertyName)) { + // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。 + Object value = map.get(propertyName); + + Object[] args = new Object[1]; + args[0] = value; + + descriptor.getWriteMethod().invoke(obj, args); + } + } + return obj; + } + + /** + * 将map转换为bean列表 + * + * @param type + * @param list + * @return + * @throws Exception + */ + public static List map2BeanList(Class type, List> list) throws Exception { + List objList = new ArrayList(); + if (null == list || 0 == list.size()) { + return objList; + } + for (Map map : list) { + objList.add(map2Bean(type, map)); + } + return objList; + } + + public static String bean2String(T o) throws Exception { + if (null == o) { + return null; + } + StringBuffer str = new StringBuffer(); + BeanInfo beanInfo = Introspector.getBeanInfo(o.getClass()); + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + for (PropertyDescriptor property : propertyDescriptors) { + String key = property.getName(); + // 过滤class属性 + if (!key.equals("class")) { + // 得到property对应的getter方法 + Method getter = property.getReadMethod(); + Object value = getter.invoke(o); + if (null != value) { + str.append(key); + str.append("="); + str.append(value); + str.append("&"); + } + } + } + return str.toString(); + } + +} diff --git a/src/main/java/com/wechat/record/RecordController.java b/src/main/java/com/wechat/record/RecordController.java new file mode 100755 index 0000000..505b407 --- /dev/null +++ b/src/main/java/com/wechat/record/RecordController.java @@ -0,0 +1,216 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:34:05 + * + */ +package com.wechat.record; + +import com.jfinal.core.Controller; +import com.jfinal.weixin.sdk.msg.in.InImageMsg; +import com.jfinal.weixin.sdk.msg.in.InLinkMsg; +import com.jfinal.weixin.sdk.msg.in.InLocationMsg; +import com.jfinal.weixin.sdk.msg.in.InShortVideoMsg; +import com.jfinal.weixin.sdk.msg.in.InTextMsg; +import com.jfinal.weixin.sdk.msg.in.InVideoMsg; +import com.jfinal.weixin.sdk.msg.in.InVoiceMsg; +import com.jfinal.weixin.sdk.msg.in.event.InCustomEvent; +import com.jfinal.weixin.sdk.msg.in.event.InFollowEvent; +import com.jfinal.weixin.sdk.msg.in.event.InLocationEvent; +import com.jfinal.weixin.sdk.msg.in.event.InMassEvent; +import com.jfinal.weixin.sdk.msg.in.event.InMenuEvent; +import com.jfinal.weixin.sdk.msg.in.event.InQrCodeEvent; +import com.jfinal.weixin.sdk.msg.in.event.InShakearoundUserShakeEvent; +import com.jfinal.weixin.sdk.msg.in.event.InTemplateMsgEvent; +import com.jfinal.weixin.sdk.msg.in.speech_recognition.InSpeechRecognitionResults; +import com.wechat.record.wechat.EventCustom; +import com.wechat.record.wechat.EventFollow; +import com.wechat.record.wechat.EventLocation; +import com.wechat.record.wechat.EventMass; +import com.wechat.record.wechat.EventMenu; +import com.wechat.record.wechat.EventQrCode; +import com.wechat.record.wechat.EventShake; +import com.wechat.record.wechat.EventSpeech; +import com.wechat.record.wechat.EventTemplate; +import com.wechat.record.wechat.MsgImage; +import com.wechat.record.wechat.MsgLink; +import com.wechat.record.wechat.MsgLocation; +import com.wechat.record.wechat.MsgShortVideo; +import com.wechat.record.wechat.MsgText; +import com.wechat.record.wechat.MsgVideo; +import com.wechat.record.wechat.MsgVoice; + +/** + * + * @ProjectName:wechatplat + * @ClassName:RecordController @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:34:05 + * + */ +public class RecordController extends Controller { + public static void recordEventCustom(InCustomEvent record) { + EventCustom entity = new EventCustom(); + entity.set("createTime", record.getCreateTime()); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventFollow(InFollowEvent record) { + EventFollow entity = new EventFollow(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventLocation(InLocationEvent record) { + EventLocation entity = new EventLocation(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventMass(InMassEvent record) { + EventMass entity = new EventMass(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventMenu(InMenuEvent record) { + EventMenu entity = new EventMenu(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventQrCode(InQrCodeEvent record) { + EventQrCode entity = new EventQrCode(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventShake(InShakearoundUserShakeEvent record) { + EventShake entity = new EventShake(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventSpeech(InSpeechRecognitionResults record) { + EventSpeech entity = new EventSpeech(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordEventTemplate(InTemplateMsgEvent record) { + EventTemplate entity = new EventTemplate(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordMsgLocation(InLocationMsg record) { + MsgLocation entity = new MsgLocation(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordMsgText(InTextMsg record) { + MsgText entity = new MsgText(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordMsgImage(InImageMsg record) { + MsgImage entity = new MsgImage(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordMsgLink(InLinkMsg record) { + MsgLink entity = new MsgLink(); + entity.set("status","STAT0101"); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + // 组装链接 + entity.set("url",entity.getStr("url")); + + entity.save(); + } + + public static void recordMsgShortVideo(InShortVideoMsg record) { + MsgShortVideo entity = new MsgShortVideo(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordMsgVideo(InVideoMsg record) { + MsgVideo entity = new MsgVideo(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } + + public static void recordMsgVoice(InVoiceMsg record) { + MsgVoice entity = new MsgVoice(); + try { + entity._setAttrs(BeanUtil.bean2Map(record)); + } catch (Exception e) { + e.printStackTrace(); + } + entity.save(); + } +} diff --git a/src/main/java/com/wechat/record/wechat/EventCustom.java b/src/main/java/com/wechat/record/wechat/EventCustom.java new file mode 100755 index 0000000..a9476e3 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventCustom.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventCustom extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/EventFollow.java b/src/main/java/com/wechat/record/wechat/EventFollow.java new file mode 100755 index 0000000..a639868 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventFollow.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventFollow extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/EventLocation.java b/src/main/java/com/wechat/record/wechat/EventLocation.java new file mode 100755 index 0000000..e38e012 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventLocation.java @@ -0,0 +1,46 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import java.util.Date; +import java.util.List; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventLocation extends Model { + public static EventLocation me = new EventLocation(); + + public EventLocation queryByOpenId(String openId) { + List locations = me + .find("select * from event_location where fromUserName='" + openId + "' order by createTime desc "); + if (null == locations || 0 == locations.size()) { + return null; + } + return locations.get(0); + } + + + public EventLocation saveTmpLocation(String openId, String address, String latitude, String longitude) { + EventLocation location = new EventLocation(); + location.set("fromUserName", openId); + location.set("createTime", new Date()); + location.set("type", "SELF"); + location.set("latitude", latitude); + location.set("longitude", longitude); + location.set("msgType", address); + location.save(); + return location; + } +} diff --git a/src/main/java/com/wechat/record/wechat/EventMass.java b/src/main/java/com/wechat/record/wechat/EventMass.java new file mode 100755 index 0000000..15b2398 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventMass.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventMass extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/EventMenu.java b/src/main/java/com/wechat/record/wechat/EventMenu.java new file mode 100755 index 0000000..6042c5d --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventMenu.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventMenu extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/EventQrCode.java b/src/main/java/com/wechat/record/wechat/EventQrCode.java new file mode 100755 index 0000000..cb39db8 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventQrCode.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventQrCode extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/EventShake.java b/src/main/java/com/wechat/record/wechat/EventShake.java new file mode 100755 index 0000000..936d500 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventShake.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventShake extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/EventSpeech.java b/src/main/java/com/wechat/record/wechat/EventSpeech.java new file mode 100755 index 0000000..572e4df --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventSpeech.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventSpeech extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/EventTemplate.java b/src/main/java/com/wechat/record/wechat/EventTemplate.java new file mode 100755 index 0000000..d49b39b --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/EventTemplate.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class EventTemplate extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/MsgImage.java b/src/main/java/com/wechat/record/wechat/MsgImage.java new file mode 100755 index 0000000..c1539e4 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/MsgImage.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class MsgImage extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/MsgLink.java b/src/main/java/com/wechat/record/wechat/MsgLink.java new file mode 100755 index 0000000..d98cb5b --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/MsgLink.java @@ -0,0 +1,55 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import java.io.InputStream; +import java.util.List; + +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Model; +import com.jfinal.plugin.activerecord.Record; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class MsgLink extends Model { + public static MsgLink me = new MsgLink(); + + /** + * 查询 + * + * @param entity + * @return + */ + public List query(MsgLink entity) { + String[] keys = entity._getAttrNames(); + StringBuffer buffer = new StringBuffer("select * from msg_link where 1=1 "); + for (String key : keys) { + buffer.append(" and ").append(key).append("='").append(entity.get(key) + "").append("' "); + } + buffer.append(" order by createTime desc "); + return me.find(buffer.toString()); + } + + public List queryLink(MsgLink entity) { + String[] keys = entity._getAttrNames(); + StringBuffer buffer = new StringBuffer( + "select link.*,cus.nickName,cus.headImgUrl from msg_link link LEFT JOIN cif_customer cus on link.fromUserName = cus.extendId where 1=1 "); + for (String key : keys) { + buffer.append(" and link.").append(key).append("='").append(entity.get(key) + "").append("' "); + } + buffer.append(" order by createTime desc "); + return Db.find(buffer.toString()); + } + + +} diff --git a/src/main/java/com/wechat/record/wechat/MsgLocation.java b/src/main/java/com/wechat/record/wechat/MsgLocation.java new file mode 100755 index 0000000..c2f1bce --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/MsgLocation.java @@ -0,0 +1,31 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import java.util.List; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class MsgLocation extends Model { + public static MsgLocation me = new MsgLocation(); + + public MsgLocation queryByOpenId(String openId) { + List locations = me.find("select * from msg_location where fromUserName='" + openId + "' order by createTime desc "); + if (null == locations || 0 == locations.size()) { + return null; + } + return locations.get(0); + } +} diff --git a/src/main/java/com/wechat/record/wechat/MsgShortVideo.java b/src/main/java/com/wechat/record/wechat/MsgShortVideo.java new file mode 100755 index 0000000..c4fee56 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/MsgShortVideo.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class MsgShortVideo extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/MsgText.java b/src/main/java/com/wechat/record/wechat/MsgText.java new file mode 100755 index 0000000..fe08960 --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/MsgText.java @@ -0,0 +1,65 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import java.util.Date; +import java.util.List; + +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Model; +import com.jfinal.plugin.activerecord.Record; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class MsgText extends Model { + public static MsgText me = new MsgText(); + + /** + * 查询近48小时内的聊天请求 + * + * @return + */ + public static List queryChats() { + return Db.find( + "select count(1) as cou,fromUserNickName,fromUserName,content,createTime from msg_text where msgType='text' and createTime>UNIX_TIMESTAMP(TIMESTAMPADD(DAY,-2,CURRENT_TIMESTAMP)) GROUP BY fromUserName "); + } + + /** + * 查询聊天记录:用type区分类型,reply是客服回复的消息 + * + * @param openId + * @return + */ + public static List query(String openId) { + return me.find("select * from msg_text where fromUserName='" + openId + "'"); + } + + /** + * 回复客户 + * + * @param openId + * @param operatorId + * @param content + */ + public static void reply(String openId, String operatorId, String content) { + // 记录发送消息 + MsgText text = new MsgText(); + text.set("content", content); + text.set("fromUserName", openId); + text.set("toUserName", operatorId); + text.set("createTime",new Date().getTime()); + text.set("msgType", "reply"); + text.save(); + // 给客户发送消息 + } +} diff --git a/src/main/java/com/wechat/record/wechat/MsgVideo.java b/src/main/java/com/wechat/record/wechat/MsgVideo.java new file mode 100755 index 0000000..343b48d --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/MsgVideo.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class MsgVideo extends Model { +} diff --git a/src/main/java/com/wechat/record/wechat/MsgVoice.java b/src/main/java/com/wechat/record/wechat/MsgVoice.java new file mode 100755 index 0000000..4abecda --- /dev/null +++ b/src/main/java/com/wechat/record/wechat/MsgVoice.java @@ -0,0 +1,20 @@ +/** + * @Description: + * @author dimmer + * @date 2015年10月24日 上午9:33:33 + * + */ +package com.wechat.record.wechat; + +import com.jfinal.plugin.activerecord.Model; + +/** + * + * @ProjectName:wechatplat + * @ClassName:EventIn @Description: + * @author: dimmer + * @date: 2015年10月24日 上午9:33:33 + * + */ +public class MsgVoice extends Model { +} -- Gitee