@newpeak/barista-cli 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/commands/liberica/auth/index.d.ts.map +1 -1
  2. package/dist/commands/liberica/auth/index.js +5 -0
  3. package/dist/commands/liberica/auth/index.js.map +1 -1
  4. package/dist/commands/liberica/index.d.ts.map +1 -1
  5. package/dist/commands/liberica/index.js +8 -0
  6. package/dist/commands/liberica/index.js.map +1 -1
  7. package/dist/commands/liberica/materials/create.d.ts +3 -0
  8. package/dist/commands/liberica/materials/create.d.ts.map +1 -0
  9. package/dist/commands/liberica/materials/create.js +154 -0
  10. package/dist/commands/liberica/materials/create.js.map +1 -0
  11. package/dist/commands/liberica/materials/delete.d.ts +3 -0
  12. package/dist/commands/liberica/materials/delete.d.ts.map +1 -0
  13. package/dist/commands/liberica/materials/delete.js +104 -0
  14. package/dist/commands/liberica/materials/delete.js.map +1 -0
  15. package/dist/commands/liberica/materials/disable.d.ts +3 -0
  16. package/dist/commands/liberica/materials/disable.d.ts.map +1 -0
  17. package/dist/commands/liberica/materials/disable.js +146 -0
  18. package/dist/commands/liberica/materials/disable.js.map +1 -0
  19. package/dist/commands/liberica/materials/enable.d.ts +3 -0
  20. package/dist/commands/liberica/materials/enable.d.ts.map +1 -0
  21. package/dist/commands/liberica/materials/enable.js +126 -0
  22. package/dist/commands/liberica/materials/enable.js.map +1 -0
  23. package/dist/commands/liberica/materials/get.d.ts +3 -0
  24. package/dist/commands/liberica/materials/get.d.ts.map +1 -0
  25. package/dist/commands/liberica/materials/get.js +71 -0
  26. package/dist/commands/liberica/materials/get.js.map +1 -0
  27. package/dist/commands/liberica/materials/index.d.ts +3 -0
  28. package/dist/commands/liberica/materials/index.d.ts.map +1 -0
  29. package/dist/commands/liberica/materials/index.js +21 -0
  30. package/dist/commands/liberica/materials/index.js.map +1 -0
  31. package/dist/commands/liberica/materials/list.d.ts +3 -0
  32. package/dist/commands/liberica/materials/list.d.ts.map +1 -0
  33. package/dist/commands/liberica/materials/list.js +107 -0
  34. package/dist/commands/liberica/materials/list.js.map +1 -0
  35. package/dist/commands/liberica/materials/update.d.ts +3 -0
  36. package/dist/commands/liberica/materials/update.d.ts.map +1 -0
  37. package/dist/commands/liberica/materials/update.js +118 -0
  38. package/dist/commands/liberica/materials/update.js.map +1 -0
  39. package/dist/commands/liberica/suppliers/create.d.ts +3 -0
  40. package/dist/commands/liberica/suppliers/create.d.ts.map +1 -0
  41. package/dist/commands/liberica/suppliers/create.js +140 -0
  42. package/dist/commands/liberica/suppliers/create.js.map +1 -0
  43. package/dist/commands/liberica/suppliers/delete.d.ts +3 -0
  44. package/dist/commands/liberica/suppliers/delete.d.ts.map +1 -0
  45. package/dist/commands/liberica/suppliers/delete.js +102 -0
  46. package/dist/commands/liberica/suppliers/delete.js.map +1 -0
  47. package/dist/commands/liberica/suppliers/disable.d.ts +3 -0
  48. package/dist/commands/liberica/suppliers/disable.d.ts.map +1 -0
  49. package/dist/commands/liberica/suppliers/disable.js +144 -0
  50. package/dist/commands/liberica/suppliers/disable.js.map +1 -0
  51. package/dist/commands/liberica/suppliers/enable.d.ts +3 -0
  52. package/dist/commands/liberica/suppliers/enable.d.ts.map +1 -0
  53. package/dist/commands/liberica/suppliers/enable.js +124 -0
  54. package/dist/commands/liberica/suppliers/enable.js.map +1 -0
  55. package/dist/commands/liberica/suppliers/get.d.ts +3 -0
  56. package/dist/commands/liberica/suppliers/get.d.ts.map +1 -0
  57. package/dist/commands/liberica/suppliers/get.js +75 -0
  58. package/dist/commands/liberica/suppliers/get.js.map +1 -0
  59. package/dist/commands/liberica/suppliers/index.d.ts +3 -0
  60. package/dist/commands/liberica/suppliers/index.d.ts.map +1 -0
  61. package/dist/commands/liberica/suppliers/index.js +21 -0
  62. package/dist/commands/liberica/suppliers/index.js.map +1 -0
  63. package/dist/commands/liberica/suppliers/list.d.ts +3 -0
  64. package/dist/commands/liberica/suppliers/list.d.ts.map +1 -0
  65. package/dist/commands/liberica/suppliers/list.js +100 -0
  66. package/dist/commands/liberica/suppliers/list.js.map +1 -0
  67. package/dist/commands/liberica/suppliers/update.d.ts +3 -0
  68. package/dist/commands/liberica/suppliers/update.d.ts.map +1 -0
  69. package/dist/commands/liberica/suppliers/update.js +122 -0
  70. package/dist/commands/liberica/suppliers/update.js.map +1 -0
  71. package/dist/commands/liberica/uoms/create.d.ts +3 -0
  72. package/dist/commands/liberica/uoms/create.d.ts.map +1 -0
  73. package/dist/commands/liberica/uoms/create.js +120 -0
  74. package/dist/commands/liberica/uoms/create.js.map +1 -0
  75. package/dist/commands/liberica/uoms/delete.d.ts +3 -0
  76. package/dist/commands/liberica/uoms/delete.d.ts.map +1 -0
  77. package/dist/commands/liberica/uoms/delete.js +104 -0
  78. package/dist/commands/liberica/uoms/delete.js.map +1 -0
  79. package/dist/commands/liberica/uoms/disable.d.ts +3 -0
  80. package/dist/commands/liberica/uoms/disable.d.ts.map +1 -0
  81. package/dist/commands/liberica/uoms/disable.js +146 -0
  82. package/dist/commands/liberica/uoms/disable.js.map +1 -0
  83. package/dist/commands/liberica/uoms/enable.d.ts +3 -0
  84. package/dist/commands/liberica/uoms/enable.d.ts.map +1 -0
  85. package/dist/commands/liberica/uoms/enable.js +126 -0
  86. package/dist/commands/liberica/uoms/enable.js.map +1 -0
  87. package/dist/commands/liberica/uoms/get.d.ts +3 -0
  88. package/dist/commands/liberica/uoms/get.d.ts.map +1 -0
  89. package/dist/commands/liberica/uoms/get.js +71 -0
  90. package/dist/commands/liberica/uoms/get.js.map +1 -0
  91. package/dist/commands/liberica/uoms/index.d.ts +3 -0
  92. package/dist/commands/liberica/uoms/index.d.ts.map +1 -0
  93. package/dist/commands/liberica/uoms/index.js +21 -0
  94. package/dist/commands/liberica/uoms/index.js.map +1 -0
  95. package/dist/commands/liberica/uoms/list.d.ts +3 -0
  96. package/dist/commands/liberica/uoms/list.d.ts.map +1 -0
  97. package/dist/commands/liberica/uoms/list.js +98 -0
  98. package/dist/commands/liberica/uoms/list.js.map +1 -0
  99. package/dist/commands/liberica/uoms/update.d.ts +3 -0
  100. package/dist/commands/liberica/uoms/update.d.ts.map +1 -0
  101. package/dist/commands/liberica/uoms/update.js +115 -0
  102. package/dist/commands/liberica/uoms/update.js.map +1 -0
  103. package/dist/core/api/client.d.ts +24 -0
  104. package/dist/core/api/client.d.ts.map +1 -1
  105. package/dist/core/api/client.js +465 -0
  106. package/dist/core/api/client.js.map +1 -1
  107. package/dist/index.js +1 -1
  108. package/dist/types/index.d.ts +5 -1
  109. package/dist/types/index.d.ts.map +1 -1
  110. package/dist/types/material.d.ts +49 -0
  111. package/dist/types/material.d.ts.map +1 -0
  112. package/dist/types/material.js +2 -0
  113. package/dist/types/material.js.map +1 -0
  114. package/dist/types/supplier.d.ts +53 -0
  115. package/dist/types/supplier.d.ts.map +1 -0
  116. package/dist/types/supplier.js +2 -0
  117. package/dist/types/supplier.js.map +1 -0
  118. package/dist/types/uom.d.ts +47 -0
  119. package/dist/types/uom.d.ts.map +1 -0
  120. package/dist/types/uom.js +2 -0
  121. package/dist/types/uom.js.map +1 -0
  122. package/docs/commands/liberica/materials-create.md +293 -0
  123. package/docs/commands/liberica/materials-delete.md +240 -0
  124. package/docs/commands/liberica/materials-disable.md +150 -0
  125. package/docs/commands/liberica/materials-enable.md +146 -0
  126. package/docs/commands/liberica/materials-get.md +188 -0
  127. package/docs/commands/liberica/materials-list.md +198 -0
  128. package/docs/commands/liberica/materials-update.md +250 -0
  129. package/docs/commands/liberica/uoms-create.md +136 -0
  130. package/docs/commands/liberica/uoms-delete.md +119 -0
  131. package/docs/commands/liberica/uoms-disable.md +117 -0
  132. package/docs/commands/liberica/uoms-enable.md +115 -0
  133. package/docs/commands/liberica/uoms-get.md +119 -0
  134. package/docs/commands/liberica/uoms-list.md +155 -0
  135. package/docs/commands/liberica/uoms-update.md +148 -0
  136. package/package.json +2 -4
  137. package/src/commands/liberica/auth/index.ts +6 -0
  138. package/src/commands/liberica/index.ts +8 -0
  139. package/src/commands/liberica/materials/create.ts +168 -0
  140. package/src/commands/liberica/materials/delete.ts +105 -0
  141. package/src/commands/liberica/materials/disable.ts +148 -0
  142. package/src/commands/liberica/materials/enable.ts +129 -0
  143. package/src/commands/liberica/materials/get.ts +83 -0
  144. package/src/commands/liberica/materials/index.ts +23 -0
  145. package/src/commands/liberica/materials/list.ts +142 -0
  146. package/src/commands/liberica/materials/update.ts +125 -0
  147. package/src/commands/liberica/suppliers/create.ts +149 -0
  148. package/src/commands/liberica/suppliers/delete.ts +102 -0
  149. package/src/commands/liberica/suppliers/disable.ts +145 -0
  150. package/src/commands/liberica/suppliers/enable.ts +126 -0
  151. package/src/commands/liberica/suppliers/get.ts +86 -0
  152. package/src/commands/liberica/suppliers/index.ts +23 -0
  153. package/src/commands/liberica/suppliers/list.ts +134 -0
  154. package/src/commands/liberica/suppliers/update.ts +128 -0
  155. package/src/commands/liberica/uoms/create.ts +134 -0
  156. package/src/commands/liberica/uoms/delete.ts +105 -0
  157. package/src/commands/liberica/uoms/disable.ts +148 -0
  158. package/src/commands/liberica/uoms/enable.ts +129 -0
  159. package/src/commands/liberica/uoms/get.ts +83 -0
  160. package/src/commands/liberica/uoms/index.ts +23 -0
  161. package/src/commands/liberica/uoms/list.ts +129 -0
  162. package/src/commands/liberica/uoms/update.ts +124 -0
  163. package/src/core/api/client.ts +585 -0
  164. package/src/index.ts +1 -1
  165. package/src/types/index.ts +5 -2
  166. package/src/types/material.ts +61 -0
  167. package/src/types/supplier.ts +66 -0
  168. package/src/types/uom.ts +60 -0
  169. package/bin/barista.js +0 -3
