feat: #13 公开商品 API 补充 code/barcode/batch.quantity,报错反馈携带商品和门店信息

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-08 22:39:59 +08:00
parent 3b2ebc0202
commit fab7bd21dd
4 changed files with 39 additions and 24 deletions
+2
View File
@@ -24,6 +24,7 @@ type submitErrorRequest struct {
ShopID uint64 `json:"shop_id"` ShopID uint64 `json:"shop_id"`
ShopNo string `json:"shop_no"` ShopNo string `json:"shop_no"`
Role string `json:"role"` Role string `json:"role"`
ProductInfo string `json:"product_info"`
ErrorMsg string `json:"error_msg" binding:"required"` ErrorMsg string `json:"error_msg" binding:"required"`
StackTrace string `json:"stack_trace"` StackTrace string `json:"stack_trace"`
OccurredAt int64 `json:"occurred_at"` // Unix 毫秒 OccurredAt int64 `json:"occurred_at"` // Unix 毫秒
@@ -56,6 +57,7 @@ func (h *ErrorReportHandler) Submit(c *gin.Context) {
ShopID: req.ShopID, ShopID: req.ShopID,
ShopNo: req.ShopNo, ShopNo: req.ShopNo,
Role: req.Role, Role: req.Role,
ProductInfo: req.ProductInfo,
ClientIP: c.ClientIP(), ClientIP: c.ClientIP(),
ErrorMsg: req.ErrorMsg, ErrorMsg: req.ErrorMsg,
StackTrace: stack, StackTrace: stack,
+3
View File
@@ -72,6 +72,7 @@ func (h *PublicHandler) GetProduct(c *gin.Context) {
"production_date": pdStr, "production_date": pdStr,
"batch_no": inv.BatchNo, "batch_no": inv.BatchNo,
"in_stock_date": inv.CreatedAt.Format("2006-01-02"), "in_stock_date": inv.CreatedAt.Format("2006-01-02"),
"quantity": inv.Quantity,
} }
} }
@@ -100,6 +101,8 @@ func (h *PublicHandler) GetProduct(c *gin.Context) {
"data": gin.H{ "data": gin.H{
"id": product.ID, "id": product.ID,
"name": product.Name, "name": product.Name,
"code": product.Code,
"barcode": product.Barcode,
"series": product.Series, "series": product.Series,
"spec": product.Spec, "spec": product.Spec,
"brand": product.Brand, "brand": product.Brand,
+1
View File
@@ -13,6 +13,7 @@ type ErrorReport struct {
ShopID uint64 `gorm:"index" json:"shop_id"` ShopID uint64 `gorm:"index" json:"shop_id"`
ShopNo string `gorm:"size:50" json:"shop_no"` ShopNo string `gorm:"size:50" json:"shop_no"`
Role string `gorm:"size:20" json:"role"` Role string `gorm:"size:20" json:"role"`
ProductInfo string `gorm:"size:200" json:"product_info"`
ClientIP string `gorm:"size:60" json:"client_ip"` ClientIP string `gorm:"size:60" json:"client_ip"`
ErrorMsg string `gorm:"type:text;not null" json:"error_msg"` ErrorMsg string `gorm:"type:text;not null" json:"error_msg"`
StackTrace string `gorm:"type:text" json:"stack_trace"` StackTrace string `gorm:"type:text" json:"stack_trace"`
@@ -70,13 +70,22 @@ class _PublicProductScreenState extends State<PublicProductScreen> {
title: title, title: title,
hint: hint, hint: hint,
onSubmit: (msg) async { onSubmit: (msg) async {
final shopNo = (_data?['shop'] as Map<String, dynamic>?)?['code'] as String? ?? '';
final productName = _data?['name'] as String? ?? '';
final productCode = _data?['code'] as String? ?? '';
final productInfo = [
if (productName.isNotEmpty) productName,
if (productCode.isNotEmpty) productCode,
if (widget.publicId.isNotEmpty) widget.publicId,
].join(' / ');
await _dio.post( await _dio.post(
'${AppConfig.apiBaseUrl}/public/errors', '${AppConfig.apiBaseUrl}/public/errors',
data: { data: {
'error_type': errorType, 'error_type': errorType,
'error_msg': msg, 'error_msg': msg,
'platform': 'web-scan', 'platform': 'web-scan',
'shop_no': (_data?['shop'] as Map<String, dynamic>?)?['code'] as String? ?? '', 'shop_no': shopNo,
if (productInfo.isNotEmpty) 'product_info': productInfo,
}, },
); );
}, },