GAAS GFrame项目web后台
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.

254 lines
7.2 KiB

package models
import (
"LAPP_GAAS_GFrame_BACKEND/db"
"LAPP_GAAS_GFrame_BACKEND/utils"
"xorm.io/core"
)
type PmLocation struct {
Finr int `json:"pm_location-finr" xorm:"not null pk INT(4)"`
Locaid int `json:"pm_location-locaid" xorm:"not null pk INT(8)"`
Locaname string `json:"pm_location-locaname" xorm:"not null VARCHAR(40)"`
LocaCust1 string `json:"pm_location-loca_cust1" xorm:"not null VARCHAR(100)"`
LocaCust2 string `json:"pm_location-loca_cust2" xorm:"not null VARCHAR(100)"`
LocaCust3 string `json:"pm_location-loca_cust3" xorm:"not null VARCHAR(100)"`
LocaCust4 string `json:"pm_location-loca_cust4" xorm:"not null VARCHAR(100)"`
Lastmodif string `json:"pm_location-lastmodif" xorm:"not null VARCHAR(14)"`
Lastuser string `json:"pm_location-lastuser" xorm:"not null VARCHAR(20)"`
Credatuz string `json:"pm_location-credatuz" xorm:"not null VARCHAR(14)"`
Valst []PmAsset `json:"valst" xorm:"-"`
UnValst []PmAsset `json:"unvalst" xorm:"-"`
Children []PmAsset `json:"children" xorm:"-"`
}
func (t *PmLocation) TableName() string {
return "pm_location"
}
// 清除string字段的右侧空格
func (t *PmLocation) Clipped() {
utils.TrimStruct(t, *t)
}
//增
func (t *PmLocation) Add() error {
e := db.Eloquent.Master()
snr := new(Snrtab)
snr.Finr = t.Finr
//生成ID
Locationid, err := snr.GetNextSnr("Locationid")
t.Locaid = utils.ValueToInt(Locationid,0)
_, err = e.Table("pm_location").Insert(t)
if err != nil {
return err
}
var Assetids []int
for _, v := range t.Valst {
Assetids = append(Assetids, v.Assetid)
}
if !utils.ValueIsEmpty(Assetids) {
//批量更新
_, err = e.Table("pm_asset").In("assetid", Assetids).Where("finr = ?", t.Finr).Update(map[string]interface{}{"locaid": t.Locaid})
if err != nil {
return err
}
}
return nil
}
//删
func (t *PmLocation) Del() error {
e := db.Eloquent.Master()
_, err := e.ID(core.PK{t.Finr, t.Locaid}).Delete(&PmLocation{})
if err != nil {
return err
}
countrole := new(PmAsset)
affw, _ := e.Table("pm_asset").Where("finr = ? and locaid = ?", t.Finr, t.Locaid).Count(countrole)
if affw > 0 {
//更新对应的资源定义表
_, err = e.Table("pm_asset").Where("finr = ? and locaid = ?", t.Finr, t.Locaid).Update(map[string]interface{}{"locaid": 0})
if err != nil {
return err
}
}
return nil
}
//改
func (t *PmLocation) Update(fileds []string) error {
e := db.Eloquent.Master()
_, err := e.Table("pm_location").MustCols(fileds...).Where("finr = ? and locaid = ?", t.Finr, t.Locaid).Update(t)
if err != nil {
return err
}
var Assetids []int
for _, v := range t.Valst {
Assetids = append(Assetids, v.Assetid)
}
if !utils.ValueIsEmpty(Assetids) {
//批量更新
_, err = e.Table("pm_asset").In("assetid", Assetids).Where("finr = ?", t.Finr).Update(map[string]interface{}{"locaid": t.Locaid})
if err != nil {
return err
}
}
var NAssetids []int
for _, v := range t.UnValst {
NAssetids = append(NAssetids, v.Assetid)
}
if !utils.ValueIsEmpty(NAssetids) {
//批量更新
_, err = e.Table("pm_asset").In("assetid", NAssetids).Where("finr = ?", t.Finr).Update(map[string]interface{}{"locaid": 0})
if err != nil {
return err
}
}
return nil
}
//查
func (t *PmLocation) SelectOne() (PmLocation, error) {
e := db.Eloquent.Master()
var data PmLocation
_, err := e.ID(core.PK{t.Finr, t.Locaid}).Get(&data)
if err != nil {
return data, err
}
var valst []PmAsset
err = e.Table("pm_asset").Where("finr = ? and locaid = ?", t.Finr, t.Locaid).Find(&valst)
if err != nil {
return data, err
}
var uvalst []PmAsset
err = e.Table("pm_asset").Where("finr = ? and (locaid =0 or locaid = null)", t.Finr).Find(&uvalst)
if err != nil {
return data, err
}
data.Valst = valst
data.UnValst = uvalst
return data, nil
}
//查所有
func (t *PmLocation) SelectAll() ([]PmAsset, error) {
e := db.Eloquent.Master()
var data []PmAsset
err := e.Table("pm_asset").Where("finr = ? and (locaid =0 or locaid = null)", t.Finr).Find(&data)
if err != nil {
return data, err
}
return data, nil
}
//查所有地点
func (t *PmLocation) SelectLocalions() (data []PmLocation,err error) {
e := db.Eloquent.Master()
err = e.Table(t.TableName()).Where("finr = ?", t.Finr).Find(&data)
if err != nil {
return data, err
}
return data, nil
}
//分页
func (t *PmLocation) GetPage(descr string, pageSize int, pageIndex int) ([]PmLocation, int, error) {
data := make([]PmLocation, 0)
e := db.Eloquent.Master()
table := e.Table("pm_location").Where("finr = ? ", t.Finr)
parameters := make([]interface{}, 0)
where := ""
parameters = append(parameters, t.Finr)
if descr != "" {
table = table.And("locaname like concat('%',?,'%')", descr)
where += " and locaname like concat('%',?,'%')"
parameters = append(parameters, descr)
}
parameters = append(parameters, (pageIndex-1)*pageSize, pageSize)
err := e.SQL("SELECT * FROM (SELECT * FROM pm_location where finr = ?"+where+") t order by locaid offset ? row fetch next ? row only", parameters...).Find(&data)
if err != nil {
return data, 0, err
}
count, err := table.Count(new(PmLocation))
if err != nil {
return data, 0, err
}
for k, _ := range data {
data[k].Clipped()
}
return data, int(count), nil
}
type TreePmLocation struct {
Locaid int `json:"pm_asset-locaid" xorm:"not null pk INT(8)"`
Locaname string `json:"pm_asset-assetname" xorm:"not null VARCHAR(40)"`
Children []PmAsset `json:"children" xorm:"-"`
}
type LocationAsset struct {
PmAsset `xorm:"extends"`
PmLocation `xorm:"extends"`
}
/**
*填充资产树:根节点为工厂,第一层节点为location;第二层节点为资产
**************/
func (t *PmLocation) TreeAsset() ([]TreePmLocation, error) {
m := make([]TreePmLocation, 0)
data := make([]LocationAsset, 0)
e := db.Eloquent.Master()
err := e.Table("pm_location").Join("left", "pm_asset", "pm_asset.finr=pm_location.finr and pm_asset.locaid=pm_location.locaid").Where("pm_location.finr = ? ", t.Finr).Find(&data)
if err != nil {
return m, err
}
tem := make(map[int]interface{})
for i := 0; i < len(data); i++ {
key := data[i].PmLocation.Locaid
if utils.ValueIsEmpty(key) {
continue
}
_, ok := tem[key]
if ok {
continue
} else {
tem[key] = data[i].PmLocation
}
val := TreePmLocation{}
val.Locaid = data[i].PmLocation.Locaid
val.Locaname = data[i].PmLocation.Locaname
menusInfo := DiguiLocation(&data, val)
m = append(m, menusInfo)
}
return m, nil
}
func DiguiLocation(locationlist *[]LocationAsset, location TreePmLocation) TreePmLocation {
list := *locationlist
min := make([]PmAsset, 0)
for j := 0; j < len(list); j++ {
if location.Locaid != list[j].PmLocation.Locaid {
continue
}
mi := PmAsset{}
mi.Locaid = list[j].PmAsset.Locaid
mi.Finr = list[j].PmAsset.Finr
mi.Descr = list[j].PmAsset.Descr
mi.Assetid = list[j].PmAsset.Assetid
mi.Assetname = list[j].PmAsset.Descr
mi.Assetstatus = list[j].PmAsset.Assetstatus
mi.Assettype = list[j].PmAsset.Assettype
mi.Weekmodelid = list[j].PmAsset.Weekmodelid
mi.Operator = list[j].PmAsset.Operator
mi.Costcenterid = list[j].PmAsset.Costcenterid
mi.Maker = list[j].PmAsset.Maker
mi.Year = list[j].PmAsset.Year
min = append(min, mi)
}
location.Children = min
return location
}