wangxiaoming 6 anni fa
parent
commit
d96e40ae0b
71 ha cambiato i file con 4534 aggiunte e 14 eliminazioni
  1. 29 1
      watero-common-core/src/main/java/com/iamberry/wechat/core/entity/member/Member.java
  2. 3 1
      watero-common-tool/src/main/java/com/iamberry/app/tool/log/RatFWLogger.java
  3. 5 1
      watero-common-web/src/main/java/com/iamberry/common/web/SimpleCORSFilter.java
  4. 20 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/ConfigService.java
  5. 12 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/FirstJoinKeyService.java
  6. 79 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/HomeService.java
  7. 71 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/ImageTextInfoService.java
  8. 39 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/ImageTextMoreService.java
  9. 37 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/KeyWordService.java
  10. 18 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/MenuInfoService.java
  11. 14 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/MenuKeySetService.java
  12. 12 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/TokenService.java
  13. 11 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/WeChatService.java
  14. 7 7
      watero-rst-service/src/main/java/com/iamberry/rst/service/member/mapper/memberMapper.xml
  15. 115 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/ConfigServiceImpl.java
  16. 38 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/FirstJoinKeyServiceImpl.java
  17. 92 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/HomeServiceImpl.java
  18. 264 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/ImageTextInfoServiceImpl.java
  19. 49 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/ImageTextMoreServiceImpl.java
  20. 100 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/KeyWordServiceImpl.java
  21. 177 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MenuInfoServiceImpl.java
  22. 37 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MenuKeySetServiceImpl.java
  23. 72 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MessageManager.java
  24. 207 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MessageUtil.java
  25. 25 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/TokenServiceImpl.java
  26. 523 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/WeChatServiceImpl.java
  27. 31 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/ConfigDAO.java
  28. 24 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/FirstJoinKeyDAO.java
  29. 75 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/HomeServiceDao.java
  30. 68 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/ImageTextInfoDAO.java
  31. 39 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/ImageTextMoreDAO.java
  32. 49 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/KeyWordDAO.java
  33. 16 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/MenuInfoDAO.java
  34. 14 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/MenuKeySetDAO.java
  35. 50 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/ConfigDAOImpl.java
  36. 47 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/FirstJoinKeyDaoImpl.java
  37. 79 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/HomeServiceDaoImpl.java
  38. 87 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/ImageTextInfoDAOImpl.java
  39. 56 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/ImageTextMoreDAOImpl.java
  40. 94 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/KeyWordDAOImpl.java
  41. 42 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/MenuInfoDAOImpl.java
  42. 37 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/MenuKeySetDAOImpl.java
  43. 10 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/ConfigMapper.java
  44. 33 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/FirstJoinKeyMapper.java
  45. 83 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/HomeMemberMapper.java
  46. 72 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/ImageTextInfoMapper.java
  47. 41 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/ImageTextMoreMapper.java
  48. 59 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/KeyWordMapper.java
  49. 16 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/MenuInfoMapper.java
  50. 14 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/MenuKeySetMapper.java
  51. 12 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/TokenMapper.java
  52. 35 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/WechatShareMapper.java
  53. 31 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/configMapper.xml
  54. 55 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/firstJoinKeyMapper.xml
  55. 149 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/homeMemberMapper.xml
  56. 154 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/imageTextInfoMapper.xml
  57. 108 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/imageTextMoreMapper.xml
  58. 106 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/keyWordMapper.xml
  59. 93 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/menuInfoMapper.xml
  60. 87 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/menuKeySetMapper.xml
  61. 25 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/tokenMapper.xml
  62. 66 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/wechatShareMapper.xml
  63. 1 1
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminCustomerController.java
  64. 21 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/wechat/TestController.java
  65. 207 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/wx/MessageUtil.java
  66. 46 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/wx/config/ConfigHandler.java
  67. 68 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/wx/event/WeChatHandler.java
  68. 2 0
      watero-rst-web/src/main/java/com/iamberry/rst/filters/WechatFilter.java
  69. 6 3
      watero-rst-web/src/main/resources/platform.properties
  70. 61 0
      watero-rst-web/src/main/resources/watero-rst-orm.xml
  71. 9 0
      watero-rst-web/src/main/webapp/WEB-INF/web.xml

+ 29 - 1
watero-common-core/src/main/java/com/iamberry/wechat/core/entity/member/Member.java

@@ -47,7 +47,11 @@ public class Member implements Serializable{
 	private Integer userDealers;			//代理商层级id
 	private Integer userIsBought;			//用户是否已经购买过		1:未购买(默认)	2:已购买
 	private Page page;						//分页
-	
+
+	private Integer userIntegral;			//jifen
+	private Integer userCoupon;			//
+	private Integer userTemplateId;			//
+
 	public Page getPage() {
 		return page;
 	}
@@ -222,6 +226,30 @@ public class Member implements Serializable{
 		this.userIsBought = userIsBought;
 	}
 
+	public Integer getUserIntegral() {
+		return userIntegral;
+	}
+
+	public void setUserIntegral(Integer userIntegral) {
+		this.userIntegral = userIntegral;
+	}
+
+	public Integer getUserCoupon() {
+		return userCoupon;
+	}
+
+	public void setUserCoupon(Integer userCoupon) {
+		this.userCoupon = userCoupon;
+	}
+
+	public Integer getUserTemplateId() {
+		return userTemplateId;
+	}
+
+	public void setUserTemplateId(Integer userTemplateId) {
+		this.userTemplateId = userTemplateId;
+	}
+
 	@Override
 	public String toString() {
 		return "Member [userId=" + userId + ", userOpenid=" + userOpenid

+ 3 - 1
watero-common-tool/src/main/java/com/iamberry/app/tool/log/RatFWLogger.java

@@ -1,11 +1,13 @@
 package com.iamberry.app.tool.log;
 
 import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
 
 /**
  * desc:平台日志
  */
-public class RatFWLogger {	
+@Component
+public class RatFWLogger {
 	
 	private static String delimiter = " >> ";
 	

+ 5 - 1
watero-common-web/src/main/java/com/iamberry/common/web/SimpleCORSFilter.java

@@ -20,7 +20,7 @@ import org.apache.commons.lang3.StringUtils;
  */
 public class SimpleCORSFilter implements Filter {
 	
-	public static List<String> origins = new ArrayList<String>(6);
+	public static List<String> origins = new ArrayList<String>(14);
 	
 	static {
 		origins.add("h5.iamberry.com");
@@ -33,6 +33,10 @@ public class SimpleCORSFilter implements Filter {
 		origins.add("static.watero.cn");
 		origins.add("static.iamberry.com");
 		origins.add("s.iamberry.com");
+		origins.add("w.iamberry.com:801");
+		origins.add("test.iamberry.com:801");
+		origins.add("w.iamberry.com:8848");
+		origins.add("test.iamberry.com:8848");
 	}
     public void init(FilterConfig filterConfig) throws ServletException {}
     public void doFilter(ServletRequest servletRequest, ServletResponse

+ 20 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/ConfigService.java

@@ -0,0 +1,20 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.Config;
+import net.sf.json.JSONObject;
+
+public interface ConfigService {
+	public Config getConfig(String appId);
+	
+	public void updateConfig(Config config);
+	
+	public JSONObject selectConfig(String appid, String url);
+	
+	/**
+	 * 获取accesstoken
+	 * @return
+	 * @author 献
+	 * @Time   2017年3月10日
+	 */
+	String getAccessToken();
+}

+ 12 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/FirstJoinKeyService.java

@@ -0,0 +1,12 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.FirstJoinKey;
+
+public interface FirstJoinKeyService {
+	
+	public FirstJoinKey getBywxpublicNO(String wxpublicNO);
+	
+	public int updatebyFirstJoinKey(FirstJoinKey firstJoinKey);
+	
+	public int addFirstJoinKey(FirstJoinKey firstJoinKey);
+}

+ 79 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/HomeService.java

@@ -0,0 +1,79 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.banner.ActionBannerImage;
+import com.iamberry.wechat.core.entity.member.Member;
+
+import java.util.List;
+
+/**
+ * @author 何秀刚
+ * Class Description: 首页业务逻辑处理Service接口
+ * Create Date:2016年4月18日
+ * Update Date:2016年4月18日
+ */
+public interface HomeService {
+
+	/**
+	 * 根据用户Openid,获取会员信息
+	 * @param openid
+	 * @return
+	 */
+	public Member selectMemberInfoByOpenId(String openid);
+
+
+	/**
+	 * 根据用户Openid,修改微信获取到的信息
+	 * @param member 会员信息实体类
+	 * @return
+	 */
+	public Integer updateWechatMemberInfoByByOpenid(Member member);
+
+	/**
+	 * 添加会员信息
+	 * @param member
+	 * @return
+	 */
+	public Integer insertMemberInfo(Member member);
+
+	/**
+	 * 根据用户openid,更新用户的上线
+	 * @param member
+	 * @return
+	 */
+	public Integer updateUserResAndTypeByOpenid(Member member);
+
+	/**
+	 * 根据Openid,更新用户状态为取消关注状态
+	 * @param openid
+	 * @return
+	 */
+	public Integer updateMemberStatusByOpenId(String openid);
+
+	/**
+	 * 根据用户Openid获取用户二维码(不一定有)
+	 * @param openid
+	 * @return
+	 */
+	public Member selectMemberQrcodeUrlByOpenid(String openid);
+
+	/**
+	 * 修改用户所属二维码
+	 * @param member
+	 * @return
+	 */
+	public Integer updateMemberQrcodeByOpenid(Member member);
+
+	/**
+	 * 根据代理商ID,获取激活此代理商的用户信息
+	 * @param placeId
+	 * @return
+	 */
+	public Member selectUserInfoByPlaceId(Integer placeId);
+	
+	/**
+	 * 根据Openid,更新绑定状态
+	 * @param member
+	 * @return
+	 */
+	public Integer updateMemberIsFlagByOpenid(Member member);
+}

+ 71 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/ImageTextInfoService.java

@@ -0,0 +1,71 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.ImageTextInfo;
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ImageTextInfoService {
+	/**
+	 * 添加图文素材
+	 * --》添加ImageTextInfo对象
+	 * @return 返回的是添加记录数
+	 */
+	public int addImageTextInfo(ImageTextInfo imageTextInfo); 
+	
+	/**
+	 * 删除图文素材
+	 * --》根据图文ID号来删除相应的图文素材
+	 * @return 返回的是删除记录数
+	 */
+	public int delImageTextInfo(Long id);
+	
+	/**
+	 * 修改图文素材
+	 * --》根据ID来修改图文素材信息
+	 * @return 返回的是修改记录数
+	 */
+	public int updateImageTextInfo(ImageTextInfo imageTextInfo);
+	
+	/**
+	 * 按照id来查询查找图文素材
+	 * 根据素材来出啊训
+	 */
+	public ImageTextInfo findImageTextInfoById(Long id);
+	
+	/**
+	 * 按照公众账号来查询所有的图文素材
+	 */
+	public List<ImageTextInfo> findImageTextInfoBywxPublicNo(String wxPublicNo);
+	
+	/**
+	 * 根据微信公众账号、页数、每页显示的记录来分页查询
+	 */
+	public List<Map<Object, Object>> findImageTextInfo(String wxPublicNo, Integer pageNo, Integer selectNum);
+	
+	/**
+	 * 根据微信公众号来查询该微信共有多少图文素材
+	 */
+	public int findImageTextInfoNo(String wxPublicNo, Integer pageSize);
+
+	public void addImageTextMore(String jsonData);
+	
+	public Map<Object, Object> findImageTextMore(Long imageTextNo) throws Exception;
+
+	public void doUpdateMore(ImageTextInfo mainVo,
+                             List<ImageTextMore> subVoList, List<String> delVoList);
+	
+	public List<Map<Object, Object>> selectImageInfoList(String wxPublicNo, Integer pageNO, Integer pageSize) throws Exception;
+	
+	/**
+	 * 根据公众账号查看全部素材
+	 * @throws Exception 
+	 */
+	public List<Map<Object, Object>> selectAllImageTextList(String publicWxNo) throws Exception;
+	
+	/**
+	 * 扫描其他表中有没有使用该素材的
+	 */
+	public Integer selectImageTextOtherTableCount(Integer imageTextId);
+}

+ 39 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/ImageTextMoreService.java

@@ -0,0 +1,39 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+
+import java.util.List;
+
+public interface ImageTextMoreService {
+	/**
+	 * 添加多图文素材
+	 */
+	public int addImageTextMore(ImageTextMore imageTextMore);
+	
+	/**
+	 * 删除多图文素材
+	 */
+	public int delImageTextMore(Long moreImageTextNo);
+	
+	/**
+	 * 根据多图文的主图文ID,删除多图文
+	 */
+	public int delImageTextMoreByImageNo(Long id);
+	
+	/**
+	 * 修改多图文素材
+	 */
+	public int updateImageTextMore(ImageTextMore imageTextMore);
+	
+	/**
+	 *根据ID查询
+	 */
+	public List<ImageTextMore> findImageTextmore(Long imageTextNo);
+	
+	public ImageTextMore getImageTextmore(Long imageTextMoreNo);
+	
+	/**
+	 * 根据主图文ID,查询附图文数量
+	 */
+	public Integer selectMoreImageTextCountByMainId(Integer mainImageTextId);
+}

+ 37 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/KeyWordService.java

@@ -0,0 +1,37 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.KeyWord;
+import com.iamberry.wechat.core.entity.wx.PagingDTO;
+
+import java.util.List;
+
+public interface KeyWordService {
+	
+	public KeyWord getById(Long keyServiceNo);
+
+	public List<KeyWord> selectKeyList(String pubNo, String word, Integer pageNO, Integer pageSize) throws Exception;
+	
+	public Integer selectKeyListCount(String pubNo, String word, Integer pageSize);
+	
+	/**
+	 * 批量删除
+	 * @param keyWord
+	 */
+	public Integer batchDelKeyWordById(List<Integer> delIdList);
+	
+	/**
+	 * 单个删除
+	 * @param keyWord
+	 */
+	public Integer deleteKeyWordById(Long id);
+	
+	void insert(KeyWord keyWord);
+	
+	void updateByPrimaryKey(KeyWord keyword);
+	
+	public int getPageNum(String pubNo, int selectNum);
+
+	public List<KeyWord> getBypubNoAndPageNo(PagingDTO pdto);
+
+	public KeyWord getByKeyWord(String keyword);
+}

+ 18 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/MenuInfoService.java

@@ -0,0 +1,18 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.MenuInfo;
+
+public interface MenuInfoService {
+
+	public MenuInfo selectOne(String pubNo);
+	
+	public MenuInfo selectByMenuIdAndPubNo(String menuId, String pubNo);
+	
+	int insert(MenuInfo menuInfo);
+	
+	int update(MenuInfo menuInfo);
+	
+	int deleteByPubNo(String pubNo);
+
+	public int saveMenu(String treedata, String str);
+}

+ 14 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/MenuKeySetService.java

@@ -0,0 +1,14 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.MenuKeySet;
+
+public interface MenuKeySetService {
+	
+	int insert(MenuKeySet menuKeySet);
+	
+	int update(MenuKeySet menuKeySet);
+	
+	int deleteByPubNo(String pubNo);
+	
+	MenuKeySet selectByPubNoAndKeyWord(String pubNo, String keyword);
+}

+ 12 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/TokenService.java

@@ -0,0 +1,12 @@
+package com.iamberry.rst.faces.wechat;
+
+import com.iamberry.wechat.core.entity.wx.Token;
+
+public interface TokenService {
+
+	// 获取token
+	public Token selectOne(String appid);
+	
+	// 修改token
+	public Integer updateToken(Token token);
+}

+ 11 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/wechat/WeChatService.java

@@ -0,0 +1,11 @@
+package com.iamberry.rst.faces.wechat;
+
+
+public interface WeChatService {
+	/**
+	 * 处理微信发来的请求
+	 * @param request
+	 * @return
+	 */
+	public String processRequest(String FromUserName, String ToUserName, String MsgType, String createTime, String Content, String Event, String Ticket, String EventKey);
+}

+ 7 - 7
watero-rst-service/src/main/java/com/iamberry/rst/service/member/mapper/memberMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.iamberry.wechat.service.mapper.MemberMapper">
+<mapper namespace="com.iamberry.rst.service.member.mapper.MemberMapper">
 	<resultMap  id="BaseResultMap" type="Member" >
 		<result    column="user_id"    property="userId" />
 		<result    column="user_openid"    property="userOpenid" />
@@ -101,19 +101,17 @@
 		select
 		<include refid="Base_List" />
 		from tb_rst_member_user t
-		where t.user_id= #{userId}
+		where t.user_id= #{id}
 	</select>
 
-	<!-- 	根据openid查询会员信息 -->
-	<select id="getMemberByUserOpenId" resultType="Member"
-			parameterType="String">
+	<!--根据openid查询会员信息-->
+	<select id="getMemberByUserOpenId" resultType="Member" parameterType="String">
 		SELECT
 		<include refid="Base_List"/>
-		FROM TB_IAMBERRY_USER_USERINFO
+		FROM tb_rst_member_user t
 		WHERE user_openid = #{userOpenid}
 	</select>
 
-
 	<insert id="save" parameterType="Member" >
 		insert into
 		tb_rst_member_user
@@ -141,6 +139,7 @@
 		user_coupon,
 		user_template_id,
 		user_dealers,
+		user_create_date,
 		user_is_bought
 		)
 		values
@@ -168,6 +167,7 @@
 		#{userCoupon},
 		#{userTemplateId},
 		#{userDealers},
+		now(),
 		#{userIsBought}
 		)
 	</insert>

+ 115 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/ConfigServiceImpl.java

@@ -0,0 +1,115 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.ConfigService;
+import com.iamberry.rst.service.wechat.dao.ConfigDAO;
+import com.iamberry.wechat.core.entity.wx.Config;
+import com.iamberry.wechat.core.entity.wx.ConfigJSSDK;
+import com.iamberry.wechat.tools.NameUtils;
+import com.iamberry.wechat.tools.Sha1Util;
+import com.iamberry.wechat.tools.SignUtil;
+import com.iamberry.wechat.tools.WeixinUtil;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.SQLException;
+import java.util.Date;
+
+@Service
+public class ConfigServiceImpl implements ConfigService {
+	
+	@Autowired
+	private ConfigDAO configDAO;
+	public void setConfigDAO(ConfigDAO configDAO) {
+		this.configDAO = configDAO;
+	}
+
+	@Override
+	public Config getConfig(String appId) {
+		return configDAO.getConfig(appId);
+	}
+
+	@Override
+	public void updateConfig(Config config) {
+		configDAO.updateConfig(config);
+	}
+
+	/**
+	 * jsapi_ticket使用权限签名算法
+	 * @param appid
+	 * @param url
+	 * @return
+	 * @throws SQLException
+	 */
+	public JSONObject selectConfig(String appid,String url){
+		try {
+			// 数据库获取微信配置,并获取ticket
+			Config cfg =  configDAO.getConfig(appid);
+			if(cfg == null) {
+				return null;
+			}
+			
+			// 准备数据
+			String nonceStr = SignUtil.getNonceStr(),
+				  timestamp = SignUtil.getTimeStamp(),
+					 ticket = cfg.getTicket(), 
+				  appsecret = cfg.getAppsecret();
+			
+			// 判断ticket是否失效,如果失效自动获取 ;如果 (当前时间 - config的创建时间) / 1000 = 剩余超时的秒
+			if(ticket == null || (new Date().getTime() - cfg.getCreateTime()) / 1000 >= 7000){
+				//获取access_token, 已经兼容缓存
+				String token = WeixinUtil.getAccessToken(appid, appsecret).getToken();
+				
+				//access_token换取jsapi_ticket
+				if(token == null) {
+					return null;
+				}
+				
+				// 获取ticket
+				ticket = WeixinUtil.getTicket(token).getTicket();
+				if(ticket == null) {
+					return null;
+				}
+				//更新ticket
+				cfg.setTicket(ticket);
+				cfg.setCreateTime(new Date().getTime());
+				configDAO.updateConfig(cfg);
+			}
+			
+			//字典排序的签名参数
+			String string1 = "jsapi_ticket=%s&noncestr=%s&timestamp=%s&url=%s";
+			string1 = String.format(string1, ticket, nonceStr, timestamp, url);
+			//对string1进行sha1签名,得到signature
+			String signature = Sha1Util.getSha1(string1).toLowerCase();
+			
+			//最后组装json数据
+			ConfigJSSDK config = new ConfigJSSDK();
+			config.setAppId(appid);
+			config.setTicket(ticket);
+			config.setNonceStr(nonceStr);
+			config.setSignature(signature);
+			config.setTimestamp(timestamp);
+			
+			/*// 获取分享的数据
+			WechatShare share = configDAO.selectWechatShareByHash(url.hashCode());
+			if(share != null){
+				config.setShare(share);
+				share.setShareUrlHash(url.hashCode());
+				share.setShareDataNum(1);
+				share.setShareNum(0);
+				configDAO.updateWechatShareByHash(share);		// 更新一次数据
+			}*/
+			
+			return JSONObject.fromObject(config);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	@Override
+	public String getAccessToken() {
+		// TODO Auto-generated method stub
+		return WeixinUtil.getAccessToken(NameUtils.getConfig("appId"), NameUtils.getConfig("appSecret")).getToken();
+	}
+}

+ 38 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/FirstJoinKeyServiceImpl.java

@@ -0,0 +1,38 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.FirstJoinKeyService;
+import com.iamberry.rst.service.wechat.dao.FirstJoinKeyDAO;
+import com.iamberry.wechat.core.entity.wx.FirstJoinKey;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FirstJoinKeyServiceImpl implements FirstJoinKeyService {
+	
+	@Autowired
+	private FirstJoinKeyDAO firstJoinKeyDao;
+	public void setFirstJoinKeyDao(FirstJoinKeyDAO firstJoinKeyDao) {
+		this.firstJoinKeyDao = firstJoinKeyDao;
+	}
+
+	@Override
+	public FirstJoinKey getBywxpublicNO(String wxpublicNo) {
+		// TODO Auto-generated method stub
+		return firstJoinKeyDao.getBywxpublicNO(wxpublicNo);
+	}
+
+	@Override
+	public int updatebyFirstJoinKey(FirstJoinKey firstJoinKey) {
+		// TODO Auto-generated method stub
+		return firstJoinKeyDao.updatebyFirstJoinKey(firstJoinKey);
+	}
+
+	@Override
+	public int addFirstJoinKey(FirstJoinKey firstJoinKey) {
+		// TODO Auto-generated method stub
+		return firstJoinKeyDao.addFirstJoinKey(firstJoinKey);
+	}
+	
+	
+	
+}

+ 92 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/HomeServiceImpl.java

@@ -0,0 +1,92 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.HomeService;
+import com.iamberry.rst.service.wechat.dao.HomeServiceDao;
+import com.iamberry.wechat.core.entity.banner.ActionBannerImage;
+import com.iamberry.wechat.core.entity.member.Member;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author 何秀刚
+ * Class Description: 首页Service接口
+ * Create Date:2016年4月18日
+ * Update Date:2016年4月18日
+ */
+@Service
+public class HomeServiceImpl implements HomeService {
+
+
+	@Autowired
+	private HomeServiceDao homeServiceDao;
+	
+	public Member selectMemberInfoByOpenId(String openid) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.selectMemberInfoByOpenId(openid);
+	}
+
+	
+	public Integer updateWechatMemberInfoByByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.updateWechatMemberInfoByByOpenid(member);
+	}
+
+	
+	public Integer insertMemberInfo(Member member) {
+		// TODO Auto-generated method stub
+		try {
+			return homeServiceDao.insertMemberInfo(member);
+		} catch (DuplicateKeyException e) { // 报错,触发数据库唯一约束错误,系统捕获,而后对获取数据重头再来
+			// TODO: handle exception
+			member = homeServiceDao.selectMemberInfoByOpenId(member.getUserOpenid());
+			return 1;
+		}
+	}
+
+	
+	public Integer updateUserResAndTypeByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.updateUserResAndTypeByOpenid(member);
+	}
+
+	
+	public Integer updateMemberStatusByOpenId(String openid) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.updateMemberStatusByOpenId(openid);
+	}
+
+	
+	public Member selectMemberQrcodeUrlByOpenid(String openid) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.selectMemberQrcodeUrlByOpenid(openid);
+	}
+
+	
+	public Integer updateMemberQrcodeByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.updateMemberQrcodeByOpenid(member);
+	}
+	public Integer selectUserIntegralByOpenid(String openid) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.selectUserIntegralByOpenid(openid);
+	}
+
+	
+	public Member selectUserInfoByPlaceId(Integer placeId) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.selectUserInfoByPlaceId(placeId);
+	}
+	
+	/**
+	 * 根据Openid,更新绑定状态
+	 * @param member
+	 * @return
+	 */
+	public Integer updateMemberIsFlagByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeServiceDao.updateMemberIsFlagByOpenid(member);
+	}
+}

+ 264 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/ImageTextInfoServiceImpl.java

@@ -0,0 +1,264 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.ImageTextInfoService;
+import com.iamberry.rst.service.wechat.dao.ImageTextInfoDAO;
+import com.iamberry.rst.service.wechat.dao.ImageTextMoreDAO;
+import com.iamberry.wechat.core.entity.AdminUtils;
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.ImageTextInfo;
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+import com.iamberry.wechat.tools.NameUtils;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+public class ImageTextInfoServiceImpl implements ImageTextInfoService {
+	@Autowired
+	private AdminUtils adminUtils;
+	public void setAdminUtils(AdminUtils adminUtils) {
+		this.adminUtils = adminUtils;
+	}
+	
+	@Autowired
+	private ImageTextInfoDAO imageTextInfoDao;
+	public void setImageTextInfoDao(ImageTextInfoDAO imageTextInfoDao) {
+		this.imageTextInfoDao = imageTextInfoDao;
+	}
+	@Autowired
+	private ImageTextMoreDAO imageTextMoreDAO;
+	public void setImageTextMoreDAO(ImageTextMoreDAO imageTextMoreDAO) {
+		this.imageTextMoreDAO = imageTextMoreDAO;
+	}
+
+	@Override
+	public int addImageTextInfo(ImageTextInfo imageTextInfo) {
+		return imageTextInfoDao.addImageTextInfo(imageTextInfo);
+	}
+
+	@Override
+	public int delImageTextInfo(Long id) {
+		return imageTextInfoDao.delImageTextInfo(id);
+	}
+
+	@Override
+	public int updateImageTextInfo(ImageTextInfo imageTextInfo) {
+		return imageTextInfoDao.updateImageTextInfo(imageTextInfo);
+	}
+
+	@Override
+	public ImageTextInfo findImageTextInfoById(Long id) {
+		return imageTextInfoDao.findImageTextInfoById(id);
+	}
+
+	@Override
+	public List<ImageTextInfo> findImageTextInfoBywxPublicNo(String wxPublicNo) {
+		return imageTextInfoDao.findImageTextInfoBywxPublicNo(wxPublicNo);
+	}
+
+	@Override
+	public List<Map<Object, Object>> findImageTextInfo(String wxPublicNo,
+			Integer pageNo, Integer selectNum) {
+		List<Map<Object, Object>> imageTextList = new ArrayList<Map<Object, Object>>();
+		List<ImageTextInfo> list = imageTextInfoDao.findImageTextInfo(wxPublicNo, pageNo, selectNum);
+		for (ImageTextInfo info : list) {
+			Map<Object, Object> tempMap = new HashMap<Object, Object>();
+			tempMap.put("title", info.getTitle());
+			tempMap.put("digest", info.getDigest());
+			tempMap.put("imageurl", info.getImageUrl());
+			tempMap.put("sourceurl", info.getSourceUrl());
+			tempMap.put("imagetextno", info.getImageTextNo());
+			tempMap.put("clickouturl", info.getClickOutUrl());
+			tempMap.put("imagetexttype", info.getImageTextType());
+			tempMap.put("createtime", info.getCreateTime());
+			//子图文
+			if("2".equals(info.getImageTextType())){
+				tempMap.put("subVoList", imageTextMoreDAO.findImageTextmore(info.getImageTextNo()));
+			}
+			imageTextList.add(tempMap);
+		}
+		return imageTextList;
+	}
+
+	@Override
+	public int findImageTextInfoNo(String wxPublicNo, Integer pageSize) {
+		int count = imageTextInfoDao.findImageTextInfoNo(wxPublicNo);
+		count = count % pageSize == 0? count/pageSize:(count/pageSize)+1;
+		return count;
+	}
+	
+	public List<Map<Object, Object>> selectImageInfoList(String wxPublicNo, Integer pageNO, Integer pageSize) throws Exception {
+		PaperBean bean = new PaperBean();
+		bean.setMinNum((pageNO-1)*pageSize);
+		bean.setMaxNum(pageSize);
+		bean.setStr(wxPublicNo);
+		List<Map<Object, Object>> imageTextList = new ArrayList<Map<Object, Object>>();
+		List<ImageTextInfo> list = imageTextInfoDao.selectImageTextInfoList(bean);
+		for (ImageTextInfo info : list) {
+			Map<Object, Object> tempMap = new HashMap<Object, Object>();
+			tempMap.put("imageTextMD5", adminUtils.encryptObject(info.getImageTextNo(), "imageTextNo"));//主图文的ID加密
+			tempMap.put("title", info.getTitle());
+			tempMap.put("digest", info.getDigest());
+			tempMap.put("imageurl", info.getImageUrl());
+			tempMap.put("sourceurl", info.getSourceUrl());
+			tempMap.put("imagetextno", info.getImageTextNo());
+			tempMap.put("clickouturl", info.getClickOutUrl());
+			tempMap.put("imagetexttype", info.getImageTextType());
+			tempMap.put("createtime", info.getCreateTime());
+			//子图文
+			if("2".equals(info.getImageTextType())){
+				List<ImageTextMore> lists = imageTextMoreDAO.findImageTextmore(info.getImageTextNo());
+				List<ImageTextMore> imageTextMores = new ArrayList<ImageTextMore>();
+				for(ImageTextMore imageTextMore : lists) {
+					//多图文的ID加密
+					String md5MoreImageTextNo = adminUtils.encryptObject(imageTextMore.getMoreImageTextNo(), "moreImageTextNo");
+					imageTextMore.setMoreImageTextMD5(md5MoreImageTextNo);
+					imageTextMores.add(imageTextMore);
+				}
+				tempMap.put("subVoList", imageTextMores);
+			}
+			imageTextList.add(tempMap);
+		}
+		return imageTextList;
+	}
+	
+	@Override
+	public void addImageTextMore(String jsonData) {
+		ImageTextInfo mainVo = new ImageTextInfo();
+		List<ImageTextMore> subVoList = new ArrayList<ImageTextMore>();
+		Date now = new Date();
+		// 解析jsonData
+		JSONArray array = JSONArray.fromObject(jsonData);
+		for (int i = 0; i < array.size(); i++) {
+			JSONObject obj = array.getJSONObject(i);
+			if (i == 0) { // 主图文
+				mainVo.setCreateTime(now);
+				mainVo.setImageTextType("2");
+				mainVo.setTitle(obj.getString("title"));
+				mainVo.setImageUrl(obj.getString("cover"));
+				mainVo.setMainText(obj.getString("content"));
+				mainVo.setClickOutUrl(obj.getString("chain"));
+				mainVo.setSourceUrl(obj.getString("sourceurl"));
+				mainVo.setWxpublicNo(NameUtils.getConfig("pubNo"));
+			} else {      // 子图文
+				ImageTextMore subVo = new ImageTextMore();
+				subVo.setCreateTime(now);
+				subVo.setTitle(obj.getString("title"));
+				subVo.setImageUrl(obj.getString("cover"));
+				subVo.setMainText(obj.getString("content"));
+				subVo.setClickOutUrl(obj.getString("chain"));
+				subVo.setSourceUrl(obj.getString("sourceurl"));
+				subVo.setWxpublicNo(NameUtils.getConfig("pubNo"));
+				subVoList.add(subVo);
+			}
+		}
+		// 创建多图文,先创建主图文再创建子图文
+		imageTextInfoDao.addImageTextInfo(mainVo);
+		for (ImageTextMore subVo : subVoList) {
+			subVo.setImageTextNo(mainVo.getImageTextNo());
+			imageTextMoreDAO.addImageTextMore(subVo);
+		}
+	}
+
+	@Override
+	public Map<Object, Object> findImageTextMore(Long imageTextNo) throws Exception {
+		ImageTextInfo info = imageTextInfoDao.findImageTextInfoById(imageTextNo);
+		if(info == null) {
+			return null;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		Map<Object, Object> tempMap = new HashMap<Object, Object>();
+		tempMap.put("title", info.getTitle());
+		tempMap.put("content", info.getMainText());
+		tempMap.put("imageurl", info.getImageUrl());
+		tempMap.put("sourceurl", info.getSourceUrl());
+		tempMap.put("imagetextno", adminUtils.encryptObject(info.getImageTextNo(), "mainImageTextNO"));
+		tempMap.put("clickouturl", info.getClickOutUrl());
+		tempMap.put("imagetexttype", info.getImageTextType());
+		tempMap.put("createtime", sdf.format(info.getCreateTime()));
+		//子图文
+		if("2".equals(info.getImageTextType())){
+			List<ImageTextMore> lists = imageTextMoreDAO.findImageTextmore(info.getImageTextNo());
+			//为ID加密
+			List<ImageTextMore> arrayLists = new ArrayList<>();
+			for(ImageTextMore imageTextMore : lists) {
+				String moreImageTextNO = adminUtils.encryptObject(imageTextMore.getMoreImageTextNo(), "moreImageTextNO");
+				imageTextMore.setMoreImageTextMD5(moreImageTextNO);
+				arrayLists.add(imageTextMore);
+			}
+			tempMap.put("subVoList", arrayLists);
+		}
+		return tempMap;
+	}
+
+	@Override
+	public void doUpdateMore(ImageTextInfo mainVo,
+			List<ImageTextMore> subVoList, List<String> delVoList) {
+		imageTextInfoDao.updateImageTextInfo(mainVo);
+		for(ImageTextMore subVo : subVoList) {
+			if(subVo !=null && subVo.getMoreImageTextNo() != null) {
+				imageTextMoreDAO.updateImageTextMore(subVo);
+			} else {
+				subVo.setImageTextNo(mainVo.getImageTextNo());
+				imageTextMoreDAO.addImageTextMore(subVo);
+			}
+		}
+		for (String rid : delVoList) {
+			if(rid != null && !"".equals(rid)) {
+				rid = adminUtils.decryptObject(rid, "moreImageTextNO");//删除ID的解密
+				ImageTextMore ImageTextMore = imageTextMoreDAO.getImageTextmore(Long.parseLong(rid));
+				if(ImageTextMore !=null)imageTextMoreDAO.delImageTextMore(ImageTextMore.getMoreImageTextNo());
+			}
+		}
+	}
+
+	@Override
+	public List<Map<Object, Object>> selectAllImageTextList(String publicWxNo) throws Exception {
+		List<Map<Object, Object>> imageTextList = new ArrayList<Map<Object, Object>>();
+		List<ImageTextInfo> list = imageTextInfoDao.selectAllImageTextList(publicWxNo);
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		for (ImageTextInfo info : list) {
+			Map<Object, Object> tempMap = new HashMap<Object, Object>();
+			tempMap.put("imageTextMD5", adminUtils.encryptObject(info.getImageTextNo(), "imageTextNo"));//主图文的ID加密
+			tempMap.put("title", info.getTitle());
+			tempMap.put("digest", info.getDigest());
+			tempMap.put("imageurl", info.getImageUrl());
+			tempMap.put("sourceurl", info.getSourceUrl());
+			tempMap.put("imagetextno", info.getImageTextNo());
+			tempMap.put("clickouturl", info.getClickOutUrl());
+			tempMap.put("imagetexttype", info.getImageTextType());
+			tempMap.put("createtime", sdf.format(info.getCreateTime()));
+			//子图文
+			if("2".equals(info.getImageTextType())){
+				List<ImageTextMore> lists = imageTextMoreDAO.findImageTextmore(info.getImageTextNo());
+				List<ImageTextMore> imageTextMores = new ArrayList<ImageTextMore>();
+				for(ImageTextMore imageTextMore : lists) {
+					//多图文的ID加密
+					String md5MoreImageTextNo = adminUtils.encryptObject(imageTextMore.getMoreImageTextNo(), "moreImageTextNo");
+					imageTextMore.setMoreImageTextMD5(md5MoreImageTextNo);
+					imageTextMores.add(imageTextMore);
+				}
+				tempMap.put("subVoList", imageTextMores);
+			} else {
+				tempMap.put("subVoList", "");
+			}
+			imageTextList.add(tempMap);
+		}
+		return imageTextList;
+	}
+	
+	/**
+	 * 扫描素材是否在其他表中使用
+	 */
+	public Integer selectImageTextOtherTableCount(Integer imageTextId) {
+		Integer fCount = imageTextInfoDao.selectFirstAnswerByID(imageTextId);
+		Integer kCount = imageTextInfoDao.selectKeyWordByID(imageTextId);
+		Integer mCount = imageTextInfoDao.selectMenuKeyByID(imageTextId);
+		return fCount + kCount + mCount;
+	}
+
+}

+ 49 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/ImageTextMoreServiceImpl.java

@@ -0,0 +1,49 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.ImageTextMoreService;
+import com.iamberry.rst.service.wechat.dao.ImageTextMoreDAO;
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ImageTextMoreServiceImpl implements ImageTextMoreService {
+	@Autowired
+	private ImageTextMoreDAO imageTextMoreDAO;
+	public void setImageTextMoreDAO(ImageTextMoreDAO imageTextMoreDAO) {
+		this.imageTextMoreDAO = imageTextMoreDAO;
+	}
+	@Override
+	public int addImageTextMore(ImageTextMore imageTextMore) {
+		return imageTextMoreDAO.addImageTextMore(imageTextMore);
+	}
+	@Override
+	public int delImageTextMore(Long moreImageTextNo) {
+		return imageTextMoreDAO.delImageTextMore(moreImageTextNo);
+	}
+	@Override
+	public int updateImageTextMore(ImageTextMore imageTextMore) {
+		return imageTextMoreDAO.updateImageTextMore(imageTextMore);
+	}
+	@Override
+	public List<ImageTextMore> findImageTextmore(Long imageTextNo) {
+		return imageTextMoreDAO.findImageTextmore(imageTextNo);
+	}
+	@Override
+	public ImageTextMore getImageTextmore(Long imageTextMoreNo) {
+		return imageTextMoreDAO.getImageTextmore(imageTextMoreNo);
+	}
+	@Override
+	public Integer selectMoreImageTextCountByMainId(Integer mainImageTextId) {
+		// TODO Auto-generated method stub
+		return imageTextMoreDAO.selectMoreImageTextCountByMainId(mainImageTextId);
+	}
+	@Override
+	public int delImageTextMoreByImageNo(Long id) {
+		// TODO Auto-generated method stub
+		return imageTextMoreDAO.delImageTextMoreByImageNo(id);
+	}
+	
+}

+ 100 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/KeyWordServiceImpl.java

@@ -0,0 +1,100 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.KeyWordService;
+import com.iamberry.rst.service.wechat.dao.KeyWordDAO;
+import com.iamberry.wechat.core.entity.AdminUtils;
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.KeyWord;
+import com.iamberry.wechat.core.entity.wx.PagingDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * desc:后台,管理员service接口实现
+ * @author Administrator
+ *
+ */
+@Service
+public class KeyWordServiceImpl implements KeyWordService {
+	@Autowired
+	private KeyWordDAO keyWordDAO;
+	public void setKeyWordDAO(KeyWordDAO keyWordDAO) {
+		this.keyWordDAO = keyWordDAO;
+	}
+	
+	@Autowired
+	private AdminUtils adminUtils;
+	public void setAdminUtils(AdminUtils adminUtils) {
+		this.adminUtils = adminUtils;
+	}
+	
+	@Override
+	public KeyWord getById(Long keyServiceNo) {
+		return keyWordDAO.getById(keyServiceNo);
+	}
+	@Override
+	public List<KeyWord> selectKeyList(String pubNo, String word, Integer pageNO, Integer pageSize) throws Exception {
+		PaperBean bean = new PaperBean();
+		bean.setMinNum((pageNO-1)*pageSize);
+		bean.setMaxNum(pageSize);
+		bean.setText(pubNo);
+		bean.setStr(word);
+		List<KeyWord> lists = keyWordDAO.selectKeyList(bean);
+		//加密ID
+		List<KeyWord> mdLists = new ArrayList<KeyWord>();
+		for(KeyWord keyWord : lists) {
+			String keyWordIdMd5 = adminUtils.encryptObject(keyWord.getKeyServiceNo(), "keyWordNo");
+			keyWord.setKeyServiceNoMd5(keyWordIdMd5);
+			mdLists.add(keyWord);
+		}
+		return mdLists;
+	}
+	
+	@Override
+	public Integer selectKeyListCount(String pubNo, String word, Integer pageSize) {
+		PaperBean bean = new PaperBean();
+		bean.setText(pubNo);
+		bean.setStr(word);
+		int count = keyWordDAO.selectKeyListCount(bean);
+		count = count % pageSize == 0? count/pageSize:(count/pageSize)+1;
+		return count;
+	}
+	
+	@Override
+	public void insert(KeyWord keyWord) {
+		keyWordDAO.insert(keyWord);
+	}
+	@Override
+	public void updateByPrimaryKey(KeyWord keyword) {
+		keyWordDAO.updateByPrimaryKey(keyword);
+	}
+	@Override
+	public List<KeyWord> getBypubNoAndPageNo(PagingDTO pdto) {
+		return keyWordDAO.getBypubNoAndPageNo(pdto);
+	}
+	@Override
+	public int getPageNum(String pubNo, int selectNum) {
+		return keyWordDAO.getPageNum(pubNo, selectNum);
+	}
+	@Override
+	public KeyWord getByKeyWord(String keyword) {
+		return keyWordDAO.getByKeyWord(keyword);
+	}
+
+	@Override
+	public Integer batchDelKeyWordById(List<Integer> delIdList) {
+		// TODO Auto-generated method stub
+		return keyWordDAO.batchDelKeyWordById(delIdList);
+	}
+
+	@Override
+	public Integer deleteKeyWordById(Long id) {
+		// TODO Auto-generated method stub
+		return keyWordDAO.deleteKeyWordById(id);
+	}
+
+	
+}

+ 177 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MenuInfoServiceImpl.java

@@ -0,0 +1,177 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.MenuInfoService;
+import com.iamberry.rst.service.wechat.dao.MenuInfoDAO;
+import com.iamberry.rst.service.wechat.dao.MenuKeySetDAO;
+import com.iamberry.wechat.core.entity.wx.MenuInfo;
+import com.iamberry.wechat.core.entity.wx.MenuKeySet;
+import com.iamberry.wechat.core.entity.wx.ZTreeBean;
+import com.iamberry.wechat.tools.NameUtils;
+import net.sf.json.JSONArray;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class MenuInfoServiceImpl implements MenuInfoService {
+	@Autowired
+	private MenuInfoDAO menuInfoDAO;
+	public void setMenuInfoDAO(MenuInfoDAO menuInfoDAO) {
+		this.menuInfoDAO = menuInfoDAO;
+	}
+	@Autowired
+	private MenuKeySetDAO menuKeySetDAO;
+	public void setMenuKeySetDAO(MenuKeySetDAO menuKeySetDAO) {
+		this.menuKeySetDAO = menuKeySetDAO;
+	}
+
+	@Override
+	public MenuInfo selectOne(String pubNo) {
+		return menuInfoDAO.selectOne(pubNo);
+	}
+
+	@Override
+	public MenuInfo selectByMenuIdAndPubNo(String menuId, String pubNo) {
+		return menuInfoDAO.selectByMenuIdAndPubNo(menuId, pubNo);
+	}
+
+	@Override
+	public int insert(MenuInfo menuInfo) {
+		return menuInfoDAO.insert(menuInfo);
+	}
+
+	@Override
+	public int update(MenuInfo menuInfo) {
+		return menuInfoDAO.update(menuInfo);
+	}
+
+	@Override
+	public int deleteByPubNo(String pubNo) {
+		return menuInfoDAO.deleteByPubNo(pubNo);
+	}
+
+	@SuppressWarnings({ "unchecked", "deprecation" })
+	@Override
+	public int saveMenu(String treedata, String str) {
+		try {
+			boolean flag = true;
+			MenuInfo menuInfoVO = menuInfoDAO.selectOne(NameUtils.getConfig("pubNo"));
+			if(menuInfoVO != null){
+				//全部删除
+				if(treedata != null && treedata.length()==53 && treedata.contains("id:0")){
+					menuInfoDAO.deleteByPubNo(NameUtils.getConfig("pubNo"));
+					menuKeySetDAO.deleteByPubNo(NameUtils.getConfig("pubNo"));
+					flag = false;
+					treedata = "[{id:0,pid:0,name:'自定义菜单列表',url:'',content:'',type:0}]";
+				}else{
+					if(!menuInfoVO.getVchar1().equals(treedata)){
+						menuKeySetDAO.deleteByPubNo(NameUtils.getConfig("pubNo"));
+					}else{//没有任何修改
+						flag = false;
+					}
+				}
+			}
+			
+			if(flag){
+				String[] strArr = null;
+				if(str != null && !"".equals(str)){
+					strArr = str.split("[$]");
+				}
+				treedata = "[" + treedata.replaceAll("open:true,", "").replaceAll("\r\n", "\\\\r\\\\n") + "]";
+				JSONArray jsonArray = JSONArray.fromObject(treedata);
+				List<ZTreeBean> treeList = JSONArray.toList(jsonArray, ZTreeBean.class);
+				
+				int j = 0;
+				String pids[] = new String[3];
+				for(ZTreeBean zree : treeList){
+					if(zree != null && !"0".equals(zree.getId()) && "0".equals(zree.getPid())){
+						pids[j] = zree.getId();
+						j ++;
+					}
+				}
+				Long orderNo = 0L, idx1 = 0L, idx2 = 5L, idx3 = 10L;
+				for(ZTreeBean zree : treeList){
+					if(zree != null && !"0".equals(zree.getId())){
+						//菜单信息
+						MenuInfo mInfoVO = new MenuInfo();
+						MenuInfo vo = menuInfoDAO.selectByMenuIdAndPubNo(zree.getId(), NameUtils.getConfig("pubNo"));
+						if(vo != null){
+							mInfoVO = vo;
+						}
+						
+						if(strArr != null && strArr.length>0){
+							for (int i = 0; i < strArr.length; i++) {
+								if((zree.getId() != null && !"".equals(zree.getId())) 
+										&& (strArr[i] != null && !"".equals(strArr[i]))
+										&& "2".equals(zree.getType()) && zree.getId().equals(strArr[i])){
+									mInfoVO.setVchar3(strArr[i+1].trim());
+								}
+								i++;
+							}
+						}
+						//记录子菜单序号
+						if(!"0".equals(zree.getPid())){
+							String temp = zree.getPid();
+							if(pids[0] !=null && temp.equals(pids[0])){
+								idx1 ++;
+								orderNo = idx1;
+							}else if(pids[1] !=null && temp.equals(pids[1])){
+								idx2 ++;
+								orderNo = idx2;
+							}else if(pids[2] !=null && temp.equals(pids[2])){
+								idx3 ++;
+								orderNo = idx3;
+							}
+							mInfoVO.setOrderNo(orderNo);
+						}
+						mInfoVO.setUrl(zree.getUrl());
+						mInfoVO.setOpTime(new Date());
+						mInfoVO.setWxpublicNo(NameUtils.getConfig("pubNo"));
+						mInfoVO.setMenuName(zree.getName());
+						mInfoVO.setMenuType(zree.getType());//1为文本、2为图文、3为链接
+						mInfoVO.setParentMenuId(zree.getPid()!=null?Long.parseLong(zree.getPid()):null);
+						mInfoVO.setVchar1(treedata.replaceAll("pid:0", "pid:0,open:true"));//zTreeNodes字串
+						
+						//图文修改成其他
+						if(!"2".equals(zree.getType()) && mInfoVO.getVchar3() != null && !"".equals(mInfoVO.getVchar3())){
+							mInfoVO.setVchar3("");
+						}
+						//链接修改成其他
+						if(!"3".equals(zree.getType()) && mInfoVO.getUrl() != null && !"".equals(mInfoVO.getUrl())){
+							mInfoVO.setUrl("");
+						}
+						
+						if(vo != null){
+							mInfoVO.setMenuId(vo.getMenuId());
+							menuInfoDAO.update(mInfoVO);
+						}else{
+							mInfoVO.setMenuId(Integer.parseInt(zree.getId()));
+							menuInfoDAO.insert(mInfoVO);
+						}
+						
+						//菜单回复内容
+						MenuKeySet keySetVO = new MenuKeySet();
+						keySetVO.setCreateTime(new Date());
+						keySetVO.setKeyWord(zree.getId());
+						keySetVO.setReType(zree.getType());
+						keySetVO.setMenuId(Long.parseLong(zree.getId()));//据此查询菜单点击事件回复内容
+						keySetVO.setWxpublicNo(NameUtils.getConfig("pubNo"));
+						if("1".equals(zree.getType())){
+							keySetVO.setRefText(zree.getContent());
+						}else if("2".equals(zree.getType()) && zree.getContent()!=null && !"".equals(zree.getContent())){
+							//zree.getContent()为图文id
+							keySetVO.setRefImageTextId(zree.getContent());//据此查询菜单点击跳转图文链接
+						}
+						menuKeySetDAO.insert(keySetVO);
+					}
+				}
+			}
+			return 1;
+		} catch (Exception e) {
+			return 0;
+		}
+	}
+
+}

+ 37 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MenuKeySetServiceImpl.java

@@ -0,0 +1,37 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.MenuKeySetService;
+import com.iamberry.rst.service.wechat.dao.MenuKeySetDAO;
+import com.iamberry.wechat.core.entity.wx.MenuKeySet;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MenuKeySetServiceImpl implements MenuKeySetService {
+	@Autowired
+	private MenuKeySetDAO menuKeySetDAO;
+	public void setMenuKeySetDAO(MenuKeySetDAO menuKeySetDAO) {
+		this.menuKeySetDAO = menuKeySetDAO;
+	}
+
+	@Override
+	public int insert(MenuKeySet menuKeySet) {
+		return menuKeySetDAO.insert(menuKeySet);
+	}
+
+	@Override
+	public int update(MenuKeySet menuKeySet) {
+		return menuKeySetDAO.update(menuKeySet);
+	}
+
+	@Override
+	public int deleteByPubNo(String pubNo) {
+		return menuKeySetDAO.deleteByPubNo(pubNo);
+	}
+
+	@Override
+	public MenuKeySet selectByPubNoAndKeyWord(String pubNo, String keyword) {
+		return menuKeySetDAO.selectByPubNoAndKeyWord(pubNo, keyword);
+	}
+	
+}

+ 72 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MessageManager.java

@@ -0,0 +1,72 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.wechat.core.entity.wx.Article;
+import com.iamberry.wechat.core.entity.wx.ImageTextInfo;
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+import com.iamberry.wechat.core.entity.wx.NewsMessage;
+import com.iamberry.wechat.tools.NameUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class MessageManager {
+	/**
+	 * 获取图文信息
+	 * @param requestMap
+	 * @return
+	 * @throws Exception
+	 */
+	public static String getImageTextInfo(Map<String, String> requestMap,ImageTextInfo imageTextInfo,List<ImageTextMore> imagetextMoreList)throws Exception{
+		String picUrl = NameUtils.getConfig("IMAGE_URL") + imageTextInfo.getImageUrl();
+		String clickUrl = null;
+		List<Article> articleList = new ArrayList<Article>();
+		Article article = new Article();
+		article.setTitle(imageTextInfo.getTitle()); //图文消息标题 
+		article.setDescription(imageTextInfo.getDigest());//图文消息描述
+		article.setPicUrl(picUrl);//图片URL
+		article.setUrl(clickUrl);//点击图文消息跳转链接
+	
+		if(imageTextInfo.getClickOutUrl() != null && !"".equals(imageTextInfo.getClickOutUrl())){
+			article.setUrl(imageTextInfo.getClickOutUrl()+ "?openid=" + requestMap.get("FromUserName")); //如果外链不为空则为外链
+		}
+		articleList.add(article);
+		
+		if (imagetextMoreList != null) {
+			for(ImageTextMore textMore : imagetextMoreList){
+				article = new Article();
+				article.setTitle(textMore.getTitle()); //图文消息标题 
+				 
+				picUrl = NameUtils.getConfig("IMAGE_URL") + textMore.getImageUrl();
+				clickUrl = NameUtils.getConfig("MORE_CLICK_URL") + textMore.getMoreImageTextNo();
+				article.setUrl(clickUrl);//点击图文消息跳转链接
+				article.setPicUrl(picUrl);//图片链接
+				article.setDescription(textMore.getDigest());//图文消息描述
+				if(textMore.getClickOutUrl() != null && !"".equals(textMore.getClickOutUrl())){
+					article.setUrl(textMore.getClickOutUrl() + "?openid=" + requestMap.get("FromUserName")); //如果外链不为空则为外链
+				}
+				articleList.add(article);			
+			}
+		}
+		
+		return getNewsMessage(requestMap, articleList);
+	}
+	
+	/**
+	 * 组装图文消息
+	 * @param requestMap
+	 * @param articles
+	 * @return
+	 */
+	public static String getNewsMessage(Map<String, String> requestMap, List<Article> articles) {
+		NewsMessage newsMessage = new NewsMessage();
+		newsMessage.setFuncFlag(1);
+		newsMessage.setArticles(articles);
+		newsMessage.setArticleCount(articles.size());
+		newsMessage.setToUserName(requestMap.get("FromUserName"));
+		newsMessage.setFromUserName(requestMap.get("ToUserName"));
+		newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
+		newsMessage.setCreateTime(Long.parseLong(requestMap.get("CreateTime")));
+		return MessageUtil.newsMessageToXml(newsMessage);
+	}
+}

+ 207 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/MessageUtil.java

@@ -0,0 +1,207 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.wechat.core.entity.wx.*;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.core.util.QuickWriter;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.InputStream;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 消息工具类
+ * @author fzh
+ */
+public class MessageUtil {
+
+	/**
+	 * 返回消息类型:文本
+	 */
+	public static final String RESP_MESSAGE_TYPE_TEXT = "text";
+
+	/**
+	 * 返回消息类型:音乐
+	 */
+	public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
+
+	/**
+	 * 返回消息类型:图文
+	 */
+	public static final String RESP_MESSAGE_TYPE_NEWS = "news";
+
+	/**
+	 * 请求消息类型:文本
+	 */
+	public static final String REQ_MESSAGE_TYPE_TEXT = "text";
+
+	/**
+	 * 请求消息类型:图片
+	 */
+	public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
+
+	/**
+	 * 请求消息类型:链接
+	 */
+	public static final String REQ_MESSAGE_TYPE_LINK = "link";
+
+	/**
+	 * 请求消息类型:地理位置
+	 */
+	public static final String REQ_MESSAGE_TYPE_LOCATION = "location";
+
+	/**
+	 * 请求消息类型:音频
+	 */
+	public static final String REQ_MESSAGE_TYPE_VOICE = "voice";
+
+	/**
+	 * 请求消息类型:推送
+	 */
+	public static final String REQ_MESSAGE_TYPE_EVENT = "event";
+
+	/**
+	 * 事件类型:subscribe(订阅)
+	 */
+	public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
+
+	/**
+	 * 事件类型:unsubscribe(取消订阅)
+	 */
+	public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
+
+	/**
+	 * 事件类型:CLICK(自定义菜单点击事件)
+	 */
+	public static final String EVENT_TYPE_CLICK = "CLICK";
+
+	/**
+	 * 解析微信发来的请求(xml)
+	 * @param request
+	 * @return
+	 * @throws Exception
+	 */
+	@SuppressWarnings("unchecked")
+	public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
+		// 将解析结果存储在HashMap中
+		Map<String, String> map = new HashMap<String, String>();
+
+		// 从request中取得输入流
+		InputStream inputStream = request.getInputStream();
+		// 读取输入流
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(inputStream);
+		// 得到xml根元素
+		Element root = document.getRootElement();
+		// 得到根元素的所有子节点
+		List<Element> elementList = root.elements();
+
+		// 遍历所有子节点
+		for (Element e : elementList)
+			map.put(e.getName(), e.getText());
+
+		// 释放资源
+		inputStream.close();
+		inputStream = null;
+
+		return map;
+	}
+
+	@SuppressWarnings("unchecked")
+	public static Map<String, String> parse2Xml(String html) throws Exception {
+		// 将解析结果存储在HashMap中
+		Map<String, String> map = new HashMap<String, String>();
+
+		// 读取输入流
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(html);
+		// 得到xml根元素
+		Element root = document.getRootElement();
+		// 得到根元素的所有子节点
+		List<Element> elementList = root.elements();
+
+		// 遍历所有子节点
+		for (Element e : elementList){
+			map.put(e.getName(), e.getText());
+		}
+
+		return map;
+	}
+	
+	/**
+	 * 文本消息对象转换成xml
+	 * @param textMessage 文本消息对象
+	 * @return xml
+	 */
+	public static String textMessageToXml(TextMessage textMessage) {
+		xstream.alias("xml", textMessage.getClass());
+		return xstream.toXML(textMessage);
+	}
+	
+	/**
+	 * 音乐消息对象转换成xml
+	 * @param musicMessage 音乐消息对象
+	 * @return xml
+	 */
+	public static String musicMessageToXml(MusicMessage musicMessage) {
+		xstream.alias("xml", musicMessage.getClass());
+		return xstream.toXML(musicMessage);
+	}
+	
+	/**
+	 * 图文消息对象转换成xml
+	 * @param newsMessage 图文消息对象
+	 * @return xml
+	 */
+	public static String newsMessageToXml(NewsMessage newsMessage) {
+		xstream.alias("item", Article.class);
+		xstream.alias("xml", newsMessage.getClass());
+		return xstream.toXML(newsMessage).replaceAll("com.rat.utils.wx.event.entitys.Article", "item");
+	}
+	
+	/**
+	 * 多客服消息对象转换成xml
+	 * @param transferCustomer
+	 * @return
+	 */
+	public static String transferCustomerToXml(TransferCustomer transferCustomer) {
+		xstream.alias("xml", transferCustomer.getClass());
+		return xstream.toXML(transferCustomer);
+	}
+
+	/**
+	 * 扩展xstream,使其支持CDATA块
+	 */
+	private static XStream xstream = new XStream(new XppDriver() {
+		public HierarchicalStreamWriter createWriter(Writer out) {
+			return new PrettyPrintWriter(out) {
+				// 对所有xml节点的转换都增加CDATA标记
+				boolean cdata = true;
+
+				@SuppressWarnings("unchecked")
+				public void startNode(String name, Class clazz) {
+					super.startNode(name, clazz);
+				}
+
+				protected void writeText(QuickWriter writer, String text) {
+					if (cdata) {
+						writer.write("<![CDATA[");
+						writer.write(text);
+						writer.write("]]>");
+					} else {
+						writer.write(text);
+					}
+				}
+			};
+		}
+	});
+	
+}

