final_material.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package final
  2. import (
  3. "errors"
  4. "fmt"
  5. _ "image/gif"
  6. _ "image/jpeg"
  7. _ "image/png"
  8. "zhiyuan/pkg/db"
  9. "github.com/gin-gonic/gin"
  10. "github.com/xuri/excelize/v2"
  11. )
  12. type FinalMaterial struct {
  13. ID int64 `json:"id" prop:"add:false"`
  14. TypeId int64 `json:"type_id" label:"类型" type:"int" prop:"add edit" search:"="`
  15. SiteId int64 `json:"site_id" label:"工地" type:"int" prop:"add edit" search:"="`
  16. CollectId int64 `json:"collect_id" label:"汇总ID" type:"int" search:"="`
  17. SupplierId int64 `json:"supplier_id" label:"材料商ID" type:"int" prop:"add:false" search:"="`
  18. Budget float64 `json:"budget" label:"预算" type:"float" prop:"edit" default:"0"`
  19. BudgetType int64 `json:"budget_type" label:"预算类型" type:"int" prop:"edit" default:"0"`
  20. Total float64 `json:"total" label:"金额" type:"float" prop:"add:false" default:"0"`
  21. Placeorder string `json:"placeorder" label:"下单图片" type:"string" prop:"add:false" search:"like"`
  22. Receipt1 string `json:"receipt1" label:"回单图片" type:"string" prop:"add:false" search:"like"`
  23. Receipt2 string `json:"receipt2" label:"回单图片" type:"string" prop:"add:false" search:"like"`
  24. State int64 `json:"state" label:"状态" type:"int" prop:"add:false" default:"0" search:"="`
  25. ReceiptDate int64 `json:"receipt_date" label:"配送日期" type:"int" prop:"add:false" default:"0"`
  26. DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
  27. CreatedAt int64 `json:"created_at" prop:"add:false"`
  28. UpdatedAt int64 `json:"updated_at" prop:"add:false"`
  29. db.BaseModel
  30. }
  31. func (FinalMaterial) TableName() string {
  32. return "zy_final_material"
  33. }
  34. func (model FinalMaterial) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  35. return true
  36. }
  37. func (FinalMaterial) OnePrivilege(c *gin.Context, id int64) bool {
  38. return true
  39. }
  40. func (FinalMaterial) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
  41. /*typ, _ := db.ToInt64(data["type_id"])
  42. site_id, _ := db.ToInt64(data["site_id"])
  43. table, _ := db.GetModelMap(db.Type(FinalMaterial{}), map[string]interface{}{"type_id": typ, "site_id": site_id, "deleted_at": 0}, nil)
  44. if table != nil {
  45. return errors.New("没有权限")
  46. }*/
  47. return nil
  48. }
  49. func (FinalMaterial) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) {
  50. /*typ, _ := db.ToInt64(data["type_id"])
  51. items, _ := db.GetModelMap(db.Type(FinalMaterialTypeItem{}), map[string]interface{}{"type_id": typ, "deleted_at": 0}, nil)
  52. if items == nil {
  53. return
  54. }
  55. for _, v := range items {
  56. db.InsertModel(db.Type(FinalMaterialItem{}), map[string]interface{}{
  57. "material_id": id,
  58. "name": v["name"],
  59. "mattype_id": v["mattype_id"],
  60. "num": 0,
  61. })
  62. }*/
  63. }
  64. func (FinalMaterial) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  65. return nil
  66. }
  67. func (FinalMaterial) DelPrivilege(c *gin.Context, id int64) error {
  68. return nil
  69. }
  70. func (FinalMaterial) Page() bool {
  71. return false
  72. }
  73. func (FinalMaterial) Count() bool {
  74. return true
  75. }
  76. type FinalMaterialMobile struct {
  77. FinalMaterial
  78. Supplier string `json:"supplier" label:"材料商" prop:"select:supplier.username" search:"like"`
  79. Username string `json:"username" label:"业主姓名" prop:"select:finalsite.username" search:"like"`
  80. Phone string `json:"phone" label:"手机号码" prop:"select:finalsite.phone" search:"like"`
  81. Village string `json:"village" label:"小区名称" prop:"select:finalsite.village" search:"like"`
  82. Address string `json:"address" label:"房屋地址" prop:"select:finalsite.address" search:"like"`
  83. RoomNo string `json:"room_no" label:"楼栋房号" prop:"select:finalsite.room_no" search:"like"`
  84. Area string `json:"area" label:"面积" prop:"select:finalsite.area"`
  85. ShopId int64 `json:"shop_id" label:"门店" type:"int" prop:"select:finalsite.shop_id" search:"="`
  86. AreaId int64 `json:"area_id" label:"面积" type:"int" prop:"select:finalsite.area_id"`
  87. ShopName int64 `json:"shop_name" label:"门店" prop:"select:shop.shop_name"`
  88. AuxiliaryId string `json:"auxiliaryId" prop:"select:finalmatauxiliary.id"`
  89. Name string `json:"name" label:"名称" prop:"select:finalmatauxiliary.name"`
  90. PaymentState int64 `json:"payment_state" prop:"select:ifnull(finalsitepayment.state,1)"`
  91. Total float64 `json:"total" label:"金额" prop:"select:ifnull(sum(order.total),0)"`
  92. Residue float64 `json:"residue" label:"金额" prop:"select:budget-ifnull(sum(order.total),0)"`
  93. CompletedTotal float64 `json:"completed_total" type:"float" prop:"select:sum(IF((order.state=7)or(order.state=11)or(order.state=12),ROUND(order.total),0))"`
  94. }
  95. func (model FinalMaterialMobile) GroupBy() string {
  96. return fmt.Sprintf("`%s`.`id`", model.TableName())
  97. }
  98. func (model FinalMaterialMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  99. return append(model.FinalMaterial.LeftJoin(data, s), db.JoinModel{
  100. Model: FinalMatAuxiliary{},
  101. As: "finalmatauxiliary",
  102. On: []string{"`finalmatauxiliary`.`id` = " + model.TableName() + ".`type_id`"},
  103. }, db.JoinModel{
  104. Model: FinalSitePayment{},
  105. As: "finalsitepayment",
  106. On: []string{
  107. "`finalsitepayment`.`site_id` = " + model.TableName() + ".`site_id`",
  108. "`finalsitepayment`.`type_id` = `finalmatauxiliary`.`settlement`",
  109. "`finalsitepayment`.`deleted_at` = 0",
  110. },
  111. }, db.JoinModel{
  112. Model: FinalSite{},
  113. As: "finalsite",
  114. On: []string{"`finalsite`.`id` = " + model.TableName() + ".`site_id`"},
  115. }, db.JoinModel{
  116. Model: JoinAdmin{},
  117. As: "supplier",
  118. On: []string{"`supplier`.`id` = " + model.TableName() + ".`supplier_id`"},
  119. }, db.JoinModel{
  120. Model: JoinShop{},
  121. As: "shop",
  122. On: []string{"`shop`.`id` = `finalsite`.`shop_id`"},
  123. }, db.JoinModel{
  124. Model: FinalMaterialOrder{},
  125. As: "order",
  126. On: []string{"`order`.`type_id` = " + model.TableName() + ".`id` and `order`.`state` >=0"},
  127. })
  128. }
  129. func (model FinalMaterialMobile) ListAfter(c *gin.Context, data map[string]interface{}, list []map[string]interface{}) []map[string]interface{} {
  130. ids := make([]int64, 0)
  131. idmap := make(map[int64]map[int64][]int)
  132. for i, v := range list {
  133. id, _ := db.ToInt64(v["auxiliaryId"])
  134. area_id, _ := db.ToInt64(v["area_id"])
  135. ids = append(ids, id)
  136. if _, ok := idmap[id]; !ok {
  137. idmap[id] = make(map[int64][]int, 0)
  138. }
  139. if _, ok := idmap[id][area_id]; !ok {
  140. idmap[id][area_id] = make([]int, 0)
  141. }
  142. idmap[id][area_id] = append(idmap[id][area_id], i)
  143. }
  144. datas, _ := db.GetModelMap(db.Type(FinalMatAuxiliaryBrand{}), map[string]interface{}{
  145. fmt.Sprintf("`%s`.`auxiliaryId` in", FinalMatAuxiliaryBrand{}.TableName()): ids,
  146. fmt.Sprintf("`%s`.`deleted_at`", FinalMatAuxiliaryBrand{}.TableName()): 0,
  147. }, nil)
  148. for _, v := range datas {
  149. id, _ := db.ToInt64(v["auxiliaryId"])
  150. area_id, _ := db.ToInt64(v["area_id"])
  151. if nn, ok := idmap[id]; ok {
  152. if ns, ok := nn[area_id]; ok {
  153. for _, n := range ns {
  154. brands := make([]map[string]interface{}, 0)
  155. if is, ok := list[n]["brands"].([]map[string]interface{}); ok {
  156. brands = is
  157. }
  158. brands = append(brands, v)
  159. list[n]["brands"] = brands
  160. }
  161. }
  162. }
  163. }
  164. datas, _ = db.GetModelMap(db.Type(FinalMatAuxiliaryPresets{}), map[string]interface{}{
  165. fmt.Sprintf("`%s`.`auxiliaryId` in", FinalMatAuxiliaryPresets{}.TableName()): ids,
  166. fmt.Sprintf("`%s`.`deleted_at`", FinalMatAuxiliaryPresets{}.TableName()): 0,
  167. }, nil)
  168. for _, v := range datas {
  169. id, _ := db.ToInt64(v["auxiliaryId"])
  170. if nn, ok := idmap[id]; ok {
  171. for _, ns := range nn {
  172. for _, n := range ns {
  173. presets := make([]map[string]interface{}, 0)
  174. if is, ok := list[n]["presets"].([]map[string]interface{}); ok {
  175. presets = is
  176. }
  177. presets = append(presets, v)
  178. list[n]["presets"] = presets
  179. }
  180. }
  181. }
  182. }
  183. return list
  184. }
  185. func (FinalMaterialMobile) Export(model db.Model, data []map[string]interface{}, file *excelize.File) [][]string {
  186. rows := make([][]string, 0)
  187. types := []string{"辅材", "主材"}
  188. states := []string{"待下单", "待审核", "待确认", "待审核", "已备货", "待配送", "待收货", "待结算", "财务审核", "店长审核", "财务付款", "已完成"}
  189. header := []string{"ID", "类型", "类别名称", "品牌", "工地", "材料", "金额", "材料商", "备注", "状态"}
  190. rows = append(rows, header)
  191. for _, v := range data {
  192. worksite := /*db.ToString(v["address"]) + " " +*/ db.ToString(v["village"]) + "" + db.ToString(v["room_no"])
  193. if worksite == "" {
  194. worksite = db.ToString(v["address"])
  195. }
  196. /*if db.ToString(v["area"]) != "" {
  197. worksite += " " + db.ToString(v["area"])
  198. }*/
  199. typ := int64(0)
  200. if t, ok := db.ToInt64(v["type"]); ok {
  201. typ = t
  202. }
  203. state := int64(0)
  204. if t, ok := db.ToInt64(v["state"]); ok {
  205. state = t
  206. }
  207. row := []string{
  208. db.ToString(v["id"]),
  209. types[typ],
  210. db.ToString(v["name"]),
  211. db.ToString(v["brand"]),
  212. worksite,
  213. db.ToString(v["mat_name"]),
  214. db.ToString(v["total"]),
  215. db.ToString(v["supplier"]),
  216. db.ToString(v["remark"]),
  217. states[state],
  218. }
  219. rows = append(rows, row)
  220. }
  221. return rows
  222. }
  223. type FinalMaterialCollect struct {
  224. ManagerName string `json:"manager_name" prop:"select:manager.username"`
  225. ManagerPhone string `json:"manager_phone" prop:"select:manager.phone"`
  226. FinalMaterialMobile
  227. }
  228. func (model FinalMaterialCollect) GroupBy() string {
  229. return fmt.Sprintf("`%s`.`id`", model.TableName())
  230. }
  231. func (model FinalMaterialCollect) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  232. if shopId, _ := db.ToInt64(data["shop_id"]); shopId == 0 {
  233. s.Where = append(s.Where, "(1!=1)")
  234. }
  235. return true
  236. }
  237. func (FinalMaterialCollect) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  238. return nil
  239. }
  240. func (FinalMaterialCollect) DelPrivilege(c *gin.Context, id int64) error {
  241. return errors.New("没有权限")
  242. }
  243. func (model FinalMaterialCollect) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  244. return append(model.FinalMaterialMobile.LeftJoin(data, s),
  245. db.JoinModel{
  246. Model: JoinAdmin{},
  247. As: "manager",
  248. On: []string{"`manager`.`id` = `finalsite`.`manager_id`"},
  249. },
  250. )
  251. }