亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

golang 數據庫批量更新工具備份

2020-04-01 19:11:35
字體:
來源:轉載
供稿:網友

使用golang多線程批量更新數據數據。

共4個文件

main.go

  1. package main 
  2.  
  3. import ( 
  4.     "bufio" 
  5.     "fmt" 
  6.     _ "github.com/go-sql-driver/mysql" 
  7.     "os" 
  8.     . "pt" 
  9.  
  10. func main() { 
  11.     args := os.Args 
  12.     if len(args) == 2 { 
  13.         switch args[1] { 
  14.         case "1"
  15.             Cu.Run() 
  16.         case "2"
  17.             //平臺負債表數據靜態化 
  18.             Fz.Run() 
  19.         case "0"
  20.             os.Exit(0) 
  21.         default
  22.         } 
  23.     } 
  24.     if len(args) == 1 { 
  25.         for { 
  26.             fmt.Println("操作目錄: "
  27.             fmt.Println("1、平臺有效客戶更新(202:13306-platform)。 "
  28.             fmt.Println("2、平臺負債數據靜態化(202:13306-platform)。"
  29.             fmt.Println("0、退出。 "
  30.             inputReader := bufio.NewReader(os.Stdin) 
  31.             command, _, _ := inputReader.ReadLine() 
  32.             code := string(command) 
  33.             switch code { 
  34.             case "1"
  35.                 Cu.Run() 
  36.             case "2"
  37.                 //平臺負債表數據靜態化 
  38.                 Fz.Run() 
  39.             case "0"
  40.                 os.Exit(0) 
  41.             default
  42.                 fmt.Println("default"
  43.             } 
  44.             fmt.Println("-------處理完成-------"
  45.         } 
  46.     } 
  47.  

pt/custatus.go

// 客戶屬性自動更新封裝

// 需要公司開啟自動更新并配置客戶過期周期時間

package pt

import (

"fmt"

"log"

"strconv"

"strings"

"time"

)

type CuStatusClass struct {

}

func NewCu() *CuStatusClass {

obj := new(CuStatusClass)

return obj

}

/**

*判斷客戶狀態

**/

func (obj *CuStatusClass) getState(orders int, practs int, state int) int {

if orders > 0 || practs > 0 {

return 1 //最近有訂單OR有實操 為有效客戶

}

if state == 3 {

return 3 //死檔客戶

}

if state == -1 {

return -1 //無效客戶

}

//默認返回為久黨客戶

return 2

}

/*

* 獲取公司關于有效客戶的配置天數 默認30天

*/

func (obj *CuStatusClass) getConfig(str string) int {

var num int

n := strings.Index(str, "member_config")

if n == -1 {

num = 30

} else {

start := n + 20

end := n + 22

num2 := string([]byte(str)[start:end])

num, _ = strconv.Atoi(num2)

}

return num

}

/**

* 更新一個公司的客戶狀態 (PT) 考慮新建數據庫連接 提高效率

* @param {[type]} db *sql.DB [description]

* @param {[type]} c chan int [description]

* @param {[type]} comp_id int [公司ID]

* @param {[type]} num int [有效期天數]

* @return {[type]} [description]

*/

func (obj *CuStatusClass) updateOneComp(c chan string, comp_id int, num int) {

db := Mydb()

defer db.Close()

end := time.Now().Unix()

start := end - 3600*24*int64(num) //前推num天

sql := "SELECT a.id,a.name,a.status,(SELECT COUNT(*) FROM `order_sale` WHERE `cu_id` = a.id AND `pay_time` > ? AND `pay_time` < ? AND `type` IN (1,2)) AS orders, (SELECT COUNT(*) FROM `practice_order` WHERE `cu_id` = a.id AND `pay_time` > ? AND `pay_time` < ?) AS practs FROM `customer_info` AS a LEFT JOIN `config_membership` AS m ON a.membership_id = m.id WHERE m.`is_member` = 1 AND a.`company_id` = ?"

rows, err := db.Query(sql, start, end, start, end, comp_id)

if err != nil {

log.Println(err)

}

defer rows.Close()

var id int

var orders int

var practs int

var name string

var status int

for rows.Next() {

err := rows.Scan(&id, &name, &status, &orders, &practs)

if err != nil {

log.Fatal(err)

}

new_status := obj.getState(orders, practs, status)

if status != new_status {

stmt, err := db.Prepare("UPDATE `customer_info` SET `status`=? WHERE `id`=?")

defer stmt.Close()

if err != nil {

log.Println(err)

return

}

stmt.Exec(new_status, id)

//返回管道信息寫入

c <- fmt.Sprintf("%d", comp_id) + ":" + fmt.Sprintf("%d", id) + " " + name + " " + fmt.Sprintf("%d", status) + "->" + fmt.Sprintf("%d", new_status)

}

}

err = rows.Err()

if err != nil {

log.Fatal(err)

}

close(c)

}

/**

* 多公司并發處理 (PT)

* @param {[type]} db *sql.DB [description]

* @return {[type]} [description]

*/

func (obj *CuStatusClass) Run() {

db := Mydb()

defer db.Close()

sql := "SELECT id , auto_cu_status, config FROM `company_info` WHERE `status` = 1"

rows, err := db.Query(sql)

if err != nil {

log.Println(err)

}

defer rows.Close()

chs := make([]chan string, 0) //開多個管道接受消息

var id int

var auto int

var config string

for rows.Next() {

err := rows.Scan(&id, &auto, &config)

if err != nil {

log.Fatal(err)

}

if auto == 1 {

num := obj.getConfig(config) //客戶有效期設置

c := make(chan string)

chs = append(chs, c)

go obj.updateOneComp(c, id, num)

}

}

err = rows.Err()

if err != nil {

log.Fatal(err)

}

for _, ch := range chs { //多管道寫法

for {

x, ok := <-ch

if ok == false {

break

}

writeResult("cu_status", x)

fmt.Println(x) //消息回收處理 可擴展寫入文件日志

}

}

}

var Cu *CuStatusClass

func init() {

Cu = NewCu()

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品爱久久久久久久| 欧美日韩成人在线视频| 国产精品日韩在线一区| 一个人看的www久久| 日韩一区视频在线| 日韩av在线一区二区| 亚洲高清久久网| 欧美日韩美女视频| 亚洲精品一区二区三区婷婷月| 亚洲自拍偷拍视频| 亚洲区在线播放| 久久夜色精品国产欧美乱| 中文字幕精品一区二区精品| 这里只有精品久久| 欧美日韩精品中文字幕| 欧美日韩国产成人在线| 欧美精品成人在线| 国产成人精品国内自产拍免费看| 亚洲欧美激情一区| 国产精品 欧美在线| 中文字幕一区电影| 国产原创欧美精品| 亚洲精品suv精品一区二区| 欧美激情视频在线免费观看 欧美视频免费一| 久久大大胆人体| 日韩美女视频免费看| 亚洲精品国产美女| 欧美日本啪啪无遮挡网站| 中文字幕日韩精品在线| 日韩欧美综合在线视频| 日韩av网站导航| 国产精品久久久久9999| 在线观看中文字幕亚洲| 美日韩丰满少妇在线观看| 海角国产乱辈乱精品视频| 国产一区二区三区中文| 精品久久国产精品| 国产欧美一区二区| 国产精品一区二区三区成人| 欧美wwwxxxx| 日日骚av一区| 91精品在线看| 九九热精品视频国产| 欧美日韩加勒比精品一区| 久久艹在线视频| 亚洲精品短视频| 欧美电影《睫毛膏》| 91国在线精品国内播放| 亚洲第一视频网站| 国产日韩欧美在线| 全亚洲最色的网站在线观看| 久久久久久久999精品视频| 97超视频免费观看| 日本不卡高字幕在线2019| 国产精品免费久久久久影院| 亚洲精品视频播放| 久久久久久久亚洲精品| 国产精品成人久久久久| 久久久人成影片一区二区三区观看| 国产日韩在线精品av| 亚洲第一网站男人都懂| 亚洲成人av中文字幕| 久久伊人精品一区二区三区| 91免费看片在线| 中文字幕亚洲欧美日韩2019| 亲爱的老师9免费观看全集电视剧| 亚洲美女av在线| 少妇高潮久久久久久潘金莲| 欧美影院成年免费版| 日韩欧美视频一区二区三区| 亚洲精品免费在线视频| 91精品国产自产在线老师啪| 欧美日韩综合视频网址| 亚洲天堂男人的天堂| 亚洲国产精品悠悠久久琪琪| www国产亚洲精品久久网站| 91精品国产色综合久久不卡98| 国外成人在线直播| 亚洲91精品在线观看| 亚洲人成电影在线播放| 亚洲免费一在线| 国产欧美一区二区三区视频| 亚洲性夜色噜噜噜7777| 国产成人精品国内自产拍免费看| 欧美电影《睫毛膏》| 992tv成人免费影院| 日韩专区在线播放| 国产91成人在在线播放| 亚洲国产成人精品久久| 欧美夜福利tv在线| 亚洲美女av电影| 国产精品国产三级国产aⅴ浪潮| 亚洲石原莉奈一区二区在线观看| 亚洲男人天天操| 色诱女教师一区二区三区| 日韩av在线免费看| 日韩网站免费观看高清| 国产美女久久精品香蕉69| 国产日韩在线看| 亚洲视频在线观看免费| 欧美理论电影在线观看| 中文字幕最新精品| 日韩亚洲欧美中文在线| 3344国产精品免费看| 九九久久久久99精品| 亚洲一级黄色av| 久久免费精品日本久久中文字幕| 亚洲午夜av久久乱码| 国产97在线观看| 精品日本高清在线播放| 国产精品入口日韩视频大尺度| 欧美电影在线观看完整版| 久久色精品视频| 国产精品久久久91| 狠狠躁夜夜躁人人躁婷婷91| 国产精品亚洲综合天堂夜夜| 在线视频中文亚洲| 国产精品一区二区三区久久| 亚洲国产精品成人av| 色婷婷亚洲mv天堂mv在影片| 久久亚洲私人国产精品va| 中文字幕欧美在线| 少妇久久久久久| 亚洲欧洲国产精品| 亚洲影影院av| 国产精品精品一区二区三区午夜版| 在线成人免费网站| 欧美黑人性生活视频| 欧美午夜性色大片在线观看| 国产成人一区三区| 国产欧美日韩精品在线观看| 国产精品第8页| 成人亚洲欧美一区二区三区| 亚洲国产古装精品网站| 狠狠久久五月精品中文字幕| 亚洲国产又黄又爽女人高潮的| 久久综合88中文色鬼| 日韩精品一区二区视频| 欧美精品一区二区免费| 97精品国产91久久久久久| 欧美高清一级大片| 久久国产天堂福利天堂| 性欧美xxxx视频在线观看| 国产精品一区二区三| 欧美又大又硬又粗bbbbb| 色综合久久久888| 成人精品久久久| 2019中文字幕在线| 精品色蜜蜜精品视频在线观看| 亚洲午夜未满十八勿入免费观看全集| 亚洲精品久久久久久久久久久久久| 久久在精品线影院精品国产| 在线色欧美三级视频| 国产网站欧美日韩免费精品在线观看| 色综合亚洲精品激情狠狠| 日韩中文字幕久久| 欧美性xxxx极品高清hd直播| 久久久久久97| 色综合视频一区中文字幕| 国产欧美日韩中文字幕| 精品国产乱码久久久久久虫虫漫画| 亚洲女成人图区| 欧美成人久久久| 青青青国产精品一区二区|