final_material_item.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package final
  2. import (
  3. "errors"
  4. "fmt"
  5. "zhiyuan/pkg/db"
  6. "github.com/gin-gonic/gin"
  7. )
  8. type FinalMaterialItem struct {
  9. ID int64 `json:"id" prop:"add:false"`
  10. MaterialId int64 `json:"material_id" label:"表" type:"int" prop:"add" search:"="`
  11. Name string `json:"name" label:"项目名称" type:"string" prop:"add" search:"like"`
  12. MatTypeId int64 `json:"mattype_id" label:"选材类型" type:"int" prop:"add" search:"="`
  13. MatId int64 `json:"mat_id" type:"int" prop:"edit" search:"="`
  14. Num float64 `json:"num" label:"数量" type:"float" prop:"edit" default:"0"`
  15. Remark string `json:"remark" label:"备注" type:"string" prop:"edit"`
  16. DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
  17. CreatedAt int64 `json:"created_at" prop:"add:false"`
  18. UpdatedAt int64 `json:"updated_at" prop:"add:false"`
  19. db.BaseModel
  20. }
  21. func (FinalMaterialItem) TableName() string {
  22. return "zy_final_material_item"
  23. }
  24. func (model FinalMaterialItem) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  25. return true
  26. }
  27. func (FinalMaterialItem) OnePrivilege(c *gin.Context, id int64) bool {
  28. return true
  29. }
  30. func (FinalMaterialItem) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
  31. return nil
  32. }
  33. func (FinalMaterialItem) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  34. var model FinalMaterialItem
  35. db.GetModel(map[string]interface{}{
  36. "id": id,
  37. "deleted_at": 0,
  38. }, &model)
  39. if model.ID == 0 {
  40. return errors.New("项目状态异常")
  41. }
  42. var material FinalMaterial
  43. db.GetModel(map[string]interface{}{
  44. "id": model.MaterialId,
  45. "deleted_at": 0,
  46. }, &material)
  47. if material.ID == 0 || material.State != 0 {
  48. return errors.New("材料单状态异常")
  49. }
  50. supplierid := model.SelectSupplier()
  51. matid, _ := db.ToInt64(data["mat_id"])
  52. if matid != 0 {
  53. var mat FinalMat
  54. db.GetModel(map[string]interface{}{
  55. "id": matid,
  56. "deleted_at": 0,
  57. }, &mat)
  58. if mat.ID == 0 {
  59. return errors.New("材料不存在")
  60. }
  61. if supplierid != 0 && mat.SupplierId != supplierid {
  62. return errors.New("请选择同一个材料商的材料")
  63. }
  64. }
  65. return nil
  66. }
  67. func (FinalMaterialItem) DelPrivilege(c *gin.Context, id int64) error {
  68. return nil
  69. }
  70. func (FinalMaterialItem) Page() bool {
  71. return false
  72. }
  73. func (FinalMaterialItem) Count() bool {
  74. return true
  75. }
  76. func (model FinalMaterialItem) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  77. return []db.JoinModel{}
  78. }
  79. func (model FinalMaterialItem) SelectSupplier() int64 {
  80. items := make([]FinalMaterialItem, 0)
  81. db.GetModel(map[string]interface{}{
  82. "id != ": model.ID,
  83. "material_id": model.MaterialId,
  84. "deleted_at": 0,
  85. }, &items)
  86. for _, v := range items {
  87. if v.MatId != 0 {
  88. var mat FinalMat
  89. db.GetModel(map[string]interface{}{
  90. "id": v.MatId,
  91. "deleted_at": 0,
  92. }, &mat)
  93. if mat.ID != 0 {
  94. return mat.SupplierId
  95. }
  96. }
  97. }
  98. return 0
  99. }
  100. type FinalMaterialItemMobile struct {
  101. Typename string `json:"type_name" label:"类型名称" prop:"select:finalmattype.name" search:"like"`
  102. Unit string `json:"unit" label:"单位" prop:"select:finalmattype.unit" search:"like"`
  103. MatName string `json:"mat_name" type:"string" prop:"select:concat(finalmat.brand,'\\t',finalmat.series,'\\t',finalmat.model,'\\t',finalmat.specs,'\\t',finalmat.color)"`
  104. MatPrice float64 `json:"mat_price" type:"float" prop:"select:finalmat.price"`
  105. SupplierId int64 `json:"supplier_id" type:"string" prop:"select:finalmat.supplier_id"`
  106. SupplierName string `json:"supplier_name" type:"string" prop:"select:supplier.username"`
  107. SupplierPhone string `json:"supplier_phone" type:"string" prop:"select:supplier.phone"`
  108. SupplierHeadImgUrl string `json:"supplier_headimgurl" type:"string" prop:"select:supplier.headimgurl"`
  109. FinalMaterialItem
  110. }
  111. func (model FinalMaterialItemMobile) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  112. return model.FinalMaterialItem.EditPrivilege(c, id, data, post)
  113. }
  114. func (model FinalMaterialItemMobile) GroupBy() string {
  115. return fmt.Sprintf("`%s`.`id`", model.TableName())
  116. }
  117. func (model FinalMaterialItemMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  118. return append(model.FinalMaterialItem.LeftJoin(data, s), db.JoinModel{
  119. Model: FinalMatType{},
  120. As: "finalmattype",
  121. On: []string{"`finalmattype`.`id` = " + model.TableName() + ".`mattype_id` AND `finalmattype`.`deleted_at` = 0"},
  122. }, db.JoinModel{
  123. Model: FinalMat{},
  124. As: "finalmat",
  125. On: []string{"`finalmat`.`id` = " + model.TableName() + ".`mat_id` AND `finalmat`.`deleted_at` = 0"},
  126. }, db.JoinModel{
  127. Model: JoinAdmin{},
  128. As: "supplier",
  129. On: []string{"`supplier`.`id` = `finalmat`.`supplier_id` AND `supplier`.`deleted_at` = 0"},
  130. })
  131. }
  132. type FinalMaterialItemSupplier struct {
  133. Name string `json:"name" label:"名称" prop:"select:finalmaterialtype.name"`
  134. Type int64 `json:"type" label:"类别" prop:"select:finalmaterialtype.type"`
  135. SiteId float64 `json:"site_id" label:"预算" prop:"select:finalmaterial.site_id"`
  136. Budget float64 `json:"budget" label:"预算" prop:"select:finalmaterial.budget"`
  137. BudgetType int64 `json:"budget_type" label:"预算类型" prop:"select:finalmaterial.budget_type"`
  138. Total float64 `json:"total" label:"金额" prop:"select:finalmaterial.total"`
  139. State int64 `json:"state" label:"状态" prop:"select:finalmaterial.state"`
  140. ReceiptDate int64 `json:"receipt_date" label:"配送日期" prop:"select:finalmaterial.receipt_date"`
  141. FinalMaterialItemMobile
  142. }
  143. func (model FinalMaterialItemSupplier) GroupBy() string {
  144. return fmt.Sprintf("`%s`.`id`", model.TableName())
  145. }
  146. func (model FinalMaterialItemSupplier) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  147. return append(model.FinalMaterialItemMobile.LeftJoin(data, s), db.JoinModel{
  148. Model: FinalMaterial{},
  149. As: "finalmaterial",
  150. On: []string{"`finalmaterial`.`id` = " + model.TableName() + ".`material_id` AND `finalmaterial`.`deleted_at` = 0"},
  151. }, db.JoinModel{
  152. Model: FinalMaterialType{},
  153. As: "finalmaterialtype",
  154. On: []string{"`finalmaterialtype`.`id` = `finalmaterial`.`type_id` AND `finalmaterialtype`.`deleted_at` = 0"},
  155. })
  156. }