wangbin před 2 roky
rodič
revize
57ef030ae3

+ 52 - 17
api/v1/task/urgent_task_conf.go

@@ -14,8 +14,8 @@ type UrgentTaskApi struct {
 }
 
 //查询空闲租机
-func (a *UrgentTaskApi) GetUnusedPc (c *gin.Context)  {
-	if pcList,err := urgentTaskService.GetUnusedPc(); err != nil {
+func (a *UrgentTaskApi) GetUnusedPc(c *gin.Context) {
+	if pcList, err := urgentTaskService.GetUnusedPc(); err != nil {
 		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 		response.FailWithMessage(err.Error(), c)
 	} else {
@@ -24,7 +24,7 @@ func (a *UrgentTaskApi) GetUnusedPc (c *gin.Context)  {
 }
 
 //创建紧急任务
-func (a *UrgentTaskApi) CreateUrgentTask (c *gin.Context)  {
+func (a *UrgentTaskApi) CreateUrgentTask(c *gin.Context) {
 	var task1 task.CreateAndUpdateUrgentTaskConf
 	_ = c.ShouldBindJSON(&task1)
 	var pcCodeString string
@@ -37,16 +37,16 @@ func (a *UrgentTaskApi) CreateUrgentTask (c *gin.Context)  {
 		return
 	}
 	//处理pc_code数组
-	for k,pcCode := range task1.PcCode{
-		if k != len(task1.PcCode) - 1 {
+	for k, pcCode := range task1.PcCode {
+		if k != len(task1.PcCode)-1 {
 			pcCodeString = pcCodeString + pcCode + ","
 		} else {
 			pcCodeString = pcCodeString + pcCode
 		}
 	}
 	//创建实体
-	entity := task.UrgentTaskConf {
-		Id: task1.Id,
+	entity := task.UrgentTaskConf{
+		Id:     task1.Id,
 		TaskId: task1.TaskId,
 		PcCode: pcCodeString,
 	}
@@ -75,7 +75,7 @@ func (a *UrgentTaskApi) DeleteUrgentTask(c *gin.Context) {
 }
 
 //批量删除紧急任务
-func (a *UrgentTaskApi) DeleteUrgentTaskByIds (c *gin.Context) {
+func (a *UrgentTaskApi) DeleteUrgentTaskByIds(c *gin.Context) {
 	var ids request.IdsReq
 	_ = c.ShouldBindJSON(&ids)
 	if err := urgentTaskService.DeleteUrgentTaskByIds(ids.Ids); err != nil {
@@ -87,7 +87,7 @@ func (a *UrgentTaskApi) DeleteUrgentTaskByIds (c *gin.Context) {
 }
 
 //更新紧急任务
-func (a *UrgentTaskApi) UpdateUrgentTask (c *gin.Context)  {
+func (a *UrgentTaskApi) UpdateUrgentTask(c *gin.Context) {
 	var task1 task.CreateAndUpdateUrgentTaskConf
 	_ = c.ShouldBindJSON(&task1)
 	var pcCodeString string
@@ -100,22 +100,57 @@ func (a *UrgentTaskApi) UpdateUrgentTask (c *gin.Context)  {
 		return
 	}
 	//处理pc_code数组
-	for k,pcCode := range task1.PcCode{
-		if k != len(task1.PcCode) - 1 {
+	for k, pcCode := range task1.PcCode {
+		if k != len(task1.PcCode)-1 {
 			pcCodeString = pcCodeString + pcCode + ","
 		} else {
 			pcCodeString = pcCodeString + pcCode
 		}
 	}
 	//创建实体
-	entity := task.UrgentTaskConf {
-		Id: task1.Id,
+	entity := task.UrgentTaskConf{
+		Id:     task1.Id,
 		TaskId: task1.TaskId,
 		PcCode: pcCodeString,
-		CreateDate: task1.CreateDate[:10],
 	}
 
-	if err := urgentTaskService.UpdateUrgentTask(entity); err != nil{
+	if err := urgentTaskService.UpdateUrgentTask(entity, 0); err != nil {
+		global.GVA_LOG.Error("更新失败!", zap.Error(err))
+		response.FailWithMessage("更新失败", c)
+	} else {
+		response.OkWithMessage("更新成功", c)
+	}
+}
+
+//删除电脑编号
+func (a *UrgentTaskApi) DelCodeUrgentTask(c *gin.Context) {
+	var task1 task.CreateAndUpdateUrgentTaskConf
+	_ = c.ShouldBindJSON(&task1)
+	var pcCodeString string
+	if task1.TaskId == 0 {
+		response.FailWithMessage("请传入任务id", c)
+		return
+	}
+	if len(task1.PcCode) == 0 {
+		response.FailWithMessage("请传入租机列表", c)
+		return
+	}
+	//处理pc_code数组
+	for k, pcCode := range task1.PcCode {
+		if k != len(task1.PcCode)-1 {
+			pcCodeString = pcCodeString + pcCode + ","
+		} else {
+			pcCodeString = pcCodeString + pcCode
+		}
+	}
+	//创建实体
+	entity := task.UrgentTaskConf{
+		Id:     task1.Id,
+		TaskId: task1.TaskId,
+		PcCode: pcCodeString,
+	}
+
+	if err := urgentTaskService.UpdateUrgentTask(entity, 1); err != nil {
 		global.GVA_LOG.Error("更新失败!", zap.Error(err))
 		response.FailWithMessage("更新失败", c)
 	} else {
@@ -124,14 +159,14 @@ func (a *UrgentTaskApi) UpdateUrgentTask (c *gin.Context)  {
 }
 
 //id获取紧急任务
-func (a *UrgentTaskApi) GetUrgentTaskById(c *gin.Context){
+func (a *UrgentTaskApi) GetUrgentTaskById(c *gin.Context) {
 	var id request.GetById
 	_ = c.ShouldBindJSON(&id)
 	if err := utils.Verify(id, utils.IdVerify); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	if task1, err := urgentTaskService.GetUrgentTaskById(id.ID); err != nil{
+	if task1, err := urgentTaskService.GetUrgentTaskById(id.ID); err != nil {
 		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 		response.FailWithMessage("获取失败", c)
 	} else {

+ 9 - 1
initialize/timer.go

@@ -25,6 +25,7 @@ var serviceWeChatScannerDetailed = new(dataStatistics.ServiceWeChatScannerDetail
 var serviceDownLoadUrl = new(fileManager.ServiceDownLoadUrl)
 var robotService = new(system.RobotService)
 var imageRecordService = new(levelMonitor.ImageRecordService)
+
 var ServiceRegularTask = new(task.ServiceRegularTask)
 var serviceFileQiniu = new(fileManager.ServiceFileQiniu)
 
@@ -96,6 +97,13 @@ func Timer() {
 	if err != nil {
 		fmt.Println("add SyncTaskData timer error:", err)
 	}
+
+	// 前一天数优任务统计
+	_, err = global.GVA_Timer.AddTaskByFunc("YesterdaySyncTaskData", "40 36 2 * * *", syncData.YesterdaySyncTaskData)
+	if err != nil {
+		fmt.Println("add YesterdaySyncTaskData timer error:", err)
+	}
+
 	// 数优任务统计
 	_, err = global.GVA_Timer.AddTaskByFunc("DayTargetDataStatistics", "40 2 5 * * *", syncData.DayTargetDataStatistics)
 	if err != nil {
@@ -237,7 +245,7 @@ func Timer() {
 		fmt.Println("add YesterdayStatistics timer error:", err)
 	}
 
-	_, err = global.GVA_Timer.AddTaskByFunc("TodayStatistics", "50 30 c-23 * * ? ", imageRecordService.TodayStatistics)
+	_, err = global.GVA_Timer.AddTaskByFunc("TodayStatistics", "50 44 9-23 * * ? ", imageRecordService.TodayStatistics)
 	if err != nil {
 		fmt.Println("add TodayStatistics timer error:", err)
 	}

+ 1 - 4
middleware/operation.go

@@ -74,7 +74,7 @@ func OperationRecord() gin.HandlerFunc {
 			UserID: userId,
 		}
 
-		// 上传文件时候 中间件日志进行裁断操作
+		// 上传文件进行裁断操作
 		if strings.Index(c.GetHeader("Content-Type"), "multipart/form-data") > -1 {
 			if len(record.Body) > 1024 {
 				// 截断
@@ -84,16 +84,13 @@ func OperationRecord() gin.HandlerFunc {
 				defer respPool.Put(newBody[:0])
 			}
 		}
-
 		writer := responseBodyWriter{
 			ResponseWriter: c.Writer,
 			body:           &bytes.Buffer{},
 		}
 		c.Writer = writer
 		now := time.Now()
-
 		c.Next()
-
 		latency := time.Since(now)
 		record.ErrorMessage = c.Errors.ByType(gin.ErrorTypePrivate).String()
 		record.Status = c.Writer.Status()

+ 36 - 0
model/log/ip_lib.go

@@ -0,0 +1,36 @@
+package log
+
+import (
+	"go.uber.org/zap"
+	"log-server/global"
+	"time"
+)
+
+/*
+ip库
+*/
+type IpLib struct {
+	Id         uint      `json:"id"`
+	Ip         string    `json:"ip"`          //模拟器ip
+	GameId     int       `json:"game_id"`     //游戏id
+	Status     uint8     `json:"status"`      //1表示可用,2表示不可用
+	CreateTime time.Time `json:"create_time"` // 创建时间
+	UpdateTime time.Time `json:"update_time"` // 更新时间
+}
+
+func (IpLib) TableName() string {
+	return "ip_lib"
+}
+
+func (s *IpLib) AddIpLog(gameId int, ip string, status uint8) {
+	if gameId != 5001 {
+		return
+	}
+	s.GameId = gameId
+	s.Ip = ip
+	s.Status = status
+	err := global.GVA_DB.Omit("create_time", "update_time").Create(&s).Error
+	if err != nil {
+		global.GVA_LOG.Error("create LogScanningCode fail", zap.Error(err))
+	}
+}

+ 19 - 0
model/log/seal_ip.go

@@ -0,0 +1,19 @@
+package log
+
+/*
+封号ip日志
+*/
+type SealIpLog struct {
+	Id         uint   `json:"id"`
+	Ip         string `json:"ip"`          //模拟器ip
+	LogUuid    string `json:"log_uuid"`    //日志UUID
+	GameId     int    `json:"game_id"`     //游戏id
+	Account    string `json:"account"`     //账号
+	PcCode     string `json:"pc_code"`     //电脑编号
+	CreateDate string `json:"create_date"` // 创建日期
+	CreateTime string `json:"create_time"` // 创建时间
+}
+
+func (SealIpLog) TableName() string {
+	return "seal_ip_log"
+}

+ 17 - 6
model/task/urgent_task_conf.go

@@ -11,13 +11,24 @@ type UrgentTaskConf struct {
 	UpdateTime typeManage.LocalTime `json:"update_time"`
 }
 
+type ByIdUrgentTaskConf struct {
+	Id          int                  `json:"id"`
+	TaskId      int                  `json:"task_id"`     //任务id
+	PcCode      []string             `json:"pc_code"`     //电脑编号
+	CreateDate  string               `json:"create_date"` //创建日期
+	CreateTime  typeManage.LocalTime `json:"create_time"`
+	UpdateTime  typeManage.LocalTime `json:"update_time"`
+	IsDelPcCode int                  `json:"is_del_pc_code"`
+}
+
 type CreateAndUpdateUrgentTaskConf struct {
-	Id         int                  `json:"id"`
-	TaskId     int                  `json:"task_id"`     //任务id
-	PcCode     []string             `json:"pc_code"`     //电脑编号
-	CreateDate string               `json:"create_date"` //创建日期
-	CreateTime typeManage.LocalTime `json:"create_time"`
-	UpdateTime typeManage.LocalTime `json:"update_time"`
+	Id          int                  `json:"id"`
+	TaskId      int                  `json:"task_id"`     //任务id
+	PcCode      []string             `json:"pc_code"`     //电脑编号
+	CreateDate  string               `json:"create_date"` //创建日期
+	CreateTime  typeManage.LocalTime `json:"create_time"`
+	UpdateTime  typeManage.LocalTime `json:"update_time"`
+	IsDelPcCode int                  `json:"is_del_pc_code"`
 }
 
 //紧急任务请求

+ 4 - 5
router/levelMonitor/image_record.go

@@ -12,13 +12,12 @@ func (r *ImageRecordRouter) InitImageRecordRouter(Router *gin.RouterGroup) {
 	imageRecordRouter := Router.Group("levelMonitor")
 	imageRecordApi := v1.ApiGroupApp.LevelMonitorGroup.ImageRecordApi
 	{
-		imageRecordRouter.POST("getImageRecordList", imageRecordApi.GetImageRecordList) //获取图片记录列表
-		imageRecordRouter.POST("getWeekImageRecordStatistics", imageRecordApi.GetWeekImageRecordStatistics) //获取7日等级统计数据
 		imageRecordRouter.POST("getImageRecordList", imageRecordApi.GetImageRecordList)                     //获取图片记录列表
+		imageRecordRouter.POST("getWeekImageRecordStatistics", imageRecordApi.GetWeekImageRecordStatistics) //获取7日等级统计数据
 		imageRecordRouter.POST("getImageRecordStatisticsList", imageRecordApi.GetImageRecordStatisticsList) //获取图片记录列表
-		imageRecordRouter.POST("imageRecordStatisticsExport", imageRecordApi.ImageRecordStatisticsExport)	//导出等级统计数据
-		imageRecordRouter.POST("createImageRecord", imageRecordApi.CreateImageRecord)   //创建图片记录
-		imageRecordRouter.POST("uploadOrNot", imageRecordApi.UploadOrNot)               //询问是否上传图片
+		imageRecordRouter.POST("imageRecordStatisticsExport", imageRecordApi.ImageRecordStatisticsExport)   //导出等级统计数据
+		imageRecordRouter.POST("createImageRecord", imageRecordApi.CreateImageRecord)                       //创建图片记录
+		imageRecordRouter.POST("uploadOrNot", imageRecordApi.UploadOrNot)                                   //询问是否上传图片
 		imageRecordRouter.POST("upLevel", imageRecordApi.UpLevel)                                           //上传等级
 	}
 	//imageRecordRouter1 := Router.Group("levelMonitor").Use(middleware.OperationRecord())

+ 1 - 0
router/task/urgent_task_conf.go

@@ -25,5 +25,6 @@ func (r *UrgentTaskRouter) InitUrgentTaskRouter(Router *gin.RouterGroup) {
 		urgentTaskApi1.POST("deleteUrgentTask", urgentTaskApi.DeleteUrgentTask)             //单个删除紧急任务
 		urgentTaskApi1.DELETE("deleteUrgentTaskByIds", urgentTaskApi.DeleteUrgentTaskByIds) //批量删除紧急任务
 		urgentTaskApi1.POST("updateUrgentTask", urgentTaskApi.UpdateUrgentTask)             //更新紧急任务
+		urgentTaskApi1.POST("delCodeUrgentTask", urgentTaskApi.DelCodeUrgentTask)           //删电脑编号
 	}
 }

+ 8 - 2
service/fileManager/download_url.go

@@ -40,8 +40,14 @@ func (s *ServiceDownLoadUrl) UpdateGameVersion() {
 		if err != nil {
 			return
 		}
-		dataJson, _ := simplejson.NewJson(result)
-		code, _ := dataJson.Get("code").Int()
+		dataJson, err := simplejson.NewJson(result)
+		if err != nil {
+			return
+		}
+		code, err := dataJson.Get("code").Int()
+		if err != nil {
+			return
+		}
 		//global.GVA_LOG.Info(strconv.Itoa(code))
 		//msg, _ := dataJson.Get("msg").String()
 		//global.GVA_LOG.Info(msg)

+ 1 - 1
service/fileManager/file_qiniu.go

@@ -23,7 +23,7 @@ type ServiceFileQiniu struct {
 const accessKey = "B81Gsvry2StqKVE3txS-7v9GBBfqykC9zhebmxnW" //七牛云ak,sk,bucket
 const secretKey = "YEZJuYcdeF7vRvzffxpopAVR-jMPZg9pZ-4IKTVW"
 const bucket0 = "pinaishop"
-const CName = "http://cdn.pinaishop.kfzs.com/" //七牛云外链
+const CName = "http://cdn.sjyh.kfzs.com/" //七牛云外链
 
 // QueryVersionByType 查询某一类文件最新的版本号
 func (s *ServiceFileQiniu) QueryVersionByType(req request.FileQiniuRequest) (int64, error) {

+ 35 - 14
service/levelMonitor/image_record.go

@@ -15,6 +15,7 @@ import (
 	levelRequest "log-server/model/levelMonitor/request"
 	"log-server/model/log"
 	"log-server/service/cache"
+	"log-server/utils"
 	"net/http"
 	"net/url"
 	"regexp"
@@ -34,7 +35,7 @@ func (s *ImageRecordService) CreateImageRecord(record levelMonitor.ImageRecord)
 	key := fmt.Sprintf(cache.UploadImageNum, date, record.TaskId)
 	ctx := context.Background()
 	num, _ := s.cache.GetCacheNum(ctx, key)
-	if num > 50 {
+	if num > 100 {
 		return errors.New("数据上传已到上限")
 	}
 	var entity levelMonitor.ImageRecord
@@ -50,6 +51,7 @@ func (s *ImageRecordService) CreateImageRecord(record levelMonitor.ImageRecord)
 	if err != nil {
 		return err
 	}
+
 	go s.ImageIdentify(record, key)
 	return
 }
@@ -57,12 +59,12 @@ func (s *ImageRecordService) CreateImageRecord(record levelMonitor.ImageRecord)
 func (s *ImageRecordService) CreateLevel(request levelRequest.CreateLevelRequest) (err error) {
 	//获取今日日期
 	date := time.Now().Format("2006-01-02")
-	key := fmt.Sprintf(cache.UploadImageNum, date, request.TaskId)
-	ctx := context.Background()
-	num, _ := s.cache.GetCacheNum(ctx, key)
-	if num > 100 {
-		return errors.New("数据上传已到上限")
-	}
+	//key := fmt.Sprintf(cache.UploadImageNum, date, request.TaskId)
+	//ctx := context.Background()
+	//num, _ := s.cache.GetCacheNum(ctx, key)
+	//if num > 100 {
+	//	return errors.New("数据上传已到上限")
+	//}
 	var entity levelMonitor.ImageRecord
 
 	//查找数据库是否存在此账号此游戏今日等级上报记录
@@ -85,7 +87,24 @@ func (s *ImageRecordService) CreateLevel(request levelRequest.CreateLevelRequest
 		return err
 	}
 	UpdateGameAccountIdentify(entity.Account, entity.TaskId, entity.Identify)
-	s.cache.SetCacheNum(ctx, key)
+	// 等級》1上報中控
+	if request.Level > 1 {
+		s.UpdateControlAccountLevel(request.Account, request.TaskId, request.Level)
+	}
+	//s.cache.SetCacheNum(ctx, key)
+	return
+}
+
+// http请求群控创建任务
+func (s *ImageRecordService) UpdateControlAccountLevel(account string, gameId, level int) {
+	urlControl := global.GVA_CONFIG.ExtranetDomain.Control + "/v1/account/account_level"
+	//game_id=2003&level=yyyyy
+	requestData := map[string]string{
+		"account": account,
+		"game_id": strconv.Itoa(gameId),
+		"level":   strconv.Itoa(level),
+	}
+	_, _ = utils.HttpGet(urlControl, requestData)
 	return
 }
 
@@ -100,7 +119,7 @@ func (s *ImageRecordService) UploadOrNot(record levelMonitor.ImageRecord) (err e
 	return nil
 }
 
-//删除日前的图片记录
+//删除7日前的图片记录
 func (s *ImageRecordService) DeleteExpireImageRecord() {
 	markTime := time.Now().Add(-time.Hour * 48).Format("2006-01-02")
 	err := global.GVA_DB.Where("create_date < ?", markTime).Delete(&levelMonitor.ImageRecord{}).Error
@@ -234,11 +253,11 @@ func (s *ImageRecordService) ImageIdentify(record levelMonitor.ImageRecord, key
 		// 编译正则表达式
 		re := regexp.MustCompile(identifyPattern)
 		// 使用正则表达式查找价格信息
-		level := re.FindAllString(data.WordsResult[0].Words, -1)
+		upLevel := strings.ReplaceAll(data.WordsResult[0].Words, ",", "")
+		level := re.FindAllString(upLevel, -1)
 		if len(level) == 0 {
 			identify = 0
 		} else {
-			level[0] = strings.ReplaceAll(level[0], ",", "")
 			l, _ := strconv.ParseFloat(level[0], 64)
 			identify = l
 		}
@@ -254,7 +273,9 @@ func (s *ImageRecordService) ImageIdentify(record levelMonitor.ImageRecord, key
 	global.GVA_DB.Where("game_id", record.TaskId).Where("account", record.Account).First(&gameAccount)
 	s.UpdateImageRecordStatus(record.Id, string(body), 1, gameAccount.UseNum, identify)
 	UpdateGameAccountIdentify(record.Account, record.TaskId, identify)
-
+	if identify > 1 && record.TaskId == 5001 {
+		s.UpdateControlAccountLevel(record.Account, record.TaskId, int(identify))
+	}
 	s.cache.SetCacheNum(ctx, key)
 	return
 }
@@ -406,7 +427,7 @@ func (s *ImageRecordService) CreateImageRecordStatistics(taskId int, imageRecord
 }
 
 //获取7日统计数据
-func (s *ImageRecordService) GetWeekImageRecordStatistics(taskId int, createDate string) (dataList []levelMonitor.ImageRecordStatisticsResponse, err error){
+func (s *ImageRecordService) GetWeekImageRecordStatistics(taskId int, createDate string) (dataList []levelMonitor.ImageRecordStatisticsResponse, err error) {
 	db := global.GVA_DB.Model(&levelMonitor.ImageRecordStatistics{})
 	db = db.Select("image_record_statistics.*, game_task.user, game_task.task_name")
 	db = db.Joins("left join game_task on image_record_statistics.task_id = game_task.task_id")
@@ -524,4 +545,4 @@ func (s *ImageRecordService) ImageRecordStatisticsListExcel(infoList []levelMoni
 	}
 	err := excel.SaveAs(filePath)
 	return err
-}
+}

+ 7 - 5
service/log/log_statistics.go

@@ -221,8 +221,8 @@ func (s *ServiceStatisticsLog) statisticsData(ctx context.Context, gameIdInt, tt
 	mzLoginOk, _ := s.LogicalLog.TypeLogGetNum(ctx, date, gameIdInt, "4603000", loging2.OkStatus, tt)
 	LoginFail := xmyLoginFail + wxLoginFail + mzLoginFail
 	LoginOk := xmyLoginOk + wxLoginOk + mzLoginOk
-	EnterMainFail, _ := s.LogicalLog.NodeLogGetNum(ctx, date, gameIdInt, "4700000", loging2.FailStatus, tt)
-	EnterMainOk, _ := s.LogicalLog.NodeLogGetNum(ctx, date, gameIdInt, "4700000", loging2.OkStatus, tt)
+	EnterMainFail, _ := s.LogicalLog.TypeLogGetNum(ctx, date, gameIdInt, "4701000", loging2.FailStatus, tt)
+	EnterMainOk, _ := s.LogicalLog.TypeLogGetNum(ctx, date, gameIdInt, "4701000", loging2.OkStatus, tt)
 	FeeFail, _ := s.LogicalLog.NodeLogGetNum(ctx, date, gameIdInt, "4800000", loging2.FailStatus, tt)
 	FeeOk, _ := s.LogicalLog.NodeLogGetNum(ctx, date, gameIdInt, "4800000", loging2.OkStatus, tt)
 	ScriptStartFail, _ := s.LogicalLog.NodeLogGetNum(ctx, date, gameIdInt, "4300000", loging2.FailStatus, tt)
@@ -555,9 +555,10 @@ func (s *ServiceStatisticsLog) CreateComputerStatisticsData() {
 	var csReplys []*log.LogComputer
 	for code, _ := range codeMps {
 		// 不统计不在电脑列表里的
-		if _, ok := computerData[code]; !ok {
-			continue
-		}
+		//if _, ok := computerData[code]; !ok {
+		//	continue
+		//}
+
 		// 负责人为空的不统计
 		if computerData[code] == "" {
 			continue
@@ -1128,6 +1129,7 @@ func (s *ServiceStatisticsLog) ComputerTest(c context.Context) (interface{}, err
 func (s *ServiceStatisticsLog) RegularCheckPc() {
 	ctx := context.Background()
 	var computer log.Computer
+	// 重缓存中获取到数据
 	computers, err := computer.OnlinePcCodeCache()
 	//computersF, err := computer.OnlinePcCodeCache()
 	if err != nil {

+ 6 - 1
service/log/loging/enter_main_log.go

@@ -28,7 +28,7 @@ func (s *EnterMainLog) SuccessLog(ctx context.Context, request request.AddLogReq
 	} else {
 		_ = s.logical.SetUuidCodeCache(context.Background(), s.logical.CurrentDate(), s.logical.Request.LogUuid, s.logical.Request.Coding, s.logical.Request.GameId)
 	}
-
+	go s.logical.AddIpLib(s.logical.Request)
 	code := strconv.Itoa(request.Coding)
 	err = s.logical.PartTypeLogSetNum(ctx, s.logical.CurrentDate(), s.logical.Request.GameId, code, OkStatus, s.logical.Request.TaskType)
 	if err != nil {
@@ -64,6 +64,11 @@ func (s *EnterMainLog) FailLog(ctx context.Context, request request.AddLogReques
 	if s.logical.ScriptType == 1 {
 		return
 	}
+	// 封号ip记录
+	if code == "4701003" {
+		// 线上测试打印日志
+		go s.logical.AddSealIpLog(s.logical.Request)
+	}
 	if code[5:] == "00" {
 		err = s.logical.CodeLogSetNum(ctx, s.logical.CurrentDate(), s.logical.Request.GameId, strconv.Itoa(request.Coding), NoLogStatus, s.logical.Request.TaskType)
 		if code[3:] == "1000" {

+ 82 - 4
service/log/loging/logical_log.go

@@ -960,6 +960,17 @@ func (s *LogicalLog) AddDeviceLog(request request.AddLogRequest) {
 				logSC.ErrStatus = 3
 				gameDeviceErrKey := fmt.Sprintf(GameDeviceErrKey, logSC.CreateDate, request.GameId)
 				s.cache.SetCacheNum(ctx, gameDeviceErrKey)
+				var gameAccount log.GameAccount
+				gameAccount.DeviceId = logSC.DeviceId
+				gameAccount.DeviceImei = logSC.DeviceImei
+				gameAccount.DeviceMac = logSC.DeviceMac
+				gameAccount.DeviceManufacturer = logSC.DeviceManufacturer
+				gameAccount.DeviceModel = logSC.DeviceModel
+				gameAccount.DeviceSdk = logSC.DeviceSdk
+				gameAccount.DeviceNumber = logSC.DeviceNumber
+				gameAccount.AccountHex = logSC.AccountHex
+				gameAccount.DeviceHex = logSC.DeviceHex
+				global.GVA_DB.Where("game_id = ?", request.GameId).Where("account = ?", request.Account).Updates(&gameAccount)
 			}
 		}
 	} else {
@@ -978,6 +989,7 @@ func (s *LogicalLog) AddDeviceLog(request request.AddLogRequest) {
 		global.GVA_LOG.Error("create LogScanningCode fail", zap.Error(err))
 	}
 	if logSC.ErrStatus == 3 || logSC.ErrStatus == 2 {
+		logSC.ScriptDeviceId = deviceLogs[0].ScriptDeviceId
 		s.AddDeviceErr(logSC, deviceLogs)
 	}
 }
@@ -1113,8 +1125,8 @@ func (s *LogicalLog) CheckDeviceId(request request.AddLogRequest) {
 		// 有异常处理
 		if b && len(deviceLog) >= 3 {
 			s.AddScriptDeviceErr(request.GameId, request.Account, request.ScriptDeviceId, request.ScriptDeviceId, deviceLog[0].Account, deviceLog[0].GameId, 2, request.PcCode, request.Operator)
-			//ct := fmt.Sprintf("<font color=\"warning\">%s:%d, 相同设备id</font>", request.PcCode, request.GameId)
-			//s.SendDeviceMsg(ct, request.Operator)
+			ct := fmt.Sprintf("<font color=\"warning\">%s:%d, 相同设备id</font>", request.PcCode, request.GameId)
+			s.SendDeviceMsg(ct, request.Operator)
 		}
 		s.AddAccount(request, device)
 		return
@@ -1134,8 +1146,10 @@ func (s *LogicalLog) CheckDeviceId(request request.AddLogRequest) {
 	}
 	if gameAccount.ScriptDeviceId != request.ScriptDeviceId {
 		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)
+		if request.GameId != 5001 {
+			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.ErrStatus == 3 || gameAccount.DeviceHex == "" {
@@ -1237,3 +1251,67 @@ func (s *LogicalLog) AddDeviceErrLog(request request.AddLogRequest, st uint) {
 	}
 	global.GVA_REDIS.Set(ctx, key, 1, time.Hour)
 }
+
+func (s *LogicalLog) AddSealIpLog(request request.AddLogRequest) {
+	if request.GameId != 5001 {
+		return
+	}
+	var ipLog log.IpLog
+	err := global.GVA_DB.Where("create_date = ?", s.CurrentDate()).Where("log_uuid = ?", request.LogUuid).First(&ipLog).Error
+	if err != nil || ipLog.Ip == "" {
+		return
+	}
+	logSC := new(log.SealIpLog)
+	logSC.GameId = ipLog.GameId
+	logSC.LogUuid = ipLog.LogUuid
+	logSC.Ip = ipLog.Ip
+	logSC.Account = ipLog.Account
+	logSC.PcCode = ipLog.PcCode
+	logSC.CreateDate = time.Now().Format("2006-01-02")
+	err = global.GVA_DB.Omit("create_time").Create(&logSC).Error
+	if err != nil {
+		global.GVA_LOG.Error("create SealIpLog fail", zap.Error(err))
+		return
+	}
+	var ipLib log.IpLib
+	result := global.GVA_DB.Where("game_id = ?", ipLog.GameId).Where("ip = ?", ipLog.Account).First(&ipLib)
+	if result.Error != nil {
+		if result.Error == gorm.ErrRecordNotFound {
+			// 数据不存在,执行创建操作
+			ipLib.AddIpLog(ipLog.GameId, ipLog.Ip, 2)
+			return
+		} else {
+			// 其他错误
+			global.GVA_LOG.Error("Add ipLog fail", zap.Error(result.Error))
+			return
+		}
+	}
+	ipLib.Status = 2
+	global.GVA_DB.Omit("update_time").Save(&ipLib)
+}
+
+func (s *LogicalLog) AddIpLib(request request.AddLogRequest) {
+	if request.GameId != 5001 {
+		return
+	}
+	var ipLog log.IpLog
+	err := global.GVA_DB.Where("create_date = ?", s.CurrentDate()).Where("log_uuid = ?", request.LogUuid).First(&ipLog).Error
+	if err != nil || ipLog.Ip == "" {
+		return
+	}
+	var ipLib log.IpLib
+	result := global.GVA_DB.Where("game_id = ?", ipLog.GameId).Where("ip = ?", ipLog.Account).First(&ipLib)
+	if result.Error != nil {
+		if result.Error == gorm.ErrRecordNotFound {
+			// 数据不存在,执行创建操作
+			ipLib.AddIpLog(ipLog.GameId, ipLog.Ip, 1)
+			return
+		} else {
+			// 其他错误
+			global.GVA_LOG.Error("Add ipLog fail", zap.Error(result.Error))
+			return
+		}
+	}
+	ipLib.Status = 1
+	global.GVA_DB.Omit("update_time").Save(&ipLib)
+}

+ 120 - 0
service/task/sync_data.go

@@ -265,6 +265,126 @@ func (s *SyncData) SyncTaskData() {
 	return
 }
 
+// 定时同步机房群控、小绵羊数据
+func (s *SyncData) YesterdaySyncTaskData() {
+	db := global.GVA_DB.Model(&task.GameTask{})
+	var apiList []task.GameTask
+	db = db.Where("is_del = ?", -1)
+	db = db.Where("status = ?", 1)
+	err := db.Order("id desc").Find(&apiList).Error
+	if err != nil {
+		global.GVA_LOG.Error("EveryDaySyncTaskData fail", zap.Error(err))
+		return
+	}
+	if len(apiList) == 0 {
+		global.GVA_LOG.Info("没有任务数据")
+		return
+	}
+	date := time.Now().Add(-time.Hour * 24).Format("2006-01-02")
+	xmyGameData, err := s.SyncXmyGameData(date)
+	if err != nil {
+		global.GVA_LOG.Error("SyncTaskData get xmy data fail", zap.Error(err))
+		return
+	}
+	completeTaskData, err := s.CompleteTaskData(date)
+	if err != nil {
+		global.GVA_LOG.Error("CompleteTaskData get data fail", zap.Error(err))
+		return
+	}
+	wslData, err := s.SyncWslGameData(date)
+	if err != nil {
+		global.GVA_LOG.Error("SyncWslGameData get wsl data fail", zap.Error(err))
+		return
+	}
+	for _, gameTask := range apiList {
+		var gameTarget task.GameTargetComplete
+		roomData, _ := s.SyncRoomData(date, gameTask.TaskId)
+
+		if gameTask.GameIdXmy != "" {
+			gameIdXmy, _ := strconv.Atoi(gameTask.GameIdXmy)
+			xmyGameInfo := xmyGameData[gameIdXmy]
+			gameTarget.NewComplete, _ = strconv.Atoi(xmyGameInfo.UserNum)
+			gameTarget.PayComplete, _ = strconv.Atoi(xmyGameInfo.Cnt)
+			gameTarget.RetainedComplete, _ = strconv.Atoi(xmyGameInfo.ActiveUserNum)
+			f, _ := strconv.ParseFloat(xmyGameInfo.Amount, 64)
+			gameTarget.Amount = int(f)
+			num, _ := s.SyncXmyFreeData(date, gameIdXmy)
+			if num != 0 {
+				gameTarget.PayTarget = num
+				if gameTarget.PayTarget > completeTaskData[gameTask.TaskId].PayTarget {
+					lastPayAddUpdateTimeKey := fmt.Sprintf(LastPayAddUpdateTimeKey, date, gameTask.TaskId)
+					_ = s.cache.SetCacheStr(context.Background(), lastPayAddUpdateTimeKey, time.Now().Unix())
+					// 本次加付费目标数据
+					lastPayAddNumKey := fmt.Sprintf(LastPayAddNumKey, date, gameTask.TaskId)
+					_ = s.cache.SetCacheStr(context.Background(), lastPayAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					payErrAddNumKey := fmt.Sprintf(PayErrAddNumKey, date, gameTask.TaskId)
+					diffNum := gameTarget.PayTarget - completeTaskData[gameTask.TaskId].PayTarget
+					s.common.SaveGameAddFee(diffNum, gameTarget.PayTarget, gameTask.TaskName)
+					//go s.common.FreeSendMsg(diffNum, gameTarget.PayTarget, gameTask.TaskId, gameTask.TaskName, gameTask.User)
+					// 如果当前付费目标完成,加入一下逻辑
+					if completeTaskData[gameTask.TaskId].PayTarget <= completeTaskData[gameTask.TaskId].PayComplete {
+						lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, gameTask.TaskId)
+						_ = s.cache.SetCacheStr(context.Background(), lastPayCompletedUpdateTimeKey, time.Now().Unix())
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					} else {
+						n, _ := s.cache.GetCacheNum(context.Background(), payErrAddNumKey)
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget+n)
+					}
+				}
+			}
+
+		} else {
+			gameTarget.NewComplete = roomData.NewCompleteLocal
+			gameTarget.PayComplete = roomData.PayCompleteLocal
+			gameTarget.RetainedComplete = roomData.NewCompleteLocal + roomData.RetainedCompleteLocal
+			gameTarget.Amount = gameTask.PayPrice * roomData.PayCompleteLocal
+			if gameTarget.RetainedComplete < roomData.RetainedComplete {
+				gameTarget.RetainedComplete = roomData.RetainedComplete
+			}
+		}
+		gameTarget.GameRate = roomData.GameRate
+		if (gameTask.GamePortId == 5 && gameTask.LoginMethod == 2) || gameTask.LoginMethod == 7 {
+			// 魅族游戏id处理
+			GameId := gameTask.MzGameId + "-" + gameTask.MzChannel
+			// 青雀账号游戏id处理
+			if gameTask.LoginMethod == 7 {
+				taskId := strconv.Itoa(gameTask.TaskId)
+				GameId = "rose-" + taskId
+				gameTarget.PayComplete = roomData.PayComplete
+			}
+			if _, ok := wslData[GameId]; ok {
+				gameTarget.PayTarget = wslData[GameId]
+				if gameTarget.PayTarget > completeTaskData[gameTask.TaskId].PayTarget {
+					lastPayAddUpdateTimeKey := fmt.Sprintf(LastPayAddUpdateTimeKey, date, gameTask.TaskId)
+					_ = s.cache.SetCacheStr(context.Background(), lastPayAddUpdateTimeKey, time.Now().Unix())
+					// 本次加付费目标数据
+					lastPayAddNumKey := fmt.Sprintf(LastPayAddNumKey, date, gameTask.TaskId)
+					_ = s.cache.SetCacheStr(context.Background(), lastPayAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					payErrAddNumKey := fmt.Sprintf(PayErrAddNumKey, date, gameTask.TaskId)
+					diffNum := gameTarget.PayTarget - completeTaskData[gameTask.TaskId].PayTarget
+					s.common.SaveGameAddFee(diffNum, gameTarget.PayTarget, gameTask.TaskName)
+					//go s.common.FreeSendMsg(diffNum, gameTarget.PayTarget, gameTask.TaskId, gameTask.TaskName, gameTask.User)
+					// 如果当前付费目标完成,加入一下逻辑
+					if completeTaskData[gameTask.TaskId].PayTarget <= completeTaskData[gameTask.TaskId].PayComplete {
+						lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, gameTask.TaskId)
+						_ = s.cache.SetCacheStr(context.Background(), lastPayCompletedUpdateTimeKey, time.Now().Unix())
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget)
+					} else {
+						n, _ := s.cache.GetCacheNum(context.Background(), payErrAddNumKey)
+						_ = s.cache.SetCacheStr(context.Background(), payErrAddNumKey, gameTarget.PayTarget-completeTaskData[gameTask.TaskId].PayTarget+n)
+					}
+				}
+			}
+		}
+		gameTarget.IsComplete = -1
+		if gameTarget.RetainedComplete+completeTaskData[gameTask.TaskId].HandRetainedComplete >= completeTaskData[gameTask.TaskId].RetainedTarget && gameTarget.PayComplete >= completeTaskData[gameTask.TaskId].PayTarget && gameTarget.NewComplete+completeTaskData[gameTask.TaskId].HandNewComplete >= completeTaskData[gameTask.TaskId].NewTarget {
+			gameTarget.IsComplete = 1
+		}
+		global.GVA_DB.Model(&task.GameTargetComplete{}).Where("task_id = ?", gameTask.TaskId).Where("create_date = ?", date).Omit("create_date", "update_time", "task_id").Updates(gameTarget)
+	}
+	return
+}
+
 func (s *SyncData) DayTargetDataStatistics() {
 	date := time.Now().Add(-time.Hour * 24).Format("2006-01-02")
 	request1 := request2.GameTaskStatisticsRequest{

+ 16 - 9
service/task/urgent_task_conf.go

@@ -74,19 +74,21 @@ func (s *UrgentTaskService) DeleteUrgentTaskByIds(ids []int) (err error) {
 	return err
 }
 
-func (s *UrgentTaskService) UpdateUrgentTask(task1 task.UrgentTaskConf) (err error) {
+func (s *UrgentTaskService) UpdateUrgentTask(task1 task.UrgentTaskConf, isDelPcCode int) (err error) {
 	//查找此task_id是否存在,如果存在不更新,否则更新
 	var entity task.UrgentTaskConf
-	err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("task_id = ? and id = ? and create_date = ?", task1.TaskId, task1.Id, task1.CreateDate).First(&entity).Error
+	err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("task_id = ? and id = ?", task1.TaskId, task1.Id).First(&entity).Error
 	if errors.Is(err, gorm.ErrRecordNotFound) {
 		return errors.New("没有找到数据")
 	}
 	upPcCode := ""
-	if task1.PcCode != "" {
-		upPcCode = task1.PcCode
-		task1.PcCode = entity.PcCode + "," + task1.PcCode
+	if isDelPcCode != 1 {
+		if task1.PcCode != "" {
+			upPcCode = task1.PcCode
+			task1.PcCode = entity.PcCode + "," + task1.PcCode
+		}
 	}
-	err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("id", task1.Id).Updates(&task1).Error
+	err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("id", task1.Id).Update("pc_code", task1.PcCode).Error
 	if err != nil {
 		return err
 	}
@@ -102,16 +104,21 @@ func (s *UrgentTaskService) UpdateUrgentTask(task1 task.UrgentTaskConf) (err err
 	return
 }
 
-func (s *UrgentTaskService) GetUrgentTaskById(id int) (task1 task.UrgentTaskConf, err error) {
+func (s *UrgentTaskService) GetUrgentTaskById(id int) (task2 task.ByIdUrgentTaskConf, err error) {
+	var task1 task.UrgentTaskConf
 	err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("id", id).First(&task1).Error
-	return task1, err
+	task2.TaskId = task1.TaskId
+	task2.Id = task1.Id
+	task2.PcCode = strings.Split(task1.PcCode, ",")
+	return task2, err
 }
 
 //查询空闲租机
 func (s *UrgentTaskService) GetUnusedPc() (unusedPcList []task.UnusedPc, err error) {
 	//获取当日日期
 	date := time.Now().Format("2006-01-02")
-	db := global.GVA_DB.Table("computer_status").Where("status = ? and create_date = ?", -1, date)
+	// 放开状态为-1条件
+	db := global.GVA_DB.Table("computer_status").Where("create_date = ?", date)
 	pcCodes, err := s.GetTemporaryTaskId(date)
 	if pcCodes != "" {
 		db.Not("pc_code", strings.Split(pcCodes, ","))