+ 25 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/TokenServiceImpl.java

@@ -0,0 +1,25 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.rst.faces.wechat.TokenService;
+import com.iamberry.rst.service.wechat.mapper.TokenMapper;
+import com.iamberry.wechat.core.entity.wx.Token;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TokenServiceImpl implements TokenService {
+	
+	@Autowired
+	private TokenMapper mapper;
+	
+
+	// 获取token
+	public Token selectOne(String appid) {
+		return mapper.selectOne(appid);
+	}
+	
+	// 修改token
+	public Integer updateToken(Token token) {
+		return mapper.updateToken(token);
+	}
+}

+ 523 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/WeChatServiceImpl.java

@@ -0,0 +1,523 @@
+package com.iamberry.rst.service.wechat;
+
+import com.iamberry.app.tool.log.RatFWLogger;
+import com.iamberry.rst.faces.wechat.*;
+import com.iamberry.wechat.core.entity.member.Member;
+import com.iamberry.wechat.core.entity.wx.*;
+import com.iamberry.wechat.tools.*;
+import net.sf.json.JSONObject;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * description : wechat handler的核心服务类
+ * @author 何秀刚
+ * create date:2016年3月10日
+ */
+@Service
+public class WeChatServiceImpl implements WeChatService {
+	@Autowired
+	private KeyWordService keyWordService;
+	@Autowired
+	private RatFWLogger inLongLogger;
+	@Autowired
+	private ImageTextInfoService imageTextInfoService;
+	@Autowired
+	private MenuKeySetService menuKeySetService;
+	@Autowired
+	private ImageTextMoreService imageTextMoreService;
+	@Autowired
+	private HomeService homeService;
+
+	/**
+	 * 处理微信发来的请求
+	 * @param FromUserName
+	 * @return
+	 */
+	@Override
+	public String processRequest(String FromUserName, String ToUserName, String MsgType, String CreateTime, String Content, String Event, String Ticket, String EventKey) {
+		// 创建Map,防止错误
+		Map<String, String> requestMap = new HashMap<String, String>();
+		requestMap.put("FromUserName", FromUserName);
+		requestMap.put("ToUserName", ToUserName);
+		requestMap.put("MsgType", MsgType);
+		requestMap.put("CreateTime", CreateTime);
+		requestMap.put("Content", Content);
+		requestMap.put("Event", Event);
+		requestMap.put("Ticket", Ticket);
+		requestMap.put("EventKey", EventKey);
+
+		String respMessage = null;
+		String fromUserName = null;// 发送方帐号(open_id)
+		String toUserName = null;// 公众帐号
+		long createTime = 0L;// 时间
+		String msgType = null;// 消息类型
+		try {
+			// 默认返回的文本消息内容
+			String respContent = "";
+			// 解析参数
+			fromUserName = requestMap.get("FromUserName");
+			toUserName = requestMap.get("ToUserName");
+			msgType = requestMap.get("MsgType");
+			createTime = new Date().getTime();
+
+			// 准备返回给微信服务器的文本消息对象
+			TextMessage textMessage = new TextMessage();
+			textMessage.setCreateTime(createTime);
+			textMessage.setToUserName(fromUserName);
+			textMessage.setFromUserName(toUserName);
+			textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
+
+			//多客服处理
+			String intxml = "<xml>"+
+					"<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>" +
+					"<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
+					"<CreateTime>" + createTime + "</CreateTime>" +
+					"<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>";
+			/*
+			 * 各种消息处理
+			 */
+			if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){	//文本消息
+				String content = requestMap.get("Content").trim();//去空格
+				if(!(content != null && !"".equals(content))) { // 消息为空的处理
+					respContent = ResultInfo.messageIsNullResponseText;
+				}
+
+				if(QQFace.isQqFace(content)){// QQ表情的处理
+					String xml = "<xml>"+
+							"<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>" +
+							"<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
+							"<CreateTime>" + createTime + "</CreateTime>" +
+							"<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>";
+					return xml;
+				}
+
+				if (content.startsWith(NameUtils.getConfig("PLACE_CODE_PREFIX"))) {// 激活码为“CODE”开头 则为代理商绑定
+					content = StringUtils.trim(content);
+					//respContent = bulidPlace(content, fromUserName);
+				} else {
+					// 文本类型的消息处理
+					Status status = messageHandler(content, requestMap, fromUserName, toUserName, createTime+"");
+					if (status.isFlag()) {
+						return respContent = status.getCountext();
+					} else {
+						respContent = status.getCountext();
+					}
+				}
+
+			} else if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){// 图片消息
+				//转发到多客服系统
+				return intxml;
+			} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {// 地理位置消息
+				// 解析出地理位置消息
+				return intxml;
+			} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {// 链接消息
+				return intxml;
+			} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {// 音频消息
+				return intxml;
+			} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {// 事件推送
+
+				String eventType = requestMap.get("Event");// 事件类型
+				String eventKey = requestMap.get("EventKey");
+				if(eventType.equals("SCAN")){
+					//扫描机器二维码返回跳转到完善信息页面
+					if (eventKey.indexOf(ResultInfo.barCodePrefix) != -1) {
+						Status status = scannQrcodeGiveGift(requestMap, fromUserName);
+						if (status.isFlag()) {
+							return status.getCountext();
+						}
+						respContent = status.getCountext();
+					} else {
+						// 已关注用户扫描二维码事件
+						int flag = subUserScannQrcodeEvent(requestMap, fromUserName);
+						if (flag == 1) {
+						/*Status status = getCouponImgText(requestMap);
+						if (status.isFlag()) {
+							return status.getCountext();
+						}
+						respContent = status.getCountext();*/
+							respContent = ResultInfo.subDefaultResponseText;
+						} else if (flag == 0) {
+							respContent = ResultInfo.subDefaultResponseText;
+						} else if (flag == 4) {
+							respContent = "欢迎您关注美国watero!您已享受购买水机终身优惠价3280元(普通会员销售价3680元),并且购买即赠三年滤芯套装,快来购买吧!<a href=\"http://w.iamberry.com/watero/wechat/wxCart/goProductList\">点击购买</a>";
+						} else {
+							respContent = "欢迎您关注美国watero,恭喜您成为金牌会员。自己购买或者推荐朋友购买水机均将享受3280元优惠价,并免费赠送3年滤芯哦!点击菜单“分销中心-代理分销”可进入您的专属分销管理中心。";
+						}
+					}
+				} else if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
+					// 订阅
+					if(requestMap.get("Ticket") != null){
+						//扫描机器二维码返回跳转到完善信息页面
+						if (eventKey.indexOf(ResultInfo.barCodePrefix) != -1) {
+							Status status = scannQrcodeSubGiveGift(requestMap, fromUserName);
+							if (status.isFlag()) {
+								return status.getCountext();
+							}
+							respContent = status.getCountext();
+						} else {
+							//未关注用户扫描二维码关注事件处理
+							Status status = scannQRcodeSub(requestMap, fromUserName);
+							if (status.isFlag()) {
+								return status.getCountext();
+							}
+							respContent = status.getCountext();
+						}
+					} else {
+						// 搜索公众号关注
+						Status status = queryWechatSub(fromUserName, requestMap);
+						if (status.isFlag()) {
+							return status.getCountext();
+						}
+						respContent = status.getCountext();
+					}
+				} else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
+					// 取消订阅
+
+					unSubScribe(fromUserName);
+					respContent = "Success";
+				} else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK) || eventType.equals("VIEW")) {
+					// 自定义菜单点击事件
+					Status status = clickWechatMenuEnent(requestMap);
+					if (status.isFlag()) {
+						return status.getCountext();
+					}
+					respContent = status.getCountext();
+				}
+			}
+			// 回复文本消息
+			textMessage.setContent(respContent);
+			respMessage = MessageUtil.textMessageToXml(textMessage);
+		} catch (Exception e) {
+			inLongLogger.debug(this, e.getMessage());
+			TextMessage textMessage = new TextMessage();
+			textMessage.setCreateTime(createTime);
+			textMessage.setToUserName(fromUserName);
+			textMessage.setFromUserName(toUserName);
+			textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
+			textMessage.setContent(ResultInfo.tryCatchDefaultResponseText);
+			respMessage = MessageUtil.textMessageToXml(textMessage);
+		}
+		return respMessage;
+	}
+
+	/**
+	 * 扫码进入赠送礼品信息页面(已关注)
+	 * @param requestMap
+	 */
+	public Status scannQrcodeGiveGift(Map<String, String> requestMap, String fromUserName) {
+		Status status = new Status();
+		String senceid = requestMap.get("EventKey");//场景值
+		senceid = senceid.replaceAll(ResultInfo.barCodePrefix,"");//替换标识前的字符串
+		String str = bindingMachine(senceid, fromUserName);
+		status.setCountext(str);
+		status.setFlag(false);
+		return status;
+	}
+
+	/**
+	 * 扫码进入赠送礼品信息页面(未关注)
+	 * @param requestMap
+	 * @param fromUserName
+	 */
+	public Status scannQrcodeSubGiveGift(Map<String, String> requestMap, String fromUserName) {
+		//赋值&更新数据
+		Status status = new Status();
+		Member member = refreshUserInfo(fromUserName);
+		String senceid = requestMap.get("EventKey");//场景值
+		senceid = senceid.replaceAll(ResultInfo.barCodePrefix,"");//替换标识前的字符串
+		String str = bindingMachine(senceid.trim(), fromUserName);
+		status.setCountext(str);
+		status.setFlag(false);
+		return status;
+	}
+
+	/**
+	 * 上海wateroPF扫码绑定机器关系
+	 * @param senceid	//机器条形码
+	 * @param fromUserName
+	 * @return
+	 */
+	public String bindingMachine(String senceid, String fromUserName) {
+		StringBuilder str = new StringBuilder();
+		String url = NameUtils.getConfig("rst_base_url") + senceid;
+		Map<String,String> params = new HashMap<String,String>();
+		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+		try {
+			//查询rst订单信息
+			String resultJson = HttpClient431Util.doGet(params,url,null,null,null);
+			resultJson = StringEscapeUtils.unescapeJava(resultJson); // unicode
+			inLongLogger.info("==========================获取机器信息成功,返回值为:" + resultJson + "=========================");
+			JSONObject jsonObject = JSONObject.fromObject(resultJson);
+			if (jsonObject.getInt("resultCode") != 200) {
+				str.append("尊敬的美国WaterO用户您好。\n" +
+						"经检测,您的机器为正品,可放心使用。\n" +
+						"如有疑问,请联系官方客服 4008006692.");
+				return str.toString();
+			}
+			JSONObject jsonMessage = jsonObject.getJSONObject("message");
+			if (jsonMessage.getInt("isBeing") == 2) {
+				str.append("尊敬的美国WaterO用户您好。\n" +
+						"经检测,您的机器为正品,可放心使用。\n" +
+						"如有疑问,请联系官方客服 4008006692.");
+				return str.toString();
+			}
+			str.append("您的<");
+			str.append(jsonMessage.getString("productType"));
+			str.append(">为正品,生产日期为:");
+			str.append(format.format(new Date(jsonMessage.getLong("producedTime"))));
+			str.append("。请放心使用。");
+			return str.toString();
+		} catch (Exception e) {
+			inLongLogger.info("==========================获取机器信息失败,机器条形码为:" + senceid + "=========================");
+			str.append("尊敬的美国WaterO用户您好。\n" +
+					"经检测,您的机器为正品,可放心使用。\n" +
+					"如有疑问,请联系官方客服 4008006692.");
+			return str.toString();
+		}
+	}
+
+
+
+	/**
+	 * 已关注用户扫描二维码事件
+	 * @param requestMap
+	 * @param fromUserName
+	 * @throws Exception
+	 */
+	public int subUserScannQrcodeEvent(Map<String, String> requestMap, String fromUserName) throws Exception {
+		String senceid = requestMap.get("EventKey");//已经关注用户扫描二维码触发事件:获取二维码场景值
+		Member member = refreshUserInfo(fromUserName);
+		// 是否更新数据
+		//boolean isNew = false;
+		//没绑关系、没有来源、上线是代理商时的id为空、没有微代理层关系 时, 则可以绑定用户关系
+//		if (member.getUserIsFlag() != null && member.getUserIsFlag().intValue() == 1) {
+//			isNew = true;
+//		}
+	/*	QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(fromUserName);//为用户生成二维码
+		inLongLogger.info("为用户-->" + fromUserName + ",生成二维码:" + qr.getQroceUrl());*/
+        return 1;	//为用户绑定关系
+	}
+
+	/**
+	 * 未关注用户扫描二维码关注
+	 * @param requestMap
+	 * @param fromUserName
+	 * @return
+	 * @throws Exception
+	 */
+	public Status scannQRcodeSub(Map<String, String> requestMap, String fromUserName) throws Exception {
+		// 解析场景值
+		String senceid = requestMap.get("EventKey");//场景值
+		//赋值&更新数据
+		Member member = refreshUserInfo(fromUserName);
+		// 是否更新数据
+		boolean isNew = false;
+
+		if (member.getUserIsFlag() != null && member.getUserIsFlag().intValue() == 1) {
+				isNew = true;
+		}
+		int isMessage = 1; //buildRelation(member, senceid, isNew);
+		Status status = new Status();
+        if (isMessage == 1) {//成功绑定关系 则推送优惠券图文
+        	/*status = getCouponImgText(requestMap);*/
+        	status.setFlag(false);
+    		status.setCountext(ResultInfo.subDefaultResponseText);
+        }else if(isMessage == 0){
+        	/*  用在分享二维码页面  从未关注公众号的用户B,通过点击用户A分享的二维码,关系就已经绑定,但是仍需要推送优惠券图文
+        	 * 故 判断A初始从未关注,而关系已经绑定,则推送优惠券 */
+        	/*if(oldStatus == 1){
+        		status = getCouponImgText(requestMap);
+        	}else{
+        		status.setFlag(false);
+        		status.setCountext(ResultInfo.subDefaultResponseText);
+        	}*/
+        	status.setFlag(false);
+    		status.setCountext(ResultInfo.subDefaultResponseText);
+        } else if (isMessage == 4) {
+        	status.setFlag(false);
+        	status.setCountext("欢迎您关注美国watero!您已享受购买水机终身优惠价3280元(普通会员销售价3680元),并且购买即赠三年滤芯套装,快来购买吧!<a href=\"http://w.iamberry.com/watero/wechat/wxCart/goProductList\">点击购买</a>");
+		} else{
+        	status.setFlag(false);
+    		status.setCountext("欢迎您关注美国watero,恭喜您成为金牌会员。自己购买或者推荐朋友购买水机均将享受3280元优惠价,并免费赠送3年滤芯哦!点击菜单“分销中心-代理分销”可进入您的专属分销管理中心。");
+        }
+        /*QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(fromUserName);//为用户生成二维码
+        inLongLogger.info("为用户-->" + fromUserName + ",生成二维码:" + qr.getQroceUrl());*/
+		//返回数据
+		return status;
+	}
+
+	/**
+	 * 用户自己搜索微信公众号关注
+	 * @param fromUserName
+	 * @param requestMap
+	 * @return
+	 * @throws Exception
+	 */
+	public Status queryWechatSub(String fromUserName, Map<String, String> requestMap) throws Exception {
+		//赋值&更新数据
+		refreshUserInfo(fromUserName);
+		//memberDao.updateUserFlagByOpenId(fromUserName);		// 绑定用户关系
+		/*QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(fromUserName);//为用户生成二维码
+		if(qr != null ){
+			inLongLogger.info("为用户-->" + fromUserName + ",生成二维结果成功!");
+		}*/
+
+		Status status = new Status();
+		String respContent = ResultInfo.subDefaultResponseText;
+		status.setCountext(respContent);
+		return status;
+	}
+
+	/**
+	 * 更新微信用户信息
+	 * 2016年11月17日
+	 */
+	private Member refreshUserInfo(String openId){
+		JSONObject jsonObject = WeixinUtil.getUserInfo(openId);
+		String sex = jsonObject.getString("sex");//值为1时是男性,值为2时是女性,值为0时是未知
+		String city = jsonObject.getString("city");
+		String country = jsonObject.getString("country");
+		String province = jsonObject.getString("province");
+		String nickname = jsonObject.getString("nickname");
+		String headimgurl = jsonObject.getString("headimgurl");
+		try {
+			nickname = URLEncoder.encode(jsonObject.getString("nickname"), "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			nickname = "";
+			inLongLogger.error(this, e.getMessage());
+		}
+		Member member = homeService.selectMemberInfoByOpenId(openId);
+		//赋值&更新会员数据
+		if (member != null && member.getUserId() != null) {
+			member.setUserOpenid(openId);
+			member.setUserNickname(nickname);
+			member.setUserSex(Integer.parseInt(sex));
+			member.setUserAddr(country+"-"+province+"-"+city);
+			member.setUserHead(headimgurl);
+			//userIsBought 暂存旧的关注状态
+			member.setUserIsBought(member.getUserStatus() == null ? 1 : member.getUserStatus());
+			member.setUserStatus(2); // 已关注
+			homeService.updateWechatMemberInfoByByOpenid(member);
+		} else {
+			member = new Member();
+			member.setUserNickname(nickname);
+			member.setUserSex(Integer.parseInt(sex));
+			member.setUserAddr(country+"-"+province+"-"+city);
+			member.setUserHead(headimgurl);
+			member.setUserStatus(2); // 已关注
+			member.setUserOpenid(openId);
+			member.setUserIsBought(1);
+			member.setUserIsFlag(1);
+			homeService.insertMemberInfo(member);
+		}
+		return member;
+	}
+
+	/**
+	 * 用户取消关注时的事件
+	 * @param fromUserName
+	 */
+	public void unSubScribe(String fromUserName) {
+		try {
+			// 更新用户状态
+			homeService.updateMemberStatusByOpenId(fromUserName);
+			// 更新渠道二维码信息,如果有
+			// qrcodeService.updateQRcodeStatusByUserOpenid(fromUserName);
+			// 待确认,是否微代理一旦取消关注就自动回收微代理的资格?
+		} catch (Exception e) {
+			inLongLogger.error(this, e.getMessage());
+		}
+	}
+
+	/**
+	 * 自定义菜单点击事件
+	 * @param requestMap
+	 * @return
+	 * @throws Exception
+	 */
+	public Status clickWechatMenuEnent(Map<String, String> requestMap) throws Exception {
+		Status status = new Status();
+		// 事件KEY值,与创建自定义菜单时指定的KEY值对应
+        String eventKey = requestMap.get("EventKey").trim();
+        //保存消息记录
+		MenuKeySet menuKeySet = menuKeySetService.selectByPubNoAndKeyWord(NameUtils.getConfig("pubNo"), eventKey);
+		String respContent = ResultInfo.subDefaultResponseText;
+		if(menuKeySet != null){
+			if("1".equals(menuKeySet.getReType())){	   //文本
+				respContent = menuKeySet.getRefText();
+			}else if("2".equals(menuKeySet.getReType())){//图文
+				List<ImageTextMore> imagetextMoreList = null;
+				ImageTextInfo imageTextInfo = imageTextInfoService.findImageTextInfoById(Long.parseLong(menuKeySet.getRefImageTextId()));
+				if(imageTextInfo != null) {
+					//判断是否多图文
+					if("2".equals(imageTextInfo.getImageTextType())){
+						imagetextMoreList = imageTextMoreService.findImageTextmore(imageTextInfo.getImageTextNo());
+					}
+					status.setFlag(true);
+					respContent = MessageManager.getImageTextInfo(requestMap, imageTextInfo, imagetextMoreList);
+				}
+			}
+		}
+		status.setCountext(respContent);
+		return status;
+	}
+
+	/***
+	 * 消息处理
+	 * @param content
+	 * @param requestMap
+	 * @param fromUserName
+	 * @param toUserName
+	 * @param createTime
+	 * @return
+	 */
+	public Status messageHandler(String content, Map<String, String> requestMap, String fromUserName, String toUserName, String createTime) {
+		Status status = new Status();
+		status.setCountext(ResultInfo.messageDefaultResponseText);
+		status.setFlag(true);
+		KeyWord keyword = keyWordService.getByKeyWord(content);//是否命中关键字
+		if(keyword != null) {//判断是否存在关键字回复
+			if("1".equals(keyword.getReType())) {//文本
+				status.setCountext(keyword.getRefText());
+				status.setFlag(false);
+			} else if("2".equals(keyword.getReType())){//图文
+				List<ImageTextMore> imagetextMoreList = null;
+				ImageTextInfo imageTextInfo = imageTextInfoService.findImageTextInfoById(keyword.getRefImageTextId());
+				if(imageTextInfo != null) {//判断是否为多图文
+					if("2".equals(imageTextInfo.getImageTextType())){//判断是否多图文
+						imagetextMoreList = imageTextMoreService.findImageTextmore(imageTextInfo.getImageTextNo());
+					}
+					try {
+						String s = MessageManager.getImageTextInfo(requestMap, imageTextInfo, imagetextMoreList);
+						status.setCountext(s);
+						status.setFlag(true);
+						return status;
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		} else { // 如果没有命中关键字,直接接入到客服
+			String xml = "<xml>"+
+					"<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>" +
+					"<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
+					"<CreateTime>" + createTime + "</CreateTime>" +
+					"<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>";
+			status.setCountext(xml);
+			status.setFlag(true);
+		}
+		return status;
+	}
+
+}

+ 31 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/ConfigDAO.java

@@ -0,0 +1,31 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.wx.Config;
+import com.iamberry.wechat.core.entity.wx.WechatShare;
+
+public interface ConfigDAO {
+	public Config getConfig(String appId);
+	
+	public void updateConfig(Config config);
+
+	/**
+	 * 添加一个微信分享的数据
+	 * @param wechatShare
+	 * @return
+	 */
+	public int addWechatShare(WechatShare wechatShare);
+
+	/**
+	 * 根据URL的hash值,获取对应的数据
+	 * @param urlHash
+	 * @return
+	 */
+	public WechatShare selectWechatShareByHash(Integer urlHash);
+	
+	/**
+	 * 更新微信分享的参数
+	 * @param share
+	 * @return
+	 */
+	public int updateWechatShareByHash(WechatShare share);
+}

+ 24 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/FirstJoinKeyDAO.java

@@ -0,0 +1,24 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.wx.FirstJoinKey;
+
+
+public interface FirstJoinKeyDAO {
+	
+	/**
+	 * 获取首次推送消息的FirstJoinKey对象
+	 */
+	public FirstJoinKey getBywxpublicNO(String wxpublicNo);
+	
+	
+	/**
+	 * 修改记录
+	 * 根据FirstJoinKey对象中的wxpublicNo
+	 */
+	public int updatebyFirstJoinKey(FirstJoinKey firstJoinKey);
+	
+	/**
+	 * 添加记录
+	 */
+	public int addFirstJoinKey(FirstJoinKey firstJoinKey);
+}

+ 75 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/HomeServiceDao.java

@@ -0,0 +1,75 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.member.Member;
+
+public interface HomeServiceDao {
+	
+	/**
+	 * 根据用户Openid,获取会员信息
+	 * @param openid
+	 * @return
+	 */
+	public Member selectMemberInfoByOpenId(String openid);
+
+	/**
+	 * 根据用户Openid,修改微信获取到的信息
+	 * @param member 会员信息实体类
+	 * @return
+	 */
+	public Integer updateWechatMemberInfoByByOpenid(Member member);
+
+	/**
+	 * 添加会员信息
+	 * @param member
+	 * @return
+	 */
+	public Integer insertMemberInfo(Member member);
+
+	/**
+	 * 根据用户openid,更新用户的上线
+	 * @param member
+	 * @return
+	 */
+	public Integer updateUserResAndTypeByOpenid(Member member);
+
+	/**
+	 * 根据Openid,更新用户状态为取消关注状态
+	 * @param openid
+	 * @return
+	 */
+	public Integer updateMemberStatusByOpenId(String openid);
+
+	/**
+	 * 根据用户Openid获取用户二维码(不一定有)
+	 * @param openid
+	 * @return
+	 */
+	public Member selectMemberQrcodeUrlByOpenid(String openid);
+
+	/**
+	 * 修改用户所属二维码
+	 * @param member
+	 * @return
+	 */
+	public Integer updateMemberQrcodeByOpenid(Member member);
+
+	/**
+	 * 根据openid,获取用户可用积分
+	 * @param openid
+	 * @return
+	 */
+	public Integer selectUserIntegralByOpenid(String openid);
+
+	/**
+	 * 根据代理商ID,获取激活此代理商的用户信息
+	 * @param placeId
+	 * @return
+	 */
+	public Member selectUserInfoByPlaceId(Integer placeId);
+	/**
+	 * 根据Openid,更新绑定状态
+	 * @param member
+	 * @return
+	 */
+	public Integer updateMemberIsFlagByOpenid(Member member);
+}

+ 68 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/ImageTextInfoDAO.java

@@ -0,0 +1,68 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.ImageTextInfo;
+
+import java.util.List;
+
+public interface ImageTextInfoDAO {
+	/**
+	 * 添加图文素材
+	 * --》添加ImageTextInfo对象
+	 * @return 返回的是添加记录数
+	 */
+	public int addImageTextInfo(ImageTextInfo imageTextInfo); 
+	
+	/**
+	 * 删除图文素材
+	 * --》根据图文ID号来删除相应的图文素材
+	 * @return 返回的是删除记录数
+	 */
+	public int delImageTextInfo(Long id);
+	
+	/**
+	 * 修改图文素材
+	 * --》根据ID来修改图文素材信息
+	 * @return 返回的是修改记录数
+	 */
+	public int updateImageTextInfo(ImageTextInfo imageTextInfo);
+	
+	/**
+	 * 按照id来查询查找图文素材
+	 * 根据素材来出啊训
+	 */
+	public ImageTextInfo findImageTextInfoById(Long id);
+	
+	/**
+	 * 按照公众账号来查询所有的图文素材
+	 */
+	public List<ImageTextInfo> findImageTextInfoBywxPublicNo(String wxPublicNo);
+	
+	/**
+	 * 根据微信公众账号、页数、每页显示的记录来分页查询
+	 */
+	public List<ImageTextInfo> findImageTextInfo(String wxPublicNo, Integer pageNo, Integer selectNum);
+	
+	/**
+	 * 根据微信公众号来查询该微信共有多少图文素材
+	 */
+	public int findImageTextInfoNo(String wxPublicNo);
+	
+	/**
+	 * 分页查询图文素材
+	 */
+	public List<ImageTextInfo> selectImageTextInfoList(PaperBean bean);
+	
+	/**
+	 * 根据公众账号查看全部素材
+	 */
+	public List<ImageTextInfo> selectAllImageTextList(String publicWxNo);
+	
+	/**
+	 * 扫描其他表中有没有使用该素材的
+	 */
+	public Integer selectFirstAnswerByID(Integer imageTextId);
+	public Integer selectKeyWordByID(Integer imageTextId);
+	public Integer selectMenuKeyByID(Integer imageTextId);
+	
+}

+ 39 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/ImageTextMoreDAO.java

@@ -0,0 +1,39 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+
+import java.util.List;
+
+public interface ImageTextMoreDAO {
+	/**
+	 * 添加多图文素材
+	 */
+	public int addImageTextMore(ImageTextMore imageTextMore);
+	
+	/**
+	 * 删除多图文素材
+	 */
+	public int delImageTextMore(Long id);
+	
+	/**
+	 * 根据多图文的主图文ID,删除多图文
+	 */
+	public int delImageTextMoreByImageNo(Long id);
+	
+	/**
+	 * 修改多图文素材
+	 */
+	public int updateImageTextMore(ImageTextMore imageTextMore);
+	
+	/**
+	 *根据ID查询
+	 */
+	public List<ImageTextMore> findImageTextmore(Long imageTextNo);
+	
+	public ImageTextMore getImageTextmore(Long imageTextMoreNo);
+	
+	/**
+	 * 根据主图文ID,查询附图文数量
+	 */
+	public Integer selectMoreImageTextCountByMainId(Integer mainImageTextId);
+}

+ 49 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/KeyWordDAO.java

@@ -0,0 +1,49 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.KeyWord;
+import com.iamberry.wechat.core.entity.wx.PagingDTO;
+
+import java.util.List;
+
+public interface KeyWordDAO {
+	public KeyWord getById(Long keyServiceNo);
+	
+	/**
+	 * 查询关键字列表
+	 * @param bean
+	 * @return
+	 */
+	public List<KeyWord> selectKeyList(PaperBean bean);
+	
+	/**
+	 * 查询关键字的数量
+	 * @param keyWord
+	 */
+	public Integer selectKeyListCount(PaperBean bean);
+	
+	/**
+	 * 批量删除
+	 * @param keyWord
+	 */
+	public Integer batchDelKeyWordById(List<Integer> delIdList);
+	
+	/**
+	 * 单个删除
+	 * @param keyWord
+	 */
+	public Integer deleteKeyWordById(Long id);
+	
+	void insert(KeyWord keyword);
+	void updateByPrimaryKey(KeyWord keyword);
+	
+	/**
+	 * 共分多少页
+	 */
+	public int getPageNum(String pubNo, int selectNum);
+	/**
+	 * 分页显示内容 
+	 */
+	public List<KeyWord> getBypubNoAndPageNo(PagingDTO pdto);
+	public KeyWord getByKeyWord(String keyword);
+}

+ 16 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/MenuInfoDAO.java

@@ -0,0 +1,16 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.wx.MenuInfo;
+
+public interface MenuInfoDAO {
+
+	public MenuInfo selectOne(String pubNo);
+	
+	public MenuInfo selectByMenuIdAndPubNo(String menuId, String pubNo);
+	
+	int insert(MenuInfo menuInfo);
+	
+	int update(MenuInfo menuInfo);
+	
+	int deleteByPubNo(String pubNo);
+}

+ 14 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/MenuKeySetDAO.java

@@ -0,0 +1,14 @@
+package com.iamberry.rst.service.wechat.dao;
+
+import com.iamberry.wechat.core.entity.wx.MenuKeySet;
+
+public interface MenuKeySetDAO {
+
+	int insert(MenuKeySet menuKeySet);
+	
+	int update(MenuKeySet menuKeySet);
+	
+	int deleteByPubNo(String pubNo);
+	
+	MenuKeySet selectByPubNoAndKeyWord(String pubNo, String keyword);
+}

+ 50 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/ConfigDAOImpl.java

@@ -0,0 +1,50 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.ConfigDAO;
+import com.iamberry.rst.service.wechat.mapper.ConfigMapper;
+import com.iamberry.rst.service.wechat.mapper.WechatShareMapper;
+import com.iamberry.wechat.core.entity.wx.Config;
+import com.iamberry.wechat.core.entity.wx.WechatShare;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class ConfigDAOImpl implements ConfigDAO {
+	
+	@Autowired
+	private WechatShareMapper wechatShareMapper;
+	
+	@Autowired
+	private ConfigMapper configMapper;
+	public void setConfigMapper(ConfigMapper configMapper) {
+		this.configMapper = configMapper;
+	}
+
+	@Override
+	public Config getConfig(String appId) {
+		return configMapper.getConfig(appId);
+	}
+
+	@Override
+	public void updateConfig(Config config) {
+		configMapper.updateConfig(config);
+	}
+
+	@Override
+	public int addWechatShare(WechatShare wechatShare) {
+		// TODO Auto-generated method stub
+		return wechatShareMapper.addWechatShare(wechatShare);
+	}
+
+	@Override
+	public WechatShare selectWechatShareByHash(Integer urlHash) {
+		// TODO Auto-generated method stub
+		return wechatShareMapper.selectWechatShareByHash(urlHash);
+	}
+
+	@Override
+	public int updateWechatShareByHash(WechatShare share) {
+		// TODO Auto-generated method stub
+		return wechatShareMapper.updateWechatShareByHash(share);
+	}
+}

+ 47 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/FirstJoinKeyDaoImpl.java

@@ -0,0 +1,47 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.FirstJoinKeyDAO;
+import com.iamberry.rst.service.wechat.mapper.FirstJoinKeyMapper;
+import com.iamberry.wechat.core.entity.wx.FirstJoinKey;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class FirstJoinKeyDaoImpl implements FirstJoinKeyDAO {
+	
+	@Autowired
+	private FirstJoinKeyMapper firstJoinKeyMapper;
+	public void setFirstJoinKeyMaper(FirstJoinKeyMapper firstJoinKeyMapper) {
+		this.firstJoinKeyMapper = firstJoinKeyMapper;
+	}
+	
+	/**
+	 * 查询首次回复
+	 */
+	@Override
+	public FirstJoinKey getBywxpublicNO(String wxpublicNo) {
+		// TODO Auto-generated method stub
+		return firstJoinKeyMapper.selectOne(wxpublicNo);
+	}
+	
+	/**
+	 * 修改首次回复
+	 */
+	@Override
+	public int updatebyFirstJoinKey(FirstJoinKey firstJoinKey) {
+		// TODO Auto-generated method stub
+		return firstJoinKeyMapper.updateOne(firstJoinKey);
+	}
+	
+	/**
+	 * 添加记录
+	 */
+	@Override
+	public int addFirstJoinKey(FirstJoinKey firstJoinKey) {
+		// TODO Auto-generated method stub
+		return firstJoinKeyMapper.addOne(firstJoinKey);
+	}
+	
+	
+	
+}

+ 79 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/HomeServiceDaoImpl.java

@@ -0,0 +1,79 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.HomeServiceDao;
+import com.iamberry.rst.service.wechat.mapper.HomeMemberMapper;
+import com.iamberry.wechat.core.entity.member.Member;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author 何秀刚
+ * Class Description: DAO实现类
+ * Create Date:2016年4月18日
+ * Update Date:2016年4月18日
+ */
+@Repository
+public class HomeServiceDaoImpl implements HomeServiceDao {
+	@Autowired
+	private HomeMemberMapper homeMemberMapper;
+	
+	@Override
+	public Member selectMemberInfoByOpenId(String openid) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.selectMemberInfoByOpenId(openid);
+	}
+
+	@Override
+	public Integer updateWechatMemberInfoByByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.updateWechatMemberInfoByByOpenid(member);
+	}
+
+	@Override
+	public Integer insertMemberInfo(Member member) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.insertMemberInfo(member);
+	}
+
+	@Override
+	public Integer updateUserResAndTypeByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.updateUserResAndTypeByOpenid(member);
+	}
+
+	@Override
+	public Integer updateMemberStatusByOpenId(String openid) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.updateMemberStatusByOpenId(openid);
+	}
+
+	@Override
+	public Member selectMemberQrcodeUrlByOpenid(String openid) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.selectMemberQrcodeUrlByOpenid(openid);
+	}
+
+	@Override
+	public Integer updateMemberQrcodeByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.updateMemberQrcodeByOpenid(member);
+	}
+
+	@Override
+	public Integer selectUserIntegralByOpenid(String openid) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.selectUserIntegralByOpenid(openid);
+	}
+
+	@Override
+	public Member selectUserInfoByPlaceId(Integer placeId) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.selectUserInfoByPlaceId(placeId);
+	}
+
+	@Override
+	public Integer updateMemberIsFlagByOpenid(Member member) {
+		// TODO Auto-generated method stub
+		return homeMemberMapper.updateMemberIsFlagByOpenid(member);
+	}
+}

+ 87 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/ImageTextInfoDAOImpl.java

@@ -0,0 +1,87 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.ImageTextInfoDAO;
+import com.iamberry.rst.service.wechat.mapper.ImageTextInfoMapper;
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.ImageTextInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public class ImageTextInfoDAOImpl implements ImageTextInfoDAO {
+	@Autowired
+	private ImageTextInfoMapper imageTextInfoMapper;
+	public void setImageTextInfoMapper(ImageTextInfoMapper imageTextInfoMapper) {
+		this.imageTextInfoMapper = imageTextInfoMapper;
+	}
+
+	@Override
+	public int addImageTextInfo(ImageTextInfo imageTextInfo) {
+		return imageTextInfoMapper.addImageTextInfo(imageTextInfo);
+	}
+
+	@Override
+	public int delImageTextInfo(Long id) {
+		return imageTextInfoMapper.delImageTextInfo(id);
+	}
+
+	@Override
+	public int updateImageTextInfo(ImageTextInfo imageTextInfo) {
+		return imageTextInfoMapper.updateImageTextInfo(imageTextInfo);
+	}
+
+	@Override
+	public ImageTextInfo findImageTextInfoById(Long id) {
+		return imageTextInfoMapper.findImageTextInfoById(id);
+	}
+
+	@Override
+	public List<ImageTextInfo> findImageTextInfoBywxPublicNo(String wxPublicNo) {
+		return imageTextInfoMapper.findImageTextInfoBywxPublicNo(wxPublicNo);
+	}
+
+	@Override
+	public List<ImageTextInfo> findImageTextInfo(String wxPublicNo,
+			Integer pageNo, Integer selectNum) {
+		return imageTextInfoMapper.findImageTextInfo(wxPublicNo, pageNo, selectNum);
+	}
+
+	@Override
+	public int findImageTextInfoNo(String wxPublicNo) {
+		return imageTextInfoMapper.findImageTextInfoNo(wxPublicNo);
+	}
+
+	@Override
+	public List<ImageTextInfo> selectImageTextInfoList(PaperBean bean) {
+		// TODO Auto-generated method stub
+		return imageTextInfoMapper.selectImageTextInfoList(bean);
+	}
+
+	@Override
+	public List<ImageTextInfo> selectAllImageTextList(String publicWxNo) {
+		// TODO Auto-generated method stub
+		return imageTextInfoMapper.selectAllImageTextList(publicWxNo);
+	}
+
+	@Override
+	public Integer selectFirstAnswerByID(Integer imageTextId) {
+		// TODO Auto-generated method stub
+		return imageTextInfoMapper.selectFirstAnswerByID(imageTextId);
+	}
+
+	@Override
+	public Integer selectKeyWordByID(Integer imageTextId) {
+		// TODO Auto-generated method stub
+		return imageTextInfoMapper.selectKeyWordByID(imageTextId);
+	}
+
+	@Override
+	public Integer selectMenuKeyByID(Integer imageTextId) {
+		// TODO Auto-generated method stub
+		return imageTextInfoMapper.selectMenuKeyByID(imageTextId);
+	}
+	
+	
+}

