|
|
- package models
-
- import (
- "errors"
- "leit.com/LAPP_GAAS_GFrame/db"
- "leit.com/LAPP_GAAS_GFrame/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()
- countrole := new(PmLocation)
- affw, err := e.Table("pm_location").ID(core.PK{t.Finr, t.Locaid}).Count(countrole)
- if err != nil {
- return err
- }
- if affw > 0 {
- return errors.New("数据已经存在!")
- }
- _, 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() error {
- e := db.Eloquent.Master()
- _, err := e.Table("pm_location").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) 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
- }
|