Selaa lähdekoodia

铁塔智联CRM

xuzhiheng 1 vuosi sitten
vanhempi
commit
003df2258b
3 muutettua tiedostoa jossa 276 lisäystä ja 77 poistoa
  1. 36 0
      src/history/util_history.go
  2. 237 74
      src/push/push.go
  3. 3 3
      src/web/templates/push/index.html

+ 36 - 0
src/history/util_history.go

@@ -129,6 +129,42 @@ var FieldMap = map[string]interface{}{
 	"agency_credit_no": "招标代理机构统一社会信用代码",
 	"contact":          "中标单位历史联系信息",
 	"id":               "唯一标识",
+	//铁塔
+	"infoId":            "信息id",
+	"infoTitle":         "信息标题",
+	"agentRelationName": "代理机构联系人",
+	"areaCity":          "信息地区--市",
+	"areaCountry":       "信息地区--区县",
+	"areaProvince":      "信息地区--省",
+	"keywords":          "关键词",
+	"bidWinnerAmount":   "中标金额",
+	"businessType":      "业务场景",
+	"bidingEndTime":     "标书截止时间",
+	"isElectronic":      "是否电子招标",
+	"infoType":          "信息类型",
+	"zhaoIndustry":      "招标单位行业归类",
+	"firstLevel":        "招标单位一级标签",
+	"secondLevel":       "招标单位二级行业",
+	"openBidingTime":    "开标时间",
+	"zhongIndustry":     "中标单位行业归类",
+	"tenderEndTime":     "投标截止时间",
+	"zhaoRelationName":  "招标单位联系人",
+	"zhaoBiaoUnit":      "招标单位",
+	"xmNumber":          "招标编号",
+	"zhongRelationWay":  "中标单位联系方式",
+	"tenderBeginTime":   "投标开始时间",
+	"biddingType":       "招标方式",
+	"infoTypeSegment":   "二级信息类型细分",
+	"zhongRelationName": "中标单位联系人",
+	"agentUnit":         "代理机构",
+	"zhongBiaoUnit":     "中标单位",
+	"zhaoRelationWay":   "招标单位联系方式",
+	"isOptimization":    "是否优选",
+	"bidingAcquireTime": "标书获取开始时间",
+	"agentRelationWay":  "代理机构联系方式",
+	"bidBudget":         "预算金额",
+	"infoContent":       "信息内容",
+	"infoFile":          "附件下载链接",
 }
 
 type (

+ 237 - 74
src/push/push.go

@@ -1,9 +1,11 @@
 package push
 
 import (
+	"bytes"
 	"encoding/json"
 	"fmt"
 	"log"
+	"mongodb"
 	"net/url"
 	qutil "qfw/util"
 	"qfw/util/redis"
@@ -26,6 +28,46 @@ var (
 	fields1 = "city,projectname,budget,bidopentime,buyer,publishtime,buyer_type,href,district,bidtype,bidway,bidendtime,docamount,agency,buyerperson,buyertel,projectcode,id,projectId,jybxhref"
 	fields2 = "city,projectname,bidamount,s_winner,winner_type,buyer,publishtime,buyer_type,href,district,winner_style,bidtype,budget,agency,agency_fee,projectcode,jybxhref,id,projectId"
 	SE      = qutil.SimpleEncrypt{Key: "topJYBX2019"}
+	subMap  = map[string]map[string]string{
+		"招标":   map[string]string{"0": "3"},
+		"竞谈":   map[string]string{"0": "3"},
+		"单一":   map[string]string{"0": "3"},
+		"询价":   map[string]string{"0": "3"},
+		"竞价":   map[string]string{"0": "3"},
+		"邀标":   map[string]string{"0": "3"},
+		"论证意见": map[string]string{"1": "2"},
+		"预告":   map[string]string{"1": "2"},
+		"预审":   map[string]string{"1": "2"},
+		"预审结果": map[string]string{"1": "2"},
+		"需求公示": map[string]string{"1": "2"},
+		"采购意向": map[string]string{"1": "2"},
+		"变更":   map[string]string{"2": "5"},
+		"废标":   map[string]string{"3": "7"},
+		"流标":   map[string]string{"3": "8"},
+		"中标":   map[string]string{"3": "10"},
+		"成交":   map[string]string{"3": "11"},
+		"结果变更": map[string]string{"3": "11"},
+		"合同":   map[string]string{"3": "12"},
+		"验收":   map[string]string{"5": "13"},
+		"违规":   map[string]string{"5": "14"},
+	}
+	bidtypeMap = map[string]string{
+		"招标": "0",
+		"邀标": "1",
+		"竞谈": "2",
+		"单一": "3",
+		"询价": "4",
+		"竞价": "6",
+	}
+	subtypeMap = map[string]string{
+		"招标": "0",
+		"邀标": "1",
+		"竞谈": "2",
+		"单一": "3",
+		"询价": "4",
+		"其它": "5",
+		"竞价": "6",
+	}
 )
 
 func (this *Push) Index() {
@@ -45,87 +87,91 @@ func (this *Push) DataPush() {
 	} else {
 		fields = fields2
 	}
-	if getDataType == "0" {
-		query := map[string]interface{}{"appid": appid, "historyId": historyId}
-		// fieldMap := map[string]int{}
-		// for _, v := range strings.Split(fields, ",") {
-		// 	fieldMap[v] = 1
-		// }
-		data, ok := MgoSave.Find(dataSource, query, nil, nil, false, -1, -1)
-		if ok && data != nil && len(*data) > 0 {
-			datasArr := []map[string]interface{}{}
-			for _, v := range *data {
-				datamap := map[string]interface{}{}
-				for _, vv := range strings.Split(fields, ",") {
-					if v[vv] != nil {
-						datamap[vv] = fmt.Sprint(v[vv])
-					} else {
-						datamap[vv] = ""
+	if appid == "jyIhxXQQoJAgVZQURLLwRE" {
+		ttCRM(dataSource, historyId)
+	} else {
+		if getDataType == "0" {
+			query := map[string]interface{}{"appid": appid, "historyId": historyId}
+			// fieldMap := map[string]int{}
+			// for _, v := range strings.Split(fields, ",") {
+			// 	fieldMap[v] = 1
+			// }
+			data, ok := MgoSave.Find(dataSource, query, nil, nil, false, -1, -1)
+			if ok && data != nil && len(*data) > 0 {
+				datasArr := []map[string]interface{}{}
+				for _, v := range *data {
+					datamap := map[string]interface{}{}
+					for _, vv := range strings.Split(fields, ",") {
+						if v[vv] != nil {
+							datamap[vv] = fmt.Sprint(v[vv])
+						} else {
+							datamap[vv] = ""
+						}
 					}
+					id := qutil.ObjToString(v["id"])
+					datamap["id"] = SE.EncodeString(id)
+					datasArr = append(datasArr, datamap)
 				}
-				id := qutil.ObjToString(v["id"])
-				datamap["id"] = SE.EncodeString(id)
-				datasArr = append(datasArr, datamap)
+				dataMap["dataList"] = datasArr
 			}
-			dataMap["dataList"] = datasArr
+		} else if getDataType == "1" {
+			dataMap["dataList"] = ExcelParse(dataType)
 		}
-	} else if getDataType == "1" {
-		dataMap["dataList"] = ExcelParse(dataType)
-	}
-	log.Println(dataMap)
-	databyte, _ := json.Marshal(dataMap)
-	dataStr := string(databyte)
-	//
-	token := getAccessToken()
-	// token := "f9cb92a6-356b-433f-a8bd-09f1deef6d52"
-	log.Println("token111:", token)
-	//
-	tokens := getAccessTokens(token)
-	log.Println("token222:", tokens)
-	//
-	dataStr = strings.ReplaceAll(dataStr, `"`, `\"`)
-	data := `{"access_token":"` + tokens + `","postjson":"` + dataStr + `"}`
-	log.Println("data:", data)
-	dataTypes := ""
-	if dataType == "0" {
-		dataTypes = "JY_TO_DICT_fishBid2"
-	} else {
-		dataTypes = "JY_TO_DICT_WinBid2"
-	}
-	apiurl := "http://111.7.112.55:20110/oppf?method=" + dataTypes + "&appId=1068246&appKey=15c1da231a946f9615ee9d56138952a2&format=json&busiSerial=1&OPCODE=A888888&version=1.0&accessToken=" + tokens + "&timestamp=" + fmt.Sprint(time.Now().Format("20060102150405")) + "&sign=abc"
-	log.Println("apiurl:", apiurl)
-	errstr := ""
-	response, err := HttpPostJson(apiurl, data)
-	result := map[string]interface{}{}
-	if err == nil {
-		errstr = string(response)
-		resMap := qutil.ObjToMap(string(response))
-		result = *resMap
-		log.Println("响应信息 ", *resMap)
-		if resMap != nil && *resMap != nil {
-			respCode := qutil.ObjToString((*resMap)["respCode"])
-			if respCode == "00000" {
-				log.Println("成功")
-			} else {
-				log.Println("异常")
+		log.Println(dataMap)
+		databyte, _ := json.Marshal(dataMap)
+		dataStr := string(databyte)
+		//
+		token := getAccessToken()
+		// token := "f9cb92a6-356b-433f-a8bd-09f1deef6d52"
+		log.Println("token111:", token)
+		//
+		tokens := getAccessTokens(token)
+		log.Println("token222:", tokens)
+		//
+		dataStr = strings.ReplaceAll(dataStr, `"`, `\"`)
+		data := `{"access_token":"` + tokens + `","postjson":"` + dataStr + `"}`
+		log.Println("data:", data)
+		dataTypes := ""
+		if dataType == "0" {
+			dataTypes = "JY_TO_DICT_fishBid2"
+		} else {
+			dataTypes = "JY_TO_DICT_WinBid2"
+		}
+		apiurl := "http://111.7.112.55:20110/oppf?method=" + dataTypes + "&appId=1068246&appKey=15c1da231a946f9615ee9d56138952a2&format=json&busiSerial=1&OPCODE=A888888&version=1.0&accessToken=" + tokens + "&timestamp=" + fmt.Sprint(time.Now().Format("20060102150405")) + "&sign=abc"
+		log.Println("apiurl:", apiurl)
+		errstr := ""
+		response, err := HttpPostJson(apiurl, data)
+		result := map[string]interface{}{}
+		if err == nil {
+			errstr = string(response)
+			resMap := qutil.ObjToMap(string(response))
+			result = *resMap
+			log.Println("响应信息 ", *resMap)
+			if resMap != nil && *resMap != nil {
+				respCode := qutil.ObjToString((*resMap)["respCode"])
+				if respCode == "00000" {
+					log.Println("成功")
+				} else {
+					log.Println("异常")
+				}
 			}
+		} else {
+			errstr = "响应失败 " + err.Error()
+			log.Println("响应失败 ", err)
 		}
-	} else {
-		errstr = "响应失败 " + err.Error()
-		log.Println("响应失败 ", err)
+		MgoSave.Save("dataPushLog", map[string]interface{}{
+			"dataLenth":   len(dataMap["dataList"]),
+			"createtime":  time.Now().Unix(),
+			"appid":       appid,
+			"getDataType": getDataType,
+			"dataType":    dataType,
+			"historyId":   historyId,
+			"dataSource":  dataSource,
+			"result":      result,
+			"errMsg":      errstr,
+		})
+		this.ServeJson(map[string]interface{}{"errMsg": errstr})
 	}
-	MgoSave.Save("dataPushLog", map[string]interface{}{
-		"dataLenth":   len(dataMap["dataList"]),
-		"createtime":  time.Now().Unix(),
-		"appid":       appid,
-		"getDataType": getDataType,
-		"dataType":    dataType,
-		"historyId":   historyId,
-		"dataSource":  dataSource,
-		"result":      result,
-		"errMsg":      errstr,
-	})
-	this.ServeJson(map[string]interface{}{"errMsg": errstr})
 }
 
 func ExcelParse(dataType string) []map[string]interface{} {
@@ -235,3 +281,120 @@ func getAccessTokens(token string) string {
 		}
 	}
 }
+
+func ttCRM(dataSource, historyId string) {
+	query := map[string]interface{}{"historyId": historyId}
+	data, ok := MgoSave.Find(dataSource, query, nil, nil, false, -1, -1)
+	if ok && data != nil && len(*data) > 0 {
+		for _, v := range *data {
+			id := qutil.ObjToString(v["infoId"])
+			v["infoId"] = SE.EncodeString(id)
+			bidtype := qutil.ObjToString(v["biddingType"])
+			toptype := qutil.ObjToString(v["infoType"])
+			subtype := qutil.ObjToString(v["infoTypeSegment"])
+			bidway := qutil.ObjToString(v["isElectronic"])
+			if bidtype != "" {
+				v["biddingType"] = bidtypeMap[bidtype]
+			} else {
+				v["biddingType"] = subtypeMap[subtype]
+			}
+			if bidway == "电子投标" {
+				v["isElectronic"] = "1"
+			} else {
+				v["isElectronic"] = "0"
+			}
+			if subtype == "其它" {
+				if toptype == "预告" {
+					v["infoType"] = "1"
+					v["infoTypeSegment"] = "2"
+				} else if toptype == "招标" {
+					v["infoType"] = "2"
+					v["infoTypeSegment"] = "6"
+				} else if toptype == "结果" {
+					v["infoType"] = "3"
+					v["infoTypeSegment"] = "9"
+				} else {
+					v["infoType"] = "5"
+					v["infoTypeSegment"] = "15"
+				}
+			} else {
+				for t, s := range subMap[subtype] {
+					v["infoType"] = t
+					v["infoTypeSegment"] = s
+				}
+			}
+			info := MgoBidding.FindOne(BiddingColl, map[string]interface{}{"_id": mongodb.StringTOBsonId(id)})
+			if info != nil && len(info) > 0 {
+				if info["projectinfo"] != nil {
+					projectInfo := qutil.ObjToMap(info["projectinfo"])
+					if projectInfo != nil && len(*projectInfo) > 0 {
+						if (*projectInfo)["attachments"] != nil {
+							filesArr := []string{}
+							fileUrl := "http://jy-datafile.oss-cn-beijing.aliyuncs.com/"
+							if attachments, oks := (*projectInfo)["attachments"].(map[string]interface{}); oks {
+								for _, v := range attachments {
+									if atta, ok := v.(map[string]interface{}); ok {
+										if atta["fid"] != nil && qutil.ObjToString(atta["fid"]) != "" {
+											filesArr = append(filesArr, fileUrl+qutil.ObjToString(atta["fid"]))
+										} else {
+											if atta["org_url"] != nil {
+												filesArr = append(filesArr, qutil.ObjToString(atta["org_url"]))
+											}
+										}
+									}
+								}
+							}
+							log.Println("查询附件结果:", id, "附件数量:", len(filesArr))
+							if len(filesArr) > 0 {
+								v["infoFile"] = strings.Join(filesArr, ",")
+							}
+						}
+					}
+				}
+			}
+			delete(v, "_id")
+			delete(v, "appid")
+			delete(v, "createtime")
+			delete(v, "historyId")
+			postTT(dataSource, v)
+		}
+	}
+}
+
+func postTT(dataSource string, data map[string]interface{}) string {
+	apiurl := "https://www.fxiaoke.com/erp/syncdatagray/open/objdata/push"
+	log.Println("apiurl:", apiurl)
+	header := map[string]string{
+		"token":             "43f8e3c05a8edf8ee85bbc8755043b01",
+		"tenantId":          "40070007",
+		"objectApiName":     "object_HDngT__c",
+		"dataCenterId":      "649d4eb19ced6c0001587f26",
+		"id":                qutil.ObjToString(data["infoId"]),
+		"version":           "v1",
+		"Content-Type":      "application/json",
+		"directSync":        "true",
+		"destObjectApiName": "object_HDngT__c",
+	}
+	dataMap := map[string]interface{}{"objAPIName": "object_HDngT__c", "masterFieldVal": data, "detailFieldVals": map[string]interface{}{}}
+	dataJson, _ := json.Marshal(&dataMap)
+	response, err := HttpPost(apiurl, header, bytes.NewReader(dataJson))
+	errstr := ""
+	if err == nil {
+		errstr = string(response)
+		resMap := qutil.ObjToMap(string(response))
+		log.Println("响应信息 ", *resMap)
+		if resMap != nil && *resMap != nil {
+			errMsg := qutil.ObjToString((*resMap)["errMsg"])
+			if errMsg == "成功" {
+				log.Println("成功")
+			} else {
+				Mgo.UpdateById(dataSource, qutil.ObjToString(data["infoId"]), map[string]interface{}{"$set": map[string]interface{}{"result": false}})
+			}
+		}
+	} else {
+		Mgo.UpdateById(dataSource, qutil.ObjToString(data["infoId"]), map[string]interface{}{"$set": map[string]interface{}{"result": false}})
+		errstr = "响应失败 " + err.Error()
+		log.Println("响应失败 ", err)
+	}
+	return errstr
+}

+ 3 - 3
src/web/templates/push/index.html

@@ -102,17 +102,17 @@
                 "historyId": historyId
             }
             if (pushType == 0) {
-                com.maskShow("正在生成数据...");
+                com.maskShow("正在推送数据...");
                 $.ajax({
                     url: "/push/dataPush",
                     type: 'POST',
                     data: param,
                     success: function (r) {
                         com.maskHide();
-                        showTip(r.errMsg, 2000);
+                        showTip(r.errMsg, 4000);
                     },
                     error: function (r) {
-                        showTip("数据生成失败", 5000);
+                        showTip("数据推送失败", 5000);
                     }
                 })
             } else if (dataType == 1){