liujiankang 7 éve
szülő
commit
eaae8ea785

+ 9 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/pts/Produce.java

@@ -27,6 +27,7 @@ public class Produce implements Serializable {
     private String produceFeature;         //产品特性  产品特性 A:国内;B:美国;C:欧洲;D:其他;
 
     private Integer employeeId;            //员工id
+    private Integer wechatMpId;            //所属公众号ID
 
     private List<ProduceProcess>  process = new ArrayList<ProduceProcess>();  //工序集合
 
@@ -144,6 +145,14 @@ public class Produce implements Serializable {
         this.produceFeature = produceFeature;
     }
 
+    public Integer getWechatMpId() {
+        return wechatMpId;
+    }
+
+    public void setWechatMpId(Integer wechatMpId) {
+        this.wechatMpId = wechatMpId;
+    }
+
     @Override
     public String toString() {
         return "Produce{" +

+ 58 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/pts/WechatMp.java

@@ -0,0 +1,58 @@
+package com.iamberry.rst.core.pts;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 供应商管理
+ */
+public class WechatMp implements Serializable {
+
+
+    private static final long serialVersionUID = 6507134904133857970L;
+   private Integer wechatMpId;
+   private String  wechatMpAppid;
+   private String  wechatMpAppsecret;
+   private String  wechatMpName;
+   private String  wechatMpPubno;
+
+    public Integer getWechatMpId() {
+        return wechatMpId;
+    }
+
+    public void setWechatMpId(Integer wechatMpId) {
+        this.wechatMpId = wechatMpId;
+    }
+
+    public String getWechatMpAppid() {
+        return wechatMpAppid;
+    }
+
+    public void setWechatMpAppid(String wechatMpAppid) {
+        this.wechatMpAppid = wechatMpAppid;
+    }
+
+    public String getWechatMpAppsecret() {
+        return wechatMpAppsecret;
+    }
+
+    public void setWechatMpAppsecret(String wechatMpAppsecret) {
+        this.wechatMpAppsecret = wechatMpAppsecret;
+    }
+
+    public String getWechatMpName() {
+        return wechatMpName;
+    }
+
+    public void setWechatMpName(String wechatMpName) {
+        this.wechatMpName = wechatMpName;
+    }
+
+    public String getWechatMpPubno() {
+        return wechatMpPubno;
+    }
+
+    public void setWechatMpPubno(String wechatMpPubno) {
+        this.wechatMpPubno = wechatMpPubno;
+    }
+}

+ 107 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/tools/WeixinUtil.java

@@ -213,6 +213,86 @@ public class WeixinUtil {
 		return accessToken;
 	}
 
+	/**
+	 * 获取access_token
+	 *
+	 * @param appid
+	 *            凭证
+	 * @param appsecret
+	 *            密钥
+	 * @return
+	 */
+	public static AccessToken getAccessToken(String appid, String appsecret,String pubNo) {
+
+		// 根据public No查询access_token
+		Token token = cache.get(pubNo);
+
+		AccessToken accessToken = null;
+		//判断数据库中是否存在token
+		if (token != null) {
+			//判断token是否失效
+			Date date = new Date();
+			if (date.getTime() < token.getEndDate().getTime()) {
+				accessToken = new AccessToken();
+				accessToken.setExpiresIn(7200);
+				accessToken.setToken(token.getToken());
+				return accessToken;
+			} else {
+				String requestUrl = NameUtils.access_token_url.replace("APPID", NameUtils.getConfig("appId")).replace("APPSECRET", NameUtils.getConfig("appSecret"));
+				JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
+				// 如果请求成功
+				if (null != jsonObject) {
+					try {
+						accessToken = new AccessToken();
+						accessToken.setToken(jsonObject.getString("access_token"));
+						accessToken.setExpiresIn(jsonObject.getInt("expires_in"));
+						token.setToken(accessToken.getToken());
+						token.setEndDate(new Date(date.getTime() + 6500000));
+						token.setAppid(NameUtils.getConfig("pubNo"));
+						try {
+							cache.put(NameUtils.getConfig("pubNo"), token);
+						} catch (Exception e) {
+							logger.error(e.getMessage());
+						}
+						return accessToken;
+					} catch (Exception e) {
+						accessToken = null;
+						// 获取token失败
+						logger.error("获取token失败 errcode:{} errmsg:{}" + jsonObject.getInt("errcode") + jsonObject.getString("errmsg"));
+					}
+				}
+			}
+		} else {
+			String requestUrl = NameUtils.access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
+			JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
+			// 如果请求成功
+			if (null != jsonObject) {
+				try {
+					accessToken = new AccessToken();
+					accessToken.setToken(jsonObject.getString("access_token"));
+					accessToken.setExpiresIn(jsonObject.getInt("expires_in"));
+
+					token = new Token();
+					token.setToken(accessToken.getToken());
+					token.setEndDate(new Date(new Date().getTime() + 6500000));
+					token.setAppid(NameUtils.getConfig("pubNo"));
+
+					try {
+						cache.put(NameUtils.getConfig("pubNo"), token);
+					} catch (Exception e) {
+						// 更新失败
+						logger.error(e.getMessage());
+					}
+					return accessToken;
+				} catch (Exception e) {
+					accessToken = null;
+					// 获取token失败
+					logger.error("获取token失败 errcode:{} errmsg:{}" + jsonObject.getInt("errcode") + jsonObject.getString("errmsg"));
+				}
+			}
+		}
+		return accessToken;
+	}
 
 
 	/**
@@ -242,4 +322,31 @@ public class WeixinUtil {
 		return qrcJson;
 	}
 
+	/**
+	 * 根据传入的公众号id创建二维码
+	 *
+	 * @return
+	 */
+	public static QRCJson createQrcodeByWechatMp(String json,String appId,String appSecret,String pubNo) {
+		QRCJson qrcJson = new QRCJson();
+		try {
+			AccessToken at = getAccessToken(appId,appSecret,pubNo);
+			if (at != null) {
+				String token = at.getToken();
+				JSONObject jsonObject = httpRequest(NameUtils.get_token_url.replaceAll("TOKEN", token), "POST", json);
+				if (jsonObject != null) {
+					String ticket = URLEncoder.encode(jsonObject.getString("ticket"), "UTF-8");
+					qrcJson.setTicket(ticket);
+					qrcJson.setUrl(NameUtils.show_qrcode_url + ticket);
+					if (json.contains("expire_seconds")) {// 临时二维码才有过期时间
+						qrcJson.setExpire_seconds(jsonObject.getString("expire_seconds"));
+					}
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return qrcJson;
+	}
+
 }

+ 8 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/pts/ProduceService.java

@@ -3,6 +3,7 @@ package com.iamberry.rst.faces.pts;
 import com.iamberry.rst.core.pts.ProcessNode;
 import com.iamberry.rst.core.pts.Produce;
 import com.iamberry.rst.core.pts.ProduceProcess;
+import com.iamberry.rst.core.pts.WechatMp;
 
 import java.util.List;
 
@@ -67,4 +68,11 @@ public interface ProduceService {
 
     //获取单个工序信息
     ProduceProcess getProduceProcessAndNode(Integer produceId,String processNo);
+
+    /**
+     * 根据公众号id获取公众号信息
+     * @param wechatMpId
+     * @return
+     */
+    WechatMp getWechatMpById(Integer wechatMpId);
 }

+ 6 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/ProduceServiceImpl.java

@@ -3,6 +3,7 @@ package com.iamberry.rst.service.pts;
 import com.iamberry.rst.core.pts.ProcessNode;
 import com.iamberry.rst.core.pts.Produce;
 import com.iamberry.rst.core.pts.ProduceProcess;
+import com.iamberry.rst.core.pts.WechatMp;
 import com.iamberry.rst.faces.pts.ProduceService;
 import com.iamberry.rst.service.pts.mapper.ProduceMapper;
 import com.iamberry.rst.util.ProduceNoUtil;
@@ -280,4 +281,9 @@ public class ProduceServiceImpl implements ProduceService {
     public ProduceProcess getProduceProcessAndNode(Integer produceId, String processNo) {
         return produceMapper.getProduceProcessAndNode(produceId,processNo);
     }
+
+    @Override
+    public WechatMp getWechatMpById(Integer wechatMpId) {
+        return produceMapper.getWechatMpById(wechatMpId);
+    }
 }

+ 8 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/ProduceMapper.java

@@ -3,6 +3,7 @@ package com.iamberry.rst.service.pts.mapper;
 import com.iamberry.rst.core.pts.ProcessNode;
 import com.iamberry.rst.core.pts.Produce;
 import com.iamberry.rst.core.pts.ProduceProcess;
+import com.iamberry.rst.core.pts.WechatMp;
 
 import java.util.List;
 
@@ -86,4 +87,11 @@ public interface ProduceMapper {
 
     //获取单个工序信息
     ProduceProcess getProduceProcessAndNode(Integer produceId,String processNo);
+
+    /**
+     * 根据公众号id获取公众号信息
+     * @param wechatMpId
+     * @return
+     */
+    WechatMp getWechatMpById(Integer wechatMpId);
 }

+ 21 - 6
watero-rst-service/src/main/java/com/iamberry/rst/service/pts/mapper/produceMapper.xml

@@ -11,7 +11,8 @@
             tb_rst_pts_produce.produce_status AS  produceStatus,
             tb_rst_pts_produce.produce_remake AS produceRemake,
             tb_rst_pts_produce.produce_create_time AS  produceCreateTime,
-            tb_rst_pts_produce.produce_update_time AS produceUpdateTime
+            tb_rst_pts_produce.produce_update_time AS produceUpdateTime,
+            tb_rst_pts_produce.wechat_mp_id AS wechatMpId
         FROM
             tb_rst_pts_produce
         <where>
@@ -34,6 +35,7 @@
         <result column="produce_remake" property="produceRemake" />
         <result column="produce_create_time" property="produceCreateTime" />
         <result column="produce_update_time" property="produceUpdateTime" />
+        <result column="wechat_mp_id" property="wechatMpId" />
         <collection property="process" column="{produceId = produce_id}" javaType="ArrayList"
                     ofType="com.iamberry.rst.core.pts.ProduceProcess" select="getAllProduceProcessList"/>
     </resultMap>
@@ -125,7 +127,8 @@
         tb_rst_pts_produce.produce_feature AS  produceFeature,
         tb_rst_pts_produce.produce_remake AS produceRemake,
         tb_rst_pts_produce.produce_create_time AS  produceCreateTime,
-        tb_rst_pts_produce.produce_update_time AS produceUpdateTime
+        tb_rst_pts_produce.produce_update_time AS produceUpdateTime,
+        tb_rst_pts_produce.wechat_mp_id AS wechatMpId
         FROM
         tb_rst_pts_produce
         WHERE
@@ -307,7 +310,9 @@
             produce_feature AS  produceFeature,
             produce_remake AS produceRemake,
             produce_create_time AS  produceCreateTime,
-            produce_update_time AS produceUpdateTime
+            produce_update_time AS produceUpdateTime,
+            wechat_mp_id AS wechatMpId
+
         FROM
             tb_rst_pts_produce
         <where>
@@ -326,7 +331,8 @@
         produce_status AS  produceStatus,
         produce_remake AS produceRemake,
         produce_create_time AS  produceCreateTime,
-        produce_update_time AS produceUpdateTime
+        produce_update_time AS produceUpdateTime,
+        wechat_mp_id AS wechatMpId
         FROM
         tb_rst_pts_produce
         WHERE
@@ -438,7 +444,8 @@
         produce_feature AS  produceFeature,
         produce_remake AS produceRemake,
         produce_create_time AS  produceCreateTime,
-        produce_update_time AS produceUpdateTime
+        produce_update_time AS produceUpdateTime,
+        wechat_mp_id AS wechatMpId
         FROM
         tb_rst_pts_produce LIMIT 1
     </select>
@@ -476,5 +483,13 @@
         AND pp.process_no = #{1}
     </select>
 
-
+    <select id="getWechatMpById" parameterType="Integer" resultType="WechatMp">
+        SELECT
+        wechat_mp_id AS wechatMpId,
+        wechat_mp_appid AS wechatMpAppid,
+        wechat_mp_appsecret AS wechatMpAppsecret,
+        wechat_mp_name AS wechatMpName,
+        wechat_mp_pubno AS wechatMpPubno
+         from tb_rst_pts_wechat_mp where wechat_mp_id = #{0}
+    </select>
 </mapper>

+ 8 - 2
watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminMachineController.java

@@ -471,6 +471,9 @@ public class AdminMachineController {
         produce.setProduceId(Integer.valueOf(produceId));
         produce = produceService.getProduce(produce);    //根据产品获取产品信息
 
+        /*获取公众号信息*/
+        WechatMp wechatMp = produceService.getWechatMpById(produce.getWechatMpId());
+
         ArrayList<PtsMachine> ptsList = new ArrayList<PtsMachine>();
         //生成条形码前缀
         String berQrcode = generationBarCode(produce);
@@ -500,7 +503,7 @@ public class AdminMachineController {
                     break;
             }
             String json = String.format(NameUtils.QR_LIMIT_STR_SCENE, ResultInfo.barCodePrefix + berQrcode);
-            QRCJson qrc = WeixinUtil.createQrcode(json);
+            QRCJson qrc = WeixinUtil.createQrcodeByWechatMp(json,wechatMp.getWechatMpAppid(),wechatMp.getWechatMpAppsecret(),wechatMp.getWechatMpPubno());
             PtsMachine ptsMachine = new PtsMachine();
             ptsMachine.setMachineQrcode(qrc.getUrl());//二维码
             ptsMachine.setMachineBarcode(berQrcode + num);//条形码
@@ -623,6 +626,9 @@ public class AdminMachineController {
         if (number == null || number < 1) {
             number = ptsBatch.getBatchQuantity();
         }
+
+        /*获取公众号信息*/
+        WechatMp wechatMp = produceService.getWechatMpById(produce.getWechatMpId());
         ArrayList<PtsMachine> ptsList = new ArrayList<PtsMachine>();
         //生成条形码前缀
         String berQrcode = generationBarCode(produce);
@@ -652,7 +658,7 @@ public class AdminMachineController {
                     break;
             }
             String json = String.format(NameUtils.QR_LIMIT_STR_SCENE, ResultInfo.barCodePrefix + berQrcode);
-            QRCJson qrc = WeixinUtil.createQrcode(json);
+            QRCJson qrc = WeixinUtil.createQrcodeByWechatMp(json,wechatMp.getWechatMpAppid(),wechatMp.getWechatMpAppsecret(),wechatMp.getWechatMpPubno());
             PtsMachine ptsMachine = new PtsMachine();
             ptsMachine.setMachineQrcode(qrc.getUrl());//二维码
             ptsMachine.setMachineBarcode(berQrcode + num);//条形码

+ 3 - 3
watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/MachineController.java

@@ -89,12 +89,12 @@ public class MachineController {
             rj.setResultMsg("系统中没有该产品正在使用的批次,请到管理平台完善");
             return rj;
         }
-
+        /*获取公众号信息*/
+        WechatMp wechatMp = produceService.getWechatMpById(produce.getWechatMpId());
         //生成条形码,二维码
         String berQrcode = generationBarCode(produce);
         String json = String.format(NameUtils.QR_LIMIT_STR_SCENE, ResultInfo.barCodePrefix + berQrcode);
-
-        QRCJson qrc = WeixinUtil.createQrcode(json);
+        QRCJson qrc = WeixinUtil.createQrcodeByWechatMp(json,wechatMp.getWechatMpAppid(),wechatMp.getWechatMpAppsecret(),wechatMp.getWechatMpPubno());
         PtsMachine ptsMachine = new PtsMachine();
         if (!(qrc == null || qrc.getUrl() == null || qrc.getUrl().isEmpty())) {
             ptsMachine.setMachineQrcode(qrc.getUrl());//二维码

+ 4 - 3
watero-rst-web/src/main/java/com/iamberry/rst/utils/test.java

@@ -5,6 +5,7 @@ import com.auth0.jwt.internal.org.apache.commons.codec.binary.Base64;
 import com.auth0.jwt.internal.org.apache.commons.codec.binary.StringUtils;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
 //import org.apache.kafka.clients.consumer.ConsumerRecord;
 
 
@@ -32,8 +33,8 @@ public class test {
     }
 
 
-   /* public static void main(String[] args) throws Exception {
-        ConsumerRecord<String, String> record = new ConsumerRecord<String, String>("4", 1, 1, "data", "{\"data\":\"7uiBfrOFcdy/EDWxcT6SlSH10bmyKW4BoILZ7f4LQygzN9scB2To4W3gRf0nzI+kHOKWzrv5DHEfJNt9/QrlfTk6VcHGwiPGycwiPvDkoTe4eJOW8Qqwm/1H4nNX+1Ed/CTueaJe3E/BNsFxe7rF+qYIHqZnL4b2n9Padc5ySenpG7G0a5xepWP0KZYDN4KeCTCNBf4XIxuHSB/BGVZpATEykU1vILnX89GzoJlV+10=\"}");
+    public static void main(String[] args) throws Exception {
+        ConsumerRecord<String, String> record = new ConsumerRecord<String, String>("4", 1, 1, "data", "{\"data\":\"7uiBfrOFcdy/EDWxcT6SlQgcMKSMSMuoqvsehLBoghAHxfaWrU9wkHCARR3wuaMwHOKWzrv5DHEfJNt9/QrlfTk6VcHGwiPGycwiPvDkoTe4eJOW8Qqwm/1H4nNX+1Ed/CTueaJe3E/BNsFxe7rF+n32z8r2qDMY9IAHCARuYJRgWKSV9GygcuObQZ+gpq6uCTCNBf4XIxuHSB/BGVZpATEykU1vILnX89GzoJlV+10=\"}");
         String appKey = "5kkyurvvtt58bbuxueee";//填APP KEY
         String secretKey = "rhj6na6u3y6uhy6qrbb3944mg5uqqpbb";//APP SECRET
         String data = decrypt(JSONObject.fromObject(record.value()).getString("data"),
@@ -65,5 +66,5 @@ public class test {
                 flog = false;
             }
         }
-    }*/
+    }
 }

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

@@ -53,6 +53,7 @@
 		<typeAlias type="com.iamberry.rst.core.pts.PtsSupplier" alias="PtsSupplier"/>
 		<typeAlias type="com.iamberry.rst.core.pts.PtsMachineVersion" alias="PtsMachineVersion"/>
 		<typeAlias type="com.iamberry.rst.core.pts.PtsSalesCompany" alias="PtsSalesCompany"/>
+		<typeAlias type="com.iamberry.rst.core.pts.WechatMp" alias="WechatMp"/>
 
 		<typeAlias type="com.iamberry.rst.core.cm.AwaitingSignclosedProductInfo" alias="AwaitingSignclosedProductInfo"/>
 		<typeAlias type="com.iamberry.rst.core.cm.BackGoods" alias="BackGoods"/>