Commit 179a69d8 authored by Steven杜宇's avatar Steven杜宇

// AI

parent e669ea20
......@@ -115,9 +115,7 @@ target 'galaxy' do
pod 'AliyunLogProducer', '4.3.3'
#加密
pod 'xxtea', '1.0.2'
#Realm
pod 'RealmSwift', '20.0.0'
pod 'Realm', '20.0.0'
end
post_install do |installer|
......
......@@ -92,7 +92,6 @@
045C0FD22D12CA5F00BD2DC0 /* YHMineSchemeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0C622D12CA5E00BD2DC0 /* YHMineSchemeViewController.swift */; };
045C0FD32D12CA5F00BD2DC0 /* YHFamilyRequestViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0DB02D12CA5E00BD2DC0 /* YHFamilyRequestViewModel.swift */; };
045C0FD42D12CA5F00BD2DC0 /* YHHKRecordsLastStayCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0CA22D12CA5E00BD2DC0 /* YHHKRecordsLastStayCell.swift */; };
045C0FD52D12CA5F00BD2DC0 /* YHAIChatDataBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0A302D12CA5E00BD2DC0 /* YHAIChatDataBaseModel.swift */; };
045C0FD62D12CA5F00BD2DC0 /* YHCertificateEditSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0C162D12CA5E00BD2DC0 /* YHCertificateEditSheetView.swift */; };
045C0FD72D12CA5F00BD2DC0 /* YHCardMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0A462D12CA5E00BD2DC0 /* YHCardMessageCell.swift */; };
045C0FD82D12CA5F00BD2DC0 /* YHPreviewMainApplicantInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0E1B2D12CA5E00BD2DC0 /* YHPreviewMainApplicantInfoViewController.swift */; };
......@@ -754,7 +753,6 @@
045C12692D12CA5F00BD2DC0 /* YHResignGuidelinesExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0D142D12CA5E00BD2DC0 /* YHResignGuidelinesExampleViewController.swift */; };
045C126A2D12CA5F00BD2DC0 /* YHPlayerTransitionAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0E862D12CA5E00BD2DC0 /* YHPlayerTransitionAnimator.swift */; };
045C126B2D12CA5F00BD2DC0 /* YHLookResignResultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0CD42D12CA5E00BD2DC0 /* YHLookResignResultViewController.swift */; };
045C126C2D12CA5F00BD2DC0 /* YHAIChatDataBaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0A2F2D12CA5E00BD2DC0 /* YHAIChatDataBaseManager.swift */; };
045C126D2D12CA5F00BD2DC0 /* YHLookResignGuideLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0CD92D12CA5E00BD2DC0 /* YHLookResignGuideLineView.swift */; };
045C126E2D12CA5F00BD2DC0 /* YHHeadImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0EEA2D12CA5E00BD2DC0 /* YHHeadImageViewController.swift */; };
045C126F2D12CA5F00BD2DC0 /* YHTravelModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045C0A6F2D12CA5E00BD2DC0 /* YHTravelModel.swift */; };
......@@ -1165,8 +1163,6 @@
045C0A2B2D12CA5E00BD2DC0 /* YHAIRobotChatViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIRobotChatViewController.swift; sourceTree = "<group>"; };
045C0A2C2D12CA5E00BD2DC0 /* YHAIServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIServiceListViewController.swift; sourceTree = "<group>"; };
045C0A2D2D12CA5E00BD2DC0 /* YHAITabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAITabViewController.swift; sourceTree = "<group>"; };
045C0A2F2D12CA5E00BD2DC0 /* YHAIChatDataBaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIChatDataBaseManager.swift; sourceTree = "<group>"; };
045C0A302D12CA5E00BD2DC0 /* YHAIChatDataBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIChatDataBaseModel.swift; sourceTree = "<group>"; };
045C0A312D12CA5E00BD2DC0 /* YHAIHistoryMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIHistoryMessage.swift; sourceTree = "<group>"; };
045C0A322D12CA5E00BD2DC0 /* YHAIListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIListModel.swift; sourceTree = "<group>"; };
045C0A332D12CA5E00BD2DC0 /* YHAIMessageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIMessageModel.swift; sourceTree = "<group>"; };
......@@ -2353,8 +2349,6 @@
045C0A352D12CA5E00BD2DC0 /* M */ = {
isa = PBXGroup;
children = (
045C0A2F2D12CA5E00BD2DC0 /* YHAIChatDataBaseManager.swift */,
045C0A302D12CA5E00BD2DC0 /* YHAIChatDataBaseModel.swift */,
045C0A312D12CA5E00BD2DC0 /* YHAIHistoryMessage.swift */,
045C0A322D12CA5E00BD2DC0 /* YHAIListModel.swift */,
045C0A332D12CA5E00BD2DC0 /* YHAIMessageModel.swift */,
......@@ -6250,7 +6244,6 @@
045C0FD22D12CA5F00BD2DC0 /* YHMineSchemeViewController.swift in Sources */,
045C0FD32D12CA5F00BD2DC0 /* YHFamilyRequestViewModel.swift in Sources */,
045C0FD42D12CA5F00BD2DC0 /* YHHKRecordsLastStayCell.swift in Sources */,
045C0FD52D12CA5F00BD2DC0 /* YHAIChatDataBaseModel.swift in Sources */,
045C0FD62D12CA5F00BD2DC0 /* YHCertificateEditSheetView.swift in Sources */,
045C0FD72D12CA5F00BD2DC0 /* YHCardMessageCell.swift in Sources */,
045C0FD82D12CA5F00BD2DC0 /* YHPreviewMainApplicantInfoViewController.swift in Sources */,
......@@ -6923,7 +6916,6 @@
045C12692D12CA5F00BD2DC0 /* YHResignGuidelinesExampleViewController.swift in Sources */,
045C126A2D12CA5F00BD2DC0 /* YHPlayerTransitionAnimator.swift in Sources */,
045C126B2D12CA5F00BD2DC0 /* YHLookResignResultViewController.swift in Sources */,
045C126C2D12CA5F00BD2DC0 /* YHAIChatDataBaseManager.swift in Sources */,
045C126D2D12CA5F00BD2DC0 /* YHLookResignGuideLineView.swift in Sources */,
045C126E2D12CA5F00BD2DC0 /* YHHeadImageViewController.swift in Sources */,
045C126F2D12CA5F00BD2DC0 /* YHTravelModel.swift in Sources */,
......
......@@ -73,8 +73,6 @@ class YHAIMainChatViewController: YHBaseViewController {
gk_navigationBar.isHidden = true
view.backgroundColor = .clear
IQKeyboardManager.shared.isEnabled = false
let historyMsgs = YHAIChatDataBaseManager.shared.readHistoryUIMessages()
messages.append(contentsOf: historyMsgs)
gk_navTitle = "AI对话"
self.view.addSubview(self.tableView)
......
//
// YHAIChatDataBaseManager.swift
// galaxy
//
// Created by Dufet on 2024/12/2.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import Realm
import RealmSwift
class YHAIChatDataBaseManager {
static let shared = YHAIChatDataBaseManager()
let dbName = "AI_CHAT_DB.realm"
// 如果要存储的数据模型属性发生变化,需要配置当前版本号比之前大
let dbVersion: UInt64 = 1
init() {
configDataBase()
}
private func configDataBase() {
let docPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0] as String
let dbPath = docPath.appending("/\(dbName)")
let config = Realm.Configuration(fileURL: URL.init(string: dbPath), inMemoryIdentifier: nil, encryptionKey: nil, readOnly: false, schemaVersion: dbVersion, migrationBlock: { (migration, oldSchemaVersion) in
}, deleteRealmIfMigrationNeeded: false, shouldCompactOnLaunch: nil, objectTypes: nil)
Realm.Configuration.defaultConfiguration = config
Realm.asyncOpen { result in
switch result {
case let .success(succeed):
print("Realm 服务器配置成功!")
break
case let .failure(error):
print("Realm 数据库配置失败:\(error.localizedDescription)")
break
}
}
}
private func getDB() -> Realm {
let docPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0] as String
let dbPath = docPath.appending("/\(dbName)")
/// 传入路径会自动创建数据库
let defaultRealm = try! Realm(fileURL: URL.init(string: dbPath)!)
return defaultRealm
}
func addDBMessages(_ messages: [YHAIChatDBMessage]) {
// 获取 Realm 实例
let defaultRealm = self.getDB()
// 开始写入事务
for message in messages {
let students = getDBMessageBy(uuid: message.uuid)
try! defaultRealm.write {
// 将新对象添加到 Realm 数据库
defaultRealm.add(message, update: students.count > 0 ? .modified : .all)
}
}
}
func addDBMessage(_ message: YHAIChatDBMessage) -> Void {
let defaultRealm = self.getDB()
try! defaultRealm.write {
defaultRealm.add(message)
}
print(defaultRealm.configuration.fileURL ?? "")
}
/// 获取 所保存的消息
func getDBMessages() -> Results<YHAIChatDBMessage> {
let defaultRealm = self.getDB()
return defaultRealm.objects(YHAIChatDBMessage.self)
}
func getDBMessageBy(uuid: String) -> Results<YHAIChatDBMessage> {
return self.readDBMessages("uuid = '\(uuid)'")
}
func readDBMessages(_ predicate: String) -> Results<YHAIChatDBMessage> {
let defaultRealm = self.getDB()
print(defaultRealm.configuration.fileURL ?? "")
let predicate = NSPredicate(format: predicate)
let results = defaultRealm.objects(YHAIChatDBMessage.self)
return results.filter(predicate)
}
func readHistoryUIMessages() -> [YHAIChatMessage] {
let result = YHAIChatDataBaseManager.shared.getDBMessages()
var arr = [YHAIChatMessage]()
for msg in result {
let model = msg.getMessage()
arr.append(model)
}
return arr
}
}
//
// YHAIChatDataBaseModel.swift
// galaxy
//
// Created by Dufet on 2024/12/2.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import Realm
import RealmSwift
class YHAIChatDataBaseModel: NSObject {
}
class YHAIChatDBMessage: Object {
@objc var uuid: String = ""
@objc dynamic var id: String = ""
@objc dynamic var event: String = ""
@objc dynamic var data: String = ""
@objc dynamic var is_self: Bool = false
@objc dynamic var is_done: Bool = false
//重写 Object.primaryKey() 可以设置模型的主键。
//声明主键之后,对象将被允许查询,更新速度更加高效,并且要求每个对象保持唯一性。
//一旦带有主键的对象被添加到 Realm 之后,该对象的主键将不可修改。
override static func primaryKey() -> String? {
return "uuid"
}
//重写 Object.ignoredProperties() 可以防止 Realm 存储数据模型的某个属性
override static func ignoredProperties() -> [String] {
// return ["tempID"]
return []
}
//重写 Object.indexedProperties() 方法可以为数据模型中需要添加索引的属性建立索引,Realm 支持为字符串、整型、布尔值以及 Date 属性建立索引。
override static func indexedProperties() -> [String] {
// return ["name"]
return []
}
static func createMessage(_ message: YHAIChatMessage) -> YHAIChatDBMessage {
let msg = YHAIChatDBMessage()
msg.uuid = message.messageId
msg.id = message.id
msg.event = message.event
msg.data = message.data
msg.is_self = message.isSelf
msg.is_done = message.isDone
print("DB WRITE-- \(message)")
return msg
}
func getMessage() -> YHAIChatMessage {
let msg = YHAIChatMessage()
msg.messageId = self.uuid
msg.id = self.id
msg.event = self.event
msg.data = self.data
msg.isSelf = self.is_self
msg.isDone = self.is_done
print("DB READ-- \(msg)")
if let jsonData = self.data.data(using: .utf8) {
do {
let jsonDict = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any]
let dic = (jsonDict ?? [:])
msg.dataDict = dic
if let body = YHAIMessageBody.deserialize(from: dic) {
msg.body = body
}
} catch {
}
}
return msg
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment