Procházet zdrojové kódy

提交设备信息更新

wangbin před 2 roky
rodič
revize
9cedad129e

+ 1 - 1
api/v1/log/loging.go

@@ -409,7 +409,7 @@ func (s *ApiLoging) ComputerHeartbeat(c *gin.Context) {
 func (s *ApiLoging) ComputerTest(c *gin.Context) {
 	var paramsInfo request.OnlineComputerRequest
 	_ = c.ShouldBindJSON(&paramsInfo)
-	ServiceStatisticsLog.ImageIdentify(paramsInfo.PcCode)
+	//ServiceStatisticsLog.ImageIdentify(paramsInfo.PcCode)
 	response.OkWithDetailed("b", "上报成功", c)
 }
 

+ 56 - 45
initialize/timer.go

@@ -67,12 +67,12 @@ func Timer() {
 	//	fmt.Println("add TaskStatisticsDataCache timer error:", err)
 	//}
 	//// 重试失败数据
-	//_, err = global.GVA_Timer.AddTaskByFunc("createFailLog", "2 5,15,25,35,45,55 6-23 * * * ", ServiceLogList.CreateFailLog)
+	//_, err = global.GVA_Timer.AddTaskByFunc("createFailLog", "2 15,35,55 6-23 * * * ", ServiceLogList.CreateFailLog)
 	//if err != nil {
 	//	fmt.Println("everyDayResetStatisticsCache timer error:", err)
 	//}
 	//// 定时检查电脑上报
-	//_, err = global.GVA_Timer.AddTaskByFunc("RegularCheckPc", "2 57 8-23 * * * ", serviceStatisticsLog.RegularCheckPc)
+	//_, err = global.GVA_Timer.AddTaskByFunc("RegularCheckPc", "2 2 9-23 * * * ", serviceStatisticsLog.RegularCheckPc)
 	//if err != nil {
 	//	fmt.Println("RegularCheckPc timer error:", err)
 	//}
@@ -92,7 +92,7 @@ func Timer() {
 	//	fmt.Println("add EveryDaySyncTaskData timer error:", err)
 	//}
 	////同步任务数据
-	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTaskData", "2 0/3 1-23 * * *", syncData.SyncTaskData)
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTaskData", "2 1/3 1-23 * * *", syncData.SyncTaskData)
 	//if err != nil {
 	//	fmt.Println("add SyncTaskData timer error:", err)
 	//}
@@ -115,41 +115,36 @@ func Timer() {
 	//
 	////定时获取扫码平台余额,每小时执行一次
 	////_, err = global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 58 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
-	//_, err = global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 58 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
-	//if err != nil {
-	//	fmt.Println("add UpdateGameVersion timer error:", err)
-	//}
+	////_, err = global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 58 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
+	////if err != nil {
+	////	fmt.Println("add UpdateGameVersion timer error:", err)
+	////}
 	////定时更新异常率
 	//_, err = global.GVA_Timer.AddTaskByFunc("SyncAbnormalRateByBatch", "0 1,31 * * * *", serviceDataAbnormalRate.SyncAbnormalRateByBatch)
 	//if err != nil {
 	//	fmt.Println("add SyncAbnormalRateByBatch timer error:", err)
 	//}
 	//
-	////定时更新当日微信扫码订单列表
-	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTodayWeChatScannerDetailed", "0 3,33 * * * *", serviceWeChatScannerDetailed.SyncTodayWeChatScannerDetailed)
-	//if err != nil {
-	//	fmt.Println("add SyncTodayWeChatScannerDetailed timer error:", err)
-	//}
+	//////定时更新当日微信扫码订单列表
+	////_, err = global.GVA_Timer.AddTaskByFunc("SyncTodayWeChatScannerDetailed", "0 3,33 * * * *", serviceWeChatScannerDetailed.SyncTodayWeChatScannerDetailed)
+	////if err != nil {
+	////	fmt.Println("add SyncTodayWeChatScannerDetailed timer error:", err)
+	////}
 	//
-	////0点更新昨日微信扫码订单列表
-	//_, err = global.GVA_Timer.AddTaskByFunc("SyncYesterdayWeChatScannerDetailed", "1 1 0 * * *", serviceWeChatScannerDetailed.SyncYesterdayWeChatScannerDetailed)
-	//if err != nil {
-	//	fmt.Println("add SyncYesterdayWeChatScannerDetailed timer error:", err)
-	//}
+	//////0点更新昨日微信扫码订单列表
+	////_, err = global.GVA_Timer.AddTaskByFunc("SyncYesterdayWeChatScannerDetailed", "1 1 0 * * *", serviceWeChatScannerDetailed.SyncYesterdayWeChatScannerDetailed)
+	////if err != nil {
+	////	fmt.Println("add SyncYesterdayWeChatScannerDetailed timer error:", err)
+	////}
 	//
-	////半小时同步一次机房设备信息,播报是否有异常
-	//_, err = global.GVA_Timer.AddTaskByFunc("SyncJfDevicesMessage", "0 0,30 * * * *", robotService.SyncJfDevicesMessage)
-	//if err != nil {
-	//	fmt.Println("add SyncJfDevicesMessage timer error:", err)
-	//}
-	//定时获取机房小绵羊新号剩余
-	//_, err := global.GVA_Timer.AddTaskByFunc("SyncJfXmyNewAccount", "0 0,30 * * * *", robotService.SyncJfXmyNewAccount)
-	//if err != nil {
-	//	fmt.Println("add SyncJfXmyNewAccount timer error:", err)
-	//}
+	//////半小时同步一次机房设备信息,播报是否有异常
+	////_, err = global.GVA_Timer.AddTaskByFunc("SyncJfDevicesMessage", "0 0,30 * * * *", robotService.SyncJfDevicesMessage)
+	////if err != nil {
+	////	fmt.Println("add SyncJfDevicesMessage timer error:", err)
+	////}
 	//
 	//// 活跃定时推送消息
-	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 2/32 8-21 * * *", syncData.TaskMsgSend)
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 2/30 8-21 * * *", syncData.TaskMsgSend)
 	//if err != nil {
 	//	fmt.Println("add TaskMsgSend timer error:", err)
 	//}
@@ -173,7 +168,7 @@ func Timer() {
 	//}
 	//
 	//// 23起检测任务完成情况
-	//_, err = global.GVA_Timer.AddTaskByFunc("CheckTaskCompletedInfo", "57 5/4 23 * * *", syncData.CheckTaskCompletedInfo)
+	//_, err = global.GVA_Timer.AddTaskByFunc("CheckTaskCompletedInfo", "57 10/4 23 * * *", syncData.CheckTaskCompletedInfo)
 	//if err != nil {
 	//	fmt.Println("add CheckTaskCompletedInfo timer error:", err)
 	//}
@@ -191,33 +186,49 @@ func Timer() {
 	//}
 	//
 	//// 定时同步arpu值
-	//_, err = global.GVA_Timer.AddTaskByFunc("SyncArpu", "50 36 7,12,23 * * *", syncData.SyncArpu)
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncArpu", "50 36 23 * * *", syncData.SyncArpu)
 	//if err != nil {
 	//	fmt.Println("add SyncArpu timer error:", err)
 	//}
 	//
 	//// 提醒修改腾讯目标
-	//_, err = global.GVA_Timer.AddTaskByFunc("RemindSendOne", "11 2 18,22 * * *", syncData.RemindSendOne)
+	////_, err = global.GVA_Timer.AddTaskByFunc("RemindSendOne", "11 2 18,22 * * *", syncData.RemindSendOne)
+	////if err != nil {
+	////	fmt.Println("add RemindSendOne timer error:", err)
+	////}
+	//
+	////定时获取机房小绵羊新号剩余
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncJfXmyNewAccount", "0 0,30 * * * *", robotService.SyncJfXmyNewAccount)
 	//if err != nil {
-	//	fmt.Println("add RemindSendOne timer error:", err)
+	//	fmt.Println("add SyncJfXmyNewAccount timer error:", err)
 	//}
-
-	//一小时同步一次IP信息,播报是否有异常
-	//_, err := global.GVA_Timer.AddTaskByFunc("SyncIPMessage", "0 0 * * * ? ", robotService.SyncIPMessage)
+	//
+	//// 设备信息
+	//_, err = global.GVA_Timer.AddTaskByFunc("DeviceStatistics", "10 9/10 8-23 * * *", serviceStatisticsLog.DeviceStatistics)
 	//if err != nil {
-	//	fmt.Println("add SyncIPMessage timer error:", err)
+	//	fmt.Println("add DeviceStatistics timer error:", err)
 	//}
-
-
-	//每天凌晨3点删除一次过期图片信息
-	_, err := global.GVA_Timer.AddTaskByFunc("DeleteExpireImageRecord", "0 0 3 * * ? ", imageRecordService.DeleteExpireImageRecord)
-	if err != nil {
-		fmt.Println("add DeleteExpireImageRecord timer error:", err)
-	}
-
+	//
 	////定时查看延迟更新的镜像是否到期
-	//_, err = global.GVA_Timer.AddTaskByFunc("CheckPushTime", "35 0/2 * * * *", serviceFileQiniu.CheckPushTime)
+	//_, err = global.GVA_Timer.AddTaskByFunc("CheckPushTime", "35 0/5 * * * *", serviceFileQiniu.CheckPushTime)
 	//if err != nil {
 	//	fmt.Println("add CheckPushTime timer error:", err)
 	//}
+	//
+	//// 半小时同步一次IP信息,播报是否有异常
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncIPMessage", "50 8/10 9-23 * * ? ", robotService.SyncIPMessage)
+	//if err != nil {
+	//	fmt.Println("add SyncIPMessage timer error:", err)
+	//}
+	//
+	//_, err = global.GVA_Timer.AddTaskByFunc("ComputerUpdateStatus", "30 1/5 8-23 * * *", serviceStatisticsLog.ComputerUpdateStatus)
+	//if err != nil {
+	//	fmt.Println("add ComputerUpdateStatus timer error:", err)
+	//}
+	//
+	////每天凌晨3点删除一次过期图片信息
+	//_, err = global.GVA_Timer.AddTaskByFunc("DeleteExpireImageRecord", "0 0 3 * * ? ", imageRecordService.DeleteExpireImageRecord)
+	//if err != nil {
+	//	fmt.Println("add DeleteExpireImageRecord timer error:", err)
+	//}
 }

+ 145 - 4
service/levelMonitor/image_record.go

@@ -1,13 +1,21 @@
 package levelMonitor
 
 import (
+	"context"
+	"encoding/json"
 	"errors"
+	"fmt"
 	"go.uber.org/zap"
 	"gorm.io/gorm"
+	"io/ioutil"
 	"log-server/global"
 	"log-server/model/common/request"
 	"log-server/model/levelMonitor"
 	levelRequest "log-server/model/levelMonitor/request"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -15,7 +23,7 @@ type ImageRecordService struct {
 }
 
 //创建图片记录
-func (s *ImageRecordService) CreateImageRecord (record levelMonitor.ImageRecord) (err error) {
+func (s *ImageRecordService) CreateImageRecord(record levelMonitor.ImageRecord) (err error) {
 	//获取今日日期
 	date := time.Now().Format("2006-01-02")
 	var entity levelMonitor.ImageRecord
@@ -24,14 +32,19 @@ func (s *ImageRecordService) CreateImageRecord (record levelMonitor.ImageRecord)
 	record.Status = 2
 	//查找数据库是否存在此账号此游戏今日记录
 	err = global.GVA_DB.Model(&levelMonitor.ImageRecord{}).Where("task_id = ? and account = ? and create_date = ?", record.TaskId, record.Account, date).First(&entity).Error
-	if !errors.Is(err , gorm.ErrRecordNotFound) {
+	if !errors.Is(err, gorm.ErrRecordNotFound) {
 		return errors.New("此记录已存在,请勿重复添加")
 	}
-	return global.GVA_DB.Model(&levelMonitor.ImageRecord{}).Omit("create_time", "update_time").Create(&record).Error
+	err = global.GVA_DB.Model(&levelMonitor.ImageRecord{}).Omit("create_time", "update_time").Create(&record).Error
+	if err != nil {
+		return err
+	}
+	go s.ImageIdentify(record)
+	return
 }
 
 //删除三日前的图片记录
-func (s *ImageRecordService) DeleteExpireImageRecord() ()  {
+func (s *ImageRecordService) DeleteExpireImageRecord() {
 	markTime := time.Now().Add(-time.Hour * 48).Format("2006-01-02")
 	err := global.GVA_DB.Model(&levelMonitor.ImageRecord{}).Delete("create_date < ?", markTime).Error
 	if err != nil {
@@ -91,3 +104,131 @@ func (s *ImageRecordService) GetImageRecordList(record levelRequest.ImageRecordR
 	}
 	return recordList, total, err
 }
+
+const API_KEY = "z9GNcyrC7VeV3g1xXEj3YL1s"
+const SECRET_KEY = "VASRBsEzeVsyKduSkkflfL87r5yqoqvj"
+const BAIDU_IDENTIFY = "baiduIdentifyToken"
+
+func (s *ImageRecordService) ImageIdentify(record levelMonitor.ImageRecord) {
+	token, err := GetAccessToken()
+	if err != nil {
+		global.GVA_LOG.Error("get token fail", zap.Error(err))
+		s.UpdateImageRecordStatus(record.Id, "get token fail", -1)
+		return
+	}
+	body, err := Request(token, record.ImageBase64)
+	if err != nil {
+		global.GVA_LOG.Error("Read Body Fail", zap.Error(err))
+		s.UpdateImageRecordStatus(record.Id, err.Error(), -1)
+		return
+	}
+	type Data struct {
+		WordsResult []struct {
+			Words string `json:"words"`
+		} `json:"words_result"`
+		WordsResultNum int `json:"words_result_num"`
+		LogId          int `json:"log_id"`
+	}
+	var data Data
+	err = json.Unmarshal(body, &data)
+	if err != nil {
+		global.GVA_LOG.Error("Read Body Fail", zap.Error(err))
+		s.UpdateImageRecordStatus(record.Id, "Read Body Fail", -1)
+		return
+	}
+	s.UpdateImageRecordStatus(record.Id, string(body), 1)
+	identify := 0
+	if len(data.WordsResult) > 1 {
+		for _, words := range data.WordsResult {
+			i, err := strconv.Atoi(words.Words)
+			if err == nil {
+				identify = i
+				break
+			}
+		}
+	} else {
+		i, _ := strconv.Atoi(data.WordsResult[0].Words)
+		identify = i
+	}
+	if identify == 0 {
+		return
+	}
+	UpdateGameAccountIdentify(record.Account, record.TaskId, identify)
+	return
+}
+
+func (s *ImageRecordService) UpdateImageRecordStatus(id int, result string, status int) {
+	update := map[string]interface{}{
+		"result": result,
+		"status": status,
+	}
+	global.GVA_DB.Model(&levelMonitor.ImageRecord{}).Where("id", id).Updates(update)
+}
+
+func Request(baiduToken, content string) (body []byte, err error) {
+	reqUrl := "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + baiduToken
+	var (
+		params = url.Values{}
+	)
+	params.Set("image", content)
+	requestData := params.Encode()
+	payload := strings.NewReader(requestData)
+	client := &http.Client{}
+	req, err := http.NewRequest("POST", reqUrl, payload)
+
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
+	req.Header.Add("Accept", "application/json")
+
+	res, err := client.Do(req)
+	if err != nil {
+		global.GVA_LOG.Error("request Identify fail", zap.Error(err))
+		return
+	}
+	defer res.Body.Close()
+
+	body, err = ioutil.ReadAll(res.Body)
+	if err != nil {
+		global.GVA_LOG.Error("Read Body Fail", zap.Error(err))
+		return
+	}
+	fmt.Println(string(body))
+	return
+}
+
+// 更新game_acount
+func UpdateGameAccountIdentify(account string, gameId int, identify int) {
+	global.GVA_DB.Table("game_account").Where("game_id", gameId).Where("account", account).Update("identify", identify)
+}
+
+/**
+ * 使用 AK,SK 生成鉴权签名(Access Token)
+ * @return string 鉴权签名信息(Access Token)
+ */
+func GetAccessToken() (string, error) {
+	ctx := context.Background()
+	token, err := global.GVA_REDIS.Get(ctx, BAIDU_IDENTIFY).Result()
+	if err != nil || token == "" {
+		reqUrl := "https://aip.baidubce.com/oauth/2.0/token"
+		postData := fmt.Sprintf("grant_type=client_credentials&client_id=%s&client_secret=%s", API_KEY, SECRET_KEY)
+		resp, err := http.Post(reqUrl, "application/x-www-form-urlencoded", strings.NewReader(postData))
+		if err != nil {
+			fmt.Println(err)
+			return "", err
+		}
+		defer resp.Body.Close()
+		body, err := ioutil.ReadAll(resp.Body)
+		if err != nil {
+			fmt.Println(err)
+			return "", err
+		}
+		accessTokenObj := map[string]string{}
+		json.Unmarshal(body, &accessTokenObj)
+		global.GVA_REDIS.Set(ctx, BAIDU_IDENTIFY, accessTokenObj["access_token"], time.Hour*24*29)
+		return accessTokenObj["access_token"], err
+	}
+	return token, err
+}

+ 0 - 112
service/log/log_statistics.go

@@ -9,7 +9,6 @@ import (
 	"github.com/xuri/excelize/v2"
 	"go.uber.org/zap"
 	"gorm.io/gorm"
-	"io/ioutil"
 	"log-server/global"
 	"log-server/model/log"
 	"log-server/model/log/request"
@@ -18,8 +17,6 @@ import (
 	"log-server/model/typeManage"
 	loging2 "log-server/service/log/loging"
 	"log-server/utils"
-	"net/http"
-	"net/url"
 	"strconv"
 	"strings"
 	"time"
@@ -1742,112 +1739,3 @@ func (s *ServiceStatisticsLog) SupConErr(pcCode, describe string) (err error) {
 	s.SendContent(ct, mpsPerson[name].Url)
 	return
 }
-
-const API_KEY = "z9GNcyrC7VeV3g1xXEj3YL1s"
-const SECRET_KEY = "VASRBsEzeVsyKduSkkflfL87r5yqoqvj"
-const BAIDU_IDENTIFY = "baiduIdentifyToken"
-
-func (s *ServiceStatisticsLog) ImageIdentify(content string) {
-	token, err := GetAccessToken()
-	if err != nil {
-		global.GVA_LOG.Error("get token fail", zap.Error(err))
-		return
-	}
-	reqUrl := "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + token
-	var (
-		params = url.Values{}
-	)
-	params.Set("image", content)
-	requestData := params.Encode()
-	payload := strings.NewReader(requestData)
-	client := &http.Client{}
-	req, err := http.NewRequest("POST", reqUrl, payload)
-
-	if err != nil {
-		fmt.Println(err)
-		return
-	}
-	req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
-	req.Header.Add("Accept", "application/json")
-
-	res, err := client.Do(req)
-	if err != nil {
-		global.GVA_LOG.Error("request Identify fail", zap.Error(err))
-		return
-	}
-	defer res.Body.Close()
-
-	body, err := ioutil.ReadAll(res.Body)
-	if err != nil {
-		global.GVA_LOG.Error("Read Body Fail", zap.Error(err))
-		return
-	}
-	fmt.Println(string(body))
-	type Data struct {
-		WordsResult []struct {
-			Words string `json:"words"`
-		} `json:"words_result"`
-		WordsResultNum int `json:"words_result_num"`
-		LogId          int `json:"log_id"`
-	}
-	var data Data
-	err = json.Unmarshal(body, &data)
-	if err != nil {
-		global.GVA_LOG.Error("Read Body Fail", zap.Error(err))
-		return
-	}
-	identify := 0
-	if len(data.WordsResult) > 1 {
-		for _, words := range data.WordsResult {
-			i, err := strconv.Atoi(words.Words)
-			if err == nil {
-				identify = i
-				break
-			}
-		}
-	} else {
-		i, _ := strconv.Atoi(data.WordsResult[0].Words)
-		identify = i
-	}
-	if identify == 0 {
-		return
-	}
-	fmt.Println("-----LogId-----", data.LogId)
-	fmt.Println("-----WordsResultNum-----", data.WordsResultNum)
-	fmt.Println("-----WordsResult-----", data.WordsResult[0].Words)
-	return
-}
-
-// 更新game_acount
-func UpdateGameAccountIdentify(account string, gameId int, identify int) {
-	global.GVA_DB.Table("game_account").Where("game_id", gameId).Where("account", account).Update("identify", identify)
-}
-
-/**
- * 使用 AK,SK 生成鉴权签名(Access Token)
- * @return string 鉴权签名信息(Access Token)
- */
-func GetAccessToken() (string, error) {
-	ctx := context.Background()
-	token, err := global.GVA_REDIS.Get(ctx, BAIDU_IDENTIFY).Result()
-	if err != nil || token == "" {
-		reqUrl := "https://aip.baidubce.com/oauth/2.0/token"
-		postData := fmt.Sprintf("grant_type=client_credentials&client_id=%s&client_secret=%s", API_KEY, SECRET_KEY)
-		resp, err := http.Post(reqUrl, "application/x-www-form-urlencoded", strings.NewReader(postData))
-		if err != nil {
-			fmt.Println(err)
-			return "", err
-		}
-		defer resp.Body.Close()
-		body, err := ioutil.ReadAll(resp.Body)
-		if err != nil {
-			fmt.Println(err)
-			return "", err
-		}
-		accessTokenObj := map[string]string{}
-		json.Unmarshal(body, &accessTokenObj)
-		global.GVA_REDIS.Set(ctx, BAIDU_IDENTIFY, accessTokenObj["access_token"], time.Hour*24*29)
-		return accessTokenObj["access_token"], err
-	}
-	return token, err
-}

+ 22 - 22
service/log/loging/logical_log.go

@@ -953,7 +953,8 @@ func (s *LogicalLog) AddDeviceLog(request request.AddLogRequest) {
 	}
 	var deviceLogs []log.DeviceErr
 	if request.TaskType == 1 {
-		if !errors.Is(global.GVA_DB.Where("account = ?", request.Account).Where("game_id = ?", request.GameId).Order("id desc").Limit(1).Find(&deviceLogs).Error, gorm.ErrRecordNotFound) {
+		global.GVA_DB.Table("game_account").Where("account = ?", request.Account).Where("game_id = ?", request.GameId).Order("id desc").Limit(1).Find(&deviceLogs)
+		if len(deviceLogs) != 0 {
 			if deviceLogs[0].AccountHex != "" && deviceLogs[0].AccountHex != logSC.AccountHex {
 				logSC.IsErr = 1
 				logSC.ErrStatus = 3
@@ -962,7 +963,7 @@ func (s *LogicalLog) AddDeviceLog(request request.AddLogRequest) {
 			}
 		}
 	} else {
-		if !errors.Is(global.GVA_DB.Table("game_account").Where("game_id = ?", request.GameId).Where("device_hex = ?", logSC.DeviceHex).Order("id desc").Limit(10).Find(&deviceLogs).Error, gorm.ErrRecordNotFound) {
+		if !errors.Is(global.GVA_DB.Table("game_account").Where("game_id = ?", request.GameId).Where("account != ?", request.Account).Where("device_hex = ?", logSC.DeviceHex).Order("id desc").Limit(10).Find(&deviceLogs).Error, gorm.ErrRecordNotFound) {
 			if len(deviceLogs) > 2 {
 				logSC.IsErr = 1
 				logSC.ErrStatus = 2
@@ -995,12 +996,13 @@ func (s *LogicalLog) AddDeviceErr(deviceLog *log.DeviceLog, deviceErrs []log.Dev
 	deviceErr.DeviceNumber = deviceLog.DeviceNumber
 	deviceErr.AccountHex = deviceLog.AccountHex
 	deviceErr.DeviceHex = deviceLog.DeviceHex
-	deviceErr.DeviceLogId = deviceLog.Id
+	deviceErr.CreateTime = time.Now()
 	deviceErrs = append(deviceErrs, deviceErr)
-	for _, errData := range deviceErrs {
-		errData.CreateDate = time.Now()
+	for k, _ := range deviceErrs {
+		deviceErrs[k].DeviceLogId = deviceLog.Id
+		deviceErrs[k].CreateDate = time.Now()
 	}
-	err := global.GVA_DB.Omit("create_time").Create(&deviceErrs).Error
+	err := global.GVA_DB.Table("device_err").Omit("id").Create(&deviceErrs).Error
 	if err != nil {
 		global.GVA_LOG.Error("create AddAccount fail", zap.Error(err))
 	}
@@ -1060,7 +1062,7 @@ func (s *LogicalLog) AddAccount(request request.AddLogRequest, deviceLog log.Dev
 	gameAccount.GameId = request.GameId
 	gameAccount.ScriptDeviceId = request.ScriptDeviceId
 	gameAccount.Account = request.Account
-	if deviceLog.IsErr == -1 {
+	if deviceLog.ErrStatus != 4 {
 		gameAccount.DeviceId = deviceLog.DeviceId
 		gameAccount.DeviceImei = deviceLog.DeviceImei
 		gameAccount.DeviceMac = deviceLog.DeviceMac
@@ -1130,27 +1132,25 @@ func (s *LogicalLog) CheckDeviceId(request request.AddLogRequest) {
 			return
 		}
 	}
-	if gameAccount.ScriptDeviceId != request.ScriptDeviceId {
+	if gameAccount.ScriptDeviceId != request.ScriptDeviceId || device.ErrStatus == 3 || gameAccount.DeviceHex == "" {
 		s.AddScriptDeviceErr(request.GameId, request.Account, gameAccount.ScriptDeviceId, request.ScriptDeviceId, gameAccount.Account, gameAccount.GameId, 1, request.PcCode, request.Operator)
 		//ct := fmt.Sprintf("<font color=\"warning\">%s:%d, 设备id出现不同</font>", request.PcCode, request.GameId)
 		//s.SendDeviceMsg(ct, request.Operator)
 		gameAccount.ScriptDeviceId = request.ScriptDeviceId
-		if device.IsErr == -1 {
-			if gameAccount.DeviceHex == "" || gameAccount.DeviceHex != device.DeviceHex {
-				gameAccount.DeviceId = device.DeviceId
-				gameAccount.DeviceImei = device.DeviceImei
-				gameAccount.DeviceMac = device.DeviceMac
-				gameAccount.DeviceManufacturer = device.DeviceManufacturer
-				gameAccount.DeviceModel = device.DeviceModel
-				gameAccount.DeviceSdk = device.DeviceSdk
-				gameAccount.DeviceNumber = device.DeviceNumber
-				gameAccount.AccountHex = device.AccountHex
-				gameAccount.DeviceHex = device.DeviceHex
-			}
+		if gameAccount.DeviceHex != device.DeviceHex {
+			gameAccount.DeviceId = device.DeviceId
+			gameAccount.DeviceImei = device.DeviceImei
+			gameAccount.DeviceMac = device.DeviceMac
+			gameAccount.DeviceManufacturer = device.DeviceManufacturer
+			gameAccount.DeviceModel = device.DeviceModel
+			gameAccount.DeviceSdk = device.DeviceSdk
+			gameAccount.DeviceNumber = device.DeviceNumber
+			gameAccount.AccountHex = device.AccountHex
+			gameAccount.DeviceHex = device.DeviceHex
 		}
-		gameAccount.UseNum += 1
-		global.GVA_DB.Save(&gameAccount)
 	}
+	gameAccount.UseNum += 1
+	global.GVA_DB.Save(&gameAccount)
 }
 
 func (s *LogicalLog) SendDeviceMsg(content string, operator string) {