+ 56 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/ImageTextMoreDAOImpl.java

@@ -0,0 +1,56 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.ImageTextMoreDAO;
+import com.iamberry.rst.service.wechat.mapper.ImageTextMoreMapper;
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public class ImageTextMoreDAOImpl implements ImageTextMoreDAO {
+	@Autowired
+	private ImageTextMoreMapper imageTextMoreMapper;
+	public void setImageTextMoreMapper(ImageTextMoreMapper imageTextMoreMapper) {
+		this.imageTextMoreMapper = imageTextMoreMapper;
+	}
+
+	@Override
+	public int addImageTextMore(ImageTextMore imageTextMore) {
+		return imageTextMoreMapper.addImageTextMore(imageTextMore);
+	}
+
+	@Override
+	public int delImageTextMore(Long id) {
+		return imageTextMoreMapper.delImageTextMore(id);
+	}
+
+	@Override
+	public int updateImageTextMore(ImageTextMore imageTextMore) {
+		return imageTextMoreMapper.updateImageTextMore(imageTextMore);
+	}
+
+	@Override
+	public List<ImageTextMore> findImageTextmore(Long imageTextNo) {
+		return imageTextMoreMapper.findImageTextmore(imageTextNo);
+	}
+
+	@Override
+	public ImageTextMore getImageTextmore(Long imageTextMoreNo) {
+		return imageTextMoreMapper.getImageTextmore(imageTextMoreNo);
+	}
+
+	@Override
+	public Integer selectMoreImageTextCountByMainId(Integer mainImageTextId) {
+		// TODO Auto-generated method stub
+		return imageTextMoreMapper.selectMoreImageTextCountByMainId(mainImageTextId);
+	}
+
+	@Override
+	public int delImageTextMoreByImageNo(Long id) {
+		// TODO Auto-generated method stub
+		return imageTextMoreMapper.delImageTextMoreByImageNo(id);
+	}
+
+}

+ 94 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/KeyWordDAOImpl.java

@@ -0,0 +1,94 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.KeyWordDAO;
+import com.iamberry.rst.service.wechat.mapper.KeyWordMapper;
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.KeyWord;
+import com.iamberry.wechat.core.entity.wx.PagingDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * desc:后台,管理员DAO接口实现
+ * @author Administrator
+ *
+ */
+@Repository
+public class KeyWordDAOImpl implements KeyWordDAO {
+	
+	@Autowired
+	private KeyWordMapper keyWordMapper;
+	public void setKeyWordMapper(KeyWordMapper keyWordMapper) {
+		this.keyWordMapper = keyWordMapper;
+	}
+	@Override
+	public KeyWord getById(Long keyServiceNo) {
+		return keyWordMapper.selectOne(keyServiceNo);
+	}
+	@Override
+	public List<KeyWord> selectKeyList(PaperBean bean) {
+		return keyWordMapper.selectKeyList(bean);
+	}
+	
+	@Override
+	public void insert(KeyWord keyWord) {
+		keyWordMapper.insert(keyWord);
+	}
+	@Override
+	public void updateByPrimaryKey(KeyWord keyword) {
+		keyWordMapper.updateByPrimaryKey(keyword);
+	}
+	
+	//以下是对关键字回复列表的查询
+	/**
+	 * 根据公众账号获取当前关键字回复的总数
+	 */
+	public int getAllKeyWorkNo(String pubNo) {
+		return keyWordMapper.selectAllKeyWordNum(pubNo);
+	}
+	
+	/**
+	 * 每页多少条,共分多少页,
+	 */
+	public int getPageNum(String pubNo, int selectNum) {
+		return this.getAllKeyWorkNo(pubNo) % selectNum == 0 ? this.getAllKeyWorkNo(pubNo) / selectNum : (this.getAllKeyWorkNo(pubNo) / selectNum) + 1;
+	}
+	
+	/**
+	 * 根据当前页的页码查询
+	 */
+	public List<KeyWord> getBypubNoAndPageNo(PagingDTO pdto) {
+		int pageNo = pdto.getPageNo();
+		if(pageNo < 1) {
+			pageNo = 1;
+			pdto.setPageNo(pageNo);
+		} else if(pageNo > this.getPageNum(pdto.getWxPublicNo(), pdto.getSelectNum())) {
+			pageNo = this.getPageNum(pdto.getWxPublicNo(), pdto.getSelectNum());
+		}
+		
+		return keyWordMapper.selectKeyWordPageList(pdto);
+		
+	}
+	@Override
+	public KeyWord getByKeyWord(String keyword) {
+		return keyWordMapper.getByKeyWord(keyword);
+	}
+	@Override
+	public Integer selectKeyListCount(PaperBean bean) {
+		// TODO Auto-generated method stub
+		return keyWordMapper.selectKeyListCount(bean);
+	}
+	@Override
+	public Integer batchDelKeyWordById(List<Integer> delIdList) {
+		// TODO Auto-generated method stub
+		return keyWordMapper.batchDelKeyWordById(delIdList);
+	}
+	@Override
+	public Integer deleteKeyWordById(Long id) {
+		// TODO Auto-generated method stub
+		return keyWordMapper.deleteKeyWordById(id);
+	}
+
+}

