feat&fix: 完善半成品/序列号闭环流转逻辑
1. 调整物料编码字段为可空,优化注释说明 2. 修复Vite构建自动清空产物目录冲突问题 3. 优化前端提示文案与表单占位符 4. 为各前端项目添加内联SVG图标 5. 重构MES半成品流转逻辑,不再静默吞掉WMS错误并记录日志 6. 生成并添加空的WMS客户端静态文件 7. 完善Ent ORM模型的空值支持与查询谓词 8. 优化半成品入库接口,支持doneProcessCodes数组格式,新增SN反查物料编码逻辑 9. 更新帮助文档与操作手册
This commit is contained in:
@@ -373,7 +373,7 @@ var (
|
||||
SemiFinishedsColumns = []*schema.Column{
|
||||
{Name: "id", Type: field.TypeInt, Increment: true},
|
||||
{Name: "sn", Type: field.TypeString, Unique: true},
|
||||
{Name: "material_code", Type: field.TypeString},
|
||||
{Name: "material_code", Type: field.TypeString, Nullable: true},
|
||||
{Name: "completed_process", Type: field.TypeString, Nullable: true},
|
||||
{Name: "quantity", Type: field.TypeInt, Default: 1},
|
||||
{Name: "zone_code", Type: field.TypeString, Nullable: true},
|
||||
@@ -404,7 +404,7 @@ var (
|
||||
SerialNumbersColumns = []*schema.Column{
|
||||
{Name: "id", Type: field.TypeInt, Increment: true},
|
||||
{Name: "sn_code", Type: field.TypeString, Unique: true},
|
||||
{Name: "material_code", Type: field.TypeString},
|
||||
{Name: "material_code", Type: field.TypeString, Nullable: true},
|
||||
{Name: "batch_no", Type: field.TypeString, Nullable: true},
|
||||
{Name: "status", Type: field.TypeString, Default: "在库"},
|
||||
{Name: "current_zone", Type: field.TypeString, Nullable: true},
|
||||
|
||||
@@ -10250,9 +10250,22 @@ func (m *SemiFinishedMutation) OldMaterialCode(ctx context.Context) (v string, e
|
||||
return oldValue.MaterialCode, nil
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (m *SemiFinishedMutation) ClearMaterialCode() {
|
||||
m.material_code = nil
|
||||
m.clearedFields[semifinished.FieldMaterialCode] = struct{}{}
|
||||
}
|
||||
|
||||
// MaterialCodeCleared returns if the "material_code" field was cleared in this mutation.
|
||||
func (m *SemiFinishedMutation) MaterialCodeCleared() bool {
|
||||
_, ok := m.clearedFields[semifinished.FieldMaterialCode]
|
||||
return ok
|
||||
}
|
||||
|
||||
// ResetMaterialCode resets all changes to the "material_code" field.
|
||||
func (m *SemiFinishedMutation) ResetMaterialCode() {
|
||||
m.material_code = nil
|
||||
delete(m.clearedFields, semifinished.FieldMaterialCode)
|
||||
}
|
||||
|
||||
// SetCompletedProcess sets the "completed_process" field.
|
||||
@@ -10862,6 +10875,9 @@ func (m *SemiFinishedMutation) AddField(name string, value ent.Value) error {
|
||||
// mutation.
|
||||
func (m *SemiFinishedMutation) ClearedFields() []string {
|
||||
var fields []string
|
||||
if m.FieldCleared(semifinished.FieldMaterialCode) {
|
||||
fields = append(fields, semifinished.FieldMaterialCode)
|
||||
}
|
||||
if m.FieldCleared(semifinished.FieldCompletedProcess) {
|
||||
fields = append(fields, semifinished.FieldCompletedProcess)
|
||||
}
|
||||
@@ -10885,6 +10901,9 @@ func (m *SemiFinishedMutation) FieldCleared(name string) bool {
|
||||
// error if the field is not defined in the schema.
|
||||
func (m *SemiFinishedMutation) ClearField(name string) error {
|
||||
switch name {
|
||||
case semifinished.FieldMaterialCode:
|
||||
m.ClearMaterialCode()
|
||||
return nil
|
||||
case semifinished.FieldCompletedProcess:
|
||||
m.ClearCompletedProcess()
|
||||
return nil
|
||||
@@ -11171,9 +11190,22 @@ func (m *SerialNumberMutation) OldMaterialCode(ctx context.Context) (v string, e
|
||||
return oldValue.MaterialCode, nil
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (m *SerialNumberMutation) ClearMaterialCode() {
|
||||
m.material_code = nil
|
||||
m.clearedFields[serialnumber.FieldMaterialCode] = struct{}{}
|
||||
}
|
||||
|
||||
// MaterialCodeCleared returns if the "material_code" field was cleared in this mutation.
|
||||
func (m *SerialNumberMutation) MaterialCodeCleared() bool {
|
||||
_, ok := m.clearedFields[serialnumber.FieldMaterialCode]
|
||||
return ok
|
||||
}
|
||||
|
||||
// ResetMaterialCode resets all changes to the "material_code" field.
|
||||
func (m *SerialNumberMutation) ResetMaterialCode() {
|
||||
m.material_code = nil
|
||||
delete(m.clearedFields, serialnumber.FieldMaterialCode)
|
||||
}
|
||||
|
||||
// SetBatchNo sets the "batch_no" field.
|
||||
@@ -11877,6 +11909,9 @@ func (m *SerialNumberMutation) AddField(name string, value ent.Value) error {
|
||||
// mutation.
|
||||
func (m *SerialNumberMutation) ClearedFields() []string {
|
||||
var fields []string
|
||||
if m.FieldCleared(serialnumber.FieldMaterialCode) {
|
||||
fields = append(fields, serialnumber.FieldMaterialCode)
|
||||
}
|
||||
if m.FieldCleared(serialnumber.FieldBatchNo) {
|
||||
fields = append(fields, serialnumber.FieldBatchNo)
|
||||
}
|
||||
@@ -11906,6 +11941,9 @@ func (m *SerialNumberMutation) FieldCleared(name string) bool {
|
||||
// error if the field is not defined in the schema.
|
||||
func (m *SerialNumberMutation) ClearField(name string) error {
|
||||
switch name {
|
||||
case serialnumber.FieldMaterialCode:
|
||||
m.ClearMaterialCode()
|
||||
return nil
|
||||
case serialnumber.FieldBatchNo:
|
||||
m.ClearBatchNo()
|
||||
return nil
|
||||
|
||||
@@ -18,7 +18,7 @@ type SemiFinished struct {
|
||||
ID int `json:"id,omitempty"`
|
||||
// 半成品 SN
|
||||
Sn string `json:"sn,omitempty"`
|
||||
// 物料编码
|
||||
// 物料编码(MES 未传时按 SN 反查,可空)
|
||||
MaterialCode string `json:"materialCode,omitempty"`
|
||||
// 已完成工序(如 135)
|
||||
CompletedProcess string `json:"completedProcess,omitempty"`
|
||||
|
||||
@@ -218,6 +218,16 @@ func MaterialCodeHasSuffix(v string) predicate.SemiFinished {
|
||||
return predicate.SemiFinished(sql.FieldHasSuffix(FieldMaterialCode, v))
|
||||
}
|
||||
|
||||
// MaterialCodeIsNil applies the IsNil predicate on the "material_code" field.
|
||||
func MaterialCodeIsNil() predicate.SemiFinished {
|
||||
return predicate.SemiFinished(sql.FieldIsNull(FieldMaterialCode))
|
||||
}
|
||||
|
||||
// MaterialCodeNotNil applies the NotNil predicate on the "material_code" field.
|
||||
func MaterialCodeNotNil() predicate.SemiFinished {
|
||||
return predicate.SemiFinished(sql.FieldNotNull(FieldMaterialCode))
|
||||
}
|
||||
|
||||
// MaterialCodeEqualFold applies the EqualFold predicate on the "material_code" field.
|
||||
func MaterialCodeEqualFold(v string) predicate.SemiFinished {
|
||||
return predicate.SemiFinished(sql.FieldEqualFold(FieldMaterialCode, v))
|
||||
|
||||
@@ -33,6 +33,14 @@ func (_c *SemiFinishedCreate) SetMaterialCode(v string) *SemiFinishedCreate {
|
||||
return _c
|
||||
}
|
||||
|
||||
// SetNillableMaterialCode sets the "material_code" field if the given value is not nil.
|
||||
func (_c *SemiFinishedCreate) SetNillableMaterialCode(v *string) *SemiFinishedCreate {
|
||||
if v != nil {
|
||||
_c.SetMaterialCode(*v)
|
||||
}
|
||||
return _c
|
||||
}
|
||||
|
||||
// SetCompletedProcess sets the "completed_process" field.
|
||||
func (_c *SemiFinishedCreate) SetCompletedProcess(v string) *SemiFinishedCreate {
|
||||
_c.mutation.SetCompletedProcess(v)
|
||||
@@ -189,9 +197,6 @@ func (_c *SemiFinishedCreate) check() error {
|
||||
if _, ok := _c.mutation.Sn(); !ok {
|
||||
return &ValidationError{Name: "sn", err: errors.New(`ent: missing required field "SemiFinished.sn"`)}
|
||||
}
|
||||
if _, ok := _c.mutation.MaterialCode(); !ok {
|
||||
return &ValidationError{Name: "material_code", err: errors.New(`ent: missing required field "SemiFinished.material_code"`)}
|
||||
}
|
||||
if _, ok := _c.mutation.Quantity(); !ok {
|
||||
return &ValidationError{Name: "quantity", err: errors.New(`ent: missing required field "SemiFinished.quantity"`)}
|
||||
}
|
||||
@@ -343,6 +348,12 @@ func (u *SemiFinishedUpsert) UpdateMaterialCode() *SemiFinishedUpsert {
|
||||
return u
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (u *SemiFinishedUpsert) ClearMaterialCode() *SemiFinishedUpsert {
|
||||
u.SetNull(semifinished.FieldMaterialCode)
|
||||
return u
|
||||
}
|
||||
|
||||
// SetCompletedProcess sets the "completed_process" field.
|
||||
func (u *SemiFinishedUpsert) SetCompletedProcess(v string) *SemiFinishedUpsert {
|
||||
u.Set(semifinished.FieldCompletedProcess, v)
|
||||
@@ -531,6 +542,13 @@ func (u *SemiFinishedUpsertOne) UpdateMaterialCode() *SemiFinishedUpsertOne {
|
||||
})
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (u *SemiFinishedUpsertOne) ClearMaterialCode() *SemiFinishedUpsertOne {
|
||||
return u.Update(func(s *SemiFinishedUpsert) {
|
||||
s.ClearMaterialCode()
|
||||
})
|
||||
}
|
||||
|
||||
// SetCompletedProcess sets the "completed_process" field.
|
||||
func (u *SemiFinishedUpsertOne) SetCompletedProcess(v string) *SemiFinishedUpsertOne {
|
||||
return u.Update(func(s *SemiFinishedUpsert) {
|
||||
@@ -903,6 +921,13 @@ func (u *SemiFinishedUpsertBulk) UpdateMaterialCode() *SemiFinishedUpsertBulk {
|
||||
})
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (u *SemiFinishedUpsertBulk) ClearMaterialCode() *SemiFinishedUpsertBulk {
|
||||
return u.Update(func(s *SemiFinishedUpsert) {
|
||||
s.ClearMaterialCode()
|
||||
})
|
||||
}
|
||||
|
||||
// SetCompletedProcess sets the "completed_process" field.
|
||||
func (u *SemiFinishedUpsertBulk) SetCompletedProcess(v string) *SemiFinishedUpsertBulk {
|
||||
return u.Update(func(s *SemiFinishedUpsert) {
|
||||
|
||||
@@ -55,6 +55,12 @@ func (_u *SemiFinishedUpdate) SetNillableMaterialCode(v *string) *SemiFinishedUp
|
||||
return _u
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (_u *SemiFinishedUpdate) ClearMaterialCode() *SemiFinishedUpdate {
|
||||
_u.mutation.ClearMaterialCode()
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetCompletedProcess sets the "completed_process" field.
|
||||
func (_u *SemiFinishedUpdate) SetCompletedProcess(v string) *SemiFinishedUpdate {
|
||||
_u.mutation.SetCompletedProcess(v)
|
||||
@@ -239,6 +245,9 @@ func (_u *SemiFinishedUpdate) sqlSave(ctx context.Context) (_node int, err error
|
||||
if value, ok := _u.mutation.MaterialCode(); ok {
|
||||
_spec.SetField(semifinished.FieldMaterialCode, field.TypeString, value)
|
||||
}
|
||||
if _u.mutation.MaterialCodeCleared() {
|
||||
_spec.ClearField(semifinished.FieldMaterialCode, field.TypeString)
|
||||
}
|
||||
if value, ok := _u.mutation.CompletedProcess(); ok {
|
||||
_spec.SetField(semifinished.FieldCompletedProcess, field.TypeString, value)
|
||||
}
|
||||
@@ -326,6 +335,12 @@ func (_u *SemiFinishedUpdateOne) SetNillableMaterialCode(v *string) *SemiFinishe
|
||||
return _u
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (_u *SemiFinishedUpdateOne) ClearMaterialCode() *SemiFinishedUpdateOne {
|
||||
_u.mutation.ClearMaterialCode()
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetCompletedProcess sets the "completed_process" field.
|
||||
func (_u *SemiFinishedUpdateOne) SetCompletedProcess(v string) *SemiFinishedUpdateOne {
|
||||
_u.mutation.SetCompletedProcess(v)
|
||||
@@ -540,6 +555,9 @@ func (_u *SemiFinishedUpdateOne) sqlSave(ctx context.Context) (_node *SemiFinish
|
||||
if value, ok := _u.mutation.MaterialCode(); ok {
|
||||
_spec.SetField(semifinished.FieldMaterialCode, field.TypeString, value)
|
||||
}
|
||||
if _u.mutation.MaterialCodeCleared() {
|
||||
_spec.ClearField(semifinished.FieldMaterialCode, field.TypeString)
|
||||
}
|
||||
if value, ok := _u.mutation.CompletedProcess(); ok {
|
||||
_spec.SetField(semifinished.FieldCompletedProcess, field.TypeString, value)
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ type SerialNumber struct {
|
||||
ID int `json:"id,omitempty"`
|
||||
// 序列号
|
||||
SnCode string `json:"snCode,omitempty"`
|
||||
// 物料编码
|
||||
// 物料编码(可为空)
|
||||
MaterialCode string `json:"materialCode,omitempty"`
|
||||
// 所属批次
|
||||
BatchNo string `json:"batchNo,omitempty"`
|
||||
|
||||
@@ -228,6 +228,16 @@ func MaterialCodeHasSuffix(v string) predicate.SerialNumber {
|
||||
return predicate.SerialNumber(sql.FieldHasSuffix(FieldMaterialCode, v))
|
||||
}
|
||||
|
||||
// MaterialCodeIsNil applies the IsNil predicate on the "material_code" field.
|
||||
func MaterialCodeIsNil() predicate.SerialNumber {
|
||||
return predicate.SerialNumber(sql.FieldIsNull(FieldMaterialCode))
|
||||
}
|
||||
|
||||
// MaterialCodeNotNil applies the NotNil predicate on the "material_code" field.
|
||||
func MaterialCodeNotNil() predicate.SerialNumber {
|
||||
return predicate.SerialNumber(sql.FieldNotNull(FieldMaterialCode))
|
||||
}
|
||||
|
||||
// MaterialCodeEqualFold applies the EqualFold predicate on the "material_code" field.
|
||||
func MaterialCodeEqualFold(v string) predicate.SerialNumber {
|
||||
return predicate.SerialNumber(sql.FieldEqualFold(FieldMaterialCode, v))
|
||||
|
||||
@@ -33,6 +33,14 @@ func (_c *SerialNumberCreate) SetMaterialCode(v string) *SerialNumberCreate {
|
||||
return _c
|
||||
}
|
||||
|
||||
// SetNillableMaterialCode sets the "material_code" field if the given value is not nil.
|
||||
func (_c *SerialNumberCreate) SetNillableMaterialCode(v *string) *SerialNumberCreate {
|
||||
if v != nil {
|
||||
_c.SetMaterialCode(*v)
|
||||
}
|
||||
return _c
|
||||
}
|
||||
|
||||
// SetBatchNo sets the "batch_no" field.
|
||||
func (_c *SerialNumberCreate) SetBatchNo(v string) *SerialNumberCreate {
|
||||
_c.mutation.SetBatchNo(v)
|
||||
@@ -217,9 +225,6 @@ func (_c *SerialNumberCreate) check() error {
|
||||
if _, ok := _c.mutation.SnCode(); !ok {
|
||||
return &ValidationError{Name: "sn_code", err: errors.New(`ent: missing required field "SerialNumber.sn_code"`)}
|
||||
}
|
||||
if _, ok := _c.mutation.MaterialCode(); !ok {
|
||||
return &ValidationError{Name: "material_code", err: errors.New(`ent: missing required field "SerialNumber.material_code"`)}
|
||||
}
|
||||
if _, ok := _c.mutation.Status(); !ok {
|
||||
return &ValidationError{Name: "status", err: errors.New(`ent: missing required field "SerialNumber.status"`)}
|
||||
}
|
||||
@@ -379,6 +384,12 @@ func (u *SerialNumberUpsert) UpdateMaterialCode() *SerialNumberUpsert {
|
||||
return u
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (u *SerialNumberUpsert) ClearMaterialCode() *SerialNumberUpsert {
|
||||
u.SetNull(serialnumber.FieldMaterialCode)
|
||||
return u
|
||||
}
|
||||
|
||||
// SetBatchNo sets the "batch_no" field.
|
||||
func (u *SerialNumberUpsert) SetBatchNo(v string) *SerialNumberUpsert {
|
||||
u.Set(serialnumber.FieldBatchNo, v)
|
||||
@@ -597,6 +608,13 @@ func (u *SerialNumberUpsertOne) UpdateMaterialCode() *SerialNumberUpsertOne {
|
||||
})
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (u *SerialNumberUpsertOne) ClearMaterialCode() *SerialNumberUpsertOne {
|
||||
return u.Update(func(s *SerialNumberUpsert) {
|
||||
s.ClearMaterialCode()
|
||||
})
|
||||
}
|
||||
|
||||
// SetBatchNo sets the "batch_no" field.
|
||||
func (u *SerialNumberUpsertOne) SetBatchNo(v string) *SerialNumberUpsertOne {
|
||||
return u.Update(func(s *SerialNumberUpsert) {
|
||||
@@ -1004,6 +1022,13 @@ func (u *SerialNumberUpsertBulk) UpdateMaterialCode() *SerialNumberUpsertBulk {
|
||||
})
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (u *SerialNumberUpsertBulk) ClearMaterialCode() *SerialNumberUpsertBulk {
|
||||
return u.Update(func(s *SerialNumberUpsert) {
|
||||
s.ClearMaterialCode()
|
||||
})
|
||||
}
|
||||
|
||||
// SetBatchNo sets the "batch_no" field.
|
||||
func (u *SerialNumberUpsertBulk) SetBatchNo(v string) *SerialNumberUpsertBulk {
|
||||
return u.Update(func(s *SerialNumberUpsert) {
|
||||
|
||||
@@ -55,6 +55,12 @@ func (_u *SerialNumberUpdate) SetNillableMaterialCode(v *string) *SerialNumberUp
|
||||
return _u
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (_u *SerialNumberUpdate) ClearMaterialCode() *SerialNumberUpdate {
|
||||
_u.mutation.ClearMaterialCode()
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetBatchNo sets the "batch_no" field.
|
||||
func (_u *SerialNumberUpdate) SetBatchNo(v string) *SerialNumberUpdate {
|
||||
_u.mutation.SetBatchNo(v)
|
||||
@@ -272,6 +278,9 @@ func (_u *SerialNumberUpdate) sqlSave(ctx context.Context) (_node int, err error
|
||||
if value, ok := _u.mutation.MaterialCode(); ok {
|
||||
_spec.SetField(serialnumber.FieldMaterialCode, field.TypeString, value)
|
||||
}
|
||||
if _u.mutation.MaterialCodeCleared() {
|
||||
_spec.ClearField(serialnumber.FieldMaterialCode, field.TypeString)
|
||||
}
|
||||
if value, ok := _u.mutation.BatchNo(); ok {
|
||||
_spec.SetField(serialnumber.FieldBatchNo, field.TypeString, value)
|
||||
}
|
||||
@@ -368,6 +377,12 @@ func (_u *SerialNumberUpdateOne) SetNillableMaterialCode(v *string) *SerialNumbe
|
||||
return _u
|
||||
}
|
||||
|
||||
// ClearMaterialCode clears the value of the "material_code" field.
|
||||
func (_u *SerialNumberUpdateOne) ClearMaterialCode() *SerialNumberUpdateOne {
|
||||
_u.mutation.ClearMaterialCode()
|
||||
return _u
|
||||
}
|
||||
|
||||
// SetBatchNo sets the "batch_no" field.
|
||||
func (_u *SerialNumberUpdateOne) SetBatchNo(v string) *SerialNumberUpdateOne {
|
||||
_u.mutation.SetBatchNo(v)
|
||||
@@ -615,6 +630,9 @@ func (_u *SerialNumberUpdateOne) sqlSave(ctx context.Context) (_node *SerialNumb
|
||||
if value, ok := _u.mutation.MaterialCode(); ok {
|
||||
_spec.SetField(serialnumber.FieldMaterialCode, field.TypeString, value)
|
||||
}
|
||||
if _u.mutation.MaterialCodeCleared() {
|
||||
_spec.ClearField(serialnumber.FieldMaterialCode, field.TypeString)
|
||||
}
|
||||
if value, ok := _u.mutation.BatchNo(); ok {
|
||||
_spec.SetField(serialnumber.FieldBatchNo, field.TypeString, value)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user