diff --git a/app/utils/aes/aes_utils.go b/app/utils/aes/aes_utils.go new file mode 100644 index 0000000..902d7f9 --- /dev/null +++ b/app/utils/aes/aes_utils.go @@ -0,0 +1,76 @@ +package aes + +import ( + "bytes" + "crypto/aes" + "encoding/base64" +) + +const AesKey = "zhiyingos@qq.com" + +// 加密 +func AesEncryptByECB(key, data string) string { + // 判断key长度 + keyLenMap := map[int]struct{}{16: {}, 24: {}, 32: {}} + if _, ok := keyLenMap[len(key)]; !ok { + panic("key长度必须是 16、24、32 其中一个") + } + // 密钥和待加密数据转成[]byte + originByte := []byte(data) + keyByte := []byte(key) + // 创建密码组,长度只能是16、24、32 字节 + block, _ := aes.NewCipher(keyByte) + // 获取密钥长度 + blockSize := block.BlockSize() + // 补码 + originByte = PKCS7Padding(originByte, blockSize) + // 创建保存加密变量 + encryptResult := make([]byte, len(originByte)) + // CEB是把整个明文分成若干段相同的小段,然后对每一小段进行加密 + for bs, be := 0, blockSize; bs < len(originByte); bs, be = bs+blockSize, be+blockSize { + block.Encrypt(encryptResult[bs:be], originByte[bs:be]) + } + res := base64.StdEncoding.EncodeToString(encryptResult) + return res +} + +// 补码 +func PKCS7Padding(originByte []byte, blockSize int) []byte { + // 计算补码长度 + padding := blockSize - len(originByte)%blockSize + // 生成补码 + padText := bytes.Repeat([]byte{byte(padding)}, padding) + // 追加补码 + return append(originByte, padText...) +} + +// 解密 +func AesDecryptByECB(key, data string) string { + // 判断key长度 + keyLenMap := map[int]struct{}{16: {}, 24: {}, 32: {}} + if _, ok := keyLenMap[len(key)]; !ok { + panic("key长度必须是 16、24、32 其中一个") + } + // 反解密码base64 + originByte, _ := base64.StdEncoding.DecodeString(data) + // 密钥和待加密数据转成[]byte + keyByte := []byte(key) + // 创建密码组,长度只能是16、24、32字节 + block, _ := aes.NewCipher(keyByte) + // 获取密钥长度 + blockSize := block.BlockSize() + // 创建保存解密变量 + decrypted := make([]byte, len(originByte)) + for bs, be := 0, blockSize; bs < len(originByte); bs, be = bs+blockSize, be+blockSize { + block.Decrypt(decrypted[bs:be], originByte[bs:be]) + } + // 解码 + return string(PKCS7UNPadding(decrypted)) +} + +// 解码 +func PKCS7UNPadding(originDataByte []byte) []byte { + length := len(originDataByte) + unpadding := int(originDataByte[length-1]) + return originDataByte[:(length - unpadding)] +} diff --git a/consume/init.go b/consume/init.go index cd29daf..c680002 100644 --- a/consume/init.go +++ b/consume/init.go @@ -72,10 +72,10 @@ func initConsumes() { //jobs[consumeMd.CloudIssuanceMsgCallBackFunName] = CloudIssuanceMsgCallBackConsume //////////////////////////////////////// V2 ///////////////////////////////////////////////////// - jobs[consumeMd.SupplyCloudChainFenxiaoNewChangeFunName] = SupplyCloudChainFenxiaoNewChangeConsume + //jobs[consumeMd.SupplyCloudChainFenxiaoNewChangeFunName] = SupplyCloudChainFenxiaoNewChangeConsume //////////////////////////////////////// // V3 // ///////////////////////////////////////////////////// - //jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume + jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume } diff --git a/consume/mall_add_supply_goods.go b/consume/mall_add_supply_goods.go index 7e42f7c..09514f1 100644 --- a/consume/mall_add_supply_goods.go +++ b/consume/mall_add_supply_goods.go @@ -2,6 +2,7 @@ package consume import ( svc2 "applet/app/svc" + "applet/app/utils/aes" "applet/app/utils/logx" "applet/consume/md" md3 "applet/mall/md" @@ -24,6 +25,9 @@ func MallAddSupplyGoodsConsume(queue md.MqQueue) { return } defer ch.Release() + + //1、将自己绑定到交换机上 + ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) //2、取出数据进行消费 ch.Qos(10) delivery := ch.Consume(queue.Name, false) @@ -47,7 +51,14 @@ func MallAddSupplyGoodsConsume(queue md.MqQueue) { } func handleMallAddSupplyGoodsConsume(msgData []byte) error { + var msg map[string]string + err := json.Unmarshal(msgData, &msg) + if err != nil { + panic(err) + } + //解析mq中queue的数据结构体 + strs := aes.AesDecryptByECB(aes.AesKey, msg["aes_data"]) var pushStuct struct { Args struct { GoodsInfo []*md3.OfficialGoods `json:"goods_info"` @@ -55,7 +66,7 @@ func handleMallAddSupplyGoodsConsume(msgData []byte) error { } `json:"args"` Mid string `json:"mid"` } - err := json.Unmarshal(msgData, &pushStuct) + err = json.Unmarshal([]byte(strs), &pushStuct) if err != nil { panic(err) } diff --git a/consume/supply_cloud_chain_fenxiao_new_change.go b/consume/supply_cloud_chain_fenxiao_new_change.go index 4eac55b..8630b31 100644 --- a/consume/supply_cloud_chain_fenxiao_new_change.go +++ b/consume/supply_cloud_chain_fenxiao_new_change.go @@ -17,6 +17,7 @@ import ( "fmt" "github.com/gin-gonic/gin" "github.com/streadway/amqp" + "strconv" "strings" "time" ) @@ -191,6 +192,8 @@ func handleSupplyCloudChainFenxiaoNewChangeConsume(msgData []byte) error { utils.FilePutContents("cloudChainGoods", utils.SerializeStr(cloudChainGoods)) for _, id := range ids { + var req md2.AddGoodsReq + if cloudChainGoods[id] == nil { continue } @@ -203,9 +206,8 @@ func handleSupplyCloudChainFenxiaoNewChangeConsume(msgData []byte) error { continue } if getV2 { - continue + req.Base.GoodsId = strconv.FormatInt(goods.GoodsId, 10) } - var req md2.AddGoodsReq req.Base.GoodsType = 1 req.Base.CloudChainGoodsId = id req.Base.SaleState = enum.MallGoodsSaleStateOnShelf diff --git a/etc/cfg.yml b/etc/cfg.yml index 9bee1ce..dd7856a 100644 --- a/etc/cfg.yml +++ b/etc/cfg.yml @@ -29,10 +29,10 @@ wxapplet_filepath: # 连接官网数据库获取db mapping db: - host: 'zhios123.rwlb.rds.aliyuncs.com:3306' - name: 'zyos_website' - user: 'canal' - psw: 'canal' + host: '119.23.182.117:3306' + name: 'zyso_website_back' + user: 'root' + psw: 'Fnuo123com@' show_log: true max_lifetime: 30 max_open_conns: 100