From 7b433e703a85de0febdc72d34bdb3a0765cb50c7 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Sat, 2 Aug 2025 22:27:59 +0800 Subject: [PATCH] fix Category add flxg5b2e add flxg8a3f add ivyz1c9d add ivyz4e8b add ivyz7f2a --- internal/domains/api/dto/api_request_dto.go | 28 ++++++++ .../api/services/api_request_service.go | 5 ++ .../processors/flxg/flxg5b2e_processor.go | 51 +++++++++++++++ .../processors/flxg/flxg8a3f_processor.go | 52 +++++++++++++++ .../processors/ivyz/ivyz1c9d_processor.go | 53 +++++++++++++++ .../processors/ivyz/ivyz4e8b_processor.go | 52 +++++++++++++++ .../processors/ivyz/ivyz7f2a_processor.go | 64 +++++++++++++++++++ .../external/westdex/westdex_service.go | 2 + .../http/handlers/product_admin_handler.go | 4 +- 9 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 internal/domains/api/services/processors/flxg/flxg5b2e_processor.go create mode 100644 internal/domains/api/services/processors/flxg/flxg8a3f_processor.go create mode 100644 internal/domains/api/services/processors/ivyz/ivyz1c9d_processor.go create mode 100644 internal/domains/api/services/processors/ivyz/ivyz4e8b_processor.go create mode 100644 internal/domains/api/services/processors/ivyz/ivyz7f2a_processor.go diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 2e7412d..b1b983b 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -168,6 +168,34 @@ type IVYZ9A2BReq struct { Name string `json:"name" validate:"required,min=1,validName"` } +type IVYZ7F2AReq struct { + ManName string `json:"man_name" validate:"required,min=1,validName"` + ManIDCard string `json:"man_id_card" validate:"required,validIDCard"` + WomanName string `json:"woman_name" validate:"required,min=1,validName"` + WomanIDCard string `json:"woman_id_card" validate:"required,validIDCard"` +} + +type IVYZ4E8BReq struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` +} + +type IVYZ1C9DReq struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + Years int64 `json:"years" validate:"omitempty,min=0,max=100"` +} + +type FLXG8A3FReq struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` +} + +type FLXG5B2EReq struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` +} + type COMB298YReq struct { IDCard string `json:"id_card" validate:"required,validIDCard"` Name string `json:"name" validate:"required,min=1,validName"` diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index 4b3f7cb..4483926 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -79,6 +79,8 @@ func registerAllProcessors(combService *comb.CombService) { "FLXGC9D1": flxg.ProcessFLXGC9D1Request, "FLXGCA3D": flxg.ProcessFLXGCA3DRequest, "FLXGDEC7": flxg.ProcessFLXGDEC7Request, + "FLXG8A3F": flxg.ProcessFLXG8A3FRequest, + "FLXG5B2E": flxg.ProcessFLXG5B2ERequest, // JRZQ系列处理器 "JRZQ8203": jrzq.ProcessJRZQ8203Request, @@ -112,6 +114,9 @@ func registerAllProcessors(combService *comb.CombService) { "IVYZ9363": ivyz.ProcessIVYZ9363Request, "IVYZ9A2B": ivyz.ProcessIVYZ9A2BRequest, "IVYZADEE": ivyz.ProcessIVYZADEERequest, + "IVYZ7F2A": ivyz.ProcessIVYZ7F2ARequest, + "IVYZ4E8B": ivyz.ProcessIVYZ4E8BRequest, + "IVYZ1C9D": ivyz.ProcessIVYZ1C9DRequest, // COMB系列处理器 "COMB298Y": comb.ProcessCOMB298YRequest, diff --git a/internal/domains/api/services/processors/flxg/flxg5b2e_processor.go b/internal/domains/api/services/processors/flxg/flxg5b2e_processor.go new file mode 100644 index 0000000..1c2a428 --- /dev/null +++ b/internal/domains/api/services/processors/flxg/flxg5b2e_processor.go @@ -0,0 +1,51 @@ +package flxg + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/westdex" +) + +// ProcessFLXG5B2ERequest FLXG5B2E API处理方法 +func ProcessFLXG5B2ERequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.FLXG5B2EReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, err) + } + + encryptedName, err := deps.WestDexService.Encrypt(paramsDto.Name) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + encryptedIDCard, err := deps.WestDexService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + reqData := map[string]interface{}{ + "data": map[string]interface{}{ + "name": encryptedName, + "idcard": encryptedIDCard, + }, + } + + respBytes, err := deps.WestDexService.CallAPI("G36SC01", reqData) + if err != nil { + if errors.Is(err, westdex.ErrDatasource) { + return nil, fmt.Errorf("%s: %w", processors.ErrDatasource, err) + } else { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + } + + return respBytes, nil +} \ No newline at end of file diff --git a/internal/domains/api/services/processors/flxg/flxg8a3f_processor.go b/internal/domains/api/services/processors/flxg/flxg8a3f_processor.go new file mode 100644 index 0000000..96a0f1a --- /dev/null +++ b/internal/domains/api/services/processors/flxg/flxg8a3f_processor.go @@ -0,0 +1,52 @@ +package flxg + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/westdex" +) + +// ProcessFLXG8A3FRequest FLXG8A3F API处理方法 +func ProcessFLXG8A3FRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.FLXG8A3FReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, err) + } + + encryptedName, err := deps.WestDexService.Encrypt(paramsDto.Name) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + encryptedIDCard, err := deps.WestDexService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "data": map[string]interface{}{ + "name": encryptedName, + "idcard": encryptedIDCard, + }, + } + + respBytes, err := deps.WestDexService.CallAPI("G36SC01", reqData) + if err != nil { + if errors.Is(err, westdex.ErrDatasource) { + return nil, fmt.Errorf("%s: %w", processors.ErrDatasource, err) + } else { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyz1c9d_processor.go b/internal/domains/api/services/processors/ivyz/ivyz1c9d_processor.go new file mode 100644 index 0000000..32dce0e --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyz1c9d_processor.go @@ -0,0 +1,53 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/westdex" +) + +// ProcessIVYZ1C9DRequest IVYZ1C9D API处理方法 +func ProcessIVYZ1C9DRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZ1C9DReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, err) + } + + encryptedName, err := deps.WestDexService.Encrypt(paramsDto.Name) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + encryptedIDCard, err := deps.WestDexService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "data": map[string]interface{}{ + "xm": encryptedName, + "sfzh": encryptedIDCard, + "yearNum": paramsDto.Years, + }, + } + + respBytes, err := deps.WestDexService.CallAPI("G38SC02", reqData) + if err != nil { + if errors.Is(err, westdex.ErrDatasource) { + return nil, fmt.Errorf("%s: %w", processors.ErrDatasource, err) + } else { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyz4e8b_processor.go b/internal/domains/api/services/processors/ivyz/ivyz4e8b_processor.go new file mode 100644 index 0000000..f08b6ed --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyz4e8b_processor.go @@ -0,0 +1,52 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/westdex" +) + +// ProcessIVYZ4E8BRequest IVYZ4E8B API处理方法 +func ProcessIVYZ4E8BRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZ4E8BReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, err) + } + + encryptedName, err := deps.WestDexService.Encrypt(paramsDto.Name) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + encryptedIDCard, err := deps.WestDexService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "data": map[string]interface{}{ + "name": encryptedName, + "idNo": encryptedIDCard, + }, + } + + respBytes, err := deps.WestDexService.CallAPI("G09GZ02", reqData) + if err != nil { + if errors.Is(err, westdex.ErrDatasource) { + return nil, fmt.Errorf("%s: %w", processors.ErrDatasource, err) + } else { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + } + + return respBytes, nil +} \ No newline at end of file diff --git a/internal/domains/api/services/processors/ivyz/ivyz7f2a_processor.go b/internal/domains/api/services/processors/ivyz/ivyz7f2a_processor.go new file mode 100644 index 0000000..5c57ea8 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyz7f2a_processor.go @@ -0,0 +1,64 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/westdex" +) + +// ProcessIVYZ7F2ARequest IVYZ7F2A API处理方法 +func ProcessIVYZ7F2ARequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZ7F2AReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrInvalidParam, err) + } + + encryptedManName, err := deps.WestDexService.Encrypt(paramsDto.ManName) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + encryptedManIDCard, err := deps.WestDexService.Encrypt(paramsDto.ManIDCard) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + encryptedWomanName, err := deps.WestDexService.Encrypt(paramsDto.WomanName) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + encryptedWomanIDCard, err := deps.WestDexService.Encrypt(paramsDto.WomanIDCard) + if err != nil { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "data": map[string]interface{}{ + "manName": encryptedManName, + "manIdcard": encryptedManIDCard, + "womanName": encryptedWomanName, + "womanIdcard": encryptedWomanIDCard, + }, + } + + respBytes, err := deps.WestDexService.CallAPI("G10GZ02", reqData) + if err != nil { + if errors.Is(err, westdex.ErrDatasource) { + return nil, fmt.Errorf("%s: %w", processors.ErrDatasource, err) + } else { + return nil, fmt.Errorf("%s: %w", processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/infrastructure/external/westdex/westdex_service.go b/internal/infrastructure/external/westdex/westdex_service.go index 6e1d8b9..2f590c2 100644 --- a/internal/infrastructure/external/westdex/westdex_service.go +++ b/internal/infrastructure/external/westdex/westdex_service.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "io" + "log" "net/http" "strconv" "time" @@ -101,6 +102,7 @@ func (w *WestDexService) CallAPI(code string, reqData map[string]interface{}) (r // 手动调用 json.Unmarshal 触发自定义的 UnmarshalJSON 方法 var westDexResp WestResp + log.Println("westDexResp.ID", westDexResp.ID) UnmarshalErr := json.Unmarshal(bodyBytes, &westDexResp) if UnmarshalErr != nil { return nil, UnmarshalErr diff --git a/internal/infrastructure/http/handlers/product_admin_handler.go b/internal/infrastructure/http/handlers/product_admin_handler.go index 42818f7..1eb56ef 100644 --- a/internal/infrastructure/http/handlers/product_admin_handler.go +++ b/internal/infrastructure/http/handlers/product_admin_handler.go @@ -190,7 +190,9 @@ func (h *ProductAdminHandler) CreateCategory(c *gin.Context) { // @Router /api/v1/admin/product-categories/{id} [put] func (h *ProductAdminHandler) UpdateCategory(c *gin.Context) { var cmd commands.UpdateCategoryCommand - if err := h.validator.ValidateParam(c, &cmd); err != nil { + cmd.ID = c.Param("id") + if cmd.ID == "" { + h.responseBuilder.BadRequest(c, "分类ID不能为空") return } if err := h.validator.BindAndValidate(c, &cmd); err != nil {