license_oa_models.go 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902
  1. package models
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "log"
  6. "time"
  7. "xugu_license/internal/global"
  8. )
  9. type OALicenseInfo struct {
  10. LicInfo TargetOALicenseInfo
  11. GenrateInfo LicenseGenerateInfo
  12. }
  13. type TargetOALicenseInfo struct {
  14. ID sql.NullInt32 `json:"id"` // 自增主键,从1开始,每次递增1
  15. OAId sql.NullInt64 `json:"OA_Id"`
  16. UniqueID sql.NullString `json:"unique_id"` // 每行数据的唯一值ID,理论上有oa的REQUESTID就可以了
  17. OARequestID sql.NullInt64 `json:"oa_request_id"` // oa里的申请单请求ID,假设唯一标识
  18. OARequestName sql.NullString `json:"oa_request_name"` // 请求名称
  19. OARequestNameNew sql.NullString `json:"oa_request_name_new"` // 新请求名称
  20. OARequestNameHTMLNew sql.NullString `json:"oa_request_name_html_new"` // 新请求名称(HTML格式)
  21. OAGLXMID sql.NullInt64 `json:"oa_glxm_id"` // 关联项目ID
  22. OAGLXMName sql.NullString `json:"oa_glxm_name"` // 关联项目
  23. OASQSJ sql.NullString `json:"oa_sqsj"` // 申请时间
  24. OASalespersonName sql.NullString `json:"oa_salesperson_name"` // 销售人员名称
  25. OAXSJSYX sql.NullString `json:"oa_xsjsyx"` // 销售邮箱
  26. OAOperationsPersonName sql.NullString `json:"oa_operations_person_name"` // 运维人员名称
  27. OAJFJSYX sql.NullString `json:"oa_jfjsyx"` // 运维邮箱
  28. OASYDW sql.NullString `json:"oa_sydw"` // 使用单位
  29. OAXMXXMS sql.NullString `json:"oa_xmxxms"` // 项目详细描述
  30. OAJDS sql.NullInt64 `json:"oa_jds"` // 节点数
  31. OANodeCount sql.NullInt64 `json:"oa_node_count"` // 总节点数
  32. OAProductCode sql.NullString `json:"oa_product_code"` // 产品编号
  33. OAProductName sql.NullString `json:"oa_product_name"` // 产品名称
  34. OAProductVersion sql.NullString `json:"oa_product_version"` // 产品版本
  35. OACPU sql.NullString `json:"oa_cpu"` // CPU 信息
  36. OAOperatingSystem sql.NullString `json:"oa_operating_system"` // 操作系统信息
  37. OAMainMAC sql.NullString `json:"oa_main_mac"` // 主 MAC 地址
  38. OASecondMAC sql.NullString `json:"oa_second_mac"` // 副 MAC 地址
  39. OACreationDate sql.NullString `json:"oa_creation_date"` // 创建日期
  40. OACreationTime sql.NullString `json:"oa_creation_time"` // 创建时间
  41. OALastOperateDate sql.NullString `json:"oa_last_operate_date"` // 最后操作日期
  42. OALastOperateTime sql.NullString `json:"oa_last_operate_time"` // 最后操作时间
  43. CaptureTime sql.NullTime `json:"capture_time"` // 抓取时间,用于记录数据抓取的时间
  44. DelTime sql.NullTime `json:"del_Time"` //该行的删除时间
  45. LastOperateTime sql.NullTime `json:"LAST_OPERATE_TIME"` // 该表的行最后操作时间,非oa表中的最后操作时间'
  46. }
  47. type LicenseGenerateInfo struct {
  48. ID sql.NullInt32 `json:"id"` // 自增主键,从1开始,每次递增1
  49. OAId sql.NullInt32 `json:"OA_Id"`
  50. LicenseUniqueID sql.NullString `json:"license_unique_id"` // LicenseApplication表的唯一值ID
  51. LicenseFlage sql.NullString `json:"license_flage"` // License分发状态
  52. Lic1 sql.NullString `json:"lic1"` // 主License
  53. Lic2 sql.NullString `json:"lic2"` // 副License
  54. CreatorGenerate sql.NullTime `json:"creator_generate"` // 生成时间
  55. }
  56. // LicenseRecord 包含 LicenseRecordToUser 和 LicenseRecordToEmails 两个结构体
  57. type LicenseRecord struct {
  58. LicenseRecordToUser []LicenseRecordToUser `json:"license_record_to_user"`
  59. LicenseRecordToEmails []LicenseRecordToEmails `json:"license_record_to_emails"`
  60. }
  61. type LicenseRecordToUser struct {
  62. ID int `json:"id"`
  63. OARequestId int `json:"oa_request_id"`
  64. LicenseUniqueID string `json:"license_unique_id"`
  65. UserUniqueID string `json:"user_unique_id"`
  66. UserAccount string `json:"user_account"`
  67. OperatorUniqueID string `json:"operator_unique_id"`
  68. UpTime time.Time `json:"up_time"`
  69. DelTime time.Time `json:"del_time"` // 删除或失效的时间
  70. }
  71. type LicenseRecordToEmails struct {
  72. ID int `json:"id"`
  73. OARequestId int `json:"oa_request_id"`
  74. LicenseUniqueID string `json:"license_unique_id"`
  75. Emails string `json:"emails"`
  76. OperatorUniqueID string `json:"operator_unique_id"`
  77. UpTime time.Time `json:"up_time"`
  78. DelTime time.Time `json:"del_time"` // 删除或失效的时间
  79. }
  80. // 获取多个或单个license信息,或者指定某个用户能查询到的所有license信息
  81. func GetOALicenseInfo(page int, pageSize int, permission string, licUniqueID string, userUniqueID string, OA_REQUESTID string) (*[]OALicenseInfo, int, error) {
  82. //offset := (page - 1) * pageSize
  83. // 查询总记录数
  84. // var total int
  85. // err := global.XuguDB.QueryRow(`SELECT COUNT(*) FROM target_OA_license WHERE del_Time IS NULL`).Scan(&total)
  86. // if err != nil {
  87. // return nil, 0, fmt.Errorf("GetOALicenseInfocount query error: %v", err)
  88. // }
  89. switch {
  90. // 根据LicUniqueID查询指定页的数据
  91. case licUniqueID != "":
  92. data, err := getSingleLicInfoByUniqueID(licUniqueID)
  93. if err != nil {
  94. return nil, 0, fmt.Errorf("getOAlicInfoToUniqueID query error: %v", err)
  95. }
  96. return &[]OALicenseInfo{*data}, 1, nil
  97. // 根据userUniqueID查询指定页的数据 未完成
  98. case userUniqueID != "":
  99. data, err := getLicInfoByUserUniqueID(userUniqueID, pageSize, page)
  100. if err != nil {
  101. return nil, 0, fmt.Errorf("getOAlicInfoToUniqueID query error: %v", err)
  102. }
  103. return data, 1, nil
  104. //case permission == "read_license":
  105. //读取所有的lic信息
  106. case permission == "read_all_license":
  107. data, total, err := getAllLicInfo(userUniqueID, pageSize, page)
  108. if err != nil {
  109. return nil, 0, fmt.Errorf("getOAlicInfoToUniqueID query error: %v", err)
  110. }
  111. return data, total, nil
  112. //读取所有
  113. case OA_REQUESTID != "":
  114. data, err := getLicInfoByOA_REQUESTID(OA_REQUESTID)
  115. if err != nil {
  116. return nil, 0, fmt.Errorf("getOAlicInfoToUniqueID query error: %v", err)
  117. }
  118. return data, len(*data), nil
  119. }
  120. return nil, 0, fmt.Errorf("getOAlicInfoToUniqueID 没有指定查询条件")
  121. }
  122. func getAllLicInfo(userUniqueID string, limit int, offset int) (*[]OALicenseInfo, int, error) {
  123. fmt.Println("getAllLicInfo", limit, offset)
  124. total := 0
  125. err := global.XuguDB.QueryRow(`
  126. SELECT COUNT(*) from (SELECT OA_REQUESTID AS RequestCount
  127. FROM TARGET_OA_LICENSE
  128. where Del_Time IS NULL
  129. GROUP BY OA_REQUESTID
  130. )
  131. HAVING COUNT(*) > 1;`).Scan(&total)
  132. if err != nil {
  133. return nil, 0, fmt.Errorf("count query error: %v", err)
  134. }
  135. sql := `
  136. SELECT *
  137. FROM SYSDBA.TARGET_OA_LICENSE tl
  138. INNER JOIN
  139. License_generate_Info li
  140. ON
  141. tl.Unique_ID = li.License_UniqueID
  142. WHERE OA_REQUESTID IN(
  143. SELECT OA_REQUESTID FROM (
  144. SELECT OA_REQUESTID ,rownum AS a FROM (SELECT DISTINCT OA_REQUESTID FROM TARGET_OA_LICENSE) a) s
  145. WHERE a BETWEEN ? AND ?)
  146. AND tl.del_Time IS NULL
  147. `
  148. rows, err := global.XuguDB.Query(sql, limit, offset)
  149. if err != nil {
  150. global.Logger.Errorln(" getAllLicInfo rows not found ", err.Error())
  151. return nil, 0, fmt.Errorf("getAllLicInfo query error: %v", err)
  152. }
  153. defer rows.Close()
  154. var results []OALicenseInfo
  155. for rows.Next() {
  156. var info OALicenseInfo
  157. err := rows.Scan(
  158. &info.LicInfo.ID, &info.LicInfo.UniqueID, &info.LicInfo.OAId, &info.LicInfo.OARequestID,
  159. &info.LicInfo.OARequestName, &info.LicInfo.OARequestNameNew, &info.LicInfo.OARequestNameHTMLNew,
  160. &info.LicInfo.OAGLXMID, &info.LicInfo.OAGLXMName,
  161. &info.LicInfo.OASQSJ, &info.LicInfo.OASalespersonName, &info.LicInfo.OAXSJSYX,
  162. &info.LicInfo.OAOperationsPersonName, &info.LicInfo.OAJFJSYX, &info.LicInfo.OASYDW,
  163. &info.LicInfo.OAXMXXMS, &info.LicInfo.OAJDS, &info.LicInfo.OANodeCount,
  164. &info.LicInfo.OAProductCode, &info.LicInfo.OAProductName, &info.LicInfo.OAProductVersion,
  165. &info.LicInfo.OACPU, &info.LicInfo.OAOperatingSystem, &info.LicInfo.OAMainMAC,
  166. &info.LicInfo.OASecondMAC, &info.LicInfo.OACreationDate, &info.LicInfo.OACreationTime,
  167. &info.LicInfo.OALastOperateDate, &info.LicInfo.OALastOperateTime, &info.LicInfo.CaptureTime,
  168. &info.LicInfo.DelTime, &info.LicInfo.LastOperateTime,
  169. &info.GenrateInfo.ID, &info.GenrateInfo.OAId, &info.GenrateInfo.LicenseUniqueID, &info.GenrateInfo.LicenseFlage,
  170. &info.GenrateInfo.Lic1, &info.GenrateInfo.Lic2, &info.GenrateInfo.CreatorGenerate,
  171. )
  172. if err != nil {
  173. global.Logger.Errorln(" getAllLicInfo scan error: ", err.Error())
  174. return nil, 0, fmt.Errorf("getAllLicInfo scan error: %v", err)
  175. }
  176. results = append(results, info)
  177. }
  178. // 打印结果或进一步处理
  179. // for _, result := range results {
  180. // fmt.Println(result)
  181. // }
  182. return &results, total, nil
  183. }
  184. func getSingleLicInfoByUniqueID(unique_ID string) (*OALicenseInfo, error) {
  185. sql := `
  186. SELECT
  187. la.ID, la.Unique_ID, la.OA_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
  188. la.OA_REQUESTNAMEHTMLNEW, la.OA_GLXMID ,la.OA_GLXMNAME ,la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
  189. la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
  190. la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
  191. la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
  192. la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
  193. la.del_Time, la.LAST_OPERATE_TIME,
  194. li.ID AS License_ID, li.OA_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
  195. FROM
  196. target_OA_license la
  197. INNER JOIN
  198. License_generate_Info li
  199. ON
  200. la.Unique_ID = li.License_UniqueID
  201. WHERE
  202. la.del_Time IS NULL
  203. AND
  204. la.Unique_ID = ?`
  205. rows, err := global.XuguDB.Query(sql, unique_ID)
  206. if err != nil {
  207. global.Logger.Errorln("getOAlicInfoToUniqueID 数据查询失败: ", err.Error())
  208. return nil, fmt.Errorf("getOAlicInfoToUniqueID 数据查询失败: %v", err)
  209. }
  210. defer rows.Close()
  211. var info OALicenseInfo
  212. rows.Next()
  213. err = rows.Scan(
  214. &info.LicInfo.ID, &info.LicInfo.UniqueID, &info.LicInfo.OAId, &info.LicInfo.OARequestID,
  215. &info.LicInfo.OARequestName, &info.LicInfo.OARequestNameNew, &info.LicInfo.OARequestNameHTMLNew,
  216. &info.LicInfo.OAGLXMID, &info.LicInfo.OAGLXMName,
  217. &info.LicInfo.OASQSJ, &info.LicInfo.OASalespersonName, &info.LicInfo.OAXSJSYX,
  218. &info.LicInfo.OAOperationsPersonName, &info.LicInfo.OAJFJSYX, &info.LicInfo.OASYDW,
  219. &info.LicInfo.OAXMXXMS, &info.LicInfo.OAJDS, &info.LicInfo.OANodeCount,
  220. &info.LicInfo.OAProductCode, &info.LicInfo.OAProductName, &info.LicInfo.OAProductVersion,
  221. &info.LicInfo.OACPU, &info.LicInfo.OAOperatingSystem, &info.LicInfo.OAMainMAC,
  222. &info.LicInfo.OASecondMAC, &info.LicInfo.OACreationDate, &info.LicInfo.OACreationTime,
  223. &info.LicInfo.OALastOperateDate, &info.LicInfo.OALastOperateTime, &info.LicInfo.CaptureTime,
  224. &info.LicInfo.DelTime, &info.LicInfo.LastOperateTime,
  225. &info.GenrateInfo.ID, &info.GenrateInfo.OAId, &info.GenrateInfo.LicenseUniqueID, &info.GenrateInfo.LicenseFlage,
  226. &info.GenrateInfo.Lic1, &info.GenrateInfo.Lic2, &info.GenrateInfo.CreatorGenerate,
  227. )
  228. if err != nil {
  229. log.Fatal(err)
  230. }
  231. return &info, nil
  232. }
  233. func getLicInfoByUserUniqueID(userUniqueID string, limit int, offset int) (*[]OALicenseInfo, error) {
  234. sql := `
  235. SELECT la.ID, la.Unique_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
  236. la.OA_REQUESTNAMEHTMLNEW,
  237. la.OA_GLXMID ,la.OA_GLXMNAME,
  238. la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
  239. la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
  240. la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
  241. la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
  242. la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
  243. la.del_Time, la.LAST_OPERATE_TIME,
  244. li.ID AS License_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
  245. FROM SYSDBA.TARGET_OA_LICENSE la
  246. INNER JOIN
  247. License_generate_Info li
  248. ON
  249. la.Unique_ID = li.License_UniqueID
  250. INNER JOIN
  251. LICENSERECORDTOUSER LU
  252. ON
  253. la.UNIQUE_ID = lu.LICENSE_UNIQUEID
  254. AND lu.USER_UNIQUEID = ?
  255. WHERE OA_REQUESTID IN(
  256. SELECT OA_REQUESTID FROM (
  257. SELECT OA_REQUESTID ,rownum AS a FROM (SELECT DISTINCT OA_REQUESTID FROM LICENSERECORDTOUSER) a) s
  258. WHERE a BETWEEN ? AND ?)
  259. AND la.del_Time IS NULL
  260. `
  261. rows, err := global.XuguDB.Query(sql, userUniqueID, limit, offset)
  262. if err != nil {
  263. global.Logger.Errorln(" getAllLicInfo rows not found ", err.Error())
  264. return nil, fmt.Errorf("getAllLicInfo query error: %v", err)
  265. }
  266. defer rows.Close()
  267. var results []OALicenseInfo
  268. for rows.Next() {
  269. var info OALicenseInfo
  270. err := rows.Scan(
  271. &info.LicInfo.ID, &info.LicInfo.UniqueID, &info.LicInfo.OARequestID,
  272. &info.LicInfo.OARequestName, &info.LicInfo.OARequestNameNew, &info.LicInfo.OARequestNameHTMLNew,
  273. &info.LicInfo.OAGLXMID, &info.LicInfo.OAGLXMName,
  274. &info.LicInfo.OASQSJ, &info.LicInfo.OASalespersonName, &info.LicInfo.OAXSJSYX,
  275. &info.LicInfo.OAOperationsPersonName, &info.LicInfo.OAJFJSYX, &info.LicInfo.OASYDW,
  276. &info.LicInfo.OAXMXXMS, &info.LicInfo.OAJDS, &info.LicInfo.OANodeCount,
  277. &info.LicInfo.OAProductCode, &info.LicInfo.OAProductName, &info.LicInfo.OAProductVersion,
  278. &info.LicInfo.OACPU, &info.LicInfo.OAOperatingSystem, &info.LicInfo.OAMainMAC,
  279. &info.LicInfo.OASecondMAC, &info.LicInfo.OACreationDate, &info.LicInfo.OACreationTime,
  280. &info.LicInfo.OALastOperateDate, &info.LicInfo.OALastOperateTime, &info.LicInfo.CaptureTime,
  281. &info.LicInfo.DelTime, &info.LicInfo.LastOperateTime,
  282. &info.GenrateInfo.ID, &info.GenrateInfo.LicenseUniqueID, &info.GenrateInfo.LicenseFlage,
  283. &info.GenrateInfo.Lic1, &info.GenrateInfo.Lic2, &info.GenrateInfo.CreatorGenerate,
  284. )
  285. if err != nil {
  286. global.Logger.Errorln(" getAllLicInfo scan error: ", err.Error())
  287. return nil, fmt.Errorf("getAllLicInfo scan error: %v", err)
  288. }
  289. results = append(results, info)
  290. }
  291. // 打印结果或进一步处理
  292. for _, result := range results {
  293. fmt.Println(result)
  294. }
  295. return &results, nil
  296. }
  297. func getLicInfoByOA_REQUESTID(unique_ID string) (*[]OALicenseInfo, error) {
  298. sql := `
  299. SELECT
  300. la.ID, la.Unique_ID, la.OA_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
  301. la.OA_REQUESTNAMEHTMLNEW, la.OA_GLXMID ,la.OA_GLXMNAME ,la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
  302. la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
  303. la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
  304. la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
  305. la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
  306. la.del_Time, la.LAST_OPERATE_TIME,
  307. li.ID AS License_ID, li.OA_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
  308. FROM
  309. target_OA_license la
  310. INNER JOIN
  311. License_generate_Info li
  312. ON
  313. la.Unique_ID = li.License_UniqueID
  314. WHERE
  315. la.del_Time IS NULL
  316. AND
  317. la.OA_REQUESTID = ?`
  318. rows, err := global.XuguDB.Query(sql, unique_ID)
  319. if err != nil {
  320. global.Logger.Errorln("getLicInfoByOAUniqueID 数据查询失败: ", err.Error())
  321. return nil, fmt.Errorf("getLicInfoByOAUniqueID 数据查询失败: %v", err)
  322. }
  323. defer rows.Close()
  324. var rest []OALicenseInfo
  325. for rows.Next() {
  326. var info OALicenseInfo
  327. err = rows.Scan(
  328. &info.LicInfo.ID, &info.LicInfo.UniqueID, &info.LicInfo.OAId, &info.LicInfo.OARequestID,
  329. &info.LicInfo.OARequestName, &info.LicInfo.OARequestNameNew, &info.LicInfo.OARequestNameHTMLNew,
  330. &info.LicInfo.OAGLXMID, &info.LicInfo.OAGLXMName,
  331. &info.LicInfo.OASQSJ, &info.LicInfo.OASalespersonName, &info.LicInfo.OAXSJSYX,
  332. &info.LicInfo.OAOperationsPersonName, &info.LicInfo.OAJFJSYX, &info.LicInfo.OASYDW,
  333. &info.LicInfo.OAXMXXMS, &info.LicInfo.OAJDS, &info.LicInfo.OANodeCount,
  334. &info.LicInfo.OAProductCode, &info.LicInfo.OAProductName, &info.LicInfo.OAProductVersion,
  335. &info.LicInfo.OACPU, &info.LicInfo.OAOperatingSystem, &info.LicInfo.OAMainMAC,
  336. &info.LicInfo.OASecondMAC, &info.LicInfo.OACreationDate, &info.LicInfo.OACreationTime,
  337. &info.LicInfo.OALastOperateDate, &info.LicInfo.OALastOperateTime, &info.LicInfo.CaptureTime,
  338. &info.LicInfo.DelTime, &info.LicInfo.LastOperateTime,
  339. &info.GenrateInfo.ID, &info.GenrateInfo.OAId, &info.GenrateInfo.LicenseUniqueID, &info.GenrateInfo.LicenseFlage,
  340. &info.GenrateInfo.Lic1, &info.GenrateInfo.Lic2, &info.GenrateInfo.CreatorGenerate,
  341. )
  342. if err != nil {
  343. log.Fatal(err)
  344. }
  345. rest = append(rest, info)
  346. }
  347. return &rest, nil
  348. }
  349. // 插入生成好的lic1,2的信息
  350. func UpdateOALicenseStr(uniqueID string, lic1 []byte, lic2 []byte) error {
  351. tx, err := global.XuguDB.Begin()
  352. if err != nil {
  353. global.Logger.Errorln("begin transaction失败: ", err.Error())
  354. return fmt.Errorf("begin transaction: %v", err)
  355. }
  356. defer func() {
  357. if err != nil {
  358. tx.Rollback()
  359. } else {
  360. err = tx.Commit()
  361. }
  362. }()
  363. //插入 LicenseInfo 表
  364. if lic2 == nil {
  365. _, err = tx.Exec(`
  366. UPDATE License_generate_Info SET License_Flage = ? ,lic1 = ?,Creator_generate =? WHERE License_UniqueID = ?
  367. `,
  368. "已生成", string(lic1), time.Now(), uniqueID)
  369. } else {
  370. _, err = tx.Exec(`
  371. UPDATE License_generate_Info SET License_Flage = ? ,lic1 = ?,lic2 = ?,Creator_generate =? WHERE License_UniqueID = ?
  372. `,
  373. "已生成", string(lic1), string(lic2), time.Now(), uniqueID)
  374. }
  375. if err != nil {
  376. global.Logger.Errorln("插入lic1 ,2 失败: ", err.Error())
  377. return err
  378. }
  379. return nil
  380. }
  381. // 修改一行前端可改的license信息
  382. func UpdatelicenseInfoRow(license OALicenseInfo) error {
  383. tx, err := global.XuguDB.Begin()
  384. if err != nil {
  385. return fmt.Errorf("begin transaction: %v", err)
  386. }
  387. defer func() {
  388. if err != nil {
  389. tx.Rollback()
  390. } else {
  391. err = tx.Commit()
  392. }
  393. }()
  394. _, err = tx.Exec(`
  395. UPDATE target_OA_license SET OA_REQUESTNAME =? ,OA_CREATIONDATE =? ,OA_GLXMNAME = ? ,
  396. OA_SALESPERSONNAME = ? , OA_XSJSYX = ? , OA_OPERATIONSPERSONNAME = ? , OA_JFJSYX = ? , OA_JDS = ? ,
  397. OA_SYDW = ? , OA_PRODUCTNAME = ? , OA_PRODUCTVERSION = ? , OA_NODECOUNT = ?
  398. WHERE Unique_ID =?;
  399. `, license.LicInfo.OARequestName.String, license.LicInfo.OACreationDate.String, license.LicInfo.OAGLXMName.String,
  400. license.LicInfo.OASalespersonName.String, license.LicInfo.OAXSJSYX.String, license.LicInfo.OAOperationsPersonName.String, license.LicInfo.OAJFJSYX.String, license.LicInfo.OAJDS.Int64,
  401. license.LicInfo.OASYDW.String, license.LicInfo.OAProductName.String, license.LicInfo.OAProductVersion.String, license.LicInfo.OANodeCount.Int64, license.LicInfo.UniqueID.String)
  402. if err != nil {
  403. global.Logger.Errorln("UpdatelicenseInfoRow失败 ", err.Error())
  404. return err
  405. }
  406. return nil
  407. }
  408. // 插入分发记录用户表
  409. func InsertlicenseRecordByUserRow(oaRequestID string, LicenseUniqueID string, userUniqueID string, UserAccount string, operatorUniqueID string) error {
  410. tx, err := global.XuguDB.Begin()
  411. if err != nil {
  412. global.Logger.Errorln("begin transaction失败: ", err.Error())
  413. return fmt.Errorf("begin transaction: %v", err)
  414. }
  415. defer func() {
  416. if err != nil {
  417. tx.Rollback()
  418. } else {
  419. err = tx.Commit()
  420. }
  421. }()
  422. _, err = tx.Exec(`
  423. Insert into licenseRecordToUser(OA_REQUESTID,License_UniqueID ,user_UniqueID,User_Account,up_Time,operator_UniqueID) values(?,?,?,?,?,?)`,
  424. oaRequestID, LicenseUniqueID, userUniqueID, UserAccount, time.Now(), operatorUniqueID)
  425. if err != nil {
  426. global.Logger.Errorln("插入分发记录用户表失败: ", err.Error())
  427. return err
  428. }
  429. return nil
  430. }
  431. // 插入分发记录邮箱表
  432. func InsertlicenseRecordByEmailRow(oaRequestID, LicenseUniqueID string, emails string, operatorUniqueID string) error {
  433. tx, err := global.XuguDB.Begin()
  434. if err != nil {
  435. global.Logger.Errorln("begin transaction失败: ", err.Error())
  436. return fmt.Errorf("begin transaction: %v", err)
  437. }
  438. defer func() {
  439. if err != nil {
  440. tx.Rollback()
  441. } else {
  442. err = tx.Commit()
  443. }
  444. }()
  445. _, err = tx.Exec(`
  446. Insert into licenseRecordToEmails(OA_REQUESTID,License_UniqueID ,emails,operator_UniqueID,up_Time) values(?,?,?,?,?)`,
  447. oaRequestID, LicenseUniqueID, emails, operatorUniqueID, time.Now())
  448. if err != nil {
  449. global.Logger.Errorln("插入分发记录邮箱表失败: ", err.Error())
  450. return err
  451. }
  452. return nil
  453. }
  454. // 搜索分发记录用户表
  455. func GetlicenseRecordByUser(OA_REQUESTID int, License_UniqueID string) ([]LicenseRecordToUser, error) {
  456. fmt.Println("搜索分发记录表 OA_REQUESTID", OA_REQUESTID)
  457. if License_UniqueID == "" {
  458. return nil, fmt.Errorf("uniqueID is empty")
  459. }
  460. if OA_REQUESTID <= 0 {
  461. return nil, fmt.Errorf("OA_REQUESTID is empty or error")
  462. }
  463. sqlLicUser := `select OA_REQUESTID,License_UniqueID,user_UNIQUEID,User_Account,operator_UniqueID,up_Time from licenseRecordToUser where License_UniqueID = ? AND del_time IS NULL`
  464. rows, err := global.XuguDB.Query(sqlLicUser, License_UniqueID)
  465. if err != nil {
  466. global.Logger.Errorln("query data: ", err.Error())
  467. return nil, fmt.Errorf("query error: %v", err)
  468. }
  469. defer rows.Close()
  470. var results []LicenseRecordToUser
  471. for rows.Next() {
  472. var lRU LicenseRecordToUser
  473. err = rows.Scan(
  474. &lRU.OARequestId,
  475. &lRU.LicenseUniqueID,
  476. &lRU.UserUniqueID,
  477. &lRU.UserAccount,
  478. &lRU.OperatorUniqueID,
  479. &lRU.UpTime,
  480. )
  481. if err != nil {
  482. global.Logger.Errorln("scan row: ", err.Error())
  483. return nil, fmt.Errorf("scan row error: %v", err)
  484. }
  485. results = append(results, lRU)
  486. }
  487. fmt.Println("LicenseRecordToUser ", results)
  488. return results, nil
  489. }
  490. // 搜索分发记录邮箱表
  491. func GetlicenseRecordByEmail(OA_REQUESTID int, License_UniqueID string) ([]LicenseRecordToEmails, error) {
  492. if License_UniqueID == "" {
  493. return nil, fmt.Errorf("uniqueID is empty")
  494. }
  495. if OA_REQUESTID <= 0 {
  496. return nil, fmt.Errorf("OA_REQUESTID is empty or error")
  497. }
  498. sqlLicEmail := `select OA_REQUESTID, License_UniqueID,emails,operator_UniqueID ,up_Time from licenseRecordToEmails where License_UniqueID = ? AND del_time IS NULL;`
  499. rows, err := global.XuguDB.Query(sqlLicEmail, License_UniqueID)
  500. if err != nil {
  501. global.Logger.Errorln("query data: ", err.Error())
  502. return nil, fmt.Errorf("query error: %v", err)
  503. }
  504. var results []LicenseRecordToEmails
  505. for rows.Next() {
  506. var lRU LicenseRecordToEmails
  507. err = rows.Scan(
  508. &lRU.OARequestId,
  509. &lRU.LicenseUniqueID,
  510. &lRU.Emails,
  511. &lRU.OperatorUniqueID,
  512. &lRU.UpTime,
  513. )
  514. if err != nil {
  515. global.Logger.Errorln("scan row: ", err.Error())
  516. return nil, fmt.Errorf("scan row error: %v", err)
  517. }
  518. results = append(results, lRU)
  519. }
  520. if err = rows.Err(); err != nil {
  521. global.Logger.Errorln("rows error: ", err.Error())
  522. return nil, fmt.Errorf("rows error: %v", err)
  523. }
  524. return results, nil
  525. }
  526. // 删除LicenseApplication和LicenseInfo表中的数据
  527. func DelLicenseInfoRow(uniqueID string) error {
  528. fmt.Println("UniqueID12313", uniqueID)
  529. tx, err := global.XuguDB.Begin()
  530. if err != nil {
  531. return fmt.Errorf("begin transaction: %v", err)
  532. }
  533. defer func() {
  534. if err != nil {
  535. tx.Rollback()
  536. } else {
  537. err = tx.Commit()
  538. }
  539. }()
  540. // "update LicenseApplication set DelTime = ? where UniqueID = ?",
  541. //DELETE FROM LicenseInfo WHERE LicenseApplicationUniqueID = ?
  542. // _, err = tx.Exec("DELETE FROM LicenseInfo WHERE LicenseApplicationUniqueID = ?", uniqueID)
  543. // if err != nil {
  544. // return err
  545. // }
  546. // _, err = tx.Exec("DELETE FROM LicenseApplication WHERE UniqueID = ?", uniqueID)
  547. // if err != nil {
  548. // return err
  549. // }
  550. _, err = tx.Exec("UPDATE target_OA_license SET Del_Time = ? WHERE Unique_ID = ?", time.Now(), uniqueID)
  551. if err != nil {
  552. return err
  553. }
  554. return nil
  555. }
  556. type SQLResult struct {
  557. OARequestName sql.NullString `json:"oa_request_name"` // 请求名称 (wr.REQUESTNAME)
  558. OARequestNameNew sql.NullString `json:"oa_request_name_new"` // 新请求名称 (wr.REQUESTNAMENEW)
  559. OARequestNameHTMLNew sql.NullString `json:"oa_request_name_html_new"` // 新请求名称(HTML格式) (wr.REQUESTNAMEHTMLNEW)
  560. OAGLXMID sql.NullInt64 `json:"oa_glxm_id"` // 关联项目ID (fm.glxm)
  561. OAGLXMName sql.NullString `json:"oa_glxm_name"` // 关联项目 (PP.NAME)
  562. OASQSJ sql.NullString `json:"oa_sqsj"` // 申请时间 (fm.SQSJ)
  563. OASalespersonName sql.NullString `json:"oa_salesperson_name"` // 销售人员名称 (hrm1.LASTNAME)
  564. OAOperationsPersonName sql.NullString `json:"oa_operations_person_name"` // 运维人员名称 (hrm2.LASTNAME)
  565. OAXSJSYX sql.NullString `json:"oa_xsjsyx"` // 销售邮箱 (fm.XSJSYX)
  566. OAJFJSYX sql.NullString `json:"oa_jfjsyx"` // 运维邮箱 (fm.JFJSYX)
  567. OASYDW sql.NullString `json:"oa_sydw"` // 使用单位 (fm.SYDW)
  568. OAXMXXMS sql.NullString `json:"oa_xmxxms"` // 项目详细描述 (fm.XMXXMS)
  569. OAJDS sql.NullInt64 `json:"oa_jds"` // 节点数 (fm.JDS)
  570. OANodeCount sql.NullInt64 `json:"oa_node_count"` // 总节点数 (fmd.JDS)
  571. OAProductName sql.NullString `json:"oa_product_name"` // 产品编号 (ws1.SELECTNAME)
  572. OAProductVersion sql.NullString `json:"oa_product_version"` // 产品版本 (ws2.SELECTNAME)
  573. CLQ sql.NullString `json:"clq"` // cpu
  574. CZXT sql.NullString `json:"czxt"` // 操作系统 (fmd.CZXT)
  575. IP sql.NullString `json:"ip"` // IP 地址 (fmd.IP)
  576. MAC sql.NullString `json:"mac"` // MAC 地址 (fmd.MAC)
  577. OACreationDate sql.NullString `json:"oa_creation_date"` // 创建日期 (wr.CREATEDATE)
  578. OACreationTime sql.NullString `json:"oa_creation_time"` // 创建时间 (wr.CREATETIME)
  579. OALastOperateDate sql.NullString `json:"oa_last_operate_date"` // 最后操作日期 (wr.LASTOPERATEDATE)
  580. OALastOperateTime sql.NullString `json:"oa_last_operate_time"` // 最后操作时间 (wr.LASTOPERATETIME)
  581. }
  582. // 检验与oa库数据是否一致
  583. func CheckLicenseInfoInOADB(licInfo *TargetOALicenseInfo) (bool, error) {
  584. //fmt.Println("该死的id", licInfo.ID)
  585. if !licInfo.OAId.Valid {
  586. return false, fmt.Errorf("uniqueID is empty")
  587. }
  588. sql := `
  589. SELECT
  590. wr.REQUESTNAME, wr.REQUESTNAMENEW, wr.REQUESTNAMEHTMLNEW,
  591. fm.glxm,PP.NAME,fm.SQSJ, hrm1.LASTNAME,
  592. hrm2.LASTNAME, fm.XSJSYX, fm.JFJSYX,
  593. fm.SYDW, fm.XMXXMS, fm.JDS,
  594. fmd.JDS, ws1.SELECTNAME,
  595. ws2.SELECTNAME, fmd.CLQ, fmd.CZXT,
  596. fmd.IP, fmd.MAC,wr.CREATEDATE, wr.CREATETIME,
  597. wr.LASTOPERATEDATE, wr.LASTOPERATETIME
  598. FROM XUGU.formtable_main_146 fm
  599. LEFT JOIN XUGU.HRMRESOURCE hrm1 ON TO_NUMBER(fm.XSRY) = hrm1.id
  600. LEFT JOIN XUGU.HRMRESOURCE hrm2 ON TO_NUMBER(fm.jfry) = hrm2.id
  601. LEFT JOIN XUGU.FORMTABLE_MAIN_146_dt1 fmd ON fmd.mainid = fm.id
  602. LEFT JOIN XUGU.WORKFLOW_SELECTITEM ws1 ON fmd.cpmc = ws1.SELECTVALUE AND ws1.FIELDID = 14627
  603. LEFT JOIN XUGU.WORKFLOW_SELECTITEM ws2 ON fmd.BB = ws2.SELECTVALUE AND ws2.FIELDID = 14628
  604. LEFT JOIN XUGU.WORKFLOW_REQUESTBASE WR ON fm.REQUESTID = WR.REQUESTID
  605. LEFT JOIN XUGU.PRJ_PROJECTINFO PP ON fm.glxm = PP.ID
  606. where fmd.id = ?
  607. PARALLEL 8;
  608. `
  609. var record SQLResult
  610. //Wvar sqsj string
  611. err := global.OaDB.QueryRow(sql, licInfo.OAId.Int64).Scan(
  612. &record.OARequestName,
  613. &record.OARequestNameNew,
  614. &record.OARequestNameHTMLNew,
  615. &record.OAGLXMID,
  616. &record.OAGLXMName,
  617. &record.OASQSJ,
  618. &record.OASalespersonName,
  619. &record.OAOperationsPersonName,
  620. &record.OAXSJSYX,
  621. &record.OAJFJSYX,
  622. &record.OASYDW,
  623. &record.OAXMXXMS,
  624. &record.OAJDS,
  625. &record.OANodeCount,
  626. &record.OAProductName,
  627. &record.OAProductVersion,
  628. &record.CLQ,
  629. &record.CZXT,
  630. &record.IP,
  631. &record.MAC,
  632. &record.OACreationDate,
  633. &record.OACreationTime,
  634. &record.OALastOperateDate,
  635. &record.OALastOperateTime,
  636. )
  637. if err != nil {
  638. //global.Logger.Errorln("query data: ", err.Error())
  639. return false, fmt.Errorf("CheckLicenseInfoInOADB query error: %v", err)
  640. }
  641. // 将字符串转换为 time.Time 对象
  642. //record.OASQSJ.Time, err = time.Parse("2006-01-02", sqsj)
  643. // if err != nil {
  644. // //fmt.Println("Error parsing date:", err)
  645. // return false, fmt.Errorf("CheckLicenseInfoInOADB 将字符串转换为 time.Time Error : %v", err)
  646. // }
  647. if isEqual := compareAndCopy(record, licInfo); !isEqual {
  648. return true, nil
  649. }
  650. return false, nil
  651. }
  652. func SearchLicInfoToDb(userInput string) ([]TargetOALicenseInfo, error) {
  653. query := fmt.Sprintf(`
  654. SELECT
  655. ID, UNIQUE_ID, OA_REQUESTID, OA_REQUESTNAME, OA_REQUESTNAMENEW, OA_REQUESTNAMEHTMLNEW,
  656. OA_GLXMID, OA_GLXMNAME, OA_SQSJ, OA_SALESPERSONNAME, OA_XSJSYX, OA_OPERATIONSPERSONNAME,
  657. OA_JFJSYX, OA_SYDW, OA_XMXXMS, OA_JDS, OA_NODECOUNT, OA_PRODUCTCODE, OA_PRODUCTNAME,
  658. OA_PRODUCTVERSION, OA_CPU, OA_OPERATINGSYSTEM, OA_MAINMAC, OA_SECONDMAC,
  659. OA_CREATIONDATE, OA_CREATIONTIME, OA_LASTOPERATEDATE, OA_LASTOPERATETIME
  660. FROM SYSDBA.TARGET_OA_LICENSE
  661. WHERE
  662. UNIQUE_ID LIKE '%%%s%%' OR
  663. OA_REQUESTNAME LIKE '%%%s%%' OR
  664. OA_REQUESTNAMENEW LIKE '%%%s%%' OR
  665. OA_REQUESTNAMEHTMLNEW LIKE '%%%s%%' OR
  666. OA_GLXMNAME LIKE '%%%s%%' OR
  667. OA_SQSJ LIKE '%%%s%%' OR
  668. OA_SALESPERSONNAME LIKE '%%%s%%' OR
  669. OA_XSJSYX LIKE '%%%s%%' OR
  670. OA_OPERATIONSPERSONNAME LIKE '%%%s%%' OR
  671. OA_JFJSYX LIKE '%%%s%%' OR
  672. OA_SYDW LIKE '%%%s%%' OR
  673. OA_XMXXMS LIKE '%%%s%%' OR
  674. OA_PRODUCTCODE LIKE '%%%s%%' OR
  675. OA_PRODUCTNAME LIKE '%%%s%%' OR
  676. OA_PRODUCTVERSION LIKE '%%%s%%' OR
  677. OA_CPU LIKE '%%%s%%' OR
  678. OA_OPERATINGSYSTEM LIKE '%%%s%%' OR
  679. OA_MAINMAC LIKE '%%%s%%' OR
  680. OA_SECONDMAC LIKE '%%%s%%' OR
  681. OA_CREATIONDATE LIKE '%%%s%%' OR
  682. OA_CREATIONTIME LIKE '%%%s%%' OR
  683. OA_LASTOPERATEDATE LIKE '%%%s%%' OR
  684. OA_LASTOPERATETIME LIKE '%%%s%%';
  685. `, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput)
  686. rows, err := global.XuguDB.Query(query)
  687. if err != nil {
  688. return nil, err
  689. }
  690. defer rows.Close()
  691. // 处理查询结果
  692. var licenses []TargetOALicenseInfo
  693. for rows.Next() {
  694. var license TargetOALicenseInfo
  695. err := rows.Scan(
  696. &license.ID, &license.UniqueID, &license.OARequestID, &license.OARequestName,
  697. &license.OARequestNameNew, &license.OARequestNameHTMLNew, &license.OAGLXMID,
  698. &license.OAGLXMName, &license.OASQSJ, &license.OASalespersonName, &license.OAXSJSYX,
  699. &license.OAOperationsPersonName, &license.OAJFJSYX, &license.OASYDW, &license.OAXMXXMS,
  700. &license.OAJDS, &license.OANodeCount, &license.OAProductCode, &license.OAProductName,
  701. &license.OAProductVersion, &license.OACPU, &license.OAOperatingSystem, &license.OAMainMAC,
  702. &license.OASecondMAC, &license.OACreationDate, &license.OACreationTime, &license.OALastOperateDate,
  703. &license.OALastOperateTime,
  704. )
  705. if err != nil {
  706. log.Fatal(err)
  707. }
  708. licenses = append(licenses, license)
  709. }
  710. if err != nil {
  711. log.Fatal(err)
  712. }
  713. // 检查错误
  714. if err := rows.Err(); err != nil {
  715. log.Fatal(err)
  716. }
  717. return licenses, nil
  718. }
  719. // 检测该单个license是否分配给用户
  720. func CheckLicenseToUser(LicenseUniqueID string, userUNIQUEID string) (bool, error) {
  721. if LicenseUniqueID == "" || userUNIQUEID == "" {
  722. global.Logger.Errorln("LicenseUniqueID 或 userUNIQUEID 为空")
  723. return false, fmt.Errorf("LicenseUniqueID 或 userUNIQUEID 为空")
  724. }
  725. type checkLicens struct {
  726. check int
  727. }
  728. sql := `SELECT ID FROM licenseRecordToUser WHERE License_UniqueID = ? AND user_UNIQUEID = ?`
  729. rows, err := global.XuguDB.Query(sql, LicenseUniqueID, userUNIQUEID)
  730. if err != nil {
  731. global.Logger.Errorln("query data: ", err.Error())
  732. return false, fmt.Errorf("query error: %v", err)
  733. }
  734. var cl checkLicens
  735. for rows.Next() {
  736. err = rows.Scan(
  737. &cl.check,
  738. )
  739. if err != nil {
  740. global.Logger.Errorln("scan row: ", err.Error())
  741. return false, fmt.Errorf("scan row error: %v", err)
  742. }
  743. }
  744. if err = rows.Err(); err != nil {
  745. global.Logger.Errorln("rows error: ", err.Error())
  746. return false, fmt.Errorf("rows error: %v", err)
  747. }
  748. fmt.Println("check: ", cl)
  749. if cl.check == 0 {
  750. return false, nil
  751. }
  752. return true, nil
  753. }
  754. // 按oa的申请单号来检测是否分发给用户
  755. func CheckOaLicRequest(oaRequestID string, userUNIQUEID string) (bool, error) {
  756. if oaRequestID == "" || userUNIQUEID == "" {
  757. global.Logger.Errorln("CheckOaLicRequest : LicenseUniqueID 或 userUNIQUEID 为空")
  758. return false, fmt.Errorf("oaRequestID 或 userUNIQUEID 为空")
  759. }
  760. type checkLicens struct {
  761. check int
  762. }
  763. sql := `SELECT ID FROM licenseRecordToUser WHERE OA_REQUESTID = ? AND user_UNIQUEID = ?`
  764. rows, err := global.XuguDB.Query(sql, oaRequestID, userUNIQUEID)
  765. if err != nil {
  766. global.Logger.Errorln("CheckOaLicRequest : query data: ", err.Error())
  767. return false, fmt.Errorf("CheckOaLicRequest : query error: %v", err)
  768. }
  769. var cl checkLicens
  770. for rows.Next() {
  771. err = rows.Scan(
  772. &cl.check,
  773. )
  774. if err != nil {
  775. global.Logger.Errorln("CheckOaLicRequest : scan row: ", err.Error())
  776. return false, fmt.Errorf("CheckOaLicRequest : scan row error: %v", err)
  777. }
  778. }
  779. if err = rows.Err(); err != nil {
  780. global.Logger.Errorln("CheckOaLicRequest : rows error: ", err.Error())
  781. return false, fmt.Errorf("CheckOaLicRequest : rows error: %v", err)
  782. }
  783. if cl.check == 0 {
  784. return false, nil
  785. }
  786. return true, nil
  787. }