更改目录结构

This commit is contained in:
dongchangxi committed 2025-01-15 15:15:55 +08:00
1 parent be6b954dba
commit 68415a3061
20 files changed
+116 -15

No files matched your search

+52
View File
@@ -0,0 +1,52 @@
package initFunc
import (
"errors"
"fmt"
"net"
"time"
)
//设备自检
//1.检测网络是否正常,如果不正常,提示用户检查主控箱电源是否跳闸 宽带是否欠费 网络接线是否有问题
func CheckNetwork() error {
err := pingNet("www.baidu.com")
return err
}
//2 检测路由器 192.168.881 检测主机 192.168.88.2 检测监控 192.168.88.7 检测AP 192.168.88.9 检测开关路由器 192.168.88.8 检测速哇服务器 mp.suwa3d.com
func CheckDevice() map[string]string {
arrIpDevices := map[string]string{
"路由器":"192.168.88.1",
"主机":"192.168.8.2",
"AP":"192.168.88.9",
"开关路由器":"192.168.88.8",
"速哇服务器":"mp.suwa3d.com",
"监控":"192.168.88.7",
}
errIpDevices := map[string]string{}
for k,v := range arrIpDevices {
err := pingNet(v)
if err != nil {
errIpDevices[k] = v
}
}
return errIpDevices
}
//ping ip的方法
func pingNet(ip string) error {
ipInfo := net.ParseIP(ip)
if ipInfo == nil {
return errors.New("IP信息有误")
}
// 创建 TCP 连接
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:80", ipInfo), time.Second*1)
if err != nil {
return errors.New("连接失败-"+err.Error())
}
defer conn.Close()
// ping 成功
return nil
}
@@ -0,0 +1,3 @@
package initFunc
//检测是否有更新服务程序内容,重新下载安装
+64
View File
@@ -0,0 +1,64 @@
package initFunc
import (
"errors"
"io"
"net/http"
"os"
"os/exec"
)
//检查是否安装WebView2,没有安装的话就安装
func CheckWebView2() error {
cmd := exec.Command("cmd", "/C", "wmic product where \"name='Microsoft Edge WebView2 Runtime'\" get Name")
output, err := cmd.Output()
if err != nil {
return err
}
// 检查输出是否包含 WebView2 Runtime 的名称
if string(output) == "Name\r\nMicrosoft Edge WebView2 Runtime\r\n" {
return nil // WebView2 已安装
} else {
err := runWebView2Installer()
return err // WebView2 未安装
}
}
func runWebView2Installer() error {
url := "https://suwa3d-website.oss-cn-shanghai.aliyuncs.com/package/WebView2.exe"
filePath := "C:\\Program Files\\WebView2.exe"
err := downloadFile(url, filePath)
if err != nil {
return errors.New("下载安装包失败-"+err.Error()) //fmt.Println("Download failed:", err)
}
cmd := exec.Command(filePath)
err = cmd.Run()
if err != nil {
return errors.New("安装包安装失败-"+err.Error())
}
return nil
}
func downloadFile(url string, filePath string) error {
response, err := http.Get(url)
if err != nil {
return err
}
defer response.Body.Close()
file, err := os.Create(filePath)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(file, response.Body)
if err != nil {
return err
}
return nil
}
+126
View File
@@ -0,0 +1,126 @@
package initFunc
import (
"crypto/x509"
"encoding/pem"
"fmt"
"os"
"syscall"
"unsafe"
)
const (
X509_ASN_ENCODING = 0x00000001
PKCS_7_ASN_ENCODING = 0x00010000
CERT_STORE_ADD_REPLACE_EXISTING = 3
)
var (
modcrypt32 = syscall.NewLazyDLL("crypt32.dll")
procCertOpenSystemStore = modcrypt32.NewProc("CertOpenSystemStoreW")
procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore")
procCertGetNameString = modcrypt32.NewProc("CertGetNameStringW")
procCertCloseStore = modcrypt32.NewProc("CertCloseStore")
)
// 安装信任证书
func SetupCert() {
CheckCertIsInstalled()
//获取证书路径
dir, _ := os.Getwd()
certPath := dir+"/rootCA.crt" // 替换为您的证书路径
if CheckCertIsInstalled() == "yes"{
return
}
// 读取证书文件
certFile, err := os.ReadFile(certPath)
if err != nil {
fmt.Println("无法读取证书文件:", err)
return
}
// 解码 PEM 编码的证书
block, _ := pem.Decode(certFile)
if block == nil {
fmt.Println("无法解码 PEM 格式的证书")
return
}
// 解析证书
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
fmt.Println("无法解析证书:", err)
return
}
// 打开证书存储
storeHandle, err := syscall.CertOpenSystemStore(0, syscall.StringToUTF16Ptr("ROOT"))
if err != nil {
fmt.Println("无法打开证书存储:", err)
return
}
defer syscall.CertCloseStore(storeHandle, 0)
// 将证书添加到存储中
err = addCertificateToStore(cert.Raw, storeHandle)
if err != nil {
fmt.Println("无法将证书添加到存储中:", err)
return
}
fmt.Println("证书已成功导入到受信任的根证书颁发机构")
}
func addCertificateToStore(cert []byte, storeHandle syscall.Handle) error {
certContext, err := syscall.CertCreateCertificateContext(X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, &cert[0], uint32(len(cert)))
if err != nil {
return fmt.Errorf("无法创建证书上下文: %v", err)
}
defer syscall.CertFreeCertificateContext(certContext)
err = syscall.CertAddCertificateContextToStore(storeHandle, certContext, CERT_STORE_ADD_REPLACE_EXISTING, nil)
if err != nil {
return fmt.Errorf("无法将证书上下文添加到存储中: %v", err)
}
return nil
}
//检测证书是否已经安装了
func CheckCertIsInstalled() string {
storeName := "Root" // 证书存储名称,这里使用了 "MY" 表示个人证书存储
storeHandle, _, _ := procCertOpenSystemStore.Call(0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(storeName))))
if storeHandle == 0 {
fmt.Println("Error opening certificate store")
return "error"
}
defer procCertCloseStore.Call(storeHandle, 0)
var pCertContext uintptr
for {
pCertContext, _, _ = procCertEnumCertificatesInStore.Call(storeHandle, pCertContext)
if pCertContext == 0 {
break
}
res := printCertificateInfo(pCertContext) // 输出证书信息
if res == "yes"{
return res
}
}
return "no"
}
//获取证书的信息
func printCertificateInfo(pCertContext uintptr) string {
var buffer [200]uint16
size, _, _ := procCertGetNameString.Call(pCertContext, 5, 0, 0, uintptr(unsafe.Pointer(&buffer)), 200)
issuer := syscall.UTF16ToString(buffer[:size])
fmt.Println("Certificate Issuer:", issuer)
if issuer == "SX"{
return "yes"
}
return "no"
}
+53
View File
@@ -0,0 +1,53 @@
package initFunc
import (
"fmt"
"os"
"os/exec"
"syscall"
"time"
)
// 执行exe 文件,开启视频监控的服务进程
func RunPiServerExe() {
// 获取当前目录
dir, _ := os.Getwd()
applicationPath := dir + "/piVideo"
// //切换到目录
os.Chdir(applicationPath)
//执行exe的路径
exePath := dir + "/piVideo/piVideo.exe"
fmt.Println("piVide 可执行路径:", exePath)
killPiServerExe("piVideo.exe") //杀 piVideo 进程
killPiServerExe("RTSPtoWeb.exe") //杀 RRTSPtoWeb 进程
time.Sleep(3 * time.Second)
cmd := exec.Command(exePath) // 替换为您的可执行文件路径
// os.Chdir("piVideo")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Println("执行失败", err.Error(), string(output))
} else {
fmt.Println("执行成功", string(output))
}
}
func killPiServerExe(exeName string) {
// 定义要关闭的程序的名称(或路径)
if exeName == "" {
exeName = "piVideo.exe"
}
// 使用exec.Command函数创建一个Cmd结构体,用于执行命令
cmd := exec.Command("taskkill", "/f", "/im", exeName)
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow:true}
// 将命令的输出和错误连接到当前进程的标准输出和标准错误
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
// 执行命令
err := cmd.Run()
if err != nil {
// 如果发生错误,输出错误信息
fmt.Println("可能进程并没有开启/关闭视频监控进程Error:", err)
}else{
fmt.Println("关闭视频监控进程成功")
}
}
@@ -0,0 +1,6 @@
package initFunc
//影棚授权扫码
func StudioAuthorization() error {
return nil
}
+34
View File
@@ -0,0 +1,34 @@
package initFunc
import (
"github.com/gogf/gf/v2/util/gconv"
)
// 请求api接口将,获取oem的配置信息
func RequestOemSettingInfo(wailsConfig map[string]interface{}) map[string]interface{} {
if wailsConfig == nil {
return nil
}
mapData := gconv.Map(wailsConfig["ext_oem"])
if mapData == nil {
return nil
}
return mapData
// url := "http://172.16.20.7:8199/api/oem/infoById?id="+gconv.String(mapData["id"])
// //请求api接口))
// resp, err := http.Get(url)
// if err != nil {
// return nil
// }
// defer resp.Body.Close()
// //返回数据的转换
// var data map[string]interface{}
// decoder := json.NewDecoder(resp.Body)
// err = decoder.Decode(&data)
// if err != nil {
// return nil
// }
// //提取data数据
// settingData := gconv.Map(data["data"])
// return settingData
}