package converse import ( ."dashoo.cn/api/business/converseService" "dashoo.cn/utils" "encoding/json" "fmt" "github.com/astaxie/beego" "github.com/gorilla/websocket" "log" "strconv" "time" ) type ConverseController struct { beego.Controller } func (this *ConverseController) SearchDatabase() map[string]*RequestEntity{ svc := GetConverseService(utils.DBE) tasks := svc.ScanNewTaskDetail() var reqMap = make(map[string]*RequestEntity) //依次处理每一条新任务信息 for _, value := range tasks { //如果没有任务实体, 则创建新任务实体 if _,ok := reqMap[value.Task_id]; !ok{ entity := svc.GenerateRequestEntity(value.Task_type,value.Task_id) reqMap[value.Task_id] = entity } //处理任务详细 svc.HandleTaskDetail(value.Task_type,reqMap[value.Task_id], &value) } for _,v := range reqMap{ log.Println("****************************") m,_ := json.Marshal(v) log.Println(string(m)) } return reqMap } //建立会话 func (this *ConverseController) GetConnection(c *websocket.Conn) { // 建立会话 log.Println("建立会话") svc := GetConverseService(utils.DBE) utc := time.Now().UTC().Format(time.RFC3339) req := svc.GetSessionSetupRequest(utc) msg,_ := json.Marshal(req) log.Printf("setup: %s",msg) this.SendMessage(req,c) //err := c.WriteJSON(req) //if err != nil { // log.Println("write:", err) //} } func (this *ConverseController) SendMessage(req *RequestEntity, conn *websocket.Conn) { err := conn.WriteJSON(&req) if err != nil { log.Println("write err:", err) } } //修改任务状态码 func (this *ConverseController) StatusModify(statusCode int , task_id string) error{ svc := GetConverseService(utils.DBE) //修改任务表任务状态 err := svc.TaskStatusModify(statusCode,task_id) if err != nil { return err } //修改出入库任务状态 err = svc.SampleApplyStatusModify(statusCode,task_id) if err != nil { return err } //if statusCode == SUCCESS || statusCode == REJECT { // svc.SampleApplyDetailStatusBatchModify(statusCode,task_id) //} return nil } //修改部分执行成功样本状态 func (this *ConverseController)SamplePartsStatusModify(res ResponseEntity){ svc := GetConverseService(utils.DBE) svc.SampleApplyDetailStatusPartsModify(res) } //修改全部执行成功或失败样本状态 func (this *ConverseController)SampleAllStatusModify(res ResponseEntity, statusCode int){ svc := GetConverseService(utils.DBE) if statusCode == SUCCESS { svc.ModifySampleALLSuccessStatus(res) }else if statusCode == FAILED { svc.ModifySampleALLFailedStatus(res) }else if statusCode == REJECT { err := svc.ModifySampleAllRejectStatus(res) fmt.Printf("reject handle error: ",err) } } //处理读到的信息 func (this *ConverseController) HandleMessage(n int, message []byte){ var res ResponseEntity json.Unmarshal(message,&res) //调试临时用, 把设备信息打印忽略 if res.Response != "report_data" { log.Println("res:",&res) } result := res.Result taskId := res.Data.Task_id isEnd := res.Data.Is_end taskType := res.Data.Type //response := res.Response //处理设备状态数据 /*if response == "report_data" { converseService.RecordDeviceData(res.Data.List) }*/ var err error //如果正常响应且任务执行成功则修改任务状态为成功 if result == 200 { if taskType == "end" { log.Println(">>>>>>>>>>修改成功状态>>>>>>>>>>") if isEnd { err = this.StatusModify(SUCCESS,taskId) } this.SampleAllStatusModify(res,SUCCESS) }else if taskType== "abnormal_end" { if isEnd { log.Println("----------修改失败状态----------") //保存异常信息 this.SaveExcepMsg(res, taskId) err = this.StatusModify(FAILED, taskId) } this.SamplePartsStatusModify(res) }else if taskType == "task_activate" { log.Println(">>>>>>>>>>修改激活状态>>>>>>>>>>") err = this.StatusModify(ACTIVE,taskId) }else if taskType == "accept" { log.Println(">>>>>>>>>>修改接受状态>>>>>>>>>>") err = this.StatusModify(ACCEPT,taskId) }else if taskType == "running" { log.Println(">>>>>>>>>>修改执行中状态>>>>>>>>>>") err = this.StatusModify(RUNNING,taskId) } }else if result == 300 && taskType == "reject"{ log.Println("----------修改失败状态----------") //保存异常信息 this.SaveExcepMsg(res,taskId) err = this.StatusModify(REJECT,taskId) this.SampleAllStatusModify(res,REJECT) } if err != nil { log.Println(err) } } //保存异常信息 func (this *ConverseController) SaveExcepMsg(res ResponseEntity,taskId string) { //causeByte,_ := json.Marshal(res.Data.Causes) //causeMsg := string(causeByte) causeMsg := HandleCauses(res.Data.Causes) fmt.Println("causeMsg: |",causeMsg,"|") exceptMsg := HandleExceptions(res.Data.Exceptions) //abnormalByte,_ := json.Marshal(res.Data.Abnormal_data) //abnormalMsg := string(abnormalByte) fmt.Println("exceptMsg: |",exceptMsg,"|") var totalMsg string if causeMsg != "" && exceptMsg == ""{ totalMsg = causeMsg }else if causeMsg == "" && exceptMsg != ""{ totalMsg = exceptMsg }else if causeMsg != "" && exceptMsg == "" { totalMsg = causeMsg + "\\r\\n\\r\\n" + exceptMsg } svc := GetConverseService(utils.DBE) if totalMsg != "" { svc.SaveTaskExcepMsg(totalMsg,taskId) svc.SaveSampleExcepMsg(totalMsg,taskId) } else { //任务再次执行成功时,删除已有的异常信息 svc.SaveTaskExcepMsg(" ",taskId) svc.SaveSampleExcepMsg(" ",taskId) } } //清理已完成任务信息 func (this *ConverseController) DeleteAccomplishedTask() error{ where := "statuscode = '"+ strconv.Itoa(SUCCESS) +"'" svc := GetConverseService(utils.DBE) err := svc.DeleteEntityBytbl(TABLE_TAST, where) log.Println("===============清除任务信息===============") if err != nil { log.Println(err) return err } return nil }