| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831 |
- package converseService
- import (
- "crypto/md5"
- "dashoo.cn/utils"
- . "dashoo.cn/utils/db"
- "fmt"
- "github.com/go-xorm/xorm"
- "log"
- "strconv"
- "strings"
- "time"
- )
- const CU = 1
- const EE = 1
- const POS = 1
- const LTU = 1
- const GROUP = 1
- const TABLE_TAST = "sample_storage_task"
- const TABLE_SAMPLE_APPLY = "bank_apply_main"
- const TABLE_DETAIL = "bank_apply_detail"
- const TABLE_SHELF = "bank_shelf"
- const TABLE_BOX = "bank_box"
- const TABLE_EQUIPMENT = "bank_equipment"
- const TABLE_DEVICE_DATA = "GenePoint_Device_Report_Data"
- const TABLE_SAMPLE = "bank_sample"
- const TABLE_APPLY_DETAIL = "bank_apply_detail"
- const STATUS_LOCKED = "1"
- const STATUS_UNLOCK = "0"
- const RK_PASS = "2"
- const CK_PASS_ONHOLD = "3"
- const CK_PASS_DONE = "4"
- type ConverseService struct {
- ServiceBase
- }
- type ConverseSessionService struct {
- SessionBase
- }
- func GetConverseService(xormEngine *xorm.Engine) *ConverseService{
- s := new(ConverseService)
- s.DBE = xormEngine
- return s
- }
- func GetConverseSessionService(session *xorm.Session) *ConverseSessionService{
- s := new(ConverseSessionService)
- s.Session = session
- return s
- }
- //建立会话
- func (this *ConverseService) GetSessionSetupRequest(utc string) *RequestEntity{
- var request = "session_setup"
- var reqData RequestData
- reqData.Key = this.GetKeyBaseOnTime(utc)
- reqData.Client = "lims"
- var entity = this.GetRequestEntity(request,utc,reqData)
- return entity
- }
- //生成请求报文
- func (this *ConverseService) GetRequestEntity(request string, utc string, data RequestData) *RequestEntity{
- var entity RequestEntity
- entity.Request = request
- entity.Time = utc
- entity.Data = data
- return &entity
- }
- //获取key
- func (this *ConverseService) GetKeyBaseOnTime(utc string) string{
- privateKey := "ZGlzdHJp23Yn4V06b3I6OGQ5NjllZWY2ZWNhZDNjMjlhM2E2MjkyODBlNjg2Y2YwYzNmNWQ1YTg2YWZmM2Nh3MTIwMjB3454jOTIzYWRjNmM5M4g"
- unencoded := privateKey + utc
- byte := md5.Sum([]byte(unencoded))
- encode := fmt.Sprintf("%x", byte)
- resultKey := strings.ToUpper(encode)
- return resultKey
- }
- //查询库存冻存盒信息
- func (this *ConverseService) CheckStockRackInfo(cu int, rack_id string, utc string) *RequestEntity{
- var request = "stock_rack"
- var data RequestData
- data.Rack_id = rack_id
- data.Cu = cu
- entity := this.GetRequestEntity(request,utc,data)
- return entity
- }
- //查询库存冻存管信息
- func (this *ConverseService) CheckStockTubeInfo(cu int, rack_id, tube_id, utc string) *RequestEntity{
- var request = "stock_rack_tube"
- var data RequestData
- data.Rack_id = rack_id
- data.Tube_id = tube_id
- data.Cu = cu
- entity := this.GetRequestEntity(request,utc,data)
- return entity
- }
- //任务撤销
- func (this *ConverseService) CancelTast(utc string, task_id string) *RequestEntity{
- var request = "task_change"
- var data RequestData
- data.Task_id = task_id
- data.Status = 1
- entity := this.GetRequestEntity(request,utc,data)
- return entity
- }
- //扫描新任务
- func (this *ConverseService) ScanNewTaskDetail() []Sample_Storage_Task{
- var tasks []Sample_Storage_Task
- where := "statuscode = 0"
- this.GetEntitysByWhere(TABLE_TAST, where, &tasks)
- return tasks
- }
- //新任务数量
- func (this *ConverseService) GetNewTaskBasic () []Sample_Storage_Task{
- //var count64 int64
- var tasks []Sample_Storage_Task
- //sql := "SELECT COUNT(DISTINCT(task_id)) FROM sample_storage_task WHERE status = 0"
- sql := "SELECT task_id, task_type, statuscode FROM " + TABLE_TAST + " GROUP BY task_id, task_type HAVING statuscode = 0"
- err := this.DBE.SQL(sql).Find(&tasks)
- if err != nil {
- log.Println(err)
- }
- //if len(resultsSlice) > 0 {
- // results := resultsSlice[0]
- // for _, value := range results {
- // count64, _ = strconv.ParseInt(string(value), 10, 64)
- // //LogError(err)
- // break
- // }
- //}
- //intSTr := strconv.FormatInt(count64,10)
- //count,_ := strconv.Atoi(intSTr)
- return tasks
- }
- ////冻存管位置格式转换
- //func TransPositionToNo(boxType int, position string) int{
- // co := strings.Split(position,";")
- // x, _ := strconv.Atoi(co[0])
- // y, _ := strconv.Atoi(co[1])
- // var no int
- // switch boxType {
- // case 101,102,103:
- // no = (y-1)*14+x
- // break
- // case 0 :
- // no = (y-1)*10+x
- // }
- // return no
- //}
- //根据任务类型获取requestName
- func (this *ConverseService)GenerateRequestEntity(taskType int, task_id string) *RequestEntity{
- var requestName string
- switch taskType {
- case 1:
- requestName = "rack_storing"
- break
- case 2:
- requestName = "rack_retrieving"
- break
- case 3:
- requestName = "tube_storing"
- break
- case 4:
- requestName = "tube_retrieving"
- break
- case 5:
- requestName = "stock_rack"
- break
- case 6:
- requestName = "stock_rack_tube"
- break
- case 7:
- requestName = "task_change"
- }
- utc := time.Now().UTC().Format(time.RFC3339)
- var data RequestData
- if requestName != "stock_rack" && requestName != "stock_rack_tube" {
- data.Task_id = task_id
- data.Type = "begin"
- }
- entity := this.GetRequestEntity(requestName,utc,data)
- return entity
- }
- func (this *ConverseService) HandleTaskDetail(taskType int , entity *RequestEntity, detail *Sample_Storage_Task){
- switch taskType {
- case 1:
- handleRackStore(entity, detail)
- break
- case 2:
- handleRackRetrieve(entity,detail)
- break
- case 3:
- handleTubeStore(entity,detail)
- break
- case 4:
- handleTubeRetrieve(entity,detail)
- break
- case 5:
- handleQueryRack(entity,detail)
- break
- case 6:
- handleQueryTube(entity,detail)
- break
- case 7:
- handleTaskChange(entity,detail)
- }
- }
- //处理冻存盒入库任务信息
- func handleRackStore (entity *RequestEntity, detail *Sample_Storage_Task) {
- var ones = make([]Single,0)
- var exist bool
- if entity.Data.Task_data != nil {
- ones = entity.Data.Task_data.([]Single)
- for idx,value := range ones{
- if value.Rack_id == detail.BoxBarcode{
- var tube Tube
- tube.Id = detail.BarCode
- ones[idx].Tubes = append(ones[idx].Tubes,tube)
- exist = true
- }
- }
- }
- if !exist {
- var one Single
- one.Rack = detail.BoxType
- one.Tube = detail.TubeType
- one.Rack_id = detail.BoxBarcode
- //one.Source.Cu = CU
- one.Source.Cu = detail.Cu
- one.Source.Ee = EE
- one.Source.Pos = POS
- //one.Target.Cu = CU
- one.Target.Cu = detail.Cu
- one.Target.Unit = detail.Unit
- one.Target.Pos = detail.Pos
- one.Target.Ltu = detail.Ltu
- //one.Target.Group = 1
- one.Target.Group = detail.Group
- if detail.BarCode != "" {
- var tube Tube
- tube.Id = detail.BarCode
- one.Tubes = append(one.Tubes, tube)
- }else {
- one.Tubes = make([]Tube,0) //tubes不能为空, 否则Genepoint系统报错
- }
- ones = append(ones, one)
- }
- entity.Data.Task_data = ones
- }
- //处理冻存盒出库任务信息
- func handleRackRetrieve(entity *RequestEntity, detail *Sample_Storage_Task){
- var ones []Single
- var one Single
- one.Tubes = make([]Tube,0) //tubes不能为空, 否则Genepoint系统报错
- if entity.Data.Task_data != nil {
- // ones = make([]Single, 0)
- //}else{
- ones = entity.Data.Task_data.([]Single)
- }
- one.Rack_id = detail.BoxBarcode
- one.Target.Cu = detail.Cu //todo
- one.Target.Ee = EE
- one.Target.Pos = POS
- ones = append(ones, one)
- entity.Data.Task_data = ones
- }
- //处理冻存管入库任务信息
- func handleTubeStore (entity *RequestEntity, detail *Sample_Storage_Task){
- var ones []Single
- var exist bool
- if entity.Data.Operation_mode == "" {
- entity.Data.Operation_mode = detail.OperaMode
- }
- if entity.Data.Task_data != nil {
- ones = entity.Data.Task_data.([]Single)
- for idx,value := range ones {
- if value.Target.Rack_id == detail.BoxBarcode {
- var tube Tube
- if detail.OperaMode != "auto" {
- //tube.T_no = TransPositionToNo(detail.BoxType,detail.Position)
- //实际采用,暂时注释掉
- tube.T_no = detail.No
- }
- tube.Id = detail.BarCode
- ones[idx].Tubes = append(ones[idx].Tubes,tube)
- //value.Tubes = append(value.Tubes,tube)
- exist = true
- goto label
- }
- }
- }
- if !exist {
- var one Single
- //one.Rack = 101 //测试临时使用
- //one.Tube = 201 //测试临时使用
- one.Rack = detail.BoxType //样本库系统,没有添加该字段信息逻辑,临时注释
- one.Tube = detail.TubeType //样本库系统,没有添加该字段信息逻辑,临时注释
- //one.Source.Cu = CU //测试临时使用
- one.Source.Cu = detail.Cu
- one.Source.Ee = EE
- one.Source.Pos = POS
- var tube Tube
- if detail.OperaMode != "auto" {
- one.Target.Cu = detail.Cu
- one.Target.Ltu = detail.Ltu
- one.Target.Group = detail.Group
- one.Target.Unit = detail.Unit
- one.Target.Pos = detail.Pos
- one.Target.Rack_id = detail.BoxBarcode
- //tube.T_no = TransPositionToNo(detail.BoxType,detail.Position)
- tube.T_no = detail.No //实际采用,暂时注释掉
- }
- tube.Id = detail.BarCode
- one.Tubes = append(one.Tubes, tube)
- ones = append(ones, one)
- }
- label:
- entity.Data.Task_data = ones
- }
- //处理冻存管出库任务信息
- func handleTubeRetrieve(entity *RequestEntity, detail *Sample_Storage_Task){
- var one Single
- var exist bool
- if entity.Data.Task_data != nil {
- one = entity.Data.Task_data.(Single)
- exist = true
- }
- if !exist {
- //one.Target.Cu = CU
- one.Target.Cu = detail.Cu
- one.Target.Ee = EE
- one.Target.Pos =POS
- }
- var tube Tube
- tube.Id = detail.BarCode
- one.Tubes = append(one.Tubes,tube)
- entity.Data.Task_data = one
- }
- //任务撤销
- func handleTaskChange(entity *RequestEntity, detail *Sample_Storage_Task){
- entity.Data.Status = detail.Status
- }
- //查询冻存盒库存信息
- func handleQueryRack(entity *RequestEntity, detail *Sample_Storage_Task){
- entity.Data.Cu = detail.Cu
- entity.Data.Rack_id = detail.BoxBarcode
- }
- //查询冻存管库存信息
- func handleQueryTube(entity *RequestEntity, detail *Sample_Storage_Task){
- entity.Data.Rack_id = detail.BoxBarcode
- entity.Data.Tube_id = detail.BarCode
- }
- //修改任务表状态码
- func (this *ConverseService) TaskStatusModify(statusCode int, task_id string) error{
- sql := "UPDATE " + TABLE_TAST + " SET statuscode = '" + strconv.Itoa(statusCode) + "' WHERE task_id = '" + task_id + "'"
- _,err := this.DBE.Exec(sql)
- return err
- }
- // 修改出入库单状态
- func (this *ConverseService) SampleApplyStatusModify(statusCode int, entryNo string) error{
- sql := "UPDATE " + TABLE_SAMPLE_APPLY + " SET taskstatus = '" + strconv.Itoa(statusCode) + "' WHERE entryno = '" + entryNo + "'"
- _,err := this.DBE.Exec(sql)
- return err
- }
- ////批量更新全部成功或失败的任务样本状态
- //func (this *ConverseService)SampleApplyDetailStatusBatchModify(statusCode int , entryNo string) error {
- //
- // //获取出入库单Id
- // getId := "SELECT id FROM " + TABLE_SAMPLE_APPLY + " WHERE entryno = '" + entryNo + "'"
- // var idList []Id
- // err := this.DBE.SQL(getId).Find(&idList)
- // //批量更新全部成功或失败的任务样本状态
- // sql:= "UPDATE " + TABLE_APPLY_DETAIL + " SET taskstatus = '" + strconv.Itoa(statusCode) + "' WHERE parentid = '" + strconv.Itoa(idList[0].Id) + "'"
- // _,err = this.DBE.Exec(sql)
- //
- // return err
- //}
- //修改全部样本执行成功状态
- //func (this *ConverseService)ModifySampleALLSuccessStatus(res ResponseEntity){
- // tubeIds := handleSingleList(res.Data.Actual_data)
- // this.handleSampleSuccess(tubeIds, res.Response)
- //}
- //修改全部样本执行失败状态
- //func (this *ConverseService)ModifySampleALLFailedStatus(res ResponseEntity){
- // tubeIds := handleSingleList(res.Data.Actual_data)
- // this.handleSampleFailed(tubeIds, res.Response)
- //}
- //任务执行驳回, 修改全部样本失败状态
- func (this *ConverseService)ModifySampleAllRejectStatus(res ResponseEntity) error{
- //获取出入库单Id
- getId := "SELECT id FROM " + TABLE_SAMPLE_APPLY + " WHERE entryno = '" + res.Data.Task_id + "'"
- var idList []Id
- err := this.DBE.SQL(getId).Find(&idList)
- //批量更新全部成功或失败的任务样本状态
- sql:= "UPDATE " + TABLE_APPLY_DETAIL + " SET taskstatus = '" + strconv.Itoa(REJECT) + "' WHERE parentid = '" + strconv.Itoa(idList[0].Id) + "'"
- _,err = this.DBE.Exec(sql)
- return err
- }
- //修改部分样本执行成功部分样本执行失败状态
- //func (this *ConverseService)SampleApplyDetailStatusPartsModify(res ResponseEntity){
- //
- // tubeIds := handleSingleList(res.Data.Actual_data)
- // this.handleSampleSuccess(tubeIds, res.Response)
- // tubeIds = handleSingleList(res.Data.Abnormal_data.Tubes)
- // this.handleSampleFailed(tubeIds, res.Response)
- //
- //}
- //处理single切片
- //func handleSingleList(singles []Single) string{
- // var tubeIds []string
- // for _, data := range singles {
- // for _, tube := range data.Tubes {
- // if tube.Oper == true {
- // tubeIds = append(tubeIds,tube.Id)
- // }
- // }
- // }
- // //id拼接成","隔开的字符串
- // idStr := "'" + strings.Join(tubeIds,"','") + "'"
- // return idStr
- //}
- //修改样本失败状态
- func (this *ConverseService)handleSampleFailed(idsStr string, response string, parentId int) {
- updatesql := "UPDATE " + TABLE_APPLY_DETAIL + " SET taskstatus = '" + strconv.Itoa(FAILED) + "' WHERE barcode IN (" + idsStr + ")" + " AND parentid = '" + strconv.Itoa(parentId) + "'"
- this.DBE.Exec(updatesql)
- }
- //处理样本执行成功状态
- func (this *ConverseService)handleSampleSuccess(idsStr string, response string, applyMainId int ) {
- if strings.Contains(response,"_storing") {
- this.sampleRKSuccessDBModify(idsStr, applyMainId)
- }else if strings.Contains(response,"_retrieving") {
- this.sampleCKSuccessDBModify(idsStr, applyMainId)
- }
- }
- //入库成功, 修改样本数据库状态信息
- func (this *ConverseService)sampleRKSuccessDBModify(idsStr string, parentId int) error{
- updatesql := "UPDATE " + TABLE_APPLY_DETAIL + " SET IsLocked = '" + STATUS_UNLOCK + "', taskstatus = '" + strconv.Itoa(SUCCESS) + "' WHERE barcode IN (" + idsStr + ")" + " AND parentid = '" + strconv.Itoa(parentId) + "'"
- updatesql2 := "UPDATE " + TABLE_SAMPLE + " SET IsLocked = '" + STATUS_UNLOCK + "', IState = '" + RK_PASS + "' WHERE barcode IN (" + idsStr + ")"
- _,err := this.DBE.Exec(updatesql)
- _,err = this.DBE.Exec(updatesql2)
- return err
- }
- //出库成功, 修改样本数据库状态信息
- func (this *ConverseService) sampleCKSuccessDBModify (idsStr string, parentId int) error{
- var list []Bank_Apply_Detail
- var onHold []string
- var done []string
- err := this.DBE.Where("barcode IN (" + idsStr + ")").Find(&list)
- for _, one := range list {
- if strconv.Itoa(one.RecoveryId) == CK_PASS_ONHOLD {
- onHold = append(onHold,one.BarCode)
- } else if strconv.Itoa(one.RecoveryId) == CK_PASS_DONE {
- done = append(done,one.BarCode)
- }
- }
- sql := "UPDATE " + TABLE_SAMPLE + " SET istate = '" + CK_PASS_ONHOLD + "', islocked = '" + STATUS_UNLOCK + "' WHERE barcode IN ('" + strings.Join(onHold,"','") + "')"
- sql2 := "UPDATE " + TABLE_SAMPLE + " SET istate = '" + CK_PASS_DONE + "', islocked = '" + STATUS_UNLOCK + "' WHERE barcode IN ('" + strings.Join(done,"','") + "')"
- sql3 := "UPDATE " + TABLE_APPLY_DETAIL + " SET IsLocked = '" + STATUS_UNLOCK + "', taskstatus = '" + strconv.Itoa(SUCCESS) + "' WHERE barcode IN (" + idsStr + ")" + " AND parentid = '" + strconv.Itoa(parentId) + "'"
- _,err = this.DBE.Exec(sql)
- _,err = this.DBE.Exec(sql2)
- _,err = this.DBE.Exec(sql3)
- return err
- }
- //获取出入库单信息
- func (this *ConverseService) GetApplyMain(entryNo string) Bank_Apply_Main{
- where := "entryNo = '" + entryNo + "'"
- var entity Bank_Apply_Main
- this.GetEntity(&entity, where)
- return entity
- }
- //根据出入库单信息判断任务信息, 并修改样本状态
- func (this *ConverseService) ModifySampleStatusByApplyMainInfo(entryNo string, resp string, entity ResponseEntity){
- applyMain := this.GetApplyMain(entryNo)
- var operaIds,abnormalIds,taskType string
- if applyMain.ApplyType == TASK_TUBE_STORING && strings.Contains(resp,"_storing") {
- taskType = "tube_storing"
- operaIds,abnormalIds = this.getOperaSampleIdsStr(applyMain.ApplyType,applyMain.Id,resp,entity)
- }else if applyMain.ApplyType == TASK_TUBE_RETREIVING && strings.Contains(resp,"_storing") {
- taskType = "tube_retrieving"
- //todo
- operaIds,abnormalIds = this.getOperaSampleIdsStr(applyMain.ApplyType,applyMain.Id,resp,entity)
- }else {
- return
- }
- this.handleSampleSuccess(operaIds,taskType,applyMain.Id)
- if entity.Data.Type == "abnormal_end" {
- this.handleSampleFailed(abnormalIds,taskType, applyMain.Id)
- }
- }
- //获取当前操作样本的id, 正常和异常的
- func (this *ConverseService) getOperaSampleIdsStr(applyType, parentId int, resp string, entity ResponseEntity) (actualIds string, abnormalIds string){
- //获取出入库单中所有样本信息
- var list []Bank_Apply_Detail
- where := " parentid = '" + strconv.Itoa(parentId) + "'"
- this.GetEntitysByWhere(TABLE_DETAIL, where,&list)
- var sampleIds []string
- for _, detail := range list {
- sampleIds = append(sampleIds, detail.BarCode)
- }
- //获取反馈报文中的所有成功样本Id列表
- var actualTubeIds []string
- for _, single := range entity.Data.Actual_data {
- for _, tube := range single.Tubes {
- actualTubeIds = append(actualTubeIds,tube.Id)
- }
- }
- //获取反馈报文中的所有异常样本Id列表
- var abnormalTubeIds []string
- for _, single := range entity.Data.Abnormal_data.Tubes {
- abnormalTubeIds = append(abnormalTubeIds,single.Id)
- }
- var operaTubeIds []string
- var failTubeIds []string
- if applyType == TASK_TUBE_STORING {
- for _, sampleId := range sampleIds {
- //操作成功样本Id
- for _, tubeId := range actualTubeIds {
- if sampleId ==tubeId {
- operaTubeIds = append(operaTubeIds, tubeId)
- break
- }
- }
- //操作失败样本Id
- for _,tubeId := range abnormalTubeIds {
- if sampleId == tubeId{
- failTubeIds = append(failTubeIds, tubeId)
- break
- }
- }
- }
- }
- if applyType == TASK_TUBE_RETREIVING {
- for _, sampleId := range sampleIds {
- //操作成功样本Id
- for index, tubeId := range actualTubeIds {
- if index == len(actualTubeIds)-1 && tubeId != sampleId {
- operaTubeIds = append(operaTubeIds, sampleId)
- }
- }
- //操作失败样本Id
- for _,tubeId := range abnormalTubeIds {
- if sampleId == tubeId{
- failTubeIds = append(failTubeIds, tubeId)
- break
- }
- }
- }
- }
- actualIds = "'" + strings.Join(operaTubeIds,"','") + "'"
- abnormalIds = "'" + strings.Join(failTubeIds,",") + "'"
- return
- }
- ////样本状态修改
- //func (this *ConverseService)SampleStatusModify(statusCode int , res ResponseEntity){
- // if statusCode == SUCCESS {
- // this.SampleApplyDetailStatusBatchModify(statusCode, res.Data.Task_id)
- // }else if statusCode == REJECT {
- // this.SampleApplyDetailStatusBatchModify(FAILED, res.Data.Task_id)
- // }else if statusCode == FAILED {
- // this.SampleApplyDetailStatusPartsModify(res)
- // }
- //}
- //获取任务原始信息
- //func (this *ConverseService) GetBasicTaskInfo(task_id string) ([]Sample_Storage_Task, error){
- // sql := `SELECT
- // d.EquipmentId,
- // e.RowNum e_row,
- // e.ColumnNum e_col,
- // d.ShelfId,
- // s.XStation s_x,
- // s.YStation s_y,
- // s.RowNum s_row,
- // s.ColumnNum s_col,
- // d.BoxId,
- // b.XStation b_x,
- // b.YStation b_y,
- // b.RowNum b_row,
- // b.ColumnNum b_col,
- // d.Position,
- // d.BarCode,
- // a.EntryNo task_id
- // FROM
- // ` + TABLE_DETAIL + ` d
- // JOIN ` + TABLE_EQUIPMENT + ` e ON d.EquipmentId = e.Id
- // JOIN ` + TABLE_SHELF + ` s ON d.ShelfId = s.Id
- // JOIN ` + TABLE_BOX + ` b ON d.BoxId = b.Id
- // JOIN ` + TABLE_SAMPLE_APPLY + ` a ON d.ParentId = a.Id
- // WHERE
- // a.EntryNo = '` + task_id + `' AND a.ApplyStatus = '2'`
- // var list []Sample_Storage_Task
- // err := this.DBE.SQL(sql).Find(&list)
- // if err != nil {
- // return nil,err
- // }
- // return list,err
- //}
- //原始位置信息转换 样本库调用
- //func (this *ConverseService) TransferPosition(one *Sample_Storage_Task) {
- // one.Unit = (one.S_Y-1)*one.E_Col + one.S_X
- // one.Pos = (one.B_Y-1)*one.S_Col + one.B_X
- // if one.Position != "" {
- // coord := strings.Split(one.Position, ";")
- // x, _ := strconv.Atoi(coord[0])
- // y, _ := strconv.Atoi(coord[1])
- // one.No = (y-1)*one.B_Col + x
- // }
- // one.Ltu = LTU
- // //one.Group = GROUP
- //}
- //处理任务原始信息 样本库调用
- //func (this *ConverseService) HandleTaskInfo(list []Sample_Storage_Task, applyType string) *[]Sample_Storage_Task{
- // var resultList []Sample_Storage_Task
- // for _, value := range list {
- // this.AddTaskType(&value, applyType)
- // this.TransferPosition(&value)
- // resultList = append(resultList, value)
- // }
- // return &resultList
- //}
- //添加任务类型
- //func (this *ConverseService) AddTaskType(one *Sample_Storage_Task, applyType string){
- // if applyType == "1" {
- // one.Task_type = 3 //冻存管入库
- // one.OperaMode = "manua"
- // }else if applyType == "2" {
- // one.Task_type = 4 //冻存管出库
- // }
- //}
- //保存异常信息
- func (this *ConverseService) SaveTaskExcepMsg(msg,taskId string) error{
- sql := "UPDATE " + TABLE_TAST+ " SET exception = '" + msg + "' WHERE task_id = '" + taskId + "'"
- _,err := this.DBE.Exec(sql)
- return err
- }
- //保存异常信息
- func (this *ConverseService) SaveSampleExcepMsg(msg,entryNo string) error{
- sql := "UPDATE " + TABLE_SAMPLE_APPLY+ " SET exception = '" + msg + "' WHERE entryno = '" + entryNo + "'"
- _,err := this.DBE.Exec(sql)
- return err
- }
- //根据条件删除数据,不记录日志
- func (this *ConverseService) DeleteEntityBytbl(tablename string, where string) (err error) {
- if where == "" {
- where = "1=2"
- }
- sql := `delete from ` + tablename + ` where ` + where
- _, err = this.DBE.Exec(sql)
- return
- }
- //样本库分表
- func (s *ConverseSessionService) InsertEntityBytbl(tablename string, entity interface{}) (affected int64, err error) {
- affected, err = s.Session.Table(tablename).Insert(entity)
- LogError(err)
- return
- }
- //获取设备名称
- func (s *ConverseService)GetEquipmentName(cu int) string {
- sql := "SELECT name from " + TABLE_EQUIPMENT + " where cu = '" + strconv.Itoa(cu) + "'"
- var entity Equipment
- s.DBE.SQL(sql).Get(&entity)
- return entity.Name
- }
- //异常信息转换
- func (s *ConverseService)HandleCauses (causes []Cause) string {
- var exceptInfo string
- for _,cause := range causes {
- eName := s.GetEquipmentName(cause.Cu)
- exceptInfo += s.GetReason(cause, eName)
- }
- return exceptInfo
- }
- //根据异常码获取异常原因
- func (s *ConverseService)GetReason(cause Cause, equipmentName string) string{
- var reasonStr string
- switch cause.Reason {
- case 1:
- reasonStr = "存储位不够;"
- break
- case 2:
- reasonStr = "单次任务涉及的冻存盒数量超出限制;"
- break
- case 3:
- reasonStr = "指定的位置已经被占用或者位置不正确,无法存入;"
- break
- case 4:
- reasonStr = "没有权限对指定位置进行操作;"
- break
- case 5:
- reasonStr = "指定的编号不正确,无法完成操作;"
- break
- case 6:
- reasonStr = "报文数据不完整,缺少冻存管数据;"
- break
- case 7:
- reasonStr = "相同的冻存盒位置只允许有一组报文数据;"
- break
- case 8:
- reasonStr = "半自动设备在不配置转运机器人的情况下,一个存管任务只允许操作一台设备;"
- }
- if cause.Cu != 0 {
- //reasonStr = strconv.Itoa(cause.Cu)+"号设备, " + equipmentName + "," + reasonStr
- reasonStr = "设备: " + equipmentName + "," + reasonStr
- }
- return reasonStr
- }
- //处理Exceptions异常信息
- func (s *ConverseService)HandleExceptions (excepts []Exception) string {
- var exceptStr string
- for _,except := range excepts {
- eName := s.GetEquipmentName(except.Cu)
- for _,code := range except.Codes{
- //var tempStr = string(except.Cu)+"号设备," + eName + ","
- var tempStr = "设备: " + eName + ","
- switch code {
- case 40200:
- tempStr += "移动盒子过程中设备故障,动作失败;"
- break
- case 40201:
- tempStr += "移动盒子过程中目标位置不为空,动作取消;"
- break
- case 40202:
- tempStr += "移动盒子过程中起始位置为空,动作取消;"
- break
- case 40300:
- tempStr += "移动管子过程中设备故障,动作失败;"
- break
- case 40301:
- tempStr = "移动管子过程中目标位置不为空,动作取消;"
- break
- case 40302:
- tempStr = "移动管子过程中起始位置为空,动作取消;"
- }
- exceptStr += tempStr
- }
- }
- return exceptStr
- }
- //处理返回设备状态数据, 并存储到数据表里
- func RecordDeviceData(list []List_Data){
- t := time.Now()
- var data []GenePoint_Device_Report_Data
- for _, one := range list {
- var piece GenePoint_Device_Report_Data
- piece.Cu = one.Cu
- piece.Addr = one.Addr
- piece.Type = one.Type
- piece.Value = one.Value
- piece.RecordTime = t
- data = append(data,piece)
- }
- svc := GetConverseService(utils.DBE)
- svc.InsertEntity(data)
- }
|