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.

288 lines
8.8 KiB

package service
import (
"leit.com/leit_seat_aps/db"
"strconv"
"strings"
)
// 项目对象
type BL_Project struct {
Projectid string // 项目ID
Projecttab db.Me_project // 项目表
Attrdict map[int]BL_Attribute // 所有的用于解析的产品属性
Partdict map[string]BL_Part // 所有的用于解析的零件清单
Partfamdict map[string]BL_PartFamily // 所有的用于解析的零件族
Supplygrpdict map[string]BL_SupplyGroup // 所有的用于解析的供应组
Partruledict map[string]BL_PartAssignRule // Key = 零件号+零件族+待分配数量
Carmodeldict map[string]BL_Carmodel // 车型字典
}
// 获取项目指定属性类型的属性主数据字典
func (bl_proj *BL_Project) GetAttributeList(attrtype int) (err error) {
var (
attrtab db.Me_attribute
attrtablist []db.Me_attribute
bl_attr BL_Attribute
i int
)
// 初始化项目的属性字典
bl_proj.Attrdict = make(map[int]BL_Attribute)
attrtab = db.Me_attribute{}
if attrtablist, err = attrtab.GetTypeAttributes(attrtype); err != nil {
return
}
// 遍历属性列表并写入属性字典
for i = 0; i < len(attrtablist); i++ {
attrtablist[i].Clipped()
bl_attr = BL_Attribute{}
bl_attr.Attrcode = attrtablist[i].Attrcode
bl_attr.Attrname = attrtablist[i].Attrname
bl_attr.Descr = attrtablist[i].Descr
bl_attr.Attrtype = attrtablist[i].Attrtype
bl_attr.Attrtab = attrtablist[i]
bl_attr.Atvaltablst = attrtablist[i].Valst
bl_proj.Attrdict[bl_attr.Attrcode] = bl_attr
}
return
}
// 获取项目的零件字典
func (bl_proj *BL_Project) GetPartList() (err error) {
var (
partab db.Me_part
partablst []db.Me_part
i, j int
bl_pt BL_Part
bl_ptattr BL_PartAttribute
)
// 初始化项目的零件字典
bl_proj.Partdict = make(map[string]BL_Part)
partab = db.Me_part{}
if partablst, err = partab.GetProjectAll(bl_proj.Projectid); err != nil {
return
}
// 遍历零件列表并写入字典
for i = 0; i < len(partablst); i++ {
bl_pt = BL_Part{}
bl_pt.Partid = partablst[i].Partid
bl_pt.Projnr = partablst[i].Projnr
bl_pt.AtcodDict = make(map[int]BL_PartAttribute)
for j = 0; j < len(partablst[i].Attrlst); j++ {
bl_ptattr = BL_PartAttribute{}
bl_ptattr.Attrcode = partablst[i].Attrlst[j].Attrcode
bl_ptattr.Attrvalue = partablst[i].Attrlst[j].Attrvalue
bl_ptattr.Partattrtab = partablst[i].Attrlst[j]
bl_pt.AtcodDict[bl_ptattr.Attrcode] = bl_ptattr
}
bl_pt.Parttab = partablst[i]
bl_proj.Partdict[bl_pt.Partid] = bl_pt
}
return
}
// 获取项目的零件族字典
func (bl_proj *BL_Project) GetPartFamilyList() (err error) {
var (
pftab db.Me_partfamily
pftablst []db.Me_partfamily
i, j int
bl_pf BL_PartFamily
bl_pfattr BL_PartFamily_Atcod
)
// 初始化项目的零件族字典
bl_proj.Partfamdict = make(map[string]BL_PartFamily)
pftab = db.Me_partfamily{}
if pftablst, err = pftab.GetProjectAll(bl_proj.Projectid); err != nil {
return
}
// 遍历零件族列表并写入字典
for i = 0; i < len(pftablst); i++ {
bl_pf = BL_PartFamily{}
bl_pf.Partfamilyid = pftablst[i].Partfamilyid
bl_pf.Pf_attr_dict = make(map[int]BL_PartFamily_Atcod)
for j = 0; j < len(pftablst[i].Atcodlst); j++ {
bl_pfattr = BL_PartFamily_Atcod{}
bl_pfattr.Attrcode = pftablst[i].Atcodlst[j].Attrcode
bl_pfattr.Mandatory = pftablst[i].Atcodlst[j].Mandatory
bl_pfattr.Verifyrule = pftablst[i].Atcodlst[j].Verifyrule
bl_pfattr.Partfamily_attrtab = pftablst[i].Atcodlst[j]
bl_pf.Pf_attr_dict[bl_pfattr.Attrcode] = bl_pfattr
}
bl_proj.Partfamdict[bl_pf.Partfamilyid] = bl_pf
}
return
}
// 获取项目的供应组字典
func (bl_proj *BL_Project) GetSupplyGroupList() (err error) {
var (
sgtab db.Me_supplygroup
sgtablst []db.Me_supplygroup
i, j int
bl_sg BL_SupplyGroup
bl_sgattr BL_SupplyGroup_Atcod
)
// 初始化项目的供应组字典
bl_proj.Supplygrpdict = make(map[string]BL_SupplyGroup)
sgtab = db.Me_supplygroup{}
if sgtablst, err = sgtab.GetProjectAll(bl_proj.Projectid); err != nil {
return
}
// 遍历供应组列表并写入字典
for i = 0; i < len(sgtablst); i++ {
bl_sg = BL_SupplyGroup{}
bl_sg.Supplygroupid = sgtablst[i].Supplygroupid
bl_sg.Partfamilyid = sgtablst[i].Partfamilyid
bl_sg.Worklineid = sgtablst[i].Worklineid
bl_sg.Sgtype = strings.ToUpper(sgtablst[i].Sgtype)
bl_sg.Supplygrouptab = sgtablst[i]
bl_sg.Sg_attr_dict = make(map[int]BL_SupplyGroup_Atcod)
for j = 0; j < len(sgtablst[i].Atcodlst); j++ {
bl_sgattr = BL_SupplyGroup_Atcod{}
bl_sgattr.Attrcode = sgtablst[i].Atcodlst[j].Attrcode
bl_sgattr.Mandatory = sgtablst[i].Atcodlst[j].Mandatory
bl_sgattr.Verifyrule = sgtablst[i].Atcodlst[j].Verifyrule
bl_sgattr.Supplygroup_attrtab = sgtablst[i].Atcodlst[j]
bl_sg.Sg_attr_dict[bl_sgattr.Attrcode] = bl_sgattr
}
bl_proj.Supplygrpdict[bl_sg.Supplygroupid] = bl_sg
}
return
}
// 获取项目的零件分配规则字典
func (bl_proj *BL_Project) GetPartRuleList() (err error) {
var (
ptruletab db.Me_partrule
ptruletablst []db.Me_partrule
i, j int
key string
bl_ptrule BL_PartAssignRule
)
// 初始化项目的零件规则字典
bl_proj.Partruledict = make(map[string]BL_PartAssignRule)
ptruletab = db.Me_partrule{}
if ptruletablst, err = ptruletab.GetProjectAll(bl_proj.Projectid); err != nil {
return
}
// 遍历零件数量分配规则列表并写入字典
for i = 0; i < len(ptruletablst); i++ {
bl_ptrule = BL_PartAssignRule{}
bl_ptrule.Ruleid = ptruletablst[i].Ruleid
bl_ptrule.Partid = ptruletablst[i].Partid
bl_ptrule.Partfamilyid = ptruletablst[i].Partrule_cprecond
bl_ptrule.Qty = ptruletablst[i].Partrule_iprecond
bl_ptrule.Partruletab = ptruletablst[i]
bl_ptrule.Assignnruledict = make(map[string]db.Me_partrule_qtyassign)
for j = 0; j < len(ptruletablst[i].Qtyasnlst); j++ {
ptruletablst[i].Qtyasnlst[j].Clipped()
key = ptruletablst[i].Qtyasnlst[j].Supplygroupid
bl_ptrule.Assignnruledict[key] = ptruletablst[i].Qtyasnlst[j]
}
// 项目零件分配规则Key = 零件ID+数量
key = bl_ptrule.Partid + "+" + strconv.Itoa(bl_ptrule.Qty)
bl_proj.Partruledict[key] = bl_ptrule
}
return
}
// 获取项目的车型字典
func (bl_proj *BL_Project) GetCarModelList() (err error) {
var (
cmtab db.Me_carmodel
cmtablst []db.Me_carmodel
i, j, k int
key string
bl_cm BL_Carmodel
bl_spec BL_Carmodel_Spec
bl_cmattr BL_Carmodel_Atcod
)
// 初始化项目的车型字典
bl_proj.Carmodeldict = make(map[string]BL_Carmodel)
cmtab = db.Me_carmodel{}
if cmtablst, err = cmtab.GetProjectAll(bl_proj.Projectid); err != nil {
return
}
// 遍历车型列表并写入字典
for i = 0; i < len(cmtablst); i++ {
bl_cm = BL_Carmodel{}
bl_cm.Carmodelid = cmtablst[i].Carmodelid
bl_cm.Carmodeltab = cmtablst[i]
bl_cm.Cm_pf_dict = make(map[string]string)
bl_cm.Cm_sg_dict = make(map[string]string)
bl_cm.SpecDict = make(map[int]BL_Carmodel_Spec)
bl_cm.Cm_attr_dict = make(map[int]BL_Carmodel_Atcod)
// 存储零件族ID
for j = 0; j < len(cmtablst[i].Pflst); j++ {
key = cmtablst[i].Pflst[j].Partfamilyid
bl_cm.Cm_pf_dict[key] = key
}
// 存储供应组ID
for j = 0; j < len(cmtablst[i].Sglst); j++ {
key = cmtablst[i].Sglst[j].Supplygroupid
bl_cm.Cm_sg_dict[key] = key
}
// 存储车型分配的属性列表
for j = 0; j < len(cmtablst[i].Atcodlst); j++ {
bl_cmattr = BL_Carmodel_Atcod{}
bl_cmattr.Carmodelid = cmtablst[i].Atcodlst[j].Carmodelid
bl_cmattr.Attrcode = cmtablst[i].Atcodlst[j].Attrcode
bl_cmattr.Mandatory = cmtablst[i].Atcodlst[j].Mandatory
bl_cmattr.Verifyrule = cmtablst[i].Atcodlst[j].Verifyrule
bl_cmattr.Carmodel_attrtab = cmtablst[i].Atcodlst[j]
bl_cm.Cm_attr_dict[bl_cmattr.Attrcode] = bl_cmattr
}
// 存储已有的车型规格
for j = 0; j < len(cmtablst[i].Verlst); j++ {
bl_spec = BL_Carmodel_Spec{Version: cmtablst[i].Verlst[j].Version}
bl_spec.SGPartDict = make(map[string]db.Me_carmodel_ver_partlst)
for k = 0; k < len(cmtablst[i].Verlst[j].Partlst); k++ {
key = cmtablst[i].Verlst[j].Partlst[k].Supplygroupid + "_" + cmtablst[i].Verlst[j].Partlst[k].Partid
bl_spec.SGPartDict[key] = cmtablst[i].Verlst[j].Partlst[k]
}
bl_cm.SpecDict[bl_spec.Version] = bl_spec
}
// 更新到项目对象
bl_proj.Carmodeldict[bl_cm.Carmodelid] = bl_cm
}
return
}
// 判断给定的客户订单集是否适配当前的车型
func (bl_proj *BL_Project) IsMatchWithCarModel(cotablst []db.Pln_custorder) (tof bool, carmodelid string) {
var (
bl_cm BL_Carmodel
)
// 遍历项目的车型与之适配
tof = false
for _, bl_cm = range bl_proj.Carmodeldict {
if bl_cm.IsBelongToThisModel(cotablst) {
tof = true
carmodelid = bl_cm.Carmodelid
break
}
}
return
}