|
|
- 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
- }
|