Browse Source

Merge branch 'master' into git-master

# Conflicts:
#	README.md
hermit 7 years ago
parent
commit
2e6e782abd
25 changed files with 301 additions and 516 deletions
  1. 2 11
      src/main/java/com/wxmp/core/interceptor/XSSRequestWrapper.java
  2. 12 0
      src/main/java/com/wxmp/core/util/HttpClientUtils.java
  3. 0 52
      src/main/java/com/wxmp/core/util/ImgTypeUtil.java
  4. 126 0
      src/main/java/com/wxmp/core/util/MediaTypeUtil.java
  5. 18 51
      src/main/java/com/wxmp/wxapi/ctrl/WxApiCtrl.java
  6. 9 205
      src/main/java/com/wxmp/wxapi/process/WxApi.java
  7. 0 37
      src/main/java/com/wxmp/wxapi/process/WxApiClient.java
  8. 3 1
      src/main/java/com/wxmp/wxapi/service/MyService.java
  9. 49 10
      src/main/java/com/wxmp/wxapi/service/impl/MyServiceImpl.java
  10. 3 6
      src/main/java/com/wxmp/wxcms/ctrl/ImgResourceCtrl.java
  11. 34 40
      src/main/java/com/wxmp/wxcms/ctrl/MsgNewsCtrl.java
  12. 1 21
      src/main/java/com/wxmp/wxcms/ctrl/UserTagCtrl.java
  13. 1 3
      src/main/java/com/wxmp/wxcms/service/UserTagService.java
  14. 18 20
      src/main/java/com/wxmp/wxcms/service/impl/MsgNewsServiceImpl.java
  15. 0 34
      src/main/java/com/wxmp/wxcms/service/impl/UserTagServiceImpl.java
  16. 3 3
      src/main/resources/property/jdbc.properties
  17. 2 2
      src/main/resources/property/upload.properties
  18. 3 3
      src/main/webapp/js/plugin/layui/src/lay/modules/layedit.js
  19. 1 1
      src/main/webapp/views/index/index-x.html
  20. 7 7
      src/main/webapp/views/index/workbench.html
  21. 2 2
      src/main/webapp/views/material/document/addmultiple.html
  22. 2 2
      src/main/webapp/views/material/document/addsingle.html
  23. 2 2
      src/main/webapp/views/material/document/editmultiple.html
  24. 2 2
      src/main/webapp/views/material/document/editsingle.html
  25. 1 1
      src/main/webapp/views/system/tags/tags.html

+ 2 - 11
src/main/java/com/wxmp/core/interceptor/XSSRequestWrapper.java

@@ -28,6 +28,7 @@ import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
 
+import com.wxmp.core.util.XSSUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
@@ -35,10 +36,6 @@ import org.apache.http.HttpHeaders;
 import org.apache.http.entity.ContentType;
 import org.apache.log4j.Logger;
 
-import com.wxmp.core.util.XSSUtils;
-
-
-
 /**
  * XSS攻击解决方案 
 * @ClassName: XSSRequestWrapper 
@@ -62,9 +59,7 @@ public class XSSRequestWrapper extends HttpServletRequestWrapper {
         int count = values.length;
         String[] encodedValues = new String[count];
         for (int i = 0; i < count; i++) {
-        	logger.info("ParameterValues start==========: "+i+"=>"+values[i]);
             encodedValues[i] = stripXSS(values[i]);
-            logger.info("ParameterValues end==========: "+i+"=>"+encodedValues[i]);
         }
         return encodedValues;
     }
@@ -72,7 +67,6 @@ public class XSSRequestWrapper extends HttpServletRequestWrapper {
     @Override
     public String getParameter(String parameter) {
         String value = super.getParameter(parameter);
-        logger.info("Parameter==========:"+value);
         if (StringUtils.isBlank(value)) {
             return super.getParameter(parameter);
         }
@@ -82,7 +76,6 @@ public class XSSRequestWrapper extends HttpServletRequestWrapper {
     @Override
     public String getHeader(String name) {
         String value = super.getHeader(name);
-        logger.info("Header==========:"+value);
         if (StringUtils.isBlank(value)) {
             return super.getHeader(name);
         }
@@ -95,9 +88,7 @@ public class XSSRequestWrapper extends HttpServletRequestWrapper {
         for (String key : parameters.keySet()) {
             String[] values = parameters.get(key);
             for (int i = 0; i < values.length; i++) {
-            	logger.info("getParameterMap==========:"+values[i]);
                 values[i] = stripXSS(values[i]);
-                logger.info("getParameterMap  end ==========:"+values[i]);
             }
             map.put(key, values);
         }
@@ -175,7 +166,7 @@ public class XSSRequestWrapper extends HttpServletRequestWrapper {
 //            value=XSSUtils.escapeForLang(value);
             value=StringEscapeUtils.escapeSql(value);//
             //针对图文部分,这里要放开
-            value=XSSUtils.cleanXSS(value);
+            value= XSSUtils.cleanXSS(value);
         }
         return value;
     }

+ 12 - 0
src/main/java/com/wxmp/core/util/HttpClientUtils.java

@@ -259,6 +259,18 @@ public class HttpClientUtils {
      *            地址
      * @param file
      *            附件,名称和File对应
+     */
+    public static String sendHttpPost(String httpUrl, File file) {
+        return sendHttpPost(httpUrl,  ImmutableMap.of( "media", file), null, null);
+    }
+
+    /**
+     * 发送 post请求(带文件)
+     *
+     * @param httpUrl
+     *            地址
+     * @param file
+     *            附件,名称和File对应
      * @param maps
      *            参数
      */

+ 0 - 52
src/main/java/com/wxmp/core/util/ImgTypeUtil.java

@@ -1,52 +0,0 @@
-/*
- * FileName:ImgTypeUtil.java 
- * <p>
- * Copyright (c) 2017-2020, <a href="http://www.webcsn.com">hermit (794890569@qq.com)</a>.
- * <p>
- * Licensed under the GNU General Public License, Version 3 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p>
- * http://www.gnu.org/licenses/gpl-3.0.html
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package com.wxmp.core.util;
-
-public class ImgTypeUtil {
-	private static final String typeString = "jpg,bmp,tga,vst,pcd,pct,gif,ai,fpx,img,cal,wi,png,tiff,psd,eps,raw,pdf,png,pxr,mac,eps,ai,sct,pdf,pdp,dxf";
-	
-	/**
-	 * 通过文件名判断是否为图片
-	 * @param ObjName
-	 * @return
-	 */
-	public static boolean isImg(String ObjName){
-		if(ObjName == null){
-			return false;
-		}
-		if(ObjName.indexOf(".") != -1){
-			//全名
-			String nString = ObjName.substring(ObjName.lastIndexOf(".")+1);
-			int result = typeString.indexOf(nString);
-			if(result == -1){
-				return false;
-			}else {
-				return true;
-			}
-		}else {
-			//扩展名
-			int result = typeString.indexOf(ObjName);
-			if(result == -1){
-				return false;
-			}else {
-				return true;
-			}
-		}
-	}
-}

+ 126 - 0
src/main/java/com/wxmp/core/util/MediaTypeUtil.java

