소스 검색

包存接口

renjiaojiao 3 달 전
부모
커밋
e96af66fc4
10개의 변경된 파일260개의 추가작업 그리고 32개의 파일을 삭제
  1. 7 1
      config.yaml
  2. 13 10
      config/db.go
  3. 34 10
      controller/kbController.go
  4. 0 0
      controller/resumeController.go
  5. 2 1
      go.mod
  6. 32 6
      go.sum
  7. 4 4
      main.go
  8. 28 0
      public/pinyin.go
  9. 140 0
      service/kbService.go
  10. 0 0
      service/resumeService.go

+ 7 - 1
config.yaml

@@ -4,4 +4,10 @@ database:
   user: jianyu
   password: Topnet123
   dbname: jy_resume
-filePath: ./upload/
+kbMySql:
+  host: 172.20.45.129:4000
+  user: jianyu
+  password: Topnet123
+  dbname: kanboard
+filePath: ./upload/
+WechatWorkUrl: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=f195c32d-aed7-4070-8aa2-190eeebab00c

+ 13 - 10
config/db.go

@@ -1,6 +1,7 @@
 package config
 
 import (
+	"app.yhyue.com/moapp/jybase/mysql"
 	"database/sql"
 	"fmt"
 	"gopkg.in/yaml.v3"
@@ -11,12 +12,14 @@ import (
 var SysConfig Config
 var Db *sql.DB
 
-//var mysqlDB *mysql.Mysql
+var KbDb *mysql.Mysql
 
 type Config struct {
-	Port     string         `yaml:"port"`
-	Database DatabaseConfig `yaml:"database"`
-	FilePath string         `yaml:"filePath"`
+	Port          string         `yaml:"port"`
+	Database      DatabaseConfig `yaml:"database"`
+	FilePath      string         `yaml:"filePath"`
+	WechatWorkUrl string         `yaml:"wechatWorkUrl"`
+	KbMySql       DatabaseConfig `yaml:"kbMySql"`
 }
 
 type DatabaseConfig struct {
@@ -53,13 +56,13 @@ func InitDB() {
 	}
 	//defer Db.Close()
 
-	/*mysqlDB = &mysql.Mysql{
-		Address:      SysConfig.Database.Host,
-		UserName:     SysConfig.Database.User,
-		PassWord:     SysConfig.Database.Password,
-		DBName:       SysConfig.Database.DBName,
+	KbDb = &mysql.Mysql{
+		Address:      SysConfig.KbMySql.Host,
+		UserName:     SysConfig.KbMySql.User,
+		PassWord:     SysConfig.KbMySql.Password,
+		DBName:       SysConfig.KbMySql.DBName,
 		MaxOpenConns: 5,
 		MaxIdleConns: 5,
 	}
-	mysqlDB.Init()*/
+	KbDb.Init()
 }

+ 34 - 10
controller/uploadFile.go → controller/kbController.go

@@ -2,14 +2,14 @@ package controller
 
 import (
 	cm "app.yhyue.com/moapp/jybase/common"
-	"bindresume/config"
+	. "bindresume/config"
+	"bindresume/service"
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"log"
 	"math/rand"
 	"mime/multipart"
 	"net/http"
-	"os"
 	"path/filepath"
 	"strings"
 	"time"
@@ -66,13 +66,13 @@ func UploadFile(r *gin.Context) {
 
 		// 保存文件
 		//dst := filepath.Join(config.SysConfig.FilePath, uniqueName)
-		filePath := GetFilePath(uniqueName, "bifile")
+		filePath := service.GetFilePath(uniqueName, "bifile")
 		log.Println("获取路径", filePath)
 		if err := r.SaveUploadedFile(fileHeader, filePath); err != nil {
 			failedFiles[fileHeader.Filename] = fmt.Sprintf("保存失败: %v", err)
 			continue
 		}
-		successFiles = append(successFiles, fmt.Sprintf("/shareFile/%s", strings.Replace(filePath, cm.ObjToString(config.SysConfig.FilePath), "", 1)))
+		successFiles = append(successFiles, fmt.Sprintf("/shareFile/%s", strings.Replace(filePath, cm.ObjToString(SysConfig.FilePath), "", 1)))
 	}
 
 	// 返回响应
@@ -84,10 +84,34 @@ func UploadFile(r *gin.Context) {
 	})
 }
 
-// 获取文件路径、名称
-func GetFilePath(fm, types string) (s string) {
-	var tm = time.Now().Format("20060102")
-	var path = config.SysConfig.FilePath + types + "/" + tm[:4] + "/" + tm[4:6] + "/"
-	os.MkdirAll(path, 0700)
-	return path + fm
+func WorkTaskSave(r *gin.Context) {
+	//创建人在kb时候有账号
+	name := r.Query("name")
+	kbUserId, err := service.CheckCreateUserAccount(name)
+	if err != nil {
+		r.JSON(http.StatusOK, err)
+	}
+	//插入工单
+	task := &service.WordTask{
+		Title:       r.Query("title"),
+		Description: r.Query("description"),
+		Color_id:    "green",
+		Project_id:  784,
+		Column_id:   3283,
+		Position:    1,
+		Score:       0,
+		Creator_id:  kbUserId,
+	}
+	err = task.WordTaskSave()
+	if err != nil {
+		r.JSON(http.StatusOK, err)
+	}
+	//创建成功发送企微消息
+	err = service.SendWechatWorkMessage()
+	if err != nil {
+		r.JSON(http.StatusOK, err)
+	}
+	r.JSON(http.StatusOK, gin.H{
+		"success": 1,
+	})
 }

+ 0 - 0
controller/front.go → controller/resumeController.go


+ 2 - 1
go.mod

@@ -7,6 +7,8 @@ require (
 	github.com/gin-gonic/gin v1.10.0
 	github.com/go-sql-driver/mysql v1.9.0
 	github.com/google/uuid v1.6.0
+	github.com/mozillazg/go-pinyin v0.20.0
+	gopkg.in/yaml.v3 v3.0.1
 )
 
 require (
@@ -52,7 +54,6 @@ require (
 	golang.org/x/sys v0.20.0 // indirect
 	golang.org/x/text v0.22.0 // indirect
 	google.golang.org/protobuf v1.34.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
 )

+ 32 - 6
go.sum

@@ -1,13 +1,15 @@
-app.yhyue.com/moapp/jybase v0.0.0-20250228070014-019656d96e4c h1:oEl/0tbFg1nR5FWATXqpw1ks49Q6FHF5W2kM/OMauvQ=
-app.yhyue.com/moapp/jybase v0.0.0-20250228070014-019656d96e4c/go.mod h1:/HT/UZ4dKuUKAQqqKrzBBfIZ4vD56DPV4u2QyfH+kbU=
 app.yhyue.com/moapp/jybase v0.0.0-20250328063909-ff0268005add h1:4T3B/MlZKdv4W6yIeLiDNgTJbj/g0FRgSwvho2Otxvw=
 app.yhyue.com/moapp/jybase v0.0.0-20250328063909-ff0268005add/go.mod h1:OEtMbsn7wY/7MLgV7yDUpVDKExUoj3B8h+4w4ZckJQQ=
 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
+github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
+github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
 github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
 github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
 github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
+github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
+github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
 github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
 github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
@@ -15,6 +17,8 @@ github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQ
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
+github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
 github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
@@ -23,6 +27,10 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE
 github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
 github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
 github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
+github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
+github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
 github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
@@ -43,11 +51,15 @@ github.com/gogf/gf/v2 v2.7.0/go.mod h1:Qu8nimKt9aupJQcdUL85tWF4Mfxocz97zUt8UC4ab
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 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/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=
+github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E=
@@ -60,19 +72,31 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02
 github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
 github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
 github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
 github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
+github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
+github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
+github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
+github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
 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/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
+github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
+github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ=
+github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
+github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
+github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
 github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
 github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -92,6 +116,7 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
 github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
@@ -109,6 +134,8 @@ go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1
 go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
 go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
 go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
+go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY=
+go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM=
 go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M=
 go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8=
 golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
@@ -139,12 +166,11 @@ golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
 golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
 google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

+ 4 - 4
main.go

@@ -29,10 +29,10 @@ func main() {
 	router.Static("/static", "./static")
 
 	// 前台页面路由
-	router.GET("/resume/scanCode", controller.ScanCodeHandler)
-	router.GET("/resume/events", controller.EventsHandler)
-	router.POST("/resume/uploadFile", controller.UploadFile)
-
+	router.GET("/biBackService/resume/scanCode", controller.ScanCodeHandler)
+	router.GET("/biBackService/resume/events", controller.EventsHandler)
+	router.POST("/biBackService/kb/uploadFile", controller.UploadFile)
+	router.POST("/biBackService/kb/TaskSave", controller.WorkTaskSave)
 	// 后台管理页面的路由
 	//router.GET("/admin/search", adminSearchPageHandler)
 

+ 28 - 0
public/pinyin.go

@@ -0,0 +1,28 @@
+package public
+
+import (
+	"github.com/mozillazg/go-pinyin"
+	"strings"
+)
+
+// ConvertToPinyin 接收中文姓名并返回全拼和拼音首字母
+func ConvertToPinyin(name string) (fullPinyin, initials string) {
+	// 使用默认的汉字转换选项
+	args := pinyin.NewArgs()
+
+	// 获取拼音的二维数组
+	py := pinyin.Pinyin(name, args)
+
+	// 拼接全拼和首字母形式的拼音
+	var fullPinyinList []string
+	var initialsList []string
+	for _, syllable := range py {
+		fullPinyinList = append(fullPinyinList, syllable[0])        // 全拼音
+		initialsList = append(initialsList, string(syllable[0][0])) // 首字母
+	}
+
+	fullPinyin = strings.Join(fullPinyinList, "")
+	initials = strings.Join(initialsList, "")
+
+	return
+}

+ 140 - 0
service/kbService.go

@@ -0,0 +1,140 @@
+package service
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	. "bindresume/config"
+	"bindresume/public"
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"os"
+	"time"
+)
+
+// 定义消息结构体
+type WechatWorkMessage struct {
+	MsgType string      `json:"msgtype"`
+	Text    TextContent `json:"text"`
+}
+
+type TextContent struct {
+	Content string `json:"content"`
+}
+
+type WordTask struct {
+	Title       string `json:"title"`
+	Description string `json:"description"`
+	Color_id    string `json:"color_id"`
+	Project_id  int    `json:"project_id"`
+	Column_id   int    `json:"column_Id"`
+	Position    int    `json:"position"`
+	Score       int    `json:"score"`
+	Creator_id  int    `json:"creator_id"`
+}
+
+// GetFilePath 获取文件路径、名称
+func GetFilePath(fm, types string) (s string) {
+	var tm = time.Now().Format("20060102")
+	var path = SysConfig.FilePath + types + "/" + tm[:4] + "/" + tm[4:6] + "/"
+	os.MkdirAll(path, 0700)
+	return path + fm
+}
+
+// SendWechatWorkMessage 发送企业微信消息
+func SendWechatWorkMessage() error {
+	// 构造请求URL
+	fullURL := SysConfig.WechatWorkUrl
+	//params := url.Values{}
+	//params.Add("key", webhookKey)
+	//fullURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
+	message := &WechatWorkMessage{
+		MsgType: "text",
+		Text: TextContent{
+			Content: "今日天气:31度,大部分晴,降雨概率:0%",
+		},
+	}
+	/*messages := map[string]interface{}{
+		"msgtype": "text",
+		"text": map[string]interface{}{
+			"content": "今日天气:31度,大部分晴,降雨概率:0%",
+		},
+	}*/
+	payload, err := json.Marshal(message)
+	if err != nil {
+		return fmt.Errorf("JSON序列化失败: %v", err)
+	}
+
+	// 创建HTTP请求
+	req, err := http.NewRequest("POST", fullURL, bytes.NewBuffer(payload))
+	if err != nil {
+		return fmt.Errorf("发送企微消息创建请求失败: %v", err)
+	}
+	req.Header.Set("Content-Type", "application/json")
+
+	// 发送请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		return fmt.Errorf("发送企微消息请求发送失败: %v", err)
+	}
+	defer resp.Body.Close()
+
+	// 处理响应
+	if resp.StatusCode != http.StatusOK {
+		body, _ := ioutil.ReadAll(resp.Body)
+		return fmt.Errorf("发送企微消息API返回错误: 状态码 %d, 响应: %s", resp.StatusCode, string(body))
+	}
+
+	// 解析响应内容(可选)
+	var result map[string]interface{}
+	if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
+		return fmt.Errorf("发送企微消息响应解析失败: %v", err)
+	}
+
+	if errcode, ok := result["errcode"].(float64); ok && errcode != 0 {
+		return fmt.Errorf("企业微信API错误: %v", result["errmsg"])
+	}
+	return nil
+}
+
+func CheckCreateUserAccount(name string) (accountId int, err error) {
+	res := KbDb.FindOne("users", map[string]interface{}{"name": name}, `"id"`, "id DESC")
+	if res != nil && len(*res) > 0 {
+		accountId = common.IntAll((*res)["id"])
+	} else {
+		fullNamePy, username := public.ConvertToPinyin(name)
+		in := KbDb.Insert("users", map[string]interface{}{
+			"username":     username,
+			"password":     "$2y$10$HiZaBYTxhppdxmm259JcoO1NW4dWDkEZnPNC74ExRtj0sPFE7FB7m",
+			"is_ldap_user": 0,
+			"name":         name,
+			"email":        fmt.Sprintf("%s@topnet.net.cn", fullNamePy),
+		})
+		if in < 0 {
+			return 0, errors.New("创建用户信息出错")
+		}
+		accountId = int(in)
+	}
+
+	return accountId, nil
+}
+
+func (t *WordTask) WordTaskSave() error {
+	in := KbDb.Insert("tasks", map[string]interface{}{
+		"title":       t.Title,
+		"description": t.Description,
+		"color_id":    t.Color_id,
+		"project_id":  t.Project_id,
+		"column_Id":   t.Column_id,
+		"position":    t.Position,
+		"score":       t.Score,
+		"creator_id":  t.Creator_id,
+	})
+	if in < 0 {
+		return errors.New("创建任务失败")
+	}
+	return nil
+}

+ 0 - 0
service/bindResume.go → service/resumeService.go