From 47878f10e573eb05c2041e497aae0c7d2c5bac7a Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期四, 29 六月 2023 19:06:44 +0800 Subject: [PATCH] 添加生产任务单接口 --- config.json | 19 ++- config/config.go | 13 + webserver/controller.go | 17 +++ gui/gui.go | 5 report/loop.go | 2 webserver/router.go | 1 kingdee/query.go | 8 kingdee/cst.go | 190 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 236 insertions(+), 19 deletions(-) diff --git a/config.json b/config.json index 401eb49..b04f638 100644 --- a/config.json +++ b/config.json @@ -1,15 +1,18 @@ { "web_port": "10210", - "sql_addr": "10.6.201.7", + "sql_addr": "192.168.20.249", "sql_db_name": "LZGS", - "sql_username": "webapi", - "sql_password": "api2023", + "sql_username": "sa", + "sql_password": "basic@2023", "nsq_server": "fai365.com:4150", - "nsq_webapi": "http://121.31.232.83:9080/api/nsq/pub", - "order_topic": "aps.wangpengfei.erp.seorder", - "inventory_topic": "aps.wangpengfei.erp.inventory", - "query_topic": "aps.wangpengfei.erp.k3resource", - "reply_topic": "aps.wangpengfei.erp.k3repley", + "nsq_webapi": "http://121.31.232.83:9080/api/nsq/pub?topic=your_topic", + "order_topic": "aps.factory.erp.seorder", + "inventory_topic": "aps.factory.erp.inventory", + "query_topic": "aps.factory.erp.k3resource", + "reply_topic": "aps.factory.erp.k3reply", + "cst_webapi": "http://192.168.20.249/cst/local_post.ashx", + "cst_query_topic": "aps.factory.erp.cstApply", + "cst_reply_topic": "aps.factory.erp.cstReply", "interval": 60, "debug": false } \ No newline at end of file diff --git a/config/config.go b/config/config.go index 1627c5b..fbeb267 100644 --- a/config/config.go +++ b/config/config.go @@ -18,8 +18,11 @@ NsqWebApi string `json:"nsq_webapi"` // nsq HTTP鎺ュ彛鍦板潃 OrderTopic string `json:"order_topic"` // 璁㈠崟涓婃姤鐨則opic InventoryTopic string `json:"inventory_topic"` // 搴撳瓨涓婃姤鐨則opic - QueryTopic string `json:"query_topic"` // 閲戣澏鏌ヨ鎺ュ彛鐨則opic - ReplyTopic string `json:"reply_topic"` // 閲戣澏鍝嶅簲鏌ヨ鎺ュ彛鐨則opic + SqlQueryTopic string `json:"query_topic"` // 閲戣澏鏌ヨ鎺ュ彛鐨則opic + SqlReplyTopic string `json:"reply_topic"` // 閲戣澏鍝嶅簲鏌ヨ鎺ュ彛鐨則opic + CSTWebApi string `json:"cst_webapi"` // 鐢熶骇浠诲姟鍗曟彁浜ゅ湴鍧� + CSTQueryTopic string `json:"cst_query_topic"` // 鎻愪氦鐢熶骇浠诲姟鍗曚富棰� + CSTReplyTopic string `json:"cst_reply_topic"` // 鍝嶅簲鐢熶骇浠诲姟鍗曚富棰� SyncInterval int `json:"interval"` // 鍚屾鐨勬椂闂撮棿闅�, 鍗曚綅/绉� Debug bool `json:"debug"` // 鏈湴璋冭瘯, 鍙栨湰鍦版暟鎹� } @@ -38,8 +41,10 @@ Options.NsqWebApi = "http://121.31.232.83:9080/api/nsq/pub?topic=your_topic" Options.OrderTopic = "aps.factory.erp.seorder" Options.InventoryTopic = "aps.factory.erp.inventory" - Options.QueryTopic = "aps.factory.erp.k3resource" - Options.ReplyTopic = "aps.factory.erp.k3reply" + Options.SqlQueryTopic = "aps.factory.erp.k3resource" + Options.SqlReplyTopic = "aps.factory.erp.k3reply" + Options.CSTQueryTopic = "aps.factory.erp.cstApply" + Options.CSTReplyTopic = "aps.factory.erp.cstReply" Options.SyncInterval = 60 Options.Debug = false } diff --git a/gui/gui.go b/gui/gui.go index 8276e0c..fcaa3b5 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -93,8 +93,9 @@ report.StartReport() - // 寮�鍚闃� - go nsqclient.InitNsqConsumer(config.Options.QueryTopic, "sensor01", kingdee.QueryMsgHandle) + // 寮�鍚闃匰QL鏌ヨ + go nsqclient.InitNsqConsumer(config.Options.SqlQueryTopic, "sensor01", kingdee.SqlQueryHandle) + go nsqclient.InitNsqConsumer(config.Options.CSTQueryTopic, "sensor01", kingdee.CSTQueryHandle) go webserver.Serve(serverPort.Text) }) diff --git a/kingdee/cst.go b/kingdee/cst.go new file mode 100644 index 0000000..076286a --- /dev/null +++ b/kingdee/cst.go @@ -0,0 +1,190 @@ +package kingdee + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "kingdee-dbapi/config" + "kingdee-dbapi/logger" + "kingdee-dbapi/nsqclient" + "mime/multipart" + "net/http" + "strconv" + "time" +) + +var JoHeadTemplate = ` + { + "fdate": "%s", //鏃ユ湡 褰撳ぉ鏃ユ湡 + "ftype": 1054, //鍥哄畾鍊� + "forderinterid": 0, //鍥哄畾鍊� + "fpporderinterid": 0, //鍥哄畾鍊� + "fparentinterid": 0, //鍥哄畾鍊� + "fsupplyid": 0, //鍥哄畾鍊� + "fplanconfirmed": 0, //璁″垝纭 + "fplanmode": 14036, //璁″垝妯″紡 + "fworktypeid": 55, //鐢熶骇绫诲瀷 + "fmrp": 1052, //鍗曟嵁鏉ユ簮 + "fbomcategory": 36820, //BOM 绫诲埆 + "fcardclosed": 1059, //娴佽浆鍗″叧鑱斿叧闂� + "fprintcount": 0, //鎵撳嵃娆℃暟 + "ffinclosed": 0, //璐㈠姟缁撶畻鏍囧織 + "ffinclosedate": "", //璐㈠姟缁撶畻鏃ユ湡 + "ffincloseer": 0, //璐㈠姟缁撶畻浜� + "fmtono": " ", //璁″垝璺熻釜鍙�: + "fauxqtyforitem": 0, //鍥犳枡鎶ュ簾鏁伴噺 + "funitid": 0, //鍗曚綅 鎺ュ彛鑷姩鑾峰彇, 璁剧疆鎴�0灏卞彲浠� + "fcostobjid": 0, //鎴愭湰瀵硅薄 , 鎺ュ彛鑷姩鑾峰彇, 璁剧疆鎴�0灏卞彲浠� + "fbominterid": 0, //BOM缂栧彿 鎺ュ彛鑷姩鑾峰彇, 璁剧疆鎴�0灏卞彲浠� + "fbillerid": 16394, //涓庡埗鍗曚汉涓�鑷� + "fplancategory": 2, //璁″垝绫诲埆 + "fcheckdate": "%s", //鍒跺崟鏃ユ湡 + "fstartdate": "%s", //寮�宸ユ棩鏈� + "ffinishdate": "%s", //瀹屽伐鏃ユ湡 + "fplancommitdate": "%s", //璁″垝寮�宸ユ棩鏈� + "fplanfinishdate": "%s", //璁″垝瀹屽伐鏃ユ湡 + "fitemid": "%s->", //鐗╂枡缂栫爜 * + "fworkshop": "%s->", //鐢熶骇杞﹂棿缂栧彿 + "fauxqty": %d, //璁″垝鐢熶骇鏁伴噺 + "fauxinhighlimitqty": %d, //瀹屽伐鍏ュ簱涓婇檺 + "fauxinlowlimitqty": %d, //瀹屽伐鍏ュ簱涓嬮檺 + "finhighlimit": 0, //瀹屽伐鍏ュ簱瓒呮敹姣斾緥 + "finlowlimit": 0 //瀹屽伐鍏ュ簱娆犳敹姣斾緥 + } +` + +type CSTNsqQuery struct { + FBillNo string `json:"FBillNo"` // 璁㈠崟缂栧彿 + FNumber string `json:"FNumber"` // 鐗╂枡浠g爜 + FSource string `json:"FSource"` // 鐢熶骇杞﹂棿浠g爜 + FStartDate string `json:"FStartDate"` // 寮�宸ユ棩鏈� + FFinishDate string `json:"FFinishDate"` // 瀹屽伐鏃ユ湡 + UseAmount float64 `json:"UseAmount"` // 浣跨敤鏁伴噺 +} + +type CSTNsqReply struct { + FBillNo string `json:"fBillNo"` // 璁㈠崟缂栧彿 + Code int `json:"code"` // CST鎺ュ彛杩斿洖鐨刢ode + Message string `json:"message"` // 鎴愬姛鍒欒繑鍥炲崟鍙�, 澶辫触杩斿洖 +} + +type CSTServiceResponse struct { + ErrCode int `json:"errcode"` + ErrMsg string `json:"errmsg"` + Data struct { + FBillNo string `json:"fbillno"` + FBillId string `json:"fbillid"` + FTranType string `json:"ftrantype"` + FClassTypeId int `json:"fclasstypeid"` + } `json:"data"` +} + +func CSTQueryHandle(msg []byte) error { + var query []CSTNsqQuery + var reply []CSTNsqReply + + if err := json.Unmarshal(msg, &query); err != nil { + logger.Warn("瑙f瀽璇锋眰澶辫触, %s", err.Error()) + return err + } + + for _, q := range query { + ret := Commit2CSTService(q) + reply = append(reply, ret) + } + + replyData, _ := json.Marshal(reply) + ok := nsqclient.Produce(config.Options.CSTReplyTopic, replyData) + logger.Warn("搴旂瓟鏌ヨ璇锋眰缁撴灉:%t, key:%s", ok, replyData) + + return nil +} + +func Commit2CSTService(order CSTNsqQuery) (result CSTNsqReply) { + fmt.Println(order) + result.Code = -1 + + today := time.Now().Format("2006-01-02") + joHead := fmt.Sprintf(JoHeadTemplate, + today, // 鏃ユ湡 + today, // 鍒跺崟鏃ユ湡 + order.FStartDate, // 寮�宸ユ棩鏈� + order.FFinishDate, // 瀹屽伐鏃ユ湡 + order.FStartDate, // 璁″垝寮�宸ユ棩鏈� + order.FFinishDate, // 璁″垝瀹屽伐鏃ユ湡 + order.FNumber, // 鐗╂枡缂栫爜 + order.FSource, // 鐢熶骇杞﹂棿缂栫爜 + int(order.UseAmount), // 鐢熶骇鏁伴噺 + int(order.UseAmount), // 瀹屽伐鍏ュ簱涓婇檺 + int(order.UseAmount), // 瀹屽伐鍏ュ簱涓嬮檺 + ) + fmt.Println(joHead) + params := map[string]string{ + "action": "鐢熶骇浠诲姟鍗�.鏂板", + "fuserid": "16394", + "jo_head": joHead, + "ja_body": "[{}]", + } + + request, err := newMultipartRequest(config.Options.CSTWebApi, params) + if err != nil { + result.Message = err.Error() + return + } + + client := &http.Client{} + resp, err := client.Do(request) + if err != nil { + result.Message = err.Error() + return + } + + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + result.Message = err.Error() + return + } + + var rspMsg CSTServiceResponse + err = json.Unmarshal(body, &rspMsg) + if err != nil { + result.Message = err.Error() + return + } + + if rspMsg.ErrCode == 0 { + result.Code = 0 + result.Message = rspMsg.Data.FBillNo + } else { + result.Code = rspMsg.ErrCode + result.Message = rspMsg.ErrMsg + } + + return +} + +func newMultipartRequest(url string, params map[string]string) (*http.Request, error) { + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + // 璁剧疆Boundary, 鎺ュ彛楠岃瘉浜嗗叚涓�- + err := writer.SetBoundary("------basicHttpClient" + strconv.Itoa(int(time.Now().Unix()))) + if err != nil { + fmt.Println(err.Error()) + } + for key, val := range params { + _ = writer.WriteField(key, val) + } + + writer.Close() + + req, err := http.NewRequest("POST", url, body) + req.Header.Set("Content-Type", writer.FormDataContentType()) + req.Header.Set("User-Agent", "basicHttpClient/0.0.1") + req.Header.Set("Connection", "keep-alive") + req.Header.Set("Accept", "*/*") + + return req, err +} diff --git a/kingdee/query.go b/kingdee/query.go index 2da57a5..37e75c0 100644 --- a/kingdee/query.go +++ b/kingdee/query.go @@ -10,7 +10,7 @@ "kingdee-dbapi/nsqclient" ) -type QueryMsg struct { +type SqlQueryMsg struct { Key string // 璇锋眰 Command string Success bool @@ -18,8 +18,8 @@ Result []byte } -func QueryMsgHandle(msg []byte) error { - var query QueryMsg +func SqlQueryHandle(msg []byte) error { + var query SqlQueryMsg if err := json.Unmarshal(msg, &query); err != nil { logger.Warn("瑙f瀽璇锋眰澶辫触, %s", err.Error()) @@ -45,7 +45,7 @@ } replyData, _ := json.Marshal(query) - ok := nsqclient.Produce(config.Options.ReplyTopic, replyData) + ok := nsqclient.Produce(config.Options.SqlReplyTopic, replyData) logger.Warn("搴旂瓟鏌ヨ璇锋眰缁撴灉:%t, key:%s", ok, query.Key) return nil diff --git a/report/loop.go b/report/loop.go index be026dc..4fddf91 100644 --- a/report/loop.go +++ b/report/loop.go @@ -38,7 +38,7 @@ // 娴嬭瘯鏌ヨ璇锋眰 //sql := []byte("select * from t_icitem where FItemID=3316") - //ok := nsqclient.Produce(config.Options.QueryTopic, sql) + //ok := nsqclient.Produce(config.Options.SqlQueryTopic, sql) //logger.Debug("娴嬭瘯璇锋眰鎺ュ彛, %v", ok) time.Sleep(time.Duration(config.Options.SyncInterval) * time.Second) diff --git a/webserver/controller.go b/webserver/controller.go index 503e96f..171e757 100644 --- a/webserver/controller.go +++ b/webserver/controller.go @@ -1,6 +1,7 @@ package webserver import ( + "fmt" "kingdee-dbapi/kingdee" "github.com/gin-gonic/gin" @@ -25,3 +26,19 @@ "total": len(rspData), }) } + +func CSTCommit(c *gin.Context) { + var req kingdee.CSTNsqQuery + if err := c.ShouldBind(&req); err != nil { + c.JSON(401, gin.H{"msg": err.Error()}) + return + } + fmt.Println(req) + rsp := kingdee.Commit2CSTService(req) + + c.JSON(200, gin.H{ + "success": true, + "message": "", + "data": rsp, + }) +} diff --git a/webserver/router.go b/webserver/router.go index d991e38..e26a0ff 100644 --- a/webserver/router.go +++ b/webserver/router.go @@ -8,6 +8,7 @@ r := gin.Default() r.GET("/order", OrderList) r.GET("/inventory", InventoryList) + r.POST("/cst", CSTCommit) r.Run(":" + port) } -- Gitblit v1.8.0