| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- 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
- }
|