Commit 0ad26449 by zhangjiec

主家长删除一个学生接口完成一半

parent 79bfae0c
......@@ -111,17 +111,10 @@ type CardUserType struct {
Name string
Sex uint8 //0,无信息,1女,2男
// Birthday
Grade int8
Class int8
StuNum string
Recharge bool //是否充过值
//PhoneAreaServiceID uint32
//LocationAreaServiceID uint32
//WaterAreaServiceID uint32
//PosAreaServiceID uint32
Grade int8
Class int8
StuNum string
Recharge bool //是否充过值
SimCardID string
LocationCardID uint32
IcCardID uint32
......
......@@ -59,7 +59,9 @@ func GetCardUserInfo(cardUserID uint32) (CardUserType, bool) {
zap.String("src", "GetCardUserInfo"))
}
} else {
// todo logger
logger.Log.Error("CardUserMap 有问题,没数据",
zap.Uint32("cardUserID", cardUserID),
zap.String("src", "GetCardUserInfo"))
}
var temp CardUserType
......
......@@ -7,7 +7,6 @@ import (
"fmt"
"go.uber.org/zap"
"log"
"strings"
"time"
)
......@@ -139,10 +138,15 @@ func GetWechatCustomerTestRole(userID uint32) (bool, bool) {
zap.Uint32("userID", userID))
}
if selectDBWechatCustomerByUserIDToCache(userID, &data) {
return data.TestRole, true
// 再查一遍库
unionID := dbdao.SelectUWeCustomerByUserIDToCacheModel(userID, &data)
if len(unionID) == 0 {
return false, false
}
return false, false
WechatCustomerUnionIDToIDMAP.Store(unionID, userID)
WechatCustomerMap.Store(userID, data)
return data.TestRole, true
}
func GetWechatCustomerUserIDByUnionID(unionID string) uint32 {
......@@ -174,147 +178,32 @@ func GetWechatCustomerInfoAndCanUpdateTokenTime(weUserID uint32, newTime int64)
zap.String("Src", "GetWechatCustomerInfo"),
zap.Uint32("weUserID", weUserID))
}
// 再查一遍库
unionID := dbdao.SelectUWeCustomerByUserIDToCacheModel(weUserID, &data)
if len(unionID) == 0 {
return data, false
}
data.TokenCreatTime = newTime
if selectDBWechatCustomerByUserIDToCache(weUserID, &data) {
return data, true
}
return data, false
WechatCustomerUnionIDToIDMAP.Store(unionID, weUserID)
WechatCustomerMap.Store(weUserID, data)
return data, true
}
func InsertWechatCustomerMap(unionID string, userInfo *model.CacheUWeCustomerStruct) uint32 {
//id := dbdao.InsertUWeCustomerUnionID(unionID)
//if id == 0{
//
//}
var err error
//var res sql.Result
var id uint32
for i := 0; i < 10; i++ {
err = dbdao.PgDb.QueryRow("INSERT INTO u_we_customer(unionid)VALUES($1)RETURNING id", unionID).Scan(&id)
if err == nil {
WechatCustomerUnionIDToIDMAP.Store(unionID, id)
WechatCustomerMap.Store(id, *userInfo)
fmt.Println(id, unionID, *userInfo)
return id // 这里是完全正常的情况
}
if strings.Contains(err.Error(), "duplicate key value") {
logger.Log.Error("InsertWechatCustomerMap unionID Err",
zap.Error(err))
return selectDBWechatCustomerByUnionIDToCache(unionID, userInfo)
}
fmt.Println("InsertWechatCustomerMap Err:", i, unionID, err)
time.Sleep(10 * time.Millisecond)
}
logger.Log.Error("InsertDevCommandErr Err",
zap.Error(err))
return 0
}
func selectDBWechatCustomerByUserIDToCache(userID uint32, userInfo *model.CacheUWeCustomerStruct) bool {
var unionID string
// 1. 查u_we_customer表获得基础数据
err := dbdao.PgDb.QueryRow("SELECT unionid,phone,nickname,avatarurl,test_role FROM u_we_customer WHERE id=$1", userID).Scan(
&unionID,
&userInfo.WePhone,
&userInfo.Nickname,
&userInfo.AvatarURL,
&userInfo.TestRole)
if err != nil {
logger.Log.Error("selectDBWechatCustomerByUserIDToCache 错误",
zap.Uint32("userID", userID),
zap.Error(err))
return false
userID, res := dbdao.InsertUWeCustomerUnionID(unionID)
if res == dbdao.InsertSysErr {
return 0
}
// 2. 查u_we_card_user表,获得绑定的学生数据
rows, err := dbdao.PgDb.Query("SELECT card_user_id,master FROM u_we_card_user WHERE we_user_id=$1 order by create_at", userID)
defer rows.Close()
if err != nil {
logger.Log.Error("selectDBWechatCustomerByUserIDToCache rows 错误",
zap.Uint32("userID", userID),
zap.Error(err))
return false
}
var cUserID uint32
var master bool
userInfo.MasterCardUserID = userInfo.MasterCardUserID[0:0]
userInfo.SlaveCardUserID = userInfo.SlaveCardUserID[0:0]
for rows.Next() {
err = rows.Scan(&cUserID, &master)
if err != nil {
logger.Log.Error("selectDBWechatCustomerByUserIDToCache rows.Scan",
zap.Uint32("userID", userID),
zap.Error(err))
continue
}
if master {
userInfo.MasterCardUserID = append(userInfo.MasterCardUserID, cUserID)
} else {
userInfo.SlaveCardUserID = append(userInfo.SlaveCardUserID, cUserID)
if res == dbdao.InsertDuplicate {
if userID = dbdao.SelectUWeCustomerByUnionIDToCacheModel(unionID, userInfo); userID == 0 {
return 0
}
}
// 处理完毕后,需要判断一次遍历过程中是否有错误产生
if err = rows.Err(); err != nil {
logger.Log.Error("selectDBWechatCustomerByUserIDToCache rows.Err()",
zap.Uint32("userID", userID),
zap.Error(err))
}
WechatCustomerUnionIDToIDMAP.Store(unionID, userID)
WechatCustomerMap.Store(userID, *userInfo)
return true
}
func selectDBWechatCustomerByUnionIDToCache(unionID string, userInfo *model.CacheUWeCustomerStruct) (userID uint32) { //返回userID
// 1. 查u_we_customer表获得基础数据
err := dbdao.PgDb.QueryRow("SELECT id,phone,nickname,avatarurl,test_role FROM u_we_customer WHERE unionid=$1", unionID).Scan(
&userID,
&userInfo.WePhone,
&userInfo.Nickname,
&userInfo.AvatarURL,
&userInfo.TestRole)
if err != nil {
logger.Log.Error("selectDBWechatCustomerByUnionIDToCache 错误",
zap.String("unionID", unionID),
zap.Error(err))
return
}
// 2. 查u_we_card_user表,获得绑定的学生数据
rows, err := dbdao.PgDb.Query("SELECT card_user_id,master FROM u_we_card_user WHERE we_user_id=$1 order by create_at", userID)
defer rows.Close()
if err != nil {
logger.Log.Error("selectDBWechatCustomerByUnionIDToCache rows 错误",
zap.Uint32("userID", userID),
zap.Error(err))
fmt.Println(err)
return
}
var cUserID uint32
var master bool
userInfo.MasterCardUserID = userInfo.MasterCardUserID[0:0]
userInfo.SlaveCardUserID = userInfo.SlaveCardUserID[0:0]
for rows.Next() {
err = rows.Scan(&cUserID, &master)
if err != nil {
logger.Log.Error("selectDBWechatCustomerByUnionIDToCache rows.Scan",
zap.Uint32("userID", userID),
zap.Error(err))
continue
}
if master {
userInfo.MasterCardUserID = append(userInfo.MasterCardUserID, cUserID)
} else {
userInfo.SlaveCardUserID = append(userInfo.SlaveCardUserID, cUserID)
}
}
// 处理完毕后,需要判断一次遍历过程中是否有错误产生
if err = rows.Err(); err != nil {
logger.Log.Error("selectDBWechatCustomerByUnionIDToCache rows.Err()",
zap.Uint32("userID", userID),
zap.Error(err))
}
WechatCustomerUnionIDToIDMAP.Store(unionID, userID)
WechatCustomerMap.Store(userID, *userInfo)
return
return userID
}
// InsertNewStudentIDToWechatCustomerMap 缓存定制方法:微信用户增加/绑定卡用户
......@@ -340,9 +229,12 @@ func InsertNewStudentIDToWechatCustomerMap(weUserID uint32, cardUserID uint32, m
zap.String("Src", "InsertNewStudentIDToWechatCustomerMap"),
zap.Uint32("weUserID", weUserID))
}
if selectDBWechatCustomerByUserIDToCache(weUserID, &data) {
return true
// 再查一遍库,库里面已经添加了学生数据了,就不用再添加了
unionID := dbdao.SelectUWeCustomerByUserIDToCacheModel(weUserID, &data)
if len(unionID) == 0 {
return false
}
return false
WechatCustomerUnionIDToIDMAP.Store(unionID, weUserID)
WechatCustomerMap.Store(weUserID, data)
return true
}
......@@ -6,6 +6,12 @@ import (
_ "github.com/lib/pq"
)
const ( //0 成功 1 唯一约束重复 9 系统繁忙
InsertOK uint8 = 0
InsertDuplicate uint8 = 1
InsertSysErr uint8 = 9
)
var PgDb *sql.DB
var stmtUpdateWechatUserLogin *sql.Stmt // 微信登录时间和登录次数更新
......
......@@ -552,7 +552,7 @@ var doc = `{
"tags": [
"家长微信"
],
"summary": "创建一个学生 [complete]",
"summary": "创建一个学生 [complete](同一微信号并发创建学生,缓存WechatCustomerMap弱安全)",
"parameters": [
{
"description": "学生信息",
......
......@@ -537,7 +537,7 @@
"tags": [
"家长微信"
],
"summary": "创建一个学生 [complete]",
"summary": "创建一个学生 [complete](同一微信号并发创建学生,缓存WechatCustomerMap弱安全)",
"parameters": [
{
"description": "学生信息",
......
......@@ -696,7 +696,7 @@ paths:
$ref: '#/definitions/api_we.creatCardUserRes'
security:
- ApiKeyAuth: []
summary: 创建一个学生 [complete]
summary: 创建一个学生 [complete](同一微信号并发创建学生,缓存WechatCustomerMap弱安全)
tags:
- 家长微信
/we/carduser/{id}:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment