SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
5.6 KiB

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
}