浏览代码

feat:core 投标状态更新api、接口测试提交

fuwencai 2 年之前
父节点
当前提交
5d0ce62981

+ 25 - 3
jyBXCore/api/internal/logic/participateContentLogic.go

@@ -2,6 +2,7 @@ package logic
 
 
 import (
 import (
 	"context"
 	"context"
+	"jyBXCore/rpc/type/bxcore"
 	"net/http"
 	"net/http"
 
 
 	"jyBXCore/api/internal/svc"
 	"jyBXCore/api/internal/svc"
@@ -27,7 +28,28 @@ func NewParticipateContentLogic(ctx context.Context, svcCtx *svc.ServiceContext,
 }
 }
 
 
 func (l *ParticipateContentLogic) ParticipateContent(req *types.ParticipateContentReq) (resp *types.CommonResp, err error) {
 func (l *ParticipateContentLogic) ParticipateContent(req *types.ParticipateContentReq) (resp *types.CommonResp, err error) {
-	// todo: add your logic here and delete this line
-
-	return
+	res, err := l.svcCtx.BxCore.ParticipateContent(l.ctx, &bxcore.ParticipateContentReq{
+		EntId:        req.EntId,
+		EntUserId:    req.EntUserId,
+		PositionId:   req.PositionId,
+		PositionType: req.PositionType,
+		AppId:        req.AppId,
+		MgoUserId:    req.MgoUserId,
+		AccountId:    req.AccountId,
+		UserId:       req.UserId,
+		NewUserId:    req.NewUserId,
+		Sid:          req.Sid,
+	})
+	if err != nil {
+		return &types.CommonResp{
+			Err_code: -1,
+			Err_msg:  "查询失败",
+			Data:     map[string]interface{}{},
+		}, nil
+	}
+	return &types.CommonResp{
+		Err_code: res.ErrCode,
+		Err_msg:  res.ErrMsg,
+		Data:     res.Data,
+	}, nil
 }
 }

+ 3 - 3
jyBXCore/api/internal/logic/participateInfoLogic.go

@@ -42,9 +42,9 @@ func (l *ParticipateInfoLogic) ParticipateInfo(req *types.ParticipateInfoReq) (r
 	})
 	})
 	if err != nil {
 	if err != nil {
 		return &types.CommonResp{
 		return &types.CommonResp{
-			Err_code: res.ErrCode,
-			Err_msg:  res.ErrMsg,
-			Data:     false,
+			Err_code: -1,
+			Err_msg:  "查询失败",
+			Data:     map[string]interface{}{},
 		}, nil
 		}, nil
 	}
 	}
 	return &types.CommonResp{
 	return &types.CommonResp{

+ 30 - 3
jyBXCore/api/internal/logic/participateRecordsLogic.go

@@ -2,6 +2,7 @@ package logic
 
 
 import (
 import (
 	"context"
 	"context"
+	"jyBXCore/rpc/type/bxcore"
 	"net/http"
 	"net/http"
 
 
 	"jyBXCore/api/internal/svc"
 	"jyBXCore/api/internal/svc"
@@ -27,7 +28,33 @@ func NewParticipateRecordsLogic(ctx context.Context, svcCtx *svc.ServiceContext,
 }
 }
 
 
 func (l *ParticipateRecordsLogic) ParticipateRecords(req *types.ParticipateRecordsReq) (resp *types.CommonResp, err error) {
 func (l *ParticipateRecordsLogic) ParticipateRecords(req *types.ParticipateRecordsReq) (resp *types.CommonResp, err error) {
-	// todo: add your logic here and delete this line
-
-	return
+	res, err := l.svcCtx.BxCore.ParticipateRecords(l.ctx, &bxcore.ParticipateRecordsReq{
+		EntId:        req.EntId,
+		EntUserId:    req.EntUserId,
+		PositionId:   req.PositionId,
+		PositionType: req.PositionType,
+		AppId:        req.AppId,
+		MgoUserId:    req.MgoUserId,
+		AccountId:    req.AccountId,
+		UserId:       req.UserId,
+		NewUserId:    req.NewUserId,
+		Sid:          req.Sid,
+		PageSize:     req.PageSize,
+		Page:         req.Page,
+	})
+	if err != nil {
+		return &types.CommonResp{
+			Err_code: -1,
+			Err_msg:  "查询失败",
+			Data: map[string]interface{}{
+				"list":  []map[string]interface{}{},
+				"total": 0,
+			},
+		}, nil
+	}
+	return &types.CommonResp{
+		Err_code: res.ErrCode,
+		Err_msg:  res.ErrMsg,
+		Data:     res.Data,
+	}, nil
 }
 }

+ 3 - 3
jyBXCore/api/internal/logic/participateShowLogic.go

@@ -42,9 +42,9 @@ func (l *ParticipateShowLogic) ParticipateShow(req *types.ParticipateShowReq) (r
 	})
 	})
 	if err != nil {
 	if err != nil {
 		return &types.CommonResp{
 		return &types.CommonResp{
-			Err_code: res.ErrCode,
-			Err_msg:  res.ErrMsg,
-			Data:     false,
+			Err_code: -1,
+			Err_msg:  "查询失败",
+			Data:     []map[string]interface{}{},
 		}, nil
 		}, nil
 	}
 	}
 	return &types.CommonResp{
 	return &types.CommonResp{

+ 32 - 3
jyBXCore/api/internal/logic/updateBidStatusLogic.go

@@ -2,6 +2,7 @@ package logic
 
 
 import (
 import (
 	"context"
 	"context"
+	"jyBXCore/rpc/type/bxcore"
 	"net/http"
 	"net/http"
 
 
 	"jyBXCore/api/internal/svc"
 	"jyBXCore/api/internal/svc"
@@ -27,7 +28,35 @@ func NewUpdateBidStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext, r
 }
 }
 
 
 func (l *UpdateBidStatusLogic) UpdateBidStatus(req *types.UpdateBidStatusReq) (resp *types.CommonResp, err error) {
 func (l *UpdateBidStatusLogic) UpdateBidStatus(req *types.UpdateBidStatusReq) (resp *types.CommonResp, err error) {
-	// todo: add your logic here and delete this line
-
-	return
+	res, err := l.svcCtx.BxCore.UpdateBidStatus(l.ctx, &bxcore.UpdateBidStatusReq{
+		EntId:         req.EntId,
+		EntUserId:     req.EntUserId,
+		PositionId:    req.PositionId,
+		PositionType:  req.PositionType,
+		AppId:         req.AppId,
+		MgoUserId:     req.MgoUserId,
+		AccountId:     req.AccountId,
+		UserId:        req.UserId,
+		NewUserId:     req.NewUserId,
+		BidType:       req.BidType,
+		BidStage:      req.BidStage,
+		ChannelName:   req.ChannelName,
+		ChannelPerson: req.ChannelPerson,
+		ChannelPhone:  req.ChannelPhone,
+		IsWin:         req.IsWin,
+		Winner:        req.Winner,
+		Sid:           req.Sid,
+	})
+	if err != nil {
+		return &types.CommonResp{
+			Err_code: -1,
+			Err_msg:  "更新失败",
+			Data:     false,
+		}, nil
+	}
+	return &types.CommonResp{
+		Err_code: res.ErrCode,
+		Err_msg:  res.ErrMsg,
+		Data:     res.Data,
+	}, nil
 }
 }

+ 3 - 4
jyBXCore/rpc/internal/logic/updatebidstatuslogic.go

@@ -64,13 +64,12 @@ func (l *UpdateBidStatusLogic) UpdateBidStatus(in *bxcore.UpdateBidStatusReq) (*
 	if !participateService.CheckBidPower(projectId, true) {
 	if !participateService.CheckBidPower(projectId, true) {
 		return result, fmt.Errorf("没有权限")
 		return result, fmt.Errorf("没有权限")
 	}
 	}
-	// 2. todo 更新
+	// 2. 更新
 	flag := participateService.UpdateBidStatus(in, projectId)
 	flag := participateService.UpdateBidStatus(in, projectId)
 	var err error
 	var err error
 	if !flag {
 	if !flag {
 		err = fmt.Errorf("更新失败")
 		err = fmt.Errorf("更新失败")
 	}
 	}
-	return &bxcore.UpdateBidStatusRes{
-		Data: flag,
-	}, err
+	result.Data = flag
+	return result, err
 }
 }

+ 12 - 2
jyBXCore/rpc/service/participateBid.go

@@ -11,6 +11,7 @@ import (
 	IC "jyBXCore/rpc/init"
 	IC "jyBXCore/rpc/init"
 	"jyBXCore/rpc/model/tidb"
 	"jyBXCore/rpc/model/tidb"
 	"jyBXCore/rpc/type/bxcore"
 	"jyBXCore/rpc/type/bxcore"
+	"jyBXCore/rpc/util"
 	"strings"
 	"strings"
 )
 )
 
 
