package main import ( qu "qfw/util" "reflect" "strconv" ) //处理-重复附件数据 func dealWithRepeatAttachData(attach map[string]interface{},data map[string]interface{}) bool { /* "attach_text" : { "1" : { "0" : { "file_name" : "政采贷融资.doc", "attach_url" : "d5ca0944-6af1-11eb-a8bb-0242ac120002" } }, "0" : { "0" : { "file_name" : "01永嘉县人民医院发光免疫试剂采购及设备租赁项目公开招标文件(电子招标).doc", "attach_url" : "7827b2d4-6adb-11eb-bd40-0242ac120002" } }, "3" : { //data "0" : { "file_name" : "政采贷融资.doc", "attach_url" : "d5ca0944-6af1-11eb-a8bb-0242ac120002" } }, }, */ //重复返回 true for _,sourceValue := range attach{ //处理此结构数据 new_sourceArr := dealWithSpecialStructAttachData(*qu.ObjToMap(sourceValue)) new_dataArr := dealWithSpecialStructAttachData(data) if judgeArrIsTheSame(new_sourceArr,new_dataArr) { //相同 return true } } return false } //处理-特殊结构体-附件数据 func dealWithSpecialStructAttachData(data map[string]interface{}) []map[string]string { arr:=make([]map[string]string,0) //sourceValue - data 平级 /* "1" : { "0" : { "file_name" : "政采贷融资.doc", "attach_url" : "d5ca0944-6af1-11eb-a8bb-0242ac120002" } }, */ for _,v:=range data { if dict,isOK := v.(map[string]interface{});isOK { file_name:=qu.ObjToString(dict["file_name"]) attach_url:=qu.ObjToString(dict["attach_url"]) arr = append(arr, map[string]string{"file_name":file_name,"attach_url":attach_url}) } } return arr } //判断数组-结构是否相同 func judgeArrIsTheSame(arr1 []map[string]string,arr2 []map[string]string) bool { if len(arr1)!=len(arr2) { return false } for _,v := range arr1 { isOK:=false for _,v1:=range arr2 { if v["file_name"]==v1["file_name"] && v["attach_url"]==v1["attach_url"] { isOK = true break } } if !isOK {//不完全一致 return false } } return true } //处理时间方法 func (weight *weightDataMap)dealWithTimeData(key string) (int,int) { saveids:=weight.saveids data:=weight.data timeArr := make([]int,0) for _,v:=range saveids{ timeArr = append(timeArr,qu.IntAll(data[v].data[key])) } //最小 最大排序方法 return sortTimeArrMethod(timeArr) } //时间排序方法 小 → 大 func sortTimeArrMethod(arr []int) (int,int) { for i := 0; i < len(arr); i++ { for j := i + 1; j < len(arr); j++ { if arr[i] > arr[j] { arr[i], arr[j] = arr[j], arr[i] } } } indexEarly,indexLately := 0,len(arr)-1 return arr[indexEarly],arr[indexLately] } //返回true 需要融合的字段 func judgeIsFusionKey(key string) bool { s_dict := *qu.ObjToMap(fusionAllKey["String"]) i_dict := *qu.ObjToMap(fusionAllKey["Int"]) f_dict := *qu.ObjToMap(fusionAllKey["Float"]) if s_dict[key]!=nil || i_dict[key]!=nil || f_dict[key]!=nil { return true } return false } func judgeIsEffectiveData(value interface{},key string) bool { //指定字段处理 if key=="area" { if qu.ObjToString(value) == "全国" || qu.ObjToString(value) == "" { return false }else { return true } } if key=="buyeraddr"||key=="agencyaddr"||key=="winneraddr" { if qu.ObjToString(value) == "无" || qu.ObjToString(value) == "" { return false }else { return true } } //int float 类型 valueType := reflect.ValueOf(value).Kind() if valueType==reflect.Int || valueType==reflect.Int32 || valueType==reflect.Int64 || valueType==reflect.Int8 || valueType==reflect.Int16||valueType==reflect.Float32|| valueType==reflect.Float64{ if key=="bidopentime" || key=="bidamount" || key=="budget" { if qu.Float64All(value) == 0.0 { return false } } return true } //bool类型处理 if valueType==reflect.Bool { return true } /* Array Chan Map Slice String*/ valueLen := reflect.ValueOf(value).Len() if valueLen>0 { return true }else { return false } } //判断是否在当前id段落 func judgeIsCurIds (gtid string,lteid string,curid string) bool { gt_time, _ := strconv.ParseInt(gtid[:8], 16, 64) lte_time, _ := strconv.ParseInt(lteid[:8], 16, 64) cur_time, _ := strconv.ParseInt(curid[:8], 16, 64) if cur_time>gt_time&&cur_time<=lte_time { return true } return false }