zhangzengfei
2023-08-17 dc40143800edd914d0f721b06f90c8b4d307b979
kingdee/bom.go
@@ -1,24 +1,30 @@
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"`                   // 状态
   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 {
@@ -42,7 +48,7 @@
      ICBom.FAudDate, 
      ICBom.FPDMImportDate, 
      ICBom.FStatus
    FROM ICBom
   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  
@@ -51,13 +57,75 @@
   // 如果不是请求全部数据, 仅查询当天更新的, 默认查当天
   if !fData {
      sql = sql + " Where DateDiff(dd,FAudDate,getdate())=1"
      sql = sql + " WHERE DateDiff(dd, ICBom.FAudDate, getdate())=1"
   }
   var result []ICBom
   db.Raw(sql).Scan(&result)
   //db.Raw(sql).Debug().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
}