123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- package license_cache
- // import (
- // "database/sql"
- // "fmt"
- // "sort"
- // "sync"
- // "time"
- // )
- // type CacheLicenseInfo struct {
- // ID sql.NullInt32 `json:"id"`
- // UniqueID sql.NullString `json:"unique_id"`
- // OARequestID sql.NullInt64 `json:"oa_request_id"`
- // OARequestName sql.NullString `json:"oa_request_name"`
- // OARequestNameNew sql.NullString `json:"oa_request_name_new"`
- // OARequestNameHTMLNew sql.NullString `json:"oa_request_name_html_new"`
- // OAGLXMId sql.NullInt64 `json:"oa_glxmid"`
- // OAGLXMName sql.NullString `json:"oa_glxmname"`
- // OASQSJ sql.NullTime `json:"oa_sqsj"`
- // OASalespersonName sql.NullString `json:"oa_salesperson_name"`
- // OAXSJSYX sql.NullString `json:"oa_xsjsyx"`
- // OAOperationsPersonName sql.NullString `json:"oa_operations_person_name"`
- // OAJFJSYX sql.NullString `json:"oa_jfjsyx"`
- // OASYDW sql.NullString `json:"oa_sydw"`
- // OAXMXXMS sql.NullString `json:"oa_xmxxms"`
- // OAJDS sql.NullInt64 `json:"oa_jds"`
- // OANodeCount sql.NullInt64 `json:"oa_node_count"`
- // OAProductCode sql.NullString `json:"oa_product_code"`
- // OAProductName sql.NullString `json:"oa_product_name"`
- // OAProductVersion sql.NullString `json:"oa_product_version"`
- // OACPU sql.NullString `json:"oa_cpu"`
- // OAOperatingSystem sql.NullString `json:"oa_operating_system"`
- // OAMainMAC sql.NullString `json:"oa_main_mac"`
- // OASecondMAC sql.NullString `json:"oa_second_mac"`
- // OACreationDate sql.NullString `json:"oa_creation_date"`
- // OACreationTime sql.NullString `json:"oa_creation_time"`
- // OALastOperateDate sql.NullString `json:"oa_last_operate_date"`
- // OALastOperateTime sql.NullString `json:"oa_last_operate_time"`
- // CaptureTime sql.NullTime `json:"capture_time"`
- // DelTime sql.NullTime `json:"del_time"`
- // LastOperateTime sql.NullTime `json:"last_operate_time"`
- // // Fields from License_generate_Info table
- // LicenseID sql.NullInt32 `json:"license_id"`
- // LicenseUniqueID sql.NullString `json:"license_unique_id"`
- // LicenseFlage sql.NullString `json:"license_flage"`
- // Lic1 sql.NullString `json:"lic1"`
- // Lic2 sql.NullString `json:"lic2"`
- // CreatorGenerate sql.NullString `json:"creator_generate"`
- // }
- // type Cache struct {
- // mutex sync.RWMutex
- // data map[int64][]CacheLicenseInfo
- // total int
- // lastLoad time.Time
- // }
- // // NewCache 初始化缓存
- // func NewCache() *Cache {
- // return &Cache{
- // data: make(map[int64][]CacheLicenseInfo),
- // total: 0,
- // lastLoad: time.Now(),
- // }
- // }
- // func (c *Cache) GetTotal() int {
- // return c.total
- // }
- // func (c *Cache) GetData() map[int64][]CacheLicenseInfo {
- // return c.data
- // }
- // // 刷新缓存
- // func (c *Cache) RefreshCache(db *sql.DB, startTime, endTime time.Time, offset, limit int) error {
- // c.data = make(map[int64][]CacheLicenseInfo)
- // if err := c.LoadDataFromDB(db, startTime, endTime, offset, limit); err != nil {
- // return err
- // }
- // return nil
- // }
- // // LoadDataFromDB 从数据库加载数据
- // /* SELECT
- // la.ID, la.Unique_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
- // la.OA_REQUESTNAMEHTMLNEW,
- // la.OA_GLXMID ,la.OA_GLXMNAME,
- // la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
- // la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
- // la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
- // la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
- // la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
- // la.del_Time, la.LAST_OPERATE_TIME,
- // li.ID AS License_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
- // FROM
- // target_OA_license la
- // INNER JOIN
- // License_generate_Info li
- // ON
- // la.Unique_ID = li.License_UniqueID
- // WHERE TO_TIMESTAMP(la.OA_CREATIONDATE || ' ' || la.OA_CREATIONTIME, 'YYYY-MM-DD HH24:MI:SS') > TO_TIMESTAMP(?, 'YYYY-MM-DD HH24:MI:SS')
- // and la.del_Time IS NULL
- // LIMIT ? OFFSET ?*/
- // func (c *Cache) LoadDataFromDB(db *sql.DB, startTime, endTime time.Time, offset, limit int) error {
- // c.mutex.Lock()
- // defer c.mutex.Unlock()
- // query := `
- // SELECT la.ID, la.Unique_ID, la.OA_REQUESTID, la.OA_REQUESTNAME, la.OA_REQUESTNAMENEW,
- // la.OA_REQUESTNAMEHTMLNEW,
- // la.OA_GLXMID ,la.OA_GLXMNAME,
- // la.OA_SQSJ, la.OA_SALESPERSONNAME, la.OA_XSJSYX,
- // la.OA_OPERATIONSPERSONNAME, la.OA_JFJSYX, la.OA_SYDW, la.OA_XMXXMS, la.OA_JDS,
- // la.OA_NODECOUNT, la.OA_PRODUCTCODE, la.OA_PRODUCTNAME, la.OA_PRODUCTVERSION,
- // la.OA_CPU, la.OA_OPERATINGSYSTEM, la.OA_MAINMAC, la.OA_SECONDMAC, la.OA_CREATIONDATE,
- // la.OA_CREATIONTIME, la.OA_LASTOPERATEDATE, la.OA_LASTOPERATETIME, la.capture_Time,
- // la.del_Time, la.LAST_OPERATE_TIME,
- // li.ID AS License_ID, li.License_UniqueID, li.License_Flage, li.lic1, li.lic2, li.Creator_generate
- // FROM SYSDBA.TARGET_OA_LICENSE la
- // INNER JOIN
- // License_generate_Info li
- // ON
- // la.Unique_ID = li.License_UniqueID
- // WHERE OA_REQUESTID IN(SELECT OA_REQUESTID FROM (SELECT DISTINCT OA_REQUESTID FROM TARGET_OA_LICENSE) a
- // WHERE ROWNUM BETWEEN ? AND ?)
- // AND la.del_Time IS NULL
- // `
- // rows, err := db.Query(query, offset, limit)
- // if err != nil {
- // return err
- // }
- // defer rows.Close()
- // for rows.Next() {
- // var record CacheLicenseInfo
- // err := rows.Scan(
- // &record.ID,
- // &record.UniqueID,
- // &record.OARequestID,
- // &record.OARequestName,
- // &record.OARequestNameNew,
- // &record.OARequestNameHTMLNew,
- // &record.OAGLXMId,
- // &record.OAGLXMName,
- // &record.OASQSJ,
- // &record.OASalespersonName,
- // &record.OAXSJSYX,
- // &record.OAOperationsPersonName,
- // &record.OAJFJSYX,
- // &record.OASYDW,
- // &record.OAXMXXMS,
- // &record.OAJDS,
- // &record.OANodeCount,
- // &record.OAProductCode,
- // &record.OAProductName,
- // &record.OAProductVersion,
- // &record.OACPU,
- // &record.OAOperatingSystem,
- // &record.OAMainMAC,
- // &record.OASecondMAC,
- // &record.OACreationDate,
- // &record.OACreationTime,
- // &record.OALastOperateDate,
- // &record.OALastOperateTime,
- // &record.CaptureTime,
- // &record.DelTime,
- // &record.LastOperateTime,
- // // Fields from License_generate_Info table
- // &record.LicenseID,
- // &record.LicenseUniqueID,
- // &record.LicenseFlage,
- // &record.Lic1,
- // &record.Lic2,
- // &record.CreatorGenerate,
- // )
- // if err != nil {
- // return err
- // }
- // oaRequestID := record.OARequestID.Int64
- // c.data[oaRequestID] = append(c.data[oaRequestID], record)
- // c.total++
- // }
- // fmt.Println("data records loaded:", c.data)
- // c.lastLoad = time.Now()
- // return nil
- // }
- // // GetPaginatedData 获取分页数据并按 OALastOperateDate 和 OALastOperateTime 排序
- // func (c *Cache) GetPaginatedData(page, pageSize int) (map[int64][]CacheLicenseInfo, error) {
- // c.mutex.RLock()
- // defer c.mutex.RUnlock()
- // if c.total == 0 {
- // return nil, fmt.Errorf("cache is empty")
- // }
- // allRecords := make([]CacheLicenseInfo, 0, c.total)
- // for _, records := range c.data {
- // allRecords = append(allRecords, records...)
- // }
- // sort.SliceStable(allRecords, func(i, j int) bool {
- // if allRecords[i].OALastOperateDate.String != allRecords[j].OALastOperateDate.String {
- // return allRecords[i].OALastOperateDate.String < allRecords[j].OALastOperateDate.String
- // }
- // return allRecords[i].OALastOperateTime.String < allRecords[j].OALastOperateTime.String
- // })
- // start := (page - 1) * pageSize
- // if start >= len(allRecords) {
- // return nil, fmt.Errorf("page out of range")
- // }
- // end := start + pageSize
- // if end > len(allRecords) {
- // end = len(allRecords)
- // }
- // result := [][]CacheLicenseInfo{}
- // groupMap := make(map[int64][]CacheLicenseInfo)
- // for _, record := range allRecords[start:end] {
- // groupMap[record.OARequestID.Int64] = append(groupMap[record.OARequestID.Int64], record)
- // }
- // for _, group := range groupMap {
- // result = append(result, group)
- // }
- // return groupMap, nil
- // }
- // // EnsureDataAvailability 确保缓存中有足够的数据
- // func (c *Cache) EnsureDataAvailability(db *sql.DB, page, pageSize int, startTime, endTime time.Time) error {
- // c.mutex.RLock()
- // needLoad := (page-1)*pageSize >= c.total
- // c.mutex.RUnlock()
- // if needLoad {
- // offset := c.total
- // limit := pageSize * 2
- // err := c.LoadDataFromDB(db, startTime, endTime, offset, limit)
- // if err != nil {
- // return err
- // }
- // }
- // return nil
- // }
|