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