converse.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package converse
  2. import (
  3. ."dashoo.cn/api/business/converseService"
  4. "dashoo.cn/utils"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/astaxie/beego"
  8. "github.com/gorilla/websocket"
  9. "log"
  10. "strconv"
  11. "time"
  12. )
  13. type ConverseController struct {
  14. beego.Controller
  15. }
  16. func (this *ConverseController) SearchDatabase() map[string]*RequestEntity{
  17. svc := GetConverseService(utils.DBE)
  18. tasks := svc.ScanNewTaskDetail()
  19. var reqMap = make(map[string]*RequestEntity)
  20. //依次处理每一条新任务信息
  21. for _, value := range tasks {
  22. //如果没有任务实体, 则创建新任务实体
  23. if _,ok := reqMap[value.Task_id]; !ok{
  24. entity := svc.GenerateRequestEntity(value.Task_type,value.Task_id)
  25. reqMap[value.Task_id] = entity
  26. }
  27. //处理任务详细
  28. svc.HandleTaskDetail(value.Task_type,reqMap[value.Task_id], &value)
  29. }
  30. for _,v := range reqMap{
  31. log.Println("****************************")
  32. m,_ := json.Marshal(v)
  33. log.Println(string(m))
  34. }
  35. return reqMap
  36. }
  37. //建立会话
  38. func (this *ConverseController) GetConnection(c *websocket.Conn) {
  39. // 建立会话
  40. log.Println("建立会话")
  41. svc := GetConverseService(utils.DBE)
  42. utc := time.Now().UTC().Format(time.RFC3339)
  43. req := svc.GetSessionSetupRequest(utc)
  44. msg,_ := json.Marshal(req)
  45. log.Printf("setup: %s",msg)
  46. this.SendMessage(req,c)
  47. //err := c.WriteJSON(req)
  48. //if err != nil {
  49. // log.Println("write:", err)
  50. //}
  51. }
  52. func (this *ConverseController) SendMessage(req *RequestEntity, conn *websocket.Conn) {
  53. err := conn.WriteJSON(&req)
  54. if err != nil {
  55. log.Println("write err:", err)
  56. }
  57. }
  58. //修改任务状态码
  59. func (this *ConverseController) StatusModify(statusCode int , task_id string) error{
  60. svc := GetConverseService(utils.DBE)
  61. //修改任务表任务状态
  62. err := svc.TaskStatusModify(statusCode,task_id)
  63. if err != nil {
  64. return err
  65. }
  66. //修改出入库任务状态
  67. err = svc.SampleApplyStatusModify(statusCode,task_id)
  68. if err != nil {
  69. return err
  70. }
  71. //if statusCode == SUCCESS || statusCode == REJECT {
  72. // svc.SampleApplyDetailStatusBatchModify(statusCode,task_id)
  73. //}
  74. return nil
  75. }
  76. //修改部分执行成功样本状态
  77. func (this *ConverseController)SamplePartsStatusModify(res ResponseEntity){
  78. svc := GetConverseService(utils.DBE)
  79. svc.SampleApplyDetailStatusPartsModify(res)
  80. }
  81. //修改全部执行成功或失败样本状态
  82. func (this *ConverseController)SampleAllStatusModify(res ResponseEntity, statusCode int){
  83. svc := GetConverseService(utils.DBE)
  84. if statusCode == SUCCESS {
  85. svc.ModifySampleALLSuccessStatus(res)
  86. }else if statusCode == FAILED {
  87. svc.ModifySampleALLFailedStatus(res)
  88. }else if statusCode == REJECT {
  89. err := svc.ModifySampleAllRejectStatus(res)
  90. fmt.Printf("reject handle error: ",err)
  91. }
  92. }
  93. //处理读到的信息
  94. func (this *ConverseController) HandleMessage(n int, message []byte){
  95. var res ResponseEntity
  96. json.Unmarshal(message,&res)
  97. //调试临时用, 把设备信息打印忽略
  98. if res.Response != "report_data" {
  99. log.Println("res:",&res)
  100. }
  101. result := res.Result
  102. taskId := res.Data.Task_id
  103. isEnd := res.Data.Is_end
  104. taskType := res.Data.Type
  105. //response := res.Response
  106. //处理设备状态数据
  107. /*if response == "report_data" {
  108. converseService.RecordDeviceData(res.Data.List)
  109. }*/
  110. var err error
  111. //如果正常响应且任务执行成功则修改任务状态为成功
  112. if result == 200 {
  113. if taskType == "end" {
  114. log.Println(">>>>>>>>>>修改成功状态>>>>>>>>>>")
  115. if isEnd {
  116. err = this.StatusModify(SUCCESS,taskId)
  117. }
  118. this.SampleAllStatusModify(res,SUCCESS)
  119. }else if taskType== "abnormal_end" {
  120. if isEnd {
  121. log.Println("----------修改失败状态----------")
  122. //保存异常信息
  123. this.SaveExcepMsg(res, taskId)
  124. err = this.StatusModify(FAILED, taskId)
  125. }
  126. this.SamplePartsStatusModify(res)
  127. }else if taskType == "task_activate" {
  128. log.Println(">>>>>>>>>>修改激活状态>>>>>>>>>>")
  129. err = this.StatusModify(ACTIVE,taskId)
  130. }else if taskType == "accept" {
  131. log.Println(">>>>>>>>>>修改接受状态>>>>>>>>>>")
  132. err = this.StatusModify(ACCEPT,taskId)
  133. }else if taskType == "running" {
  134. log.Println(">>>>>>>>>>修改执行中状态>>>>>>>>>>")
  135. err = this.StatusModify(RUNNING,taskId)
  136. }
  137. }else if result == 300 && taskType == "reject"{
  138. log.Println("----------修改失败状态----------")
  139. //保存异常信息
  140. this.SaveExcepMsg(res,taskId)
  141. err = this.StatusModify(REJECT,taskId)
  142. this.SampleAllStatusModify(res,REJECT)
  143. }
  144. if err != nil {
  145. log.Println(err)
  146. }
  147. }
  148. //保存异常信息
  149. func (this *ConverseController) SaveExcepMsg(res ResponseEntity,taskId string) {
  150. //causeByte,_ := json.Marshal(res.Data.Causes)
  151. //causeMsg := string(causeByte)
  152. causeMsg := HandleCauses(res.Data.Causes)
  153. fmt.Println("causeMsg: |",causeMsg,"|")
  154. exceptMsg := HandleExceptions(res.Data.Exceptions)
  155. //abnormalByte,_ := json.Marshal(res.Data.Abnormal_data)
  156. //abnormalMsg := string(abnormalByte)
  157. fmt.Println("exceptMsg: |",exceptMsg,"|")
  158. var totalMsg string
  159. if causeMsg != "" && exceptMsg == ""{
  160. totalMsg = causeMsg
  161. }else if causeMsg == "" && exceptMsg != ""{
  162. totalMsg = exceptMsg
  163. }else if causeMsg != "" && exceptMsg == "" {
  164. totalMsg = causeMsg + "\\r\\n\\r\\n" + exceptMsg
  165. }
  166. svc := GetConverseService(utils.DBE)
  167. if totalMsg != "" {
  168. svc.SaveTaskExcepMsg(totalMsg,taskId)
  169. svc.SaveSampleExcepMsg(totalMsg,taskId)
  170. } else {
  171. //任务再次执行成功时,删除已有的异常信息
  172. svc.SaveTaskExcepMsg(" ",taskId)
  173. svc.SaveSampleExcepMsg(" ",taskId)
  174. }
  175. }
  176. //清理已完成任务信息
  177. func (this *ConverseController) DeleteAccomplishedTask() error{
  178. where := "statuscode = '"+ strconv.Itoa(SUCCESS) +"'"
  179. svc := GetConverseService(utils.DBE)
  180. err := svc.DeleteEntityBytbl(TABLE_TAST, where)
  181. log.Println("===============清除任务信息===============")
  182. if err != nil {
  183. log.Println(err)
  184. return err
  185. }
  186. return nil
  187. }