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