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.

163 lines
4.6 KiB

package service
import (
"errors"
"fmt"
"github.com/go-xorm/xorm"
"leit.com/leit_seat_aps/common"
"leit.com/leit_seat_aps/db"
"strings"
"time"
)
// 生产订单业务对象
type BL_WorkOrder struct {
Workordernr string // 生产订单号
Custordernr string // 客户订单号
Projnr string
Ordertype string // 生产订单类型
Partfamilyid string // 零件族ID
Supplygroupid string
Status int
Preschedseq int
Schedseq int
Oemseq int
Shippable int
Swet time.Time
Worklineid string // 产线
Bl_wopartdict map[string]BL_WorkOrder_Part // 订单零件清单
Bl_ordattrdict map[int]BL_OrdAttribute // 订单属性字典
Bl_verrlist []BL_VerifyError // 校验报错信息
Workordertab db.Pln_workorder // 生产订单记录本身
}
type BL_WorkOrder_Part struct {
Partid string
Qty int
Workordernr string
Parttab db.Me_part // 零件自身
Workordertab db.Pln_workorder // 生产订单记录本身
}
// 创建生产订单头
func (bl_wo *BL_WorkOrder) CreateHead(session *xorm.Session, tp *TodProject) (err error) {
var (
wonr string
wotab db.Pln_workorder
woppakstatab db.Prod_wo_packstatus
)
// 填充生产订单信息
if strings.TrimSpace(tp.Projecttab.Workorder_snr) != "" {
if wonr, err = SN_GetNextSnrBySession(strings.TrimSpace(tp.Projecttab.Workorder_snr), session); err != nil {
return
}
} else {
if wonr, err = SN_GetNextSnrBySession("WORKORDER", session); err != nil {
return
}
}
wotab = db.Pln_workorder{}
wotab.Finr = db.G_FINR
wotab.Workordernr = wonr
wotab.Projnr = bl_wo.Projnr
wotab.Custordernr = bl_wo.Custordernr
wotab.Supplygroupid = bl_wo.Supplygroupid
wotab.Partfamilyid = bl_wo.Partfamilyid
wotab.Status = common.WO_STATUS_UNPLANED
wotab.Shippable = bl_wo.Shippable
wotab.Worklineid = bl_wo.Worklineid
wotab.Planqty = 1
wotab.Ordertype = "SEQ"
wotab.Lastuser = "service"
wotab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = wotab.Insert(session); err != nil {
return err
}
bl_wo.Workordernr = wonr
bl_wo.Workordertab = wotab
// 创建生产工单的包装状态数据
woppakstatab = db.Prod_wo_packstatus{}
woppakstatab.Finr = db.G_FINR
woppakstatab.Workordernr = wotab.Workordernr
woppakstatab.Projnr = wotab.Projnr
woppakstatab.Packstatus = 0
woppakstatab.Lastuser = "tod_service"
woppakstatab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = woppakstatab.Insert(session); err != nil {
return err
}
return
}
// 保存客户订单的零件和属性清单( 删除原有的)
func (bl_wo *BL_WorkOrder) SavePartAndAtcodList(session *xorm.Session) (err error) {
var (
wotab db.Pln_workorder
bl_wopt BL_WorkOrder_Part
bl_ordattr BL_OrdAttribute
woptlst db.Pln_workorder_partlst
woatlst db.Pln_workorder_atcodlst
attrval string
idx int
)
// 删除原有的零件和属性清单
wotab = db.Pln_workorder{Workordernr: bl_wo.Workordernr}
if !wotab.DelPartlst(session) {
err = errors.New(fmt.Sprintf("Failed to delete workorder: %s part list!", wotab.Workordernr))
return
}
if !wotab.DelAttributelst(session) {
err = errors.New(fmt.Sprintf("Failed to delete workorder: %s attribute list!", wotab.Workordernr))
return
}
// 遍历生产订单零件列表
for _, bl_wopt = range bl_wo.Bl_wopartdict {
woptlst = db.Pln_workorder_partlst{}
woptlst.Finr = db.G_FINR
woptlst.Workordernr = bl_wo.Workordernr
woptlst.Partid = bl_wopt.Partid
woptlst.Partqty = bl_wopt.Qty
woptlst.Lastuser = "service"
woptlst.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = woptlst.Insert(session); err != nil {
return err
}
}
// 遍历属性列表并存储
idx = 0
for _, bl_ordattr = range bl_wo.Bl_ordattrdict {
woatlst = db.Pln_workorder_atcodlst{}
woatlst.Finr = db.G_FINR
woatlst.Workordernr = bl_wo.Workordernr
woatlst.Attrcode = bl_ordattr.Attrcode
for _, attrval = range bl_ordattr.Attrvaldict {
idx++
woatlst.Pos = idx
woatlst.Attrvalue = attrval
woatlst.Lastuser = "service"
woatlst.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = woatlst.Insert(session); err != nil {
return err
}
}
}
return
}
// 更新工单的拣料状态
func (bl_wo *BL_WorkOrder) SetPickingStatus(session *xorm.Session, picked int) (err error) {
bl_wo.Workordertab.Pickstatus = picked
bl_wo.Workordertab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = bl_wo.Workordertab.UpdateFields(session, "pickstatus, lastmodif"); err != nil {
return
}
return
}