fuwencai 1 год назад
Родитель
Сommit
e98c1520af

+ 2 - 2
jyBXCore/api/bxcore.api

@@ -197,8 +197,8 @@ type (
 		Source          []int64  `json:"source,optional"`          // 标讯项目来源 -1:全部  1:个人订阅 2:企业自动分发 3:企业手动分发
 		BidWay          int64    `json:"bidWay,optional"`          // 投标类型 -1:全部 1:直接投标 2:渠道投标
 		Isparticipate   int64    `json:"isparticipate,optional"`   // 参标状态;-1:全部 0:未参标 1:是
-		UpdateStartTime string   `json:"updateStartTime,optional"` //
-		UpdateEndTime   string   `json:"updateEndTime,optional"`   //
+		UpdateStartTime int64    `json:"updateStartTime,optional"` //
+		UpdateEndTime   int64    `json:"updateEndTime,optional"`   //
 		PageSize        int64    `json:"pageSize,optional"`        //
 		PageNum         int64    `json:"pageNum,optional"`         //
 	}

+ 2 - 2
jyBXCore/api/internal/types/types.go

@@ -193,8 +193,8 @@ type ProjectDetailReq struct {
 	Source          []int64  `json:"source,optional"`          // 标讯项目来源 -1:全部  1:个人订阅 2:企业自动分发 3:企业手动分发
 	BidWay          int64    `json:"bidWay,optional"`          // 投标类型 -1:全部 1:直接投标 2:渠道投标
 	Isparticipate   int64    `json:"isparticipate,optional"`   // 参标状态;-1:全部 0:未参标 1:是
-	UpdateStartTime string   `json:"updateStartTime,optional"` //
-	UpdateEndTime   string   `json:"updateEndTime,optional"`   //
+	UpdateStartTime int64    `json:"updateStartTime,optional"` //
+	UpdateEndTime   int64    `json:"updateEndTime,optional"`   //
 	PageSize        int64    `json:"pageSize,optional"`        //
 	PageNum         int64    `json:"pageNum,optional"`         //
 }

+ 2 - 2
jyBXCore/rpc/bxcore.proto

