package converse import ( "encoding/json" "log" "strconv" "strings" "time" // "github.com/astaxie/beego" "github.com/gorilla/websocket" . "dashoo.cn/genepoint_srv/business/converseService" "dashoo.cn/utils" ) 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 { var time int64 = time.Now().Unix() taskid :=value.Task_id +"_"+ strconv.FormatInt(time,10) log.Println("taskid:",taskid) //如果没有任务实体, 则创建新任务实体 if _, ok := reqMap[value.Task_id]; !ok { entity := svc.GenerateRequestEntity(value.Task_type, /*value.Task_id*/taskid) 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("session_setup: %s", msg) this.SendMessage(req, c) } // 发送消息给接口服务 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 } // 2020/12/18 卢传敏新增,修复多条报文返回的问题,同时处理 任务中样本的状态和任务状态不一致的问题 // 根据任务报文返回的执行状态 修改出入库单中的 样本的任务状态 err = svc.SampleApplyDetailStatusModify(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 { // svc.ModifySampleAllRejectStatus(res) // } //} // 处理基点接口返回的信息 func (this *ConverseController) HandleMessage(n int, message []byte) { var res ResponseEntity json.Unmarshal(message, &res) resp := res.Response result := res.Result taskId := strings.Split(res.Data.Task_id,"_")[0] isEnd := res.Data.Is_end taskType := res.Data.Type //调试临时用, 把设备信息打印忽略 //if resp != "report_data" { // log.Println("res:",&res) //} //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) } svc := GetConverseService(utils.DBE) svc.ModifySampleStatusByApplyMainInfo(taskId, resp, res) //this.SampleAllStatusModify(res,SUCCESS) } else if taskType == "abnormal_end" { if isEnd { log.Println("----------修改失败状态----------") //保存异常信息 this.SaveExcepMsg(res, taskId) err = this.StatusModify(FAILED, taskId) } svc := GetConverseService(utils.DBE) svc.ModifySampleStatusByApplyMainInfo(taskId, resp, res) //this.SamplePartsStatusModify(res) } else if taskType == "task_activate" { log.Println(">>>>>>>>>>修改激活状态>>>>>>>>>>") if res.Data.Status == 3 { err = this.StatusModify(REJECT, taskId) } else { 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) svc := GetConverseService(utils.DBE) svc.ModifySampleAllRejectStatus(res) } if err != nil { log.Println(err) } } //保存异常信息 func (this *ConverseController) SaveExcepMsg(res ResponseEntity, taskId string) { svc := GetConverseService(utils.DBE) //causeByte,_ := json.Marshal(res.Data.Causes) //causeMsg := string(causeByte) causeMsg := svc.HandleCauses(res.Data.Causes) exceptMsg := svc.HandleExceptions(res.Data.Exceptions) //abnormalByte,_ := json.Marshal(res.Data.Abnormal_data) //abnormalMsg := string(abnormalByte) 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 } 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 }