فهرست منبع

fix:分析报告pdf接口添加

duxin 1 سال پیش
والد
کامیت
ed3469b5bf

+ 2 - 1
src/jfw/modules/bigmember/src/config.json

@@ -187,5 +187,6 @@
   "nsq": "192.168.3.240:4260",
   "nsq_topic": "jy_event",
   "attachmentResPower": ["bi_sj_sjqk","bi_sf_sjqd","bi_sj_yyszs"],
-  "msgMaxCount": 20000
+  "msgMaxCount": 20000,
+  "analysisPDF": "13027620557"
 }

+ 1 - 0
src/jfw/modules/bigmember/src/config/config.go

@@ -77,6 +77,7 @@ type config struct {
 	Nsq_topic           string   `json:"nsq_topic"`
 	AttachmentResPower  []string `json:"attachmentResPower"`
 	MsgMaxCount         int      `json:"msgMaxCount"`
+	AnalysisPDF         string   `json:"analysisPDF"`
 }
 
 type CustomerInfo struct {

+ 99 - 0
src/jfw/modules/bigmember/src/entity/marketAnalysis/marketAnalysisEntity.go

@@ -111,6 +111,7 @@ type MarketAnalysisEntity struct {
 	Phone         string // 手机号
 	PositionId    int
 	OriginalTotal int64 // 数据总数
+	Source        string
 }
 
 type projectInfo struct {
@@ -222,6 +223,101 @@ func (mae *MarketAnalysisEntity) ForMatData() error {
 	return nil
 }
 
+// ForMatData 获取格式化请求参数
+func (mae *MarketAnalysisEntity) ForMatDataPdf() (string, error) {
+	//格式化订阅词
+	if err := json.Unmarshal([]byte(mae.BaseParam.KeysItemsStr), &mae.FormatParam.KeysItems); err != nil {
+		return "", fmt.Errorf("关键词组格式异常")
+	}
+
+	//格式化时间段
+	if timeArr := strings.Split(mae.BaseParam.RangeTime, "-"); len(timeArr) == 2 {
+		mae.FormatParam.STime = qutil.Int64All(timeArr[0])
+		mae.FormatParam.ETime = qutil.Int64All(timeArr[1])
+		if mae.FormatParam.STime == 0 || mae.FormatParam.ETime == 0 {
+			return "", fmt.Errorf("开始时间和结束时间不能为空")
+		}
+	} else {
+		return "", fmt.Errorf("时间戳格式异常")
+	}
+	//格式化省份、城市
+	if areaStr := strings.TrimSpace(mae.BaseParam.Area); areaStr != "" {
+		imap := map[string][]string{}
+		if err := json.Unmarshal([]byte(mae.BaseParam.Area), &imap); err != nil {
+			return "", fmt.Errorf("非法地区信息")
+		}
+		var city, area []string
+		for name, v := range imap {
+			if len(v) == 0 {
+				area = append(area, name)
+			} else {
+				for _, vv := range v {
+					city = append(city, vv)
+				}
+			}
+		}
+		mae.FormatParam.Area = area
+		mae.FormatParam.City = city
+	}
+	//格式化行业
+	if industryStr := strings.TrimSpace(mae.BaseParam.Industry); industryStr != "" {
+		imap := map[string][]string{}
+		if err := json.Unmarshal([]byte(industryStr), &imap); err != nil {
+			return "", fmt.Errorf("非法行业信息")
+		}
+		var farr []string
+		for name, v := range imap {
+			for _, vv := range v {
+				farr = append(farr, fmt.Sprintf("%s_%s", name, vv))
+			}
+		}
+		mae.FormatParam.Industry = farr
+	}
+	//格式化类型
+	if buyerClassStr := strings.TrimSpace(mae.BaseParam.BuyerClass); buyerClassStr != "" {
+		mae.FormatParam.BuyerClass = strings.Split(buyerClassStr, ",")
+	}
+	//中标企业
+	mae.FormatParam.Winner = mae.BaseParam.Winner
+	//采购单位
+	mae.FormatParam.Buyer = mae.BaseParam.Buyer
+	//排序
+	mae.FormatParam.Sort = qutil.If(mae.BaseParam.Sort != 0 && mae.BaseParam.Sort != 1, 0, mae.BaseParam.Sort).(int)
+	if mae.BaseParam.PageNum*mae.BaseParam.PageSize > config.Config.ProjectCount {
+		mae.BaseParam.PageNum = config.Config.ProjectCount / mae.BaseParam.PageSize
+	}
+	//当前页码
+	mae.FormatParam.PageNum = qutil.If(mae.BaseParam.PageNum < 1 || mae.BaseParam.PageNum > 1000, 1, mae.BaseParam.PageNum).(int)
+	//默认每页10条
+	mae.FormatParam.PageSize = qutil.If(mae.BaseParam.PageSize < 1 || mae.BaseParam.PageSize > 100, 50, mae.BaseParam.PageSize).(int)
+
+	data := map[string]interface{}{
+		"s_keysItems":      mae.BaseParam.KeysItemsStr,
+		"s_rangeTime":      mae.BaseParam.RangeTime,
+		"s_rangeTimeExtra": mae.BaseParam.RangeTimeExtra,
+		"s_area":           mae.BaseParam.Area,
+		"s_industry":       mae.BaseParam.Industry,
+		"s_buyerClass":     mae.BaseParam.BuyerClass,
+		"s_matchingMode":   mae.BaseParam.MatchingMode,
+		"s_userId":         mae.UId,
+		"s_parentId":       mae.Pid,
+		"s_mgoUserId":      mae.MgoUserId,
+		"i_positionId":     mae.PositionId,
+		"s_phone":          mae.Phone,
+	}
+	if mae.OriginalTotal > 0 {
+		data["l_originalTotal"] = mae.OriginalTotal
+	}
+	if mae.Source != "" {
+		data["source"] = mae.Source
+	}
+	rs, b := db.Mgo.FindOne(ReportHistoryTable, data)
+	if b && rs != nil {
+		return mongodb.BsonIdToSId((*rs)["_id"]), nil
+	}
+	return "", nil
+}
+
 // GetProjectInfoList 项目明细
 func (mae *MarketAnalysisEntity) GetProjectInfoList() error {
 	var (
@@ -298,6 +394,9 @@ func (mae *MarketAnalysisEntity) SaveAnalysisRecord() error {
 	if mae.OriginalTotal > 0 {
 		data["l_originalTotal"] = mae.OriginalTotal
 	}
+	if mae.Source != "" {
+		data["source"] = mae.Source
+	}
 	mae.MgoRecordId = db.Mgo.Save(ReportHistoryTable, data)
 	if mae.MgoRecordId == "" {
 		return fmt.Errorf("分析创建异常")

+ 56 - 0
src/jfw/modules/bigmember/src/service/report/marketAnalysis.go

@@ -2,11 +2,13 @@ package report
 
 import (
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
+	"errors"
 	"fmt"
 	"jy/src/jfw/modules/bigmember/src/config"
 	"jy/src/jfw/modules/bigmember/src/entity/marketAnalysis"
 	"jy/src/jfw/modules/bigmember/src/util"
 	"log"
+	"strings"
 	"time"
 
 	. "app.yhyue.com/moapp/jybase/api"
@@ -26,6 +28,8 @@ type MarketAnalysis struct {
 	cancel            xweb.Mapper `xweb:"/marketAnalysis/cancel"`            // 取消分析
 	isOffline         xweb.Mapper `xweb:"/marketAnalysis/isOffline"`         // 是否为离线查询
 	delete            xweb.Mapper `xweb:"/marketAnalysis/delete"`            // 删除报告
+
+	doAnalysisPdf xweb.Mapper `xweb:"/marketAnalysis/doAnalysisPdf"` //市场分析分析查询仅用于运营生成pdf(此接口只做为保存查询条件,返回记录id)
 }
 
 // 项目明细
@@ -120,6 +124,58 @@ const (
 	AnalysisStatusAnalyzing = 2 // 存在正在生成的报告
 )
 
+// DoAnalysis 开始分析报告
+func (this *MarketAnalysis) DoAnalysisPdf() {
+	sessVal := this.Session().GetMultiple()
+	mgoUserId := qutil.ObjToString(sessVal["mgoUserId"])
+	userId := qutil.ObjToString(sessVal["userId"])
+	positionId := qutil.IntAll(sessVal["positionId"])
+	phone := qutil.ObjToString(sessVal["phone"])
+	rData, errMsg := func() (interface{}, error) {
+		if phone == "" || !strings.Contains(config.Config.AnalysisPDF, phone) {
+			log.Printf("配置手机号:%s,登录手机号:%s\n", config.Config.AnalysisPDF, phone)
+			return nil, errors.New("手机号用户无权益")
+		}
+		pid, powerErr := checkPower(this.Session())
+		if powerErr != nil {
+			return nil, powerErr
+		}
+		//接受参数
+		bParam := marketAnalysis.AnalysisRequestParam{
+			KeysItemsStr:   this.GetString("keysItems"),      //分析内容【字符串】结构和o_member_jy.a_items保持一致
+			RangeTime:      this.GetString("rangeTime"),      //时间【字符串】 时间戳开始-结束时间戳
+			RangeTimeExtra: this.GetString("rangeTimeExtra"), //时间【字符串】 时间戳开始-结束时间戳
+			Area:           this.GetString("area"),           //省份【字符串】多个省份用逗号拼接
+			Industry:       this.GetString("industry"),       //行业【字符串】多个行业用逗号拼接
+			BuyerClass:     this.GetString("buyerclass"),     //采购单位类型【字符串】多个采购单位类型用逗号拼接
+			MatchingMode:   this.GetString("matchingMode"),   //匹配方式
+		}
+		mae := &marketAnalysis.MarketAnalysisEntity{BaseParam: bParam, UId: userId, Pid: pid, MgoUserId: mgoUserId, PositionId: positionId, Phone: phone, Source: "analysisPDF"}
+		if mgoRecordId, err := mae.ForMatDataPdf(); mgoRecordId != "" || err != nil {
+			if mgoRecordId != "" {
+				data := map[string]interface{}{
+					"id": util.EncodeId(mgoRecordId),
+				}
+				return data, nil
+			}
+			return nil, err
+		}
+
+		//存储分析记录
+		if err := mae.SaveAnalysisRecord(); err != nil {
+			return nil, err
+		}
+		data := map[string]interface{}{
+			"id": util.EncodeId(mae.MgoRecordId),
+		}
+		return data, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s MarketAnalysis DoAnalysis Error:%s\n", userId, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
 // DoAnalysis 开始分析报告
 func (this *MarketAnalysis) DoAnalysis() {
 	sessVal := this.Session().GetMultiple()