target.go 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543
  1. package models
  2. import (
  3. "eta/eta_api/models/data_manage"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "github.com/beego/beego/v2/client/orm"
  7. "github.com/rdlucklib/rdluck_tools/paging"
  8. "sort"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. type DataList struct {
  14. TradeCode string `orm:"column(TRADE_CODE)" description:"指标编码"`
  15. SecName string `orm:"column(SEC_NAME)" description:"指标名称"`
  16. Unit string `orm:"column(UNIT)" description:"单位"`
  17. Remark string `orm:"column(REMARK)" description:"备注"`
  18. Frequency string `description:"频度"`
  19. ClassifyId int `description:"分类id"`
  20. ClassifyName string `description:"分类名称"`
  21. Dt string `orm:"column(DT)" description:"录入日期"`
  22. Close float64 `orm:"column(CLOSE)" description:"录入值"`
  23. ModifyTime string `description:"修改时间"`
  24. }
  25. type DataListResp struct {
  26. List []*DataList
  27. Paging *paging.PagingItem `description:"分页数据"`
  28. }
  29. func GetDataList(condition string, pars []interface{}, startSize, pageSize int) (items []*DataList, err error) {
  30. sql := `select a.TRADE_CODE,a.SEC_NAME,a.UNIT,a.frequency,a.classify_id,b.classify_name,c.DT,c.CLOSE,c.modify_time FROM edbdata AS c
  31. inner join edbinfo AS a ON a.TRADE_CODE=c.TRADE_CODE
  32. left join edbdata_classify AS b ON a.classify_id=b.classify_id
  33. where left(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0`
  34. if condition != "" {
  35. sql += condition
  36. }
  37. sql += ` order by c.DT desc limit ?,? `
  38. o := orm.NewOrmUsingDB("edb")
  39. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  40. return
  41. }
  42. func GetDataListCount(condition string, pars []interface{}) (count int, err error) {
  43. sql := ` select count(1) as count FROM edbdata AS c
  44. inner join edbinfo AS a ON a.TRADE_CODE=c.TRADE_CODE
  45. left join edbdata_classify AS b ON a.classify_id=b.classify_id
  46. where left(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0 `
  47. if condition != "" {
  48. sql += condition
  49. }
  50. o := orm.NewOrmUsingDB("edb")
  51. err = o.Raw(sql, pars).QueryRow(&count)
  52. return
  53. }
  54. type DataAddReq struct {
  55. TradeCode string `description:"指标唯一编码"`
  56. CreateDate string `description:"创建日期"`
  57. Close string `description:"录入值"`
  58. }
  59. type Edbdata struct {
  60. TradeCode string `orm:"column(TRADE_CODE);pk" description:"指标编码"`
  61. Dt string `orm:"column(DT)" description:"日期"`
  62. Close string `orm:"column(CLOSE)" description:"值"`
  63. ModifyTime time.Time `orm:"column(modify_time)" description:"修改时间"`
  64. }
  65. func GetDataInfo(tradeCode, creteDate string) (item *Edbdata, err error) {
  66. sql := " SELECT * FROM edbdata WHERE TRADE_CODE=? AND DT=? "
  67. o := orm.NewOrmUsingDB("edb")
  68. err = o.Raw(sql, tradeCode, creteDate).QueryRow(&item)
  69. return
  70. }
  71. func AddEdbdata(item *Edbdata) (lastId int64, err error) {
  72. o := orm.NewOrmUsingDB("edb")
  73. lastId, err = o.Insert(item)
  74. return
  75. }
  76. type DataEditReq struct {
  77. TradeCode string `description:"指标唯一编码"`
  78. CreateDate string `description:"创建日期"`
  79. Close interface{} `description:"录入值"`
  80. OldCreateDate string `description:"旧的录入日期"`
  81. }
  82. // BatchDataEditReq 批量修改指标
  83. type BatchDataEditReq struct {
  84. OldCreateDate string `description:"旧的录入日期"`
  85. CreateDate string `description:"新的录入日期"`
  86. List []DataEditReq `description:"需要修改的数据"`
  87. }
  88. // 编辑数据
  89. func EditEdbdata(item *Edbdata) (err error) {
  90. o := orm.NewOrmUsingDB("edb")
  91. sql := ` UPDATE edbdata SET CLOSE = ?,modify_time=NOW() WHERE TRADE_CODE = ? AND DT = ? `
  92. _, err = o.Raw(sql, item.Close, item.TradeCode, item.Dt).Exec()
  93. return
  94. }
  95. type EdbdataDeleteRecord struct {
  96. Id int `orm:"column(id);pk"`
  97. TradeCode string `orm:"column(TRADE_CODE)" description:"指标编码"`
  98. Dt string `orm:"column(DT)" description:"日期"`
  99. Close string `orm:"column(CLOSE)" description:"值"`
  100. ModifyTime time.Time `orm:"column(modify_time)" description:"修改时间"`
  101. CreateTime time.Time
  102. SysUserId int
  103. }
  104. func AddEdbdataDeleteRecord(item *EdbdataDeleteRecord) (lastId int64, err error) {
  105. o := orm.NewOrmUsingDB("edb")
  106. lastId, err = o.Insert(item)
  107. return
  108. }
  109. // DeleteEdbData 根据指标code和日期删除数据
  110. func DeleteEdbData(tradeCode, dt string) (err error) {
  111. o := orm.NewOrmUsingDB("edb")
  112. sql := ` DELETE FROM edbdata WHERE TRADE_CODE = ? AND DT = ? `
  113. _, err = o.Raw(sql, tradeCode, dt).Exec()
  114. return
  115. }
  116. // DeleteAllEdbData 根据指标code删除数据
  117. func DeleteAllEdbData(tradeCode string) (err error) {
  118. o := orm.NewOrmUsingDB("edb")
  119. sql := ` DELETE FROM edbdata WHERE TRADE_CODE = ? `
  120. _, err = o.Raw(sql, tradeCode).Exec()
  121. return
  122. }
  123. type Edbinfo struct {
  124. TradeCode string `orm:"column(TRADE_CODE);pk" description:"指标code"`
  125. SecName string `orm:"column(SEC_NAME);" description:"指标名称"`
  126. Unit string `orm:"column(UNIT);" description:"单位"`
  127. Remark string `orm:"column(REMARK);" description:"备注"`
  128. Frequency string `description:"频度"`
  129. ClassifyId int `description:"分类id"`
  130. ClassifyName string `description:"分类名称"`
  131. CreateDate string `description:"创建时间"`
  132. UserId int `description:"录入用户id"`
  133. UserName string `description:"录入用户名称"`
  134. NoticeTime string `description:"通知时间"`
  135. Mobile string `description:"录入者手机号"`
  136. }
  137. func GetEdbinfoListCount(condition string, pars []interface{}, mobile string, roleType int) (count int, err error) {
  138. o := orm.NewOrmUsingDB("edb")
  139. sql := ``
  140. if mobile != "" && roleType == 1 {
  141. sql = `SELECT COUNT(1) AS count FROM edbinfo AS a
  142. INNER JOIN edbinfo_user AS c ON a.TRADE_CODE=c.TRADE_CODE AND c.mobile=?
  143. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0`
  144. if condition != "" {
  145. sql += condition
  146. }
  147. err = o.Raw(sql, mobile, pars).QueryRow(&count)
  148. } else {
  149. sql := `SELECT COUNT(1) AS count FROM edbinfo AS a WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0`
  150. if condition != "" {
  151. sql += condition
  152. }
  153. err = o.Raw(sql, pars).QueryRow(&count)
  154. }
  155. return
  156. }
  157. func GetEdbinfoList(condition string, pars []interface{}, startSize, pageSize int, mobile string, roleType int) (items []*Edbinfo, err error) {
  158. o := orm.NewOrmUsingDB("edb")
  159. sql := ``
  160. if mobile != "" && roleType == 1 {
  161. sql = ` SELECT DISTINCT a.*,b.classify_name FROM edbinfo AS a
  162. LEFT JOIN edbdata_classify AS b ON a.classify_id=b.classify_id
  163. INNER JOIN edbinfo_user AS c ON a.TRADE_CODE=c.TRADE_CODE AND c.mobile=?
  164. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0`
  165. if condition != "" {
  166. sql += condition
  167. }
  168. sql += ` ORDER BY a.create_date DESC LIMIT ?,? `
  169. _, err = o.Raw(sql, mobile, pars, startSize, pageSize).QueryRows(&items)
  170. } else {
  171. sql = `SELECT DISTINCT a.*,b.classify_name FROM edbinfo AS a
  172. LEFT JOIN edbdata_classify AS b on a.classify_id=b.classify_id
  173. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0`
  174. if condition != "" {
  175. sql += condition
  176. }
  177. sql += ` ORDER BY a.create_date DESC LIMIT ?,? `
  178. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  179. }
  180. return
  181. }
  182. // EdbParamsInfo 指标数据结构体
  183. type EdbParamsInfo struct {
  184. Unit string `orm:"column(UNIT);" description:"单位"`
  185. Frequency string `orm:"column(frequency);" description:"单位"`
  186. }
  187. // GetEdbUnitList 获取指标单位
  188. func GetEdbUnitList() (items []*EdbParamsInfo, err error) {
  189. o := orm.NewOrmUsingDB("edb")
  190. sql := `SELECT UNIT from edbinfo group by UNIT`
  191. _, err = o.Raw(sql).QueryRows(&items)
  192. return
  193. }
  194. // GetEdbFrequencyList 获取指标频度
  195. func GetEdbFrequencyList(classifyId, userId int) (items []*EdbParamsInfo, err error) {
  196. o := orm.NewOrmUsingDB("edb")
  197. sql := `SELECT frequency from edbinfo a
  198. join edbdata b on a.TRADE_CODE=b.TRADE_CODE
  199. where classify_id = ? `
  200. if userId > 0 {
  201. sql += ` and a.user_id = ` + fmt.Sprint(userId) + ` `
  202. }
  203. sql += ` group by a.frequency`
  204. _, err = o.Raw(sql, classifyId).QueryRows(&items)
  205. return
  206. }
  207. type TargetListResp struct {
  208. List []*Edbinfo
  209. Paging *paging.PagingItem `description:"分页数据"`
  210. }
  211. type EdbinfoAddReq struct {
  212. SecName string `description:"指标名称"`
  213. Unit string `description:"单位"`
  214. Frequency string `description:"频度"`
  215. ClassifyId int `description:"分类id"`
  216. NoticeTime string `description:"通知时间"`
  217. }
  218. // GetMaxTradeCode 获取指标最大trade_code
  219. func GetMaxTradeCode() (max_trade_code string, err error) {
  220. sql := " SELECT MAX(TRADE_CODE) AS max_trade_code FROM edbinfo WHERE LEFT(TRADE_CODE,1)='W' AND TRADE_CODE not like '%index%' and TRADE_CODE NOT LIKE 'WDC%'"
  221. o := orm.NewOrmUsingDB("edb")
  222. err = o.Raw(sql).QueryRow(&max_trade_code)
  223. if (err != nil && err.Error() == utils.ErrNoRow()) || max_trade_code == `` {
  224. max_trade_code = "W00"
  225. }
  226. return
  227. }
  228. func GetEdbinfoBySecName(secName string) (item *Edbinfo, err error) {
  229. sql := `SELECT * FROM edbinfo WHERE SEC_NAME=? AND left(TRADE_CODE,1)='W' AND REMARK='手动' `
  230. o := orm.NewOrmUsingDB("edb")
  231. err = o.Raw(sql, secName).QueryRow(&item)
  232. return
  233. }
  234. func GetEdbinfoByTradeCode(tradeCode string) (item *Edbinfo, err error) {
  235. sql := `SELECT * FROM edbinfo WHERE TRADE_CODE=? `
  236. o := orm.NewOrmUsingDB("edb")
  237. err = o.Raw(sql, tradeCode).QueryRow(&item)
  238. return
  239. }
  240. func AddEdbinfo(tradeCode, secName, unit, remark, frequency, noticeTime string, classifyId int, userId int) (err error) {
  241. sql := `INSERT INTO edbinfo(TRADE_CODE, SEC_NAME,UNIT, REMARK,frequency, classify_id,notice_time,user_id,create_date)
  242. VALUES(?,?,?,?,?,?,?,?,now()) `
  243. o := orm.NewOrmUsingDB("edb")
  244. _, err = o.Raw(sql, tradeCode, secName, unit, remark, frequency, classifyId, noticeTime, userId).Exec()
  245. return
  246. }
  247. func AddEdbinfoUser(tradeCode, mobile string) (err error) {
  248. o := orm.NewOrmUsingDB("edb")
  249. sql := `INSERT INTO edbinfo_user(TRADE_CODE, mobile) VALUES (?,?)`
  250. _, err = o.Raw(sql, tradeCode, mobile).Exec()
  251. return
  252. }
  253. type EdbinfoEditReq struct {
  254. TradeCode string `description:"指标code"`
  255. SecName string `description:"指标名称"`
  256. Unit string `description:"单位"`
  257. Frequency string `description:"频度"`
  258. ClassifyId int `description:"分类id"`
  259. NoticeTime string `description:"通知时间"`
  260. }
  261. func EditEdbinfo(tradeCode, secName, unit, frequency, noticeTime string, classifyId int) (err error) {
  262. sql := `UPDATE edbinfo SET SEC_NAME= ?, UNIT = ?,classify_id=?,frequency=?,notice_time=?,create_date=NOW() WHERE TRADE_CODE=? `
  263. o := orm.NewOrmUsingDB("edb")
  264. _, err = o.Raw(sql, secName, unit, classifyId, frequency, noticeTime, tradeCode).Exec()
  265. return
  266. }
  267. func SearchTargetEntry(classifyId int, keyWord string) (items []*Edbinfo, err error) {
  268. where := ""
  269. pars := make([]interface{}, 0)
  270. sql := `SELECT * FROM edbinfo WHERE LEFT(TRADE_CODE,1)='W' AND REMARK='手动' AND classify_id>0 AND classify_id=? `
  271. pars = append(pars, classifyId)
  272. if keyWord != "" {
  273. sql += `AND SEC_NAME LIKE ? `
  274. pars = utils.GetLikeKeywordPars(pars, keyWord, 1)
  275. }
  276. sql += where
  277. o := orm.NewOrmUsingDB("edb")
  278. _, err = o.Raw(sql, pars...).QueryRows(&items)
  279. return
  280. }
  281. type SearchTargetListResp struct {
  282. List []*Edbinfo
  283. }
  284. type EdbdataClassify struct {
  285. ClassifyId int
  286. ClassifyName string
  287. ParentId int
  288. EdbInfoTotal int
  289. TradeCode string
  290. UniqueCode string
  291. }
  292. func GetEdbdataClassifyByClassifyName(classifyName string) (item *EdbdataClassify, err error) {
  293. sql := `SELECT * FROM edbdata_classify WHERE classify_name=? `
  294. o := orm.NewOrmUsingDB("edb")
  295. err = o.Raw(sql, classifyName).QueryRow(&item)
  296. return
  297. }
  298. type EdbdataClassifyList struct {
  299. ClassifyId int
  300. ClassifyName string
  301. ParentId int
  302. Child []*EdbdataClassify
  303. TradeCode string
  304. UniqueCode string
  305. }
  306. func GetEdbdataClassify(userId int64) (items []*EdbdataClassifyList, err error) {
  307. var newItems []*EdbdataClassifyList
  308. o := orm.NewOrmUsingDB("edb")
  309. sql := ` SELECT classify_id,classify_name,parent_id FROM edbdata_classify WHERE parent_id=0 `
  310. _, err = o.Raw(sql).QueryRows(&newItems)
  311. if err != nil {
  312. return
  313. }
  314. classifyLen := len(newItems)
  315. for i := 0; i < classifyLen; i++ {
  316. var childItems []*EdbdataClassify
  317. parentId := newItems[i].ClassifyId
  318. childSql := ``
  319. if userId > 0 {
  320. userClassifyList, _ := GetManualUserClassify(int(userId))
  321. var userIdArr []string
  322. for _, v := range userClassifyList {
  323. userIdArr = append(userIdArr, strconv.Itoa(v.ClassifyId))
  324. }
  325. userIdStr := strings.Join(userIdArr, ",")
  326. if userIdStr != "" {
  327. childSql = "SELECT a.classify_id,a.classify_name,a.parent_id FROM edbdata_classify AS a WHERE a.is_show=1 and a.classify_id IN(" + userIdStr + ") AND parent_id=? ORDER BY a.create_time ASC "
  328. _, err = o.Raw(childSql, parentId).QueryRows(&childItems)
  329. }
  330. } else {
  331. childSql = "SELECT classify_id,classify_name,parent_id FROM edbdata_classify WHERE is_show=1 and parent_id=? ORDER BY create_time ASC "
  332. _, err = o.Raw(childSql, parentId).QueryRows(&childItems)
  333. }
  334. if err != nil {
  335. return
  336. }
  337. newItems[i].Child = childItems
  338. }
  339. for _, v := range newItems {
  340. childLen := len(v.Child)
  341. if childLen > 0 {
  342. items = append(items, v)
  343. }
  344. }
  345. return
  346. }
  347. type ManualUserClassify struct {
  348. ManualUserClassifyId int `orm:"column(manual_user_classify_id);pk"`
  349. AdminId int
  350. ClassifyId int
  351. CreateTime time.Time
  352. }
  353. func GetManualUserClassify(sysUserId int) (list []*ManualUserClassify, err error) {
  354. o := orm.NewOrmUsingDB("data")
  355. sql := `SELECT * FROM manual_user_classify WHERE admin_id=? `
  356. _, err = o.Raw(sql, sysUserId).QueryRows(&list)
  357. return
  358. }
  359. type EdbdataClassifyResp struct {
  360. List []*EdbdataClassifyList
  361. }
  362. func GetTargetBySecName(secName string) (item *Edbinfo, err error) {
  363. sql := `SELECT * FROM edbinfo WHERE SEC_NAME=? AND left(TRADE_CODE,1)='W' AND REMARK='手动' `
  364. o := orm.NewOrmUsingDB("edb")
  365. err = o.Raw(sql, secName).QueryRow(&item)
  366. return
  367. }
  368. // 更新指标数据信息
  369. func (edbinfo *Edbinfo) Update(cols []string) (err error) {
  370. o := orm.NewOrmUsingDB("edb")
  371. _, err = o.Update(edbinfo, cols...)
  372. return
  373. }
  374. func ModifyTargetClassifyId(tradeCode string, classifyId int) (err error) {
  375. sql := `UPDATE edbinfo SET classify_id=? WHERE TRADE_CODE=? `
  376. o := orm.NewOrmUsingDB("edb")
  377. _, err = o.Raw(sql, classifyId, tradeCode).Exec()
  378. return
  379. }
  380. func GetTargetsDataCount(tradeCode, dt string) (count int, err error) {
  381. sql := `SELECT COUNT(1) AS count FROM edbdata WHERE TRADE_CODE=? AND DT=? `
  382. o := orm.NewOrmUsingDB("edb")
  383. err = o.Raw(sql, tradeCode, dt).QueryRow(&count)
  384. return
  385. }
  386. // GetTargetsDataList 根据code获取指标数据列表
  387. func GetTargetsDataList(tradeCode string) (items []*Edbdata, err error) {
  388. o := orm.NewOrmUsingDB("edb")
  389. sql := `SELECT * FROM edbdata WHERE TRADE_CODE=? ORDER BY DT ASC `
  390. _, err = o.Raw(sql, tradeCode).QueryRows(&items)
  391. return
  392. }
  393. func GetTargetsData(tradeCode, dt string) (item *Edbdata, err error) {
  394. sql := `SELECT * FROM edbdata WHERE TRADE_CODE=? AND DT=? `
  395. o := orm.NewOrmUsingDB("edb")
  396. err = o.Raw(sql, tradeCode, dt).QueryRow(&item)
  397. return
  398. }
  399. func ModifyTargetsDataByImport(tradeCode, dt, close string) (err error) {
  400. sql := `UPDATE edbdata SET CLOSE=?,modify_time=NOW() WHERE TRADE_CODE=? AND DT=? `
  401. o := orm.NewOrmUsingDB("edb")
  402. _, err = o.Raw(sql, close, tradeCode, dt).Exec()
  403. return
  404. }
  405. func AddTargetsDataByImport(tradeCode, dt, close string) (err error) {
  406. sql := `INSERT INTO edbdata(TRADE_CODE, DT,CLOSE, modify_time)VALUES(?,?,?,NOW()) `
  407. o := orm.NewOrmUsingDB("edb")
  408. _, err = o.Raw(sql, tradeCode, dt, close).Exec()
  409. return
  410. }
  411. type EdbdataImportResp struct {
  412. Status int
  413. Msg string
  414. SuccessCount int
  415. FailCount int
  416. }
  417. func GetFailList(sysUserId int) (items []*EdbdataImportFail, err error) {
  418. o := orm.NewOrmUsingDB("edb")
  419. sql := ` SELECT * FROM edbdata_import_fail WHERE sys_user_id=? `
  420. _, err = o.Raw(sql, sysUserId).QueryRows(&items)
  421. return
  422. }
  423. type DataListForExport struct {
  424. TradeCode string `orm:"column(TRADE_CODE)" description:"指标code"`
  425. SecName string `orm:"column(SEC_NAME)" description:"指标名称"`
  426. Unit string `orm:"column(UNIT)" description:"单位"`
  427. Frequency string `description:"频度"`
  428. ClassifyId int `description:"分类id"`
  429. NoticeTime string `description:"通知时间"`
  430. ClassifyName string
  431. Dt string `orm:"column(DT)" description:"日期"`
  432. Close float64 `orm:"column(CLOSE)" description:"值"`
  433. }
  434. func GetDataListForExport(startDate, endDate, frequency, keyWord string, classifyId int) (items []*DataListForExport, err error) {
  435. where := ``
  436. var pars []interface{}
  437. if keyWord != "" {
  438. where = ` AND SEC_NAME LIKE ? `
  439. pars = utils.GetLikeKeywordPars(pars, keyWord, 1)
  440. }
  441. if startDate != "" {
  442. where += ` AND create_date>=? `
  443. pars = append(pars, startDate)
  444. }
  445. if endDate != "" {
  446. where += ` AND create_date<=? `
  447. pars = append(pars, endDate)
  448. }
  449. if frequency != "" {
  450. where += ` AND frequency=? `
  451. pars = append(pars, frequency)
  452. }
  453. if classifyId > 0 {
  454. where += ` AND classify_id=? `
  455. pars = append(pars, classifyId)
  456. }
  457. sql := ` SELECT a.TRADE_CODE,a.SEC_NAME,a.UNIT,a.frequency,a.classify_id,b.classify_name,c.DT,c.CLOSE FROM edbdata AS c
  458. INNER JOIN edbinfo AS a ON a.TRADE_CODE=c.TRADE_CODE
  459. LEFT JOIN edbdata_classify AS b ON a.classify_id=b.classify_id
  460. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0 `
  461. if where != "" {
  462. sql += where
  463. }
  464. sql = sql + " ORDER BY c.DT DESC "
  465. o := orm.NewOrmUsingDB("edb")
  466. _, err = o.Raw(sql, pars).QueryRows(&items)
  467. return
  468. }
  469. type DataDeleteReq struct {
  470. TradeCode string `description:"指标唯一编码"`
  471. CreateDate string `description:"数据录入日期"`
  472. }
  473. func DataDelete(tradeCode, createDate, close string, modifyTime time.Time, sysUserId int) (err error) {
  474. o := orm.NewOrmUsingDB("edb")
  475. to, err := o.Begin()
  476. if err != nil {
  477. return
  478. }
  479. defer func() {
  480. if err != nil {
  481. _ = to.Rollback()
  482. } else {
  483. _ = to.Commit()
  484. }
  485. }()
  486. recordSql := ` INSERT INTO edbdata_delete_record(TRADE_CODE,DT,CLOSE,modify_time,create_time,sys_user_id)
  487. VALUES(?,?,?,?,?,?)`
  488. _, err = to.Raw(recordSql, tradeCode, createDate, close, modifyTime, time.Now(), sysUserId).Exec()
  489. sql := ` DELETE FROM edbdata WHERE TRADE_CODE = ? AND DT = ? `
  490. _, err = to.Raw(sql, tradeCode, createDate).Exec()
  491. return
  492. }
  493. func GetTargetInfoCount(tradeCode string) (count int, err error) {
  494. sql := ` SELECT COUNT(1) AS count FROM edbdata AS c
  495. INNER JOIN edbinfo AS a ON a.TRADE_CODE=c.TRADE_CODE
  496. WHERE a.TRADE_CODE=? `
  497. o := orm.NewOrmUsingDB("edb")
  498. err = o.Raw(sql, tradeCode).QueryRow(&count)
  499. return
  500. }
  501. type TargetDeleteReq struct {
  502. TradeCode string `description:"指标唯一编码"`
  503. }
  504. func TargetDelete(tradeCode string) (err error) {
  505. o := orm.NewOrmUsingDB("edb")
  506. to, err := o.Begin()
  507. if err != nil {
  508. return
  509. }
  510. defer func() {
  511. if err != nil {
  512. _ = to.Rollback()
  513. } else {
  514. _ = to.Commit()
  515. }
  516. }()
  517. sql := " DELETE FROM edbinfo WHERE TRADE_CODE = ? "
  518. _, err = to.Raw(sql, tradeCode).Exec()
  519. sql = " DELETE FROM edbdata WHERE TRADE_CODE = ? "
  520. _, err = to.Raw(sql, tradeCode).Exec()
  521. return
  522. }
  523. type Researcher struct {
  524. AdminId int `description:"系统用户id"`
  525. AdminName string `description:"系统用户名称"`
  526. RealName string `description:"系统用户姓名"`
  527. Role string `description:"系统用户角色"`
  528. Mobile string `description:"手机号"`
  529. TargetCount int `description:"指标数量"`
  530. }
  531. type ResearcherListResp struct {
  532. List []*Researcher
  533. }
  534. func GetResearcherEntry() (items []*Researcher, err error) {
  535. sql := ` SELECT admin_id,admin_name,real_name,mobile,0 as target_count FROM admin WHERE role_type=1 `
  536. o := orm.NewOrm()
  537. _, err = o.Raw(sql).QueryRows(&items)
  538. researchLen := len(items)
  539. edbO := orm.NewOrmUsingDB("edb")
  540. for i := 0; i < researchLen; i++ {
  541. var count int
  542. mobile := items[i].Mobile
  543. sqlCount := ` SELECT COUNT(DISTINCT a.TRADE_CODE) AS count FROM edbinfo_user AS a
  544. INNER JOIN edbinfo AS b ON a.TRADE_CODE=b.TRADE_CODE
  545. WHERE a.mobile=? AND LEFT(b.TRADE_CODE,1)='W' AND b.REMARK='手动' AND b.classify_id>0 `
  546. err = edbO.Raw(sqlCount, mobile).QueryRow(&count)
  547. items[i].TargetCount = count
  548. }
  549. return
  550. }
  551. func GetResearcherEntryByMobile(mobile string) (items []*Researcher, err error) {
  552. sql := ` SELECT admin_id,admin_name,real_name,mobile,0 as target_count FROM admin WHERE role_type=1 `
  553. if mobile != "" {
  554. sql += ` AND mobile IN(` + mobile + `)`
  555. }
  556. o := orm.NewOrm()
  557. _, err = o.Raw(sql).QueryRows(&items)
  558. researchLen := len(items)
  559. edbO := orm.NewOrmUsingDB("edb")
  560. for i := 0; i < researchLen; i++ {
  561. var count int
  562. mobile := items[i].Mobile
  563. sqlCount := ` SELECT COUNT(DISTINCT a.TRADE_CODE) AS count FROM edbinfo_user AS a
  564. INNER JOIN edbinfo AS b ON a.TRADE_CODE=b.TRADE_CODE
  565. WHERE a.mobile=? AND LEFT(b.TRADE_CODE,1)='W' AND b.REMARK='手动' AND b.classify_id>0 `
  566. err = edbO.Raw(sqlCount, mobile).QueryRow(&count)
  567. items[i].TargetCount = count
  568. }
  569. return
  570. }
  571. type EdbinfoItems struct {
  572. TradeCode string `orm:"column(TRADE_CODE);pk" description:"指标code"`
  573. SecName string `orm:"column(SEC_NAME);" description:"指标名称"`
  574. Unit string `orm:"column(UNIT);" description:"单位"`
  575. Remark string `orm:"column(REMARK);" description:"备注"`
  576. Frequency string `description:"频度"`
  577. ClassifyId int `description:"分类id"`
  578. ClassifyName string `description:"分类名称"`
  579. CreateDate string `description:"创建时间"`
  580. UserId int `description:"录入用户id"`
  581. NoticeTime string `description:"通知时间"`
  582. Mobile string `description:"录入者手机号"`
  583. ModifyDate string `description:"待更新日期"`
  584. Status string `description:"状态:未完成/完成"`
  585. }
  586. type TargetItemsResp struct {
  587. List SortEdbInfo
  588. }
  589. type SortEdbInfo []EdbinfoItems
  590. func GetTargetItems(mobile string, classifyId int) (lastItems SortEdbInfo, err error) {
  591. var items []*EdbinfoItems
  592. o := orm.NewOrmUsingDB("edb")
  593. //sql := ` SELECT *,'' modify_date,'' status FROM edbinfo AS a WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0 `
  594. sql := ` SELECT *,'' modify_date,'' STATUS FROM edbinfo AS a
  595. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0
  596. `
  597. if classifyId > 0 {
  598. sql += ` AND a.classify_id=` + strconv.Itoa(classifyId) + ``
  599. }
  600. sql += ` GROUP BY a.TRADE_CODE `
  601. //if classifyId > 0 {
  602. // sql = ` SELECT *,'' modify_date,'' status FROM edbinfo AS a
  603. // WHERE a.classify_id=` + strconv.Itoa(classifyId) + ` AND LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0
  604. // GROUP BY a.TRADE_CODE `
  605. //}
  606. sql = sql + ` ORDER BY CONVERT(a.SEC_NAME USING gbk ) COLLATE gbk_chinese_ci ASC `
  607. _, err = o.Raw(sql).QueryRows(&items)
  608. if err != nil {
  609. return
  610. }
  611. itemsLen := len(items)
  612. nowWeek := time.Now().Weekday().String()
  613. fmt.Println(nowWeek)
  614. finishEdbInfo := SortEdbInfo{}
  615. unFinishEdbInfo := SortEdbInfo{}
  616. for i := 0; i < itemsLen; i++ {
  617. noticeTime := items[i].NoticeTime
  618. frequency := items[i].Frequency
  619. tradeCode := items[i].TradeCode
  620. if noticeTime != "" {
  621. if frequency == "周度" {
  622. noticeArr := strings.Split(noticeTime, " ")
  623. noticeWeek := noticeArr[0]
  624. fmt.Println(noticeWeek)
  625. addDay := 0
  626. if nowWeek == "Sunday" {
  627. if noticeWeek == "周日" {
  628. addDay = 0
  629. } else if noticeWeek == "周一" {
  630. addDay = 1
  631. } else if noticeWeek == "周二" {
  632. addDay = 2
  633. } else if noticeWeek == "周三" {
  634. addDay = 3
  635. } else if noticeWeek == "周四" {
  636. addDay = 4
  637. } else if noticeWeek == "周五" {
  638. addDay = 5
  639. } else if noticeWeek == "周六" {
  640. addDay = 6
  641. } else {
  642. addDay = 0
  643. }
  644. } else if nowWeek == "Monday" {
  645. if noticeWeek == "周日" {
  646. addDay = 6
  647. } else if noticeWeek == "周一" {
  648. addDay = 0
  649. } else if noticeWeek == "周二" {
  650. addDay = 1
  651. } else if noticeWeek == "周三" {
  652. addDay = 2
  653. } else if noticeWeek == "周四" {
  654. addDay = 3
  655. } else if noticeWeek == "周五" {
  656. addDay = 4
  657. } else if noticeWeek == "周六" {
  658. addDay = 5
  659. } else {
  660. addDay = 0
  661. }
  662. } else if nowWeek == "Tuesday" {
  663. if noticeWeek == "周日" {
  664. addDay = 5
  665. } else if noticeWeek == "周一" {
  666. addDay = 6
  667. } else if noticeWeek == "周二" {
  668. addDay = 0
  669. } else if noticeWeek == "周三" {
  670. addDay = 1
  671. } else if noticeWeek == "周四" {
  672. addDay = 2
  673. } else if noticeWeek == "周五" {
  674. addDay = 3
  675. } else if noticeWeek == "周六" {
  676. addDay = 4
  677. } else {
  678. addDay = 0
  679. }
  680. } else if nowWeek == "Wednesday" {
  681. if noticeWeek == "周日" {
  682. addDay = 4
  683. } else if noticeWeek == "周一" {
  684. addDay = 5
  685. } else if noticeWeek == "周二" {
  686. addDay = 6
  687. } else if noticeWeek == "周三" {
  688. addDay = 0
  689. } else if noticeWeek == "周四" {
  690. addDay = 1
  691. } else if noticeWeek == "周五" {
  692. addDay = 2
  693. } else if noticeWeek == "周六" {
  694. addDay = 3
  695. } else {
  696. addDay = 0
  697. }
  698. } else if nowWeek == "Thursday" {
  699. if noticeWeek == "周日" {
  700. addDay = 3
  701. } else if noticeWeek == "周一" {
  702. addDay = 4
  703. } else if noticeWeek == "周二" {
  704. addDay = 5
  705. } else if noticeWeek == "周三" {
  706. addDay = 6
  707. } else if noticeWeek == "周四" {
  708. addDay = 0
  709. } else if noticeWeek == "周五" {
  710. addDay = 1
  711. } else if noticeWeek == "周六" {
  712. addDay = 2
  713. } else {
  714. addDay = 0
  715. }
  716. } else if nowWeek == "Friday" {
  717. if noticeWeek == "周日" {
  718. addDay = 2
  719. } else if noticeWeek == "周一" {
  720. addDay = 3
  721. } else if noticeWeek == "周二" {
  722. addDay = 4
  723. } else if noticeWeek == "周三" {
  724. addDay = 5
  725. } else if noticeWeek == "周四" {
  726. addDay = 6
  727. } else if noticeWeek == "周五" {
  728. addDay = 0
  729. } else if noticeWeek == "周六" {
  730. addDay = 1
  731. } else {
  732. addDay = 0
  733. }
  734. } else if nowWeek == "Saturday" {
  735. if noticeWeek == "周日" {
  736. addDay = 1
  737. } else if noticeWeek == "周一" {
  738. addDay = 2
  739. } else if noticeWeek == "周二" {
  740. addDay = 3
  741. } else if noticeWeek == "周三" {
  742. addDay = 4
  743. } else if noticeWeek == "周四" {
  744. addDay = 5
  745. } else if noticeWeek == "周五" {
  746. addDay = 6
  747. } else if noticeWeek == "周六" {
  748. addDay = 0
  749. } else {
  750. addDay = 0
  751. }
  752. }
  753. modifyDate := time.Now().AddDate(0, 0, addDay)
  754. modifyDateStr := modifyDate.Format(utils.FormatDate)
  755. items[i].ModifyDate = modifyDateStr
  756. modifyDateEndStr := modifyDate.AddDate(0, 0, -7).Format(utils.FormatDate)
  757. fmt.Println("addDay:", addDay)
  758. fmt.Println("modifyDateEndStr:", modifyDateEndStr)
  759. count := 0
  760. sqlCount := ` SELECT COUNT(1) AS num FROM edbdata WHERE TRADE_CODE=? AND DT >= ? AND DT <= ? `
  761. err = o.Raw(sqlCount, tradeCode, modifyDateEndStr, modifyDateStr).QueryRow(&count)
  762. if err != nil {
  763. return nil, err
  764. }
  765. if count > 0 {
  766. items[i].Status = "完成"
  767. finishEdbInfo = append(finishEdbInfo, *items[i])
  768. } else {
  769. items[i].Status = "未完成"
  770. unFinishEdbInfo = append(unFinishEdbInfo, *items[i])
  771. }
  772. } else if frequency == "日度" {
  773. items[i].Status = "完成"
  774. finishEdbInfo = append(finishEdbInfo, *items[i])
  775. } else if frequency == "月度" {
  776. myYear := time.Now().Year()
  777. myMonth := time.Now().Format("01")
  778. startDate, endDate := utils.GetMonthStartAndEnd(strconv.Itoa(myYear), myMonth)
  779. count := 0
  780. sqlCount := ` SELECT COUNT(1) AS num FROM edbdata WHERE TRADE_CODE=? AND DT >= ? AND DT <= ? `
  781. err = o.Raw(sqlCount, tradeCode, startDate, endDate).QueryRow(&count)
  782. if err != nil {
  783. return nil, err
  784. }
  785. if noticeTime != "" {
  786. var modifyDateStr string
  787. strArr := strings.Split(noticeTime, "日")
  788. myYear := time.Now().Year()
  789. myMonth := time.Now().Format("01")
  790. modifyDateStr = strconv.Itoa(myYear) + "-" + myMonth + "-" + strArr[0]
  791. items[i].ModifyDate = modifyDateStr
  792. }
  793. if count > 0 {
  794. items[i].Status = "完成"
  795. finishEdbInfo = append(finishEdbInfo, *items[i])
  796. } else {
  797. items[i].Status = "未完成"
  798. unFinishEdbInfo = append(unFinishEdbInfo, *items[i])
  799. }
  800. } else {
  801. items[i].Status = "完成"
  802. finishEdbInfo = append(finishEdbInfo, *items[i])
  803. }
  804. } else {
  805. if frequency == "月度" {
  806. myYear := time.Now().Year()
  807. myMonth := time.Now().Format("01")
  808. startDate, endDate := utils.GetMonthStartAndEnd(strconv.Itoa(myYear), myMonth)
  809. count := 0
  810. sqlCount := ` SELECT COUNT(1) AS num FROM edbdata WHERE TRADE_CODE=? AND DT >= ? AND DT <= ? `
  811. err = o.Raw(sqlCount, tradeCode, startDate, endDate).QueryRow(&count)
  812. if err != nil {
  813. return nil, err
  814. }
  815. if count > 0 {
  816. items[i].Status = "完成"
  817. finishEdbInfo = append(finishEdbInfo, *items[i])
  818. } else {
  819. items[i].Status = "未完成"
  820. unFinishEdbInfo = append(unFinishEdbInfo, *items[i])
  821. }
  822. } else {
  823. items[i].Status = "完成"
  824. finishEdbInfo = append(finishEdbInfo, *items[i])
  825. }
  826. }
  827. }
  828. sort.Sort(SortByModifyDate{finishEdbInfo})
  829. sort.Sort(SortByModifyDate{unFinishEdbInfo})
  830. lastItems = append(lastItems, unFinishEdbInfo...)
  831. lastItems = append(lastItems, finishEdbInfo...)
  832. return
  833. }
  834. // 获取此 slice 的长度
  835. func (p SortEdbInfo) Len() int { return len(p) }
  836. // 根据元素的状态降序排序
  837. func (p SortEdbInfo) Less(i, j int) bool {
  838. return p[i].Status > p[j].Status
  839. }
  840. // 交换数据
  841. func (p SortEdbInfo) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
  842. // 嵌套结构体 将继承 SortEdbInfo 的所有属性和方法
  843. // 所以相当于SortByName 也实现了 Len() 和 Swap() 方法
  844. type SortByStatus struct{ SortEdbInfo }
  845. // 根据元素的姓名长度降序排序 (此处按照自己的业务逻辑写)
  846. func (p SortByStatus) Less(i, j int) bool {
  847. return len(p.SortEdbInfo[i].Status) > len(p.SortEdbInfo[j].Status)
  848. }
  849. type SortByModifyDate struct{ SortEdbInfo }
  850. // 根据元素的年龄降序排序 (此处按照自己的业务逻辑写)
  851. func (p SortByModifyDate) Less(i, j int) bool {
  852. return p.SortEdbInfo[i].ModifyDate > p.SortEdbInfo[j].ModifyDate
  853. }
  854. type DataCheckResp struct {
  855. Status int `description:"状态:1:该日期已存在数据,是否确认修改?,0:数据不存在"`
  856. Close string `description:"值"`
  857. }
  858. type TargetCheckResp struct {
  859. Status int `description:"状态:1:该指标有关联数据,请先删除数据,0:指标不存在关联数据,可直接删除"`
  860. }
  861. type EdbdataExportList struct {
  862. TradeCode string `orm:"column(TRADE_CODE);" description:"指标code"`
  863. SecName string `orm:"column(SEC_NAME);" description:"指标名称"`
  864. Unit string `orm:"column(UNIT);" description:"单位"`
  865. Remark string `orm:"column(REMARK);" description:"备注"`
  866. Frequency string `description:"频度"`
  867. ClassifyId int `description:"分类id"`
  868. ClassifyName string `description:"分类名称"`
  869. CreateDate string `description:"创建时间"`
  870. Dt string `orm:"column(Dt);" description:"最新一次录入时间"`
  871. }
  872. func GetEdbdataSecName(condition string, pars []interface{}) (items []*EdbdataExportList, err error) {
  873. //sql := `SELECT a.TRADE_CODE,a.SEC_NAME,a.frequency,a.UNIT,MAX(c.DT) AS Dt
  874. // FROM edbdata AS c
  875. // INNER JOIN edbinfo AS a ON a.TRADE_CODE=c.TRADE_CODE
  876. // INNER JOIN edbinfo_user AS d ON a.TRADE_CODE=d.TRADE_CODE
  877. // LEFT JOIN edbdata_classify AS b ON a.classify_id=b.classify_id
  878. // WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0`
  879. sql := `SELECT a.TRADE_CODE,a.SEC_NAME,a.frequency,a.UNIT,MAX(c.DT) AS Dt,b.classify_name
  880. FROM edbdata AS c
  881. INNER JOIN edbinfo AS a ON a.TRADE_CODE=c.TRADE_CODE
  882. LEFT JOIN edbdata_classify AS b ON a.classify_id=b.classify_id
  883. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0`
  884. if condition != "" {
  885. sql += condition
  886. }
  887. sql += " GROUP BY a.TRADE_CODE ORDER BY a.TRADE_CODE ASC "
  888. o := orm.NewOrmUsingDB("edb")
  889. _, err = o.Raw(sql, pars).QueryRows(&items)
  890. return
  891. }
  892. func GetEdbDataFrequency(classifyId int) (items []*string, err error) {
  893. sql := `SELECT DISTINCT frequency FROM edbinfo where classify_id=? AND frequency IS NOT NULL ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年度','年度') `
  894. o := orm.NewOrmUsingDB("edb")
  895. _, err = o.Raw(sql, classifyId).QueryRows(&items)
  896. return
  897. }
  898. func GetEdbDataFrequencyByKeyord(keyword string) (items []*string, err error) {
  899. sql := `SELECT DISTINCT frequency FROM edbinfo where SEC_NAME=? ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年度','年度') `
  900. o := orm.NewOrmUsingDB("edb")
  901. _, err = o.Raw(sql, keyword).QueryRows(&items)
  902. return
  903. }
  904. type EdbdataList struct {
  905. Dt string `orm:"column(DT);" description:"录入时间"`
  906. }
  907. func GetEdbdataList(tradeCode string) (items []*EdbdataList, err error) {
  908. sql := ` SELECT DT FROM edbdata WHERE TRADE_CODE IN(` + tradeCode + `) GROUP BY DT ORDER BY DT DESC `
  909. o := orm.NewOrmUsingDB("edb")
  910. _, err = o.Raw(sql).QueryRows(&items)
  911. return
  912. }
  913. type EdbdataItem struct {
  914. TradeCode string `orm:"column(TRADE_CODE);" description:"指标code"`
  915. Dt string `orm:"column(DT);" description:"最新一次录入时间"`
  916. Close float64 `orm:"column(CLOSE);" description:"值"`
  917. }
  918. func GetEdbdataValueByTradeCode(tradeCode, dt string) (item *EdbdataItem, err error) {
  919. sql := ` SELECT TRADE_CODE,DT,CLOSE FROM edbdata WHERE TRADE_CODE=? AND DT=? `
  920. o := orm.NewOrmUsingDB("edb")
  921. err = o.Raw(sql, tradeCode, dt).QueryRow(&item)
  922. return
  923. }
  924. func GetEdbdataAllByTradeCode(tradeCode string) (items []*EdbdataItem, err error) {
  925. sql := ` SELECT * FROM edbdata WHERE TRADE_CODE=? `
  926. o := orm.NewOrmUsingDB("edb")
  927. _, err = o.Raw(sql, tradeCode).QueryRows(&items)
  928. return
  929. }
  930. func GetEdbdataClassifyByParentId(parentId int) (items []*EdbdataClassify, err error) {
  931. sql := ` SELECT * FROM edbdata_classify WHERE parent_id=? `
  932. o := orm.NewOrmUsingDB("edb")
  933. _, err = o.Raw(sql, parentId).QueryRows(&items)
  934. return
  935. }
  936. type LzPriceClassify struct {
  937. ProductName string
  938. }
  939. func GetLzPriceClassify() (items []*LzPriceClassify, err error) {
  940. sql := ` SELECT product_name FROM longzhongpriceinfo GROUP BY product_name ORDER BY product_name DESC `
  941. o := orm.NewOrmUsingDB("edb")
  942. _, err = o.Raw(sql).QueryRows(&items)
  943. return
  944. }
  945. type Longzhongpriceinfo struct {
  946. LongzhongpriceinfoId int `orm:"column(longzhongpriceinfo_id);pk"`
  947. Standard string
  948. ModelName string
  949. Unit string
  950. AreaName string
  951. PriceType string
  952. Memo string
  953. PriceId string
  954. ProductName string
  955. InfoType string
  956. InfoTypeRemark string
  957. MarketName string
  958. ManufactureName string
  959. }
  960. func GetLongzhongpriceinfoByClassifyName(productName string) (items []*Longzhongpriceinfo, err error) {
  961. sql := `SELECT * FROM longzhongpriceinfo WHERE product_name=? ORDER BY longzhongpriceinfo_id ASC `
  962. o := orm.NewOrmUsingDB("edb")
  963. _, err = o.Raw(sql, productName).QueryRows(&items)
  964. return
  965. }
  966. func GetLongzhongPriceDataMaxCount(productName string) (count int, err error) {
  967. o := orm.NewOrmUsingDB("edb")
  968. sql := `SELECT MAX(t.num) AS count FROM (
  969. SELECT COUNT(1) AS num FROM longzhongpriceinfo AS a
  970. INNER JOIN longzhongpricedata AS b ON a.longzhongpriceinfo_id=b.longzhongpriceinfo_id
  971. WHERE a.product_name=?
  972. GROUP BY a.product_name
  973. )AS t `
  974. err = o.Raw(sql, productName).QueryRow(&count)
  975. return
  976. }
  977. type LongzhongpricedataItems struct {
  978. LongzhongpricedataId int `orm:"column(longzhongpricedata_id);pk"`
  979. LongzhongpriceinfoId int
  980. PriceDate string
  981. Memo string
  982. Price float64
  983. CnyPrice float64
  984. ZsyPrice float64
  985. ZshPrice float64
  986. LowPrice float64
  987. HighPrice float64
  988. RisePrice float64
  989. TonPrice float64
  990. PriceType string
  991. UpdateDate string
  992. }
  993. func GetLongzhongPriceDataById(lzPriceInfoId int) (items []*LongzhongpricedataItems, err error) {
  994. o := orm.NewOrmUsingDB("edb")
  995. sql := ` SELECT DISTINCT a.longzhongpriceinfo_id,a.price_date,a.memo,a.price,a.cny_price,a.zsy_price,a.zsh_price,a.low_price,a.high_price,a.rise_price,a.ton_price,a.price_type,a.update_date
  996. FROM longzhongpricedata AS a
  997. WHERE longzhongpriceinfo_id=? ORDER BY price_date DESC `
  998. _, err = o.Raw(sql, lzPriceInfoId).QueryRows(&items)
  999. return
  1000. }
  1001. func GetLzSurveyClassify() (items []*LzPriceClassify, err error) {
  1002. sql := ` SELECT breed_name AS product_name FROM longzhong_survey_product GROUP BY breed_name ORDER BY breed_name DESC `
  1003. o := orm.NewOrmUsingDB("edb")
  1004. _, err = o.Raw(sql).QueryRows(&items)
  1005. return
  1006. }
  1007. type LongzhongSurveyProduct struct {
  1008. SurveyProductId int `orm:"column(survey_product_id);pk"`
  1009. ProjectQuotaId int64
  1010. BreedId string
  1011. BreedName string
  1012. QuotaId string
  1013. QuotaName string
  1014. UnitId string
  1015. UnitName string
  1016. SampleType int64
  1017. SampleId string
  1018. SampleName string
  1019. DeviceId string
  1020. Device string
  1021. ProductCraftId string
  1022. ProductCraft string
  1023. ProductLine string
  1024. InputMode int64
  1025. Frequency int64
  1026. InputValue string
  1027. TaskShouldFinishTime int
  1028. CustomId string
  1029. CustomType int64
  1030. Custom string
  1031. QuotaSampleId int64
  1032. StartDate string
  1033. EndDate string
  1034. LzCode string
  1035. }
  1036. func GetLongzhongSurveyProductByClassifyName(productName string) (items []*LongzhongSurveyProduct, err error) {
  1037. sql := `SELECT * FROM longzhong_survey_product WHERE breed_name=? ORDER BY survey_product_id ASC `
  1038. o := orm.NewOrmUsingDB("edb")
  1039. _, err = o.Raw(sql, productName).QueryRows(&items)
  1040. return
  1041. }
  1042. func GetLzSurveyProductByNameAndFrequency(productName string, frequency int) (items []*LongzhongSurveyProduct, err error) {
  1043. sql := `SELECT * FROM longzhong_survey_product WHERE breed_name=? AND frequency=? ORDER BY survey_product_id ASC `
  1044. o := orm.NewOrmUsingDB("edb")
  1045. _, err = o.Raw(sql, productName, frequency).QueryRows(&items)
  1046. return
  1047. }
  1048. func GetExportLzSurveyProductByBreedIds(breedIds []string) (items []*LongzhongSurveyProduct, err error) {
  1049. if len(breedIds) == 0 {
  1050. return
  1051. }
  1052. field := ` survey_product_id, breed_id, breed_name, sample_name, custom, quota_name, lz_code, frequency, unit_name, end_date, input_value `
  1053. sql := `SELECT ` + field + ` FROM longzhong_survey_product WHERE breed_id IN (` + utils.GetOrmInReplace(len(breedIds)) + `) ORDER BY breed_id ASC, frequency ASC, survey_product_id ASC `
  1054. o := orm.NewOrmUsingDB("edb")
  1055. _, err = o.Raw(sql, breedIds).QueryRows(&items)
  1056. return
  1057. }
  1058. func GetLzFrequency(productName string) (items []*int, err error) {
  1059. sql := `SELECT DISTINCT frequency FROM longzhong_survey_product WHERE breed_name=? ORDER BY frequency`
  1060. o := orm.NewOrmUsingDB("edb")
  1061. _, err = o.Raw(sql, productName).QueryRows(&items)
  1062. return
  1063. }
  1064. // EdbInfoItem
  1065. type EdbInfoItem struct {
  1066. TradeCode string `orm:"column(TRADE_CODE);pk" description:"指标code"`
  1067. SecName string `orm:"column(SEC_NAME);" description:"指标名称"`
  1068. Unit string `orm:"column(UNIT);" description:"单位"`
  1069. Remark string `orm:"column(REMARK);" description:"备注"`
  1070. Frequency string `description:"频度"`
  1071. ClassifyId int `description:"分类id"`
  1072. ClassifyName string `description:"分类名称"`
  1073. CreateDate string `description:"创建时间"`
  1074. UserId int `description:"录入用户id"`
  1075. NoticeTime string `description:"通知时间"`
  1076. Mobile string `description:"录入者手机号"`
  1077. ModifyDate string `description:"待更新日期"`
  1078. Status string `description:"状态:未完成/完成"`
  1079. DataList []*Edbdata `description:"指标数据列表"`
  1080. }
  1081. // GetTargetItemList 获取指标列表数据
  1082. func GetTargetItemList(classifyId, edbShowType int, frequency, keyword, tradeCode string, classifyIdStrList []string) (items []*EdbInfoItem, err error) {
  1083. o := orm.NewOrmUsingDB("edb")
  1084. pars := make([]interface{}, 0)
  1085. sql := ` SELECT a.*,'' modify_date,'' STATUS FROM edbinfo AS a `
  1086. if edbShowType != 0 {
  1087. sql = ` SELECT a.*,b.DT,'' modify_date,'' STATUS FROM edbinfo AS a
  1088. left join edbdata b on a.TRADE_CODE=b.TRADE_CODE `
  1089. }
  1090. sql += ` WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id>0 `
  1091. //如果没有分类id集合列表,那么就没有数据了,不用往下执行了,直接返回好了
  1092. if len(classifyIdStrList) <= 0 {
  1093. return
  1094. }
  1095. if len(classifyIdStrList) > 0 {
  1096. sql += ` AND a.classify_id in (` + strings.Join(classifyIdStrList, ",") + `) `
  1097. }
  1098. if classifyId > 0 {
  1099. sql += ` AND a.classify_id=` + strconv.Itoa(classifyId) + ` `
  1100. }
  1101. //频度
  1102. if frequency != "" {
  1103. sql += ` AND a.frequency="` + frequency + `" `
  1104. }
  1105. //关键字
  1106. if keyword != "" {
  1107. sql += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  1108. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  1109. }
  1110. //指定指标
  1111. if tradeCode != "" {
  1112. sql += ` AND a.TRADE_CODE = "` + tradeCode + `" `
  1113. }
  1114. //指标里面是否有数据
  1115. switch edbShowType {
  1116. case 1:
  1117. sql += ` AND b.CLOSE is not null `
  1118. case 2:
  1119. sql += ` AND b.CLOSE is null `
  1120. }
  1121. sql += ` GROUP BY a.TRADE_CODE `
  1122. sql = sql + ` ORDER BY CONVERT(a.SEC_NAME USING gbk ) COLLATE gbk_chinese_ci ASC `
  1123. _, err = o.Raw(sql, pars).QueryRows(&items)
  1124. return
  1125. }
  1126. // GetLzItemList 模糊查询隆众数据库指标列表
  1127. func GetLzItemList(keyword string) (items []*data_manage.LongzhongSurveyProduct, err error) {
  1128. o := orm.NewOrmUsingDB("edb")
  1129. sql := "SELECT * FROM longzhong_survey_product WHERE CONCAT(sample_name,breed_name,custom,quota_name,lz_code) LIKE ?"
  1130. _, err = o.Raw(sql, utils.GetLikeKeyword(keyword)).QueryRows(&items)
  1131. return
  1132. }
  1133. type lzSurveyData struct {
  1134. DataTime string `orm:"column(data_time)" description:"日期"`
  1135. InputValue string `orm:"column(input_value)" description:"值"`
  1136. }
  1137. // GetLzItemListByCode 根据code查询隆众数据列表
  1138. func GetLzItemListByCode(lzCode string) (items []*lzSurveyData, err error) {
  1139. o := orm.NewOrmUsingDB("edb")
  1140. sql := "SELECT * FROM longzhong_survey_data WHERE survey_product_id=? GROUP BY data_time DESC"
  1141. _, err = o.Raw(sql, lzCode).QueryRows(&items)
  1142. return
  1143. }
  1144. // GetEdbDataListByCodes 通过指标ID获取所有数据
  1145. func GetEdbDataListByCodes(tradeCode string) (items []*Edbdata, err error) {
  1146. sql := ` SELECT TRADE_CODE,DT,round(CLOSE,4) CLOSE,modify_time FROM edbdata WHERE TRADE_CODE IN(` + tradeCode + `) GROUP BY TRADE_CODE,DT ORDER BY DT DESC `
  1147. o := orm.NewOrmUsingDB("edb")
  1148. _, err = o.Raw(sql).QueryRows(&items)
  1149. return
  1150. }
  1151. // TargetItemListResp 指标数据结构体
  1152. type TargetItemListResp struct {
  1153. List []*EdbInfoItem
  1154. FrequencyList []string
  1155. }
  1156. // BatchDataDeleteReq 批量删除某日的指标数据请求结构体
  1157. type BatchDataDeleteReq struct {
  1158. CreateDate string `description:"创建日期"`
  1159. TradeCodeList []string `description:"指标唯一编码列表"`
  1160. }
  1161. // BatchDeleteEdbDataByDate 批量删除某日的指标数据
  1162. func BatchDeleteEdbDataByDate(tradeCodes, dt string, opUserId int) (err error) {
  1163. o := orm.NewOrmUsingDB("edb")
  1164. var list []*Edbdata
  1165. sql := ` select * FROM edbdata WHERE TRADE_CODE in (` + tradeCodes + `) AND DT = ? `
  1166. _, err = o.Raw(sql, dt).QueryRows(&list)
  1167. if err != nil {
  1168. return
  1169. }
  1170. deleteRecordList := make([]*EdbdataDeleteRecord, 0)
  1171. for _, edbDataInfo := range list {
  1172. deleteRecord := &EdbdataDeleteRecord{
  1173. TradeCode: edbDataInfo.TradeCode,
  1174. Dt: edbDataInfo.Dt,
  1175. Close: edbDataInfo.Close,
  1176. ModifyTime: time.Now(),
  1177. CreateTime: time.Now(),
  1178. SysUserId: opUserId,
  1179. }
  1180. deleteRecordList = append(deleteRecordList, deleteRecord)
  1181. }
  1182. if len(deleteRecordList) > 0 {
  1183. _, tmpErr := o.InsertMulti(len(deleteRecordList), deleteRecordList)
  1184. if tmpErr != nil {
  1185. err = tmpErr
  1186. return
  1187. }
  1188. }
  1189. sql = ` DELETE FROM edbdata WHERE TRADE_CODE in (` + tradeCodes + `) AND DT = ? `
  1190. _, err = o.Raw(sql, dt).Exec()
  1191. return
  1192. }
  1193. // BatchDeleteEdbData 批量删除指标数据
  1194. func BatchDeleteEdbData(tradeCode string, opUserId int) (err error) {
  1195. o := orm.NewOrmUsingDB("edb")
  1196. var list []*Edbdata
  1197. sql := ` select * FROM edbdata WHERE TRADE_CODE = ? `
  1198. _, err = o.Raw(sql, tradeCode).QueryRows(&list)
  1199. if err != nil {
  1200. return
  1201. }
  1202. deleteRecordList := make([]*EdbdataDeleteRecord, 0)
  1203. for _, edbDataInfo := range list {
  1204. deleteRecord := &EdbdataDeleteRecord{
  1205. TradeCode: edbDataInfo.TradeCode,
  1206. Dt: edbDataInfo.Dt,
  1207. Close: edbDataInfo.Close,
  1208. ModifyTime: time.Now(),
  1209. CreateTime: time.Now(),
  1210. SysUserId: opUserId,
  1211. }
  1212. deleteRecordList = append(deleteRecordList, deleteRecord)
  1213. }
  1214. _, err = o.InsertMulti(len(deleteRecordList), deleteRecordList)
  1215. if err != nil {
  1216. return
  1217. }
  1218. sql = ` DELETE FROM edbdata WHERE TRADE_CODE = ? `
  1219. _, err = o.Raw(sql, tradeCode).Exec()
  1220. return
  1221. }
  1222. // GetEdbInfoCountByClassifyId 根据指标分类id获取当前分类下的指标数量
  1223. func GetEdbInfoCountByClassifyId(classifyId int) (count int, err error) {
  1224. o := orm.NewOrmUsingDB("edb")
  1225. sql := `SELECT COUNT(1) AS count FROM ( SELECT a.*,b.CLOSE FROM edbinfo AS a
  1226. INNER JOIN edbdata AS b ON a.TRADE_CODE=b.TRADE_CODE
  1227. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' AND a.classify_id=? group by a.TRADE_CODE) d `
  1228. err = o.Raw(sql, classifyId).QueryRow(&count)
  1229. return
  1230. }
  1231. // EdbInfoGroupCount 指标分类id获取当前分类下的指标数量
  1232. type EdbInfoGroupCount struct {
  1233. Count int
  1234. ClassifyId int
  1235. }
  1236. // GetEdbInfoGroupCountByClassifyIds 根据指标分类id获取当前分类下的指标数量
  1237. func GetEdbInfoGroupCountByClassifyIds(classifyIds string) (list []*EdbInfoGroupCount, err error) {
  1238. o := orm.NewOrmUsingDB("edb")
  1239. sql := `SELECT COUNT(1) AS count,classify_id FROM ( SELECT a.*,b.CLOSE FROM edbinfo AS a
  1240. INNER JOIN edbdata AS b ON a.TRADE_CODE=b.TRADE_CODE
  1241. WHERE LEFT(a.TRADE_CODE,1)='W' AND a.REMARK='手动' and a.classify_id in (` + classifyIds + `) group by a.TRADE_CODE) d
  1242. GROUP BY classify_id `
  1243. _, err = o.Raw(sql).QueryRows(&list)
  1244. return
  1245. }
  1246. // GetExcelData 获取excel样式数据
  1247. func GetExcelData() (list []*data_manage.ExcelStyle, err error) {
  1248. o := orm.NewOrmUsingDB("edb")
  1249. sql := `SELECT * FROM excel_style `
  1250. _, err = o.Raw(sql).QueryRows(&list)
  1251. return
  1252. }
  1253. // AddExcelData 添加excel样式数据
  1254. func AddExcelData(item *data_manage.ExcelStyle) (id int64, err error) {
  1255. o := orm.NewOrmUsingDB("edb")
  1256. id, err = o.Insert(item)
  1257. return
  1258. }
  1259. type EdbdataFloat struct {
  1260. TradeCode string `orm:"column(TRADE_CODE);pk" description:"指标编码"`
  1261. Dt string `orm:"column(DT)" description:"日期"`
  1262. Close float64 `orm:"column(CLOSE)" description:"值"`
  1263. ModifyTime time.Time `orm:"column(modify_time)" description:"修改时间"`
  1264. }
  1265. func GetTargetsDataFloat(tradeCode, dt string) (item *EdbdataFloat, err error) {
  1266. sql := `SELECT * FROM edbdata WHERE TRADE_CODE=? AND DT=? `
  1267. o := orm.NewOrmUsingDB("edb")
  1268. err = o.Raw(sql, tradeCode, dt).QueryRow(&item)
  1269. return
  1270. }
  1271. func ModifyEdbinfo(tradeCode, unit, frequency string, classifyId int) (err error) {
  1272. sql := `UPDATE edbinfo SET UNIT = ?,frequency=?, classify_id=?, create_date=NOW() WHERE TRADE_CODE=? `
  1273. o := orm.NewOrmUsingDB("edb")
  1274. _, err = o.Raw(sql, unit, frequency, classifyId, tradeCode).Exec()
  1275. return
  1276. }
  1277. func DeleteTargetsDataByImport(tradeCode, dt string) (err error) {
  1278. sql := `DELETE FROM edbdata WHERE TRADE_CODE=? AND DT=? `
  1279. o := orm.NewOrmUsingDB("edb")
  1280. _, err = o.Raw(sql, tradeCode, dt).Exec()
  1281. return
  1282. }
  1283. // GetEdbinfoListByCodeListGroupByUserId 根据指标code列表、用户分组获取指标信息
  1284. func GetEdbinfoListByCodeListGroupByUserId(edbCodeList []string) (items []*Edbinfo, err error) {
  1285. num := len(edbCodeList)
  1286. if num <= 0 {
  1287. return
  1288. }
  1289. o := orm.NewOrmUsingDB("edb")
  1290. sql := `SELECT * FROM edbinfo WHERE TRADE_CODE in (` + utils.GetOrmInReplace(num) + `) GROUP BY user_id `
  1291. _, err = o.Raw(sql, edbCodeList).QueryRows(&items)
  1292. return
  1293. }
  1294. // GetEdbinfoListByCodeListByCodeIdList
  1295. // @Description: 根据指标code列表获取列表信息
  1296. // @param edbCodeList
  1297. // @return items
  1298. // @return err
  1299. func GetEdbinfoListByCodeListByCodeIdList(edbCodeList []string) (items []*Edbinfo, err error) {
  1300. num := len(edbCodeList)
  1301. if num <= 0 {
  1302. return
  1303. }
  1304. o := orm.NewOrmUsingDB("edb")
  1305. sql := `SELECT * FROM edbinfo WHERE TRADE_CODE in (` + utils.GetOrmInReplace(num) + `) `
  1306. _, err = o.Raw(sql, edbCodeList).QueryRows(&items)
  1307. return
  1308. }
  1309. // GetEdbinfoListByCodeListByUserId
  1310. // @Description: 根据用户id列表获取指标列表信息
  1311. // @param userIdList
  1312. // @return items
  1313. // @return err
  1314. func GetEdbinfoListByCodeListByUserId(userIdList []int) (items []*Edbinfo, err error) {
  1315. num := len(userIdList)
  1316. if num <= 0 {
  1317. return
  1318. }
  1319. o := orm.NewOrmUsingDB("edb")
  1320. sql := `SELECT * FROM edbinfo WHERE user_id in (` + utils.GetOrmInReplace(num) + `) `
  1321. _, err = o.Raw(sql, userIdList).QueryRows(&items)
  1322. return
  1323. }
  1324. // ModifyEdbinfoUserIdByCodeList 根据指标code列表修改创建人
  1325. func ModifyEdbinfoUserIdByCodeList(edbCodeList []string, userId int) (err error) {
  1326. num := len(edbCodeList)
  1327. if num <= 0 {
  1328. return
  1329. }
  1330. o := orm.NewOrmUsingDB("edb")
  1331. sql := `UPDATE edbinfo SET user_id=? WHERE TRADE_CODE in (` + utils.GetOrmInReplace(num) + `) `
  1332. _, err = o.Raw(sql, userId, edbCodeList).Exec()
  1333. return
  1334. }
  1335. // ModifyEdbinfoUserIdByOldUserId
  1336. // @Description: 根据旧用户id修改新用户id
  1337. // @author: Roc
  1338. // @datetime 2024-03-25 17:59:32
  1339. // @param oldUserId int
  1340. // @param userId int
  1341. // @return err error
  1342. func ModifyEdbinfoUserIdByOldUserId(oldUserIdList []int, userId int) (err error) {
  1343. num := len(oldUserIdList)
  1344. if num <= 0 {
  1345. return
  1346. }
  1347. o := orm.NewOrmUsingDB("edb")
  1348. sql := `UPDATE edbinfo SET user_id=? WHERE user_id in (` + utils.GetOrmInReplace(num) + `) `
  1349. _, err = o.Raw(sql, userId, oldUserIdList).Exec()
  1350. return
  1351. }
  1352. func GetEdbInfoAdminList() (list []int, err error) {
  1353. sql := `SELECT user_id FROM edbinfo GROUP BY user_id `
  1354. o := orm.NewOrmUsingDB("edb")
  1355. _, err = o.Raw(sql).QueryRows(&list)
  1356. return
  1357. }
  1358. // GetAllChildManualEdbClassify
  1359. // @Description: 获取手工数据中所有的子分类
  1360. // @author: Roc
  1361. // @datetime 2024-07-16 13:27:28
  1362. // @return items []*EdbdataClassify
  1363. // @return err error
  1364. func GetAllChildManualEdbClassify() (items []*EdbdataClassify, err error) {
  1365. o := orm.NewOrmUsingDB("edb")
  1366. sql := ` SELECT classify_id,classify_name,parent_id FROM edbdata_classify WHERE parent_id > 0 `
  1367. _, err = o.Raw(sql).QueryRows(&items)
  1368. return
  1369. }
  1370. // GetChildManualEdbClassifyByIdList
  1371. // @Description: 获取手工数据中所有的子分类
  1372. // @author: Roc
  1373. // @datetime 2024-07-16 13:33:57
  1374. // @param idList []int
  1375. // @return items []*EdbdataClassify
  1376. // @return err error
  1377. func GetChildManualEdbClassifyByIdList(idList []int) (items []*EdbdataClassify, err error) {
  1378. num := len(idList)
  1379. if num <= 0 {
  1380. return
  1381. }
  1382. o := orm.NewOrmUsingDB("edb")
  1383. sql := ` SELECT classify_id,classify_name,parent_id FROM edbdata_classify WHERE classify_id in (` + utils.GetOrmInReplace(num) + `) `
  1384. _, err = o.Raw(sql, idList).QueryRows(&items)
  1385. return
  1386. }