@@ -0,0 +1,126 @@
+/*
+ * FileName:ImgTypeUtil.java 
+ * <p>
+ * Copyright (c) 2017-2020, <a href="http://www.webcsn.com">hermit (794890569@qq.com)</a>.
+ * <p>
+ * Licensed under the GNU General Public License, Version 3 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.gnu.org/licenses/gpl-3.0.html
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.wxmp.core.util;
+
+public class MediaTypeUtil {
+
+	/**
+	 * 图片后缀
+	 */
+	private static final String imgType = "jpg,bmp,tga,vst,pcd,pct,gif,ai,fpx,img,cal,wi,png,tiff,psd,eps,raw,pdf,png,pxr,mac,eps,ai,sct,pdf,pdp,dxf";
+
+    /**
+     * 视频后缀
+     */
+    private static final String videoType = "avi,mp4,wma,rmvb,rm,flash,3gp,flv";
+    
+    /**
+     * 音频后缀
+     */
+    private static final String audioType = "mp3,wav,mid";
+
+
+
+	/**
+	 * 通过文件名判断是否为图片
+	 * @param ObjName
+	 * @return
+	 */
+	public static boolean isImg(String ObjName){
+		if(ObjName == null){
+			return false;
+		}
+		if(ObjName.indexOf(".") != -1){
+			//全名
+			String nString = ObjName.substring(ObjName.lastIndexOf(".")+1);
+			int result = imgType.indexOf(nString);
+			if(result == -1){
+				return false;
+			}else {
+				return true;
+			}
+		}else {
+			//扩展名
+			int result = imgType.indexOf(ObjName);
+			if(result == -1){
+				return false;
+			}else {
+				return true;
+			}
+		}
+	}
+
+	/**
+	 * 通过文件名判断是否为图视频
+	 * @param ObjName
+	 * @return
+	 */
+	public static boolean isVideo(String ObjName){
+		if(ObjName == null){
+			return false;
+		}
+		if(ObjName.indexOf(".") != -1){
+			//全名
+			String nString = ObjName.substring(ObjName.lastIndexOf(".")+1);
+			int result = videoType.indexOf(nString);
+			if(result == -1){
+				return false;
+			}else {
+				return true;
+			}
+		}else {
+			//扩展名
+			int result = videoType.indexOf(ObjName);
+			if(result == -1){
+				return false;
+			}else {
+				return true;
+			}
+		}
+	}
+
+	/**
+	 * 通过文件名判断是否为音频
+	 * @param ObjName
+	 * @return
+	 */
+	public static boolean isAudio(String ObjName){
+		if(ObjName == null){
+			return false;
+		}
+		if(ObjName.indexOf(".") != -1){
+			//全名
+			String nString = ObjName.substring(ObjName.lastIndexOf(".")+1);
+			int result = audioType.indexOf(nString);
+			if(result == -1){
+				return false;
+			}else {
+				return true;
+			}
+		}else {
+			//扩展名
+			int result = audioType.indexOf(ObjName);
+			if(result == -1){
+				return false;
+			}else {
+				return true;
+			}
+		}
+	}
+}

+ 18 - 51
src/main/java/com/wxmp/wxapi/ctrl/WxApiCtrl.java

@@ -210,6 +210,23 @@ public class WxApiCtrl extends BaseCtrl{
 		return AjaxResult.failure();
 	}
 
+	/**
+	 * 同步用户标签列表
+	 * @return
+	 */
+	@RequestMapping(value = "/syncUserTagList")
+	@ResponseBody
+	public AjaxResult syncUserTagList() throws WxErrorException {
+		MpAccount mpAccount = WxMemoryCacheClient.getMpAccount();//获取缓存中的唯一账号
+		if(mpAccount != null){
+			boolean flag = myService.syncUserTagList(mpAccount);
+			if(flag){
+				return AjaxResult.success();
+			}
+		}
+		return AjaxResult.failure();
+	}
+
 	//根据用户的ID更新用户信息
 	@RequestMapping(value = "/syncAccountFans")
 	@ResponseBody
