license_oa_models.go 38 KB

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