feat: 完成客户第12条需求+多系统改造
1. 新增预警表添加工单号字段,支持按工单号检索预警 2. 添加工单过滤在制品/绩效报表/预警中心查询 3. 补全WMS台账字段口径与权限配置 4. 修复备料单与数量不符处理流程 5. 新增配送进度/库位联动/自动出库功能 6. 修复AGV配送状态更新逻辑 7. 优化退料与库存管理细节
This commit is contained in:
@@ -41,8 +41,24 @@ type MaterialRequest struct {
|
||||
StationNo int `json:"stationNo,omitempty"`
|
||||
// 该物料所属装配工序(1~12)
|
||||
ProcessCode int `json:"processCode,omitempty"`
|
||||
// 已发料数量(分批出库累加)
|
||||
// 已发出量(分批出库累加;幂等基准,勿与已接料混用)
|
||||
SentQty float64 `json:"sentQty,omitempty"`
|
||||
// 已接料量(工位扫码接料累加)
|
||||
ReceivedQty float64 `json:"receivedQty,omitempty"`
|
||||
// 最近接料时间(unix 秒)
|
||||
ReceivedAt int64 `json:"receivedAt,omitempty"`
|
||||
// 接料人
|
||||
ReceiveBy string `json:"receiveBy,omitempty"`
|
||||
// 来源 PLAN/REFILL
|
||||
Source string `json:"source,omitempty"`
|
||||
// 超出 BOM 需求的数量
|
||||
OverQty float64 `json:"overQty,omitempty"`
|
||||
// 超领原因 损耗/报废/返修/其他
|
||||
OverReason string `json:"overReason,omitempty"`
|
||||
// 关联数量不符单号
|
||||
RefReportNo string `json:"refReportNo,omitempty"`
|
||||
// 是否需要AGV配送到接驳台
|
||||
NeedAgv bool `json:"needAgv,omitempty"`
|
||||
// 发料批次号(分批出库时填写)
|
||||
BatchNo string `json:"batchNo,omitempty"`
|
||||
// Operator holds the value of the "operator" field.
|
||||
@@ -59,11 +75,13 @@ func (*MaterialRequest) scanValues(columns []string) ([]any, error) {
|
||||
values := make([]any, len(columns))
|
||||
for i := range columns {
|
||||
switch columns[i] {
|
||||
case materialrequest.FieldReqQty, materialrequest.FieldSentQty:
|
||||
case materialrequest.FieldNeedAgv:
|
||||
values[i] = new(sql.NullBool)
|
||||
case materialrequest.FieldReqQty, materialrequest.FieldSentQty, materialrequest.FieldReceivedQty, materialrequest.FieldOverQty:
|
||||
values[i] = new(sql.NullFloat64)
|
||||
case materialrequest.FieldID, materialrequest.FieldStationNo, materialrequest.FieldProcessCode:
|
||||
case materialrequest.FieldID, materialrequest.FieldStationNo, materialrequest.FieldProcessCode, materialrequest.FieldReceivedAt:
|
||||
values[i] = new(sql.NullInt64)
|
||||
case materialrequest.FieldRequestNo, materialrequest.FieldOrderNo, materialrequest.FieldPlanDate, materialrequest.FieldMaterialCode, materialrequest.FieldMaterialName, materialrequest.FieldUnit, materialrequest.FieldManageMode, materialrequest.FieldStatus, materialrequest.FieldTargetDock, materialrequest.FieldBatchNo, materialrequest.FieldOperator:
|
||||
case materialrequest.FieldRequestNo, materialrequest.FieldOrderNo, materialrequest.FieldPlanDate, materialrequest.FieldMaterialCode, materialrequest.FieldMaterialName, materialrequest.FieldUnit, materialrequest.FieldManageMode, materialrequest.FieldStatus, materialrequest.FieldTargetDock, materialrequest.FieldReceiveBy, materialrequest.FieldSource, materialrequest.FieldOverReason, materialrequest.FieldRefReportNo, materialrequest.FieldBatchNo, materialrequest.FieldOperator:
|
||||
values[i] = new(sql.NullString)
|
||||
case materialrequest.FieldCreatedAt, materialrequest.FieldUpdatedAt:
|
||||
values[i] = new(sql.NullTime)
|
||||
@@ -166,6 +184,54 @@ func (_m *MaterialRequest) assignValues(columns []string, values []any) error {
|
||||
} else if value.Valid {
|
||||
_m.SentQty = value.Float64
|
||||
}
|
||||
case materialrequest.FieldReceivedQty:
|
||||
if value, ok := values[i].(*sql.NullFloat64); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field receivedQty", values[i])
|
||||
} else if value.Valid {
|
||||
_m.ReceivedQty = value.Float64
|
||||
}
|
||||
case materialrequest.FieldReceivedAt:
|
||||
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field receivedAt", values[i])
|
||||
} else if value.Valid {
|
||||
_m.ReceivedAt = value.Int64
|
||||
}
|
||||
case materialrequest.FieldReceiveBy:
|
||||
if value, ok := values[i].(*sql.NullString); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field receiveBy", values[i])
|
||||
} else if value.Valid {
|
||||
_m.ReceiveBy = value.String
|
||||
}
|
||||
case materialrequest.FieldSource:
|
||||
if value, ok := values[i].(*sql.NullString); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field source", values[i])
|
||||
} else if value.Valid {
|
||||
_m.Source = value.String
|
||||
}
|
||||
case materialrequest.FieldOverQty:
|
||||
if value, ok := values[i].(*sql.NullFloat64); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field overQty", values[i])
|
||||
} else if value.Valid {
|
||||
_m.OverQty = value.Float64
|
||||
}
|
||||
case materialrequest.FieldOverReason:
|
||||
if value, ok := values[i].(*sql.NullString); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field overReason", values[i])
|
||||
} else if value.Valid {
|
||||
_m.OverReason = value.String
|
||||
}
|
||||
case materialrequest.FieldRefReportNo:
|
||||
if value, ok := values[i].(*sql.NullString); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field refReportNo", values[i])
|
||||
} else if value.Valid {
|
||||
_m.RefReportNo = value.String
|
||||
}
|
||||
case materialrequest.FieldNeedAgv:
|
||||
if value, ok := values[i].(*sql.NullBool); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field needAgv", values[i])
|
||||
} else if value.Valid {
|
||||
_m.NeedAgv = value.Bool
|
||||
}
|
||||
case materialrequest.FieldBatchNo:
|
||||
if value, ok := values[i].(*sql.NullString); !ok {
|
||||
return fmt.Errorf("unexpected type %T for field batchNo", values[i])
|
||||
@@ -266,6 +332,30 @@ func (_m *MaterialRequest) String() string {
|
||||
builder.WriteString("sentQty=")
|
||||
builder.WriteString(fmt.Sprintf("%v", _m.SentQty))
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("receivedQty=")
|
||||
builder.WriteString(fmt.Sprintf("%v", _m.ReceivedQty))
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("receivedAt=")
|
||||
builder.WriteString(fmt.Sprintf("%v", _m.ReceivedAt))
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("receiveBy=")
|
||||
builder.WriteString(_m.ReceiveBy)
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("source=")
|
||||
builder.WriteString(_m.Source)
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("overQty=")
|
||||
builder.WriteString(fmt.Sprintf("%v", _m.OverQty))
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("overReason=")
|
||||
builder.WriteString(_m.OverReason)
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("refReportNo=")
|
||||
builder.WriteString(_m.RefReportNo)
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("needAgv=")
|
||||
builder.WriteString(fmt.Sprintf("%v", _m.NeedAgv))
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("batchNo=")
|
||||
builder.WriteString(_m.BatchNo)
|
||||
builder.WriteString(", ")
|
||||
|
||||
Reference in New Issue
Block a user