|
|
- package service
-
- import (
- "leit.com/leit_seat_aps/db"
- "strconv"
- )
-
- // 零件业务对象
- type BL_Part struct {
- Partid string // 零件号
- Projnr string // 项目号
- AtcodDict map[int]BL_PartAttribute
- Parttab db.Me_part // 零件元数据对象
- }
-
- // 零件属性业务对象
- type BL_PartAttribute struct {
- Partid string // 零件号
- Projnr string // 项目号
- Attrcode int // 属性ID
- Attrvalue string // 属性值
- Partattrtab db.Me_part_atcodlst // 零件元数据对象
- }
-
- // 共用件分配规则
- type BL_PartAssignRule struct {
- Partid string
- Partfamilyid string
- Ruleid string
- Qty int // 待分配数量
- Partruletab db.Me_partrule
- Assignnruledict map[string]db.Me_partrule_qtyassign // 零件数量分配字典,Key = Supplygroupid
- }
-
- // 获取零件列表
- func GetParttabList() (partlist []db.Me_part, err error) {
- if err = db.G_DbEngine.Where("finr = ?", db.G_FINR).Find(&partlist); err != nil {
- return
- }
- return
- }
-
- // 获取零件列表
- func GetPartAtcodtabList() (partatcodlist []db.Me_part_atcodlst, err error) {
- if err = db.G_DbEngine.Table("me_part_atcodlst").Join("left", "me_part_atcodver", "me_part_atcodlst.finr = me_part_atcodver.finr and me_part_atcodlst.version = me_part_atcodver.version").Where("me_part_atcodlst.finr = ? and me_part_atcodver.version = ?", db.G_FINR, 1).Find(&partatcodlist); err != nil {
- return
- }
- return
- }
-
- // 获取项目的零件列表
- func GetProjectParttabList(projnr string) (partlist []db.Me_part, err error) {
- if err = db.G_DbEngine.Where("finr = ? AND projnr = ?", db.G_FINR, projnr).Find(&partlist); err != nil {
- return
- }
- return
- }
-
- // 获取项目的零件列表
- func GetProjectPartAtcodtabList(projnr string) (partatcodlist []db.Me_part_atcodlst, err error) {
- if err = db.G_DbEngine.Table("me_part_atcodlst").Join("left", "me_part_atcodver", "me_part_atcodlst.finr = me_part_atcodver.finr and me_part_atcodlst.version = me_part_atcodver.version").Where("me_part_atcodlst.finr = ? AND me_part_atcodlst.projnr = ? and me_part_atcodver.version = ?", db.G_FINR, projnr, 1).Find(&partatcodlist); err != nil {
- return
- }
- return
- }
-
- // 获取项目的零件分配规则列表
- func GetProjectPartRuletabList(projnr string) (partrulelist []db.Me_partrule, err error) {
- if err = db.G_DbEngine.Where("finr = ? AND projnr = ?", db.G_FINR, projnr).Find(&partrulelist); err != nil {
- return
- }
- return
- }
-
- // 获取项目零件的分配规则明细数据
- func GetProjectPartRuleDatatabList(partid, projnr, ruleid string) (partruledatalist []db.Me_partrule_qtyassign, err error) {
- if err = db.G_DbEngine.Where("finr = ? AND partid = ? AND projnr = ? AND ruleid = ?", 100, partid, projnr, ruleid).Asc("pos").Find(&partruledatalist); err != nil {
- return
- }
- return
- }
-
- // 获取指定项目的零件主数据字典,包括零件分配的属性
- func GetProjectPartListDict(projnr string) (partDict map[string]BL_Part, err error) {
- var (
- ptlst []db.Me_part
- ptatlst []db.Me_part_atcodlst
- bl_pt BL_Part
- bl_partattr BL_PartAttribute
- i int
- ok bool
- )
- partDict = make(map[string]BL_Part)
- if ptlst, err = GetProjectParttabList(projnr); err != nil {
- return
- }
- if ptatlst, err = GetProjectPartAtcodtabList(projnr); err != nil {
- return
- }
- //fmt.Println("Read ",len(ptlst)," parts with ",len(ptatlst)," attributes!")
- // 遍历零件列表并写入零件字典
- for i = 0; i < len(ptlst); i++ {
- ptlst[i].Clipped()
- bl_pt = BL_Part{}
- bl_pt.Partid = ptlst[i].Partid
- bl_pt.AtcodDict = make(map[int]BL_PartAttribute)
- bl_pt.Parttab = ptlst[i]
- partDict[bl_pt.Partid] = bl_pt
- }
- // 遍历零件属性列表
- for i = 0; i < len(ptatlst); i++ {
- ptatlst[i].Clipped()
- if bl_pt, ok = partDict[ptatlst[i].Partid]; !ok {
- continue
- }
- bl_partattr = BL_PartAttribute{}
- bl_partattr.Attrcode = ptatlst[i].Attrcode
- bl_partattr.Attrvalue = ptatlst[i].Attrvalue
- bl_partattr.Partid = ptatlst[i].Partid
- bl_partattr.Partattrtab = ptatlst[i]
- bl_pt.AtcodDict[bl_partattr.Attrcode] = bl_partattr
- // 更新回零件字典
- partDict[bl_pt.Partid] = bl_pt
- }
- return
- }
-
- // 获取指定项目的零件分配规则集字典
- func GetProjectPartRuleListDict(projnr string) (part_rule_dict map[string]BL_PartAssignRule, err error) {
- var (
- partrulelist []db.Me_partrule
- partruledatalist []db.Me_partrule_qtyassign
- bl_part_rule BL_PartAssignRule
- i, j int
- key string
- )
- // 初始化字典
- part_rule_dict = make(map[string]BL_PartAssignRule)
- if partrulelist, err = GetProjectPartRuletabList(projnr); err != nil {
- return
- }
- // 遍历项目零件规则加载明细数据
- for i = 0; i < len(partrulelist); i++ {
- partrulelist[i].Clipped()
- if partrulelist[i].Partrule_iprecond <= 0 {
- continue
- }
- if partruledatalist, err = GetProjectPartRuleDatatabList(partrulelist[i].Partid, partrulelist[i].Projnr, partrulelist[i].Ruleid); err != nil {
- return
- }
- bl_part_rule = BL_PartAssignRule{}
- bl_part_rule.Ruleid = partrulelist[i].Ruleid
- bl_part_rule.Partid = partrulelist[i].Partid
- bl_part_rule.Partfamilyid = partrulelist[i].Partrule_cprecond
- bl_part_rule.Qty = partrulelist[i].Partrule_iprecond
- bl_part_rule.Partruletab = partrulelist[i]
- bl_part_rule.Assignnruledict = make(map[string]db.Me_partrule_qtyassign)
- for j = 0; j < len(partruledatalist); j++ {
- partruledatalist[j].Clipped()
- bl_part_rule.Assignnruledict[partruledatalist[j].Supplygroupid] = partruledatalist[j]
- }
- // 项目零件分配规则Key = 零件ID+数量
- key = bl_part_rule.Partid + "+" + strconv.Itoa(bl_part_rule.Qty)
- part_rule_dict[key] = bl_part_rule
- }
- return
- }
|