@@ -283,6 +284,11 @@ func (p *ParticipateBid) CheckBidPower(projectId string, valid bool) (b bool) {
 
 
 // UpdateBidStatus 更新投标状态
 // UpdateBidStatus 更新投标状态
 func (p *ParticipateBid) UpdateBidStatus(in *bxcore.UpdateBidStatusReq, projectId string) (flag bool) {
 func (p *ParticipateBid) UpdateBidStatus(in *bxcore.UpdateBidStatusReq, projectId string) (flag bool) {
+	if p.PositionType == PositionTypeEnt {
+		pLock := util.GetParticipateLock(fmt.Sprintf("%d_%s", p.EntId, projectId))
+		pLock.Lock()
+		defer pLock.Unlock()
+	}
 	// 如果查出来旧的 那么就需要做新旧对比
 	// 如果查出来旧的 那么就需要做新旧对比
 	oldMap := p.GetLastBidStatus(projectId) // 查询出最新的招标状态信息
 	oldMap := p.GetLastBidStatus(projectId) // 查询出最新的招标状态信息
 	// 新的
 	// 新的
@@ -489,10 +495,14 @@ func processRecordStr(oldMap, newMap map[string]interface{}) (recordContent stri
 			if oldv == newv { // 没有改变
 			if oldv == newv { // 没有改变
 				continue
 				continue
 			}
 			}
+			newBidType := BidTypeMap[newv]
+			if newBidType == nil {
+				newBidType = "未选择"
+			}
 			if oldv == 0 && newv != 0 { // 说明是新增
 			if oldv == 0 && newv != 0 { // 说明是新增
-				changeStr = fmt.Sprintf(actonStr, fieldName, ": (新增)", BidTypeMap[newv])
+				changeStr = fmt.Sprintf(actonStr, fieldName, ": (新增)", newBidType)
 			} else { // 调整
 			} else { // 调整
-				changeStr = fmt.Sprintf(actonStr, fieldName, "(调整):", BidTypeMap[newv])
+				changeStr = fmt.Sprintf(actonStr, fieldName, "(调整):", newBidType)
 
 
 			}
 			}
 		case "isWin":
 		case "isWin":

+ 28 - 1
jyBXCore/rpc/util/participate.go

@@ -1,6 +1,13 @@
 package util
 package util
 
 
-import "jyBXCore/rpc/model/tidb"
+import (
+	"jyBXCore/rpc/model/tidb"
+	"sync"
+)
+
+var (
+	PLock *ParticipateLock
+)
 
 
 //是否允许多人参标
 //是否允许多人参标
 func IsALLow(entId int64) bool {
 func IsALLow(entId int64) bool {
@@ -8,3 +15,23 @@ func IsALLow(entId int64) bool {
 		"i_entid": entId,
 		"i_entid": entId,
 	})
 	})
 }
 }
+
+type ParticipateLock struct {
+	sync.Mutex
+	UserLock map[string]*sync.Mutex
+}
+
+func NewParticipateLock() *ParticipateLock {
+	return &ParticipateLock{
+		UserLock: make(map[string]*sync.Mutex),
+	}
+}
+
+func GetParticipateLock(str string) *sync.Mutex {
+	PLock.Lock()
+	if PLock.UserLock[str] == nil {
+		PLock.UserLock[str] = &sync.Mutex{}
+	}
+	PLock.Unlock()
+	return PLock.UserLock[str]
+}

+ 5 - 0
jyBXCore/rpc/util/util.go

@@ -0,0 +1,5 @@
+package util
+
+func init() {
+	PLock = NewParticipateLock()
+}

+ 231 - 0
jyBXCore/test.http

@@ -0,0 +1,231 @@
+// p300 投标项目管理接口测试
+### rpc接口测试
+###  列表页 个人
+GRPC 127.0.0.1:8003/bxcore.BxCore/ParticipateShow
+
+{
+  "ids":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D,ABCY2FddT1YLy8vNGN6c2I%2FIzNfCSd3cXhyKA4ZLTogUX5wHDNUCkw%3D",
+  "entId": 0,
+  "entUserId": 0,
+  "positionId": 1204781659,
+  "positionType": 0,
+  "mgoUserId": "641aa7bcac1c8e639bc15cdb",
+  "appId": 10000,
+  "userId": "641aa7bcac1c8e639bc15cdb",
+  "newUserId": 486050,
+  "accountId": 360058
+}
+
+###  列表页 企业
+GRPC 127.0.0.1:8003/bxcore.BxCore/ParticipateShow
+
+{
+  "ids":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D,ABCY2FddT1YLy8vNGN6c2I%2FIzNfCSd3cXhyKA4ZLTogUX5wHDNUCkw%3D",
+  "entId": 25922,
+  "entUserId": 6116,
+  "positionId": 1205051263,
+  "positionType": 1,
+  "mgoUserId": "641aa7bcac1c8e639bc15cdb",
+  "appId": 10000,
+  "userId": "1205051263",
+  "newUserId": 486050,
+  "accountId": 360157
+}
+
+
+### 详情页参标信息 -正常
+GRPC 127.0.0.1:8003/bxcore.BxCore/ParticipateInfo
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D",
+  "entId": 25922,
+  "entUserId": 6116,
+  "positionId": 1205051263,
+  "positionType": 1,
+  "mgoUserId": "641aa7bcac1c8e639bc15cdb",
+  "appId": 10000,
+  "userId": "1205051263",
+  "newUserId": 486050,
+  "accountId": 360157
+}
+### 详情页参标信息-无权限
+GRPC 127.0.0.1:8003/bxcore.BxCore/ParticipateInfo
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D",
+  "entId": 25922,
+  "entUserId": 6117,
+  "positionId": 1205051265,
+  "positionType": 1,
+  "mgoUserId": "644a493516f19b49b8451716",
+  "appId": 10000,
+  "userId": "1205051265",
+  "newUserId": 725515,
+  "accountId": 360158
+}
+
+
+
+
+### 更新投标状态
+GRPC 127.0.0.1:8003/bxcore.BxCore/UpdateBidStatus
+
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D",
+  "entId": 25922,
+  "entUserId": 6116,
+  "positionId": 1205051263,
+  "positionType": 1,
+  "mgoUserId": "641aa7bcac1c8e639bc15cdb",
+  "appId": 10000,
+  "userId": "1205051263",
+  "newUserId": 486050,
+  "accountId": 360157,
+  "bidType": 1,
+  "bidStage": [],
+  "isWin": 1,
+  "channelName": "阿勒泰",
+  "channelPerson": "若羌",
+  "channelPhone": "",
+  "winner": ""
+
+}
+
+
+### 获取最新的投标状态内容
+GRPC 127.0.0.1:8003/bxcore.BxCore/ParticipateContent
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D",
+  "entId": 25922,
+  "entUserId": 6116,
+  "positionId": 1205051263,
+  "positionType": 1,
+  "mgoUserId": "641aa7bcac1c8e639bc15cdb",
+  "appId": 10000,
+  "userId": "1205051263",
+  "newUserId": 486050,
+  "accountId": 360157
+
+
+}
+
+
+### 获取操作记录  页面不传默认 500
+GRPC 127.0.0.1:8003/bxcore.BxCore/ParticipateRecords
+
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D",
+  "entId": 25922,
+  "entUserId": 6116,
+  "positionId": 1205051263,
+  "positionType": 1,
+  "mgoUserId": "641aa7bcac1c8e639bc15cdb",
+  "appId": 10000,
+  "userId": "1205051263",
+  "newUserId": 486050,
+  "accountId": 360157,
+  "page": 1,
+  "pageSize": 10
+
+
+}
+
+### api接口测试
+### 列表页参标信息接口
+POST http://127.0.0.1:8004/jybx/core/participate/show
+Content-Type: application/json
+entId: 25922
+entUserId: 6116
+positionId: 1205051263
+positionType: 1
+mgoUserId: 641aa7bcac1c8e639bc15cdb
+appId: 10000
+userId: 1205051263
+newUserId: 486050
+accountId: 360157
+
+{
+  "ids":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D,ABCY2EAdi4vKygvM3xhcHUJJzACHj1mZnB%2FPDgZKSEwc3xzeVJUCg4%3D"
+}
+
+###  详情页参标信息接口
+POST http://127.0.0.1:8004/jybx/core/participate/info
+Content-Type: application/json
+entId: 25922
+entUserId: 6116
+positionId: 1205051263
+positionType: 1
+mgoUserId: 641aa7bcac1c8e639bc15cdb
+appId: 10000
+userId: 1205051263
+newUserId: 486050
+accountId: 360157
+
+{
+"sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D"
+}
+
+
+
+###  更新参标状态
+POST http://127.0.0.1:8004/jybx/core/participate/updateBidStatus
+Content-Type: application/json
+entId: 25922
+entUserId: 6116
+positionId: 1205051263
+positionType: 1
+mgoUserId: 641aa7bcac1c8e639bc15cdb
+appId: 10000
+userId: 1205051263
+newUserId: 486050
+accountId: 360157
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D",
+  "bidType": 2,
+  "bidStage": [],
+  "isWin": 2,
+  "channelName": "霍尔果斯",
+  "channelPerson": "若羌",
+  "channelPhone": "",
+  "winner": ""
+}
+
+###  参标操作记录 页码不传时 默认500
+POST http://127.0.0.1:8004/jybx/core/participate/records
+Content-Type: application/json
+entId: 25922
+entUserId: 6116
+positionId: 1205051263
+positionType: 1
+mgoUserId: 641aa7bcac1c8e639bc15cdb
+appId: 10000
+userId: 1205051263
+newUserId: 486050
+accountId: 360157
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D",
+  "page": 1,
+  "pageSize": 5
+}
+
+###  获取最新的投标状态信息
+POST http://127.0.0.1:8004/jybx/core/participate/content
+Content-Type: application/json
+entId: 25922
+entUserId: 6116
+positionId: 1205051263
+positionType: 1
+mgoUserId: 641aa7bcac1c8e639bc15cdb
+appId: 10000
+userId: 1205051263
+newUserId: 486050
+accountId: 360157
+
+{
+  "sid":"ABCY2FddTxYLyo4And1c08ODCcoGjF0XGB%2BKDggPSFFYFJwGC9UCa0%3D"
+}