diff --git a/code/allapp/allapp-go-v2/.idea/go.imports.xml b/code/allapp/allapp-go-v2/.idea/go.imports.xml
new file mode 100644
index 00000000..d7202f03
--- /dev/null
+++ b/code/allapp/allapp-go-v2/.idea/go.imports.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v2/Dockerfile b/code/allapp/allapp-go-v2/Dockerfile
new file mode 100644
index 00000000..7837835d
--- /dev/null
+++ b/code/allapp/allapp-go-v2/Dockerfile
@@ -0,0 +1,13 @@
+FROM golang:1.25.3 AS builder
+
+WORKDIR /app
+COPY . .
+RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
+ go build -o app ./cmd/main.go
+
+FROM alpine:3.19
+
+WORKDIR /app
+COPY --from=builder /app/app .
+
+CMD ["./app"]
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v2/cmd/main.go b/code/allapp/allapp-go-v2/cmd/main.go
index 24c640c8..727b4bc9 100644
--- a/code/allapp/allapp-go-v2/cmd/main.go
+++ b/code/allapp/allapp-go-v2/cmd/main.go
@@ -3,17 +3,18 @@ package main
import (
"allapp-go-v2/internal/bootstrap"
"allapp-go-v2/internal/server"
- "log"
)
func main() {
- app, err := bootstrap.NewApp()
+ app, err := bootstrap.Start()
+
if err != nil {
- log.Fatal(err)
+ panic(err)
}
- if err := server.Start(app); err != nil {
- log.Fatal(err)
- }
+ err = server.Run(app.Config)
+ if err != nil {
+ panic(err)
+ }
}
diff --git a/code/allapp/allapp-go-v2/configs/config.dev.yaml b/code/allapp/allapp-go-v2/configs/config.dev.yaml
index e69de29b..a0ef277c 100644
--- a/code/allapp/allapp-go-v2/configs/config.dev.yaml
+++ b/code/allapp/allapp-go-v2/configs/config.dev.yaml
@@ -0,0 +1,2 @@
+server:
+ port: 8086
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v2/docker-compose.yml b/code/allapp/allapp-go-v2/docker-compose.yml
new file mode 100644
index 00000000..9f909ac9
--- /dev/null
+++ b/code/allapp/allapp-go-v2/docker-compose.yml
@@ -0,0 +1,17 @@
+version: "3.8"
+
+services:
+ app:
+ build: .
+ container_name: allapp
+
+ ports:
+ - "8080:8080"
+
+ environment:
+ - APP_ENV=prod
+
+ volumes:
+ - .:/app
+
+ restart: always
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v2/internal/bootstrap/app.go b/code/allapp/allapp-go-v2/internal/bootstrap/app.go
index 3e3864ca..58b4ac08 100644
--- a/code/allapp/allapp-go-v2/internal/bootstrap/app.go
+++ b/code/allapp/allapp-go-v2/internal/bootstrap/app.go
@@ -12,7 +12,7 @@ type App struct {
Db *pgxpool.Pool
}
-func NewApp() (*App, error) {
+func Start() (*App, error) {
cfg, err := config.Load()
if err != nil {
return nil, err
diff --git a/code/allapp/allapp-go-v2/internal/server/server.go b/code/allapp/allapp-go-v2/internal/server/server.go
index c7426c90..abc18997 100644
--- a/code/allapp/allapp-go-v2/internal/server/server.go
+++ b/code/allapp/allapp-go-v2/internal/server/server.go
@@ -1,26 +1,21 @@
package server
import (
- "allapp-go-v2/internal/bootstrap"
- "fmt"
+ "allapp-go-v2/internal/config"
+ "log"
"github.com/gofiber/fiber/v3"
- "github.com/gofiber/fiber/v3/middleware/requestid"
)
-func Start(appCtx *bootstrap.App) error {
- // 1️⃣ 创建 fiber 实例
+func Run(cfg *config.Config) error {
app := fiber.New()
- app.Use(requestid.New())
+ // 注册路由
+ //registerRoutes(app)
- // 2️⃣ 注册路由
- //registerRoutes(app, appCtx)
+ port := cfg.Server.Port
- // 3️⃣ 启动服务
- addr := fmt.Sprintf(":%s", appCtx.Config.Server.Port)
+ log.Println("🚀 server start on :" + port)
- fmt.Println("🚀 server running at", addr)
-
- return app.Listen(addr)
+ return app.Listen(":" + port)
}
diff --git a/code/allapp/allapp-go-v2/logs/info/2026-04-02.log b/code/allapp/allapp-go-v2/logs/info/2026-04-02.log
new file mode 100644
index 00000000..b85df70d
--- /dev/null
+++ b/code/allapp/allapp-go-v2/logs/info/2026-04-02.log
@@ -0,0 +1,3 @@
+{"level":"INFO","time":"2026-04-02 15:02:57","caller":"bootstrap/app.go:28","msg":"√ 数据库连接成功"}
+{"level":"INFO","time":"2026-04-02 15:03:21","caller":"bootstrap/app.go:28","msg":"√ 数据库连接成功"}
+{"level":"INFO","time":"2026-04-02 15:03:31","caller":"bootstrap/app.go:28","msg":"√ 数据库连接成功"}
diff --git a/code/allapp/allapp-go-v3/.idea/.gitignore b/code/allapp/allapp-go-v3/.idea/.gitignore
new file mode 100644
index 00000000..ab1f4164
--- /dev/null
+++ b/code/allapp/allapp-go-v3/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/code/allapp/allapp-go-v3/.idea/allapp-go-v3.iml b/code/allapp/allapp-go-v3/.idea/allapp-go-v3.iml
new file mode 100644
index 00000000..5e764c4f
--- /dev/null
+++ b/code/allapp/allapp-go-v3/.idea/allapp-go-v3.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v3/.idea/go.imports.xml b/code/allapp/allapp-go-v3/.idea/go.imports.xml
new file mode 100644
index 00000000..d7202f03
--- /dev/null
+++ b/code/allapp/allapp-go-v3/.idea/go.imports.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v3/.idea/modules.xml b/code/allapp/allapp-go-v3/.idea/modules.xml
new file mode 100644
index 00000000..de0138c2
--- /dev/null
+++ b/code/allapp/allapp-go-v3/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v3/.idea/vcs.xml b/code/allapp/allapp-go-v3/.idea/vcs.xml
new file mode 100644
index 00000000..c2365ab1
--- /dev/null
+++ b/code/allapp/allapp-go-v3/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code/allapp/allapp-go-v3/cmd/app/main.go b/code/allapp/allapp-go-v3/cmd/app/main.go
new file mode 100644
index 00000000..15150982
--- /dev/null
+++ b/code/allapp/allapp-go-v3/cmd/app/main.go
@@ -0,0 +1,9 @@
+package main
+
+import (
+ "allapp-go/internal/bootstrap"
+)
+
+func main() {
+ _ = bootstrap.BootService()
+}
diff --git a/code/allapp/allapp-go-v3/configs/config.dev.yaml b/code/allapp/allapp-go-v3/configs/config.dev.yaml
new file mode 100644
index 00000000..9b3af9a1
--- /dev/null
+++ b/code/allapp/allapp-go-v3/configs/config.dev.yaml
@@ -0,0 +1,2 @@
+app:
+ port: 8087
diff --git a/code/allapp/allapp-go-v3/configs/config.prod.yaml b/code/allapp/allapp-go-v3/configs/config.prod.yaml
new file mode 100644
index 00000000..e69de29b
diff --git a/code/allapp/allapp-go-v3/configs/config.yaml b/code/allapp/allapp-go-v3/configs/config.yaml
new file mode 100644
index 00000000..9be48ad0
--- /dev/null
+++ b/code/allapp/allapp-go-v3/configs/config.yaml
@@ -0,0 +1,3 @@
+app:
+ name: allapp
+ port: 8080
diff --git a/code/allapp/allapp-go-v3/go.mod b/code/allapp/allapp-go-v3/go.mod
new file mode 100644
index 00000000..3088e817
--- /dev/null
+++ b/code/allapp/allapp-go-v3/go.mod
@@ -0,0 +1,36 @@
+module allapp-go
+
+go 1.25.0
+
+require (
+ github.com/andybalholm/brotli v1.2.0 // indirect
+ github.com/fsnotify/fsnotify v1.9.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
+ github.com/gofiber/fiber/v3 v3.1.0 // indirect
+ github.com/gofiber/schema v1.7.0 // indirect
+ github.com/gofiber/utils/v2 v2.0.2 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/jackc/pgpassfile v1.0.0 // indirect
+ github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
+ github.com/jackc/pgx/v5 v5.9.1 // indirect
+ github.com/klauspost/compress v1.18.4 // indirect
+ github.com/mattn/go-colorable v0.1.14 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/pelletier/go-toml/v2 v2.2.4 // indirect
+ github.com/philhofer/fwd v1.2.0 // indirect
+ github.com/sagikazarmark/locafero v0.11.0 // indirect
+ github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
+ github.com/spf13/afero v1.15.0 // indirect
+ github.com/spf13/cast v1.10.0 // indirect
+ github.com/spf13/pflag v1.0.10 // indirect
+ github.com/spf13/viper v1.21.0 // indirect
+ github.com/subosito/gotenv v1.6.0 // indirect
+ github.com/tinylib/msgp v1.6.3 // indirect
+ github.com/valyala/bytebufferpool v1.0.0 // indirect
+ github.com/valyala/fasthttp v1.69.0 // indirect
+ go.yaml.in/yaml/v3 v3.0.4 // indirect
+ golang.org/x/crypto v0.48.0 // indirect
+ golang.org/x/net v0.50.0 // indirect
+ golang.org/x/sys v0.41.0 // indirect
+ golang.org/x/text v0.34.0 // indirect
+)
diff --git a/code/allapp/allapp-go-v3/go.sum b/code/allapp/allapp-go-v3/go.sum
new file mode 100644
index 00000000..b9a45098
--- /dev/null
+++ b/code/allapp/allapp-go-v3/go.sum
@@ -0,0 +1,72 @@
+github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
+github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
+github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
+github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
+github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/gofiber/fiber/v3 v3.1.0 h1:1p4I820pIa+FGxfwWuQZ5rAyX0WlGZbGT6Hnuxt6hKY=
+github.com/gofiber/fiber/v3 v3.1.0/go.mod h1:n2nYQovvL9z3Too/FGOfgtERjW3GQcAUqgfoezGBZdU=
+github.com/gofiber/schema v1.7.0 h1:yNM+FNRZjyYEli9Ey0AXRBrAY9jTnb+kmGs3lJGPvKg=
+github.com/gofiber/schema v1.7.0/go.mod h1:A/X5Ffyru4p9eBdp99qu+nzviHzQiZ7odLT+TwxWhbk=
+github.com/gofiber/utils/v2 v2.0.2 h1:ShRRssz0F3AhTlAQcuEj54OEDtWF7+HJDwEi/aa6QLI=
+github.com/gofiber/utils/v2 v2.0.2/go.mod h1:+9Ub4NqQ+IaJoTliq5LfdmOJAA/Hzwf4pXOxOa3RrJ0=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
+github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
+github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
+github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
+github.com/jackc/pgx/v5 v5.9.1 h1:uwrxJXBnx76nyISkhr33kQLlUqjv7et7b9FjCen/tdc=
+github.com/jackc/pgx/v5 v5.9.1/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4=
+github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c=
+github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
+github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
+github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
+github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
+github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM=
+github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
+github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
+github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
+github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
+github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
+github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
+github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
+github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
+github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
+github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
+github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
+github.com/tinylib/msgp v1.6.3 h1:bCSxiTz386UTgyT1i0MSCvdbWjVW+8sG3PjkGsZQt4s=
+github.com/tinylib/msgp v1.6.3/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA=
+github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
+github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
+github.com/valyala/fasthttp v1.69.0 h1:fNLLESD2SooWeh2cidsuFtOcrEi4uB4m1mPrkJMZyVI=
+github.com/valyala/fasthttp v1.69.0/go.mod h1:4wA4PfAraPlAsJ5jMSqCE2ug5tqUPwKXxVj8oNECGcw=
+go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
+go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
+golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
+golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos=
+golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60=
+golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
+golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
+golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
+golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
+golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
+golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/code/allapp/allapp-go-v3/internal/bootstrap/bootstrap.go b/code/allapp/allapp-go-v3/internal/bootstrap/bootstrap.go
new file mode 100644
index 00000000..4a152984
--- /dev/null
+++ b/code/allapp/allapp-go-v3/internal/bootstrap/bootstrap.go
@@ -0,0 +1,24 @@
+package bootstrap
+
+import (
+ "allapp-go/internal/config"
+ "log"
+)
+
+type App struct {
+ Config *config.Config
+}
+
+func BootService() *App {
+ // 1️⃣ 加载配置
+ cfg, err := config.Load()
+ if err != nil {
+ log.Fatalf("❌ load config failed: %v", err)
+ }
+
+ RunServer(cfg)
+
+ return &App{
+ Config: cfg,
+ }
+}
diff --git a/code/allapp/allapp-go-v3/internal/bootstrap/server.go b/code/allapp/allapp-go-v3/internal/bootstrap/server.go
new file mode 100644
index 00000000..5c82832f
--- /dev/null
+++ b/code/allapp/allapp-go-v3/internal/bootstrap/server.go
@@ -0,0 +1,24 @@
+package bootstrap
+
+import (
+ "allapp-go/internal/config"
+ "allapp-go/internal/router"
+ "fmt"
+ "log"
+
+ "github.com/gofiber/fiber/v3"
+)
+
+func RunServer(cfg *config.Config) {
+ app := fiber.New()
+
+ router.Setup(app)
+
+ addr := fmt.Sprintf(":%d", cfg.App.Port)
+
+ log.Printf("🚀 Server running on %s", addr)
+
+ if err := app.Listen(addr); err != nil {
+ log.Fatalf("❌ start server failed: %v", err)
+ }
+}
diff --git a/code/allapp/allapp-go-v3/internal/config/config.go b/code/allapp/allapp-go-v3/internal/config/config.go
new file mode 100644
index 00000000..e61e91f2
--- /dev/null
+++ b/code/allapp/allapp-go-v3/internal/config/config.go
@@ -0,0 +1,21 @@
+package config
+
+type Config struct {
+ App AppConfig `mapstructure:"app"`
+ Postgres PostgresConfig `mapstructure:"postgres"`
+}
+
+type AppConfig struct {
+ Name string `mapstructure:"name"`
+ Port int `mapstructure:"port"`
+}
+
+type PostgresConfig struct {
+ Host string `mapstructure:"host"`
+ Port int `mapstructure:"port"`
+ User string `mapstructure:"user"`
+ Password string `mapstructure:"password"`
+ Dbname string `mapstructure:"dbname"`
+ SslMode bool `mapstructure:"ssl_mode"`
+ TimeZone string `mapstructure:"timezone"`
+}
diff --git a/code/allapp/allapp-go-v3/internal/config/loader.go b/code/allapp/allapp-go-v3/internal/config/loader.go
new file mode 100644
index 00000000..29035d62
--- /dev/null
+++ b/code/allapp/allapp-go-v3/internal/config/loader.go
@@ -0,0 +1,50 @@
+package config
+
+import (
+ "fmt"
+ "os"
+ "strings"
+
+ "github.com/spf13/viper"
+)
+
+func Load() (*Config, error) {
+ env := getEnv("APP_ENV", "dev")
+
+ v := viper.New()
+ v.SetConfigType("yaml")
+
+ // 基础配置
+ v.AddConfigPath("configs")
+ v.SetConfigName("config")
+
+ if err := v.ReadInConfig(); err != nil {
+ return nil, fmt.Errorf("read base config failed: %w", err)
+ }
+
+ // 环境配置(覆盖)
+ envConfigName := fmt.Sprintf("config.%s", env)
+ v.SetConfigName(envConfigName)
+
+ if err := v.MergeInConfig(); err != nil {
+ // dev 允许没有文件,prod 建议必须存在
+ if env == "prod" {
+ return nil, fmt.Errorf("read env config failed: %w", err)
+ }
+ }
+
+ var cfg Config
+ if err := v.Unmarshal(&cfg); err != nil {
+ return nil, fmt.Errorf("unmarshal config failed: %w", err)
+ }
+
+ return &cfg, nil
+}
+
+func getEnv(key, defaultVal string) string {
+ val := os.Getenv(key)
+ if val == "" {
+ return defaultVal
+ }
+ return strings.ToLower(val)
+}
diff --git a/code/allapp/allapp-go-v3/internal/router/router.go b/code/allapp/allapp-go-v3/internal/router/router.go
new file mode 100644
index 00000000..87cb7da1
--- /dev/null
+++ b/code/allapp/allapp-go-v3/internal/router/router.go
@@ -0,0 +1,16 @@
+package router
+
+import (
+ "github.com/gofiber/fiber/v3"
+)
+
+func Setup(app *fiber.App) {
+ // 健康检查
+ app.Get("/ping", func(c fiber.Ctx) error {
+ return c.SendString("pong")
+ })
+
+ // 你后面可以这样分组:
+ // setupUserRoutes(app)
+ // setupOrderRoutes(app)
+}
diff --git a/code/g3hy2024-uniapp/src/pages-sub/baoxiao/index.vue b/code/g3hy2024-uniapp/src/pages-sub/baoxiao/index.vue
index 546ea6c0..18335eee 100644
--- a/code/g3hy2024-uniapp/src/pages-sub/baoxiao/index.vue
+++ b/code/g3hy2024-uniapp/src/pages-sub/baoxiao/index.vue
@@ -1,11 +1,486 @@
-
-
+
+
+
+
+
+
+
+
+ {{ tab.name }}
+
+
+
+ {{ tab.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ col.label }}:
+
+
+ {{ col.value(item) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/code/g3hy2024-uniapp/src/pages-sub/file/index.vue b/code/g3hy2024-uniapp/src/pages-sub/file/index.vue
index 2d7ee222..10503d68 100644
--- a/code/g3hy2024-uniapp/src/pages-sub/file/index.vue
+++ b/code/g3hy2024-uniapp/src/pages-sub/file/index.vue
@@ -44,8 +44,6 @@ async function loadFileData() {
url: item.mx_mapfilename,
}
})
-
- console.log(fileList.value)
})
}
diff --git a/code/g3hy2024-uniapp/src/pages-sub/fukuan/index.vue b/code/g3hy2024-uniapp/src/pages-sub/fukuan/index.vue
index d06aa135..a79366bd 100644
--- a/code/g3hy2024-uniapp/src/pages-sub/fukuan/index.vue
+++ b/code/g3hy2024-uniapp/src/pages-sub/fukuan/index.vue
@@ -59,13 +59,11 @@ onShow(async () => {
async function loadModLevelList() {
await loaddataApi({
viewname: 'v_sh_b_set',
- searchcondition: `b_user_id='${userStore.userInfo.userid}'`,
+ searchcondition: `b_user_id='${userStore.userInfo.userid}' AND b_module_id = 'cw_zdorder_f'`,
orderfield: 'b_level',
soption: '',
}).then((res) => {
- modLevelList.value = res.data.filter(item => item.b_module_id === 'cw_zdorder_f')
-
- console.log(modLevelList.value)
+ modLevelList.value = res.data
})
}
@@ -149,12 +147,13 @@ async function queryList(pageNo: number, pageSize: number) {
orderfield: 'b_ss_date desc',
})
.then((res) => {
- const { rows, _total } = res.data
+ const { rows, total } = res.data
let idList = []
rows.forEach((row) => {
idList.push(row.b_id)
})
+
let sql2 = '2 > 1'
if (idList.length > 0) {
let idString = idList.map(id => `'${id}'`).join(',')
@@ -319,10 +318,10 @@ function handleToProcess(item) {
@@ -421,9 +420,9 @@ function handleToProcess(item) {
.list-item__main {
display: flex;
align-items: center;
- @include flexGap(16rpx, '');
font-weight: bold;
font-size: 36rpx;
+ @include flexGap(16rpx, '');
}
.list-item__extra {
display: flex;
diff --git a/code/g3hy2024-uniapp/src/pages-sub/process/file.vue b/code/g3hy2024-uniapp/src/pages-sub/process/file.vue
new file mode 100644
index 00000000..8edb8bdc
--- /dev/null
+++ b/code/g3hy2024-uniapp/src/pages-sub/process/file.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/code/g3hy2024-uniapp/src/pages-sub/process/index.vue b/code/g3hy2024-uniapp/src/pages-sub/process/index.vue
index 069468c0..97a710f7 100644
--- a/code/g3hy2024-uniapp/src/pages-sub/process/index.vue
+++ b/code/g3hy2024-uniapp/src/pages-sub/process/index.vue
@@ -1,4 +1,5 @@
-
-
-
-
- {{ item.b_name }}
-
+
+
+
+
+ 当前进度 -
+
+
+
+
-
-
-
- {{ item.v_user_name }}
-
- > {{ item.v_tosh_user_name }}
-
+
+
+
+
+
+
+
+ {{ item.b_name }}
+
+
+
+
+ {{ computedStepText(item) }}
+
+
+ {{ computedStepText(item) }}
+
+
+ {{ computedStepText(item) }}
+
+
+ {{ computedStepText(item) }}
+
+
- {{ item.b_sh_date }}
-
- 审批耗时:{{ computedConsumeTime(index) }}
-
- {{ item.b_sh_memo }}
-
-
-
+
+
+
+
+
+ 操作人:
+ {{ item.v_user_name }}
+
+
+ 操作时间:
+ {{ formatDateTime(item.b_sh_datetime) }}
+
+
+
+
+
+
+ 审核人:
+ {{ item.v_user_name }}
+
+
+
+
+
+ 审核人:
+ {{ item.v_user_name }}
+
+
+ 审核时间:
+ {{ formatDateTime(item.b_sh_datetime) }}
+
+
+ 审核耗时:
+ {{ item.consume_time }}
+
+
+
+
+
+ 审核人:
+ {{ item.v_user_name }}
+
+
+ 审核时间:
+ {{ formatDateTime(item.b_sh_datetime) }}
+
+
+ 审核意见:
+ {{ item.b_sh_memo }}
+
+
+
+
+
+
+
+
+
-
+
+
diff --git a/code/g3hy2024-uniapp/src/pages-sub/update-password/index.vue b/code/g3hy2024-uniapp/src/pages-sub/update-password/index.vue
index 33225740..d2c22cda 100644
--- a/code/g3hy2024-uniapp/src/pages-sub/update-password/index.vue
+++ b/code/g3hy2024-uniapp/src/pages-sub/update-password/index.vue
@@ -36,7 +36,7 @@ async function onSubmit() {
const searchcondition = `b_id = '${userStore.userInfo.userid}' AND ISNULL(b_password, '') = ISNULL('${formModel.oldPassword}', '')`
const searchRes = await loaddataApi({
- viewname: 'v_mini_loginid',
+ viewname: 'b_user',
searchcondition: `${searchcondition}`,
orderfield: 'b_id',
soption: '',
@@ -58,7 +58,7 @@ async function onSubmit() {
const delValues = []
const keys = []
- tables.push('b_truck')
+ tables.push('b_user')
insertValues.push('[]')
updateValues.push(JSON.stringify([updateObj]))
delValues.push('[]')
diff --git a/code/g3hy2024-uniapp/src/store/counts.ts b/code/g3hy2024-uniapp/src/store/counts.ts
index 6a4611f5..5fe5eb83 100644
--- a/code/g3hy2024-uniapp/src/store/counts.ts
+++ b/code/g3hy2024-uniapp/src/store/counts.ts
@@ -26,50 +26,80 @@ export const useCountsStore = defineStore('taskCounts', () => {
// 请求的 SQL 查询列表
const sqlQueries = {
fukuan: `
- SELECT COUNT(*) AS all_cnt,
- SUM(CASE WHEN rs.b_level >= st.b_level THEN 1 ELSE 0 END) AS v_ash,
- SUM(CASE WHEN rs.b_level = st.b_level - 1 THEN 1 ELSE 0 END) AS v_dsh
- FROM (
- SELECT r.*
- FROM (
- SELECT b_dj_id, b_module_id, MAX(b_id) AS b_maxid
- FROM dbo.sh_record
- GROUP BY b_dj_id, b_module_id
- ) AS a
- JOIN sh_record r ON a.b_maxid = r.b_id
- WHERE r.b_sh = '1'
- ) AS rs
- LEFT JOIN (
- SELECT b_module_id, b_level
- FROM sh_b_set
- WHERE b_user_id = '${userStore.userInfo.userid}'
- ) AS st
- ON rs.b_module_id = st.b_module_id
- AND (rs.b_level = st.b_level - 1 OR rs.b_level = st.b_level)
- WHERE rs.b_module_id = 'cw_zdorder_f';
+ SELECT
+ COUNT(1) AS all_cnt,
+
+ SUM(CASE
+ WHEN rs.b_level >= st.b_level THEN 1
+ ELSE 0
+ END) AS v_ash,
+
+ SUM(CASE
+ WHEN rs.b_level = st.b_level - 1 THEN 1
+ ELSE 0
+ END) AS v_dsh
+
+ FROM
+ (
+ -- 只取每个单据的最新一条
+ SELECT r.*
+ FROM
+ (
+ SELECT b_dj_id, b_module_id, MAX(b_id) AS b_maxid
+ FROM dbo.sh_record
+ GROUP BY b_dj_id, b_module_id
+ ) a
+ INNER JOIN sh_record r ON a.b_maxid = r.b_id
+ WHERE r.b_sh = '1'
+ ) rs
+
+ CROSS JOIN
+ (
+ SELECT TOP 1 b_level
+ FROM sh_b_set
+ WHERE b_user_id = '${userStore.userInfo.userid}'
+ AND b_module_id = 'cw_zdorder_f'
+ ORDER BY b_level DESC
+ ) st
+
+ WHERE rs.b_module_id = 'cw_zdorder_f';
`,
baoxiao: `
- SELECT COUNT(*) AS all_cnt,
- SUM(CASE WHEN rs.b_level >= st.b_level THEN 1 ELSE 0 END) AS v_ash,
- SUM(CASE WHEN rs.b_level = st.b_level - 1 THEN 1 ELSE 0 END) AS v_dsh
- FROM (
- SELECT r.*
- FROM (
- SELECT b_dj_id, b_module_id, MAX(b_id) AS b_maxid
- FROM dbo.sh_record
- GROUP BY b_dj_id, b_module_id
- ) AS a
- JOIN sh_record r ON a.b_maxid = r.b_id
- WHERE r.b_sh = '1'
- ) AS rs
- LEFT JOIN (
- SELECT b_module_id, b_level
- FROM sh_b_set
- WHERE b_user_id = '${userStore.userInfo.userid}'
- ) AS st
- ON rs.b_module_id = st.b_module_id
- AND (rs.b_level = st.b_level - 1 OR rs.b_level = st.b_level)
- WHERE rs.b_module_id = 'car_daily';
+ SELECT
+ COUNT(1) AS all_cnt,
+
+ SUM(CASE
+ WHEN rs.b_level >= st.b_level THEN 1
+ ELSE 0
+ END) AS v_ash,
+
+ SUM(CASE
+ WHEN rs.b_level = st.b_level - 1 THEN 1
+ ELSE 0
+ END) AS v_dsh
+
+ FROM
+ (
+ SELECT r.*
+ FROM
+ (
+ SELECT b_dj_id, b_module_id, MAX(b_id) AS b_maxid
+ FROM dbo.sh_record
+ GROUP BY b_dj_id, b_module_id
+ ) a
+ INNER JOIN sh_record r ON a.b_maxid = r.b_id
+ WHERE r.b_sh = '1'
+ AND r.b_module_id = 'car_daily'
+ ) rs
+
+ CROSS JOIN
+ (
+ SELECT TOP 1 b_level
+ FROM sh_b_set
+ WHERE b_user_id = '${userStore.userInfo.userid}'
+ AND b_module_id = 'car_daily'
+ ORDER BY b_level DESC
+ ) st
`,
}
diff --git a/code/g3hy2024-uniapp/src/store/permission.ts b/code/g3hy2024-uniapp/src/store/permission.ts
index b5adea52..15ff905e 100644
--- a/code/g3hy2024-uniapp/src/store/permission.ts
+++ b/code/g3hy2024-uniapp/src/store/permission.ts
@@ -5,30 +5,14 @@ import { getModuleQxApi } from '@/request/api'
import { useUserStore } from './user'
const PERMISSION_PATH_MAP = [
- // {
- // moduleId: 'xc_consite_checkcon',
- // path: '/pages-sub/jiaoyan',
- // },
- // {
- // moduleId: 'xc_consite_clearcon',
- // path: '/pages-sub/qingxi',
- // },
- // {
- // moduleId: 'xc_consite_jiarecon',
- // path: '/pages-sub/jiare',
- // },
- // {
- // moduleId: 'xc_consite_wxcon',
- // path: '/pages-sub/weixiu',
- // },
- // {
- // moduleId: 'xc_conyard_in',
- // path: '/pages-sub/jinchang',
- // },
- // {
- // moduleId: 'xc_conyard_out',
- // path: '/pages-sub/chuchang',
- // },
+ {
+ moduleId: 'cw_zdorder_f',
+ path: '/pages-sub/fukuan',
+ },
+ {
+ moduleId: 'car_daily',
+ path: '/pages-sub/baoxiao',
+ }
]
export const usePermissionStore = defineStore(