|
@@ -0,0 +1,154 @@
|
|
|
+package report
|
|
|
+
|
|
|
+import (
|
|
|
+ . "api"
|
|
|
+ "db"
|
|
|
+ "fmt"
|
|
|
+ "github.com/go-xweb/xweb"
|
|
|
+ "log"
|
|
|
+ qutil "qfw/util"
|
|
|
+ "qfw/util/jy"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+//MarketAnalysis 市场分析报告路由定义
|
|
|
+type MarketAnalysis struct {
|
|
|
+ *xweb.Action
|
|
|
+ doAnalysis xweb.Mapper `xweb:"/marketAnalysis/doAnalysis"` //市场分析分析查询(此接口只做为保存查询条件,返回记录id)
|
|
|
+ getAnalysisResult xweb.Mapper `xweb:"/marketAnalysis/getAnalysisResult"` //获取分析报告结果(根据记录id查询报告结果)
|
|
|
+ analysisHistory xweb.Mapper `xweb:"/marketAnalysis/analysisHistory"` //市场分析报告历史记录
|
|
|
+}
|
|
|
+
|
|
|
+const ReportHistoryTable = "marketAnalysisReport"
|
|
|
+
|
|
|
+//此处未模拟接口返回数据,开发完毕后请删除
|
|
|
+var (
|
|
|
+ //模拟历史数据
|
|
|
+ historyReport = []map[string]interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "id": "5e8eb60ae138234b4f91aacc", //加密处理
|
|
|
+ "keysItems": "[{\"a_key\":[{\"appendkey\":[\"引擎\"],\"key\":[\"软件\"],\"matchway\":1,\"notkey\":[\"网站\"],\"updatetime\":1640657393},{\"appendkey\":[\"人工\"],\"key\":[\"智能\"],\"matchway\":0,\"notkey\":[\"报告\"],\"updatetime\":1640657384}],\"s_item\":\"科技\",\"updatetime\":1640657329},{\"a_key\":[{\"appendkey\":[\"绿化\"],\"key\":[\"道路\"],\"matchway\":0,\"notkey\":[\"路面\"],\"updatetime\":1640657384}],\"s_item\":\"建筑\",\"updatetime\":1640657329}]",
|
|
|
+ "rangeTime": "1546272000-1609430400",
|
|
|
+ "city": "郑州,开封,商丘",
|
|
|
+ "area": "北京",
|
|
|
+ "industry": "行政办公_办公用品,能源化工_化工产品,机械设备_矿山机械",
|
|
|
+ "buyerclass": "传媒,检察院,民政,农业",
|
|
|
+ "createTime": time.Now().Unix(),
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "id": "5e8eb60ae138234b4f91aacc", //加密处理
|
|
|
+ "keysItems": "[{\"a_key\":[{\"appendkey\":[\"引擎\"],\"key\":[\"软件\"],\"matchway\":1,\"notkey\":[\"网站\"],\"updatetime\":1640657393},{\"appendkey\":[\"人工\"],\"key\":[\"智能\"],\"matchway\":0,\"notkey\":[\"报告\"],\"updatetime\":1640657384}],\"s_item\":\"科技\",\"updatetime\":1640657329},{\"a_key\":[{\"appendkey\":[\"绿化\"],\"key\":[\"道路\"],\"matchway\":0,\"notkey\":[\"路面\"],\"updatetime\":1640657384}],\"s_item\":\"建筑\",\"updatetime\":1640657329}]",
|
|
|
+ "rangeTime": "1546272000-1609430400",
|
|
|
+ "city": "郑州,开封,商丘",
|
|
|
+ "area": "北京",
|
|
|
+ "industry": "行政办公_办公用品,能源化工_化工产品,机械设备_矿山机械",
|
|
|
+ "buyerclass": "传媒,检察院,民政,农业",
|
|
|
+ "createTime": time.Now().Unix(),
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "id": "5e8eb60ae138234b4f91aacc",
|
|
|
+ "keysItems": "[{\"a_key\":[{\"appendkey\":[\"引擎\"],\"key\":[\"软件\"],\"matchway\":1,\"notkey\":[\"网站\"],\"updatetime\":1640657393},{\"appendkey\":[\"人工\"],\"key\":[\"智能\"],\"matchway\":0,\"notkey\":[\"报告\"],\"updatetime\":1640657384}],\"s_item\":\"科技\",\"updatetime\":1640657329},{\"a_key\":[{\"appendkey\":[\"绿化\"],\"key\":[\"道路\"],\"matchway\":0,\"notkey\":[\"路面\"],\"updatetime\":1640657384}],\"s_item\":\"建筑\",\"updatetime\":1640657329}]",
|
|
|
+ "rangeTime": "1546272000-1609430400",
|
|
|
+ "city": "郑州,开封,商丘",
|
|
|
+ "area": "北京",
|
|
|
+ "industry": "行政办公_办公用品,能源化工_化工产品,机械设备_矿山机械",
|
|
|
+ "buyerclass": "传媒,检察院,民政,农业",
|
|
|
+ "createTime": time.Now().Unix(),
|
|
|
+ },
|
|
|
+ }
|
|
|
+)
|
|
|
+
|
|
|
+//checkPower 权限校验
|
|
|
+func checkPower(userId string) error {
|
|
|
+ if userId == "" {
|
|
|
+ return fmt.Errorf("未登录")
|
|
|
+ }
|
|
|
+ //仅购买《周报/月报/定制化市场分析报告》的大会员有权限
|
|
|
+ bigMeg := jy.GetBigVipUserBaseMsg(userId, db.Mysql, db.Mgo)
|
|
|
+ if bigMeg.Status <= 0 || !bigMeg.CheckBigVipBackPower("report") {
|
|
|
+ return fmt.Errorf("非法请求")
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+//DoAnalysis 开始分析报告
|
|
|
+func (this *MarketAnalysis) DoAnalysis() {
|
|
|
+ userId := qutil.ObjToString(this.GetSession("userId"))
|
|
|
+ rData, errMsg := func() (interface{}, error) {
|
|
|
+ if err := checkPower(userId); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ //接受参数
|
|
|
+ keysItemsStr := this.GetString("keysItems") //分析内容【字符串】结构和o_member_jy.a_items保持一致
|
|
|
+ rangeTime := this.GetString("rangeTime") //时间【字符串】 时间戳开始-结束时间戳
|
|
|
+ area := this.GetString("area") //省份【字符串】多个省份用逗号拼接
|
|
|
+ city := this.GetString("city") //城市【字符串】多个城市用逗号拼接
|
|
|
+ industry := this.GetString("industry") //行业【字符串】多个行业用逗号拼接
|
|
|
+ buyerclass := this.GetString("buyerclass") //采购单位类型【字符串】多个采购单位类型用逗号拼接
|
|
|
+
|
|
|
+ log.Printf("%s DoAnalysis 接受到的参数\n keysItemsStr:%s\n keysItemsStr:%s\n keysItemsStr:%s\n "+
|
|
|
+ "keysItemsStr:%s\n keysItemsStr:%s\n keysItemsStr:%s\n", userId, keysItemsStr, rangeTime, area, city, industry, buyerclass)
|
|
|
+ //存储分析记录
|
|
|
+ //saveId:=db.Mgo.Save(ReportHistoryTable,map[string]interface{}{})
|
|
|
+ saveId := "5e8eb60ae138234b4f91aacc" //此id返回时需要加密
|
|
|
+ return saveId, nil
|
|
|
+ }()
|
|
|
+ if errMsg != nil {
|
|
|
+ log.Printf("%s MarketAnalysis DoAnalysis Error:%s\n", userId, errMsg.Error())
|
|
|
+ }
|
|
|
+ this.ServeJson(NewResult(rData, errMsg))
|
|
|
+}
|
|
|
+
|
|
|
+//GetAnalysisResult 获取分析结果
|
|
|
+func (this *MarketAnalysis) GetAnalysisResult() {
|
|
|
+ userId := qutil.ObjToString(this.GetSession("userId"))
|
|
|
+ rData, errMsg := func() (interface{}, error) {
|
|
|
+ if err := checkPower(userId); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ //模拟返回数据
|
|
|
+ return map[string]interface{}{
|
|
|
+ "analysisStart": 1546272000, //数据统计范围-开始时间
|
|
|
+ "analysisEnd": 1609430400, //数据统计范围-结束时间
|
|
|
+ "projectNum": 37, //项目数量
|
|
|
+ "projectAmount": 65422111, //项目总金额
|
|
|
+ "winnerNum": 16, //中标单位数量
|
|
|
+ "buyerNum": 32, //采购单位数量
|
|
|
+
|
|
|
+ }, nil
|
|
|
+ }()
|
|
|
+ if errMsg != nil {
|
|
|
+ log.Printf("%s MarketAnalysis GetAnalysisResult Error:%s\n", userId, errMsg.Error())
|
|
|
+ }
|
|
|
+ this.ServeJson(NewResult(rData, errMsg))
|
|
|
+}
|
|
|
+
|
|
|
+//AnalysisHistory 分析报告历史
|
|
|
+func (this *MarketAnalysis) AnalysisHistory() {
|
|
|
+ userId := qutil.ObjToString(this.GetSession("userId"))
|
|
|
+ rData, errMsg := func() (interface{}, error) {
|
|
|
+ if err := checkPower(userId); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ //接受参数
|
|
|
+ pageNum, pageNumErr := this.GetInteger("pageNum") //页码
|
|
|
+ if pageNumErr != nil {
|
|
|
+ pageNum = 1
|
|
|
+ }
|
|
|
+ pageSize, pageSizeErr := this.GetInteger("pageSize") //每页数量
|
|
|
+ if pageSizeErr != nil {
|
|
|
+ pageNum = 10
|
|
|
+ }
|
|
|
+ log.Printf("%s DoAnalysis 接受到的参数\n pageNum:%s\n pageSize:%s\n ", userId, pageNum, pageSize)
|
|
|
+
|
|
|
+ //模拟返回数据
|
|
|
+ return map[string]interface{}{
|
|
|
+ "total": len(historyReport),
|
|
|
+ "list": historyReport[pageNum-1*pageSize : pageNum*pageSize],
|
|
|
+ }, nil
|
|
|
+ }()
|
|
|
+ if errMsg != nil {
|
|
|
+ log.Printf("%s MarketAnalysis AnalysisHistory Error:%s\n", userId, errMsg.Error())
|
|
|
+ }
|
|
|
+ this.ServeJson(NewResult(rData, errMsg))
|
|
|
+}
|