Browse Source

2021/4/8 零件属性查询修复

master
娄文智 3 years ago
parent
commit
95a44ea5bd
8 changed files with 104 additions and 104 deletions
  1. +1
    -1
      asn/Asntask.go
  2. +2
    -2
      db/Me_part.go
  3. +16
    -13
      seq/Picker.go
  4. +2
    -3
      seq/Scheduler.go
  5. +1
    -1
      seq/Scheduler_test.go
  6. +1
    -1
      seq/Seqtask.go
  7. +5
    -1
      service/Asn.go
  8. +76
    -82
      tod/Todtask.go

+ 1
- 1
asn/Asntask.go View File

@ -117,7 +117,7 @@ func ParseAsnLandingData() {
continue
}
}
time.Sleep(10 * time.Second)
time.Sleep(60 * time.Second)
}
}


+ 2
- 2
db/Me_part.go View File

@ -84,7 +84,7 @@ func (t *Me_part) SelectOne() (data Me_part, err error) {
data.Clipped()
// 获取值列表
if err = e.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.partid = ? and me_part_atcodlst.projnr = ? and me_part_atcodver.version = ?",
if err = e.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.partid = ? and me_part_atcodlst.projnr = ? and me_part_atcodver.released = ?",
G_FINR, data.Partid, data.Projnr, 1).OrderBy("me_part_atcodlst.attrcode").Find(&attrlst); err != nil {
return
}
@ -110,7 +110,7 @@ func (t *Me_part) GetProjectAll(projnr string) (datalst []Me_part, err error) {
datalst[i].Clipped()
datalst[i].Attrlst = []Me_part_atcodlst{}
// 获取值列表
if err = e.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.partid = ? and me_part_atcodlst.projnr = ? and me_part_atcodver.version = ?",
if err = e.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.partid = ? and me_part_atcodlst.projnr = ? and me_part_atcodver.released = ?",
G_FINR, datalst[i].Partid, datalst[i].Projnr, 1).OrderBy("me_part_atcodlst.attrcode").Find(&datalst[i].Attrlst); err != nil {
return
}


+ 16
- 13
seq/Picker.go View File

