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 }