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