package budget2 import ( "errors" "fmt" "reflect" "zhiyuan/models/final" "zhiyuan/pkg/db" "zhiyuan/pkg/utils" "zhiyuan/services/budget2" "github.com/gin-gonic/gin" ) type Order struct { ID int64 `json:"id" prop:"add:false"` Name string `json:"name" label:"名称" type:"string" prop:"edit"` AdminId int64 `json:"adminId" type:"int" prop:"add:false" search:"="` PkgId int64 `json:"pkg_id" type:"int" prop:"add:" search:"="` SiteId int64 `json:"site_id" type:"int" prop:"add" search:"="` Content []byte `json:"content" label:"内容" type:"byte" prop:"add:false"` Statistics string `json:"statistics" label:"统计" type:"string" prop:"add:false"` State int64 `json:"state" label:"状态" type:"int" prop:"add:false"` DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"` CreatedAt int64 `json:"created_at" prop:"add:false"` UpdatedAt int64 `json:"updated_at" prop:"add:false"` db.BaseModel } func (Order) TableName() string { return "zy_budget2_order" } func (Order) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { return true } func (Order) OnePrivilege(c *gin.Context, id int64) bool { return false } func (Order) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error { pkgId, _ := db.ToInt64(data["pkg_id"]) siteId, _ := db.ToInt64(data["site_id"]) var site final.FinalSite db.GetModel(map[string]interface{}{"id": siteId, "deleted_at": 0}, &site) if site.ID == 0 { return errors.New("工地不存在") } orders, err := db.GetModelMap(db.Type(Order{}), map[string]interface{}{ "pkg_id": pkgId, "site_id": siteId, "deleted_at": 0, }, []string{"statistics"}) if err != nil { return err } statistics := make([]string, 0) for _, o := range orders { statistics = append(statistics, db.ToString(o["statistics"])) } order, err := budget2.CreateOrder(pkgId, siteId, site.Area, []int{int(site.Room1), int(site.Room2), int(site.Room3), int(site.Room4), int(site.Room5)}, statistics) if err != nil { return err } content, err := order.Form.Content() if err != nil { return err } data["adminId"] = c.GetInt("adminID") data["content"] = content return nil } func (Order) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { return errors.New("没有权限") } func (Order) DelPrivilege(c *gin.Context, id int64) error { var order Order db.GetModel(map[string]interface{}{"id": id, "deleted_at": 0}, &order) if order.State != 0 { return errors.New("合同报价无法删除") } return nil } func (Order) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) { /*var model Order db.GetModel(map[string]interface{}{"id": id}, &model) if model.ID == 0 { return } order, err := budget.LoadOrder(model) if err != nil { return } context := budget.NewContext(order, c) order.Save(context)*/ } func (model Order) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{} } func (Order) Page() bool { return true } func (Order) Count() bool { return true } func (model Order) LoadOrder() (*budget2.Order, error) { orders, err := db.GetModelMap(db.Type(Order{}), map[string]interface{}{ "pkg_id": model.PkgId, "site_id": model.SiteId, "deleted_at": 0, }, []string{"statistics"}) if err != nil { return nil, err } statistics := make([]string, 0) for _, o := range orders { statistics = append(statistics, db.ToString(o["statistics"])) } return budget2.LoadOrder(model.ID, model.PkgId, model.SiteId, model.Content, statistics) } func SaveOrder(order *budget2.Order) error { content, err := order.Form.Content() if err != nil { return err } statistics := order.Form.Statistics() data := map[string]interface{}{ "content": content, "statistics": statistics, } if order.ID == 0 { id, err := db.InsertModel(reflect.TypeOf(Order{}), data) if err != nil { return err } order.ID = id } else { err := db.UpdateModel(reflect.TypeOf(Order{}), order.ID, data) if err != nil { return err } var model Order db.GetModel(map[string]interface{}{"id": order.ID, "deleted_at": 0}, &model) if model.State == 1 { var site final.FinalSite db.GetModel(map[string]interface{}{"id": order.SiteId, "deleted_at": 0}, &site) if site.ID != 0 { var amount final.FinalSiteAmount db.GetModel(map[string]interface{}{"site_id": order.SiteId, "deleted_at": 0}, &amount) if amount.ID != 0 { from := utils.JsonDecode(amount.Content).ToMap() from = order.Form.UpdateAmount(from) context, err := final.NewAmountContext(site, from) if err != nil { return err } contractTotal, performance, purchase, custom, personalCollect, personalMaterial, personalCustom, specialItem, designFree, err := context.Eval() if err != nil { return err } db.InsertModel(db.Type(final.FinalSiteAmountRecord{}), map[string]interface{}{ "site_id": amount.SiteId, "content": context.Save(), "contract_total": contractTotal, "performance": performance, "purchase": purchase, "custom": custom, "personal_collect": personalCollect, "personal_material": personalMaterial, "personal_custom": personalCustom, "special_item": specialItem, "design_free": designFree, "starttime": amount.StartTime, "duration": amount.Duration, "endtime": amount.EndTime, "files": amount.Files, "created_id": 0, }) db.UpdateModel(db.Type(final.FinalSiteAmount{}), amount.ID, map[string]interface{}{ "site_id": amount.SiteId, "content": context.Save(), "contract_total": contractTotal, "performance": performance, "purchase": purchase, "custom": custom, "personal_collect": personalCollect, "personal_material": personalMaterial, "personal_custom": personalCustom, "special_item": specialItem, "design_free": designFree, "starttime": amount.StartTime, "duration": amount.Duration, "endtime": amount.EndTime, "files": amount.Files, "created_id": 0, }) } } } } return nil } type OrderMobile struct { Order Content string `json:"content" prop:"select:false"` SiteOrderId int64 `json:"site_order_id" prop:"select:finalsite.order_id"` } func (model OrderMobile) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model OrderMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{{ Model: final.FinalSite{}, As: "finalsite", On: []string{"`finalsite`.`id` = " + model.TableName() + ".`site_id`"}, }} }