From 80ea9d9c1b4474fb3d14622c945c3ddceb860218 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 24 四月 2025 14:17:40 +0800
Subject: [PATCH] 代码初始化
---
server/src/main/java/com/doumee/api/common/PublicCloudController.java | 126 +++++++++++++++++++++
server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java | 22 +++
server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java | 2
server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java | 23 +++
server/src/main/java/com/doumee/core/utils/HttpsUtil.java | 99 ++++++++++++---
server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java | 49 ++++++++
6 files changed, 298 insertions(+), 23 deletions(-)
diff --git a/server/src/main/java/com/doumee/api/common/PublicCloudController.java b/server/src/main/java/com/doumee/api/common/PublicCloudController.java
index 075c33b..197c8d1 100644
--- a/server/src/main/java/com/doumee/api/common/PublicCloudController.java
+++ b/server/src/main/java/com/doumee/api/common/PublicCloudController.java
@@ -10,9 +10,13 @@
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.FtpUtil;
import com.doumee.core.utils.azure.AzureBlobUtil;
+import com.doumee.core.utils.qiyeweixin.QywxUtil;
+import com.doumee.core.utils.qiyeweixin.model.response.QywxUploadMediaResponse;
+import com.doumee.dao.business.dto.WebQwUploadDto;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.service.common.EmailService;
import io.swagger.annotations.Api;
@@ -56,6 +60,62 @@
public static FtpUtil ftp = null;
public static AzureBlobUtil azureBlobUtil = null;
+ @ApiOperation(value = "娴嬭瘯浼佷笟绱犳潗涓婁紶涓嬭浇")
+ @RequestMapping(method= RequestMethod.POST,value="/testQwImg")
+ @ResponseBody
+ public ApiResponse<Map<String, Object>> testQwImg( @RequestParam(required = false) String imgurl ) throws Exception {
+ QywxUploadMediaResponse r = QywxUtil.uploadMedia(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),"image",imgurl);
+ if(r!=null && r.getMedia_id()!=null){
+ String folder = systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
+ String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
+ Map<String, Object> context = new HashMap<>();
+ try {
+ initUploadTool();
+ context.put("success", true);
+ context.put("code", 200);
+ context.put("errno",0);
+ JSONArray jsonArray = new JSONArray();
+ Integer index = Constants.ONE;
+ //鑾峰緱姣忎竴涓枃浠�
+ String endType = ".jpg";
+ String originname = UUID.randomUUID().toString()+endType;
+ InputStream is = QywxUtil.getMediaInputstream(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),r.getMedia_id());
+ if(is == null){
+ context.put("code", 0);
+ context.put("message", "涓婁紶澶辫触");
+ context.put("errno",0);
+ }else{
+ String date = DateUtil.getNowShortDate();
+ String fName = date + "/" + originname;
+ String fileName = folder + fName;
+ boolean r1 =false;
+ if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
+ r1 = azureBlobUtil.uploadFileWithResponse( fileName,is);//涓婁紶
+ }else{
+ r1 = ftp.uploadInputstreamBatch(is, fileName, true,index);
+ }
+ if (r1) {
+ JSONObject fileJSON = new JSONObject();
+ fileJSON.put("url", prefixPath + fileName);
+ fileJSON.put("imgaddr", fName);
+ fileJSON.put("imgname", fileName);
+ fileJSON.put("originname", originname);
+ jsonArray.add(fileJSON);
+ }
+ }
+ context.put("data",jsonArray);
+ } catch (Exception e) {
+ log.error("銆愪笂浼燜TP澶辫触銆�======================"+e.getMessage());
+ context.put("code", 0);
+ context.put("message", "涓婁紶澶辫触");
+ context.put("errno",0);
+
+ }
+ return ApiResponse.success(context);
+ }
+ return ApiResponse.failed("涓婁紶澶辫触"+r!=null?JSONObject.toJSONString(r):"");
+
+ }
@ApiOperation(value = "娴嬭瘯閭欢鍙戦��")
@RequestMapping(method= RequestMethod.POST,value="/testEmail")
@ResponseBody
@@ -149,6 +209,72 @@
writerJson(response, context);
return;
}
+ @ApiOperation(value = "鎵归噺浠庝紒涓氫复鏃剁礌鏉愬簱涓婁紶鏂囦欢鍒版枃浠舵湇鍔″櫒")
+ @PostMapping(value="/uploadBatchFromWx")
+ @ResponseBody
+ public void uploadBatchFromWx(@RequestBody WebQwUploadDto param, HttpServletResponse response) throws Exception {
+ if(Objects.isNull(param.getFolder()) || param.getMediaIds()==null || param.getMediaIds().size()==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ SystemDictData folderData = systemDictDataBiz.queryByCode(Constants.FTP,param.getFolder());
+ if(Objects.isNull(folderData)||StringUtils.isBlank(folderData.getCode())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐩爣鏂囦欢澶归敊璇�");
+ }
+ String folder = systemDictDataBiz.queryByCode(Constants.FTP,param.getFolder()).getCode();
+ String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
+ response.setCharacterEncoding("UTF-8");
+ response.setContentType("text/html;charset=UTF-8");
+ Map<String, Object> context = new HashMap<>();
+ try {
+ initUploadTool();
+ context.put("success", true);
+ context.put("code", 200);
+ context.put("errno",0);
+ JSONArray jsonArray = new JSONArray();
+ Integer index = Constants.ONE;
+ for (String media : param.getMediaIds()) {
+ //鑾峰緱姣忎竴涓枃浠�
+ String endType = ".jpg";
+ String originname = UUID.randomUUID().toString()+endType;
+ InputStream is = QywxUtil.getMediaInputstream(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),media);
+ if(is == null){
+ log.error("浼佷笟寰俊绱犳潗涓嬭浇澶辫触锛�========="+media);
+ continue;
+ }
+ log.error("浼佷笟寰俊绱犳潗涓嬭浇鎴愬姛锛�========="+media);
+ String date = DateUtil.getNowShortDate();
+ String fName = date + "/" + originname;
+ String fileName = folder + fName;
+ boolean r =false;
+ if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
+ r = azureBlobUtil.uploadFileWithResponse( fileName,is);//涓婁紶
+ }else{
+ r = ftp.uploadInputstreamBatch(is, fileName, Constants.equalsInteger(index ,param.getMediaIds().size()),index);
+ }
+ if (r) {
+ JSONObject fileJSON = new JSONObject();
+ fileJSON.put("url", prefixPath + fileName);
+ fileJSON.put("imgaddr", fName);
+ fileJSON.put("imgname", fileName);
+ fileJSON.put("originname", originname);
+ jsonArray.add(fileJSON);
+ }
+ index = index + 1;
+ }
+ context.put("data",jsonArray);
+ } catch (Exception e) {
+ log.error("銆愪笂浼燜TP澶辫触銆�======================"+e.getMessage());
+ context.put("code", 0);
+ context.put("message", "涓婁紶澶辫触");
+ context.put("errno",0);
+ writerJson(response, context);
+ return;
+
+ }
+ writerJson(response, context);
+ return;
+ }
+
@ApiOperation(value = "鎵归噺涓婁紶鏂囦欢鍒癋TP")
@RequestMapping(method= RequestMethod.POST,value="/uploadBatchOld")
@ResponseBody
diff --git a/server/src/main/java/com/doumee/core/utils/HttpsUtil.java b/server/src/main/java/com/doumee/core/utils/HttpsUtil.java
index 2692602..e4688de 100644
--- a/server/src/main/java/com/doumee/core/utils/HttpsUtil.java
+++ b/server/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -1,9 +1,7 @@
package com.doumee.core.utils;
import javax.net.ssl.*;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
@@ -28,7 +26,80 @@
return connectionHttp(url, "POST", data, "application/json");
}
}
+ public static String uploadTempMedia(String urlString ,String fileUrl){
+ HttpsURLConnection conn= null;
+ try {
+ String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
+ // 鑾峰彇缃戠粶鍥剧墖
+ URL mediaUrl = new URL(fileUrl);
+ HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();
+ meidaConn.setDoOutput(true);
+ meidaConn.setRequestMethod("GET");
+ String result = null;
+ URL url=new URL(urlString);
+ conn=(HttpsURLConnection) url.openConnection();
+ conn.setRequestMethod("POST");//浠OST鏂瑰紡鎻愪氦琛ㄥ崟
+ conn.setDoInput(true);
+ conn.setDoOutput(true);
+ conn.setUseCaches(false);//POST鏂瑰紡涓嶈兘浣跨敤缂撳瓨
+ //璁剧疆璇锋眰澶翠俊鎭�
+ conn.setRequestProperty("Connection", "Keep-Alive");
+ conn.setRequestProperty("Charset", "UTF-8");
+ //璁剧疆杈圭晫
+ String BOUNDARY="----------"+System.currentTimeMillis();
+ conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
+ //璇锋眰姝f枃淇℃伅
+ //绗竴閮ㄥ垎
+ StringBuilder sb=new StringBuilder();
+ sb.append("--");//蹇呴』澶氫袱鏉¢亾
+ sb.append(BOUNDARY);
+ sb.append("\r\n");
+ sb.append("Content-Disposition: form-data;name=\"media\"; filename=\"" + fileName+"\"\r\n");
+
+ sb.append("Content-Type:application/octet-stream\r\n\r\n");
+ System.out.println("sb:"+sb);
+
+ //鑾峰緱杈撳嚭娴�
+ OutputStream out=new DataOutputStream(conn.getOutputStream());
+ //杈撳嚭琛ㄥご
+ out.write(sb.toString().getBytes("UTF-8"));
+ //鏂囦欢姝f枃閮ㄥ垎
+ //鎶婃枃浠朵互娴佺殑鏂瑰紡 鎺ㄩ�侀亾URL涓�
+ DataInputStream din=new DataInputStream(meidaConn.getInputStream());
+ int bytes=0;
+ byte[] buffer=new byte[1024];
+ while((bytes=din.read(buffer))!=-1){
+ out.write(buffer,0,bytes);
+ }
+ din.close();
+ //缁撳熬閮ㄥ垎
+ byte[] foot=("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");//瀹氫箟鏁版嵁鏈�鍚庡垎鍓茬嚎
+ out.write(foot);
+ out.flush();
+ out.close();
+ if(HttpsURLConnection.HTTP_OK==conn.getResponseCode()){
+ InputStream is = conn.getInputStream();
+ byte[] b = new byte[4096];
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length);
+ int len;
+ while ((len = is.read(b)) != -1) {
+ baos.write(b, 0, len);
+ }
+ is.close();
+ return baos.toString("utf-8");
+ }
+ return result;
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if(conn != null){
+ conn.disconnect();
+ }
+ }
+ return null;
+
+ }
public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){
HttpsURLConnection connection = null;
try {
@@ -92,29 +163,11 @@
try {
URL _url = new URL(url);
connection = (HttpURLConnection) _url.openConnection();
- connection.setRequestMethod(method);
connection.setDoOutput(true);
- connection.setDoInput(true);
- connection.setUseCaches(false);
- if(contentType != null){
- connection.setRequestProperty("Content-Type", contentType);
- }
- connection.connect();
- if(data != null){
- OutputStream outputStream = connection.getOutputStream();
- outputStream.write(data.getBytes("utf-8"));
- outputStream.close();
- }
- int responseCode = connection.getResponseCode();
- if (responseCode == HttpsURLConnection.HTTP_OK) {
- return connection.getInputStream();
- }
+ connection.setRequestMethod("GET");
+ return connection.getInputStream();
} catch (Exception e) {
e.printStackTrace();
- } finally {
- if(connection != null){
- connection.disconnect();
- }
}
return null;
}
diff --git a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java
index b8ffc47..b2bad0f 100644
--- a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java
+++ b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java
@@ -19,6 +19,8 @@
//鑾峰彇閮ㄩ棬鎴愬憳,access_token=璋冪敤鎺ュ彛鍑瘉,department_id=鑾峰彇鐨勯儴闂╥d,fetch_child= 鏄惁閫掑綊鑾峰彇瀛愰儴闂ㄤ笅闈㈢殑鎴愬憳锛�1-閫掑綊鑾峰彇锛�0-鍙幏鍙栨湰閮ㄩ棬
public final static String[] GET_DEPARTMENT_SIMPLE_LIST = new String[]{"/cgi-bin/user/simplelist?access_token=${accesstoken}&department_id=${departmentId}","鑾峰彇閮ㄩ棬鎴愬憳"};
public final static String[] GET_DEPARTMENT_USER_LIST = new String[]{"/cgi-bin/user/list?access_token=${accesstoken}&department_id=${departmentId}","鑾峰彇閮ㄩ棬鎴愬憳"};
+ public final static String[] GET_MEDIA = new String[]{"/cgi-bin/media/get?access_token=${accesstoken}&media_id=${media_id}","鑾峰彇涓存椂绱犳潗"};
+ public final static String[] UPLOAD_TEMP_MEDIA = new String[]{"/cgi-bin/media/upload?access_token=${accesstoken}&type=${type}","涓婁紶涓存椂绱犳潗"};
//鑾峰彇鎴愬憳璇︽儏,access_token=璋冪敤鎺ュ彛鍑瘉,userid=鎴愬憳UserID
public final static String[] GET_USER_DETAIL =new String[]{ "/cgi-bin/user/get?access_token=${accesstoken}&userid=${id}","鑾峰彇鎴愬憳璇︽儏"};
//鍙戦�佸簲鐢ㄦ秷鎭�,access_token=璋冪敤鎺ュ彛鍑瘉 POST璇锋眰锛�
diff --git a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java
index e965335..4170d18 100644
--- a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java
+++ b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java
@@ -13,7 +13,9 @@
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
+import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -112,12 +114,42 @@
return null;
}
+ public static InputStream getMediaInputstream(String token, String media) {
+ try {
+ String[] interfaceUrl = QywxConstant.GET_MEDIA;
+ String url = qyUtil.qiweiUrl+interfaceUrl[0].replace("${accesstoken}",token).replace("${media_id}",media);
+ log.error("浼佷笟寰俊涓存椂绱犳潗鑾峰彇url=========="+url);
+ return HttpsUtil.connectionInputsteam(url,"GET",null,null);
+ }catch (Exception e){
+ e.printStackTrace();
+ log.error("浼佷笟寰俊涓存椂绱犳潗鑾峰彇error=========="+e.getMessage());
+ }
+
+ return null;
+ }
public static QywxUserInfoResponse getUserInfo(String token,String id) {
String[] interfaceUrl = QywxConstant.GET_USER_DETAIL;
String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${id}",id);
QywxUserInfoResponse response = sendHttpRequestSingle(url,interfaceUrl[1],""
,new TypeReference<QywxUserInfoResponse>(){});
if(response.getErrcode()!=null && response.getErrcode() ==0){
+ return response;
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @param token
+ * @param type 濯掍綋鏂囦欢绫诲瀷锛屽垎鍒湁鍥剧墖锛坕mage锛夈�佽闊筹紙voice锛夈�佽棰戯紙video锛夛紝鏅�氭枃浠讹紙file锛�
+ * @return
+ */
+ public static QywxUploadMediaResponse uploadMedia(String token,String type,String imgurl) {
+ String[] interfaceUrl = QywxConstant.UPLOAD_TEMP_MEDIA;
+ String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${type}",type);
+ QywxUploadMediaResponse response = sendHttpRequestMultifile(url,interfaceUrl[1],imgurl
+ ,new TypeReference<QywxUploadMediaResponse>(){});
+ if(response !=null && response.getErrcode()!=null && response.getErrcode() ==0){
return response;
}
return null;
@@ -172,6 +204,23 @@
}
return null;
}
+ public static <T extends QywxBaseSingleResponse> T sendHttpRequestMultifile(String url, String name, String imgUrl , TypeReference<T> typeReference){
+ log.info("銆�"+name+"銆�================寮�濮�===="+ imgUrl);
+ if ( StringUtils.isNotBlank(url)) {
+ String res = null;
+ try {
+ res = HttpsUtil.uploadTempMedia (qyUtil.qiweiUrl+url,imgUrl);
+ log.info("浠庝紒寰帴鍙�:{}----涓婁紶涓存椂绱犳潗缁撴灉:{}",url,res);
+ JSONObject jsonObject = JSONObject.parseObject(res);
+ T result = JSONObject.parseObject(res, typeReference.getType());
+ return result;
+ }catch (Exception e){
+ e.printStackTrace();
+ log.error("銆�"+name+"銆�================澶辫触===="+ imgUrl);
+ }
+ }
+ return null;
+ }
public static <T extends QywxBaseSingleResponse> T sendHttpRequestSingle(String url, String name, String param, TypeReference<T> typeReference){
log.info("銆�"+name+"銆�================寮�濮�===="+ JSONObject.toJSONString(param));
if ( StringUtils.isNotBlank(url)) {
diff --git a/server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java b/server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java
new file mode 100644
index 0000000..42d01fb
--- /dev/null
+++ b/server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java
@@ -0,0 +1,22 @@
+package com.doumee.core.utils.qiyeweixin.model.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("浼佷笟寰俊涓婁紶绱犳潗杩斿洖鍙傛暟")
+public class QywxUploadMediaResponse extends QywxBaseSingleResponse {
+ @ApiModelProperty(value = "濯掍綋鏂囦欢绫诲瀷锛屽垎鍒湁鍥剧墖锛坕mage锛夈�佽闊筹紙voice锛夈�佽棰戯紙video锛夛紝鏅�氭枃浠�(file)")
+ private String type;//
+ @ApiModelProperty(value = "濯掍綋鏂囦欢涓婁紶鍚庤幏鍙栫殑鍞竴鏍囪瘑锛�3澶╁唴鏈夋晥")
+ private String media_id ;//
+ @ApiModelProperty(value = "濯掍綋鏂囦欢涓婁紶鏃堕棿鎴�")
+ private String created_at;//
+}
diff --git a/server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java b/server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java
new file mode 100644
index 0000000..58a5670
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.business.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("浼佷笟寰俊绱犳潗涓婁紶鍏ュ弬")
+public class WebQwUploadDto {
+ @ApiModelProperty(value = "绱犳潗缂栫爜")
+ private List<String> mediaIds;
+ @ApiModelProperty(value = "绱犳潗瀛樻斁鐩綍瀛楀吀缂栫爜")
+ private String folder;
+
+}
--
Gitblit v1.9.3