license_oa_models.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  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 string, 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, 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 string, userUNIQUEID string) (bool, error) {
  353. if oaRequestID == "" || 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. // 假设你有一个结构体保存传入的参数
  387. func buildSQL(params api.ConditionalSearchRequest) (string, []interface{}) {
  388. // 基础SQL查询
  389. baseSQL := `SELECT
  390. la.ID, la.Unique_ID, la.OA_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
  391. la.OA_REQUESTNAMEHTMLNEW, la.OA_GLXMID ,la.OA_GLXMNAME ,la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
  392. la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
  393. la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
  394. la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
  395. la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
  396. la.del_Time, la.LAST_OPERATE_TIME,
  397. li.ID AS License_ID, li.OA_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
  398. FROM
  399. target_OA_license la
  400. INNER JOIN
  401. License_generate_Info li
  402. ON
  403. la.Unique_ID = li.License_UniqueID
  404. WHERE
  405. OA_REQUESTID IN (
  406. SELECT OA_REQUESTID
  407. FROM (
  408. SELECT OA_REQUESTID, rownum AS a
  409. FROM (
  410. SELECT DISTINCT OA_REQUESTID FROM TARGET_OA_LICENSE
  411. ) a
  412. ) s
  413. WHERE a BETWEEN 1 AND 10
  414. )
  415. AND 1=1`
  416. // 动态条件部分
  417. var conditions []string
  418. var args []interface{}
  419. // 根据 LicenseFlag 生成条件
  420. if params.LicenseFlag != "" {
  421. conditions = append(conditions, "li.License_Flage = ?")
  422. args = append(args, params.LicenseFlag)
  423. }
  424. // 根据 StartingDate 生成条件,将字符串转换为日期
  425. if params.StartingDate != "" {
  426. conditions = append(conditions, "TO_DATE(la.OA_CREATIONDATE, 'YYYY-MM-DD') >= ?")
  427. args = append(args, params.StartingDate)
  428. }
  429. // 根据 EndDate 生成条件,将字符串转换为日期
  430. if params.EndDate != "" {
  431. conditions = append(conditions, "TO_DATE(la.OA_CREATIONDATE, 'YYYY-MM-DD') <= ?")
  432. args = append(args, params.EndDate)
  433. }
  434. // 如果有条件,将条件加入SQL语句中
  435. if len(conditions) > 0 {
  436. baseSQL += " AND " + strings.Join(conditions, " AND ")
  437. }
  438. return baseSQL, args
  439. }
  440. func GetConditionalSearch(params api.ConditionalSearchRequest) (*[]OALicenseInfo, error) {
  441. // 构建SQL语句和参数
  442. query, args := buildSQL(params)
  443. // 输出SQL语句和参数
  444. fmt.Println("Query:", query)
  445. fmt.Println("Args:", args)
  446. rows, err := global.XuguDB.Query(query, args...)
  447. if err != nil {
  448. global.Logger.Errorln("getLicInfoByOAUniqueID 数据查询失败: ", err.Error())
  449. return nil, fmt.Errorf("getLicInfoByOAUniqueID 数据查询失败: %v", err)
  450. }
  451. defer rows.Close()
  452. var rest []OALicenseInfo
  453. for rows.Next() {
  454. var info OALicenseInfo
  455. err = rows.Scan(
  456. &info.LicInfo.ID, &info.LicInfo.UniqueID, &info.LicInfo.OAId, &info.LicInfo.OARequestID,
  457. &info.LicInfo.OARequestName, &info.LicInfo.OARequestNameNew, &info.LicInfo.OARequestNameHTMLNew,
  458. &info.LicInfo.OAGLXMID, &info.LicInfo.OAGLXMName,
  459. &info.LicInfo.OASQSJ, &info.LicInfo.OASalespersonName, &info.LicInfo.OAXSJSYX,
  460. &info.LicInfo.OAOperationsPersonName, &info.LicInfo.OAJFJSYX, &info.LicInfo.OASYDW,
  461. &info.LicInfo.OAXMXXMS, &info.LicInfo.OAJDS, &info.LicInfo.OANodeCount,
  462. &info.LicInfo.OAProductCode, &info.LicInfo.OAProductName, &info.LicInfo.OAProductVersion,
  463. &info.LicInfo.OACPU, &info.LicInfo.OAOperatingSystem, &info.LicInfo.OAMainMAC,
  464. &info.LicInfo.OASecondMAC, &info.LicInfo.OACreationDate, &info.LicInfo.OACreationTime,
  465. &info.LicInfo.OALastOperateDate, &info.LicInfo.OALastOperateTime, &info.LicInfo.CaptureTime,
  466. &info.LicInfo.DelTime, &info.LicInfo.LastOperateTime,
  467. &info.GenrateInfo.ID, &info.GenrateInfo.OAId, &info.GenrateInfo.LicenseUniqueID, &info.GenrateInfo.LicenseFlage,
  468. &info.GenrateInfo.Lic1, &info.GenrateInfo.Lic2, &info.GenrateInfo.CreatorGenerate,
  469. )
  470. if err != nil {
  471. log.Fatal(err)
  472. }
  473. rest = append(rest, info)
  474. fmt.Println("info", info)
  475. }
  476. return &rest, nil
  477. }