wangkaiyue 1 ano atrás
pai
commit
6abc850754

+ 7 - 0
flushDb/bigememberPowerFLush/config.yaml

@@ -0,0 +1,7 @@
+mysql:
+  dbName: jianyu
+  address: '192.168.3.217:4000'
+  userName: root
+  passWord: =PDT49#80Z!RVv52_z
+  maxOpenConns: 5
+  maxIdleConns: 5

+ 138 - 0
flushDb/bigememberPowerFLush/main.go

@@ -0,0 +1,138 @@
+package main
+
+import (
+	"app.yhyue.com/moapp/jybase/mysql"
+	"context"
+	"fmt"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/util/gconv"
+	"regexp"
+	"strings"
+)
+
+var Mysql *mysql.Mysql
+
+type config struct {
+	DbName       string
+	Address      string
+	UserName     string
+	PassWord     string
+	MaxOpenConns int
+	MaxIdleConns int
+}
+
+func init() {
+	c := config{}
+	if err := g.Cfg().MustGet(context.Background(), "mysql").Structs(&c); err != nil {
+		panic(err)
+	}
+	Mysql = &mysql.Mysql{
+		Address:      c.Address,
+		UserName:     c.UserName,
+		PassWord:     c.PassWord,
+		DBName:       c.DbName,
+		MaxOpenConns: c.MaxOpenConns,
+		MaxIdleConns: c.MaxIdleConns,
+	}
+	Mysql.Init()
+}
+
+func main() {
+	//历史权益刷新
+	//flush_bigmember_service_marketAnalysis(context.Background())
+	//历史自定义大会员订单-权限刷新
+	flush_bigmember_order_marketAnalysis(context.Background())
+}
+
+// 大会员权益
+// <周报/月报/定制化市场分析报告> 拆分成  <周报/月报>  + <定制化市场分析报告>
+// 10    =    10 +26
+func flush_bigmember_service_marketAnalysis(ctx context.Context) {
+	var total, insertCount int64 = 0, 0
+	Mysql.Select(100, func(l *[]map[string]interface{}) bool {
+		var fields = []string{"s_userid", "s_serviceid", "l_starttime", "l_endtime", "i_status", "l_createtime", "l_updatetime", "s_smainid"}
+		var val []interface{}
+		for _, m := range *l {
+			var vt []interface{}
+			for _, filed := range fields {
+				if filed == "s_serviceid" {
+					vt = append(vt, 26)
+				} else {
+					vt = append(vt, m[filed])
+				}
+			}
+
+			val = append(val, vt...)
+			total++
+		}
+		if len(val) > 0 {
+			addRow, _ := Mysql.InsertBatch("bigmember_service_user_test", fields, val)
+			insertCount += addRow
+		}
+		return true
+	}, nil, "SELECT * FROM bigmember_service_user where i_status !=-1 and s_serviceid=10")
+	if total == insertCount {
+		g.Log().Infof(ctx, "插入成功,共插入%d条数据", total)
+	} else {
+		g.Log().Errorf(ctx, "共%d条,实际插入%d条", total, insertCount)
+	}
+}
+
+func flush_bigmember_order_marketAnalysis(ctx context.Context) {
+	var total, insertCount int64 = 0, 0
+	Mysql.Select(100, func(l *[]map[string]interface{}) bool {
+		var val [][]interface{}
+		var fields = []string{"id", "filter"}
+		for _, m := range *l {
+			id := gconv.Int64(m["id"])
+			filterStr := gconv.String(m["filter"])
+			newFilter := replaceServiceName(replaceServiceId(filterStr))
+			if newFilter != "" {
+				total++
+				val = append(val, []interface{}{id, newFilter})
+			}
+		}
+		if len(val) > 0 {
+			addRow := Mysql.UpdateBathByTx(nil, "dataexport_order_wky", fields, val)
+			insertCount += addRow
+		}
+		return true
+	}, nil, "SELECT id,filter FROM dataexport_order_wky WHERE product_type='大会员' order by id desc")
+	if total == insertCount {
+		g.Log().Infof(ctx, "插入成功,更新%d条数据", total)
+	} else {
+		g.Log().Errorf(ctx, "共%d条,实际更新%d条", total, insertCount)
+	}
+}
+
+func replaceServiceId(data string) (newData string) {
+	if data == "" {
+		return
+	}
+	re := regexp.MustCompile(`"serversId":"(.*?)"`)
+	matchArr, newVal := re.FindStringSubmatch(data), ""
+	if len(matchArr) == 2 && strings.Index(matchArr[1], "10") > -1 {
+		newVal = strings.ReplaceAll(matchArr[1], "10", "10,26")
+	}
+	if newVal != "" {
+		newData = re.ReplaceAllString(data, fmt.Sprintf(`"serversId":"%s"`, newVal))
+
+	}
+	return
+}
+
+func replaceServiceName(data string) (newData string) {
+	if data == "" {
+		return
+	}
+	re := regexp.MustCompile(`"serversName":"(.*?)"`)
+	matchArr, newVal := re.FindStringSubmatch(data), ""
+	if len(matchArr) == 2 && strings.Index(matchArr[1], "周报/月报/定制化市场分析报告") > -1 {
+		newVal = strings.ReplaceAll(matchArr[1], "周报/月报/定制化市场分析报告", "周报/月报,定制化市场分析报告")
+	}
+	if newVal != "" {
+		newData = re.ReplaceAllString(data, fmt.Sprintf(`"serversId":"%s"`, newVal))
+
+	}
+	return
+}

