作者 Administrator

合并分支 'test' 到 'master'

Test



查看合并请求 !7
  1 +
  2 +INSERT INTO "users"."menu"("menu_id", "parent_id", "menu_name", "code", "access_code", "menu_type", "icon", "sort", "remark", "category", "parent_path", "is_publish", "enable_status", "link") VALUES (274, 42, '同步考勤机', 'ADMIN_SYSTEM-MANAGE_BASE_USER_SYNC', 'w1-1-1-1-9', 'button', '', 9, '同步考勤机', '7', '37,39,40,42', 1, 0, NULL);
  1 +apiVersion: v1
  2 +kind: Service
  3 +metadata:
  4 + name: allied-creation-manufacture
  5 + namespace: mmm-suplus-test
  6 + labels:
  7 + k8s-app: allied-creation-manufacture
  8 +spec:
  9 + ports:
  10 + - name: "http"
  11 + port: 80
  12 + targetPort: 8082
  13 + selector:
  14 + k8s-app: allied-creation-manufacture
  15 +---
  16 +apiVersion: extensions/v1beta1
  17 +kind: Deployment
  18 +metadata:
  19 + name: allied-creation-manufacture
  20 + namespace: mmm-suplus-test
  21 + labels:
  22 + k8s-app: allied-creation-manufacture
  23 +spec:
  24 + replicas: 1
  25 + template:
  26 + metadata:
  27 + labels:
  28 + k8s-app: allied-creation-manufacture
  29 + spec:
  30 + affinity:
  31 + nodeAffinity:
  32 + preferredDuringSchedulingIgnoredDuringExecution:
  33 + - preference: {}
  34 + weight: 100
  35 + requiredDuringSchedulingIgnoredDuringExecution:
  36 + nodeSelectorTerms:
  37 + - matchExpressions:
  38 + - key: kubernetes.io/hostname
  39 + operator: In
  40 + values:
  41 + - cn-hangzhou.i-bp1djh1xn7taumbue1ze
  42 + - cn-hangzhou.i-bp1djh1xn7taumbue1zd
  43 + - cn-hangzhou.i-bp1euf5u1ph9kbhtndhb
  44 + - cn-hangzhou.i-bp1hyp5oips9cdwxxgxy
  45 + containers:
  46 + - name: allied-creation-manufacture
  47 + image: 192.168.0.243:5000/mmm/allied-creation-manufacture:dev
  48 + imagePullPolicy: Always
  49 + ports:
  50 + - containerPort: 8082
  51 + env:
  52 + - name: POSTGRESQL_DB_NAME
  53 + valueFrom:
  54 + configMapKeyRef:
  55 + name: suplus-config
  56 + key: postgresqlalliedcreation.dbname
  57 + - name: POSTGRESQL_USER
  58 + valueFrom:
  59 + configMapKeyRef:
  60 + name: suplus-config
  61 + key: postgresql.user
  62 + - name: POSTGRESQL_PASSWORD
  63 + valueFrom:
  64 + configMapKeyRef:
  65 + name: suplus-config
  66 + key: postgresql.password
  67 + - name: POSTGRESQL_HOST
  68 + valueFrom:
  69 + configMapKeyRef:
  70 + name: suplus-config
  71 + key: postgresql.host
  72 + - name: POSTGRESQL_PORT
  73 + valueFrom:
  74 + configMapKeyRef:
  75 + name: suplus-config
  76 + key: postgresql.port
  77 + - name: REDIS_HOST
  78 + valueFrom:
  79 + configMapKeyRef:
  80 + name: suplus-config
  81 + key: redis.ip
  82 + - name: REDIS_PORT
  83 + valueFrom:
  84 + configMapKeyRef:
  85 + name: suplus-config
  86 + key: redis.port
  87 + - name: REDIS_AUTH
  88 + value: ""
  89 + - name: LOG_LEVEL
  90 + value: "debug"
  91 + - name: ERROR_BASE_CODE
  92 + value: "1"
  93 + - name: ERROR_BASE_CODE_MULTIPLE
  94 + value: "2000"
  95 + - name: ENABLE_KAFKA_LOG
  96 + value: "true"
  97 + - name: HTTP_PORT
  98 + value: "8082"
  99 + - name: SERVICE_ENV
  100 + value: "test"
  101 + - name: SUPLUS_ADMIN_BASE_HOST
  102 + value: "http://suplus-admin-base-dev.fjmaimaimai.com"
  103 + - name: ALLIED_CREATION_GATEWAY_HOST
  104 + value: "https://allied-creation-gateway-test.fjmaimaimai.com"
  105 + - name: ALLIED_CREATION_USER_HOST
  106 + value: "https://allied-creation-user-test.fjmaimaimai.com"
  107 + - name: ALLIED_CREATION_COOPERATION_HOST
  108 + value: "https://allied-creation-cooperation-test.fjmaimaimai.com"
  109 + - name: ALLIED_CREATION_BASIC_HOST
  110 + value: "https://allied-creation-basic-test.fjmaimaimai.com"
  111 + - name: ALLIED_CREATION_MANUFACTURE_HOST
  112 + value: "http://allied-creation-manufacture-test.fjmaimaimai.com"
  113 + - name: SMS_SERVE_HOST
  114 + value: "https://sms.fjmaimaimai.com:9897"
  115 + - name: SUPLUS_SALE_APP
  116 + value: "http://suplus-sale-app-gateway-test.fjmaimaimai.com"
  117 + - name: MANUFACTURE_DEFAULT_COMPANYID
  118 + value: "23"
  119 + - name: MANUFACTURE_DEFAULT_ORGID
  120 + value: "487"
  121 + - name: MANUFACTURE_DEFAULT_WORKSHOPID
  122 + value: "28"
  123 + - name: MANUFACTURE_PRODUCT_TYPE
  124 + value: "SG,SG"
  125 + - name: MQTT_HOST
  126 + value: "47.97.5.102"
  127 + - name: MQTT_PORT
  128 + value: "6000"
