From bde8258f7de3dfc5cbf0fc59f2b74ed0fd073df7 Mon Sep 17 00:00:00 2001
From: shikeying <shikeying@163.com>
Date: 星期日, 31 三月 2024 11:11:20 +0800
Subject: [PATCH] 添加milvus代码示例

---
 deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java               |  217 +++++++++++++++++++++
 deploy-jar-template/pom.xml                                                          |   13 +
 iplatform-pay-server/doc/支付中台设计.EAP                                                  |    0 
 iplatform-file-server/src/main/java/com/iplatform/file/FileEngineFactory.java        |    5 
 iplatform-file-server/src/main/java/com/iplatform/file/util/FileStoreUtils.java      |    2 
 deploy-jar-template/src/main/resources/application-dev.yml                           |    6 
 deploy-jar-template/src/main/java/com/iplatform/milvus/MilvusEngine.java             |  152 +++++++++++++++
 deploy-jar-template/src/main/java/com/iplatform/milvus/ParamList.java                |   35 +++
 deploy-jar-template/src/test/java/com/iplatform/milvus/TestMilvus.java               |   37 +++
 deploy-jar-template/src/main/java/com/iplatform/milvus/EventVo.java                  |   54 +++++
 deploy-jar-template/src/main/java/com/iplatform/milvus/service/EventServiceImpl.java |   46 ++++
 11 files changed, 564 insertions(+), 3 deletions(-)

diff --git a/deploy-jar-template/pom.xml b/deploy-jar-template/pom.xml
index 1a2533b..75ada2a 100644
--- a/deploy-jar-template/pom.xml
+++ b/deploy-jar-template/pom.xml
@@ -17,6 +17,13 @@
     </properties>
 
     <dependencies>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <dependency>
             <groupId>com.iplatform</groupId>
             <artifactId>iplatform-base</artifactId>
@@ -198,6 +205,12 @@
 <!--            <artifactId>iplatform-report</artifactId>-->
 <!--        </dependency>-->
 
