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 FItemName, 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 }