package models import ( "errors" "fmt" "strings" "time" "zhiyuan/pkg/db" "zhiyuan/pkg/utils" "zhiyuan/services/geo" "github.com/gin-gonic/gin" ) type Worker struct { ID int `json:"id" prop:"add:false"` Name string `json:"name" label:"姓名" type:"string" prop:"add edit" search:"like"` Phone string `json:"phone" label:"电话号码" type:"string" prop:"add edit" search:"like"` Sex int `json:"sex" label:"性别" type:"int" prop:"edit" default:"0"` Age int `json:"age" label:"年龄" type:"int" prop:"edit" default:"0"` Insure int `json:"insure" label:"是否买保险" type:"int" prop:"edit" default:"0"` Password string `json:"password" type:"string" prop:"edit select:false"` TypeIds string `json:"type_ids" label:"工种" type:"string" prop:"add edit" search:"find_in_set"` Idcode string `json:"idcode" label:"身份证号" type:"string" prop:"edit" default:""` Idcard1 string `json:"idcard1" prop:"add:false select:false"` Idcard2 string `json:"idcard2" prop:"add:false select:false"` OpenId string `json:"openid" prop:"add:false select:false"` UnionId string `json:"unionid" prop:"add:false select:false"` HeadImgUrl string `json:"headimgurl" prop:"add:false select:false"` NickName string `json:"nickname" prop:"add:false select:false"` AccessToken string `json:"access_token" prop:"add:false select:false"` AccessTokenExipred int `json:"access_token_expired" prop:"add:false select:false"` InsureStart int `json:"insure_start" label:"保险开始日期" type:"int" prop:"edit" default:"0"` InsureEnd int `json:"insure_end" label:"保险结束日期" type:"int" prop:"edit" default:"0"` BankName string `json:"bank_name" label:"开户行" type:"string" prop:"edit" default:""` BankCardNo string `json:"bank_card_no" label:"银行卡号" type:"string" prop:"edit" default:""` Areacode string `json:"areacode" label:"区划代码" type:"string" prop:"edit" search:"rightlike"` State int `json:"state" label:"状态" type:"int" prop:"add:false" default:"1"` DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"` CreatedAt int `json:"created_at" prop:"add:false"` UpdatedAt int `json:"updated_at" prop:"add:false"` TypeNames string `json:"type_names" label:"工种" prop:"add:false select:group_concat(distinct(worktype.name))" ` db.BaseModel } func (Worker) TableName() string { return "zy_worker" } func (model Worker) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { if search, ok := data["search"]; ok { str := db.ToString(search) if str != "" { param := s.Param(fmt.Sprintf("%%%s%%", str)) s.Where = append(s.Where, fmt.Sprintf("(%s LIKE %s OR %s LIKE %s)", fmt.Sprintf("`%s`.`name`", model.TableName()), param, fmt.Sprintf("`%s`.`phone`", model.TableName()), param)) } } return true } func (Worker) OnePrivilege(c *gin.Context, id int64) bool { return true } func (Worker) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error { if db.ToString(data["password"]) == "" { phone := db.ToString(data["phone"]) data["password"] = phone[len(phone)-6:] } data["password"] = utils.MD5(db.ToString(data["password"])) data["created_id"] = c.GetInt("adminID") return nil } func (Worker) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { if db.ToString(data["password"]) == "" { delete(data, "password") } else { data["password"] = utils.MD5(db.ToString(data["password"])) } data["updated_id"] = c.GetInt("adminID") return nil } func (model Worker) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } func (Worker) Page() bool { return false } func (Worker) Count() bool { return true } func (model Worker) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return []db.JoinModel{ { Model: WorkType{}, As: "worktype", On: []string{"FIND_IN_SET(`worktype`.`id`, " + model.TableName() + ".`type_ids`)"}, }, } } func (a Worker) GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*Worker, error) { if retVal == nil { var worker *Worker err := db.GetOne(a.TableName(), where, fields, &worker) return worker, err } else { err := db.GetOne(a.TableName(), where, fields, retVal) return nil, err } } func (a Worker) GetMulti(where map[string]interface{}, fields []string, retVal interface{}) ([]*Worker, error) { if retVal == nil { var worker []*Worker err := db.GetMulti(a.TableName(), where, fields, &worker) return worker, err } else { err := db.GetMulti(a.TableName(), where, fields, retVal) return nil, err } } func (a Worker) GetOneRaw(where map[string]string, param map[string]interface{}, retVal interface{}) (*Worker, error) { worker, err := a.GetMultiRaw(where, param, retVal) if err != nil { return nil, err } if len(worker) == 0 { return nil, errors.New("empty record2") } return worker[0], nil } func (a Worker) GetMultiRaw(where map[string]string, param map[string]interface{}, retVal interface{}) ([]*Worker, error) { field := "SELECT * FROM zy_worker " if retVal == nil { var worker []*Worker err := db.GetMultiRaw(field, where, param, &worker) return worker, err } else { err := db.GetMultiRaw(field, where, param, retVal) return nil, err } } func (model Worker) ExportFields() []db.ExportField { return []db.ExportField{ { Label: "姓名", Name: "name", Width: 20, }, { Label: "电话号码", Name: "phone", Width: 20, }, { Label: "性别", Name: "sex", }, { Label: "年龄", Name: "age", }, { Label: "身份证号", Name: "idcode", Width: 30, }, { Label: "工种", Name: "type_names", Width: 30, }, { Label: "所在区域", Name: "areacode", Width: 30, }, { Label: "是否买保险", Name: "insure", }, { Label: "保险开始日期", Name: "insure_start", }, { Label: "保险结束日期", Name: "insure_end", }, { Label: "开户行", Name: "bank_name", Width: 20, }, { Label: "银行卡号", Name: "bank_card_no", Width: 30, }, } } func (Worker) ExportValue(row map[string]interface{}, rowIndex int, field db.ExportField, data []map[string]interface{}) string { sexs := []string{"未知", "男", "女"} insures := []string{"否", "是"} switch field.Name { case "sex": sex := "" if s, ok := db.ToInt64(row["sex"]); ok { if s >= 0 && int(s) < len(sexs) { sex = sexs[s] } } return sex case "areacode": areacode := db.ToString(row["areacode"]) list := geo.Code(areacode) names := make([]string, 0) for _, l := range list { if name, ok := l["name"]; ok { names = append(names, db.ToString(name)) } } return strings.Join(names, "/") case "insure": insure := "" if s, ok := db.ToInt64(row["insure"]); ok { if s >= 0 && int(s) < len(insures) { insure = insures[s] } } return insure case "insure_start": insure_start := "" if s, ok := db.ToInt64(row["insure_start"]); ok { insure_start = time.Unix(s, 0).Local().Format("2006-01-02") } return insure_start case "insure_end": insure_end := "" if s, ok := db.ToInt64(row["insure_end"]); ok { insure_end = time.Unix(s, 0).Local().Format("2006-01-02") } return insure_end } return db.ToString(row[field.Name]) } type WorkerMobile struct { //UseCount string `json:"use_count" type:"int" prop:"select:count(finalsitetable.id)"` Worker } func (model WorkerMobile) GroupBy() string { return fmt.Sprintf("`%s`.`id`", model.TableName()) } //func (model WorkerMobile) OrderBy() string { // return fmt.Sprintf("count(`finalsitetable`.`id`) desc, `%s`.`name` asc", model.TableName()) //} func (model WorkerMobile) OnePrivilege(c *gin.Context, id int64) bool { fmt.Println() return true } func (model WorkerMobile) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { s.LeftJoin = append(s.LeftJoin, db.Join{ TableName: "zy_final_site", As: "finalsite", On: []string{fmt.Sprintf("`finalsite`.`manager_id` = %s", s.Param(c.GetInt("adminID")))}, }, db.Join{ TableName: "zy_final_site_table", As: "finalsitetable", On: []string{fmt.Sprintf("`finalsitetable`.`site_id` = `finalsite`.`id` and `finalsitetable`.`worker_id` = `%s`.`id`", model.TableName())}, }) return model.Worker.ListPrivilege(c, data, s) } func (model WorkerMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel { return model.Worker.LeftJoin(data, s) }