@ -100,7 +100,7 @@ func PickLineWorkorder(bl_wline *service.BL_Workline, bl_wo *service.BL_WorkOrde
bl_ordmsg service.BL_Ordmsg
pktmpattrtab db.Pln_picktemplate_attrlst
pktmpparttab db.Pln_picktemplate_itemlst
attrcode int
i,attrcode int
pickorderid, picktmpid, partid, wonr string
ok, bflag, matched, exist, released bool
pkodict map[string]service.BL_PickingTemplate
@ -120,13 +120,16 @@ func PickLineWorkorder(bl_wline *service.BL_Workline, bl_wo *service.BL_WorkOrde
// 遍历订单零件列表
bflag = true
pkodict = make(map[string]service.BL_PickingTemplate)
for _, bl_wopart = range bl_wo.Bl_wopartdict {
for i = 0; i < len(bl_wo.Workordertab.Partlst); i++ {
// 如果遍历零件不能存在则跳过
if bl_part, ok = pe.Projectdict[bl_wo.Projnr].Partdict[bl_wopart.Partid]; !ok {
if bl_part, ok = pe.Projectdict[bl_wo.Projnr].Partdict[bl_wo.Workordertab.Partlst[i].Partid]; !ok {
continue
}
bl_wopart.Workordertab = bl_wo.Workordertab
bl_wopart.Parttab = bl_part.Parttab
if bl_wopart, ok = bl_wo.Bl_wopartdict[bl_wo.Workordertab.Partlst[i].Partid]; !ok {
continue
}
bl_wopart.Workordertab = bl_wo.Workordertab
bl_wopart.Parttab = bl_part.Parttab
// 获取零件在当前产线的拣料单模板,如果适配
matched = false
// 零件只能进入到一个匹配模板,因此要遍历产线上的所有拣料单模板,一旦适配则返回
@ -136,20 +139,20 @@ func PickLineWorkorder(bl_wline *service.BL_Workline, bl_wo *service.BL_WorkOrde
case common.PKT_ADAPT_BY_ATTR: // 比对零件属性是否在模板分配的属性中
for _, pktmpattrtab = range bl_pktmp.AssignAttrDict {
if _, ok = bl_part.AtcodDict[pktmpattrtab.Attrcode]; ok {
matched = true
wonr = bl_wo.Workordertab.Workordernr
attrcode = pktmpattrtab.Attrcode
picktmpid = bl_pktmp.TemplateId
matched = true
wonr = bl_wo.Workordertab.Workordernr
attrcode = pktmpattrtab.Attrcode
picktmpid = bl_pktmp.TemplateId
break
}
}
case common.PKT_ADAPT_BY_PART: // 比对订单零件和模板分配零件是否相同
for _, pktmpparttab = range bl_pktmp.AssignPartDict {
if bl_wopart.Partid == pktmpparttab.Partid {
matched = true
wonr = bl_wo.Workordertab.Workordernr
partid = bl_wopart.Partid
picktmpid = bl_pktmp.TemplateId
matched = true
wonr = bl_wo.Workordertab.Workordernr
partid = bl_wo.Workordertab.Partlst[i].Partid
picktmpid = bl_pktmp.TemplateId
break
}
}


+ 2
- 3
seq/Scheduler.go View File

@ -26,7 +26,7 @@ func RunScheduler() (err error) {
se = service.SchedEngine{}
se.PlanMode = common.LINE_PLAN_IN_SEQ
se.LineTypes = append(se.LineTypes, "A", "M")
se.LineTypes = append(se.LineTypes, "A", "M", "V")
// 加载排序产线
if err = se.LoadMasterData(); err != nil {
@ -89,7 +89,7 @@ func ScheduleTaskToRelease(bl_wl service.BL_Workline, se *service.SchedEngine) {
return
}
bl_wl.ReleaseValue = workline.Releaseparameter
bl_wl.Worklinetab = workline
bl_wl.Worklinetab = workline
// 基于产线的派工策略获取派工订单
bl_wolst = []service.BL_WorkOrder{}
switch bl_wl.ReleaseMode {
@ -151,7 +151,6 @@ func ScheduleTaskToRelease(bl_wl service.BL_Workline, se *service.SchedEngine) {
}
}
time.Sleep(5 * time.Second)
}
}

+ 1
- 1
seq/Scheduler_test.go View File

@ -48,7 +48,7 @@ func TestScheduler(t *testing.T) {
//return
se = service.SchedEngine{}
se.PlanMode = common.LINE_PLAN_IN_SEQ
se.LineTypes = append(se.LineTypes, "A", "M")
se.LineTypes = append(se.LineTypes, "A", "M", "V")
// 加载排序产线
if err = se.LoadMasterData(); err != nil {


+ 1
- 1
seq/Seqtask.go View File

@ -283,7 +283,7 @@ func Scheduler() {
se = service.SchedEngine{}
se.PlanMode = common.LINE_PLAN_IN_SEQ
se.LineTypes = append(se.LineTypes, "A", "M")
se.LineTypes = append(se.LineTypes, "A", "M", "V")
// 加载排序产线
if err = se.LoadMasterData(); err != nil {


+ 5
- 1
service/Asn.go View File

@ -91,7 +91,7 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) {
if strings.TrimSpace(cotab.Wotablst[i].Supplygroupid) != strings.TrimSpace(bl_t2ord.Asnordertab.Supplygroupid) || strings.TrimSpace(cotab.Wotablst[i].Partfamilyid) != strings.TrimSpace(bl_t2ord.Asnordertab.Partfamilyid){
continue
}
if cotab.Wotablst[i].Status < common.WO_STATUS_CLOSED {
if cotab.Wotablst[i].Status < common.WO_STATUS_CLOSED && cotab.Wotablst[i].Status >= common.CO_STATUS_RELEASED{
// 验证订单的零件和ASN中的零件是否匹配,不匹配报错返回
for j = 0; j < len(cotab.Wotablst[i].Partlst); j++ {
if _, match = bl_t2ord.Itemdict[cotab.Wotablst[i].Partlst[j].Partid]; !match {
@ -126,6 +126,10 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) {
session.Rollback()
return
}
}else{
err = errors.New(fmt.Sprintf("扶手订单%s 订单状态不符合!", cotab.Wotablst[i].Workordernr))
session.Rollback()
return
}
}
//验证是否是最后一个生产订单,如果是,更新对应的客户订单


+ 76
- 82
tod/Todtask.go View File

@ -152,12 +152,10 @@ func ParseTodCustorderNew() {
vcovlst []db.VCustorderVer
bl_co service.BL_CustOrder
cust db.Pln_custorder
errlst db.Pln_custorder_errorlst
mail db.Sendmailtab
mailsubject, mailbody string
verr service.BL_VerifyError
i, j int
bRet bool
todrule string
session *xorm.Session
)
@ -255,68 +253,16 @@ func ParseTodCustorderNew() {
bl_co.Bl_verrdict[verr.GetDictKey()] = verr
//添加邮件预警
host := projtablst[i].Emailserver_host + ":" + common.ValueToString(projtablst[i].Emailserver_port, "")
body := "项目号: " + todProj.Projectid + "\r\nCustordernr 订单号: " + errlst.Custordernr + "\r\nErrorinfo :" + errlst.Errorinfo + "\r\nPartfamilyid :" + errlst.Partfamilyid + "\r\nPartid :" + errlst.Partid
mail.Status = "waiting"
mail.Body = body
mail.Subject = "Reorder的消息的更新"
mail.Name = projtablst[i].From_email
mail.Tomail = projtablst[i].Tod_error_to_recievers
mail.Host = host
mail.Password = projtablst[i].From_pwd
mail.Username = projtablst[i].From_email
err = mail.Add()
if err != nil {
mailsubject = "客户订单号重复错误"
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 半年内重复!"
if err = SendTodErrorEmail(projtablst[i],mailsubject, mailbody); err != nil {
glog.InfoExtln("发送邮件", "err is :", err)
}
}
}
// 如果是指定供应组的SEQ+1发邮件预警
if todrule, err = service.GetSysStringParameter(2, bl_co.Projnr, "TOD_EMAIL_RULE"); err != nil {
return
}
kvlst := strings.Split(todrule, ";")
if len(kvlst) > 0 {
for idx, _ := range kvlst {
rulelst := strings.Split(kvlst[idx], ":")
// 蒋rulest[0]转化为整型与bl_co.SeqType 比较,如果相等,则比较1开始的供应组
seqtype := common.ValueToInt(rulelst[0], 0)
if seqtype == 1 {
supplygroups := make(map[string]string) //去除第一个元素
for k, v := range rulelst {
if k > 0 {
key := v
supplygroups[key] = v
}
}
//Pln_custorder_ver_partlst
for _, jdv := range vcovlst[j].Pln_custorder_ver.Partlst {
key := jdv.Supplygroupid
_, ok := supplygroups[key]
if ok {
//添加邮件预警
host := projtablst[i].Emailserver_host + ":" + common.ValueToString(projtablst[i].Emailserver_port, "")
body := "项目号: " + todProj.Projectid + "\r\nErrorinfo : TOD SEQ+1更新订单" + "\r\nOemordernr :" + vcovlst[j].Pln_custorder_ver.Oemordernr
mail.Status = "waiting"
mail.Body = body
mail.Subject = "SEQ+1的消息的更新"
mail.Name = projtablst[i].From_email
mail.Tomail = projtablst[i].Tod_error_to_recievers
mail.Host = host
mail.Password = projtablst[i].From_pwd
mail.Username = projtablst[i].From_email
err = mail.Add()
if err != nil {
glog.InfoExtln("发送邮件", "err is :", err)
}
}
}
}
}
}
AlertForCustOrderUpdateTodByRule(projtablst[i], bl_co, vcovlst[j] )
// 查询获得客户订单的供应组的零件清单
if err = bl_co.GetSupplyGroupPartList(&todProj); err != nil {
@ -412,17 +358,8 @@ func ParseTodCustorderNew() {
if bl_co.SeqType == 1 && bl_co.Custordertab.Status >= common.CO_STATUS_RELEASED {
//添加邮件预警
host := projtablst[i].Emailserver_host + ":" + common.ValueToString(projtablst[i].Emailserver_port, "")
body := "项目号: " + todProj.Projectid + "\r\nErrorinfo : TOD SEQ+1更新订单" + "\r\nOemordernr :" + vcovlst[j].Pln_custorder_ver.Oemordernr + "状态>=26(已下达)"
mail.Status = "waiting"
mail.Body = body
mail.Subject = "SEQ+1 更新报警"
mail.Name = projtablst[i].From_email
mail.Tomail = projtablst[i].Tod_error_to_recievers
mail.Host = host
mail.Password = projtablst[i].From_pwd
mail.Username = projtablst[i].From_email
err = mail.Add()
mailsubject = "SEQ+1的客户订单已下达"
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 已下达,SEQ+1更新出错!"
if err != nil {
glog.InfoExtln("发送邮件", "err is :", err)
}
@ -441,18 +378,9 @@ func ParseTodCustorderNew() {
}
//添加邮件预警
host := projtablst[i].Emailserver_host + ":" + common.ValueToString(projtablst[i].Emailserver_port, "")
body := "项目号: " + todProj.Projectid + "\r\nCustordernr 订单号: " + vcovlst[j].Pln_custorder_ver.Custordernr + "\r\nErrorinfo : TOD SEQ+2更新订单" + "\r\nPartfamilyid :" + vcovlst[j].Pln_custorder_ver.Partfamilyid + "\r\nOemordernr :" + vcovlst[j].Pln_custorder_ver.Oemordernr
mail.Status = "waiting"
mail.Body = body
mail.Subject = "Reorder的消息的更新"
mail.Name = projtablst[i].From_email
mail.Tomail = projtablst[i].Tod_error_to_recievers
mail.Host = host
mail.Password = projtablst[i].From_pwd
mail.Username = projtablst[i].From_email
err = mail.Add()
if err != nil {
mailsubject = "客户订单取消"
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+2请求,取消!"
if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil {
glog.InfoExtln("发送邮件", "err is :", err)
}
}
@ -708,3 +636,69 @@ func ReadTodXlsx() {
time.Sleep(10 * time.Second)
}
}
// 发送TOD解析错误或警示邮件
func SendTodErrorEmail(projtab db.Me_project, subject, errinfo string)(err error){
var mail db.Sendmailtab
mail.Status = "waiting"
mail.Body = errinfo
mail.Subject = projtab.Projectid + "-->" + subject
mail.Name = projtab.From_email
mail.Tomail = projtab.Tod_error_to_recievers
mail.Host = projtab.Emailserver_host + ":" + common.ValueToString(projtab.Emailserver_port, "")
mail.Password = projtab.From_pwd
mail.Username = projtab.From_email
err = mail.Add()
if err != nil {
glog.InfoExtln("发送邮件", "err is :", err)
}
return
}
// 为项目指定的供应组发送SEQ+1的预警邮件(基于指定供应组)
func AlertForCustOrderUpdateTodByRule(projtab db.Me_project, bl_co service.BL_CustOrder, vcov db.VCustorderVer ){
var(
err error
idx,seqtype,k int
todrule,v,mailsubject,mailbody string
kvlst,rulelst []string
sgdict map[string]string
exist bool
)
// 获取项目指定的TOD邮件规则
if todrule, err = service.GetSysStringParameter(2, bl_co.Projnr, "TOD_EMAIL_RULE"); err != nil {
return
}
kvlst = strings.Split(todrule, ";")
if len(kvlst) > 0 {
for idx, _ = range kvlst {
rulelst = strings.Split(kvlst[idx], ":")
// 蒋rulest[0]转化为整型与bl_co.SeqType 比较,如果相等,则比较1开始的供应组
seqtype = common.ValueToInt(rulelst[0], 0)
if seqtype == 1 {
sgdict = make(map[string]string) //去除第一个元素
for k, v = range rulelst {
if k > 0 {
sgdict[v] = v
}
}
// 遍历客户订单的 Pln_custorder_ver_partlst 获取供应组
exist = false
for _, jdv := range vcov.Pln_custorder_ver.Partlst {
if _, exist = sgdict[jdv.Supplygroupid]; exist {
break
}
}
if exist {
mailsubject = "SEQ+1提醒"
mailbody = "项目号: " + bl_co.Custordertab.Projnr + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+1请求,取消!"
if err = SendTodErrorEmail(projtab, mailsubject, mailbody); err != nil {
glog.InfoExtln("发送邮件", "err is :", err)
}
}
}
}
}
}

Loading…
Cancel
Save