衡水老白干项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
newphonetour2.0/src/main/java/com/cjy/back/ybsjMessageInfo/controller/YbsjMessageInfoController.java

393 lines
14 KiB

package com.cjy.back.ybsjMessageInfo.controller;
import com.cjy.back.sysOrgan.entity.SysOrgan;
import com.cjy.back.ybsjAppointment.service.impl.YbsjyAppointmentSettingServiceImpl;
import com.cjy.back.ybsjMessageInfo.entity.YbsjMessageInfo;
import com.cjy.back.ybsjMessageInfo.service.YbsjMessageInfoService;
import com.cjy.util.ServerResponse;
import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@RestController
@RequestMapping("/messageInfo")
public class YbsjMessageInfoController {
private final static Logger logger = LoggerFactory.getLogger(YbsjMessageInfoController.class);
@Autowired
private YbsjMessageInfoService messageInfoService;
private final String appId = "wx34d91f48f291a4d6";
private final String appSecret = "bc11e97b8e00841053cfc7ba8497c876";
/**
*
* @Description: 消息类型列表
* @param type 消息类型
* @return
* @author hpr
* @date 2019/10/30
*/
@RequestMapping("/getListData.do")
public ServerResponse getListData(String type, HttpServletRequest request, HttpSession session){
return messageInfoService.getListData(type,session,request);
}
/**
*
* @Description: 修改排序
* @param request guid/sort
* @return
* @author hpr
* @date 2019/10/30
*/
@RequestMapping("/updateMessageInfoSort.do")
public ServerResponse updateMessageInfoSort(HttpServletRequest request, HttpSession session){
return messageInfoService.updateMessageInfoSort(request,session);
}
/**
*
* @Description: 修改是否推荐
* @param request 主键 是否推荐
* @return
* @author hpr
* @date 2019/10/30
*/
@RequestMapping("/recommendMessageInfo.do")
public ServerResponse recommendMessageInfo(HttpServletRequest request, HttpSession session){
return messageInfoService.recommendMessageInfo(request,session);
}
/**
*
* @Description: 修改是否弹框
* @param request 主键 是否弹框
* @return
* @author hpr
* @date 2019/10/30
*/
@RequestMapping("/updateIspopupMessageInfo.do")
public ServerResponse updateIspopupMessageInfo(HttpServletRequest request, HttpSession session){
return messageInfoService.updateIspopupMessageInfo(request,session);
}
/**
* 查询弹框内容
* @param messageInfoId
* @return
*/
@RequestMapping("/selectContentById.do")
public ServerResponse selectContentById(Long messageInfoId){
return ServerResponse.createBySuccess(messageInfoService.selectContentById(messageInfoId));
}
/**
*
* @Description: 修改假删除
* @param request 主键 是否推荐
* @return
* @author hpr
* @date 2019/11/4
*/
@RequestMapping("/isdelMessageInfo.do")
public ServerResponse isdelMessageInfo(HttpServletRequest request, HttpSession session){
return messageInfoService.isdelMessageInfo(request,session);
}
/**
*
* @Description: 查询信息详情
* @param request 主键
* @return
* @author hpr
* @date 2019/10/30
*/
@RequestMapping("/detailMessageInfo.do")
public ServerResponse detailMessageInfo(HttpServletRequest request, HttpSession session){
return messageInfoService.detailMessageInfo(request,session);
}
/**
*
* @Description: 查询附加字段的数据内容
* @param request 类型
* @return
* @author hpr
* @date 2019/10/30
*/
@RequestMapping("/selectSubColumnData.do")
public ServerResponse selectSubColumnData(HttpServletRequest request, HttpSession session){
return messageInfoService.selectSubColumnData(request,session);
}
/**
*
* @Description: 修改信息
* @param messageInfo 信息实体
* @return
* @author hpr
* @date 2019/10/30
*/
@RequestMapping("/updateMessageInfo.do")
public ServerResponse updateMessageInfo(YbsjMessageInfo messageInfo, HttpSession session){
return messageInfoService.updateMessageInfo(messageInfo,session);
}
/**
*
* @Description: 新增信息
* @param messageInfo 信息实体
* @return
* @author hpr
* @date 2019/11/1
*/
@RequestMapping("/saveMessageInfo.do")
public ServerResponse saveMessageInfo(YbsjMessageInfo messageInfo, HttpSession session){
pushMessage(messageInfo);
return messageInfoService.saveMessageInfo(messageInfo,session);
}
/**
*
* @Description: 删除信息
* @param guids 多主键
* @return
* @author hpr
* @date 2019/11/1
*/
@RequestMapping("/delMessageInfo.do")
public ServerResponse delMessageInfo(String guids, HttpSession session){
return messageInfoService.delMessageInfo(guids,session);
}
/**
* 通知公告推送至微信公众号
*
* @param messageInfo
* @return
*/
@RequestMapping("/pushMessage.do")
public void pushMessage(YbsjMessageInfo messageInfo) {
try {
logger.warn("接收通知公告推送数据" + messageInfo);
//获取token
String accessToken = getAccessToken(appId, appSecret);
logger.warn("获取token" + accessToken);
// 步骤1: 处理内容中的图片
String processedContent = processContent(messageInfo.getContent(), accessToken);
System.out.println("处理后的内容:" + processedContent);
logger.warn("处理后的内容" + processedContent);
// 步骤2: 创建草稿
createDraft(accessToken, messageInfo.getTitle(), processedContent);
} catch (Exception e) {
logger.error("通知公告推送至微信公众号异常:{}",e);
}
}
public String getAccessToken(String appId, String appSecret) throws IOException {
try {
// 目标 URL
URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret);
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方法
conn.setRequestMethod("GET");
// 设置请求头
conn.setRequestProperty("Content-Type", "application/json");
// 获取响应
int responseCode = conn.getResponseCode();
System.out.println("Response Code: " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JSONObject result = new JSONObject(response.toString());
return result.getString("access_token");
} catch (Exception e) {
logger.error("获取token异常:{}",e);
throw new RuntimeException(e);
}
}
// 1. 下载网络图片(支持自动重试)
private static File downloadImage(String imageUrl) throws IOException, InterruptedException {
File tempFile = File.createTempFile("wx_", ".tmp"); // 先创建临时文件
// 下载文件内容
FileUtils.copyURLToFile(new URL(imageUrl), tempFile);
// 验证文件头
try (InputStream is = new FileInputStream(tempFile)) {
byte[] header = new byte[8];
is.read(header);
// PNG头: 89 50 4E 47 0D 0A 1A 0A
// JPEG头: FF D8 FF
if (!(header[0] == (byte) 0x89 && header[1] == 'P' && header[2] == 'N' && header[3] == 'G') &&
!(header[0] == (byte) 0xFF && header[1] == (byte) 0xD8 && header[2] == (byte) 0xFF)) {
throw new IOException("无效的图片格式");
}
}
return tempFile;
}
// 2. 微信图片上传(修复41005错误)
private static String uploadToWeChat(String accessToken, File file) throws IOException {
String newName ="";
// 1. 验证文件类型
String fileName = file.getName().toLowerCase();
if (!fileName.endsWith(".jpg") && !fileName.endsWith(".jpeg") && !fileName.endsWith(".png")) {
// 重命名临时文件为有效扩展名
newName = fileName.split("\\.")[0] + ".jpg";
File newFile = new File(file.getParent(), newName);
file.renameTo(newFile);
file = newFile;
}
FileInputStream input = new FileInputStream(file);
String url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=" + accessToken + "&type=image";
String boundary = "----WebKitFormBoundary" + System.currentTimeMillis();
String lineEnd = "\r\n";
String twoHyphens = "--";
HttpURLConnection connection = null;
try {
URL requestUrl = new URL(url);
connection = (HttpURLConnection) requestUrl.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
OutputStream outputStream = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true);
// 添加文件部分
writer.append(twoHyphens + boundary + lineEnd);
writer.append("Content-Disposition: form-data; name=\"media\"; filename=\"" + newName + "\"" + lineEnd);
writer.append("Content-Type: image/*" + lineEnd);
writer.append(lineEnd);
writer.flush();
// 写入文件内容(使用 MultipartFile.getInputStream())
InputStream inputStream = input; // 关键修改点!
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
inputStream.close();
// 结束部分
writer.append(lineEnd);
writer.append(twoHyphens + boundary + twoHyphens + lineEnd);
writer.close();
// 获取响应
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
JSONObject result = new JSONObject(response.toString());
return result.getString("url");
} else {
throw new IOException("Server returned non-OK status: " + responseCode);
}
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
// 3. 替换内容中的图片链接
private static String processContent(String html, String accessToken) throws Exception {
Pattern pattern = Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>");
Matcher matcher = pattern.matcher(html);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
String imgUrl = matcher.group(1);
File tempFile = downloadImage(imgUrl);
String wechatUrl = uploadToWeChat(accessToken, tempFile);
matcher.appendReplacement(result, "<img src='" + wechatUrl + "'/>");
tempFile.delete();
}
matcher.appendTail(result);
return result.toString();
}
// 4. 创建草稿
private static void createDraft(String accessToken, String title, String content) throws IOException {
String url = "https://api.weixin.qq.com/cgi-bin/draft/add?access_token=" + accessToken;
JSONObject article = new JSONObject()
.put("title", title)
.put("content", content)
.put("thumb_media_id", "qR_BnS7D9o1TqpJLTGV3Pmbnz48dU3zFGu6Y_9ws5iKDXNFBGdIHIyRXJVuIjK1b")
.put("show_cover_pic", 1);
JSONArray articles = new JSONArray().put(article);
String requestBody = new JSONObject().put("articles", articles).toString();
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
try (OutputStream os = conn.getOutputStream()) {
os.write(requestBody.getBytes("UTF-8"));
}
try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
String line;
StringBuilder response = new StringBuilder();
while ((line = br.readLine()) != null) {
response.append(line);
}
logger.warn("草稿创建结果: " + response);
System.out.println("草稿创建结果: " + response);
}
}
}