package final import ( "errors" "fmt" "zhiyuan/pkg/db" "github.com/gin-gonic/gin" ) type FinalMaterialItem struct { ID int64 `json:"id" prop:"add:false"` MaterialId int64 `json:"material_id" label:"表" type:"int" prop:"add" search:"="` Name string `json:"name" label:"项目名称" type:"string" prop:"add" search:"like"` MatTypeId int64 `json:"mattype_id" label:"选材类型" type:"int" prop:"add" search:"="` MatId int64 `json:"mat_id" type:"int" prop:"edit" search:"="` Num float64 `json:"num" label:"数量" type:"float" prop:"edit" default:"0"` Remark string `json:"remark" label:"备注" type:"string" prop:"edit"` 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 (FinalMaterialItem) TableName() string { return "zy_final_material_item" } func (model FinalMaterialItem) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { return true } func (FinalMaterialItem) OnePrivilege(c *gin.Context, id int64) bool { return true } func (FinalMaterialItem) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error { return nil } func (FinalMaterialItem) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { var model FinalMaterialItem db.GetModel(map[string]interface{}{ "id": id, "deleted_at": 0, }, &model) if model.ID == 0 { return errors.New("项目状态异常") } var material FinalMaterial db.GetModel(map[string]interface{}{ "id": model.MaterialId, "deleted_at": 0, }, &material) if material.ID == 0 || material.State != 0 { return errors.New("材料单状态异常") } supplierid := model.SelectSupplier() matid, _ := db.ToInt64(data["mat_id"]) if matid != 0 { var mat FinalMat db.GetModel(map[string]interface{}{ "id": matid, "deleted_at": 0, }, &mat) if mat.ID == 0 { return errors.New("材料不存在") } if supplierid != 0 && mat.SupplierId != supplierid { return errors.New("请选择同一个材料商的材料") } } return nil } func (FinalMaterialItem) DelPrivilege(c *gin.Context, id int64) error { return nil } func (FinalMaterialItem) Page() bool { return false } func (FinalMaterialItem) Count() bool { return true } func (model FinalMaterialItem) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{} } func (model FinalMaterialItem) SelectSupplier() int64 { items := make([]FinalMaterialItem, 0) db.GetModel(map[string]interface{}{ "id != ": model.ID, "material_id": model.MaterialId, "deleted_at": 0, }, &items) for _, v := range items { if v.MatId != 0 { var mat FinalMat db.GetModel(map[string]interface{}{ "id": v.MatId, "deleted_at": 0, }, &mat) if mat.ID != 0 { return mat.SupplierId } } } return 0 } type FinalMaterialItemMobile struct { Typename string `json:"type_name" label:"类型名称" prop:"select:finalmattype.name" search:"like"` Unit string `json:"unit" label:"单位" prop:"select:finalmattype.unit" search:"like"` MatName string `json:"mat_name" type:"string" prop:"select:concat(finalmat.brand,'\\t',finalmat.series,'\\t',finalmat.model,'\\t',finalmat.specs,'\\t',finalmat.color)"` MatPrice float64 `json:"mat_price" type:"float" prop:"select:finalmat.price"` SupplierId int64 `json:"supplier_id" type:"string" prop:"select:finalmat.supplier_id"` SupplierName string `json:"supplier_name" type:"string" prop:"select:supplier.username"` SupplierPhone string `json:"supplier_phone" type:"string" prop:"select:supplier.phone"` SupplierHeadImgUrl string `json:"supplier_headimgurl" type:"string" prop:"select:supplier.headimgurl"` FinalMaterialItem } func (model FinalMaterialItemMobile) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { return model.FinalMaterialItem.EditPrivilege(c, id, data, post) } func (model FinalMaterialItemMobile) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model FinalMaterialItemMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return append(model.FinalMaterialItem.LeftJoin(data, s), db.JoinModel{ Model: FinalMatType{}, As: "finalmattype", On: []string{"`finalmattype`.`id` = " + model.TableName() + ".`mattype_id` AND `finalmattype`.`deleted_at` = 0"}, }, db.JoinModel{ Model: FinalMat{}, As: "finalmat", On: []string{"`finalmat`.`id` = " + model.TableName() + ".`mat_id` AND `finalmat`.`deleted_at` = 0"}, }, db.JoinModel{ Model: JoinAdmin{}, As: "supplier", On: []string{"`supplier`.`id` = `finalmat`.`supplier_id` AND `supplier`.`deleted_at` = 0"}, }) } type FinalMaterialItemSupplier struct { Name string `json:"name" label:"名称" prop:"select:finalmaterialtype.name"` Type int64 `json:"type" label:"类别" prop:"select:finalmaterialtype.type"` SiteId float64 `json:"site_id" label:"预算" prop:"select:finalmaterial.site_id"` Budget float64 `json:"budget" label:"预算" prop:"select:finalmaterial.budget"` BudgetType int64 `json:"budget_type" label:"预算类型" prop:"select:finalmaterial.budget_type"` Total float64 `json:"total" label:"金额" prop:"select:finalmaterial.total"` State int64 `json:"state" label:"状态" prop:"select:finalmaterial.state"` ReceiptDate int64 `json:"receipt_date" label:"配送日期" prop:"select:finalmaterial.receipt_date"` FinalMaterialItemMobile } func (model FinalMaterialItemSupplier) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model FinalMaterialItemSupplier) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return append(model.FinalMaterialItemMobile.LeftJoin(data, s), db.JoinModel{ Model: FinalMaterial{}, As: "finalmaterial", On: []string{"`finalmaterial`.`id` = " + model.TableName() + ".`material_id` AND `finalmaterial`.`deleted_at` = 0"}, }, db.JoinModel{ Model: FinalMaterialType{}, As: "finalmaterialtype", On: []string{"`finalmaterialtype`.`id` = `finalmaterial`.`type_id` AND `finalmaterialtype`.`deleted_at` = 0"}, }) }