package final import ( "errors" "fmt" _ "image/gif" _ "image/jpeg" _ "image/png" "zhiyuan/pkg/db" "github.com/gin-gonic/gin" "github.com/xuri/excelize/v2" ) type FinalMaterial struct { ID int64 `json:"id" prop:"add:false"` TypeId int64 `json:"type_id" label:"类型" type:"int" prop:"add edit" search:"="` SiteId int64 `json:"site_id" label:"工地" type:"int" prop:"add edit" search:"="` CollectId int64 `json:"collect_id" label:"汇总ID" type:"int" search:"="` SupplierId int64 `json:"supplier_id" label:"材料商ID" type:"int" prop:"add:false" search:"="` Budget float64 `json:"budget" label:"预算" type:"float" prop:"edit" default:"0"` BudgetType int64 `json:"budget_type" label:"预算类型" type:"int" prop:"edit" default:"0"` Total float64 `json:"total" label:"金额" type:"float" prop:"add:false" default:"0"` Placeorder string `json:"placeorder" label:"下单图片" type:"string" prop:"add:false" search:"like"` Receipt1 string `json:"receipt1" label:"回单图片" type:"string" prop:"add:false" search:"like"` Receipt2 string `json:"receipt2" label:"回单图片" type:"string" prop:"add:false" search:"like"` State int64 `json:"state" label:"状态" type:"int" prop:"add:false" default:"0" search:"="` ReceiptDate int64 `json:"receipt_date" label:"配送日期" type:"int" prop:"add:false" default:"0"` 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 (FinalMaterial) TableName() string { return "zy_final_material" } func (model FinalMaterial) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { return true } func (FinalMaterial) OnePrivilege(c *gin.Context, id int64) bool { return true } func (FinalMaterial) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error { /*typ, _ := db.ToInt64(data["type_id"]) site_id, _ := db.ToInt64(data["site_id"]) table, _ := db.GetModelMap(db.Type(FinalMaterial{}), map[string]interface{}{"type_id": typ, "site_id": site_id, "deleted_at": 0}, nil) if table != nil { return errors.New("没有权限") }*/ return nil } func (FinalMaterial) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) { /*typ, _ := db.ToInt64(data["type_id"]) items, _ := db.GetModelMap(db.Type(FinalMaterialTypeItem{}), map[string]interface{}{"type_id": typ, "deleted_at": 0}, nil) if items == nil { return } for _, v := range items { db.InsertModel(db.Type(FinalMaterialItem{}), map[string]interface{}{ "material_id": id, "name": v["name"], "mattype_id": v["mattype_id"], "num": 0, }) }*/ } func (FinalMaterial) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { return nil } func (FinalMaterial) DelPrivilege(c *gin.Context, id int64) error { return nil } func (FinalMaterial) Page() bool { return false } func (FinalMaterial) Count() bool { return true } type FinalMaterialMobile struct { FinalMaterial Supplier string `json:"supplier" label:"材料商" prop:"select:supplier.username" search:"like"` Username string `json:"username" label:"业主姓名" prop:"select:finalsite.username" search:"like"` Phone string `json:"phone" label:"手机号码" prop:"select:finalsite.phone" search:"like"` Village string `json:"village" label:"小区名称" prop:"select:finalsite.village" search:"like"` Address string `json:"address" label:"房屋地址" prop:"select:finalsite.address" search:"like"` RoomNo string `json:"room_no" label:"楼栋房号" prop:"select:finalsite.room_no" search:"like"` Area string `json:"area" label:"面积" prop:"select:finalsite.area"` ShopId int64 `json:"shop_id" label:"门店" type:"int" prop:"select:finalsite.shop_id" search:"="` AreaId int64 `json:"area_id" label:"面积" type:"int" prop:"select:finalsite.area_id"` ShopName int64 `json:"shop_name" label:"门店" prop:"select:shop.shop_name"` AuxiliaryId string `json:"auxiliaryId" prop:"select:finalmatauxiliary.id"` Name string `json:"name" label:"名称" prop:"select:finalmatauxiliary.name"` PaymentState int64 `json:"payment_state" prop:"select:ifnull(finalsitepayment.state,1)"` Total float64 `json:"total" label:"金额" prop:"select:ifnull(sum(order.total),0)"` Residue float64 `json:"residue" label:"金额" prop:"select:budget-ifnull(sum(order.total),0)"` 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))"` } func (model FinalMaterialMobile) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model FinalMaterialMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return append(model.FinalMaterial.LeftJoin(data, s), db.JoinModel{ Model: FinalMatAuxiliary{}, As: "finalmatauxiliary", On: []string{"`finalmatauxiliary`.`id` = " + model.TableName() + ".`type_id`"}, }, db.JoinModel{ Model: FinalSitePayment{}, As: "finalsitepayment", On: []string{ "`finalsitepayment`.`site_id` = " + model.TableName() + ".`site_id`", "`finalsitepayment`.`type_id` = `finalmatauxiliary`.`settlement`", "`finalsitepayment`.`deleted_at` = 0", }, }, db.JoinModel{ Model: FinalSite{}, As: "finalsite", On: []string{"`finalsite`.`id` = " + model.TableName() + ".`site_id`"}, }, db.JoinModel{ Model: JoinAdmin{}, As: "supplier", On: []string{"`supplier`.`id` = " + model.TableName() + ".`supplier_id`"}, }, db.JoinModel{ Model: JoinShop{}, As: "shop", On: []string{"`shop`.`id` = `finalsite`.`shop_id`"}, }, db.JoinModel{ Model: FinalMaterialOrder{}, As: "order", On: []string{"`order`.`type_id` = " + model.TableName() + ".`id` and `order`.`state` >=0"}, }) } func (model FinalMaterialMobile) ListAfter(c *gin.Context, data map[string]interface{}, list []map[string]interface{}) []map[string]interface{} { ids := make([]int64, 0) idmap := make(map[int64]map[int64][]int) for i, v := range list { id, _ := db.ToInt64(v["auxiliaryId"]) area_id, _ := db.ToInt64(v["area_id"]) ids = append(ids, id) if _, ok := idmap[id]; !ok { idmap[id] = make(map[int64][]int, 0) } if _, ok := idmap[id][area_id]; !ok { idmap[id][area_id] = make([]int, 0) } idmap[id][area_id] = append(idmap[id][area_id], i) } datas, _ := db.GetModelMap(db.Type(FinalMatAuxiliaryBrand{}), map[string]interface{}{ fmt.Sprintf("`%s`.`auxiliaryId` in", FinalMatAuxiliaryBrand{}.TableName()): ids, fmt.Sprintf("`%s`.`deleted_at`", FinalMatAuxiliaryBrand{}.TableName()): 0, }, nil) for _, v := range datas { id, _ := db.ToInt64(v["auxiliaryId"]) area_id, _ := db.ToInt64(v["area_id"]) if nn, ok := idmap[id]; ok { if ns, ok := nn[area_id]; ok { for _, n := range ns { brands := make([]map[string]interface{}, 0) if is, ok := list[n]["brands"].([]map[string]interface{}); ok { brands = is } brands = append(brands, v) list[n]["brands"] = brands } } } } datas, _ = db.GetModelMap(db.Type(FinalMatAuxiliaryPresets{}), map[string]interface{}{ fmt.Sprintf("`%s`.`auxiliaryId` in", FinalMatAuxiliaryPresets{}.TableName()): ids, fmt.Sprintf("`%s`.`deleted_at`", FinalMatAuxiliaryPresets{}.TableName()): 0, }, nil) for _, v := range datas { id, _ := db.ToInt64(v["auxiliaryId"]) if nn, ok := idmap[id]; ok { for _, ns := range nn { for _, n := range ns { presets := make([]map[string]interface{}, 0) if is, ok := list[n]["presets"].([]map[string]interface{}); ok { presets = is } presets = append(presets, v) list[n]["presets"] = presets } } } } return list } func (FinalMaterialMobile) Export(model db.Model, data []map[string]interface{}, file *excelize.File) [][]string { rows := make([][]string, 0) types := []string{"辅材", "主材"} states := []string{"待下单", "待审核", "待确认", "待审核", "已备货", "待配送", "待收货", "待结算", "财务审核", "店长审核", "财务付款", "已完成"} header := []string{"ID", "类型", "类别名称", "品牌", "工地", "材料", "金额", "材料商", "备注", "状态"} rows = append(rows, header) for _, v := range data { worksite := /*db.ToString(v["address"]) + " " +*/ db.ToString(v["village"]) + "" + db.ToString(v["room_no"]) if worksite == "" { worksite = db.ToString(v["address"]) } /*if db.ToString(v["area"]) != "" { worksite += " " + db.ToString(v["area"]) }*/ typ := int64(0) if t, ok := db.ToInt64(v["type"]); ok { typ = t } state := int64(0) if t, ok := db.ToInt64(v["state"]); ok { state = t } row := []string{ db.ToString(v["id"]), types[typ], db.ToString(v["name"]), db.ToString(v["brand"]), worksite, db.ToString(v["mat_name"]), db.ToString(v["total"]), db.ToString(v["supplier"]), db.ToString(v["remark"]), states[state], } rows = append(rows, row) } return rows } type FinalMaterialCollect struct { ManagerName string `json:"manager_name" prop:"select:manager.username"` ManagerPhone string `json:"manager_phone" prop:"select:manager.phone"` FinalMaterialMobile } func (model FinalMaterialCollect) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model FinalMaterialCollect) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { if shopId, _ := db.ToInt64(data["shop_id"]); shopId == 0 { s.Where = append(s.Where, "(1!=1)") } return true } func (FinalMaterialCollect) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { return nil } func (FinalMaterialCollect) DelPrivilege(c *gin.Context, id int64) error { return errors.New("没有权限") } func (model FinalMaterialCollect) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return append(model.FinalMaterialMobile.LeftJoin(data, s), db.JoinModel{ Model: JoinAdmin{}, As: "manager", On: []string{"`manager`.`id` = `finalsite`.`manager_id`"}, }, ) }