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.

615 lines
18 KiB

package db
import (
"errors"
"github.com/go-xorm/xorm"
"leit.com/leit_seat_aps/common"
"xorm.io/core"
)
//客户订单表
type Pln_custorder struct {
Finr int `xorm:"pk" json:"pln_custorder.finr"`
Custordernr string `xorm:"pk" json:"pln_custorder.custordernr"`
Oemordernr string `json:"pln_custorder.oemordernr"`
Partfamilyid string `json:"pln_custorder.partfamilyid"`
Orderinfo string `json:"pln_custorder.orderinfo"`
Ordertime string `json:"pln_custorder.ordertime"`
Swet string `json:"pln_custorder.swet"`
Projnr string `json:"pln_custorder.projnr"`
Partid string `json:"pln_custorder.partid"`
Status int `json:"pln_custorder.status"`
Handlestatus string `json:"pln_custorder.handlestatus"`
Vin string `json:"pln_custorder.vin"`
Seqswet string `json:"pln_custorder.seqswet"`
Oemseq float64 `json:"pln_custorder.oemseq"`
Assemblyline string `json:"pln_custorder.assemblyline"`
Unloadingpoint string `json:"pln_custorder.unloadingpoint"`
Calloffnr int `json:"pln_custorder.calloffnr"`
Checksequence int `json:"pln_custorder.checksequence"`
Calloffswet string `json:"pln_custorder.calloffswet"`
Consigneeplant int `json:"pln_custorder.consigneeplant"`
Consigneecompany int `json:"pln_custorder.consigneecompany"`
Consumecompany int `json:"pln_custorder.consumecompany"`
Consumeplant int `json:"pln_custorder.consumeplant"`
Unloadingplace string `json:"pln_custorder.unloadingplace"`
Backflush int `json:"pln_custorder.backflush"`
Backflushsn string `json:"pln_custorder.backflushsn"`
Vehicleidset string `json:"pln_custorder.vehicleidset"`
Vehicleid string `json:"pln_custorder.vehicleid"`
Lastmodif string `json:"pln_custorder.lastmodif"`
Lastuser string `json:"pln_custorder.lastuser"`
Credatuz string `json:"pln_custorder.credatuz"`
Attrlst []Pln_custorder_atcodlst `xorm:"-"`
Partlst []Pln_custorder_partlst `xorm:"-"`
Wotablst []Pln_workorder `xorm:"-"`
Sgpartlst []Pln_custorder_supplygroup_partlst `xorm:"-"`
}
// 客户订单和它的版本头综合视图
type VCustorderVer struct {
Pln_custorder `xorm:"extends"`
Pln_custorder_ver `xorm:"extends"`
}
func (t *Pln_custorder) Clipped() {
common.TrimStruct(t, *t)
}
func (t *Pln_custorder) TableName() string {
return "pln_custorder"
}
//增
func (t *Pln_custorder) Add() error {
e := G_DbEngine
cotab := new(Pln_custorder)
affw, err := e.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Count(cotab)
if err != nil {
return err
}
if affw > 0 {
return errors.New("数据已经存在!")
}
_, err = e.Table("pln_custorder").Insert(t)
if err != nil {
return err
}
return nil
}
//增
func (t *Pln_custorder) Insert(session *xorm.Session) error {
cotab := new(Pln_custorder)
affw, err := session.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Count(cotab)
if err != nil {
return err
}
if affw > 0 {
return errors.New("数据已经存在!")
}
_, err = session.Table("pln_custorder").Insert(t)
if err != nil {
return err
}
return nil
}
//删
func (t *Pln_custorder) Del() bool {
e := G_DbEngine
_, err := e.ID(core.PK{G_FINR, t.Custordernr}).Delete(&Pln_custorder{})
if err != nil {
return false
}
return true
}
//改
func (t *Pln_custorder) Update(fields string) (err error) {
e := G_DbEngine
//判断对应的工单,是否全是26状态,如果存在,则不更新
var plc Pln_workorder
affw, err := e.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", G_FINR, t.Custordernr, common.WO_STATUS_RELEASED).Count(&plc)
if err != nil {
return err
}
if affw > 0 {
return
}
_, err = e.ID(core.PK{G_FINR, t.Custordernr}).Cols(fields).Update(t)
if err != nil {
return
}
return
}
//更新指定字段(20变成26)
func (t *Pln_custorder) UpdateToFields(session *xorm.Session, fields string) (err error) {
//判断对应的工单,是否全是26状态,如果存在,则不更新
var plc Pln_workorder
ok, err := session.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", G_FINR, t.Custordernr, common.WO_STATUS_RELEASED).Get(&plc)
if err != nil {
return err
}
if !ok {
if _, err = session.Table("pln_custorder").Where("finr = ? and custordernr = ? and status = ?", G_FINR, t.Custordernr, common.WO_STATUS_PLANNED).Cols(fields).Update(t); err != nil {
return
}
}
return
}
//更新指定字段
func (t *Pln_custorder) UpdateFields(session *xorm.Session, fields string) (err error) {
if _, err = session.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Cols(fields).Update(t); err != nil {
return
}
return
}
//更新指定字段(20变成26)
func (t *Pln_custorder) UpdateToFieldsWithoutSession(fields string) (err error) {
e := G_DbEngine
if _, err = e.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Cols(fields).Update(t); err != nil {
return
}
return
}
//查
func (t *Pln_custorder) SelectOne() (data Pln_custorder, err error) {
e := G_DbEngine
_, err = e.ID(core.PK{G_FINR, t.Custordernr}).Get(&data)
if err != nil {
return data, err
}
return data, nil
}
//查
func (t *Pln_custorder) SelectCustOne() (data Pln_custorder, err error) {
e := G_DbEngine
_, err = e.Where("finr = ? and projnr = ? and oemordernr = ? and calloffnr = ?",G_FINR,t.Projnr,t.Oemordernr,t.Calloffnr).Get(&data)
if err != nil {
return data, err
}
return data, nil
}
//查询重复订单
func (t *Pln_custorder) SelectExpirationtime(Expirationtime string) (data Pln_custorder, result bool, err error) {
e := G_DbEngine
result, err = e.Where("finr = ? and oemordernr = ? and ordertime > ?", G_FINR, t.Oemordernr, Expirationtime).Get(&data)
if err != nil {
return data, false, err
}
return data, true, nil
}
//查
func (t *Pln_custorder) GetFullData() (data Pln_custorder, err error) {
var (
attrlst []Pln_custorder_atcodlst
partlst []Pln_custorder_partlst
wotablst []Pln_workorder
woattrlst []Pln_workorder_atcodlst
wopartlst []Pln_workorder_partlst
i, j, k, m, n int
)
e := G_DbEngine
_, err = e.ID(core.PK{G_FINR, t.Custordernr}).Get(&data)
if err != nil {
return
}
data.Clipped()
// 获取属性列表
if err = e.Where("finr = ? and custordernr = ?",
G_FINR, t.Custordernr).OrderBy("pos").Find(&attrlst); err != nil {
return
}
for i, _ = range attrlst {
attrlst[i].Clipped()
}
data.Attrlst = attrlst
// 获取零件列表
if err = e.Where("finr = ? and custordernr = ?",
G_FINR, t.Custordernr).OrderBy("supplygroupid, partid").Find(&partlst); err != nil {
return
}
for j, _ = range partlst {
partlst[j].Clipped()
}
data.Partlst = partlst
// 获取生产订单列表
if err = e.Where("finr = ? and custordernr = ?",
G_FINR, t.Custordernr).OrderBy("workordernr").Find(&wotablst); err != nil {
return
}
for k, _ = range wotablst {
wotablst[k].Clipped()
// 获取生产订单的属性列表
if err = e.Where("finr = ? and workordernr = ?",
G_FINR, wotablst[k].Workordernr).OrderBy("pos").Find(&woattrlst); err != nil {
return
}
for m, _ = range woattrlst {
woattrlst[m].Clipped()
}
wotablst[k].Attrlst = woattrlst
// 获取生产订单的零件列表
if err = e.Where("finr = ? and workordernr = ?",
G_FINR, wotablst[k].Workordernr).OrderBy("partid").Find(&wopartlst); err != nil {
return
}
for n, _ = range wopartlst {
wopartlst[n].Clipped()
}
wotablst[k].Partlst = wopartlst
}
data.Wotablst = wotablst
return data, nil
}
//基于Oem订单号查客户订单
func (t *Pln_custorder) GetByOemOrderNr() (exist bool, cotab Pln_custorder, err error) {
var (
i int
cotablst []Pln_custorder
)
e := G_DbEngine
if err = e.Where("finr = ? and oemordernr = ? and partfamilyid = ? and projnr = ? and orderinfo != ?",
G_FINR, t.Oemordernr, t.Partfamilyid, t.Projnr, "REO").Desc("credatuz").Limit(1, 0).Find(&cotablst); err != nil {
return
}
if len(cotablst) > 0 {
cotablst[0].Clipped()
cotab = cotablst[0]
if err = e.Where("finr = ? and custordernr = ?",
G_FINR, cotab.Custordernr).OrderBy("supplygroupid").Find(&cotab.Wotablst); err != nil {
return
}
for i, _ = range cotab.Wotablst {
cotab.Wotablst[i].Clipped()
}
exist = true
return
} else {
exist = false
}
return
}
//基于Oem订单号查客户订单
func (t *Pln_custorder) GetByOemOrderNrBySession(session *xorm.Session) (exist bool, cotab Pln_custorder, err error) {
var cotablst []Pln_custorder
if err = session.Where("finr = ? and oemordernr = ? and partfamilyid = ? and projnr = ?",
G_FINR, t.Oemordernr, t.Partfamilyid, t.Projnr).Desc("credatuz").Limit(1, 0).Find(&cotablst); err != nil {
return
}
if len(cotablst) > 0 {
cotablst[0].Clipped()
cotab = cotablst[0]
exist = true
return
} else {
exist = false
}
return
}
//基于零件族查找状态>=20的客户订单的最大OEMSEQ号
func (t *Pln_custorder) GetMaxOemSeqByPartFamily() (maxseq int, conr string, err error) {
var cotablst []Pln_custorder
e := G_DbEngine
if err = e.Where("finr = ? and projnr = ? and partfamilyid = ? and status >= ? and oemseq < ?",
G_FINR, t.Projnr, t.Partfamilyid, common.CO_STATUS_PLANNED, 9999999999).NotIn("orderinfo", "INT", "REO").Desc("oemseq").Limit(1, 0).Find(&cotablst); err != nil {
return
}
if len(cotablst) > 0 {
maxseq = common.ValueToInt(cotablst[0].Oemseq, 0)
conr = cotablst[0].Custordernr
return
} else {
maxseq = 0
conr = ""
}
return
}
// 查询客户订单所有的SupplyGroup的零件清单
func (t *Pln_custorder) GetSGPartlst() (datalst []Pln_custorder_supplygroup_partlst, err error) {
e := G_DbEngine
err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("supplygroupid, partid").Find(&datalst)
for i, _ := range datalst {
datalst[i].Clipped()
}
return
}
// 查询客户订单所有的零件清单
func (t *Pln_custorder) GetPartlst() (datalst []Pln_custorder_partlst, err error) {
e := G_DbEngine
err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("supplygroupid, partid").Find(&datalst)
for i, _ := range datalst {
datalst[i].Clipped()
}
return
}
// 查询客户订单所有的属性清单
func (t *Pln_custorder) GetAttributelst() (datalst []Pln_custorder_atcodlst, err error) {
e := G_DbEngine
err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("pos").Find(&datalst)
for i, _ := range datalst {
datalst[i].Clipped()
}
return
}
// 查询客户订单所有的生产订单
func (t *Pln_custorder) GetWorkorderlst() (datalst []Pln_workorder, err error) {
e := G_DbEngine
err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("workordernr").Find(&datalst)
for i, _ := range datalst {
datalst[i].Clipped()
}
return
}
// 查询客户订单所有的生产订单及其零件清单
func (t *Pln_custorder) GetWorkorderPartlst() (datalst []Pln_workorder, err error) {
var i, j int
e := G_DbEngine
err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("workordernr").Find(&datalst)
for i, _ = range datalst {
datalst[i].Clipped()
if err = e.Where("finr = ? and workordernr = ?", G_FINR, datalst[i].Workordernr).OrderBy("partid").Find(&datalst[i].Partlst); err != nil {
return
}
for j = 0; j < len(datalst[i].Partlst); j++ {
datalst[i].Partlst[j].Clipped()
}
}
return
}
// 为客户订单添加SupplyGroup的零件清单
func (t *Pln_custorder) AddSGPartlst(session *xorm.Session, datalst []Pln_custorder_supplygroup_partlst) (err error) {
var cosgpartab Pln_custorder_supplygroup_partlst
for i := 0; i < len(datalst); i++ {
cosgpartab = Pln_custorder_supplygroup_partlst{}
cosgpartab = datalst[i]
if _, err = session.Insert(cosgpartab); err != nil {
return
}
}
return
}
// 为客户订单添加零件清单
func (t *Pln_custorder) AddPartlst(session *xorm.Session, datalst []Pln_custorder_partlst) (err error) {
var copartab Pln_custorder_partlst
for i := 0; i < len(datalst); i++ {
copartab = Pln_custorder_partlst{}
copartab = datalst[i]
if _, err = session.Insert(copartab); err != nil {
return
}
}
return
}
// 为客户订单添加属性清单
func (t *Pln_custorder) AddAttributelst(session *xorm.Session, datalst []Pln_custorder_atcodlst) (err error) {
var coattrtab Pln_custorder_atcodlst
for i := 0; i < len(datalst); i++ {
coattrtab = Pln_custorder_atcodlst{}
coattrtab = datalst[i]
if _, err = session.Insert(coattrtab); err != nil {
return
}
}
return
}
// 删除客户订单所有的SupplyGroup的零件清单
func (t *Pln_custorder) DelSGPartlst(session *xorm.Session, sgid string) bool {
sql := "DELETE FROM `pln_custorder_supplygroup_partlst` WHERE finr = ? AND custordernr = ? AND supplygroupid = ?"
if _, err := session.Exec(sql, G_FINR, t.Custordernr, sgid); err != nil {
return false
}
return true
}
// 删除客户订单所有的零件清单
func (t *Pln_custorder) DelPartlst(session *xorm.Session) bool {
sql := "DELETE FROM `pln_custorder_partlst` WHERE finr = ? AND custordernr = ?"
if _, err := session.Exec(sql, G_FINR, t.Custordernr); err != nil {
return false
}
return true
}
// 删除客户订单所有的属性清单
func (t *Pln_custorder) DelAttributelst(session *xorm.Session) bool {
sql := "DELETE FROM `pln_custorder_atcodlst` WHERE finr = ? AND custordernr = ?"
if _, err := session.Exec(sql, G_FINR, t.Custordernr); err != nil {
return false
}
return true
}
//获取客户订单版本的最近值
func (t *Pln_custorder) GetLatestVersion() (ver int, err error) {
var covtablst []Pln_custorder_ver
e := G_DbEngine
if err = e.Where("finr = ? and custordernr = ?", G_FINR,
t.Custordernr).Desc("version").Limit(1, 0).Find(&covtablst); err != nil {
return
}
if len(covtablst) > 0 {
ver = covtablst[0].Version
} else {
ver = 0
}
return
}
//获取客户订单版本的最近值
func (t *Pln_custorder) GetLatestVersionBySession(session *xorm.Session) (ver int, err error) {
var covtablst []Pln_custorder_ver
if err = session.Where("finr = ? and custordernr = ?", G_FINR,
t.Custordernr).Desc("version").Limit(1, 0).Find(&covtablst); err != nil {
return
}
if len(covtablst) > 0 {
ver = covtablst[0].Version
} else {
ver = 0
}
return
}
//获取客户订单错误索引的最近值
func (t *Pln_custorder) GetLatestErrorIndex() (idx int, err error) {
var coetablst []Pln_custorder_errorlst
e := G_DbEngine
if err = e.Where("finr = ? and custordernr = ?", G_FINR,
t.Custordernr).Desc("pos").Limit(1, 0).Find(&coetablst); err != nil {
return
}
if len(coetablst) > 0 {
idx = coetablst[0].Pos
} else {
idx = 0
}
return
}
//获取客户订单错误索引的最近值
func (t *Pln_custorder) GetLatestErrorIndexBySession(session *xorm.Session) (idx int, err error) {
var coetablst []Pln_custorder_errorlst
if err = session.Where("finr = ? and custordernr = ?", G_FINR,
t.Custordernr).Desc("pos").Limit(1, 0).Find(&coetablst); err != nil {
return
}
if len(coetablst) > 0 {
idx = coetablst[0].Pos
} else {
idx = 0
}
return
}
//基于Oem订单号,零件族和年份获取最新的客户订单
func (t *Pln_custorder) GetByAsnDataBySession(swetyear string, session *xorm.Session) (exist bool, cotab Pln_custorder, err error) {
var (
cotablst []Pln_custorder
i int
)
if err = session.Where("finr = ? and oemordernr = ? and partfamilyid = ? and swet like ?",
G_FINR, t.Oemordernr, t.Partfamilyid, swetyear+"%").Desc("credatuz").Limit(1, 0).Find(&cotablst); err != nil {
return
}
if len(cotablst) > 0 {
cotablst[0].Clipped()
cotab = cotablst[0]
exist = true
// 获取生产订单数据
if err = session.Where("finr = ? and custordernr = ? and partfamilyid = ?", G_FINR, cotab.Custordernr, cotab.Partfamilyid).OrderBy("workordernr").Find(&cotab.Wotablst); err != nil {
return
}
for i = 0; i < len(cotab.Wotablst); i++ {
cotab.Wotablst[i].Clipped()
}
return
} else {
exist = false
}
return
}
//基于Oem订单号查客户订单及其供应组零件清单
func (t *Pln_custorder) GetDataForCarmodelByOemorder(oemordnr, projnr string) (datalst []Pln_custorder, err error) {
var i, j int
e := G_DbEngine
if err = e.Where("finr = ? and oemordernr = ? and projnr = ?",
G_FINR, oemordnr, projnr).OrderBy("custordernr").Find(&datalst); err != nil {
return
}
for i = 0; i < len(datalst); i++ {
datalst[i].Clipped()
// 获取客户订单的供应组零件数据
if err = e.Where("finr = ? and custordernr = ?",
G_FINR, datalst[i].Custordernr).OrderBy("partfamilyid, supplygroupid, partid").Find(&datalst[i].Sgpartlst); err != nil {
return
}
for j = 0; j < len(datalst[i].Sgpartlst); j++ {
datalst[i].Sgpartlst[j].Clipped()
}
}
return
}
// 获取指定项目和OEM订单号的整车副规格版本
func (t *Pln_custorder) GetCarModelSpec() (vcoslst []VCustorderSpec, err error) {
e := G_DbEngine
if err = e.Table("Pln_custorder_carmodelver").Alias("cocmv").Join("INNER",
[]string{"me_carmodel_ver", "cmv"},
"cocmv.finr = cmv.finr and cocmv.carmodelid = cmv.carmodelid and cocmv.version = cmv.version").
Where("cocmv.finr = ? and cocmv.oemordernr = ? and cocmv.projnr = ?",
G_FINR, t.Oemordernr, t.Projnr).Desc("cocmv.credatuz").Find(&vcoslst); err != nil {
return
}
return
}
//查询是否有未计划的订单
func (t *Pln_custorder) SelectTenArr() (data []Pln_custorder, err error) {
e := G_DbEngine
err = e.Where("finr = ? and status = ?", G_FINR, 10).Limit(1, 0).Find(&data)
if err != nil {
return data, err
}
return data, nil
}