@@ -176,3 +176,12 @@ func (gateway HttpLibAlliedCreationUser) OrgSearch(param ReqOrgSearch) (int, []* @@ -176,3 +176,12 @@ func (gateway HttpLibAlliedCreationUser) OrgSearch(param ReqOrgSearch) (int, []*
176 err := gateway.FastDoRequest(url, method, param, &data) 176 err := gateway.FastDoRequest(url, method, param, &data)
177 return data.Count, data.Orgs, err 177 return data.Count, data.Orgs, err
178 } 178 }
  179 +
  180 +// TerminalReport 终端汇报
  181 +func (gateway HttpLibAlliedCreationUser) TerminalReport(param ReqTerminalReport) (DataTerminalReport, error) {
  182 + url := gateway.Host() + "/terminal/report"
  183 + method := "post"
  184 + var data DataTerminalReport
  185 + err := gateway.FastDoRequest(url, method, param, &data)
  186 + return data, err
  187 +}
@@ -163,3 +163,21 @@ type ( @@ -163,3 +163,21 @@ type (
163 Orgs []*models.Organization `json:"orgs"` 163 Orgs []*models.Organization `json:"orgs"`
164 } 164 }
165 ) 165 )
  166 +
  167 +//返回组织列表
  168 +type (
  169 + ReqTerminalReport struct {
  170 + TerminalType string `json:"terminalType"`
  171 + TerminalId string `json:"terminalId"`
  172 + Command string `json:"command"`
  173 + Content string `json:"content"`
  174 + Table string `json:"table"`
  175 +
  176 + CompanyId int64 `json:"companyId"`
  177 + OrgId int64 `json:"orgId"`
  178 + }
  179 +
  180 + DataTerminalReport struct {
  181 + Response string `json:"response"`
  182 + }
  183 +)
