zhangzengfei
2023-09-01 3c00b78116b561186876eac1f8589366a347a981
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package kingdee
 
import (
    "fmt"
    "strings"
)
 
type ICBom struct {
    FInterID         int          `gorm:"column:FInterID" json:"FInterID"`                 // 内码
    FBOMNumber       string       `gorm:"column:FBOMNumber" json:"FBOMNumber"`             // BOM单编号
    FUseStatus       int          `gorm:"column:FUseStatus" json:"FUseStatus"`             // 使用状态码
    FUseStatusName   string       `gorm:"column:FUseStatusName" json:"FUseStatusName"`     // 使用状态
    FItemIDNumber    string       `gorm:"column:FItemIDNumber" json:"FItemIDNumber"`       // 物料代码
    FItemIDName      string       `gorm:"column:FItemIDName" json:"FItemIDName"`           // 物料名称
    FModel           string       `gorm:"column:FModel" json:"FModel"`                     // 规格型号
    FErpClsID        string       `gorm:"column:FErpClsID" json:"FErpClsID"`               // 物料属性
    FQty             float64      `gorm:"column:FQty" json:"FQty"`                         // 数量
    FUnitName        string       `gorm:"column:FUnitName" json:"FUnitName"`               // 单位
    FYield           float64      `gorm:"column:FYield" json:"FYield"`                     // 成品率
    FRoutingIDNumber string       `gorm:"column:FRoutingIDNumber" json:"FRoutingIDNumber"` // 工艺路线代码
    FRoutingIDName   string       `gorm:"column:FRoutingIDName" json:"FRoutingIDName"`     // 工艺路线名称
    FNote            string       `gorm:"column:FNote" json:"FNote"`                       // 备注
    FBomType         int          `gorm:"column:FBomType" json:"FBomType"`                 // BOM类型
    FAudDate         string       `gorm:"column:FAudDate" json:"FAudDate"`                 // 更新时间
    FPDMImportDate   string       `gorm:"column:FPDMImportDate" json:"FPDMImportDate"`     // 导入时间
    FStatus          int          `gorm:"column:FStatus" json:"FStatus"`                   // 状态
    Component        []ICBomChild `json:"Component"`                                       // BOM组件
}
 
func BomList(fData bool) []ICBom {
    sql := `
    SELECT 
        ICBom.FInterID, 
        ICBom.FBOMNumber, 
        ICBom.FUseStatus, 
        t_SubMessage.FName as FUseStatusName, 
        t_ICItem.FNumber as FItemIDNumber, 
        t_ICItem.FName as FItemIDName, 
        t_ICItem.FModel as FModel,
        (SELECT FName FROM t_SubMessage WHERE t_ICItem.FErpClsID=FInterID) as FErpClsID, 
        ICBom.FQty,
        t_MeasureUnit.FName as FUnitName, 
        ICBom.FYield, 
        t_Routing.FBillNO as FRoutingIDNumber, 
        t_Routing.FRoutingName as FRoutingIDName,         
        ICBom.FNote,         
        ICBom.FBomType, 
        ICBom.FAudDate, 
        ICBom.FPDMImportDate, 
        ICBom.FStatus
    FROM ICBom 
        left join t_SubMessage on ICBom.FUseStatus = t_SubMessage.FInterID AND t_SubMessage.FInterID <> 0  
        join t_ICItem on ICBom.FItemID= t_ICItem.FItemID  AND t_ICItem.FItemID <> 0  
        left join t_MeasureUnit on ICBom.FUnitID = t_MeasureUnit.FItemID AND t_MeasureUnit.FItemID <> 0  
        left join t_Routing on ICBom.FRoutingID = t_Routing.FInterID AND t_Routing.FInterID <> 0
    `
 
    // 如果不是请求全部数据, 仅查询当天更新的, 默认查当天
    if !fData {
        sql = sql + " WHERE DateDiff(dd, ICBom.FAudDate, getdate())=1"
    }
 
    var result []ICBom
 
    db.Raw(sql).Scan(&result)
 
    return result
}
 
