@@ -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)] | |||||
} |
@@ -140,7 +140,7 @@ func AnyToString(raw interface{}) string { | |||||
case bool: | case bool: | ||||
return strconv.FormatBool(i) | return strconv.FormatBool(i) | ||||
} | } | ||||
return fmt.Sprintf("%#v", raw) | |||||
return fmt.Sprintf("%+v", raw) | |||||
} | } | ||||
func AnyToFloat64(raw interface{}) float64 { | func AnyToFloat64(raw interface{}) float64 { | ||||
@@ -68,8 +68,13 @@ func initConsumes() { | |||||
//////////////////////////////////////// V2 ///////////////////////////////////////////////////// | //////////////////////////////////////// V2 ///////////////////////////////////////////////////// | ||||
//jobs[consumeMd.SupplyCloudChainFenxiaoNewChangeFunName] = SupplyCloudChainFenxiaoNewChangeConsume | //jobs[consumeMd.SupplyCloudChainFenxiaoNewChangeFunName] = SupplyCloudChainFenxiaoNewChangeConsume | ||||
<<<<<<< HEAD | |||||
//////////////////////////////////////// V3 ///////////////////////////////////////////////////// | //////////////////////////////////////// V3 ///////////////////////////////////////////////////// | ||||
//jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume | //jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume | ||||
======= | |||||
//////////////////////////////////////// // V3 // ///////////////////////////////////////////////////// | |||||
jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume | |||||
>>>>>>> f3435c10d69e233109d274335127cef21a8310f8 | |||||
} | } | ||||
@@ -2,6 +2,7 @@ package consume | |||||
import ( | import ( | ||||
svc2 "applet/app/svc" | svc2 "applet/app/svc" | ||||
"applet/app/utils/aes" | |||||
"applet/app/utils/logx" | "applet/app/utils/logx" | ||||
"applet/consume/md" | "applet/consume/md" | ||||
md3 "applet/mall/md" | md3 "applet/mall/md" | ||||
@@ -24,8 +25,11 @@ func MallAddSupplyGoodsConsume(queue md.MqQueue) { | |||||
return | return | ||||
} | } | ||||
defer ch.Release() | defer ch.Release() | ||||
//1、将自己绑定到交换机上 | |||||
ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) | |||||
//2、取出数据进行消费 | //2、取出数据进行消费 | ||||
ch.Qos(1) | |||||
ch.Qos(10) | |||||
delivery := ch.Consume(queue.Name, false) | delivery := ch.Consume(queue.Name, false) | ||||
var res amqp.Delivery | var res amqp.Delivery | ||||
@@ -47,7 +51,14 @@ func MallAddSupplyGoodsConsume(queue md.MqQueue) { | |||||
} | } | ||||
func handleMallAddSupplyGoodsConsume(msgData []byte) error { | func handleMallAddSupplyGoodsConsume(msgData []byte) error { | ||||
var msg map[string]string | |||||
err := json.Unmarshal(msgData, &msg) | |||||
if err != nil { | |||||
panic(err) | |||||
} | |||||
//解析mq中queue的数据结构体 | //解析mq中queue的数据结构体 | ||||
strs := aes.AesDecryptByECB(aes.AesKey, msg["aes_data"]) | |||||
var pushStuct struct { | var pushStuct struct { | ||||
Args struct { | Args struct { | ||||
GoodsInfo []*md3.OfficialGoods `json:"goods_info"` | GoodsInfo []*md3.OfficialGoods `json:"goods_info"` | ||||
@@ -55,7 +66,7 @@ func handleMallAddSupplyGoodsConsume(msgData []byte) error { | |||||
} `json:"args"` | } `json:"args"` | ||||
Mid string `json:"mid"` | Mid string `json:"mid"` | ||||
} | } | ||||
err := json.Unmarshal(msgData, &pushStuct) | |||||
err = json.Unmarshal([]byte(strs), &pushStuct) | |||||
if err != nil { | if err != nil { | ||||
panic(err) | panic(err) | ||||
} | } | ||||
@@ -17,6 +17,7 @@ import ( | |||||
"fmt" | "fmt" | ||||
"github.com/gin-gonic/gin" | "github.com/gin-gonic/gin" | ||||
"github.com/streadway/amqp" | "github.com/streadway/amqp" | ||||
"strconv" | |||||
"strings" | "strings" | ||||
"time" | "time" | ||||
) | ) | ||||
@@ -191,6 +192,8 @@ func handleSupplyCloudChainFenxiaoNewChangeConsume(msgData []byte) error { | |||||
utils.FilePutContents("cloudChainGoods", utils.SerializeStr(cloudChainGoods)) | utils.FilePutContents("cloudChainGoods", utils.SerializeStr(cloudChainGoods)) | ||||
for _, id := range ids { | for _, id := range ids { | ||||
var req md2.AddGoodsReq | |||||
if cloudChainGoods[id] == nil { | if cloudChainGoods[id] == nil { | ||||
continue | continue | ||||
} | } | ||||
@@ -203,9 +206,8 @@ func handleSupplyCloudChainFenxiaoNewChangeConsume(msgData []byte) error { | |||||
continue | continue | ||||
} | } | ||||
if getV2 { | if getV2 { | ||||
continue | |||||
req.Base.GoodsId = strconv.FormatInt(goods.GoodsId, 10) | |||||
} | } | ||||
var req md2.AddGoodsReq | |||||
req.Base.GoodsType = 1 | req.Base.GoodsType = 1 | ||||
req.Base.CloudChainGoodsId = id | req.Base.CloudChainGoodsId = id | ||||
req.Base.SaleState = enum.MallGoodsSaleStateOnShelf | req.Base.SaleState = enum.MallGoodsSaleStateOnShelf | ||||
@@ -29,10 +29,10 @@ wxapplet_filepath: | |||||
# 连接官网数据库获取db mapping | # 连接官网数据库获取db mapping | ||||
db: | 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 | show_log: true | ||||
max_lifetime: 30 | max_lifetime: 30 | ||||
max_open_conns: 100 | max_open_conns: 100 | ||||