123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- 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`"},
- }}
- }
|