type ICBomChild struct {
    FInterID          int     `gorm:"column:FInterID" json:"FInterID"`                   // 所属BOM内码
    FBOMNumber        string  `gorm:"column:FBOMNumber" json:"FBOMNumber"`               // 所属BOM单编号
    FEntryID          int     `gorm:"column:FEntryID" json:"FEntryID"`                   // 顺序号
    FItemIDNumber     string  `gorm:"column:FItemIDNumber" json:"FItemIDNumber"`         // 物料代码
    FItemIDName       string  `gorm:"column:FItemIDName" json:"FItemIDName"`             // 物料名称
    FModel            string  `gorm:"column:FModel" json:"FModel"`                       // 规格型号
    FErpClsID         string  `gorm:"column:FErpClsID" json:"FErpClsID"`                 // 物料属性
    FMaterielTypeName string  `gorm:"column:FMaterielTypeName" json:"FMaterielTypeName"` // 子项类型
    FMarshalTypeName  string  `gorm:"column:FMarshalTypeName" json:"FMarshalTypeName"`   // 配置属性
    FQty              float64 `gorm:"column:FQty" json:"FQty"`                           // 数量
    FUnitName         string  `gorm:"column:FUnitName" json:"FUnitName"`                 // 单位
    FPercent          float64 `gorm:"column:FPercent" json:"FPercent"`                   // 计划百分比
    FBackFlushNumber  string  `gorm:"column:FBackFlushNumber" json:"FBackFlushNumber"`   // 是否倒冲代码
    FBackFlushName    string  `gorm:"column:FBackFlushName" json:"FBackFlushName"`       // 是否倒
    FUseState         string  `gorm:"column:FUseState" json:"FUseState"`                 // 使用状态
    FStockIDNumber    string  `gorm:"column:FStockIDNumber" json:"FStockIDNumber"`       // 仓库代码
    FStockIDName      string  `gorm:"column:FStockIDName" json:"FStockIDName"`           // 仓库名称
    FPDMImportDate    string  `gorm:"column:FPDMImportDate" json:"FPDMImportDate"`       // 导入时间
}
 
func BomChild(bomNumber []string) []ICBomChild {
    sql := `
    SELECT ICBomChild.FInterID,
        ICBOM.FBOMNumber,
        ICBomChild.FEntryID,
        t_ICItem.FNumber as  FItemIDNumber,
        t_ICItem.FName as FItemIDName,
        t_ICItem.FModel as FModel,
        (SELECT FName FROM t_SubMessage WHERE t_ICItem.FErpClsID=FInterID) as FErpCls,
        t010.FName as FMaterielTypeName,
        t011.FName as FMarshalTypeName,
        ICBomChild.FQty,
        t_MeasureUnit.FName as FUnitName,
        ICBomChild.FPercent,
        t012.FID as FBackFlushNumber,
        t012.FName as FBackFlushName,
        (SELECT FName FROM t_SubMessage WHERE t_ICItem.FUseState=FInterID) as FUseState,
        t_Stock.FNumber as FStockIDNumber,
        t_Stock.FName as FStockIDName,
        ICBomChild.FPDMImportDate
    FROM ICBomChild 
        join t_ICItem on t_ICItem.FItemID = ICBomChild.FItemID AND t_ICItem.FItemID <>0
        left join ICBOM on ICBOM.FInterID = ICBomChild.FInterID  AND ICBOM.FInterID<>0
        left join t_MeasureUnit on t_MeasureUnit.FItemID = t_ICItem.FUnitID  AND t_MeasureUnit.FItemID<>0
        left join t_SubMessage  t010 on t010.FInterID = ICBomChild.FMaterielType AND t010.FInterID <>0
        left join t_SubMessage  t011 on t011.FInterID = ICBomChild.FMarshalType AND t011.FInterID <>0
        left join t_SubMessage  t012 on t012.FInterID = ICBomChild.FBackFlush AND t012.FInterID <>0
        left join t_Stock on t_Stock.FItemID = ICBomChild.FStockID AND t_Stock.FItemID <>0
    `
 
    // 按bom查询
    if bomNumber != nil {
        sql = fmt.Sprintf("%s WHERE ICBOM.FBOMNumber in('%s')", sql, strings.Join(bomNumber, "','"))
    }
 
    var result []ICBomChild
 
    db.Raw(sql).Scan(&result)
 
    return result
}