order.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package budget2
  2. import (
  3. "errors"
  4. "fmt"
  5. "reflect"
  6. "zhiyuan/models/final"
  7. "zhiyuan/pkg/db"
  8. "zhiyuan/pkg/utils"
  9. "zhiyuan/services/budget2"
  10. "github.com/gin-gonic/gin"
  11. )
  12. type Order struct {
  13. ID int64 `json:"id" prop:"add:false"`
  14. Name string `json:"name" label:"名称" type:"string" prop:"edit"`
  15. AdminId int64 `json:"adminId" type:"int" prop:"add:false" search:"="`
  16. PkgId int64 `json:"pkg_id" type:"int" prop:"add:" search:"="`
  17. SiteId int64 `json:"site_id" type:"int" prop:"add" search:"="`
  18. Content []byte `json:"content" label:"内容" type:"byte" prop:"add:false"`
  19. Statistics string `json:"statistics" label:"统计" type:"string" prop:"add:false"`
  20. State int64 `json:"state" label:"状态" type:"int" prop:"add:false"`
  21. DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
  22. CreatedAt int64 `json:"created_at" prop:"add:false"`
  23. UpdatedAt int64 `json:"updated_at" prop:"add:false"`
  24. db.BaseModel
  25. }
  26. func (Order) TableName() string {
  27. return "zy_budget2_order"
  28. }
  29. func (Order) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  30. return true
  31. }
  32. func (Order) OnePrivilege(c *gin.Context, id int64) bool {
  33. return false
  34. }
  35. func (Order) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
  36. pkgId, _ := db.ToInt64(data["pkg_id"])
  37. siteId, _ := db.ToInt64(data["site_id"])
  38. var site final.FinalSite
  39. db.GetModel(map[string]interface{}{"id": siteId,
  40. "deleted_at": 0}, &site)
  41. if site.ID == 0 {
  42. return errors.New("工地不存在")
  43. }
  44. orders, err := db.GetModelMap(db.Type(Order{}), map[string]interface{}{
  45. "pkg_id": pkgId,
  46. "site_id": siteId,
  47. "deleted_at": 0,
  48. }, []string{"statistics"})
  49. if err != nil {
  50. return err
  51. }
  52. statistics := make([]string, 0)
  53. for _, o := range orders {
  54. statistics = append(statistics, db.ToString(o["statistics"]))
  55. }
  56. 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)
  57. if err != nil {
  58. return err
  59. }
  60. content, err := order.Form.Content()
  61. if err != nil {
  62. return err
  63. }
  64. data["adminId"] = c.GetInt("adminID")
  65. data["content"] = content
  66. return nil
  67. }
  68. func (Order) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  69. return errors.New("没有权限")
  70. }
  71. func (Order) DelPrivilege(c *gin.Context, id int64) error {
  72. var order Order
  73. db.GetModel(map[string]interface{}{"id": id,
  74. "deleted_at": 0}, &order)
  75. if order.State != 0 {
  76. return errors.New("合同报价无法删除")
  77. }
  78. return nil
  79. }
  80. func (Order) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) {
  81. /*var model Order
  82. db.GetModel(map[string]interface{}{"id": id}, &model)
  83. if model.ID == 0 {
  84. return
  85. }
  86. order, err := budget.LoadOrder(model)
  87. if err != nil {
  88. return
  89. }
  90. context := budget.NewContext(order, c)
  91. order.Save(context)*/
  92. }
  93. func (model Order) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  94. return []db.JoinModel{}
  95. }
  96. func (Order) Page() bool {
  97. return true
  98. }
  99. func (Order) Count() bool {
  100. return true
  101. }
  102. func (model Order) LoadOrder() (*budget2.Order, error) {
  103. orders, err := db.GetModelMap(db.Type(Order{}), map[string]interface{}{
  104. "pkg_id": model.PkgId,
  105. "site_id": model.SiteId,
  106. "deleted_at": 0,
  107. }, []string{"statistics"})
  108. if err != nil {
  109. return nil, err
  110. }
  111. statistics := make([]string, 0)
  112. for _, o := range orders {
  113. statistics = append(statistics, db.ToString(o["statistics"]))
  114. }
  115. return budget2.LoadOrder(model.ID, model.PkgId, model.SiteId, model.Content, statistics)
  116. }
  117. func SaveOrder(order *budget2.Order) error {
  118. content, err := order.Form.Content()
  119. if err != nil {
  120. return err
  121. }
  122. statistics := order.Form.Statistics()
  123. data := map[string]interface{}{
  124. "content": content,
  125. "statistics": statistics,
  126. }
  127. if order.ID == 0 {
  128. id, err := db.InsertModel(reflect.TypeOf(Order{}), data)
  129. if err != nil {
  130. return err
  131. }
  132. order.ID = id
  133. } else {
  134. err := db.UpdateModel(reflect.TypeOf(Order{}), order.ID, data)
  135. if err != nil {
  136. return err
  137. }
  138. var model Order
  139. db.GetModel(map[string]interface{}{"id": order.ID,
  140. "deleted_at": 0}, &model)
  141. if model.State == 1 {
  142. var site final.FinalSite
  143. db.GetModel(map[string]interface{}{"id": order.SiteId,
  144. "deleted_at": 0}, &site)
  145. if site.ID != 0 {
  146. var amount final.FinalSiteAmount
  147. db.GetModel(map[string]interface{}{"site_id": order.SiteId,
  148. "deleted_at": 0}, &amount)
  149. if amount.ID != 0 {
  150. from := utils.JsonDecode(amount.Content).ToMap()
  151. from = order.Form.UpdateAmount(from)
  152. context, err := final.NewAmountContext(site, from)
  153. if err != nil {
  154. return err
  155. }
  156. contractTotal, performance, purchase, custom, personalCollect, personalMaterial, personalCustom, specialItem, designFree, err := context.Eval()
  157. if err != nil {
  158. return err
  159. }
  160. db.InsertModel(db.Type(final.FinalSiteAmountRecord{}), map[string]interface{}{
  161. "site_id": amount.SiteId,
  162. "content": context.Save(),
  163. "contract_total": contractTotal,
  164. "performance": performance,
  165. "purchase": purchase,
  166. "custom": custom,
  167. "personal_collect": personalCollect,
  168. "personal_material": personalMaterial,
  169. "personal_custom": personalCustom,
  170. "special_item": specialItem,
  171. "design_free": designFree,
  172. "starttime": amount.StartTime,
  173. "duration": amount.Duration,
  174. "endtime": amount.EndTime,
  175. "files": amount.Files,
  176. "created_id": 0,
  177. })
  178. db.UpdateModel(db.Type(final.FinalSiteAmount{}), amount.ID, map[string]interface{}{
  179. "site_id": amount.SiteId,
  180. "content": context.Save(),
  181. "contract_total": contractTotal,
  182. "performance": performance,
  183. "purchase": purchase,
  184. "custom": custom,
  185. "personal_collect": personalCollect,
  186. "personal_material": personalMaterial,
  187. "personal_custom": personalCustom,
  188. "special_item": specialItem,
  189. "design_free": designFree,
  190. "starttime": amount.StartTime,
  191. "duration": amount.Duration,
  192. "endtime": amount.EndTime,
  193. "files": amount.Files,
  194. "created_id": 0,
  195. })
  196. }
  197. }
  198. }
  199. }
  200. return nil
  201. }
  202. type OrderMobile struct {
  203. Order
  204. Content string `json:"content" prop:"select:false"`
  205. SiteOrderId int64 `json:"site_order_id" prop:"select:finalsite.order_id"`
  206. }
  207. func (model OrderMobile) GroupBy() string {
  208. return fmt.Sprintf("`%s`.`id`", model.TableName())
  209. }
  210. func (model OrderMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  211. return []db.JoinModel{{
  212. Model: final.FinalSite{},
  213. As: "finalsite",
  214. On: []string{"`finalsite`.`id` = " + model.TableName() + ".`site_id`"},
  215. }}
  216. }