Ver código fonte

数据导出选择id导出及收藏导出 因检索库可能不存在数据 改为查询mongo表

wangkaiyue 4 anos atrás
pai
commit
215f64213d

+ 1 - 1
src/jfw/front/dataExport.go

@@ -517,7 +517,7 @@ func (d *DataExport) PreviewData(source, _id string) error {
 	//从500条数据中筛选字段最全五条
 	scd := dataexport.GetSqlObjFromId(public.MQFW, _id)
 	kws := scd.Keyword
-	res, err := dataexport.GetDataExportSearchResult(public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
+	res, err := dataexport.GetDataExportSearchResult(public.Mgo_Bidding, public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
 	if res == nil || err != nil {
 		log.Println("PreviewData查询出错", res)
 		return d.Render("/pc/dataExport_noDataErr.html", &d.T)

+ 1 - 1
src/jfw/front/ws_dataExport.go

@@ -203,7 +203,7 @@ func (w *WsDataExport) GetPreview() error {
 	//从500条数据中筛选字段最全五条
 	scd := dataexport.GetSqlObjFromId(public.MQFW, _id)
 	kws := scd.Keyword
-	res, err := dataexport.GetDataExportSearchResult(public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
+	res, err := dataexport.GetDataExportSearchResult(public.Mgo_Bidding, public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
 	if res == nil || err != nil {
 		log.Println("PreviewData查询出错")
 		return w.Render("/pc/dataExport_noDataErr.html", &w.T)

+ 1 - 1
src/jfw/modules/app/src/app/front/ws_dataExport.go

@@ -66,7 +66,7 @@ func (w *WsDataExport) GetPreview() error {
 	//从500条数据中筛选字段最全五条
 	scd := dataexport.GetSqlObjFromId(public.MQFW, _id)
 	kws := scd.Keyword
-	res, err := dataexport.GetDataExportSearchResult(public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
+	res, err := dataexport.GetDataExportSearchResult(public.Mgo_Bidding, public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
 	if res == nil || err != nil {
 		log.Println("PreviewData查询出错")
 		return w.Render("/pc/dataExport_noDataErr.html", &w.T)

+ 64 - 7
src/jfw/modules/common/src/qfw/util/dataexport/dataexport.go

@@ -390,22 +390,80 @@ func isNullSearch(scd *SieveCondition) (isNull bool) {
  * count 返回数量 (-1:预览数据查询)
  */
 
-func GetDataExportSearchResultByScdId(sim mg.MongodbSim, elasticAddress, id, dataType string, checkCount int) (*[]map[string]interface{}, error) {
+func GetDataExportSearchResultByScdId(sim, bid mg.MongodbSim, elasticAddress, id, dataType string, checkCount int) (*[]map[string]interface{}, error) {
 	scd := GetSqlObjFromId(sim, id)
-	//if scd.SelectIds != nil {
-	//	return GetDataExportSelectResult(scd, dataType, checkCount)
-	//}
-	return GetDataExportSearchResult(elasticAddress, scd, dataType, checkCount)
+	return GetDataExportSearchResult(bid, elasticAddress, scd, dataType, checkCount)
+}
+
+//收藏导出
+var contentfilterReg = regexp.MustCompile("<[^>]+>")
+
+func GetDataExportSelectResult(bidding mg.MongodbSim, scd *SieveCondition, dataType string, checkCount int) (*[]map[string]interface{}, error) {
+	sess := bidding.GetMgoConn()
+	defer bidding.DestoryMongoConn(sess)
+	if checkCount == -1 {
+		checkCount = len(scd.SelectIds)
+	}
+	var queryIds []interface{}
+	for _, idStr := range scd.SelectIds {
+		queryIds = append(queryIds, mg.StringTOBsonId(idStr))
+	}
+	if queryIds == nil || len(queryIds) != checkCount {
+		return nil, fmt.Errorf("选择数据导出异常 id数量不一致 期望%d 实际%d", checkCount, len(queryIds))
+	}
+	selectMap := map[string]interface{}{
+		"_id": 1, "title": 1, "detail": 1, "area": 1, "city": 1, "publishtime": 1, "projectname": 1, "buyer": 1, "s_winner": 1, "bidamount": 1, "subtype": 1, "toptype": 1,
+	}
+	if dataType == "2" {
+		for _, key := range []string{"href", "projectcode", "buyerperson", "buyertel", "budget", "bidopentime", "agency", "projectscope", "winnerperson", "winnertel"} {
+			selectMap[key] = 1
+		}
+	}
+	returnLsit := make([]map[string]interface{}, 0, len(queryIds))
+	iter := sess.DB("qfw_data").C("bidding").Select(selectMap).Find(map[string]interface{}{"_id": map[string]interface{}{
+		"$in": queryIds,
+	}}).Iter()
+	for m := make(map[string]interface{}); iter.Next(&m); {
+		m["_id"] = mg.BsonIdToSId(m["_id"])
+		detail, _ := m["detail"].(string)
+		if detail != "" {
+			m["detail"] = contentfilterReg.ReplaceAllString(detail, "")
+		}
+		returnLsit = append(returnLsit, m)
+		m = make(map[string]interface{})
+	}
+	if len(returnLsit) == checkCount {
+		return &returnLsit, nil
+	}
+	iter_back := sess.DB("qfw_data").C("bidding_back").Select(selectMap).Find(map[string]interface{}{"_id": map[string]interface{}{
+		"$in": queryIds,
+	}}).Iter()
+	for m := make(map[string]interface{}); iter_back.Next(&m); {
+		m["_id"] = mg.BsonIdToSId(m["_id"])
+		detail, _ := m["detail"].(string)
+		if detail != "" {
+			m["detail"] = contentfilterReg.ReplaceAllString(detail, "")
+		}
+		returnLsit = append(returnLsit, m)
+		m = make(map[string]interface{})
+	}
+	if len(returnLsit) == checkCount {
+		return &returnLsit, nil
+	}
+	return nil, fmt.Errorf("选择数据导出异常 数据量期望%d条,实际查询%d条", checkCount, len(returnLsit))
 }
 
 //GetDataExportSearchResult 获取数据导出内容
 //entmg 高级字段包查询企业电话邮箱等字段
 //checkCount -1 预览500条
-func GetDataExportSearchResult(elasticAddress string, scd *SieveCondition, dataType string, checkCount int) (*[]map[string]interface{}, error) {
+func GetDataExportSearchResult(bid mg.MongodbSim, elasticAddress string, scd *SieveCondition, dataType string, checkCount int) (*[]map[string]interface{}, error) {
 	defer qutil.Catch()
 	if scd == nil {
 		return nil, errors.New("GetDataExportSearchResult-获取查询条件")
 	}
+	if scd.SelectIds != nil {
+		return GetDataExportSelectResult(bid, scd, dataType, checkCount)
+	}
 	//获取查询语句
 	qstr := getDataExportSql(scd)
 	log.Printf("GetDataExportSearchResult-%s-sql:%s\n", scd.Id, qstr)
@@ -437,7 +495,6 @@ func GetDataExportSearchResult(elasticAddress string, scd *SieveCondition, dataT
 	//校验数量
 	if checkCount != len(res) && checkCount != -1 {
 		return nil, fmt.Errorf("GetDataExportSearchResult-%s-数据总量校验异常,期望:%d,实际:%d", scd.Id, checkCount, len(res))
-		//发邮件
 	}
 	return &res, nil
 }

+ 2 - 2
src/jfw/modules/subscribepay/src/service/dataExportPay.go

@@ -158,7 +158,7 @@ func (p *DataExportPay) CreateOrder() {
 		ordercode := pay.GetOrderCode(openId)
 		download_url := util.GetExcelFilePath(ordercode)
 		go func() {
-			list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, config.Config.Elasticsearch, id, qutil.If(data_spec == "高级字段包", "2", "1").(string), data_count)
+			list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, util.Mgo_bidding, config.Config.Elasticsearch, id, qutil.If(data_spec == "高级字段包", "2", "1").(string), data_count)
 			if err == nil && list != nil && len(*list) > 0 {
 				list = dataexport.FormatExportData(util.MQFWENT, list, config.Config.WebDomain, qutil.If(data_spec == "高级字段包", "2", "1").(string))
 				err = util.CreateDataExportExcelFile(list, data_spec == "高级字段包", config.ExConf.ExcelReadyPath+download_url)
@@ -264,7 +264,7 @@ func (this *DataExportPay) VipDailyDataExport() {
 		}
 		//生成excel文件&存储导出记录
 		go func() {
-			list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, config.Config.Elasticsearch, selectId, "2", selectCount)
+			list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, util.Mgo_bidding, config.Config.Elasticsearch, selectId, "2", selectCount)
 			url := util.GetExcelFilePath(pay.GetOrderCode(selectId))
 			if err == nil && list != nil && len(*list) > 0 {
 				list = dataexport.FormatExportData(util.MQFWENT, list, config.Config.WebDomain, "2")

+ 1 - 1
src/jfw/public/entdataexport.go

@@ -30,7 +30,7 @@ func GetEntDataExportCount(_id string, entId, entUserId, limitNum, current int,
 	dataType := "2"
 	//数据导出数据查询
 
-	res, err := dataexport.GetDataExportSearchResultByScdId(MQFW, DbConf.Elasticsearch.Main.Address, _id, dataType, count)
+	res, err := dataexport.GetDataExportSearchResultByScdId(MQFW, Mgo_Bidding, DbConf.Elasticsearch.Main.Address, _id, dataType, count)
 	if err != nil {
 		log.Println("企业数据导出错误 ", err)
 		return 0, 0, nil