+        <!-- 2024-03-28 娴嬭瘯涓�閿~宸ュ崟锛岄渶瑕佽亰澶╁垎鏋愮浉浼煎害 -->
+        <dependency>
+            <groupId>com.walkersoft</groupId>
+            <artifactId>walker-support-milvus</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java b/deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java
new file mode 100644
index 0000000..79483b2
--- /dev/null
+++ b/deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java
@@ -0,0 +1,217 @@
+package com.iplatform.api;
+
+import com.iplatform.base.SystemController;
+import com.iplatform.milvus.EventVo;
+import com.iplatform.milvus.MilvusEngine;
+import com.iplatform.milvus.ParamList;
+import com.iplatform.milvus.service.EventServiceImpl;
+import com.walker.infrastructure.utils.StringUtils;
+import com.walker.web.ResponseValue;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+@RequestMapping("/test/milvus")
+public class MilvusChatApi extends SystemController {
+
+    private EventServiceImpl eventService;
+    private RestTemplate restTemplate;
+    private MilvusEngine milvusEngine;
+
+    private Long existId = 4048L;
+    private boolean isBreak = false;
+
+    private static final String URL_EMBEDDING = "http://120.26.128.84:7003/ai/text/embedding";
+    private static final String URL_MILVUS = "120.26.128.84";
+
+    @Autowired
+    public MilvusChatApi(EventServiceImpl eventService, RestTemplate restTemplate){
+        this.eventService = eventService;
+        this.restTemplate = restTemplate;
+        if(this.milvusEngine == null){
+            MilvusEngine engine = new MilvusEngine(URL_MILVUS, 19530);
+            this.milvusEngine = engine;
+            logger.info("milvus engine ok!");
+        }
+    }
+
+    @RequestMapping("/embedding")
+    public ResponseValue testHttpEmbedding(){
+        List<EventVo> data = new ArrayList(8);
+        EventVo eventVo = new EventVo();
+        eventVo.setContent("绗竴鍙�");
+        data.add(eventVo);
+
+        eventVo = new EventVo();
+        eventVo.setContent("绗簩鍙�");
+        data.add(eventVo);
+
+        boolean success = this.acquireEmbedding(data);
+        this.milvusEngine.insertTestData();
+
+        return ResponseValue.success("缁撴灉鏄細" + success);
+    }
+
+    @RequestMapping("/write")
+    public ResponseValue testWriteMilvus(){
+        Collection<EventVo> eventVoList = this.acquireEventVoList();
+        if(eventVoList == null){
+            return ResponseValue.error("娌℃湁鍔犺浇鍒版暟鎹�");
+        }
+        logger.info("鍔犺浇浜� event vo: {}涓�", eventVoList.size());
+
+        new Thread(new WriteTask(eventVoList)).start();
+        return ResponseValue.success();
+    }
+
+    @RequestMapping("/query")
+    public ResponseValue testQueryMilvus(String text){
+
+        return ResponseValue.success();
+    }
+
+    private boolean acquireEmbedding(List<EventVo> batchData){
+        ParamList paramList = new ParamList();
+        for(EventVo eventVo : batchData){
+            paramList.add(eventVo.getContent());
+        }
+        try{
+            ResponseEntity<ResponseValue> responseEntity = this.restTemplate.postForEntity(URL_EMBEDDING, paramList, ResponseValue.class);
+            if(responseEntity.getStatusCode() == HttpStatus.OK){
+                List<List<Float>> data = (List<List<Float>>)responseEntity.getBody().getData();
+//                double[] one = null;
+                List<Float> vector = null;
+                for(int i=0; i<data.size(); i++){
+                    vector = data.get(i);
+//                    one = new double[vector.size()];
+//                    for(int j=0; j< vector.size(); j++){
+//                        one[j] = vector.get(j);
+//                    }
+
+//                    logger.debug("data = {}", vector);
+//                    logger.debug("class type = {}", vector.getClass().getName());
+                    batchData.get(i).setEmbedding(this.transfer2FloatList(vector));
+                }
+                return true;
+            } else {
+                logger.error("http 杩斿洖閿欒锛歿}", responseEntity.getBody());
+            }
+            return false;
+        } catch (Exception cause){
+            logger.error("鑾峰彇鍚戦噺鍑虹幇閿欒锛歿}" + cause.getMessage(), cause);
+            return false;
+        }
+    }
+
+    private List<Float> transfer2FloatList(List<?> list){
+        List<Float> vector = new ArrayList<>(768);
+        for(int i=0; i<list.size(); i++){
+            vector.add(Float.parseFloat(list.get(i).toString()));
+        }
+        return vector;
+    }
+
+    private class WriteTask implements Runnable{
+
+        private Collection<EventVo> eventVoList;
+
+        public WriteTask(Collection<EventVo> eventVoList){
+            this.eventVoList = eventVoList;
+        }
+
+        @Override
+        public void run() {
+            logger.info(".......... start task ...");
+
+            // 澶嶄綅鐘舵��
+            isBreak = false;
+
+            int count = 0;
+            List<EventVo> batchData = new ArrayList<>();
+            for(EventVo eventVo : this.eventVoList){
+                // 宸插瓨鍦ㄤ笂娆″姞杞借褰曪紝宸插啓鍏ョ殑涓嶅湪閲嶆柊澶勭悊
+                if(existId != null && eventVo.getId() < existId.longValue()){
+                    continue;
+                }
+
+                if(isBreak){
+                    break;
+                }
+
+                if(count == 0){
+                    logger.info("1) 寮�濮嬶紙鎴栫户缁級閲囬泦绗� {} 璁板綍", eventVo.getId());
+                }
+
+                if(count >= 8){
+                    // 瑙﹀彂涓�娆℃壒閲忓啓鍏�
+                    logger.info("2) 瑙﹀彂涓�娆¤皟鐢細{}", batchData.get(7).getId());
+                    try {
+                        boolean successEmbedding = acquireEmbedding(batchData);
+                        if(!successEmbedding){
+                            logger.error("鑾峰彇鍚戦噺澶辫触锛屼换鍔$粨鏉�");
+                            break;
+                        }
+
+                        // 鑾峰彇鍚戦噺锛屽啓鍏ユ暟鎹簱
+                        milvusEngine.insertEventVoList(batchData);
+
+                    } catch (Exception ex){
+                        logger.error("error = " + ex.getMessage(), ex);
+//                        existId = eventVo.getId();
+                        isBreak = true;
+                        logger.error("3) 閲囬泦浠诲姟寮傚父锛� 褰撳墠 id = {}", existId == null ? "" : existId);
+                        break;
+
+                    } finally {
+                        try {
+                            TimeUnit.SECONDS.sleep(1);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
+                    }
+
+                    // 娓呯悊鏈鏁版嵁
+                    batchData.clear();
+                    count = 0;
+                }
+                batchData.add(eventVo);
+                count ++;
+            }
+            logger.info(".......... end task ...");
+        }
+    }
+
+    private Collection<EventVo> acquireEventVoList(){
+        List<EventVo> data = null;
+//        if(this.isBreak){
+//            data = this.eventService.queryEventAll(existId);
+//        } else {
+//            data = this.eventService.queryEventAll(null);
+//        }
+        data = this.eventService.queryEventAll(null);
+        if(StringUtils.isEmptyList(data)){
+            return null;
+        }
+
+        // 杩囨护鎺� content 閲嶅鐨勬暟鎹褰�
+        LinkedHashMap<String, EventVo> cache = new LinkedHashMap();
+        EventVo temp = null;
+        for(EventVo e : data){
+            temp = cache.get(e.getContent());
+            if(temp == null){
+                cache.put(e.getContent(), e);
+            }
+        }
+        return cache.values();
+    }
+}
diff --git a/deploy-jar-template/src/main/java/com/iplatform/milvus/EventVo.java b/deploy-jar-template/src/main/java/com/iplatform/milvus/EventVo.java
new file mode 100644
index 0000000..bfa4b0c
--- /dev/null
+++ b/deploy-jar-template/src/main/java/com/iplatform/milvus/EventVo.java
@@ -0,0 +1,54 @@
+package com.iplatform.milvus;
+
+import java.util.List;
+
+public class EventVo {
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public List<Float> getEmbedding() {
+        return embedding;
+    }
+
+    public void setEmbedding(List<Float> embedding) {
+        this.embedding = embedding;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    private long id;
+    private String title;
+    private String content;
+//    private double[] embedding;
+//    private List<Double> embedding;
+    private List<Float> embedding;
+    private String answer;  // 涓嶅瓨鍏ilvus锛屼粎鍦ㄧ紦瀛樹腑鐢ㄤ簬杩斿洖闂瓟缁撴灉
+}
diff --git a/deploy-jar-template/src/main/java/com/iplatform/milvus/MilvusEngine.java b/deploy-jar-template/src/main/java/com/iplatform/milvus/MilvusEngine.java
new file mode 100644
index 0000000..8cabab4
--- /dev/null
+++ b/deploy-jar-template/src/main/java/com/iplatform/milvus/MilvusEngine.java
@@ -0,0 +1,152 @@
+package com.iplatform.milvus;
+
+import com.walker.infrastructure.utils.StringUtils;
+import com.walker.support.milvus.DataSet;
+import com.walker.support.milvus.DataType;
+import com.walker.support.milvus.FieldType;
+import com.walker.support.milvus.MetricType;
+import com.walker.support.milvus.OperateService;
+import com.walker.support.milvus.Table;
+import com.walker.support.milvus.engine.DefaultOperateService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class MilvusEngine {
+
+    protected final transient Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    public MilvusEngine(String ip, int port){
+        DefaultOperateService service = new DefaultOperateService();
+        service.connect(ip, port);
+        this.operateService = service;
+        logger.info("connect milvus: {}:{}", ip, port);
+    }
+
+    public void close(){
+        if(this.operateService != null){
+            this.operateService.close();
+        }
+    }
+
+    /**
+     * 鍒涘缓琛細娴嬭瘯浠庤亰澶╀竴閿彁鍙栧伐鍗曞唴瀹逛娇鐢ㄣ��
+     * <pre>
+     *     1) 浠庡巻鍙插伐鍗曟暟鎹腑锛屾敹闆嗙敤鎴锋彁闂唴瀹癸紝鏁寸悊鍒拌〃涓�
+     *     2) 鎶婅繖浜涙暟鎹�氳繃鍚戦噺杞寲锛屽啓鍏ilvus鏁版嵁搴撱��
+     * </pre>
+     * @date 2024-03-28
+     */
+    public void createChatSimilarTable(){
+        Table chatSimilarTable = new Table();
+        chatSimilarTable.setCollectionName("chat_similar");
+        chatSimilarTable.setDescription("鑱婂ぉ鎻愬彇宸ュ崟鎽樿鍘嗗彶鏁版嵁");
+        chatSimilarTable.setShardsNum(1);
+        chatSimilarTable.setDimension(768); // 杩欎釜鏄牴鎹娇鐢ㄥ悜閲忔ā鍨嬬淮搴﹀畾鐨�
+
+        // 璁剧疆瀛楁
+        FieldType id = FieldType.newBuilder()
+                .withName("id").withPrimaryKey(true).withMaxLength(18).withDataType(DataType.Long).build();
+        FieldType title = FieldType.newBuilder()
+                .withName("title").withPrimaryKey(false).withMaxLength(180).withDataType(DataType.VarChar).build();
+        FieldType content = FieldType.newBuilder()
+                .withName("content").withPrimaryKey(false).withMaxLength(255).withDataType(DataType.VarChar).build();
+        FieldType answer = FieldType.newBuilder()
+                .withName("answer").withPrimaryKey(false).withMaxLength(255).withDataType(DataType.VarChar).build();
+        FieldType embedding = FieldType.newBuilder()
+                .withName("embedding").withPrimaryKey(false).withDataType(DataType.FloatVector).withDimension(768).build();
+
+        List<FieldType> fieldTypeList = new ArrayList<>(8);
+        fieldTypeList.add(id);
+        fieldTypeList.add(title);
+        fieldTypeList.add(content);
+        fieldTypeList.add(answer);
+        fieldTypeList.add(embedding);
+        chatSimilarTable.setFieldTypes(fieldTypeList);
+
+        this.operateService.createTable(chatSimilarTable);
+        logger.info("鍒涘缓浜� table = {}", chatSimilarTable.getCollectionName());
+
+        // 鍒涘缓绱㈠紩
+        this.operateService.createIndex(chatSimilarTable.getCollectionName()
+                , "embedding", "HNSW", "{\"nlist\":16384, \"efConstruction\":128, \"M\":8}", MetricType.NLP);
+        logger.info("鍒涘缓浜� index = {}", chatSimilarTable.getCollectionName() + "_index");
+    }
+
+    public void dropChatSimilarTable(){
+        this.operateService.dropTable("chat_similar");
+    }
+
+    public void insertTestData(){
+        DataSet dataSet = new DataSet();
+        dataSet.setTableName("chat_similar");
+
+        List<List<Float>> vectorList = new ArrayList<>();
+        vectorList.add(Arrays.asList(mockVector));
+        vectorList.add(Arrays.asList(mockVector));
+
+        Map<String, List<?>> fieldMap = new HashMap();
+        fieldMap.put("id", Arrays.asList(new Long[]{1L, 2L}));
+        fieldMap.put("title", Arrays.asList(new String[]{"绗竴涓爣棰�", "绗簩涓爣棰�"}));
+        fieldMap.put("content", Arrays.asList(new String[]{"绗竴涓唴瀹�", "2222"}));
+        fieldMap.put("answer", Arrays.asList(new String[]{"绗竴涓瓟妗�", "22222222"}));
+        fieldMap.put("embedding", vectorList);
+        dataSet.setFields(fieldMap);
+        this.operateService.insertDataSet(dataSet);
+        logger.info("鍐欏叆浜嗘祴璇曟暟鎹�: {}", dataSet);
+    }
+
+    public void insertEventVoList(List<EventVo> batchData){
+        if(StringUtils.isEmptyList(batchData)){
+            return;
+        }
+        List<Long> ids = new ArrayList<>(8);
+        List<String> titles = new ArrayList<>(8);
+        List<String> contents = new ArrayList<>(8);
+        List<String> answers = new ArrayList<>(8);
+        List<List<Float>> vectorSet = new ArrayList<>(8);
+
+        for(EventVo vo : batchData){
+            ids.add(vo.getId());
+            vectorSet.add(vo.getEmbedding());
+            if(StringUtils.isNotEmpty(vo.getTitle())){
+                titles.add(vo.getTitle());
+            } else {
+                titles.add("none");
+            }
+            if(StringUtils.isNotEmpty(vo.getAnswer())){
+                answers.add(vo.getAnswer());
+            } else {
+                answers.add("none");
+            }
+            if(vo.getContent().length() > 200){
+                contents.add(vo.getContent().substring(0, 200));
+            } else {
+                contents.add(vo.getContent());
+            }
+        }
+
+        DataSet dataSet = new DataSet();
+        dataSet.setTableName("chat_similar");
+
+        Map<String, List<?>> fieldMap = new HashMap();
+        fieldMap.put("id", ids);
+        fieldMap.put("title", titles);
+        fieldMap.put("content", contents);
+        fieldMap.put("answer", answers);
+        fieldMap.put("embedding", vectorSet);
+        dataSet.setFields(fieldMap);
+        this.operateService.insertDataSet(dataSet);
+        logger.info("鍐欏叆浜�: {}", ids);
+    }
+
+    private OperateService operateService;
+
+//    private Double[] mockVector = new Double[]{-0.051114246249198914, 0.889954432};
+    private Float[] mockVector = new Float[]{-0.051114246249198914f, 0.889954432f};
+}
diff --git a/deploy-jar-template/src/main/java/com/iplatform/milvus/ParamList.java b/deploy-jar-template/src/main/java/com/iplatform/milvus/ParamList.java
new file mode 100644
index 0000000..52dad6b
--- /dev/null
+++ b/deploy-jar-template/src/main/java/com/iplatform/milvus/ParamList.java
@@ -0,0 +1,35 @@
+package com.iplatform.milvus;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 璇锋眰鍙傛暟锛岃皟鐢ㄥ悜閲忕敓鎴愭湇鍔°��
+ * @date 2024-03-29
+ */
+public class ParamList {
+
+    public void add(String text){
+        if(this.list == null){
+            this.list = new ArrayList<>(8);
+        }
+        this.list.add(text);
+    }
+
+    public List<String> getList() {
+        return list;
+    }
+
+    public void setList(List<String> list) {
+        this.list = list;
+    }
+
+    private List<String> list;
+
+    @Override
+    public String toString() {
+        return "ParamList{" +
+                "list=" + list +
+                '}';
+    }
+}
diff --git a/deploy-jar-template/src/main/java/com/iplatform/milvus/service/EventServiceImpl.java b/deploy-jar-template/src/main/java/com/iplatform/milvus/service/EventServiceImpl.java
new file mode 100644
index 0000000..eb347ce
--- /dev/null
+++ b/deploy-jar-template/src/main/java/com/iplatform/milvus/service/EventServiceImpl.java
@@ -0,0 +1,46 @@
+package com.iplatform.milvus.service;
+
+import com.iplatform.milvus.EventVo;
+import com.walker.jdbc.service.BaseServiceImpl;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Service;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+@Service
+public class EventServiceImpl extends BaseServiceImpl {
+
+    private final EventVoMapper eventVoMapper = new EventVoMapper();
+
+    public List<EventVo> queryEventAll(Long existId){
+        if(existId == null){
+            return this.select("select * from event_history order by id asc", new Object[]{}, this.eventVoMapper);
+        } else {
+            return this.select("select * from event_history where id > ? order by id asc", new Object[]{existId}, this.eventVoMapper);
+        }
+    }
+
+    private static class EventVoMapper implements RowMapper<EventVo> {
+        @Override
+        public EventVo mapRow(ResultSet rs, int rowNum) throws SQLException {
+            EventVo e = new EventVo();
+            e.setId(rs.getLong("id"));
+            e.setContent(rs.getString("content"));
+            String title = rs.getString("title");
+            if(title.length() > 200){
+                title = title.substring(0, 200);
+            }
+            e.setTitle(title);
+            if(rs.getObject("answer") != null){
+                String answer = rs.getString("answer");
+                if(answer.length() > 180){
+                    answer = answer.substring(0,180);
+                }
+                e.setAnswer(answer);
+            }
+            return e;
+        }
+    }
+}
diff --git a/deploy-jar-template/src/main/resources/application-dev.yml b/deploy-jar-template/src/main/resources/application-dev.yml
index e4c35a8..d0d3ca4 100644
--- a/deploy-jar-template/src/main/resources/application-dev.yml
+++ b/deploy-jar-template/src/main/resources/application-dev.yml
@@ -424,11 +424,11 @@
     # 绌洪棽杩炴帴鏁伴噺锛岄粯璁わ細200涓�
     max-idle-connections: 200
     # 杩炴帴瓒呮椂锛岄粯璁わ細2绉�
-    connect-timeout-seconds: 2
+    connect-timeout-seconds: 20
     # 璇昏秴鏃讹紝榛樿3绉�
-    read-timeout-seconds: 3
+    read-timeout-seconds: 30
     # 鍐欒秴鏃讹紝榛樿3绉�
-    write-timeout-seconds: 3
+    write-timeout-seconds: 30
 
   # 闆嗙兢鏀寔鐩稿叧閰嶇疆锛�2023-09-29
   lb:
diff --git a/deploy-jar-template/src/test/java/com/iplatform/milvus/TestMilvus.java b/deploy-jar-template/src/test/java/com/iplatform/milvus/TestMilvus.java
new file mode 100644
index 0000000..883114a
--- /dev/null
+++ b/deploy-jar-template/src/test/java/com/iplatform/milvus/TestMilvus.java
@@ -0,0 +1,37 @@
+package com.iplatform.milvus;
+
+import org.junit.Test;
+import org.springframework.web.client.RestTemplate;
+
+public class TestMilvus {
+
+    /**
+     * 鍒涘缓鑱婂ぉ涓彁鍙栧伐鍗曟憳瑕佸姛鑳斤紝milvus娴嬭瘯琛ㄥ垱寤恒��
+     * <p>绗竴姝ワ細鍒涘缓琛ㄥ拰绱㈠紩</p>
+     */
+//    @Test
+    public void createTable(){
+        this.acquireMilvusEngine();
+        this.milvusEngine.createChatSimilarTable();
+    }
+
+    /**
+     * 娴嬭瘯锛氬啓鍏ヤ竴涓ā鎷熸暟鎹�
+     */
+//    @Test
+    public void insertTestMockData(){
+        this.acquireMilvusEngine();
+        this.milvusEngine.insertTestData();
+    }
+
+
+    private void acquireMilvusEngine(){
+        if(this.milvusEngine == null){
+            MilvusEngine engine = new MilvusEngine("120.26.128.84", 19530);
+            this.milvusEngine = engine;
+        }
+    }
+
+    private RestTemplate restTemplate = new RestTemplate();
+    private MilvusEngine milvusEngine;
+}
diff --git a/iplatform-file-server/src/main/java/com/iplatform/file/FileEngineFactory.java b/iplatform-file-server/src/main/java/com/iplatform/file/FileEngineFactory.java
index d4e2d0a..d1d64bc 100644
--- a/iplatform-file-server/src/main/java/com/iplatform/file/FileEngineFactory.java
+++ b/iplatform-file-server/src/main/java/com/iplatform/file/FileEngineFactory.java
@@ -256,6 +256,11 @@
         if(StringUtils.isNotEmpty(fileUrlPrefixConfig)){
             FileStoreUtils.fileStoreTypeUrlPrefix.put(FileStoreType.OssAli.getIndex(), fileUrlPrefixConfig);
         }
+        // 2024-02-23 s3瀵硅薄涓婁紶
+        fileUrlPrefixConfig = this.getFileUrlPrefix(FileStoreType.OssAws.getIndex());
+        if(StringUtils.isNotEmpty(fileUrlPrefixConfig)){
+            FileStoreUtils.fileStoreTypeUrlPrefix.put(FileStoreType.OssAws.getIndex(), fileUrlPrefixConfig);
+        }
     }
 
     /**
diff --git a/iplatform-file-server/src/main/java/com/iplatform/file/util/FileStoreUtils.java b/iplatform-file-server/src/main/java/com/iplatform/file/util/FileStoreUtils.java
index 9111c49..17ef26e 100644
--- a/iplatform-file-server/src/main/java/com/iplatform/file/util/FileStoreUtils.java
+++ b/iplatform-file-server/src/main/java/com/iplatform/file/util/FileStoreUtils.java
@@ -38,6 +38,8 @@
             uploadUrl = ArgumentsConstants.CONFIG_AL_UPLOAD_URL;
         } else if(fileStoreType.equals("4") || fileStoreType.equals(FileStoreType.INDEX_OSS_TX)){
             uploadUrl = ArgumentsConstants.CONFIG_TX_UPLOAD_URL;
+        } else if(fileStoreType.equals("5") || fileStoreType.equals(FileStoreType.INDEX_OSS_AWS)){
+            uploadUrl = ArgumentsConstants.CONFIG_S3_UPLOAD_URL;
         } else if(fileStoreType.equals(FileStoreType.INDEX_FTP)){
 //            throw new UnsupportedOperationException("ftp瀛樺偍鏂瑰紡鏈缃弬鏁帮紒");
             uploadUrl = ArgumentsConstants.CONFIG_FTP_UPLOAD_URL;
diff --git "a/iplatform-pay-server/doc/\346\224\257\344\273\230\344\270\255\345\217\260\350\256\276\350\256\241.EAP" "b/iplatform-pay-server/doc/\346\224\257\344\273\230\344\270\255\345\217\260\350\256\276\350\256\241.EAP"
index cab22ac..8f3562e 100644
--- "a/iplatform-pay-server/doc/\346\224\257\344\273\230\344\270\255\345\217\260\350\256\276\350\256\241.EAP"
+++ "b/iplatform-pay-server/doc/\346\224\257\344\273\230\344\270\255\345\217\260\350\256\276\350\256\241.EAP"
Binary files differ

--
Gitblit v1.9.1