@@ -0,0 +1,188 @@
1
+ # barista liberica materials get
2
+
3
+ 获取单个物料详情。
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials get <id>` |
10
+ | 功能描述 | 获取单个物料详情 |
11
+ | HTTP方法 | GET |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ⬜ 否 |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── detail(@GetResource(path = "/detail"))
24
+ └── public ResponseData<MasterMaterialResponse> detail(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @ParameterObject @Validated(BaseRequest.detail.class) MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ └── materialId: Long (@NotNull on detail)
37
+ ```
38
+
39
+ ### Response DTO位置
40
+ ```
41
+ coffee-liberica-end/
42
+ └── business/liberica-business-sales/sales-api/
43
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
44
+ └── MasterMaterialResponse.java
45
+ ├── materialId: Long
46
+ ├── materialCode: String
47
+ ├── materialNo: String
48
+ ├── materialName: String
49
+ ├── materialShortName: String
50
+ ├── materialMaker: String
51
+ ├── materialTags: Tags
52
+ ├── materialTagNames: List<String>
53
+ ├── materialClass: String
54
+ ├── mouldType: String
55
+ ├── materialBarCode: String
56
+ ├── materialType: String
57
+ ├── materialUomCode: String
58
+ ├── enableMultiUom: String (Y/N)
59
+ ├── multiUomCodes: MultiUom
60
+ ├── enableSale: String (Y/N)
61
+ ├── enablePurchase: String (Y/N)
62
+ ├── enableSubMaterial: String (Y/N)
63
+ ├── enableOutsourcing: String (Y/N)
64
+ ├── enableDivision: String (Y/N)
65
+ ├── enableShelfLifeManagement: String (Y/N)
66
+ ├── stopProduction: String (Y/N)
67
+ ├── shelfLifeUnit: String
68
+ ├── shelfLife: Integer
69
+ ├── shelfLifeWarningDays: Integer
70
+ ├── shippingMethod: String
71
+ ├── transactionMethod: String
72
+ ├── tradeType: String
73
+ ├── productionPeriod: Integer
74
+ ├── productionQuantityPerLot: BigDecimal
75
+ ├── lowLotRate: Float
76
+ ├── useMaterialLotRate: String (Y/N)
77
+ ├── substituteMaterials: SubstituteMaterials
78
+ ├── safetyInventory: BigDecimal
79
+ ├── defaultWarehouse: String
80
+ ├── defaultSupplier: String
81
+ ├── follower: String
82
+ ├── minPackageQuantity: String
83
+ ├── grossWeight: String
84
+ ├── netWeight: String
85
+ ├── color: String
86
+ ├── longX: BigDecimal
87
+ ├── longXUom: String
88
+ ├── wideY: BigDecimal
89
+ ├── wideYUom: String
90
+ ├── highZ: BigDecimal
91
+ ├── highZUom: String
92
+ ├── volume: String
93
+ ├── volumeUom: String
94
+ ├── thickness: BigDecimal
95
+ ├── thicknessUom: String
96
+ ├── totalThickness: BigDecimal
97
+ ├── diameter: BigDecimal
98
+ ├── diameterUom: String
99
+ ├── outerDiameter: BigDecimal
100
+ ├── outerDiameterUom: String
101
+ ├── innerDiameter: BigDecimal
102
+ ├── innerDiameterUom: String
103
+ ├── defaultClient: String
104
+ ├── unitPrice: BigDecimal
105
+ ├── currency: String
106
+ ├── statusFlag: Integer (1=enable, 2=disable)
107
+ ├── remark: String
108
+ ├── salesOrderCount: String
109
+ ├── salesOrderSummary: String
110
+ ├── createTime: String
111
+ └── updateTime: String
112
+ ```
113
+
114
+ ## 2.3 CLI参数设计
115
+
116
+ ### 命令结构
117
+ ```
118
+ barista liberica materials get <id> [options]
119
+ ```
120
+
121
+ ### 位置参数
122
+ | 参数 | 类型 | 必填 | 说明 |
123
+ |------|------|------|------|
124
+ | id | string | ✅ | 物料ID (materialId) |
125
+
126
+ ### 全局选项
127
+ | 选项 | 类型 | 说明 |
128
+ |------|------|------|
129
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
130
+ | `--tenant` | string | 租户代码 |
131
+ | `--json` | boolean | JSON输出 |
132
+
133
+ ### 命令选项
134
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 |
135
+ |------|--------|------|------|--------|------|
136
+ | — | — | — | — | — | 此命令无额外选项,ID 通过位置参数传入 |
137
+
138
+ ## 2.4 字段映射表
139
+
140
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
141
+ |---------|---------|----------|----------|
142
+ | <id> (位置参数) | materialId | string→Long | @NotNull, 必须为正整数 |
143
+
144
+ ## 2.5 错误码引用
145
+
146
+ ### ExceptionEnum位置
147
+ ```
148
+ coffee-liberica-end/
149
+ └── business/liberica-business-sales/sales-api/
150
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
151
+ └── MasterMaterialExceptionEnum.java
152
+ ├── MASTER_MATERIAL_NOT_EXIST("01001340001", "租户物料不存在")
153
+ ├── MASTER_MATERIAL_CODE_VALIDATE_NOT_EXIST_ERROR("01001340006", "指定{}不存在")
154
+ └── MASTER_MATERIAL_NAME_VALIDATE_NOT_EXIST_ERROR("01001340010", "指定{}不存在")
155
+ ```
156
+
157
+ ### 已知错误码
158
+ | 错误码 | 错误消息 | 触发条件 |
159
+ |--------|----------|----------|
160
+ | 01001340001 | 租户物料不存在 | materialId 不存在或不属于当前租户 |
161
+
162
+ ## 2.6 权限检查
163
+
164
+ | 检查项 | 位置 | 说明 |
165
+ |--------|------|------|
166
+ | 注解 | `@GetResource(path = "/detail")` | 无 requiredPermission |
167
+
168
+ ## 2.7 实现要点
169
+
170
+ 1. **位置参数**:`get` 命令使用 `<id>` 位置参数指定物料ID
171
+ 2. **错误处理**:物料不存在时抛出 `MASTER_MATERIAL_NOT_EXIST`,CLI 显示友好错误信息
172
+ 3. **tenantId来源**:来自 X-TENANT-ID header,后端自动按租户隔离数据
173
+ 4. **API端点**:GET `/api/enterprise/sales/material/detail?materialId={id}`
174
+ 5. **ID类型注意**:后端使用 Long (BigInteger) 类型,CLI 中使用 string 避免 JavaScript 精度丢失
175
+
176
+ ## 2.8 示例用法
177
+
178
+ ```bash
179
+ # 获取物料详情
180
+ barista liberica materials get 12345
181
+
182
+ # JSON 输出
183
+ barista liberica materials get 12345 --json
184
+
185
+ # 物料不存在
186
+ barista liberica materials get 99999
187
+ # 输出: Error: 租户物料不存在 (01001340001)
188
+ ```
@@ -0,0 +1,198 @@
1
+ # barista liberica materials list
2
+
3
+ 分页查询物料列表。
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials list` |
10
+ | 功能描述 | 分页查询物料列表 |
11
+ | HTTP方法 | GET |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ⬜ 否 |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── page(@GetResource(path = "/page"))
24
+ └── public ResponseData<PageResult<MasterMaterialResponse>> page(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @ParameterObject MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ ├── pageNo: Long (分页页码,从0开始)
37
+ ├── pageSize: Long (分页大小)
38
+ ├── materialId: Long (物料ID)
39
+ ├── materialCode: String (物料编码)
40
+ ├── materialNo: String (物料号码)
41
+ ├── materialName: String (物料名称)
42
+ ├── materialClass: String (物料类别)
43
+ ├── statusFlag: Integer (状态:1=启用,2=禁用)
44
+ ├── queryMaterialTags: List<String> (物料标签查询条件)
45
+ ├── queryMaterialClass: List<String> (物料类别查询条件)
46
+ ├── queryMaterialCode: Set<String> (物料编码范围查询条件)
47
+ └── excludeMaterialCode: Set<String> (排除物料编码范围查询条件)
48
+ ```
49
+
50
+ ### Response DTO位置
51
+ ```
52
+ coffee-liberica-end/
53
+ └── business/liberica-business-sales/sales-api/
54
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
55
+ └── MasterMaterialResponse.java
56
+ ├── materialId: Long
57
+ ├── materialCode: String
58
+ ├── materialNo: String
59
+ ├── materialName: String
60
+ ├── materialShortName: String
61
+ ├── materialMaker: String
62
+ ├── materialTags: Tags
63
+ ├── materialClass: String
64
+ ├── materialBarCode: String
65
+ ├── materialType: String
66
+ ├── materialUomCode: String
67
+ ├── enableMultiUom: String (Y/N)
68
+ ├── enableSale: String (Y/N)
69
+ ├── enablePurchase: String (Y/N)
70
+ ├── enableSubMaterial: String (Y/N)
71
+ ├── enableOutsourcing: String (Y/N)
72
+ ├── enableDivision: String (Y/N)
73
+ ├── enableShelfLifeManagement: String (Y/N)
74
+ ├── stopProduction: String (Y/N)
75
+ ├── safetyInventory: BigDecimal
76
+ ├── defaultWarehouse: String
77
+ ├── defaultSupplier: String
78
+ ├── follower: String
79
+ ├── unitPrice: BigDecimal
80
+ ├── currency: String
81
+ ├── statusFlag: Integer (1=启用,2=禁用)
82
+ ├── remark: String
83
+ ├── createTime: String
84
+ └── updateTime: String
85
+ ```
86
+
87
+ ### 分页包装器
88
+ ```
89
+ cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult
90
+ ├── totalRows: long
91
+ ├── pageSize: long
92
+ ├── pageNo: long
93
+ └── rows: List<MasterMaterialResponse>
94
+ ```
95
+
96
+ ## 2.3 CLI参数设计
97
+
98
+ ### 命令结构
99
+ ```
100
+ barista liberica materials list [options]
101
+ ```
102
+
103
+ ### 全局选项
104
+ | 选项 | 类型 | 说明 |
105
+ |------|------|------|
106
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
107
+ | `--tenant` | string | 租户代码 |
108
+ | `--json` | boolean | JSON输出 |
109
+
110
+ ### 命令选项
111
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 | 对应DTO字段 |
112
+ |------|--------|------|------|--------|------|-------------|
113
+ | --page | -p | number | ⬜ | 1 | 页码(从1开始) | pageNo (转换:CLI页码-1) |
114
+ | --size | -s | number | ⬜ | 20 | 每页条数 | pageSize |
115
+ | --status | — | string | ⬜ | - | 状态:enable/disable | statusFlag (enable=1, disable=2) |
116
+ | --class | -c | string | ⬜ | - | 物料类别 | queryMaterialClass |
117
+ | --keyword | -k | string | ⬜ | - | 搜索关键词(物料编码/物料号码/物料名称) | materialCode/materialNo/materialName |
118
+
119
+ ## 2.4 字段映射表
120
+
121
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
122
+ |---------|---------|----------|----------|
123
+ | --page / -p | pageNo | number→Long,CLI页码-1 | >= 1 |
124
+ | --size / -s | pageSize | number→Long | 1-100 |
125
+ | --status | statusFlag | string→Integer | enable=1, disable=2 |
126
+ | --class / -c | queryMaterialClass | string→List<String> | - |
127
+ | --keyword / -k | materialCode/materialNo/materialName | 直接传递 | 模糊查询 |
128
+
129
+ ## 2.5 错误码引用
130
+
131
+ ### ExceptionEnum位置
132
+ ```
133
+ coffee-liberica-end/
134
+ └── business/liberica-business-sales/sales-api/
135
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
136
+ └── MasterMaterialExceptionEnum.java
137
+ ├── MASTER_MATERIAL_NOT_EXIST("01001411001", "租户物料不存在")
138
+ ├── MASTER_MATERIAL_CODE_FORMAT_CANNOT_EMPTY("01001411003", "物料编码规则不能为空")
139
+ ├── MASTER_MATERIAL_CODE_FORMAT_NOT_CORRECT("01001411004", "物料编码规则格式不正确")
140
+ ├── MASTER_MATERIAL_CODE_VALIDATE_EMPTY_ERROR("01001411005", "{}不能为空")
141
+ ├── MASTER_MATERIAL_CODE_VALIDATE_NOT_EXIST_ERROR("01001411006", "指定{}不存在")
142
+ ├── MASTER_MATERIAL_NO_VALIDATE_EMPTY_ERROR("01001411007", "{}不能为空")
143
+ ├── MASTER_MATERIAL_NO_VALIDATE_NOT_EXIST_ERROR("01001411008", "指定{}不存在")
144
+ ├── MASTER_MATERIAL_NAME_VALIDATE_EMPTY_ERROR("01001411009", "{}不能为空")
145
+ ├── MASTER_MATERIAL_NAME_VALIDATE_NOT_EXIST_ERROR("01001411010", "指定{}不存在")
146
+ └── MASTER_MATERIAL_NAME_DOES_NOT_MATCH_NO_ERROR("01001411011", "{}与{}不匹配")
147
+ ```
148
+
149
+ ### 已知错误码
150
+ | 错误码 | 错误消息 | 触发条件 |
151
+ |--------|----------|----------|
152
+ | 01001411001 | 租户物料不存在 | 查询详情时ID不存在 |
153
+ | 01001411006 | 指定物料编码不存在 | 物料编码无效 |
154
+ | 01001411008 | 指定物料号码不存在 | 物料号码无效 |
155
+ | 01001411010 | 指定物料名称不存在 | 物料名称无效 |
156
+
157
+ ## 2.6 权限检查
158
+
159
+ | 检查项 | 位置 | 说明 |
160
+ |--------|------|------|
161
+ | 注解 | `@GetResource(path = "/page")` | 无 requiredPermission(无需权限码) |
162
+
163
+ **注意**:page 接口在 Controller 层无需权限校验,数据范围通过 tenantId 隔离。
164
+
165
+ ## 2.7 实现要点
166
+
167
+ 1. **分页默认值**:page=1, size=20
168
+ 2. **分页转换**:CLI使用1-based页码,API使用0-based页码(调用时需减1)
169
+ 3. **搜索行为**:keyword 同时匹配 materialCode、materialNo 和 materialName(模糊查询)
170
+ 4. **状态映射**:CLI参数 `enable`/`disable` 映射到 API 值 `1`/`2`
171
+ 5. **无结果处理**:返回空列表,不抛出异常
172
+ 6. **tenantId来源**:来自 JWT token(无需 X-TENANT-ID header)
173
+ 7. **输出格式**:表格形式展示,分页信息在底部显示
174
+
175
+ ## 2.8 示例用法
176
+
177
+ ```bash
178
+ # 默认分页
179
+ barista liberica materials list
180
+
181
+ # 指定页码和每页条数
182
+ barista liberica materials list --page 2 --size 50
183
+
184
+ # 按状态筛选
185
+ barista liberica materials list --status enable
186
+
187
+ # 按物料类别筛选
188
+ barista liberica materials list --class "raw_material"
189
+
190
+ # 关键词搜索
191
+ barista liberica materials list --keyword "螺丝"
192
+
193
+ # 组合筛选
194
+ barista liberica materials list --page 1 --size 10 --status enable --keyword "M001"
195
+
196
+ # JSON 输出(便于脚本处理)
197
+ barista liberica materials list --page 1 --size 20 --json
198
+ ```
@@ -0,0 +1,250 @@
1
+ # barista liberica materials update
2
+
3
+ 更新物料信息。
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials update <materialId>` |
10
+ | 功能描述 | 更新物料信息 |
11
+ | HTTP方法 | POST |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ✅ 是 |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── edit(@PostResource(path = "/edit", requiredPermission = true, requirePermissionCode = "EDIT_MASTER_MATERIAL"))
24
+ └── public ResponseData<?> edit(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @RequestBody @Validated(BaseRequest.edit.class) MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ ├── materialId: Long (@NotNull on edit) — 必须提供
37
+ ├── materialCode: String
38
+ ├── materialNo: String
39
+ ├── materialName: String
40
+ ├── materialShortName: String
41
+ ├── materialMaker: String
42
+ ├── materialClass: String
43
+ ├── materialType: String
44
+ ├── materialUomCode: String
45
+ ├── materialBarCode: String
46
+ ├── enableSale: String (Y/N)
47
+ ├── enablePurchase: String (Y/N)
48
+ ├── enableSubMaterial: String (Y/N)
49
+ ├── enableOutsourcing: String (Y/N)
50
+ ├── enableDivision: String (Y/N)
51
+ ├── productionPeriod: Integer
52
+ ├── unitPrice: BigDecimal
53
+ ├── currency: String
54
+ ├── defaultWarehouse: String
55
+ ├── defaultSupplier: String
56
+ ├── defaultClient: String
57
+ ├── safetyInventory: BigDecimal
58
+ ├── longX: BigDecimal
59
+ ├── wideY: BigDecimal
60
+ ├── highZ: BigDecimal
61
+ ├── thickness: BigDecimal
62
+ ├── grossWeight: String
63
+ ├── netWeight: String
64
+ ├── color: String
65
+ └── remark: String
66
+ ```
67
+
68
+ ### Response DTO位置
69
+ ```
70
+ coffee-liberica-end/
71
+ └── business/liberica-business-sales/sales-api/
72
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
73
+ └── MasterMaterialResponse.java
74
+ ├── materialId: Long
75
+ ├── materialCode: String
76
+ ├── materialNo: String
77
+ ├── materialName: String
78
+ ├── materialShortName: String
79
+ ├── materialClass: String
80
+ ├── materialType: String
81
+ ├── materialUomCode: String
82
+ ├── statusFlag: Integer (1=enable, 2=disable)
83
+ ├── createTime: String
84
+ └── updateTime: String
85
+ ```
86
+
87
+ ## 2.3 CLI参数设计
88
+
89
+ ### 命令结构
90
+ ```
91
+ barista liberica materials update <materialId> [options]
92
+ ```
93
+
94
+ ### 位置参数
95
+ | 参数 | 类型 | 必填 | 说明 |
96
+ |------|------|------|------|
97
+ | materialId | string | ✅ | 物料ID (materialId) |
98
+
99
+ ### 全局选项
100
+ | 选项 | 类型 | 说明 |
101
+ |------|------|------|
102
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
103
+ | `--tenant` | string | 租户代码 |
104
+ | `--dry-run` | boolean | 预览模式(不实际调用API) |
105
+ | `--json` | boolean | JSON输出 |
106
+
107
+ ### 命令选项
108
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 | 对应DTO字段 |
109
+ |------|--------|------|------|--------|------|-------------|
110
+ | --name | -n | string | ⬜ | - | 物料名称 | materialName |
111
+ | --class | -c | string | ⬜ | - | 物料类别 | materialClass |
112
+ | --type | -t | string | ⬜ | - | 规格型号 | materialType |
113
+ | --unit | -u | string | ⬜ | - | 计量单位 | materialUomCode |
114
+ | --short-name | — | string | ⬜ | - | 物料简称 | materialShortName |
115
+ | --maker | — | string | ⬜ | - | 生产厂商 | materialMaker |
116
+ | --barcode | — | string | ⬜ | - | 条形码 | materialBarCode |
117
+ | --enable-sale | — | boolean | ⬜ | - | 可销售 | enableSale |
118
+ | --enable-purchase | — | boolean | ⬜ | - | 可采购 | enablePurchase |
119
+ | --enable-sub-material | — | boolean | ⬜ | - | 可为子件 | enableSubMaterial |
120
+ | --enable-outsourcing | — | boolean | ⬜ | - | 可委外 | enableOutsourcing |
121
+ | --enable-division | — | boolean | ⬜ | - | 可切割 | enableDivision |
122
+ | --production-period | — | number | ⬜ | - | 生产周期(天) | productionPeriod |
123
+ | --unit-price | — | number | ⬜ | - | 单价 | unitPrice |
124
+ | --currency | — | string | ⬜ | - | 币种 | currency |
125
+ | --default-warehouse | — | string | ⬜ | - | 默认仓库 | defaultWarehouse |
126
+ | --default-supplier | — | string | ⬜ | - | 默认供应商 | defaultSupplier |
127
+ | --default-client | — | string | ⬜ | - | 默认客户 | defaultClient |
128
+ | --safety-inventory | — | number | ⬜ | - | 安全库存 | safetyInventory |
129
+ | --long-x | — | number | ⬜ | - | 长 | longX |
130
+ | --wide-y | — | number | ⬜ | - | 宽 | wideY |
131
+ | --high-z | — | number | ⬜ | - | 高 | highZ |
132
+ | --thickness | — | number | ⬜ | - | 厚度 | thickness |
133
+ | --gross-weight | — | string | ⬜ | - | 毛重 | grossWeight |
134
+ | --net-weight | — | string | ⬜ | - | 净重 | netWeight |
135
+ | --color | — | string | ⬜ | - | 颜色 | color |
136
+ | --remark | -r | string | ⬜ | - | 备注 | remark |
137
+
138
+ **注意**:物料ID(materialId)为必填,通过位置参数 `<materialId>` 传入。后端处理部分更新,未提供的字段保持原值。
139
+
140
+ ## 2.4 字段映射表
141
+
142
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
143
+ |---------|---------|----------|----------|
144
+ | <materialId> (位置参数) | materialId | string→Long | @NotNull |
145
+ | --name / -n | materialName | 直接传递 | max=255 |
146
+ | --class / -c | materialClass | 直接传递 | max=255 |
147
+ | --type / -t | materialType | 直接传递 | max=255 |
148
+ | --unit / -u | materialUomCode | 直接传递 | max=255 |
149
+ | --short-name | materialShortName | 直接传递 | max=255 |
150
+ | --maker | materialMaker | 直接传递 | max=255 |
151
+ | --barcode | materialBarCode | 直接传递 | max=255 |
152
+ | --enable-sale | enableSale | boolean→String | Y 或 N |
153
+ | --enable-purchase | enablePurchase | boolean→String | Y 或 N |
154
+ | --enable-sub-material | enableSubMaterial | boolean→String | Y 或 N |
155
+ | --enable-outsourcing | enableOutsourcing | boolean→String | Y 或 N |
156
+ | --enable-division | enableDivision | boolean→String | Y 或 N |
157
+ | --production-period | productionPeriod | number→Integer | - |
158
+ | --unit-price | unitPrice | number→BigDecimal | - |
159
+ | --currency | currency | 直接传递 | max=255 |
160
+ | --default-warehouse | defaultWarehouse | 直接传递 | max=255 |
161
+ | --default-supplier | defaultSupplier | 直接传递 | max=255 |
162
+ | --default-client | defaultClient | 直接传递 | max=255 |
163
+ | --safety-inventory | safetyInventory | number→BigDecimal | - |
164
+ | --long-x | longX | number→BigDecimal | - |
165
+ | --wide-y | wideY | number→BigDecimal | - |
166
+ | --high-z | highZ | number→BigDecimal | - |
167
+ | --thickness | thickness | number→BigDecimal | - |
168
+ | --gross-weight | grossWeight | 直接传递 | max=255 |
169
+ | --net-weight | netWeight | 直接传递 | max=255 |
170
+ | --color | color | 直接传递 | max=255 |
171
+ | --remark / -r | remark | 直接传递 | max=255 |
172
+
173
+ ## 2.5 错误码引用
174
+
175
+ ### ExceptionEnum位置
176
+ ```
177
+ coffee-liberica-end/
178
+ └── business/liberica-business-sales/sales-api/
179
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
180
+ └── MasterMaterialExceptionEnum.java
181
+ ├── MASTER_MATERIAL_NOT_EXIST("01001512001", "租户物料不存在")
182
+ ├── MASTER_MATERIAL_CODE_VALIDATE_NOT_EXIST_ERROR("01001512006", "指定{}不存在")
183
+ ├── MASTER_MATERIAL_NAME_VALIDATE_NOT_EXIST_ERROR("01001512010", "指定{}不存在")
184
+ ├── ENABLE_DIVISION_MATERIAL_NEED_WIDE_AND_LONG("01001512012", "可分割物料必须设置长和宽")
185
+ └── ENABLE_DIVISION_MATERIAL_NEED_WIDE_AND_LONG_GT_ZERO("01001512013", "可分割物料长和宽必须大于0")
186
+ ```
187
+
188
+ ### 已知错误码
189
+ | 错误码 | 错误消息 | 触发条件 |
190
+ |--------|----------|----------|
191
+ | 01001512001 | 租户物料不存在 | materialId 不存在或不属于当前租户 |
192
+ | 01001512006 | 指定xxx不存在 | 指定关联的物料编码不存在 |
193
+ | 01001512012 | 可分割物料必须设置长和宽 | 设置enableDivision=Y但未提供长宽 |
194
+ | 01001512013 | 可分割物料长和宽必须大于0 | 设置enableDivision=Y且长宽<=0 |
195
+
196
+ ## 2.6 权限检查
197
+
198
+ | 检查项 | 位置 | 说明 |
199
+ |--------|------|------|
200
+ | PermissionConstants | `MasterMaterialPermissionConstants.EDIT_MASTER_MATERIAL` | Controller层 `@PostResource(requirePermissionCode = "EDIT_MASTER_MATERIAL")` |
201
+
202
+ ## 2.7 实现要点
203
+
204
+ 1. **materialId位置参数**:`<materialId>` 通过位置参数传入,映射到 `materialId` 字段
205
+ 2. **请求体结构**:必须将 `materialId` 包含在请求体中,后端通过此ID定位记录
206
+ 3. **部分更新**:只发送需要更新的字段,未提供的字段保持原值
207
+ 4. **Dry-run支持**:使用 --dry-run 时构造请求体但不发送,显示预览信息
208
+ 5. **后端验证**:edit() 方法调用 `masterMaterialBusiness.edit()`,后端会校验物料是否存在
209
+
210
+ ## 2.8 示例用法
211
+
212
+ ```bash
213
+ # 更新物料名称
214
+ barista liberica materials update 12345 --name "新产品名称"
215
+
216
+ # 更新物料类别和规格
217
+ barista liberica materials update 12345 \
218
+ --class "原材料" \
219
+ --type "ABC-001" \
220
+ --unit "KG"
221
+
222
+ # 更新价格信息
223
+ barista liberica materials update 12345 \
224
+ --unit-price 100.50 \
225
+ --currency "CNY"
226
+
227
+ # 启用可销售属性
228
+ barista liberica materials update 12345 --enable-sale true
229
+
230
+ # 同时更新多个字段
231
+ barista liberica materials update 12345 \
232
+ --name "新产品" \
233
+ --class "成品" \
234
+ --type "XYZ-999" \
235
+ --unit "PCS" \
236
+ --unit-price 299.99 \
237
+ --enable-sale true \
238
+ --enable-purchase true \
239
+ --remark "更新备注信息"
240
+
241
+ # Dry-run 预览
242
+ barista liberica materials update 12345 --name "新产品" --dry-run
243
+
244
+ # JSON 输出
245
+ barista liberica materials update 12345 --name "新产品" --json
246
+
247
+ # 物料不存在
248
+ barista liberica materials update 99999 --name "测试"
249
+ # 输出: Error: 租户物料不存在 (01001512001)
250
+ ```