@@ -325,7 +342,6 @@ public class WxApiCtrl extends BaseCtrl{
 			openidList.add(openid);
 			//根据openid群发文本消息
 			JSONObject result = WxApiClient.massSendTextByOpenIds(openidList, content, mpAccount);
-			
 			try {
 				if(result.getIntValue("errcode") != 0){
 					response.getWriter().write("send failure");
@@ -379,7 +395,7 @@ public class WxApiCtrl extends BaseCtrl{
 
 			tplMsg.setUrl("https://www.smartwx.info");
 			Map<String, String> dataMap = new HashMap<String, String>();
-			dataMap.put("first", "多公众号管理开源平台");
+			dataMap.put("first", "smartadmin管理后台已经上线,欢迎吐槽");
 			dataMap.put("keyword1", "时间:" + DateUtil.changeDateTOStr(new Date()));
 			dataMap.put("keyword2", "码云平台地址:https://gitee.com/qingfengtaizi/wxmp");
 			dataMap.put("keyword3", "github平台地址:https://github.com/qingfengtaizi/wxmp-web");
@@ -393,55 +409,6 @@ public class WxApiCtrl extends BaseCtrl{
 	}
 	
 	/**
-	 * 获取js ticket
-	 * @param request
-	 * @param url 
-	 * @return
-	 */
-	@RequestMapping(value = "/jsTicket")
-	@ResponseBody
-	public String jsTicket(HttpServletRequest request, String url) throws WxErrorException  {
-		MpAccount mpAccount = WxMemoryCacheClient.getMpAccount();//获取缓存中的唯一账号
-		String jsTicket = WxApiClient.getJSTicket(mpAccount);
-		WxSign sign = new WxSign(mpAccount.getAppid(),jsTicket,url);//sha1签名得到signature
-		
-		
-		JsonView jv = new JsonView();
-		jv.setData(sign);
-		
-		return jv.toString();
-	}
-	
-	/**
-	 * js支付
-	 * 支付授权目录一定要写对,否则js一直会提示 {chooseWXPay:fail}
-	 * 支付授权目录指的是调用jsapi支付页面的文件目录(且一定要以/结尾)
-	 * 现在jsapi支付的支付页面是为http://www.yjydt.cn/wxweb/jssdk.jsp
-	 * 故支付授权目录为http://www.yjydt.cn/wxweb/
-	 */
-	@RequestMapping(value = "/pay")
-	@ResponseBody
-	public String jsPay(HttpServletRequest request, String openid, String timestamp, String nonceStr) {
-		log.info("-------------------------------------jsPay-----<0>-------------------openid:"+openid);		
-		log.info("-------------------------------------jsPay-----<1>-------------------timestamp:"+timestamp);	
-		//String openid = WxMemoryCacheClient.getOpenid(request.getSession().getId());//先从缓存中获取openid
-		
-		MpAccount mpAccount = WxMemoryCacheClient.getMpAccount();//获取缓存中的唯一账号
-		log.info("-------------------------------------jsPay-----<2>-------------------mpAccount:"+mpAccount.getAppid());		
-		
-	/*	      timestamp: 1414723227,
-	      nonceStr: 'noncestr',
-	      package: 'addition=action_id%3dgaby1234%26limit_pay%3d&bank_type=WX&body=innertest&fee_type=1&input_charset=GBK&notify_url=http%3A%2F%2F120.204.206.246%2Fcgi-bin%2Fmmsupport-bin%2Fnotifypay&out_trade_no=1414723227818375338&partner=1900000109&spbill_create_ip=127.0.0.1&total_fee=1&sign=432B647FE95C7BF73BCD177CEECBEF8D',
-	      paySign: 'bd5b1933cda6e9548862944836a9b52e8c9a2b69'*/
-		
-		JsonView jv = new JsonView();
-		jv.setData(WxApiClient.getWSJSPayPara(mpAccount,openid,timestamp,nonceStr));
-		
-		return jv.toString();
-	}
-
-
-	/**
 	 * 微信异步返回
 	 * @param requestBodyXml
 	 * @return

+ 9 - 205
src/main/java/com/wxmp/wxapi/process/WxApi.java

@@ -624,13 +624,14 @@ public class WxApi {
 
     /**
      * 新增图文永久素材
+     * 
      * @param materialUri
      * @param filePath
      * @return
      * @throws Exception
      */
-    public static JSONObject addMaterial(String materialUri, String filePath) throws Exception {
-        String result = null;
+    public static JSONObject addMaterial(String materialUri, String filePath)
+        throws Exception {
         File file = new File(filePath);
         if (!file.exists() || !file.isFile()) {
             try {
@@ -639,76 +640,13 @@ public class WxApi {
                 e.printStackTrace();
             }
         }
-        /**
-        * 第一部分
-        */
-        URL urlObj = new URL(materialUri);
-        HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
-        con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
-        con.setDoInput(true);
-        con.setDoOutput(true);
-        con.setUseCaches(false); // post方式不能使用缓存
-        // 设置请求头信息
-        con.setRequestProperty("Connection", "Keep-Alive");
-        con.setRequestProperty("Charset", "UTF-8");
-        // 设置边界
-        String BOUNDARY = "----------" + System.currentTimeMillis();
-        con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
-        // 请求正文信息
-        // 第一部分:
-        StringBuilder sb = new StringBuilder();
-        sb.append("--"); // 必须多两道线
-        sb.append(BOUNDARY);
-        sb.append("\r\n");
-        sb.append("Content-Disposition: form-data;name=\"media\";filename=\"" + file.getName() + "\"\r\n");
-        sb.append("Content-Type:application/octet-stream\r\n\r\n");
-        byte[] head = sb.toString().getBytes("utf-8");
-        // 获得输出流
-        OutputStream out = new DataOutputStream(con.getOutputStream());
-        // 输出表头
-        out.write(head);
-        // 文件正文部分
-        // 把文件已流文件的方式 推入到url中
-        DataInputStream in = new DataInputStream(new FileInputStream(file));
-        int bytes = 0;
-        byte[] bufferOut = new byte[1024];
-        while ((bytes = in.read(bufferOut)) != -1) {
-            out.write(bufferOut, 0, bytes);
-        }
-        in.close();
-        // 结尾部分
-        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
-        out.write(foot);
-        out.flush();
-        out.close();
-        StringBuffer buffer = new StringBuffer();
-        BufferedReader reader = null;
-        try {
-            // 定义BufferedReader输入流来读取URL的响应
-            reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
-            String line = null;
-            while ((line = reader.readLine()) != null) {
-                buffer.append(line);
-            }
-            if (result == null) {
-                result = buffer.toString();
-            }
-            JSONObject jsonObject = JSONObject.parseObject(result.toString());
-
-            if (jsonObject != null) {
-                return jsonObject;
-            }
-        } catch (IOException e) {
-            System.out.println("发送POST请求出现异常!" + e);
-            e.printStackTrace();
-            throw new IOException("数据读取异常");
-        } finally {
-            if (reader != null) {
-                reader.close();
-            }
+        String result = HttpClientUtils.sendHttpPost(materialUri, file);
+        WxError wxError = WxError.fromJson(result);
+        if (wxError.getErrorCode() != 0) {
+            throw new WxErrorException(wxError);
         }
-
-        return null;
+        
+        return JSONObject.parseObject(result);
     }
     /**
      *  永久素材添加-不包含图文
@@ -989,140 +927,6 @@ public class WxApi {
     	
     	return forDataCube(accessToken, "getusersharehour", start, end);
     }
-    
-    /**
-     * 构造微信JSSDK支付参数,返回到页面
-     */
-    public static Map<String, String> getWSJSPayPara(String openId, String appId, String appsecret, String partnerkey,
-                                                     String mch_id, String body, String outTradeNo, String payMoney, String notify_url, String trade_type,
-                                                     String str_timestamp, String str_nonceStr) {
-        // 支付金额
-        float sessionmoney = Float.parseFloat(payMoney);
-        payMoney = String.format("%.2f", sessionmoney);
-        payMoney = payMoney.replace(".", "");
-
-        System.out.println("微信端充值金额:=======" + payMoney);
-        String nonce_str = str_nonceStr; // 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
-        // 订单生成的机器 IP
-        String spbill_create_ip = "123.57.243.49";
-
-        System.out.println("ip地址:=============" + spbill_create_ip);
-
-        long currentTime = System.currentTimeMillis() + 0 * 60 * 1000;
-        String strCurrentTime = com.wxmp.core.util.wx.TenpayUtil2.getWXTime(currentTime);
-        long currentTimeLay30m = currentTime + 30 * 60 * 1000;// 30分钟后 【要求至少5分钟过期】
-        String strCurrentTimeLay30m = com.wxmp.core.util.wx.TenpayUtil2.getWXTime(currentTimeLay30m);
-        // 订 单 生 成 时 间 非必输
-        String time_start = strCurrentTime;
-        // 订单失效时间 非必输
-        String time_expire = strCurrentTimeLay30m;
-
-        SortedMap<String, String> packageParams = new TreeMap<String, String>();
-        packageParams.put("appid", appId);
-        packageParams.put("mch_id", mch_id);
-        packageParams.put("device_info", "WEB");// PC网页或公众号内支付请传"WEB"
-        packageParams.put("body", body);
-        packageParams.put("openid", openId); // jssdk模式时这个必填
-        packageParams.put("nonce_str", nonce_str);
-        packageParams.put("out_trade_no", outTradeNo);
-        packageParams.put("total_fee", payMoney);
-        packageParams.put("spbill_create_ip", spbill_create_ip);
-        packageParams.put("notify_url", notify_url);
-        packageParams.put("trade_type", trade_type);
-
-        com.wxmp.core.util.wx.RequestHandler reqHandler = new com.wxmp.core.util.wx.RequestHandler(null, null);
-        reqHandler.init(appId, appsecret, partnerkey);
-
-        // ##生成加密签名,此签名用于统一订单接口
-        String sign = reqHandler.createSign(packageParams);
-        String xml = "<xml>" + "<openid>" + openId + "</openid>" + "<appid>" + appId + "</appid>" + "<mch_id>" + mch_id
-                + "</mch_id>" + "<device_info>" + "WEB" + "</device_info>" + "<nonce_str>" + nonce_str + "</nonce_str>"
-                + "<body><![CDATA[" + body + "]]></body>" + "<out_trade_no>" + outTradeNo + "</out_trade_no>"
-                + "<total_fee>" + payMoney + "</total_fee>" + "<spbill_create_ip>" + spbill_create_ip
-                + "</spbill_create_ip>" + "<notify_url>" + notify_url + "</notify_url>" + "<trade_type>" + trade_type
-                + "</trade_type>" + "<sign>" + sign + "</sign>" + "</xml>";
-
-        System.out.println("手机端外部订单号:out_trade_no" + outTradeNo);
-        System.out.println("======================================:");
-        System.out.println("手机端统一订单接口传参:" + xml);
-
-        Map<String, String> dataMap = new HashMap<String, String>();
-        String createOrderURL = getUnifiedOrderUrl();
-        String prepay_id = "";
-        String errMsg = "";
-        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
-        String nonceStr = Identities.getRandomString(8);
-        // #######jssdk config配置时已设置,从前台传过来######
-        timestamp = str_timestamp;
-        nonceStr = str_nonceStr;// nonce_str:下统一订单时的随机字符串,此时这三个随机变量完全相等
-        String paySign = "";
-
-        try {
-            String retXmlStr = httpsRequestByXml(createOrderURL, HttpMethod.POST, xml);
-            System.out.println("手机端统一订单接口结果:" + retXmlStr);
-            if (null != retXmlStr && retXmlStr.contains("return_code")) {
-                Map map = com.wxmp.core.util.wx.TenpayUtil2.doXMLParseByDom4j(retXmlStr);
-                String return_code = (String) map.get("return_code");
-                if ("SUCCESS".equals(return_code)) {
-                    String result_code = (String) map.get("result_code");
-                    if ("SUCCESS".equals(result_code)) {
-                        prepay_id = (String) map.get("prepay_id");
-                        errMsg = "0";
-                    } else {
-                        prepay_id = "";
-                        errMsg = (String) map.get("err_code_des");
-                    }
-                } else {
-                    prepay_id = "";
-                    errMsg = (String) map.get("return_msg");
-                }
-
-                // ###生成支付签名,此签名 给 微信支付的调用使用(前台页面使用)
-                SortedMap<String, String> packageParams_paySign = new TreeMap<String, String>();
-                packageParams_paySign.put("appId", appId);
-                packageParams_paySign.put("timeStamp", timestamp);// 后台生成签名时是大写的timeStamp
-                packageParams_paySign.put("nonceStr", nonceStr);// 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
-                packageParams_paySign.put("package", "prepay_id=" + prepay_id);
-                packageParams_paySign.put("signType", "MD5");
-                com.wxmp.core.util.wx.RequestHandler reqHandler_paySign = new com.wxmp.core.util.wx.RequestHandler(null,
-                        null);
-                reqHandler_paySign.init(appId, appsecret, partnerkey);
-                paySign = reqHandler_paySign.createSign(packageParams_paySign);
-
-                /**
-                 * 最后别忘记一定要设置:微信支付授权目录设置
-                 * 微信支付授权目录设置
-                 注意这里所指的是目录,所以一定要以左斜杠“/”结尾,不是设置支付的url网址
-                 例如设置的是:http://www.newfms.com/order/pay/
-                 那么真正支付url是
-                 http://www.newfms.com/order/pay/
-                 http://www.newfms.com/order/pay/1
-                 如果是这样的支付url就会报错:http://www.newfms.com/order/pay
-                 */
-
-            } else {
-                System.out.println("统一支付接口出错");
-                prepay_id = "";
-                errMsg = "统一支付接口出错";
-            }
-        } catch (Exception e1) {
-            System.out.println("系统异常\n" + e1.getMessage());
-            prepay_id = "";
-            errMsg = "系统异常\n" + e1.getMessage();
-        } // try-catch end
-
-        // ###返回给 微信支付的调用使用(前台页面使用)
-        dataMap.put("appid", appId);
-        dataMap.put("timestamp", timestamp);// 前台页面调用jssdk支付时是小写的timestamp
-        dataMap.put("nonceStr", nonceStr);
-        dataMap.put("package", "prepay_id=" + prepay_id);
-        dataMap.put("signType", "MD5");
-        dataMap.put("paySign", paySign);
-        dataMap.put("errMsg", errMsg);
-
-        return dataMap;
-    }
-
     // 发送请求
     public static JSONObject httpsRequest(String requestUrl, String requestMethod) {
         return httpsRequest(requestUrl, requestMethod, null);

+ 0 - 37
src/main/java/com/wxmp/wxapi/process/WxApiClient.java

@@ -737,41 +737,4 @@ public class WxApiClient {
         }
         return rstObj;
     }
-
-    /**
-     * 构造微信JSSDK支付参数,返回到页面
-     */
-    public static Map<String, String> getWSJSPayPara(MpAccount mpAccount, String openid, String timestamp, String nonceStr) {
-        Map<String, String> dataMap = new HashMap<String, String>();
-        String openId = openid;
-        String appId = mpAccount.getAppid();
-        String appsecret = mpAccount.getAppsecret();
-        String partnerkey = "abcdefghijklmnopqrstuvwxyz123456";// 在微信商户平台pay.weixin.com里自己生成的那个key
-        String mch_id = "1317476101";
-        String body = "支付009992";
-        String out_trade_no = "20160411111101";
-        String finalmoney = "1";
-        String notify_url = "http://www.yjydt.cn/wxmp/wxapi/wxipay_noity";
-        // String notify_url="http://www.yjydt.cn/pay/wxipay_noity";
-        String trade_type = "JSAPI";// 公众号支付
-
-        dataMap = WxApi.getWSJSPayPara(openId, appId, appsecret, partnerkey, mch_id, body, out_trade_no, finalmoney, notify_url, trade_type, timestamp, nonceStr);
-        return dataMap;
-    }
-
-	public static void main(String[] args) {
-        String appid = "wx91961db8b6273777";
-        String appsecret = "7d0377b8b30d4b3df4ba46bb7febc793";
-        String mch_id = "1317476101";
-        String partnerkey = "abcdefghijklmnopqrstuvwxyz123456";// 在微信商户平台pay.weixin.com里自己生成的那个key
-        MpAccount mpAccount = new MpAccount();
-        mpAccount.setAppid(appid);
-        mpAccount.setAppsecret(appsecret);
-        
-        String openid = "otLBWs_uiGnrWBGgHEemPZTQLatE";
-        
-        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
-        String nonceStr = Identities.getRandomString(8);
-        getWSJSPayPara(mpAccount, openid, timestamp, nonceStr);
-    }
 }

+ 3 - 1
src/main/java/com/wxmp/wxapi/service/MyService.java

@@ -46,5 +46,7 @@ public interface MyService {
 	
 	//根据openid 获取粉丝,如果没有,同步粉丝
 	public AccountFans getFansByOpenId(String openid,MpAccount mpAccount) throws WxErrorException ;
-	
+
+	//同步服务器的用户标签
+	public boolean syncUserTagList(MpAccount mpAccount)throws WxErrorException ;
 }

+ 49 - 10
src/main/java/com/wxmp/wxapi/service/impl/MyServiceImpl.java

@@ -19,11 +19,15 @@
 package com.wxmp.wxapi.service.impl;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import javax.annotation.Resource;
 
 import com.wxmp.core.exception.WxErrorException;
+import com.wxmp.wxcms.domain.*;
+import com.wxmp.wxcms.mapper.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
@@ -43,16 +47,6 @@ import com.wxmp.wxapi.process.WxMessageBuilder;
 import com.wxmp.wxapi.service.MyService;
 import com.wxmp.wxapi.vo.Matchrule;
 import com.wxmp.wxapi.vo.MsgRequest;
-import com.wxmp.wxcms.domain.AccountFans;
-import com.wxmp.wxcms.domain.AccountMenu;
-import com.wxmp.wxcms.domain.MsgBase;
-import com.wxmp.wxcms.domain.MsgNews;
-import com.wxmp.wxcms.domain.MsgText;
-import com.wxmp.wxcms.mapper.AccountFansDao;
-import com.wxmp.wxcms.mapper.AccountMenuDao;
-import com.wxmp.wxcms.mapper.AccountMenuGroupDao;
-import com.wxmp.wxcms.mapper.MsgBaseDao;
-import com.wxmp.wxcms.mapper.MsgNewsDao;
 
 /**
  * 业务消息处理
@@ -77,6 +71,9 @@ public class MyServiceImpl implements MyService {
     @Resource
     private AccountFansDao fansDao;
 
+    @Resource
+    private UserTagDao userTagDao;
+
     private Logger logger = Logger.getLogger(MyServiceImpl.class);
 
     /**
@@ -293,4 +290,46 @@ public class MyServiceImpl implements MyService {
         }
         return fans;
     }
+
+    //同步粉丝列表
+    public boolean syncUserTagList(MpAccount mpAccount) throws WxErrorException {
+        String url=null;
+        try {
+            url = WxApi.getUserTagList(WxApiClient.getAccessToken(mpAccount));
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+        }
+        logger.info("同步用户标签参消息如下:"+url);
+        JSONObject jsonObject = WxApi.httpsRequest(url, HttpMethod.GET, null);
+        logger.info("同步用户标签消息如下:"+jsonObject.toString());
+        if(jsonObject.containsKey("errcode")){
+            return false;
+        }
+        JSONArray arr = jsonObject.getJSONArray("tags");//获取jsonArray对象
+        String js=JSONObject.toJSONString(arr);//将array数组转换成字符串
+        List<UserTag> userTagList=JSONObject.parseArray(js, UserTag.class);//把字符串转换成集合
+        //判断是否已经同步
+        Collections.sort(userTagList, new Comparator<UserTag>() {
+            @Override
+            public int compare(UserTag o1, UserTag o2) {
+                return o2.getId().compareTo(o1.getId());
+            }
+        });
+        UserTag userTag = userTagList.get(0);
+        Integer maxIdInDb = userTagDao.getMaxId() == null ?  0 : userTagDao.getMaxId();//第一次同步,数据库没有数据返回null
+        if (null == userTag.getId() || userTag.getId().intValue() == maxIdInDb.intValue()) {
+            //说明已经同步
+            return true;
+        }else if( userTag.getId() > maxIdInDb ){
+            //如果微信服务器新增用户标签,同步新增标签,新增标签的ID比本地库的ID大
+            for (UserTag tag: userTagList) {
+                if(tag.getId()<=maxIdInDb){
+                    userTagList.remove(tag);
+                }
+            }
+            userTagDao.addList(userTagList);
+            return true;
+        }
+        return true;
+    }
 }

+ 3 - 6
src/main/java/com/wxmp/wxcms/ctrl/ImgResourceCtrl.java

@@ -35,7 +35,7 @@ import org.springframework.web.multipart.MultipartFile;
 import com.alibaba.fastjson.JSONObject;
 import com.wxmp.core.common.BaseCtrl;
 import com.wxmp.core.util.AjaxResult;
-import com.wxmp.core.util.ImgTypeUtil;
+import com.wxmp.core.util.MediaTypeUtil;
 import com.wxmp.core.util.PropertiesUtil;
 import com.wxmp.wxcms.domain.ImgResource;
 import com.wxmp.wxcms.service.ImgResourceService;
@@ -72,7 +72,7 @@ public class ImgResourceCtrl extends BaseCtrl {
 		String trueName = file.getOriginalFilename();
 		//文件后缀名
 		String ext = FilenameUtils.getExtension(trueName);
-		if (!ImgTypeUtil.isImg(ext)) {
+		if (!MediaTypeUtil.isImg(ext)) {
 			obj.put("message", "图片格式不正确");
 		}
 
@@ -85,7 +85,6 @@ public class ImgResourceCtrl extends BaseCtrl {
 		String fileName = System.currentTimeMillis() + new Random().nextInt(10000) + "." + ext;
 		//图片上传路径
 		String resURL = PropertiesUtil.getString("res.upload.url").toString();
-		System.out.println("图片上传路径:===== " + resURL);
 		String filePath = request.getSession().getServletContext().getRealPath("/");
 
 		//读取配置文上传件的路径
@@ -150,11 +149,9 @@ public class ImgResourceCtrl extends BaseCtrl {
 		String ext = FilenameUtils.getExtension(trueName);
 
 		//系统生成的文件名
-		String fileName = file.getOriginalFilename();
-		fileName = System.currentTimeMillis() + new Random().nextInt(10000) + "." + ext;
+		String fileName = System.currentTimeMillis() + new Random().nextInt(10000) + "." + ext;
 		//图片上传路径
 		String resURL = PropertiesUtil.getString("res.upload.url").toString();
-		System.out.println("图片上传路径:===== " + resURL);
 		String filePath = request.getSession().getServletContext().getRealPath("/");
 
 		//读取配置文上传件的路径

+ 34 - 40
src/main/java/com/wxmp/wxcms/ctrl/MsgNewsCtrl.java

@@ -20,7 +20,6 @@ package com.wxmp.wxcms.ctrl;
 
 import static com.wxmp.core.util.DateUtilOld.COMMON_FULL;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -38,7 +37,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.google.gson.JsonParseException;
 import com.wxmp.core.common.BaseCtrl;
 import com.wxmp.core.spring.SpringFreemarkerContextPathUtil;
 import com.wxmp.core.util.AjaxResult;
@@ -63,7 +61,7 @@ import com.wxmp.wxcms.service.MsgNewsService;
 public class MsgNewsCtrl extends BaseCtrl {
 
     @Autowired
-    private MsgNewsService entityService;
+    private MsgNewsService msgNewsService;
 
     @Autowired
     private MsgArticleService articleService;
@@ -71,13 +69,13 @@ public class MsgNewsCtrl extends BaseCtrl {
     @RequestMapping(value = "/detail")
     @ResponseBody
     public AjaxResult getById(String id) {
-        return AjaxResult.success(entityService.getById(id));
+        return AjaxResult.success(msgNewsService.getById(id));
     }
 
     @RequestMapping(value = "/list")
     @ResponseBody
     public AjaxResult list(MsgNews searchEntity) {
-        List<MsgNews> pageList = entityService.getWebNewsListByPage(searchEntity);
+        List<MsgNews> pageList = msgNewsService.getWebNewsListByPage(searchEntity);
         return getResult(searchEntity, pageList);
     }
 
@@ -91,7 +89,7 @@ public class MsgNewsCtrl extends BaseCtrl {
     @ResponseBody
     public String sendNewsMaterial(String newsId, HttpServletRequest request) throws Exception {
         String code = "";
-        MsgNews msgNews = entityService.getById(newsId);
+        MsgNews msgNews = msgNewsService.getById(newsId);
         List<MsgNews> msgNewsList = new ArrayList<MsgNews>();
         msgNewsList.add(msgNews);
         MpAccount mpAccount = WxMemoryCacheClient.getMpAccount();// 获取缓存中的唯一账号
@@ -115,7 +113,7 @@ public class MsgNewsCtrl extends BaseCtrl {
                 MsgNews entity = new MsgNews();
                 entity.setId(Long.valueOf(newsId));
                 entity.setMediaId(newsMediaId);
-                entityService.updateMediaId(entity);
+                msgNewsService.updateMediaId(entity);
                 code = "1";
             } else {
                 code = newsResultObj.toString();
@@ -137,13 +135,14 @@ public class MsgNewsCtrl extends BaseCtrl {
      */
     @RequestMapping(value = "/addSingleNews", method = RequestMethod.POST)
     @ResponseBody
-    public AjaxResult addSingleNews(MsgNews msgNews, HttpServletRequest request) throws Exception {
-
+    public AjaxResult addSingleNews(MsgNews msgNews, HttpServletRequest request)
+        throws Exception {
+        
         String filePath = request.getSession().getServletContext().getRealPath("/");
-
+        
         String description = msgNews.getDescription();
         String description2 = msgNews.getDescription();
-
+        
         description = description.replaceAll("'", "\"");
         // 去多个img的src值
         String subFilePath = "";
@@ -151,7 +150,7 @@ public class MsgNewsCtrl extends BaseCtrl {
         if (description.contains("img")) {
             Pattern p = Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>");
             Matcher m = p.matcher(description);
-
+            
             while (m.find()) {
                 String imgSrc = m.group(1);
                 subOldFilePath += imgSrc + ",";
@@ -163,55 +162,50 @@ public class MsgNewsCtrl extends BaseCtrl {
         }
         MpAccount mpAccount = WxMemoryCacheClient.getMpAccount();// 获取缓存中的唯一账号
         if (StringUtils.isNotBlank(subFilePath)) {
-
+            
             subFilePath = subFilePath.substring(0, subFilePath.length() - 1);
             subOldFilePath = subOldFilePath.substring(0, subOldFilePath.length() - 1);
-
+            
             // 本地图片地址
             String[] imgPathArry = subFilePath.split(",");
             String[] imgOldPathArry = subOldFilePath.split(",");
-
+            
             String[] newPathArry = new String[imgPathArry.length];
             for (int i = 0; i < imgPathArry.length; i++) {
                 String newFilePath = imgPathArry[i];
-                // 添加永久图片
-                String materialType = MediaType.Image.toString();
                 // 将图片上传到微信,返回url
                 JSONObject imgResultObj = WxApiClient.uploadMaterialImg(newFilePath, mpAccount);
-
                 // 上传图片的id
                 // String contentImgMediaId = "";
                 String contentContentUrl = "";
                 if (imgResultObj != null && imgResultObj.containsKey("url")) {
-                    // 微信返回来的媒体素材id
-                    // contentImgMediaId = imgResultObj.getString("media_id");
                     // 图片url
                     contentContentUrl = imgResultObj.getString("url");
                 }
                 newPathArry[i] = contentContentUrl;
             }
-
+            
             for (int i = 0; i < imgPathArry.length; i++) {
                 description = description.replace(imgOldPathArry[i], newPathArry[i]);
             }
         }
-
+        
         // 内容保存
         msgNews.setDescription(description);
-
+        
         List<MsgNews> msgNewsList = new ArrayList<MsgNews>();
         msgNewsList.add(msgNews);
         // 封面图片媒体id
         String imgMediaId = msgNews.getThumbMediaId();
-
+        
         JSONObject resultObj = WxApiClient.addNewsMaterial(msgNewsList, imgMediaId, mpAccount);
-
+        
         if (resultObj != null && resultObj.containsKey("media_id")) {
             String newsMediaId = resultObj.getString("media_id");
             JSONObject newsResult = WxApiClient.getMaterial(newsMediaId, mpAccount);
-
+            
             JSONArray articles = newsResult.getJSONArray("news_item");
-            JSONObject article = (JSONObject) articles.get(0);
+            JSONObject article = (JSONObject)articles.get(0);
             MsgNews newsPo = new MsgNews();
             newsPo.setMultType(1);// 指定为1,代表单图文
             newsPo.setTitle(article.getString("title"));
@@ -225,15 +219,15 @@ public class MsgNewsCtrl extends BaseCtrl {
             newsPo.setMediaId(newsMediaId);
             newsPo.setThumbMediaId(imgMediaId);
             newsPo.setNewsIndex(0);
-
+            
             MediaFiles entity = new MediaFiles();
             entity.setMediaId(newsMediaId);
             entity.setMediaType("news");
             entity.setCreateTime(COMMON_FULL.getLongDate(Long.parseLong(newsResult.getString("create_time"))));
             entity.setUpdateTime(COMMON_FULL.getLongDate(Long.parseLong(newsResult.getString("update_time"))));
-
-            int resultCount = this.entityService.addSingleNews(newsPo, entity);
-
+            
+            int resultCount = this.msgNewsService.addSingleNews(newsPo, entity);
+            
             if (resultCount > 0) {
                 return AjaxResult.success();
             } else {
@@ -241,7 +235,7 @@ public class MsgNewsCtrl extends BaseCtrl {
             }
         }
         return AjaxResult.failure();
-
+        
     }
 
     /**
@@ -375,7 +369,7 @@ public class MsgNewsCtrl extends BaseCtrl {
             }
             msgNew.setArticles(listArticles);
 
-            int bl = this.entityService.addMoreNews(msgNew);
+            int bl = this.msgNewsService.addMoreNews(msgNew);
             if (bl == 1) {
                 return AjaxResult.success();
             }
@@ -392,14 +386,14 @@ public class MsgNewsCtrl extends BaseCtrl {
     @RequestMapping(value = "/deleteMaterial", method = RequestMethod.POST)
     @ResponseBody
     public AjaxResult deleteMaterial(String id) throws WxErrorException {
-        MsgNews news = entityService.getById(id);
+        MsgNews news = msgNewsService.getById(id);
         // 添加多图文永久素材
         JSONObject jsonObject = WxApiClient.deleteMaterial(news.getMediaId(), WxMemoryCacheClient.getMpAccount());
 
         if (null != jsonObject && jsonObject.containsKey("errcode") && jsonObject.getIntValue("errcode") == 0) {
 
             try {
-                this.entityService.delete(news);
+                this.msgNewsService.delete(news);
                 return AjaxResult.deleteSuccess();
             } catch (Exception e) {
                 e.printStackTrace();
@@ -417,7 +411,7 @@ public class MsgNewsCtrl extends BaseCtrl {
     @RequestMapping(value = "/toUpdateSingleNews", method = RequestMethod.POST)
     @ResponseBody
     public AjaxResult toUpdateSingleNews(String id) {
-        MsgNews newsObj = entityService.getById(id);
+        MsgNews newsObj = msgNewsService.getById(id);
 
         return AjaxResult.success(newsObj);
     }
@@ -502,7 +496,7 @@ public class MsgNewsCtrl extends BaseCtrl {
             msgNews.setDescription(description2);
             try {
                 // 更新成功
-                this.entityService.updateSingleNews(msgNews);
+                this.msgNewsService.updateSingleNews(msgNews);
                 return AjaxResult.updateSuccess();
             } catch (Exception e) {
                 e.printStackTrace();
@@ -521,7 +515,7 @@ public class MsgNewsCtrl extends BaseCtrl {
     @RequestMapping(value = "/toUpdateMoreNews")
     @ResponseBody
     public AjaxResult toUpdateMoreNews(String id) {
-        MsgNews newsObj = entityService.getById(id);
+        MsgNews newsObj = msgNewsService.getById(id);
         return AjaxResult.success(newsObj.getArticles());
     }
 
@@ -633,12 +627,12 @@ public class MsgNewsCtrl extends BaseCtrl {
             // 更新成功
             this.articleService.update(article);
             // 修改图文news表数据
-            MsgNews msgNews = this.entityService.getById(String.valueOf(article.getNewsId()));
+            MsgNews msgNews = this.msgNewsService.getById(String.valueOf(article.getNewsId()));
             List<MsgArticle> newArticles = msgNews.getArticles();
             if (newArticles.get(0).getArId() == article.getArId()) {
                 // 这里只修改title 为了模糊查询的时候可以查询到数据
                 msgNews.setTitle(article.getTitle());
-                this.entityService.updateMediaId(msgNews);
+                this.msgNewsService.updateMediaId(msgNews);
             }
             return AjaxResult.updateSuccess();
         } else {

+ 1 - 21
src/main/java/com/wxmp/wxcms/ctrl/UserTagCtrl.java

@@ -29,8 +29,6 @@ import com.wxmp.wxcms.domain.UserTag;
 import com.wxmp.wxcms.service.AccountFansService;
 import com.wxmp.wxcms.service.UserTagService;
 
-
-
 /**
  *
  * @author fuziKong
@@ -78,25 +76,7 @@ public class UserTagCtrl extends BaseCtrl {
 		result.setMsg("没有数据");
 		return result;
 	}
-	
-	
-	/**
-	 * 同步用户标签列表
-	 * @return
-	 */
-	@RequestMapping(value = "/syncUserTagList")
-	@ResponseBody
-	public AjaxResult syncUserTagList(){
-		MpAccount mpAccount = WxMemoryCacheClient.getMpAccount();//获取缓存中的唯一账号
-		if(mpAccount != null){
-			boolean flag = entityService.syncUserTagList(mpAccount);
-			if(flag){
-				return AjaxResult.success();
-			}
-		}
-		return AjaxResult.failure();
-	}
-	
+
 	/**
 	 * 根据Id查询用户标签
 	 * @param id

+ 1 - 3
src/main/java/com/wxmp/wxcms/service/UserTagService.java

@@ -28,9 +28,7 @@ public interface UserTagService {
 	public void update(UserTag entity);
 
 	public void delete(UserTag entity);
-	//同步服务器的用户标签
-	public boolean syncUserTagList(MpAccount mpAccount);
-	
+
 	public Integer deleteBatchIds(String [] ids);
 	//获取数据库中用户标签的最大值,判断是否同步
 	public Integer getMaxId();

+ 18 - 20
src/main/java/com/wxmp/wxcms/service/impl/MsgNewsServiceImpl.java

@@ -34,8 +34,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 
-import static com.wxmp.core.util.DateUtilOld.COMMON_FULL;
-
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -54,7 +52,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 	private MsgBaseDao baseDao;
 
 	@Resource
-	private MsgNewsDao entityDao;
+	private MsgNewsDao msgNewsDao;
 
 	@Resource
 	private MediaFilesDao mediaFilesDao;
@@ -63,15 +61,15 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 	private MsgArticleDao articleDao;
 
 	public MsgNews getById(String id){
-		return entityDao.getById(id);
+		return msgNewsDao.getById(id);
 	}
 
 	public List<MsgNews> listForPage(MsgNews searchEntity){
-		return entityDao.listForPage(searchEntity);
+		return msgNewsDao.listForPage(searchEntity);
 	}
 	
 	public List<MsgNews> getWebNewsListByPage(MsgNews searchEntity){
-		return entityDao.getWebNewsListByPage(searchEntity);
+		return msgNewsDao.getWebNewsListByPage(searchEntity);
 	}
 
 	
@@ -84,7 +82,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 		baseDao.add(base);
 		
 		entity.setBaseId(base.getId());
-		entityDao.add(entity);
+		msgNewsDao.add(entity);
 		
 		if(StringUtils.isEmpty(entity.getFromurl())){
 			entity.setUrl(entity.getUrl()+"?id="+entity.getId());
@@ -92,7 +90,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 			entity.setUrl("");
 		}
 		
-		entityDao.updateUrl(entity);
+		msgNewsDao.updateUrl(entity);
 	}
 
 	public void update(MsgNews entity){
@@ -106,24 +104,24 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 			entity.setUrl("");
 		}
 		
-		entityDao.update(entity);
+		msgNewsDao.update(entity);
 	}
 
 	public void delete(MsgNews entity){
 		MsgBase base = new MsgBase();
 		base.setId(entity.getBaseId());
 		articleDao.deleteByBatch(entity.getId().intValue());
-		entityDao.delete(entity);
+		msgNewsDao.delete(entity);
 		baseDao.delete(entity);
 		
 	}
 
 	public List<MsgNews> getRandomMsg(String inputCode,Integer num){
-		return entityDao.getRandomMsgByContent(inputCode,num);
+		return msgNewsDao.getRandomMsgByContent(inputCode,num);
 	}
 	
 	public MsgNews getByBaseId(String baseid){
-		return entityDao.getByBaseId(baseid);
+		return msgNewsDao.getByBaseId(baseid);
 	}
 
 	/* (non-Javadoc)
@@ -133,7 +131,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 	public int updateMediaId(MsgNews entity) {
 		int n = 0 ;
 		try {
-			entityDao.updateMediaId(entity);
+			msgNewsDao.updateMediaId(entity);
 			n = 1;
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -156,7 +154,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 	    	//保存图文信息
 			news.setCreateTime(new Date());
 			news.setBaseId(base.getId());
-			Integer newId= this.entityDao.addNews(news);
+			Integer newId= this.msgNewsDao.addNews(news);
 	    	MsgArticle art = new MsgArticle();
 			art.setAuthor(news.getAuthor());
 			art.setContent(news.getDescription());
@@ -228,7 +226,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 	 */
 	@Override
 	public List<MsgNews> getMsgNewsList() {
-		return this.entityDao.getMsgNewsList();
+		return this.msgNewsDao.getMsgNewsList();
 	}
 
 	/* (non-Javadoc)
@@ -250,7 +248,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 			news.setBaseId(base.getId());
 			news.setCreateTime(new Date());
 	    	//保存图文信息
-	    	this.entityDao.addNews(news);
+	    	this.msgNewsDao.addNews(news);
 	    	for (int i = 0; i < articles.size(); i++) {
 	    		MsgArticle article=articles.get(i);
 	    		article.setNewsId(news.getId().intValue());
@@ -288,7 +286,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 				one.setBaseId(base.getId());
 				one.setCreateTime(date);
 				//保存图文信息
-				this.entityDao.addNews(one);
+				this.msgNewsDao.addNews(one);
 			}
 			//添加到素材表中
 			MediaFiles entity = new MediaFiles();
@@ -310,7 +308,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 	@Override
 	public void deleteNews(String mediaId) {
 		this.mediaFilesDao.deleteByMediaId(mediaId);
-		this.entityDao.deleteByMediaId(mediaId);
+		this.msgNewsDao.deleteByMediaId(mediaId);
 	}
 
 	/* (non-Javadoc)修改单图文
@@ -336,7 +334,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 		int arId=articleDao.getByNewsId(news.getId().intValue()).get(0).getArId();
 		art.setArId(arId);
 		articleDao.update(art);
-		this.entityDao.updateNews(news);
+		this.msgNewsDao.updateNews(news);
 	}
 
 	/* (non-Javadoc)
@@ -345,7 +343,7 @@ public class MsgNewsServiceImpl implements MsgNewsService{
 	@Override
 	public List<MsgNews> getByMediaId(String mediaId) {
 		// TODO Auto-generated method stub
-		return this.entityDao.getByMediaId(mediaId);
+		return this.msgNewsDao.getByMediaId(mediaId);
 	}
 
 

+ 0 - 34
src/main/java/com/wxmp/wxcms/service/impl/UserTagServiceImpl.java

@@ -27,40 +27,6 @@ public class UserTagServiceImpl implements UserTagService {
 	
 	private Logger logger=Logger.getLogger(UserTagServiceImpl.class);
 	
- 	
-	//同步粉丝列表
-	@SuppressWarnings("unchecked")
-	public boolean syncUserTagList(MpAccount mpAccount){
-	 		String url=null;
-			try {
-				url = WxApi.getUserTagList(WxApiClient.getAccessToken(mpAccount));
-			} catch (WxErrorException e) {
-				e.printStackTrace();
-			}
-			logger.info("同步用户标签参消息如下:"+url);
-			JSONObject jsonObject = WxApi.httpsRequest(url, HttpMethod.GET, null);
-			logger.info("同步用户标签消息如下:"+jsonObject.toString());
-			if(jsonObject.containsKey("errcode")){
-				return false;
-			}
-	    	JSONArray arr = jsonObject.getJSONArray("tags");//获取jsonArray对象
-	    	String js=JSONObject.toJSONString(arr);//将array数组转换成字符串
-	    	List<UserTag> userTagList=JSONObject.parseArray(js, UserTag.class);//把字符串转换成集合
-	    	//判断是否已经同步
-	    	UserTag userTag = userTagList.stream().max(  (u,u2) -> ( u.getId() - u2.getId() )  ).get();
-	    	Integer maxIdInDb = getMaxId() == null ?  0 : getMaxId();//第一次同步,数据库没有数据返回null
-	    	if(userTag.getId() == maxIdInDb) {
-	    		//说明已经同步
-	    		return true;
-	    	}else if( userTag.getId() > maxIdInDb ){
-	    		//如果微信服务器新增用户标签,同步新增标签,新增标签的ID比本地库的ID大
-	    		userTagList = userTagList.stream().filter( u -> u.getId() > maxIdInDb ).collect(Collectors.toList());
-	    		userTagDao.addList(userTagList);	    		
-	    		return true;
-	    	}
-	    	return true;
-		}
-	
 	@Override
 	public UserTag getById(Integer id) {
 		return userTagDao.getById(id);

+ 3 - 3
src/main/resources/property/jdbc.properties

@@ -1,8 +1,8 @@
 #mysql database setting
 jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://47.93.252.153:3306/wxmp2?useUnicode=true&characterEncoding=utf-8
-jdbc.username=wxmpuser
-jdbc.password=aJ*t@OYlmqyKyda5
+jdbc.url=jdbc:mysql://localhost:3306/wxmp?useUnicode=true&characterEncoding=utf-8
+jdbc.username=root
+jdbc.password=root
 #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
 jdbc.initialSize=1
 #定义最大连接池数量

+ 2 - 2
src/main/resources/property/upload.properties

@@ -1,7 +1,7 @@
 #for nginx
-res.upload.path = /media/data/temporary/
+#res.upload.path = /media/data/temporary/
 
 #for nginx
 #res.upload.url = http://127.0.0.1/temporary/
 #本地测试 无nginx的情况
-res.upload.url = http://localhost:8080/upload/
+res.upload.url = http://vipweb.free.ngrok.cc/upload/

+ 3 - 3
src/main/webapp/js/plugin/layui/src/lay/modules/layedit.js

@@ -81,7 +81,7 @@ layui.define(['layer', 'form'], function(exports){
       ,'<div class="layui-layedit-iframe">'
         ,'<iframe id="'+ name +'" name="'+ name +'" textarea="'+ id +'" frameborder="0"></iframe>'
       ,'</div>'
-    ,'</div>'].join(''));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+    ,'</div>'].join(''));
     
     //编辑器不兼容ie8以下
     if(device.ie && device.ie < 8){
@@ -90,7 +90,7 @@ layui.define(['layer', 'form'], function(exports){
 
     haveBuild[0] && (haveBuild.remove());
 
-    setIframe.call(that, editor, textArea[0], set);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+    setIframe.call(that, editor, textArea[0], set);
     textArea.addClass('layui-hide').after(editor);
 
     return that.index;
@@ -510,7 +510,7 @@ layui.define(['layer', 'form'], function(exports){
       toolCheck.call(iframeWin, tools, othis);
     }
     
-    ,isClick = /image|video|audio/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+    ,isClick = /image|video|audio/;
 
     tools.find('>i').on('mousedown', function(e){
       var othis = $(this)

+ 1 - 1
src/main/webapp/views/index/index-x.html

@@ -16,7 +16,7 @@
                 <div class="panel panel-default" style="min-height: 249px;">
                     <div class="panel-heading">简介</div>
                     <div class="panel-body">
-                        感谢您使用SmartWx,SmartWx是一款基于JAVA企业级平台研发的微信公众号管理系统,
+                        基于SmartWx,SmartWx是一款基于JAVA企业级平台研发的微信公众号管理系统,
                         依托企业级JAVA的高效、安全、稳定等优势,开创国内JAVA版开源微信公众号管理系统先河。
                         数据库使用MYSQL,全部源代码开放,官方网址:
                         <p class="text-center" style="margin-top: 50px;">

+ 7 - 7
src/main/webapp/views/index/workbench.html

@@ -6,7 +6,7 @@
                     <i class="iconfont icon-pic"></i>
                     <div class="card-panel-description">
                         <div class="card-panel-text">文章数</div>
-                        <div class="card-panel-num">1224</div>
+                        <div class="card-panel-num" id="articals"></div>
                     </div>
                 </div>
             </div>
@@ -15,7 +15,7 @@
                     <i class="iconfont icon-tongji"></i>
                     <div class="card-panel-description">
                         <div class="card-panel-text">粉丝数</div>
-                        <div class="card-panel-num">1224</div>
+                        <div class="card-panel-num" id="fans">1224</div>
                     </div>
                 </div>
             </div>
@@ -23,8 +23,8 @@
                 <div class="wxmp-card">
                     <i class="iconfont icon-daohang-gongzhonghaotixing"></i>
                     <div class="card-panel-description">
-                        <div class="card-panel-text">昨日访问</div>
-                        <div class="card-panel-num">1224</div>
+                        <div class="card-panel-text">昨日</div>
+                        <div class="card-panel-num" id="readcount">1224</div>
                     </div>
                 </div>
             </div>
@@ -528,15 +528,15 @@
         var tableObj = table.render({
             id: 'list_table',
             elem: '#list_table',
-            url: '/views/test/data/data.json',
+            url: '/msgnews/list',
             align: "center",
             cols: [[ //表头
                 {type: 'numbers'},
                 {field: 'title', title: '标题', width: 150, align: 'center',},
-                {field: 'content', title: '消息描述', align: 'center',},
+                {field: 'brief', title: '描述', align: 'center',},
                 {
                     field: 'lock', title: '操作', width: 150, align: 'center', templet: function (d) {
-                    return '<a class="font-primary2" href="#">查看</a>';
+                    return '<a class="font-primary2" href="' + d.url + '">查看</a>';
                 }, unresize: true, align: 'center'
                 }
             ]],

+ 2 - 2
src/main/webapp/views/material/document/addmultiple.html

@@ -95,11 +95,11 @@
                 type: 'post'
             },
             uploadVideo: {
-                url: '/views/test/upvideo.json',
+                url: '/managerImg/uploadFile',
                 type: 'post'
             },
             uploadAudio: {
-                url: '/views/test/upaudio.json',
+                url: '/managerImg/uploadFile',
                 type: 'post'
             },
         });

+ 2 - 2
src/main/webapp/views/material/document/addsingle.html

@@ -96,11 +96,11 @@
                 type: 'post'
             },
             uploadVideo: {
-                url: '/views/test/upvideo.json',
+                url: '/managerImg/uploadFile',
                 type: 'post'
             },
             uploadAudio: {
-                url: '/views/test/upaudio.json',
+                url: '//managerImg/uploadFile',
                 type: 'post'
             },
         });

+ 2 - 2
src/main/webapp/views/material/document/editmultiple.html

@@ -89,11 +89,11 @@
                 type: 'post'
             },
             uploadVideo: {
-                url: '/views/test/upvideo.json',
+                url: '/managerImg/uploadFile',
                 type: 'post'
             },
             uploadAudio: {
-                url: '/views/test/upaudio.json',
+                url: '/managerImg/uploadFile',
                 type: 'post'
             },
         });

+ 2 - 2
src/main/webapp/views/material/document/editsingle.html

@@ -96,11 +96,11 @@
                 type: 'post'
             },
             uploadVideo: {
-                url: '/views/test/upvideo.json',
+                url: '/managerImg/uploadFile',
                 type: 'post'
             },
             uploadAudio: {
-                url: '/views/test/upaudio.json',
+                url: '/managerImg/uploadFile',
                 type: 'post'
             },
         });

+ 1 - 1
src/main/webapp/views/system/tags/tags.html

@@ -71,7 +71,7 @@
                 btn: ['确认', '取消'] //按钮
             }, function () {
                 $.ajax({
-                    url: '/userTag/syncUserTagList',
+                    url: '/wxapi/syncUserTagList',
                     success: function (result) {
                         if (result.success) {
                             layer.msg("同步成功");