@@ -466,8 +466,8 @@ message ProjectDetailsReq{
   int64 endTime = 7;
   repeated int64 source = 8; // source  0:全部  1:个人订阅 2:企业自动分发 3:企业手动分发
   int64 bidWay = 9; //   -1:全部 1:直接投标 2:渠道投标
-  string bidUpdateStartTime =10;// 参标状态跟新时间开始
-  string bidUpdateEndTime =11;// 参标状态跟新时间结束
+  int64 bidUpdateStartTime =10;// 参标状态跟新时间开始
+  int64 bidUpdateEndTime =11;// 参标状态跟新时间结束
   int64 isParticipate = 12;// -1全部 1-已参标是 0-未参标否
   int64 PageNum = 13;// 页码 从1开始
   int64 PageSize =14;// 每页条数 默认50

+ 74 - 40
jyBXCore/rpc/service/participateStatistics.go

@@ -2,6 +2,7 @@ package service
 
 import (
 	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/redis"
 	"encoding/json"
@@ -520,7 +521,7 @@ func QueryHandle(isAdmin bool, startTime, endTime int64, personArrStr string, so
 	if len(source) > 0 {
 		sourceArr := []string{}
 		for i := 0; i < len(source); i++ {
-			sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%s', a.source)", source[i]))
+			sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%d', a.source)", source[i]))
 		}
 		query = append(query, fmt.Sprintf(" (%s) ", strings.Join(sourceArr, " or ")))
 	}
@@ -535,7 +536,7 @@ func (in *ParticipateStatistics) ProjectDetails(entUserIdArr []string, detailReq
 	queryType := GetQueryType(detailReq)
 	query, countQuery := GetDetailQuery(isAdmin, personArrStr, detailReq, queryType)
 	totalCount := IC.BaseMysql.CountBySql(countQuery)
-	if totalCount == 0 {
+	if totalCount <= 0 {
 		return
 	}
 	// 处理数据  这里只是筛选出项目id和阶段信息
@@ -558,16 +559,21 @@ func (in *ParticipateStatistics) ProjectDetails(entUserIdArr []string, detailReq
 // 这个查询只用查出符合筛选条件的项目id 以及该项目对应的stage
 // 查询类型  0空搜索 全连接 1查左边 连右表查stage 2只查右表 3内连接
 func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetailsReq, queryType int) (string, string) {
-
+	// 处理分页
+	if req.PageNum == 0 && req.PageSize == 0 {
+		req.PageNum = 1
+		req.PageSize = 50
+	}
 	// 这是因为数据库中 0是未参标 1是已参标, 接收参数时和其他默认参数保持一致 0-全部 1 是未参标 2 是已参标
 	req.IsParticipate -= 1
 	if queryType == 0 {
 		// 空搜索调整
-		query1, query2, query3 := []string{}, []string{}, []string{}
+		query1, query2 := []string{}, []string{}
+		query3 := ""
 		//没有传时间,默认时间处理
-		var start = time.Now().AddDate(0, 0, -30)
-		query1 = append(query1, fmt.Sprintf(" a.ymd >= %s ", start.Format("20060102")))
-		query2 = append(query2, fmt.Sprintf(" b.update_date >= %s ", start.Format("20060102")))
+		var start = time.Now().AddDate(0, 0, -300)
+		query1 = append(query1, fmt.Sprintf(" a.ymd >= %s ", start.Local().Format("20060102")))
+		query2 = append(query2, fmt.Sprintf(" b.update_date >= '%s' ", start.Local().Format(date.Date_Full_Layout)))
 		if isAdmin {
 			//是管理员
 			query1 = append(query1, fmt.Sprintf(" a.ent_user_id in (%s) ", personArrStr))
@@ -578,9 +584,9 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 			}
 			if len(personArr) > 0 {
 				personStr := strings.Join(personArr, " or ")
-				query2 = append(query2, fmt.Sprintf(" (%s)"))
-				query3 = append(query3, fmt.Sprintf("  (%s)", personStr))
+				query2 = append(query2, fmt.Sprintf(" (%s)", personStr))
 			}
+			query3 = fmt.Sprintf("b.ent_id='%d'", req.EntId) // 连接时右表的条件
 		} else {
 			//不是管理员
 			query1 = append(query1, fmt.Sprintf(" a.position_id = %s ", personArrStr))
@@ -591,27 +597,31 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 			}
 			if len(personArr) > 0 {
 				personStr := strings.Join(personArr, " or ")
-				query2 = append(query2, fmt.Sprintf(" (%s)"))
-				query3 = append(query3, fmt.Sprintf("  (%s)", personStr))
+				query2 = append(query2, fmt.Sprintf(" (%s)", personStr))
 			}
+			if req.PositionType > 0 {
+				query3 = fmt.Sprintf("b.ent_id='%d'", req.EntId) // 连接时右表的条件
+			} else {
+				query3 = fmt.Sprintf("b.position_ids='%d'", req.PositionId) // 连接时右表的条件
+			}
+
 		}
 		q := `SELECT A.project_id, B.stage
 				FROM
 				(SELECT DISTINCT(project_id)
 				FROM
-					(SELECT project_id FROM participate_push_statistics
+					(SELECT project_id FROM participate_push_statistics a
 					WHERE %s UNION 
 					SELECT project_id
-					FROM participate_stage_statistics
+					FROM participate_stage_statistics b
 					WHERE %s)
 				LIMIT %d , %d) A
                 LEFT JOIN
-				participate_stage_statistics B ON A.project_id = B.project_id where %s`
-		q2 := "select distinct(position_id) from participate_push_statistics where %s union select project_id from participate_stage_statistics where %s "
+				participate_stage_statistics B ON A.project_id = B.project_id and  %s` // and 连接前对右表过滤
+		q2 := "select count(project_id) from (select distinct(project_id) from participate_push_statistics a where %s union select project_id from participate_stage_statistics b where %s )"
 		q1Str := strings.Join(query1, " and ")
 		q2Str := strings.Join(query2, " and ")
-		q3Str := strings.Join(query3, " and ")
-		return fmt.Sprintf(q, q1Str, q2Str, q3Str), fmt.Sprintf(q2, q1Str, q2Str)
+		return fmt.Sprintf(q, q1Str, q2Str, (req.PageNum-1)*req.PageSize, req.PageSize, query3), fmt.Sprintf(q2, q1Str, q2Str)
 	}
 	var q, qCount string
 	query := []string{}
@@ -635,13 +645,13 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 		if req.StartTime == 0 && req.EndTime == 0 {
 			//没有传时间,默认时间处理
 			var start = time.Now().AddDate(0, 0, -30)
-			query = append(query, fmt.Sprintf(" a.ymd >= %s ", start.Format("20060102")))
+			query = append(query, fmt.Sprintf(" a.ymd >= %s ", start.Local().Format("20060102")))
 		}
 		if req.StartTime != 0 {
 			query = append(query, fmt.Sprintf(" a.ymd >= %d ", req.StartTime))
 		}
 		if req.EndTime != 0 {
-			query = append(query, fmt.Sprintf(" a.ymd <= %d ", req.EndTime))
+			query = append(query, fmt.Sprintf(" a.ymd < %d ", req.EndTime))
 		}
 		// 标讯/项目来源
 		if len(req.Source) > 0 {
@@ -651,7 +661,7 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%d', a.source)", 1))
 					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%d', a.source)", 2))
 				} else {
-					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%s', a.source)", sourceArr[i]))
+					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%d', a.source)", req.Source[i]))
 				}
 			}
 			query = append(query, fmt.Sprintf(" (%s) ", strings.Join(sourceArr, " or ")))
@@ -677,18 +687,35 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 			if len(personArr) > 0 {
 				personStr := strings.Join(personArr, " or ")
 				query = append(query, personStr)
-
 			}
 		} else {
 			//不是管理员
 			query = append(query, fmt.Sprintf(" FIND_IN_SET('%s', b.position_ids)", personArrStr))
 		}
+		// 右连接无默认时间时
+		if req.BidUpdateStartTime == 0 && req.BidUpdateEndTime == 0 {
+			var start = time.Now().AddDate(0, 0, -30)
+			query = append(query, fmt.Sprintf(" b.update_date >= '%s' ", start.Local().Format(date.Date_Full_Layout)))
+		}
+
 		// 参标状态更新时间
-		if req.BidUpdateStartTime != "" {
-			query = append(query, fmt.Sprintf("b.update_date > %s", req.BidUpdateStartTime))
+		if req.BidUpdateStartTime != 0 {
+			bidStart_, err := time.ParseInLocation(date.Date_yyyyMMdd, fmt.Sprintf("%d", req.BidUpdateStartTime), time.Local)
+			if err != nil {
+				bidStart_ = time.Now().AddDate(0, 0, -30)
+				log.Println("时间转换失败,使用默认值:", err)
+			}
+			bidStart := date.FormatDate(&bidStart_, date.Date_Full_Layout)
+			query = append(query, fmt.Sprintf("b.update_date >= '%s'", bidStart))
 		}
-		if req.BidUpdateEndTime != "" {
-			query = append(query, fmt.Sprintf("b.update_date > %s", req.BidUpdateStartTime))
+		if req.BidUpdateEndTime != 0 {
+			bidEnd_, err := time.ParseInLocation(date.Date_yyyyMMdd, fmt.Sprintf("%d", req.BidUpdateEndTime), time.Local)
+			if err != nil {
+				bidEnd_ = time.Now().AddDate(0, 0, -30)
+				log.Println("时间转换失败,使用默认值:", err)
+			}
+			bidEnd := date.FormatDate(&bidEnd_, date.Date_Full_Layout)
+			query = append(query, fmt.Sprintf("b.update_date < '%s'", bidEnd))
 		}
 		if req.BidWay != 0 {
 			query = append(query, fmt.Sprintf("b.bid_way = %d", req.BidWay))
@@ -719,7 +746,7 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 			query = append(query, fmt.Sprintf(" a.ymd >= %d ", req.StartTime))
 		}
 		if req.EndTime != 0 {
-			query = append(query, fmt.Sprintf(" a.ymd <= %d ", req.EndTime))
+			query = append(query, fmt.Sprintf(" a.ymd < %d ", req.EndTime))
 		}
 		if len(req.Source) > 0 {
 			sourceArr := []string{}
@@ -728,7 +755,7 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%d', a.source)", 1))
 					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%d', a.source)", 2))
 				} else {
-					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%s', a.source)", sourceArr[i]))
+					sourceArr = append(sourceArr, fmt.Sprintf(" FIND_IN_SET('%d', a.source)", req.Source[i]))
 				}
 			}
 			query = append(query, fmt.Sprintf(" (%s) ", strings.Join(sourceArr, " or ")))
@@ -741,12 +768,24 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 		if req.BidWay != 0 {
 			query = append(query, fmt.Sprintf("a.bid_way = %d", req.BidWay))
 		}
-		// 参标状态更新时间
-		if req.BidUpdateStartTime != "" {
-			query = append(query, fmt.Sprintf("b.update_date > %s", req.BidUpdateStartTime))
+		//  参标状态更新时间
+		if req.BidUpdateStartTime != 0 {
+			bidStart_, err := time.ParseInLocation(date.Date_yyyyMMdd, fmt.Sprintf("%d", req.BidUpdateStartTime), time.Local)
+			if err != nil {
+				bidStart_ = time.Now().AddDate(0, 0, -30)
+				log.Println("时间转换失败,使用默认值:", err)
+			}
+			bidStart := date.FormatDate(&bidStart_, date.Date_Full_Layout)
+			query = append(query, fmt.Sprintf("b.update_date >= '%s'", bidStart))
 		}
-		if req.BidUpdateEndTime != "" {
-			query = append(query, fmt.Sprintf("b.update_date > %s", req.BidUpdateStartTime))
+		if req.BidUpdateEndTime != 0 {
+			bidEnd_, err := time.ParseInLocation(date.Date_yyyyMMdd, fmt.Sprintf("%d", req.BidUpdateEndTime), time.Local)
+			if err != nil {
+				bidEnd_ = time.Now().AddDate(0, 0, -30)
+				log.Println("时间转换失败,使用默认值:", err)
+			}
+			bidEnd := date.FormatDate(&bidEnd_, date.Date_Full_Layout)
+			query = append(query, fmt.Sprintf("b.update_date < '%s'", bidEnd))
 		}
 		q = "select distinct(a.project_id),b.stage,a.id,b.id   from participate_push_statistics a inner join  participate_stage_statistics b on(b.project_id=a.project_id %s) where %s order by a.id desc,b.id desc"
 		qCount = "select count(distinct(a.project_id))   from participate_push_statistics a inner join participate_stage_statistics b on(b.project_id=a.project_id %s) where %s"
@@ -755,11 +794,6 @@ func GetDetailQuery(isAdmin bool, personArrStr string, req *bxcore.ProjectDetail
 		q = fmt.Sprintf(q, joinStr, strings.Join(query, " and "))
 		qCount = fmt.Sprintf(qCount, joinStr, strings.Join(query, " and "))
 	}
-	// 处理分页
-	if req.PageNum == 0 && req.PageSize == 0 {
-		req.PageNum = 1
-		req.PageSize = 50
-	}
 	q = fmt.Sprintf("%s limit %d,%d", q, (req.PageNum-1)*req.PageSize, req.PageSize)
 	return q, qCount
 }
@@ -875,17 +909,17 @@ FROM  participate_push_statistics A inner join (SELECT
 // IsParticipate 接收参数时 0 全部 1 未参标 2已参标  数据库中 未参标是0
 func GetQueryType(in *bxcore.ProjectDetailsReq) int {
 	// TODO 调整
-	if in.BidUpdateStartTime == "" && in.BidUpdateEndTime == "" && in.StartTime == 0 && in.EndTime == 0 && in.IsParticipate == -1 && in.BidWay == 0 && len(in.Source) == 0 {
+	if in.BidUpdateStartTime == 0 && in.BidUpdateEndTime == 0 && in.StartTime == 0 && in.EndTime == 0 && in.IsParticipate == 0 && in.BidWay == 0 && len(in.Source) == 0 {
 		return 0
 	}
 	if in.IsParticipate == 1 {
 		// 未参标只筛选推送表 右表条件无效
 		return 1
 	}
-	if (in.StartTime != 0 || in.EndTime != 0 || len(in.Source) > 0) && (in.BidUpdateStartTime == "" && in.BidUpdateEndTime == "" && in.IsParticipate != 2) {
+	if (in.StartTime != 0 || in.EndTime != 0 || len(in.Source) > 0) && (in.BidUpdateStartTime == 0 && in.BidUpdateEndTime == 0 && in.IsParticipate != 2) {
 		return 1
 	}
-	if (in.StartTime == 0 && in.EndTime == 0 && len(in.Source) == 0) && (in.BidUpdateStartTime != "" || in.BidUpdateEndTime == "" || in.IsParticipate == 2 || in.BidWay != 0) {
+	if (in.StartTime == 0 && in.EndTime == 0 && len(in.Source) == 0) && (in.BidUpdateStartTime != 0 || in.BidUpdateEndTime == 0 || in.IsParticipate == 2 || in.BidWay != 0) {
 		return 2
 	}
 	return 3

+ 13 - 13
jyBXCore/rpc/type/bxcore/bxcore.pb.go

@@ -4211,13 +4211,13 @@ type ProjectDetailsReq struct {
 	DeptId             int64    `protobuf:"varint,5,opt,name=deptId,proto3" json:"deptId,omitempty"`              //部门id
 	StartTime          int64    `protobuf:"varint,6,opt,name=startTime,proto3" json:"startTime,omitempty"`
 	EndTime            int64    `protobuf:"varint,7,opt,name=endTime,proto3" json:"endTime,omitempty"`
-	Source             []int64  `protobuf:"varint,8,rep,packed,name=source,proto3" json:"source,omitempty"`                  // source  0:全部  1:个人订阅 2:企业自动分发 3:企业手动分发
-	BidWay             int64    `protobuf:"varint,9,opt,name=bidWay,proto3" json:"bidWay,omitempty"`                         //   -1:全部 1:直接投标 2:渠道投标
-	BidUpdateStartTime string   `protobuf:"bytes,10,opt,name=bidUpdateStartTime,proto3" json:"bidUpdateStartTime,omitempty"` // 参标状态跟新时间开始
-	BidUpdateEndTime   string   `protobuf:"bytes,11,opt,name=bidUpdateEndTime,proto3" json:"bidUpdateEndTime,omitempty"`     // 参标状态跟新时间结束
-	IsParticipate      int64    `protobuf:"varint,12,opt,name=isParticipate,proto3" json:"isParticipate,omitempty"`          // -1全部 1-已参标是 0-未参标否
-	PageNum            int64    `protobuf:"varint,13,opt,name=PageNum,proto3" json:"PageNum,omitempty"`                      // 页码 从1开始
-	PageSize           int64    `protobuf:"varint,14,opt,name=PageSize,proto3" json:"PageSize,omitempty"`                    // 每页条数 默认50
+	Source             []int64  `protobuf:"varint,8,rep,packed,name=source,proto3" json:"source,omitempty"`                   // source  0:全部  1:个人订阅 2:企业自动分发 3:企业手动分发
+	BidWay             int64    `protobuf:"varint,9,opt,name=bidWay,proto3" json:"bidWay,omitempty"`                          //   -1:全部 1:直接投标 2:渠道投标
+	BidUpdateStartTime int64    `protobuf:"varint,10,opt,name=bidUpdateStartTime,proto3" json:"bidUpdateStartTime,omitempty"` // 参标状态跟新时间开始
+	BidUpdateEndTime   int64    `protobuf:"varint,11,opt,name=bidUpdateEndTime,proto3" json:"bidUpdateEndTime,omitempty"`     // 参标状态跟新时间结束
+	IsParticipate      int64    `protobuf:"varint,12,opt,name=isParticipate,proto3" json:"isParticipate,omitempty"`           // -1全部 1-已参标是 0-未参标否
+	PageNum            int64    `protobuf:"varint,13,opt,name=PageNum,proto3" json:"PageNum,omitempty"`                       // 页码 从1开始
+	PageSize           int64    `protobuf:"varint,14,opt,name=PageSize,proto3" json:"PageSize,omitempty"`                     // 每页条数 默认50
 }
 
 func (x *ProjectDetailsReq) Reset() {
@@ -4322,18 +4322,18 @@ func (x *ProjectDetailsReq) GetBidWay() int64 {
 	return 0
 }
 
-func (x *ProjectDetailsReq) GetBidUpdateStartTime() string {
+func (x *ProjectDetailsReq) GetBidUpdateStartTime() int64 {
 	if x != nil {
 		return x.BidUpdateStartTime
 	}
-	return ""
+	return 0
 }
 
-func (x *ProjectDetailsReq) GetBidUpdateEndTime() string {
+func (x *ProjectDetailsReq) GetBidUpdateEndTime() int64 {
 	if x != nil {
 		return x.BidUpdateEndTime
 	}
-	return ""
+	return 0
 }
 
 func (x *ProjectDetailsReq) GetIsParticipate() int64 {
@@ -6340,10 +6340,10 @@ var file_bxcore_proto_rawDesc = []byte{
 	0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x64, 0x57, 0x61,
 	0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x62, 0x69, 0x64, 0x57, 0x61, 0x79, 0x12,
 	0x2e, 0x0a, 0x12, 0x62, 0x69, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72,
-	0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x69, 0x64,
+	0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x62, 0x69, 0x64,
 	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12,
 	0x2a, 0x0a, 0x10, 0x62, 0x69, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x54,
-	0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x69, 0x64, 0x55, 0x70,
+	0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x62, 0x69, 0x64, 0x55, 0x70,
 	0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x69,
 	0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01,
 	0x28, 0x03, 0x52, 0x0d, 0x69, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74,