Explorar el Código

2022年10月21 19:16

wangzhuo hace 3 años
padre
commit
b6c9e42e3b

+ 6 - 0
blade-service-api/blade-client-api/pom.xml

@@ -41,6 +41,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-purchase-sales-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 

+ 3 - 7
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IWechatClient.java

@@ -1,6 +1,7 @@
 package org.springblade.client.feign;
 
 import org.springblade.common.constant.LauncherConstant;
+import org.springblade.purchase.sales.entity.Biding;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -19,14 +20,9 @@ public interface IWechatClient {
 	/**
 	 * 推送消息
 	 * @param openId
-	 * @param mblno
-	 * @param route
-	 * @param loadDate
-	 * @return
+	 * @param biding
 	 */
 	@GetMapping(API_NEW_PUSH)
 	String newsPush(@RequestParam("openId") String openId,
-					@RequestParam("mblno") String mblno,
-					@RequestParam("route") String route,
-					@RequestParam("loadDate") String loadDate);
+					@RequestParam("biding") Biding biding);
 }

+ 6 - 0
blade-service/blade-client/pom.xml

@@ -142,6 +142,12 @@
             <artifactId>weixin-java-mp</artifactId>
             <version>2.9.0</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.50</version>
+        </dependency>
     </dependencies>
 
 

+ 69 - 0
blade-service/blade-client/src/main/java/org/springblade/client/wechat/Util/AESUtil.java

@@ -0,0 +1,69 @@
+package org.springblade.client.wechat.Util;
+
+import org.apache.commons.codec.binary.Base64;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.*;
+import java.security.spec.InvalidParameterSpecException;
+
+public class AESUtil {
+	static {
+		Security.addProvider(new BouncyCastleProvider());
+	}
+
+	/**
+	 * AES解密
+	 * @param data 密文,被加密的数据
+	 * @param key 秘钥
+	 * @param iv 偏移量
+	 * @param encodingFormat 解密后的结果需要进行的编码
+	 * @return
+	 * @throws Exception
+	 */
+	public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
+		//被加密的数据
+		byte[] dataByte = Base64.decodeBase64(data);
+		//加密秘钥
+		byte[] keyByte = Base64.decodeBase64(key);
+		//偏移量
+		byte[] ivByte = Base64.decodeBase64(iv);
+		try {
+			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
+			SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
+			AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
+			parameters.init(new IvParameterSpec(ivByte));
+			cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
+			byte[] resultByte = cipher.doFinal(dataByte);
+			if (null != resultByte && resultByte.length > 0) {
+				String result = new String(resultByte, encodingFormat);
+				return result;
+			}
+			return null;
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		} catch (NoSuchPaddingException e) {
+			e.printStackTrace();
+		} catch (InvalidParameterSpecException e) {
+			e.printStackTrace();
+		} catch (InvalidKeyException e) {
+			e.printStackTrace();
+		} catch (InvalidAlgorithmParameterException e) {
+			e.printStackTrace();
+		} catch (IllegalBlockSizeException e) {
+			e.printStackTrace();
+		} catch (BadPaddingException e) {
+			e.printStackTrace();
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+}

+ 91 - 0
blade-service/blade-client/src/main/java/org/springblade/client/wechat/Util/HttpUtil.java

@@ -0,0 +1,91 @@
+package org.springblade.client.wechat.Util;
+
+import com.alibaba.fastjson.JSON;
+import org.apache.http.HttpEntity;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.*;
+
+public class HttpUtil {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtil.class);
+
+	public static int DATA_JSON = 1;
+
+	public static int DATA_FORM = 2;
+
+	private static String JSON_CONTENT_TYPE = "application/json";
+
+	private static String CHARACTER = "UTF-8";
+
+	private static String CONTENT_TYPE_NAME = "Content-Type";
+
+	public static String get(String url) {
+		return send(new HttpGet(url));
+	}
+
+	public static String post(String url, Map<String, Object> param, Integer dataType) {
+		return post(url, param, dataType, null);
+	}
+
+	public static String post(String url, Map<String, Object> param, Integer dataType, Map<String, String> headers) {
+		HttpPost post = new HttpPost(url);
+		if (dataType == DATA_FORM) {
+			Iterator localIterator;
+			Map.Entry<String, String> entries;
+			if (headers != null)
+				for (localIterator = headers.entrySet().iterator(); localIterator.hasNext(); ) {
+					entries = (Map.Entry) localIterator.next();
+					post.setHeader((String) entries.getKey(), (String) entries.getValue());
+				}
+
+			Object paramList = new ArrayList();
+			for (Map.Entry<String, Object> entry : param.entrySet()) {
+				((List) paramList).add(new BasicNameValuePair((String) entry.getKey(), entry.getValue().toString()));
+			}
+			try {
+				post.setEntity(new org.apache.http.client.entity.UrlEncodedFormEntity((List) paramList));
+			} catch (UnsupportedEncodingException e) {
+				LOGGER.info(e.getMessage());
+			}
+		} else if (dataType.intValue() == DATA_JSON) {
+			post.setHeader(CONTENT_TYPE_NAME, JSON_CONTENT_TYPE);
+			post.setEntity(new StringEntity(JSON.toJSONString(param), CHARACTER));
+		}
+		return send(post);
+	}
+
+	private static String send(HttpRequestBase request) {
+		CloseableHttpClient client = org.apache.http.impl.client.HttpClients.createDefault();
+		String result = null;
+		try {
+			CloseableHttpResponse response = client.execute(request);
+			HttpEntity entity = response.getEntity();
+			StatusLine status = response.getStatusLine();
+			if (status.getStatusCode() == 200) {
+				result = EntityUtils.toString(entity);
+				EntityUtils.consume(entity);
+			} else {
+				result = String.valueOf(status);
+			}
+			LOGGER.info("http response ------------" + result);
+			response.close();
+		} catch (IOException e) {
+			LOGGER.info(e.getMessage());
+		}
+		return result;
+	}
+
+}

