deliver_userdal.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. package dal
  2. import (
  3. "database/sql"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "github.com/leeqvip/gophp/serialize"
  8. "gopkg.in/mgo.v2/bson"
  9. "sort"
  10. "strconv"
  11. "time"
  12. "github.com/jmoiron/sqlx"
  13. _ "github.com/leeqvip/gophp"
  14. "gopkg.in/guregu/null.v3"
  15. "xiaoniaokuaiyan.com/xiaoniao/entity"
  16. "xiaoniaokuaiyan.com/xiaoniao/util"
  17. )
  18. type DeliverUserDal struct {
  19. }
  20. type DUOrderItem struct {
  21. OrderId string `db:"id" json:"order_id"`
  22. CustomName string `db:"name" json:"name"`
  23. Gender string `db:"gender" json:"gender"`
  24. Age uint8 `db:"age" json:"age"`
  25. Birthday string `db:"birthday" json:"birthday"`
  26. CustomMobile string `db:"mobile" json:"mobile"`
  27. Address string `db:"address" json:"address"`
  28. BookTime null.String `db:"book_time" json:"book_time"`
  29. OrderStatus int `db:"status" json:"order_status"`
  30. Products []DUProduct `db:"-" json:"products"`
  31. NeedEmptiness null.Int `db:"need_emptiness" json:"need_emptiness"`
  32. ReportPeriod null.String `db:"report_period" json:"report_period"`
  33. PressurePipe null.String `db:"pressure_pipe" json:"pressure_pipe"`
  34. BloodAddress null.String `db:"blood_address" json:"blood_address"`
  35. Notice null.String `db:"notice" json:"notice"`
  36. Remark1 null.String `db:"remark1" json:"remark1"`
  37. GetType null.String `db:"get_type" json:"get_type"`
  38. DeliverUsers []DU `db:"-" json:"deliver_users"`
  39. EVisitDate null.String `db:"e_visit_date" json:"EVisitDate"`
  40. EVisitTimeRange null.String `db:"e_visit_time_range" json:"EVisitTimeRange"`
  41. IdNum null.String `db:"id_num" json:"IdNum"`
  42. NucleinType uint8 `db:"nuclein_type" json:"nuclein_type"`
  43. }
  44. type DUOrderItemV2 struct {
  45. DUOrderItem
  46. IsDone bool `json:"is_done"`
  47. }
  48. type DU struct {
  49. Name string `db:"name" json:"name"`
  50. Tel string `db:"tel" json:"tel"`
  51. Career string `db:"career" json:"career"`
  52. }
  53. type DUProduct struct {
  54. Name string `db:"name" json:"name"`
  55. ItemNames string `db:"item_names" json:"item_names"`
  56. Searchs string `db:"searchs" json:"searchs"`
  57. }
  58. func (dud *DeliverUserDal) GetOrderList(openid string, status, pageIndex, pageSize int) (interface{}, error) {
  59. //20230403 只查100 去掉110
  60. strStatus := " status in (3,4, 6, 11) and t3.retype in ('100') "
  61. whereStr := " where t1.openid = ? and" + strStatus
  62. params := []interface{}{
  63. openid,
  64. }
  65. strSql := `select t3.id, t3.name, t3.gender, t3.birthday, t3.age, t3.mobile,t3.status, concat(t3.address, t3.detail_address) as address, concat(t3.visit_date, ' ', t3.visit_time_range) as book_time, t4.need_emptiness, t4.report_period, pressure_pipe,
  66. blood_address, notice, t4.remark1,t4.e_visit_date,t4.e_visit_time_range,t2.get_type,t3.id_num,t3.nuclein_type
  67. from t_deliver_user t1 left join t_order_deliver_user t2 on t1.id = t2.deliver_user_id
  68. right join t_order t3 on t2.order_id = t3.id
  69. left join t_order_extra t4 on t3.id = t4.order_id `
  70. dataList := &[]*DUOrderItem{}
  71. result, err := List(dataList, "("+strSql+whereStr+") t5", strSql+whereStr, " order by t3.visit_date desc , t3.nuclein_type ,t3.visit_time_range", "", params, Pager{PageIndex: pageIndex, PageSize: pageSize})
  72. if err != nil {
  73. return nil, err
  74. }
  75. strSql = `select t3.*, group_concat(dp.name) as item_names from t_product_detect_product pdp left join t_detect_product dp on pdp.detect_product_id = dp.id right join
  76. (select t2.id, t2.name,t2.searchs from t_order_product t1 left join t_product t2 on t1.product_id = t2.id where t1.order_id = ?) t3 on pdp.product_id = t3.id`
  77. strSqlDu := "select t1.name, t1.tel, t2.career from t_deliver_user t1 left join t_order_deliver_user t2 on t1.id = t2.deliver_user_id right join t_order t3 on t2.order_id = t3.id where t3.id = ?"
  78. db := util.GetSqlDB()
  79. for _, item := range *dataList {
  80. pitems := []DUProduct{}
  81. err = db.Select(&pitems, strSql, item.OrderId)
  82. if err != nil {
  83. return nil, err
  84. }
  85. item.Products = pitems
  86. //fetch deliver user info
  87. duList := []DU{}
  88. err = db.Select(&duList, strSqlDu, item.OrderId)
  89. if err != nil {
  90. return nil, err
  91. }
  92. item.DeliverUsers = duList
  93. }
  94. return result, nil
  95. }
  96. // 20220225
  97. func (dud *DeliverUserDal) GetOrderListV2(openid string, pageIndex, pageSize int) (interface{}, error) {
  98. //20230403 只查100 去掉110
  99. strStatus := " status = 3 and t3.retype in ('100') "
  100. whereStr := " where t1.openid = ? and" + strStatus
  101. db := util.GetSqlDB()
  102. strSql := `select t3.id, t3.name, t3.gender, t3.birthday, t3.age, t3.mobile,t3.status, concat(t3.address, t3.detail_address) as address, concat(t3.visit_date, ' ', t3.visit_time_range) as book_time, t4.need_emptiness, t4.report_period, pressure_pipe,
  103. blood_address, notice, t4.remark1,t4.e_visit_date,t4.e_visit_time_range,t2.get_type,t3.id_num,t3.nuclein_type
  104. from t_deliver_user t1 left join t_order_deliver_user t2 on t1.id = t2.deliver_user_id
  105. right join t_order t3 on t2.order_id = t3.id
  106. left join t_order_extra t4 on t3.id = t4.order_id `
  107. dataList := []*DUOrderItemV2{}
  108. err := db.Select(&dataList, strSql+whereStr+" order by t3.visit_date desc , t3.nuclein_type ,t3.visit_time_range limit 100", openid)
  109. if err != nil {
  110. return nil, err
  111. }
  112. strSql = `select t3.*, group_concat(dp.name) as item_names from t_product_detect_product pdp left join t_detect_product dp on pdp.detect_product_id = dp.id right join
  113. (select t2.id, t2.name,t2.searchs from t_order_product t1 left join t_product t2 on t1.product_id = t2.id where t1.order_id = ?) t3 on pdp.product_id = t3.id`
  114. strSqlDu := "select t1.name, t1.tel, t2.career from t_deliver_user t1 left join t_order_deliver_user t2 on t1.id = t2.deliver_user_id right join t_order t3 on t2.order_id = t3.id where t3.id = ?"
  115. strSqlSign := "select count(1) from t_order_sign where order_id = ? and flag='200' and status = '300'"
  116. done := []*DUOrderItemV2{}
  117. notDone := []*DUOrderItemV2{}
  118. for _, item := range dataList {
  119. pitems := []DUProduct{}
  120. err = db.Select(&pitems, strSql, item.OrderId)
  121. if err != nil {
  122. return nil, err
  123. }
  124. item.Products = pitems
  125. //fetch deliver user info
  126. duList := []DU{}
  127. err = db.Select(&duList, strSqlDu, item.OrderId)
  128. if err != nil {
  129. return nil, err
  130. }
  131. item.DeliverUsers = duList
  132. count := 0
  133. db.Get(&count, strSqlSign, item.OrderId)
  134. item.IsDone = count > 0
  135. if count > 0 {
  136. done = append(done, item)
  137. } else {
  138. notDone = append(notDone, item)
  139. }
  140. }
  141. return map[string]interface{}{
  142. "not_done": notDone,
  143. "done": done,
  144. }, nil
  145. }
  146. func (dud *DeliverUserDal) GetOrderSign(orderId string) (interface{}, error) {
  147. db := util.GetSqlDB()
  148. strSql := "select t2.openid,t1.career from t_order_deliver_user t1 inner join t_deliver_user t2 on t1.deliver_user_id = t2.id where t1.order_id = ?"
  149. deliverUserlist := []struct {
  150. Openid string `json:"openid"`
  151. Career string `json:"career"`
  152. }{}
  153. err := db.Select(&deliverUserlist, strSql, orderId)
  154. if err != nil {
  155. return nil, err
  156. }
  157. if len(deliverUserlist) == 0 {
  158. return map[string]interface{}{
  159. "deliver_user_list": deliverUserlist,
  160. "sign_list": nil,
  161. }, nil
  162. }
  163. strSql = "select * from t_order_sign where order_id = ? and flag='200' order by id desc"
  164. signList := &[]entity.OrderSign{}
  165. err = db.Select(signList, strSql, orderId)
  166. if err != nil {
  167. return nil, err
  168. }
  169. orderInfo, _ := DefaultOrderDal.Get(orderId)
  170. return map[string]interface{}{
  171. "deliver_user_list": deliverUserlist,
  172. "sign_list": signList,
  173. "order_info": orderInfo,
  174. }, nil
  175. }
  176. func (dud *DeliverUserDal) SaveOrderSign(signItem *entity.OrderSign) (interface{}, error) {
  177. var (
  178. strSql string
  179. kv map[string]interface{}
  180. )
  181. db := util.GetWriteSqlDB()
  182. tx := db.MustBegin()
  183. strSql, kv = util.GenerateInsertSqlFromStruct("t_order_sign", signItem)
  184. sqlResult, err := tx.NamedExec(strSql, kv)
  185. if err != nil {
  186. tx.Rollback()
  187. return false, err
  188. }
  189. if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
  190. tx.Rollback()
  191. return false, errors.New("failed to sign")
  192. }
  193. if signItem.Status == "400" {
  194. var mj = struct {
  195. Code string `json:"code"`
  196. IsXueYang string `json:"isxieyang"`
  197. }{}
  198. err := json.Unmarshal([]byte(signItem.Remark), &mj)
  199. if err != nil {
  200. tx.Rollback()
  201. return nil, err
  202. }
  203. //20210927 如果血样是0 则是核酸类,血检条码必须唯一
  204. if mj.IsXueYang == "0" {
  205. var count int
  206. db.Get(&count, "select count(1) from t_order where blood_codes=? and id != ? ", mj.Code, signItem.OrderId)
  207. if count > 0 {
  208. tx.Rollback()
  209. return nil, fmt.Errorf("2::已存在的blood_codes %s", mj.Code)
  210. }
  211. }
  212. tx.Exec("update t_order set blood_codes = ? where id = ?", mj.Code, signItem.OrderId)
  213. go util.InsertMongo(signItem.OrderId, "护士系统400", 1, map[string]interface{}{"blood_codes": mj.Code, "url": "/duser/saveordersign/400"})
  214. } else if signItem.Status == "700" {
  215. //20210218 增加 700 护士修改 订单name gender birthday idnum age 字段 只有在状态3 待上门才可以修改
  216. //20210223 增加 mobile
  217. var item = struct {
  218. Name string `json:"name"`
  219. Gender string `json:"gender"`
  220. Birth string `json:"birth"`
  221. IdNum string `json:"idnum"`
  222. Mobile string `json:"mobile"`
  223. }{}
  224. err := json.Unmarshal([]byte(signItem.Remark), &item)
  225. if err != nil {
  226. tx.Rollback()
  227. return nil, err
  228. }
  229. //if len(item.Birth) >= 7 {
  230. // item.Birth = item.Birth[0:7]
  231. //}
  232. birth, err := time.Parse("2006-01-02", item.Birth)
  233. if err != nil {
  234. tx.Rollback()
  235. return nil, err
  236. }
  237. age := time.Now().Year() - birth.Year()
  238. sqlResult, err := tx.Exec("update t_order set name = ?,age = ?,birthday = ?,gender = ?,id_num = ?,mobile = ?,updated_at = ? where id = ? and status = 3", item.Name, age, item.Birth, item.Gender, item.IdNum, item.Mobile, time.Now().Format("2006-01-02 15:04:05"), signItem.OrderId)
  239. if err != nil {
  240. tx.Rollback()
  241. return nil, err
  242. }
  243. if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
  244. tx.Rollback()
  245. return nil, fmt.Errorf("7::name:%s,age:%d,birth:%s,gender:%s,idnum:%s,orderid:%s", item.Name, age, item.Birth, item.Gender, item.IdNum, signItem.OrderId)
  246. }
  247. go util.InsertMongo(signItem.OrderId, "护士系统700", 1, map[string]interface{}{"name": item.Name, "age": age, "birthday": item.Birth, "gender": item.Gender, "id_num": item.IdNum, "mobile": item.Mobile, "url": "/duser/saveordersign/700"})
  248. }
  249. tx.Commit()
  250. return true, nil
  251. }
  252. var DefaultDeliverUserDal = &DeliverUserDal{}
  253. func (dud *DeliverUserDal) Get(openid string) (*entity.DeliverUser, error) {
  254. db := util.GetSqlDB()
  255. strSql := "select * from t_deliver_user where openid = ? and is_delete = 1;"
  256. var du = entity.DeliverUser{}
  257. err := db.Get(&du, strSql, openid)
  258. if err != nil {
  259. if err == sql.ErrNoRows {
  260. return nil, errors.New("1::not exists")
  261. }
  262. return nil, err
  263. }
  264. du.Qualifiction, _ = getDeliverUserPic(du.Id, "qualifiction")
  265. du.License, _ = getDeliverUserPic(du.Id, "license")
  266. du.Photo, _ = getDeliverUserPic(du.Id, "photo")
  267. return &du, nil
  268. }
  269. func getDeliverUserPic(id uint64, pType string) ([]string, error) {
  270. db := util.GetSqlDB()
  271. strSql := "select pic from t_deliver_user_pic where delever_uer_id = ? and type = ? and is_delete = 'N' "
  272. var list = []string{}
  273. err := db.Select(&list, strSql, id, pType)
  274. if err != nil {
  275. if err == sql.ErrNoRows {
  276. return nil, errors.New("1::not exists")
  277. }
  278. return nil, err
  279. }
  280. return list, nil
  281. }
  282. func (dud *DeliverUserDal) SaveDU(duItem *entity.DeliverUser) (bool, error) {
  283. db := util.GetWriteSqlDB()
  284. if len(duItem.Openid) > 0 {
  285. strSql := "select tel from t_deliver_user where openid =? and is_delete <>2 limit 1;"
  286. var tel null.String
  287. err := db.Get(&tel, strSql, duItem.Openid)
  288. if err == nil {
  289. if !tel.Valid || (tel.Valid && len(tel.String) == 0) {
  290. //todo 更新 tel
  291. db.Exec("update t_deliver_user set tel = ? where openid = ?", duItem.Tel, duItem.Openid)
  292. return true, nil
  293. } else if tel.String != duItem.Tel {
  294. return false, errors.New("2:: already bind another tel")
  295. }
  296. }
  297. }
  298. strSql := "select id from t_deliver_user where tel = ? and is_delete <> 2;"
  299. var eid int
  300. db.Get(&eid, strSql, duItem.Tel)
  301. if eid > 0 {
  302. return false, errors.New("1::already regist")
  303. }
  304. strSql, kvs := util.GenerateInsertSqlFromStruct("t_deliver_user", duItem)
  305. sqlResult, err := db.NamedExec(strSql, kvs)
  306. if err != nil {
  307. return false, err
  308. }
  309. if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
  310. return false, errors.New("failed to regist")
  311. }
  312. did, _ := sqlResult.LastInsertId()
  313. //todo 20210312 保存到mongo t_log
  314. jsonbyte, err := serialize.Marshal(_map2map(kvs))
  315. if err != nil {
  316. //return false ,err
  317. fmt.Println(err.Error())
  318. } else {
  319. _insertMongo(strconv.FormatInt(did, 10), string(jsonbyte), 15)
  320. }
  321. strSql = "insert into t_deliver_user_pic(delever_uer_id, type,pic,create_time) values(?,?,?,?);"
  322. var ctime = time.Now().Format("2006-01-02 15:05:05")
  323. for _, ql := range duItem.Qualifiction {
  324. db.Exec(strSql, did, "qualifiction", ql, ctime)
  325. }
  326. for _, lc := range duItem.License {
  327. db.Exec(strSql, did, "license", lc, ctime)
  328. }
  329. for _, pt := range duItem.Photo {
  330. db.Exec(strSql, did, "photo", pt, ctime)
  331. }
  332. db.Exec("insert into t_deliver_account(deliver_user_id, created_at) values(?,?);", did, ctime)
  333. return true, nil
  334. }
  335. func (dud *DeliverUserDal) UpdateDU(duItem *entity.DeliverUser) (interface{}, error) {
  336. db := util.GetWriteSqlDB()
  337. tx := db.MustBegin()
  338. strSql, kvs := util.GenerateUpdateSqlFromStruct("t_deliver_user", duItem, " where id=:id")
  339. sqlResult, err := tx.NamedExec(strSql, kvs)
  340. if err != nil {
  341. tx.Tx.Rollback()
  342. return false, err
  343. }
  344. if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
  345. tx.Tx.Rollback()
  346. return false, errors.New("1::failed to update")
  347. }
  348. //todo 20210312 保存到mongo t_log
  349. jsonbyte, err := serialize.Marshal(_map2map(kvs))
  350. if err != nil {
  351. //tx.Tx.Rollback()
  352. //return false ,err
  353. fmt.Println(err.Error())
  354. } else {
  355. _insertMongo(strconv.FormatUint(duItem.Id, 10), string(jsonbyte), 17)
  356. }
  357. if err = _updatePic(tx, duItem.Id, "qualifiction", duItem.Qualifiction); err != nil {
  358. return nil, err
  359. }
  360. if err = _updatePic(tx, duItem.Id, "license", duItem.License); err != nil {
  361. return nil, err
  362. }
  363. if err = _updatePic(tx, duItem.Id, "photo", duItem.Photo); err != nil {
  364. return nil, err
  365. }
  366. tx.Commit()
  367. return true, nil
  368. }
  369. func _insertMongo(name, data string, dbtype int) {
  370. db := util.GetMgoDB()
  371. if db == nil {
  372. return
  373. }
  374. defer db.Session.Close()
  375. err := db.C("t_log").Insert(bson.M{
  376. "name": name,
  377. "type": dbtype,
  378. "data": data,
  379. "createby": "go",
  380. "create": time.Now().Format("2006-01-02 15:04:05"),
  381. })
  382. if err != nil {
  383. fmt.Println(err)
  384. return
  385. }
  386. }
  387. // null 转换成 普通类型,否则php 序列化过不去
  388. func _map2map(kvs map[string]interface{}) map[string]interface{} {
  389. resultMap := map[string]interface{}{}
  390. for k, v := range kvs {
  391. //t := reflect.TypeOf(v)
  392. //switch t.Kind() {
  393. //case reflect.TypeOf(null.String{}).Kind():
  394. // if v.(null.String).Valid{
  395. // resultMap[k]=v.(null.String).String
  396. // }
  397. //case reflect.TypeOf(null.Int{}).Kind():
  398. // if v.(null.Int).Valid{
  399. // resultMap[k]=v.(null.Int).Int64
  400. // }
  401. //default:
  402. // resultMap[k]=v
  403. // }
  404. if nullString, ok := v.(null.String); ok {
  405. resultMap[k] = nullString.String
  406. } else if nullInt, ok := v.(null.Int); ok {
  407. resultMap[k] = nullInt.Int64
  408. } else {
  409. resultMap[k] = v
  410. }
  411. }
  412. return resultMap
  413. }
  414. func _updatePic(tx *sqlx.Tx, duId uint64, typ string, pics []string) error {
  415. if len(pics) > 0 {
  416. strSql := "delete from t_deliver_user_pic where delever_uer_id = ? and type = ?;"
  417. tx.MustExec(strSql, duId, typ)
  418. strSql = ""
  419. var ctime = time.Now().Format("2006-01-02 15:05:05")
  420. for i, ql := range pics {
  421. strSql += fmt.Sprintf("(%d,'%s','%s','%s')", duId, typ, ql, ctime)
  422. if i < len(pics)-1 {
  423. strSql += ","
  424. }
  425. }
  426. strSql = "insert into t_deliver_user_pic(delever_uer_id, type,pic,create_time) values" + strSql
  427. sqlResult := tx.MustExec(strSql)
  428. if ra, _ := sqlResult.RowsAffected(); ra <= 0 {
  429. tx.Tx.Rollback()
  430. return errors.New("2::failed to update " + typ)
  431. }
  432. }
  433. return nil
  434. }
  435. func (dud *DeliverUserDal) GetBills(duId int, pageIndex, pageSize int) (interface{}, error) {
  436. per := Pager{PageIndex: pageIndex, PageSize: pageSize}
  437. var bills = []entity.DeliverBill{}
  438. result, err := List(&bills, "t_deliver_bill", "select * from t_deliver_bill", " order by created_at desc", "where deliver_user_id = ? and status = '300' ", []interface{}{duId}, per)
  439. return result, err
  440. }
  441. func (dud *DeliverUserDal) GetMsg(duId int, pageIndex, pageSize int, cityId int) (interface{}, error) {
  442. per := Pager{PageIndex: pageIndex, PageSize: pageSize}
  443. var msgList = []entity.DeliverMsg{}
  444. result, err := List(&msgList, "t_deliver_msg", "select * from t_deliver_msg", " order by created_at desc", "where deliver_user_id = ? ", []interface{}{duId}, per)
  445. var pubMsglist = []entity.DeliverMsg{}
  446. strSql := fmt.Sprintf("SELECT t1.*,t2.is_read from t_deliver_pubmsg t1 left join t_deliver_msg t2 on t1.id = t2.ref_id where city_ids REGEXP ',?%d,?' order by created_at desc limit 10", cityId)
  447. db := util.GetWriteSqlDB()
  448. err = db.Select(&pubMsglist, strSql)
  449. if err != nil {
  450. return nil, err
  451. }
  452. strSql = "insert into t_deliver_msg(deliver_user_id, title, content,created_at, ref_id) values"
  453. for _, msg := range pubMsglist {
  454. if !msg.IsRead.Valid {
  455. strSql += fmt.Sprintf("(%d,'%s','%s', '%s', %d),", duId, msg.Title, msg.Content, msg.CreatedAt, msg.Id)
  456. msgList = append(msgList, msg)
  457. }
  458. }
  459. strSql = strSql[0 : len(strSql)-1]
  460. db.Exec(strSql)
  461. sort.Slice(msgList, func(i, j int) bool {
  462. return msgList[i].CreatedAt > msgList[j].CreatedAt
  463. })
  464. return result, err
  465. }
  466. func (dud *DeliverUserDal) GetScoreBill(duId int, pageIndex, pageSize int, typ string) (interface{}, error) {
  467. per := Pager{PageIndex: pageIndex, PageSize: pageSize}
  468. var bills = []entity.DeliverScoreBill{}
  469. params := []interface{}{duId}
  470. var whereStr = "where deliver_user_id = ? "
  471. if typ == "score" {
  472. whereStr += "and type in('SIGNIN', 'ORDER', 'INVITE_F', 'STUDY_DATA','AUTOTRANS', 'INVITE_F_EXAM', 'DAILY_QUESTION','CHECK','INVITE_EXAM','CHECK_F') "
  473. } else if typ == "cash" {
  474. whereStr += "and type in('WITHDRAW','SCORECHSH') "
  475. }
  476. result, err := List(&bills, "t_deliver_score_bill", "select * from t_deliver_score_bill", " order by created_at desc", whereStr, params, per)
  477. return result, err
  478. }