+ 1 - 0
flushDb/workDesktop/README.MD

@@ -0,0 +1 @@
+## 工作桌面常用功能-超出限制清除

+ 3 - 0
flushDb/workDesktop/config.yaml

@@ -0,0 +1,3 @@
+maxNum: 8
+flushTable: "work_commonly_copy1"
+mysql: "root:=PDT49#80Z!RVv52_z@tcp(192.168.3.14:4000)/base_service"

+ 112 - 0
flushDb/workDesktop/main.go

@@ -0,0 +1,112 @@
+package main
+
+import (
+	"context"
+	"database/sql"
+	"fmt"
+	_ "github.com/go-sql-driver/mysql"
+	"github.com/gogf/gf/v2/frame/g"
+	"log"
+	"strings"
+	"time"
+)
+
+var mysql *sql.DB
+
+func init() {
+	var err error
+	mysql, err = sql.Open("mysql", g.Cfg().MustGet(context.Background(), "mysql").String())
+	if err != nil {
+		panic(err)
+	}
+
+	// 设置数据库连接参数
+	mysql.SetMaxOpenConns(100)                 // 最大连接数
+	mysql.SetMaxIdleConns(10)                  // 最大空闲连接数
+	mysql.SetConnMaxLifetime(time.Minute * 30) // 连接最大生命周期
+}
+
+type handleData struct {
+	Id    int64  `json:"id"`
+	Value string `json:"value"`
+}
+
+var (
+	maxNum = g.Cfg().MustGet(context.Background(), "maxNum").Int() //最大数量限制
+	table  = g.Cfg().MustGet(context.Background(), "flushTable").String()
+)
+
+func main() {
+	// 执行查询语句
+	rows, err := mysql.Query(fmt.Sprintf("SELECT id,value FROM %s WHERE field ='commonlyRenew' ", table))
+	if err != nil {
+		panic(err)
+	}
+	defer rows.Close()
+
+	// 定义每批查询的大小
+	batchSize := 100
+	var update int64 = 0
+	// 逐批读取数据
+	for {
+		// 创建切片用于存储当前批次的数据
+		data := make([]*handleData, 0, batchSize)
+
+		// 从查询结果中读取数据,直到达到批次大小或没有更多数据为止
+		for i := 0; i < batchSize && rows.Next(); i++ {
+			var item handleData
+			err := rows.Scan(&item.Id, &item.Value) // 替换为你的结构体字段
+			if err != nil {
+				panic(err)
+			}
+			data = append(data, &item)
+		}
+
+		affect := doHandleData(data)
+		if affect >= 0 {
+			update += affect
+		} else {
+			g.Log().Error(context.Background(), "更新异常", data)
+		}
+
+		// 如果当前批次的数据少于批次大小,表示已经读取完全量数据,退出循环
+		if len(data) < batchSize {
+			break
+		}
+	}
+	g.Log().Info(context.Background(), "更新数据条数", update)
+}
+
+func doHandleData(list []*handleData) int64 {
+	var rData []*handleData
+	for i := 0; i < len(list); i++ {
+		t := list[i]
+		if ids := strings.Split(t.Value, ","); len(ids) > maxNum {
+			//去更新
+			rData = append(rData, &handleData{t.Id, strings.Join(ids[:maxNum], ",")})
+		}
+	}
+	if len(rData) > 0 {
+		var query string
+		var params []interface{}
+		var idArr []string
+		for _, d := range rData {
+			query += fmt.Sprintf("WHEN %d THEN ? ", d.Id)
+			idArr = append(idArr, fmt.Sprintf("%d", d.Id))
+			params = append(params, d.Value)
+		}
+
+		result, err := mysql.Exec(fmt.Sprintf("UPDATE %s SET value = CASE id %s END WHERE id in (' %s ')", table, query, strings.Join(idArr, "','")), params...)
+		if err != nil {
+			log.Println(err)
+			return -1
+		}
+		count, err := result.RowsAffected()
+		if err != nil {
+			log.Println(err)
+			return -1
+		}
+		return count
+	}
+	return 0
+}