Compare commits
290 Commits
feat-cjy-d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
abcd4609c7 | ||
|
|
f10c36d9fa | ||
|
|
6106253c98 | ||
| 7eba8c6293 | |||
| de4020fbbe | |||
| 050a82d732 | |||
| 354d71b53e | |||
| 151324b413 | |||
| 5081b26e25 | |||
| 302a5a40d0 | |||
| badb2eb240 | |||
| 773799e6e0 | |||
| 9a899613c3 | |||
| 60c8855993 | |||
| 9aefcc8f76 | |||
| cfdf82195c | |||
| dc677b4344 | |||
| 41a621ad1e | |||
| ca9ba548ec | |||
| 3380ba541f | |||
|
|
d0ea217581 | ||
|
|
f4a0117c04 | ||
| 9f12454100 | |||
| f7dbcfea06 | |||
| e6459e14a1 | |||
| 7b9f75f27e | |||
| 4f544673bb | |||
| 7ce6994bc4 | |||
| cecf48c37c | |||
| 3c57d024d0 | |||
| 81325137a9 | |||
| 2ba217c315 | |||
| 6b90728831 | |||
| a62549e503 | |||
|
|
5d3c21624c | ||
|
|
68f2de32ca | ||
|
|
efe79ec250 | ||
| d4bf96fef5 | |||
| f57532630c | |||
| 1b5461d005 | |||
| 0947f8533d | |||
|
|
b121c12f7c | ||
| 0562f21c3b | |||
|
|
fcc838ff43 | ||
| f4a3d39df6 | |||
| 50f2c59c0b | |||
| e295a58a43 | |||
| 44dd68fd84 | |||
| 3286f12505 | |||
| cf99647d57 | |||
| 7798f19d2b | |||
| 84e8a6dfda | |||
| 7e1bf3ca60 | |||
| fac24b72ac | |||
| b220a4ea96 | |||
| bcee7cdaf3 | |||
| 312ecca943 | |||
| f8e8f4806b | |||
| a92526a399 | |||
|
|
cfdd16ca47 | ||
| 68de32f89d | |||
| 1bdd0eabb2 | |||
| 751e5c4900 | |||
|
|
d095fdedf4 | ||
| 6ea7c95804 | |||
| b378f85bbd | |||
| ae88e366ee | |||
|
|
a3d942135d | ||
| b2050626b7 | |||
|
|
300a3eaebc | ||
| dfc8ddb9b1 | |||
| a5fa884ebc | |||
| 317d50bad6 | |||
| df21fe78fa | |||
| 3ded74991c | |||
|
|
1d136ceb8f | ||
| 93c085fb94 | |||
| 411c1ccbb3 | |||
| 390d3ea35b | |||
| ab8bdde9d9 | |||
| 3b2a6d059e | |||
|
|
6dde482bb4 | ||
|
|
4f74232571 | ||
|
|
150452f067 | ||
|
|
13caea6d29 | ||
|
|
420d706035 | ||
| aed787f8ca | |||
| d5a81f5c74 | |||
| 5bee5bf5aa | |||
| d8b972be26 | |||
| c17028fbcf | |||
| 3318bd45fc | |||
| 70452455b9 | |||
| 8ba457d1b8 | |||
| 74bfc30e82 | |||
|
|
646b4c7f3f | ||
|
|
e7aae9247c | ||
| dea92bc15c | |||
| 8b63419bd5 | |||
| cb395d19c2 | |||
|
|
28e7e3beba | ||
| 7f583f1a21 | |||
| e8289367bb | |||
| d074c80af4 | |||
| b04fe6fd62 | |||
| a3817266a8 | |||
| c86327c561 | |||
| dd0c81f27c | |||
|
|
0b2f0da573 | ||
| 3776c237de | |||
| 4fa0798449 | |||
|
|
f60487123e | ||
| 2f99d7d64a | |||
|
|
d040842181 | ||
| 6c7a8eb654 | |||
| 026996c311 | |||
| a5ce6f9de3 | |||
|
|
a81a85998b | ||
| 3fa85d3c34 | |||
| d34261a2ea | |||
| 96d5c78b11 | |||
| 07f8953310 | |||
| 3fbf7a5e06 | |||
| d34cef19c3 | |||
|
|
4110717751 | ||
|
|
db25e1bd36 | ||
|
|
a73f208810 | ||
| 7b8e56c0b4 | |||
|
|
2d182775ea | ||
| d3945f920c | |||
| 3591e8bccf | |||
| d464de6210 | |||
| 8939e5d5f9 | |||
|
|
4abc02807b | ||
|
|
f624dd09a4 | ||
|
|
32247c775e | ||
| fc169f7a1f | |||
| 4069fe50c3 | |||
|
|
d1e96e4b2c | ||
|
|
da7d185455 | ||
| 4c1eb8f3db | |||
|
|
057e8e5d15 | ||
|
|
0f52c6d265 | ||
| 0b7cd36b26 | |||
|
|
acfe5f9d3c | ||
| a0f7998a13 | |||
| 658722fe43 | |||
| 1505d88b25 | |||
|
|
f00c818f63 | ||
|
|
df5434ce0c | ||
|
|
a1ee6d3610 | ||
|
|
be5be3c990 | ||
|
|
d43647d0f1 | ||
| 83e9d8266d | |||
| ddf474d98a | |||
| 2284adef8a | |||
| 70a7b0545c | |||
| 3d6094f816 | |||
| d7210e2877 | |||
| 4e9720e14d | |||
| 817c38dffa | |||
| 81d99cbc91 | |||
| fb77d2560f | |||
| 127f030415 | |||
| 09dc29b966 | |||
| 3d2a70966e | |||
| 2cb1301cfa | |||
| 1f1b61e26f | |||
| 5a59be18db | |||
| 4bc97b1a7c | |||
| 79caa97771 | |||
| ad73d0daa2 | |||
| 68ef35a746 | |||
| 367ba4ec79 | |||
| 67dfa1adcc | |||
| 79ed00a421 | |||
| d6c09dcd02 | |||
| 7a016ea15a | |||
| 55828e2577 | |||
| 19fe2ecb49 | |||
| bd7e0e4169 | |||
| 48b3a022eb | |||
| 1233cd04cf | |||
| 32413251a8 | |||
| f02fbb8cbe | |||
| 2aecb54f20 | |||
| ea2c17bf92 | |||
| a956eaffda | |||
| 7bdc1f3dd6 | |||
| 869c1de9ca | |||
| 849c11e87c | |||
| 18e1cda6cc | |||
| 1cb188664f | |||
| 71b26f0839 | |||
| 2735ca3058 | |||
| f296f0e464 | |||
| 57f451de4f | |||
| 8af4ee47eb | |||
| 879b975ae5 | |||
| 7bd66bb589 | |||
| 2c7f66d87f | |||
| 7dfc65639b | |||
| 804b26c686 | |||
| 7022ed69a9 | |||
| 99faf708cb | |||
| b0e7f0bb59 | |||
| 23248725cb | |||
| d4144b8824 | |||
| 5dc3679c3e | |||
| 3faeddec26 | |||
| df569bfd4b | |||
| a11b5b2af5 | |||
| b76c69d235 | |||
| c601d36078 | |||
| 780e1761e1 | |||
|
|
057a8a4c93 | ||
|
|
33d006bbdc | ||
|
|
8f6ab0ae8a | ||
|
|
123f70d4e2 | ||
|
|
03d53a3a0c | ||
|
|
b89e4b1660 | ||
|
|
8fd0965714 | ||
| e5aaa6fc18 | |||
| f5dc00b76f | |||
|
|
6fdea5031e | ||
| 7f082d4889 | |||
| 77bdd47159 | |||
| f88e745ab7 | |||
|
|
0578f53f2f | ||
|
|
07ce962f9e | ||
| 4b48da5d08 | |||
| e8fb81bfe9 | |||
| 4acef959cb | |||
| 4f317ddaef | |||
| 6644880fc8 | |||
| 9219289db1 | |||
| a2967ed09b | |||
| c58fdff8e2 | |||
| 094de973d2 | |||
| 3aff9c3f87 | |||
| 3bedf23d15 | |||
| fda10744f1 | |||
| 0c1a9374b4 | |||
| 80ed35bf51 | |||
| 2e39896064 | |||
| 21322d0345 | |||
| 07eb527d99 | |||
| ef8604530d | |||
| 804fe0fd33 | |||
| 71bf24ae63 | |||
| f1372dfe5a | |||
| 30f2e200be | |||
| faed07145d | |||
| 33f4530d66 | |||
|
|
885dac4abc | ||
|
|
bd827102e0 | ||
| a5d87ba1fd | |||
| eac3bf47f1 | |||
| 13cdbebace | |||
| 3771c7531d | |||
| 21f82f112a | |||
| 30d56f84bf | |||
| d695950af9 | |||
| ab9c65d1d3 | |||
| 2143726f68 | |||
| 89f0ceaca0 | |||
| 55619e87d4 | |||
| 6ed699f096 | |||
| b4e94bd89b | |||
| f5f6a25594 | |||
| ef11b30ad9 | |||
| b0551a2647 | |||
|
|
a2a2ce79a9 | ||
| 3af03a530d | |||
| 0b7aaa6a22 | |||
|
|
f5126fecd9 | ||
| 06cff05621 | |||
| bdd78132a1 | |||
| 3c0457931c | |||
|
|
026da71a7e | ||
| 20c8025f62 | |||
| 0cad3a5400 | |||
| 21284e05a1 | |||
| aa4a6fb435 | |||
|
|
b5aa103a8f | ||
| 8b9a821a35 | |||
| 0270ff4ee8 | |||
| 8d9f8bdd49 | |||
|
|
77faa10fe8 | ||
|
|
560617806d |
@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
|
||||
17315042007 测试-陆嘉骅2 视频
|
||||
13111111112 测试-陆嘉骅2 视频
|
||||
|
||||
13196788678 Aa.123456 脚本
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -66,6 +66,9 @@ service AccountFiee {
|
||||
rpc SendNationMsg (SendNationMsgRequest) returns (SendMsgStatusResponse) {} //发送境外国际短信验证码 --艺术商城
|
||||
rpc VerifySliderStatus(VerifySliderStatusRequest) returns (VerifySliderStatusResponse) {}// 验证滑块验证码状态
|
||||
rpc SendNationTemplateMsg (SendNationMsgRequest) returns (SendMsgStatusResponse) {} //发送境外国际短信验证码 --艺术商城
|
||||
rpc GetInviterInfo(InviterInfoRequest) returns(InviterInfoResponse) {} //获取邀请人信息
|
||||
rpc GetInviterList(InviterListRequest) returns(InviterListResponse) {} //获取邀请人信息
|
||||
rpc WriteOff (WriteOffRequest) returns (RemoveResponse) {} //用户注销
|
||||
|
||||
|
||||
rpc CreateUserAndRealName (CreateUserAndRealNameRequest) returns (CreateUserAndRealNameResponse) {}// 创建用户并实名, 自动导入
|
||||
@ -101,7 +104,21 @@ service AccountFiee {
|
||||
rpc GetChatAutoReplyRulerDetail ( GetChatAutoReplyRulerByIdRequest )returns( ChatAutoReplyRulerData ){} //查询自动回复规则详情
|
||||
rpc GetChatAutoReplyRulerList ( GetChatAutoReplyRulerListRequest )returns( GetChatAutoReplyRulerListResp ){} //查询自动回复规则列表
|
||||
}
|
||||
|
||||
message InviterListRequest{
|
||||
repeated uint64 ids =1;
|
||||
}
|
||||
message InviterListResponse{
|
||||
repeated InviterInfoResponse list = 1;
|
||||
}
|
||||
message InviterInfoRequest{
|
||||
string code = 1;
|
||||
}
|
||||
message InviterInfoResponse{
|
||||
uint64 id = 1;
|
||||
string code = 2;
|
||||
string name = 3;
|
||||
string telNum = 4;
|
||||
}
|
||||
message VerifySliderStatusRequest {
|
||||
string nonceStr = 1;
|
||||
}
|
||||
@ -183,6 +200,11 @@ message UserListInfo{
|
||||
string idNumber = 21;
|
||||
string dateOfBirth = 22;
|
||||
string age = 23;
|
||||
string email = 24;
|
||||
string AbroadTelAreaCode = 25;
|
||||
string AbroadTel = 26;
|
||||
string inviterName = 27;
|
||||
string inviterCode = 28;
|
||||
}
|
||||
message UserListRequest{
|
||||
string domain = 1;
|
||||
@ -221,6 +243,11 @@ message UserInfoResponse{
|
||||
string telAreaCode = 19;
|
||||
string idNumber = 20;
|
||||
string dateOfBirth = 21;
|
||||
string email = 22;
|
||||
string AbroadTelAreaCode = 23;
|
||||
string AbroadTel = 24;
|
||||
uint64 inviterId = 25;
|
||||
|
||||
}
|
||||
message RealNameResponse{
|
||||
uint64 id = 1;
|
||||
@ -500,20 +527,6 @@ message RemoveRequest {
|
||||
}
|
||||
message WriteOffRequest{
|
||||
uint64 id = 1;
|
||||
string domain = 2;
|
||||
uint64 userId = 3;
|
||||
string tel = 4;
|
||||
string jonNum = 5;
|
||||
string userName = 6;
|
||||
string enterDate = 7;
|
||||
string positionName =8;
|
||||
uint64 positionId = 9;
|
||||
string siteName = 10;
|
||||
uint64 siteId =11;
|
||||
string authUrl =12;
|
||||
string type =13;
|
||||
uint32 status =14;
|
||||
string submitDate=15;
|
||||
}
|
||||
message WriteOffListRequest{
|
||||
uint64 page = 1;
|
||||
@ -541,6 +554,9 @@ message UpdateRequest {
|
||||
string Domain = 2 [json_name = "domain"];
|
||||
string Language = 3 [json_name = "language"];
|
||||
string NickName = 4 [json_name = "nickName"];
|
||||
string Email = 5 [json_name = "email"];
|
||||
string AbroadTel = 6 [json_name = "abroadTel"];
|
||||
string AbroadTelAreaCode = 7 [json_name = "abroadTelAreaCode"];
|
||||
}
|
||||
|
||||
message Operator {
|
||||
@ -632,6 +648,8 @@ message RegistRequest {
|
||||
string telAreaCode = 5;
|
||||
string language = 6;
|
||||
string nickName = 7;
|
||||
uint64 inviterID = 8;
|
||||
string inviterCode = 9;
|
||||
}
|
||||
|
||||
message LoginRequest {
|
||||
@ -709,6 +727,7 @@ message AccountInfo {
|
||||
string updatedAt = 41;
|
||||
string SecurityCode = 42 [json_name = "securityCode"];
|
||||
string BlockAddr = 43 [json_name = "blockAddr"];
|
||||
bool WriteOff = 44 [json_name = "writeOff"];
|
||||
}
|
||||
|
||||
message UserInfoV2 {
|
||||
|
||||
@ -17,6 +17,25 @@ var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
func (this *InviterListRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *InviterListResponse) Validate() error {
|
||||
for _, item := range this.List {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("List", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *InviterInfoRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *InviterInfoResponse) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *VerifySliderStatusRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -70,6 +70,9 @@ type AccountFieeClient interface {
|
||||
SendNationMsg(ctx context.Context, in *SendNationMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment)
|
||||
VerifySliderStatus(ctx context.Context, in *VerifySliderStatusRequest, opts ...grpc_go.CallOption) (*VerifySliderStatusResponse, common.ErrorWithAttachment)
|
||||
SendNationTemplateMsg(ctx context.Context, in *SendNationMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment)
|
||||
GetInviterInfo(ctx context.Context, in *InviterInfoRequest, opts ...grpc_go.CallOption) (*InviterInfoResponse, common.ErrorWithAttachment)
|
||||
GetInviterList(ctx context.Context, in *InviterListRequest, opts ...grpc_go.CallOption) (*InviterListResponse, common.ErrorWithAttachment)
|
||||
WriteOff(ctx context.Context, in *WriteOffRequest, opts ...grpc_go.CallOption) (*RemoveResponse, common.ErrorWithAttachment)
|
||||
CreateUserAndRealName(ctx context.Context, in *CreateUserAndRealNameRequest, opts ...grpc_go.CallOption) (*CreateUserAndRealNameResponse, common.ErrorWithAttachment)
|
||||
// submit info
|
||||
SaveSubmitInfo(ctx context.Context, in *SubmitInfoRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
|
||||
@ -148,6 +151,9 @@ type AccountFieeClientImpl struct {
|
||||
SendNationMsg func(ctx context.Context, in *SendNationMsgRequest) (*SendMsgStatusResponse, error)
|
||||
VerifySliderStatus func(ctx context.Context, in *VerifySliderStatusRequest) (*VerifySliderStatusResponse, error)
|
||||
SendNationTemplateMsg func(ctx context.Context, in *SendNationMsgRequest) (*SendMsgStatusResponse, error)
|
||||
GetInviterInfo func(ctx context.Context, in *InviterInfoRequest) (*InviterInfoResponse, error)
|
||||
GetInviterList func(ctx context.Context, in *InviterListRequest) (*InviterListResponse, error)
|
||||
WriteOff func(ctx context.Context, in *WriteOffRequest) (*RemoveResponse, error)
|
||||
CreateUserAndRealName func(ctx context.Context, in *CreateUserAndRealNameRequest) (*CreateUserAndRealNameResponse, error)
|
||||
SaveSubmitInfo func(ctx context.Context, in *SubmitInfoRequest) (*CommonResponse, error)
|
||||
CreateChatUser func(ctx context.Context, in *ChatUserData) (*CreateChatUserResp, error)
|
||||
@ -436,6 +442,24 @@ func (c *accountFieeClient) SendNationTemplateMsg(ctx context.Context, in *SendN
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SendNationTemplateMsg", in, out)
|
||||
}
|
||||
|
||||
func (c *accountFieeClient) GetInviterInfo(ctx context.Context, in *InviterInfoRequest, opts ...grpc_go.CallOption) (*InviterInfoResponse, common.ErrorWithAttachment) {
|
||||
out := new(InviterInfoResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetInviterInfo", in, out)
|
||||
}
|
||||
|
||||
func (c *accountFieeClient) GetInviterList(ctx context.Context, in *InviterListRequest, opts ...grpc_go.CallOption) (*InviterListResponse, common.ErrorWithAttachment) {
|
||||
out := new(InviterListResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetInviterList", in, out)
|
||||
}
|
||||
|
||||
func (c *accountFieeClient) WriteOff(ctx context.Context, in *WriteOffRequest, opts ...grpc_go.CallOption) (*RemoveResponse, common.ErrorWithAttachment) {
|
||||
out := new(RemoveResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/WriteOff", in, out)
|
||||
}
|
||||
|
||||
func (c *accountFieeClient) CreateUserAndRealName(ctx context.Context, in *CreateUserAndRealNameRequest, opts ...grpc_go.CallOption) (*CreateUserAndRealNameResponse, common.ErrorWithAttachment) {
|
||||
out := new(CreateUserAndRealNameResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
@ -650,6 +674,9 @@ type AccountFieeServer interface {
|
||||
SendNationMsg(context.Context, *SendNationMsgRequest) (*SendMsgStatusResponse, error)
|
||||
VerifySliderStatus(context.Context, *VerifySliderStatusRequest) (*VerifySliderStatusResponse, error)
|
||||
SendNationTemplateMsg(context.Context, *SendNationMsgRequest) (*SendMsgStatusResponse, error)
|
||||
GetInviterInfo(context.Context, *InviterInfoRequest) (*InviterInfoResponse, error)
|
||||
GetInviterList(context.Context, *InviterListRequest) (*InviterListResponse, error)
|
||||
WriteOff(context.Context, *WriteOffRequest) (*RemoveResponse, error)
|
||||
CreateUserAndRealName(context.Context, *CreateUserAndRealNameRequest) (*CreateUserAndRealNameResponse, error)
|
||||
// submit info
|
||||
SaveSubmitInfo(context.Context, *SubmitInfoRequest) (*CommonResponse, error)
|
||||
@ -811,6 +838,15 @@ func (UnimplementedAccountFieeServer) VerifySliderStatus(context.Context, *Verif
|
||||
func (UnimplementedAccountFieeServer) SendNationTemplateMsg(context.Context, *SendNationMsgRequest) (*SendMsgStatusResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method SendNationTemplateMsg not implemented")
|
||||
}
|
||||
func (UnimplementedAccountFieeServer) GetInviterInfo(context.Context, *InviterInfoRequest) (*InviterInfoResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetInviterInfo not implemented")
|
||||
}
|
||||
func (UnimplementedAccountFieeServer) GetInviterList(context.Context, *InviterListRequest) (*InviterListResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetInviterList not implemented")
|
||||
}
|
||||
func (UnimplementedAccountFieeServer) WriteOff(context.Context, *WriteOffRequest) (*RemoveResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method WriteOff not implemented")
|
||||
}
|
||||
func (UnimplementedAccountFieeServer) CreateUserAndRealName(context.Context, *CreateUserAndRealNameRequest) (*CreateUserAndRealNameResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CreateUserAndRealName not implemented")
|
||||
}
|
||||
@ -2112,6 +2148,93 @@ func _AccountFiee_SendNationTemplateMsg_Handler(srv interface{}, ctx context.Con
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _AccountFiee_GetInviterInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(InviterInfoRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetInviterInfo", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _AccountFiee_GetInviterList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(InviterListRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetInviterList", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _AccountFiee_WriteOff_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(WriteOffRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("WriteOff", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _AccountFiee_CreateUserAndRealName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateUserAndRealNameRequest)
|
||||
if err := dec(in); err != nil {
|
||||
@ -3095,6 +3218,18 @@ var AccountFiee_ServiceDesc = grpc_go.ServiceDesc{
|
||||
MethodName: "SendNationTemplateMsg",
|
||||
Handler: _AccountFiee_SendNationTemplateMsg_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetInviterInfo",
|
||||
Handler: _AccountFiee_GetInviterInfo_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetInviterList",
|
||||
Handler: _AccountFiee_GetInviterList_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "WriteOff",
|
||||
Handler: _AccountFiee_WriteOff_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CreateUserAndRealName",
|
||||
Handler: _AccountFiee_CreateUserAndRealName_Handler,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -7,8 +7,8 @@ import (
|
||||
fmt "fmt"
|
||||
math "math"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
_ "github.com/mwitkow/go-proto-validators"
|
||||
_ "google.golang.org/protobuf/types/descriptorpb"
|
||||
_ "github.com/mwitkow/go-proto-validators"
|
||||
github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators"
|
||||
)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -7,8 +7,8 @@ import (
|
||||
fmt "fmt"
|
||||
math "math"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
_ "github.com/mwitkow/go-proto-validators"
|
||||
_ "google.golang.org/protobuf/types/descriptorpb"
|
||||
_ "github.com/mwitkow/go-proto-validators"
|
||||
github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators"
|
||||
)
|
||||
|
||||
@ -40,6 +40,9 @@ func (this *QueryTheOrderSnapshotInformationResp) Validate() error {
|
||||
func (this *ServiceInformation) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *ReSignTheContractRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *DeleteValueAddServiceRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
@ -737,6 +740,9 @@ func (this *SetPendingTaskLayoutReq) Validate() error {
|
||||
func (this *SetPendingTaskLayoutResp) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *CreateTaskWorkLogRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *MetricsBusinessReq) Validate() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -50,6 +50,7 @@ type BundleClient interface {
|
||||
OrderRecordsListV2(ctx context.Context, in *OrderRecordsRequestV2, opts ...grpc_go.CallOption) (*OrderRecordsResponseV2, common.ErrorWithAttachment)
|
||||
OrderListByOrderNo(ctx context.Context, in *OrderInfoByOrderNoRequest, opts ...grpc_go.CallOption) (*OrderInfoByOrderNoResp, common.ErrorWithAttachment)
|
||||
OnlyAddValueListByOrderNo(ctx context.Context, in *OnlyAddValueListByOrderNoRequest, opts ...grpc_go.CallOption) (*OnlyAddValueListByOrderNoResp, common.ErrorWithAttachment)
|
||||
ReSignTheContract(ctx context.Context, in *ReSignTheContractRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
|
||||
// 增值套餐
|
||||
CreateValueAddBundle(ctx context.Context, in *CreateValueAddBundleRequest, opts ...grpc_go.CallOption) (*CreateValueAddBundleResponse, common.ErrorWithAttachment)
|
||||
ValueAddBundleList(ctx context.Context, in *ValueAddBundleListRequest, opts ...grpc_go.CallOption) (*ValueAddBundleListResponse, common.ErrorWithAttachment)
|
||||
@ -103,6 +104,13 @@ type BundleClient interface {
|
||||
BatchAssignTask(ctx context.Context, in *BatchAssignTaskRequest, opts ...grpc_go.CallOption) (*ComResponse, common.ErrorWithAttachment)
|
||||
BatchTerminateTask(ctx context.Context, in *BatchTerminateTaskRequest, opts ...grpc_go.CallOption) (*ComResponse, common.ErrorWithAttachment)
|
||||
GetArtistUploadStatsList(ctx context.Context, in *TaskQueryRequest, opts ...grpc_go.CallOption) (*ArtistUploadStatsResponse, common.ErrorWithAttachment)
|
||||
GetPendingTaskLayout(ctx context.Context, in *GetPendingTaskLayoutReq, opts ...grpc_go.CallOption) (*GetPendingTaskLayoutResp, common.ErrorWithAttachment)
|
||||
SetPendingTaskLayout(ctx context.Context, in *SetPendingTaskLayoutReq, opts ...grpc_go.CallOption) (*SetPendingTaskLayoutResp, common.ErrorWithAttachment)
|
||||
GetPendingUploadBreakdown(ctx context.Context, in *PendingUploadBreakdownRequest, opts ...grpc_go.CallOption) (*PendingUploadBreakdownResponse, common.ErrorWithAttachment)
|
||||
GetPendingAssign(ctx context.Context, in *PendingAssignRequest, opts ...grpc_go.CallOption) (*PendingAssignResponse, common.ErrorWithAttachment)
|
||||
RevertTaskCompletionByUUIDItem(ctx context.Context, in *RevertTaskCompletionByUUIDItemRequest, opts ...grpc_go.CallOption) (*ComResponse, common.ErrorWithAttachment)
|
||||
AddHiddenTaskAssignee(ctx context.Context, in *AddHiddenTaskAssigneeRequest, opts ...grpc_go.CallOption) (*ComResponse, common.ErrorWithAttachment)
|
||||
CreateTaskWorkLog(ctx context.Context, in *CreateTaskWorkLogRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
|
||||
// 数据指标
|
||||
MetricsBusiness(ctx context.Context, in *MetricsBusinessReq, opts ...grpc_go.CallOption) (*MetricsBusinessResp, common.ErrorWithAttachment)
|
||||
MetricsOperatingCreate(ctx context.Context, in *MetricsOperatingCreateReq, opts ...grpc_go.CallOption) (*MetricsOperatingCreateResp, common.ErrorWithAttachment)
|
||||
@ -110,12 +118,6 @@ type BundleClient interface {
|
||||
MetricsBundlePurchaseExport(ctx context.Context, in *MetricsBundlePurchaseExportReq, opts ...grpc_go.CallOption) (*MetricsBundlePurchaseExportResp, common.ErrorWithAttachment)
|
||||
MetricsArtistAccountExport(ctx context.Context, in *MetricsArtistAccountExportReq, opts ...grpc_go.CallOption) (*MetricsArtistAccountExportResp, common.ErrorWithAttachment)
|
||||
MetricsVideoSubmitExport(ctx context.Context, in *MetricsVideoSubmitExportReq, opts ...grpc_go.CallOption) (*MetricsVideoSubmitExportResp, common.ErrorWithAttachment)
|
||||
GetPendingTaskLayout(ctx context.Context, in *GetPendingTaskLayoutReq, opts ...grpc_go.CallOption) (*GetPendingTaskLayoutResp, common.ErrorWithAttachment)
|
||||
SetPendingTaskLayout(ctx context.Context, in *SetPendingTaskLayoutReq, opts ...grpc_go.CallOption) (*SetPendingTaskLayoutResp, common.ErrorWithAttachment)
|
||||
GetPendingUploadBreakdown(ctx context.Context, in *PendingUploadBreakdownRequest, opts ...grpc_go.CallOption) (*PendingUploadBreakdownResponse, common.ErrorWithAttachment)
|
||||
GetPendingAssign(ctx context.Context, in *PendingAssignRequest, opts ...grpc_go.CallOption) (*PendingAssignResponse, common.ErrorWithAttachment)
|
||||
RevertTaskCompletionByUUIDItem(ctx context.Context, in *RevertTaskCompletionByUUIDItemRequest, opts ...grpc_go.CallOption) (*ComResponse, common.ErrorWithAttachment)
|
||||
AddHiddenTaskAssignee(ctx context.Context, in *AddHiddenTaskAssigneeRequest, opts ...grpc_go.CallOption) (*ComResponse, common.ErrorWithAttachment)
|
||||
QueryTheOrderSnapshotInformation(ctx context.Context, in *QueryTheOrderSnapshotInformationReq, opts ...grpc_go.CallOption) (*QueryTheOrderSnapshotInformationResp, common.ErrorWithAttachment)
|
||||
}
|
||||
|
||||
@ -146,6 +148,7 @@ type BundleClientImpl struct {
|
||||
OrderRecordsListV2 func(ctx context.Context, in *OrderRecordsRequestV2) (*OrderRecordsResponseV2, error)
|
||||
OrderListByOrderNo func(ctx context.Context, in *OrderInfoByOrderNoRequest) (*OrderInfoByOrderNoResp, error)
|
||||
OnlyAddValueListByOrderNo func(ctx context.Context, in *OnlyAddValueListByOrderNoRequest) (*OnlyAddValueListByOrderNoResp, error)
|
||||
ReSignTheContract func(ctx context.Context, in *ReSignTheContractRequest) (*CommonResponse, error)
|
||||
CreateValueAddBundle func(ctx context.Context, in *CreateValueAddBundleRequest) (*CreateValueAddBundleResponse, error)
|
||||
ValueAddBundleList func(ctx context.Context, in *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error)
|
||||
ValueAddBundleDetail func(ctx context.Context, in *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error)
|
||||
@ -192,18 +195,19 @@ type BundleClientImpl struct {
|
||||
BatchAssignTask func(ctx context.Context, in *BatchAssignTaskRequest) (*ComResponse, error)
|
||||
BatchTerminateTask func(ctx context.Context, in *BatchTerminateTaskRequest) (*ComResponse, error)
|
||||
GetArtistUploadStatsList func(ctx context.Context, in *TaskQueryRequest) (*ArtistUploadStatsResponse, error)
|
||||
MetricsBusiness func(ctx context.Context, in *MetricsBusinessReq) (*MetricsBusinessResp, error)
|
||||
MetricsOperatingCreate func(ctx context.Context, in *MetricsOperatingCreateReq) (*MetricsOperatingCreateResp, error)
|
||||
MetricsOperatingStatus func(ctx context.Context, in *MetricsOperatingStatusReq) (*MetricsOperatingStatusResp, error)
|
||||
MetricsBundlePurchaseExport func(ctx context.Context, in *MetricsBundlePurchaseExportReq) (*MetricsBundlePurchaseExportResp, error)
|
||||
MetricsArtistAccountExport func(ctx context.Context, in *MetricsArtistAccountExportReq) (*MetricsArtistAccountExportResp, error)
|
||||
MetricsVideoSubmitExport func(ctx context.Context, in *MetricsVideoSubmitExportReq) (*MetricsVideoSubmitExportResp, error)
|
||||
GetPendingTaskLayout func(ctx context.Context, in *GetPendingTaskLayoutReq) (*GetPendingTaskLayoutResp, error)
|
||||
SetPendingTaskLayout func(ctx context.Context, in *SetPendingTaskLayoutReq) (*SetPendingTaskLayoutResp, error)
|
||||
GetPendingUploadBreakdown func(ctx context.Context, in *PendingUploadBreakdownRequest) (*PendingUploadBreakdownResponse, error)
|
||||
GetPendingAssign func(ctx context.Context, in *PendingAssignRequest) (*PendingAssignResponse, error)
|
||||
RevertTaskCompletionByUUIDItem func(ctx context.Context, in *RevertTaskCompletionByUUIDItemRequest) (*ComResponse, error)
|
||||
AddHiddenTaskAssignee func(ctx context.Context, in *AddHiddenTaskAssigneeRequest) (*ComResponse, error)
|
||||
CreateTaskWorkLog func(ctx context.Context, in *CreateTaskWorkLogRequest) (*CommonResponse, error)
|
||||
MetricsBusiness func(ctx context.Context, in *MetricsBusinessReq) (*MetricsBusinessResp, error)
|
||||
MetricsOperatingCreate func(ctx context.Context, in *MetricsOperatingCreateReq) (*MetricsOperatingCreateResp, error)
|
||||
MetricsOperatingStatus func(ctx context.Context, in *MetricsOperatingStatusReq) (*MetricsOperatingStatusResp, error)
|
||||
MetricsBundlePurchaseExport func(ctx context.Context, in *MetricsBundlePurchaseExportReq) (*MetricsBundlePurchaseExportResp, error)
|
||||
MetricsArtistAccountExport func(ctx context.Context, in *MetricsArtistAccountExportReq) (*MetricsArtistAccountExportResp, error)
|
||||
MetricsVideoSubmitExport func(ctx context.Context, in *MetricsVideoSubmitExportReq) (*MetricsVideoSubmitExportResp, error)
|
||||
QueryTheOrderSnapshotInformation func(ctx context.Context, in *QueryTheOrderSnapshotInformationReq) (*QueryTheOrderSnapshotInformationResp, error)
|
||||
}
|
||||
|
||||
@ -351,6 +355,12 @@ func (c *bundleClient) OnlyAddValueListByOrderNo(ctx context.Context, in *OnlyAd
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/OnlyAddValueListByOrderNo", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) ReSignTheContract(ctx context.Context, in *ReSignTheContractRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) {
|
||||
out := new(CommonResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ReSignTheContract", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) CreateValueAddBundle(ctx context.Context, in *CreateValueAddBundleRequest, opts ...grpc_go.CallOption) (*CreateValueAddBundleResponse, common.ErrorWithAttachment) {
|
||||
out := new(CreateValueAddBundleResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
@ -627,42 +637,6 @@ func (c *bundleClient) GetArtistUploadStatsList(ctx context.Context, in *TaskQue
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetArtistUploadStatsList", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsBusiness(ctx context.Context, in *MetricsBusinessReq, opts ...grpc_go.CallOption) (*MetricsBusinessResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsBusinessResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsBusiness", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsOperatingCreate(ctx context.Context, in *MetricsOperatingCreateReq, opts ...grpc_go.CallOption) (*MetricsOperatingCreateResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsOperatingCreateResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsOperatingCreate", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsOperatingStatus(ctx context.Context, in *MetricsOperatingStatusReq, opts ...grpc_go.CallOption) (*MetricsOperatingStatusResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsOperatingStatusResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsOperatingStatus", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsBundlePurchaseExport(ctx context.Context, in *MetricsBundlePurchaseExportReq, opts ...grpc_go.CallOption) (*MetricsBundlePurchaseExportResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsBundlePurchaseExportResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsBundlePurchaseExport", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsArtistAccountExport(ctx context.Context, in *MetricsArtistAccountExportReq, opts ...grpc_go.CallOption) (*MetricsArtistAccountExportResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsArtistAccountExportResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsArtistAccountExport", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsVideoSubmitExport(ctx context.Context, in *MetricsVideoSubmitExportReq, opts ...grpc_go.CallOption) (*MetricsVideoSubmitExportResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsVideoSubmitExportResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsVideoSubmitExport", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) GetPendingTaskLayout(ctx context.Context, in *GetPendingTaskLayoutReq, opts ...grpc_go.CallOption) (*GetPendingTaskLayoutResp, common.ErrorWithAttachment) {
|
||||
out := new(GetPendingTaskLayoutResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
@ -699,6 +673,48 @@ func (c *bundleClient) AddHiddenTaskAssignee(ctx context.Context, in *AddHiddenT
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/AddHiddenTaskAssignee", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) CreateTaskWorkLog(ctx context.Context, in *CreateTaskWorkLogRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) {
|
||||
out := new(CommonResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateTaskWorkLog", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsBusiness(ctx context.Context, in *MetricsBusinessReq, opts ...grpc_go.CallOption) (*MetricsBusinessResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsBusinessResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsBusiness", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsOperatingCreate(ctx context.Context, in *MetricsOperatingCreateReq, opts ...grpc_go.CallOption) (*MetricsOperatingCreateResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsOperatingCreateResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsOperatingCreate", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsOperatingStatus(ctx context.Context, in *MetricsOperatingStatusReq, opts ...grpc_go.CallOption) (*MetricsOperatingStatusResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsOperatingStatusResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsOperatingStatus", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsBundlePurchaseExport(ctx context.Context, in *MetricsBundlePurchaseExportReq, opts ...grpc_go.CallOption) (*MetricsBundlePurchaseExportResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsBundlePurchaseExportResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsBundlePurchaseExport", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsArtistAccountExport(ctx context.Context, in *MetricsArtistAccountExportReq, opts ...grpc_go.CallOption) (*MetricsArtistAccountExportResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsArtistAccountExportResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsArtistAccountExport", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) MetricsVideoSubmitExport(ctx context.Context, in *MetricsVideoSubmitExportReq, opts ...grpc_go.CallOption) (*MetricsVideoSubmitExportResp, common.ErrorWithAttachment) {
|
||||
out := new(MetricsVideoSubmitExportResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MetricsVideoSubmitExport", in, out)
|
||||
}
|
||||
|
||||
func (c *bundleClient) QueryTheOrderSnapshotInformation(ctx context.Context, in *QueryTheOrderSnapshotInformationReq, opts ...grpc_go.CallOption) (*QueryTheOrderSnapshotInformationResp, common.ErrorWithAttachment) {
|
||||
out := new(QueryTheOrderSnapshotInformationResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
@ -731,6 +747,7 @@ type BundleServer interface {
|
||||
OrderRecordsListV2(context.Context, *OrderRecordsRequestV2) (*OrderRecordsResponseV2, error)
|
||||
OrderListByOrderNo(context.Context, *OrderInfoByOrderNoRequest) (*OrderInfoByOrderNoResp, error)
|
||||
OnlyAddValueListByOrderNo(context.Context, *OnlyAddValueListByOrderNoRequest) (*OnlyAddValueListByOrderNoResp, error)
|
||||
ReSignTheContract(context.Context, *ReSignTheContractRequest) (*CommonResponse, error)
|
||||
// 增值套餐
|
||||
CreateValueAddBundle(context.Context, *CreateValueAddBundleRequest) (*CreateValueAddBundleResponse, error)
|
||||
ValueAddBundleList(context.Context, *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error)
|
||||
@ -784,6 +801,13 @@ type BundleServer interface {
|
||||
BatchAssignTask(context.Context, *BatchAssignTaskRequest) (*ComResponse, error)
|
||||
BatchTerminateTask(context.Context, *BatchTerminateTaskRequest) (*ComResponse, error)
|
||||
GetArtistUploadStatsList(context.Context, *TaskQueryRequest) (*ArtistUploadStatsResponse, error)
|
||||
GetPendingTaskLayout(context.Context, *GetPendingTaskLayoutReq) (*GetPendingTaskLayoutResp, error)
|
||||
SetPendingTaskLayout(context.Context, *SetPendingTaskLayoutReq) (*SetPendingTaskLayoutResp, error)
|
||||
GetPendingUploadBreakdown(context.Context, *PendingUploadBreakdownRequest) (*PendingUploadBreakdownResponse, error)
|
||||
GetPendingAssign(context.Context, *PendingAssignRequest) (*PendingAssignResponse, error)
|
||||
RevertTaskCompletionByUUIDItem(context.Context, *RevertTaskCompletionByUUIDItemRequest) (*ComResponse, error)
|
||||
AddHiddenTaskAssignee(context.Context, *AddHiddenTaskAssigneeRequest) (*ComResponse, error)
|
||||
CreateTaskWorkLog(context.Context, *CreateTaskWorkLogRequest) (*CommonResponse, error)
|
||||
// 数据指标
|
||||
MetricsBusiness(context.Context, *MetricsBusinessReq) (*MetricsBusinessResp, error)
|
||||
MetricsOperatingCreate(context.Context, *MetricsOperatingCreateReq) (*MetricsOperatingCreateResp, error)
|
||||
@ -791,12 +815,6 @@ type BundleServer interface {
|
||||
MetricsBundlePurchaseExport(context.Context, *MetricsBundlePurchaseExportReq) (*MetricsBundlePurchaseExportResp, error)
|
||||
MetricsArtistAccountExport(context.Context, *MetricsArtistAccountExportReq) (*MetricsArtistAccountExportResp, error)
|
||||
MetricsVideoSubmitExport(context.Context, *MetricsVideoSubmitExportReq) (*MetricsVideoSubmitExportResp, error)
|
||||
GetPendingTaskLayout(context.Context, *GetPendingTaskLayoutReq) (*GetPendingTaskLayoutResp, error)
|
||||
SetPendingTaskLayout(context.Context, *SetPendingTaskLayoutReq) (*SetPendingTaskLayoutResp, error)
|
||||
GetPendingUploadBreakdown(context.Context, *PendingUploadBreakdownRequest) (*PendingUploadBreakdownResponse, error)
|
||||
GetPendingAssign(context.Context, *PendingAssignRequest) (*PendingAssignResponse, error)
|
||||
RevertTaskCompletionByUUIDItem(context.Context, *RevertTaskCompletionByUUIDItemRequest) (*ComResponse, error)
|
||||
AddHiddenTaskAssignee(context.Context, *AddHiddenTaskAssigneeRequest) (*ComResponse, error)
|
||||
QueryTheOrderSnapshotInformation(context.Context, *QueryTheOrderSnapshotInformationReq) (*QueryTheOrderSnapshotInformationResp, error)
|
||||
mustEmbedUnimplementedBundleServer()
|
||||
}
|
||||
@ -872,6 +890,9 @@ func (UnimplementedBundleServer) OrderListByOrderNo(context.Context, *OrderInfoB
|
||||
func (UnimplementedBundleServer) OnlyAddValueListByOrderNo(context.Context, *OnlyAddValueListByOrderNoRequest) (*OnlyAddValueListByOrderNoResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method OnlyAddValueListByOrderNo not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) ReSignTheContract(context.Context, *ReSignTheContractRequest) (*CommonResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method ReSignTheContract not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) CreateValueAddBundle(context.Context, *CreateValueAddBundleRequest) (*CreateValueAddBundleResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CreateValueAddBundle not implemented")
|
||||
}
|
||||
@ -1010,24 +1031,6 @@ func (UnimplementedBundleServer) BatchTerminateTask(context.Context, *BatchTermi
|
||||
func (UnimplementedBundleServer) GetArtistUploadStatsList(context.Context, *TaskQueryRequest) (*ArtistUploadStatsResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetArtistUploadStatsList not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsBusiness(context.Context, *MetricsBusinessReq) (*MetricsBusinessResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsBusiness not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsOperatingCreate(context.Context, *MetricsOperatingCreateReq) (*MetricsOperatingCreateResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsOperatingCreate not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsOperatingStatus(context.Context, *MetricsOperatingStatusReq) (*MetricsOperatingStatusResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsOperatingStatus not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsBundlePurchaseExport(context.Context, *MetricsBundlePurchaseExportReq) (*MetricsBundlePurchaseExportResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsBundlePurchaseExport not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsArtistAccountExport(context.Context, *MetricsArtistAccountExportReq) (*MetricsArtistAccountExportResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsArtistAccountExport not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsVideoSubmitExport(context.Context, *MetricsVideoSubmitExportReq) (*MetricsVideoSubmitExportResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsVideoSubmitExport not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) GetPendingTaskLayout(context.Context, *GetPendingTaskLayoutReq) (*GetPendingTaskLayoutResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetPendingTaskLayout not implemented")
|
||||
}
|
||||
@ -1046,6 +1049,27 @@ func (UnimplementedBundleServer) RevertTaskCompletionByUUIDItem(context.Context,
|
||||
func (UnimplementedBundleServer) AddHiddenTaskAssignee(context.Context, *AddHiddenTaskAssigneeRequest) (*ComResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method AddHiddenTaskAssignee not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) CreateTaskWorkLog(context.Context, *CreateTaskWorkLogRequest) (*CommonResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CreateTaskWorkLog not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsBusiness(context.Context, *MetricsBusinessReq) (*MetricsBusinessResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsBusiness not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsOperatingCreate(context.Context, *MetricsOperatingCreateReq) (*MetricsOperatingCreateResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsOperatingCreate not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsOperatingStatus(context.Context, *MetricsOperatingStatusReq) (*MetricsOperatingStatusResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsOperatingStatus not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsBundlePurchaseExport(context.Context, *MetricsBundlePurchaseExportReq) (*MetricsBundlePurchaseExportResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsBundlePurchaseExport not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsArtistAccountExport(context.Context, *MetricsArtistAccountExportReq) (*MetricsArtistAccountExportResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsArtistAccountExport not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) MetricsVideoSubmitExport(context.Context, *MetricsVideoSubmitExportReq) (*MetricsVideoSubmitExportResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method MetricsVideoSubmitExport not implemented")
|
||||
}
|
||||
func (UnimplementedBundleServer) QueryTheOrderSnapshotInformation(context.Context, *QueryTheOrderSnapshotInformationReq) (*QueryTheOrderSnapshotInformationResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method QueryTheOrderSnapshotInformation not implemented")
|
||||
}
|
||||
@ -1715,6 +1739,35 @@ func _Bundle_OnlyAddValueListByOrderNo_Handler(srv interface{}, ctx context.Cont
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_ReSignTheContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(ReSignTheContractRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("ReSignTheContract", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_CreateValueAddBundle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateValueAddBundleRequest)
|
||||
if err := dec(in); err != nil {
|
||||
@ -3049,180 +3102,6 @@ func _Bundle_GetArtistUploadStatsList_Handler(srv interface{}, ctx context.Conte
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsBusiness_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsBusinessReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsBusiness", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsOperatingCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsOperatingCreateReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsOperatingCreate", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsOperatingStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsOperatingStatusReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsOperatingStatus", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsBundlePurchaseExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsBundlePurchaseExportReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsBundlePurchaseExport", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsArtistAccountExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsArtistAccountExportReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsArtistAccountExport", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsVideoSubmitExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsVideoSubmitExportReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsVideoSubmitExport", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_GetPendingTaskLayout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetPendingTaskLayoutReq)
|
||||
if err := dec(in); err != nil {
|
||||
@ -3397,6 +3276,209 @@ func _Bundle_AddHiddenTaskAssignee_Handler(srv interface{}, ctx context.Context,
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_CreateTaskWorkLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateTaskWorkLogRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("CreateTaskWorkLog", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsBusiness_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsBusinessReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsBusiness", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsOperatingCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsOperatingCreateReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsOperatingCreate", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsOperatingStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsOperatingStatusReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsOperatingStatus", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsBundlePurchaseExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsBundlePurchaseExportReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsBundlePurchaseExport", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsArtistAccountExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsArtistAccountExportReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsArtistAccountExport", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_MetricsVideoSubmitExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MetricsVideoSubmitExportReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("MetricsVideoSubmitExport", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Bundle_QueryTheOrderSnapshotInformation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(QueryTheOrderSnapshotInformationReq)
|
||||
if err := dec(in); err != nil {
|
||||
@ -3521,6 +3603,10 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{
|
||||
MethodName: "OnlyAddValueListByOrderNo",
|
||||
Handler: _Bundle_OnlyAddValueListByOrderNo_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "ReSignTheContract",
|
||||
Handler: _Bundle_ReSignTheContract_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CreateValueAddBundle",
|
||||
Handler: _Bundle_CreateValueAddBundle_Handler,
|
||||
@ -3705,30 +3791,6 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{
|
||||
MethodName: "GetArtistUploadStatsList",
|
||||
Handler: _Bundle_GetArtistUploadStatsList_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsBusiness",
|
||||
Handler: _Bundle_MetricsBusiness_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsOperatingCreate",
|
||||
Handler: _Bundle_MetricsOperatingCreate_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsOperatingStatus",
|
||||
Handler: _Bundle_MetricsOperatingStatus_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsBundlePurchaseExport",
|
||||
Handler: _Bundle_MetricsBundlePurchaseExport_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsArtistAccountExport",
|
||||
Handler: _Bundle_MetricsArtistAccountExport_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsVideoSubmitExport",
|
||||
Handler: _Bundle_MetricsVideoSubmitExport_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetPendingTaskLayout",
|
||||
Handler: _Bundle_GetPendingTaskLayout_Handler,
|
||||
@ -3753,6 +3815,34 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{
|
||||
MethodName: "AddHiddenTaskAssignee",
|
||||
Handler: _Bundle_AddHiddenTaskAssignee_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CreateTaskWorkLog",
|
||||
Handler: _Bundle_CreateTaskWorkLog_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsBusiness",
|
||||
Handler: _Bundle_MetricsBusiness_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsOperatingCreate",
|
||||
Handler: _Bundle_MetricsOperatingCreate_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsOperatingStatus",
|
||||
Handler: _Bundle_MetricsOperatingStatus_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsBundlePurchaseExport",
|
||||
Handler: _Bundle_MetricsBundlePurchaseExport_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsArtistAccountExport",
|
||||
Handler: _Bundle_MetricsArtistAccountExport_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MetricsVideoSubmitExport",
|
||||
Handler: _Bundle_MetricsVideoSubmitExport_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "QueryTheOrderSnapshotInformation",
|
||||
Handler: _Bundle_QueryTheOrderSnapshotInformation_Handler,
|
||||
|
||||
11364
api/cast/cast.pb.go
11364
api/cast/cast.pb.go
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -9,7 +9,6 @@ package cron
|
||||
import (
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
_ "google.golang.org/protobuf/types/known/emptypb"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
unsafe "unsafe"
|
||||
@ -641,6 +640,16 @@ type ExecutionResult struct {
|
||||
StatusDescription string `protobuf:"bytes,110,opt,name=status_description,json=statusDescription,proto3" json:"status_description"` // 执行状态描述
|
||||
ResultDescription string `protobuf:"bytes,111,opt,name=result_description,json=resultDescription,proto3" json:"result_description"` // 执行结果描述
|
||||
ContentTypeDescription string `protobuf:"bytes,115,opt,name=content_type_description,json=contentTypeDescription,proto3" json:"content_type_description"` // 内容类型描述
|
||||
TIKTOKStatusDesc string `protobuf:"bytes,121,opt,name=TIKTOKStatusDesc,proto3" json:"TIKTOKStatusDesc"`
|
||||
YOUTUBEStatusDesc string `protobuf:"bytes,122,opt,name=YOUTUBEStatusDesc,proto3" json:"YOUTUBEStatusDesc"`
|
||||
INSStatusDesc string `protobuf:"bytes,123,opt,name=INSStatusDesc,proto3" json:"INSStatusDesc"`
|
||||
DMStatusDesc string `protobuf:"bytes,124,opt,name=DMStatusDesc,proto3" json:"DMStatusDesc"`
|
||||
BULESKYStatusDesc string `protobuf:"bytes,125,opt,name=BULESKYStatusDesc,proto3" json:"BULESKYStatusDesc"`
|
||||
TIKTOKResult string `protobuf:"bytes,131,opt,name=TIKTOKResult,proto3" json:"TIKTOKResult"`
|
||||
YOUTUBEResult string `protobuf:"bytes,132,opt,name=YOUTUBEResult,proto3" json:"YOUTUBEResult"`
|
||||
INSResult string `protobuf:"bytes,133,opt,name=INSResult,proto3" json:"INSResult"`
|
||||
DMResult string `protobuf:"bytes,134,opt,name=DMResult,proto3" json:"DMResult"`
|
||||
BULESKYResult string `protobuf:"bytes,135,opt,name=BULESKYResult,proto3" json:"BULESKYResult"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
@ -794,6 +803,76 @@ func (x *ExecutionResult) GetContentTypeDescription() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetTIKTOKStatusDesc() string {
|
||||
if x != nil {
|
||||
return x.TIKTOKStatusDesc
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetYOUTUBEStatusDesc() string {
|
||||
if x != nil {
|
||||
return x.YOUTUBEStatusDesc
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetINSStatusDesc() string {
|
||||
if x != nil {
|
||||
return x.INSStatusDesc
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetDMStatusDesc() string {
|
||||
if x != nil {
|
||||
return x.DMStatusDesc
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetBULESKYStatusDesc() string {
|
||||
if x != nil {
|
||||
return x.BULESKYStatusDesc
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetTIKTOKResult() string {
|
||||
if x != nil {
|
||||
return x.TIKTOKResult
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetYOUTUBEResult() string {
|
||||
if x != nil {
|
||||
return x.YOUTUBEResult
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetINSResult() string {
|
||||
if x != nil {
|
||||
return x.INSResult
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetDMResult() string {
|
||||
if x != nil {
|
||||
return x.DMResult
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExecutionResult) GetBULESKYResult() string {
|
||||
if x != nil {
|
||||
return x.BULESKYResult
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type CreateScheduleTaskRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
TaskTitle string `protobuf:"bytes,1,opt,name=task_title,json=taskTitle,proto3" json:"task_title"` // 任务标题
|
||||
@ -1050,7 +1129,7 @@ type UpdateScheduleTaskRequest struct {
|
||||
ExecuteStartTime string `protobuf:"bytes,8,opt,name=execute_start_time,json=executeStartTime,proto3" json:"execute_start_time"` // 执行开始时间
|
||||
ExecuteEndTime string `protobuf:"bytes,9,opt,name=execute_end_time,json=executeEndTime,proto3" json:"execute_end_time"` // 执行结束时间
|
||||
Remark string `protobuf:"bytes,10,opt,name=remark,proto3" json:"remark"` // 备注
|
||||
TaskDetail *TaskDetailRequest `protobuf:"bytes,11,opt,name=task_detail,json=taskDetail,proto3" json:"task_detail"` // 任务详情
|
||||
TaskDetail *UpdateScheduleTaskRequestTaskDetail `protobuf:"bytes,11,opt,name=task_detail,json=taskDetail,proto3" json:"task_detail"` // 任务详情
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
@ -1155,13 +1234,97 @@ func (x *UpdateScheduleTaskRequest) GetRemark() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequest) GetTaskDetail() *TaskDetailRequest {
|
||||
func (x *UpdateScheduleTaskRequest) GetTaskDetail() *UpdateScheduleTaskRequestTaskDetail {
|
||||
if x != nil {
|
||||
return x.TaskDetail
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type UpdateScheduleTaskRequestTaskDetail struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Id int32 `protobuf:"varint,5,opt,name=id,proto3" json:"id"`
|
||||
TaskId int32 `protobuf:"varint,6,opt,name=task_id,json=taskId,proto3" json:"task_id"`
|
||||
ArtistCount int32 `protobuf:"varint,1,opt,name=artist_count,json=artistCount,proto3" json:"artist_count"` // 艺人数量
|
||||
Artists []*ArtistInfo `protobuf:"bytes,2,rep,name=artists,proto3" json:"artists"` // 艺人信息列表
|
||||
Num int32 `protobuf:"varint,3,opt,name=num,proto3" json:"num"` // 任务数量
|
||||
ContentType int32 `protobuf:"varint,4,opt,name=content_type,json=contentType,proto3" json:"content_type"` // 内容类型
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) Reset() {
|
||||
*x = UpdateScheduleTaskRequestTaskDetail{}
|
||||
mi := &file_pb_cron_proto_msgTypes[11]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UpdateScheduleTaskRequestTaskDetail) ProtoMessage() {}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[11]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use UpdateScheduleTaskRequestTaskDetail.ProtoReflect.Descriptor instead.
|
||||
func (*UpdateScheduleTaskRequestTaskDetail) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{11}
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) GetId() int32 {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) GetTaskId() int32 {
|
||||
if x != nil {
|
||||
return x.TaskId
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) GetArtistCount() int32 {
|
||||
if x != nil {
|
||||
return x.ArtistCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) GetArtists() []*ArtistInfo {
|
||||
if x != nil {
|
||||
return x.Artists
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) GetNum() int32 {
|
||||
if x != nil {
|
||||
return x.Num
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskRequestTaskDetail) GetContentType() int32 {
|
||||
if x != nil {
|
||||
return x.ContentType
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type UpdateScheduleTaskResponse struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code"` // 响应码
|
||||
@ -1173,7 +1336,7 @@ type UpdateScheduleTaskResponse struct {
|
||||
|
||||
func (x *UpdateScheduleTaskResponse) Reset() {
|
||||
*x = UpdateScheduleTaskResponse{}
|
||||
mi := &file_pb_cron_proto_msgTypes[11]
|
||||
mi := &file_pb_cron_proto_msgTypes[12]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1185,7 +1348,7 @@ func (x *UpdateScheduleTaskResponse) String() string {
|
||||
func (*UpdateScheduleTaskResponse) ProtoMessage() {}
|
||||
|
||||
func (x *UpdateScheduleTaskResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[11]
|
||||
mi := &file_pb_cron_proto_msgTypes[12]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1198,7 +1361,7 @@ func (x *UpdateScheduleTaskResponse) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use UpdateScheduleTaskResponse.ProtoReflect.Descriptor instead.
|
||||
func (*UpdateScheduleTaskResponse) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{11}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{12}
|
||||
}
|
||||
|
||||
func (x *UpdateScheduleTaskResponse) GetCode() int32 {
|
||||
@ -1232,13 +1395,14 @@ type GetListScheduleTaskRequest struct {
|
||||
EndTime string `protobuf:"bytes,6,opt,name=end_time,json=endTime,proto3" json:"end_time"` // 结束日期
|
||||
Status int32 `protobuf:"varint,7,opt,name=Status,proto3" json:"Status"` // 任务状态
|
||||
ContentType int32 `protobuf:"varint,8,opt,name=content_type,json=contentType,proto3" json:"content_type"` // 内容类型
|
||||
Sorts map[string]string `protobuf:"bytes,9,rep,name=sorts,proto3" json:"sorts" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *GetListScheduleTaskRequest) Reset() {
|
||||
*x = GetListScheduleTaskRequest{}
|
||||
mi := &file_pb_cron_proto_msgTypes[12]
|
||||
mi := &file_pb_cron_proto_msgTypes[13]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1250,7 +1414,7 @@ func (x *GetListScheduleTaskRequest) String() string {
|
||||
func (*GetListScheduleTaskRequest) ProtoMessage() {}
|
||||
|
||||
func (x *GetListScheduleTaskRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[12]
|
||||
mi := &file_pb_cron_proto_msgTypes[13]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1263,7 +1427,7 @@ func (x *GetListScheduleTaskRequest) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetListScheduleTaskRequest.ProtoReflect.Descriptor instead.
|
||||
func (*GetListScheduleTaskRequest) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{12}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{13}
|
||||
}
|
||||
|
||||
func (x *GetListScheduleTaskRequest) GetPage() int32 {
|
||||
@ -1322,6 +1486,13 @@ func (x *GetListScheduleTaskRequest) GetContentType() int32 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *GetListScheduleTaskRequest) GetSorts() map[string]string {
|
||||
if x != nil {
|
||||
return x.Sorts
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type GetListScheduleTaskResponse struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code"` // 响应码
|
||||
@ -1336,7 +1507,7 @@ type GetListScheduleTaskResponse struct {
|
||||
|
||||
func (x *GetListScheduleTaskResponse) Reset() {
|
||||
*x = GetListScheduleTaskResponse{}
|
||||
mi := &file_pb_cron_proto_msgTypes[13]
|
||||
mi := &file_pb_cron_proto_msgTypes[14]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1348,7 +1519,7 @@ func (x *GetListScheduleTaskResponse) String() string {
|
||||
func (*GetListScheduleTaskResponse) ProtoMessage() {}
|
||||
|
||||
func (x *GetListScheduleTaskResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[13]
|
||||
mi := &file_pb_cron_proto_msgTypes[14]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1361,7 +1532,7 @@ func (x *GetListScheduleTaskResponse) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetListScheduleTaskResponse.ProtoReflect.Descriptor instead.
|
||||
func (*GetListScheduleTaskResponse) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{13}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{14}
|
||||
}
|
||||
|
||||
func (x *GetListScheduleTaskResponse) GetCode() int32 {
|
||||
@ -1422,7 +1593,7 @@ type GetListExecutionRecordRequest struct {
|
||||
|
||||
func (x *GetListExecutionRecordRequest) Reset() {
|
||||
*x = GetListExecutionRecordRequest{}
|
||||
mi := &file_pb_cron_proto_msgTypes[14]
|
||||
mi := &file_pb_cron_proto_msgTypes[15]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1434,7 +1605,7 @@ func (x *GetListExecutionRecordRequest) String() string {
|
||||
func (*GetListExecutionRecordRequest) ProtoMessage() {}
|
||||
|
||||
func (x *GetListExecutionRecordRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[14]
|
||||
mi := &file_pb_cron_proto_msgTypes[15]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1447,7 +1618,7 @@ func (x *GetListExecutionRecordRequest) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetListExecutionRecordRequest.ProtoReflect.Descriptor instead.
|
||||
func (*GetListExecutionRecordRequest) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{14}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{15}
|
||||
}
|
||||
|
||||
func (x *GetListExecutionRecordRequest) GetPage() int32 {
|
||||
@ -1520,7 +1691,7 @@ type GetListExecutionRecordResponse struct {
|
||||
|
||||
func (x *GetListExecutionRecordResponse) Reset() {
|
||||
*x = GetListExecutionRecordResponse{}
|
||||
mi := &file_pb_cron_proto_msgTypes[15]
|
||||
mi := &file_pb_cron_proto_msgTypes[16]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1532,7 +1703,7 @@ func (x *GetListExecutionRecordResponse) String() string {
|
||||
func (*GetListExecutionRecordResponse) ProtoMessage() {}
|
||||
|
||||
func (x *GetListExecutionRecordResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[15]
|
||||
mi := &file_pb_cron_proto_msgTypes[16]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1545,7 +1716,7 @@ func (x *GetListExecutionRecordResponse) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetListExecutionRecordResponse.ProtoReflect.Descriptor instead.
|
||||
func (*GetListExecutionRecordResponse) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{15}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{16}
|
||||
}
|
||||
|
||||
func (x *GetListExecutionRecordResponse) GetCode() int32 {
|
||||
@ -1607,7 +1778,7 @@ type GetListExecutionResultRequest struct {
|
||||
|
||||
func (x *GetListExecutionResultRequest) Reset() {
|
||||
*x = GetListExecutionResultRequest{}
|
||||
mi := &file_pb_cron_proto_msgTypes[16]
|
||||
mi := &file_pb_cron_proto_msgTypes[17]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1619,7 +1790,7 @@ func (x *GetListExecutionResultRequest) String() string {
|
||||
func (*GetListExecutionResultRequest) ProtoMessage() {}
|
||||
|
||||
func (x *GetListExecutionResultRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[16]
|
||||
mi := &file_pb_cron_proto_msgTypes[17]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1632,7 +1803,7 @@ func (x *GetListExecutionResultRequest) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetListExecutionResultRequest.ProtoReflect.Descriptor instead.
|
||||
func (*GetListExecutionResultRequest) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{16}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{17}
|
||||
}
|
||||
|
||||
func (x *GetListExecutionResultRequest) GetPage() int32 {
|
||||
@ -1712,7 +1883,7 @@ type GetListExecutionResultResponse struct {
|
||||
|
||||
func (x *GetListExecutionResultResponse) Reset() {
|
||||
*x = GetListExecutionResultResponse{}
|
||||
mi := &file_pb_cron_proto_msgTypes[17]
|
||||
mi := &file_pb_cron_proto_msgTypes[18]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1724,7 +1895,7 @@ func (x *GetListExecutionResultResponse) String() string {
|
||||
func (*GetListExecutionResultResponse) ProtoMessage() {}
|
||||
|
||||
func (x *GetListExecutionResultResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[17]
|
||||
mi := &file_pb_cron_proto_msgTypes[18]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1737,7 +1908,7 @@ func (x *GetListExecutionResultResponse) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetListExecutionResultResponse.ProtoReflect.Descriptor instead.
|
||||
func (*GetListExecutionResultResponse) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{17}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{18}
|
||||
}
|
||||
|
||||
func (x *GetListExecutionResultResponse) GetCode() int32 {
|
||||
@ -1792,7 +1963,7 @@ type TaskStatus struct {
|
||||
|
||||
func (x *TaskStatus) Reset() {
|
||||
*x = TaskStatus{}
|
||||
mi := &file_pb_cron_proto_msgTypes[18]
|
||||
mi := &file_pb_cron_proto_msgTypes[19]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1804,7 +1975,7 @@ func (x *TaskStatus) String() string {
|
||||
func (*TaskStatus) ProtoMessage() {}
|
||||
|
||||
func (x *TaskStatus) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[18]
|
||||
mi := &file_pb_cron_proto_msgTypes[19]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1817,7 +1988,7 @@ func (x *TaskStatus) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use TaskStatus.ProtoReflect.Descriptor instead.
|
||||
func (*TaskStatus) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{18}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{19}
|
||||
}
|
||||
|
||||
func (x *TaskStatus) GetKey() int32 {
|
||||
@ -1845,7 +2016,7 @@ type GetScheduleTaskStatusResponse struct {
|
||||
|
||||
func (x *GetScheduleTaskStatusResponse) Reset() {
|
||||
*x = GetScheduleTaskStatusResponse{}
|
||||
mi := &file_pb_cron_proto_msgTypes[19]
|
||||
mi := &file_pb_cron_proto_msgTypes[20]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -1857,7 +2028,7 @@ func (x *GetScheduleTaskStatusResponse) String() string {
|
||||
func (*GetScheduleTaskStatusResponse) ProtoMessage() {}
|
||||
|
||||
func (x *GetScheduleTaskStatusResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_cron_proto_msgTypes[19]
|
||||
mi := &file_pb_cron_proto_msgTypes[20]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -1870,7 +2041,7 @@ func (x *GetScheduleTaskStatusResponse) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetScheduleTaskStatusResponse.ProtoReflect.Descriptor instead.
|
||||
func (*GetScheduleTaskStatusResponse) Descriptor() ([]byte, []int) {
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{19}
|
||||
return file_pb_cron_proto_rawDescGZIP(), []int{20}
|
||||
}
|
||||
|
||||
func (x *GetScheduleTaskStatusResponse) GetCode() int32 {
|
||||
@ -1898,7 +2069,7 @@ var File_pb_cron_proto protoreflect.FileDescriptor
|
||||
|
||||
const file_pb_cron_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"\rpb/cron.proto\x12\x04cron\x1a\x1bgoogle/protobuf/empty.proto\"!\n" +
|
||||
"\rpb/cron.proto\x12\x04cron\"!\n" +
|
||||
"\x0fCommonIDRequest\x12\x0e\n" +
|
||||
"\x02id\x18\x01 \x01(\rR\x02id\">\n" +
|
||||
"\x0eCommonResponse\x12\x12\n" +
|
||||
@ -1968,7 +2139,7 @@ const file_pb_cron_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"task_title\x18\x0e \x01(\tR\ttaskTitle\x12!\n" +
|
||||
"\fcontent_type\x18\x0f \x01(\x05R\vcontentType\x12\x0e\n" +
|
||||
"\x02id\x18\x10 \x01(\x04R\x02id\"\xc8\x04\n" +
|
||||
"\x02id\x18\x10 \x01(\x04R\x02id\"\xc9\a\n" +
|
||||
"\x0fExecutionResult\x12!\n" +
|
||||
"\fexecution_id\x18\x01 \x01(\x05R\vexecutionId\x12\x17\n" +
|
||||
"\atask_id\x18\x02 \x01(\x05R\x06taskId\x12\x1b\n" +
|
||||
@ -1992,7 +2163,17 @@ const file_pb_cron_proto_rawDesc = "" +
|
||||
"work_title\x18\x10 \x01(\tR\tworkTitle\x12-\n" +
|
||||
"\x12status_description\x18n \x01(\tR\x11statusDescription\x12-\n" +
|
||||
"\x12result_description\x18o \x01(\tR\x11resultDescription\x128\n" +
|
||||
"\x18content_type_description\x18s \x01(\tR\x16contentTypeDescription\"\x83\x03\n" +
|
||||
"\x18content_type_description\x18s \x01(\tR\x16contentTypeDescription\x12*\n" +
|
||||
"\x10TIKTOKStatusDesc\x18y \x01(\tR\x10TIKTOKStatusDesc\x12,\n" +
|
||||
"\x11YOUTUBEStatusDesc\x18z \x01(\tR\x11YOUTUBEStatusDesc\x12$\n" +
|
||||
"\rINSStatusDesc\x18{ \x01(\tR\rINSStatusDesc\x12\"\n" +
|
||||
"\fDMStatusDesc\x18| \x01(\tR\fDMStatusDesc\x12,\n" +
|
||||
"\x11BULESKYStatusDesc\x18} \x01(\tR\x11BULESKYStatusDesc\x12#\n" +
|
||||
"\fTIKTOKResult\x18\x83\x01 \x01(\tR\fTIKTOKResult\x12%\n" +
|
||||
"\rYOUTUBEResult\x18\x84\x01 \x01(\tR\rYOUTUBEResult\x12\x1d\n" +
|
||||
"\tINSResult\x18\x85\x01 \x01(\tR\tINSResult\x12\x1b\n" +
|
||||
"\bDMResult\x18\x86\x01 \x01(\tR\bDMResult\x12%\n" +
|
||||
"\rBULESKYResult\x18\x87\x01 \x01(\tR\rBULESKYResult\"\x83\x03\n" +
|
||||
"\x19CreateScheduleTaskRequest\x12\x1d\n" +
|
||||
"\n" +
|
||||
"task_title\x18\x01 \x01(\tR\ttaskTitle\x12 \n" +
|
||||
@ -2018,7 +2199,7 @@ const file_pb_cron_proto_rawDesc = "" +
|
||||
"\x1aCreateScheduleTaskResponse\x12\x12\n" +
|
||||
"\x04code\x18\x01 \x01(\x05R\x04code\x12\x18\n" +
|
||||
"\amessage\x18\x02 \x01(\tR\amessage\x12&\n" +
|
||||
"\x04data\x18\x03 \x01(\v2\x12.cron.ScheduleTaskR\x04data\"\x9c\x03\n" +
|
||||
"\x04data\x18\x03 \x01(\v2\x12.cron.ScheduleTaskR\x04data\"\xae\x03\n" +
|
||||
"\x19UpdateScheduleTaskRequest\x12\x17\n" +
|
||||
"\atask_id\x18\x01 \x01(\x04R\x06taskId\x12\x1d\n" +
|
||||
"\n" +
|
||||
@ -2034,13 +2215,20 @@ const file_pb_cron_proto_rawDesc = "" +
|
||||
"\x12execute_start_time\x18\b \x01(\tR\x10executeStartTime\x12(\n" +
|
||||
"\x10execute_end_time\x18\t \x01(\tR\x0eexecuteEndTime\x12\x16\n" +
|
||||
"\x06remark\x18\n" +
|
||||
" \x01(\tR\x06remark\x128\n" +
|
||||
"\vtask_detail\x18\v \x01(\v2\x17.cron.TaskDetailRequestR\n" +
|
||||
"taskDetail\"r\n" +
|
||||
" \x01(\tR\x06remark\x12J\n" +
|
||||
"\vtask_detail\x18\v \x01(\v2).cron.UpdateScheduleTaskRequestTaskDetailR\n" +
|
||||
"taskDetail\"\xd2\x01\n" +
|
||||
"#UpdateScheduleTaskRequestTaskDetail\x12\x0e\n" +
|
||||
"\x02id\x18\x05 \x01(\x05R\x02id\x12\x17\n" +
|
||||
"\atask_id\x18\x06 \x01(\x05R\x06taskId\x12!\n" +
|
||||
"\fartist_count\x18\x01 \x01(\x05R\vartistCount\x12*\n" +
|
||||
"\aartists\x18\x02 \x03(\v2\x10.cron.ArtistInfoR\aartists\x12\x10\n" +
|
||||
"\x03num\x18\x03 \x01(\x05R\x03num\x12!\n" +
|
||||
"\fcontent_type\x18\x04 \x01(\x05R\vcontentType\"r\n" +
|
||||
"\x1aUpdateScheduleTaskResponse\x12\x12\n" +
|
||||
"\x04code\x18\x01 \x01(\x05R\x04code\x12\x18\n" +
|
||||
"\amessage\x18\x02 \x01(\tR\amessage\x12&\n" +
|
||||
"\x04data\x18\x03 \x01(\v2\x12.cron.ScheduleTaskR\x04data\"\x82\x02\n" +
|
||||
"\x04data\x18\x03 \x01(\v2\x12.cron.ScheduleTaskR\x04data\"\xff\x02\n" +
|
||||
"\x1aGetListScheduleTaskRequest\x12\x12\n" +
|
||||
"\x04page\x18\x01 \x01(\x05R\x04page\x12\x1b\n" +
|
||||
"\tpage_size\x18\x02 \x01(\x05R\bpageSize\x12\x1d\n" +
|
||||
@ -2052,7 +2240,12 @@ const file_pb_cron_proto_rawDesc = "" +
|
||||
"start_time\x18\x05 \x01(\tR\tstartTime\x12\x19\n" +
|
||||
"\bend_time\x18\x06 \x01(\tR\aendTime\x12\x16\n" +
|
||||
"\x06Status\x18\a \x01(\x05R\x06Status\x12!\n" +
|
||||
"\fcontent_type\x18\b \x01(\x05R\vcontentType\"\xb1\x01\n" +
|
||||
"\fcontent_type\x18\b \x01(\x05R\vcontentType\x12A\n" +
|
||||
"\x05sorts\x18\t \x03(\v2+.cron.GetListScheduleTaskRequest.SortsEntryR\x05sorts\x1a8\n" +
|
||||
"\n" +
|
||||
"SortsEntry\x12\x10\n" +
|
||||
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
||||
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb1\x01\n" +
|
||||
"\x1bGetListScheduleTaskResponse\x12\x12\n" +
|
||||
"\x04code\x18\x01 \x01(\x05R\x04code\x12\x18\n" +
|
||||
"\amessage\x18\x02 \x01(\tR\amessage\x12\x14\n" +
|
||||
@ -2120,7 +2313,7 @@ func file_pb_cron_proto_rawDescGZIP() []byte {
|
||||
return file_pb_cron_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pb_cron_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
|
||||
var file_pb_cron_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
|
||||
var file_pb_cron_proto_goTypes = []any{
|
||||
(*CommonIDRequest)(nil), // 0: cron.CommonIDRequest
|
||||
(*CommonResponse)(nil), // 1: cron.CommonResponse
|
||||
@ -2133,15 +2326,17 @@ var file_pb_cron_proto_goTypes = []any{
|
||||
(*TaskDetailRequest)(nil), // 8: cron.TaskDetailRequest
|
||||
(*CreateScheduleTaskResponse)(nil), // 9: cron.CreateScheduleTaskResponse
|
||||
(*UpdateScheduleTaskRequest)(nil), // 10: cron.UpdateScheduleTaskRequest
|
||||
(*UpdateScheduleTaskResponse)(nil), // 11: cron.UpdateScheduleTaskResponse
|
||||
(*GetListScheduleTaskRequest)(nil), // 12: cron.GetListScheduleTaskRequest
|
||||
(*GetListScheduleTaskResponse)(nil), // 13: cron.GetListScheduleTaskResponse
|
||||
(*GetListExecutionRecordRequest)(nil), // 14: cron.GetListExecutionRecordRequest
|
||||
(*GetListExecutionRecordResponse)(nil), // 15: cron.GetListExecutionRecordResponse
|
||||
(*GetListExecutionResultRequest)(nil), // 16: cron.GetListExecutionResultRequest
|
||||
(*GetListExecutionResultResponse)(nil), // 17: cron.GetListExecutionResultResponse
|
||||
(*TaskStatus)(nil), // 18: cron.TaskStatus
|
||||
(*GetScheduleTaskStatusResponse)(nil), // 19: cron.GetScheduleTaskStatusResponse
|
||||
(*UpdateScheduleTaskRequestTaskDetail)(nil), // 11: cron.UpdateScheduleTaskRequestTaskDetail
|
||||
(*UpdateScheduleTaskResponse)(nil), // 12: cron.UpdateScheduleTaskResponse
|
||||
(*GetListScheduleTaskRequest)(nil), // 13: cron.GetListScheduleTaskRequest
|
||||
(*GetListScheduleTaskResponse)(nil), // 14: cron.GetListScheduleTaskResponse
|
||||
(*GetListExecutionRecordRequest)(nil), // 15: cron.GetListExecutionRecordRequest
|
||||
(*GetListExecutionRecordResponse)(nil), // 16: cron.GetListExecutionRecordResponse
|
||||
(*GetListExecutionResultRequest)(nil), // 17: cron.GetListExecutionResultRequest
|
||||
(*GetListExecutionResultResponse)(nil), // 18: cron.GetListExecutionResultResponse
|
||||
(*TaskStatus)(nil), // 19: cron.TaskStatus
|
||||
(*GetScheduleTaskStatusResponse)(nil), // 20: cron.GetScheduleTaskStatusResponse
|
||||
nil, // 21: cron.GetListScheduleTaskRequest.SortsEntry
|
||||
}
|
||||
var file_pb_cron_proto_depIdxs = []int32{
|
||||
3, // 0: cron.ScheduleTask.task_detail:type_name -> cron.TaskDetail
|
||||
@ -2151,17 +2346,19 @@ var file_pb_cron_proto_depIdxs = []int32{
|
||||
8, // 4: cron.CreateScheduleTaskRequest.task_detail:type_name -> cron.TaskDetailRequest
|
||||
4, // 5: cron.TaskDetailRequest.artists:type_name -> cron.ArtistInfo
|
||||
2, // 6: cron.CreateScheduleTaskResponse.data:type_name -> cron.ScheduleTask
|
||||
8, // 7: cron.UpdateScheduleTaskRequest.task_detail:type_name -> cron.TaskDetailRequest
|
||||
2, // 8: cron.UpdateScheduleTaskResponse.data:type_name -> cron.ScheduleTask
|
||||
2, // 9: cron.GetListScheduleTaskResponse.data:type_name -> cron.ScheduleTask
|
||||
5, // 10: cron.GetListExecutionRecordResponse.data:type_name -> cron.ExecutionRecord
|
||||
6, // 11: cron.GetListExecutionResultResponse.data:type_name -> cron.ExecutionResult
|
||||
18, // 12: cron.GetScheduleTaskStatusResponse.data:type_name -> cron.TaskStatus
|
||||
13, // [13:13] is the sub-list for method output_type
|
||||
13, // [13:13] is the sub-list for method input_type
|
||||
13, // [13:13] is the sub-list for extension type_name
|
||||
13, // [13:13] is the sub-list for extension extendee
|
||||
0, // [0:13] is the sub-list for field type_name
|
||||
11, // 7: cron.UpdateScheduleTaskRequest.task_detail:type_name -> cron.UpdateScheduleTaskRequestTaskDetail
|
||||
4, // 8: cron.UpdateScheduleTaskRequestTaskDetail.artists:type_name -> cron.ArtistInfo
|
||||
2, // 9: cron.UpdateScheduleTaskResponse.data:type_name -> cron.ScheduleTask
|
||||
21, // 10: cron.GetListScheduleTaskRequest.sorts:type_name -> cron.GetListScheduleTaskRequest.SortsEntry
|
||||
2, // 11: cron.GetListScheduleTaskResponse.data:type_name -> cron.ScheduleTask
|
||||
5, // 12: cron.GetListExecutionRecordResponse.data:type_name -> cron.ExecutionRecord
|
||||
6, // 13: cron.GetListExecutionResultResponse.data:type_name -> cron.ExecutionResult
|
||||
19, // 14: cron.GetScheduleTaskStatusResponse.data:type_name -> cron.TaskStatus
|
||||
15, // [15:15] is the sub-list for method output_type
|
||||
15, // [15:15] is the sub-list for method input_type
|
||||
15, // [15:15] is the sub-list for extension type_name
|
||||
15, // [15:15] is the sub-list for extension extendee
|
||||
0, // [0:15] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pb_cron_proto_init() }
|
||||
@ -2175,7 +2372,7 @@ func file_pb_cron_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: unsafe.Slice(unsafe.StringData(file_pb_cron_proto_rawDesc), len(file_pb_cron_proto_rawDesc)),
|
||||
NumEnums: 0,
|
||||
NumMessages: 20,
|
||||
NumMessages: 22,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
|
||||
@ -7,7 +7,6 @@ import (
|
||||
fmt "fmt"
|
||||
math "math"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
_ "google.golang.org/protobuf/types/known/emptypb"
|
||||
github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators"
|
||||
)
|
||||
|
||||
@ -97,6 +96,16 @@ func (this *UpdateScheduleTaskRequest) Validate() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *UpdateScheduleTaskRequestTaskDetail) Validate() error {
|
||||
for _, item := range this.Artists {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Artists", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *UpdateScheduleTaskResponse) Validate() error {
|
||||
if this.Data != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Data); err != nil {
|
||||
@ -106,6 +115,7 @@ func (this *UpdateScheduleTaskResponse) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetListScheduleTaskRequest) Validate() error {
|
||||
// Validation of proto3 map<> fields is unsupported.
|
||||
return nil
|
||||
}
|
||||
func (this *GetListScheduleTaskResponse) Validate() error {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -9,20 +9,53 @@ service Governance{
|
||||
rpc List(ListReq) returns (ListResp) {}
|
||||
rpc Delete(DeleteReq) returns (DeleteResp) {}
|
||||
rpc Edit(EditReq) returns (EditResp) {}
|
||||
rpc UpdataStatus(UpdataStatusReq) returns (UpdataStatusResp) {}
|
||||
rpc GetGovernanceInfo(GetGovernanceInfoReq) returns (GetGovernanceInfoResp) {}
|
||||
rpc Create(CreateReq) returns (CreateResp) {}
|
||||
rpc Display(DisplayReq) returns (DisplayResp) {}
|
||||
}
|
||||
|
||||
message LangSetting {
|
||||
string langType = 1;//语言类型
|
||||
int32 isSetting = 2;//是否设置
|
||||
}
|
||||
|
||||
message GovernanceLangData{
|
||||
string title = 1;//标题
|
||||
string attachment = 2;//附件
|
||||
string attachmentName = 3;//附件名称
|
||||
int32 isSetting = 4;//是否设置
|
||||
}
|
||||
|
||||
message GovernanceLang{
|
||||
string langType = 1;//语言类型
|
||||
GovernanceLangData data = 2;//语言数据
|
||||
}
|
||||
|
||||
message GovernanceInfo{
|
||||
string uuid = 1;
|
||||
repeated GovernanceLang dataByLang = 2;//语言数据
|
||||
int32 sort = 3;//排序
|
||||
int32 status = 4;//状态
|
||||
}
|
||||
|
||||
message Item{
|
||||
int32 id = 1;
|
||||
string uuid = 1;
|
||||
string title = 2;
|
||||
string attachment = 3;
|
||||
string attachmentName = 4;
|
||||
int32 sort = 5;
|
||||
int32 status = 6;
|
||||
int64 updatedAt = 7;
|
||||
string operator = 8;
|
||||
int32 operatorId = 9;
|
||||
repeated LangSetting langSetting = 5;//语言设置
|
||||
int32 sort = 6;
|
||||
int32 status = 7;
|
||||
int64 updatedAt = 8;
|
||||
string operator = 9;
|
||||
int32 operatorId = 10;
|
||||
}
|
||||
|
||||
message DisplayItem{
|
||||
string title = 1;
|
||||
string attachment = 2;
|
||||
string attachmentName = 3;
|
||||
}
|
||||
|
||||
message ListReq{
|
||||
@ -38,34 +71,48 @@ message ListResp{
|
||||
}
|
||||
|
||||
message DeleteReq{
|
||||
int32 id = 1;
|
||||
string uuid = 1;
|
||||
}
|
||||
|
||||
message DeleteResp{
|
||||
}
|
||||
|
||||
message EditReq{
|
||||
uint32 id = 1;
|
||||
string title = 2;
|
||||
string attachment = 3;
|
||||
string attachmentName = 4;
|
||||
int32 sort = 5;
|
||||
int32 status = 6;
|
||||
string operator = 7;
|
||||
int32 operatorId = 8;
|
||||
string uuid = 1;
|
||||
repeated GovernanceLang dataByLang = 2;
|
||||
int32 sort = 3;
|
||||
string operator = 4;
|
||||
int32 operatorId = 5;
|
||||
}
|
||||
|
||||
message EditResp{
|
||||
}
|
||||
|
||||
message UpdataStatusReq{
|
||||
string uuid = 1;
|
||||
int32 status = 2;
|
||||
string operator = 3;
|
||||
int32 operatorId = 4;
|
||||
}
|
||||
message UpdataStatusResp{
|
||||
string msg = 1;
|
||||
}
|
||||
|
||||
message GetGovernanceInfoReq{
|
||||
string uuid = 1;
|
||||
}
|
||||
message GetGovernanceInfoResp{
|
||||
string msg = 1;
|
||||
GovernanceInfo data = 2;
|
||||
}
|
||||
|
||||
message CreateReq{
|
||||
string title = 1;
|
||||
uint32 sort = 2;
|
||||
string attachment = 3;
|
||||
string attachmentName = 4;
|
||||
int32 status = 5;
|
||||
string operator = 6;
|
||||
int32 operatorId = 7;
|
||||
string uuid = 1;
|
||||
repeated GovernanceLang dataByLang = 2;
|
||||
uint32 sort = 3;
|
||||
int32 status = 4;
|
||||
string operator = 5;
|
||||
int32 operatorId = 6;
|
||||
}
|
||||
|
||||
message CreateResp{
|
||||
@ -73,9 +120,9 @@ message CreateResp{
|
||||
}
|
||||
|
||||
message DisplayReq{
|
||||
|
||||
string langType = 1;//语言类型
|
||||
}
|
||||
|
||||
message DisplayResp{
|
||||
repeated Item data = 1;
|
||||
repeated DisplayItem data = 1;
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||
// source: governance.proto
|
||||
// source: api/governance/governance.proto
|
||||
|
||||
package governance
|
||||
|
||||
@ -15,7 +15,41 @@ var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
func (this *LangSetting) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GovernanceLangData) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GovernanceLang) Validate() error {
|
||||
if this.Data != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Data); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Data", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *GovernanceInfo) Validate() error {
|
||||
for _, item := range this.DataByLang {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("DataByLang", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *Item) Validate() error {
|
||||
for _, item := range this.LangSetting {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("LangSetting", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *DisplayItem) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *ListReq) Validate() error {
|
||||
@ -38,12 +72,43 @@ func (this *DeleteResp) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *EditReq) Validate() error {
|
||||
for _, item := range this.DataByLang {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("DataByLang", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *EditResp) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *UpdataStatusReq) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *UpdataStatusResp) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetGovernanceInfoReq) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetGovernanceInfoResp) Validate() error {
|
||||
if this.Data != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Data); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Data", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *CreateReq) Validate() error {
|
||||
for _, item := range this.DataByLang {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("DataByLang", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *CreateResp) Validate() error {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
// Code generated by protoc-gen-go-triple. DO NOT EDIT.
|
||||
// versions:
|
||||
// - protoc-gen-go-triple v1.0.8
|
||||
// - protoc v3.20.3
|
||||
// source: governance.proto
|
||||
// - protoc-gen-go-triple v1.0.5
|
||||
// - protoc v5.26.0
|
||||
// source: api/governance/governance.proto
|
||||
|
||||
package governance
|
||||
|
||||
@ -31,6 +31,8 @@ type GovernanceClient interface {
|
||||
List(ctx context.Context, in *ListReq, opts ...grpc_go.CallOption) (*ListResp, common.ErrorWithAttachment)
|
||||
Delete(ctx context.Context, in *DeleteReq, opts ...grpc_go.CallOption) (*DeleteResp, common.ErrorWithAttachment)
|
||||
Edit(ctx context.Context, in *EditReq, opts ...grpc_go.CallOption) (*EditResp, common.ErrorWithAttachment)
|
||||
UpdataStatus(ctx context.Context, in *UpdataStatusReq, opts ...grpc_go.CallOption) (*UpdataStatusResp, common.ErrorWithAttachment)
|
||||
GetGovernanceInfo(ctx context.Context, in *GetGovernanceInfoReq, opts ...grpc_go.CallOption) (*GetGovernanceInfoResp, common.ErrorWithAttachment)
|
||||
Create(ctx context.Context, in *CreateReq, opts ...grpc_go.CallOption) (*CreateResp, common.ErrorWithAttachment)
|
||||
Display(ctx context.Context, in *DisplayReq, opts ...grpc_go.CallOption) (*DisplayResp, common.ErrorWithAttachment)
|
||||
}
|
||||
@ -43,6 +45,8 @@ type GovernanceClientImpl struct {
|
||||
List func(ctx context.Context, in *ListReq) (*ListResp, error)
|
||||
Delete func(ctx context.Context, in *DeleteReq) (*DeleteResp, error)
|
||||
Edit func(ctx context.Context, in *EditReq) (*EditResp, error)
|
||||
UpdataStatus func(ctx context.Context, in *UpdataStatusReq) (*UpdataStatusResp, error)
|
||||
GetGovernanceInfo func(ctx context.Context, in *GetGovernanceInfoReq) (*GetGovernanceInfoResp, error)
|
||||
Create func(ctx context.Context, in *CreateReq) (*CreateResp, error)
|
||||
Display func(ctx context.Context, in *DisplayReq) (*DisplayResp, error)
|
||||
}
|
||||
@ -77,6 +81,18 @@ func (c *governanceClient) Edit(ctx context.Context, in *EditReq, opts ...grpc_g
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Edit", in, out)
|
||||
}
|
||||
|
||||
func (c *governanceClient) UpdataStatus(ctx context.Context, in *UpdataStatusReq, opts ...grpc_go.CallOption) (*UpdataStatusResp, common.ErrorWithAttachment) {
|
||||
out := new(UpdataStatusResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdataStatus", in, out)
|
||||
}
|
||||
|
||||
func (c *governanceClient) GetGovernanceInfo(ctx context.Context, in *GetGovernanceInfoReq, opts ...grpc_go.CallOption) (*GetGovernanceInfoResp, common.ErrorWithAttachment) {
|
||||
out := new(GetGovernanceInfoResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetGovernanceInfo", in, out)
|
||||
}
|
||||
|
||||
func (c *governanceClient) Create(ctx context.Context, in *CreateReq, opts ...grpc_go.CallOption) (*CreateResp, common.ErrorWithAttachment) {
|
||||
out := new(CreateResp)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
@ -96,6 +112,8 @@ type GovernanceServer interface {
|
||||
List(context.Context, *ListReq) (*ListResp, error)
|
||||
Delete(context.Context, *DeleteReq) (*DeleteResp, error)
|
||||
Edit(context.Context, *EditReq) (*EditResp, error)
|
||||
UpdataStatus(context.Context, *UpdataStatusReq) (*UpdataStatusResp, error)
|
||||
GetGovernanceInfo(context.Context, *GetGovernanceInfoReq) (*GetGovernanceInfoResp, error)
|
||||
Create(context.Context, *CreateReq) (*CreateResp, error)
|
||||
Display(context.Context, *DisplayReq) (*DisplayResp, error)
|
||||
mustEmbedUnimplementedGovernanceServer()
|
||||
@ -115,6 +133,12 @@ func (UnimplementedGovernanceServer) Delete(context.Context, *DeleteReq) (*Delet
|
||||
func (UnimplementedGovernanceServer) Edit(context.Context, *EditReq) (*EditResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Edit not implemented")
|
||||
}
|
||||
func (UnimplementedGovernanceServer) UpdataStatus(context.Context, *UpdataStatusReq) (*UpdataStatusResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method UpdataStatus not implemented")
|
||||
}
|
||||
func (UnimplementedGovernanceServer) GetGovernanceInfo(context.Context, *GetGovernanceInfoReq) (*GetGovernanceInfoResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetGovernanceInfo not implemented")
|
||||
}
|
||||
func (UnimplementedGovernanceServer) Create(context.Context, *CreateReq) (*CreateResp, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Create not implemented")
|
||||
}
|
||||
@ -236,6 +260,64 @@ func _Governance_Edit_Handler(srv interface{}, ctx context.Context, dec func(int
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Governance_UpdataStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(UpdataStatusReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("UpdataStatus", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Governance_GetGovernanceInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetGovernanceInfoReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetGovernanceInfo", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Governance_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateReq)
|
||||
if err := dec(in); err != nil {
|
||||
@ -313,6 +395,14 @@ var Governance_ServiceDesc = grpc_go.ServiceDesc{
|
||||
MethodName: "Edit",
|
||||
Handler: _Governance_Edit_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "UpdataStatus",
|
||||
Handler: _Governance_UpdataStatus_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetGovernanceInfo",
|
||||
Handler: _Governance_GetGovernanceInfo_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Create",
|
||||
Handler: _Governance_Create_Handler,
|
||||
@ -323,5 +413,5 @@ var Governance_ServiceDesc = grpc_go.ServiceDesc{
|
||||
},
|
||||
},
|
||||
Streams: []grpc_go.StreamDesc{},
|
||||
Metadata: "governance.proto",
|
||||
Metadata: "api/governance/governance.proto",
|
||||
}
|
||||
|
||||
@ -190,9 +190,9 @@ type IsSecFilingExistReq struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
FilingDate string `protobuf:"bytes,1,opt,name=filingDate,proto3" json:"filingDate"`
|
||||
Form string `protobuf:"bytes,2,opt,name=form,proto3" json:"form"`
|
||||
FinalLink string `protobuf:"bytes,3,opt,name=finalLink,proto3" json:"finalLink"`
|
||||
FilingDate string `protobuf:"bytes,1,opt,name=filingDate,proto3" json:"filingDate,omitempty"`
|
||||
Form string `protobuf:"bytes,2,opt,name=form,proto3" json:"form,omitempty"`
|
||||
FinalLink string `protobuf:"bytes,3,opt,name=finalLink,proto3" json:"finalLink,omitempty"`
|
||||
}
|
||||
|
||||
func (x *IsSecFilingExistReq) Reset() {
|
||||
@ -253,7 +253,7 @@ type IsSecFilingExistResp struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Exist bool `protobuf:"varint,1,opt,name=exist,proto3" json:"exist"`
|
||||
Exist bool `protobuf:"varint,1,opt,name=exist,proto3" json:"exist,omitempty"`
|
||||
}
|
||||
|
||||
func (x *IsSecFilingExistResp) Reset() {
|
||||
@ -300,8 +300,8 @@ type CommonResp struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg"`
|
||||
FilingKey string `protobuf:"bytes,2,opt,name=filingKey,json=filing_key,proto3" json:"filingKey"`
|
||||
Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
|
||||
FilingKey string `protobuf:"bytes,2,opt,name=filingKey,json=filing_key,proto3" json:"filingKey,omitempty"`
|
||||
}
|
||||
|
||||
func (x *CommonResp) Reset() {
|
||||
@ -355,22 +355,22 @@ type SecFiling struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Idx int32 `protobuf:"varint,1,opt,name=idx,proto3" json:"idx"`
|
||||
FilingKey string `protobuf:"bytes,2,opt,name=filingKey,json=filing_key,proto3" json:"filingKey"`
|
||||
FilingDate string `protobuf:"bytes,3,opt,name=filingDate,json=filing_date,proto3" json:"filingDate"`
|
||||
Form string `protobuf:"bytes,4,opt,name=form,proto3" json:"form"`
|
||||
Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description"`
|
||||
FormDescription string `protobuf:"bytes,6,opt,name=formDescription,json=form_description,proto3" json:"formDescription"`
|
||||
FileLink string `protobuf:"bytes,7,opt,name=fileLink,json=file_link,proto3" json:"fileLink"`
|
||||
DataFiles []*DataFiles `protobuf:"bytes,8,rep,name=dataFiles,json=data_files,proto3" json:"dataFiles"`
|
||||
PdfFile string `protobuf:"bytes,9,opt,name=pdfFile,json=pdf_file,proto3" json:"pdfFile"`
|
||||
WordFile string `protobuf:"bytes,10,opt,name=wordFile,json=word_file,proto3" json:"wordFile"`
|
||||
ExcelFile string `protobuf:"bytes,11,opt,name=excelFile,json=excel_file,proto3" json:"excelFile"`
|
||||
Status int32 `protobuf:"varint,12,opt,name=status,proto3" json:"status"`
|
||||
Operator string `protobuf:"bytes,13,opt,name=operator,proto3" json:"operator"`
|
||||
OperatorId int32 `protobuf:"varint,14,opt,name=operatorId,json=operator_id,proto3" json:"operatorId"`
|
||||
CreatedAt string `protobuf:"bytes,15,opt,name=createdAt,json=created_at,proto3" json:"createdAt"`
|
||||
UpdatedAt string `protobuf:"bytes,16,opt,name=updatedAt,json=updated_at,proto3" json:"updatedAt"`
|
||||
Idx int32 `protobuf:"varint,1,opt,name=idx,proto3" json:"idx,omitempty"`
|
||||
FilingKey string `protobuf:"bytes,2,opt,name=filingKey,json=filing_key,proto3" json:"filingKey,omitempty"`
|
||||
FilingDate string `protobuf:"bytes,3,opt,name=filingDate,json=filing_date,proto3" json:"filingDate,omitempty"`
|
||||
Form string `protobuf:"bytes,4,opt,name=form,proto3" json:"form,omitempty"`
|
||||
Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
|
||||
FormDescription string `protobuf:"bytes,6,opt,name=formDescription,json=form_description,proto3" json:"formDescription,omitempty"`
|
||||
FileLink string `protobuf:"bytes,7,opt,name=fileLink,json=file_link,proto3" json:"fileLink,omitempty"`
|
||||
DataFiles []*DataFiles `protobuf:"bytes,8,rep,name=dataFiles,json=data_files,proto3" json:"dataFiles,omitempty"`
|
||||
PdfFile string `protobuf:"bytes,9,opt,name=pdfFile,json=pdf_file,proto3" json:"pdfFile,omitempty"`
|
||||
WordFile string `protobuf:"bytes,10,opt,name=wordFile,json=word_file,proto3" json:"wordFile,omitempty"`
|
||||
ExcelFile string `protobuf:"bytes,11,opt,name=excelFile,json=excel_file,proto3" json:"excelFile,omitempty"`
|
||||
Status int32 `protobuf:"varint,12,opt,name=status,proto3" json:"status,omitempty"`
|
||||
Operator string `protobuf:"bytes,13,opt,name=operator,proto3" json:"operator,omitempty"`
|
||||
OperatorId int32 `protobuf:"varint,14,opt,name=operatorId,json=operator_id,proto3" json:"operatorId,omitempty"`
|
||||
CreatedAt string `protobuf:"bytes,15,opt,name=createdAt,json=created_at,proto3" json:"createdAt,omitempty"`
|
||||
UpdatedAt string `protobuf:"bytes,16,opt,name=updatedAt,json=updated_at,proto3" json:"updatedAt,omitempty"`
|
||||
}
|
||||
|
||||
func (x *SecFiling) Reset() {
|
||||
@ -522,8 +522,8 @@ type DataFiles struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description"`
|
||||
FileUrl string `protobuf:"bytes,2,opt,name=fileUrl,json=file_url,proto3" json:"fileUrl"`
|
||||
Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"`
|
||||
FileUrl string `protobuf:"bytes,2,opt,name=fileUrl,json=file_url,proto3" json:"fileUrl,omitempty"`
|
||||
}
|
||||
|
||||
func (x *DataFiles) Reset() {
|
||||
@ -577,17 +577,17 @@ type CreateSecFilingReq struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
FilingDate string `protobuf:"bytes,1,opt,name=filingDate,proto3" json:"filingDate"`
|
||||
Form string `protobuf:"bytes,2,opt,name=form,proto3" json:"form"`
|
||||
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description"`
|
||||
FormDescription string `protobuf:"bytes,4,opt,name=formDescription,proto3" json:"formDescription"`
|
||||
FileLink string `protobuf:"bytes,5,opt,name=fileLink,proto3" json:"fileLink"`
|
||||
DataFiles []*DataFiles `protobuf:"bytes,6,rep,name=dataFiles,proto3" json:"dataFiles"`
|
||||
PdfFile string `protobuf:"bytes,7,opt,name=pdfFile,proto3" json:"pdfFile"`
|
||||
WordFile string `protobuf:"bytes,8,opt,name=wordFile,proto3" json:"wordFile"`
|
||||
ExcelFile string `protobuf:"bytes,9,opt,name=excelFile,proto3" json:"excelFile"`
|
||||
Operator string `protobuf:"bytes,10,opt,name=operator,proto3" json:"operator"`
|
||||
OperatorId int32 `protobuf:"varint,11,opt,name=operatorId,proto3" json:"operatorId"`
|
||||
FilingDate string `protobuf:"bytes,1,opt,name=filingDate,proto3" json:"filingDate,omitempty"`
|
||||
Form string `protobuf:"bytes,2,opt,name=form,proto3" json:"form,omitempty"`
|
||||
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
|
||||
FormDescription string `protobuf:"bytes,4,opt,name=formDescription,proto3" json:"formDescription,omitempty"`
|
||||
FileLink string `protobuf:"bytes,5,opt,name=fileLink,proto3" json:"fileLink,omitempty"`
|
||||
DataFiles []*DataFiles `protobuf:"bytes,6,rep,name=dataFiles,proto3" json:"dataFiles,omitempty"`
|
||||
PdfFile string `protobuf:"bytes,7,opt,name=pdfFile,proto3" json:"pdfFile,omitempty"`
|
||||
WordFile string `protobuf:"bytes,8,opt,name=wordFile,proto3" json:"wordFile,omitempty"`
|
||||
ExcelFile string `protobuf:"bytes,9,opt,name=excelFile,proto3" json:"excelFile,omitempty"`
|
||||
Operator string `protobuf:"bytes,10,opt,name=operator,proto3" json:"operator,omitempty"`
|
||||
OperatorId int32 `protobuf:"varint,11,opt,name=operatorId,proto3" json:"operatorId,omitempty"`
|
||||
}
|
||||
|
||||
func (x *CreateSecFilingReq) Reset() {
|
||||
@ -704,18 +704,18 @@ type UpdateSecFilingReq struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey"`
|
||||
Form string `protobuf:"bytes,2,opt,name=form,proto3" json:"form"`
|
||||
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description"`
|
||||
FormDescription string `protobuf:"bytes,4,opt,name=formDescription,proto3" json:"formDescription"`
|
||||
FileLink string `protobuf:"bytes,5,opt,name=fileLink,proto3" json:"fileLink"`
|
||||
DataFiles []*DataFiles `protobuf:"bytes,6,rep,name=dataFiles,proto3" json:"dataFiles"`
|
||||
PdfFile string `protobuf:"bytes,7,opt,name=pdfFile,proto3" json:"pdfFile"`
|
||||
WordFile string `protobuf:"bytes,8,opt,name=wordFile,proto3" json:"wordFile"`
|
||||
ExcelFile string `protobuf:"bytes,9,opt,name=excelFile,proto3" json:"excelFile"`
|
||||
Operator string `protobuf:"bytes,10,opt,name=operator,proto3" json:"operator"`
|
||||
OperatorId int32 `protobuf:"varint,11,opt,name=operatorId,proto3" json:"operatorId"`
|
||||
FilingDate string `protobuf:"bytes,12,opt,name=filingDate,proto3" json:"filingDate"`
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey,omitempty"`
|
||||
Form string `protobuf:"bytes,2,opt,name=form,proto3" json:"form,omitempty"`
|
||||
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
|
||||
FormDescription string `protobuf:"bytes,4,opt,name=formDescription,proto3" json:"formDescription,omitempty"`
|
||||
FileLink string `protobuf:"bytes,5,opt,name=fileLink,proto3" json:"fileLink,omitempty"`
|
||||
DataFiles []*DataFiles `protobuf:"bytes,6,rep,name=dataFiles,proto3" json:"dataFiles,omitempty"`
|
||||
PdfFile string `protobuf:"bytes,7,opt,name=pdfFile,proto3" json:"pdfFile,omitempty"`
|
||||
WordFile string `protobuf:"bytes,8,opt,name=wordFile,proto3" json:"wordFile,omitempty"`
|
||||
ExcelFile string `protobuf:"bytes,9,opt,name=excelFile,proto3" json:"excelFile,omitempty"`
|
||||
Operator string `protobuf:"bytes,10,opt,name=operator,proto3" json:"operator,omitempty"`
|
||||
OperatorId int32 `protobuf:"varint,11,opt,name=operatorId,proto3" json:"operatorId,omitempty"`
|
||||
FilingDate string `protobuf:"bytes,12,opt,name=filingDate,proto3" json:"filingDate,omitempty"`
|
||||
}
|
||||
|
||||
func (x *UpdateSecFilingReq) Reset() {
|
||||
@ -839,7 +839,7 @@ type DetailSecFilingReq struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey"`
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey,omitempty"`
|
||||
}
|
||||
|
||||
func (x *DetailSecFilingReq) Reset() {
|
||||
@ -886,8 +886,8 @@ type SecFilingDetailResp struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg"`
|
||||
Data *SecFiling `protobuf:"bytes,2,opt,name=data,proto3" json:"data"`
|
||||
Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
|
||||
Data *SecFiling `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
|
||||
}
|
||||
|
||||
func (x *SecFilingDetailResp) Reset() {
|
||||
@ -941,12 +941,12 @@ type ListSecFilingReq struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Page uint32 `protobuf:"varint,1,opt,name=page,proto3" json:"page"`
|
||||
PageSize uint32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize"`
|
||||
Form string `protobuf:"bytes,3,opt,name=form,proto3" json:"form"`
|
||||
FilingDateBegin string `protobuf:"bytes,4,opt,name=filingDateBegin,proto3" json:"filingDateBegin"`
|
||||
FilingDateEnd string `protobuf:"bytes,5,opt,name=filingDateEnd,proto3" json:"filingDateEnd"`
|
||||
Status int32 `protobuf:"varint,6,opt,name=status,proto3" json:"status"`
|
||||
Page uint32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"`
|
||||
PageSize uint32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
|
||||
Form string `protobuf:"bytes,3,opt,name=form,proto3" json:"form,omitempty"`
|
||||
FilingDateBegin string `protobuf:"bytes,4,opt,name=filingDateBegin,proto3" json:"filingDateBegin,omitempty"`
|
||||
FilingDateEnd string `protobuf:"bytes,5,opt,name=filingDateEnd,proto3" json:"filingDateEnd,omitempty"`
|
||||
Status int32 `protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ListSecFilingReq) Reset() {
|
||||
@ -1028,9 +1028,9 @@ type SecFilingListResp struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg"`
|
||||
Total uint32 `protobuf:"varint,2,opt,name=total,proto3" json:"total"`
|
||||
Data []*SecFiling `protobuf:"bytes,3,rep,name=data,proto3" json:"data"`
|
||||
Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
|
||||
Total uint32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
|
||||
Data []*SecFiling `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"`
|
||||
}
|
||||
|
||||
func (x *SecFilingListResp) Reset() {
|
||||
@ -1233,9 +1233,9 @@ type DeleteSecFilingReq struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey"`
|
||||
Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator"`
|
||||
OperatorId int32 `protobuf:"varint,3,opt,name=operatorId,proto3" json:"operatorId"`
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey,omitempty"`
|
||||
Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"`
|
||||
OperatorId int32 `protobuf:"varint,3,opt,name=operatorId,proto3" json:"operatorId,omitempty"`
|
||||
}
|
||||
|
||||
func (x *DeleteSecFilingReq) Reset() {
|
||||
@ -1296,10 +1296,10 @@ type UpdateSecFilingStatusReq struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey"`
|
||||
Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status"`
|
||||
Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator"`
|
||||
OperatorId int32 `protobuf:"varint,4,opt,name=operatorId,proto3" json:"operatorId"`
|
||||
FilingKey string `protobuf:"bytes,1,opt,name=filingKey,proto3" json:"filingKey,omitempty"`
|
||||
Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
|
||||
Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"`
|
||||
OperatorId int32 `protobuf:"varint,4,opt,name=operatorId,proto3" json:"operatorId,omitempty"`
|
||||
}
|
||||
|
||||
func (x *UpdateSecFilingStatusReq) Reset() {
|
||||
|
||||
2245
api/supplier/supplier.pb.go
Normal file
2245
api/supplier/supplier.pb.go
Normal file
File diff suppressed because it is too large
Load Diff
212
api/supplier/supplier.proto
Normal file
212
api/supplier/supplier.proto
Normal file
@ -0,0 +1,212 @@
|
||||
syntax = "proto3";
|
||||
package supplier;
|
||||
|
||||
option go_package = "./;supplier";
|
||||
|
||||
// FiEE供应商微服务
|
||||
service Supplier {
|
||||
//供应商curd
|
||||
rpc GetSupplier(GetSupplierRequest) returns (UpdateSupplierRequest) {}
|
||||
rpc CreateSupplier(CreateSupplierRequest) returns (CreateSupplierResponse) {}
|
||||
rpc UpdateSupplier(UpdateSupplierRequest) returns (CreateSupplierResponse) {}
|
||||
rpc GetSupplierList(GetSupplierListRequest) returns (GetSupplierListResponse) {}
|
||||
//组织字典
|
||||
rpc CreateOrganizeDictionary(CreateOrganizeDictionaryRequest) returns (CreateOrganizeDictionaryResponse) {}
|
||||
rpc GetOrganizeDictionaryList(GetOrganizeDictionaryListRequest) returns (GetOrganizeDictionaryListResponse) {}
|
||||
rpc GetOrganizeDictionaryInfo(CreateOrganizeDictionaryRequest) returns (OrganizeDictionary) {}
|
||||
//国家组织
|
||||
rpc GetCountryRegionList(GetCountryRegionListRequest) returns (GetCountryRegionListResponse) {}
|
||||
rpc GetCountryRegionInfo(GetCountryRegionInfoRequest) returns (CountryRegion) {}
|
||||
//导入
|
||||
rpc CreateImportRecord(CreateImportRecordRequest) returns (CreateImportRecordResponse) {}
|
||||
rpc GetImportRecordInfo(GetImportRecordRequest) returns (GetImportRecordResponse) {}
|
||||
}
|
||||
message GetImportRecordRequest{
|
||||
string uuid = 1;
|
||||
}
|
||||
message GetImportRecordResponse{
|
||||
uint64 successNum = 1;
|
||||
uint64 failNum = 2;
|
||||
string deriveUrl = 3;
|
||||
}
|
||||
message CreateImportRecordRequest{
|
||||
repeated string supplierCodes = 1;
|
||||
uint64 status = 2;
|
||||
uint64 userId = 3;
|
||||
string toLeadUrl = 4;
|
||||
string deriveUrl = 5;
|
||||
string uuid = 6;
|
||||
uint64 successNum = 7;
|
||||
uint64 failNum = 8;
|
||||
}
|
||||
message CreateImportRecordResponse{
|
||||
uint64 id = 1;
|
||||
}
|
||||
message GetCountryRegionListResponse{
|
||||
repeated CountryRegion data = 1;
|
||||
uint64 page = 2;
|
||||
uint64 pageSize = 3;
|
||||
uint64 total = 4;
|
||||
}
|
||||
message CountryRegion{
|
||||
uint64 id = 1;
|
||||
string nameEN = 2;
|
||||
string nameCN = 3;
|
||||
string code = 4;
|
||||
}
|
||||
message GetCountryRegionInfoRequest{
|
||||
string zhAndCode = 1;
|
||||
}
|
||||
message GetCountryRegionListRequest{
|
||||
uint64 page = 1;
|
||||
uint64 pageSize = 2;
|
||||
string nameEN = 3;
|
||||
string nameCN = 4;
|
||||
string code = 5;
|
||||
}
|
||||
message OrganizeDictionary{
|
||||
uint64 id = 1;
|
||||
string name = 2;
|
||||
}
|
||||
message GetOrganizeDictionaryListResponse{
|
||||
repeated OrganizeDictionary data = 1;
|
||||
uint64 page = 2;
|
||||
uint64 pageSize = 3;
|
||||
uint64 total = 4;
|
||||
}
|
||||
message CreateOrganizeDictionaryRequest{
|
||||
string name = 1;
|
||||
}
|
||||
message CreateOrganizeDictionaryResponse{
|
||||
uint64 id = 1;
|
||||
}
|
||||
message GetOrganizeDictionaryListRequest{
|
||||
uint64 page = 1;
|
||||
uint64 pageSize = 2;
|
||||
string name = 3;
|
||||
}
|
||||
message GetSupplierListRequest{
|
||||
uint64 page = 1;
|
||||
uint64 pageSize = 2;
|
||||
uint64 owningEntityId = 3;
|
||||
string supplierUniqueCode = 4;
|
||||
string legalName =5;
|
||||
string localName = 6;
|
||||
string abbreviationName =7;
|
||||
uint64 countryOrRegionId = 8;
|
||||
string companyRegistrationNumber =9;
|
||||
string supplierType =10;
|
||||
string approvalStatus = 11;
|
||||
string approvalDateStart = 12;
|
||||
string approvalDateEnd = 13;
|
||||
string lastReviewDateStart = 14;
|
||||
string lastReviewDateEnd = 15;
|
||||
string legalEntityType = 16;
|
||||
string sanctionsCountryScreeningResult = 17;
|
||||
string keyFinancial = 18;
|
||||
string companyAddress = 19;
|
||||
string primaryContact = 20;
|
||||
string dataOwnerDepartment = 21;
|
||||
string basicCompanyInformation = 22;
|
||||
uint64 status = 23;
|
||||
string updateStart = 24;
|
||||
string updateEnd = 25;
|
||||
string connectedParty = 26;
|
||||
}
|
||||
message GetSupplierListResponse{
|
||||
uint64 total = 1;
|
||||
repeated SupplierInfo data = 2;
|
||||
uint64 page = 3;
|
||||
uint64 pageSize = 4;
|
||||
}
|
||||
message SupplierInfo{
|
||||
uint64 id = 1;
|
||||
uint64 owningEntityId = 2;
|
||||
string legalName = 3;
|
||||
string localName = 4;
|
||||
string abbreviationName = 5;
|
||||
uint64 countryOrRegionId = 6;
|
||||
string companyRegistrationNumber = 7;
|
||||
string supplierType = 8;
|
||||
string approvalStatus = 9;
|
||||
string approvalDate = 10;
|
||||
string lastReviewDate = 11;
|
||||
string legalEntityType = 12;
|
||||
string sanctionsCountryScreeningResult = 13;
|
||||
string keyFinancial = 14;
|
||||
string companyAddress = 15;
|
||||
string primaryContact = 16;
|
||||
string dataOwnerDepartment = 17;
|
||||
string basicCompanyInformation = 18;
|
||||
string linkAddress = 19;
|
||||
string supplementaryText = 20;
|
||||
repeated attachment attachments = 21;
|
||||
uint64 status = 22;
|
||||
string createdAt = 23;
|
||||
string updatedAt = 24;
|
||||
string supplierUniqueCode = 25;
|
||||
string owningEntityName = 26;
|
||||
string countryOrRegionCode = 27;
|
||||
string connectedParty = 28;
|
||||
}
|
||||
message UpdateSupplierRequest{
|
||||
uint64 id = 1;
|
||||
uint64 owningEntityId = 2;
|
||||
string legalName = 3;
|
||||
string localName = 4;
|
||||
string abbreviationName = 5;
|
||||
uint64 countryOrRegionId = 6;
|
||||
string companyRegistrationNumber = 7;
|
||||
string supplierType = 8;
|
||||
string approvalStatus = 9;
|
||||
string approvalDate = 10;
|
||||
string lastReviewDate = 11;
|
||||
string legalEntityType = 12;
|
||||
string sanctionsCountryScreeningResult = 13;
|
||||
string keyFinancial = 14;
|
||||
string companyAddress = 15;
|
||||
string primaryContact = 16;
|
||||
string dataOwnerDepartment = 17;
|
||||
string basicCompanyInformation = 18;
|
||||
string linkAddress = 19;
|
||||
string supplementaryText = 20;
|
||||
repeated attachment attachments = 21;
|
||||
uint64 status = 22;
|
||||
string connectedParty = 23;
|
||||
}
|
||||
message CreateSupplierRequest{
|
||||
uint64 owningEntityId = 1;
|
||||
string legalName = 2;
|
||||
string localName = 3;
|
||||
string abbreviationName = 4;
|
||||
uint64 countryOrRegionId = 5;
|
||||
string companyRegistrationNumber = 6;
|
||||
string supplierType = 7;
|
||||
string approvalStatus = 8;
|
||||
string approvalDate = 9;
|
||||
string lastReviewDate = 10;
|
||||
string legalEntityType = 11;
|
||||
string sanctionsCountryScreeningResult = 12;
|
||||
string keyFinancial = 13;
|
||||
string companyAddress = 14;
|
||||
string primaryContact = 15;
|
||||
string dataOwnerDepartment = 16;
|
||||
string basicCompanyInformation = 17;
|
||||
string linkAddress = 18;
|
||||
string supplementaryText = 19;
|
||||
repeated attachment attachments = 20;
|
||||
uint64 status = 21;
|
||||
string connectedParty = 22;
|
||||
}
|
||||
message attachment{
|
||||
string url = 1;
|
||||
string type = 2;
|
||||
string name = 3;
|
||||
}
|
||||
message CreateSupplierResponse{
|
||||
uint64 id = 1;
|
||||
string supplierCode = 2;
|
||||
}
|
||||
message GetSupplierRequest{
|
||||
uint64 id = 1;
|
||||
}
|
||||
122
api/supplier/supplier.validator.pb.go
Normal file
122
api/supplier/supplier.validator.pb.go
Normal file
@ -0,0 +1,122 @@
|
||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||
// source: api/supplier/supplier.proto
|
||||
|
||||
package supplier
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
math "math"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
func (this *GetImportRecordRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetImportRecordResponse) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *CreateImportRecordRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *CreateImportRecordResponse) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetCountryRegionListResponse) Validate() error {
|
||||
for _, item := range this.Data {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Data", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *CountryRegion) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetCountryRegionInfoRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetCountryRegionListRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *OrganizeDictionary) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetOrganizeDictionaryListResponse) Validate() error {
|
||||
for _, item := range this.Data {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Data", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *CreateOrganizeDictionaryRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *CreateOrganizeDictionaryResponse) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetOrganizeDictionaryListRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetSupplierListRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetSupplierListResponse) Validate() error {
|
||||
for _, item := range this.Data {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Data", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *SupplierInfo) Validate() error {
|
||||
for _, item := range this.Attachments {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Attachments", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *UpdateSupplierRequest) Validate() error {
|
||||
for _, item := range this.Attachments {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Attachments", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *CreateSupplierRequest) Validate() error {
|
||||
for _, item := range this.Attachments {
|
||||
if item != nil {
|
||||
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
|
||||
return github_com_mwitkow_go_proto_validators.FieldError("Attachments", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (this *Attachment) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *CreateSupplierResponse) Validate() error {
|
||||
return nil
|
||||
}
|
||||
func (this *GetSupplierRequest) Validate() error {
|
||||
return nil
|
||||
}
|
||||
605
api/supplier/supplier_triple.pb.go
Normal file
605
api/supplier/supplier_triple.pb.go
Normal file
@ -0,0 +1,605 @@
|
||||
// Code generated by protoc-gen-go-triple. DO NOT EDIT.
|
||||
// versions:
|
||||
// - protoc-gen-go-triple v1.0.5
|
||||
// - protoc v6.32.0
|
||||
// source: api/supplier/supplier.proto
|
||||
|
||||
package supplier
|
||||
|
||||
import (
|
||||
context "context"
|
||||
protocol "dubbo.apache.org/dubbo-go/v3/protocol"
|
||||
dubbo3 "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
|
||||
invocation "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
|
||||
grpc_go "github.com/dubbogo/grpc-go"
|
||||
codes "github.com/dubbogo/grpc-go/codes"
|
||||
metadata "github.com/dubbogo/grpc-go/metadata"
|
||||
status "github.com/dubbogo/grpc-go/status"
|
||||
common "github.com/dubbogo/triple/pkg/common"
|
||||
constant "github.com/dubbogo/triple/pkg/common/constant"
|
||||
triple "github.com/dubbogo/triple/pkg/triple"
|
||||
)
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the grpc package it is being compiled against.
|
||||
const _ = grpc_go.SupportPackageIsVersion7
|
||||
|
||||
// SupplierClient is the client API for Supplier service.
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
||||
type SupplierClient interface {
|
||||
// 供应商curd
|
||||
GetSupplier(ctx context.Context, in *GetSupplierRequest, opts ...grpc_go.CallOption) (*UpdateSupplierRequest, common.ErrorWithAttachment)
|
||||
CreateSupplier(ctx context.Context, in *CreateSupplierRequest, opts ...grpc_go.CallOption) (*CreateSupplierResponse, common.ErrorWithAttachment)
|
||||
UpdateSupplier(ctx context.Context, in *UpdateSupplierRequest, opts ...grpc_go.CallOption) (*CreateSupplierResponse, common.ErrorWithAttachment)
|
||||
GetSupplierList(ctx context.Context, in *GetSupplierListRequest, opts ...grpc_go.CallOption) (*GetSupplierListResponse, common.ErrorWithAttachment)
|
||||
// 组织字典
|
||||
CreateOrganizeDictionary(ctx context.Context, in *CreateOrganizeDictionaryRequest, opts ...grpc_go.CallOption) (*CreateOrganizeDictionaryResponse, common.ErrorWithAttachment)
|
||||
GetOrganizeDictionaryList(ctx context.Context, in *GetOrganizeDictionaryListRequest, opts ...grpc_go.CallOption) (*GetOrganizeDictionaryListResponse, common.ErrorWithAttachment)
|
||||
GetOrganizeDictionaryInfo(ctx context.Context, in *CreateOrganizeDictionaryRequest, opts ...grpc_go.CallOption) (*OrganizeDictionary, common.ErrorWithAttachment)
|
||||
// 国家组织
|
||||
GetCountryRegionList(ctx context.Context, in *GetCountryRegionListRequest, opts ...grpc_go.CallOption) (*GetCountryRegionListResponse, common.ErrorWithAttachment)
|
||||
GetCountryRegionInfo(ctx context.Context, in *GetCountryRegionInfoRequest, opts ...grpc_go.CallOption) (*CountryRegion, common.ErrorWithAttachment)
|
||||
// 导入
|
||||
CreateImportRecord(ctx context.Context, in *CreateImportRecordRequest, opts ...grpc_go.CallOption) (*CreateImportRecordResponse, common.ErrorWithAttachment)
|
||||
GetImportRecordInfo(ctx context.Context, in *GetImportRecordRequest, opts ...grpc_go.CallOption) (*GetImportRecordResponse, common.ErrorWithAttachment)
|
||||
}
|
||||
|
||||
type supplierClient struct {
|
||||
cc *triple.TripleConn
|
||||
}
|
||||
|
||||
type SupplierClientImpl struct {
|
||||
GetSupplier func(ctx context.Context, in *GetSupplierRequest) (*UpdateSupplierRequest, error)
|
||||
CreateSupplier func(ctx context.Context, in *CreateSupplierRequest) (*CreateSupplierResponse, error)
|
||||
UpdateSupplier func(ctx context.Context, in *UpdateSupplierRequest) (*CreateSupplierResponse, error)
|
||||
GetSupplierList func(ctx context.Context, in *GetSupplierListRequest) (*GetSupplierListResponse, error)
|
||||
CreateOrganizeDictionary func(ctx context.Context, in *CreateOrganizeDictionaryRequest) (*CreateOrganizeDictionaryResponse, error)
|
||||
GetOrganizeDictionaryList func(ctx context.Context, in *GetOrganizeDictionaryListRequest) (*GetOrganizeDictionaryListResponse, error)
|
||||
GetOrganizeDictionaryInfo func(ctx context.Context, in *CreateOrganizeDictionaryRequest) (*OrganizeDictionary, error)
|
||||
GetCountryRegionList func(ctx context.Context, in *GetCountryRegionListRequest) (*GetCountryRegionListResponse, error)
|
||||
GetCountryRegionInfo func(ctx context.Context, in *GetCountryRegionInfoRequest) (*CountryRegion, error)
|
||||
CreateImportRecord func(ctx context.Context, in *CreateImportRecordRequest) (*CreateImportRecordResponse, error)
|
||||
GetImportRecordInfo func(ctx context.Context, in *GetImportRecordRequest) (*GetImportRecordResponse, error)
|
||||
}
|
||||
|
||||
func (c *SupplierClientImpl) GetDubboStub(cc *triple.TripleConn) SupplierClient {
|
||||
return NewSupplierClient(cc)
|
||||
}
|
||||
|
||||
func (c *SupplierClientImpl) XXX_InterfaceName() string {
|
||||
return "supplier.Supplier"
|
||||
}
|
||||
|
||||
func NewSupplierClient(cc *triple.TripleConn) SupplierClient {
|
||||
return &supplierClient{cc}
|
||||
}
|
||||
|
||||
func (c *supplierClient) GetSupplier(ctx context.Context, in *GetSupplierRequest, opts ...grpc_go.CallOption) (*UpdateSupplierRequest, common.ErrorWithAttachment) {
|
||||
out := new(UpdateSupplierRequest)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetSupplier", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) CreateSupplier(ctx context.Context, in *CreateSupplierRequest, opts ...grpc_go.CallOption) (*CreateSupplierResponse, common.ErrorWithAttachment) {
|
||||
out := new(CreateSupplierResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateSupplier", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) UpdateSupplier(ctx context.Context, in *UpdateSupplierRequest, opts ...grpc_go.CallOption) (*CreateSupplierResponse, common.ErrorWithAttachment) {
|
||||
out := new(CreateSupplierResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateSupplier", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) GetSupplierList(ctx context.Context, in *GetSupplierListRequest, opts ...grpc_go.CallOption) (*GetSupplierListResponse, common.ErrorWithAttachment) {
|
||||
out := new(GetSupplierListResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetSupplierList", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) CreateOrganizeDictionary(ctx context.Context, in *CreateOrganizeDictionaryRequest, opts ...grpc_go.CallOption) (*CreateOrganizeDictionaryResponse, common.ErrorWithAttachment) {
|
||||
out := new(CreateOrganizeDictionaryResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateOrganizeDictionary", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) GetOrganizeDictionaryList(ctx context.Context, in *GetOrganizeDictionaryListRequest, opts ...grpc_go.CallOption) (*GetOrganizeDictionaryListResponse, common.ErrorWithAttachment) {
|
||||
out := new(GetOrganizeDictionaryListResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetOrganizeDictionaryList", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) GetOrganizeDictionaryInfo(ctx context.Context, in *CreateOrganizeDictionaryRequest, opts ...grpc_go.CallOption) (*OrganizeDictionary, common.ErrorWithAttachment) {
|
||||
out := new(OrganizeDictionary)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetOrganizeDictionaryInfo", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) GetCountryRegionList(ctx context.Context, in *GetCountryRegionListRequest, opts ...grpc_go.CallOption) (*GetCountryRegionListResponse, common.ErrorWithAttachment) {
|
||||
out := new(GetCountryRegionListResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetCountryRegionList", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) GetCountryRegionInfo(ctx context.Context, in *GetCountryRegionInfoRequest, opts ...grpc_go.CallOption) (*CountryRegion, common.ErrorWithAttachment) {
|
||||
out := new(CountryRegion)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetCountryRegionInfo", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) CreateImportRecord(ctx context.Context, in *CreateImportRecordRequest, opts ...grpc_go.CallOption) (*CreateImportRecordResponse, common.ErrorWithAttachment) {
|
||||
out := new(CreateImportRecordResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateImportRecord", in, out)
|
||||
}
|
||||
|
||||
func (c *supplierClient) GetImportRecordInfo(ctx context.Context, in *GetImportRecordRequest, opts ...grpc_go.CallOption) (*GetImportRecordResponse, common.ErrorWithAttachment) {
|
||||
out := new(GetImportRecordResponse)
|
||||
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetImportRecordInfo", in, out)
|
||||
}
|
||||
|
||||
// SupplierServer is the server API for Supplier service.
|
||||
// All implementations must embed UnimplementedSupplierServer
|
||||
// for forward compatibility
|
||||
type SupplierServer interface {
|
||||
// 供应商curd
|
||||
GetSupplier(context.Context, *GetSupplierRequest) (*UpdateSupplierRequest, error)
|
||||
CreateSupplier(context.Context, *CreateSupplierRequest) (*CreateSupplierResponse, error)
|
||||
UpdateSupplier(context.Context, *UpdateSupplierRequest) (*CreateSupplierResponse, error)
|
||||
GetSupplierList(context.Context, *GetSupplierListRequest) (*GetSupplierListResponse, error)
|
||||
// 组织字典
|
||||
CreateOrganizeDictionary(context.Context, *CreateOrganizeDictionaryRequest) (*CreateOrganizeDictionaryResponse, error)
|
||||
GetOrganizeDictionaryList(context.Context, *GetOrganizeDictionaryListRequest) (*GetOrganizeDictionaryListResponse, error)
|
||||
GetOrganizeDictionaryInfo(context.Context, *CreateOrganizeDictionaryRequest) (*OrganizeDictionary, error)
|
||||
// 国家组织
|
||||
GetCountryRegionList(context.Context, *GetCountryRegionListRequest) (*GetCountryRegionListResponse, error)
|
||||
GetCountryRegionInfo(context.Context, *GetCountryRegionInfoRequest) (*CountryRegion, error)
|
||||
// 导入
|
||||
CreateImportRecord(context.Context, *CreateImportRecordRequest) (*CreateImportRecordResponse, error)
|
||||
GetImportRecordInfo(context.Context, *GetImportRecordRequest) (*GetImportRecordResponse, error)
|
||||
mustEmbedUnimplementedSupplierServer()
|
||||
}
|
||||
|
||||
// UnimplementedSupplierServer must be embedded to have forward compatible implementations.
|
||||
type UnimplementedSupplierServer struct {
|
||||
proxyImpl protocol.Invoker
|
||||
}
|
||||
|
||||
func (UnimplementedSupplierServer) GetSupplier(context.Context, *GetSupplierRequest) (*UpdateSupplierRequest, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetSupplier not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) CreateSupplier(context.Context, *CreateSupplierRequest) (*CreateSupplierResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CreateSupplier not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) UpdateSupplier(context.Context, *UpdateSupplierRequest) (*CreateSupplierResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method UpdateSupplier not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) GetSupplierList(context.Context, *GetSupplierListRequest) (*GetSupplierListResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetSupplierList not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) CreateOrganizeDictionary(context.Context, *CreateOrganizeDictionaryRequest) (*CreateOrganizeDictionaryResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CreateOrganizeDictionary not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) GetOrganizeDictionaryList(context.Context, *GetOrganizeDictionaryListRequest) (*GetOrganizeDictionaryListResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetOrganizeDictionaryList not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) GetOrganizeDictionaryInfo(context.Context, *CreateOrganizeDictionaryRequest) (*OrganizeDictionary, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetOrganizeDictionaryInfo not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) GetCountryRegionList(context.Context, *GetCountryRegionListRequest) (*GetCountryRegionListResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetCountryRegionList not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) GetCountryRegionInfo(context.Context, *GetCountryRegionInfoRequest) (*CountryRegion, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetCountryRegionInfo not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) CreateImportRecord(context.Context, *CreateImportRecordRequest) (*CreateImportRecordResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method CreateImportRecord not implemented")
|
||||
}
|
||||
func (UnimplementedSupplierServer) GetImportRecordInfo(context.Context, *GetImportRecordRequest) (*GetImportRecordResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetImportRecordInfo not implemented")
|
||||
}
|
||||
func (s *UnimplementedSupplierServer) XXX_SetProxyImpl(impl protocol.Invoker) {
|
||||
s.proxyImpl = impl
|
||||
}
|
||||
|
||||
func (s *UnimplementedSupplierServer) XXX_GetProxyImpl() protocol.Invoker {
|
||||
return s.proxyImpl
|
||||
}
|
||||
|
||||
func (s *UnimplementedSupplierServer) XXX_ServiceDesc() *grpc_go.ServiceDesc {
|
||||
return &Supplier_ServiceDesc
|
||||
}
|
||||
func (s *UnimplementedSupplierServer) XXX_InterfaceName() string {
|
||||
return "supplier.Supplier"
|
||||
}
|
||||
|
||||
func (UnimplementedSupplierServer) mustEmbedUnimplementedSupplierServer() {}
|
||||
|
||||
// UnsafeSupplierServer may be embedded to opt out of forward compatibility for this service.
|
||||
// Use of this interface is not recommended, as added methods to SupplierServer will
|
||||
// result in compilation errors.
|
||||
type UnsafeSupplierServer interface {
|
||||
mustEmbedUnimplementedSupplierServer()
|
||||
}
|
||||
|
||||
func RegisterSupplierServer(s grpc_go.ServiceRegistrar, srv SupplierServer) {
|
||||
s.RegisterService(&Supplier_ServiceDesc, srv)
|
||||
}
|
||||
|
||||
func _Supplier_GetSupplier_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetSupplierRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetSupplier", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_CreateSupplier_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateSupplierRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("CreateSupplier", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_UpdateSupplier_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(UpdateSupplierRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("UpdateSupplier", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_GetSupplierList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetSupplierListRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetSupplierList", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_CreateOrganizeDictionary_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateOrganizeDictionaryRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("CreateOrganizeDictionary", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_GetOrganizeDictionaryList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetOrganizeDictionaryListRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetOrganizeDictionaryList", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_GetOrganizeDictionaryInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateOrganizeDictionaryRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetOrganizeDictionaryInfo", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_GetCountryRegionList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetCountryRegionListRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetCountryRegionList", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_GetCountryRegionInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetCountryRegionInfoRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetCountryRegionInfo", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_CreateImportRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CreateImportRecordRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("CreateImportRecord", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Supplier_GetImportRecordInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetImportRecordRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||
args := []interface{}{}
|
||||
args = append(args, in)
|
||||
md, _ := metadata.FromIncomingContext(ctx)
|
||||
invAttachment := make(map[string]interface{}, len(md))
|
||||
for k, v := range md {
|
||||
invAttachment[k] = v
|
||||
}
|
||||
invo := invocation.NewRPCInvocation("GetImportRecordInfo", args, invAttachment)
|
||||
if interceptor == nil {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
info := &grpc_go.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||
return result, result.Error()
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// Supplier_ServiceDesc is the grpc_go.ServiceDesc for Supplier service.
|
||||
// It's only intended for direct use with grpc_go.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
var Supplier_ServiceDesc = grpc_go.ServiceDesc{
|
||||
ServiceName: "supplier.Supplier",
|
||||
HandlerType: (*SupplierServer)(nil),
|
||||
Methods: []grpc_go.MethodDesc{
|
||||
{
|
||||
MethodName: "GetSupplier",
|
||||
Handler: _Supplier_GetSupplier_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CreateSupplier",
|
||||
Handler: _Supplier_CreateSupplier_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "UpdateSupplier",
|
||||
Handler: _Supplier_UpdateSupplier_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetSupplierList",
|
||||
Handler: _Supplier_GetSupplierList_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CreateOrganizeDictionary",
|
||||
Handler: _Supplier_CreateOrganizeDictionary_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetOrganizeDictionaryList",
|
||||
Handler: _Supplier_GetOrganizeDictionaryList_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetOrganizeDictionaryInfo",
|
||||
Handler: _Supplier_GetOrganizeDictionaryInfo_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetCountryRegionList",
|
||||
Handler: _Supplier_GetCountryRegionList_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetCountryRegionInfo",
|
||||
Handler: _Supplier_GetCountryRegionInfo_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "CreateImportRecord",
|
||||
Handler: _Supplier_CreateImportRecord_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetImportRecordInfo",
|
||||
Handler: _Supplier_GetImportRecordInfo_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc_go.StreamDesc{},
|
||||
Metadata: "api/supplier/supplier.proto",
|
||||
}
|
||||
@ -8,7 +8,7 @@ ErpHost = "http://erpapi.test.fontree.cn:8081"
|
||||
FieeHost = "http://erpapi.test.fontree.cn:8081"
|
||||
AuthRedirectUrl = "http://saas-erp.test.fontree.cn:8081/media_account"
|
||||
AuthCallback = "https://saas-test.szjixun.cn/api/fiee/media/as-oauth2callback"
|
||||
CronOpen = true
|
||||
CronOpen = false
|
||||
proxyUrl = "http://47.84.75.255:6785"
|
||||
[bos]
|
||||
Ak = "ALTAKxrqOQHnAN525Tb2GX4Bhe"
|
||||
|
||||
@ -49,7 +49,14 @@ dubbo:
|
||||
interface: com.fontree.microservices.fiee.SecFiling
|
||||
AyrshareClientImpl:
|
||||
protocol: tri
|
||||
request-timeout: 1800s
|
||||
interface: com.fontree.microservices.fiee.ayrshare
|
||||
FieeCronClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.cron
|
||||
SupplierClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.common.supplier
|
||||
logger:
|
||||
zap-config:
|
||||
level: error # 日志级别
|
||||
|
||||
BIN
data/图文导入模板.xlsx
BIN
data/图文导入模板.xlsx
Binary file not shown.
BIN
data/话题标签导入模板.xlsx
Normal file
BIN
data/话题标签导入模板.xlsx
Normal file
Binary file not shown.
@ -47,6 +47,13 @@ dubbo:
|
||||
protocol: tri
|
||||
retries: 0
|
||||
interface: com.fontree.microservices.fiee.SecFiling
|
||||
AyrshareClientImpl:
|
||||
request-timeout: 1800s
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.ayrshare
|
||||
FieeCronClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.cron
|
||||
FileClientImpl:
|
||||
protocol: tri
|
||||
retries: 0
|
||||
@ -54,12 +61,9 @@ dubbo:
|
||||
methods:
|
||||
- name: SecurityScan
|
||||
timeout: 120000
|
||||
AyrshareClientImpl:
|
||||
SupplierClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.ayrshare
|
||||
FieeCronClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.cron
|
||||
interface: com.fontree.microservices.common.supplier
|
||||
logger:
|
||||
zap-config:
|
||||
level: error # 日志级别
|
||||
|
||||
@ -49,6 +49,13 @@ dubbo:
|
||||
protocol: tri
|
||||
retries: 0
|
||||
interface: com.fontree.microservices.fiee.SecFiling
|
||||
AyrshareClientImpl:
|
||||
request-timeout: 1800s
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.ayrshare
|
||||
FieeCronClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.cron
|
||||
FileClientImpl:
|
||||
protocol: tri
|
||||
retries: 0
|
||||
@ -56,12 +63,9 @@ dubbo:
|
||||
methods:
|
||||
- name: SecurityScan
|
||||
timeout: 120000
|
||||
AyrshareClientImpl:
|
||||
SupplierClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.ayrshare
|
||||
FieeCronClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.cron
|
||||
interface: com.fontree.microservices.common.supplier
|
||||
logger:
|
||||
zap-config:
|
||||
level: error # 日志级别
|
||||
|
||||
@ -19,7 +19,6 @@ BosUrl = ".bj.bcebos.com"
|
||||
BosBaseDir = "fiee"
|
||||
BosHttp = "https://"
|
||||
BosDomain = "cdns.fontree.cn"
|
||||
|
||||
[oss]
|
||||
AccessKeyId = "OSS_AK"
|
||||
AccessKeySecret = "OSS_SK"
|
||||
@ -30,7 +29,7 @@ CdnHost = "OSS_CDN"
|
||||
|
||||
[redis]
|
||||
RedisDB = "2"
|
||||
RedisAddr = "svc-fontree-redis-service:6379"
|
||||
RedisAddr = "172.16.100.114:6379"
|
||||
RedisPW = "kP6tW4tS3qB2dW4aE6uI5cX2"
|
||||
RedisDBNAme = "2"
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ dubbo:
|
||||
protocol: zookeeper
|
||||
timeout: 3s
|
||||
# address: 121.229.45.214:9004
|
||||
address: zookeeper:2181
|
||||
address: 172.16.100.93:2181
|
||||
# address: 127.0.0.1:2181
|
||||
# address: 114.218.158.24:2181
|
||||
consumer:
|
||||
@ -47,6 +47,13 @@ dubbo:
|
||||
protocol: tri
|
||||
retries: 0
|
||||
interface: com.fontree.microservices.fiee.SecFiling
|
||||
AyrshareClientImpl:
|
||||
request-timeout: 1800s
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.ayrshare
|
||||
FieeCronClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.cron
|
||||
FileClientImpl:
|
||||
protocol: tri
|
||||
retries: 0
|
||||
@ -54,12 +61,9 @@ dubbo:
|
||||
methods:
|
||||
- name: SecurityScan
|
||||
timeout: 120000
|
||||
AyrshareClientImpl:
|
||||
SupplierClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.ayrshare
|
||||
FieeCronClientImpl:
|
||||
protocol: tri
|
||||
interface: com.fontree.microservices.fiee.cron
|
||||
interface: com.fontree.microservices.common.supplier
|
||||
logger:
|
||||
zap-config:
|
||||
level: error # 日志级别
|
||||
|
||||
@ -244,7 +244,63 @@ var DeDEMessages = map[string]string{
|
||||
"系统提示:已经发送过,验证码尚可用": "Systemnachricht: Bereits gesendet, Verifizierungscode ist noch verfügbar",
|
||||
"您的手机号当天发送次数过多,请联系管理员通过密码登录": "Ihre Telefonnummer wurde an diesem Tag zu oft gesendet. Bitte wenden Sie sich an den Administrator, um sich über das Passwort anzumelden",
|
||||
"您的手机号验证码错误,请确认之后注册": "Ihre Telefonnummer Verifizierungscode ist falsch, bitte bestätigen und registrieren",
|
||||
"手机号不合法": "Telefonnummer ungültig",
|
||||
"手机号未更改": "Telefonnummer wurde nicht geändert",
|
||||
"新手机号过期": "Neue Telefonnummer abgelaufen",
|
||||
"验证码错误": "Verifizierungscode falsch",
|
||||
"验证码未发送": "Der Verifizierungscode wurde nicht gesendet",
|
||||
"账号不存在": "Konto existiert nicht",
|
||||
"已实名": "In echt",
|
||||
"实名审核中,请勿重复提交": "Während der Echtheitsprüfung bitte nicht wiederholen",
|
||||
"用户状态异常,无法进行审核": "Der Benutzer ist abnorm und kann nicht geprüft werden. Verfahren",
|
||||
"验证码已失效": "Der Verifizierungscode ist ungültig",
|
||||
"服务器错误": "Serverfehler",
|
||||
"验证失败,请控制拼图对齐缺口": "Überprüfung fehlgeschlagen, bitte Steuerung Puzzle-Ausrichtungslücke",
|
||||
"滑块验证状态不存在,请退出重试": "Die krümmbestätigung existiert nicht. Bitte beenden sie den vorgang",
|
||||
"语言不能为空": "Sprache darf nicht leer sein",
|
||||
"排序参数需为正整数": "Sortierparameter muss eine positive ganze Zahl sein",
|
||||
"请先创建中文版本套餐": "Bitte erstelle das Chinese Version-Paket",
|
||||
"增值服务不存在": "Der Werbeangebot existiert nicht",
|
||||
"所选增值服务币种与套餐币种不一致": "Die ausgewählte Währung des Werbeangebots stimmt nicht mit der Währung des Pakets überein",
|
||||
"文件转换失败": "Datei-Umwandlung fehlgeschlagen",
|
||||
"每种增值服务类型只可选择一个": "Jeder Werbeangebotstyp kann nur einmal ausgewählt werden",
|
||||
"保存套餐与增值服务关联失败": "Fehler beim Speichern des Pakets mit Werbeangebot",
|
||||
"删除套餐与增值服务关联失败": "Fehler beim Löschen des Pakets mit Werbeangebot",
|
||||
"查询套餐与增值服务关联失败": "Fehler beim Abrufen des Pakets mit Werbeangebot",
|
||||
"更新套餐与增值服务关联失败": "Fehler beim Aktualisieren des Pakets mit Werbeangebot",
|
||||
"查询增值服务失败": "Fehler beim Abrufen des Werbeangebots",
|
||||
"更新套餐状态失败": "Fehler beim Aktualisieren des Paketstatus",
|
||||
"查询增值服务详情失败": "Fehler beim Abrufen der Werbeangebotsdetails",
|
||||
"序列化转换失败": "Fehler beim Serialisieren",
|
||||
"保存套餐历史记录失败": "Fehler beim Speichern des Pakethistorie",
|
||||
"原价不能为空": "Der reguläre Preis darf nicht leer sein",
|
||||
"原价格式转换失败": "Fehler beim Umwandeln des regulären Preises",
|
||||
"数量参数需为0-99": "Die Anzahlsmusterparameter muss eine positive ganze Zahl sein",
|
||||
"优惠单价需小于等于原价": "Der Rabattpreis muss kleiner oder gleich dem regulären Preis sein",
|
||||
"请先创建中文版本增值服务": "Bitte erstelle das Chinese Version-Werbeangebot",
|
||||
"保存增值服务失败": "Fehler beim Speichern des Werbeangebots",
|
||||
"保存增值服务历史记录失败": "Fehler beim Speichern des Werbeangebots-Historie",
|
||||
"更新增值服务失败": "Fehler beim Aktualisieren des Werbeangebots",
|
||||
"查询增值服务列表失败": "Fehler beim Abrufen der Werbeangebotsliste",
|
||||
"计算价格失败": "Fehler beim Berechnen des Preises",
|
||||
"更新成功": "Aktualisierung erfolgreich",
|
||||
"保存成功": "Speichern erfolgreich",
|
||||
"优惠单价转换失败": "Rabatt-Einzelpreisumrechnung fehlgeschlagen",
|
||||
"符号错误": "Symbolfehler",
|
||||
"条件存在冲突,请重新设置": "Bedingungskonflikt vorhanden, bitte neu konfigurieren",
|
||||
"币种已修改,已取消关联部分增值服务": "Währung wurde geändert, einige Mehrwertdienste wurden getrennt",
|
||||
"币种已修改,已取消关联部分套餐": "Währung wurde geändert, einige Pakete wurden getrennt",
|
||||
"新增增值服务成功": "Mehrwertdienst erfolgreich hinzugefügt",
|
||||
"状态值无效": "Ungültiger Statuswert",
|
||||
"套餐已上架,请勿重复操作": "Paket ist bereits veröffentlicht, bitte nicht wiederholen",
|
||||
"套餐已下架,请勿重复操作": "Paket ist bereits zurückgezogen, bitte nicht wiederholen",
|
||||
"请先实名": "Bitte, nur der name",
|
||||
"实名审核中": "Contest läuft",
|
||||
"实名审核失败": "Die confirmation hat versagt",
|
||||
"未知实名状态": "Noch nicht registriert",
|
||||
|
||||
// Bundle related messages
|
||||
"创建增值套餐失败": "Fehler beim Erstellen des Mehrwert-Bundles",
|
||||
"增值套餐列表查询失败": "Fehler beim Abfragen der Mehrwert-Bundle-Liste",
|
||||
"增值套餐详情查询失败": "Fehler beim Abfragen der Mehrwert-Bundle-Details",
|
||||
"保存增值套餐失败": "Fehler beim Speichern des Mehrwert-Bundles",
|
||||
@ -327,61 +383,6 @@ var DeDEMessages = map[string]string{
|
||||
"套餐未绑定增值服务": "Bundle nicht an Mehrwertdienst gebunden",
|
||||
"网络错误": "Netzwerkfehler",
|
||||
|
||||
"手机号不合法": "Telefonnummer ungültig",
|
||||
"手机号未更改": "Telefonnummer wurde nicht geändert",
|
||||
"新手机号过期": "Neue Telefonnummer abgelaufen",
|
||||
"验证码错误": "Verifizierungscode falsch",
|
||||
"验证码未发送": "Der Verifizierungscode wurde nicht gesendet",
|
||||
"账号不存在": "Konto existiert nicht",
|
||||
"已实名": "In echt",
|
||||
"实名审核中,请勿重复提交": "Während der Echtheitsprüfung bitte nicht wiederholen",
|
||||
"用户状态异常,无法进行审核": "Der Benutzer ist abnorm und kann nicht geprüft werden. Verfahren",
|
||||
"验证码已失效": "Der Verifizierungscode ist ungültig",
|
||||
"服务器错误": "Serverfehler",
|
||||
"验证失败,请控制拼图对齐缺口": "Überprüfung fehlgeschlagen, bitte Steuerung Puzzle-Ausrichtungslücke",
|
||||
"滑块验证状态不存在,请退出重试": "Die krümmbestätigung existiert nicht. Bitte beenden sie den vorgang",
|
||||
"语言不能为空": "Sprache darf nicht leer sein",
|
||||
"排序参数需为正整数": "Sortierparameter muss eine positive ganze Zahl sein",
|
||||
"请先创建中文版本套餐": "Bitte erstelle das Chinese Version-Paket",
|
||||
"增值服务不存在": "Der Werbeangebot existiert nicht",
|
||||
"所选增值服务币种与套餐币种不一致": "Die ausgewählte Währung des Werbeangebots stimmt nicht mit der Währung des Pakets überein",
|
||||
"文件转换失败": "Datei-Umwandlung fehlgeschlagen",
|
||||
"每种增值服务类型只可选择一个": "Jeder Werbeangebotstyp kann nur einmal ausgewählt werden",
|
||||
"保存套餐与增值服务关联失败": "Fehler beim Speichern des Pakets mit Werbeangebot",
|
||||
"删除套餐与增值服务关联失败": "Fehler beim Löschen des Pakets mit Werbeangebot",
|
||||
"查询套餐与增值服务关联失败": "Fehler beim Abrufen des Pakets mit Werbeangebot",
|
||||
"更新套餐与增值服务关联失败": "Fehler beim Aktualisieren des Pakets mit Werbeangebot",
|
||||
"查询增值服务失败": "Fehler beim Abrufen des Werbeangebots",
|
||||
"更新套餐状态失败": "Fehler beim Aktualisieren des Paketstatus",
|
||||
"查询增值服务详情失败": "Fehler beim Abrufen der Werbeangebotsdetails",
|
||||
"序列化转换失败": "Fehler beim Serialisieren",
|
||||
"保存套餐历史记录失败": "Fehler beim Speichern des Pakethistorie",
|
||||
"原价不能为空": "Der reguläre Preis darf nicht leer sein",
|
||||
"原价格式转换失败": "Fehler beim Umwandeln des regulären Preises",
|
||||
"数量参数需为0-99": "Die Anzahlsmusterparameter muss eine positive ganze Zahl sein",
|
||||
"优惠单价需小于等于原价": "Der Rabattpreis muss kleiner oder gleich dem regulären Preis sein",
|
||||
"请先创建中文版本增值服务": "Bitte erstelle das Chinese Version-Werbeangebot",
|
||||
"保存增值服务失败": "Fehler beim Speichern des Werbeangebots",
|
||||
"保存增值服务历史记录失败": "Fehler beim Speichern des Werbeangebots-Historie",
|
||||
"更新增值服务失败": "Fehler beim Aktualisieren des Werbeangebots",
|
||||
"查询增值服务列表失败": "Fehler beim Abrufen der Werbeangebotsliste",
|
||||
"计算价格失败": "Fehler beim Berechnen des Preises",
|
||||
"更新成功": "Aktualisierung erfolgreich",
|
||||
"保存成功": "Speichern erfolgreich",
|
||||
"优惠单价转换失败": "Rabatt-Einzelpreisumrechnung fehlgeschlagen",
|
||||
"符号错误": "Symbolfehler",
|
||||
"条件存在冲突,请重新设置": "Bedingungskonflikt vorhanden, bitte neu konfigurieren",
|
||||
"币种已修改,已取消关联部分增值服务": "Währung wurde geändert, einige Mehrwertdienste wurden getrennt",
|
||||
"币种已修改,已取消关联部分套餐": "Währung wurde geändert, einige Pakete wurden getrennt",
|
||||
"新增增值服务成功": "Mehrwertdienst erfolgreich hinzugefügt",
|
||||
"状态值无效": "Ungültiger Statuswert",
|
||||
"套餐已上架,请勿重复操作": "Paket ist bereits veröffentlicht, bitte nicht wiederholen",
|
||||
"套餐已下架,请勿重复操作": "Paket ist bereits zurückgezogen, bitte nicht wiederholen",
|
||||
"请先实名": "Bitte, nur der name",
|
||||
"实名审核中": "Contest läuft",
|
||||
"实名审核失败": "Die confirmation hat versagt",
|
||||
"未知实名状态": "Noch nicht registriert",
|
||||
|
||||
// Website report related messages
|
||||
"创建官网报告失败": "Fehler beim Erstellen des Website-Berichts",
|
||||
"删除官网报告失败": "Fehler beim Löschen des Website-Berichts",
|
||||
@ -462,6 +463,7 @@ var JaJPMessages = map[string]string{
|
||||
"请先创建中文版本套餐": "最初に中国語バージョンのパッケージを作成してください",
|
||||
"增值服务不存在": "付加サービスは存在しません",
|
||||
"所选增值服务币种与套餐币种不一致": "選択した付加サービスの通貨とパッケージの通貨が一致しません",
|
||||
"文件转换失败": "ファイル変換に失敗しました",
|
||||
"每种增值服务类型只可选择一个": "各種付加サービスタイプは一つしか選択できません",
|
||||
"保存套餐与增值服务关联失败": "パッケージと付加サービスの関連付けの保存に失敗しました",
|
||||
"删除套餐与增值服务关联失败": "パッケージと付加サービスの関連付けの削除に失敗しました",
|
||||
@ -616,6 +618,17 @@ var ZhTWMessages = map[string]string{
|
||||
"删除套餐信息失败": "刪除套餐信息失敗",
|
||||
"删除套餐信息成功": "刪除套餐信息成功",
|
||||
"获取套餐信息失败": "獲取套餐信息失敗",
|
||||
"创建订单信息失败": "創建訂單信息失敗",
|
||||
"创建订单信息成功": "創建訂單信息成功",
|
||||
"更新订单信息失败": "更新訂單信息失敗",
|
||||
"更新订单信息成功": "更新訂單信息成功",
|
||||
"获取订单信息失败": "獲取訂單信息失敗",
|
||||
"获取订单列表失败": "獲取訂單列表失敗",
|
||||
"缺少套餐UUID": "缺少套餐UUID",
|
||||
"缺少客户签名信息": "缺少客戶簽名信息",
|
||||
"插入签名失败": "插入簽名失敗",
|
||||
"缺少订单号": "缺少訂單號",
|
||||
"缺少订单信息": "缺少訂單信息",
|
||||
"非当前用户订单信息不可操作": "非當前用戶訂單信息不可操作",
|
||||
"订单已支付": "訂單已支付",
|
||||
"您已购买过套餐,无法再次购买": "您已購買過套餐,無法再次購買",
|
||||
@ -709,6 +722,7 @@ var ZhTWMessages = map[string]string{
|
||||
"创建套餐失败": "創建套餐失敗",
|
||||
"更新套餐失败": "更新套餐失敗",
|
||||
"删除套餐失败": "刪除套餐失敗",
|
||||
"套餐列表查询失败": "套餐列表查詢失敗",
|
||||
"套餐详情查询失败": "套餐詳情查詢失敗",
|
||||
"更新套餐上下架失败": "更新套餐上下架失敗",
|
||||
"根据订单号查询增值套餐失败": "根據訂單號查詢增值套餐失敗",
|
||||
@ -780,6 +794,7 @@ var ZhTWMessages = map[string]string{
|
||||
"未知增值服务": "未知增值服務",
|
||||
"套餐未绑定增值服务": "套餐未綁定增值服務",
|
||||
"网络错误": "網絡錯誤",
|
||||
|
||||
// Website report related messages
|
||||
"创建官网报告失败": "創建官網報告失敗",
|
||||
"删除官网报告失败": "刪除官網報告失敗",
|
||||
|
||||
602
pkg/cron/task.go
602
pkg/cron/task.go
@ -5,6 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"fonchain-fiee/api/aryshare"
|
||||
"fonchain-fiee/api/bundle"
|
||||
"fonchain-fiee/api/cast"
|
||||
"fonchain-fiee/pkg/cache"
|
||||
@ -16,6 +17,7 @@ import (
|
||||
"log"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-redis/redis"
|
||||
@ -27,21 +29,26 @@ func InitTasks() error {
|
||||
cm := GetCronManager()
|
||||
err := cm.AddTask("refreshWorkApprovalStatus", "0 */1 * * * *", RefreshWorkApprovalStatusTask)
|
||||
err = cm.AddTask("artistAutoConfirm", "0 */1 * * * *", ArtistAutoConfirmTask)
|
||||
err = cm.AddTask("refreshPublishStatus", "0 */1 * * * *", RefreshPublishStatusTask)
|
||||
err = cm.AddTask("refreshPublishStatus", "0 */1 * * * *", PublishTask)
|
||||
err = cm.AddTask("scheduledPublish", "0 */10 * * * *", ScheduledPublishTask)
|
||||
|
||||
err = cm.AddTask("artistAutoConfirmAnalysis", "0 */1 * * * *", ArtistAutoConfirmAnalysisTask)
|
||||
err = cm.AddTask("refreshWorkAnalysisApprovalStatus", "0 */1 * * * *", RefreshWorkAnalysisApprovalStatusTask)
|
||||
err = cm.AddTask("scheduledPublish", "0 */1 * * * *", ScheduledPublishTask)
|
||||
err = cm.AddTask("refreshArtistOrder", "0 */30 * * * *", RefreshArtistOrderTask)
|
||||
|
||||
// 每天 00:30 和 12:30 执行 Ayrshare 指标采集任务
|
||||
err = cm.AddTask("ayrshareMetricsCollector", "0 30 0,12 * * *", AyrshareMetricsCollectorTask)
|
||||
// err = cm.AddTask("ayrshareMetricsCollector", "0 30 0,12 * * *", AyrshareMetricsCollectorTask)
|
||||
err = cm.AddTask("ayrshareMetricsCollector", "0 30 0 * * *", AyrshareMetricsCollectorTask)
|
||||
if err != nil {
|
||||
log.Printf("添加定时任务失败: %v", err)
|
||||
}
|
||||
|
||||
// 每2分钟执行一次标签观看次数更新任务
|
||||
// err = cm.AddTask("updateCastTagWatchCount", "0 */1 * * * *", UpdateCastTagWatchCountTask)
|
||||
cm.Start()
|
||||
|
||||
// 启动队列消费者
|
||||
go WorkPublishQueueConsumer()
|
||||
//go WorkPublishQueueConsumer()
|
||||
|
||||
// 启动随机间隔的自动确认任务
|
||||
go AutoManuallyConfirmWorkTaskWithRandomInterval()
|
||||
@ -65,32 +72,33 @@ func RefreshWorkApprovalStatusTask() {
|
||||
serverCast.RefreshWorkApproval(nil, resp.Data)
|
||||
}
|
||||
|
||||
func RefreshWorkAnalysisApprovalStatusTask() {
|
||||
resp, err := service.CastProvider.ListWorkAnalysis(context.Background(), &cast.ListWorkAnalysisReq{
|
||||
Page: 1,
|
||||
StatusList: []uint32{2}, // 状态为2表示待审批
|
||||
PageSize: 999999,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("获取数据分析列表失败: %v", err)
|
||||
return
|
||||
}
|
||||
if resp.Data == nil || len(resp.Data) == 0 {
|
||||
return
|
||||
}
|
||||
serverCast.RefreshWorkAnalysisApproval(nil, resp.Data)
|
||||
}
|
||||
|
||||
// AutoManuallyConfirmWorkTaskWithRandomInterval 以随机间隔(3-7分钟)执行自动确认任务
|
||||
func AutoManuallyConfirmWorkTaskWithRandomInterval() {
|
||||
|
||||
for {
|
||||
// 添加 panic 恢复机制
|
||||
func() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
zap.L().Error("自动确认任务执行panic",
|
||||
zap.Any("panic", r),
|
||||
zap.Stack("stack"))
|
||||
}
|
||||
}()
|
||||
|
||||
// 执行任务
|
||||
zap.L().Debug("开始执行自动确认任务")
|
||||
AutoManuallyConfirmWorkTask()
|
||||
zap.L().Debug("自动确认任务执行完成")
|
||||
}()
|
||||
|
||||
// 生成3-7分钟之间的随机间隔(单位:分钟)
|
||||
randomMinutes := rand.Intn(5) + 3 // 3-7分钟
|
||||
randomDuration := time.Duration(randomMinutes) * time.Minute
|
||||
log.Printf("自动确认任务等待下次执行,间隔:%d分钟,时长:%s", randomMinutes, randomDuration)
|
||||
zap.L().Info("自动确认任务等待下次执行",
|
||||
zap.Int("minutes", randomMinutes),
|
||||
zap.Duration("duration", randomDuration))
|
||||
|
||||
// 等待随机时间
|
||||
time.Sleep(randomDuration)
|
||||
@ -113,7 +121,7 @@ func AutoManuallyConfirmWorkTask() {
|
||||
artistId, err := strconv.ParseInt(work.ArtistUuid, 10, 64)
|
||||
if err != nil {
|
||||
zap.L().Error("解析艺术家ID失败", zap.Error(err))
|
||||
return
|
||||
continue
|
||||
}
|
||||
if req.ConfirmStatus == 2 { // 驳回完直接结束
|
||||
_, err := service.CastProvider.UpdateStatus(context.Background(), &cast.UpdateStatusReq{
|
||||
@ -208,9 +216,25 @@ func AutoManuallyConfirmWorkTask() {
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("更新作品状态失败,作品uuid:"+req.WorkUuid, zap.Error(err))
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func RefreshWorkAnalysisApprovalStatusTask() {
|
||||
resp, err := service.CastProvider.ListWorkAnalysis(context.Background(), &cast.ListWorkAnalysisReq{
|
||||
Page: 1,
|
||||
StatusList: []uint32{2}, // 状态为2表示待审批
|
||||
PageSize: 999999,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("获取数据分析列表失败: %v", err)
|
||||
return
|
||||
}
|
||||
if resp.Data == nil || len(resp.Data) == 0 {
|
||||
return
|
||||
}
|
||||
serverCast.RefreshWorkAnalysisApproval(nil, resp.Data)
|
||||
}
|
||||
|
||||
func ArtistAutoConfirmTask() {
|
||||
@ -225,7 +249,7 @@ func ArtistAutoConfirmTask() {
|
||||
return
|
||||
}
|
||||
if len(workUuids) == 0 {
|
||||
zap.L().Debug("没有到期的任务")
|
||||
zap.L().Info("没有到期的任务")
|
||||
return
|
||||
}
|
||||
zap.L().Info("发现到期任务", zap.Int("count", len(workUuids)))
|
||||
@ -253,6 +277,278 @@ func RefreshPublishStatusTask() {
|
||||
//zap.L().Info("刷新发布状态成功")
|
||||
}
|
||||
|
||||
// PublishTask 定时发布任务,从Redis Sorted Set中获取所有workUuid并根据score判断处理
|
||||
func PublishTask() {
|
||||
go RefreshPublishStatusTask() // 刷新发布状态
|
||||
go TaskStatus() // 异步任务状态
|
||||
}
|
||||
func ScheduledPublishTask() {
|
||||
// 加上锁
|
||||
lockKey := "scheduled_publish:lock"
|
||||
reply := cache.RedisClient.SetNX(lockKey, time.Now().Format("2006-01-02 15:04:05"), 2*time.Hour)
|
||||
if !reply.Val() {
|
||||
zap.L().Warn("定时发布任务正在被其他实例处理")
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
cache.RedisClient.Del(lockKey)
|
||||
}()
|
||||
|
||||
// 获取所有数据(不限制score范围)
|
||||
opt := redis.ZRangeBy{
|
||||
Min: "-inf",
|
||||
Max: "+inf",
|
||||
}
|
||||
// 从Redis Sorted Set中获取所有workUuid及其score
|
||||
workList, err := cache.RedisClient.ZRangeByScoreWithScores(modelCast.ScheduledPublishQueueKey, opt).Result()
|
||||
if err != nil {
|
||||
zap.L().Error("获取定时发布任务失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if len(workList) == 0 {
|
||||
zap.L().Info("没有定时发布任务")
|
||||
return
|
||||
}
|
||||
|
||||
publishCount := 0
|
||||
expiredCount := 0
|
||||
const batchSize = 8 // 每批发布8个,与PublishWork的workerCount保持一致
|
||||
|
||||
zap.L().Info("发现定时发布任务", zap.Int("total_count", len(workList)))
|
||||
zap.L().Info("发现定时发布任务 列表", zap.Any("workList", workList))
|
||||
|
||||
now := float64(time.Now().Unix())
|
||||
publishBatch := make([]string, 0, batchSize)
|
||||
// 使用 map 进行去重,防止同一个 work_uuid 被多次添加
|
||||
publishedUuids := make(map[string]bool)
|
||||
|
||||
// 遍历所有数据,根据score判断处理
|
||||
for _, item := range workList {
|
||||
workUuid := item.Member.(string)
|
||||
score := item.Score
|
||||
|
||||
// 如果score小于当前时间,删除但不消费(不发布)
|
||||
if score < now {
|
||||
zap.L().Info("发现过期的定时发布任务,直接删除不发布",
|
||||
zap.String("work_uuid", workUuid),
|
||||
zap.Float64("score", score),
|
||||
zap.Float64("now", now))
|
||||
removed, delErr := cache.RedisClient.ZRem(modelCast.ScheduledPublishQueueKey, workUuid).Result()
|
||||
if delErr != nil {
|
||||
zap.L().Error("删除过期定时发布任务失败", zap.Error(delErr), zap.String("work_uuid", workUuid))
|
||||
} else if removed > 0 {
|
||||
expiredCount++
|
||||
zap.L().Info("已删除过期定时发布任务", zap.String("work_uuid", workUuid))
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
// 先从 Redis 中删除,采用"先删后处理"的策略,防止重复处理
|
||||
removed, delErr := cache.RedisClient.ZRem(modelCast.ScheduledPublishQueueKey, workUuid).Result()
|
||||
if delErr != nil {
|
||||
zap.L().Error("删除定时发布任务失败", zap.Error(delErr), zap.String("work_uuid", workUuid))
|
||||
continue // 删除失败则跳过,避免重复处理
|
||||
}
|
||||
if removed == 0 {
|
||||
zap.L().Warn("定时发布任务已被删除,跳过",
|
||||
zap.String("work_uuid", workUuid))
|
||||
continue // 已被其他实例删除,跳过
|
||||
}
|
||||
|
||||
// 检查是否已经在当前批次中(去重)
|
||||
if publishedUuids[workUuid] {
|
||||
zap.L().Warn("发现重复的定时发布任务,跳过",
|
||||
zap.String("work_uuid", workUuid))
|
||||
continue
|
||||
}
|
||||
|
||||
// score大于等于当前时间,添加到待发布批次
|
||||
zap.L().Info("添加到发布批次",
|
||||
zap.String("work_uuid", workUuid),
|
||||
zap.Float64("score", score))
|
||||
publishBatch = append(publishBatch, workUuid)
|
||||
publishedUuids[workUuid] = true
|
||||
publishCount++
|
||||
|
||||
// 当批次达到指定大小时,批量发布
|
||||
if len(publishBatch) >= batchSize {
|
||||
zap.L().Info("批量发布作品", zap.Int("batch_size", len(publishBatch)), zap.Strings("work_uuids", publishBatch))
|
||||
_ = serverCast.PublishWork(context.Background(), &cast.PublishReq{
|
||||
WorkUuids: publishBatch,
|
||||
})
|
||||
zap.L().Info("批次发布完成", zap.Int("published", len(publishBatch)))
|
||||
// 清空批次,准备下一批
|
||||
publishBatch = make([]string, 0, batchSize)
|
||||
}
|
||||
}
|
||||
|
||||
// 处理剩余的作品(不足一批的)
|
||||
if len(publishBatch) > 0 {
|
||||
zap.L().Info("批量发布剩余作品", zap.Int("batch_size", len(publishBatch)), zap.Strings("work_uuids", publishBatch))
|
||||
_ = serverCast.PublishWork(context.Background(), &cast.PublishReq{
|
||||
WorkUuids: publishBatch,
|
||||
})
|
||||
zap.L().Info("剩余批次发布完成", zap.Int("published", len(publishBatch)))
|
||||
}
|
||||
|
||||
zap.L().Info("定时发布任务处理完成",
|
||||
zap.Int("published_count", publishCount),
|
||||
zap.Int("expired_count", expiredCount),
|
||||
zap.Int("total_count", len(workList)))
|
||||
}
|
||||
|
||||
func TaskStatus() {
|
||||
var actions []string = []string{"publishBatch1", "publishBatch2"}
|
||||
for _, action := range actions {
|
||||
resp, err := service.CastProvider.ListTaskList(context.Background(), &cast.ListTaskListReq{
|
||||
Action: action,
|
||||
Status: 1,
|
||||
Page: 1,
|
||||
PageSize: 100,
|
||||
})
|
||||
if err != nil {
|
||||
zap.L().Error("获取任务列表失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
for _, v := range resp.Data {
|
||||
var extraData modelCast.PublishTaskDto
|
||||
if v.ExtraData == "" {
|
||||
continue
|
||||
}
|
||||
_ = json.Unmarshal([]byte(v.ExtraData), &extraData)
|
||||
var allDone = true
|
||||
for _, workUuid := range extraData.WorkUuids {
|
||||
infoResp, _err := service.CastProvider.WorkInfo(context.Background(), &cast.WorkInfoReq{WorkUuid: workUuid})
|
||||
if _err != nil {
|
||||
zap.L().Error("获取作品信息失败", zap.Error(_err))
|
||||
allDone = false
|
||||
break
|
||||
}
|
||||
if infoResp.PublishStatus != cast.PublishStatusENUM_PublishMediaStatus_DONE {
|
||||
allDone = false
|
||||
break
|
||||
}
|
||||
}
|
||||
var excelUrl string
|
||||
if allDone {
|
||||
excelUrl, err = serverCast.PublishTaskExcel(extraData.WorkUuids, true, v.Action)
|
||||
if err != nil {
|
||||
zap.L().Error("生成发布任务Excel失败", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
_, err = service.CastProvider.UpsertTaskList(context.Background(), &cast.UpsertTaskListReq{
|
||||
Uuid: v.Uuid,
|
||||
Action: v.Action,
|
||||
Url: excelUrl,
|
||||
Status: 3,
|
||||
})
|
||||
if err != nil {
|
||||
zap.L().Error("更新任务状态失败", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
zap.L().Info("任务已完成,更新状态为完成", zap.String("task_uuid", v.Uuid), zap.String("excel_url", excelUrl))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WorkPublishQueueConsumer 监听work:publish:queue队列的消费者
|
||||
func WorkPublishQueueConsumer() {
|
||||
zap.L().Info("开始监听work:publish:queue队列(批量处理模式)")
|
||||
const batchSize = 10
|
||||
|
||||
for {
|
||||
batch := make([]string, 0, batchSize)
|
||||
|
||||
result, err := cache.RedisClient.BRPop(0*time.Second, modelCast.WorkPublishQueueKey).Result()
|
||||
if err != nil {
|
||||
zap.L().Error("监听work:publish:queue队列失败", zap.Error(err))
|
||||
time.Sleep(5 * time.Second) // 出错后等待5秒再重试
|
||||
continue
|
||||
}
|
||||
|
||||
if len(result) < 2 {
|
||||
zap.L().Warn("队列返回数据格式异常", zap.Any("result", result))
|
||||
continue
|
||||
}
|
||||
|
||||
workData := result[1] // BRPOP返回[key, value],value在第二个元素
|
||||
zap.L().Info("从work:publish:queue队列收到第一条数据", zap.String("data", workData))
|
||||
|
||||
batch = append(batch, workData)
|
||||
for len(batch) < batchSize {
|
||||
// 使用RPOP非阻塞获取,如果没有数据立即返回
|
||||
data, err := cache.RedisClient.RPop(modelCast.WorkPublishQueueKey).Result()
|
||||
if err == redis.Nil {
|
||||
// 队列为空,跳出循环
|
||||
zap.L().Info("队列暂时为空,开始处理当前批次", zap.Int("batch_size", len(batch)))
|
||||
break
|
||||
} else if err != nil {
|
||||
zap.L().Error("从队列获取数据失败", zap.Error(err))
|
||||
break
|
||||
}
|
||||
batch = append(batch, data)
|
||||
}
|
||||
zap.L().Info("收集到批次数据,准备批量处理", zap.Int("batch_size", len(batch)))
|
||||
// 批量处理数据
|
||||
if err = processBatchWorkPublishQueueData(batch); err != nil {
|
||||
zap.L().Error("批量处理work:publish:queue队列数据失败",
|
||||
zap.Error(err),
|
||||
zap.Int("batch_size", len(batch)))
|
||||
continue
|
||||
}
|
||||
zap.L().Info("成功批量处理work:publish:queue队列数据", zap.Int("batch_size", len(batch)))
|
||||
}
|
||||
}
|
||||
|
||||
// processBatchWorkPublishQueueData 批量处理从work:publish:queue队列中取出的数据
|
||||
func processBatchWorkPublishQueueData(batchData []string) error {
|
||||
// 延时1秒消费
|
||||
time.Sleep(time.Second * 1)
|
||||
workUuids := make([]string, 0, len(batchData))
|
||||
// 解析所有数据,提取workUuid
|
||||
for _, data := range batchData {
|
||||
var workData map[string]string
|
||||
if err := json.Unmarshal([]byte(data), &workData); err != nil {
|
||||
zap.L().Error("解析队列数据失败", zap.String("raw_data", data), zap.Error(err))
|
||||
continue
|
||||
}
|
||||
|
||||
workUuid := workData["workUuid"]
|
||||
if workUuid == "" {
|
||||
zap.L().Error("队列数据中workUuid为空", zap.String("raw_data", data))
|
||||
continue
|
||||
}
|
||||
|
||||
workUuids = append(workUuids, workUuid)
|
||||
}
|
||||
|
||||
if len(workUuids) == 0 {
|
||||
zap.L().Warn("批次中没有有效的workUuid")
|
||||
return errors.New("批次中没有有效的workUuid")
|
||||
}
|
||||
|
||||
zap.L().Info("批量处理发布工作队列数据",
|
||||
zap.Strings("work_uuids", workUuids),
|
||||
zap.Int("count", len(workUuids)))
|
||||
|
||||
// 批量调用发布工作逻辑
|
||||
err := serverCast.PublishWork(context.Background(), &cast.PublishReq{
|
||||
WorkUuids: workUuids,
|
||||
})
|
||||
if err != nil {
|
||||
zap.L().Error("批量发布工作失败",
|
||||
zap.Strings("work_uuids", workUuids),
|
||||
zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
zap.L().Info("批量发布工作成功",
|
||||
zap.Strings("work_uuids", workUuids),
|
||||
zap.Int("count", len(workUuids)))
|
||||
return nil
|
||||
}
|
||||
|
||||
func ArtistAutoConfirmAnalysisTask() {
|
||||
now := float64(time.Now().Unix())
|
||||
opt := redis.ZRangeBy{
|
||||
@ -274,137 +570,139 @@ func ArtistAutoConfirmAnalysisTask() {
|
||||
}
|
||||
}
|
||||
|
||||
// WorkPublishQueueConsumer 监听work:publish:queue队列的消费者
|
||||
func WorkPublishQueueConsumer() {
|
||||
zap.L().Info("开始监听work:publish:queue队列")
|
||||
for {
|
||||
result, err := cache.RedisClient.BRPop(0*time.Second, modelCast.WorkPublishQueueKey).Result()
|
||||
if err != nil {
|
||||
zap.L().Error("监听work:publish:queue队列失败", zap.Error(err))
|
||||
time.Sleep(5 * time.Second) // 出错后等待5秒再重试
|
||||
continue
|
||||
}
|
||||
|
||||
if len(result) < 2 {
|
||||
zap.L().Warn("队列返回数据格式异常", zap.Any("result", result))
|
||||
continue
|
||||
}
|
||||
|
||||
workData := result[1] // BRPOP返回[key, value],value在第二个元素
|
||||
zap.L().Info("从work:publish:queue队列收到数据", zap.String("data", workData))
|
||||
|
||||
// 处理队列数据
|
||||
if err = processWorkPublishQueueData(workData); err != nil {
|
||||
zap.L().Error("处理work:publish:queue队列数据失败", zap.Error(err), zap.String("data", workData))
|
||||
continue
|
||||
}
|
||||
zap.L().Info("成功处理work:publish:queue队列数据", zap.String("data", workData))
|
||||
}
|
||||
}
|
||||
|
||||
// processWorkPublishQueueData 处理从work:publish:queue队列中取出的数据
|
||||
func processWorkPublishQueueData(data string) error {
|
||||
// 延时1秒消费
|
||||
time.Sleep(time.Second * 1)
|
||||
var workData map[string]string
|
||||
_ = json.Unmarshal([]byte(data), &workData)
|
||||
workUuid := workData["workUuid"]
|
||||
if workUuid == "" {
|
||||
zap.L().Error("队列数据为空", zap.String("raw_data", data))
|
||||
return errors.New("队列数据为空")
|
||||
}
|
||||
zap.L().Info("处理发布工作队列数据", zap.String("work_uuid", workUuid))
|
||||
// 调用发布工作逻辑
|
||||
err := serverCast.PublishWork(context.Background(), &cast.PublishReq{
|
||||
WorkUuids: []string{workUuid},
|
||||
})
|
||||
if err != nil {
|
||||
zap.L().Error("发布工作失败",
|
||||
zap.String("work_uuid", workUuid),
|
||||
zap.Error(err))
|
||||
return err
|
||||
}
|
||||
zap.L().Info("发布工作成功", zap.String("work_uuid", workUuid))
|
||||
return nil
|
||||
}
|
||||
|
||||
// ScheduledPublishTask 定时发布任务,从Redis Sorted Set中获取所有workUuid并根据score判断处理
|
||||
func ScheduledPublishTask() {
|
||||
// 加上锁
|
||||
lockKey := "scheduled_publish:lock"
|
||||
reply := cache.RedisClient.SetNX(lockKey, time.Now().Format("2006-01-02 15:04:05"), 1*time.Hour)
|
||||
if !reply.Val() {
|
||||
zap.L().Warn("定时发布任务正在被其他实例处理")
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
cache.RedisClient.Del(lockKey)
|
||||
}()
|
||||
|
||||
// 获取所有数据(不限制score范围)
|
||||
opt := redis.ZRangeBy{
|
||||
Min: "-inf",
|
||||
Max: "+inf",
|
||||
}
|
||||
// 从Redis Sorted Set中获取所有workUuid及其score
|
||||
workList, err := cache.RedisClient.ZRangeByScoreWithScores(modelCast.ScheduledPublishQueueKey, opt).Result()
|
||||
if err != nil {
|
||||
zap.L().Error("获取定时发布任务失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if len(workList) == 0 {
|
||||
zap.L().Debug("没有定时发布任务")
|
||||
return
|
||||
}
|
||||
|
||||
publishCount := 0
|
||||
expiredCount := 0
|
||||
|
||||
zap.L().Info("发现定时发布任务", zap.Int("total_count", len(workList)))
|
||||
|
||||
// 遍历所有数据,根据score判断处理
|
||||
for _, item := range workList {
|
||||
workUuid := item.Member.(string)
|
||||
score := item.Score
|
||||
now := float64(time.Now().Unix())
|
||||
// 如果score小于当前时间,删除但不消费(不发布)
|
||||
if score < now {
|
||||
zap.L().Info("发现过期的定时发布任务,直接删除不发布",
|
||||
zap.String("work_uuid", workUuid),
|
||||
zap.Float64("score", score),
|
||||
zap.Float64("now", now))
|
||||
removed, delErr := cache.RedisClient.ZRem(modelCast.ScheduledPublishQueueKey, workUuid).Result()
|
||||
if delErr != nil {
|
||||
zap.L().Error("删除过期定时发布任务失败", zap.Error(delErr), zap.String("work_uuid", workUuid))
|
||||
} else if removed > 0 {
|
||||
expiredCount++
|
||||
zap.L().Info("已删除过期定时发布任务", zap.String("work_uuid", workUuid))
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
// score大于等于当前时间,正常发布
|
||||
zap.L().Info("处理定时发布任务",
|
||||
zap.String("work_uuid", workUuid),
|
||||
zap.Float64("score", score))
|
||||
_ = serverCast.PublishWork(context.Background(), &cast.PublishReq{
|
||||
WorkUuids: []string{workUuid},
|
||||
})
|
||||
removed, delErr := cache.RedisClient.ZRem(modelCast.ScheduledPublishQueueKey, workUuid).Result()
|
||||
if delErr != nil {
|
||||
zap.L().Error("删除定时发布任务失败", zap.Error(delErr), zap.String("work_uuid", workUuid))
|
||||
} else if removed > 0 {
|
||||
publishCount++
|
||||
zap.L().Info("已发布并删除定时发布任务", zap.String("work_uuid", workUuid))
|
||||
}
|
||||
}
|
||||
zap.L().Info("定时发布任务处理完成",
|
||||
zap.Int("published_count", publishCount),
|
||||
zap.Int("expired_count", expiredCount),
|
||||
zap.Int("total_count", len(workList)))
|
||||
}
|
||||
|
||||
// AyrshareMetricsCollectorTask Ayrshare 指标采集定时任务(每天 00:30 和 12:30 执行)
|
||||
func AyrshareMetricsCollectorTask() {
|
||||
serverCast.ExecuteAyrshareMetricsCollector()
|
||||
}
|
||||
|
||||
func RefreshArtistOrderTask() {
|
||||
_, _ = service.CastProvider.Tools(context.Background(), &cast.ToolsReq{Action: "artistOrderInfo"})
|
||||
}
|
||||
|
||||
// UpdateCastTagWatchCountTask 更新标签观看次数的定时任务(每5分钟执行一次)
|
||||
func UpdateCastTagWatchCountTask() {
|
||||
ctx := context.Background()
|
||||
|
||||
// 计算两天前的00:00:00
|
||||
now := time.Now()
|
||||
twoDaysAgo := now.AddDate(0, 0, -2)
|
||||
createdAtStart := time.Date(twoDaysAgo.Year(), twoDaysAgo.Month(), twoDaysAgo.Day(), 0, 0, 0, 0, twoDaysAgo.Location())
|
||||
createdAtEnd := now
|
||||
|
||||
// 格式化时间字符串:2026-01-01 00:00:00
|
||||
createdAtStartStr := createdAtStart.Format("2006-01-02 15:04:05")
|
||||
createdAtEndStr := createdAtEnd.Format("2006-01-02 15:04:05")
|
||||
|
||||
// 调用 ListCastTags 接口,筛选 IsWatchCountCalled = 2 的数据
|
||||
listReq := &cast.ListCastTagsReq{
|
||||
CreatedAtStart: createdAtStartStr,
|
||||
CreatedAtEnd: createdAtEndStr,
|
||||
IsWatchCountCalled: 2, // 2表示未调用
|
||||
Page: 1,
|
||||
PageSize: 10,
|
||||
}
|
||||
|
||||
listResp, err := service.CastProvider.ListCastTags(ctx, listReq)
|
||||
if err != nil {
|
||||
zap.L().Error("获取标签列表失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
if listResp.Data == nil || len(listResp.Data) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
zap.L().Info("获取到需要更新的标签", zap.Int("count", len(listResp.Data)))
|
||||
|
||||
// 获取有效的 profileKey
|
||||
profileKey, err := serverCast.GetValidProfileKey(ctx, []uint32{1})
|
||||
if err != nil {
|
||||
zap.L().Error("获取有效profileKey失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
// 准备批量更新的数据
|
||||
updateData := make([]*cast.CastTagInfo, 0, len(listResp.Data))
|
||||
|
||||
// 遍历每个标签,调用 RecommendHashtags 接口
|
||||
for _, tag := range listResp.Data {
|
||||
if tag.HashTag == "" {
|
||||
zap.L().Warn("标签HashTag为空,跳过", zap.String("uuid", tag.Uuid))
|
||||
// 即使HashTag为空,也要更新IsWatchCountCalled为1
|
||||
updateData = append(updateData, &cast.CastTagInfo{
|
||||
Uuid: tag.Uuid,
|
||||
WatchCount: 1,
|
||||
IsWatchCountCalled: 1,
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
// 调用 RecommendHashtags 接口
|
||||
recommendReq := &aryshare.RecommendHashtagsRequest{
|
||||
Keyword: tag.HashTag,
|
||||
ProfileKey: profileKey,
|
||||
}
|
||||
|
||||
recommendResp, err := service.AyrshareProvider.RecommendHashtags(ctx, recommendReq)
|
||||
if err != nil {
|
||||
zap.L().Error("调用RecommendHashtags接口失败",
|
||||
zap.String("hashTag", tag.HashTag),
|
||||
zap.String("uuid", tag.Uuid),
|
||||
zap.Error(err))
|
||||
// 调用失败时,将WatchCount更新为1,IsWatchCountCalled更新为1
|
||||
updateData = append(updateData, &cast.CastTagInfo{
|
||||
Uuid: tag.Uuid,
|
||||
WatchCount: 1,
|
||||
IsWatchCountCalled: 1,
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
// 对比返回结果,查找完全一致的标签
|
||||
var matchedViewCount int64 = 0
|
||||
if recommendResp.Recommendations != nil {
|
||||
for _, recommendation := range recommendResp.Recommendations {
|
||||
// 完全一致匹配(不区分大小写)
|
||||
if strings.EqualFold(recommendation.Name, tag.HashTag) {
|
||||
matchedViewCount = recommendation.ViewCount
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 根据匹配结果更新WatchCount
|
||||
var watchCount int32 = 1
|
||||
if matchedViewCount > 0 {
|
||||
watchCount = int32(matchedViewCount)
|
||||
}
|
||||
|
||||
// 添加到更新列表
|
||||
updateData = append(updateData, &cast.CastTagInfo{
|
||||
Uuid: tag.Uuid,
|
||||
WatchCount: watchCount,
|
||||
IsWatchCountCalled: 1,
|
||||
})
|
||||
|
||||
zap.L().Debug("处理标签完成",
|
||||
zap.String("hashTag", tag.HashTag),
|
||||
zap.String("uuid", tag.Uuid),
|
||||
zap.Int64("matchedViewCount", matchedViewCount),
|
||||
zap.Int32("watchCount", watchCount))
|
||||
}
|
||||
|
||||
// 如果没有需要更新的数据,直接返回
|
||||
if len(updateData) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
// 批量更新标签
|
||||
batchUpdateReq := &cast.BatchUpdateCastTagsReq{
|
||||
Data: updateData,
|
||||
}
|
||||
|
||||
_, err = service.CastProvider.BatchUpdateCastTags(ctx, batchUpdateReq)
|
||||
if err != nil {
|
||||
zap.L().Error("批量更新标签失败", zap.Error(err), zap.Int("count", len(updateData)))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ func (w *Work) ExportExcelWorkList(data []*cast.WorkListResp_Info) (*excelize.Fi
|
||||
info.Remark,
|
||||
mediaAccountNames,
|
||||
managerNames,
|
||||
info.Status1Time,
|
||||
info.SubmitTime,
|
||||
info.Status4Time,
|
||||
info.Status9Time,
|
||||
info.Status6Time,
|
||||
|
||||
182
pkg/logic/supplier.go
Normal file
182
pkg/logic/supplier.go
Normal file
@ -0,0 +1,182 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/tealeg/xlsx"
|
||||
)
|
||||
|
||||
type SupplierLogic struct {
|
||||
OwningEntityName string `json:"owningEntityName"`
|
||||
LegalName string `json:"legalName"`
|
||||
LocalName string `json:"localName"`
|
||||
AbbreviationName string `json:"abbreviationName"`
|
||||
CountryOrRegionName string `json:"countryOrRegionName"`
|
||||
CompanyRegistrationNumber string `json:"companyRegistrationNumber"`
|
||||
SupplierType string `json:"supplierType"`
|
||||
ApprovalStatus string `json:"approvalStatus"`
|
||||
ApprovalDate string `json:"approvalDate"`
|
||||
LastReviewDate string `json:"lastReviewDate"`
|
||||
LegalEntityType string `json:"legalEntityType"`
|
||||
SanctionsCountryScreeningResult string `json:"sanctionsCountryScreeningResult"`
|
||||
KeyFinancial string `json:"keyFinancial"`
|
||||
CompanyAddress string `json:"companyAddress"`
|
||||
PrimaryContact string `json:"primaryContact"`
|
||||
DataOwnerDepartment string `json:"dataOwnerDepartment"`
|
||||
BasicCompanyInformation string `json:"basicCompanyInformation"`
|
||||
SupplementaryText string `json:"supplementaryText"`
|
||||
ConnectedParty string `json:"connectedParty"`
|
||||
}
|
||||
type ErrSupplierRes struct {
|
||||
ID int `json:"id"`
|
||||
LegalName string `json:"legalName"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
func ImportSupplier(filePath string) ([]*SupplierLogic, error) {
|
||||
xlFile, err := xlsx.OpenFile(filePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
//开辟除表头外的行数的数组内存
|
||||
//遍历sheet
|
||||
for sheetIndex, sheet := range xlFile.Sheets {
|
||||
var resourceArr []map[int]string
|
||||
//遍历每一行
|
||||
//for rowIndex, row := range sheet.Rows {
|
||||
for _, row := range sheet.Rows {
|
||||
//开辟除表头外的行数的数组内存
|
||||
objMap := make(map[int]string)
|
||||
|
||||
//if len(row.Cells) <= 0 || row.Cells[0].String() == "" {
|
||||
// continue
|
||||
//}
|
||||
for cellIndex, cell := range row.Cells {
|
||||
text := cell.String()
|
||||
//如果是每一行的第一个单元格
|
||||
objMap[cellIndex] = text
|
||||
}
|
||||
resourceArr = append(resourceArr, objMap)
|
||||
}
|
||||
if len(resourceArr) >= 2 {
|
||||
suppliers, err := getListFromRaw(resourceArr)
|
||||
if err != nil {
|
||||
return nil, errors.New(fmt.Sprintf("页码:%d,文件读取错误信息%s", sheetIndex+1, err.Error()))
|
||||
}
|
||||
if len(suppliers) > 0 {
|
||||
return suppliers, nil
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
func getListFromRaw(list []map[int]string) ([]*SupplierLogic, error) {
|
||||
var entrusts []*SupplierLogic
|
||||
kkMap := map[string]string{
|
||||
"*使用组织/Owning Entity": "owningEntityName",
|
||||
"*供应商法定全称/Legal Name": "legalName",
|
||||
"供应商本地名称(如有)/Local Name (if applicable)": "localName",
|
||||
"供应商简称(如有)/Abbreviation/Trade Name (if applicable)": "abbreviationName",
|
||||
"*所在国家或地区/Country or Region": "countryOrRegionName",
|
||||
"*公司注册编号/Company Registration Number": "companyRegistrationNumber",
|
||||
"*供应商类型/Supplier Type": "supplierType",
|
||||
"*准入状态/Approval Status": "approvalStatus",
|
||||
"准入日期/Approval Date": "approvalDate",
|
||||
"法律实体形式/Legal Entity Type": "legalEntityType",
|
||||
"制裁与高风险国家筛查结果/Sanctions & High-Risk Country Screening Result": "sanctionsCountryScreeningResult",
|
||||
"关键财务与付款信息/Key Financial & Payment Information": "keyFinancial",
|
||||
"公司地址/Company Address": "companyAddress",
|
||||
"主要联系人、职位及联系方式/Primary Contact, Position&Details": "primaryContact",
|
||||
"数据维护部门&人员/Data Owner Department/Personnel": "dataOwnerDepartment",
|
||||
"公司信息概要/Summary of Basic Company Information": "basicCompanyInformation",
|
||||
"其他补充信息/Other Supplementary Information": "supplementaryText",
|
||||
"*是否关联方/Connected party": "connectedParty",
|
||||
}
|
||||
keyMap := list[0]
|
||||
for index, tt := range list {
|
||||
if index == 0 {
|
||||
continue
|
||||
}
|
||||
temp := &SupplierLogic{}
|
||||
for i, r := range tt {
|
||||
t := strings.TrimSpace(r)
|
||||
if _, ok := keyMap[i]; !ok {
|
||||
continue
|
||||
}
|
||||
keyString := strings.TrimSpace(keyMap[i])
|
||||
if _, ok := kkMap[keyString]; !ok {
|
||||
fmt.Println(fmt.Sprintf("行数:%d字段信息(%s)没有匹配,请以模版为准", i, keyString))
|
||||
continue
|
||||
}
|
||||
switch kkMap[keyString] {
|
||||
case "owningEntityName":
|
||||
temp.OwningEntityName = t
|
||||
case "legalName":
|
||||
temp.LegalName = t
|
||||
case "localName":
|
||||
temp.LocalName = t
|
||||
case "abbreviationName":
|
||||
temp.AbbreviationName = t
|
||||
case "countryOrRegionName":
|
||||
temp.CountryOrRegionName = t
|
||||
case "companyRegistrationNumber":
|
||||
temp.CompanyRegistrationNumber = t
|
||||
case "supplierType":
|
||||
temp.SupplierType = t
|
||||
case "approvalStatus":
|
||||
temp.ApprovalStatus = t
|
||||
case "approvalDate":
|
||||
temp.ApprovalDate = ParseExcelDate(t)
|
||||
//temp.ApprovalDate = t
|
||||
case "legalEntityType":
|
||||
temp.LegalEntityType = t
|
||||
case "sanctionsCountryScreeningResult":
|
||||
temp.SanctionsCountryScreeningResult = t
|
||||
case "keyFinancial":
|
||||
temp.KeyFinancial = t
|
||||
case "companyAddress":
|
||||
temp.CompanyAddress = t
|
||||
case "primaryContact":
|
||||
temp.PrimaryContact = t
|
||||
case "dataOwnerDepartment":
|
||||
temp.DataOwnerDepartment = t
|
||||
case "basicCompanyInformation":
|
||||
temp.BasicCompanyInformation = t
|
||||
case "supplementaryText":
|
||||
temp.SupplementaryText = t
|
||||
case "connectedParty":
|
||||
temp.ConnectedParty = t
|
||||
|
||||
}
|
||||
}
|
||||
entrusts = append(entrusts, temp)
|
||||
}
|
||||
sha256.New()
|
||||
return entrusts, nil
|
||||
}
|
||||
func ParseExcelDate(v string) string {
|
||||
if v == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 非数字,直接认为是 yyyy-mm-dd
|
||||
if _, err := strconv.ParseFloat(v, 64); err != nil {
|
||||
t, err := time.Parse("2006-01-02", v)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return t.Format("2006-01-02")
|
||||
}
|
||||
|
||||
// Excel 序列号
|
||||
f, _ := strconv.ParseFloat(v, 64)
|
||||
base := time.Date(1899, 12, 30, 0, 0, 0, 0, time.Local)
|
||||
return base.AddDate(0, 0, int(f)).Format("2006-01-02")
|
||||
}
|
||||
@ -69,6 +69,8 @@ func CheckLogin(provider *api.AccountFieeClientImpl) gin.HandlerFunc {
|
||||
Domain: infoRes.Domain,
|
||||
TelNum: jwt.Phone,
|
||||
SubscriberNumber: infoRes.SubscriberNumber,
|
||||
IdNumber: infoRes.IdNumber,
|
||||
InviterID: infoRes.InviterId,
|
||||
}
|
||||
|
||||
ctx.Set("jwtInfo", loginInfo)
|
||||
@ -161,6 +163,7 @@ func CheckWebLogin(provider *account.AccountClientImpl) gin.HandlerFunc {
|
||||
Domain: info.Domain,
|
||||
ID: info.ID,
|
||||
Name: info.NickName,
|
||||
//Account: info.Account,
|
||||
//NickName: info.NickName,
|
||||
//PositionUsers: qres.PositionUsers,
|
||||
//Extend: infoRes.Info.Extend,
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
package cast
|
||||
|
||||
type SendMessageReq struct {
|
||||
MediaUserID string `json:"mediaUserId"`
|
||||
MediaAccountUuid string `json:"mediaAccountUuid"`
|
||||
Message string `json:"message"`
|
||||
RecipientId string `json:"recipientId"`
|
||||
PlatformID uint32 `json:"platformID"`
|
||||
}
|
||||
|
||||
type PostCommentReq struct {
|
||||
|
||||
13
pkg/model/cast/task.go
Normal file
13
pkg/model/cast/task.go
Normal file
@ -0,0 +1,13 @@
|
||||
package cast
|
||||
|
||||
type PublishTaskDto struct {
|
||||
WorkUuids []string
|
||||
MediaAccountUuids []string
|
||||
PlatformIds []string
|
||||
}
|
||||
|
||||
var TaskActionName = map[string]string{
|
||||
"importWorkBatch": "批量导入图文",
|
||||
"publishBatch1": "批量发布",
|
||||
"publishBatch2": "多账号同步",
|
||||
}
|
||||
@ -13,12 +13,16 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
AutoConfirmAnalysisQueueKey = "auto_confirm:analysis:queue"
|
||||
AutoConfirmAnalysisLockKey = "auto_confirm:analysis:lock:%s"
|
||||
AutoConfirmQueueKey = "auto_confirm:queue"
|
||||
AutoConfirmLockKey = "auto_confirm:lock:%s"
|
||||
WorkPublishQueueKey = "work:publish:queue"
|
||||
ScheduledPublishQueueKey = "scheduled:publish:queue" // 定时发布队列
|
||||
|
||||
AutoConfirmAnalysisQueueKey = "auto_confirm:analysis:queue"
|
||||
AutoConfirmAnalysisLockKey = "auto_confirm:analysis:lock:%s"
|
||||
|
||||
// AyrshareMetricsCollectorLockKey Ayrshare 指标采集任务锁
|
||||
AyrshareMetricsCollectorLockKey = "ayrshare:metrics:collector:lock"
|
||||
)
|
||||
|
||||
var WorkCategoryMM = map[int]string{
|
||||
@ -55,7 +59,7 @@ var WorkStatusMM = map[int]string{
|
||||
6: "发布成功",
|
||||
7: "发布失败",
|
||||
8: "未知",
|
||||
9: "验证确认",
|
||||
9: "验收确认",
|
||||
}
|
||||
var ConfirmTypeMM = map[int]string{
|
||||
1: "艺人确认",
|
||||
|
||||
@ -2,6 +2,7 @@ package login
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@ -27,6 +28,8 @@ type Info struct {
|
||||
Domain string `json:"domain"`
|
||||
TelNum string `json:"telNum"`
|
||||
SubscriberNumber string `json:"subscriberNumber"`
|
||||
IdNumber string `json:"idNumber"`
|
||||
InviterID uint64 `json:"inviterId"`
|
||||
}
|
||||
|
||||
func GetUserInfoFromC(c *gin.Context) Info {
|
||||
|
||||
@ -10,7 +10,7 @@ import (
|
||||
)
|
||||
|
||||
func AnalysisRouter(r *gin.RouterGroup) {
|
||||
r.POST("analysis/trigger-ayrshare-metrics", serviceCast.TriggerAyrshareMetricsCollector)
|
||||
// r.POST("analysis/trigger-ayrshare-metrics", serviceCast.TriggerAyrshareMetricsCollector)
|
||||
|
||||
analysis := r.Group("analysis")
|
||||
analysis.Use(middleware.CheckWebLogin(service.AccountProvider))
|
||||
@ -31,7 +31,8 @@ func AnalysisRouter(r *gin.RouterGroup) {
|
||||
analysis.POST("artist-metrics-single", serviceCast.ArtistMetricsDailyWindow) // 艺人指标日窗口
|
||||
analysis.POST("tobe-confirmed-list", serviceCast.TobeConfirmedList) // 待确认数据列表
|
||||
analysis.POST("update-approval-id", serviceCast.UpdateWorkAnalysisApprovalID) // 更新作品分析审批ID
|
||||
// analysis.POST("trigger-ayrshare-metrics", serviceCast.TriggerAyrshareMetricsCollector) // 手动触发 Ayrshare 指标采集任务
|
||||
|
||||
analysis.POST("trigger-ayrshare-metrics", serviceCast.TriggerAyrshareMetricsCollector) // 手动触发 Ayrshare 指标采集任务
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -45,6 +45,8 @@ func BundleOrderRouter(r *gin.RouterGroup) {
|
||||
bundleOrderAppRoute := bundleOrderRoute.Group("app")
|
||||
{
|
||||
bundleOrderAppRoute.POST("order-signature", bundle.CreateBundleOrderSignature)
|
||||
bundleOrderAppRoute.POST("verification-signature", bundle.VerificationSignature) //校验签署
|
||||
bundleOrderAppRoute.POST("restart-signature", bundle.RestartSignature) //重新签署
|
||||
//bundleOrderAppRoute.POST("order-add-signature", bundle.CreateBundleOrderAddSignature)
|
||||
bundleOrderAppRoute.POST("order-del", bundle.DeleteBundleOrder)
|
||||
bundleOrderAppRoute.POST("update-pay", bundle.UpdateBundleOrderStatusPaid)
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"fonchain-fiee/pkg/middleware"
|
||||
"fonchain-fiee/pkg/service"
|
||||
cronService "fonchain-fiee/pkg/service/cron"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@ -8,7 +10,7 @@ import (
|
||||
|
||||
func cronRouter(r *gin.RouterGroup) {
|
||||
auth := r.Group("")
|
||||
//auth.Use(middleware.CheckWebLogin(service.AccountProvider))
|
||||
auth.Use(middleware.CheckWebLogin(service.AccountProvider))
|
||||
cron := auth.Group("cron")
|
||||
{
|
||||
cron.POST("createScheduleTask", cronService.CreateScheduleTask)
|
||||
@ -21,6 +23,7 @@ func cronRouter(r *gin.RouterGroup) {
|
||||
cron.POST("exportExcelExecutionResult", cronService.ExportExcelExecutionResult)
|
||||
cron.POST("getListExecutionRecord", cronService.GetListExecutionRecord)
|
||||
cron.POST("getScheduleTaskStatus", cronService.GetScheduleTaskStatus)
|
||||
cron.POST("getImportData", cronService.GetImportData)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -62,6 +62,8 @@ func MediaRouter(r *gin.RouterGroup) {
|
||||
task := auth.Group("task")
|
||||
{
|
||||
task.POST("list", serviceCast.TaskList)
|
||||
task.POST("delete", serviceCast.DeleteTasK)
|
||||
task.POST("download", serviceCast.DownloadTaskFile)
|
||||
}
|
||||
|
||||
layout := auth.Group("layout")
|
||||
@ -79,6 +81,18 @@ func MediaRouter(r *gin.RouterGroup) {
|
||||
prompt.POST("delete", serviceCast.DeletePrompt)
|
||||
}
|
||||
|
||||
tag := auth.Group("tag")
|
||||
{
|
||||
tag.POST("update", serviceCast.UpdateCastTag)
|
||||
tag.POST("list", serviceCast.ListCastTags)
|
||||
tag.POST("import-batch", serviceCast.ImportTagBatch)
|
||||
tag.POST("recalculate-quote-count", serviceCast.RecalculateCastTagQuoteCount)
|
||||
// tag.POST("auto-hashtags", serviceCast.AutoHashtags)
|
||||
// 这两个接口需要关闭ins,通过facebook授权
|
||||
// tag.POST("recommend-hashtags", serviceCast.RecommendHashtags)
|
||||
// tag.POST("search-hashtags", serviceCast.SearchHashtags)
|
||||
}
|
||||
|
||||
//AI 生图
|
||||
aiNoAuth := noAuth.Group("ai")
|
||||
{
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"fonchain-fiee/pkg/service/account"
|
||||
"fonchain-fiee/pkg/service/asChat"
|
||||
"fonchain-fiee/pkg/service/auth"
|
||||
"fonchain-fiee/pkg/service/bundle"
|
||||
emailAlert "fonchain-fiee/pkg/service/emailAlerts"
|
||||
"fonchain-fiee/pkg/service/file"
|
||||
"fonchain-fiee/pkg/service/governance"
|
||||
@ -60,6 +61,7 @@ func NewRouter() *gin.Engine {
|
||||
SecFilingRouter(privateGroup)
|
||||
app.MediaAppRouter(privateGroup)
|
||||
cronRouter(privateGroup)
|
||||
SupplierRouter(privateGroup)
|
||||
{
|
||||
v1.POST("version", version.Version) //版本号公共
|
||||
}
|
||||
@ -72,6 +74,7 @@ func NewRouter() *gin.Engine {
|
||||
privateGroup.POST("user/check/msg", account.CheckMsg) //校验验证码
|
||||
privateGroup.POST("generate/captcha", account.GenerateCaptcha) //生成滑块验证码
|
||||
privateGroup.POST("validate/captcha", account.ValidateCaptcha) //验证滑块验证码
|
||||
privateGroup.POST("check/register", account.CheckRegister) //校验是否注册
|
||||
acRoute := privateGroup.Group("/user")
|
||||
acRoute.Use(middleware.CheckLogin(service.AccountFieeProvider))
|
||||
{
|
||||
@ -79,6 +82,7 @@ func NewRouter() *gin.Engine {
|
||||
acRoute.POST("info", account.UserInfo) //用户详情
|
||||
acRoute.POST("update", account.UserUpdate) //用户更新
|
||||
acRoute.POST("ocr", account.CheckIdOcr) //
|
||||
acRoute.POST("write/off", account.WriteOff) //
|
||||
}
|
||||
webAcRouter := privateGroup.Group("/user")
|
||||
//webAcRouter.Use(middleware.CheckWebLogin(service.AccountProvider))
|
||||
@ -86,6 +90,7 @@ func NewRouter() *gin.Engine {
|
||||
{
|
||||
webAcRouter.POST("list", account.UserList) //用户列表
|
||||
webAcRouter.POST("approval", account.UserApproval) //实名审核
|
||||
webAcRouter.POST("admin-update", account.AdminUpdate) //更新用户信息
|
||||
webAcRouter.POST("excel/download", account.UserExcelDownload) //excel下载
|
||||
}
|
||||
}
|
||||
@ -180,11 +185,13 @@ func NewRouter() *gin.Engine {
|
||||
governanceRoute := v1.Group("/governance")
|
||||
governanceRouteLogin := governanceRoute.Group("", middleware.CheckWebLogin(service.AccountProvider))
|
||||
|
||||
governanceRoute.GET("/display", middleware.Cors(), governance.Display)
|
||||
governanceRoute.POST("/display", middleware.Cors(), governance.Display)
|
||||
governanceRouteLogin.POST("/list", governance.List)
|
||||
governanceRouteLogin.POST("", governance.Create)
|
||||
governanceRouteLogin.POST("/edit", governance.Edit)
|
||||
governanceRouteLogin.POST("/delete", governance.Delete)
|
||||
governanceRouteLogin.POST("/updataStatus", governance.UpdataStatus)
|
||||
governanceRouteLogin.POST("/getGovernanceInfo", governance.GetGovernanceInfo)
|
||||
|
||||
}
|
||||
{
|
||||
@ -278,6 +285,10 @@ func NewRouter() *gin.Engine {
|
||||
importRoute.GET("generate/photo/test2", imports.Test2)
|
||||
|
||||
}
|
||||
{
|
||||
//健康检测
|
||||
v1.GET("health", bundle.HealthCheck)
|
||||
}
|
||||
//静态文件
|
||||
r.StaticFS("/api/fiee/static", http.Dir("./runtime"))
|
||||
r.NoRoute(func(c *gin.Context) {
|
||||
|
||||
35
pkg/router/supplier.go
Normal file
35
pkg/router/supplier.go
Normal file
@ -0,0 +1,35 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"fonchain-fiee/pkg/middleware"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/service/supplier"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func SupplierRouter(r *gin.RouterGroup) {
|
||||
|
||||
supplierRoute := r.Group("supplier/web")
|
||||
|
||||
supplierRoute.Use(middleware.CheckWebLogin(service.AccountProvider))
|
||||
{
|
||||
supplierRoute.POST("info", supplier.GetSupplier)
|
||||
supplierRoute.POST("create", supplier.CreateSupplier)
|
||||
supplierRoute.POST("update", supplier.UpdateSupplier)
|
||||
supplierRoute.POST("list", supplier.GetSupplierList)
|
||||
}
|
||||
{
|
||||
supplierRoute.POST("dictionary/create", supplier.CreateOrganizeDictionary)
|
||||
supplierRoute.POST("dictionary/list", supplier.GetOrganizeDictionaryList)
|
||||
}
|
||||
{
|
||||
supplierRoute.POST("country-region/list", supplier.GetCountryRegionList)
|
||||
}
|
||||
{
|
||||
supplierRoute.POST("import/record", supplier.CreateImportRecord)
|
||||
supplierRoute.POST("import/info", supplier.GetImportRecordInfo)
|
||||
supplierRoute.POST("export/list", supplier.GetExportList)
|
||||
}
|
||||
|
||||
}
|
||||
@ -130,6 +130,37 @@ func UserUpdate(c *gin.Context) {
|
||||
Domain: req.Domain,
|
||||
Language: req.Language,
|
||||
NickName: req.NickName,
|
||||
Email: req.Email,
|
||||
AbroadTel: req.AbroadTel,
|
||||
AbroadTelAreaCode: req.AbroadTelAreaCode,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func AdminUpdate(c *gin.Context) {
|
||||
var req account.UpdateRequest
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
if req.ID == 0 {
|
||||
service.Error(c, errors.New("用户ID不能为空"))
|
||||
return
|
||||
}
|
||||
req.Domain = "app"
|
||||
res, err := service.AccountFieeProvider.Update(c, &account.UpdateRequest{
|
||||
ID: req.ID,
|
||||
Domain: req.Domain,
|
||||
//Language: req.Language,
|
||||
//NickName: req.NickName,
|
||||
Email: req.Email,
|
||||
AbroadTel: req.AbroadTel,
|
||||
AbroadTelAreaCode: req.AbroadTelAreaCode,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
@ -157,6 +188,26 @@ func CheckIdOcr(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
func WriteOff(c *gin.Context) {
|
||||
|
||||
var req account.WriteOffRequest
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
user := login.GetUserInfoFromC(c)
|
||||
|
||||
res, err := service.AccountFieeProvider.WriteOff(c, &account.WriteOffRequest{
|
||||
Id: user.ID,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取身份证OCR识别结果
|
||||
* @param realIDImgA string - 身份证图片的URL地址
|
||||
@ -241,6 +292,11 @@ func SendMsg(c *gin.Context) {
|
||||
}
|
||||
req.Project = "fiee"
|
||||
req.TelNum = req.Zone + req.TelNum
|
||||
//todo 审核使用账号
|
||||
if req.TelNum == "8618888888888" {
|
||||
service.Success1(c, "发送成功", &account.SendMsgStatusResponse{})
|
||||
return
|
||||
}
|
||||
if req.Zone != e.ZoneCn && req.Zone != "" {
|
||||
// ============================== redis检查ip开始
|
||||
ip := c.ClientIP()
|
||||
@ -285,7 +341,6 @@ func SendMsg(c *gin.Context) {
|
||||
//cache.RedisClient.Incr(daykey)
|
||||
//cache.RedisClient.Incr(minutekey)
|
||||
// ============================== redis检查ip结束
|
||||
|
||||
tempReq := &account.SendNationMsgRequest{
|
||||
Domain: req.Domain,
|
||||
TelNum: req.TelNum,
|
||||
@ -409,6 +464,31 @@ func ValidateCaptcha(c *gin.Context) {
|
||||
service.Success(c, res)
|
||||
|
||||
}
|
||||
func CheckRegister(c *gin.Context) {
|
||||
type CheckRegisterRes struct {
|
||||
IsRegister bool `json:"is_register"`
|
||||
}
|
||||
req := account.UserByTelRequest{}
|
||||
req.Domain = "app"
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
data, err := service.AccountFieeProvider.UserByTel(context.Background(), &req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
var res CheckRegisterRes
|
||||
if data.Id == 0 {
|
||||
res.IsRegister = false
|
||||
} else {
|
||||
res.IsRegister = true
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
func UserLogout(c *gin.Context) {
|
||||
req := account.DecryptJwtRequest{}
|
||||
req.Token = c.GetHeader(e.Authorization)
|
||||
@ -428,6 +508,16 @@ func UserRegister(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
req.Domain = "app"
|
||||
if req.InviterCode != "" {
|
||||
codeRes, err := service.AccountFieeProvider.GetInviterInfo(context.Background(), &account.InviterInfoRequest{
|
||||
Code: req.InviterCode,
|
||||
})
|
||||
if err != nil || codeRes.Id == 0 {
|
||||
service.Error(c, errors.New("邀请码错误"))
|
||||
return
|
||||
}
|
||||
req.InviterID = codeRes.Id
|
||||
}
|
||||
res, err := service.AccountFieeProvider.Register(context.Background(), &req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
@ -443,6 +533,10 @@ func UserRegister(c *gin.Context) {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
if tokenInfo.AccountInfo.WriteOff == true {
|
||||
service.Error(c, errors.New("此账号已注销,无法登录"))
|
||||
return
|
||||
}
|
||||
res.Token = tokenInfo.Token
|
||||
service.Success(c, res)
|
||||
return
|
||||
|
||||
@ -134,9 +134,6 @@ func (cr ChatHandler) NewMessage(c *gin.Context) {
|
||||
service.ErrWithCode(c, code)
|
||||
return
|
||||
}
|
||||
if request.LocalStamp == 0 {
|
||||
request.LocalStamp = time.Now().Unix()
|
||||
}
|
||||
err := logic.NewMessage(c, &cr.cache, chatUser, request)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
@ -263,9 +260,8 @@ func (cr ChatHandler) MessageList(c *gin.Context) {
|
||||
// return
|
||||
// }
|
||||
//}
|
||||
// 启用或禁用缓存
|
||||
//messages := cr.cache.GetChatRecord(request.SessionId)
|
||||
messages := []*accountFiee.ChatRecordData{}
|
||||
messages := cr.cache.GetChatRecord(request.SessionId)
|
||||
//messages := []*accountFiee.ChatRecordData{}
|
||||
var returnDataIdList = make([]int64, 0)
|
||||
defer func() {
|
||||
//获取最新数据时,重置新消息数量统计
|
||||
@ -281,7 +277,6 @@ func (cr ChatHandler) MessageList(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println("defer CoverChatRecord , message len:", len(messages))
|
||||
err := cr.cache.CoverChatRecord(request.SessionId, messages)
|
||||
if err != nil {
|
||||
log.Print("设置消息已读失败", zap.Error(err))
|
||||
@ -307,7 +302,6 @@ func (cr ChatHandler) MessageList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
messages = recordResp.List
|
||||
fmt.Println("GetChatRecordList len:", len(messages))
|
||||
err = cr.cache.CoverChatRecord(request.SessionId, messages)
|
||||
if err != nil {
|
||||
log.Print("覆盖聊天记录失败", zap.Error(err))
|
||||
@ -338,7 +332,7 @@ func (cr ChatHandler) MessageList(c *gin.Context) {
|
||||
return messages[i].ID > messages[j].ID
|
||||
}
|
||||
})
|
||||
//fmt.Printf("data is %+v\n", messages)
|
||||
fmt.Printf("data is %+v\n", messages)
|
||||
total := 0
|
||||
for i, message := range messages {
|
||||
switch request.Direction {
|
||||
@ -373,6 +367,8 @@ func (cr ChatHandler) MessageList(c *gin.Context) {
|
||||
resp[i].Message.Media = []dto.MessageMedia{}
|
||||
}
|
||||
}
|
||||
if accessUser.Role == 1 {
|
||||
}
|
||||
service.Success(c, resp)
|
||||
}
|
||||
|
||||
|
||||
@ -42,7 +42,6 @@ func NewMessage(ctx context.Context, cache *chatCache.ChatCache, sender *account
|
||||
fmt.Println(request.LocalStamp - msgRecord.LocalStamp)
|
||||
if msgRecord.Message.Text == request.Message.Text && request.LocalStamp-msgRecord.LocalStamp < 1 { //秒级
|
||||
cacheMap[request.AtUserId] = request
|
||||
fmt.Println("\n\n跳过消息发送\n\t跳过消息发送\n\t\t跳过消息发送\n\n")
|
||||
return nil
|
||||
} else {
|
||||
cacheMap[request.AtUserId] = request
|
||||
|
||||
@ -177,12 +177,10 @@ func (r *Robot) Run() {
|
||||
if hit {
|
||||
hasHit = true
|
||||
if rule.RunTime().IsZero() {
|
||||
go func() {
|
||||
err := rule.Run(r.cache)
|
||||
if err != nil {
|
||||
log.Printf("robot 执行任务失败:%v\n", err)
|
||||
}
|
||||
}()
|
||||
} else {
|
||||
r.RegisterDelayTask(rule)
|
||||
}
|
||||
|
||||
@ -27,12 +27,6 @@ func NewReplyWhenHitKeywords(title string, keywords []string) IRobotTask {
|
||||
return &RobotTaskWithKeyworkds{title: title, keywords: keywords}
|
||||
}
|
||||
func (r *RobotTaskWithKeyworkds) Hit(event ws.ListenEventData, sender *accountFiee.ChatUserData) (hit bool) {
|
||||
//fmt.Printf("event.EventType != ws.EventChatMessage:%v\n", event.EventType != ws.EventChatMessage)
|
||||
//fmt.Printf("event.Msg: %v\n", event.Msg == "")
|
||||
//fmt.Printf("event.Client == nil: %v\n", event.Client == nil)
|
||||
//fmt.Printf("event.ChatUser == nil: %v\n", event.ChatUser == nil)
|
||||
//fmt.Printf("event.ChatUser.Role != 1: %v\n", event.ChatUser.Role != 1)
|
||||
//fmt.Printf("r.keywords: %+v\n", r.keywords)
|
||||
if event.EventType != ws.EventChatMessage || event.Msg == "" || event.Client == nil || event.ChatUser == nil {
|
||||
return
|
||||
}
|
||||
|
||||
@ -11,7 +11,6 @@ import (
|
||||
"fonchain-fiee/pkg/service/bundle/common"
|
||||
"fonchain-fiee/pkg/utils"
|
||||
"io"
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -167,7 +166,7 @@ func WorkConfirm(c *gin.Context) { // 确认作品并扣除余量
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
log.Print("req.ConfirmRemark:", req.ConfirmRemark)
|
||||
|
||||
if req.ConfirmStatus == 2 { // 驳回完直接结束
|
||||
res, err := service.CastProvider.UpdateStatus(c, &cast.UpdateStatusReq{
|
||||
WorkAction: cast.WorkActionENUM_CONFIRM,
|
||||
@ -190,22 +189,6 @@ func WorkConfirm(c *gin.Context) { // 确认作品并扣除余量
|
||||
service.Error(c, errors.New(common.GetUserBalanceFailed))
|
||||
return
|
||||
}
|
||||
//判断套餐是否过期
|
||||
if balanceInfoRes.BundleStatus == common.BundleExpired {
|
||||
_, err = service.CastProvider.UpdateStatus(c, &cast.UpdateStatusReq{
|
||||
WorkAction: cast.WorkActionENUM_CONFIRM,
|
||||
WorkUuid: req.WorkUuid,
|
||||
ConfirmRemark: req.ConfirmRemark,
|
||||
ConfirmStatus: 3,
|
||||
ConfirmFailType: cast.ConfirmFailENUM_ConfirmFailENUM_EXPIRED,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, errors.New(common.UpdateWorkStatusFailed))
|
||||
return
|
||||
}
|
||||
service.Error(c, errors.New("套餐已过期"))
|
||||
return
|
||||
}
|
||||
|
||||
wordInfoRes, err := service.CastProvider.WorkDetail(c, &cast.WorkDetailReq{
|
||||
WorkUuid: req.WorkUuid,
|
||||
@ -214,6 +197,18 @@ func WorkConfirm(c *gin.Context) { // 确认作品并扣除余量
|
||||
service.Error(c, errors.New(common.GetWorkDetailFailed))
|
||||
return
|
||||
}
|
||||
|
||||
if balanceInfoRes.BundleStatus == common.BundleExpired {
|
||||
_, err = service.CastProvider.UpdateStatus(c, &cast.UpdateStatusReq{
|
||||
WorkAction: cast.WorkActionENUM_CONFIRM,
|
||||
WorkUuid: req.WorkUuid,
|
||||
ConfirmRemark: req.ConfirmRemark,
|
||||
ConfirmStatus: 3,
|
||||
})
|
||||
service.Error(c, errors.New("套餐已过期"))
|
||||
return
|
||||
}
|
||||
|
||||
if wordInfoRes.WorkStatus != 4 {
|
||||
service.Error(c, errors.New("作品不是待确认状态"))
|
||||
return
|
||||
@ -226,17 +221,12 @@ func WorkConfirm(c *gin.Context) { // 确认作品并扣除余量
|
||||
case 1:
|
||||
{
|
||||
if balanceInfoRes.ImageExtendConsumptionNumber >= balanceInfoRes.ImageExtendNumber { // 图文余量不足
|
||||
_, err = service.CastProvider.UpdateStatus(context.Background(), &cast.UpdateStatusReq{
|
||||
_, err = service.CastProvider.UpdateStatus(c, &cast.UpdateStatusReq{
|
||||
WorkAction: cast.WorkActionENUM_CONFIRM,
|
||||
WorkUuid: req.WorkUuid,
|
||||
ConfirmRemark: req.ConfirmRemark,
|
||||
ConfirmStatus: 3,
|
||||
ConfirmFailType: cast.ConfirmFailENUM_ConfirmFailENUM_NOTENOUGH,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, errors.New(common.UpdateWorkStatusFailed))
|
||||
return
|
||||
}
|
||||
service.Error(c, errors.New("图文余量不足"))
|
||||
return
|
||||
}
|
||||
@ -245,17 +235,12 @@ func WorkConfirm(c *gin.Context) { // 确认作品并扣除余量
|
||||
case 2:
|
||||
{
|
||||
if balanceInfoRes.VideoExtendConsumptionNumber >= balanceInfoRes.VideoExtendNumber { // 视频余量不足
|
||||
_, err = service.CastProvider.UpdateStatus(context.Background(), &cast.UpdateStatusReq{
|
||||
_, err = service.CastProvider.UpdateStatus(c, &cast.UpdateStatusReq{
|
||||
WorkAction: cast.WorkActionENUM_CONFIRM,
|
||||
WorkUuid: req.WorkUuid,
|
||||
ConfirmRemark: req.ConfirmRemark,
|
||||
ConfirmStatus: 3,
|
||||
ConfirmFailType: cast.ConfirmFailENUM_ConfirmFailENUM_NOTENOUGH,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, errors.New(common.UpdateWorkStatusFailed))
|
||||
return
|
||||
}
|
||||
service.Error(c, errors.New("视频余量不足"))
|
||||
return
|
||||
}
|
||||
@ -467,6 +452,7 @@ func writeToExcel(filename string, items []*bundle.BundleBalanceExportItem) erro
|
||||
"所属月份", "用户编号", "姓名", "手机号", "购买套餐时间",
|
||||
"套餐金额", "增值服务金额", "支付金额", "币种", "手续费",
|
||||
"套餐视频总数", "增值服务视频总数", "套餐视频单价", "增值视频单价",
|
||||
"当月消耗套餐金额($)", "当月消耗增值金额($)",
|
||||
"套餐账号总数", "增值账号总数", "套餐账号使用数", "增值账号使用数",
|
||||
"当前可用套餐视频数", "当前可用增值视频数", "当前已用套餐视频数", "当前已用增值视频数", "当前作废套餐视频数", "当前作废增值视频数", "当月新增可用套餐视频数", "当月新增可用增值视频数", "当月使用套餐视频数", "当月使用增值视频数", "当月作废套餐视频数", "当月作废增值视频数",
|
||||
"当前可用套餐图文数", "当前可用增值图文数", "当前已用套餐图文数", "当前已用增值图文数", "当前作废套餐图文数", "当前作废增值图文数", "当月新增可用套餐图文数", "当月新增可用增值图文数", "当月使用套餐图文数", "当月使用增值图文数", "当月作废套餐图文数", "当月作废增值图文数",
|
||||
@ -509,64 +495,76 @@ func writeToExcel(filename string, items []*bundle.BundleBalanceExportItem) erro
|
||||
_ = write(13, fmt.Sprintf("%.2f", it.BundleVideoUnitPrice))
|
||||
_ = write(14, fmt.Sprintf("%.2f", it.IncreaseVideoUnitPrice))
|
||||
|
||||
// 当月视频消耗金额($)
|
||||
monthlyBundleVideoConsumptionPrice, err := strconv.ParseFloat(it.MonthlyBundleVideoConsumptionPrice, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
monthlyIncreaseVideoConsumptionPrice, err := strconv.ParseFloat(it.MonthlyIncreaseVideoConsumptionPrice, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_ = write(15, fmt.Sprintf("%.2f", monthlyBundleVideoConsumptionPrice))
|
||||
_ = write(16, fmt.Sprintf("%.2f", monthlyIncreaseVideoConsumptionPrice))
|
||||
|
||||
// 账号类
|
||||
_ = write(15, int(it.BundleAccountNumber))
|
||||
_ = write(16, int(it.IncreaseAccountNumber))
|
||||
_ = write(17, int(it.BundleAccountConsumptionNumber))
|
||||
_ = write(18, int(it.IncreaseAccountConsumptionNumber))
|
||||
_ = write(17, int(it.BundleAccountNumber))
|
||||
_ = write(18, int(it.IncreaseAccountNumber))
|
||||
_ = write(19, int(it.BundleAccountConsumptionNumber))
|
||||
_ = write(20, int(it.IncreaseAccountConsumptionNumber))
|
||||
|
||||
// 视频类
|
||||
_ = write(19, int(it.MonthlyBundleVideoNumber))
|
||||
_ = write(20, int(it.MonthlyIncreaseVideoNumber))
|
||||
_ = write(21, int(it.BundleVideoConsumptionNumber))
|
||||
_ = write(22, int(it.IncreaseVideoConsumptionNumber))
|
||||
_ = write(23, int(it.InvalidBundleVideoNumber))
|
||||
_ = write(24, int(it.InvalidIncreaseVideoNumber))
|
||||
_ = write(25, int(it.MonthlyNewBundleVideoNumber))
|
||||
_ = write(26, int(it.MonthlyNewIncreaseVideoNumber))
|
||||
_ = write(27, int(it.MonthlyBundleVideoConsumptionNumber))
|
||||
_ = write(28, int(it.MonthlyIncreaseVideoConsumptionNumber))
|
||||
_ = write(29, int(it.MonthlyInvalidBundleVideoNumber))
|
||||
_ = write(30, int(it.MonthlyInvalidIncreaseVideoNumber))
|
||||
_ = write(21, int(it.MonthlyBundleVideoNumber))
|
||||
_ = write(22, int(it.MonthlyIncreaseVideoNumber))
|
||||
_ = write(23, int(it.BundleVideoConsumptionNumber))
|
||||
_ = write(24, int(it.IncreaseVideoConsumptionNumber))
|
||||
_ = write(25, int(it.InvalidBundleVideoNumber))
|
||||
_ = write(26, int(it.InvalidIncreaseVideoNumber))
|
||||
_ = write(27, int(it.MonthlyNewBundleVideoNumber))
|
||||
_ = write(28, int(it.MonthlyNewIncreaseVideoNumber))
|
||||
_ = write(29, int(it.MonthlyBundleVideoConsumptionNumber))
|
||||
_ = write(30, int(it.MonthlyIncreaseVideoConsumptionNumber))
|
||||
_ = write(31, int(it.MonthlyInvalidBundleVideoNumber))
|
||||
_ = write(32, int(it.MonthlyInvalidIncreaseVideoNumber))
|
||||
|
||||
// 图文类
|
||||
_ = write(31, int(it.MonthlyBundleImageNumber))
|
||||
_ = write(32, int(it.MonthlyIncreaseImageNumber))
|
||||
_ = write(33, int(it.BundleImageConsumptionNumber))
|
||||
_ = write(34, int(it.IncreaseImageConsumptionNumber))
|
||||
_ = write(35, int(it.InvalidBundleImageNumber))
|
||||
_ = write(36, int(it.InvalidIncreaseImageNumber))
|
||||
_ = write(37, int(it.MonthlyNewBundleImageNumber))
|
||||
_ = write(38, int(it.MonthlyNewIncreaseImageNumber))
|
||||
_ = write(39, int(it.MonthlyBundleImageConsumptionNumber))
|
||||
_ = write(40, int(it.MonthlyIncreaseImageConsumptionNumber))
|
||||
_ = write(41, int(it.MonthlyInvalidBundleImageNumber))
|
||||
_ = write(42, int(it.MonthlyInvalidIncreaseImageNumber))
|
||||
_ = write(33, int(it.MonthlyBundleImageNumber))
|
||||
_ = write(34, int(it.MonthlyIncreaseImageNumber))
|
||||
_ = write(35, int(it.BundleImageConsumptionNumber))
|
||||
_ = write(36, int(it.IncreaseImageConsumptionNumber))
|
||||
_ = write(37, int(it.InvalidBundleImageNumber))
|
||||
_ = write(38, int(it.InvalidIncreaseImageNumber))
|
||||
_ = write(39, int(it.MonthlyNewBundleImageNumber))
|
||||
_ = write(40, int(it.MonthlyNewIncreaseImageNumber))
|
||||
_ = write(41, int(it.MonthlyBundleImageConsumptionNumber))
|
||||
_ = write(42, int(it.MonthlyIncreaseImageConsumptionNumber))
|
||||
_ = write(43, int(it.MonthlyInvalidBundleImageNumber))
|
||||
_ = write(44, int(it.MonthlyInvalidIncreaseImageNumber))
|
||||
|
||||
// 数据分析类
|
||||
_ = write(43, int(it.MonthlyBundleDataAnalysisNumber))
|
||||
_ = write(44, int(it.MonthlyIncreaseDataAnalysisNumber))
|
||||
_ = write(45, int(it.BundleDataAnalysisConsumptionNumber))
|
||||
_ = write(46, int(it.IncreaseDataAnalysisConsumptionNumber))
|
||||
_ = write(47, int(it.InvalidBundleDataAnalysisNumber))
|
||||
_ = write(48, int(it.InvalidIncreaseDataAnalysisNumber))
|
||||
_ = write(49, int(it.MonthlyNewBundleDataAnalysisNumber))
|
||||
_ = write(50, int(it.MonthlyNewIncreaseDataAnalysisNumber))
|
||||
_ = write(51, int(it.MonthlyBundleDataAnalysisConsumptionNumber))
|
||||
_ = write(52, int(it.MonthlyIncreaseDataAnalysisConsumptionNumber))
|
||||
_ = write(53, int(it.MonthlyInvalidBundleDataAnalysisNumber))
|
||||
_ = write(54, int(it.MonthlyInvalidIncreaseDataAnalysisNumber))
|
||||
_ = write(45, int(it.MonthlyBundleDataAnalysisNumber))
|
||||
_ = write(46, int(it.MonthlyIncreaseDataAnalysisNumber))
|
||||
_ = write(47, int(it.BundleDataAnalysisConsumptionNumber))
|
||||
_ = write(48, int(it.IncreaseDataAnalysisConsumptionNumber))
|
||||
_ = write(49, int(it.InvalidBundleDataAnalysisNumber))
|
||||
_ = write(50, int(it.InvalidIncreaseDataAnalysisNumber))
|
||||
_ = write(51, int(it.MonthlyNewBundleDataAnalysisNumber))
|
||||
_ = write(52, int(it.MonthlyNewIncreaseDataAnalysisNumber))
|
||||
_ = write(53, int(it.MonthlyBundleDataAnalysisConsumptionNumber))
|
||||
_ = write(54, int(it.MonthlyIncreaseDataAnalysisConsumptionNumber))
|
||||
_ = write(55, int(it.MonthlyInvalidBundleDataAnalysisNumber))
|
||||
_ = write(56, int(it.MonthlyInvalidIncreaseDataAnalysisNumber))
|
||||
|
||||
// 手动扩展类
|
||||
_ = write(55, int(it.MonthlyNewManualAccountNumber))
|
||||
_ = write(56, int(it.MonthlyNewManualVideoNumber))
|
||||
_ = write(57, int(it.MonthlyNewManualImageNumber))
|
||||
_ = write(58, int(it.MonthlyNewManualDataAnalysisNumber))
|
||||
_ = write(59, int(it.MonthlyNewDurationNumber))
|
||||
_ = write(60, int(it.MonthlyManualAccountConsumptionNumber))
|
||||
_ = write(61, int(it.MonthlyManualVideoConsumptionNumber))
|
||||
_ = write(62, int(it.MonthlyManualImageConsumptionNumber))
|
||||
_ = write(63, int(it.MonthlyManualDataAnalysisConsumptionNumber))
|
||||
_ = write(57, int(it.MonthlyNewManualAccountNumber))
|
||||
_ = write(58, int(it.MonthlyNewManualVideoNumber))
|
||||
_ = write(59, int(it.MonthlyNewManualImageNumber))
|
||||
_ = write(60, int(it.MonthlyNewManualDataAnalysisNumber))
|
||||
_ = write(61, int(it.MonthlyNewDurationNumber))
|
||||
_ = write(62, int(it.MonthlyManualAccountConsumptionNumber))
|
||||
_ = write(63, int(it.MonthlyManualVideoConsumptionNumber))
|
||||
_ = write(64, int(it.MonthlyManualImageConsumptionNumber))
|
||||
_ = write(65, int(it.MonthlyManualDataAnalysisConsumptionNumber))
|
||||
|
||||
}
|
||||
|
||||
@ -586,7 +584,7 @@ func GetAccountBundleBalance(c *gin.Context) {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
req.Month = time.Now().Format("2006-01")
|
||||
req.Month = []string{time.Now().Format("2006-01")}
|
||||
res, err := service.BundleProvider.GetBundleBalanceList(context.Background(), &req)
|
||||
if err != nil {
|
||||
service.Error(c, errors.New(common.GetBundleBalanceListFailed))
|
||||
|
||||
@ -17,7 +17,6 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/duke-git/lancet/v2/datetime"
|
||||
"github.com/shopspring/decimal"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@ -93,9 +92,30 @@ func MetricsBundlePurchaseExport(ctx *gin.Context) {
|
||||
sumFee := decimal.Zero
|
||||
|
||||
for _, i := range data {
|
||||
sumPayment = sumPayment.Add(decimal.NewFromFloat(float64(i.PaymentAmount)))
|
||||
sumFinal = sumFinal.Add(decimal.NewFromFloat(float64(i.FinalAmount)))
|
||||
sumFee = sumFee.Add(decimal.NewFromFloat(float64(i.FeeAmount)))
|
||||
|
||||
s := fmt.Sprintf("%.2f", i.PaymentAmount)
|
||||
d, err := decimal.NewFromString(s)
|
||||
if err != nil {
|
||||
service.Error(ctx, errors.New(common.MetricsBundlePurchaseExportFailed))
|
||||
return
|
||||
}
|
||||
sumPayment = sumPayment.Add(d)
|
||||
|
||||
s = fmt.Sprintf("%.2f", i.FinalAmount)
|
||||
d, err = decimal.NewFromString(s)
|
||||
if err != nil {
|
||||
service.Error(ctx, errors.New(common.MetricsBundlePurchaseExportFailed))
|
||||
return
|
||||
}
|
||||
sumFinal = sumFinal.Add(d)
|
||||
|
||||
s = fmt.Sprintf("%.2f", i.FeeAmount)
|
||||
d, err = decimal.NewFromString(s)
|
||||
if err != nil {
|
||||
service.Error(ctx, errors.New(common.MetricsBundlePurchaseExportFailed))
|
||||
return
|
||||
}
|
||||
sumFee = sumFee.Add(d)
|
||||
}
|
||||
|
||||
f.SetCellValue(sheet, fmt.Sprintf("A%d", endRow+1), "合计支付金额(美元)")
|
||||
@ -171,7 +191,7 @@ func MetricsArtistAccountExport(ctx *gin.Context) {
|
||||
utils.CheckDirPath("./runtime/"+fmt.Sprint(userInfo.ID), true)
|
||||
sheet := "Sheet1"
|
||||
f := excelize.NewFile()
|
||||
headers := []string{"序号", "艺人", "用户编号", "DM账号名", "Instagram账号名", "TikTok账号名"}
|
||||
headers := []string{"序号", "艺人", "用户编号", "DM账号名", "DM账号状态", "Instagram账号名", "Instagram账号状态", "TikTok账号名", "TikTok账号状态", "Bluesky账号名", "Bluesky账号状态", "Youtube账号名", "Youtube账号状态"}
|
||||
for i, h := range headers {
|
||||
col, _ := excelize.ColumnNumberToName(i + 1)
|
||||
cell := col + "1"
|
||||
@ -185,6 +205,10 @@ func MetricsArtistAccountExport(ctx *gin.Context) {
|
||||
} else {
|
||||
scheme = "http"
|
||||
}
|
||||
authStatus := map[int32]string{
|
||||
1: "授权",
|
||||
2: "未授权",
|
||||
}
|
||||
for r, it := range resp.Data {
|
||||
row := r + 2
|
||||
// 逐列写入(注意顺序必须和 headers 一致)
|
||||
@ -196,9 +220,16 @@ func MetricsArtistAccountExport(ctx *gin.Context) {
|
||||
_ = write(1, r+1)
|
||||
_ = write(2, it.ArtistName)
|
||||
_ = write(3, it.UserNum)
|
||||
_ = write(4, it.DmAccount)
|
||||
_ = write(5, it.InstagramAccount)
|
||||
_ = write(6, it.TiktokAccount)
|
||||
_ = write(4, it.DmNickname)
|
||||
_ = write(5, authStatus[it.DmAuthStatus])
|
||||
_ = write(6, it.InstagramNickname)
|
||||
_ = write(7, authStatus[it.InsAuthStatus])
|
||||
_ = write(8, it.TiktokNickname)
|
||||
_ = write(9, authStatus[it.TiktokAuthStatus])
|
||||
_ = write(10, it.BlueskyNickname)
|
||||
_ = write(11, authStatus[it.BlueskyAuthStatus])
|
||||
_ = write(12, it.YoutubeNickname)
|
||||
_ = write(13, authStatus[it.YoutubeAuthStatus])
|
||||
}
|
||||
// 可选:设置列宽,使表格更美观
|
||||
_ = f.SetColWidth(sheet, "A", "AZ", 18)
|
||||
@ -225,11 +256,9 @@ func MetricsVideoSubmitExport(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
newCtx := serviceCast.NewCtxWithUserInfo(ctx)
|
||||
t, err := time.Parse("2006-01", req.Month)
|
||||
if err == nil {
|
||||
if len(req.Month) > 0 {
|
||||
resp, err = service.CastProvider.WorkList(newCtx, &cast.WorkListReq{
|
||||
SubmitStartTime: datetime.BeginOfMonth(t).Format(time.DateTime),
|
||||
SubmitEndTime: datetime.EndOfMonth(t).Format(time.DateTime),
|
||||
SubmitTimeMonths: req.Month,
|
||||
Page: 1,
|
||||
PageSize: 99999,
|
||||
})
|
||||
|
||||
@ -22,6 +22,8 @@ import (
|
||||
"github.com/gin-gonic/gin/binding"
|
||||
)
|
||||
|
||||
const ContractUrl = "https://e-cdn.fontree.cn/fonchain-main/prod/file/contract/saas/template-25122501.pdf"
|
||||
|
||||
func DeleteBundleOrder(c *gin.Context) {
|
||||
var req bundle.DeleteValueAddServiceRequest
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
@ -239,15 +241,21 @@ func CreateBundleOrderSignature(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 签合同(金额 + 有效期)
|
||||
signContract, err := logic.SignContractV2(req.CustomerNum, bundleDetail.Contract, bundleDetail.Price+addTotalPrice, expirationDay)
|
||||
signContract, err := logic.SignContractV2(req.CustomerNum, bundleDetail.Contract, bundleDetail.Price+addTotalPrice, expirationDay, userInfo.Name, userInfo.IdNumber, userInfo.PlaceOfResidence)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if userInfo.InviterID != 0 && logic.CheckUserFirstOrder(userInfo.ID) {
|
||||
req.InviterId = userInfo.InviterID
|
||||
}
|
||||
// 组装订单信息
|
||||
req = logic.BuildOrderRequest(req, userInfo, bundleDetail, addRecords, addTotalPrice, lastContractNo, signContract)
|
||||
|
||||
// 校验发布平台
|
||||
if len(req.PlatformIds) == 0 {
|
||||
req.PlatformIds = []uint32{1, 4, 5}
|
||||
}
|
||||
// 创建订单
|
||||
res, err := service.BundleProvider.CreateOrderRecord(context.Background(), &req)
|
||||
if err != nil {
|
||||
@ -257,7 +265,129 @@ func CreateBundleOrderSignature(c *gin.Context) {
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
func VerificationSignature(c *gin.Context) {
|
||||
type VerificationSignature struct {
|
||||
Signature bool `json:"signature"`
|
||||
SignatureUrl string `json:"signature_url"`
|
||||
}
|
||||
res := VerificationSignature{Signature: false}
|
||||
userInfo := login.GetUserInfoFromC(c)
|
||||
|
||||
// 添加用户信息验证
|
||||
if userInfo.ID == 0 {
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
req := bundle.OrderRecordsDetailRequest{
|
||||
CustomerID: strconv.FormatUint(userInfo.ID, 10),
|
||||
}
|
||||
|
||||
records, err := service.BundleProvider.OrderRecordsDetail(c, &req)
|
||||
if err != nil {
|
||||
// 添加错误日志但继续返回false(业务逻辑)
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
// 优化空值判断链
|
||||
if records == nil || records.OrderRecord == nil {
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
order := records.OrderRecord
|
||||
|
||||
customerID, err := strconv.ParseUint(order.CustomerID, 10, 64)
|
||||
if err != nil || customerID != userInfo.ID {
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
//
|
||||
//if order.Status != bundleModel.OrderPaid {
|
||||
// service.Success(c, res)
|
||||
// return
|
||||
//}
|
||||
expirationTime, err := time.Parse("2006-01-02 15:04:05", order.ExpirationTime)
|
||||
if err != nil {
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
if expirationTime.Before(time.Now()) {
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
if order.ReSignature == 1 {
|
||||
res.Signature = true
|
||||
contract := ContractUrl
|
||||
expirationDate := expirationTime.Format("2006-01-02")
|
||||
signContract, err := logic.SignContractV2(userInfo.SubNum, contract, 0, expirationDate, userInfo.Name, userInfo.IdNumber, userInfo.PlaceOfResidence)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res.SignatureUrl = signContract
|
||||
}
|
||||
|
||||
service.Success(c, res)
|
||||
}
|
||||
func RestartSignature(c *gin.Context) {
|
||||
userInfo := login.GetUserInfoFromC(c)
|
||||
|
||||
req := bundle.OrderRecordsDetailRequest{
|
||||
CustomerID: strconv.FormatUint(userInfo.ID, 10),
|
||||
}
|
||||
records, err := service.BundleProvider.OrderRecordsDetail(c, &req)
|
||||
if err != nil {
|
||||
service.Error(c, errors.New("获取订单信息失败"))
|
||||
return
|
||||
}
|
||||
// 优化空值判断链
|
||||
if records == nil || records.OrderRecord == nil {
|
||||
service.Error(c, errors.New("获取订单信息失败"))
|
||||
return
|
||||
}
|
||||
|
||||
order := records.OrderRecord
|
||||
expirationTime, err := time.Parse("2006-01-02 15:04:05", order.ExpirationTime)
|
||||
if err != nil {
|
||||
service.Error(c, errors.New("获取订单过期日期错误"))
|
||||
return
|
||||
}
|
||||
|
||||
if expirationTime.Before(time.Now()) {
|
||||
service.Error(c, errors.New("订单已过期"))
|
||||
return
|
||||
}
|
||||
expirationDate := expirationTime.Format("2006-01-02")
|
||||
|
||||
if order.ReSignature == 2 {
|
||||
service.Error(c, errors.New("订单无需重新签署"))
|
||||
return
|
||||
}
|
||||
// 获取最后一次合同编号
|
||||
lastContractNo, err := logic.GetLastContractNo()
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
contract := ContractUrl
|
||||
signContract, err := logic.SignContractV2(userInfo.SubNum, contract, 0, expirationDate, userInfo.Name, userInfo.IdNumber, userInfo.PlaceOfResidence)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.BundleProvider.ReSignTheContract(c, &bundle.ReSignTheContractRequest{
|
||||
OrderNo: records.OrderRecord.OrderNo,
|
||||
ContractNo: lastContractNo,
|
||||
SignContract: signContract,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
func UpdateBundleOrderStatusPaid(c *gin.Context) {
|
||||
var req bundle.OrderRecord
|
||||
|
||||
@ -390,7 +520,6 @@ func OrderRecordsListV2(c *gin.Context) {
|
||||
for id := range userIdSet {
|
||||
userIds = append(userIds, id)
|
||||
}
|
||||
|
||||
userListResp, err := service.AccountFieeProvider.UserList(context.Background(), &accountFiee.UserListRequest{
|
||||
Ids: userIds,
|
||||
Domain: "app",
|
||||
@ -412,6 +541,10 @@ func OrderRecordsListV2(c *gin.Context) {
|
||||
item.CustomerName = u.Name
|
||||
item.TelNum = u.TelNum
|
||||
item.SubNum = u.SubNum
|
||||
if item.InviterId != 0 {
|
||||
item.InviterCode = u.InviterCode
|
||||
item.InviterName = u.InviterName
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -494,6 +627,10 @@ func OrderRecordsListDownload(c *gin.Context) {
|
||||
item.CustomerName = u.Name
|
||||
item.TelNum = u.TelNum
|
||||
item.SubNum = u.SubNum
|
||||
if item.InviterId != 0 {
|
||||
item.InviterCode = u.InviterCode
|
||||
item.InviterName = u.InviterName
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -518,7 +655,7 @@ func exportExcel(orderList []*bundle.OrderBundleRecordInfo) (*excelize.File, err
|
||||
|
||||
headers := []string{
|
||||
"套餐订单号", "套餐类型", "套餐付款状态", "艺人手机号", "用户编号", "艺人", "套餐订单创建时间", "套餐支付时间", "套餐金额",
|
||||
"增值服务订单号", "增值税服务金额", "支付金额", "币种", "手续费", "增值订单创建时间", "增值付款状态",
|
||||
"增值服务订单号", "增值税服务金额", "支付金额", "币种", "手续费", "增值订单创建时间", "增值付款状态", "邀请码", "邀请码所属人",
|
||||
}
|
||||
for i, h := range headers {
|
||||
cell := fmt.Sprintf("%s%d", string(rune('A'+i)), 1)
|
||||
@ -552,6 +689,8 @@ func exportExcel(orderList []*bundle.OrderBundleRecordInfo) (*excelize.File, err
|
||||
f.SetCellValue(sheetName, fmt.Sprintf("G%d", rowIndex), bundleInfo.BundleCreateAt)
|
||||
f.SetCellValue(sheetName, fmt.Sprintf("H%d", rowIndex), bundleInfo.PayTime)
|
||||
f.SetCellValue(sheetName, fmt.Sprintf("I%d", rowIndex), bundleInfo.Amount)
|
||||
f.SetCellValue(sheetName, fmt.Sprintf("Q%d", rowIndex), bundleInfo.InviterCode)
|
||||
f.SetCellValue(sheetName, fmt.Sprintf("R%d", rowIndex), bundleInfo.InviterName)
|
||||
|
||||
if addCount > 0 {
|
||||
for i, add := range bundleInfo.AddBundleInfo {
|
||||
|
||||
@ -99,13 +99,15 @@ const (
|
||||
BundleUnBindingAddService = "套餐未绑定增值服务"
|
||||
)
|
||||
|
||||
//发布
|
||||
// 发布
|
||||
const (
|
||||
UpdateWorkStatusFailed = "更新作品状态失败"
|
||||
GetWorkDetailFailed = "获取作品详情失败"
|
||||
)
|
||||
|
||||
//余量
|
||||
//用户套餐状态
|
||||
|
||||
// 余量
|
||||
const (
|
||||
BundleExtendFailed = "套餐扩展失败"
|
||||
BundleExtendRecordsListFailed = "套餐扩展记录列表查询失败"
|
||||
@ -122,12 +124,13 @@ const (
|
||||
InsufficientBalance = "余量不足"
|
||||
)
|
||||
|
||||
//用户套餐状态
|
||||
const (
|
||||
BundleExpired = 1
|
||||
BundleNotExpired = 0
|
||||
BundleExpired = 1 //已过期
|
||||
BundleNotExpired = 0 //未过期
|
||||
)
|
||||
|
||||
//数据指标
|
||||
// 数据指标
|
||||
const (
|
||||
MetricsBusinessFailed = "业务概览查询失败"
|
||||
MetricsOperatingFailed = "运营数据查询失败"
|
||||
@ -138,7 +141,7 @@ const (
|
||||
BalanceMetricsExportFailed = "服务使用明细数据导出失败"
|
||||
)
|
||||
|
||||
//素材库
|
||||
// 素材库
|
||||
const (
|
||||
FileListFailed = "素材库列表查询失败"
|
||||
FileUsageFailed = "素材库使用情况查询失败"
|
||||
@ -156,7 +159,7 @@ const (
|
||||
ERROR_OPEN_FILE = "打开文件错误"
|
||||
)
|
||||
|
||||
//官网
|
||||
// 官网
|
||||
const (
|
||||
CreateSecFilingFailed = "创建官方信息失败"
|
||||
UpdateSecFilingFailed = "更新官方信息失败"
|
||||
|
||||
180
pkg/service/bundle/healthCheck.go
Normal file
180
pkg/service/bundle/healthCheck.go
Normal file
@ -0,0 +1,180 @@
|
||||
package bundle
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fonchain-fiee/api/bundle"
|
||||
"fonchain-fiee/api/cast"
|
||||
"fonchain-fiee/api/files"
|
||||
"fonchain-fiee/api/governance"
|
||||
"fonchain-fiee/api/order"
|
||||
"fonchain-fiee/api/payment"
|
||||
"fonchain-fiee/pkg/cache"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// HealthCheck 健康检测接口
|
||||
func HealthCheck(c *gin.Context) {
|
||||
healthStatus := gin.H{
|
||||
"status": "ok",
|
||||
"timestamp": time.Now().Unix(),
|
||||
"checks": make(map[string]interface{}),
|
||||
}
|
||||
|
||||
// 检查 Redis 连接
|
||||
redisStatus := "ok"
|
||||
redisErr := ""
|
||||
if cache.RedisClient != nil {
|
||||
_, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
||||
defer cancel()
|
||||
_, err := cache.RedisClient.Ping().Result()
|
||||
if err != nil {
|
||||
redisStatus = "failed"
|
||||
redisErr = err.Error()
|
||||
}
|
||||
} else {
|
||||
redisStatus = "failed"
|
||||
redisErr = "Redis client is nil"
|
||||
}
|
||||
healthStatus["checks"].(map[string]interface{})["redis"] = gin.H{
|
||||
"status": redisStatus,
|
||||
"error": redisErr,
|
||||
}
|
||||
|
||||
// 检查微服务连接(调用一个简单的服务方法)
|
||||
serviceStatus := "ok"
|
||||
serviceErr := ""
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
|
||||
// 调用 BundleProvider 的简单方法进行健康检测
|
||||
_, err := service.BundleProvider.GetBundleBalanceByUserId(ctx, &bundle.GetBundleBalanceByUserIdReq{
|
||||
UserId: 0, // 使用一个不存在的用户ID,只检测服务连通性
|
||||
})
|
||||
if err != nil {
|
||||
// 检查是否是超时或连接错误
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
serviceStatus = "Bundle Service timeout"
|
||||
serviceErr = "Service timeout"
|
||||
} else {
|
||||
// 其他错误(如业务错误)认为服务是可用的
|
||||
serviceStatus = "ok"
|
||||
serviceErr = ""
|
||||
}
|
||||
}
|
||||
healthStatus["checks"].(map[string]interface{})["bundleService"] = gin.H{
|
||||
"status": serviceStatus,
|
||||
"error": serviceErr,
|
||||
}
|
||||
//调用 OrderProvider 的简单方法进行健康检测
|
||||
_, err = service.OrderProvider.GetOrder(ctx, &order.CommonRequest{
|
||||
ID: 0,
|
||||
Domain: "",
|
||||
SeriesUid: "", // 使用一个不存在的订单ID,只检测服务连通性
|
||||
})
|
||||
if err != nil {
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
serviceStatus = "Order Service timeout"
|
||||
serviceErr = "Service timeout"
|
||||
} else {
|
||||
// 其他错误(如业务错误)认为服务是可用的
|
||||
serviceStatus = "ok"
|
||||
serviceErr = ""
|
||||
}
|
||||
}
|
||||
healthStatus["checks"].(map[string]interface{})["orderService"] = gin.H{
|
||||
"status": serviceStatus,
|
||||
"error": serviceErr,
|
||||
}
|
||||
//调用 FilesProvider 的简单方法进行健康检测
|
||||
_, err = service.FilesProvider.List(ctx, &files.FileListReq{
|
||||
Path: "/",
|
||||
UserSpacePath: "/fiee",
|
||||
Page: 1,
|
||||
PageSize: 50,
|
||||
})
|
||||
if err != nil {
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
serviceStatus = "Filesbrowser Service timeout"
|
||||
serviceErr = "Service timeout"
|
||||
} else {
|
||||
// 其他错误(如业务错误)认为服务是可用的
|
||||
serviceStatus = "ok"
|
||||
serviceErr = ""
|
||||
}
|
||||
}
|
||||
healthStatus["checks"].(map[string]interface{})["filesbrowserService"] = gin.H{
|
||||
"status": serviceStatus,
|
||||
"error": serviceErr,
|
||||
}
|
||||
//调用 PaymentProvider 的简单方法进行健康检测
|
||||
_, err = service.PaymentProvider.QueryPayByOutTradeNo(ctx, &payment.PayQueryRequest{
|
||||
PayType: "2",
|
||||
OutTradeNo: "1234567890",
|
||||
})
|
||||
if err != nil {
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
serviceStatus = "Payment Service timeout"
|
||||
serviceErr = "Service timeout"
|
||||
} else {
|
||||
// 其他错误(如业务错误)认为服务是可用的
|
||||
serviceStatus = "ok"
|
||||
serviceErr = ""
|
||||
}
|
||||
}
|
||||
healthStatus["checks"].(map[string]interface{})["paymentService"] = gin.H{
|
||||
"status": serviceStatus,
|
||||
"error": serviceErr,
|
||||
}
|
||||
|
||||
//调用 CastProvider 的简单方法进行健康检测
|
||||
_, err = service.CastProvider.WorkList(ctx, &cast.WorkListReq{
|
||||
Page: 1,
|
||||
PageSize: 10,
|
||||
})
|
||||
if err != nil {
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
serviceStatus = "Cast Service timeout"
|
||||
serviceErr = "Service timeout"
|
||||
} else {
|
||||
// 其他错误(如业务错误)认为服务是可用的
|
||||
serviceStatus = "ok"
|
||||
serviceErr = ""
|
||||
}
|
||||
}
|
||||
healthStatus["checks"].(map[string]interface{})["castService"] = gin.H{
|
||||
"status": serviceStatus,
|
||||
"error": serviceErr,
|
||||
}
|
||||
//调用 GovernanceProvider 的简单方法进行健康检测
|
||||
_, err = service.GovernanceProvider.List(ctx, &governance.ListReq{
|
||||
Page: 1,
|
||||
PageSize: 10,
|
||||
})
|
||||
if err != nil {
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
serviceStatus = "Document Service timeout"
|
||||
serviceErr = "Service timeout"
|
||||
} else {
|
||||
// 其他错误(如业务错误)认为服务是可用的
|
||||
serviceStatus = "ok"
|
||||
serviceErr = ""
|
||||
}
|
||||
}
|
||||
healthStatus["checks"].(map[string]interface{})["documentService"] = gin.H{
|
||||
"status": serviceStatus,
|
||||
"error": serviceErr,
|
||||
}
|
||||
|
||||
// 如果所有检查都通过,返回 200,否则返回 503
|
||||
httpStatus := http.StatusOK
|
||||
if redisStatus != "ok" || serviceStatus != "ok" {
|
||||
httpStatus = http.StatusServiceUnavailable
|
||||
healthStatus["status"] = "degraded"
|
||||
}
|
||||
|
||||
c.JSON(httpStatus, healthStatus)
|
||||
}
|
||||
@ -63,6 +63,24 @@ func CheckUserOrder(userID uint64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 校验用户是否首次购买
|
||||
func CheckUserFirstOrder(userID uint64) bool {
|
||||
req := bundle.OrderRecordsDetailRequest{
|
||||
CustomerID: strconv.FormatUint(userID, 10),
|
||||
Status: 2,
|
||||
}
|
||||
records, _ := service.BundleProvider.OrderRecordsDetail(context.Background(), &req)
|
||||
// 用户没有任何订单记录
|
||||
if records.OrderRecord == nil {
|
||||
return true
|
||||
}
|
||||
// 检查订单是否属于该用户
|
||||
if records.OrderRecord.CustomerID != strconv.FormatUint(userID, 10) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 获取最后一次合同编号
|
||||
func GetLastContractNo() (string, error) {
|
||||
records, err := service.BundleProvider.OrderRecordsList(context.Background(), &bundle.OrderRecordsRequest{
|
||||
@ -94,6 +112,7 @@ func BuildServiceRecords(req *bundle.OrderCreateRecord, bundleDetail *bundle.Bun
|
||||
expirationDay string
|
||||
addUidService = make(map[string]bool)
|
||||
bundleUidService = make(map[string]bool)
|
||||
foundExpiration = false
|
||||
)
|
||||
|
||||
// 分类权益
|
||||
@ -149,12 +168,15 @@ func BuildServiceRecords(req *bundle.OrderCreateRecord, bundleDetail *bundle.Bun
|
||||
addRecords = append(addRecords, buildAddRecord(addService, uid, 0, num, 1))
|
||||
|
||||
// 计算到期时间
|
||||
if addService.ServiceType == 5 {
|
||||
if !foundExpiration && addService.ServiceType == 5 {
|
||||
expirationDay = calculateExpirationDate(time.Now(), num, addService.Unit)
|
||||
} else {
|
||||
expirationDay = time.Now().AddDate(0, 0, 7).Format("2006-01-02")
|
||||
foundExpiration = true
|
||||
}
|
||||
}
|
||||
// 如果没有找到服务类型为5的,使用默认值
|
||||
if !foundExpiration {
|
||||
expirationDay = time.Now().AddDate(0, 0, 7).Format("2006-01-02")
|
||||
}
|
||||
|
||||
return addRecords, addTotalPrice, expirationDay, nil
|
||||
}
|
||||
|
||||
@ -8,14 +8,13 @@ import (
|
||||
"fonchain-fiee/pkg/service/upload"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/signintech/gopdf"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func SignContractV2(customerNum, contract string, price float32, expirationDate string) (outputUrl string, err error) {
|
||||
func SignContractV2(customerNum, contract string, price float32, expirationDate string, nickName string, idCard string, address string) (outputUrl string, err error) {
|
||||
filePath := model.MediaPath + customerNum + time.Now().Format("20060102150405") + ".pdf"
|
||||
downloadFileErr := DownloadFile(filePath, contract)
|
||||
if downloadFileErr != nil {
|
||||
@ -32,7 +31,7 @@ func SignContractV2(customerNum, contract string, price float32, expirationDate
|
||||
return outputUrl, errors.New(common.ErrorInsertSignature)
|
||||
}*/
|
||||
|
||||
signErr := InsertSignatureV2(filePath, signFile, price, expirationDate)
|
||||
signErr := InsertSignatureV2(filePath, signFile, price, expirationDate, nickName, idCard, address)
|
||||
if signErr != nil {
|
||||
zap.L().Error("insert signature error: ", zap.Error(signErr))
|
||||
return outputUrl, errors.New(common.ErrorInsertSignature)
|
||||
@ -47,7 +46,7 @@ func SignContractV2(customerNum, contract string, price float32, expirationDate
|
||||
return outputUrl, nil
|
||||
}
|
||||
|
||||
func InsertSignatureV2(templatePath, outputPath string, price float32, expirationDate string) error {
|
||||
func InsertSignatureV2(templatePath, outputPath string, price float32, expirationDate string, nickName string, idCard string, address string) error {
|
||||
fmt.Println("================================templatePath:", templatePath)
|
||||
fmt.Println("================================outputPath:", outputPath)
|
||||
fmt.Println("================================price:", price)
|
||||
@ -65,9 +64,9 @@ func InsertSignatureV2(templatePath, outputPath string, price float32, expiratio
|
||||
totalPages := pdf.GetNumberOfPages()
|
||||
fmt.Printf("模板文件的总页数: %d\n", totalPages)
|
||||
|
||||
pricePage := 3
|
||||
|
||||
limitTimePage := 4
|
||||
onePage := 1
|
||||
sixPage := 6
|
||||
tenPage := 10
|
||||
|
||||
tffErr := pdf.AddTTFFont("simfang", "./data/simfang.ttf")
|
||||
if tffErr != nil {
|
||||
@ -82,42 +81,54 @@ func InsertSignatureV2(templatePath, outputPath string, price float32, expiratio
|
||||
log.Fatalf("设置字体失败: %v", err)
|
||||
}
|
||||
|
||||
// 填 金额
|
||||
pdf.SetPage(pricePage)
|
||||
pdf.SetX(383)
|
||||
pdf.SetY(351)
|
||||
pdf.Cell(nil, strconv.FormatFloat(float64(price), 'f', 2, 64))
|
||||
|
||||
pdf.SetX(345)
|
||||
pdf.SetY(383)
|
||||
pdf.Cell(nil, strconv.FormatFloat(float64(price), 'f', 2, 64))
|
||||
// 写 有效期
|
||||
pdf.SetPage(limitTimePage)
|
||||
|
||||
// 英文格式的时间
|
||||
parsedTime, err := time.Parse("2006-01-02", expirationDate)
|
||||
if err != nil {
|
||||
panic("日期格式错误!")
|
||||
fmt.Println("时间解析错误: %v", err)
|
||||
fmt.Println(expirationDate)
|
||||
return errors.New("时间解析错误")
|
||||
}
|
||||
year := parsedTime.Format("2006") // "2006"
|
||||
month := parsedTime.Format("01") // "01"
|
||||
day := parsedTime.Format("02") // "02"
|
||||
pdf.SetX(160)
|
||||
pdf.SetY(387)
|
||||
pdf.Cell(nil, expirationDate)
|
||||
|
||||
pdf.SetX(330)
|
||||
pdf.SetY(403)
|
||||
// 填 第一页 日期-姓名-身份证号
|
||||
pdf.SetPage(onePage)
|
||||
pdf.SetX(232)
|
||||
pdf.SetY(152)
|
||||
pdf.Cell(nil, year)
|
||||
|
||||
pdf.SetX(396)
|
||||
pdf.SetY(403)
|
||||
pdf.SetX(279)
|
||||
pdf.SetY(152)
|
||||
pdf.Cell(nil, month)
|
||||
|
||||
pdf.SetX(443)
|
||||
pdf.SetY(403)
|
||||
pdf.SetX(313)
|
||||
pdf.SetY(152)
|
||||
pdf.Cell(nil, day)
|
||||
pdf.SetX(370)
|
||||
pdf.SetY(152)
|
||||
pdf.Cell(nil, nickName)
|
||||
pdf.SetX(175)
|
||||
pdf.SetY(170)
|
||||
pdf.Cell(nil, idCard)
|
||||
//pdf.Cell(nil, strconv.FormatFloat(float64(price), 'f', 2, 64))
|
||||
|
||||
// 写 第六页 日期
|
||||
pdf.SetPage(sixPage)
|
||||
pdf.SetX(343)
|
||||
pdf.SetY(138)
|
||||
pdf.Cell(nil, year)
|
||||
pdf.SetX(401)
|
||||
pdf.SetY(138)
|
||||
pdf.Cell(nil, month)
|
||||
pdf.SetX(447)
|
||||
pdf.SetY(138)
|
||||
pdf.Cell(nil, day)
|
||||
// 写 第十页 地址 姓名 邮件
|
||||
pdf.SetPage(tenPage)
|
||||
pdf.SetX(195)
|
||||
pdf.SetY(253)
|
||||
pdf.Cell(nil, address)
|
||||
pdf.SetX(215)
|
||||
pdf.SetY(270)
|
||||
pdf.Cell(nil, nickName)
|
||||
// 生成新的 PDF
|
||||
if err = pdf.WritePdf(outputPath); err != nil {
|
||||
//zap.L().Error("WritePdf err", zap.Error(err))
|
||||
|
||||
@ -253,14 +253,16 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
reportUuid := ""
|
||||
accountUuid := ""
|
||||
durationUuid := ""
|
||||
bundleVideoUuid := ""
|
||||
if config.AppConfig.System.AppMode == "prod" {
|
||||
BundleName = "全球尊享版"
|
||||
BundleUuid = "ac4c99c2951c2fcdbf417928d321554d"
|
||||
videoUuid = "a29a1fa2862b2cdda1377b19066c8eb7"
|
||||
textAndImagesUuid = "dfba176a40ae2d23aa4ef9b30b646bc8"
|
||||
reportUuid = "1727557a85c92957a3e3332d18c713aa"
|
||||
accountUuid = "e1cc219e4f682b3d8cb85929e540a0de"
|
||||
durationUuid = "f002449ac57a2e71b0673da938c0354e"
|
||||
videoUuid = "355aae784d77280197c92ff56733459d" // 增值视频
|
||||
textAndImagesUuid = "41a7753d210d22f8972dc273ff1360c4" // 套餐图文
|
||||
reportUuid = "069497de55852c24a3b0f702c1250900" // 套餐数据
|
||||
accountUuid = "1e04078d2a8824d18be1c281bc3167a8" // 套餐账号
|
||||
durationUuid = "e3ad8f15aa022b12afe47170c9051db9" // 套餐时长
|
||||
bundleVideoUuid = "fdbef018707e2a8ebc82a22e257abaff" // 套餐视频
|
||||
} else {
|
||||
BundleName = "测试导入全球尊享版"
|
||||
BundleUuid = "5e84f86cb7f92a4ab785271e4a383aa5"
|
||||
@ -275,6 +277,7 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
var TotalPrice float32
|
||||
var expirationDay string
|
||||
numMap := make(map[string]int32)
|
||||
numMap["1500.00"] = 0
|
||||
numMap["3150.00"] = 3
|
||||
numMap["4200.00"] = 5
|
||||
numMap["5600.00"] = 8
|
||||
@ -287,6 +290,7 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
numMap["18300.00"] = 40
|
||||
numMap["26700.00"] = 60
|
||||
incrMap := make(map[string]float32)
|
||||
incrMap["1500.00"] = 0
|
||||
incrMap["3150.00"] = 1650
|
||||
incrMap["4200.00"] = 2700
|
||||
incrMap["5600.00"] = 4100
|
||||
@ -305,7 +309,21 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
f64, err := strconv.ParseFloat(unfinishInfo.OrderPayAmount, 32)
|
||||
TotalPrice = float32(f64)
|
||||
addRecords = append(addRecords,
|
||||
&bundle.OrderCreateAddRecord{
|
||||
&bundle.OrderCreateAddRecord{ // 套餐视频
|
||||
ServiceType: 1,
|
||||
ValueUid: bundleVideoUuid,
|
||||
CurrencyType: 2, //美元
|
||||
Amount: 0, //增值服务金额
|
||||
Num: 24,
|
||||
Unit: "个",
|
||||
Source: 1,
|
||||
PaymentStatus: 1,
|
||||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||||
EquityType: 1,
|
||||
QuotaType: 2,
|
||||
QuotaValue: 2,
|
||||
},
|
||||
&bundle.OrderCreateAddRecord{ //视频增值
|
||||
ServiceType: 1,
|
||||
ValueUid: videoUuid,
|
||||
CurrencyType: 2, //美元
|
||||
@ -315,6 +333,8 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
Source: 1,
|
||||
PaymentStatus: 1,
|
||||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||||
EquityType: 2,
|
||||
QuotaType: 1,
|
||||
}, &bundle.OrderCreateAddRecord{ //图文
|
||||
ServiceType: 2,
|
||||
ValueUid: textAndImagesUuid,
|
||||
@ -325,6 +345,9 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
Source: 1,
|
||||
PaymentStatus: 1,
|
||||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||||
EquityType: 1,
|
||||
QuotaType: 2,
|
||||
QuotaValue: 10,
|
||||
}, &bundle.OrderCreateAddRecord{ //数据报表
|
||||
ServiceType: 3,
|
||||
ValueUid: reportUuid,
|
||||
@ -335,32 +358,40 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
Source: 1,
|
||||
PaymentStatus: 1,
|
||||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||||
EquityType: 1,
|
||||
QuotaType: 2,
|
||||
QuotaValue: 1,
|
||||
}, &bundle.OrderCreateAddRecord{ //账号数
|
||||
ServiceType: 4,
|
||||
ValueUid: accountUuid,
|
||||
CurrencyType: 2, //美元
|
||||
Amount: 0, //增值服务金额
|
||||
Num: 3,
|
||||
Num: 5,
|
||||
Unit: "个",
|
||||
Source: 1,
|
||||
PaymentStatus: 1,
|
||||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||||
EquityType: 1,
|
||||
QuotaType: 1,
|
||||
}, &bundle.OrderCreateAddRecord{ //可用时长
|
||||
ServiceType: 5,
|
||||
ValueUid: durationUuid,
|
||||
CurrencyType: 2, //美元
|
||||
Amount: 0, //增值服务金额
|
||||
Num: 10,
|
||||
Num: 1,
|
||||
Unit: "年",
|
||||
Source: 1,
|
||||
PaymentStatus: 1,
|
||||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||||
EquityType: 1,
|
||||
QuotaType: 1,
|
||||
},
|
||||
)
|
||||
// 当前 未将 签名 写入合同中 todo 金额和有效时间待修改
|
||||
contract := "https://e-cdn.fontree.cn/fonchain-main/prod/file/saas/contract/template-25032801.pdf"
|
||||
contract := ContractUrl
|
||||
expirationDay = t.AddDate(1, 0, 0).Format("2006-01-02")
|
||||
signContract, signContractErr := logic.SignContractV2(userReq.UserNum, contract, TotalPrice, expirationDay)
|
||||
|
||||
signContract, signContractErr := logic.SignContractV2(userReq.UserNum, contract, TotalPrice, expirationDay, unfinishInfo.UserName, unfinishInfo.CardNum, unfinishInfo.PlaceOfResidence)
|
||||
if signContractErr != nil {
|
||||
service.Error(c, signContractErr)
|
||||
return
|
||||
@ -387,6 +418,7 @@ func AutoCreateUserAndOrder(c *gin.Context) {
|
||||
orderReq.OrderNo = unfinishInfo.OrderNo
|
||||
//expirationTime := t.AddDate(10, 0, 0).Format("2006-01-02 15:04:05")
|
||||
//orderReq.ExpirationTime = expirationTime
|
||||
orderReq.PlatformIds = []uint32{1, 4, 5}
|
||||
_, err = service.BundleProvider.CreateOrderRecord(context.Background(), &orderReq)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -61,7 +61,7 @@ func UploadMediaByURL(ctx context.Context, fileURL, fileName, description string
|
||||
if fileURL == "" {
|
||||
return nil, errors.New("文件URL不能为空")
|
||||
}
|
||||
ok, err := VerifyMediaURL(ctx, fileURL)
|
||||
/*ok, err := VerifyMediaURL(ctx, fileURL) // 检测文件是否OK, 关闭遇到了检测OK 发布不OK的 不相信API了
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -73,11 +73,11 @@ func UploadMediaByURL(ctx context.Context, fileURL, fileName, description string
|
||||
Description: "",
|
||||
IsAs: false,
|
||||
}, nil
|
||||
}
|
||||
}*/
|
||||
// 下载文件到临时目录
|
||||
tempFile, fileSize, err := downloadFile(ctx, fileURL)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("下载文件失败: %v", err)
|
||||
return nil, fmt.Errorf("下载文件失败")
|
||||
}
|
||||
defer os.Remove(tempFile) // 清理临时文件
|
||||
|
||||
@ -87,14 +87,34 @@ func UploadMediaByURL(ctx context.Context, fileURL, fileName, description string
|
||||
if fileName == "" {
|
||||
fileName = filepath.Base(fileURL)
|
||||
}
|
||||
|
||||
var result *UploadMediaResponse
|
||||
// 根据文件大小选择上传方式
|
||||
if fileSize < maxSmallFileSize {
|
||||
zap.L().Info("使用小文件上传方式", zap.Int64("fileSize", fileSize))
|
||||
return uploadSmallMedia(ctx, tempFile, apiKey, fileName, description)
|
||||
}
|
||||
result, err = uploadSmallMedia(ctx, tempFile, apiKey, fileName, description)
|
||||
} else {
|
||||
zap.L().Info("使用大文件上传方式", zap.Int64("fileSize", fileSize))
|
||||
return uploadLargeMedia(ctx, tempFile, apiKey, fileName, description)
|
||||
result, err = uploadLargeMedia(ctx, tempFile, apiKey, fileName, description)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 上传后等待并验证 URL 是否可访问
|
||||
maxRetries := 5
|
||||
var ok bool
|
||||
for i := 0; i < maxRetries; i++ {
|
||||
time.Sleep(2 * time.Second)
|
||||
ok, err = VerifyMediaURL(ctx, result.URL)
|
||||
if err == nil && ok {
|
||||
zap.L().Info("媒体URL验证成功", zap.String("url", result.URL), zap.Int("retry", i))
|
||||
return result, nil
|
||||
}
|
||||
zap.L().Warn("媒体URL验证失败,重试中",
|
||||
zap.String("url", result.URL),
|
||||
zap.Int("retry", i+1),
|
||||
zap.Int("maxRetries", maxRetries))
|
||||
}
|
||||
return nil, fmt.Errorf("媒体URL验证失败")
|
||||
}
|
||||
|
||||
// downloadFile 下载文件到临时目录
|
||||
@ -112,7 +132,7 @@ func downloadFile(ctx context.Context, fileURL string) (string, int64, error) {
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return "", 0, fmt.Errorf("下载文件失败,HTTP状态码: %d", resp.StatusCode)
|
||||
return "", 0, fmt.Errorf("下载文件失败")
|
||||
}
|
||||
|
||||
// 创建临时文件
|
||||
@ -136,7 +156,7 @@ func downloadFile(ctx context.Context, fileURL string) (string, int64, error) {
|
||||
func uploadSmallMedia(ctx context.Context, filePath, apiKey, fileName, description string) (*UploadMediaResponse, error) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("打开文件失败: %v", err)
|
||||
return nil, fmt.Errorf("打开文件失败")
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
@ -178,23 +198,23 @@ func uploadSmallMedia(ctx context.Context, filePath, apiKey, fileName, descripti
|
||||
client := &http.Client{Timeout: 10 * time.Minute}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("请求失败: %v", err)
|
||||
return nil, fmt.Errorf("请求失败")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
respBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("读取响应失败: %v", err)
|
||||
return nil, fmt.Errorf("读取响应失败")
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
zap.L().Error("上传小文件失败", zap.Int("statusCode", resp.StatusCode), zap.String("response", string(respBody)))
|
||||
return nil, fmt.Errorf("上传失败: HTTP %d, %s", resp.StatusCode, string(respBody))
|
||||
return nil, fmt.Errorf("上传失败")
|
||||
}
|
||||
|
||||
var result UploadMediaResponse
|
||||
if err := json.Unmarshal(respBody, &result); err != nil {
|
||||
return nil, fmt.Errorf("解析响应失败: %v", err)
|
||||
return nil, fmt.Errorf("解析响应失败")
|
||||
}
|
||||
|
||||
zap.L().Info("小文件上传成功", zap.Any("response", result))
|
||||
@ -212,7 +232,7 @@ func uploadLargeMedia(ctx context.Context, filePath, apiKey, fileName, descripti
|
||||
// Step 1: 获取上传URL
|
||||
uploadURLResp, err := getUploadURL(ctx, apiKey, fileName, ext)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取上传URL失败: %v", err)
|
||||
return nil, fmt.Errorf("获取上传URL失败")
|
||||
}
|
||||
|
||||
zap.L().Info("获取上传URL成功", zap.Any("uploadURLResp", uploadURLResp))
|
||||
@ -220,14 +240,14 @@ func uploadLargeMedia(ctx context.Context, filePath, apiKey, fileName, descripti
|
||||
// Step 2: 上传文件到presigned URL
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("打开文件失败: %v", err)
|
||||
return nil, fmt.Errorf("打开文件失败")
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 获取文件大小
|
||||
fileInfo, err := file.Stat()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取文件信息失败: %v", err)
|
||||
return nil, fmt.Errorf("获取文件信息失败")
|
||||
}
|
||||
fileSize := fileInfo.Size()
|
||||
|
||||
@ -242,14 +262,14 @@ func uploadLargeMedia(ctx context.Context, filePath, apiKey, fileName, descripti
|
||||
client := &http.Client{Timeout: 30 * time.Minute}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("上传文件失败: %v", err)
|
||||
return nil, fmt.Errorf("上传文件失败")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
respBody, _ := io.ReadAll(resp.Body)
|
||||
zap.L().Error("上传大文件失败", zap.Int("statusCode", resp.StatusCode), zap.String("response", string(respBody)))
|
||||
return nil, fmt.Errorf("上传失败: HTTP %d", resp.StatusCode)
|
||||
return nil, fmt.Errorf("上传失败")
|
||||
}
|
||||
|
||||
zap.L().Info("大文件上传成功")
|
||||
@ -290,12 +310,12 @@ func getUploadURL(ctx context.Context, apiKey, fileName, contentType string) (*U
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
zap.L().Error("获取上传URL失败", zap.Int("statusCode", resp.StatusCode), zap.String("response", string(respBody)))
|
||||
return nil, fmt.Errorf("获取上传URL失败: HTTP %d, %s", resp.StatusCode, string(respBody))
|
||||
return nil, fmt.Errorf("获取上传URL失败了")
|
||||
}
|
||||
|
||||
var result UploadURLResponse
|
||||
if err := json.Unmarshal(respBody, &result); err != nil {
|
||||
return nil, fmt.Errorf("解析响应失败: %v", err)
|
||||
return nil, fmt.Errorf("解析响应失败")
|
||||
}
|
||||
|
||||
return &result, nil
|
||||
@ -333,19 +353,23 @@ func SendMessage(ctx *gin.Context) {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
mediaUserInfo, err := GetMediaInfo(req.MediaUserID)
|
||||
if req.RecipientId == "" {
|
||||
service.Error(ctx, errors.New("请选择接收者"))
|
||||
return
|
||||
}
|
||||
mediaUserInfo, err := GetMediaInfo(req.MediaAccountUuid)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
var platformName = modelCast.PlatformNameKv[mediaUserInfo.PlatformID]
|
||||
var platformName = modelCast.PlatformNameKv[req.PlatformID]
|
||||
if platformName != "facebook" && platformName != "instagram" && platformName != "twitter" {
|
||||
service.Error(ctx, errors.New("不支持的媒体"))
|
||||
return
|
||||
}
|
||||
sendResp, err := service.AyrshareProvider.SendMessage(context.Background(), &aryshare.SendMessageRequest{
|
||||
Platform: platformName,
|
||||
RecipientId: mediaUserInfo.AsInfo.AsID,
|
||||
RecipientId: req.RecipientId,
|
||||
Message: req.Message,
|
||||
MediaUrls: []string{},
|
||||
ProfileKey: mediaUserInfo.AsInfo.ProfileKey,
|
||||
@ -370,7 +394,7 @@ func GetMessage(ctx *gin.Context) {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
mediaUserInfo, err := GetMediaInfo(req.MediaUserID)
|
||||
mediaUserInfo, err := GetMediaInfo(req.MediaAccountUuid)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
@ -426,15 +450,16 @@ func PostComment(ctx *gin.Context) {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
commentResp, err := service.AyrshareProvider.PostComment(context.Background(), &aryshare.PostCommentRequest{
|
||||
commentReq := &aryshare.PostCommentRequest{
|
||||
Id: req.PublishMediaID,
|
||||
Comment: req.Comment,
|
||||
Platforms: []string{modelCast.PlatformNameKv[uint32(req.PlatformID)]},
|
||||
SearchPlatformId: true,
|
||||
SearchPlatformId: false,
|
||||
MediaUrls: nil,
|
||||
ProfileKey: artistInfo.ProfileKey,
|
||||
})
|
||||
}
|
||||
zap.L().Info("发布评论", zap.Any("commentReq", commentReq))
|
||||
commentResp, err := service.AyrshareProvider.PostComment(context.Background(), commentReq)
|
||||
if err != nil {
|
||||
zap.L().Error("发布评论异常", zap.Error(err), zap.Any("artistInfo", artistInfo))
|
||||
service.Error(ctx, errors.New("发布评论异常"))
|
||||
|
||||
40
pkg/service/cast/images.go
Normal file
40
pkg/service/cast/images.go
Normal file
@ -0,0 +1,40 @@
|
||||
package cast
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fonchain-fiee/api/cast"
|
||||
"fonchain-fiee/pkg/service"
|
||||
)
|
||||
|
||||
func CheckImage(workUuid string) error {
|
||||
detailResp, err := service.CastProvider.WorkDetail(context.Background(), &cast.WorkDetailReq{WorkUuid: workUuid})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if detailResp.CoverUrl == "" {
|
||||
return nil
|
||||
}
|
||||
if detailResp.WorkCategory == 1 {
|
||||
return nil
|
||||
}
|
||||
resourceResp, err := service.CastProvider.WorkResource(context.Background(), &cast.WorkResourceReq{WorkUuid: workUuid})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if detailResp.CoverUrl == resourceResp.OldCoverUrl {
|
||||
return nil
|
||||
}
|
||||
mediaUrls, err := ProcessImg([]string{detailResp.CoverUrl})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(mediaUrls) > 0 {
|
||||
_, _ = service.CastProvider.UpdateWorkResource(context.Background(), &cast.UpdateWorkResourceReq{
|
||||
Uuid: "",
|
||||
WorkUuid: detailResp.WorkUuid,
|
||||
OldCoverUrl: detailResp.CoverUrl,
|
||||
NewCoverUrl: mediaUrls[0],
|
||||
})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -44,24 +44,32 @@ func MediaUserList(ctx *gin.Context) {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
var statResp *bundle.ArtistUploadStatsResponse
|
||||
if req.NeedStats {
|
||||
var statResp *bundle.ArtistUploadStatsResponse
|
||||
zap.L().Info("MediaUserList 1")
|
||||
//取出艺人num
|
||||
var artistSubNums []string
|
||||
for _, v := range resp.Data {
|
||||
artistSubNums = append(artistSubNums, v.ArtistSubNum)
|
||||
}
|
||||
statResp, err = service.BundleProvider.GetArtistUploadStatsList(context.Background(), &bundle.TaskQueryRequest{
|
||||
Keyword: v.ArtistPhone,
|
||||
Keyword: "",
|
||||
Page: 0,
|
||||
PageSize: 0,
|
||||
SortBy: "",
|
||||
SortType: "",
|
||||
LastTaskAssignee: "",
|
||||
SubNums: nil,
|
||||
SubNums: artistSubNums,
|
||||
})
|
||||
zap.L().Info("MediaUserList 2")
|
||||
if err != nil {
|
||||
service.Error(ctx, errors.New("查询艺人数据错误"))
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
if statResp != nil && len(statResp.Items) > 0 {
|
||||
info := statResp.Items[0]
|
||||
for _, v := range resp.Data {
|
||||
for _, vv := range statResp.Items {
|
||||
if v.ArtistSubNum == vv.SubNum {
|
||||
info := vv
|
||||
// "pendingVideoCount": 10, // 待上传视频数 "uploadedVideoCount": 25, // 已上传视频数 "releasedVideoTotal": 35, // 已释放视频总数
|
||||
//"pendingPostCount": 14, // 待上传图文数 "uploadedPostCount": 21, // 已上传图文数 "releasedPostTotal": 35, // 已释放图文总数
|
||||
v.PendingVideoCount = info.PendingVideoCount
|
||||
@ -73,6 +81,8 @@ func MediaUserList(ctx *gin.Context) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
zap.L().Info("MediaUserList 3")
|
||||
go func() {
|
||||
for _, v := range resp.Data {
|
||||
_ = SyncAsAuth(v.ArtistUuid)
|
||||
@ -159,7 +169,7 @@ func UpdateMediaAccount(ctx *gin.Context) {
|
||||
}
|
||||
if userResp != nil && len(userResp.Data) > 0 {
|
||||
for _, v := range userResp.Data {
|
||||
if v.PlatformID == uint32(req.PlatformID) {
|
||||
if v.PlatformID == uint32(req.PlatformID) && v.Expired == 1 {
|
||||
service.Error(ctx, errors.New("账号已存在"))
|
||||
return
|
||||
}
|
||||
@ -248,6 +258,10 @@ func OAuthAccount(ctx *gin.Context) {
|
||||
service.Error(ctx, errors.New("未找到该账号"))
|
||||
return
|
||||
}
|
||||
if mediaResp.Data[0].Expired != 1 {
|
||||
service.Error(ctx, errors.New("账号已过期"))
|
||||
return
|
||||
}
|
||||
if err = SyncAsAuth(mediaResp.Data[0].ArtistUuid); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
@ -315,6 +329,7 @@ func OAuth2Callback(ctx *gin.Context) {
|
||||
service.Error(ctx, errors.New(e.GetMsg(e.InvalidParams)))
|
||||
return
|
||||
}
|
||||
req.State = state
|
||||
zap.L().Info("OAuth2Callback", zap.Any("req", req), zap.Any("code", code), zap.Any("state", state))
|
||||
_, err := service.CastProvider.OAuthCodeToToken(ctx, req)
|
||||
if err != nil {
|
||||
@ -360,6 +375,7 @@ func AsOAuth2Callback(ctx *gin.Context) {
|
||||
func SyncAsAuth(artistUuid string) error {
|
||||
resp, err := service.CastProvider.GetArtist(context.Background(), &cast.GetArtistReq{ArtistUuid: artistUuid})
|
||||
if err != nil {
|
||||
zap.L().Error("SyncAsAuth error", zap.Error(err))
|
||||
return errors.New("获取艺人信息错误")
|
||||
}
|
||||
if resp == nil || resp.ArtistInfo == nil || resp.ArtistInfo.ProfileKey == "" {
|
||||
@ -370,6 +386,7 @@ func SyncAsAuth(artistUuid string) error {
|
||||
InstagramDetails: true,
|
||||
})
|
||||
if err != nil {
|
||||
zap.L().Error("SyncAsAuth error", zap.Error(err))
|
||||
return errors.New("获取艺人绑定信息错误")
|
||||
}
|
||||
authReq := &cast.UpdateOAuthReq{Data: make([]*cast.UpdateOAuthReq_Info, 0)}
|
||||
@ -396,10 +413,14 @@ func SyncAsAuth(artistUuid string) error {
|
||||
if platformIDENUM == cast.PlatformIDENUM_UNKNOWN {
|
||||
continue
|
||||
}
|
||||
asID := v.Id
|
||||
if platformIDENUM == cast.PlatformIDENUM_BULESKY && asID == "" {
|
||||
asID = v.Username
|
||||
}
|
||||
authReq.Data = append(authReq.Data, &cast.UpdateOAuthReq_Info{
|
||||
ArtistUuid: artistUuid,
|
||||
PlatformID: platformIDENUM,
|
||||
AsID: v.Id,
|
||||
AsID: asID,
|
||||
PlatformUserName: v.Username,
|
||||
AutInfo: string(asInfoB),
|
||||
})
|
||||
@ -640,6 +661,7 @@ func ImportMediaAccount(ctx *gin.Context) {
|
||||
excelSetRemark(excelData, line, fmt.Sprintf("%s:%s", blueskyName, err.Error()))
|
||||
}
|
||||
}
|
||||
_ = CheckAsProfile(subInfoResp)
|
||||
}
|
||||
// 保存Excel文件到磁盘
|
||||
resultPath := fmt.Sprintf("./runtime/media/%s", fileName)
|
||||
|
||||
440
pkg/service/cast/tag.go
Normal file
440
pkg/service/cast/tag.go
Normal file
@ -0,0 +1,440 @@
|
||||
package cast
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"fonchain-fiee/api/aryshare"
|
||||
"fonchain-fiee/api/cast"
|
||||
"fonchain-fiee/cmd/config"
|
||||
"fonchain-fiee/pkg/model/login"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/utils"
|
||||
"math/rand"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/xuri/excelize/v2"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
)
|
||||
|
||||
// UpdateCastTag 更新话题标签
|
||||
func UpdateCastTag(ctx *gin.Context) {
|
||||
var req *cast.UpdateCastTagReq
|
||||
var err error
|
||||
if err = ctx.ShouldBind(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
resp, err := service.CastProvider.UpdateCastTag(newCtx, req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// ListCastTags 获取话题标签列表
|
||||
func ListCastTags(ctx *gin.Context) {
|
||||
var req *cast.ListCastTagsReq
|
||||
var err error
|
||||
if err = ctx.ShouldBind(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
resp, err := service.CastProvider.ListCastTags(newCtx, req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// ImportTagBatch 批量导入话题标签
|
||||
func ImportTagBatch(ctx *gin.Context) {
|
||||
// 接收form表单的Excel保存到本地进行解析
|
||||
excelFile, err := ctx.FormFile("file")
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
tempDir := "./runtime/tag"
|
||||
_, err = utils.CheckDirPath(tempDir, true)
|
||||
fileName := time.Now().Format("20060102150405") + "_in_tag.xlsx"
|
||||
excelPath := filepath.Join(tempDir, fileName)
|
||||
if err = ctx.SaveUploadedFile(excelFile, excelPath); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
// 读取Excel中的数据
|
||||
excelData, err := excelize.OpenFile(excelPath)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
defer excelData.Close()
|
||||
// 解析Excel中的数据
|
||||
rows, err := excelData.GetRows("Sheet1")
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
req := cast.UpdateCastTagBatchReq{
|
||||
Data: make([]*cast.CastTagInfo, 0),
|
||||
}
|
||||
userInfo := login.GetUserInfoFromC(ctx)
|
||||
for line, row := range rows {
|
||||
if line == 0 {
|
||||
continue
|
||||
}
|
||||
temp := cast.CastTagInfo{
|
||||
CreatorUuid: fmt.Sprint(userInfo.ID),
|
||||
CreatorName: userInfo.Name,
|
||||
Source: 1, // 固定来源:人工导入
|
||||
Status: 1, // 固定状态:有效
|
||||
}
|
||||
// 解析Excel列:A-话题标签,B-备注
|
||||
if len(row) > 0 {
|
||||
temp.HashTag = strings.TrimSpace(row[0])
|
||||
}
|
||||
if len(row) > 1 {
|
||||
temp.Remark = strings.TrimSpace(row[1])
|
||||
}
|
||||
zap.L().Info("ImportTagBatch row", zap.Int("line", line), zap.Strings("row", row))
|
||||
// 验证必填字段:话题标签不能为空
|
||||
if utils.CleanString(temp.HashTag) == "" {
|
||||
temp.Remark = "必填项未填"
|
||||
req.Data = append(req.Data, &temp)
|
||||
continue
|
||||
}
|
||||
req.Data = append(req.Data, &temp)
|
||||
}
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
resp, _err := service.CastProvider.UpdateCastTagBatch(newCtx, &req)
|
||||
if _err != nil {
|
||||
service.Error(ctx, _err)
|
||||
return
|
||||
}
|
||||
// 打开模板 写入resp 返回的数据
|
||||
templatePath := "./data/话题标签导入模板.xlsx"
|
||||
template, err := excelize.OpenFile(templatePath)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
defer template.Close()
|
||||
var urlResult string
|
||||
if resp.FailCount != 0 {
|
||||
rowIndex := 2 // 从第2行开始写入(第1行是表头)
|
||||
for _, v := range resp.Data {
|
||||
if v.Success {
|
||||
continue
|
||||
}
|
||||
// 写入失败的数据到Excel模板(只写入话题标签和备注两列)
|
||||
template.SetCellValue("Sheet1", fmt.Sprintf("A%d", rowIndex), v.HashTag)
|
||||
template.SetCellValue("Sheet1", fmt.Sprintf("B%d", rowIndex), v.Remark)
|
||||
rowIndex++
|
||||
}
|
||||
resultFilename := strings.Replace(fileName, "_in_tag.xlsx", "_out_tag.xlsx", -1)
|
||||
resultPath := fmt.Sprintf("./runtime/tag/%s", resultFilename)
|
||||
if err = template.SaveAs(resultPath); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
urlHost := config.AppConfig.System.FieeHost
|
||||
urlResult = fmt.Sprintf("%s/api/fiee/static/tag/%s", urlHost, resultFilename)
|
||||
}
|
||||
|
||||
service.Success(ctx, map[string]interface{}{
|
||||
"successCount": resp.SuccessCount,
|
||||
"failCount": resp.FailCount,
|
||||
"resultUrl": urlResult,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// RecalculateCastTagQuoteCount 重新计算话题标签引用数量
|
||||
func RecalculateCastTagQuoteCount(ctx *gin.Context) {
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
// 创建空的请求对象
|
||||
req := &emptypb.Empty{}
|
||||
resp, err := service.CastProvider.RecalculateCastTagQuoteCount(newCtx, req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// findNewTags 对比两次标签,找出新增的标签
|
||||
func findNewTags(beforeTags, afterTags []string) []string {
|
||||
// 将 beforeTags 转换为 map,方便查找
|
||||
beforeMap := make(map[string]bool)
|
||||
for _, tag := range beforeTags {
|
||||
cleanTag := strings.TrimSpace(tag)
|
||||
if cleanTag != "" {
|
||||
beforeMap[cleanTag] = true
|
||||
}
|
||||
}
|
||||
|
||||
// 找出 afterTags 中不在 beforeTags 中的标签
|
||||
newTags := make([]string, 0)
|
||||
for _, tag := range afterTags {
|
||||
cleanTag := strings.TrimSpace(tag)
|
||||
if cleanTag != "" && !beforeMap[cleanTag] {
|
||||
newTags = append(newTags, cleanTag)
|
||||
}
|
||||
}
|
||||
|
||||
return newTags
|
||||
}
|
||||
|
||||
func GetValidProfileKey(ctx context.Context, platformIDs []uint32) (string, error) {
|
||||
if len(platformIDs) == 0 {
|
||||
platformIDs = []uint32{1, 2, 3, 5}
|
||||
}
|
||||
profileKeys, err := service.CastProvider.GetArtistAyrShareInfoByPlatformIDs(ctx, &cast.GetArtistAyrShareInfoByPlatformIDsReq{
|
||||
PlatformIDs: platformIDs,
|
||||
Page: 1,
|
||||
PageSize: 20,
|
||||
})
|
||||
if err != nil {
|
||||
zap.L().Error("GetArtistAyrShareInfoByPlatformIDs failed", zap.Error(err))
|
||||
return "", errors.New("获取有效profileKey失败")
|
||||
}
|
||||
if len(profileKeys.Data) == 0 {
|
||||
return "", errors.New("当前没有有效的profileKey")
|
||||
}
|
||||
|
||||
// 过滤出所有非空的 profileKey
|
||||
validProfileKeys := make([]string, 0)
|
||||
for _, item := range profileKeys.Data {
|
||||
if item.ProfileKey != "" {
|
||||
validProfileKeys = append(validProfileKeys, item.ProfileKey)
|
||||
}
|
||||
}
|
||||
|
||||
if len(validProfileKeys) == 0 {
|
||||
return "", errors.New("profileKey为空")
|
||||
}
|
||||
|
||||
// 从有效的 profileKey 中随机选择一个
|
||||
randIndex := rand.Intn(len(validProfileKeys))
|
||||
return validProfileKeys[randIndex], nil
|
||||
}
|
||||
|
||||
// SaveTagsToDatabase 将标签保存到数据库
|
||||
func SaveTagsToDatabase(ctx *gin.Context, tags []string, source uint32) error {
|
||||
if len(tags) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
userInfo := login.GetUserInfoFromC(ctx)
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
|
||||
// 构建批量导入请求
|
||||
req := cast.UpdateCastTagBatchReq{
|
||||
Data: make([]*cast.CastTagInfo, 0, len(tags)),
|
||||
}
|
||||
|
||||
for _, tag := range tags {
|
||||
tagInfo := &cast.CastTagInfo{
|
||||
HashTag: tag,
|
||||
CreatorUuid: fmt.Sprint(userInfo.ID),
|
||||
CreatorName: userInfo.Name,
|
||||
Source: source, // 4: 自动标签(从内容中自动提取)
|
||||
Status: 1, // 1: 有效
|
||||
}
|
||||
req.Data = append(req.Data, tagInfo)
|
||||
}
|
||||
|
||||
// 调用批量导入接口
|
||||
_, err := service.CastProvider.UpdateCastTagBatch(newCtx, &req)
|
||||
if err != nil {
|
||||
err = errors.New("标签保存到数据库失败")
|
||||
zap.L().Error("SaveTagsToDatabase UpdateCastTagBatch failed", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
zap.L().Info("SaveTagsToDatabase success", zap.Int("tagCount", len(tags)), zap.Strings("tags", tags), zap.Uint32("source", source))
|
||||
return nil
|
||||
}
|
||||
|
||||
func GenerateAutoHashtags(ctx context.Context, post string, max int32, position, language string) (*aryshare.AutoHashtagsResponse, []string, bool, error) {
|
||||
// 验证帖子内容
|
||||
if post == "" {
|
||||
return nil, nil, false, errors.New("帖子内容不能为空")
|
||||
}
|
||||
// post 的长度不能超过1000个字符
|
||||
if len(post) > 1000 {
|
||||
return nil, nil, false, errors.New("自动生成标签的帖子内容不能超过1000个字符")
|
||||
}
|
||||
|
||||
// 提取生成前的标签
|
||||
beforeTags := utils.ExtractTags(post)
|
||||
zap.L().Info("GenerateAutoHashtags beforeTags", zap.Strings("beforeTags", beforeTags))
|
||||
|
||||
// 如果标签数量已经达到或超过5个,不需要生成
|
||||
if len(beforeTags) >= 5 {
|
||||
return nil, nil, false, nil
|
||||
}
|
||||
|
||||
// 设置默认值
|
||||
if position == "" {
|
||||
position = "end"
|
||||
}
|
||||
if language == "" {
|
||||
language = "zh"
|
||||
}
|
||||
|
||||
// 如果 max 为0,则根据现有标签数自动计算,确保总数为5
|
||||
if max == 0 {
|
||||
max = int32(5 - len(beforeTags))
|
||||
}
|
||||
|
||||
// 如果此时 max 小于等于0,则直接返回
|
||||
if max <= 0 {
|
||||
return nil, nil, false, nil
|
||||
}
|
||||
|
||||
profileKey, err := GetValidProfileKey(ctx, []uint32{1, 2, 3, 5})
|
||||
if err != nil {
|
||||
return nil, nil, false, err
|
||||
}
|
||||
|
||||
// 构建请求
|
||||
req := &aryshare.AutoHashtagsRequest{
|
||||
Post: post,
|
||||
Max: max,
|
||||
Position: position,
|
||||
Language: language,
|
||||
ProfileKey: profileKey,
|
||||
}
|
||||
|
||||
// 调用 Ayrshare 的 AutoHashtags 接口
|
||||
resp, err := service.AyrshareProvider.AutoHashtags(ctx, req)
|
||||
if err != nil {
|
||||
zap.L().Error("AutoHashtags failed", zap.Error(err))
|
||||
return nil, nil, false, errors.New("自动生成标签失败")
|
||||
}
|
||||
|
||||
if resp.Post == "" {
|
||||
return nil, nil, false, errors.New("自动生成标签返回的帖子内容为空")
|
||||
}
|
||||
|
||||
// 去掉自动标签返回的帖子内容多余的引号
|
||||
resp.Post = utils.CleanAutoHashtagsQuote(resp.Post)
|
||||
|
||||
// 提取生成后的标签
|
||||
afterTags := utils.ExtractTags(resp.Post)
|
||||
zap.L().Info("GenerateAutoHashtags afterTags", zap.Strings("afterTags", afterTags))
|
||||
|
||||
// 对比两次标签,找出新增的标签
|
||||
newTags := findNewTags(beforeTags, afterTags)
|
||||
|
||||
return resp, newTags, true, nil
|
||||
}
|
||||
|
||||
// AutoHashtags 自动生成标签
|
||||
func AutoHashtags(ctx *gin.Context) {
|
||||
var req *aryshare.AutoHashtagsRequest
|
||||
var err error
|
||||
if err = ctx.ShouldBind(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 调用核心逻辑生成标签
|
||||
resp, newTags, needMore, err := GenerateAutoHashtags(
|
||||
context.Background(),
|
||||
req.Post,
|
||||
req.Max,
|
||||
req.Position,
|
||||
req.Language,
|
||||
)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 如果标签已满5个,直接返回
|
||||
if !needMore {
|
||||
service.Success(ctx, map[string]interface{}{
|
||||
"message": "当前帖子的标签已经有5个了",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 保存新增的标签到数据库,Source 设置为 4(自动标签)
|
||||
if len(newTags) > 0 {
|
||||
if err = SaveTagsToDatabase(ctx, newTags, 4); err != nil {
|
||||
zap.L().Error("SaveTagsToDatabase failed", zap.Error(err), zap.Strings("newTags", newTags))
|
||||
err = errors.New("标签保存到数据库失败")
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// RecommendHashtags 推荐标签
|
||||
func RecommendHashtags(ctx *gin.Context) {
|
||||
var req *aryshare.RecommendHashtagsRequest
|
||||
var err error
|
||||
if err = ctx.ShouldBind(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
profileKey, err := GetValidProfileKey(context.Background(), []uint32{1})
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
req.ProfileKey = profileKey
|
||||
resp, err := service.AyrshareProvider.RecommendHashtags(context.Background(), req)
|
||||
if err != nil {
|
||||
fmt.Println("err", err)
|
||||
zap.L().Error("RecommendHashtags failed", zap.Error(err))
|
||||
err = errors.New("推荐标签失败")
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// SearchHashtags 搜索标签
|
||||
func SearchHashtags(ctx *gin.Context) {
|
||||
var req *aryshare.SearchHashtagsRequest
|
||||
var err error
|
||||
if err = ctx.ShouldBind(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
profileKey, err := GetValidProfileKey(context.Background(), []uint32{3})
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
req.ProfileKey = profileKey
|
||||
resp, err := service.AyrshareProvider.SearchHashtags(context.Background(), req)
|
||||
if err != nil {
|
||||
fmt.Println("err", err)
|
||||
err = errors.New("获取热门话题标签失败")
|
||||
zap.L().Error("SearchHashtags failed", zap.Error(err))
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
@ -2,12 +2,23 @@ package cast
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"fonchain-fiee/cmd/config"
|
||||
"fonchain-fiee/pkg/service/upload"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"fonchain-fiee/api/cast"
|
||||
modelCast "fonchain-fiee/pkg/model/cast"
|
||||
"fonchain-fiee/pkg/model/login"
|
||||
"fonchain-fiee/pkg/service"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/xuri/excelize/v2"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func TaskList(ctx *gin.Context) {
|
||||
@ -26,3 +37,164 @@ func TaskList(ctx *gin.Context) {
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
}
|
||||
|
||||
func DeleteTasK(ctx *gin.Context) {
|
||||
var req *cast.DeleteTaskListReq
|
||||
var err error
|
||||
if err = ctx.ShouldBind(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
//loginInfo := login.GetUserInfoFromC(ctx)
|
||||
//req.OperatorID = fmt.Sprint(loginInfo.ID)
|
||||
resp, err := service.CastProvider.DeleteTaskList(context.Background(), req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
}
|
||||
|
||||
func DownloadTaskFile(ctx *gin.Context) {
|
||||
var req *cast.GetTaskListReq
|
||||
var err error
|
||||
if err = ctx.ShouldBind(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
resp, err := service.CastProvider.GetTaskList(context.Background(), req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
if resp == nil || resp.Data == nil {
|
||||
service.Error(ctx, errors.New("没有此任务"))
|
||||
return
|
||||
}
|
||||
|
||||
var taskInfo modelCast.PublishTaskDto
|
||||
if resp.Data.ExtraData != "" {
|
||||
_ = json.Unmarshal([]byte(resp.Data.ExtraData), &taskInfo)
|
||||
}
|
||||
exportUrl, err := PublishTaskExcel(taskInfo.WorkUuids, false, resp.Data.Action)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, gin.H{
|
||||
"url": exportUrl,
|
||||
})
|
||||
}
|
||||
|
||||
func PublishTaskExcel(workUuids []string, uploadOss bool, action string) (string, error) {
|
||||
// 创建Excel文件
|
||||
f := excelize.NewFile()
|
||||
sheetName := "Sheet1"
|
||||
f.SetSheetName("Sheet1", sheetName)
|
||||
// 设置表头
|
||||
headers := []interface{}{
|
||||
"艺人编号", "艺人姓名", "内容类型", "内容标题",
|
||||
"执行结果", "TIKTOK", "YOUTUBE", "INS", "DM", "BULESKY",
|
||||
}
|
||||
sw, err := f.NewStreamWriter(sheetName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if err = sw.SetRow("A1", headers); err != nil {
|
||||
return "", err
|
||||
}
|
||||
// 遍历所有作品,收集数据
|
||||
rowIndex := 2
|
||||
for _, workUuid := range workUuids {
|
||||
var workResp *cast.WorkDetailResp
|
||||
workResp, err = service.CastProvider.WorkDetail(context.Background(), &cast.WorkDetailReq{WorkUuid: workUuid})
|
||||
if err != nil {
|
||||
continue // 如果某个作品获取失败,跳过继续处理其他作品
|
||||
}
|
||||
// 内容类型
|
||||
contentType := ""
|
||||
if workResp.WorkCategory == 1 {
|
||||
contentType = "图文"
|
||||
} else if workResp.WorkCategory == 2 {
|
||||
contentType = "视频"
|
||||
}
|
||||
// 执行结果
|
||||
executionResult := modelCast.WorkStatusMM[int(workResp.WorkStatus)]
|
||||
tiktokStatus := ""
|
||||
youtubeStatus := ""
|
||||
insStatus := ""
|
||||
dmStatus := ""
|
||||
blueskyStatus := ""
|
||||
|
||||
// 获取平台信息和艺人姓名
|
||||
artistName := ""
|
||||
var infoResp *cast.WorkInfoResp
|
||||
infoResp, err = service.CastProvider.WorkInfo(context.Background(), &cast.WorkInfoReq{WorkUuid: workUuid})
|
||||
if err == nil && infoResp != nil {
|
||||
artistName = infoResp.ArtistName
|
||||
if infoResp.PlatformInfoData != nil {
|
||||
for _, platform := range infoResp.PlatformInfoData {
|
||||
statusText := modelCast.PlatformPublishStatusMM[platform.PublishMediaStatus]
|
||||
switch cast.PlatformIDENUM(platform.PlatformID) {
|
||||
case cast.PlatformIDENUM_TIKTOK:
|
||||
tiktokStatus = statusText
|
||||
case cast.PlatformIDENUM_YOUTUBE:
|
||||
youtubeStatus = statusText
|
||||
case cast.PlatformIDENUM_INS:
|
||||
insStatus = statusText
|
||||
case cast.PlatformIDENUM_DM:
|
||||
dmStatus = statusText
|
||||
case cast.PlatformIDENUM_BULESKY:
|
||||
blueskyStatus = statusText
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
row := []interface{}{
|
||||
workResp.ArtistSubNum,
|
||||
artistName,
|
||||
contentType,
|
||||
workResp.Title,
|
||||
executionResult,
|
||||
tiktokStatus,
|
||||
youtubeStatus,
|
||||
insStatus,
|
||||
dmStatus,
|
||||
blueskyStatus,
|
||||
}
|
||||
cell, _ := excelize.CoordinatesToCellName(1, rowIndex)
|
||||
if err = sw.SetRow(cell, row); err != nil {
|
||||
continue
|
||||
}
|
||||
rowIndex++
|
||||
}
|
||||
if err = sw.Flush(); err != nil {
|
||||
zap.L().Error("PublishTaskExcel Flush err", zap.Error(err))
|
||||
return "", errors.New("生成Excel文件失败")
|
||||
}
|
||||
tempDir := "./runtime/task"
|
||||
if _, err = os.Stat(tempDir); os.IsNotExist(err) {
|
||||
if err = os.MkdirAll(tempDir, 0755); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
TaskActionName, ok := modelCast.TaskActionName[action]
|
||||
if !ok {
|
||||
TaskActionName = "未知任务"
|
||||
}
|
||||
filename := fmt.Sprintf("%s_%s.xlsx", TaskActionName, time.Now().Format("20060102150405"))
|
||||
filePath := tempDir + "/" + filename
|
||||
var exportUrl string = fmt.Sprintf("%s/api/fiee/static/%s", config.AppConfig.System.FieeHost, strings.Replace(filePath, "./runtime/", "", 1))
|
||||
if err = f.SaveAs(filePath); err != nil {
|
||||
zap.L().Error("PublishTaskExcel SaveAs err", zap.Error(err))
|
||||
return "", errors.New("保存Excel文件失败")
|
||||
}
|
||||
if uploadOss {
|
||||
// 上传到阿里云
|
||||
exportUrl, err = upload.PutBos(filePath, "excel", true)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
return exportUrl, nil
|
||||
}
|
||||
|
||||
@ -2,11 +2,13 @@ package cast
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"fonchain-fiee/api/aryshare"
|
||||
"fonchain-fiee/api/cast"
|
||||
"fonchain-fiee/cmd/config"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/service/check"
|
||||
"fonchain-fiee/pkg/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@ -14,6 +16,17 @@ import (
|
||||
|
||||
func Test(ctx *gin.Context) {
|
||||
action := ctx.PostForm("action")
|
||||
if action == "" {
|
||||
workUuid := ctx.PostForm("workUuid")
|
||||
err := CheckImage(workUuid)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, nil)
|
||||
return
|
||||
}
|
||||
|
||||
if action == "getPost" {
|
||||
id := ctx.PostForm("id")
|
||||
profileKey := ctx.PostForm("profileKey")
|
||||
@ -68,19 +81,6 @@ func Test(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if action == "" {
|
||||
profileKey := ctx.PostForm("profileKey")
|
||||
resp, err := service.AyrshareProvider.GetUser(context.Background(), &aryshare.GetUserRequest{
|
||||
ProfileKey: profileKey,
|
||||
InstagramDetails: true,
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
if action == "getProfile" {
|
||||
//profileKey := ctx.PostForm("profileKey")
|
||||
resp, err := service.AyrshareProvider.GetProfiles(context.Background(), &aryshare.GetProfilesRequest{
|
||||
@ -127,6 +127,52 @@ func Test(ctx *gin.Context) {
|
||||
service.CastProvider.Tools(context.Background(), &cast.ToolsReq{Action: action})
|
||||
return
|
||||
}
|
||||
if action == "SecurityText" {
|
||||
val := ctx.PostForm("val")
|
||||
ok, err := check.SecurityFile(val)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
if !ok {
|
||||
service.Error(ctx, errors.New("标题鉴定未通过"))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, "ok")
|
||||
}
|
||||
|
||||
if action == "SecurityFile" {
|
||||
val := ctx.PostForm("val")
|
||||
ok, err := check.SecurityFile(val)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
if !ok {
|
||||
service.Error(ctx, errors.New("标题鉴定未通过"))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, "ok")
|
||||
}
|
||||
if action == "SyncAsAuth" {
|
||||
artistUuid := ctx.PostForm("artistUuid")
|
||||
err := SyncAsAuth(artistUuid)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, "ok")
|
||||
}
|
||||
|
||||
if action == "RefreshWorkList" {
|
||||
resp, err := service.CastProvider.RefreshWorkList(context.Background(), &cast.RefreshWorkListReq{PublishStatus: 1})
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
service.Success(ctx, "unknow")
|
||||
return
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,7 @@ import (
|
||||
pkgSecurity "fonchain-fiee/pkg/security"
|
||||
|
||||
"github.com/fonchain/utils/security"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// ImageCheckUrlValid 图片黄疸检测 true 是通过
|
||||
@ -55,7 +56,6 @@ func ImageCheckByte(file *multipart.FileHeader) (bool, error) {
|
||||
}
|
||||
|
||||
func SecurityFile(textVal string) (bool, error) {
|
||||
//FIXME
|
||||
return true, nil
|
||||
if textVal == "" {
|
||||
return true, nil
|
||||
@ -80,13 +80,15 @@ func SecurityFile(textVal string) (bool, error) {
|
||||
return true, nil
|
||||
}
|
||||
func SecurityText(textVal string) (bool, error) {
|
||||
return true, nil
|
||||
aliConfig, err := pkgSecurity.GetGlobalConfig("./data/alibabacloud.env")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
err = aliConfig.GetSTSToken()
|
||||
if err != nil {
|
||||
return false, errors.New("获取图片失败")
|
||||
zap.L().Error("获取凭证失败", zap.Error(err))
|
||||
return false, errors.New("获取凭证失败")
|
||||
}
|
||||
if err = handleTextScan(aliConfig, textVal); err != nil {
|
||||
return false, err
|
||||
@ -102,6 +104,7 @@ func securityScan(fileInfo *modelSecurity.FileInfo) (err error) {
|
||||
}
|
||||
err = aliConfig.GetSTSToken()
|
||||
if err != nil {
|
||||
zap.L().Error("获取凭证失败", zap.Error(err))
|
||||
return errors.New("获取凭证失败")
|
||||
}
|
||||
switch fileInfo.FileType {
|
||||
@ -154,7 +157,8 @@ func handleVideoScan(config *security.Config, fileInfo *modelSecurity.FileInfo)
|
||||
}
|
||||
if v.Results.RiskLevel != nil {
|
||||
lv := v.Results.RiskLevel
|
||||
if *lv == "none" {
|
||||
//if *lv == "none" {
|
||||
if *lv != "high" {
|
||||
return nil
|
||||
}
|
||||
return errors.New("图片违规")
|
||||
@ -193,7 +197,8 @@ func handleImageScan(config *security.Config, fileInfo *modelSecurity.FileInfo)
|
||||
fileInfo.SecurityStatus = *v2.RiskLevel
|
||||
if v2.RiskLevel != nil {
|
||||
lv := v2.RiskLevel
|
||||
if *lv == "none" {
|
||||
//if *lv == "none" {
|
||||
if *lv != "high" {
|
||||
return nil
|
||||
}
|
||||
return errors.New("图片违规")
|
||||
|
||||
@ -4,13 +4,19 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
account "fonchain-fiee/api/accountFiee"
|
||||
"fonchain-fiee/api/cron"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/utils"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gin-gonic/gin/binding"
|
||||
"github.com/xuri/excelize/v2"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
)
|
||||
|
||||
@ -112,20 +118,36 @@ func ExportExcelExecutionResult(c *gin.Context) {
|
||||
service.Error(c, errors.New("网络超时,请重试"))
|
||||
return
|
||||
}
|
||||
userListRes, err := service.AccountFieeProvider.UserList(context.Background(), &account.UserListRequest{
|
||||
Domain: "app",
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, errors.New("用户查询失败"))
|
||||
return
|
||||
}
|
||||
idFindSubName := make(map[uint64]string)
|
||||
for _, v := range userListRes.UserList {
|
||||
idFindSubName[v.Id] = v.SubNum
|
||||
}
|
||||
|
||||
titleList := []string{
|
||||
"任务标题", "艺人编号", "艺人姓名", "内容类型", "内容标题", "执行结果", "原因",
|
||||
"任务标题", "艺人编号", "艺人姓名", "内容类型", "内容标题", "执行结果", "原因", "TIKTOK", "YOUTUBE", "INS", "DM", "BULESKY",
|
||||
}
|
||||
var dataList []interface{}
|
||||
for _, task := range res.Data {
|
||||
data := []interface{}{
|
||||
task.TaskTitle,
|
||||
task.ArtistId,
|
||||
idFindSubName[uint64(task.ArtistId)],
|
||||
task.ArtistName,
|
||||
task.ContentTypeDescription,
|
||||
task.WorkTitle,
|
||||
task.ResultDescription,
|
||||
task.ResultDesc,
|
||||
task.TIKTOKStatusDesc,
|
||||
task.YOUTUBEStatusDesc,
|
||||
task.INSStatusDesc,
|
||||
task.DMStatusDesc,
|
||||
task.BULESKYStatusDesc,
|
||||
}
|
||||
dataList = append(dataList, &data)
|
||||
}
|
||||
@ -205,3 +227,160 @@ func GetScheduleTaskStatus(c *gin.Context) {
|
||||
}
|
||||
service.Success(c, res)
|
||||
}
|
||||
|
||||
func GetImportData(c *gin.Context) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
service.Error(c, errors.New("操作失败"))
|
||||
}
|
||||
}()
|
||||
|
||||
// 导入excel
|
||||
excelFile, err := c.FormFile("excel")
|
||||
if err != nil {
|
||||
service.Error(c, errors.New("缺少excel文件"))
|
||||
return
|
||||
}
|
||||
|
||||
// 创建临时文件
|
||||
tempDir := "tmp"
|
||||
if err = os.MkdirAll(tempDir, 0755); err != nil {
|
||||
service.Error(c, errors.New("创建临时目录失败"))
|
||||
return
|
||||
}
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
// 保存excel
|
||||
excelPath := filepath.Join(tempDir, "excel.xlsx")
|
||||
if err = c.SaveUploadedFile(excelFile, excelPath); err != nil {
|
||||
service.Error(c, errors.New("保存excel文件失败"))
|
||||
return
|
||||
}
|
||||
|
||||
// 读取excel
|
||||
readExcelResult, err := readExcel(excelPath)
|
||||
if err != nil {
|
||||
service.Error(c, fmt.Errorf("读取excel失败: %v", err))
|
||||
return
|
||||
}
|
||||
if len(readExcelResult) == 0 {
|
||||
service.Error(c, errors.New("请检查excel文件"))
|
||||
return
|
||||
}
|
||||
//去重操作
|
||||
set := make(map[string]struct{})
|
||||
var uniqueExcelData []excelData
|
||||
for _, data := range readExcelResult {
|
||||
if _, exists := set[data.SubName]; !exists {
|
||||
set[data.SubName] = struct{}{}
|
||||
uniqueExcelData = append(uniqueExcelData, data)
|
||||
}
|
||||
}
|
||||
res, err := service.AccountFieeProvider.UserList(context.Background(), &account.UserListRequest{
|
||||
Domain: "app",
|
||||
})
|
||||
if err != nil {
|
||||
service.Error(c, errors.New("用户查询失败"))
|
||||
return
|
||||
}
|
||||
//检查subname是否正确是否存在
|
||||
subNames := make(map[string]struct{}, len(res.UserList))
|
||||
for _, v := range res.UserList {
|
||||
subNames[v.SubNum] = struct{}{}
|
||||
}
|
||||
for _, v := range uniqueExcelData {
|
||||
if _, ok := subNames[v.SubName]; !ok {
|
||||
service.Error(c, errors.New(fmt.Sprintf("第 %d 行数据错误,请检查数据!", v.Line)))
|
||||
return
|
||||
}
|
||||
}
|
||||
//检查subname和name是否匹配
|
||||
subNameFindExcelData := make(map[string]excelData, len(uniqueExcelData))
|
||||
for _, v := range uniqueExcelData {
|
||||
subNameFindExcelData[v.SubName] = v
|
||||
}
|
||||
subNameFindID := make(map[string]uint64, len(uniqueExcelData))
|
||||
result := make([]excelDataResult, 0, len(uniqueExcelData))
|
||||
for _, v := range res.UserList {
|
||||
subNameFindID[v.SubNum] = v.Id
|
||||
if subNameFindExcelData[v.SubNum].Name != v.Name && subNameFindExcelData[v.SubNum].Name != "" {
|
||||
fmt.Println(subNameFindExcelData[v.SubNum], v.Name)
|
||||
service.Error(c, errors.New(fmt.Sprintf("第 %d 行数据错误,请检查数据!", subNameFindExcelData[v.SubNum].Line)))
|
||||
return
|
||||
}
|
||||
}
|
||||
for _, v := range uniqueExcelData {
|
||||
result = append(result, excelDataResult{
|
||||
Id: subNameFindID[v.SubName],
|
||||
Name: v.Name,
|
||||
})
|
||||
}
|
||||
service.Success(c, result)
|
||||
return
|
||||
}
|
||||
|
||||
type excelData struct {
|
||||
Line uint `json:"line"`
|
||||
SubName string `json:"subName"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type excelDataResult struct {
|
||||
Id uint64 `json:"id"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func readExcel(excelPath string) ([]excelData, error) {
|
||||
//打开excel
|
||||
f, err := excelize.OpenFile(excelPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
//读取第一页
|
||||
sheetName := f.GetSheetName(0)
|
||||
if sheetName == "" {
|
||||
return nil, errors.New("excel文件中没有工作表")
|
||||
}
|
||||
|
||||
//读取数据
|
||||
rows, err := f.GetRows(sheetName)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("读取工作表失败: %v", err)
|
||||
}
|
||||
|
||||
if len(rows) <= 1 {
|
||||
return nil, errors.New("excel文件没有数据行(只有表头或为空)")
|
||||
}
|
||||
var result []excelData
|
||||
for i := 1; i < len(rows); i++ { // 从第2行开始(跳过表头)
|
||||
row := rows[i]
|
||||
if len(row) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
subName := getCellValue(f, sheetName, i, 0)
|
||||
name := getCellValue(f, sheetName, i, 1)
|
||||
data := excelData{
|
||||
Line: uint(i + 1),
|
||||
SubName: subName,
|
||||
Name: name,
|
||||
}
|
||||
result = append(result, data)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
func getCellValue(f *excelize.File, sheetName string, rowIndex, colIndex int) string {
|
||||
colName, _ := excelize.ColumnNumberToName(colIndex + 1)
|
||||
cell := fmt.Sprintf("%s%d", colName, rowIndex+1)
|
||||
|
||||
value, err := f.GetCellValue(sheetName, cell)
|
||||
if err != nil {
|
||||
log.Printf("读取单元格 %s 失败: %v", cell, err)
|
||||
return ""
|
||||
}
|
||||
|
||||
return strings.TrimSpace(value)
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"fonchain-fiee/api/files"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/service/bundle/common"
|
||||
@ -102,6 +103,15 @@ func Create(ctx *gin.Context) {
|
||||
}
|
||||
|
||||
func Delete(ctx *gin.Context) {
|
||||
path := ctx.DefaultQuery("path", "/")
|
||||
nowYear := time.Now().Year()
|
||||
nowMonth := time.Now().Month()
|
||||
nowYearPath := fmt.Sprintf("/fiee/video/%d", nowYear)
|
||||
nowMonthPath := fmt.Sprintf("/fiee/video/%d/%d-%d", nowYear, nowYear, nowMonth)
|
||||
if path == nowYearPath || path == nowMonthPath || path == "/fiee" || path == "/fiee/video" || path == "/fiee/video/old" {
|
||||
service.Error(ctx, errors.New("无法删除该目录"))
|
||||
return
|
||||
}
|
||||
resp, err := service.FilesProvider.Delete(ctx, &files.DeleteReq{
|
||||
Path: ctx.DefaultQuery("path", "/"),
|
||||
UserSpacePath: getUserSpacePath(ctx),
|
||||
|
||||
@ -47,7 +47,12 @@ func Delete(ctx *gin.Context) {
|
||||
}
|
||||
|
||||
func Display(ctx *gin.Context) {
|
||||
resp, err := service.GovernanceProvider.Display(ctx, &governance.DisplayReq{})
|
||||
var req governance.DisplayReq
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
resp, err := service.GovernanceProvider.Display(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, errors.New(common.DisplayGovernanceFailed))
|
||||
return
|
||||
@ -85,3 +90,34 @@ func Edit(ctx *gin.Context) {
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
}
|
||||
|
||||
func UpdataStatus(ctx *gin.Context) {
|
||||
var req governance.UpdataStatusReq
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
user := login.GetUserInfoFromC(ctx)
|
||||
req.Operator = user.Name
|
||||
req.OperatorId = int32(user.ID)
|
||||
resp, err := service.GovernanceProvider.UpdataStatus(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
}
|
||||
|
||||
func GetGovernanceInfo(ctx *gin.Context) {
|
||||
var req governance.GetGovernanceInfoReq
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
resp, err := service.GovernanceProvider.GetGovernanceInfo(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
}
|
||||
|
||||
@ -30,6 +30,8 @@ type excelData struct {
|
||||
SubNum string //用户编号 必须字段
|
||||
TikTok string
|
||||
Instagram string
|
||||
YouTube string
|
||||
BlueSky string
|
||||
Youtube string
|
||||
Desc string //艺人简介
|
||||
TitleRequire string //标题要求 必须字段
|
||||
@ -178,27 +180,30 @@ func readExcel(excelPath string) ([]excelData, error) {
|
||||
if subNum == "" {
|
||||
return nil, fmt.Errorf("第%d行应该有编号", i+1)
|
||||
}
|
||||
tikTok := getCellValue(f, sheetName, i, 2)
|
||||
blueSky := getCellValue(f, sheetName, i, 2)
|
||||
if blueSky == "" {
|
||||
return nil, fmt.Errorf("第%d行应该有bluesky账号昵称", i+1)
|
||||
}
|
||||
tikTok := getCellValue(f, sheetName, i, 3)
|
||||
if tikTok == "" {
|
||||
return nil, fmt.Errorf("第%d行应该有tiktok账号昵称", i+1)
|
||||
}
|
||||
instagram := getCellValue(f, sheetName, i, 3)
|
||||
if instagram == "" {
|
||||
return nil, fmt.Errorf("第%d行应该有ins账号昵称", i+1)
|
||||
}
|
||||
desc := getCellValue(f, sheetName, i, 4)
|
||||
titleRequire := getCellValue(f, sheetName, i, 5)
|
||||
instagram := getCellValue(f, sheetName, i, 4)
|
||||
|
||||
desc := getCellValue(f, sheetName, i, 5)
|
||||
|
||||
titleRequire := getCellValue(f, sheetName, i, 6)
|
||||
if titleRequire == "" {
|
||||
return nil, fmt.Errorf("第%d行应该有标题要求", i+1)
|
||||
}
|
||||
contentRequire := getCellValue(f, sheetName, i, 6)
|
||||
contentRequire := getCellValue(f, sheetName, i, 7)
|
||||
if contentRequire == "" {
|
||||
return nil, fmt.Errorf("第%d行应该有内容要求", i+1)
|
||||
}
|
||||
photoRequire := getCellValue(f, sheetName, i, 7)
|
||||
photoUrl := getCellValue(f, sheetName, i, 8)
|
||||
photoNumStr := getCellValue(f, sheetName, i, 9)
|
||||
photoDpi := getCellValue(f, sheetName, i, 10)
|
||||
photoRequire := getCellValue(f, sheetName, i, 8)
|
||||
photoUrl := getCellValue(f, sheetName, i, 9)
|
||||
photoNumStr := getCellValue(f, sheetName, i, 10)
|
||||
photoDpi := getCellValue(f, sheetName, i, 11)
|
||||
var num int
|
||||
if photoUrl == "" { //如果没有关联画作,数量必须有,需求必须有
|
||||
//需求必须有
|
||||
@ -220,6 +225,7 @@ func readExcel(excelPath string) ([]excelData, error) {
|
||||
data := excelData{
|
||||
ArtistName: artistName,
|
||||
SubNum: subNum,
|
||||
BlueSky: blueSky,
|
||||
TikTok: tikTok,
|
||||
Instagram: instagram,
|
||||
Desc: desc,
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package imports
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
@ -8,6 +9,9 @@ import (
|
||||
apiCast "fonchain-fiee/api/cast"
|
||||
"fonchain-fiee/pkg/config"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"image"
|
||||
"image/draw"
|
||||
"image/jpeg"
|
||||
"io"
|
||||
"log"
|
||||
"math/rand"
|
||||
@ -293,6 +297,7 @@ func (p *BatchProcessor) submitTask(req *excelData) error {
|
||||
if !tiktokFound {
|
||||
return fmt.Errorf("未找到匹配的TikTok账号: %s", req.TikTok)
|
||||
}
|
||||
if req.Instagram != "" {
|
||||
// 获取 Instagram 自媒体账号
|
||||
accountListIns, err := service.CastProvider.MediaUserList(context.Background(), &apiCast.MediaUserListReq{
|
||||
ArtistVal: req.ArtistName,
|
||||
@ -307,7 +312,6 @@ func (p *BatchProcessor) submitTask(req *excelData) error {
|
||||
if accountListIns == nil || len(accountListIns.Data) == 0 {
|
||||
return fmt.Errorf("ins自媒体账号数量为0")
|
||||
}
|
||||
|
||||
// 查找 Instagram 账号
|
||||
insFound := false
|
||||
for _, user := range accountListIns.Data {
|
||||
@ -322,6 +326,35 @@ func (p *BatchProcessor) submitTask(req *excelData) error {
|
||||
return fmt.Errorf("未找到匹配的Instagram账号: %s", req.Instagram)
|
||||
}
|
||||
|
||||
}
|
||||
// 获取 Bluesky 自媒体账号
|
||||
accountListBlueSky, err := service.CastProvider.MediaUserList(context.Background(), &apiCast.MediaUserListReq{
|
||||
ArtistVal: req.ArtistName,
|
||||
PlatformID: 5, // Bluesky platform ID
|
||||
Page: 1,
|
||||
PageSize: 10,
|
||||
ArtistUuid: strconv.FormatUint(list.UserList[0].Id, 10),
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取 Bluesky 账号失败: %s", err.Error())
|
||||
}
|
||||
if accountListBlueSky == nil || len(accountListBlueSky.Data) == 0 {
|
||||
return fmt.Errorf("bluesky自媒体账号数量为0")
|
||||
}
|
||||
// 查找 Bluesky 账号
|
||||
blueSkyFound := false
|
||||
for _, user := range accountListBlueSky.Data {
|
||||
if user.PlatformUserName == req.BlueSky {
|
||||
req.MediaAccountNames = append(req.MediaAccountNames, user.PlatformUserName)
|
||||
req.MediaAccountUuids = append(req.MediaAccountUuids, user.MediaAccountUuid)
|
||||
blueSkyFound = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !blueSkyFound {
|
||||
return fmt.Errorf("未找到匹配的Bluesky账号: %s", req.BlueSky)
|
||||
}
|
||||
|
||||
switch {
|
||||
case req.PhotoUrl == "": // 如果没有提供照片 URL,生成标题和内容
|
||||
// 生成标题和内容
|
||||
@ -543,21 +576,17 @@ func downloadAndUploadToBucket(imageURL string) (string, error) {
|
||||
return "", fmt.Errorf("创建临时目录失败: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(tempDir) // 程序结束时清理整个目录
|
||||
|
||||
// 生成唯一文件名
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
fileName := fmt.Sprintf("%d%04d.jpg", time.Now().Unix(), rand.Intn(10000))
|
||||
timestamp := time.Now().Unix()
|
||||
randomNum := rand.Intn(10000)
|
||||
fileName := fmt.Sprintf("%d%04d.jpg", timestamp, randomNum)
|
||||
|
||||
// 构建文件路径
|
||||
imgPath := filepath.Join(tempDir, fileName)
|
||||
|
||||
// 创建文件
|
||||
file, err := os.Create(imgPath)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("创建文件失败: %v", err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
log.Printf("文件创建在: %s", imgPath)
|
||||
|
||||
// 下载图片到文件
|
||||
// 下载图片
|
||||
resp, err := http.Get(imageURL)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("下载图片失败: %v", err)
|
||||
@ -568,50 +597,62 @@ func downloadAndUploadToBucket(imageURL string) (string, error) {
|
||||
return "", fmt.Errorf("下载失败,状态码: %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
// 复制到文件
|
||||
_, err = io.Copy(file, resp.Body)
|
||||
// 读取图片数据
|
||||
imgData, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("保存文件失败: %v", err)
|
||||
return "", fmt.Errorf("读取图片数据失败: %v", err)
|
||||
}
|
||||
|
||||
file.Sync()
|
||||
|
||||
fileBytes, err := os.ReadFile(imgPath)
|
||||
// 检测图片格式并转换为JPG
|
||||
jpgData, err := convertToJPG(imgData)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("读取本地文件失败: %v", err)
|
||||
return "", fmt.Errorf("转换图片格式失败: %v", err)
|
||||
}
|
||||
|
||||
// 保存转换后的JPG文件
|
||||
if err := os.WriteFile(imgPath, jpgData, 0644); err != nil {
|
||||
return "", fmt.Errorf("保存JPG文件失败: %v", err)
|
||||
}
|
||||
|
||||
// 上传到对象存储
|
||||
BOSClient, err := objstorage.NewOSS(
|
||||
os.Getenv(config.ConfigData.Oss.AccessKeyId),
|
||||
os.Getenv(config.ConfigData.Oss.AccessKeySecret),
|
||||
os.Getenv(config.ConfigData.Oss.Endpoint),
|
||||
)
|
||||
if BOSClient == nil {
|
||||
return "", fmt.Errorf("上传文件失败: %v", err)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("创建OSS客户端失败: %v", err)
|
||||
}
|
||||
_, err = BOSClient.PutObjectFromBytes(os.Getenv(config.ConfigData.Oss.BucketName), fileName, fileBytes)
|
||||
if BOSClient == nil {
|
||||
return "", fmt.Errorf("OSS客户端为空")
|
||||
}
|
||||
|
||||
_, err = BOSClient.PutObjectFromBytes(os.Getenv(config.ConfigData.Oss.BucketName), fileName, jpgData)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("上传文件失败: %v", err)
|
||||
}
|
||||
url := fmt.Sprintf("%s/%s", os.Getenv(config.ConfigData.Oss.CdnHost), fileName)
|
||||
//上传到桶
|
||||
//BOSClient, err := objstorage.NewOSS(
|
||||
// config.ConfigData.Oss.AccessKeyId,
|
||||
// config.ConfigData.Oss.AccessKeySecret,
|
||||
// config.ConfigData.Oss.Endpoint,
|
||||
//)
|
||||
//if BOSClient == nil {
|
||||
// return "", fmt.Errorf("上传文件失败: %v", err)
|
||||
//}
|
||||
//_, err = BOSClient.PutObjectFromBytes(config.ConfigData.Oss.BucketName, fileName, fileBytes)
|
||||
//if err != nil {
|
||||
// return "", fmt.Errorf("上传文件失败: %v", err)
|
||||
//}
|
||||
//url := fmt.Sprintf("%s/%s", config.ConfigData.Oss.CdnHost, fileName)
|
||||
|
||||
// 返回CDN URL
|
||||
url := fmt.Sprintf("%s/%s", os.Getenv(config.ConfigData.Oss.CdnHost), fileName)
|
||||
return url, nil
|
||||
}
|
||||
|
||||
//上传到桶
|
||||
//BOSClient, err := objstorage.NewOSS(
|
||||
// config.ConfigData.Oss.AccessKeyId,
|
||||
// config.ConfigData.Oss.AccessKeySecret,
|
||||
// config.ConfigData.Oss.Endpoint,
|
||||
//)
|
||||
//if BOSClient == nil {
|
||||
// return "", fmt.Errorf("上传文件失败: %v", err)
|
||||
//}
|
||||
//_, err = BOSClient.PutObjectFromBytes(config.ConfigData.Oss.BucketName, fileName, fileBytes)
|
||||
//if err != nil {
|
||||
// return "", fmt.Errorf("上传文件失败: %v", err)
|
||||
//}
|
||||
//url := fmt.Sprintf("%s/%s", config.ConfigData.Oss.CdnHost, fileName)
|
||||
|
||||
func (p *BatchProcessor) generateTitleAndContent(req *excelData) (string, string, error) {
|
||||
if req.PhotoUrl != "" {
|
||||
title, content, err := NewAiGenerator().GenerateTitleAndContentFromImage(
|
||||
@ -651,7 +692,7 @@ func (p *BatchProcessor) generateImage(req *excelData) (string, error) {
|
||||
prompt += "\n要求不能出现:低质量、残缺、人物正脸、多余的手指、乱码字符和文字、比例不良,场景以国内场景为主"
|
||||
|
||||
if req.PhotoDpi == "" {
|
||||
req.PhotoDpi = "720*1280"
|
||||
req.PhotoDpi = "1024*1024"
|
||||
|
||||
}
|
||||
result, err := NewAiGenerator().TextToImage(
|
||||
@ -665,6 +706,33 @@ func (p *BatchProcessor) generateImage(req *excelData) (string, error) {
|
||||
return result.Output.TaskID, nil
|
||||
}
|
||||
|
||||
// convertToJPG 将图片数据转换为JPG格式
|
||||
func convertToJPG(imgData []byte) ([]byte, error) {
|
||||
// 使用标准库解码
|
||||
img, format, err := image.Decode(bytes.NewReader(imgData))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("解码图片失败: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("检测到图片格式: %s, 尺寸: %dx%d", format, img.Bounds().Dx(), img.Bounds().Dy())
|
||||
|
||||
// 创建新的RGBA图片
|
||||
bounds := img.Bounds()
|
||||
rgba := image.NewRGBA(bounds)
|
||||
|
||||
// 绘制到RGBA
|
||||
draw.Draw(rgba, bounds, img, bounds.Min, draw.Src)
|
||||
|
||||
// 编码为JPG
|
||||
var buf bytes.Buffer
|
||||
opts := &jpeg.Options{Quality: 90} // 设置质量为90%
|
||||
if err := jpeg.Encode(&buf, rgba, opts); err != nil {
|
||||
return nil, fmt.Errorf("编码JPG失败: %v", err)
|
||||
}
|
||||
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
//func (p *BatchProcessor) StartPolling() {
|
||||
// go func() {
|
||||
// ticker := time.NewTicker(p.pollInterval) // 1秒间隔
|
||||
|
||||
@ -58,6 +58,7 @@ func publishImage(req publishImageReq) (err error) {
|
||||
|
||||
//---------------------------------------------------发布
|
||||
_, err = service.CastProvider.UpdateWorkImage(context.Background(), &apiCast.UpdateWorkImageReq{
|
||||
ArtistSubNum: list.UserList[0].SubNum,
|
||||
Title: req.Title,
|
||||
Content: req.Content,
|
||||
Images: req.GeneratePhotoUrl,
|
||||
|
||||
@ -17,6 +17,7 @@ import (
|
||||
"fonchain-fiee/api/pressreleases"
|
||||
"fonchain-fiee/api/reports"
|
||||
"fonchain-fiee/api/secFilings"
|
||||
"fonchain-fiee/api/supplier"
|
||||
pkConfig "fonchain-fiee/pkg/config"
|
||||
"os"
|
||||
|
||||
@ -36,11 +37,12 @@ var CastProvider = new(cast.CastClientImpl)
|
||||
var GovernanceProvider = new(governance.GovernanceClientImpl)
|
||||
var PressReleasesProvider = new(pressreleases.PressReleasesClientImpl)
|
||||
var SecFilingProvider = new(secFilings.SecFilingsClientImpl)
|
||||
var AyrshareProvider = new(aryshare.AyrshareClientImpl)
|
||||
var CronProvider = new(cron.CronClientImpl)
|
||||
var SupplierProvider = new(supplier.SupplierClientImpl)
|
||||
var ReportsProvider = new(reports.ReportsClientImpl)
|
||||
var EmailAlertsProvider = new(emailAlerts.EmailAlertsClientImpl)
|
||||
var MembersProvider = new(members.MembersClientImpl)
|
||||
var AyrshareProvider = new(aryshare.AyrshareClientImpl)
|
||||
var CronProvider = new(cron.CronClientImpl)
|
||||
|
||||
func init() {
|
||||
config.SetConsumerService(BundleProvider)
|
||||
@ -53,11 +55,12 @@ func init() {
|
||||
config.SetConsumerService(GovernanceProvider)
|
||||
config.SetConsumerService(PressReleasesProvider)
|
||||
config.SetConsumerService(SecFilingProvider)
|
||||
config.SetConsumerService(AyrshareProvider)
|
||||
config.SetConsumerService(CronProvider)
|
||||
config.SetConsumerService(SupplierProvider)
|
||||
config.SetConsumerService(ReportsProvider)
|
||||
config.SetConsumerService(EmailAlertsProvider)
|
||||
config.SetConsumerService(MembersProvider)
|
||||
config.SetConsumerService(AyrshareProvider)
|
||||
config.SetConsumerService(CronProvider)
|
||||
|
||||
if err := config.Load(); err != nil {
|
||||
panic(err)
|
||||
|
||||
@ -8,6 +8,7 @@ import (
|
||||
"fonchain-fiee/api/pressreleases"
|
||||
"fonchain-fiee/pkg/model/login"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/service/bundle/common"
|
||||
)
|
||||
|
||||
func Create(ctx *gin.Context) {
|
||||
@ -21,7 +22,7 @@ func Create(ctx *gin.Context) {
|
||||
req.OperatorId = int32(user.ID)
|
||||
resp, err := service.PressReleasesProvider.Create(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
service.Error(ctx, errors.New(common.CreatePressReleasesFailed))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
@ -35,7 +36,7 @@ func Delete(ctx *gin.Context) {
|
||||
}
|
||||
resp, err := service.PressReleasesProvider.Delete(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
service.Error(ctx, errors.New(common.DisplayPressReleasesFailed))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
@ -47,9 +48,13 @@ func Display(ctx *gin.Context) {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
if req.LangType == "" {
|
||||
service.Error(ctx, errors.New("语言类型为空"))
|
||||
return
|
||||
}
|
||||
resp, err := service.PressReleasesProvider.Display(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
service.Error(ctx, errors.New(common.ListPressReleasesFailed))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
@ -91,7 +96,7 @@ func List(ctx *gin.Context) {
|
||||
}
|
||||
resp, err := service.PressReleasesProvider.List(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
service.Error(ctx, errors.New(common.EditPressReleasesFailed))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
@ -108,7 +113,7 @@ func Edit(ctx *gin.Context) {
|
||||
req.OperatorId = int32(user.ID)
|
||||
resp, err := service.PressReleasesProvider.Edit(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
service.Error(ctx, errors.New(common.EditPressReleasesFailed))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
@ -130,7 +135,7 @@ func Get(ctx *gin.Context) {
|
||||
req.LangType = langType
|
||||
resp, err := service.PressReleasesProvider.Get(ctx, &req)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
service.Error(ctx, errors.New(common.GetPressReleasesFailed))
|
||||
return
|
||||
}
|
||||
service.Success(ctx, resp)
|
||||
|
||||
394
pkg/service/supplier/supplier.go
Normal file
394
pkg/service/supplier/supplier.go
Normal file
@ -0,0 +1,394 @@
|
||||
package supplier
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"fonchain-fiee/api/supplier"
|
||||
"fonchain-fiee/pkg/logic"
|
||||
"fonchain-fiee/pkg/model/login"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/service/upload"
|
||||
"fonchain-fiee/pkg/utils"
|
||||
"fonchain-fiee/pkg/utils/excel"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gin-gonic/gin/binding"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func GetSupplier(c *gin.Context) {
|
||||
req := &supplier.GetSupplierRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.SupplierProvider.GetSupplier(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
func CreateSupplier(c *gin.Context) {
|
||||
req := &supplier.CreateSupplierRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.SupplierProvider.CreateSupplier(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func UpdateSupplier(c *gin.Context) {
|
||||
req := &supplier.UpdateSupplierRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
info, err := service.SupplierProvider.GetSupplier(c, &supplier.GetSupplierRequest{Id: req.Id})
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
if info.Status == 3 {
|
||||
service.Error(c, errors.New("审核中不可修改")) //todo 修改:审核中并且存在审核人 不可修改
|
||||
return
|
||||
}
|
||||
if req.Status != 1 && req.Status != 2 {
|
||||
service.Error(c, errors.New("审批状态错误")) //todo 只允许前端暂存或提交审核申请
|
||||
}
|
||||
res, err := service.SupplierProvider.UpdateSupplier(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func GetSupplierList(c *gin.Context) {
|
||||
req := &supplier.GetSupplierListRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.SupplierProvider.GetSupplierList(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func CreateOrganizeDictionary(c *gin.Context) {
|
||||
req := &supplier.CreateOrganizeDictionaryRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.SupplierProvider.CreateOrganizeDictionary(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func GetOrganizeDictionaryList(c *gin.Context) {
|
||||
req := &supplier.GetOrganizeDictionaryListRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.SupplierProvider.GetOrganizeDictionaryList(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func GetCountryRegionList(c *gin.Context) {
|
||||
req := &supplier.GetCountryRegionListRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.SupplierProvider.GetCountryRegionList(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func CreateImportRecord(c *gin.Context) {
|
||||
file, err := c.FormFile("file")
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
}
|
||||
safeFilename := fmt.Sprintf("%d", time.Now().Unix()) + "_" + file.Filename
|
||||
userInfo := login.GetUserInfoFromC(c)
|
||||
fileDir := fmt.Sprintf("/fiee/supplier/%s/%s_%s", time.Now().Format("2006-01-02"), userInfo.Name, safeFilename)
|
||||
// 保存上传的文件到本地
|
||||
if err = c.SaveUploadedFile(file, safeFilename); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
if err := os.Remove(safeFilename); err != nil {
|
||||
// 处理删除文件失败的情况
|
||||
fmt.Println("Failed to delete file:", err)
|
||||
}
|
||||
}()
|
||||
inputUrl, err := upload.PutBosWithName(safeFilename, false, fileDir)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
supplierList, err := logic.ImportSupplier(safeFilename)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
if len(supplierList) == 0 {
|
||||
service.Error(c, errors.New("导入数据为空"))
|
||||
return
|
||||
}
|
||||
uuid, _ := uuid.NewUUID()
|
||||
var SuccessNum uint64
|
||||
var SupplierCodes []string
|
||||
var ErrSupplierRes []*logic.ErrSupplierRes
|
||||
for idx, i := range supplierList {
|
||||
rowNum := idx + 1
|
||||
if i.OwningEntityName == "" || i.LegalName == "" || i.CountryOrRegionName == "" || i.CompanyRegistrationNumber == "" || i.SupplierType == "" || i.ApprovalStatus == "" || i.ConnectedParty == "" {
|
||||
ErrSupplierRes = append(ErrSupplierRes, &logic.ErrSupplierRes{
|
||||
ID: rowNum,
|
||||
LegalName: i.LegalName,
|
||||
Remark: "必填项存在空值",
|
||||
})
|
||||
continue
|
||||
}
|
||||
OwningEntityRes, _ := service.SupplierProvider.GetOrganizeDictionaryInfo(c, &supplier.CreateOrganizeDictionaryRequest{Name: i.OwningEntityName})
|
||||
if OwningEntityRes == nil || OwningEntityRes.Id == 0 {
|
||||
ErrSupplierRes = append(ErrSupplierRes, &logic.ErrSupplierRes{
|
||||
ID: rowNum,
|
||||
LegalName: i.LegalName,
|
||||
Remark: "所属组织不存在",
|
||||
})
|
||||
continue
|
||||
}
|
||||
countryRegionRes, _ := service.SupplierProvider.GetCountryRegionInfo(c, &supplier.GetCountryRegionInfoRequest{ZhAndCode: i.CountryOrRegionName})
|
||||
if countryRegionRes == nil || countryRegionRes.Id == 0 {
|
||||
ErrSupplierRes = append(ErrSupplierRes, &logic.ErrSupplierRes{
|
||||
ID: rowNum,
|
||||
LegalName: i.LegalName,
|
||||
Remark: "所属国家或地区不存在",
|
||||
})
|
||||
continue
|
||||
}
|
||||
var LastReviewDate string
|
||||
if i.ApprovalDate != "" {
|
||||
t, err := time.Parse("2006-01-02", i.ApprovalDate)
|
||||
if err != nil {
|
||||
LastReviewDate = ""
|
||||
i.ApprovalDate = ""
|
||||
} else {
|
||||
LastReviewDate = t.AddDate(1, 0, 0).Format("2006-01-02")
|
||||
}
|
||||
}
|
||||
createRes, err := service.SupplierProvider.CreateSupplier(c, &supplier.CreateSupplierRequest{
|
||||
OwningEntityId: OwningEntityRes.Id,
|
||||
LegalName: i.LegalName,
|
||||
LocalName: i.LocalName,
|
||||
AbbreviationName: i.AbbreviationName,
|
||||
CountryOrRegionId: countryRegionRes.Id,
|
||||
CompanyRegistrationNumber: i.CompanyRegistrationNumber,
|
||||
SupplierType: i.SupplierType,
|
||||
ApprovalStatus: i.ApprovalStatus,
|
||||
ApprovalDate: i.ApprovalDate,
|
||||
LastReviewDate: LastReviewDate,
|
||||
LegalEntityType: i.LegalEntityType,
|
||||
SanctionsCountryScreeningResult: i.SanctionsCountryScreeningResult,
|
||||
KeyFinancial: i.KeyFinancial,
|
||||
CompanyAddress: i.CompanyAddress,
|
||||
PrimaryContact: i.PrimaryContact,
|
||||
DataOwnerDepartment: i.DataOwnerDepartment,
|
||||
BasicCompanyInformation: i.BasicCompanyInformation,
|
||||
SupplementaryText: i.SupplementaryText,
|
||||
Status: 1,
|
||||
ConnectedParty: i.ConnectedParty,
|
||||
})
|
||||
if err != nil {
|
||||
ErrSupplierRes = append(ErrSupplierRes, &logic.ErrSupplierRes{
|
||||
ID: rowNum,
|
||||
LegalName: i.LegalName,
|
||||
Remark: err.Error(),
|
||||
})
|
||||
continue
|
||||
} else {
|
||||
SupplierCodes = append(SupplierCodes, createRes.SupplierCode)
|
||||
SuccessNum++
|
||||
}
|
||||
|
||||
}
|
||||
status := 2
|
||||
outUrl := ""
|
||||
if len(ErrSupplierRes) == 0 {
|
||||
status = 1
|
||||
} else {
|
||||
var sheet1Columns = []string{"行数", "供应商法定全称", "错误信息"}
|
||||
var sheet1 = excel.NewSheet("Sheet1", ErrSupplierRes, sheet1Columns)
|
||||
ex, err := excel.NewExcelCreatorFromTemplate("./mistake.xlsx", "./supplier/excel/", "", sheet1)
|
||||
ex.UseOption(excel.OptionFileNameSuffixWithUnixTime)
|
||||
path, _, err := ex.WriteToFile()
|
||||
outUrl, err = upload.PutBos(path, "", false)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
os.RemoveAll("./supplier")
|
||||
}()
|
||||
}
|
||||
req := &supplier.CreateImportRecordRequest{
|
||||
SupplierCodes: SupplierCodes,
|
||||
Status: uint64(status),
|
||||
UserId: userInfo.ID,
|
||||
ToLeadUrl: inputUrl,
|
||||
DeriveUrl: outUrl,
|
||||
Uuid: uuid.String(),
|
||||
SuccessNum: SuccessNum,
|
||||
FailNum: uint64(len(ErrSupplierRes)),
|
||||
}
|
||||
_, err = service.SupplierProvider.CreateImportRecord(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, req)
|
||||
return
|
||||
}
|
||||
|
||||
func GetImportRecordInfo(c *gin.Context) {
|
||||
req := &supplier.GetImportRecordRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
res, err := service.SupplierProvider.GetImportRecordInfo(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
service.Success(c, res)
|
||||
return
|
||||
}
|
||||
|
||||
func GetExportList(c *gin.Context) {
|
||||
req := &supplier.GetSupplierListRequest{}
|
||||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
infoRes, err := service.SupplierProvider.GetSupplierList(c, req)
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
// 定义标题列表
|
||||
titleList := []string{
|
||||
"状态/State", "使用组织/Owning Entity", "供应商唯一编码/SupplierUnique Code", "供应商法定全称(英文)/LegalName (English)", "供应商本地名称(如有)/LocalName (if applicable)",
|
||||
"所在国家或地区/Country or Region", "公司注册编号/Company RegistrationNumber", "供应商类型/Supplier Type", "*是否关联方/Connected party", "准入状态/Approval Status", "准入日期/ApprovalDate",
|
||||
"法律实体形式/Legal Entity Type", "制裁与高风险国家筛查结果/Sanctions & High-RiskCountry Screening Result", "关键财务与付款信息/Key Financial & Payment Information",
|
||||
"公司地址/Company Address", "主要联系人、职位及联系方式/Primary Contact,Position&Details", "数据维护部门&人员/Data Owner Department/Personnel", "最后更新日期/Last Updated Date",
|
||||
"公司信息概要/Summary of Basic Company Information",
|
||||
}
|
||||
// 定义数据结构
|
||||
type DataInfo struct {
|
||||
Status string
|
||||
OwningEntity string
|
||||
SupplierUniqueCode string
|
||||
LegalName string
|
||||
LocalName string
|
||||
CountryOrRegion string
|
||||
CompanyRegistrationNumber string
|
||||
SupplierType string
|
||||
ConnectedParty string
|
||||
ApprovalStatus string
|
||||
ApprovalDate string
|
||||
LegalEntityType string
|
||||
SanctionsCountryScreeningResult string
|
||||
KeyFinancial string
|
||||
CompanyAddress string
|
||||
PrimaryContact string
|
||||
DataOwnerDepartment string
|
||||
UpdatedAt string
|
||||
BasicCompanyInformation string
|
||||
}
|
||||
// 创建员工ID到DataInfo的映射
|
||||
dataMap := make(map[string]*DataInfo)
|
||||
statusMap := map[uint64]string{
|
||||
1: "草稿",
|
||||
2: "审核中",
|
||||
3: "已驳回",
|
||||
4: "已成功",
|
||||
}
|
||||
for _, info := range infoRes.Data {
|
||||
dataMap[info.SupplierUniqueCode] = &DataInfo{
|
||||
Status: statusMap[info.Status],
|
||||
OwningEntity: info.OwningEntityName,
|
||||
SupplierUniqueCode: info.SupplierUniqueCode,
|
||||
LegalName: info.LegalName,
|
||||
LocalName: info.LocalName,
|
||||
CountryOrRegion: info.CountryOrRegionCode,
|
||||
CompanyRegistrationNumber: info.CompanyRegistrationNumber,
|
||||
SupplierType: info.SupplierType,
|
||||
ConnectedParty: info.ConnectedParty,
|
||||
ApprovalStatus: info.ApprovalStatus,
|
||||
ApprovalDate: info.ApprovalDate,
|
||||
LegalEntityType: info.LegalEntityType,
|
||||
SanctionsCountryScreeningResult: info.SanctionsCountryScreeningResult,
|
||||
KeyFinancial: info.KeyFinancial,
|
||||
CompanyAddress: info.CompanyAddress,
|
||||
PrimaryContact: info.PrimaryContact,
|
||||
DataOwnerDepartment: info.DataOwnerDepartment,
|
||||
UpdatedAt: info.UpdatedAt,
|
||||
BasicCompanyInformation: info.BasicCompanyInformation,
|
||||
}
|
||||
}
|
||||
// 生成最终数据列表
|
||||
var dataList []interface{}
|
||||
for _, data := range dataMap {
|
||||
dataList = append(dataList, &[]any{
|
||||
data.Status, data.OwningEntity, data.SupplierUniqueCode, data.LegalName, data.LocalName,
|
||||
data.CountryOrRegion, data.CompanyRegistrationNumber, data.SupplierType, data.ConnectedParty, data.ApprovalStatus, data.ApprovalDate,
|
||||
data.LegalEntityType, data.SanctionsCountryScreeningResult, data.KeyFinancial, data.CompanyAddress, data.PrimaryContact,
|
||||
data.DataOwnerDepartment, data.UpdatedAt, data.BasicCompanyInformation,
|
||||
})
|
||||
}
|
||||
|
||||
// 生成Excel文件
|
||||
content, err := utils.ToExcelByType(titleList, dataList, "slice", "")
|
||||
if err != nil {
|
||||
service.Error(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 返回Excel文件
|
||||
utils.ResponseXls(c, content, "供应商库")
|
||||
return
|
||||
}
|
||||
@ -10,7 +10,6 @@ import (
|
||||
"fonchain-fiee/api/cast"
|
||||
"fonchain-fiee/cmd/config"
|
||||
"fonchain-fiee/pkg/e"
|
||||
modelCast "fonchain-fiee/pkg/model/cast"
|
||||
"fonchain-fiee/pkg/model/login"
|
||||
"fonchain-fiee/pkg/service"
|
||||
castService "fonchain-fiee/pkg/service/cast"
|
||||
@ -377,6 +376,11 @@ func UpdateWorkImageWithTaskUUID(ctx *gin.Context) {
|
||||
service.Error(ctx, errors.New("任务已中止,不能上传图文"))
|
||||
return
|
||||
}
|
||||
resp, err := castService.UpdateWorkImageCore(ctx, req.UpdateWorkImageReq)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
if config.AppConfig.System.AppMode != "dev" {
|
||||
artistId, _ := strconv.ParseUint(req.ArtistUuid, 10, 64)
|
||||
infoResp, err = service.AccountFieeProvider.Info(context.Background(), &accountFiee.InfoRequest{
|
||||
@ -394,21 +398,6 @@ func UpdateWorkImageWithTaskUUID(ctx *gin.Context) {
|
||||
TelAreaCode: "86",
|
||||
}
|
||||
}
|
||||
req.ArtistName = infoResp.Name
|
||||
req.ArtistPhone = infoResp.TelNum
|
||||
req.ArtistPhoneAreaCode = infoResp.TelAreaCode
|
||||
artistID, _ := strconv.ParseUint(req.ArtistUuid, 10, 64)
|
||||
if _, err = castService.CheckUserBundleBalance(int32(artistID), modelCast.BalanceTypeImageValue); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
newCtx := castService.NewCtxWithUserInfo(ctx)
|
||||
req.Source = 1
|
||||
resp, err := service.CastProvider.UpdateWorkImage(newCtx, req.UpdateWorkImageReq)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
// EmployeeName 和 EmployeeNum 从 toekn 里面拿
|
||||
userInfo := login.GetUserInfoFromC(ctx)
|
||||
// 调用员工实际任务状态更新
|
||||
@ -425,6 +414,32 @@ func UpdateWorkImageWithTaskUUID(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
zap.L().Info("UpdateTaskProgress", zap.Any("resp", resp1))
|
||||
|
||||
// 记录任务工作日志,如果失败不影响主流程
|
||||
logReq := &bundle.CreateTaskWorkLogRequest{
|
||||
AssignRecordsUUID: req.AssignRecordsUUID,
|
||||
WorkUUID: resp.WorkUuid,
|
||||
Title: req.Title,
|
||||
ArtistUUID: req.ArtistUuid,
|
||||
SubNum: infoResp.SubNum,
|
||||
TelNum: infoResp.TelNum,
|
||||
ArtistName: infoResp.Name,
|
||||
OperationType: 3, // 3:完成任务
|
||||
TaskType: 2, // 2:图片
|
||||
TaskCount: 1,
|
||||
OperatorName: userInfo.Name,
|
||||
OperatorNum: userInfo.TelNum,
|
||||
}
|
||||
// 记录请求参数
|
||||
zap.L().Info("CreateTaskWorkLog request", zap.Any("req", logReq))
|
||||
logResp, err := service.BundleProvider.CreateTaskWorkLog(context.Background(), logReq)
|
||||
if err != nil {
|
||||
// 记录错误但不影响主流程
|
||||
zap.L().Error("CreateTaskWorkLog failed", zap.Error(err), zap.Any("req", logReq))
|
||||
} else {
|
||||
zap.L().Info("CreateTaskWorkLog success", zap.Any("resp", logResp))
|
||||
}
|
||||
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
@ -449,6 +464,11 @@ func UpdateWorkVideoWithUUID(ctx *gin.Context) {
|
||||
service.Error(ctx, errors.New("任务已中止,不能上传视频"))
|
||||
return
|
||||
}
|
||||
resp, err := castService.UpdateWorkVideoCore(ctx, req.UpdateWorkVideoReq)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
if config.AppConfig.System.AppMode != "dev" {
|
||||
artistId, _ := strconv.ParseUint(req.ArtistUuid, 10, 64)
|
||||
infoResp, err = service.AccountFieeProvider.Info(context.Background(), &accountFiee.InfoRequest{
|
||||
@ -466,21 +486,6 @@ func UpdateWorkVideoWithUUID(ctx *gin.Context) {
|
||||
TelAreaCode: "86",
|
||||
}
|
||||
}
|
||||
artistID, _ := strconv.ParseUint(req.ArtistUuid, 10, 64)
|
||||
if _, err = castService.CheckUserBundleBalance(int32(artistID), modelCast.BalanceTypeVideoValue); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
req.ArtistName = infoResp.Name
|
||||
req.ArtistPhone = infoResp.TelNum
|
||||
req.ArtistPhoneAreaCode = infoResp.TelAreaCode
|
||||
newCtx := castService.NewCtxWithUserInfo(ctx)
|
||||
req.Source = 1
|
||||
resp, err := service.CastProvider.UpdateWorkVideo(newCtx, req.UpdateWorkVideoReq)
|
||||
if err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
// EmployeeName 和 EmployeeNum 从 toekn 里面拿
|
||||
userInfo := login.GetUserInfoFromC(ctx)
|
||||
// 调用员工实际任务状态更新
|
||||
@ -497,6 +502,32 @@ func UpdateWorkVideoWithUUID(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
zap.L().Info("UpdateTaskProgress", zap.Any("resp", resp1))
|
||||
|
||||
// 记录任务工作日志,如果失败不影响主流程
|
||||
logReq := &bundle.CreateTaskWorkLogRequest{
|
||||
AssignRecordsUUID: req.AssignRecordsUUID,
|
||||
WorkUUID: resp.WorkUuid,
|
||||
Title: req.Title,
|
||||
ArtistUUID: req.ArtistUuid,
|
||||
SubNum: infoResp.SubNum,
|
||||
TelNum: infoResp.TelNum,
|
||||
ArtistName: infoResp.Name,
|
||||
OperationType: 3, // 3:完成任务
|
||||
TaskType: 1, // 1:视频
|
||||
TaskCount: 1,
|
||||
OperatorName: userInfo.Name,
|
||||
OperatorNum: userInfo.TelNum,
|
||||
}
|
||||
// 记录请求参数
|
||||
zap.L().Info("CreateTaskWorkLog request", zap.Any("req", logReq))
|
||||
logResp, err := service.BundleProvider.CreateTaskWorkLog(context.Background(), logReq)
|
||||
if err != nil {
|
||||
// 记录错误但不影响主流程
|
||||
zap.L().Error("CreateTaskWorkLog failed", zap.Error(err), zap.Any("req", logReq))
|
||||
} else {
|
||||
zap.L().Info("CreateTaskWorkLog success", zap.Any("resp", logResp))
|
||||
}
|
||||
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
@ -676,6 +707,32 @@ func UpdateVideoScriptWithUUID(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
zap.L().Info("UpdateTaskProgress", zap.Any("resp", resp1))
|
||||
|
||||
// 记录任务工作日志,如果失败不影响主流程
|
||||
logReq := &bundle.CreateTaskWorkLogRequest{
|
||||
AssignRecordsUUID: req.AssignRecordsUUID,
|
||||
WorkUUID: resp.Uuid,
|
||||
Title: req.Title,
|
||||
ArtistUUID: req.ArtistUuid,
|
||||
SubNum: infoResp.SubNum,
|
||||
TelNum: infoResp.TelNum,
|
||||
ArtistName: infoResp.Name,
|
||||
OperationType: 3, // 3:完成任务
|
||||
TaskType: 1, // 1:视频(脚本属于视频类型)
|
||||
TaskCount: 1,
|
||||
OperatorName: userInfo.Name,
|
||||
OperatorNum: userInfo.TelNum,
|
||||
}
|
||||
// 记录请求参数
|
||||
zap.L().Info("CreateTaskWorkLog request", zap.Any("req", logReq))
|
||||
logResp, err := service.BundleProvider.CreateTaskWorkLog(context.Background(), logReq)
|
||||
if err != nil {
|
||||
// 记录错误但不影响主流程
|
||||
zap.L().Error("CreateTaskWorkLog failed", zap.Error(err), zap.Any("req", logReq))
|
||||
} else {
|
||||
zap.L().Info("CreateTaskWorkLog success", zap.Any("resp", logResp))
|
||||
}
|
||||
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
@ -12,14 +12,15 @@ import (
|
||||
"fonchain-fiee/pkg/model"
|
||||
"fonchain-fiee/pkg/service"
|
||||
"fonchain-fiee/pkg/utils"
|
||||
"io"
|
||||
|
||||
cmdConf "fonchain-fiee/cmd/config"
|
||||
|
||||
"github.com/disintegration/imaging"
|
||||
"github.com/fonchain_enterprise/utils/objstorage"
|
||||
"github.com/gin-gonic/gin"
|
||||
uuid "github.com/satori/go.uuid"
|
||||
"io"
|
||||
|
||||
ffmpeg "github.com/u2takey/ffmpeg-go"
|
||||
"go.uber.org/zap"
|
||||
"io/ioutil"
|
||||
"mime/multipart"
|
||||
"net/url"
|
||||
@ -28,6 +29,9 @@ import (
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
ffmpeg "github.com/u2takey/ffmpeg-go"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -216,7 +220,7 @@ func quickBos(file *multipart.FileHeader, mediaType string, mask string, source
|
||||
return
|
||||
}
|
||||
}
|
||||
var objectName string = fmt.Sprintf("%s/%s/%s", config.ConfigData.Oss.BaseDir, config.Env, filePath)
|
||||
var objectName string = fmt.Sprintf("%s/%s/%s", config.ConfigData.Oss.BaseDir, cmdConf.AppConfig.System.AppMode, filePath)
|
||||
BOSClient, _ := objstorage.NewOSS(os.Getenv(config.ConfigData.Oss.AccessKeyId), os.Getenv(config.ConfigData.Oss.AccessKeySecret), os.Getenv(config.ConfigData.Oss.Endpoint))
|
||||
_, err = BOSClient.PutObjectFromBytes(os.Getenv(config.ConfigData.Oss.BucketName), objectName, fileBytes)
|
||||
if err != nil {
|
||||
@ -290,7 +294,7 @@ func PutBos(filePath string, mediaType string, needRemove bool) (url string, err
|
||||
}
|
||||
}
|
||||
filePath = strings.Replace(filePath, model.MediaPath, "", 1)
|
||||
var objectName string = fmt.Sprintf("%s/%s%s", config.ConfigData.Oss.BaseDir, config.Env, filePath)
|
||||
var objectName string = fmt.Sprintf("%s/%s%s", config.ConfigData.Oss.BaseDir, cmdConf.AppConfig.System.AppMode, filePath)
|
||||
_, err = BOSClient.PutObjectFromBytes(os.Getenv(config.ConfigData.Oss.BucketName), objectName, fileBytes)
|
||||
if err != nil {
|
||||
fmt.Println("=== PutBos PutObject err ", err)
|
||||
@ -347,3 +351,30 @@ func getEnvDir(cloudStoreSubPath string) (ep string) {
|
||||
ep, _ = url.JoinPath("fiee", cloudStoreSubPath)
|
||||
return ep
|
||||
}
|
||||
func PutBosWithName(filePath string, needRemove bool, ossPath string) (url string, err error) {
|
||||
BOSClient, err := objstorage.NewOSS(os.Getenv(config.ConfigData.Oss.AccessKeyId), os.Getenv(config.ConfigData.Oss.AccessKeySecret), os.Getenv(config.ConfigData.Oss.Endpoint))
|
||||
//BOSClient, err := objstorage.NewOSS(config.ConfigData.Oss.AccessKeyId, config.ConfigData.Oss.AccessKeySecret, config.ConfigData.Oss.Endpoint)
|
||||
if err != nil {
|
||||
//logger.Errorf("PutBosWithName err1 ", err)
|
||||
err = errors.New(e.GetMsg(e.ErrorUploadBos))
|
||||
return
|
||||
}
|
||||
if ossPath == "" {
|
||||
ossPath = filePath[1:]
|
||||
}
|
||||
var objectName string = fmt.Sprintf("%s/%s%s", config.ConfigData.Oss.BaseDir, cmdConf.AppConfig.System.AppMode, ossPath)
|
||||
_, err = BOSClient.PutObject(os.Getenv(config.ConfigData.Oss.BucketName), objectName, filePath)
|
||||
//_, err = BOSClient.PutObject(config.ConfigData.Oss.BucketName, objectName, filePath)
|
||||
if err != nil {
|
||||
//logger.Errorf("PutBosWithName err2 ", err)
|
||||
err = errors.New(e.GetMsg(e.ErrorUploadBos))
|
||||
return
|
||||
}
|
||||
//删除本地文件
|
||||
if needRemove {
|
||||
_ = os.Remove(filePath)
|
||||
}
|
||||
url = fmt.Sprintf("%s/%s", os.Getenv(config.ConfigData.Oss.CdnHost), objectName)
|
||||
//url = fmt.Sprintf("%s/%s", config.ConfigData.Oss.CdnHost, objectName)
|
||||
return
|
||||
}
|
||||
|
||||
381
pkg/utils/excel/excelInter.go
Normal file
381
pkg/utils/excel/excelInter.go
Normal file
@ -0,0 +1,381 @@
|
||||
// Package excel -----------------------------
|
||||
// @file : templateInter.go
|
||||
// @author : JJXu
|
||||
// @contact : wavingbear@163.com
|
||||
// @time : 2022/7/23 15:34
|
||||
// -------------------------------------------
|
||||
package excel
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"sync"
|
||||
|
||||
"github.com/tealeg/xlsx"
|
||||
"github.com/xuri/excelize/v2"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrSheetNotExist = errors.New("sheet does not exist")
|
||||
ErrSheetDataFormatNotSupport = errors.New("sheet data format not support")
|
||||
//ErrSheetNameNotInTemplate = errors.New("sheet name not in emailTemplate")
|
||||
)
|
||||
|
||||
// ======================================================================================================================
|
||||
//
|
||||
// Sheet define
|
||||
type HeaderRow struct {
|
||||
RowNum int //行号
|
||||
Values []string
|
||||
}
|
||||
|
||||
// 抽象工作簿
|
||||
type Sheet interface {
|
||||
GetData() any //数据,支持struct、[]struct、[]*struct三种类型
|
||||
SheetName() string //表名称
|
||||
SheetHeaders() []string //表头名称,没有则跳过插入表头的步骤
|
||||
GetJsonFiledList() []string //指定字段的排列顺序,默认按照结构体中的顺序排列(表头与数据没有关联,使用这个指定字段插入顺序)
|
||||
}
|
||||
|
||||
// 实例化工作簿,使用模板生成excel的话用这个
|
||||
func NewTemplateSheet(sheetName string, datas any) Sheet {
|
||||
return &newSheetDefine{
|
||||
Datas: datas,
|
||||
Name: sheetName,
|
||||
}
|
||||
}
|
||||
|
||||
// 实例化工作簿,不通过模板生成excel的话用这个
|
||||
func NewSheet(sheetName string, datas any, headers []string, jsonFiledList ...[]string) Sheet {
|
||||
st := &newSheetDefine{
|
||||
Datas: datas,
|
||||
Name: sheetName,
|
||||
Headers: headers,
|
||||
}
|
||||
if jsonFiledList != nil {
|
||||
st.JsonFiledList = jsonFiledList[0]
|
||||
}
|
||||
return st
|
||||
}
|
||||
|
||||
// 定义一个能够通用的工作簿结构,此结构必须遵循Sheet接口规范
|
||||
type newSheetDefine struct {
|
||||
Datas any
|
||||
Name string
|
||||
Headers []string
|
||||
JsonFiledList []string
|
||||
}
|
||||
|
||||
func (s *newSheetDefine) GetData() any {
|
||||
return s.Datas
|
||||
}
|
||||
func (s *newSheetDefine) SheetName() string {
|
||||
return s.Name
|
||||
}
|
||||
func (s *newSheetDefine) SheetHeaders() []string {
|
||||
return s.Headers
|
||||
}
|
||||
func (s *newSheetDefine) GetJsonFiledList() []string {
|
||||
return s.JsonFiledList
|
||||
}
|
||||
|
||||
//======================================================================================================================
|
||||
// Sheet define
|
||||
|
||||
// WriteToExcel 通过模板文件写入数据并另存为
|
||||
// param fileName : 文件名
|
||||
// param filesSuffix : 文件后缀名生成函数
|
||||
// param fileRoot : 导出目录
|
||||
// param templatePath : 模板文件路径
|
||||
// param sheets : Sheet类型的数据,类型为[]Sheet
|
||||
// return path : 文件路径
|
||||
// return exfileName : 导出后的文件名
|
||||
// return err
|
||||
func WriteToExcel(fileName string, fileRoot string, templatePath string, sheets ...Sheet) (path string, exFileName string, err error) {
|
||||
var exc *Excel
|
||||
exc, err = NewExcelCreatorFromTemplate(fileName, fileRoot, templatePath, sheets...)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
exc.UseOption(OptionFileNameSuffixWithUnixTime)
|
||||
return exc.WriteToFile()
|
||||
}
|
||||
|
||||
// ReadDataFromExcel 从excel文件读取数据
|
||||
func ReadDataFromExcel(filepath string, sheetName string, handler func(rowIndex int, rows []string)) error {
|
||||
ex := Excel{OriginFilePath: filepath}
|
||||
return ex.ReadSheetData(sheetName, handler)
|
||||
}
|
||||
|
||||
// ReadDataFromBytes 从io口读取数据,用户http上传的附件
|
||||
func ReadDataFromBytes(file io.Reader, sheetName string, handler func(rowIndex int, row []string)) error {
|
||||
exce, err := excelize.OpenReader(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var ex = Excel{ex: exce}
|
||||
return ex.ReadSheetData(sheetName, handler)
|
||||
}
|
||||
|
||||
// 读取模板并创建工作表生成器
|
||||
func NewExcelCreatorFromTemplate(fileName string, fileRoot string, templatePath string, sheets ...Sheet) (exc *Excel, err error) {
|
||||
exc = &Excel{
|
||||
SaveRoot: fileRoot,
|
||||
SaveName: fileName,
|
||||
OriginFilePath: templatePath,
|
||||
rwLock: sync.RWMutex{},
|
||||
}
|
||||
if sheets != nil {
|
||||
err = exc.AddSheets(sheets...)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
return exc, nil
|
||||
}
|
||||
|
||||
// 新建文件并创建工作表生成器
|
||||
func NewExcelCreatorWithNewFile(fileName string, fileRoot string, sheets ...Sheet) (exc *Excel, err error) {
|
||||
return NewExcelCreatorFromTemplate(fileName, fileRoot, "", sheets...)
|
||||
}
|
||||
|
||||
type Excel struct {
|
||||
ex *excelize.File
|
||||
SaveRoot string
|
||||
SaveName string
|
||||
OriginFilePath string
|
||||
Sheets map[string]Sheet
|
||||
rwLock sync.RWMutex
|
||||
Opts []Option
|
||||
After []Option
|
||||
}
|
||||
|
||||
// UseOption 使用可选项
|
||||
func (s *Excel) UseOption(opts ...Option) {
|
||||
if opts != nil {
|
||||
s.Opts = append(s.Opts, opts...)
|
||||
}
|
||||
}
|
||||
func (s *Excel) AfterAddData(after ...Option) {
|
||||
if after != nil {
|
||||
s.After = append(s.After, after...)
|
||||
}
|
||||
}
|
||||
|
||||
// 添加工作簿
|
||||
// 注意如果添加相同的工作簿,之前的会被覆盖
|
||||
func (s *Excel) AddSheets(sheets ...Sheet) (err error) {
|
||||
if s.Sheets == nil {
|
||||
s.Sheets = make(map[string]Sheet, 0)
|
||||
}
|
||||
for _, sheet := range sheets {
|
||||
var sheetName = sheet.SheetName()
|
||||
s.Sheets[sheetName] = sheet
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 删除工作簿
|
||||
func (s *Excel) DeleteSheets(sheetName string) error {
|
||||
if s.Sheets == nil {
|
||||
return nil
|
||||
} else if s.Sheets[sheetName] != nil {
|
||||
delete(s.Sheets, sheetName)
|
||||
} else {
|
||||
return ErrSheetNotExist
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 读取工作簿
|
||||
func (s *Excel) ReadSheetData(sheetName string, handler func(rowIndex int, row []string)) (err error) {
|
||||
if s.ex == nil {
|
||||
s.ex, err = excelize.OpenFile(s.OriginFilePath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
datas, err := s.ex.GetRows(sheetName)
|
||||
for i, row := range datas {
|
||||
handler(i, row)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 写入到文件
|
||||
func (s *Excel) WriteToFile() (path string, fileName string, err error) {
|
||||
if s.ex == nil {
|
||||
if s.OriginFilePath == "" {
|
||||
s.ex = excelize.NewFile()
|
||||
} else {
|
||||
s.ex, err = excelize.OpenFile(s.OriginFilePath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
if s.Opts != nil {
|
||||
for _, opt := range s.Opts {
|
||||
opt(s)
|
||||
}
|
||||
}
|
||||
//插入数据
|
||||
for sheetName, st := range s.Sheets {
|
||||
//添加表头,没有定义则不插入
|
||||
if st.SheetHeaders() != nil {
|
||||
for i, c := range st.SheetHeaders() {
|
||||
err = s.ex.SetCellValue(sheetName, GetCellIndex(1, i+1), c)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
headerStyleID, errs := s.ex.NewStyle(NewDefaultHeaderStyle())
|
||||
if errs != nil {
|
||||
fmt.Println(errs)
|
||||
err = errs
|
||||
return
|
||||
}
|
||||
//表头设置为默认样式,边框加粗、字体加粗
|
||||
if err = s.ex.SetCellStyle(st.SheetName(), "A1", GetCellIndex(1, len(st.SheetHeaders())), headerStyleID); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
//添加数据
|
||||
var firstRow = s.getFirstEmptyRowIndex(s.ex, sheetName)
|
||||
var SheetData = reflect.ValueOf(st.GetData())
|
||||
var SheetType = reflect.TypeOf(st.GetData())
|
||||
writerFunc, exists := writerMap[SheetData.Kind()]
|
||||
if exists {
|
||||
err = writerFunc(s, st, SheetData, SheetType, firstRow)
|
||||
} else {
|
||||
return "", "", ErrSheetDataFormatNotSupport
|
||||
}
|
||||
}
|
||||
if s.After != nil {
|
||||
for _, after := range s.After {
|
||||
after(s)
|
||||
}
|
||||
}
|
||||
//检测并生成目录
|
||||
_ = os.MkdirAll(s.SaveRoot, os.ModePerm)
|
||||
//保存
|
||||
path = filepath.ToSlash(filepath.Join(s.SaveRoot, s.SaveName))
|
||||
fileName = s.SaveName
|
||||
s.rwLock.Lock()
|
||||
if err = s.ex.SaveAs(path); err != nil {
|
||||
log.Println(fmt.Sprintf("save file error :%v", err))
|
||||
s.rwLock.Unlock()
|
||||
return
|
||||
}
|
||||
s.rwLock.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
// getJsonFieldList 获取json字段列表
|
||||
func (s *Excel) getJsonFieldList(sheetType reflect.Type) (tagList []string) {
|
||||
t := sheetType.Elem()
|
||||
if t.Kind() == reflect.Ptr {
|
||||
t = t.Elem()
|
||||
if t.Kind() != reflect.Struct {
|
||||
return
|
||||
}
|
||||
}
|
||||
for i := 0; i < t.NumField(); i++ {
|
||||
var tag = t.Field(i).Tag.Get("json")
|
||||
if tag != "" {
|
||||
tagList = append(tagList, tag)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// dataToMap 数据转字典
|
||||
func (s *Excel) dataToMap(sheet reflect.Value, sheetType reflect.Type) (dataMap map[string]any) {
|
||||
dataMap = make(map[string]any)
|
||||
t := sheetType.Elem()
|
||||
//指针类型结构体拿真实的对象
|
||||
if t.Kind() == reflect.Ptr {
|
||||
t = t.Elem()
|
||||
sheet = sheet.Elem()
|
||||
}
|
||||
for i := 0; i < t.NumField(); i++ {
|
||||
var tag = t.Field(i).Tag.Get("json")
|
||||
if tag != "" {
|
||||
dataMap[t.Field(i).Tag.Get("json")] = sheet.Field(i).Interface()
|
||||
}
|
||||
}
|
||||
return dataMap
|
||||
}
|
||||
|
||||
// getFirstEmptyRowIndex 获取首个空行的索引位置
|
||||
func (s *Excel) getFirstEmptyRowIndex(ex *excelize.File, sheetName string) (index int) {
|
||||
rows, err := ex.GetRows(sheetName)
|
||||
if err != nil {
|
||||
return 1
|
||||
}
|
||||
return len(rows)
|
||||
}
|
||||
|
||||
func ToExcel(titleList []string, dataList []interface{}) (content io.ReadSeeker) {
|
||||
// 生成一个新的文件
|
||||
file := xlsx.NewFile()
|
||||
// 添加sheet页
|
||||
sheet, _ := file.AddSheet("Sheet1")
|
||||
// 插入表头
|
||||
titleRow := sheet.AddRow()
|
||||
for _, v := range titleList {
|
||||
cell := titleRow.AddCell()
|
||||
cell.Value = v
|
||||
}
|
||||
// 插入内容
|
||||
for _, v := range dataList {
|
||||
row := sheet.AddRow()
|
||||
row.WriteStruct(v, -1)
|
||||
}
|
||||
|
||||
var buffer bytes.Buffer
|
||||
_ = file.Write(&buffer)
|
||||
file.Save("1.xlsx")
|
||||
content = bytes.NewReader(buffer.Bytes())
|
||||
return
|
||||
}
|
||||
|
||||
// 自动设置单元格宽度
|
||||
func (s *Excel) autoResetCellWidth(sheetObj Sheet) {
|
||||
// 获取最大字符宽度
|
||||
maxWidths := make(map[int]int)
|
||||
var sheetData = reflect.ValueOf(sheetObj.GetData())
|
||||
var rowLen = 1
|
||||
var columnLen = len(sheetObj.GetJsonFiledList())
|
||||
if sheetData.Kind() == reflect.Slice {
|
||||
rowLen = sheetData.Len()
|
||||
}
|
||||
limitWidth := 90
|
||||
for col := 1; col <= columnLen; col++ {
|
||||
var maxWidth int
|
||||
for row := 0; row < rowLen; row++ {
|
||||
value, _ := s.ex.GetCellValue(sheetObj.SheetName(), GetCellIndex(row+1, col))
|
||||
width := len(value)
|
||||
if width > limitWidth {
|
||||
width = limitWidth
|
||||
}
|
||||
if width > maxWidth {
|
||||
maxWidth = width
|
||||
}
|
||||
}
|
||||
maxWidths[col] = maxWidth
|
||||
}
|
||||
|
||||
// 设置列宽度
|
||||
for col, width := range maxWidths {
|
||||
colChar := GetColumnIndex(col)
|
||||
s.ex.SetColWidth(sheetObj.SheetName(), colChar, colChar, float64(width+2))
|
||||
}
|
||||
}
|
||||
52
pkg/utils/excel/options.go
Normal file
52
pkg/utils/excel/options.go
Normal file
@ -0,0 +1,52 @@
|
||||
// Package excel -----------------------------
|
||||
// @file : options.go
|
||||
// @author : JJXu
|
||||
// @contact : wavingBear@163.com
|
||||
// @time : 2022/12/19 12:41:40
|
||||
// -------------------------------------------
|
||||
package excel
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Option func(excel *Excel)
|
||||
|
||||
// func AddSaveFileSuffixWithUnixTime(excel *Excel) {
|
||||
// excel.SaveName
|
||||
// fmt.Sprintf("%v", time.Now().Unix())
|
||||
// }
|
||||
//
|
||||
// 时间戳作为文件后缀
|
||||
func OptionFileNameSuffixWithUnixTime(excel *Excel) {
|
||||
ext := filepath.Ext(excel.SaveName)
|
||||
name := strings.Split(excel.SaveName, ext)[0]
|
||||
excel.SaveName = fmt.Sprintf("%s_%v%s", name, time.Now().Unix(), ext)
|
||||
}
|
||||
|
||||
// 为第一行添加表头
|
||||
func AfterAddHeader1(sheet Sheet, text string) func(excel *Excel) {
|
||||
return func(excel *Excel) {
|
||||
err := excel.ex.InsertRows(sheet.SheetName(), 1, 1)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = excel.ex.SetCellValue(sheet.SheetName(), GetCellIndex(1, 1), text)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
headerStyleID, errs := excel.ex.NewStyle(NewHeaderOneStyle())
|
||||
if errs != nil {
|
||||
fmt.Println(errs)
|
||||
err = errs
|
||||
return
|
||||
}
|
||||
//表头设置为默认样式,边框加粗、字体加粗
|
||||
_ = excel.ex.SetCellStyle(sheet.SheetName(), "A1", GetCellIndex(1, len(sheet.SheetHeaders())), headerStyleID)
|
||||
_ = excel.ex.MergeCell(sheet.SheetName(), "A1", GetCellIndex(1, len(sheet.SheetHeaders())))
|
||||
|
||||
}
|
||||
}
|
||||
54
pkg/utils/excel/style.go
Normal file
54
pkg/utils/excel/style.go
Normal file
@ -0,0 +1,54 @@
|
||||
// Package excel -----------------------------
|
||||
// @file : style.go
|
||||
// @author : JJXu
|
||||
// @contact : wavingbear@163.com
|
||||
// @time : 2023/9/1 13:50
|
||||
// -------------------------------------------
|
||||
package excel
|
||||
|
||||
import (
|
||||
"github.com/xuri/excelize/v2"
|
||||
)
|
||||
|
||||
func NewDefaultHeaderStyle() *excelize.Style {
|
||||
return &excelize.Style{
|
||||
Border: []excelize.Border{
|
||||
{Type: "left", Color: "000000", Style: 2},
|
||||
{Type: "top", Color: "000000", Style: 2},
|
||||
{Type: "bottom", Color: "000000", Style: 2},
|
||||
{Type: "right", Color: "000000", Style: 2},
|
||||
},
|
||||
Font: &excelize.Font{Bold: true, Size: 12},
|
||||
Alignment: &excelize.Alignment{
|
||||
Horizontal: "center",
|
||||
},
|
||||
}
|
||||
}
|
||||
func NewDefaultDataStyle() *excelize.Style {
|
||||
return &excelize.Style{
|
||||
Border: []excelize.Border{
|
||||
{Type: "left", Color: "000000", Style: 1},
|
||||
{Type: "bottom", Color: "000000", Style: 1},
|
||||
{Type: "right", Color: "000000", Style: 1},
|
||||
},
|
||||
Font: &excelize.Font{Size: 12},
|
||||
Alignment: &excelize.Alignment{
|
||||
Horizontal: "left",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewHeaderOneStyle() *excelize.Style {
|
||||
return &excelize.Style{
|
||||
Border: []excelize.Border{
|
||||
{Type: "left", Color: "000000", Style: 2},
|
||||
{Type: "top", Color: "000000", Style: 2},
|
||||
{Type: "bottom", Color: "000000", Style: 2},
|
||||
{Type: "right", Color: "000000", Style: 2},
|
||||
},
|
||||
Font: &excelize.Font{Bold: true, Size: 14},
|
||||
Alignment: &excelize.Alignment{
|
||||
Horizontal: "center",
|
||||
},
|
||||
}
|
||||
}
|
||||
41
pkg/utils/excel/utils.go
Normal file
41
pkg/utils/excel/utils.go
Normal file
@ -0,0 +1,41 @@
|
||||
// Package utils -----------------------------
|
||||
// @file : excelHelper.go
|
||||
// @author : JJXu
|
||||
// @contact : wavingbear@163.com
|
||||
// @time : 2022/6/9 13:41
|
||||
// -------------------------------------------
|
||||
package excel
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// 行列坐标值转换为excel的坐标。注意row和columnCount的初始值都是1
|
||||
func GetCellIndex(row int, columnCount int) string {
|
||||
var column = GetColumnIndex(columnCount)
|
||||
return fmt.Sprintf("%s%d", column, row)
|
||||
}
|
||||
|
||||
// 获取excel的列索引
|
||||
var columnIndices = []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
|
||||
|
||||
func GetColumnIndex(num int) string {
|
||||
num--
|
||||
var column = columnIndices[num%26]
|
||||
for num = num / 26; num > 0; num = num / 26 {
|
||||
column = columnIndices[(num-1)%26] + column
|
||||
num--
|
||||
}
|
||||
return column
|
||||
}
|
||||
|
||||
func Int[T int | uint | uint8 | uint32 | uint64 | int32 | int64](value string) T {
|
||||
v, _ := strconv.Atoi(value)
|
||||
return T(v)
|
||||
}
|
||||
|
||||
func Float[T float64 | float32](value string) T {
|
||||
v, _ := strconv.ParseFloat(value, 64)
|
||||
return T(v)
|
||||
}
|
||||
81
pkg/utils/excel/writer.go
Normal file
81
pkg/utils/excel/writer.go
Normal file
@ -0,0 +1,81 @@
|
||||
// Package excel -----------------------------
|
||||
// @file : writer.go
|
||||
// @author : JJXu
|
||||
// @contact : wavingbear@163.com
|
||||
// @time : 2023/9/1 14:11
|
||||
// -------------------------------------------
|
||||
package excel
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
var writerMap = map[reflect.Kind]func(exc *Excel, sheetObj Sheet, SheetData reflect.Value, SheetType reflect.Type, firstRow int) error{
|
||||
reflect.Slice: sliceWriter,
|
||||
reflect.Struct: structWriter,
|
||||
}
|
||||
|
||||
func RegisterWriter(dataKind reflect.Kind, function func(exc *Excel, sheetObj Sheet, SheetData reflect.Value, SheetType reflect.Type, firstRow int) error) error {
|
||||
if _, exists := writerMap[dataKind]; exists {
|
||||
return errors.New(fmt.Sprintf("dataKind: %v has existed", dataKind))
|
||||
}
|
||||
writerMap[dataKind] = function
|
||||
return nil
|
||||
}
|
||||
|
||||
func sliceWriter(exc *Excel, sheetObj Sheet, SheetData reflect.Value, SheetDataType reflect.Type, firstRow int) error {
|
||||
var cellNameList = sheetObj.GetJsonFiledList()
|
||||
if cellNameList == nil {
|
||||
cellNameList = exc.getJsonFieldList(SheetDataType)
|
||||
}
|
||||
var rowLen = SheetData.Len()
|
||||
for i := 0; i < rowLen; i++ {
|
||||
var dataMap = exc.dataToMap(SheetData.Index(i), SheetDataType)
|
||||
for column, v := range cellNameList {
|
||||
var axis = GetCellIndex(i+firstRow+1, column+1)
|
||||
err := exc.ex.SetCellValue(sheetObj.SheetName(), axis, dataMap[v])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
//设置数据格式
|
||||
dataStyleID, errs := exc.ex.NewStyle(NewDefaultDataStyle())
|
||||
if errs != nil {
|
||||
return errs
|
||||
}
|
||||
if err := exc.ex.SetCellStyle(sheetObj.SheetName(), GetCellIndex(firstRow+1, 1), GetCellIndex(rowLen+1, len(sheetObj.SheetHeaders())), dataStyleID); err != nil {
|
||||
return err
|
||||
}
|
||||
//设置默认列宽
|
||||
//exc.ex.SetColWidth(sheetObj.SheetName(), GetColumnIndex(1), GetColumnIndex(len(sheetObj.SheetHeaders())), 12.0)
|
||||
exc.autoResetCellWidth(sheetObj)
|
||||
return nil
|
||||
}
|
||||
|
||||
func structWriter(exc *Excel, sheetObj Sheet, SheetData reflect.Value, SheetType reflect.Type, firstRow int) error {
|
||||
var cellNameList = exc.getJsonFieldList(SheetType)
|
||||
var dataMap = exc.dataToMap(SheetData, SheetType)
|
||||
for column, v := range cellNameList {
|
||||
var axis = GetCellIndex(firstRow+1, column+1)
|
||||
err := exc.ex.SetCellValue(sheetObj.SheetName(), axis, dataMap[v])
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
return err
|
||||
}
|
||||
}
|
||||
//设置数据格式
|
||||
dataStyleID, err := exc.ex.NewStyle(NewDefaultDataStyle())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err = exc.ex.SetCellStyle(sheetObj.SheetName(), GetCellIndex(firstRow, 1), GetCellIndex(firstRow+1, len(sheetObj.SheetHeaders())), dataStyleID); err != nil {
|
||||
return err
|
||||
}
|
||||
//设置默认列宽
|
||||
//exc.ex.SetColWidth(sheetObj.SheetName(), GetColumnIndex(1), GetColumnIndex(len(sheetObj.SheetHeaders())), 12.0)
|
||||
exc.autoResetCellWidth(sheetObj)
|
||||
return nil
|
||||
}
|
||||
555
pkg/utils/img/imageproc.go
Normal file
555
pkg/utils/img/imageproc.go
Normal file
@ -0,0 +1,555 @@
|
||||
package img
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/gif"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/disintegration/imaging"
|
||||
)
|
||||
|
||||
// ResizeMode controls how the source image is mapped to the target WxH.
|
||||
//
|
||||
// - ResizeModeFit: contain (keep aspect), no cropping; resulting image may be smaller than WxH
|
||||
// - ResizeModeFill: cover + crop (center crop) to exactly WxH
|
||||
// - ResizeModePad: keep aspect + pad (letterbox) to exactly WxH (no crop, no stretch)
|
||||
//
|
||||
// If you only pass a single dimension (e.g. W>0, H=0), Fit will keep aspect.
|
||||
// Fill/Pad requires both W and H.
|
||||
//
|
||||
// Note: GIF input will be processed as a single frame (first frame).
|
||||
// If you need animated GIF support, we can extend this later.
|
||||
type ResizeMode string
|
||||
|
||||
const (
|
||||
ResizeModeFit ResizeMode = "fit"
|
||||
ResizeModeFill ResizeMode = "fill"
|
||||
// ResizeModePad keeps aspect ratio (no crop, no stretch) and pads to exactly WxH.
|
||||
// Typical use: 16:9 -> 1024x1024 with white/black bars.
|
||||
ResizeModePad ResizeMode = "pad"
|
||||
)
|
||||
|
||||
type Options struct {
|
||||
TargetWidth int
|
||||
TargetHeight int
|
||||
MaxSizeMB float64
|
||||
|
||||
Mode ResizeMode
|
||||
|
||||
// PadColor is used only when Mode == ResizeModePad.
|
||||
// Default: white.
|
||||
PadColor color.Color
|
||||
|
||||
// OutputDir is where the processed image will be written.
|
||||
// Default: ./runtime/tmp/images/processed
|
||||
OutputDir string
|
||||
|
||||
// Timeout controls total download time.
|
||||
// Default: 30s.
|
||||
Timeout time.Duration
|
||||
|
||||
// MaxDownloadMB caps download size to protect memory/disk.
|
||||
// Default: max( maxSizeMB*6, 30MB ).
|
||||
MaxDownloadMB float64
|
||||
|
||||
// MinQuality is the minimum JPEG quality to try (1-100).
|
||||
// Default: 10. If compression still can't meet MaxSizeMB, returns error.
|
||||
MinQuality int
|
||||
|
||||
// MaxRetries controls how many quality adjustments to attempt.
|
||||
// Default: 15.
|
||||
MaxRetries int
|
||||
|
||||
// AllowResolutionReduction allows reducing resolution further if compression fails.
|
||||
// Default: false.
|
||||
AllowResolutionReduction bool
|
||||
|
||||
// ForceJPEG forces output to JPEG format even if input is PNG/GIF/etc.
|
||||
// If image has alpha channel, it will be flattened to white background.
|
||||
// Default: false.
|
||||
ForceJPEG bool
|
||||
}
|
||||
|
||||
// ProcessFromURL downloads an image from imgURL, resizes it, compresses it to <= MaxSizeMB,
|
||||
// and returns the local output path.
|
||||
//
|
||||
// Contract:
|
||||
// - imgURL: http/https
|
||||
// - TargetWidth/TargetHeight: pixels, >=0
|
||||
// - MaxSizeMB: >0
|
||||
// - returns: absolute or relative file path (depending on OutputDir), and error
|
||||
func ProcessFromURL(imgURL string, opt Options) (string, error) {
|
||||
if strings.TrimSpace(imgURL) == "" {
|
||||
return "", errors.New("imgURL is empty")
|
||||
}
|
||||
u, err := url.Parse(imgURL)
|
||||
if err != nil || (u.Scheme != "http" && u.Scheme != "https") {
|
||||
return "", errors.New("imgURL must be http/https")
|
||||
}
|
||||
if opt.MaxSizeMB <= 0 {
|
||||
return "", errors.New("MaxSizeMB must be > 0")
|
||||
}
|
||||
if opt.TargetWidth < 0 || opt.TargetHeight < 0 {
|
||||
return "", errors.New("TargetWidth/TargetHeight must be >= 0")
|
||||
}
|
||||
if opt.TargetWidth == 0 && opt.TargetHeight == 0 {
|
||||
return "", errors.New("TargetWidth and TargetHeight cannot both be 0")
|
||||
}
|
||||
if opt.Mode == "" {
|
||||
opt.Mode = ResizeModeFit
|
||||
}
|
||||
if opt.Mode != ResizeModeFit && opt.Mode != ResizeModeFill && opt.Mode != ResizeModePad {
|
||||
return "", errors.New("invalid resize Mode")
|
||||
}
|
||||
if (opt.Mode == ResizeModeFill || opt.Mode == ResizeModePad) && (opt.TargetWidth == 0 || opt.TargetHeight == 0) {
|
||||
return "", errors.New("fill/pad mode requires both TargetWidth and TargetHeight")
|
||||
}
|
||||
if opt.Timeout <= 0 {
|
||||
opt.Timeout = 30 * time.Second
|
||||
}
|
||||
if opt.OutputDir == "" {
|
||||
opt.OutputDir = filepath.FromSlash("./runtime/tmp/images/processed")
|
||||
}
|
||||
if opt.MaxDownloadMB <= 0 {
|
||||
opt.MaxDownloadMB = opt.MaxSizeMB * 6
|
||||
if opt.MaxDownloadMB < 30 {
|
||||
opt.MaxDownloadMB = 30
|
||||
}
|
||||
if opt.MaxDownloadMB > 200 {
|
||||
opt.MaxDownloadMB = 200
|
||||
}
|
||||
}
|
||||
if opt.MinQuality <= 0 {
|
||||
opt.MinQuality = 10
|
||||
}
|
||||
if opt.MinQuality > 100 {
|
||||
opt.MinQuality = 100
|
||||
}
|
||||
if opt.MaxRetries <= 0 {
|
||||
opt.MaxRetries = 15
|
||||
}
|
||||
|
||||
// Ensure output dir exists.
|
||||
if err := os.MkdirAll(opt.OutputDir, os.ModePerm); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), opt.Timeout)
|
||||
defer cancel()
|
||||
|
||||
data, contentType, err := downloadWithLimit(ctx, imgURL, int64(opt.MaxDownloadMB*1024*1024))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
img, fmtName, err := decodeImage(data, contentType)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
// Check if image already meets requirements
|
||||
if alreadyMeetsRequirements(img, data, opt) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
img = applyResize(img, opt)
|
||||
|
||||
// Determine output format
|
||||
outExt := ".jpg"
|
||||
outFormat := "jpeg"
|
||||
|
||||
if opt.ForceJPEG {
|
||||
// Force JPEG output, flatten alpha if needed
|
||||
outFormat = "jpeg"
|
||||
outExt = ".jpg"
|
||||
if imageHasAlpha(img) {
|
||||
img = flattenToWhite(img)
|
||||
}
|
||||
} else {
|
||||
// Auto-detect: if image has alpha, output PNG; otherwise JPEG
|
||||
hasAlpha := imageHasAlpha(img)
|
||||
if hasAlpha {
|
||||
outExt = ".png"
|
||||
outFormat = "png"
|
||||
}
|
||||
}
|
||||
|
||||
// Create a stable file name based on url + options + content signature.
|
||||
h := sha256.New()
|
||||
h.Write([]byte(imgURL))
|
||||
h.Write([]byte(fmt.Sprintf("|%d|%d|%f|%s|%s", opt.TargetWidth, opt.TargetHeight, opt.MaxSizeMB, opt.Mode, outFormat)))
|
||||
h.Write(data[:minInt(len(data), 1024)])
|
||||
name := hex.EncodeToString(h.Sum(nil))[:32] + outExt
|
||||
outPath := filepath.Join(opt.OutputDir, name)
|
||||
|
||||
maxBytes := int64(opt.MaxSizeMB * 1024 * 1024)
|
||||
encoded, err := encodeUnderSize(img, outFormat, maxBytes, opt.MinQuality, opt.MaxRetries)
|
||||
if err != nil {
|
||||
// Fallback: if PNG can't fit, try JPEG (dropping alpha with white background).
|
||||
if outFormat == "png" {
|
||||
flattened := flattenToWhite(img)
|
||||
encoded, err = encodeUnderSize(flattened, "jpeg", maxBytes, opt.MinQuality, opt.MaxRetries)
|
||||
if err == nil {
|
||||
outPath = strings.TrimSuffix(outPath, filepath.Ext(outPath)) + ".jpg"
|
||||
} else {
|
||||
// If AllowResolutionReduction is true, try reducing resolution
|
||||
if opt.AllowResolutionReduction {
|
||||
return tryWithReducedResolution(img, opt, outPath, maxBytes)
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
} else {
|
||||
// If AllowResolutionReduction is true, try reducing resolution
|
||||
if opt.AllowResolutionReduction {
|
||||
return tryWithReducedResolution(img, opt, outPath, maxBytes)
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
tmpPath := outPath + ".tmp"
|
||||
if err := os.WriteFile(tmpPath, encoded, 0o644); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if err := os.Rename(tmpPath, outPath); err != nil {
|
||||
_ = os.Remove(tmpPath)
|
||||
return "", err
|
||||
}
|
||||
|
||||
_ = fmtName // reserved for future behavior
|
||||
return outPath, nil
|
||||
}
|
||||
|
||||
func downloadWithLimit(ctx context.Context, imgURL string, maxBytes int64) ([]byte, string, error) {
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, imgURL, nil)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
// Reasonable defaults; could be overridden later.
|
||||
req.Header.Set("User-Agent", "fonchain-tools/1.0")
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
||||
return nil, "", fmt.Errorf("download failed: %s", resp.Status)
|
||||
}
|
||||
if resp.ContentLength > 0 && resp.ContentLength > maxBytes {
|
||||
return nil, "", fmt.Errorf("remote file too large: %d > %d", resp.ContentLength, maxBytes)
|
||||
}
|
||||
|
||||
lr := &io.LimitedReader{R: resp.Body, N: maxBytes + 1}
|
||||
b, err := io.ReadAll(lr)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
if int64(len(b)) > maxBytes {
|
||||
return nil, "", fmt.Errorf("download exceeded limit: %d > %d", len(b), maxBytes)
|
||||
}
|
||||
return b, resp.Header.Get("Content-Type"), nil
|
||||
}
|
||||
|
||||
func decodeImage(data []byte, contentType string) (image.Image, string, error) {
|
||||
// Register gif (jpeg/png already registered) for Decode.
|
||||
_ = gif.GIF{}
|
||||
reader := bytes.NewReader(data)
|
||||
img, fmtName, err := image.Decode(reader)
|
||||
if err == nil {
|
||||
return img, fmtName, nil
|
||||
}
|
||||
|
||||
// Some servers set odd content-type; try simple sniff.
|
||||
_ = contentType
|
||||
return nil, "", fmt.Errorf("decode image failed: %w", err)
|
||||
}
|
||||
|
||||
func applyResize(img image.Image, opt Options) image.Image {
|
||||
w := opt.TargetWidth
|
||||
h := opt.TargetHeight
|
||||
|
||||
srcW := img.Bounds().Dx()
|
||||
srcH := img.Bounds().Dy()
|
||||
if srcW <= 0 || srcH <= 0 {
|
||||
return img
|
||||
}
|
||||
|
||||
switch opt.Mode {
|
||||
case ResizeModeFill:
|
||||
return imaging.Fill(img, w, h, imaging.Center, imaging.Lanczos)
|
||||
case ResizeModeFit:
|
||||
// If only one dimension is provided, keep aspect.
|
||||
if w == 0 {
|
||||
w = int(float64(srcW) * (float64(h) / float64(srcH)))
|
||||
if w < 1 {
|
||||
w = 1
|
||||
}
|
||||
}
|
||||
if h == 0 {
|
||||
h = int(float64(srcH) * (float64(w) / float64(srcW)))
|
||||
if h < 1 {
|
||||
h = 1
|
||||
}
|
||||
}
|
||||
// imaging.Fit ensures the result fits within w,h without cropping.
|
||||
return imaging.Fit(img, w, h, imaging.Lanczos)
|
||||
case ResizeModePad:
|
||||
bg := opt.PadColor
|
||||
if bg == nil {
|
||||
bg = color.White
|
||||
}
|
||||
// First, fit within WxH (no crop).
|
||||
fitted := imaging.Fit(img, w, h, imaging.Lanczos)
|
||||
// Then, paste centered onto WxH canvas.
|
||||
canvas := imaging.New(w, h, bg)
|
||||
x := (w - fitted.Bounds().Dx()) / 2
|
||||
y := (h - fitted.Bounds().Dy()) / 2
|
||||
return imaging.Paste(canvas, fitted, image.Pt(x, y))
|
||||
default:
|
||||
return img
|
||||
}
|
||||
}
|
||||
|
||||
func encodeUnderSize(img image.Image, format string, maxBytes int64, minQuality, maxRetries int) ([]byte, error) {
|
||||
if maxBytes <= 0 {
|
||||
return nil, errors.New("maxBytes must be > 0")
|
||||
}
|
||||
|
||||
switch format {
|
||||
case "jpeg":
|
||||
// Binary search quality.
|
||||
lo, hi := minQuality, 92
|
||||
var best []byte
|
||||
iterations := 0
|
||||
maxIterations := maxInt(8, maxRetries/2)
|
||||
|
||||
for i := 0; i < maxIterations && lo <= hi; i++ {
|
||||
iterations++
|
||||
q := (lo + hi) / 2
|
||||
b, err := encodeJPEG(img, q)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if int64(len(b)) <= maxBytes {
|
||||
best = b
|
||||
lo = q + 1
|
||||
} else {
|
||||
hi = q - 1
|
||||
}
|
||||
}
|
||||
|
||||
if best != nil {
|
||||
return best, nil
|
||||
}
|
||||
|
||||
// Try more aggressive qualities from minQuality down to 1
|
||||
qualities := []int{}
|
||||
for q := minQuality; q >= 1; q -= 5 {
|
||||
qualities = append(qualities, q)
|
||||
}
|
||||
// Ensure we try the lowest qualities
|
||||
if minQuality > 3 {
|
||||
qualities = append(qualities, 3, 1)
|
||||
}
|
||||
|
||||
var lastSize int64
|
||||
for _, q := range qualities {
|
||||
if iterations >= maxRetries {
|
||||
break
|
||||
}
|
||||
iterations++
|
||||
b, err := encodeJPEG(img, q)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
lastSize = int64(len(b))
|
||||
if lastSize <= maxBytes {
|
||||
return b, nil
|
||||
}
|
||||
}
|
||||
|
||||
sizeMB := float64(lastSize) / (1024 * 1024)
|
||||
targetMB := float64(maxBytes) / (1024 * 1024)
|
||||
return nil, fmt.Errorf("cannot compress to %.2fMB (best: %.2fMB at quality %d after %d attempts). Consider increasing MaxSizeMB or enabling AllowResolutionReduction",
|
||||
targetMB, sizeMB, minQuality, iterations)
|
||||
|
||||
case "png":
|
||||
// PNG size depends heavily on content; try best compression.
|
||||
b, err := encodePNG(img, png.BestCompression)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if int64(len(b)) <= maxBytes {
|
||||
return b, nil
|
||||
}
|
||||
sizeMB := float64(len(b)) / (1024 * 1024)
|
||||
targetMB := float64(maxBytes) / (1024 * 1024)
|
||||
return nil, fmt.Errorf("PNG cannot compress to %.2fMB (got %.2fMB). Consider using JPEG format or enabling AllowResolutionReduction",
|
||||
targetMB, sizeMB)
|
||||
|
||||
default:
|
||||
return nil, errors.New("unsupported output format")
|
||||
}
|
||||
}
|
||||
|
||||
func encodeJPEG(img image.Image, quality int) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
// Use 4:2:0 subsampling (default) for smaller size.
|
||||
err := jpeg.Encode(&buf, img, &jpeg.Options{Quality: quality})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func encodePNG(img image.Image, level png.CompressionLevel) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
enc := png.Encoder{CompressionLevel: level}
|
||||
if err := enc.Encode(&buf, img); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func imageHasAlpha(img image.Image) bool {
|
||||
switch img.(type) {
|
||||
case *image.NRGBA, *image.NRGBA64, *image.RGBA, *image.RGBA64, *image.Alpha, *image.Alpha16, *image.Paletted:
|
||||
// Need to inspect pixels if we want exactness; but this is good enough and stable.
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func flattenToWhite(img image.Image) image.Image {
|
||||
b := img.Bounds()
|
||||
dst := image.NewRGBA(b)
|
||||
|
||||
// Fill with white.
|
||||
for y := b.Min.Y; y < b.Max.Y; y++ {
|
||||
for x := b.Min.X; x < b.Max.X; x++ {
|
||||
dst.Set(x, y, image.White)
|
||||
}
|
||||
}
|
||||
|
||||
// Draw original image over white background.
|
||||
return imaging.Overlay(dst, img, image.Pt(0, 0), 1.0)
|
||||
}
|
||||
|
||||
func minInt(a, b int) int {
|
||||
if a < b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func maxInt(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// alreadyMeetsRequirements checks if the image already satisfies the size and dimension requirements
|
||||
func alreadyMeetsRequirements(img image.Image, data []byte, opt Options) bool {
|
||||
// Check file size
|
||||
maxBytes := int64(opt.MaxSizeMB * 1024 * 1024)
|
||||
if int64(len(data)) > maxBytes {
|
||||
return false
|
||||
}
|
||||
|
||||
// Check dimensions based on mode
|
||||
srcW := img.Bounds().Dx()
|
||||
srcH := img.Bounds().Dy()
|
||||
targetW := opt.TargetWidth
|
||||
targetH := opt.TargetHeight
|
||||
|
||||
switch opt.Mode {
|
||||
case ResizeModeFit:
|
||||
// For fit mode, check if image is already within or equal to target dimensions
|
||||
if targetW > 0 && srcW > targetW {
|
||||
return false
|
||||
}
|
||||
if targetH > 0 && srcH > targetH {
|
||||
return false
|
||||
}
|
||||
// If only one dimension is specified, check aspect ratio compatibility
|
||||
if targetW > 0 && targetH == 0 && srcW <= targetW {
|
||||
return true
|
||||
}
|
||||
if targetH > 0 && targetW == 0 && srcH <= targetH {
|
||||
return true
|
||||
}
|
||||
if targetW > 0 && targetH > 0 && srcW <= targetW && srcH <= targetH {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
||||
case ResizeModeFill, ResizeModePad:
|
||||
// For fill/pad mode, image must be exactly the target dimensions
|
||||
if srcW != targetW || srcH != targetH {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// tryWithReducedResolution attempts to compress by progressively reducing resolution
|
||||
func tryWithReducedResolution(img image.Image, opt Options, outPath string, maxBytes int64) (string, error) {
|
||||
bounds := img.Bounds()
|
||||
w := bounds.Dx()
|
||||
h := bounds.Dy()
|
||||
|
||||
// Try reducing resolution in steps: 90%, 80%, 70%, 60%, 50%
|
||||
reductions := []float64{0.9, 0.8, 0.7, 0.6, 0.5}
|
||||
|
||||
for _, factor := range reductions {
|
||||
newW := int(float64(w) * factor)
|
||||
newH := int(float64(h) * factor)
|
||||
|
||||
if newW < 100 || newH < 100 {
|
||||
break // Don't reduce too much
|
||||
}
|
||||
|
||||
resized := imaging.Resize(img, newW, newH, imaging.Lanczos)
|
||||
|
||||
// Try to encode with reduced resolution
|
||||
encoded, err := encodeUnderSize(resized, "jpeg", maxBytes, opt.MinQuality, opt.MaxRetries/2)
|
||||
if err == nil {
|
||||
// Success! Save it
|
||||
tmpPath := outPath + ".tmp"
|
||||
if err := os.WriteFile(tmpPath, encoded, 0o644); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if err := os.Rename(tmpPath, outPath); err != nil {
|
||||
_ = os.Remove(tmpPath)
|
||||
return "", err
|
||||
}
|
||||
return outPath, nil
|
||||
}
|
||||
}
|
||||
|
||||
targetMB := float64(maxBytes) / (1024 * 1024)
|
||||
return "", fmt.Errorf("cannot compress to %.2fMB even after reducing resolution to 50%%. Original size too large", targetMB)
|
||||
}
|
||||
@ -1,6 +1,9 @@
|
||||
package utils
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// CleanString 移除所有空白字符
|
||||
func CleanString(s string) string {
|
||||
@ -18,3 +21,33 @@ func TruncateString(s string, maxLen int) string {
|
||||
}
|
||||
return string(runes[:maxLen])
|
||||
}
|
||||
|
||||
// ExtractTags 从文本中提取标签,标签以 # 开头,后面不能直接跟空格
|
||||
func ExtractTags(s string) []string {
|
||||
if len(s) == 0 {
|
||||
return []string{}
|
||||
}
|
||||
re := regexp.MustCompile(`#[^\s#\p{P}]+`)
|
||||
matches := re.FindAllString(s, -1)
|
||||
|
||||
tags := make([]string, 0, len(matches))
|
||||
for _, match := range matches {
|
||||
// 去掉开头的 #,只保留标签内容
|
||||
tag := match[1:]
|
||||
if len(tag) > 0 {
|
||||
tags = append(tags, tag)
|
||||
}
|
||||
}
|
||||
|
||||
return tags
|
||||
}
|
||||
|
||||
// 去掉自动标签里面多余的引号
|
||||
func CleanAutoHashtagsQuote(input string) string {
|
||||
if input == "" {
|
||||
return ""
|
||||
}
|
||||
cleaned := strings.ReplaceAll(input, "\\\"", "")
|
||||
cleaned = strings.ReplaceAll(cleaned, "\"", "")
|
||||
return cleaned
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user