|
@@ -0,0 +1,150 @@
|
|
|
+package entity
|
|
|
+
|
|
|
+import (
|
|
|
+ "app.yhyue.com/moapp/jybase/common"
|
|
|
+ "app.yhyue.com/moapp/jybase/encrypt"
|
|
|
+ "fmt"
|
|
|
+ "jy/src/jfw/modules/bigmember/src/db"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+const (
|
|
|
+ TableMemberReportProject = "member_report_project" // 大会员周报月报-项目明细表
|
|
|
+)
|
|
|
+
|
|
|
+type ReportProjectInfoParam struct {
|
|
|
+ Items []string `json:"items"` // 订阅关键词组
|
|
|
+ Area map[string][]string `json:"area"` // 省份城市
|
|
|
+ Industry []string `json:"industry"` // 行业
|
|
|
+ Buyerclass []string `json:"buyerclass"` // 采购单位类型
|
|
|
+ Buyer string `json:"buyer"` // 采购单位
|
|
|
+ Winner string `json:"winner"` // 中标单位
|
|
|
+ Sort int `json:"sort"` // 排序默认0:成交时间倒序;1:项目金额倒序
|
|
|
+ Start int `json:"start"` // 开始时间
|
|
|
+ End int `json:"end"` // 结束时间
|
|
|
+ PageSize int `json:"pageSize"` // 默认每页10条
|
|
|
+ PageNum int `json:"pageNum"` // 默认当前第一页
|
|
|
+}
|
|
|
+
|
|
|
+// GetReportProjectInfo 周报/月报查询项目明细
|
|
|
+func GetReportProjectInfo(param *ReportProjectInfoParam, positionId int64) (data []map[string]interface{}, total int64) {
|
|
|
+ data = []map[string]interface{}{}
|
|
|
+ // 处理查询条件
|
|
|
+ q := ""
|
|
|
+ values := []interface{}{positionId, param.Start, param.End} // 用于最后sql查询传的值
|
|
|
+ qstr := []string{} // 用于后边拼接查询条件
|
|
|
+ if param.Items != nil && len(param.Items) > 0 {
|
|
|
+ tmpArr := []string{}
|
|
|
+ for i := 0; i < len(param.Items); i++ {
|
|
|
+ tmpArr = append(tmpArr, "find_in_set(?,items)")
|
|
|
+ values = append(values, param.Items[i])
|
|
|
+ } // 关键词组
|
|
|
+ qstr = append(qstr, fmt.Sprintf("(%s)", strings.Join(tmpArr, " or ")))
|
|
|
+ }
|
|
|
+ // 省份
|
|
|
+ if param.Area != nil && len(param.Area) > 0 {
|
|
|
+ area, city := []interface{}{}, []interface{}{} // 存值
|
|
|
+ areaS, cityS := []string{}, []string{} // 存占位符
|
|
|
+ for k, v := range param.Area {
|
|
|
+ if len(v) == 0 { // 省份
|
|
|
+ area = append(area, k)
|
|
|
+ areaS = append(areaS, "?")
|
|
|
+ } else { // 城市
|
|
|
+ for i := 0; i < len(v); i++ {
|
|
|
+ city = append(city, v[i])
|
|
|
+ cityS = append(cityS, "?")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ area_ := []string{}
|
|
|
+ if len(areaS) > 0 {
|
|
|
+ area_ = append(area_, fmt.Sprintf("area in (%s)", strings.Join(areaS, ","))) // 处理省份语句
|
|
|
+ values = append(values, area...)
|
|
|
+ }
|
|
|
+ if len(cityS) > 0 {
|
|
|
+ area_ = append(area_, fmt.Sprintf("city in (%s)", strings.Join(cityS, ","))) // 处理省份语句
|
|
|
+ values = append(values, city...)
|
|
|
+ }
|
|
|
+ qstr = append(qstr, fmt.Sprintf("(%s)", strings.Join(area_, " or ")))
|
|
|
+ }
|
|
|
+ // 行业
|
|
|
+ if param.Industry != nil && len(param.Industry) > 0 {
|
|
|
+ tmpArr := []string{}
|
|
|
+ for i := 0; i < len(param.Industry); i++ {
|
|
|
+ tmpArr = append(tmpArr, "?")
|
|
|
+ values = append(values, param.Industry[i])
|
|
|
+ }
|
|
|
+ qstr = append(qstr, fmt.Sprintf("subscopeclass in (%s)", strings.Join(tmpArr, ",")))
|
|
|
+ }
|
|
|
+ // 采购单位类型
|
|
|
+ if param.Buyerclass != nil && len(param.Buyerclass) > 0 {
|
|
|
+ tmpArr := []string{}
|
|
|
+ for i := 0; i < len(param.Buyerclass); i++ {
|
|
|
+ tmpArr = append(tmpArr, "?")
|
|
|
+ values = append(values, param.Buyerclass[i])
|
|
|
+ }
|
|
|
+ qstr = append(qstr, fmt.Sprintf("buyerclass in (%s)", strings.Join(tmpArr, ",")))
|
|
|
+ }
|
|
|
+ // 采购单位
|
|
|
+ if param.Buyer != "" {
|
|
|
+ qstr = append(qstr, "buyer like ?")
|
|
|
+ values = append(values, fmt.Sprintf("%%%s%%", param.Buyer))
|
|
|
+ }
|
|
|
+ // 中标单位
|
|
|
+ if param.Winner != "" {
|
|
|
+ qstr = append(qstr, "winner like ?")
|
|
|
+ values = append(values, fmt.Sprintf("%%%s%%", param.Winner))
|
|
|
+ }
|
|
|
+ if len(qstr) > 0 {
|
|
|
+ q = " and "
|
|
|
+ }
|
|
|
+ q += strings.Join(qstr, " and ")
|
|
|
+ // 查询数量
|
|
|
+ CountQuery := fmt.Sprintf("select count(1) from %s where position_id=? and start_time>=? and end_time<=? %s ", TableMemberReportProject, q)
|
|
|
+ total = db.Base.CountBySql(CountQuery, values...)
|
|
|
+ if total == 0 {
|
|
|
+ return data, 0
|
|
|
+ }
|
|
|
+ orderby := "last_time desc"
|
|
|
+ if param.Sort == 1 {
|
|
|
+ orderby = " (if(bidamount >0,bidamount,budget)) desc"
|
|
|
+ }
|
|
|
+ query := fmt.Sprintf("select * from %s where position_id=? and start_time>=? and end_time<=? %s order by %s limit %d,%d", TableMemberReportProject, q, orderby, (param.PageNum-1)*param.PageSize, param.PageSize)
|
|
|
+ rs := db.Base.SelectBySql(query, values...)
|
|
|
+ if rs != nil && len(*rs) > 0 {
|
|
|
+ data = *rs
|
|
|
+ }
|
|
|
+ return data, total
|
|
|
+}
|
|
|
+
|
|
|
+// ReportProjectInfoFormat 周报/月报 项目明细 格式化数据
|
|
|
+func ReportProjectInfoFormat(data []map[string]interface{}) []map[string]interface{} {
|
|
|
+ rs := []map[string]interface{}{}
|
|
|
+ for i := 0; i < len(data); i++ {
|
|
|
+ tmp := map[string]interface{}{}
|
|
|
+ tmpWinner := common.ObjToString(data[i]["winner"])
|
|
|
+ tmpWinnerId := common.ObjToString(data[i]["winner_id"])
|
|
|
+ // 中标id 加密
|
|
|
+ splitWinnerId := strings.Split(tmpWinnerId, ",")
|
|
|
+ winIdArr := []string{}
|
|
|
+ for j := 0; j < len(splitWinnerId); j++ {
|
|
|
+ if splitWinnerId[j] != "" {
|
|
|
+ splitWinnerId[j] = encrypt.EncodeArticleId2ByCheck(splitWinnerId[j])
|
|
|
+ }
|
|
|
+ winIdArr = append(winIdArr, splitWinnerId[j])
|
|
|
+ }
|
|
|
+ tmp["winnerId"] = winIdArr
|
|
|
+ tmp["winner"] = strings.Split(tmpWinner, ",")
|
|
|
+ tmp["name"] = common.ObjToString(data[i]["name"])
|
|
|
+ tmp["area"] = data[i]["area"]
|
|
|
+ tmp["city"] = data[i]["city"]
|
|
|
+ tmp["bidStatus"] = data[i]["bidstatus"]
|
|
|
+ tmp["buyerClass"] = data[i]["buyerclass"]
|
|
|
+ tmp["bidAmount"] = data[i]["bidamount"]
|
|
|
+ tmp["budget"] = data[i]["budget"]
|
|
|
+ tmp["buyer"] = data[i]["buyer"]
|
|
|
+ tmp["lastTime"] = data[i]["last_time"]
|
|
|
+ rs = append(rs, tmp)
|
|
|
+ }
|
|
|
+ return rs
|
|
|
+}
|