worker.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. package models
  2. import (
  3. "errors"
  4. "fmt"
  5. "strings"
  6. "time"
  7. "zhiyuan/pkg/db"
  8. "zhiyuan/pkg/utils"
  9. "zhiyuan/services/geo"
  10. "github.com/gin-gonic/gin"
  11. )
  12. type Worker struct {
  13. ID int `json:"id" prop:"add:false"`
  14. Name string `json:"name" label:"姓名" type:"string" prop:"add edit" search:"like"`
  15. Phone string `json:"phone" label:"电话号码" type:"string" prop:"add edit" search:"like"`
  16. Sex int `json:"sex" label:"性别" type:"int" prop:"edit" default:"0"`
  17. Age int `json:"age" label:"年龄" type:"int" prop:"edit" default:"0"`
  18. Insure int `json:"insure" label:"是否买保险" type:"int" prop:"edit" default:"0"`
  19. Password string `json:"password" type:"string" prop:"edit select:false"`
  20. TypeIds string `json:"type_ids" label:"工种" type:"string" prop:"add edit" search:"find_in_set"`
  21. Idcode string `json:"idcode" label:"身份证号" type:"string" prop:"edit" default:""`
  22. Idcard1 string `json:"idcard1" prop:"add:false select:false"`
  23. Idcard2 string `json:"idcard2" prop:"add:false select:false"`
  24. OpenId string `json:"openid" prop:"add:false select:false"`
  25. UnionId string `json:"unionid" prop:"add:false select:false"`
  26. HeadImgUrl string `json:"headimgurl" prop:"add:false select:false"`
  27. NickName string `json:"nickname" prop:"add:false select:false"`
  28. AccessToken string `json:"access_token" prop:"add:false select:false"`
  29. AccessTokenExipred int `json:"access_token_expired" prop:"add:false select:false"`
  30. InsureStart int `json:"insure_start" label:"保险开始日期" type:"int" prop:"edit" default:"0"`
  31. InsureEnd int `json:"insure_end" label:"保险结束日期" type:"int" prop:"edit" default:"0"`
  32. BankName string `json:"bank_name" label:"开户行" type:"string" prop:"edit" default:""`
  33. BankCardNo string `json:"bank_card_no" label:"银行卡号" type:"string" prop:"edit" default:""`
  34. Areacode string `json:"areacode" label:"区划代码" type:"string" prop:"edit" search:"rightlike"`
  35. State int `json:"state" label:"状态" type:"int" prop:"add:false" default:"1"`
  36. DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
  37. CreatedAt int `json:"created_at" prop:"add:false"`
  38. UpdatedAt int `json:"updated_at" prop:"add:false"`
  39. TypeNames string `json:"type_names" label:"工种" prop:"add:false select:group_concat(distinct(worktype.name))" `
  40. db.BaseModel
  41. }
  42. func (Worker) TableName() string {
  43. return "zy_worker"
  44. }
  45. func (model Worker) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  46. if search, ok := data["search"]; ok {
  47. str := db.ToString(search)
  48. if str != "" {
  49. param := s.Param(fmt.Sprintf("%%%s%%", str))
  50. 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))
  51. }
  52. }
  53. return true
  54. }
  55. func (Worker) OnePrivilege(c *gin.Context, id int64) bool {
  56. return true
  57. }
  58. func (Worker) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
  59. if db.ToString(data["password"]) == "" {
  60. phone := db.ToString(data["phone"])
  61. data["password"] = phone[len(phone)-6:]
  62. }
  63. data["password"] = utils.MD5(db.ToString(data["password"]))
  64. data["created_id"] = c.GetInt("adminID")
  65. return nil
  66. }
  67. func (Worker) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  68. if db.ToString(data["password"]) == "" {
  69. delete(data, "password")
  70. } else {
  71. data["password"] = utils.MD5(db.ToString(data["password"]))
  72. }
  73. data["updated_id"] = c.GetInt("adminID")
  74. return nil
  75. }
  76. func (model Worker) GroupBy() string {
  77. return fmt.Sprintf("`%s`.`id`", model.TableName())
  78. }
  79. func (Worker) Page() bool {
  80. return false
  81. }
  82. func (Worker) Count() bool {
  83. return true
  84. }
  85. func (model Worker) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  86. return []db.JoinModel{
  87. {
  88. Model: WorkType{},
  89. As: "worktype",
  90. On: []string{"FIND_IN_SET(`worktype`.`id`, " + model.TableName() + ".`type_ids`)"},
  91. },
  92. }
  93. }
  94. func (a Worker) GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*Worker, error) {
  95. if retVal == nil {
  96. var worker *Worker
  97. err := db.GetOne(a.TableName(), where, fields, &worker)
  98. return worker, err
  99. } else {
  100. err := db.GetOne(a.TableName(), where, fields, retVal)
  101. return nil, err
  102. }
  103. }
  104. func (a Worker) GetMulti(where map[string]interface{}, fields []string, retVal interface{}) ([]*Worker, error) {
  105. if retVal == nil {
  106. var worker []*Worker
  107. err := db.GetMulti(a.TableName(), where, fields, &worker)
  108. return worker, err
  109. } else {
  110. err := db.GetMulti(a.TableName(), where, fields, retVal)
  111. return nil, err
  112. }
  113. }
  114. func (a Worker) GetOneRaw(where map[string]string, param map[string]interface{}, retVal interface{}) (*Worker, error) {
  115. worker, err := a.GetMultiRaw(where, param, retVal)
  116. if err != nil {
  117. return nil, err
  118. }
  119. if len(worker) == 0 {
  120. return nil, errors.New("empty record2")
  121. }
  122. return worker[0], nil
  123. }
  124. func (a Worker) GetMultiRaw(where map[string]string, param map[string]interface{}, retVal interface{}) ([]*Worker, error) {
  125. field := "SELECT * FROM zy_worker "
  126. if retVal == nil {
  127. var worker []*Worker
  128. err := db.GetMultiRaw(field, where, param, &worker)
  129. return worker, err
  130. } else {
  131. err := db.GetMultiRaw(field, where, param, retVal)
  132. return nil, err
  133. }
  134. }
  135. func (model Worker) ExportFields() []db.ExportField {
  136. return []db.ExportField{
  137. {
  138. Label: "姓名",
  139. Name: "name",
  140. Width: 20,
  141. },
  142. {
  143. Label: "电话号码",
  144. Name: "phone",
  145. Width: 20,
  146. },
  147. {
  148. Label: "性别",
  149. Name: "sex",
  150. },
  151. {
  152. Label: "年龄",
  153. Name: "age",
  154. },
  155. {
  156. Label: "身份证号",
  157. Name: "idcode",
  158. Width: 30,
  159. },
  160. {
  161. Label: "工种",
  162. Name: "type_names",
  163. Width: 30,
  164. },
  165. {
  166. Label: "所在区域",
  167. Name: "areacode",
  168. Width: 30,
  169. },
  170. {
  171. Label: "是否买保险",
  172. Name: "insure",
  173. },
  174. {
  175. Label: "保险开始日期",
  176. Name: "insure_start",
  177. },
  178. {
  179. Label: "保险结束日期",
  180. Name: "insure_end",
  181. },
  182. {
  183. Label: "开户行",
  184. Name: "bank_name",
  185. Width: 20,
  186. },
  187. {
  188. Label: "银行卡号",
  189. Name: "bank_card_no",
  190. Width: 30,
  191. },
  192. }
  193. }
  194. func (Worker) ExportValue(row map[string]interface{}, rowIndex int, field db.ExportField, data []map[string]interface{}) string {
  195. sexs := []string{"未知", "男", "女"}
  196. insures := []string{"否", "是"}
  197. switch field.Name {
  198. case "sex":
  199. sex := ""
  200. if s, ok := db.ToInt64(row["sex"]); ok {
  201. if s >= 0 && int(s) < len(sexs) {
  202. sex = sexs[s]
  203. }
  204. }
  205. return sex
  206. case "areacode":
  207. areacode := db.ToString(row["areacode"])
  208. list := geo.Code(areacode)
  209. names := make([]string, 0)
  210. for _, l := range list {
  211. if name, ok := l["name"]; ok {
  212. names = append(names, db.ToString(name))
  213. }
  214. }
  215. return strings.Join(names, "/")
  216. case "insure":
  217. insure := ""
  218. if s, ok := db.ToInt64(row["insure"]); ok {
  219. if s >= 0 && int(s) < len(insures) {
  220. insure = insures[s]
  221. }
  222. }
  223. return insure
  224. case "insure_start":
  225. insure_start := ""
  226. if s, ok := db.ToInt64(row["insure_start"]); ok {
  227. insure_start = time.Unix(s, 0).Local().Format("2006-01-02")
  228. }
  229. return insure_start
  230. case "insure_end":
  231. insure_end := ""
  232. if s, ok := db.ToInt64(row["insure_end"]); ok {
  233. insure_end = time.Unix(s, 0).Local().Format("2006-01-02")
  234. }
  235. return insure_end
  236. }
  237. return db.ToString(row[field.Name])
  238. }
  239. type WorkerMobile struct {
  240. //UseCount string `json:"use_count" type:"int" prop:"select:count(finalsitetable.id)"`
  241. Worker
  242. }
  243. func (model WorkerMobile) GroupBy() string {
  244. return fmt.Sprintf("`%s`.`id`", model.TableName())
  245. }
  246. //func (model WorkerMobile) OrderBy() string {
  247. // return fmt.Sprintf("count(`finalsitetable`.`id`) desc, `%s`.`name` asc", model.TableName())
  248. //}
  249. func (model WorkerMobile) OnePrivilege(c *gin.Context, id int64) bool {
  250. fmt.Println()
  251. return true
  252. }
  253. func (model WorkerMobile) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  254. s.LeftJoin = append(s.LeftJoin, db.Join{
  255. TableName: "zy_final_site",
  256. As: "finalsite",
  257. On: []string{fmt.Sprintf("`finalsite`.`manager_id` = %s", s.Param(c.GetInt("adminID")))},
  258. }, db.Join{
  259. TableName: "zy_final_site_table",
  260. As: "finalsitetable",
  261. On: []string{fmt.Sprintf("`finalsitetable`.`site_id` = `finalsite`.`id` and `finalsitetable`.`worker_id` = `%s`.`id`", model.TableName())},
  262. })
  263. return model.Worker.ListPrivilege(c, data, s)
  264. }
  265. func (model WorkerMobile) LeftJoin(data map[string]interface{}, s *db.Select) []db.JoinModel {
  266. return model.Worker.LeftJoin(data, s)
  267. }