@@ -8,7 +8,10 @@ import ( @@ -8,7 +8,10 @@ import (
8 "github.com/bwmarrin/snowflake" 8 "github.com/bwmarrin/snowflake"
9 jsonlib "github.com/linmadan/egglib-go/utils/json" 9 jsonlib "github.com/linmadan/egglib-go/utils/json"
10 "github.com/shopspring/decimal" 10 "github.com/shopspring/decimal"
  11 + "golang.org/x/text/encoding/simplifiedchinese"
  12 + "golang.org/x/text/transform"
11 "io" 13 "io"
  14 + "io/ioutil"
12 "reflect" 15 "reflect"
13 "strconv" 16 "strconv"
14 "strings" 17 "strings"
@@ -422,3 +425,21 @@ func Truncate(value float64, places int32) float64 { @@ -422,3 +425,21 @@ func Truncate(value float64, places int32) float64 {
422 rsp, _ := quantity.Float64() 425 rsp, _ := quantity.Float64()
423 return rsp 426 return rsp
424 } 427 }
  428 +
  429 +func Utf8ToGbk(s []byte) ([]byte, error) {
  430 + reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewEncoder())
  431 + d, e := ioutil.ReadAll(reader)
  432 + if e != nil {
  433 + return nil, e
  434 + }
  435 + return d, nil
  436 +}
  437 +
  438 +func GbkToUtf8(s []byte) ([]byte, error) {
  439 + reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewDecoder())
  440 + d, e := ioutil.ReadAll(reader)
  441 + if e != nil {
  442 + return nil, e
  443 + }
  444 + return d, nil
  445 +}
