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