+ 45 - 61
blade-service/blade-client/src/main/java/org/springblade/client/wechat/controller/WechatController.java

@@ -5,13 +5,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
-import org.apache.http.HttpEntity;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.util.EntityUtils;
+import org.springblade.client.wechat.Util.AESUtil;
+import org.springblade.client.wechat.Util.HttpUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -25,7 +20,6 @@ import org.springframework.web.bind.annotation.RestController;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Objects;
 
 /**
  * 与微信产生交换的控制器
@@ -37,62 +31,60 @@ import java.util.Objects;
 @RequestMapping("/wechat")
 public class WechatController {
 
+	// 登录凭证校验地址
+	public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
+	// 小程序的appId以及appSecret
+	private static final String appId = "wx0a0feca24b695636";
+	private static final String appSecret = "b3efb530f9ef97626e2ec31fc7a3af56";
+
 	/**
 	 * 微信授权登录
 	 *
-	 * @param loginCode
+	 * @param loginCode 登录code
+	 * @param telCode	获取手机号code
 	 * @return 结果
 	 */
 	@GetMapping("programLogin")
-	public R<Map<String, Object>> weChatProgramLogin(@RequestParam("loginCode") String loginCode, @RequestParam("telCode") String telCode) throws IOException {
-		log.info("小程序code=====>" + loginCode);
+	public R<Map<String, Object>> weChatProgramLogin(@RequestParam("loginCode") String loginCode,
+													 @RequestParam("telCode") String telCode,
+													 @RequestParam("encryptedData") String encryptedData,
+													 @RequestParam("iv") String iv)
+	throws IOException {
 		if (StringUtil.isBlank(loginCode)) {
 			throw new SecurityException("登录code获取失败");
 		}
 		Map<String, Object> map = new HashMap<>(16);
 
-		String url = "https://api.weixin.qq.com/sns/jscode2session";
-		//自己的appid
-		url += "?appid=wx0a0feca24b695636";
-		//自己的appSecret
-		url += "&secret=b3efb530f9ef97626e2ec31fc7a3af56";
-		url += "&js_code=" + loginCode;
-		url += "&grant_type=authorization_code";
-		url += "&connect_redirect=1";
-
-		String res = null;
-		CloseableHttpClient httpClient = HttpClientBuilder.create().build();
-		// DefaultHttpClient();
-		//GET方式
-		HttpGet httpget = new HttpGet(url);
-		HttpGet accessTokenUrlGet = new HttpGet(url);
-		CloseableHttpResponse response = null;
-		// 配置信息
-		// 设置连接超时时间(单位毫秒)
-		RequestConfig requestConfig = RequestConfig.custom()
-			// 设置请求超时时间(单位毫秒)
-			.setConnectTimeout(5000)
-			// socket读写超时时间(单位毫秒)
-			.setConnectionRequestTimeout(5000)
-			// 设置是否允许重定向(默认为true)
-			.setSocketTimeout(5000)
-			// 将上面的配置信息 运用到这个Get请求里
-			.setRedirectsEnabled(false).build();
-		// 由客户端执行(发送)Get请求
-		httpget.setConfig(requestConfig);
-		accessTokenUrlGet.setConfig(requestConfig);
-		// 从响应模型中获取响应实体
-		response = httpClient.execute(httpget);
-		HttpEntity responseEntity = response.getEntity();
-		log.info("响应状态为=====>" + response.getStatusLine());
-		if (responseEntity != null) {
-			res = EntityUtils.toString(responseEntity);
-			log.info("响应内容长度为=====>" + responseEntity.getContentLength());
-			log.info("响应内容为=====>" + res);
+		String requestUrl = GetPageAccessTokenUrl.replace("APPID", appId).replace("SECRET", appSecret).replace("CODE", loginCode);
+		try {
+			String response = HttpUtil.get(requestUrl);
+			JSONObject jsonObject = JSONObject.parseObject(response);
+			String openid = String.valueOf(jsonObject.get("openid"));
+			// 获取解密所需的session_key
+			String session_key = String.valueOf(jsonObject.get("session_key"));
+			// 通过AES解密encryptedData 获取union_id,工具类见下方
+			String encryptedResult = AESUtil.decrypt(encryptedData, session_key, iv, "UTF-8");
+			/**
+			 * 此处解密之后数据包格式为:
+			 * openid	 string	用户唯一标识
+			 * nickName  string 昵称
+			 * gender    string 性别
+			 * city      string	城市
+			 * province  string 省份
+			 * country   string 国家
+			 * avatarUrl string	头像
+			 * unionId   string	用户在开放平台的唯一标识符
+			 * watermark JSON	数据水印,包括appid,timestamp字段 为了校验数据的有效性
+			 */
+			JSONObject parseObject = JSONObject.parseObject(encryptedResult);
+			// ps:此处一定要注意解密的出来的字段名为驼峰命名的unionId,openId,并非直接授权的unionid
+			String unionid = String.valueOf(parseObject.get("unionId"));
+			map.put("openid", openid);
+			map.put("unionid",unionid);
+		} catch (Exception e) {
+			e.printStackTrace();
 		}
-		// 释放资源
-		httpClient.close();
-		response.close();
+
 
 		OkHttpClient client = new OkHttpClient();
 		//获得token
@@ -107,7 +99,6 @@ public class WechatController {
 				JSONObject object = JSON.parseObject(body);
 				String accessToken = object.getString("access_token");
 				if (ObjectUtil.isNotEmpty(accessToken)) {
-					log.info("通过code获取token异常:" + object.toJSONString());
 					map.put("accessToken", accessToken);
 				} else {
 					throw new RuntimeException("access_token获取失败");
@@ -115,11 +106,11 @@ public class WechatController {
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
-			log.info("用户获取token异常:" + e);
 		}
 		Map<String, String> map1 = new HashMap<>();
 		map1.put("code", telCode);
 		System.out.println(JsonUtil.toJson(map1));
+
 		//获得手机号
 		Request requestPhone = new Request.Builder()
 //			.url("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + map.get("accessToken") + "&code=" + telCode)
@@ -140,7 +131,6 @@ public class WechatController {
 					if (ObjectUtil.isNotEmpty(jsonObject)) {
 						String phoneNumber = jsonObject.getString("phoneNumber");
 						if (ObjectUtils.isEmpty(phoneNumber)) {
-							log.info("获取手机号异常:" + object.toJSONString());
 							throw new RuntimeException("获取手机号异常");
 						} else {
 							map.put("phoneNumber", phoneNumber);
@@ -155,14 +145,8 @@ public class WechatController {
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
-			log.info("用户获取手机号异常:" + e);
 		}
 
-		JSONObject jo = JSONObject.parseObject(res);
-		String openid = jo.getString("openid");
-		log.info("openid=====>" + jo.toString());
-		map.put("openId", openid);
-
 		return R.data(map);
 	}
 }

+ 118 - 88
blade-service/blade-client/src/main/java/org/springblade/client/wechat/feign/WechatClient.java

@@ -11,8 +11,12 @@ import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
 import okhttp3.*;
 import org.springblade.client.feign.IWechatClient;
+import org.springblade.client.wechat.Util.AESUtil;
+import org.springblade.client.wechat.Util.HttpUtil;
 import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.purchase.sales.entity.Biding;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
@@ -28,119 +32,145 @@ import java.util.Map;
 @AllArgsConstructor
 @Slf4j
 public class WechatClient implements IWechatClient {
-
+	//公众号的appId以及secret
+	private static final String appId = "wxf077390a6ec17f23";
+	private static final String appSecret = "50e84930675a0c06057d45a6d64ec548";
 	/**
 	 * 发送模板消息
 	 *
-	 * @param openId  接收此消息的openId
-	 * @param loadingTime 装柜时间
-	 * @param details     发送详情
-	 * @param number  件数
+	 * @param unionId  接收此消息的openId
+	 * @param biding
 	 * @return 结果
 	 */
-	/*@Override
-	public String newsPush(String openId, String loadingTime, String details, String number) {
-
-		log.info("进来了!!!!!!!!!!!!!!!!!!!!!!!!");
-		String token = null;
-		String result = null;
-
-		OkHttpClient client = new OkHttpClient();
+	@Override
+	public String newsPush(String unionId, Biding biding) {
 		//获得token
-		Request request = new Request.Builder().url("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx0a0feca24b695636&secret=b3efb530f9ef97626e2ec31fc7a3af56").build();
-		try {
+		Map<String,String> tokenMap = this.getToken();
+		//获得用户列表
+		Map<String, Object> openIdMap = this.getUserOpenId(tokenMap.get("accessToken"));
+		List<String> openIdsList = (List<String>) openIdMap.get("openIds");
+		//获得用户unionId
+		for (int i = 0; i < openIdsList.size(); i++ ){
+			String openid = openIdsList.get(i);
+			//获得unionId
+			Map<String, String > userMap = this.getUserInfo(tokenMap.get("accessToken"),openid);
+			if (userMap.get("unionid").equals(unionId)){
+				//1,配置
+				WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
+				wxStorage.setAppId(appId);
+				wxStorage.setSecret(appSecret);
+				WxMpService wxMpService = new WxMpServiceImpl();
+				wxMpService.setWxMpConfigStorage(wxStorage);
 
-			Response responseToken = client.newCall(request).execute();
-			//如果请求成功,解析数据
-			if (responseToken.isSuccessful()) {
-				String body = responseToken.body().string();
-				//得到一个JSON对象
-				JSONObject object = JSON.parseObject(body);
-				String accessToken = object.getString("access_token");
-				if (ObjectUtil.isNotEmpty(accessToken)) {
-					log.info("通过code获取token异常:" + object.toJSONString());
-					token = accessToken;
-				} else {
-					throw new RuntimeException("access_token获取失败");
+				List<WxMpTemplateData> data = Arrays.asList(
+					new WxMpTemplateData("first", "[提醒]您有新的竞价消息,请尽快报价,过期作废"),
+					new WxMpTemplateData("keyword1", "发布"),
+					new WxMpTemplateData("keyword2", biding.getContractNo()),
+					new WxMpTemplateData("keyword3", biding.getDepartureHarbor() + "至" + biding.getObjectiveHarbor()),
+					new WxMpTemplateData("keyword4", biding.getCargoInformation()),
+					new WxMpTemplateData("keyword5", biding.getLoadingTime().toString()),
+					new WxMpTemplateData("remark", biding.getRemark())
+				);
+				//2,推送消息
+				WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
+					.toUser(openid)//要推送的用户openid
+					.templateId("Ad7zPbJWk4P44J2muNTDJCHwbxr5trgfPeHLq4oklRE")//模版id
+					.url("https://www.baidu.com/")//点击模版消息要访问的网址
+					.data(data)
+					.build();
+				try {
+					wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+				} catch (Exception e) {
+					System.out.println("推送失败:" + e.getMessage());
+					e.printStackTrace();
 				}
 			}
-		} catch (IOException e) {
-			e.printStackTrace();
-			log.info("用户获取token异常:" + e);
 		}
-		//整体参数map
-		Map<String, Object> paramMap = new HashMap<>();
-		//消息主题显示map
-		Map<String, Object> dataMap = new HashMap<>();
+		return null;
+	}
 
-		dataMap.put("date1", loadingTime);
-		dataMap.put("thing2", details);
-		dataMap.put("number3", number);
-		paramMap.put("touser", openId);
-		paramMap.put("template_id", "GGYopU4NGV055HSSY5SeeaAGKGjP1fXFV3Vag0O7POM");
-		paramMap.put("data", dataMap);
+	/**
+	 * 获得公众号token
+	 */
+	public Map<String, String> getToken() {
 
+		Map<String,String> tokenMap = new HashMap<>();
+		String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret;
 		try {
-			// 构建Request请求对象
-			log.info("JSON====="+JSON.toJSONString(paramMap));
-			RequestBody body = RequestBody.create(MediaType.parse("application/xml;charset=utf-8"), JSON.toJSONString(paramMap));
-			Request requestTwo = new Request.Builder().url("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token).post(body).build();
-			// 请求接口,拿到token信息
-			Response response = client.newCall(requestTwo).execute();
-			System.out.println("拿到结果了:" + body);
-			// 判断成功与否
-			if (response.isSuccessful()) {
-				// 拿到相应结果
-				result = response.body().string();
-				//得到一个JSON对象
-				JSONObject object = JSON.parseObject(result);
-				log.info("返回信息====="+object);
-				if (object.getString("errcode").equals("40003")) {
-					throw new RuntimeException("touser字段 openid 为空或者不正确");
-				} else if (object.getString("errcode").equals("40037")) {
-					throw new RuntimeException("订阅模板 id 为空不正确");
-				}else if (object.getString("errcode").equals("47003")) {
-					throw new RuntimeException("模板参数不准确,可能为空或者不满足规则" + object.get("errmsg"));
+			String response = HttpUtil.get(requestUrl);
+			JSONObject jsonObject = JSONObject.parseObject(response);
+			if (ObjectUtil.isEmpty(jsonObject.get("errcode"))){
+				String accessToken = String.valueOf(jsonObject.get("access_token"));
+				if (ObjectUtil.isEmpty(accessToken)){
+					throw new RuntimeException("获取token出现异常");
 				}else {
-					throw new RuntimeException("不合法的telCode(telCode不存在、已过期或者使用过)");
+					tokenMap.put("accessToken", accessToken);
 				}
+			}else if (jsonObject.getString("errcode").equals("-1")) {
+				throw new RuntimeException("系统繁忙,此时请开发者稍候再试");
+			} else {
+				throw new RuntimeException("不合法的telCode(telCode不存在、已过期或者使用过)");
 			}
+
 		} catch (Exception e) {
-			throw new SecurityException("发送失败" + e.getMessage());
+			log.info("获取token出现异常");
+			e.printStackTrace();
 		}
-		return result;
-	}*/
 
-		@Override
-		public String newsPush(String openId, String loadingTime, String details, String number) {
-		//1,配置
-		WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
-		wxStorage.setAppId("wxf077390a6ec17f23");
-		wxStorage.setSecret("50e84930675a0c06057d45a6d64ec548");
-		WxMpService wxMpService = new WxMpServiceImpl();
-		wxMpService.setWxMpConfigStorage(wxStorage);
+		return tokenMap;
+	}
+
+	/**
+	 * 获得用户列表
+	 */
+	public Map<String, Object> getUserOpenId(String accessToken){
+		Map<String, Object> openIdMap = new HashMap<>();
+		String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/get?access_token="+accessToken;
+		try {
+			String response = HttpUtil.get(requestUrl);
+			JSONObject jsonObject = JSONObject.parseObject(response);
+			if (ObjectUtil.isEmpty(jsonObject.get("errcode"))){
+				JSONObject data = jsonObject.getJSONObject("data");
+				if (ObjectUtil.isNotEmpty(data.get("openid"))){
+					openIdMap.put("openIds",data.getJSONArray("openid"));
+				}
+			}else {
+				throw new RuntimeException("用户获取失败"+jsonObject.get("errmsg"));
+			}
+
+		} catch (Exception e) {
+			log.info("获取用户openid出现异常");
+			e.printStackTrace();
+		}
+		return openIdMap;
+	}
 
-		List<WxMpTemplateData> data = Arrays.asList(
-			new WxMpTemplateData("date1", loadingTime),
-			new WxMpTemplateData("thing2", details),
-			new WxMpTemplateData("number3", number)
-		);
-		//2,推送消息
-		WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
-			//.toUser(openId)//要推送的用户openid
-			.toUser("oyHoI6kh6AMgN2F8WHIp6YPdqvAI")//要推送的用户openid
-			.templateId("GGYopU4NGV055HSSY5SeeaAGKGjP1fXFV3Vag0O7POM")//模版id
-			.url("https://www.baidu.com/")//点击模版消息要访问的网址
-			.data(data)
-			.build();
+	/**
+	 * 获得用户信息
+	 */
+	public Map<String, String > getUserInfo(String accessToken,String openId){
+		Map<String,String> userMap = new HashMap<>();
+		String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token="+accessToken+"&openid="+openId+"&lang=zh_CN";
 		try {
-			wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+			String response = HttpUtil.get(requestUrl);
+			JSONObject jsonObject = JSONObject.parseObject(response);
+			if (ObjectUtil.isEmpty(jsonObject.get("errcode"))){
+				String unionid = String.valueOf(jsonObject.get("unionid"));
+				if (ObjectUtil.isEmpty(unionid)){
+					throw new RuntimeException("获取unionid出现异常");
+				}else {
+					userMap.put("unionid", unionid);
+				}
+			}else {
+				throw new RuntimeException("用户获取失败"+jsonObject.get("errmsg"));
+			}
+
 		} catch (Exception e) {
-			System.out.println("推送失败:" + e.getMessage());
+			log.info("获取unionid出现异常");
 			e.printStackTrace();
 		}
 
-		return null;
+		return userMap;
 	}
 
 }

+ 3 - 11
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingServiceImpl.java

@@ -267,16 +267,9 @@ public class BidingServiceImpl extends ServiceImpl<BidingMapper, Biding> impleme
 			throw new SecurityException("订单已作废");
 		}
 
-		//装柜日期
-		String loadingTime = salesBiding.getLoadingTime().toString();
-		//发送详情
-		String details = salesBiding.getDepartureHarbor() + "-->" + salesBiding.getObjectiveHarbor();
-		//件数
-		String number = salesBiding.getNumber().toString();
-
 		//根据代理客户的客户联系人进行消息推送
 		//获得所有代理客户
-		/*List<BidingAgent> agentList = bidingAgentService.getBidingAgent(salesBiding);;
+		List<BidingAgent> agentList = bidingAgentService.getBidingAgent(salesBiding);;
 		agentList.forEach(e -> {
 			//获得客户
 			CorpsDesc corpsDesc = corpsDescClient.getCorpId(e.getAgentId());
@@ -287,12 +280,11 @@ public class BidingServiceImpl extends ServiceImpl<BidingMapper, Biding> impleme
 				R<User> user = userClient.userInfoById(corpsAttn.getUserId());
 				if (ObjectUtil.isNotEmpty(user)){
 					if (ObjectUtil.isNotEmpty(user.getData().getUnionId())){
-						String msg = wechatClient.newsPush(user.getData().getUnionId(), loadingTime, details, number);
-						System.out.println("msg====="+msg);
+						String msg = wechatClient.newsPush(user.getData().getUnionId(),biding);
 					}
 				}
 			});
-		});*/
+		});
 
 		salesBiding.setStatus(4);
 		baseMapper.updateById(salesBiding);