1 package controllers 1 package controllers
2 2
3 import ( 3 import (
  4 + "fmt"
  5 + "github.com/beego/beego/v2/server/web/context"
4 "github.com/linmadan/egglib-go/web/beego" 6 "github.com/linmadan/egglib-go/web/beego"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant"
5 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/allied-lib/gateway/allied_creation_user"
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService"
  11 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" 12 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
8 "strings" 13 "strings"
9 "time" 14 "time"
  15 + "unicode/utf8"
10 ) 16 )
11 17
12 type DeviceZKTecoController struct { 18 type DeviceZKTecoController struct {
@@ -21,7 +27,8 @@ func (controller *DeviceZKTecoController) PostCdata() { @@ -21,7 +27,8 @@ func (controller *DeviceZKTecoController) PostCdata() {
21 data := &domain.DeviceZkTeco{ 27 data := &domain.DeviceZkTeco{
22 Sn: sn, 28 Sn: sn,
23 } 29 }
24 - if len(bodyList) > 2 { 30 + table := controller.Ctx.Input.Query("table")
  31 + if len(bodyList) > 2 && table == "ATTLOG" {
25 data.UserNo = bodyList[0] 32 data.UserNo = bodyList[0]
26 //转成时间格式 33 //转成时间格式
27 mTime, err := time.ParseInLocation("2006-01-02 15:04:05", bodyList[1], time.Local) 34 mTime, err := time.ParseInLocation("2006-01-02 15:04:05", bodyList[1], time.Local)
@@ -36,6 +43,7 @@ func (controller *DeviceZKTecoController) PostCdata() { @@ -36,6 +43,7 @@ func (controller *DeviceZKTecoController) PostCdata() {
36 log.Logger.Debug(err.Error() + "data:" + bodyList[1]) 43 log.Logger.Debug(err.Error() + "data:" + bodyList[1])
37 } 44 }
38 } 45 }
  46 + RedirectToUserModule(controller.Ctx, false)
39 controller.Response(data, nil) 47 controller.Response(data, nil)
40 } 48 }
41 49
@@ -46,9 +54,72 @@ func (controller *DeviceZKTecoController) GetCdata() { @@ -46,9 +54,72 @@ func (controller *DeviceZKTecoController) GetCdata() {
46 54
47 func (controller *DeviceZKTecoController) GetRequest() { 55 func (controller *DeviceZKTecoController) GetRequest() {
48 //controller.Ctx.WriteString("C:11:DATA\tQUERY\tUSERINFO\tPIN=10086") 56 //controller.Ctx.WriteString("C:11:DATA\tQUERY\tUSERINFO\tPIN=10086")
49 - controller.Ctx.WriteString("OK") 57 + //controller.Ctx.WriteString("C:7EceWxtHB6:DATA QUERY USERINFO PIN=3")
  58 + //controller.Ctx.WriteString("OK")
  59 + RedirectToUserModule(controller.Ctx, true)
50 } 60 }
51 61
52 func (controller *DeviceZKTecoController) Ping() { 62 func (controller *DeviceZKTecoController) Ping() {
53 controller.Ctx.WriteString("OK") 63 controller.Ctx.WriteString("OK")
54 } 64 }
  65 +
  66 +func RedirectToUserModule(ctx *context.Context, useResult bool) {
  67 + var svr = allied_creation_user.NewHttpLibAlliedCreationUser(constant.ALLIED_CREATION_USER_HOST)
  68 + data := ctx.Input.RequestBody
  69 + uri := ctx.Request.URL.Path
  70 + sn := ctx.Input.Query("SN")
  71 + table := ""
  72 + cmd := uri
  73 + switch uri {
  74 + case "/zkteco/iclock/getrequest": // 获取下行命令
  75 + cmd = "getrequest"
  76 + case "/zkteco/iclock/cdata": // 上报数据
  77 + cmd = "cdata"
  78 + table = ctx.Input.Query("table")
  79 + case "/zkteco/iclock/devicecmd":
  80 + cmd = "devicecmd"
  81 + }
  82 + content := string(data)
  83 + if !utf8.Valid(data) {
  84 + utf8Content, _ := utils.GbkToUtf8(data) //ConvertToString(content, "gbk", "utf-8")
  85 + content = string(utf8Content)
  86 + }
  87 + param := allied_creation_user.ReqTerminalReport{
  88 + TerminalType: "zkteco",
  89 + TerminalId: sn,
  90 + Command: cmd,
  91 + CompanyId: int64(constant.MANUFACTURE_DEFAULT_COMPANYID),
  92 + OrgId: int64(constant.MANUFACTURE_DEFAULT_ORGID),
  93 + Table: table,
  94 + Content: content,
  95 + }
  96 + if !useResult {
  97 + log.Logger.Debug(fmt.Sprintf("命令透传(sn:%v)-命令:%v 命令(内容):%v 成功", sn, cmd, content))
  98 + go func() {
  99 + defer func() {
  100 + if p := recover(); p != nil {
  101 + log.Logger.Error(fmt.Sprintf("%v", p))
  102 + }
  103 + }()
  104 + svr.TerminalReport(param)
  105 + }()
  106 + return
  107 + }
  108 + response, err := svr.TerminalReport(param)
  109 + if err != nil {
  110 + log.Logger.Debug(fmt.Sprintf("命令透传(sn:%v)-命令:%v 命令(内容):%v 应答:%v 错误:%v", sn, cmd, string(data), response.Response, err.Error()))
  111 + ctx.WriteString("OK")
  112 + return
  113 + }
  114 + log.Logger.Debug(fmt.Sprintf("命令透传(sn:%v)-命令:%v 命令(内容):%v 应答:%v 成功", sn, cmd, string(data), response.Response))
  115 + gbkData, _ := utils.Utf8ToGbk([]byte(response.Response))
  116 + ctx.Output.Header("Content-Type", "text/plain;charset=gbk")
  117 + ack := string(gbkData)
  118 + ctx.WriteString(ack)
  119 +}
  120 +
  121 +func (controller *DeviceZKTecoController) DeviceCmd() {
  122 + //sn := controller.Ctx.Input.Query("SN")
  123 + RedirectToUserModule(controller.Ctx, false)
  124 + controller.Ctx.WriteString("OK")
  125 +}
@@ -21,4 +21,5 @@ func init() { @@ -21,4 +21,5 @@ func init() {
21 web.Router("/zkteco/iclock/cdata", &controllers.DeviceZKTecoController{}, "Get:GetCdata") 21 web.Router("/zkteco/iclock/cdata", &controllers.DeviceZKTecoController{}, "Get:GetCdata")
22 web.Router("/zkteco/iclock/getrequest", &controllers.DeviceZKTecoController{}, "Get:GetRequest") 22 web.Router("/zkteco/iclock/getrequest", &controllers.DeviceZKTecoController{}, "Get:GetRequest")
23 web.Router("/zkteco/iclock/ping", &controllers.DeviceZKTecoController{}, "Get:Ping") 23 web.Router("/zkteco/iclock/ping", &controllers.DeviceZKTecoController{}, "Get:Ping")
  24 + web.Router("/zkteco/iclock/devicecmd", &controllers.DeviceZKTecoController{}, "Post:DeviceCmd")
24 } 25 }