|
|
- package db
-
- import (
- "context"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/bson/primitive"
- "go.mongodb.org/mongo-driver/mongo/options"
- "leit.com/leit_seat_aps/common"
- "leit.com/leit_seat_aps/glog"
- "strings"
- "time"
- )
-
- type Buffer struct {
- Orderid string `bson:"orderid" json:"buffer-orderid"` //流水号id
- Finr int `bson:"finr" json:"buffer-finr"` //映射关系
- Eid int `bson:"eid" json:"buffer-eid"` //映射关系
- Data string `bson:"data" json:"buffer-data"` //json串
- TimeStamp string `bson:"timestamp" json:"buffer-timestamp"` //时间戳
- Todb string `bson:"todb" json:"buffer-todb"` //导入数据库
- Todrivername string `bson:"todrivername" json:"buffer-todrivername"` //导入数据库引擎
- Totable string `bson:"totable" json:"buffer-totable"` //导入数据表
- Flag int `bson:"flag" json:"buffer-flag"` //是否导入状态
- Times int `bson:"times" json:"buffer-times"` //执行次数
- Status string `bson:"status" json:"buffer-status"` //ok or error
- Message string `bson:"message" json:"buffer-message"` //错误信息
- Funcspec string `bson:"funcspec" json:"buffer-funcspec"` //导入执行方法
- Dbtype string `bson:"dbtype" json:"buffer-dbtype"` //导入数据库类型
- }
-
- func (t *Buffer) TableName() string {
- return "buffer"
- }
-
- func (t *Buffer) InsertRecord() (insertID primitive.ObjectID) {
- //1.初始化链接
- client := MgoDb()
- //2.选择数据库,数据表
- collect := client.Database("logDb").Collection("buffer")
- insertRest, err := collect.InsertOne(context.TODO(), t)
- if err != nil {
- glog.InfoExtln("buffer 数据导入", "err", err)
- return
- }
- insertID = insertRest.InsertedID.(primitive.ObjectID)
- return insertID
- }
-
- func (t *Buffer) FindList(logred SerchData, skip int64, limit int64) ([]*Buffer, int64) {
- res := bson.M{}
- // 创建需要过滤的条件
- if logred.Key == "message" {
- res = bson.M{"message": primitive.Regex{Pattern: logred.Val}}
- }
- if logred.Key == "totable" {
- res = bson.M{"totable": primitive.Regex{Pattern: logred.Val}}
- }
- if logred.Key == "status" {
- res = bson.M{"status": primitive.Regex{Pattern: logred.Val}}
- }
- if logred.Key == "timestamp" {
- times := strings.Split(logred.Val, "-")
- stime := time.Unix(int64(common.ValueToInt(times[0], 0)), 0)
- etime := time.Unix(int64(common.ValueToInt(times[1], 0)), 0)
- stimestr := common.TimeFormat(stime, "yyyyMMddHHmmss")
- etimestr := common.TimeFormat(etime, "yyyyMMddHHmmss")
- res = bson.M{"timestamp": bson.M{"$lte": etimestr, "$gte": stimestr}}
- }
- //1.初始化链接
- client := MgoDb()
- //2.选择数据库,数据表
- collect := client.Database("logDb").Collection("buffer")
-
- //var skip int64 = 0//从那个开始
- //var limit int64 = 2//炼制几个输出字段
- cursor, err := collect.Find(context.TODO(), res, &options.FindOptions{
- Skip: &skip,
- Limit: &limit,
- Sort: bson.D{{"timestamp", -1}},
- })
-
- if err != nil {
- return nil, 0
- }
- defer cursor.Close(context.TODO())
- //创建需要反序列化成什么样子的结构体对象
- records := make([]*Buffer, 0)
- for cursor.Next(context.TODO()) {
- record := &Buffer{}
- //反序列化
- err = cursor.Decode(record)
- if err != nil {
- return nil, 0
- }
- //追加
- records = append(records, record)
- }
- // 获取数据总数
- count, err := collect.CountDocuments(context.Background(), bson.D{})
- if err != nil {
- return nil, 0
- }
- return records, count
- }
-
- func (t *Buffer) FindData() []*Buffer {
- limit := int64(500)
- skip := int64(0)
- //1.初始化链接
- client := MgoDb()
- //2.选择数据库,数据表
- collect := client.Database("logDb").Collection("buffer")
-
- //var skip int64 = 0//从那个开始
- //var limit int64 = 2//炼制几个输出字段
- cursor, err := collect.Find(context.TODO(), bson.D{
- {"flag", 0},
- {"status", "ok"},
- }, &options.FindOptions{
- Skip: &skip,
- Limit: &limit,
- Sort: bson.D{{"timestamp", -1}},
- })
- if err != nil {
- return nil
- }
- defer cursor.Close(context.TODO())
- //创建需要反序列化成什么样子的结构体对象
- records := make([]*Buffer, 0)
- for cursor.Next(context.TODO()) {
- record := &Buffer{}
- //反序列化
- err = cursor.Decode(record)
- if err != nil {
- return nil
- }
- //追加
- records = append(records, record)
- }
- return records
- }
-
- func (t *Buffer) UpdateData() error {
- //1.初始化链接
- client := MgoDb()
- //2.选择数据库,数据表
- collect := client.Database("logDb").Collection("buffer")
-
- new := &Buffer{
- Orderid: t.Orderid,
- Eid: t.Eid,
- Finr: t.Finr,
- Data: t.Data,
- TimeStamp: t.TimeStamp,
- Todrivername: t.Todrivername,
- Totable: t.Totable,
- Todb: t.Todb,
- Status: t.Status,
- Message: t.Message,
- Funcspec: t.Funcspec,
- Dbtype: t.Dbtype,
- Times: t.Times + 1,
- Flag: 1,
- }
- update := bson.M{"$set": new}
- _, err := collect.UpdateOne(context.Background(), bson.M{"orderid": new.Orderid}, update)
- if err != nil {
- return err
- }
- return nil
- }
-
- //累计更新次数,超过5次的直接关闭订单
- func (t *Buffer) UpdateDataTimes() error {
- //1.初始化链接
- client := MgoDb()
- //2.选择数据库,数据表
- collect := client.Database("logDb").Collection("buffer")
- if t.Times > 5 {
- // 修改一条数据,如果不存在则插入
- new := &Buffer{
- Orderid: t.Orderid,
- Eid: t.Eid,
- Finr: t.Finr,
- Data: t.Data,
- TimeStamp: t.TimeStamp,
- Todrivername: t.Todrivername,
- Totable: t.Totable,
- Todb: t.Todb,
- Status: t.Status,
- Message: t.Message,
- Funcspec: t.Funcspec,
- Dbtype: t.Dbtype,
- Times: t.Times + 1,
- Flag: 1,
- }
- update := bson.M{"$set": new}
- _, err := collect.UpdateOne(context.Background(), bson.M{"orderid": new.Orderid}, update)
- if err != nil {
- return err
- }
- return nil
- } else {
- new := &Buffer{
- Orderid: t.Orderid,
- Eid: t.Eid,
- Finr: t.Finr,
- Data: t.Data,
- TimeStamp: t.TimeStamp,
- Todrivername: t.Todrivername,
- Totable: t.Totable,
- Todb: t.Todb,
- Status: t.Status,
- Message: t.Message,
- Funcspec: t.Funcspec,
- Dbtype: t.Dbtype,
- Times: t.Times + 1,
- Flag: 0,
- }
- update := bson.M{"$set": new}
- _, err := collect.UpdateOne(context.Background(), bson.M{"orderid": new.Orderid}, update)
- if err != nil {
- return err
- }
- return nil
- }
-
-
- }
|