converse.go 6.6 KB

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