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 FinalSettle struct { ID int64 `json:"id" prop:"add:false"` SiteId int64 `json:"site_id" label:"工地" type:"int" prop:"add edit" search:"="` CollectId int64 `json:"collect_id" label:"汇总ID" type:"int" prop:"add:false" search:"="` ManagerId int64 `json:"manager_id" label:"项目监理" type:"int" prop:"add edit" search:"multiple"` Total float64 `json:"total" label:"金额" type:"float" default:"0"` ManagerPrice float64 `json:"manager_price" label:"承包额" type:"float" default:"0"` WorkerPrice float64 `json:"worker_price" label:"工人" type:"float" default:"0"` AuxiliaryPrice float64 `json:"auxiliary_price" label:"辅材" type:"float" default:"0"` SubsidyPrice float64 `json:"subsidy_price" label:"补贴" type:"float" default:"0"` State int64 `json:"state" label:"状态" type:"int" prop:"add:false" default:"0" search:"multiple"` 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 (FinalSettle) TableName() string { return "zy_final_settle" } func (model FinalSettle) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { return true } func (FinalSettle) OnePrivilege(c *gin.Context, id int64) bool { return true } func (FinalSettle) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error { return errors.New("没有权限") } func (FinalSettle) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) { } func (FinalSettle) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { return nil } func (FinalSettle) DelPrivilege(c *gin.Context, id int64) error { return nil } func (FinalSettle) Page() bool { return false } func (FinalSettle) Count() bool { return true } type FinalSettleMobile struct { ManagerName string `json:"manager_name" type:"string" prop:"select:manager.username"` ManagerPhone string `json:"manager_phone" type:"string" prop:"select:manager.phone"` ManagerHeadImgUrl string `json:"manager_headimgurl" type:"string" prop:"select:manager.headimgurl"` Username string `json:"username" label:"业主姓名" type:"string" prop:"select:finalsite.username" search:"="` Phone string `json:"phone" label:"手机号码" type:"string" prop:"select:finalsite.phone" search:"="` Village string `json:"village" label:"小区名称" type:"string" prop:"select:finalsite.village" search:"="` Address string `json:"address" label:"房屋地址" type:"string" prop:"select:finalsite.address" search:"="` RoomNo string `json:"room_no" label:"楼栋房号" type:"string" prop:"select:finalsite.room_no" search:"="` Area string `json:"area" label:"面积" type:"string" prop:"select:finalsite.area"` ProjectLeaderId int64 `json:"project_leader_id" label:"工程队长" type:"int" prop:"select:finalsite.project_leader_id" search:"multiple"` ManagerPrice float64 `json:"manager_price" label:"项目经理承包额" type:"float" prop:"select:sum(managerprice.price)"` ShopId int64 `json:"shop_id" label:"门店" type:"int" prop:"select:finalsite.shop_id" search:"="` ShopName int64 `json:"shop_name" label:"门店" prop:"select:shop.shop_name"` ProjectLeaderName string `json:"projectleader_name" prop:"select:projectleader.username"` ProjectLeaderPhone string `json:"projectleader_phone" prop:"select:projectleader.phone"` Names string `json:"names" label:"名称" type:"string" prop:"add:false select:concat(finalsite.village,finalsite.address,finalsite.room_no)" search:"like"` FinalSettle } func (model FinalSettleMobile) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (model FinalSettleMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{ { Model: JoinAdmin{}, As: "manager", On: []string{"`manager`.`id` = " + model.TableName() + ".`manager_id`"}, }, { Model: FinalSite{}, As: "finalsite", On: []string{"`finalsite`.`id` = " + model.TableName() + ".`site_id`"}, }, { Model: JoinAdmin{}, As: "projectleader", On: []string{"`projectleader`.`id` = `finalsite`.`project_leader_id`"}, }, { Model: FinalManagerPrice{}, As: "managerprice", On: []string{"`managerprice`.`site_id` = " + model.TableName() + ".`site_id`"}, }, { Model: JoinShop{}, As: "shop", On: []string{"`shop`.`id` = `finalsite`.`shop_id`"}, }, } } func (FinalSettleMobile) Export(model db.Model, data []map[string]interface{}, file *excelize.File) [][]string { rows := make([][]string, 0) 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"]) }*/ state := int64(0) if t, ok := db.ToInt64(v["state"]); ok { state = t } row := []string{ db.ToString(v["id"]), db.ToString(v["shop_name"]), worksite, db.ToString(v["username"]) + "" + db.ToString(v["phone"]), db.ToString(v["manager_name"]) + "" + db.ToString(v["manager_phone"]), db.ToString(v["projectleader_name"]) + "" + db.ToString(v["projectleader_phone"]), db.ToString(v["manager_price"]), db.ToString(v["total"]), states[state], } rows = append(rows, row) } return rows } func (FinalSettleMobile) ExportAfter(data []map[string]interface{}, file *excelize.File) { /*ids := []interface{}{} collects := []interface{}{} for _, v := range data { ids = append(ids, v["id"]) collects = append(collects, v["collect_id"]) } tableMap := map[string]map[string]string{} collectMap := map[string]map[string]string{} ps, err := db.GetModelMap(db.Type(FinalSettleProcess{}), map[string]interface{}{ "settle_id in": ids, }, nil) if err != nil { return } for _, v := range ps { if _, ok := tableMap[db.ToString(v["settle_id"])]; !ok { tableMap[db.ToString(v["settle_id"])] = map[string]string{} } tableMap[db.ToString(v["settle_id"])][db.ToString(v["type"])] = db.ToString(v["signature"]) } ps, err = db.GetModelMap(db.Type(FinalSettleProcess{}), map[string]interface{}{ "collect_id in": collects, }, nil) if err != nil { return } for _, v := range ps { if _, ok := collectMap[db.ToString(v["collect_id"])]; !ok { collectMap[db.ToString(v["collect_id"])] = map[string]string{} } collectMap[db.ToString(v["collect_id"])][db.ToString(v["type"])] = db.ToString(v["signature"]) } for i, v := range data { file.SetRowHeight("Sheet1", i+2, 40) if table, ok := tableMap[db.ToString(v["id"])]; ok { if signature, ok := table[db.ToString(0)]; ok && signature != "" { signature = strings.Replace(signature, "data:image/png;base64,", "", 1) de, err := base64.StdEncoding.DecodeString(signature) if err == nil { file.AddPictureFromBytes("Sheet1", "J"+strconv.Itoa(i+2), &excelize.Picture{ Extension: ".png", File: de, Format: &excelize.GraphicOptions{AutoFit: true}, }) } } if signature, ok := table[db.ToString(1)]; ok && signature != "" { signature = strings.Replace(signature, "data:image/png;base64,", "", 1) de, err := base64.StdEncoding.DecodeString(signature) if err == nil { file.AddPictureFromBytes("Sheet1", "K"+strconv.Itoa(i+2), &excelize.Picture{ Extension: ".png", File: de, Format: &excelize.GraphicOptions{AutoFit: true}, }) } } } if collect, ok := collectMap[db.ToString(v["collect_id"])]; ok { if signature, ok := collect[db.ToString(2)]; ok && signature != "" { signature = strings.Replace(signature, "data:image/png;base64,", "", 1) de, err := base64.StdEncoding.DecodeString(signature) if err == nil { file.AddPictureFromBytes("Sheet1", "L"+strconv.Itoa(i+2), &excelize.Picture{ Extension: ".png", File: de, Format: &excelize.GraphicOptions{AutoFit: true}, }) } } if signature, ok := collect[db.ToString(3)]; ok && signature != "" { signature = strings.Replace(signature, "data:image/png;base64,", "", 1) de, err := base64.StdEncoding.DecodeString(signature) if err == nil { file.AddPictureFromBytes("Sheet1", "M"+strconv.Itoa(i+2), &excelize.Picture{ Extension: ".png", File: de, Format: &excelize.GraphicOptions{AutoFit: true}, }) } } if signature, ok := collect[db.ToString(4)]; ok && signature != "" { signature = strings.Replace(signature, "data:image/png;base64,", "", 1) de, err := base64.StdEncoding.DecodeString(signature) if err == nil { file.AddPictureFromBytes("Sheet1", "N"+strconv.Itoa(i+2), &excelize.Picture{ Extension: ".png", File: de, Format: &excelize.GraphicOptions{AutoFit: true}, }) } } } }*/ } type FinalSettleCollect struct { FinalSettleMobile } func (model FinalSettleCollect) 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 (FinalSettleCollect) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { return nil } func (FinalSettleCollect) DelPrivilege(c *gin.Context, id int64) error { return errors.New("没有权限") } func (model FinalSettleCollect) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return model.FinalSettleMobile.LeftJoin(data, s) }