license_oa_models.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. package models
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "log"
  6. "strings"
  7. "time"
  8. "xugu_license/internal/api"
  9. "xugu_license/internal/global"
  10. )
  11. // LicenseRecord 包含 LicenseRecordToUser 和 LicenseRecordToEmails 两个结构体
  12. type LicenseRecord struct {
  13. LicenseRecordToUser []LicenseRecordToUser `json:"license_record_to_user"`
  14. LicenseRecordToEmails []LicenseRecordToEmails `json:"license_record_to_emails"`
  15. }
  16. type LicenseRecordToUser struct {
  17. ID int `json:"id"`
  18. OARequestId int `json:"oa_request_id"`
  19. LicenseUniqueID string `json:"license_unique_id"`
  20. UserUniqueID string `json:"user_unique_id"`
  21. UserAccount string `json:"user_account"`
  22. OperatorUniqueID string `json:"operator_unique_id"`
  23. UpTime time.Time `json:"up_time"`
  24. DelTime time.Time `json:"del_time"` // 删除或失效的时间
  25. }
  26. type LicenseRecordToEmails struct {
  27. ID int `json:"id"`
  28. OARequestId int `json:"oa_request_id"`
  29. LicenseUniqueID string `json:"license_unique_id"`
  30. Emails string `json:"emails"`
  31. OperatorUniqueID string `json:"operator_unique_id"`
  32. UpTime time.Time `json:"up_time"`
  33. DelTime time.Time `json:"del_time"` // 删除或失效的时间
  34. }
  35. // 插入分发记录用户表
  36. func InsertlicenseRecordByUserRow(oaRequestID int64, LicenseUniqueID string, userUniqueID string, UserAccount string, operatorUniqueID string) error {
  37. tx, err := global.XuguDB.Begin()
  38. if err != nil {
  39. global.Logger.Errorln("begin transaction失败: ", err.Error())
  40. return fmt.Errorf("begin transaction: %v", err)
  41. }
  42. defer func() {
  43. if err != nil {
  44. tx.Rollback()
  45. } else {
  46. err = tx.Commit()
  47. }
  48. }()
  49. _, err = tx.Exec(`
  50. Insert into licenseRecordToUser(OA_REQUESTID,License_UniqueID ,user_UniqueID,User_Account,up_Time,operator_UniqueID) values(?,?,?,?,?,?)`,
  51. oaRequestID, LicenseUniqueID, userUniqueID, UserAccount, time.Now(), operatorUniqueID)
  52. if err != nil {
  53. global.Logger.Errorln("插入分发记录用户表失败: ", err.Error())
  54. return err
  55. }
  56. return nil
  57. }
  58. // 插入分发记录邮箱表
  59. func InsertlicenseRecordByEmailRow(oaRequestID int64, LicenseUniqueID string, emails string, operatorUniqueID string) error {
  60. tx, err := global.XuguDB.Begin()
  61. if err != nil {
  62. global.Logger.Errorln("begin transaction失败: ", err.Error())
  63. return fmt.Errorf("begin transaction: %v", err)
  64. }
  65. defer func() {
  66. if err != nil {
  67. tx.Rollback()
  68. } else {
  69. err = tx.Commit()
  70. }
  71. }()
  72. _, err = tx.Exec(`
  73. Insert into licenseRecordToEmails(OA_REQUESTID,License_UniqueID ,emails,operator_UniqueID,up_Time) values(?,?,?,?,?)`,
  74. oaRequestID, LicenseUniqueID, emails, operatorUniqueID, time.Now())
  75. if err != nil {
  76. global.Logger.Errorln("插入分发记录邮箱表失败: ", err.Error())
  77. return err
  78. }
  79. return nil
  80. }
  81. // 获取分发记录用户表
  82. func GetlicenseRecordByUser(OA_REQUESTID int, License_UniqueID string) ([]LicenseRecordToUser, error) {
  83. fmt.Println("搜索分发记录表 OA_REQUESTID", OA_REQUESTID)
  84. if License_UniqueID == "" {
  85. return nil, fmt.Errorf("uniqueID is empty")
  86. }
  87. if OA_REQUESTID <= 0 {
  88. return nil, fmt.Errorf("OA_REQUESTID is empty or error")
  89. }
  90. sqlLicUser := `select OA_REQUESTID,License_UniqueID,user_UNIQUEID,User_Account,operator_UniqueID,up_Time from licenseRecordToUser where License_UniqueID = ? AND del_time IS NULL`
  91. rows, err := global.XuguDB.Query(sqlLicUser, License_UniqueID)
  92. if err != nil {
  93. global.Logger.Errorln("query data: ", err.Error())
  94. return nil, fmt.Errorf("query error: %v", err)
  95. }
  96. defer rows.Close()
  97. var results []LicenseRecordToUser
  98. for rows.Next() {
  99. var lRU LicenseRecordToUser
  100. err = rows.Scan(
  101. &lRU.OARequestId,
  102. &lRU.LicenseUniqueID,
  103. &lRU.UserUniqueID,
  104. &lRU.UserAccount,
  105. &lRU.OperatorUniqueID,
  106. &lRU.UpTime,
  107. )
  108. if err != nil {
  109. global.Logger.Errorln("scan row: ", err.Error())
  110. return nil, fmt.Errorf("scan row error: %v", err)
  111. }
  112. results = append(results, lRU)
  113. }
  114. fmt.Println("LicenseRecordToUser ", results)
  115. return results, nil
  116. }
  117. // 获取分发记录邮箱表
  118. func GetlicenseRecordByEmail(OA_REQUESTID int, License_UniqueID string) ([]LicenseRecordToEmails, error) {
  119. if License_UniqueID == "" {
  120. return nil, fmt.Errorf("uniqueID is empty")
  121. }
  122. if OA_REQUESTID <= 0 {
  123. return nil, fmt.Errorf("OA_REQUESTID is empty or error")
  124. }
  125. sqlLicEmail := `select OA_REQUESTID, License_UniqueID,emails,operator_UniqueID ,up_Time from licenseRecordToEmails where License_UniqueID = ? AND del_time IS NULL;`
  126. rows, err := global.XuguDB.Query(sqlLicEmail, License_UniqueID)
  127. if err != nil {
  128. global.Logger.Errorln("query data: ", err.Error())
  129. return nil, fmt.Errorf("query error: %v", err)
  130. }
  131. var results []LicenseRecordToEmails
  132. for rows.Next() {
  133. var lRU LicenseRecordToEmails
  134. err = rows.Scan(
  135. &lRU.OARequestId,
  136. &lRU.LicenseUniqueID,
  137. &lRU.Emails,
  138. &lRU.OperatorUniqueID,
  139. &lRU.UpTime,
  140. )
  141. if err != nil {
  142. global.Logger.Errorln("scan row: ", err.Error())
  143. return nil, fmt.Errorf("scan row error: %v", err)
  144. }
  145. results = append(results, lRU)
  146. }
  147. if err = rows.Err(); err != nil {
  148. global.Logger.Errorln("rows error: ", err.Error())
  149. return nil, fmt.Errorf("rows error: %v", err)
  150. }
  151. return results, nil
  152. }
  153. type SQLResult struct {
  154. OARequestName sql.NullString `json:"oa_request_name"` // 请求名称 (wr.REQUESTNAME)
  155. OARequestNameNew sql.NullString `json:"oa_request_name_new"` // 新请求名称 (wr.REQUESTNAMENEW)
  156. OARequestNameHTMLNew sql.NullString `json:"oa_request_name_html_new"` // 新请求名称(HTML格式) (wr.REQUESTNAMEHTMLNEW)
  157. OAGLXMID sql.NullInt64 `json:"oa_glxm_id"` // 关联项目ID (fm.glxm)
  158. OAGLXMName sql.NullString `json:"oa_glxm_name"` // 关联项目 (PP.NAME)
  159. OASQSJ sql.NullString `json:"oa_sqsj"` // 申请时间 (fm.SQSJ)
  160. OASalespersonName sql.NullString `json:"oa_salesperson_name"` // 销售人员名称 (hrm1.LASTNAME)
  161. OAOperationsPersonName sql.NullString `json:"oa_operations_person_name"` // 运维人员名称 (hrm2.LASTNAME)
  162. OAXSJSYX sql.NullString `json:"oa_xsjsyx"` // 销售邮箱 (fm.XSJSYX)
  163. OAJFJSYX sql.NullString `json:"oa_jfjsyx"` // 运维邮箱 (fm.JFJSYX)
  164. OASYDW sql.NullString `json:"oa_sydw"` // 使用单位 (fm.SYDW)
  165. OAXMXXMS sql.NullString `json:"oa_xmxxms"` // 项目详细描述 (fm.XMXXMS)
  166. OAJDS sql.NullInt64 `json:"oa_jds"` // 节点数 (fm.JDS)
  167. OANodeCount sql.NullInt64 `json:"oa_node_count"` // 总节点数 (fmd.JDS)
  168. OAProductName sql.NullString `json:"oa_product_name"` // 产品编号 (ws1.SELECTNAME)
  169. OAProductVersion sql.NullString `json:"oa_product_version"` // 产品版本 (ws2.SELECTNAME)
  170. CLQ sql.NullString `json:"clq"` // cpu
  171. CZXT sql.NullString `json:"czxt"` // 操作系统 (fmd.CZXT)
  172. IP sql.NullString `json:"ip"` // IP 地址 (fmd.IP)
  173. MAC sql.NullString `json:"mac"` // MAC 地址 (fmd.MAC)
  174. OACreationDate sql.NullString `json:"oa_creation_date"` // 创建日期 (wr.CREATEDATE)
  175. OACreationTime sql.NullString `json:"oa_creation_time"` // 创建时间 (wr.CREATETIME)
  176. OALastOperateDate sql.NullString `json:"oa_last_operate_date"` // 最后操作日期 (wr.LASTOPERATEDATE)
  177. OALastOperateTime sql.NullString `json:"oa_last_operate_time"` // 最后操作时间 (wr.LASTOPERATETIME)
  178. }
  179. // 检验与oa库数据是否一致
  180. func CheckLicenseInfoInOADB(licInfo *TargetOALicenseInfo) (bool, error) {
  181. //fmt.Println("该死的id", licInfo.ID)
  182. if !licInfo.OAId.Valid {
  183. return false, fmt.Errorf("uniqueID is empty")
  184. }
  185. sql := `
  186. SELECT
  187. wr.REQUESTNAME, wr.REQUESTNAMENEW, wr.REQUESTNAMEHTMLNEW,
  188. fm.glxm,PP.NAME,fm.SQSJ, hrm1.LASTNAME,
  189. hrm2.LASTNAME, fm.XSJSYX, fm.JFJSYX,
  190. fm.SYDW, fm.XMXXMS, fm.JDS,
  191. fmd.JDS, ws1.SELECTNAME,
  192. ws2.SELECTNAME, fmd.CLQ, fmd.CZXT,
  193. fmd.IP, fmd.MAC,wr.CREATEDATE, wr.CREATETIME,
  194. wr.LASTOPERATEDATE, wr.LASTOPERATETIME
  195. FROM XUGU.formtable_main_146 fm
  196. LEFT JOIN XUGU.HRMRESOURCE hrm1 ON TO_NUMBER(fm.XSRY) = hrm1.id
  197. LEFT JOIN XUGU.HRMRESOURCE hrm2 ON TO_NUMBER(fm.jfry) = hrm2.id
  198. LEFT JOIN XUGU.FORMTABLE_MAIN_146_dt1 fmd ON fmd.mainid = fm.id
  199. LEFT JOIN XUGU.WORKFLOW_SELECTITEM ws1 ON fmd.cpmc = ws1.SELECTVALUE AND ws1.FIELDID = 14627
  200. LEFT JOIN XUGU.WORKFLOW_SELECTITEM ws2 ON fmd.BB = ws2.SELECTVALUE AND ws2.FIELDID = 14628
  201. LEFT JOIN XUGU.WORKFLOW_REQUESTBASE WR ON fm.REQUESTID = WR.REQUESTID
  202. LEFT JOIN XUGU.PRJ_PROJECTINFO PP ON fm.glxm = PP.ID
  203. where fmd.id = ?
  204. PARALLEL 8;
  205. `
  206. var record SQLResult
  207. //Wvar sqsj string
  208. err := global.OaDB.QueryRow(sql, licInfo.OAId.Int64).Scan(
  209. &record.OARequestName,
  210. &record.OARequestNameNew,
  211. &record.OARequestNameHTMLNew,
  212. &record.OAGLXMID,
  213. &record.OAGLXMName,
  214. &record.OASQSJ,
  215. &record.OASalespersonName,
  216. &record.OAOperationsPersonName,
  217. &record.OAXSJSYX,
  218. &record.OAJFJSYX,
  219. &record.OASYDW,
  220. &record.OAXMXXMS,
  221. &record.OAJDS,
  222. &record.OANodeCount,
  223. &record.OAProductName,
  224. &record.OAProductVersion,
  225. &record.CLQ,
  226. &record.CZXT,
  227. &record.IP,
  228. &record.MAC,
  229. &record.OACreationDate,
  230. &record.OACreationTime,
  231. &record.OALastOperateDate,
  232. &record.OALastOperateTime,
  233. )
  234. if err != nil {
  235. //global.Logger.Errorln("query data: ", err.Error())
  236. return false, fmt.Errorf("CheckLicenseInfoInOADB query error: %v", err)
  237. }
  238. // 将字符串转换为 time.Time 对象
  239. //record.OASQSJ.Time, err = time.Parse("2006-01-02", sqsj)
  240. // if err != nil {
  241. // //fmt.Println("Error parsing date:", err)
  242. // return false, fmt.Errorf("CheckLicenseInfoInOADB 将字符串转换为 time.Time Error : %v", err)
  243. // }
  244. if isEqual := compareAndCopy(record, licInfo); !isEqual {
  245. return true, nil
  246. }
  247. return false, nil
  248. }
  249. func SearchLicInfoToDb(userInput string) ([]TargetOALicenseInfo, error) {
  250. query := fmt.Sprintf(`
  251. SELECT
  252. ID, UNIQUE_ID, OA_REQUESTID, OA_REQUESTNAME, OA_REQUESTNAMENEW, OA_REQUESTNAMEHTMLNEW,
  253. OA_GLXMID, OA_GLXMNAME, OA_SQSJ, OA_SALESPERSONNAME, OA_XSJSYX, OA_OPERATIONSPERSONNAME,
  254. OA_JFJSYX, OA_SYDW, OA_XMXXMS, OA_JDS, OA_NODECOUNT, OA_PRODUCTCODE, OA_PRODUCTNAME,
  255. OA_PRODUCTVERSION, OA_CPU, OA_OPERATINGSYSTEM, OA_MAINMAC, OA_SECONDMAC,
  256. OA_CREATIONDATE, OA_CREATIONTIME, OA_LASTOPERATEDATE, OA_LASTOPERATETIME
  257. FROM SYSDBA.TARGET_OA_LICENSE
  258. WHERE
  259. UNIQUE_ID LIKE '%%%s%%' OR
  260. OA_REQUESTNAME LIKE '%%%s%%' OR
  261. OA_REQUESTNAMENEW LIKE '%%%s%%' OR
  262. OA_REQUESTNAMEHTMLNEW LIKE '%%%s%%' OR
  263. OA_GLXMNAME LIKE '%%%s%%' OR
  264. OA_SQSJ LIKE '%%%s%%' OR
  265. OA_SALESPERSONNAME LIKE '%%%s%%' OR
  266. OA_XSJSYX LIKE '%%%s%%' OR
  267. OA_OPERATIONSPERSONNAME LIKE '%%%s%%' OR
  268. OA_JFJSYX LIKE '%%%s%%' OR
  269. OA_SYDW LIKE '%%%s%%' OR
  270. OA_XMXXMS LIKE '%%%s%%' OR
  271. OA_PRODUCTCODE LIKE '%%%s%%' OR
  272. OA_PRODUCTNAME LIKE '%%%s%%' OR
  273. OA_PRODUCTVERSION LIKE '%%%s%%' OR
  274. OA_CPU LIKE '%%%s%%' OR
  275. OA_OPERATINGSYSTEM LIKE '%%%s%%' OR
  276. OA_MAINMAC LIKE '%%%s%%' OR
  277. OA_SECONDMAC LIKE '%%%s%%' OR
  278. OA_CREATIONDATE LIKE '%%%s%%' OR
  279. OA_CREATIONTIME LIKE '%%%s%%' OR
  280. OA_LASTOPERATEDATE LIKE '%%%s%%' OR
  281. OA_LASTOPERATETIME LIKE '%%%s%%';
  282. `, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput, userInput)
  283. rows, err := global.XuguDB.Query(query)
  284. if err != nil {
  285. return nil, err
  286. }
  287. defer rows.Close()
  288. // 处理查询结果
  289. var licenses []TargetOALicenseInfo
  290. for rows.Next() {
  291. var license TargetOALicenseInfo
  292. err := rows.Scan(
  293. &license.ID, &license.UniqueID, &license.OARequestID, &license.OARequestName,
  294. &license.OARequestNameNew, &license.OARequestNameHTMLNew, &license.OAGLXMID,
  295. &license.OAGLXMName, &license.OASQSJ, &license.OASalespersonName, &license.OAXSJSYX,
  296. &license.OAOperationsPersonName, &license.OAJFJSYX, &license.OASYDW, &license.OAXMXXMS,
  297. &license.OAJDS, &license.OANodeCount, &license.OAProductCode, &license.OAProductName,
  298. &license.OAProductVersion, &license.OACPU, &license.OAOperatingSystem, &license.OAMainMAC,
  299. &license.OASecondMAC, &license.OACreationDate, &license.OACreationTime, &license.OALastOperateDate,
  300. &license.OALastOperateTime,
  301. )
  302. if err != nil {
  303. log.Fatal(err)
  304. }
  305. licenses = append(licenses, license)
  306. }
  307. if err != nil {
  308. log.Fatal(err)
  309. }
  310. // 检查错误
  311. if err := rows.Err(); err != nil {
  312. log.Fatal(err)
  313. }
  314. return licenses, nil
  315. }
  316. // 检测该单个license是否分配给用户
  317. func CheckLicenseToUser(LicenseUniqueID string, userUNIQUEID string) (bool, error) {
  318. if LicenseUniqueID == "" || userUNIQUEID == "" {
  319. global.Logger.Errorln("LicenseUniqueID 或 userUNIQUEID 为空")
  320. return false, fmt.Errorf("LicenseUniqueID 或 userUNIQUEID 为空")
  321. }
  322. type checkLicens struct {
  323. check int
  324. }
  325. sql := `SELECT ID FROM licenseRecordToUser WHERE License_UniqueID = ? AND user_UNIQUEID = ?`
  326. rows, err := global.XuguDB.Query(sql, LicenseUniqueID, userUNIQUEID)
  327. if err != nil {
  328. global.Logger.Errorln("query data: ", err.Error())
  329. return false, fmt.Errorf("query error: %v", err)
  330. }
  331. var cl checkLicens
  332. for rows.Next() {
  333. err = rows.Scan(
  334. &cl.check,
  335. )
  336. if err != nil {
  337. global.Logger.Errorln("scan row: ", err.Error())
  338. return false, fmt.Errorf("scan row error: %v", err)
  339. }
  340. }
  341. if err = rows.Err(); err != nil {
  342. global.Logger.Errorln("rows error: ", err.Error())
  343. return false, fmt.Errorf("rows error: %v", err)
  344. }
  345. fmt.Println("check: ", cl)
  346. if cl.check == 0 {
  347. return false, nil
  348. }
  349. return true, nil
  350. }
  351. // 按oa的申请单号来检测是否分发给用户
  352. func CheckOaLicRequest(oaRequestID int64, userUNIQUEID string) (bool, error) {
  353. if oaRequestID == 0 || userUNIQUEID == "" {
  354. global.Logger.Errorln("CheckOaLicRequest : LicenseUniqueID 或 userUNIQUEID 为空")
  355. return false, fmt.Errorf("oaRequestID 或 userUNIQUEID 为空")
  356. }
  357. type checkLicens struct {
  358. check int
  359. }
  360. sql := `SELECT ID FROM licenseRecordToUser WHERE OA_REQUESTID = ? AND user_UNIQUEID = ?`
  361. rows, err := global.XuguDB.Query(sql, oaRequestID, userUNIQUEID)
  362. if err != nil {
  363. global.Logger.Errorln("CheckOaLicRequest : query data: ", err.Error())
  364. return false, fmt.Errorf("CheckOaLicRequest : query error: %v", err)
  365. }
  366. var cl checkLicens
  367. for rows.Next() {
  368. err = rows.Scan(
  369. &cl.check,
  370. )
  371. if err != nil {
  372. global.Logger.Errorln("CheckOaLicRequest : scan row: ", err.Error())
  373. return false, fmt.Errorf("CheckOaLicRequest : scan row error: %v", err)
  374. }
  375. }
  376. if err = rows.Err(); err != nil {
  377. global.Logger.Errorln("CheckOaLicRequest : rows error: ", err.Error())
  378. return false, fmt.Errorf("CheckOaLicRequest : rows error: %v", err)
  379. }
  380. if cl.check == 0 {
  381. return false, nil
  382. }
  383. return true, nil
  384. }
  385. // ------------------按搜索条件查询license表--------------------
  386. /*生成sql
  387. flag : 1 是全部
  388. 2 是用户拥有的license
  389. */
  390. func buildConditionalSearchAllSQL(params api.ConditionalSearchRequest, flag int, user string) (string, []interface{}) {
  391. // 基础SQL查询
  392. var baseSQL string
  393. switch flag {
  394. case 1:
  395. baseSQL = `SELECT
  396. la.ID, la.Unique_ID, la.OA_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
  397. la.OA_REQUESTNAMEHTMLNEW, la.OA_GLXMID ,la.OA_GLXMNAME ,la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
  398. la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
  399. la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
  400. la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
  401. la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
  402. la.del_Time, la.LAST_OPERATE_TIME,
  403. li.ID AS License_ID, li.OA_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
  404. FROM
  405. target_OA_license la
  406. INNER JOIN
  407. License_generate_Info li
  408. ON
  409. la.Unique_ID = li.License_UniqueID
  410. WHERE
  411. OA_REQUESTID IN (
  412. SELECT OA_REQUESTID
  413. FROM (
  414. SELECT OA_REQUESTID, rownum AS a
  415. FROM (
  416. SELECT DISTINCT OA_REQUESTID FROM TARGET_OA_LICENSE
  417. ) a
  418. ) s
  419. WHERE a BETWEEN 1 AND 1000
  420. )
  421. AND la.del_Time IS NULL
  422. AND 1=1`
  423. case 2:
  424. baseSQL = fmt.Sprintf(`SELECT
  425. la.ID, la.Unique_ID, la.OA_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
  426. la.OA_REQUESTNAMEHTMLNEW, la.OA_GLXMID ,la.OA_GLXMNAME ,la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
  427. la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
  428. la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
  429. la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
  430. la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
  431. la.del_Time, la.LAST_OPERATE_TIME,
  432. li.ID AS License_ID, li.OA_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
  433. FROM
  434. target_OA_license la
  435. INNER JOIN
  436. License_generate_Info li
  437. ON
  438. la.Unique_ID = li.License_UniqueID
  439. INNER JOIN
  440. LICENSERECORDTOUSER ltr
  441. ON
  442. la.OA_REQUESTID = ltr.OA_REQUESTID AND ltr.USER_ACCOUNT = '%s'
  443. WHERE
  444. OA_REQUESTID IN (
  445. SELECT OA_REQUESTID
  446. FROM (
  447. SELECT OA_REQUESTID, rownum AS a
  448. FROM (
  449. SELECT DISTINCT OA_REQUESTID FROM TARGET_OA_LICENSE
  450. ) a
  451. ) s
  452. WHERE a BETWEEN 1 AND 1000
  453. )
  454. AND la.del_Time IS NULL
  455. AND 1=1`, user)
  456. }
  457. // 动态条件部分
  458. var conditions []string
  459. var args []interface{}
  460. // 根据 LicenseFlag 生成条件
  461. if params.LicenseFlag != "" {
  462. conditions = append(conditions, "li.License_Flage = ?")
  463. args = append(args, params.LicenseFlag)
  464. }
  465. // 根据 StartingDate 生成条件,将字符串转换为日期
  466. if params.StartingDate != "" {
  467. conditions = append(conditions, "TO_DATE(la.OA_CREATIONDATE, 'YYYY-MM-DD') >= ?")
  468. args = append(args, params.StartingDate)
  469. }
  470. // 根据 EndDate 生成条件,将字符串转换为日期
  471. if params.EndDate != "" {
  472. conditions = append(conditions, "TO_DATE(la.OA_CREATIONDATE, 'YYYY-MM-DD') <= ?")
  473. args = append(args, params.EndDate)
  474. }
  475. // 如果有条件,将条件加入SQL语句中
  476. if len(conditions) > 0 {
  477. baseSQL += " AND " + strings.Join(conditions, " AND ")
  478. }
  479. return baseSQL, args
  480. }
  481. func GetConditionalSearchAll(params api.ConditionalSearchRequest) (*[]OALicenseInfo, int, error) {
  482. total := 0
  483. err := global.XuguDB.QueryRow(`
  484. SELECT COUNT(*) from (SELECT OA_REQUESTID AS RequestCount
  485. FROM TARGET_OA_LICENSE
  486. where Del_Time IS NULL
  487. GROUP BY OA_REQUESTID
  488. )
  489. HAVING COUNT(*) > 1;`).Scan(&total)
  490. if err != nil {
  491. return nil, 0, fmt.Errorf("count query error: %v", err)
  492. }
  493. // 构建SQL语句和参数
  494. query, args := buildConditionalSearchAllSQL(params, 1, "")
  495. // 输出SQL语句和参数
  496. fmt.Println("Query:", query)
  497. fmt.Println("Args:", args)
  498. rows, err := global.XuguDB.Query(query, args...)
  499. if err != nil {
  500. global.Logger.Errorln("getLicInfoByOAUniqueID 数据查询失败: ", err.Error())
  501. return nil, 0, fmt.Errorf("getLicInfoByOAUniqueID 数据查询失败: %v", err)
  502. }
  503. defer rows.Close()
  504. var rest []OALicenseInfo
  505. for rows.Next() {
  506. var info OALicenseInfo
  507. err = rows.Scan(
  508. &info.LicInfo.ID, &info.LicInfo.UniqueID, &info.LicInfo.OAId, &info.LicInfo.OARequestID,
  509. &info.LicInfo.OARequestName, &info.LicInfo.OARequestNameNew, &info.LicInfo.OARequestNameHTMLNew,
  510. &info.LicInfo.OAGLXMID, &info.LicInfo.OAGLXMName,
  511. &info.LicInfo.OASQSJ, &info.LicInfo.OASalespersonName, &info.LicInfo.OAXSJSYX,
  512. &info.LicInfo.OAOperationsPersonName, &info.LicInfo.OAJFJSYX, &info.LicInfo.OASYDW,
  513. &info.LicInfo.OAXMXXMS, &info.LicInfo.OAJDS, &info.LicInfo.OANodeCount,
  514. &info.LicInfo.OAProductCode, &info.LicInfo.OAProductName, &info.LicInfo.OAProductVersion,
  515. &info.LicInfo.OACPU, &info.LicInfo.OAOperatingSystem, &info.LicInfo.OAMainMAC,
  516. &info.LicInfo.OASecondMAC, &info.LicInfo.OACreationDate, &info.LicInfo.OACreationTime,
  517. &info.LicInfo.OALastOperateDate, &info.LicInfo.OALastOperateTime, &info.LicInfo.CaptureTime,
  518. &info.LicInfo.DelTime, &info.LicInfo.LastOperateTime,
  519. &info.GenrateInfo.ID, &info.GenrateInfo.OAId, &info.GenrateInfo.LicenseUniqueID, &info.GenrateInfo.LicenseFlage,
  520. &info.GenrateInfo.Lic1, &info.GenrateInfo.Lic2, &info.GenrateInfo.CreatorGenerate,
  521. )
  522. if err != nil {
  523. log.Fatal(err)
  524. }
  525. rest = append(rest, info)
  526. fmt.Println("info", info)
  527. }
  528. return &rest, total, nil
  529. }
  530. func GetConditionalSearchUser(params api.ConditionalSearchRequest, user string) (*[]OALicenseInfo, int, error) {
  531. total := 0
  532. err := global.XuguDB.QueryRow(`
  533. SELECT COUNT(*) from (SELECT OA_REQUESTID AS RequestCount
  534. FROM TARGET_OA_LICENSE
  535. where Del_Time IS NULL
  536. GROUP BY OA_REQUESTID
  537. )
  538. HAVING COUNT(*) > 1;`).Scan(&total)
  539. if err != nil {
  540. return nil, 0, fmt.Errorf("count query error: %v", err)
  541. }
  542. // 构建SQL语句和参数
  543. query, args := buildConditionalSearchAllSQL(params, 2, user)
  544. // 输出SQL语句和参数
  545. fmt.Println("Query:", query)
  546. fmt.Println("Args:", args)
  547. rows, err := global.XuguDB.Query(query, args...)
  548. if err != nil {
  549. global.Logger.Errorln("getLicInfoByOAUniqueID 数据查询失败: ", err.Error())
  550. return nil, 0, fmt.Errorf("getLicInfoByOAUniqueID 数据查询失败: %v", err)
  551. }
  552. defer rows.Close()
  553. var rest []OALicenseInfo
  554. for rows.Next() {
  555. var info OALicenseInfo
  556. err = rows.Scan(
  557. &info.LicInfo.ID, &info.LicInfo.UniqueID, &info.LicInfo.OAId, &info.LicInfo.OARequestID,
  558. &info.LicInfo.OARequestName, &info.LicInfo.OARequestNameNew, &info.LicInfo.OARequestNameHTMLNew,
  559. &info.LicInfo.OAGLXMID, &info.LicInfo.OAGLXMName,
  560. &info.LicInfo.OASQSJ, &info.LicInfo.OASalespersonName, &info.LicInfo.OAXSJSYX,
  561. &info.LicInfo.OAOperationsPersonName, &info.LicInfo.OAJFJSYX, &info.LicInfo.OASYDW,
  562. &info.LicInfo.OAXMXXMS, &info.LicInfo.OAJDS, &info.LicInfo.OANodeCount,
  563. &info.LicInfo.OAProductCode, &info.LicInfo.OAProductName, &info.LicInfo.OAProductVersion,
  564. &info.LicInfo.OACPU, &info.LicInfo.OAOperatingSystem, &info.LicInfo.OAMainMAC,
  565. &info.LicInfo.OASecondMAC, &info.LicInfo.OACreationDate, &info.LicInfo.OACreationTime,
  566. &info.LicInfo.OALastOperateDate, &info.LicInfo.OALastOperateTime, &info.LicInfo.CaptureTime,
  567. &info.LicInfo.DelTime, &info.LicInfo.LastOperateTime,
  568. &info.GenrateInfo.ID, &info.GenrateInfo.OAId, &info.GenrateInfo.LicenseUniqueID, &info.GenrateInfo.LicenseFlage,
  569. &info.GenrateInfo.Lic1, &info.GenrateInfo.Lic2, &info.GenrateInfo.CreatorGenerate,
  570. )
  571. if err != nil {
  572. log.Fatal(err)
  573. }
  574. rest = append(rest, info)
  575. fmt.Println("info", info)
  576. }
  577. return &rest, total, nil
  578. }