pb_dcmtk_client.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package service
  2. import (
  3. "context"
  4. "log/slog"
  5. "time"
  6. )
  7. import (
  8. "google.golang.org/grpc"
  9. "google.golang.org/grpc/credentials/insecure"
  10. "google.golang.org/protobuf/types/known/emptypb"
  11. )
  12. import (
  13. "auth-server/common"
  14. "auth-server/logger"
  15. pb "auth-server/rpc_idl/dr_dcmtk_pb"
  16. )
  17. var DcmtkClient *Dcmtk
  18. func init() {
  19. DcmtkClient = new(Dcmtk)
  20. }
  21. type Dcmtk struct {
  22. basicClient pb.BasicClient
  23. dcmClient pb.DcmClient
  24. }
  25. func (s *Dcmtk) Setup() {
  26. conn, err := grpc.NewClient(common.ServerConfig.Dcmtk,
  27. grpc.WithTransportCredentials(insecure.NewCredentials()),
  28. grpc.WithUnaryInterceptor(logger.GRPCLoggerClientInterceptor(logger.WithGroup("grpc_c[dcmtk]"))),
  29. )
  30. if err != nil {
  31. slog.Error("NewClient failed:", err)
  32. panic(err)
  33. }
  34. slog.Info("dcmtk conn success", "conn", conn.GetState())
  35. s.basicClient = pb.NewBasicClient(conn)
  36. s.dcmClient = pb.NewDcmClient(conn)
  37. }
  38. func (s *Dcmtk) GetSoftwareInfo() *pb.SoftwareInfoReply {
  39. ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond)
  40. defer cancel()
  41. r, err := s.basicClient.SoftwareInfo(ctx, &emptypb.Empty{})
  42. if err != nil {
  43. return &pb.SoftwareInfoReply{
  44. Module: "",
  45. Desc: "",
  46. Build: "",
  47. Version: "",
  48. }
  49. }
  50. return r
  51. }
  52. func (s *Dcmtk) GenerateUniqueIdentifier(ctx context.Context, flag string, number int32) (*pb.UidReply, error) {
  53. SiteUidRoot := "1.2.276.0.1000000.5"
  54. uidRoot := SiteUidRoot
  55. switch flag {
  56. case "study":
  57. uidRoot += ".1.2"
  58. case "series":
  59. uidRoot += ".1.3"
  60. case "sop":
  61. uidRoot += ".1.4"
  62. default:
  63. return nil, common.InvalidParam.Desc("invalid param 'flag'")
  64. }
  65. if number < 1 || number > 100 {
  66. return nil, common.InvalidParam.Desc("number must be between 1 and 100")
  67. }
  68. r, err := s.dcmClient.GenerateUniqueIdentifier(ctx, &pb.UidRootRequest{
  69. UidRoot: uidRoot,
  70. Number: number,
  71. })
  72. return r, err
  73. }