소스 검색

统计异常问题处理

wangbin 3 년 전
부모
커밋
3dcefad463

+ 34 - 18
api/v1/typeManage/responsiblePerson.go

@@ -11,17 +11,17 @@ import (
 	"log-server/utils"
 )
 
-type ResponsiblePersonApi struct {}
+type ResponsiblePersonApi struct{}
 
 //增加负责人
-func (r *ResponsiblePersonApi) CreateResponsiblePerson(c *gin.Context)  {
+func (r *ResponsiblePersonApi) CreateResponsiblePerson(c *gin.Context) {
 	var responsiblePerson typeManage.ResponsiblePerson
 	_ = c.ShouldBindJSON(&responsiblePerson)
-	if err := utils.Verify(responsiblePerson, utils.ResponsiblePersonVerify);err != nil{
+	if err := utils.Verify(responsiblePerson, utils.ResponsiblePersonVerify); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	if err := responsiblePersonService.CreateResponsiblePerson(responsiblePerson);err != nil{
+	if err := responsiblePersonService.CreateResponsiblePerson(responsiblePerson); err != nil {
 		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 		response.FailWithMessage("创建失败", c)
 	} else {
@@ -30,7 +30,7 @@ func (r *ResponsiblePersonApi) CreateResponsiblePerson(c *gin.Context)  {
 }
 
 //删除单个负责人
-func (r *ResponsiblePersonApi) DeleteResponsiblePerson(c *gin.Context)  {
+func (r *ResponsiblePersonApi) DeleteResponsiblePerson(c *gin.Context) {
 	var person typeManage.ResponsiblePerson
 	_ = c.ShouldBindJSON(&person)
 	//数据校验
@@ -38,7 +38,7 @@ func (r *ResponsiblePersonApi) DeleteResponsiblePerson(c *gin.Context)  {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	if err := responsiblePersonService.DeleteResponsiblePerson(person);err != nil{
+	if err := responsiblePersonService.DeleteResponsiblePerson(person); err != nil {
 		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 		response.FailWithMessage("删除失败", c)
 	} else {
@@ -47,10 +47,10 @@ func (r *ResponsiblePersonApi) DeleteResponsiblePerson(c *gin.Context)  {
 }
 
 //批量删除
-func (r *ResponsiblePersonApi) DeleteResponsiblePersonsByIds(c *gin.Context)  {
+func (r *ResponsiblePersonApi) DeleteResponsiblePersonsByIds(c *gin.Context) {
 	var ids request.IdsReq
 	_ = c.ShouldBindJSON(&ids)
-	if err := responsiblePersonService.DeleteResponsiblePersonsByIds(ids);err != nil{
+	if err := responsiblePersonService.DeleteResponsiblePersonsByIds(ids); err != nil {
 		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 		response.FailWithMessage("删除失败", c)
 	} else {
@@ -60,14 +60,14 @@ func (r *ResponsiblePersonApi) DeleteResponsiblePersonsByIds(c *gin.Context)  {
 }
 
 //更新负责人信息
-func (r *ResponsiblePersonApi) UpdateResponsiblePerson(c *gin.Context)  {
+func (r *ResponsiblePersonApi) UpdateResponsiblePerson(c *gin.Context) {
 	var person typeManage.ResponsiblePerson
 	_ = c.ShouldBindJSON(&person)
-	if err := utils.Verify(person, utils.ResponsiblePersonVerify);err != nil{
+	if err := utils.Verify(person, utils.ResponsiblePersonVerify); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	if err := responsiblePersonService.UpdateResponsiblePerson(person);err != nil{
+	if err := responsiblePersonService.UpdateResponsiblePerson(person); err != nil {
 		global.GVA_LOG.Error("修改失败!", zap.Error(err))
 		response.FailWithMessage("修改失败", c)
 	} else {
@@ -77,15 +77,15 @@ func (r *ResponsiblePersonApi) UpdateResponsiblePerson(c *gin.Context)  {
 }
 
 //获取单个负责人信息
-func (r *ResponsiblePersonApi) GetResponsiblePersonById(c *gin.Context)  {
+func (r *ResponsiblePersonApi) GetResponsiblePersonById(c *gin.Context) {
 	var id request.GetById
 	_ = c.ShouldBindJSON(&id)
 	//数据校验
-	if err := utils.Verify(id, utils.IdVerify);err != nil{
+	if err := utils.Verify(id, utils.IdVerify); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	if person, err := responsiblePersonService.GetResponsiblePersonById(id.ID);err != nil{
+	if person, err := responsiblePersonService.GetResponsiblePersonById(id.ID); err != nil {
 		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 		response.FailWithMessage("获取失败", c)
 	} else {
@@ -94,14 +94,14 @@ func (r *ResponsiblePersonApi) GetResponsiblePersonById(c *gin.Context)  {
 }
 
 //条件查询所有负责人
-func (r *ResponsiblePersonApi) GetResponsiblePerson(c *gin.Context)  {
+func (r *ResponsiblePersonApi) GetResponsiblePerson(c *gin.Context) {
 	var pageInfo typeManage.SearchResponsiblePersonParams
 	_ = c.ShouldBindJSON(&pageInfo)
-	if err := utils.Verify(pageInfo, utils.ResponsiblePersonVerify);err != nil{
+	if err := utils.Verify(pageInfo, utils.ResponsiblePersonVerify); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	if list, total, err := responsiblePersonService.GetResponsiblePerson(pageInfo.ResponsiblePerson, pageInfo.PageInfo, pageInfo.OrderKey, pageInfo.Desc);err != nil{
+	if list, total, err := responsiblePersonService.GetResponsiblePerson(pageInfo.ResponsiblePerson, pageInfo.PageInfo, pageInfo.OrderKey, pageInfo.Desc); err != nil {
 		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 		response.FailWithMessage("获取失败", c)
 	} else {
@@ -113,4 +113,20 @@ func (r *ResponsiblePersonApi) GetResponsiblePerson(c *gin.Context)  {
 			PageSize: pageInfo.PageSize,
 		}, "获取成功", c)
 	}
-}
+}
+
+func (r *ResponsiblePersonApi) SelectResponsiblePerson(c *gin.Context) {
+	var pageInfo typeManage.SearchResponsiblePersonParams
+	_ = c.ShouldBindJSON(&pageInfo)
+	if err := utils.Verify(pageInfo, utils.ResponsiblePersonVerify); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if list, err := responsiblePersonService.SelectResponsiblePersonList(); err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		//响应结果
+		response.OkWithDetailed(list, "获取成功", c)
+	}
+}

+ 13 - 2
initialize/timer.go

@@ -94,11 +94,11 @@ func Timer() {
 		fmt.Println("add DayTargetDataStatistics timer error:", err)
 	}
 
-	// 定时检查是否有电脑到期,修改租机状态@every 1s
+	/*// 定时检查是否有电脑到期,修改租机状态@every 1s
 	//_, err = global.GVA_Timer.AddTaskByFunc("CheckIsExpire", "0/59 0/5 * * * *", serviceRentComputer.CheckIsExpire)
 	//if err != nil {
 	//	fmt.Println("add CheckIsExpire timer error:", err)
-	//}
+	//}*/
 
 	//定时获取扫码平台余额,每小时执行一次
 	_, err = global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 58 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
@@ -123,4 +123,15 @@ func Timer() {
 		fmt.Println("add SyncYesterdayWeChatScannerDetailed timer error:", err)
 	}
 
+	//// 活跃定时推送消息
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 0/2 * * * *", syncData.TaskMsgSend)
+	//if err != nil {
+	//	fmt.Println("add DayTargetDataStatistics timer error:", err)
+	//}
+	//
+	//// 付费定时推送消息
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "40 0/2 * * * *", syncData.TaskFreeMsgSend)
+	//if err != nil {
+	//	fmt.Println("add DayTargetDataStatistics timer error:", err)
+	//}
 }

+ 29 - 27
model/task/game_task.go

@@ -3,33 +3,35 @@ package task
 import "time"
 
 type GameTask struct {
-	Id             uint      `json:"id"`
-	TaskId         int       `json:"task_id"`
-	TaskName       string    `json:"task_name"`
-	User           string    `json:"user"`
-	NewRetained    string    `json:"new_retained"`
-	GameName       string    `json:"game_name"`
-	GameId         int       `json:"game_id"`
-	Date           time.Time `json:"date"`
-	GamePortId     int       `json:"game_port_id"`
-	AccountType    int       `json:"account_type"`
-	LoginMethod    int       `json:"login_method"`
-	TxChannel      string    `json:"tx_channel"`
-	TxGameId       string    `json:"tx_game_id"`
-	MzChannel      string    `json:"mz_channel"`
-	MzGameId       string    `json:"mz_game_id"`
-	GameIdXmy      string    `json:"game_id_xmy"`
-	NewTarget      int       `json:"new_target"`
-	PayTarget      int       `json:"pay_target"`
-	RetainedTarget int       `json:"retained_target"`
-	PayPrice       int       `json:"pay_price"`
-	ControlTaskId  int       `json:"control_task_id"`
-	CreateTime     time.Time `json:"create_time"` // 创建时间
-	UpdateTime     time.Time `json:"update_time"` // 更新时间
-	Status         int       `json:"status"`      // 状态-1关闭,1开启
-	IsDel          int       `json:"is_del"`      // 是否删除-1删除,1正常
-	DeleteTime     time.Time `json:"delete_time"`
-	StopTime       time.Time `json:"stop_time"`
+	Id              uint      `json:"id"`
+	TaskId          int       `json:"task_id"`
+	TaskName        string    `json:"task_name"`
+	User            string    `json:"user"`
+	NewRetained     string    `json:"new_retained"`
+	GameName        string    `json:"game_name"`
+	GameId          int       `json:"game_id"`
+	Date            time.Time `json:"date"`
+	GamePortId      int       `json:"game_port_id"`
+	AccountType     int       `json:"account_type"`
+	LoginMethod     int       `json:"login_method"`
+	TxChannel       string    `json:"tx_channel"`
+	TxGameId        string    `json:"tx_game_id"`
+	MzChannel       string    `json:"mz_channel"`
+	MzGameId        string    `json:"mz_game_id"`
+	GameIdXmy       string    `json:"game_id_xmy"`
+	NewTarget       int       `json:"new_target"`
+	NewTargetH      int       `json:"new_target_h"`
+	PayTarget       int       `json:"pay_target"`
+	RetainedTarget  int       `json:"retained_target"`
+	RetainedTargetH int       `json:"retained_target_h"`
+	PayPrice        int       `json:"pay_price"`
+	ControlTaskId   int       `json:"control_task_id"`
+	CreateTime      time.Time `json:"create_time"` // 创建时间
+	UpdateTime      time.Time `json:"update_time"` // 更新时间
+	Status          int       `json:"status"`      // 状态-1关闭,1开启
+	IsDel           int       `json:"is_del"`      // 是否删除-1删除,1正常
+	DeleteTime      time.Time `json:"delete_time"`
+	StopTime        time.Time `json:"stop_time"`
 }
 
 func (GameTask) TableName() string {

+ 23 - 20
model/task/request/game_task.go

@@ -3,26 +3,28 @@ package request
 import "log-server/model/task"
 
 type GameTaskRequest struct {
-	Id             uint   `json:"id"`
-	TaskId         int    `json:"task_id"`
-	TaskName       string `json:"task_name"`
-	User           string `json:"user"`
-	NewRetained    string `json:"new_retained"`
-	GameName       string `json:"game_name"`
-	GameId         int    `json:"game_id"`
-	Date           string `json:"date"`
-	GamePortId     int    `json:"game_port_id"`
-	AccountType    int    `json:"account_type"`
-	LoginMethod    int    `json:"login_method"`
-	TxChannel      string `json:"tx_channel"`
-	TxGameId       string `json:"tx_game_id"`
-	MzChannel      string `json:"mz_channel"`
-	MzGameId       string `json:"mz_game_id"`
-	GameIdXmy      string `json:"game_id_xmy"`
-	NewTarget      int    `json:"new_target"`
-	PayTarget      int    `json:"pay_target"`
-	RetainedTarget int    `json:"retained_target"`
-	PayPrice       int    `json:"pay_price"`
+	Id              uint   `json:"id"`
+	TaskId          int    `json:"task_id"`
+	TaskName        string `json:"task_name"`
+	User            string `json:"user"`
+	NewRetained     string `json:"new_retained"`
+	GameName        string `json:"game_name"`
+	GameId          int    `json:"game_id"`
+	Date            string `json:"date"`
+	GamePortId      int    `json:"game_port_id"`
+	AccountType     int    `json:"account_type"`
+	LoginMethod     int    `json:"login_method"`
+	TxChannel       string `json:"tx_channel"`
+	TxGameId        string `json:"tx_game_id"`
+	MzChannel       string `json:"mz_channel"`
+	MzGameId        string `json:"mz_game_id"`
+	GameIdXmy       string `json:"game_id_xmy"`
+	NewTarget       int    `json:"new_target"`
+	PayTarget       int    `json:"pay_target"`
+	RetainedTarget  int    `json:"retained_target"`
+	NewTargetH      int    `json:"new_target_h"`
+	RetainedTargetH int    `json:"retained_target_h"`
+	PayPrice        int    `json:"pay_price"`
 }
 
 type GetGameTaskListRequest struct {
@@ -60,6 +62,7 @@ type GameTargetCompleteRequest struct {
 	CreateDate       string `json:"create_date"`
 	UpdateTime       string `json:"update_time"` // 更新时间
 	GameRate         string `json:"game_rate"`
+	IsComplete       int    `json:"is_complete"`
 }
 
 type GetGameTaskTargetByIdRequest struct {

+ 18 - 16
model/task/response/game_task.go

@@ -3,22 +3,24 @@ package response
 import "time"
 
 type GetGameTaskListReply struct {
-	TaskId         int    `json:"task_id"`
-	TaskName       string `json:"task_name"`
-	User           string `json:"user"`
-	GameName       string `json:"game_name"`
-	Date           string `json:"date"`
-	GamePort       string `json:"game_port"`
-	AccountType    string `json:"account_type"`
-	LoginMethod    string `json:"login_method"`
-	NewTarget      int    `json:"new_target"`
-	PayTarget      int    `json:"pay_target"`
-	RetainedTarget int    `json:"retained_target"`
-	PayPrice       int    `json:"pay_price"`
-	Status         int    `json:"status"`      // 状态-1关闭,1开启
-	CreateTime     string `json:"create_time"` // 创建时间
-	UpdateTime     string `json:"update_time"` // 更新时间
-	StopTime       string `json:"stop_time"`
+	TaskId          int    `json:"task_id"`
+	TaskName        string `json:"task_name"`
+	User            string `json:"user"`
+	GameName        string `json:"game_name"`
+	Date            string `json:"date"`
+	GamePort        string `json:"game_port"`
+	AccountType     string `json:"account_type"`
+	LoginMethod     string `json:"login_method"`
+	NewTarget       int    `json:"new_target"`
+	PayTarget       int    `json:"pay_target"`
+	NewTargetH      int    `json:"new_target_h"`
+	RetainedTarget  int    `json:"retained_target"`
+	RetainedTargetH int    `json:"retained_target_h"`
+	PayPrice        int    `json:"pay_price"`
+	Status          int    `json:"status"`      // 状态-1关闭,1开启
+	CreateTime      string `json:"create_time"` // 创建时间
+	UpdateTime      string `json:"update_time"` // 更新时间
+	StopTime        string `json:"stop_time"`
 }
 
 type GetGameTargetComplete struct {

+ 9 - 8
router/typeManage/responsiblePerson.go

@@ -5,17 +5,18 @@ import (
 	v1 "log-server/api/v1"
 )
 
-type ResponsiblePersonRouter struct {}
+type ResponsiblePersonRouter struct{}
 
-func (r *ResponsiblePersonRouter) InitResponsiblePersonRouter(Router *gin.RouterGroup)  {
+func (r *ResponsiblePersonRouter) InitResponsiblePersonRouter(Router *gin.RouterGroup) {
 	responsiblePersonRouter := Router.Group("responsiblePerson")
 	responsiblePersonApi := v1.ApiGroupApp.TypeApiGroup.ResponsiblePersonApi
 	{
-		responsiblePersonRouter.POST("createResponsiblePerson",responsiblePersonApi.CreateResponsiblePerson)          // 增加负责人
-		responsiblePersonRouter.POST("deleteResponsiblePerson",responsiblePersonApi.DeleteResponsiblePerson)          // 删除单个负责人
-		responsiblePersonRouter.DELETE("deleteResponsiblePersonsByIds", responsiblePersonApi.DeleteResponsiblePersonsByIds)		//批量删除
-		responsiblePersonRouter.POST("updateResponsiblePerson",responsiblePersonApi.UpdateResponsiblePerson)          // 更新负责人信息
-		responsiblePersonRouter.POST("getResponsiblePersonById", responsiblePersonApi.GetResponsiblePersonById) 		//获取单个负责人信息
-		responsiblePersonRouter.POST("getResponsiblePerson",responsiblePersonApi.GetResponsiblePerson)          // 条件查询所有负责人
+		responsiblePersonRouter.POST("createResponsiblePerson", responsiblePersonApi.CreateResponsiblePerson)               // 增加负责人
+		responsiblePersonRouter.POST("deleteResponsiblePerson", responsiblePersonApi.DeleteResponsiblePerson)               // 删除单个负责人
+		responsiblePersonRouter.DELETE("deleteResponsiblePersonsByIds", responsiblePersonApi.DeleteResponsiblePersonsByIds) //批量删除
+		responsiblePersonRouter.POST("updateResponsiblePerson", responsiblePersonApi.UpdateResponsiblePerson)               // 更新负责人信息
+		responsiblePersonRouter.POST("getResponsiblePersonById", responsiblePersonApi.GetResponsiblePersonById)             //获取单个负责人信息
+		responsiblePersonRouter.POST("getResponsiblePerson", responsiblePersonApi.GetResponsiblePerson)                     // 条件查询所有负责人
+		responsiblePersonRouter.POST("selectResponsiblePerson", responsiblePersonApi.SelectResponsiblePerson)
 	}
 }

+ 2 - 2
service/log/log_statistics.go

@@ -291,8 +291,8 @@ func (s *ServiceStatisticsLog) statisticsData(ctx context.Context, gameIdInt, tt
 		//	statisticsLog.ScanningSuccessRate = float64(statisticsLog.TargetNum) / float64(statisticsLog.NewScanningCode) * 100
 		//}
 	}
-	if statisticsLog.ScanningCodeSuccess != 0 {
-		statisticsLog.ScanningSuccessRate = float64(statisticsLog.ScanningCodeSuccess) / float64(statisticsLog.EnterScanningCode) * 100
+	if statisticsLog.ScanningCodeSuccess != 0 && statisticsLog.EnterScanningCode != 0 {
+		statisticsLog.ScanningSuccessRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", float64(statisticsLog.ScanningCodeSuccess)/float64(statisticsLog.EnterScanningCode)*100), 64)
 	}
 	statisticsLog.PayComplete = taskStatistics.PayComplete
 	statisticsLog.PayTarget = taskStatistics.PayTarget

+ 22 - 14
service/task/game_task.go

@@ -115,30 +115,31 @@ func (s *GameTask) CreateGameTargetCompleteModel(oldA task.GameTask, date time.T
 	var newTarget int
 	rand.Seed(time.Now().UnixNano())
 	newTargetRate := rand.Float64()
-	if oldA.NewTarget <= 10 {
+	/*if oldA.NewTarget <= 10 {
 		newTarget = 10
 	} else {
 		newTarget = int(math.Ceil(float64(oldA.NewTarget) * 0.5))
-	}
+	}*/
+	newTarget = int(math.Ceil(float64(oldA.NewTargetH-oldA.NewTarget) * newTargetRate))
 	var retainedTarget int
 	rand.Seed(time.Now().UnixNano())
 	retainedTargetRate := rand.Float64()
-	if oldA.RetainedTarget < 100 {
-		retainedTarget = oldA.RetainedTarget
-	} else if oldA.RetainedTarget > 1000 {
-		retainedTarget = 1000
-	} else {
-		retainedTarget = 200
-	}
-
+	//if oldA.RetainedTarget < 100 {
+	//	retainedTarget = oldA.RetainedTarget
+	//} else if oldA.RetainedTarget > 1000 {
+	//	retainedTarget = 1000
+	//} else {
+	//	retainedTarget = 200
+	//}
+	retainedTarget = int(math.Ceil(float64(oldA.RetainedTargetH-oldA.RetainedTarget) * retainedTargetRate))
 	targetComplete := new(task.GameTargetComplete)
 	targetComplete.TaskId = oldA.TaskId
-	targetComplete.NewTarget = oldA.NewTarget + int(math.Ceil(newTargetRate*float64(newTarget)))
-	if oldA.NewTarget == 0 {
+	targetComplete.NewTarget = oldA.NewTarget + newTarget
+	if oldA.NewTarget == 0 || oldA.NewTargetH == 0 {
 		targetComplete.NewTarget = 0
 	}
-	targetComplete.RetainedTarget = oldA.RetainedTarget + int(math.Ceil(retainedTargetRate*float64(retainedTarget)))
-	if oldA.RetainedTarget == 1 {
+	targetComplete.RetainedTarget = oldA.RetainedTarget + retainedTarget
+	if oldA.RetainedTarget == 1 || oldA.RetainedTargetH == 1 {
 		targetComplete.RetainedTarget = 1
 	}
 	targetComplete.PayTarget = 0
@@ -299,6 +300,8 @@ func (apiService *GameTask) GetGameTaskInfoList(api task.GameTask, info request.
 			apiReply.PayTarget = apiInfo.PayTarget
 			apiReply.RetainedTarget = apiInfo.RetainedTarget
 			apiReply.PayPrice = apiInfo.PayPrice
+			apiReply.RetainedTargetH = apiInfo.RetainedTargetH
+			apiReply.NewTargetH = apiInfo.NewTargetH
 			apiReply.StopTime = apiInfo.StopTime.Format("2006-01-02 15:04:05")
 			if apiInfo.Status == 1 {
 				apiReply.StopTime = ""
@@ -434,6 +437,8 @@ func (s *GameTask) UpdateGameTask(requestData request.GameTaskRequest) (err erro
 	gameTask.PayTarget = requestData.PayTarget
 	gameTask.RetainedTarget = requestData.RetainedTarget
 	gameTask.PayPrice = requestData.PayPrice
+	gameTask.NewTargetH = requestData.NewTargetH
+	gameTask.RetainedTargetH = requestData.RetainedTargetH
 	taskRequestData := s.CreateGameTaskRequestData(requestData)
 	err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
 		err = tx.Where("task_id = ?", requestData.TaskId).Omit("create_time", "update_time", "status", "is_del", "delete_time", "control_task_id", "date", "task_id").Updates(&gameTask).Error
@@ -524,6 +529,9 @@ func (apiService *GameTask) GetGameTaskTargetInfoList(api request.GameTargetComp
 	if api.TaskId != 0 {
 		db = db.Where("gtc.task_id = ?", api.TaskId)
 	}
+	if api.IsComplete != 0 {
+		db = db.Where("gtc.is_complete = ?", api.IsComplete)
+	}
 	err = db.Count(&total).Error
 
 	if err != nil {

+ 456 - 0
service/task/sync_data.go

@@ -13,6 +13,7 @@ import (
 	"log-server/model/task"
 	"log-server/model/task/control"
 	request2 "log-server/model/task/request"
+	"log-server/service/cache"
 	"log-server/utils"
 	"strconv"
 	"time"
@@ -20,6 +21,7 @@ import (
 
 type SyncData struct {
 	GameTask GameTask
+	cache    cache.Cache
 }
 
 func (s *SyncData) SyncXmyGameData(date string) (mps map[int]control.XmyPayRequestReplyData, err error) {
@@ -255,3 +257,457 @@ func (s *SyncData) DayTargetDataStatistics() {
 	}
 	global.GVA_DB.Omit("update_time").Create(gameTargetDates)
 }
+
+var LastMsgSendTimeKey = "%s:lastMsgSendTime"
+var LastNewCompletedKey = "%s:msgSendInfo:%d:lastNewCompleted"
+var LastPayCompletedKey = "%s:msgSendInfo:%d:lastPayCompleted"
+var LastRetainedCompletedKey = "%s:msgSendInfo:%d:lastRetainedCompleted"
+var LastNewCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastNewCompletedUpdateTime"
+var LastPayCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastPayCompletedUpdateTime"
+var LastRetainedCompletedUpdateTimeKey = "%s:msgSendInfo:%d:lastRetainedCompletedUpdateTime"
+var LastPayAddUpdateTimeKey = "%s:msgSendInfo:%d:lastPayAddUpdateTime"
+var TaskCompletedStatusKey = "%s:taskCompletedStatus"
+var LastFreeMsgSendTimeKey = "%s:lastFreeMsgSendTime"
+
+type CompletedInfo struct {
+	AlsoTarget       int //剩余数量
+	Rate             int //时间段做的任务数
+	TimeRate         int // 完成任务数据更新时间
+	TaskId           int
+	AddPayUpdateTime int
+}
+
+// 获取未完成的任务数据
+func (s *SyncData) TaskNoCompleteDate(date string) (completesInfo []task.GameTargetComplete, err error) {
+	db := global.GVA_DB.Table("game_target_complete")
+	db = db.Where("is_complete = ?", -1)
+	db = db.Where("create_date = ?", date)
+	err = db.Find(&completesInfo).Error
+	if err != nil {
+		return
+	}
+	return
+}
+
+func (s *SyncData) TaskMsgSendInitData(ctx context.Context, completesInfo []task.GameTargetComplete, ctime int64, date, taskCompletedStatusKey, lastMsgSendTimeKey string) {
+	for _, complete := range completesInfo {
+		lastNewCompletedKey := fmt.Sprintf(LastNewCompletedKey, date, complete.TaskId)
+		lastPayCompletedKey := fmt.Sprintf(LastPayCompletedKey, date, complete.TaskId)
+		lastRetainedCompletedKey := fmt.Sprintf(LastRetainedCompletedKey, date, complete.TaskId)
+		lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, complete.TaskId)
+		lastNewCompletedUpdateTimeKey := fmt.Sprintf(LastNewCompletedUpdateTimeKey, date, complete.TaskId)
+		lastRetainedCompletedUpdateTimeKey := fmt.Sprintf(LastRetainedCompletedUpdateTimeKey, date, complete.TaskId)
+		lastPayAddUpdateTimeKey := fmt.Sprintf(LastPayAddUpdateTimeKey, date, complete.TaskId)
+		lastNewCompleted := complete.NewComplete + complete.HandNewComplete //上次新增完成数
+		_ = s.cache.SetCacheStr(ctx, lastNewCompletedKey, lastNewCompleted)
+		lastPayCompleted := complete.PayComplete + complete.HandPayComplete //上次支付完成数
+		_ = s.cache.SetCacheStr(ctx, lastPayCompletedKey, lastPayCompleted)
+		lastRetainedCompleted := complete.RetainedComplete + complete.HandRetainedComplete //上次活跃完成数
+		_ = s.cache.SetCacheStr(ctx, lastRetainedCompletedKey, lastRetainedCompleted)
+		//lastNewCompletedUpdateTime := complete.NewComplete //上次新增完成更新时间
+		_ = s.cache.SetCacheStr(ctx, lastNewCompletedUpdateTimeKey, ctime)
+		//lastPayCompletedUpdateTime := complete.NewComplete //上次支付完成更新时间
+		_ = s.cache.SetCacheStr(ctx, lastPayCompletedUpdateTimeKey, ctime)
+		//lastRetainedCompletedUpdateTime := complete.NewComplete //上次留存完成更新时间
+		_ = s.cache.SetCacheStr(ctx, lastRetainedCompletedUpdateTimeKey, ctime)
+		//lastPayAddUpdateTime := complete.NewComplete //上次付费增加更新时间
+		_ = s.cache.SetCacheStr(ctx, lastPayAddUpdateTimeKey, ctime)
+	}
+	_ = s.cache.SetCacheStr(ctx, taskCompletedStatusKey, -1)
+	_ = s.cache.SetCacheStr(ctx, lastMsgSendTimeKey, time.Now().Unix())
+}
+
+func (s *SyncData) TaskMsgSendRetainedData(ctx context.Context, completesInfo []task.GameTargetComplete, ctime int64, date, lastMsgSendTimeKey string) {
+	var mps = make(map[int]map[string]CompletedInfo)
+	lastMsgSendTime, _ := s.cache.GetCacheNum(ctx, lastMsgSendTimeKey)
+	for _, complete := range completesInfo {
+		lastNewCompletedKey := fmt.Sprintf(LastNewCompletedKey, date, complete.TaskId)
+		lastRetainedCompletedKey := fmt.Sprintf(LastRetainedCompletedKey, date, complete.TaskId)
+		lastNewCompletedUpdateTimeKey := fmt.Sprintf(LastNewCompletedUpdateTimeKey, date, complete.TaskId)
+		lastRetainedCompletedUpdateTimeKey := fmt.Sprintf(LastRetainedCompletedUpdateTimeKey, date, complete.TaskId)
+		currentNewCompleted := complete.NewComplete + complete.HandNewComplete
+		currentRetainedCompleted := complete.RetainedComplete + complete.HandRetainedComplete
+		var RateMp = make(map[string]CompletedInfo)
+		var newBool = false
+		var retainedBoll = false
+		// 处理新增
+		if complete.NewTarget > currentNewCompleted {
+			lastNewCompleted, _ := s.cache.GetCacheNum(ctx, lastNewCompletedKey)
+			alsoNewTarget := complete.NewTarget - currentNewCompleted
+			newRate := 0
+			lastNewCompletedUpdateTime, _ := s.cache.GetCacheNum(ctx, lastNewCompletedUpdateTimeKey)
+			timeRate := int(ctime) - lastNewCompletedUpdateTime
+			if lastNewCompleted < currentNewCompleted {
+				newRate = currentNewCompleted - lastNewCompleted
+				_ = s.cache.SetCacheStr(ctx, lastNewCompletedKey, currentNewCompleted)
+				_ = s.cache.SetCacheStr(ctx, lastNewCompletedUpdateTimeKey, ctime) //上次新增完成更新时间
+			}
+			RateMp["newRate"] = CompletedInfo{
+				AlsoTarget: alsoNewTarget,
+				Rate:       newRate,
+				TimeRate:   timeRate,
+				TaskId:     complete.TaskId,
+			}
+		} else {
+			newBool = true
+			// 如果当前新增为0,或者完成也更新时间
+			_ = s.cache.SetCacheStr(ctx, lastNewCompletedUpdateTimeKey, ctime) //上次新增完成更新时间
+		}
+		// 处理留存
+		if complete.RetainedTarget > currentRetainedCompleted {
+			lastRetainedCompleted, _ := s.cache.GetCacheNum(ctx, lastRetainedCompletedKey)
+			alsoRetainedTarget := complete.RetainedTarget - currentRetainedCompleted
+			retainedRate := 0
+			lastRetainedCompletedUpdateTime, _ := s.cache.GetCacheNum(ctx, lastRetainedCompletedUpdateTimeKey)
+			timeRate := int(ctime) - lastRetainedCompletedUpdateTime
+			if lastRetainedCompleted < currentRetainedCompleted {
+				retainedRate = currentRetainedCompleted - lastRetainedCompleted
+				_ = s.cache.SetCacheStr(ctx, lastRetainedCompletedKey, currentRetainedCompleted)
+				_ = s.cache.SetCacheStr(ctx, lastRetainedCompletedUpdateTimeKey, ctime) //上次留存完成更新时间
+			}
+			RateMp["retainedRate"] = CompletedInfo{
+				AlsoTarget: alsoRetainedTarget,
+				Rate:       retainedRate,
+				TimeRate:   timeRate,
+				TaskId:     complete.TaskId,
+			}
+		} else {
+			retainedBoll = true
+			// 如果当前留存为0,或者完成也更新时间
+			_ = s.cache.SetCacheStr(ctx, lastRetainedCompletedUpdateTimeKey, ctime) //上次留存完成更新时间
+		}
+		if !newBool || !retainedBoll {
+			mps[complete.TaskId] = RateMp
+		}
+	}
+
+	var taskStatistics = "%s:taskStatistics"
+	var retained = "活跃播报 " + time.Now().Format("2006-01-02 15:04:05")
+	if len(mps) == 0 {
+		global.GVA_LOG.Warn(retained)
+	}
+	var errMsg = "以下游戏目标效率为零:"
+	var errMsgZ = ""
+	var sendMsg = map[string]string{}
+	var m int // 时间内
+	m = (int(ctime) - lastMsgSendTime) / 60
+	for taskId, data := range mps {
+		key := fmt.Sprintf(taskStatistics, date)
+		gameIdStr := strconv.Itoa(taskId)
+		gameTask, err := global.GVA_REDIS.HGet(ctx, key, gameIdStr).Result()
+		if err != nil {
+			if err == redis.Nil {
+				continue
+			} else {
+				global.GVA_LOG.Error("TaskMsgSendRetainedData获取缓存任务数据失败", zap.Error(err))
+				continue
+			}
+		}
+		var taskStatistics request.TaskStatistics
+		_ = json.Unmarshal([]byte(gameTask), &taskStatistics)
+		var isNew = false
+		var nm int      //新增时间内
+		var rm int      //存时间内
+		var rate string //效率
+		var newErr = false
+		var retainedErr = false
+		var name = taskStatistics.Remark
+		if info, ok := data["newRate"]; ok {
+			sendMsg[name] += "\n"
+			sendMsg[name] += taskStatistics.GameName
+			sendMsg[name] += ",新增差"
+			sendMsg[name] += strconv.Itoa(info.AlsoTarget)
+			isNew = true
+			if info.TimeRate > 60*60*24 {
+				lastNewCompletedUpdateTimeKey := fmt.Sprintf(LastNewCompletedUpdateTimeKey, date, info.TaskId)
+				_ = s.cache.SetCacheStr(ctx, lastNewCompletedUpdateTimeKey, ctime) //上次新增完成更新时间
+				nm = 1
+			} else {
+				nm = info.TimeRate / 60
+			}
+			rate = strconv.Itoa(info.Rate)
+			if info.Rate == 0 {
+				newErr = true
+			}
+		}
+		if info, ok := data["retainedRate"]; ok {
+			if !isNew {
+				sendMsg[name] += "\n"
+				sendMsg[name] += taskStatistics.GameName
+				rate = strconv.Itoa(info.Rate)
+				sendMsg[name] += "活跃差"
+			} else {
+				rate += "/" + strconv.Itoa(info.Rate)
+				sendMsg[name] += ",活跃差"
+			}
+			if info.TimeRate > 60*60*24 {
+				lastRetainedCompletedUpdateTimeKey := fmt.Sprintf(LastRetainedCompletedUpdateTimeKey, date, info.TaskId)
+				_ = s.cache.SetCacheStr(ctx, lastRetainedCompletedUpdateTimeKey, ctime) //上次留存完成更新时间
+				rm = 1
+			} else {
+				rm = info.TimeRate / 60
+			}
+
+			sendMsg[name] += strconv.Itoa(info.AlsoTarget)
+			if info.Rate == 0 {
+				retainedErr = true
+			}
+		}
+
+		// 5分钟数据没动报异常数据
+		if newErr && nm > 4 {
+			errMsgZ += "\n"
+			errMsgZ += taskStatistics.GameName
+			errMsgZ += ",新增"
+			if nm >= 60 {
+				errMsgZ += "("
+				errMsgZ += strconv.Itoa(nm / 60)
+				errMsgZ += "小时内)"
+			} else {
+				errMsgZ += "("
+				errMsgZ += strconv.Itoa(nm)
+				errMsgZ += "分钟内)"
+			}
+		}
+		if retainedErr && rm > 4 {
+			if !newErr {
+				errMsgZ += "\n"
+				errMsgZ += taskStatistics.GameName
+			}
+			errMsgZ += ",活跃"
+			if rm >= 60 {
+				errMsgZ += "("
+				errMsgZ += strconv.Itoa(rm / 60)
+				errMsgZ += "小时内)"
+			} else {
+				errMsgZ += "("
+				errMsgZ += strconv.Itoa(rm)
+				errMsgZ += "分钟内)"
+			}
+		}
+		sendMsg[name] += ","
+		if m >= 60 {
+			sendMsg[name] += strconv.Itoa(m / 60)
+			sendMsg[name] += "小时内完成"
+		} else {
+			sendMsg[name] += strconv.Itoa(m)
+			sendMsg[name] += "分钟内完成"
+		}
+		sendMsg[name] += rate
+	}
+
+	for name, msg := range sendMsg {
+		retained += "\n"
+		retained += name
+		retained += msg
+	}
+	msg := retained
+	if errMsgZ != "" {
+		msg += "\n"
+		msg += errMsg + errMsgZ
+	}
+	global.GVA_LOG.Warn(msg)
+	_ = s.cache.SetCacheStr(ctx, lastMsgSendTimeKey, time.Now().Unix())
+}
+
+func (s *SyncData) TaskMsgSendFreeData(ctx context.Context, completesInfo []task.GameTargetComplete, ctime int64, date, lastFreeMsgSendTimeKey string, isOne bool) {
+	var RateMp = make(map[int]CompletedInfo)
+	lastFreeMsgSendTime, _ := s.cache.GetCacheNum(ctx, lastFreeMsgSendTimeKey)
+	for _, complete := range completesInfo {
+		lastPayCompletedKey := fmt.Sprintf(LastPayCompletedKey, date, complete.TaskId)
+		lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, complete.TaskId)
+		lastPayAddUpdateTimeKey := fmt.Sprintf(LastPayAddUpdateTimeKey, date, complete.TaskId)
+		currentPayCompleted := complete.PayComplete + complete.HandPayComplete
+		// 付费处理
+		if complete.PayTarget != 0 && complete.PayTarget > currentPayCompleted {
+			lastPayCompleted, _ := s.cache.GetCacheNum(ctx, lastPayCompletedKey)
+			alsoPayTarget := complete.PayTarget - currentPayCompleted
+			payRate := 0
+			lastPayCompletedUpdateTime, _ := s.cache.GetCacheNum(ctx, lastPayCompletedUpdateTimeKey)
+			lastPayAddUpdateTime, _ := s.cache.GetCacheNum(ctx, lastPayAddUpdateTimeKey)
+			timeRate := int(ctime) - lastPayCompletedUpdateTime
+			if lastPayCompleted < currentPayCompleted {
+				payRate = currentPayCompleted - lastPayCompleted
+				_ = s.cache.SetCacheStr(ctx, lastPayCompletedKey, currentPayCompleted)
+				_ = s.cache.SetCacheStr(ctx, lastPayCompletedUpdateTimeKey, ctime) //上次付费更新时间
+			}
+			RateMp[complete.TaskId] = CompletedInfo{
+				AlsoTarget:       alsoPayTarget,
+				Rate:             payRate,
+				TimeRate:         timeRate,
+				TaskId:           complete.TaskId,
+				AddPayUpdateTime: lastPayAddUpdateTime,
+			}
+		} else {
+			// 如果当前付费为0,或者完成也更新时间
+			_ = s.cache.SetCacheStr(ctx, lastPayCompletedUpdateTimeKey, ctime) //上次付费更新时间
+		}
+	}
+	if isOne {
+		_ = s.cache.SetCacheStr(ctx, lastFreeMsgSendTimeKey, time.Now().Unix())
+		return
+	}
+	if len(RateMp) == 0 {
+		global.GVA_LOG.Info("TaskMsgSendFreeData没有查询到未完成付费数据")
+		return
+	}
+	var taskStatistics = "%s:taskStatistics"
+	var retained = "付费播报 " + time.Now().Format("2006-01-02 15:04:05")
+	var errMsg = "以下游戏付费效率为零:"
+	var errMsgZ = ""
+	var sendMsg = map[string]string{}
+	var m int //时间内
+	m = (int(ctime) - lastFreeMsgSendTime) / 60
+	for taskId, data := range RateMp {
+		if data.AlsoTarget <= 0 {
+			continue
+		}
+		key := fmt.Sprintf(taskStatistics, date)
+		gameIdStr := strconv.Itoa(taskId)
+		gameTask, err := global.GVA_REDIS.HGet(ctx, key, gameIdStr).Result()
+		if err != nil {
+			if err == redis.Nil {
+				continue
+			} else {
+				global.GVA_LOG.Error("TaskMsgSendRetainedData获取缓存任务数据失败", zap.Error(err))
+				continue
+			}
+		}
+		var taskStatistics request.TaskStatistics
+		_ = json.Unmarshal([]byte(gameTask), &taskStatistics)
+
+		var name = taskStatistics.Remark
+		sendMsg[name] += "\n"
+		sendMsg[name] += taskStatistics.GameName
+		sendMsg[name] += ",付费差"
+		sendMsg[name] += strconv.Itoa(data.AlsoTarget)
+
+		if data.TimeRate > 60*60*24 {
+			lastPayCompletedUpdateTimeKey := fmt.Sprintf(LastPayCompletedUpdateTimeKey, date, data.TaskId)
+			_ = s.cache.SetCacheStr(ctx, lastPayCompletedUpdateTimeKey, ctime) //上次付费更新时间
+		}
+		// 5分钟数据没动报异常数据
+		if data.TimeRate/60 >= 4 {
+			if data.Rate == 0 {
+				errMsgZ += "\n"
+				errMsgZ += taskStatistics.GameName
+				errMsgZ += "("
+				if data.TimeRate/60 >= 60 {
+					errMsgZ += strconv.Itoa(data.TimeRate / 60 / 60)
+					errMsgZ += "小时内)"
+				} else {
+					errMsgZ += strconv.Itoa(data.TimeRate / 60)
+					errMsgZ += "分钟内)"
+				}
+				errMsgZ += ","
+				errMsgZ += "最后加付费时间 "
+				t := time.Unix(int64(data.AddPayUpdateTime), 0)
+				errMsgZ += t.Format("15:04:05")
+			}
+		}
+		sendMsg[name] += ","
+		if m >= 60 {
+			sendMsg[name] += strconv.Itoa(m / 60)
+			sendMsg[name] += "分钟内完成"
+		} else {
+			sendMsg[name] += strconv.Itoa(m)
+			sendMsg[name] += "分钟内完成"
+		}
+		sendMsg[name] += strconv.Itoa(data.Rate)
+	}
+	for name, msg := range sendMsg {
+		retained += "\n"
+		retained += name
+		retained += msg
+	}
+	msg := retained
+	if errMsgZ != "" {
+		msg += "\n"
+		msg += errMsg + errMsgZ
+	}
+	global.GVA_LOG.Warn(msg)
+	_ = s.cache.SetCacheStr(ctx, lastFreeMsgSendTimeKey, time.Now().Unix())
+	return
+}
+
+//活跃新增数据推送
+func (s *SyncData) TaskMsgSend() {
+	date := time.Now().Format("2006-01-02")
+	ctx := context.Background()
+	taskCompletedStatusKey := fmt.Sprintf(TaskCompletedStatusKey, date)
+	taskCompletedStatus, _ := s.cache.GetCacheNum(ctx, taskCompletedStatusKey)
+	if taskCompletedStatus == 1 {
+		return
+	}
+	completesInfo, err := s.TaskNoCompleteDate(date)
+	if err != nil {
+		global.GVA_LOG.Error("TaskMsgSend查询任务数据报错", zap.Error(err))
+	}
+	if len(completesInfo) == 0 {
+		global.GVA_LOG.Info("TaskMsgSend没有查询到未完成数据")
+	}
+	lastMsgSendTimeKey := fmt.Sprintf(LastMsgSendTimeKey, date)
+	b, err := s.cache.ExistsKey(context.Background(), lastMsgSendTimeKey)
+	if err != nil {
+		global.GVA_LOG.Error("TaskMsgSend查询任务数据报错", zap.Error(err))
+		return
+	}
+	ctime := time.Now().Unix()
+	if !b {
+		s.TaskMsgSendInitData(ctx, completesInfo, ctime, date, taskCompletedStatusKey, lastMsgSendTimeKey)
+	} else {
+		lastMsgSendTime, _ := s.cache.GetCacheNum(ctx, lastMsgSendTimeKey)
+		if int(ctime)-lastMsgSendTime < 60 {
+			global.GVA_LOG.Error("TaskMsgSend上次数据发送时间还没到5分钟", zap.Error(err))
+			return
+		}
+		s.TaskMsgSendRetainedData(ctx, completesInfo, ctime, date, lastMsgSendTimeKey)
+	}
+}
+
+//活跃新增数据推送
+func (s *SyncData) TaskFreeMsgSend() {
+	date := time.Now().Format("2006-01-02")
+	ctx := context.Background()
+	taskCompletedStatusKey := fmt.Sprintf(TaskCompletedStatusKey, date)
+	taskCompletedStatus, _ := s.cache.GetCacheNum(ctx, taskCompletedStatusKey)
+	if taskCompletedStatus == 1 {
+		return
+	}
+	completesInfo, err := s.TaskNoCompleteDate(date)
+	if err != nil {
+		global.GVA_LOG.Error("TaskMsgSend查询任务数据报错", zap.Error(err))
+	}
+	if len(completesInfo) == 0 {
+		global.GVA_LOG.Info("TaskMsgSend没有查询到未完成数据")
+	}
+	lastFreeMsgSendTimeKey := fmt.Sprintf(LastFreeMsgSendTimeKey, date)
+
+	ctime := time.Now().Unix()
+	lastFreeMsgSendTime, _ := s.cache.GetCacheNum(ctx, lastFreeMsgSendTimeKey)
+	if int(ctime)-lastFreeMsgSendTime < 60 {
+		global.GVA_LOG.Error("TaskMsgSend上次数据发送时间还没到5分钟", zap.Error(err))
+		return
+	}
+	var isOne = false
+	if lastFreeMsgSendTime == 0 {
+		isOne = true
+	}
+	s.TaskMsgSendFreeData(ctx, completesInfo, ctime, date, lastFreeMsgSendTimeKey, isOne)
+}
+
+func (s *SyncData) CheckTaskCompletedInfo() {
+	date := time.Now().Format("2006-01-02")
+	ctx := context.Background()
+	taskCompletedStatusKey := fmt.Sprintf(TaskCompletedStatusKey, date)
+	completesInfo, err := s.TaskNoCompleteDate(date)
+
+	if err != nil {
+		global.GVA_LOG.Error("CheckTaskCompletedInfo查询任务数据报错", zap.Error(err))
+	}
+	if len(completesInfo) == 0 {
+		global.GVA_LOG.Info("TaskMsgSend没有查询到未完成数据")
+		time.Sleep(time.Minute * 1)
+		_ = s.cache.SetCacheStr(ctx, taskCompletedStatusKey, 1)
+	}
+}

+ 16 - 12
service/typeManage/tm_responsiblePerson.go

@@ -20,7 +20,6 @@ func RandomString(n int) string {
 	return string(b)
 }
 
-
 type ResponsiblePersonService struct {
 }
 
@@ -76,7 +75,6 @@ func (r *ResponsiblePersonService) CreateResponsiblePerson(person typeManage.Res
 	return global.GVA_DB.Table("responsible_person").Omit("create_time", "update_time").Create(&person).Error
 }
 
-
 //删除负责人
 func (r *ResponsiblePersonService) DeleteResponsiblePerson(person typeManage.ResponsiblePerson) (err error) {
 	var entity typeManage.ResponsiblePerson
@@ -93,9 +91,8 @@ func (r *ResponsiblePersonService) DeleteResponsiblePersonsByIds(ids request.Ids
 	return err
 }
 
-
 //更改记录
-func (r *ResponsiblePersonService) UpdateResponsiblePerson(person typeManage.ResponsiblePerson) (err error)  {
+func (r *ResponsiblePersonService) UpdateResponsiblePerson(person typeManage.ResponsiblePerson) (err error) {
 	err = global.GVA_DB.Table("responsible_person").Where("id != ? and name = ?", person.Id, person.Name).First(&typeManage.ResponsiblePerson{}).Error
 	if !errors.Is(err, gorm.ErrRecordNotFound) {
 		return errors.New("已存在相同名字,无法更改")
@@ -103,17 +100,14 @@ func (r *ResponsiblePersonService) UpdateResponsiblePerson(person typeManage.Res
 	return global.GVA_DB.Table("responsible_person").Updates(&person).Error
 }
 
-
 //通过id查询负责人
-func (r *ResponsiblePersonService) GetResponsiblePersonById(id int) (person typeManage.ResponsiblePerson, err error)  {
+func (r *ResponsiblePersonService) GetResponsiblePersonById(id int) (person typeManage.ResponsiblePerson, err error) {
 	err = global.GVA_DB.Table("responsible_person").Where("id = ?", id).First(&person).Error
 	return
 }
 
-
-
 //条件查询负责人
-func(r *ResponsiblePersonService) GetResponsiblePerson(person typeManage.ResponsiblePerson, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
+func (r *ResponsiblePersonService) GetResponsiblePerson(person typeManage.ResponsiblePerson, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
 	//获取分页数据
 	limit := info.PageSize
 	offset := (info.Page - 1) * info.PageSize
@@ -122,16 +116,16 @@ func(r *ResponsiblePersonService) GetResponsiblePerson(person typeManage.Respons
 	var personList []typeManage.ResponsiblePerson
 	//条件查询
 	if person.Name != "" {
-		db.Where("name like ?","%"+person.Name+"%")
+		db.Where("name like ?", "%"+person.Name+"%")
 	}
 	//先过滤在排序
-	if err = db.Count(&total).Error;err != nil{
+	if err = db.Count(&total).Error; err != nil {
 		return personList, total, err
 	} else {
 		//分页
 		db.Limit(limit).Offset(offset)
 		//判断是否有排序字段
-		if order != ""{
+		if order != "" {
 			var orderStr string
 			orderMap := make(map[string]bool, 1)
 			orderMap["create_time"] = true
@@ -155,3 +149,13 @@ func(r *ResponsiblePersonService) GetResponsiblePerson(person typeManage.Respons
 	}
 	return personList, total, err
 }
+
+func (r *ResponsiblePersonService) SelectResponsiblePersonList() (list interface{}, err error) {
+	//绑定操作结构体
+	db := global.GVA_DB.Table("responsible_person").Model(&typeManage.ResponsiblePerson{})
+	db = db.Where("state = ?", 1)
+	var personList []typeManage.ResponsiblePerson
+	//条件查询
+	err = db.Find(&personList).Error
+	return personList, err
+}