+ 42 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/MenuInfoDAOImpl.java

@@ -0,0 +1,42 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.MenuInfoDAO;
+import com.iamberry.rst.service.wechat.mapper.MenuInfoMapper;
+import com.iamberry.wechat.core.entity.wx.MenuInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class MenuInfoDAOImpl implements MenuInfoDAO {
+	@Autowired
+	private MenuInfoMapper menuInfoMapper;
+	public void setMenuInfoMapper(MenuInfoMapper menuInfoMapper) {
+		this.menuInfoMapper = menuInfoMapper;
+	}
+
+	@Override
+	public MenuInfo selectOne(String pubNo) {
+		return menuInfoMapper.selectOne(pubNo);
+	}
+
+	@Override
+	public MenuInfo selectByMenuIdAndPubNo(String menuId, String pubNo) {
+		return menuInfoMapper.selectByMenuIdAndPubNo(menuId, pubNo);
+	}
+
+	@Override
+	public int insert(MenuInfo menuInfo) {
+		return menuInfoMapper.insert(menuInfo);
+	}
+
+	@Override
+	public int update(MenuInfo menuInfo) {
+		return menuInfoMapper.update(menuInfo);
+	}
+
+	@Override
+	public int deleteByPubNo(String pubNo) {
+		return menuInfoMapper.deleteByPubNo(pubNo);
+	}
+
+}

+ 37 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/dao/impl/MenuKeySetDAOImpl.java

@@ -0,0 +1,37 @@
+package com.iamberry.rst.service.wechat.dao.impl;
+
+import com.iamberry.rst.service.wechat.dao.MenuKeySetDAO;
+import com.iamberry.rst.service.wechat.mapper.MenuKeySetMapper;
+import com.iamberry.wechat.core.entity.wx.MenuKeySet;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class MenuKeySetDAOImpl implements MenuKeySetDAO {
+	@Autowired
+	private MenuKeySetMapper menuKeySetMapper;
+	public void setMenuKeySetMapper(MenuKeySetMapper menuKeySetMapper) {
+		this.menuKeySetMapper = menuKeySetMapper;
+	}
+
+	@Override
+	public int insert(MenuKeySet menuKeySet) {
+		return menuKeySetMapper.insert(menuKeySet);
+	}
+
+	@Override
+	public int update(MenuKeySet menuKeySet) {
+		return menuKeySetMapper.update(menuKeySet);
+	}
+
+	@Override
+	public int deleteByPubNo(String pubNo) {
+		return menuKeySetMapper.deleteByPubNo(pubNo);
+	}
+
+	@Override
+	public MenuKeySet selectByPubNoAndKeyWord(String pubNo, String keyword) {
+		return menuKeySetMapper.selectByPubNoAndKeyWord(pubNo, keyword);
+	}
+	
+}

+ 10 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/ConfigMapper.java

@@ -0,0 +1,10 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.wx.Config;
+
+public interface ConfigMapper {
+	
+	public Config getConfig(String appId);
+	
+	public void updateConfig(Config config);
+}

+ 33 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/FirstJoinKeyMapper.java

@@ -0,0 +1,33 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.wx.FirstJoinKey;
+
+/**
+ * 首次关注消息推送,映射文件接口
+ * @author liurui     Email:972376971@qq.com
+ * @version 创建时间:2015年5月7日  下午5:38:35
+ */
+public interface FirstJoinKeyMapper {
+	
+	/**
+	 * 根据微信公众号, 获取首次关注回复内容
+	 *  获取首次关注回复的FirstJoinKey对象
+	 * @param wxpublicNo
+	 * @return
+	 */
+	public FirstJoinKey selectOne(String wxpublicNo);
+	
+	/**
+	 * 修改或者是首次关注的消息回复
+	 * 
+	 *  根据微信公众号ID修改首次关注回复
+	 *  返回修改状态1或0
+	 */
+	public int updateOne(FirstJoinKey firstJoinKey);
+	
+	/**
+	 * 
+	 * 如果数据库中没有该数据,那么选择插入数据
+	 */
+	public int addOne(FirstJoinKey firstJoinKey);
+}

+ 83 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/HomeMemberMapper.java

@@ -0,0 +1,83 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.member.Member;
+
+/**
+ * @author 何秀刚
+ * Class Description: 会员Mapper接口映射类
+ * Create Date:2016年4月18日
+ * Update Date:2016年4月18日
+ */
+public interface HomeMemberMapper {
+
+	/**
+	 * 根据用户Openid,获取会员信息
+	 * @param openid
+	 * @return
+	 */
+	public Member selectMemberInfoByOpenId(String openid);
+
+	/**
+	 * 根据用户Openid,修改微信获取到的信息
+	 * @param member 会员信息实体类
+	 * @return
+	 */
+	public Integer updateWechatMemberInfoByByOpenid(Member member);
+	
+	/**
+	 * 添加会员信息
+	 * @param member
+	 * @return
+	 */
+	public Integer insertMemberInfo(Member member);
+	
+	/**
+	 * 根据用户openid,更新用户的上线
+	 * @param member
+	 * @return
+	 */
+	public Integer updateUserResAndTypeByOpenid(Member member);
+	
+	/**
+	 * 根据Openid,更新用户状态为取消关注状态
+	 * @param openid
+	 * @return
+	 */
+	public Integer updateMemberStatusByOpenId(String openid);
+	
+	/**
+	 * 根据用户Openid获取用户二维码(不一定有)
+	 * @param openid
+	 * @return 
+	 */
+	public Member selectMemberQrcodeUrlByOpenid(String openid);
+	
+	/**
+	 * 修改用户所属二维码
+	 * @param member
+	 * @return
+	 */
+	public Integer updateMemberQrcodeByOpenid(Member member);
+	
+	/**
+	 * 根据openid,获取用户可用积分
+	 * @param openid
+	 * @return
+	 */
+	public Integer selectUserIntegralByOpenid(String openid);
+	
+	/**
+	 * 根据代理商ID,获取激活此代理商的用户信息
+	 * @param placeId
+	 * @return
+	 */
+	public Member selectUserInfoByPlaceId(Integer placeId);
+	
+	/**
+	 * 根据Openid,更新绑定状态
+	 * @param member
+	 * @return
+	 */
+	public Integer updateMemberIsFlagByOpenid(Member member);
+	
+}

+ 72 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/ImageTextInfoMapper.java

@@ -0,0 +1,72 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.ImageTextInfo;
+
+import java.util.List;
+
+public interface ImageTextInfoMapper {
+	
+	/**
+	 * 添加图文素材
+	 * --》添加ImageTextInfo对象
+	 * @return 返回的是添加记录数
+	 */
+	public int addImageTextInfo(ImageTextInfo imageTextInfo); 
+	
+	
+	/**
+	 * 删除图文素材
+	 * --》根据图文ID号来删除相应的图文素材
+	 * @return 返回的是删除记录数
+	 */
+	public int delImageTextInfo(Long id);
+	
+	
+	
+	/**
+	 * 修改图文素材
+	 * --》根据ID来修改图文素材信息
+	 * @return 返回的是修改记录数
+	 */
+	public int updateImageTextInfo(ImageTextInfo imageTextInfo);
+	
+	/**
+	 * 按照id来查询查找图文素材
+	 * 
+	 */
+	public ImageTextInfo findImageTextInfoById(Long id);
+	
+	/**
+	 * 按照公众账号来查询所有的图文素材
+	 */
+	public List<ImageTextInfo> findImageTextInfoBywxPublicNo(String wxPublicNo);
+	
+	/**
+	 * 根据微信公众账号、页数、每页显示的记录来分页查询
+	 */
+	public List<ImageTextInfo> findImageTextInfo(String wxPublicNo, Integer pageNo, Integer selectNum);
+	
+	/**
+	 * 根据微信公众号来查询该微信共有多少图文素材
+	 */
+	public int findImageTextInfoNo(String wxPublicNo);
+	
+	/**
+	 * 分页查询图文素材
+	 */
+	public List<ImageTextInfo> selectImageTextInfoList(PaperBean bean);
+	
+	/**
+	 * 根据公众账号查看全部素材
+	 */
+	public List<ImageTextInfo> selectAllImageTextList(String publicWxNo);
+	
+	/**
+	 * 扫描其他表中有没有使用该素材的
+	 */
+	public Integer selectFirstAnswerByID(Integer imageTextId);
+	public Integer selectKeyWordByID(Integer imageTextId);
+	public Integer selectMenuKeyByID(Integer imageTextId);
+	
+}

+ 41 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/ImageTextMoreMapper.java

@@ -0,0 +1,41 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.wx.ImageTextMore;
+
+import java.util.List;
+
+public interface ImageTextMoreMapper {
+	
+	/**
+	 * 添加多图文素材
+	 */
+	public int addImageTextMore(ImageTextMore imageTextMore);
+	
+	/**
+	 * 删除多图文素材
+	 */
+	public int delImageTextMore(Long id);
+	
+	/**
+	 * 根据多图文的主图文ID,删除多图文
+	 */
+	public int delImageTextMoreByImageNo(Long id);
+	
+	/**
+	 * 修改多图文素材
+	 */
+	public int updateImageTextMore(ImageTextMore imageTextMore);
+	
+	/**
+	 *根据imageTextNo查询
+	 */
+	public List<ImageTextMore> findImageTextmore(Long imageTextNo);
+	
+	public ImageTextMore getImageTextmore(Long imageTextMoreNo);
+	
+	
+	/**
+	 * 根据主图文ID,查询附图文数量
+	 */
+	public Integer selectMoreImageTextCountByMainId(Integer mainImageTextId);
+}

+ 59 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/KeyWordMapper.java

@@ -0,0 +1,59 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.PaperBean;
+import com.iamberry.wechat.core.entity.wx.KeyWord;
+import com.iamberry.wechat.core.entity.wx.PagingDTO;
+
+import java.util.List;
+
+public interface KeyWordMapper {
+	/**
+	 * 根据keyServiceNo获取一个KeyWord对象
+	 */
+	public KeyWord selectOne(Long keyServiceNo);
+	
+	/**
+	 * 查询关键字列表
+	 * @param bean
+	 * @return
+	 */
+	public List<KeyWord> selectKeyList(PaperBean bean);
+	
+	/**
+	 * 查询关键字的数量
+	 * @param keyWord
+	 */
+	public Integer selectKeyListCount(PaperBean bean);
+	
+	/**
+	 * 批量删除
+	 * @param keyWord
+	 */
+	public Integer batchDelKeyWordById(List<Integer> delIdList);
+	
+	/**
+	 * 单个删除
+	 * @param keyWord
+	 */
+	public Integer deleteKeyWordById(Long id);
+	
+	public void insert(KeyWord keyWord);
+	
+	void updateByPrimaryKey(KeyWord keyword);
+	
+	/**
+	 * 根据微信公众号查询所有关键字的总页数
+	 */
+	public int selectAllKeyWordNum(String wxpublicNo);
+	
+	/**
+	 * 
+	 * @param wxpublicNo 微信公众号
+	 * @param pageNo 当前页数
+	 * @param selectNum 一次查询多少页
+	 * @return
+	 */
+	public List<KeyWord> selectKeyWordPageList(PagingDTO pdto);
+
+	public KeyWord getByKeyWord(String keyword);
+}

+ 16 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/MenuInfoMapper.java

@@ -0,0 +1,16 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.wx.MenuInfo;
+
+public interface MenuInfoMapper {
+	
+	public MenuInfo selectOne(String pubNo);
+	
+	public MenuInfo selectByMenuIdAndPubNo(String menuId, String pubNo);
+	
+	int insert(MenuInfo menuInfo);
+	
+	int update(MenuInfo menuInfo);
+	
+	int deleteByPubNo(String pubNo);
+}

+ 14 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/MenuKeySetMapper.java

@@ -0,0 +1,14 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.wx.MenuKeySet;
+
+public interface MenuKeySetMapper {
+	
+	int insert(MenuKeySet menuKeySet);
+	
+	int update(MenuKeySet menuKeySet);
+	
+	int deleteByPubNo(String pubNo);
+	
+	MenuKeySet selectByPubNoAndKeyWord(String pubNo, String keyword);
+}

+ 12 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/TokenMapper.java

@@ -0,0 +1,12 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.wx.Token;
+
+public interface TokenMapper {
+
+	// 获取token
+	public Token selectOne(String appid);
+	
+	// 修改token
+	public Integer updateToken(Token token);
+}

+ 35 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/WechatShareMapper.java

@@ -0,0 +1,35 @@
+package com.iamberry.rst.service.wechat.mapper;
+
+import com.iamberry.wechat.core.entity.wx.WechatShare;
+
+/**
+ * @company	深圳爱贝源科技有限公司
+ * @website www.iamberry.com
+ * @author 	献
+ * @tel		18271840547
+ * @date	2016年9月8日
+ * @explain 微信分享mapper接口印射
+ */
+public interface WechatShareMapper {
+	
+	/**
+	 * 添加一个微信分享的数据
+	 * @param wechatShare
+	 * @return
+	 */
+	public int addWechatShare(WechatShare wechatShare);
+
+	/**
+	 * 根据URL的hash值,获取对应的数据
+	 * @param urlHash
+	 * @return
+	 */
+	public WechatShare selectWechatShareByHash(Integer urlHash);
+	
+	/**
+	 * 更新微信分享的参数
+	 * @param share
+	 * @return
+	 */
+	public int updateWechatShareByHash(WechatShare share);
+}

+ 31 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/configMapper.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 命名,每一个映射对象不一样
+	namespace:必须与对应的接口全类名一致
+ -->
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.ConfigMapper">
+	<resultMap type="Config" id="toConfig">
+		<id column="id" property="id"/>
+		<result column="ticket" property="ticket"/>
+		<result column="appid" property="appid"/>
+		<result column="appsecret" property="appsecret"/>
+		<result column="create_time" property="createTime"/>
+		<result column="wxpub_name" property="wxpubName"/>
+	</resultMap>
+	
+	<select id="getConfig" parameterType="string" resultMap="toConfig">
+		SELECT * FROM tb_wx_config WHERE appid = #{appid} LIMIT 0, 1
+	</select>
+  
+  	<update id="updateConfig" parameterType="Config">
+		UPDATE tb_wx_config 
+		SET
+			ticket = #{ticket} , 
+			create_time = #{createTime} , 
+			appid = #{appid} , 
+			appsecret = #{appsecret} , 
+			wxpub_name = #{wxpubName}
+		WHERE
+			ID = #{id}
+  	</update>
+</mapper>

+ 55 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/firstJoinKeyMapper.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.FirstJoinKeyMapper">
+	
+	<!-- 查询首次关注回复的消息 -->
+	<select id="selectOne" parameterType="String" resultMap="toFirstJoinKey" >
+		SELECT 
+			id, createTime, imageTextNo, reMessageType, reText, title, vchar1, vchar2, vchar3, vchar4, wxpublicNo
+		FROM
+		    TB_WX_FIRSTJOINKEY
+		WHERE
+			WXPUBLICNO = #{wxpublicNo}
+		LIMIT
+			0, 1
+	</select>
+	
+	<resultMap type="FirstJoinKey" id="toFirstJoinKey">
+		<id property="id" column="id"/>
+		<result property="createTime" column="createTime"/>
+		<result property="imageTextNo" column="imageTextNo"/>
+		<result property="reMessageType" column="reMessageType"/>
+		<result property="reText" column="reText"/>
+		<result property="title" column="title"/>
+		<result property="vchar1" column="vchar1"/>
+		<result property="vchar2" column="vchar2"/>
+		<result property="vchar3" column="vchar3"/>
+		<result property="vchar4" column="vchar4"/>
+		<result property="wxpublicNo" column="wxpublicNo"/>
+	</resultMap>
+	
+	
+	<update id="updateOne">
+		UPDATE
+			TB_WX_FIRSTJOINKEY 
+		SET
+			CREATETIME = #{createTime},
+			IMAGETEXTNO = #{imageTextNo},
+			REMESSAGETYPE = #{reMessageType},
+			RETEXT = #{reText},
+			TITLE = #{title},
+			VCHAR1 = #{vchar1},
+			VCHAR2 = #{vchar2},
+			VCHAR3 = #{vchar3},
+			VCHAR4 = #{vchar4}
+		WHERE
+			WXPUBLICNO = #{wxpublicNo}
+	</update>
+	
+	<insert id="addOne">
+		INSERT INTO
+			TB_WX_FIRSTJOINKEY (CREATETIME,IMAGETEXTNO,REMESSAGETYPE,RETEXT,TITLE,VCHAR1,VCHAR2,VCHAR3,VCHAR4,WXPUBLICNO)
+		VALUES(#{createTime},#{imageTextNo},#{reMessageType},#{reText},#{title},#{vchar1},#{vchar2},#{vchar3},#{vchar4},#{wxpublicNo})
+	</insert>
+</mapper>

+ 149 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/homeMemberMapper.xml

@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.HomeMemberMapper">
+
+	<!-- 根据用户Openid获取用户信息 -->
+	<select id="selectMemberInfoByOpenId" parameterType="String" resultType="Member">
+		SELECT
+			USER_ID userId,
+			USER_OPENID userOpenid, 
+			USER_IS_FLAG userIsFlag, 
+			USER_DEALERS userDealers,
+			USER_STATUS userStatus,
+			USER_RES_TYPE userResType,
+			USER_TEMPLATE_ID templateId,
+			USER_IS_BOUGHT userIsBought
+		FROM
+			tb_rst_member_user
+		WHERE
+			USER_OPENID = #{openid}
+	</select>
+
+	<!-- 根据用户Openid,更新用户微信信息 -->
+	<update id="updateWechatMemberInfoByByOpenid" parameterType="Member">
+		UPDATE 
+			tb_rst_member_user 
+		SET  
+			USER_HEAD = #{userHead},
+			USER_SEX = #{userSex},
+			USER_NICKNAME = #{userNickname},
+			USER_ADDR = #{userAddr},
+			USER_STATUS = #{userStatus}, 
+			USER_SUB_DATE = NOW()
+		WHERE 
+			USER_OPENID  = #{userOpenid}
+	</update>
+	
+	<!-- 插入用户信息 -->
+	<insert id="insertMemberInfo" parameterType="Member" useGeneratedKeys="true" keyProperty="userId">
+		 INSERT INTO 
+		 	tb_rst_member_user
+		 		(
+			 		USER_OPENID, USER_HEAD, USER_SEX, USER_NICKNAME, USER_ADDR,
+					USER_STATUS, USER_SUB_DATE, USER_CREATE_DATE, USER_IS_FLAG,USER_IDENTITY,user_is_bought
+				)
+		 VALUES 
+		  	( 
+		  	  #{userOpenid},
+			  #{userHead},  
+			  #{userSex}, 
+			  #{userNickname},
+			  #{userAddr},
+			  #{userStatus},
+			  NOW(),
+			  NOW(),
+			  1,
+			  2,
+			  1
+		  	)
+	</insert>
+	
+	<!-- 根据用户Openid,更新用户来源和来源类型  -->
+	<update id="updateUserResAndTypeByOpenid" parameterType="Member">
+		UPDATE 
+			tb_rst_member_user 
+		SET  
+			<if test="userResType != null">
+				USER_RES_TYPE = #{userResType},
+			</if>
+			<if test="templateId != null and templateId != ''">
+				USER_TEMPLATE_ID = #{templateId},
+			</if>
+			<if test="userIsFlag != null and userIsFlag != ''">
+				USER_IS_FLAG = #{userIsFlag},
+			</if>
+			USER_DEALERS = #{userDealers}
+		WHERE 
+			USER_OPENID = #{userOpenid} AND USER_IS_FLAG = 1
+	</update>
+	
+	<!-- 根据Openid,更新用户状态为取消关注状态 -->
+	<update id="updateMemberStatusByOpenId" parameterType="String">
+		UPDATE 
+			tb_rst_member_user 
+		SET  
+			USER_STATUS = 0, 
+			<!-- USER_QRCODE = null, -->
+			USER_SUB_DATE = NOW()
+		WHERE 
+			USER_OPENID  = #{userOpenid}
+	</update>
+	
+	<!-- 根据用户Openid获取用户二维码(不一定有)-->
+	<select id="selectMemberQrcodeUrlByOpenid" parameterType="String" resultType="Member">
+		SELECT
+			USER_QRCODE userQrcode,USER_OPENID userOpenid, USER_ID userId, USER_IS_FLAG userIsFlag
+		FROM
+			tb_rst_member_user
+		WHERE
+			USER_OPENID = #{openid}
+	</select>
+	
+	<!-- 根据Openid,更新用户二维码 -->
+	<update id="updateMemberQrcodeByOpenid" parameterType="Member">
+		UPDATE 
+			tb_rst_member_user 
+		SET  
+			USER_QRCODE = #{userQrcode}
+		WHERE 
+			USER_OPENID  = #{userOpenid}
+	</update>
+	
+	<!-- 根据用户Openid获取用户二可用积分-->
+	<select id="selectUserIntegralByOpenid" parameterType="String" resultType="Integer">
+		SELECT
+			USER_SURPLUS_INTEGRAL
+		FROM
+			tb_rst_member_user
+		WHERE
+			USER_OPENID = #{openid}
+	</select>
+	
+	<!-- 根据placeID,获取当前激活用户的信息 -->
+	<select id="selectUserInfoByPlaceId" parameterType="Integer" resultType="Member">
+		SELECT
+			USER_HEAD userHead, USER_OPENID userOpenid, USER_NICKNAME userNickname
+		FROM
+			tb_rst_member_user
+		WHERE
+			USER_OPENID = (
+				SELECT
+					PLACE_OPENID
+				FROM
+					TB_IAMBERRY_PLACE_INFO
+				WHERE 
+					PLACE_ID = #{placeId}
+			)
+	</select>
+	
+	<!-- 根据Openid,更新绑定状态 -->
+	<update id="updateMemberIsFlagByOpenid" parameterType="Member">
+		UPDATE 
+			tb_rst_member_user 
+		SET  
+			user_is_flag = #{userIsFlag}
+		WHERE 
+			USER_OPENID  = #{userOpenid}
+	</update>
+</mapper>

+ 154 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/imageTextInfoMapper.xml

@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.ImageTextInfoMapper">
+	<resultMap type="ImageTextInfo" id="ImageTextInfo">
+		<id column="imageTextNo" property="imageTextNo" />
+		<result column="wxpublicNo" property="wxpublicNo" />
+		<result column="title" property="title" />
+		<result column="imageUrl" property="imageUrl" />
+		<result column="digest" property="digest" />
+		<result column="mainText" property="mainText" />
+		<result column="clickUrl" property="clickUrl" />
+		<result column="clickOutUrl" property="clickOutUrl" />
+		<result column="sourceUrl" property="sourceUrl" />
+		<result column="imageTextType" property="imageTextType" />
+		<result column="createTime" property="createTime" />
+	</resultMap>
+
+	<!-- 添加单图文素材 -->
+	<insert id="addImageTextInfo" useGeneratedKeys="true"
+		keyProperty="imageTextNo" parameterType="ImageTextInfo">
+		insert into
+		tb_wx_imagetextinfo
+		(clickOutUrl,
+		clickUrl,
+		createTime,
+		digest,
+		imageTextType,
+		imageUrl,
+		mainText,
+		sourceUrl,
+		title,
+		wxpublicNo)
+		values
+		(#{clickOutUrl},
+		#{clickUrl},
+		#{createTime},
+		#{digest},
+		#{imageTextType},
+		#{imageUrl},
+		#{mainText},
+		#{sourceUrl},
+		#{title},
+		#{wxpublicNo})
+	</insert>
+
+	<!-- 删除图文素材 -->
+	<delete id="delImageTextInfo" parameterType="java.lang.Long">
+		delete from
+		tb_wx_imagetextinfo
+		where
+		imageTextNo=#{imageTextNo}
+	</delete>
+
+	<!-- 修改图文操作 -->
+	<update id="updateImageTextInfo">
+		UPDATE tb_wx_imagetextinfo
+		SET
+		imageTextNo = #{imageTextNo} ,
+		clickOutUrl = #{clickOutUrl} ,
+		clickUrl = #{clickUrl} ,
+		createTime =
+		#{createTime} ,
+		digest = #{digest} ,
+		imageTextType = #{imageTextType} ,
+		imageUrl = #{imageUrl} ,
+		mainText = #{mainText} ,
+		sourceUrl =
+		#{sourceUrl} ,
+		title = #{title} ,
+		wxpublicNo = #{wxpublicNo}
+
+		WHERE
+		imageTextNo = #{imageTextNo}
+	</update>
+
+	<!-- 根据id来查找图文素材 -->
+	<select id="findImageTextInfoById" parameterType="java.lang.Long" resultMap="ImageTextInfo">
+		SELECT
+			*
+		FROM
+			TB_WX_IMAGETEXTINFO
+		WHERE
+			IMAGETEXTNO = #{imageTextNo}
+	</select>
+
+	<!-- 按照公众账号来查询所有的图文素材 -->
+	<select id="findImageTextInfoBywxPublicNo" parameterType="String">
+		select
+		*
+		from
+		tb_wx_imagetextinfo
+		where
+		wxpublicNo=#{wxpublicNo} 
+		ORDER BY imageTextNo DESC
+	</select>
+
+	<!-- 根据微信公众账号、页数、每页显示的记录来分页查询 -->
+	<select id="findImageTextInfo" resultMap="ImageTextInfo">
+		select *
+		from
+		tb_wx_imagetextinfo
+		where
+		wxpublicNo=#{0} order by createTime desc
+		limit #{1},
+		#{2}
+	</select>
+	
+	
+	<!-- 分页查询图文素材列表 -->
+	<select id="selectImageTextInfoList" parameterType="PaperBean" resultMap="ImageTextInfo">
+		select *
+		from
+		tb_wx_imagetextinfo
+		where
+		wxpublicNo=#{str} order by createTime desc
+		limit #{minNum},
+		#{maxNum}
+	</select>
+	
+	<!-- 根据微信公众号来查询该微信共有多少图文素材 -->
+	<select id="findImageTextInfoNo" parameterType="String"
+		resultType="int">
+		select
+		count(*)
+		from
+		tb_wx_imagetextinfo
+		where
+		wxpublicNo=#{wxpublicNo}
+	</select>
+	
+		<!-- 查看全部素材 -->
+	<select id="selectAllImageTextList" parameterType="String" resultMap="ImageTextInfo">
+		select *
+		from
+		tb_wx_imagetextinfo
+		where
+		wxpublicNo=#{0} order by createTime desc
+	</select>
+	
+	<!-- 根据id查询是否在其他表中使用了该素材 -->
+	<select id="selectFirstAnswerByID" parameterType="java.lang.Integer" resultType="int">
+		SELECT count(imageTextNo) FROM tb_wx_firstjoinkey WHERE imageTextNo = #{0}
+	</select>
+	
+	<select id="selectKeyWordByID" parameterType="java.lang.Integer" resultType="int">
+		SELECT count(refImageTextId) FROM tb_wx_keyword WHERE refImageTextId = #{0}
+	</select>
+	
+	<select id="selectMenuKeyByID" parameterType="java.lang.Integer" resultType="int">
+		SELECT count(refImageTextId) FROM tb_wx_menukeyset WHERE refImageTextId = #{0}
+	</select>
+	
+	
+</mapper>

+ 108 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/imageTextMoreMapper.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.ImageTextMoreMapper">
+	<resultMap type="ImageTextMore" id="ImageTextMore">
+		<id column="moreImageTextNo" property="moreImageTextNo" />
+		<result column="clickOutUrl" property="clickOutUrl" />
+		<result column="clickUrl" property="clickUrl" />
+		<result column="createTime" property="createTime" />
+		<result column="digest" property="digest" />
+		<result column="mainText" property="mainText" />
+		<result column="imageTextNo" property="imageTextNo" />
+		<result column="imageUrl" property="imageUrl" />
+		<result column="sourceUrl" property="sourceUrl" />
+		<result column="imageTextType" property="imageTextType" />
+		<result column="title" property="title" />
+	</resultMap>
+	
+	<!-- 添加多图文素材 -->
+	<insert id="addImageTextMore" parameterType="ImageTextMore">
+		INSERT INTO
+			TB_WX_IMAGETEXTMORE
+			(CLICKOUTURL,
+			CLICKURL,
+			CREATETIME,
+			DIGEST,
+			IMAGETEXTNO,
+			IMAGETEXTTYPE,
+			IMAGEURL,
+			MAINTEXT,
+			SOURCEURL,
+			TITLE
+			)
+		VALUES
+			(
+				#{clickOutUrl},
+				#{clickUrl},
+				#{createTime},
+				#{digest},
+				#{imageTextNo},
+				#{imageTextType},
+				#{imageUrl},
+				#{mainText},
+				#{sourceUrl},
+				#{title}			
+			)
+	</insert>
+	
+	<!-- 根据多图文ID 删除多图文素材 -->
+	<delete id="delImageTextMore" parameterType="long">
+		DELETE FROM TB_WX_IMAGETEXTMORE WHERE MOREIMAGETEXTNO=#{0}
+	</delete>
+	
+	<!-- 根据主图文ID,删除多图文素材 -->
+	<delete id="delImageTextMoreByImageNo" parameterType="long">
+		DELETE FROM TB_WX_IMAGETEXTMORE WHERE IMAGETEXTNO=#{0}
+	</delete>
+		
+	<!-- 修改多图文 -->
+	<update id="updateImageTextMore">
+		UPDATE
+			TB_WX_IMAGETEXTMORE
+		SET
+			CLICKOUTURL = #{clickOutUrl},
+			CLICKURL = #{clickUrl},
+			CREATETIME = #{createTime},
+			DIGEST = #{digest},
+			IMAGETEXTNO = #{imageTextNo},
+			IMAGETEXTTYPE = #{imageTextType},
+			IMAGEURL = #{imageUrl},
+			MAINTEXT = #{mainText},
+			SOURCEURL = #{sourceUrl},
+			TITLE = #{title}
+		WHERE
+			MOREIMAGETEXTNO = #{moreImageTextNo}
+	</update>
+	
+	<!-- 根据ID来查询多图文 -->
+	<select id="findImageTextmore" resultMap="ImageTextMore">
+		SELECT
+			*
+		FROM
+			TB_WX_IMAGETEXTMORE 
+		WHERE
+			IMAGETEXTNO = #{imageTextNo} 
+	</select>
+	<select id="getImageTextmore" resultMap="ImageTextMore">
+		SELECT
+			*
+		FROM
+			TB_WX_IMAGETEXTMORE
+		WHERE
+			MOREIMAGETEXTNO=#{moreImageTextNo}
+	</select>
+	
+	<!-- 
+		以下代码为补充代码,  以上代码为老代码,有些可废弃删除
+	 -->
+	<!-- 根据主图文ID,查询附图文的个数-->
+	<select id="selectMoreImageTextCountByMainId" parameterType="int" resultType="int">
+		SELECT 
+			COUNT(*) 
+		FROM 
+			TB_WX_IMAGETEXTMORE 
+		WHERE 
+			IMAGETEXTNO = #{0}
+	</select>
+	
+</mapper>

+ 106 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/keyWordMapper.xml

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 命名,每一个映射对象不一样
+	namespace:必须与对应的接口全类名一致
+ -->
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.KeyWordMapper">
+	<resultMap type="KeyWord" id="toKeyWord">
+		<id column="keyServiceNo" property="keyServiceNo"/>
+		<result column="createTime" property="createTime"/>
+		<result column="keyType" property="keyType"/>
+		<result column="keyWord" property="keyWord"/>
+		<result column="reType" property="reType"/>
+		<result column="refImageTextId" property="refImageTextId"/>
+		<result column="refText" property="refText"/>
+		<result column="refVedioId" property="refVedioId"/>
+		<result column="title" property="title"/>
+		<result column="vchar1" property="vchar1"/>
+		<result column="vchar2" property="vchar2"/>
+		<result column="vchar3" property="vchar3"/>
+		<result column="vchar4" property="vchar4"/>
+		<result column="wxpublicNo" property="wxpublicNo"/>
+	</resultMap>
+	
+	<select id="selectOne" parameterType="KeyWord" resultMap="toKeyWord">
+		SELECT * FROM tb_wx_keyword WHERE keyserviceNo=#{0}
+	</select>
+	
+	<select id="getByKeyWord" parameterType="KeyWord" resultMap="toKeyWord">
+		SELECT 
+			* 
+		FROM 
+			TB_WX_KEYWORD 
+		WHERE 
+			KEYWORD LIKE CONCAT('%', #{keyWord},'%')
+		LIMIT 0,1
+	</select>
+	
+	<!-- 查询关键字列表 -->
+  	<select id="selectKeyList" parameterType="PaperBean" resultMap="toKeyWord">
+   	 	SELECT * FROM tb_wx_keyword WHERE wxpublicNo=#{text}
+   	 	<if test="str != '' and str != null">
+   	 		AND keyWord LIKE CONCAT(CONCAT('%',#{str}),'%')
+   	 	</if>
+   	 	ORDER BY keyServiceNo DESC LIMIT #{minNum}, #{maxNum}
+  	</select>
+  	
+  	<!-- 查询关键字的数量 -->
+  	<select id="selectKeyListCount" parameterType="PaperBean" resultType="int">
+  		SELECT COUNT(keyServiceNo) FROM tb_wx_keyword WHERE wxpublicNo=#{text}
+  		<if test="str != '' and str != null">
+   	 		AND keyWord LIKE CONCAT(CONCAT('%',#{str}),'%')
+   	 	</if>
+  	</select>
+  
+  <!-- 批量删除关键字, 根据ID -->
+  <select id="batchDelKeyWordById" parameterType="java.util.List">
+  	DELETE FROM tb_wx_keyword WHERE 
+  	<foreach collection="list" item="delId" separator="OR">
+  		keyServiceNo = #{delId}
+  	</foreach>
+  </select>
+  
+  <insert id="insert">
+  	insert into tb_wx_keyword (keyServiceNo, createTime, keyType, 
+      keyWord, reType, refImageTextId, 
+      refText, refVedioId, title, 
+      vchar1, vchar2, vchar3, 
+      vchar4, wxpublicNo)
+    values (#{keyServiceNo,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{keyType,jdbcType=VARCHAR}, 
+      #{keyWord,jdbcType=VARCHAR}, #{reType,jdbcType=VARCHAR}, #{refImageTextId,jdbcType=BIGINT}, 
+      #{refText,jdbcType=VARCHAR}, #{refVedioId,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR}, 
+      #{vchar1,jdbcType=VARCHAR}, #{vchar2,jdbcType=VARCHAR}, #{vchar3,jdbcType=VARCHAR}, 
+      #{vchar4,jdbcType=VARCHAR}, #{wxpublicNo,jdbcType=VARCHAR})
+  </insert>
+  <update id="updateByPrimaryKey">
+    update tb_wx_keyword
+    set createTime = #{createTime,jdbcType=TIMESTAMP},
+      keyType = #{keyType,jdbcType=VARCHAR},
+      keyWord = #{keyWord,jdbcType=VARCHAR},
+      reType = #{reType,jdbcType=VARCHAR},
+      refImageTextId = #{refImageTextId,jdbcType=BIGINT},
+      refText = #{refText,jdbcType=VARCHAR},
+      refVedioId = #{refVedioId,jdbcType=VARCHAR},
+      title = #{title,jdbcType=VARCHAR},
+      vchar1 = #{vchar1,jdbcType=VARCHAR},
+      vchar2 = #{vchar2,jdbcType=VARCHAR},
+      vchar3 = #{vchar3,jdbcType=VARCHAR},
+      vchar4 = #{vchar4,jdbcType=VARCHAR},
+      wxpublicNo = #{wxpublicNo,jdbcType=VARCHAR}
+    where keyServiceNo = #{keyServiceNo,jdbcType=BIGINT}
+  </update>
+  <delete id="deleteKeyWordById" parameterType="java.lang.Long">
+    DELETE FROM tb_wx_keyword
+    WHERE keyServiceNo = #{keyServiceNo,jdbcType=BIGINT}
+  </delete>
+  
+  <!-- 查询关键字的总数 -->
+  <select id="selectAllKeyWordNum" parameterType="KeyWord" resultType="int">
+  	select count(*) from tb_wx_keyword where wxpublicNo=#{0}
+  </select>
+  
+  <!-- 根据公众号和当前的页数来查询,每页分多少条 -->
+  <select id="selectKeyWordPageList" parameterType="PagingDTO" resultMap="toKeyWord">
+  	select * from tb_wx_keyword where wxpublicNo=#{wxPublicNo} ORDER BY keyServiceNo DESC limit #{pageNo}, #{selectNum} 
+  </select>
+</mapper>

+ 93 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/menuInfoMapper.xml

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 命名,每一个映射对象不一样 namespace:必须与对应的接口全类名一致 -->
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.MenuInfoMapper">
+	<resultMap type="MenuInfo" id="MenuInfo">
+		<id column="id" property="id" />
+		<result column="menuId" property="menuId" />
+		<result column="wxpublicNo" property="wxpublicNo" />
+		<result column="menuName" property="menuName" />
+		<result column="orderNo" property="orderNo" />
+		<result column="parentMenuId" property="parentMenuId" />
+		<result column="menuType" property="menuType" />
+		<result column="url" property="url" />
+		<result column="opTime" property="opTime" />
+		<result column="vchar1" property="vchar1" />
+		<result column="vchar2" property="vchar2" />
+		<result column="vchar3" property="vchar3" />
+		<result column="vchar4" property="vchar4" />
+		<result column="wxpublicNo" property="wxpublicNo" />
+	</resultMap>
+
+	<select id="selectOne" parameterType="MenuInfo"
+		resultMap="MenuInfo">
+		SELECT * FROM tb_wx_menuinfo WHERE wxpublicNo=#{0} limit 1
+	</select>
+
+	<select id="selectByMenuIdAndPubNo" resultMap="MenuInfo">
+		select * from
+		tb_wx_menuinfo where menuId=#{0} and wxpublicNo=#{1}
+	</select>
+
+	<insert id="insert">
+		INSERT INTO tb_wx_menuinfo
+		(id,
+		menuId,
+		menuName,
+		menuType,
+		opTime,
+		orderNo,
+		parentMenuId,
+		url,
+		vchar1,
+		vchar2,
+		vchar3,
+		vchar4,
+		wxpublicNo
+		)
+		VALUES
+		(#{id},
+		#{menuId},
+		#{menuName},
+		#{menuType},
+		#{opTime},
+		#{orderNo},
+		#{parentMenuId},
+		#{url},
+		#{vchar1},
+		#{vchar2},
+		#{vchar3},
+		#{vchar4},
+		#{wxpublicNo}
+		);
+	</insert>
+
+	<update id="update">
+		UPDATE tb_wx_menuinfo
+		SET
+		id = #{id} ,
+		menuId =
+		#{menuId} ,
+		menuName = #{menuName} ,
+		menuType = #{menuType} ,
+		opTime =
+		#{opTime} ,
+		orderNo = #{orderNo} ,
+		parentMenuId = #{parentMenuId} ,
+		url =
+		#{url} ,
+		vchar1 = #{vchar1} ,
+		vchar2 = #{vchar2} ,
+		vchar3 = #{vchar3} ,
+		vchar4 = #{vchar4} ,
+		wxpublicNo = #{wxpublicNo}
+		WHERE
+		id = #{id} ;
+	</update>
+
+	<delete id="deleteByPubNo" parameterType="java.lang.String">
+		delete from
+		tb_wx_menuinfo
+		where wxpublicNo = #{wxpublicNo}
+	</delete>
+</mapper>

+ 87 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/menuKeySetMapper.xml

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 命名,每一个映射对象不一样 namespace:必须与对应的接口全类名一致 -->
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.MenuKeySetMapper">
+	<resultMap type="MenuKeySet" id="MenuKeySet">
+		<id column="menuKeySetNo" property="menuKeySetNo" />
+		<result column="keyWord" property="keyWord" />
+		<result column="wxpublicNo" property="wxpublicNo" />
+		<result column="reType" property="reType" />
+		<result column="refText" property="refText" />
+		<result column="refImageTextId" property="refImageTextId" />
+		<result column="refVedioId" property="refVedioId" />
+		<result column="createTime" property="createTime" />
+		<result column="menuId" property="menuId" />
+		<result column="vchar1" property="vchar1" />
+		<result column="vchar2" property="vchar2" />
+		<result column="vchar3" property="vchar3" />
+		<result column="vchar4" property="vchar4" />
+		<result column="keyType" property="keyType" />
+	</resultMap>
+
+	<select id="selectByPubNoAndKeyWord" resultMap="MenuKeySet">
+		select * from tb_wx_menukeyset where wxpublicNo=#{0} and keyWord=#{1}
+	</select>
+
+	<insert id="insert">
+		INSERT INTO tb_wx_menukeyset
+		(menuKeySetNo,
+		createTime,
+		keyType,
+		keyWord,
+		menuId,
+		reType,
+		refImageTextId,
+		refText,
+		refVedioId,
+		vchar1,
+		vchar2,
+		vchar3,
+		vchar4,
+		wxpublicNo
+		)
+		VALUES
+		(#{menuKeySetNo},
+		#{createTime},
+		#{keyType},
+		#{keyWord},
+		#{menuId},
+		#{reType},
+		#{refImageTextId},
+		#{refText},
+		#{refVedioId},
+		#{vchar1},
+		#{vchar2},
+		#{vchar3},
+		#{vchar4},
+		#{wxpublicNo}
+		);
+	</insert>
+
+	<update id="update">
+		UPDATE tb_wx_menukeyset
+		SET
+		menuKeySetNo = #{menuKeySetNo} ,
+		createTime = #{createTime} ,
+		keyType = #{keyType} ,
+		keyWord = #{keyWord} ,
+		menuId = #{menuId} ,
+		reType = #{reType} ,
+		refImageTextId = #{refImageTextId} ,
+		refText = #{refText} ,
+		refVedioId = #{refVedioId} ,
+		vchar1 = #{vchar1},
+		vchar2 = #{vchar2} ,
+		vchar3 = #{vchar3} ,
+		vchar4 = #{vchar4} ,
+		wxpublicNo = #{wxpublicNo}
+
+		WHERE
+		menuKeySetNo = #{menuKeySetNo} ;
+	</update>
+
+	<delete id="deleteByPubNo" parameterType="java.lang.String">
+		delete from tb_wx_menukeyset
+		where wxpublicNo = #{wxpublicNo}
+	</delete>
+</mapper>

+ 25 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/tokenMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 命名,每一个映射对象不一样
+	namespace:必须与对应的接口全类名一致
+ -->
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.TokenMapper">
+	<!-- 获取token -->
+	<select id="selectOne" resultType="Token" parameterType="String">
+		SELECT 
+			T_ID tokenId, T_TOKEN token, T_ENDDATE endDate, T_APPID appid
+		FROM 
+			TB_WX_TOKEN 
+		WHERE 
+			T_APPID = #{appid}
+	</select>
+	<!-- 更新token -->
+	<update id="updateToken" parameterType="Token">
+		UPDATE 
+			TB_WX_TOKEN 
+		SET 
+			T_TOKEN=#{token}, T_ENDDATE=#{endDate} 
+		WHERE 
+			T_APPID = #{appid}
+	</update>
+</mapper>

+ 66 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/wechat/mapper/wechatShareMapper.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.iamberry.rst.service.wechat.mapper.WechatShareMapper">
+
+	<sql id="allField">
+		SHARE_ID shareID,
+		SHARE_URL shareUrl,
+		SHARE_URL_HASH shareUrlHash,
+		SHARE_TITLE shareTitle,
+		SHARE_DESC shareDesc,
+		SHARE_DATA_NUM shareDataNum,
+		SHARE_NUM shareNum,
+		SHARE_END_DATE shareEndDate,
+		SHARE_CREATE_DATE shareCreateDate
+	</sql>
+	<!-- 添加一个分享 -->
+	<insert id="addWechatShare" parameterType="WechatShare" useGeneratedKeys="true" keyProperty="shareID">
+		INSERT INTO TB_IAMBERRY_WX_SHARE
+		(
+			SHARE_ID ,
+			SHARE_URL ,
+			SHARE_URL_HASH ,
+			SHARE_TITLE ,
+			SHARE_DESC ,
+			SHARE_DATA_NUM ,
+			SHARE_NUM ,
+			SHARE_END_DATE ,
+			SHARE_CREATE_DATE
+		)
+		VALUES
+		(
+			#{shareID},
+			#{shareUrl},
+			#{shareUrlHash},
+			#{shareTitle},
+			#{shareDesc},
+			#{shareDataNum},
+			#{shareNum},
+			#{shareEndDate},
+			#{shareCreateDate}
+		)
+	</insert>
+	
+	<!-- 根据url 的 hash值,获取对应的规则 -->
+	<select id="selectWechatShareByHash" parameterType="Integer" resultType="WechatShare">
+		SELECT 
+			<include refid="allField"/>
+		FROM 
+			TB_IAMBERRY_WX_SHARE
+		WHERE
+			SHARE_URL_HASH = #{shareUrlHash}
+		LIMIT
+			0, 1
+	</select>
+	
+	<!-- 根据hash更新数据 -->
+	<update id="updateWechatShareByHash" parameterType="WechatShare">
+		UPDATE 
+			TB_IAMBERRY_WX_SHARE 
+		SET 
+			SHARE_DATA_NUM = (SHARE_DATA_NUM + #{shareDataNum}), SHARE_NUM= (SHARE_NUM + #{shareNum}) 
+		WHERE 
+			SHARE_URL_HASH = #{shareUrlHash}
+	</update>
+</mapper>

+ 1 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminCustomerController.java

@@ -1114,7 +1114,7 @@ public class AdminCustomerController {
                 }
                 complaintQuestionInfo.setQuestionName(null);
                 complaintQuestionInfo.setSmallClassId(null);
-                url += "/5";
+                url += "/5/0";
                 switch (typeCompany) {
                     case 1:
                         con = SmsConfig.SEND_PRODUCT_SMS_WATERO;

+ 21 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/wechat/TestController.java

@@ -0,0 +1,21 @@
+package com.iamberry.rst.controllers.wechat;
+
+import com.iamberry.wechat.tools.ResponseJson;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+@RequestMapping("/wechat/getTest")
+public class TestController {
+
+    @ResponseBody
+    @RequestMapping(value = "/test")
+    public ResponseJson updateApplyPick(
+            ) throws Exception {
+        ResponseJson rj =new ResponseJson(200, "修改成功", 200);
+        return rj;
+    }
+
+
+}

+ 207 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/wx/MessageUtil.java

@@ -0,0 +1,207 @@
+package com.iamberry.rst.controllers.wx;
+
+import com.iamberry.wechat.core.entity.wx.*;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.core.util.QuickWriter;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.InputStream;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 消息工具类
+ * @author fzh
+ */
+public class MessageUtil {
+
+	/**
+	 * 返回消息类型:文本
+	 */
+	public static final String RESP_MESSAGE_TYPE_TEXT = "text";
+
+	/**
+	 * 返回消息类型:音乐
+	 */
+	public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
+
+	/**
+	 * 返回消息类型:图文
+	 */
+	public static final String RESP_MESSAGE_TYPE_NEWS = "news";
+
+	/**
+	 * 请求消息类型:文本
+	 */
+	public static final String REQ_MESSAGE_TYPE_TEXT = "text";
+
+	/**
+	 * 请求消息类型:图片
+	 */
+	public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
+
+	/**
+	 * 请求消息类型:链接
+	 */
+	public static final String REQ_MESSAGE_TYPE_LINK = "link";
+
+	/**
+	 * 请求消息类型:地理位置
+	 */
+	public static final String REQ_MESSAGE_TYPE_LOCATION = "location";
+
+	/**
+	 * 请求消息类型:音频
+	 */
+	public static final String REQ_MESSAGE_TYPE_VOICE = "voice";
+
+	/**
+	 * 请求消息类型:推送
+	 */
+	public static final String REQ_MESSAGE_TYPE_EVENT = "event";
+
+	/**
+	 * 事件类型:subscribe(订阅)
+	 */
+	public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
+
+	/**
+	 * 事件类型:unsubscribe(取消订阅)
+	 */
+	public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
+
+	/**
+	 * 事件类型:CLICK(自定义菜单点击事件)
+	 */
+	public static final String EVENT_TYPE_CLICK = "CLICK";
+
+	/**
+	 * 解析微信发来的请求(xml)
+	 * @param request
+	 * @return
+	 * @throws Exception
+	 */
+	@SuppressWarnings("unchecked")
+	public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
+		// 将解析结果存储在HashMap中
+		Map<String, String> map = new HashMap<String, String>();
+
+		// 从request中取得输入流
+		InputStream inputStream = request.getInputStream();
+		// 读取输入流
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(inputStream);
+		// 得到xml根元素
+		Element root = document.getRootElement();
+		// 得到根元素的所有子节点
+		List<Element> elementList = root.elements();
+
+		// 遍历所有子节点
+		for (Element e : elementList)
+			map.put(e.getName(), e.getText());
+
+		// 释放资源
+		inputStream.close();
+		inputStream = null;
+
+		return map;
+	}
+
+	@SuppressWarnings("unchecked")
+	public static Map<String, String> parse2Xml(String html) throws Exception {
+		// 将解析结果存储在HashMap中
+		Map<String, String> map = new HashMap<String, String>();
+
+		// 读取输入流
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(html);
+		// 得到xml根元素
+		Element root = document.getRootElement();
+		// 得到根元素的所有子节点
+		List<Element> elementList = root.elements();
+
+		// 遍历所有子节点
+		for (Element e : elementList){
+			map.put(e.getName(), e.getText());
+		}
+
+		return map;
+	}
+	
+	/**
+	 * 文本消息对象转换成xml
+	 * @param textMessage 文本消息对象
+	 * @return xml
+	 */
+	public static String textMessageToXml(TextMessage textMessage) {
+		xstream.alias("xml", textMessage.getClass());
+		return xstream.toXML(textMessage);
+	}
+	
+	/**
+	 * 音乐消息对象转换成xml
+	 * @param musicMessage 音乐消息对象
+	 * @return xml
+	 */
+	public static String musicMessageToXml(MusicMessage musicMessage) {
+		xstream.alias("xml", musicMessage.getClass());
+		return xstream.toXML(musicMessage);
+	}
+	
+	/**
+	 * 图文消息对象转换成xml
+	 * @param newsMessage 图文消息对象
+	 * @return xml
+	 */
+	public static String newsMessageToXml(NewsMessage newsMessage) {
+		xstream.alias("item", Article.class);
+		xstream.alias("xml", newsMessage.getClass());
+		return xstream.toXML(newsMessage).replaceAll("com.rat.utils.wx.event.entitys.Article", "item");
+	}
+	
+	/**
+	 * 多客服消息对象转换成xml
+	 * @param transferCustomer
+	 * @return
+	 */
+	public static String transferCustomerToXml(TransferCustomer transferCustomer) {
+		xstream.alias("xml", transferCustomer.getClass());
+		return xstream.toXML(transferCustomer);
+	}
+
+	/**
+	 * 扩展xstream,使其支持CDATA块
+	 */
+	private static XStream xstream = new XStream(new XppDriver() {
+		public HierarchicalStreamWriter createWriter(Writer out) {
+			return new PrettyPrintWriter(out) {
+				// 对所有xml节点的转换都增加CDATA标记
+				boolean cdata = true;
+	
+				@SuppressWarnings("rawtypes")
+				public void startNode(String name, Class clazz) {
+					super.startNode(name, clazz);
+				}
+	
+				protected void writeText(QuickWriter writer, String text) {
+					if (cdata) {
+						writer.write("<![CDATA[");
+						writer.write(text);
+						writer.write("]]>");
+					} else {
+						writer.write(text);
+					}
+				}
+			};
+		}
+	});
+	
+}

+ 46 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/wx/config/ConfigHandler.java

@@ -0,0 +1,46 @@
+package com.iamberry.rst.controllers.wx.config;
+
+import com.iamberry.rst.faces.wechat.ConfigService;
+import com.iamberry.wechat.tools.NameUtils;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * description : 分享的业务处理 
+ * @author 何秀刚
+ * create date:2016年2月25日
+ */
+@Controller
+@RequestMapping("/config")
+public class ConfigHandler {
+	
+	@Autowired
+	private ConfigService configService;
+	public void setConfigService(ConfigService configService) {
+		this.configService = configService;
+	}
+	
+	@RequestMapping(value="/get", method=RequestMethod.GET)
+	public void getConfig(HttpServletRequest request, HttpServletResponse response) throws IOException{
+		// 如果数据不为空,拼装数据
+		String appid = NameUtils.getConfig("appId"), url = request.getParameter("url");
+		if(appid ==null || url ==null){
+			return;
+		}
+
+		// 拼装数据
+		JSONObject json = configService.selectConfig(appid, url);
+		if(json == null){
+			return;
+		}
+		response.getWriter().write(json.toString());
+		response.getWriter().close();
+	}
+}

+ 68 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/wx/event/WeChatHandler.java

@@ -0,0 +1,68 @@
+package com.iamberry.rst.controllers.wx.event;
+
+import com.iamberry.rst.controllers.wx.MessageUtil;
+import com.iamberry.rst.faces.wechat.WeChatService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Map;
+
+/**
+ * description : 微信交互handler
+ * @author 何秀刚
+ * create date:2016年3月10日
+ */
+@Controller
+@RequestMapping(value="/wechatBinding")
+public class WeChatHandler {
+	@Autowired
+	private WeChatService weChatService;
+	public void setWeChatService(WeChatService weChatService) {
+		this.weChatService = weChatService;
+	}
+
+	@RequestMapping(method=RequestMethod.GET)
+	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+		String echostr = request.getParameter("echostr");
+		if (echostr == null) {
+			response.getWriter().print("connect Server! echostr Error!");
+			return;
+		}
+		PrintWriter out = response.getWriter();
+		out.print(echostr);
+		out.close();
+	}
+	
+	@RequestMapping(method=RequestMethod.POST)
+	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
+		// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+
+		String respMessage = "哎呀 ~ 服务器开小差啦!";
+        try {
+        	Map<String, String> requestMap = MessageUtil.parseXml(request);
+			respMessage = weChatService.processRequest(requestMap.get("FromUserName"), 
+					requestMap.get("ToUserName"), requestMap.get("MsgType"), 
+					requestMap.get("CreateTime"), requestMap.get("Content"), 
+					requestMap.get("Event"), requestMap.get("Ticket"), 
+					requestMap.get("EventKey"));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+        // 响应消息
+        PrintWriter out = response.getWriter();
+        out.print(respMessage);
+        out.close();
+	}
+
+
+
+
+}

+ 2 - 0
watero-rst-web/src/main/java/com/iamberry/rst/filters/WechatFilter.java

@@ -29,6 +29,8 @@ public class WechatFilter implements Filter {
 	@Override
 	public void doFilter(ServletRequest request, ServletResponse response,
 						 FilterChain chain) throws IOException, ServletException {
+
+//		chain.doFilter(request, response);
 		// 权限拦截类
 		HttpServletRequest req = (HttpServletRequest) request;
 		HttpServletResponse resp = (HttpServletResponse) response;

+ 6 - 3
watero-rst-web/src/main/resources/platform.properties

@@ -88,10 +88,10 @@ partnerkey=cdb9075e7ecad945ba788bc5aedM212B
 # appId-wateroPF
 #appId=wx2abd86e7dd0c8bc3
 # appId-watero\u6C34\u65F6\u4EE3
-appId=wx27c9f825761a861b
+appId=wx9e7da27455d4f974
 
 # appSecret-test
-appSecret=8a90e3ab0e2db7772f5f64e7ed2f4b98
+appSecret=39c8f8742c3f084e1da5b75520436a70
 # appSecret-wateroPF
 #appSecret=e3b11ca050578ac8b794b510b16b2020
 # appSecret-watero\u6C34\u65F6\u4EE3
@@ -108,4 +108,7 @@ scanningQrCode=https://w.iamberry.com/tooth/wechat/qr/
 ReqURL=http://testapi.kdniao.cc:8081/api/EOrderService
 
 # wechat auth back url
-WECHAT_BACK_URL=http://test.iamberry.com/rst/wechatBack
+WECHAT_BACK_URL=http://test.iamberry.com/wechatBack
+
+# index redirect url
+redirectUrl_index=redirect:/wechat/index

+ 61 - 0
watero-rst-web/src/main/resources/watero-rst-orm.xml

@@ -121,6 +121,52 @@
 		<typeAlias type="com.iamberry.rst.core.approval.ApprovalRecord" alias="ApprovalRecord"/>
 		<typeAlias type="com.iamberry.rst.core.approval.ApplyPick" alias="ApplyPick"/>
 		<typeAlias type="com.iamberry.rst.core.approval.ApplyPickItem" alias="ApplyPickItem"/>-->
+
+
+		<!--member-->
+		<typeAlias type="com.iamberry.wechat.core.entity.member.Member" alias="Member"/>
+
+		<!--wx-->
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.FirstJoinKey" alias="FirstJoinKey"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.AccessToken" alias="AccessToken"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Article" alias="Article"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.BaseMessage" alias="BaseMessage"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Button" alias="Button"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.CommonButton" alias="CommonButton"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.ComplexButton" alias="ComplexButton"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Config" alias="Config"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.ConfigJSSDK" alias="ConfigJSSDK"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.FirstAccess" alias="FirstAccess"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.FirstJoinKey" alias="FirstJoinKey"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.ImageTextInfo" alias="ImageTextInfo"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.ImagetextMaterial" alias="ImagetextMaterial"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.ImageTextMore" alias="ImageTextMore"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Income" alias="Income"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.ITTempLate" alias="ITTempLate"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.KeyWord" alias="KeyWord"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.MenuData" alias="MenuData"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.MenuInfo" alias="MenuInfo"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.MenuKeySet" alias="MenuKeySet"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Music" alias="Music"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.MusicMessage" alias="MusicMessage"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.NewsMessage" alias="NewsMessage"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.PagingDTO" alias="PagingDTO"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.QRCJson" alias="QRCJson"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Rewards" alias="Rewards"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Shipment" alias="Shipment"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Status" alias="Status"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.TextMessage" alias="TextMessage"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Ticket" alias="Ticket"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.Token" alias="Token"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.TransferCustomer" alias="TransferCustomer"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.TransInfo" alias="TransInfo"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.WechatShare" alias="WechatShare"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.WxPayDto" alias="WxPayDto"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.WxPayResult" alias="WxPayResult"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.WxPrepayIdErrorResult" alias="WxPrepayIdErrorResult"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.wx.ZTreeBean" alias="ZTreeBean"/>
+
+		<typeAlias type="com.iamberry.wechat.core.entity.PaperBean" alias="PaperBean"/>
 	</typeAliases>
 	<!-- PageHelper -->
 	<plugins>
@@ -195,5 +241,20 @@
 		<!--<mapper resource="com/iamberry/rst/service/approval/mapper/applyPickItemMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/approval/mapper/applyPickMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/approval/mapper/approvalOrderMapper.xml"/>-->
+
+		<!--member-->
+		<mapper resource="com/iamberry/rst/service/member/mapper/memberMapper.xml"/>
+
+		<!--wx -->
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/configMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/firstJoinKeyMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/homeMemberMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/imageTextInfoMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/imageTextMoreMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/keyWordMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/menuInfoMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/menuKeySetMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/tokenMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/wechat/mapper/wechatShareMapper.xml"/>
 	</mappers>
 </configuration>

+ 9 - 0
watero-rst-web/src/main/webapp/WEB-INF/web.xml

@@ -75,6 +75,15 @@
     <url-pattern>/*</url-pattern>
   </filter-mapping>
 
+  <filter>
+    <filter-name>cors</filter-name>
+    <filter-class>com.iamberry.common.web.SimpleCORSFilter</filter-class>
+  </filter>
+  <filter-mapping>
+    <filter-name>cors</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+
   <!-- 错误页面 -->
   <error-page>
     <error-code>400</error-code>