package main import ( "fmt" "sort" // "io" "net/http" "encoding/json" "strconv" "io/ioutil" "time" "database/sql" "strings" _ "github.com/LukeMauldin/lodbc" _ "github.com/denisenkom/go-mssqldb" _ "github.com/mattn/go-adodb" "ma/ModulePath" "os" "sync" "github.com/astaxie/beego" "github.com/astaxie/beego/logs" _ "github.com/mattn/go-sqlite3" uuid "github.com/satori/go.uuid" "encoding/csv" //_ "net/http/pprof" // "runtime" // "github.com/shopspring/decimal" "github.com/tealeg/xlsx" ) /* go-adodb ---cache leak github.com/weigj/go-odbc ---查询处理特殊字符有问题 github.com/alexbrainman/odbc ---sqlserver读取汉字乱码(编码格式没有转换) */ func testAdo() { var conf []string var db *sql.DB var err error conf = append(conf, "Provider=SQLOLEDB") conf = append(conf, "Data Source=127.0.0.1,1433") // sqlserver IP 和 服务器名称 conf = append(conf, "Initial Catalog=WellNameInformation") // 数据库名 conf = append(conf, "user id=sa") // 登陆用户名 conf = append(conf, "password=lh123456") // 登陆密码 fmt.Println(strings.Join(conf, ";")) db, err = sql.Open("adodb", strings.Join(conf, ";")) if err != nil { fmt.Println("sql open:", err) return } else { } defer db.Close() beginTime := time.Now() // 执行SQL语句 rows, err := db.Query("select [6506] from [AUTHINFO] order by ID") if err != nil { fmt.Println("query: ", err) return } for rows.Next() { var id float32 rows.Scan(&id) fmt.Println("id: ", id) } defer rows.Close() fmt.Println(fmt.Sprintf("use time:%v", (time.Now().UnixNano()-beginTime.UnixNano())/1e6)) } // 2008是要升级sqlserver数据库的补丁的,不建议使用。 func testMssqldb() { var server = "127.0.0.1" port := 1433 var user = "sa" var password = "lh123456" var database = "WellNameInformation" //连接字符串 connString := fmt.Sprintf("server=%s;port%d;database=%s;user id=%s;password=%s", server, port, database, user, password) fmt.Println(connString) //建立连接 db, err := sql.Open("mssql", connString) if err != nil { fmt.Println("Open Connection failed:", err.Error()) } defer db.Close() //通过连接对象执行查询 rows, err := db.Query(`select ID from WellInformation order by ID`) if err != nil { fmt.Println("Query failed:", err.Error()) return } defer rows.Close() for rows.Next() { var id int64 rows.Scan(&id) fmt.Printf("id: %d \n", id) } } func testOdbc() { conn, err := sql.Open("odbc", "driver={SQL Server};SERVER=127.0.0.1;UID=sa;PWD=lh123456?;DATABASE=WellNameInformation") if err != nil { fmt.Println("Connecting Error", err.Error()) return } else { fmt.Println("connect success!") } defer conn.Close() beginTime := time.Now() stmt, err := conn.Prepare("select ID from [WellNameInformation].[dbo].[WellInformation] order by ID") if err != nil { fmt.Println("Query Error", err) return } defer stmt.Close() row, err := stmt.Query() if err != nil { fmt.Println("Query Error", err) return } defer row.Close() cnt := 0 for row.Next() { var id int if err := row.Scan(&id); err == nil { //fmt.Println(id) cnt++ } } fmt.Println("record len:", cnt) fmt.Println(fmt.Sprintf("use time:%v", (time.Now().UnixNano()-beginTime.UnixNano())/1e6)) fmt.Printf("%s\n", "finish") return } var ( server string port int user string password string database string sqlConn *sql.DB //odbcConn *sql.DB //user refreshSpan int64 ExpireTimeSpan time.Duration modelePath string mu sync.Mutex p_lock sync.Mutex p_import_f int process_lock sync.Mutex process_lock_n int ma_plan_lock sync.Mutex ma_plan_lock_n int ma_temp_plan_lock sync.Mutex ma_temp_plan_lock_n int g_time_format string = "2006-01-02 15:04:05" ) func initLog() { beego.BeeLogger.DelLogger("console") var err error modelePath, err = ModulePath.GetModuleCurrentPath() if err != nil { fmt.Println("ModulePath.GetModuleCurrentPath() failed err:", err.Error()) return } fmt.Println("modelePath:", modelePath) config := make(map[string]interface{}) config["filename"] = modelePath + string("/logs/ma.log") config["level"] = 7 config["maxlines"] = 0 config["maxsize"] = 50 * 1024 * 1024 //50M config["daily"] = true config["maxdays"] = 10 configJsonStr, err := json.Marshal(config) if err != nil { fmt.Println("package main init json.Marshal(config) failed,err:", err.Error()) os.Exit(-1) } logs.SetLogger(logs.AdapterFile, string(configJsonStr)) } func initSqlPool(driverType string) { if driverType == "ado" { var conf []string var err error conf = append(conf, "Provider=SQLOLEDB") conf = append(conf, fmt.Sprintf("Data Source=%s,%d", server, port)) // sqlserver IP 和 服务器名称 conf = append(conf, fmt.Sprintf("Initial Catalog=%s", database)) // 数据库名 conf = append(conf, fmt.Sprintf("user id=%s", user)) // 登陆用户名 conf = append(conf, fmt.Sprintf("password=%s", password)) // 登陆密码 fmt.Println(strings.Join(conf, ";")) sqlConn, err = sql.Open("adodb", strings.Join(conf, ";")) if err != nil { fmt.Println("sql open:", err.Error()) os.Exit(0) } else { fmt.Println("connect success!") } } else { // dataSource := fmt.Sprintf("driver={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s", server, user, password, database) // fmt.Println(dataSource) // var err error // sqlConn, err = sql.Open("lodbc", dataSource) // if err != nil { // fmt.Println("sql open:", err.Error()) // os.Exit(0) // } else { // logs.Info("connect success!") // } dataSource := fmt.Sprintf( "server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable;TrustServerCertificate=true", server, // 仅服务器 IP 或域名(不包含端口) user, password, database, port, // 端口通过 port 参数单独指定 ) fmt.Println("lalalalala", dataSource) var err error // sqlConn, err = sql.Open("lodbc", dataSource) // sqlConn, err = sql.Open("odbc", dataSource) sqlConn, err = sql.Open("sqlserver", dataSource) if err = sqlConn.Ping(); err != nil { fmt.Println("sql open:", err.Error()) os.Exit(0) } else { fmt.Println("连接成功") } } sqlConn.SetMaxOpenConns(10) sqlConn.SetMaxIdleConns(3) } func getConn(db string) (conn *sql.DB, err error) { var conf []string conf = append(conf, "Provider=SQLOLEDB") conf = append(conf, fmt.Sprintf("Data Source=%s,%d", server, port)) // sqlserver IP 和 服务器名称 conf = append(conf, fmt.Sprintf("Initial Catalog=%s", db)) // 数据库名 conf = append(conf, fmt.Sprintf("user id=%s", user)) // 登陆用户名 conf = append(conf, fmt.Sprintf("password=%s", password)) // 登陆密码 //fmt.Println(strings.Join(conf, ";")) conn, err = sql.Open("adodb", strings.Join(conf, ";")) if err != nil { fmt.Println("sql open:", err.Error()) logs.Error("sql open:", err.Error()) return } conn.SetMaxIdleConns(1) conn.SetMaxOpenConns(2) return } func getOdbcConn(db string) (conn *sql.DB, err error) { dataSource := fmt.Sprintf("driver={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s", server, user, password, db) fmt.Println(dataSource) conn, err = sql.Open("lodbc", dataSource) if err != nil { logs.Error("sql open:", err.Error()) return } conn.SetMaxOpenConns(2) conn.SetMaxIdleConns(1) return } func init() { refreshSpan = 5 //5s ExpireTimeSpan = time.Second * 25 initLog() server = beego.AppConfig.String("server") port, _ = beego.AppConfig.Int("port") user = beego.AppConfig.String("user") password = beego.AppConfig.String("password") database = beego.AppConfig.String("database") initSqlPool("odbc") } func main() { go checkFileExpired() go check_ma_plan_warn_g() http.HandleFunc("/test", test) http.HandleFunc("/u_ma/login", Login) http.HandleFunc("/u_ma/loginOut", LoginOut) http.HandleFunc("/u_ma/refreshUser", refreshUser) http.HandleFunc("/u_ma/getMenu", getMenu) http.HandleFunc("/u_ma/getUsers", getUsers) http.HandleFunc("/u_ma/postUser", postUser) http.HandleFunc("/u_ma/get_p", get_p) http.HandleFunc("/u_ma/post_p", post_p) http.HandleFunc("/u_ma/del_p", del_p) http.HandleFunc("/u_ma/import_p", import_p) http.HandleFunc("/u_ma/export_sap", export_sap) http.HandleFunc("/u_ma/download_file", download_file) http.HandleFunc("/u_ma/get_process", get_process) http.HandleFunc("/u_ma/import_process", import_process) http.HandleFunc("/u_ma/update_process", update_process) http.HandleFunc("/u_ma/del_process", del_process) http.HandleFunc("/u_ma/import_ma_plan", import_ma_plan) http.HandleFunc("/u_ma/get_ma_plan", get_ma_plan) http.HandleFunc("/u_ma/update_ma_plan_ex", update_ma_plan_ex) http.HandleFunc("/u_ma/update_ma_plan_ex1", update_ma_plan_ex1) http.HandleFunc("/u_ma/remove_ma_plan", remove_ma_plan) http.HandleFunc("/u_ma/export_ma_plan", export_ma_plan) http.HandleFunc("/u_ma/get_p_id_options", get_p_id_options) http.HandleFunc("/u_ma/get_p_name", get_p_name) http.HandleFunc("/u_ma/get_ma_username", get_ma_username) http.HandleFunc("/u_ma/cal_completion_date", cal_completion_date) http.HandleFunc("/u_ma/get_rs", get_rs) http.HandleFunc("/u_ma/postRs", post_rs) http.HandleFunc("/u_ma/get_p_process_options", get_p_process_options) http.HandleFunc("/u_ma/export_plan_process", export_plan_process) http.HandleFunc("/u_ma/get_processes", get_processes) http.HandleFunc("/u_ma/export_processes", export_processes) http.HandleFunc("/u_ma/approval_provesses", approval_provesses) http.HandleFunc("/u_ma/export_base_processes", export_base_processes) http.HandleFunc("/u_ma/import_ma_temp_plan", import_ma_temp_plan) http.HandleFunc("/u_ma/get_ma_temp_plan", get_ma_temp_plan) http.HandleFunc("/u_ma/update_ma_temp_plan", update_ma_temp_plan) http.HandleFunc("/u_ma/remove_ma_temp_plan", remove_ma_temp_plan) http.HandleFunc("/u_ma/export_ma_temp_plan", export_ma_temp_plan) http.HandleFunc("/u_ma/get_ma_temp_plan_fin", get_ma_temp_plan_fin) http.HandleFunc("/u_ma/update_ma_temp_ex", update_ma_temp_ex) http.HandleFunc("/u_ma/export_ma_plan_processes", export_ma_plan_processes) //监听服务 fmt.Println("listen server ...") err := http.ListenAndServe("0.0.0.0:8876", nil) if err != nil { fmt.Println("服务器错误") } } func export_ma_plan_processes(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("export_ma_plan_processes recv req begin", time.Now().Format("2006-01-02 15:04:05")) var filename string var file *xlsx.File var err error var req get_ma_plan_req var resp download_file_Resp var data []get_processes_resp_data var data1 []get_processes_resp_data var sqlstr string var rdRow *sql.Rows var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { return } if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [return_task] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[return_task] like '%s'`, likeStr) if_where = true } } if req.Pid != "" { if if_where { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.Bt != "" { if if_where { where_sql += fmt.Sprintf(` and [acd] >= '%s'`, req.Bt) if_where = true } else { where_sql += fmt.Sprintf(` [acd] >= '%s'`, req.Bt) if_where = true } } if req.Et != "" { if if_where { where_sql += fmt.Sprintf(` and [acd] <= '%s'`, req.Et) if_where = true } else { where_sql += fmt.Sprintf(` [acd] <= '%s'`, req.Et) if_where = true } } if !if_where { sqlstr = fmt.Sprintf("select [ID],[data] from [ma_temp_plan] where [state]='已审核' order by ID desc") } else { sqlstr = fmt.Sprintf("select [ID],[data] from [ma_temp_plan] where [state]='已审核' and %s order by ID desc", where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("export_ma_plan Query err:%v", err.Error())) return } for rdRow.Next() { var s string var v ma_temp_plan var id int if err := rdRow.Scan(&id, &s); err == nil { json.Unmarshal([]byte(s), &v) v.ID = id if v.Repair_type == "退库" { for i := 0; i < len(v.Plan_data); i++ { tv := v.Plan_data[i] var d get_processes_resp_data d.Actual_finished_t = tv.Actual_finished_t d.ID = tv.ID d.Process_name = tv.Process_name d.Process_t = tv.Process_t d.Produce_user = tv.Produce_user d.P_id = v.P_id d.P_serial = v.P_serial d.Repair_id = v.Return_task d.Repair_plan = v.Repair_plan d.Serial_id = tv.ID d.State = tv.State d.Times = tv.Times data = append(data, d) } } else if v.Repair_type == "天工" { var d get_processes_resp_data d.Actual_finished_t = v.Actual_completed_date d.ID = v.ID d.P_id = v.P_id d.P_serial = v.P_serial d.Repair_id = v.Return_task d.Work = v.Work d.Work_h = v.Work_h d.State = v.State d.Produce_user = v.Repairer d.Head = v.Head data1 = append(data1, d) } } else { logs.Error("export_ma_plan scan Error", err.Error()) } } rdRow.Close() file = xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { logs.Error("file add sheet err:", err.Error()) } style := xlsx.NewStyle() font := *xlsx.NewFont(11, "宋体") style.Font = font alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", } style.Alignment = alignment style.ApplyAlignment = true row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = "退货任务" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "序列号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修方案" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工序" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "次数" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时费" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维保人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "完成日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "审核状态" cost_map := make(map[string]float64) for i := 0; i < len(data); i++ { v := data[i] row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_serial cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_plan cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Process_name cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Process_t cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = strconv.Itoa(v.Times) cell1 = row.AddCell() cell1.SetStyle(style) pt, _ := strconv.ParseFloat(v.Process_t, 64) cell1.Value = fmt.Sprintf(`%.2f`, pt*float64(v.Times)*25) if _, ok := cost_map[v.Produce_user]; ok { cost_map[v.Produce_user] += pt * float64(v.Times) * 25 } else { cost_map[v.Produce_user] = pt * float64(v.Times) * 25 } cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Produce_user cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Actual_finished_t cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.State } row = sheet.AddRow() row = sheet.AddRow() row = sheet.AddRow() row = sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时费" for key, value := range cost_map { row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = key cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = fmt.Sprintf(`%.2f`, value) } /*row = sheet.AddRow() row = sheet.AddRow() row = sheet.AddRow()*/ sheet, err = file.AddSheet("sheet2") if err != nil { logs.Error("file add sheet err:", err.Error()) } row = sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "负责人" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "序列号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "天工内容" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "天工工时" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工费" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维保人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "完成日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "审核状态" cost_map = make(map[string]float64) for i := 0; i < len(data1); i++ { v := data1[i] row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Head cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_serial cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Work cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Work_h cell1 = row.AddCell() cell1.SetStyle(style) pt, _ := strconv.ParseFloat(v.Work_h, 64) cell1.Value = fmt.Sprintf(`%.2f`, pt*25) if _, ok := cost_map[v.Produce_user]; ok { cost_map[v.Produce_user] += pt * 25 } else { cost_map[v.Produce_user] = pt * 25 } cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Produce_user cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Actual_finished_t cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.State } row = sheet.AddRow() row = sheet.AddRow() row = sheet.AddRow() row = sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时费" for key, value := range cost_map { row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = key cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = fmt.Sprintf(`%.2f`, value) } filename = fmt.Sprintf(`%v.xlsx`, beginTime) err = file.Save("./file/" + filename) if err != nil { logs.Error("xlsx save err:", err.Error()) } resp.FileId = filename jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("export_ma_plan_processes recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_ma_temp_plan_fin_data(req get_ma_temp_plan_req) (resp get_ma_temp_plan_resp) { var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var where_sql string var if_where bool if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [return_task] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[return_task] like '%s'`, likeStr) if_where = true } } if req.If_done { if if_where { where_sql += fmt.Sprintf(` and [if_do]=1 and [state]='已审核'`) if_where = true } else { where_sql += fmt.Sprintf(` [if_do]=1 and [state]='已审核'`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and [if_do]=1 and [state]!='已审核'`) if_where = true } else { where_sql += fmt.Sprintf(` [if_do]=1 and [state]!='已审核'`) if_where = true } } if req.Head != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [head] like '%s'`, likeStr) if_where = true } } if req.P_id != "" { if if_where { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` [p_name] like '%s'`, likeStr) if_where = true } } if req.P_serial != "" { if if_where { likeStr := "%" + req.P_serial + "%" where_sql += fmt.Sprintf(` and [p_serial] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_serial + "%" where_sql += fmt.Sprintf(` [p_serial] like '%s'`, likeStr) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } if req.Repair_type != "" { if if_where { likeStr := "%" + req.Repair_type + "%" where_sql += fmt.Sprintf(` and [rt] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_type + "%" where_sql += fmt.Sprintf(` [rt] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [ma_temp_plan]" } else { sqlstr = fmt.Sprintf("select count(ID) from [ma_temp_plan] where %s", where_sql) } fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_temp_plan query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_ma_temp_plan scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data] from [ma_temp_plan] where ID not in (select top %v ID from [ma_temp_plan] order by acd desc) order by acd desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data] from [ma_temp_plan] where %s and ID not in (select top %v ID from [ma_temp_plan] where %s order by acd desc) order by acd desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_temp_plan Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d ma_temp_plan var id int var s string if err := rdRow.Scan(&id, &s); err == nil { json.Unmarshal([]byte(s), &d) d.ID = id if len(d.Recv_date) > 2 { d.Recv_date = d.Recv_date[2:] } if len(d.Actual_completed_date) > 2 { d.Actual_completed_date = d.Actual_completed_date[2:] } if len(d.Plan_data) == 0 { d.Plan_data = []plan_info{} } if d.State == "" { d.State = "未审核" } resp.Data = append(resp.Data, d) } else { logs.Error("get_ma_temp_plan scan Error", err.Error()) } } exit: return } func get_ma_temp_plan_fin(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("get_ma_temp_plan_fin recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_ma_temp_plan_req var resp get_ma_temp_plan_resp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } resp = get_ma_temp_plan_fin_data(req) exit: jdata, _ := json.Marshal(resp) str := string(jdata) str = strings.ReplaceAll(str, "%", "%%") fmt.Fprintf(response, str) //fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("get_ma_temp_plan_fin recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func export_ma_temp_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("export_ma_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var filename string var file *xlsx.File var req get_ma_temp_plan_req var resp download_file_Resp var data get_ma_temp_plan_resp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { return } req.Index = 1 req.Count = 100000 data = get_ma_temp_plan_data(req) fmt.Println(data) file = xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { logs.Error("file add sheet err:", err.Error()) } style := xlsx.NewStyle() font := *xlsx.NewFont(11, "宋体") style.Font = font alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", } style.Alignment = alignment style.ApplyAlignment = true row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = "接收日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "退库任务" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "负责人" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品名称" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "序列号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修类型" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工作内容" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "初检分析" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修方案" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "完成日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "自检记录" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "缺料情况" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "物料任务" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "转入E1库" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "转储单号" for i := 0; i < len(data.Data); i++ { v := data.Data[i] var return_task string if v.Return_task != "" { return_task = "http://123.54.1.214:10010/redmine/issues/" + v.Return_task } var link string if v.Link != "" { link = "http://123.54.1.214:10010/redmine/issues/" + v.Link } var mt string if v.Material_task != "" { mt = "http://123.54.1.214:10010/redmine/issues/" + v.Material_task } row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = v.Recv_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = return_task cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Head cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_name cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_serial cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repairer cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_type cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Work cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Inspection_analysis cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_plan cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Actual_completed_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = link cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Material_status cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = mt cell1 = row.AddCell() cell1.SetStyle(style) if v.If_e1 { cell1.Value = "是" } else { cell1.Value = "否" } cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Odd_num } filename = fmt.Sprintf(`%v.xlsx`, beginTime) err = file.Save("./file/" + filename) if err != nil { logs.Error("xlsx save err:", err.Error()) } resp.FileId = filename jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("export_ma_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func remove_ma_temp_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("remove_ma_temp_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp CommonResp var userinfo useInfo reqdata, _ := ioutil.ReadAll(request.Body) var req remove_ma_plan_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } userinfo, err = getUserInfo(req.OpUser) if userinfo.RoleId != 1 { resp.Ret = 1 goto exit } if req.ID == 0 { logs.Info("remove_ma_temp_plan req id ==0") resp.Ret = -1 goto exit } sqlstr = fmt.Sprintf(`DELETE FROM [ma_temp_plan] where ID=%d`, req.ID) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("remove_ma_temp_plan err:", err.Error()) resp.Ret = -1 goto exit } resp.Ret = 0 exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("remove_ma_temp_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func update_ma_temp_ex(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("update_ma_temp_ex recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp CommonResp var rows *sql.Rows var old_data ma_temp_plan var if_exist bool var jdata []byte reqdata, _ := ioutil.ReadAll(request.Body) var req update_ma_temp_plan_req json.Unmarshal(reqdata, &req) // var user_info useInfo b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if req.Plan.ID == 0 { logs.Info("update_ma_temp_plan sap req id ==0") resp.Ret = -1 goto exit } /*user_info, _ = getUserInfo(req.OpUser) if user_info.RoleId > 1 { names := make(map[string]bool) names[req.Plan.Repairer] = true for i := 0; i < len(req.Plan.Plan_data); i++ { names[req.Plan.Plan_data[i].Produce_user] = true } if _, ok := names[req.OpUser]; !ok { logs.Info("普通用户不可修改不是自己的计划") resp.Ret = 1 goto exit } }*/ sqlstr = fmt.Sprintf(`select data from [ma_temp_plan] where ID=%d`, req.Plan.ID) rows, err = sqlConn.Query(sqlstr) if err == nil { for rows.Next() { var s string if err = rows.Scan(&s); err == nil { json.Unmarshal([]byte(s), &old_data) if_exist = true } } } if if_exist { old_data.Plan_data = req.Plan.Plan_data if true || old_data.Total_work_time == "" { var wt float64 for i := 0; i < len(old_data.Plan_data); i++ { old_data.Plan_data[i].State = "已审核" t, _ := strconv.ParseFloat(old_data.Plan_data[i].Process_t, 64) t = t * float64(old_data.Plan_data[i].Times) wt += t } old_data.Total_work_time = fmt.Sprintf("%.2f", wt) } old_data.State = "已审核" s, _ := json.Marshal(old_data) sqlstr = fmt.Sprintf(`UPDATE [dbo].[ma_temp_plan] SET [data] = '%s' ,[return_task] = '%s' ,[head] = '%s' ,[p_id] = '%s' ,[p_name] = '%s' ,[p_serial] = '%s' ,[repairer] = '%s' ,[rt] = '%s' ,[if_do] = %d ,[state]='%s' WHERE ID=%d`, string(s), old_data.Return_task, old_data.Head, old_data.P_id, old_data.P_name, old_data.P_serial, old_data.Repairer, old_data.Repair_type, old_data.If_do, old_data.State, req.Plan.ID) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_ma_temp_ex Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: jdata, _ = json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("update_ma_temp_ex recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func update_ma_temp_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("update_ma_temp_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp CommonResp var rows *sql.Rows var old_data ma_temp_plan var if_exist bool var jdata []byte reqdata, _ := ioutil.ReadAll(request.Body) var req update_ma_temp_plan_req json.Unmarshal(reqdata, &req) var user_info useInfo b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if req.Plan.ID == 0 { logs.Info("update_ma_temp_plan sap req id ==0") resp.Ret = -1 goto exit } sqlstr = fmt.Sprintf(`select data from [ma_temp_plan] where ID=%d`, req.Plan.ID) rows, err = sqlConn.Query(sqlstr) if err == nil { for rows.Next() { var s string if err = rows.Scan(&s); err == nil { json.Unmarshal([]byte(s), &old_data) if_exist = true } } } if if_exist { user_info, _ = getUserInfo(req.OpUser) if user_info.RoleId > 1 { names := make(map[string]bool) names[old_data.Repairer] = true for i := 0; i < len(old_data.Plan_data); i++ { names[old_data.Plan_data[i].Produce_user] = true } if _, ok := names[req.OpUser]; !ok { logs.Info("普通用户不可修改不是自己的计划") resp.Ret = 1 goto exit } if old_data.State == "已审核" { resp.Ret = 1 goto exit } } old_data = req.Plan if true || old_data.Total_work_time == "" { var wt float64 for i := 0; i < len(old_data.Plan_data); i++ { t, _ := strconv.ParseFloat(old_data.Plan_data[i].Process_t, 64) t = t * float64(old_data.Plan_data[i].Times) wt += t } old_data.Total_work_time = fmt.Sprintf("%.2f", wt) } if old_data.Actual_completed_date != "" { old_data.If_do = 1 if old_data.Repair_type == "天工" { old_data.State = "已审核" } } var if_e1 int if old_data.If_e1 { if_e1 = 1 } s, _ := json.Marshal(old_data) sqlstr = fmt.Sprintf(`UPDATE [dbo].[ma_temp_plan] SET [data] = '%s' ,[return_task] = '%s' ,[head] = '%s' ,[p_id] = '%s' ,[p_name] = '%s' ,[p_serial] = '%s' ,[repairer] = '%s' ,[rt] = '%s' ,[if_do] = %d ,[if_e1]= %d ,[state]='%s',[acd]='%s' WHERE ID=%d`, string(s), old_data.Return_task, old_data.Head, old_data.P_id, old_data.P_name, old_data.P_serial, old_data.Repairer, old_data.Repair_type, old_data.If_do, if_e1, old_data.State, old_data.Actual_completed_date, req.Plan.ID) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_ma_plan_ex Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: jdata, _ = json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("update_ma_temp_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_ma_temp_plan_data(req get_ma_temp_plan_req) (resp get_ma_temp_plan_resp) { var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var where_sql string var if_where bool if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [return_task] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[return_task] like '%s'`, likeStr) if_where = true } } if req.If_done { if if_where { where_sql += fmt.Sprintf(` and [if_do]=1`) if_where = true } else { where_sql += fmt.Sprintf(` [if_do]=1`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and [if_do]!=1`) if_where = true } else { where_sql += fmt.Sprintf(` [if_do]!=1`) if_where = true } } if req.If_e1 { if if_where { where_sql += fmt.Sprintf(` and [if_e1]=1`) if_where = true } else { where_sql += fmt.Sprintf(` [if_e1]=1`) if_where = true } } if req.Head != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [head] like '%s'`, likeStr) if_where = true } } if req.P_id != "" { if if_where { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` [p_name] like '%s'`, likeStr) if_where = true } } if req.P_serial != "" { if if_where { likeStr := "%" + req.P_serial + "%" where_sql += fmt.Sprintf(` and [p_serial] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_serial + "%" where_sql += fmt.Sprintf(` [p_serial] like '%s'`, likeStr) if_where = true } } if req.Repairer != "" { if req.Repairer == "空" { if if_where { where_sql += fmt.Sprintf(` and ([repairer] ='' or [repairer] is null)`) if_where = true } else { where_sql += fmt.Sprintf(` ([repairer] ='' or [repairer] is null)`) if_where = true } } else { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } } if req.Repair_type != "" { if if_where { likeStr := "%" + req.Repair_type + "%" where_sql += fmt.Sprintf(` and [rt] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_type + "%" where_sql += fmt.Sprintf(` [rt] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [ma_temp_plan]" } else { sqlstr = fmt.Sprintf("select count(ID) from [ma_temp_plan] where %s", where_sql) } fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_temp_plan query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_ma_temp_plan scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data] from [ma_temp_plan] where ID not in (select top %v ID from [ma_temp_plan] order by [acd] desc) order by [acd] desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data] from [ma_temp_plan] where %s and ID not in (select top %v ID from [ma_temp_plan] where %s order by [acd] desc) order by [acd] desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_temp_plan Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d ma_temp_plan var id int var s string if err := rdRow.Scan(&id, &s); err == nil { json.Unmarshal([]byte(s), &d) d.ID = id if len(d.Recv_date) > 2 { d.Recv_date = d.Recv_date[2:] } if len(d.Actual_completed_date) > 2 { d.Actual_completed_date = d.Actual_completed_date[2:] } if len(d.Plan_data) == 0 { d.Plan_data = []plan_info{} } if d.If_e1 { d.If_e1_str = "是" } else { d.If_e1_str = "否" } resp.Data = append(resp.Data, d) } else { logs.Error("get_ma_temp_plan scan Error", err.Error()) } } exit: return } func get_ma_temp_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("get_ma_temp_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_ma_temp_plan_req var resp get_ma_temp_plan_resp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } resp = get_ma_temp_plan_data(req) exit: jdata, _ := json.Marshal(resp) str := string(jdata) str = strings.ReplaceAll(str, "%", "%%") fmt.Fprintf(response, str) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("get_ma_temp_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func export_base_processes(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("export_base_processes recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_process_req var resp get_process_resp var file_resp download_file_Resp var sqlstr string var rdRow *sql.Rows var err error var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { return } if req.P_id != "" { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(`[p_id] like '%s'`, likeStr) if_where = true } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(`[p_name] like '%s'`, likeStr) if_where = true } } if req.Process_name != "" { if if_where { likeStr := "%" + req.Process_name + "%" where_sql += fmt.Sprintf(` and [process_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Process_name + "%" where_sql += fmt.Sprintf(`[process_name] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = fmt.Sprintf("select [ID],[p_id],[p_name],[process_name],[process_t] from [process] order by ID desc") } else { sqlstr = fmt.Sprintf("select [ID],[p_id],[p_name],[process_name],[process_t] from [process] where %s order by ID desc", where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("export_base_processes Query err:%v", err.Error())) return } defer rdRow.Close() for rdRow.Next() { var d process_info if err := rdRow.Scan(&d.ID, &d.P_id, &d.P_name, &d.Process_name, &d.Process_t); err == nil { resp.Data = append(resp.Data, d) } else { logs.Error("export_base_processes scan Error", err.Error()) } } file := xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { logs.Error("file add sheet err:", err.Error()) } style := xlsx.NewStyle() font := *xlsx.NewFont(11, "宋体") style.Font = font alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", } style.Alignment = alignment style.ApplyAlignment = true row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = "产品编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品名称" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工序" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时" for i := 0; i < len(resp.Data); i++ { v := resp.Data[i] row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_name cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Process_name cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Process_t } filename := fmt.Sprintf(`%v.xlsx`, beginTime) err = file.Save("./file/" + filename) if err != nil { logs.Error("xlsx save err:", err.Error()) } file_resp.FileId = filename jdata, _ := json.Marshal(file_resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("export_plan_process recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func approval_provesses(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("approval_provesses recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp CommonResp var rows *sql.Rows var old_data ma_plan var if_exist bool var jdata []byte reqdata, _ := ioutil.ReadAll(request.Body) var req approval_provesses_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if req.ID == 0 { logs.Info("update_ma_plan_ex sap req id ==0") resp.Ret = -1 goto exit } sqlstr = fmt.Sprintf(`select data from [ma_plan] where [repair_id]='%s'`, req.Rid) rows, err = sqlConn.Query(sqlstr) if err == nil { for rows.Next() { var s string if err = rows.Scan(&s); err == nil { json.Unmarshal([]byte(s), &old_data) if_exist = true } } } if if_exist { for i := 0; i < len(old_data.Plan_data); i++ { if old_data.Plan_data[i].ID == req.Serial_id { if req.Undo { old_data.Plan_data[i].State = "" } else { old_data.Plan_data[i].State = "已审核" } } } s, _ := json.Marshal(old_data) sqlstr = fmt.Sprintf(`UPDATE [ma_plan] SET [data] = '%s' WHERE [repair_id]='%s' `, string(s), req.Rid) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_ma_plan_ex Exec Error:", err.Error()) resp.Ret = -1 goto exit } if req.Undo { sqlstr = fmt.Sprintf(`UPDATE [dbo].[processes] SET [state] = '%s' WHERE ID=%d`, "未审核", req.ID) } else { sqlstr = fmt.Sprintf(`UPDATE [dbo].[processes] SET [state] = '%s' WHERE ID=%d`, "已审核", req.ID) } _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_ma_plan_ex Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: jdata, _ = json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("approval_provesses recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } // 导出商丘维保已审核 func export_processes(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("export_processes recv req begin", time.Now().Format("2006-01-02 15:04:05")) var filename string var file *xlsx.File var err error var req get_ma_plan_req var resp download_file_Resp var data []get_processes_resp_data var sqlstr string var rdRow *sql.Rows var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { return } // user_data, _ := getUserInfo(req.OpUser) if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [repair_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[repair_id] like '%s'`, likeStr) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [produce_user] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [produce_user] like '%s'`, likeStr) if_where = true } } if req.Pid != "" { if if_where { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.Bt != "" { if if_where { where_sql += fmt.Sprintf(` and [acd] >= '%s'`, req.Bt) if_where = true } else { where_sql += fmt.Sprintf(` [acd] >= '%s'`, req.Bt) if_where = true } } if req.Et != "" { if if_where { where_sql += fmt.Sprintf(` and [acd] <= '%s'`, req.Et) if_where = true } else { where_sql += fmt.Sprintf(` [acd] <= '%s'`, req.Et) if_where = true } } if if_where { likeStr := "%" + "睿控维保" + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + "睿控维保" + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } if !if_where { sqlstr = fmt.Sprintf("select [ID],[data] from [ma_plan] where [state]='已审核' order by ID desc") } else { sqlstr = fmt.Sprintf("select [ID],[data] from [ma_plan] where [state]='已审核' and %s order by ID desc", where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("export_ma_plan Query err:%v", err.Error())) return } for rdRow.Next() { var s string var v ma_plan var id int if err := rdRow.Scan(&id, &s); err == nil { json.Unmarshal([]byte(s), &v) v.ID = id for i := 0; i < len(v.Plan_data); i++ { tv := v.Plan_data[i] var d get_processes_resp_data d.Actual_finished_t = tv.Actual_finished_t d.ID = tv.ID d.Process_name = tv.Process_name d.Process_t = tv.Process_t d.Produce_user = tv.Produce_user d.P_id = v.P_id d.P_serial = v.P_serial d.Repair_id = v.Repair_id d.Repair_plan = v.Repair_plan d.Serial_id = tv.ID d.State = tv.State d.Times = tv.Times data = append(data, d) } } else { logs.Error("export_ma_plan scan Error", err.Error()) } } rdRow.Close() file = xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { logs.Error("file add sheet err:", err.Error()) } style := xlsx.NewStyle() font := *xlsx.NewFont(11, "宋体") style.Font = font alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", } style.Alignment = alignment style.ApplyAlignment = true row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = "维修单号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "序列号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修方案" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工序" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "次数" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时费" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维保人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "完成日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "审核状态" cost_map := make(map[string]float64) for i := 0; i < len(data); i++ { v := data[i] row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_serial cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_plan cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Process_name cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Process_t cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = strconv.Itoa(v.Times) cell1 = row.AddCell() cell1.SetStyle(style) pt, _ := strconv.ParseFloat(v.Process_t, 64) cell1.Value = fmt.Sprintf(`%.2f`, pt*float64(v.Times)*25) if _, ok := cost_map[v.Produce_user]; ok { cost_map[v.Produce_user] += pt * float64(v.Times) * 25 } else { cost_map[v.Produce_user] = pt * float64(v.Times) * 25 } cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Produce_user cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Actual_finished_t cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.State } row = sheet.AddRow() row = sheet.AddRow() row = sheet.AddRow() row = sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时费" for key, value := range cost_map { row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = key cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = fmt.Sprintf(`%.2f`, value) } filename = fmt.Sprintf(`%v.xlsx`, beginTime) err = file.Save("./file/" + filename) if err != nil { logs.Error("xlsx save err:", err.Error()) } resp.FileId = filename jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("export_plan_process recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_done_processes(req get_ma_plan_req) (resp get_ma_plan_resp) { var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var t_data []ma_plan var where_sql string var if_where bool // user_data, _ := getUserInfo(req.OpUser) if req.ID != "" { likeStr := "%" + req.ID + "%" if if_where { where_sql += fmt.Sprintf(` and [ID] like '%s'`, likeStr) } else { where_sql += fmt.Sprintf(` [ID] like '%s'`, likeStr) } if_where = true } if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [repair_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[repair_id] like '%s'`, likeStr) if_where = true } } if req.If_done { if if_where { where_sql += fmt.Sprintf(` and [state] ='已审核' and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` [state] ='已审核' and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and ([state] !='已审核' or [state] is null) and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([state] !='已审核' or [state] is null) and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } if req.Repair_status != "" { if if_where { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` and [rs] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` [rs] like '%s'`, likeStr) if_where = true } } if req.Regional_head != "" { if if_where { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` and [regional_head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` [regional_head] like '%s'`, likeStr) if_where = true } } if req.Material_status != "" { if if_where { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` and [ms] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` [ms] like '%s'`, likeStr) if_where = true } } if if_where { likeStr := "%" + "睿控维保" + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + "睿控维保" + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } if req.Station != "" { if if_where { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` and [station] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` [station] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [ma_plan]" } else { sqlstr = fmt.Sprintf("select count(ID) from [ma_plan] where %s", where_sql) } fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_ma_plan scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data],[mcn],[state] from [ma_plan] where ID not in (select top %v ID from [ma_plan] order by [acd] desc) order by [acd] desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data],[mcn],[state] from [ma_plan] where %s and ID not in (select top %v ID from [ma_plan] where %s order by [acd] desc) order by [acd] desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d ma_plan var id int var s string var mcn string var state string if err := rdRow.Scan(&id, &s, &mcn, &state); err == nil { json.Unmarshal([]byte(s), &d) d.ID = id d.If_warn = 0 d.Mcn = mcn if len(d.Recv_date) > 2 { d.Recv_date = d.Recv_date[2:] } if len(d.Dispath_date) > 2 { d.Dispath_date = d.Dispath_date[2:] } if len(d.Repair_quotation_date) > 2 { d.Repair_quotation_date = d.Repair_quotation_date[2:] } if len(d.Repair_OK_date) > 2 { d.Repair_OK_date = d.Repair_OK_date[2:] } if len(d.Committed_completed_date) > 2 { d.Committed_completed_date = d.Committed_completed_date[2:10] d.Committed_completed_date = strings.ReplaceAll(d.Committed_completed_date, "-", "/") } if len(d.Actual_completed_date) > 2 { d.Actual_completed_date = d.Actual_completed_date[2:] } if len(d.Material_committed_date) > 2 { d.Material_committed_date = d.Material_committed_date[2:] } if len(d.Date_of_issuance) > 2 { d.Date_of_issuance = d.Date_of_issuance[2:] } if d.Actual_completed_date != "" && d.Committed_completed_date != "" { if d.Actual_completed_date <= d.Committed_completed_date { d.Overdue = "否" } else { d.Overdue = "是" } } else { d.Overdue = "" } if len(d.Plan_data) == 0 { d.Plan_data = []plan_info{} } if state != "" && d.State == "" { d.State = state } t_data = append(t_data, d) /* if len(t_data) == 0 { t_data = append(t_data, d) } else { if d.Repairer == t_data[len(t_data)-1].Repairer { t_data = append(t_data, d) } else { //排序 sort.Slice(t_data, func(i, j int) bool { return t_data[i].Committed_completed_date > t_data[j].Committed_completed_date }) resp.Data = append(resp.Data, t_data...) t_data = []ma_plan{} t_data = append(t_data, d) } }*/ } else { logs.Error("get_ma_plan scan Error", err.Error()) } } exit: //fmt.Println(t_data) if len(t_data) > 0 { sort.Slice(t_data, func(i, j int) bool { return t_data[i].Actual_completed_date > t_data[j].Actual_completed_date }) resp.Data = append(resp.Data, t_data...) } return } func get_not_done_processes(req get_ma_plan_req) (resp get_ma_plan_resp) { var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var where_sql string var if_where bool // user_data, _ := getUserInfo(req.OpUser) if req.ID != "" { likeStr := "%" + req.ID + "%" if if_where { where_sql += fmt.Sprintf(` and [ID] like '%s'`, likeStr) } else { where_sql += fmt.Sprintf(` [ID] like '%s'`, likeStr) } if_where = true } if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [repair_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[repair_id] like '%s'`, likeStr) if_where = true } } //计划必须已处理 if req.If_done { if if_where { where_sql += fmt.Sprintf(` and [state] ='已审核' and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` [state] ='已审核' and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and ([state] !='已审核' or [state] is null) and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([state] !='已审核' or [state] is null) and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } if req.Repair_status != "" { if if_where { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` and [rs] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` [rs] like '%s'`, likeStr) if_where = true } } if req.Regional_head != "" { if if_where { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` and [regional_head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` [regional_head] like '%s'`, likeStr) if_where = true } } if req.Material_status != "" { if if_where { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` and [ms] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` [ms] like '%s'`, likeStr) if_where = true } } if req.Pid != "" { if if_where { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` [p_name] like '%s'`, likeStr) if_where = true } } if if_where { likeStr := "%" + "睿控维保" + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + "睿控维保" + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } if req.Station != "" { if if_where { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` and [station] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` [station] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [ma_plan]" } else { sqlstr = fmt.Sprintf("select count(ID) from [ma_plan] where %s", where_sql) } fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_ma_plan scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if req.Sort_field == "" { if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where ID not in (select top %v ID from [ma_plan] order by acd desc) order by acd desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where %s and ID not in (select top %v ID from [ma_plan] where %s order by acd desc) order by acd desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } } else { var field string if req.Sort_field == "客户名称" { field = "[customer]" } else if req.Sort_field == "负责人" { field = "[regional_head]" } else if req.Sort_field == "维修人员" { field = "[repairer]" } else if req.Sort_field == "维修状态" { field = "[rs]" } else if req.Sort_field == "承诺完成日期" { field = "[ccd]" } else { field = "ID" } if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where ID not in (select top %v ID from [ma_plan] order by %s desc) order by %s desc", req.Count, (req.Index-1)*req.Count, field, field) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where %s and ID not in (select top %v ID from [ma_plan] where %s order by %s desc) order by %s desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql, field, field) } } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d ma_plan var id int var s string var if_warn int var mcn string if err := rdRow.Scan(&id, &s, &if_warn, &mcn); err == nil { json.Unmarshal([]byte(s), &d) d.ID = id d.Mcn = mcn if len(d.Recv_date) > 2 { d.Recv_date = d.Recv_date[2:] } if len(d.Dispath_date) > 2 { d.Dispath_date = d.Dispath_date[2:] } if len(d.Repair_quotation_date) > 2 { d.Repair_quotation_date = d.Repair_quotation_date[2:] } if len(d.Repair_OK_date) > 2 { d.Repair_OK_date = d.Repair_OK_date[2:] } if len(d.Committed_completed_date) > 2 { d.Committed_completed_date = d.Committed_completed_date[2:10] d.Committed_completed_date = strings.ReplaceAll(d.Committed_completed_date, "-", "/") } if len(d.Actual_completed_date) > 2 { d.Actual_completed_date = d.Actual_completed_date[2:] } if len(d.Material_committed_date) > 2 { d.Material_committed_date = d.Material_committed_date[2:] } if len(d.Date_of_issuance) > 2 { d.Date_of_issuance = d.Date_of_issuance[2:] } if d.Actual_completed_date != "" && d.Committed_completed_date != "" { if d.Actual_completed_date <= d.Committed_completed_date { d.Overdue = "否" } else { d.Overdue = "是" } } else { d.Overdue = "" } if len(d.Plan_data) == 0 { d.Plan_data = []plan_info{} } if d.State == "" { d.State = "未审核" } d.If_warn = if_warn resp.Data = append(resp.Data, d) } else { logs.Error("get_ma_plan scan Error", err.Error()) } } exit: return } func get_processes(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("get_processes recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_ma_plan_req var resp get_ma_plan_resp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if !req.If_done { //未处理 resp = get_not_done_processes(req) } else { resp = get_done_processes(req) } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("get_processes recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func export_plan_process(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("export_plan_process recv req begin", time.Now().Format("2006-01-02 15:04:05")) var filename string var file *xlsx.File var err error var req get_ma_plan_req var resp download_file_Resp var data []ma_plan var sqlstr string var rdRow *sql.Rows var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { return } user_data, _ := getUserInfo(req.OpUser) if req.ID != "" { likeStr := "%" + req.ID + "%" if if_where { where_sql += fmt.Sprintf(` and [ID] like '%s'`, likeStr) } else { where_sql += fmt.Sprintf(` [ID] like '%s'`, likeStr) } if_where = true } if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [repair_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[repair_id] like '%s'`, likeStr) if_where = true } } if req.If_done { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } if req.Repair_status != "" { if if_where { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` and [rs] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` [rs] like '%s'`, likeStr) if_where = true } } if req.Regional_head != "" { if if_where { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` and [regional_head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` [regional_head] like '%s'`, likeStr) if_where = true } } if req.Material_status != "" { if if_where { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` and [ms] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` [ms] like '%s'`, likeStr) if_where = true } } if req.Pid != "" { if if_where { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` [p_name] like '%s'`, likeStr) if_where = true } } if user_data.RoleId != 1 { if if_where { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } else { if req.Location != "" { if if_where { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } } if !if_where { sqlstr = fmt.Sprintf("select [ID],[data],[location] from [ma_plan] order by ID desc") } else { sqlstr = fmt.Sprintf("select [ID],[data],[location] from [ma_plan] where %s order by ID desc", where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("export_ma_plan Query err:%v", err.Error())) return } for rdRow.Next() { var d ma_plan var id int var s string var location string if err := rdRow.Scan(&id, &s, &location); err == nil { json.Unmarshal([]byte(s), &d) d.ID = id d.Location = location data = append(data, d) } else { logs.Error("export_ma_plan scan Error", err.Error()) } } rdRow.Close() file = xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { logs.Error("file add sheet err:", err.Error()) } style := xlsx.NewStyle() font := *xlsx.NewFont(11, "宋体") style.Font = font alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", } style.Alignment = alignment style.ApplyAlignment = true row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = "维修单号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "序列号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工序" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "工时" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维保人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "完成日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "审核状态" for i := 0; i < len(data); i++ { v := data[i] for j := 0; j < len(v.Plan_data); j++ { row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_serial cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Plan_data[j].Process_name cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Plan_data[j].Process_t cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Plan_data[j].Produce_user cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Plan_data[j].Actual_finished_t cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Plan_data[j].State } } filename = fmt.Sprintf(`%v.xlsx`, beginTime) err = file.Save("./file/" + filename) if err != nil { logs.Error("xlsx save err:", err.Error()) } resp.FileId = filename jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("export_plan_process recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_p_process_options(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("get_p_process_options recv req begin", time.Now().Format("2006-01-02 15:04:05")) var sqlstr string var rdRow *sql.Rows var err error var req get_p_process_options_req var resp get_p_process_options_resp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.P_id == "" { goto exit } sqlstr = fmt.Sprintf("select [ID],[p_id],[p_name],[process_name],[process_t] from [process] where [p_id] ='%s' order by ID desc", req.P_id) fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_p_process_options Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d process_info if err := rdRow.Scan(&d.ID, &d.P_id, &d.P_name, &d.Process_name, &d.Process_t); err == nil { resp.Data = append(resp.Data, d) } else { logs.Error("get_p_process_options scan Error", err.Error()) } } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("get_p_process_options recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func post_rs(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("post_rs recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var req post_rs_req var resp CommonResp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.Oper_type == 1 { insert_sql := fmt.Sprintf(`INSERT INTO [rs] ([rs]) VALUES ('%s')`, req.State) _, err = sqlConn.Exec(insert_sql) if err != nil { logs.Error(fmt.Sprintf(`post_rs insert err:%s`, err.Error())) } } else if req.Oper_type == 2 { if req.ID == 0 { goto exit } update_sql := fmt.Sprintf(`UPDATE [rs] SET [rs] = '%s' WHERE ID=%d`, req.State, req.ID) _, err = sqlConn.Exec(update_sql) if err != nil { logs.Error(fmt.Sprintf(`post_rs update err:%s`, err.Error())) } } else if req.Oper_type == 3 { del_sql := fmt.Sprintf(`DELETE FROM [rs] WHERE ID=%d `, req.ID) _, err = sqlConn.Exec(del_sql) if err != nil { logs.Error(fmt.Sprintf(`post_rs del err:%s`, err.Error())) } } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("post_rs recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_rs(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("get_rs recv req begin", time.Now().Format("2006-01-02 15:04:05")) var sqlstr string var rows *sql.Rows var err error var req get_rs_req var resp get_rs_resp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.State == "" { sqlstr = fmt.Sprintf(`SELECT [ID],[rs] FROM [rs] order by ID desc`) } else { likestr := "%" + req.State + "%" sqlstr = fmt.Sprintf(`SELECT [ID],[rs] FROM [rs] where rs like '%s' order by ID desc`, likestr) } rows, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf(`get_rs query err:%s`, err.Error())) goto exit } for rows.Next() { var d Repair_state if err = rows.Scan(&d.ID, &d.Rs); err == nil { resp.Data = append(resp.Data, d) } } rows.Close() exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("get_rs recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func cal_completion_date(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("cal_completion_date recv req begin", time.Now().Format("2006-01-02 15:04:05")) var sqlstr string var resp cal_completion_date_resp var days int reqdata, _ := ioutil.ReadAll(request.Body) var req cal_completion_date_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.Bt == "" { logs.Info("cal_completion_date req bt 为空") goto exit } req.Bt = strings.ReplaceAll(req.Bt, "/", "-") + " 00:00:00" days, _ = strconv.Atoi(req.Days) if days > 0 { m := make(map[int]int) var cnt int loc, _ := time.LoadLocation("Local") bt, _ := time.ParseInLocation(g_time_format, req.Bt, loc) fmt.Println(bt.Month()) id := bt.Year()*10000 + int(bt.Month())*100 + bt.Day() sqlstr = fmt.Sprintf(`select [day],[type] FROM [holiday] where [day] >%d `, id) fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Info("cal_completion_date err:", err.Error()) goto exit } for rows.Next() { var day, day_type int if err = rows.Scan(&day, &day_type); err == nil { m[day] = day_type } } rows.Close() fmt.Println(m) for { if cnt >= days { resp.Completion_date = bt.Format(g_time_format) if len(resp.Completion_date) >= 19 { resp.Completion_date = resp.Completion_date[:10] } break } bt = bt.Add(time.Hour * 24) key := bt.Year()*10000 + int(bt.Month())*100 + bt.Day() if _, ok := m[key]; ok { //1--假期 2--上班 if m[key] == 1 { } else if m[key] == 2 { cnt++ } } else { if int(bt.Weekday()) == 0 || int(bt.Weekday()) == 6 { } else { cnt++ } } } } else { resp.Completion_date = req.Bt goto exit } exit: if len(resp.Completion_date) >= 19 { resp.Completion_date = resp.Completion_date[:10] } resp.Completion_date = strings.ReplaceAll(resp.Completion_date, "-", "/") jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("cal_completion_date recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func export_ma_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("export_ma_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var filename string var file *xlsx.File var err error var req get_ma_plan_req var resp download_file_Resp var data []ma_plan var sqlstr string var rdRow *sql.Rows var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { return } user_data, _ := getUserInfo(req.OpUser) if req.ID != "" { likeStr := "%" + req.ID + "%" if if_where { where_sql += fmt.Sprintf(` and [ID] like '%s'`, likeStr) } else { where_sql += fmt.Sprintf(` [ID] like '%s'`, likeStr) } if_where = true } if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [repair_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[repair_id] like '%s'`, likeStr) if_where = true } } if req.If_done { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } if req.Repair_status != "" { if if_where { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` and [rs] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` [rs] like '%s'`, likeStr) if_where = true } } if req.Regional_head != "" { if if_where { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` and [regional_head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` [regional_head] like '%s'`, likeStr) if_where = true } } if req.Material_status != "" { if if_where { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` and [ms] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` [ms] like '%s'`, likeStr) if_where = true } } if req.Pid != "" { if if_where { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` [p_name] like '%s'`, likeStr) if_where = true } } if req.Bt != "" { if if_where { where_sql += fmt.Sprintf(` and [acd] >= '%s'`, req.Bt) if_where = true } else { where_sql += fmt.Sprintf(` [acd] >= '%s'`, req.Bt) if_where = true } } if req.Et != "" { if if_where { where_sql += fmt.Sprintf(` and [acd] <= '%s'`, req.Et) if_where = true } else { where_sql += fmt.Sprintf(` [acd] <= '%s'`, req.Et) if_where = true } } if user_data.RoleId != 1 { if if_where { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } else { if req.Location != "" { if if_where { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } } if !if_where { sqlstr = fmt.Sprintf("select [ID],[data],[location],[mcn] from [ma_plan] order by ID desc") } else { sqlstr = fmt.Sprintf("select [ID],[data],[location],[mcn] from [ma_plan] where %s order by ID desc", where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("export_ma_plan Query err:%v", err.Error())) return } for rdRow.Next() { var d ma_plan var id int var s string var location, mcn string if err := rdRow.Scan(&id, &s, &location, &mcn); err == nil { json.Unmarshal([]byte(s), &d) d.ID = id d.Location = location d.Mcn = mcn data = append(data, d) } else { logs.Error("export_ma_plan scan Error", err.Error()) } } rdRow.Close() file = xlsx.NewFile() sheet, err := file.AddSheet("sheet1") if err != nil { logs.Error("file add sheet err:", err.Error()) } style := xlsx.NewStyle() font := *xlsx.NewFont(11, "宋体") style.Font = font alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", } style.Alignment = alignment style.ApplyAlignment = true row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = "维保位置" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "接收日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "下发日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修单号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修合同号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "报告编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "客户名称" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "负责人" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品编号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "产品名称" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "序列号" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修人员" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修方案" /*cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "库存"*/ cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "承诺维修日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修报价日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "维修状态" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "确认维修日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "是否维修" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "承诺完成日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "实际完成日期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "超期" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "报价耗时(天)" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "缺料情况" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "承诺到料" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "物料任务" cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = "总工时" for i := 0; i < len(data); i++ { v := data[i] var task string if v.Material_task != "" { task = "http://123.54.1.214:10010/redmine/issues/" + v.Material_task } row := sheet.AddRow() //row.SetHeightCM(1) //设置每行的高度 cell1 := row.AddCell() cell1.SetStyle(style) cell1.Value = v.Location cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Recv_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Dispath_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Mcn cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_report_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Customer cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Regional_head cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_id cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_name cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.P_serial cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repairer cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_plan /*cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Inventory*/ cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_cycle cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_quotation_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_status cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Repair_OK_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.If_repair cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Committed_completed_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Actual_completed_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Overdue cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Quotation cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Material_status cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Material_committed_date cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = task cell1 = row.AddCell() cell1.SetStyle(style) cell1.Value = v.Total_work_time } filename = fmt.Sprintf(`%v.xlsx`, beginTime) err = file.Save("./file/" + filename) if err != nil { logs.Error("xlsx save err:", err.Error()) } resp.FileId = filename jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("export_ma_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func remove_ma_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("remove_ma_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp CommonResp var userinfo useInfo reqdata, _ := ioutil.ReadAll(request.Body) var req remove_ma_plan_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } userinfo, err = getUserInfo(req.OpUser) if userinfo.RoleId != 1 { resp.Ret = 1 goto exit } if req.ID == 0 { logs.Info("remove_ma_plan req id ==0") resp.Ret = -1 goto exit } sqlstr = fmt.Sprintf(`DELETE FROM [ma_plan] where ID=%d`, req.ID) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("remove_ma_plan err:", err.Error()) resp.Ret = -1 goto exit } resp.Ret = 0 exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("remove_ma_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_ma_username(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("get_ma_username recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_ma_username_req var resp get_ma_username_resp var users []useInfo reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } //user_data, _ := getUserInfo(req.OpUser) users, _ = get_all_user() for i := 0; i < len(users); i++ { if users[i].Username != "孙青山" && users[i].Username != "武杏丽" && users[i].Username != "霍涛" && users[i].Username != "王真" && users[i].Username != "李俊杉" && users[i].Username != "马纺霞" && users[i].Username != "温亚辉" && users[i].Username != "尚永强" && users[i].Username != "叶修令" && users[i].RoleId != 3 { if req.Location != "" { if req.Location == "现场维保" && users[i].Location == "现场维保" { resp.Data = append(resp.Data, users[i].Username) } else if req.Location == "睿控维保" && (users[i].Location == "睿控维保" || users[i].Location == "") { resp.Data = append(resp.Data, users[i].Username) } } else { resp.Data = append(resp.Data, users[i].Username) } } } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("get_ma_username recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_p_name(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("get_p_name recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_p_name_req var resp get_p_name_resp var sqlstr string var rdRow *sql.Rows var err error reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.P_id != "" { sqlstr = fmt.Sprintf("select distinct [p_name] from [process] where p_id = '%s' ", req.P_id) } else { goto exit } rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_p_name Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d string if err := rdRow.Scan(&d); err == nil { resp.P_name = d } else { logs.Error("get_p_name scan Error", err.Error()) } } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("get_p_name recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_p_id_options(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("get_p_id_options recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_p_id_options_req var resp get_p_id_options_resp var sqlstr string var rdRow *sql.Rows var err error reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.P_like_id != "" { like_id := "%" + req.P_like_id + "%" sqlstr = fmt.Sprintf("select distinct [p_id] from [process] where p_id like '%s' ", like_id) } else { sqlstr = fmt.Sprintf("select distinct [p_id] from [process] ") } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_p_id_options Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d string if err := rdRow.Scan(&d); err == nil { resp.Data = append(resp.Data, d) } else { logs.Error("get_p_id_options scan Error", err.Error()) } } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("get_p_id_options recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func update_ma_plan_ex1(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("update_ma_plan_ex recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp CommonResp var rows *sql.Rows var old_data ma_plan var location string var if_exist bool var jdata []byte reqdata, _ := ioutil.ReadAll(request.Body) var req update_ma_plan_req json.Unmarshal(reqdata, &req) var user_info useInfo b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if req.Plan.ID == 0 { logs.Info("update_ma_plan_ex sap req id ==0") resp.Ret = -1 goto exit } user_info, _ = getUserInfo(req.OpUser) if req.OpUser != "霍涛" && user_info.RoleId > 1 { names := make(map[string]bool) names[req.Plan.Repairer] = true for i := 0; i < len(req.Plan.Plan_data); i++ { names[req.Plan.Plan_data[i].Produce_user] = true } if _, ok := names[req.OpUser]; !ok { logs.Info("普通用户不可修改不是自己的计划") resp.Ret = 1 goto exit } } sqlstr = fmt.Sprintf(`select data,[location] from [ma_plan] where ID=%d`, req.Plan.ID) rows, err = sqlConn.Query(sqlstr) if err == nil { for rows.Next() { var s string if err = rows.Scan(&s, &location); err == nil { json.Unmarshal([]byte(s), &old_data) if_exist = true } } } if if_exist { old_data.Plan_data = []plan_info{} var wt float64 for i := 0; i < len(req.Plan.Plan_data); i++ { v := req.Plan.Plan_data[i] var d plan_info d.Actual_finished_t = v.Actual_finished_t d.ID = v.ID d.Process_name = v.Process_name d.Process_t = v.Process_t d.Produce_user = v.Produce_user d.State = "已审核" d.Times = v.Times t, _ := strconv.ParseFloat(v.Process_t, 64) t = t * float64(v.Times) wt += t old_data.Plan_data = append(old_data.Plan_data, d) } old_data.Total_work_time = fmt.Sprintf("%.2f", wt) //old_data.Total_work_time = req.Plan.Total_work_time old_data.State = "已审核" s, _ := json.Marshal(old_data) sqlstr = fmt.Sprintf(`UPDATE [ma_plan] SET [data] = '%s',[state] = '%s' WHERE ID=%d`, string(s), "已审核", req.Plan.ID) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_ma_plan_ex Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: jdata, _ = json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("update_ma_plan_ex recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func update_ma_plan_ex(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("update_ma_plan_ex recv req begin", time.Now().Format("2006-01-02 15:04:05")) fmt.Println("123123") var err error var sqlstr string var resp CommonResp var rows *sql.Rows var old_data ma_plan var location string var if_exist bool var jdata []byte reqdata, _ := ioutil.ReadAll(request.Body) var req update_ma_plan_req json.Unmarshal(reqdata, &req) var user_info useInfo // b := checkUserIfOnline(req.OpUser, req.OpUserUuid) // if !b { // resp.Ret = -1 // goto exit // } if req.Plan.ID == 0 { logs.Info("update_ma_plan_ex sap req id ==0") resp.Ret = -1 goto exit } user_info, _ = getUserInfo(req.OpUser) sqlstr = fmt.Sprintf(`select data,[location] from [ma_plan] where ID=%d`, req.Plan.ID) rows, err = sqlConn.Query(sqlstr) if err == nil { for rows.Next() { var s string if err = rows.Scan(&s, &location); err == nil { json.Unmarshal([]byte(s), &old_data) if_exist = true } } } if if_exist { if user_info.RoleId > 1 { names := make(map[string]bool) names[old_data.Repairer] = true for i := 0; i < len(old_data.Plan_data); i++ { names[old_data.Plan_data[i].Produce_user] = true } if _, ok := names[req.OpUser]; !ok { logs.Info("普通用户不可修改不是自己的计划") resp.Ret = 1 goto exit } if old_data.State == "已审核" { resp.Ret = 1 goto exit } } old_data = req.Plan if old_data.Actual_completed_date != "" && old_data.Committed_completed_date != "" { if old_data.Actual_completed_date <= old_data.Committed_completed_date { old_data.Overdue = "否" } else { old_data.Overdue = "是" } } else { old_data.Overdue = "" } //报价花费时间(天) if old_data.Repair_quotation_date != "" { loc, _ := time.LoadLocation("Local") et, _ := time.ParseInLocation(g_time_format, strings.ReplaceAll(old_data.Repair_quotation_date, "/", "-")+" 00:00:00", loc) bt, _ := time.ParseInLocation(g_time_format, strings.ReplaceAll(old_data.Dispath_date, "/", "-")+" 00:00:00", loc) fmt.Println(et, bt) var cnt int var key int b_key := bt.Year()*10000 + int(bt.Month())*100 + bt.Day() e_key := et.Year()*10000 + int(et.Month())*100 + et.Day() key = b_key m := make(map[int]int) sqlstr = fmt.Sprintf(`select [day],[type] FROM [holiday] where [day] >%d `, b_key) fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Info("update_ma_plan_ex err:", err.Error()) resp.Ret = -1 goto exit } for rows.Next() { var day, day_type int if err = rows.Scan(&day, &day_type); err == nil { m[day] = day_type } } rows.Close() if e_key > b_key { for { if key >= e_key { break } bt = bt.Add(time.Hour * 24) key = bt.Year()*10000 + int(bt.Month())*100 + bt.Day() if _, ok := m[key]; ok { //1--假期 2--上班 if m[key] == 1 { } else if m[key] == 2 { cnt++ //fmt.Println(key) } } else { if int(bt.Weekday()) == 0 || int(bt.Weekday()) == 6 { } else { cnt++ //fmt.Println(key) } } } old_data.Quotation = strconv.Itoa(cnt) } else { old_data.Quotation = strconv.Itoa(0) } } else { old_data.Quotation = "未报价" } old_data.If_warn = warn_ma_plan(old_data) if true || old_data.Total_work_time == "" { var wt float64 for i := 0; i < len(old_data.Plan_data); i++ { t, _ := strconv.ParseFloat(old_data.Plan_data[i].Process_t, 64) t = t * float64(old_data.Plan_data[i].Times) wt += t } old_data.Total_work_time = fmt.Sprintf("%.2f", wt) } s, _ := json.Marshal(old_data) fmt.Println("555555") fmt.Println(string(s)) sqlstr = fmt.Sprintf(`UPDATE [ma_plan] SET [data] = '%s',[repair_id] = '%s',[p_id] = '%s',[p_name]= '%s',[if_repair]='%s',[rs]='%s',[repairer]='%s',[regional_head]='%s',[ms]='%s',[customer]='%s',[ccd]='%s',[if_warn]=%d,[mcn]='%s',[acd]='%s' WHERE ID=%d`, string(s), old_data.Repair_id, old_data.P_id, old_data.P_name, req.Plan.If_repair, req.Plan.Repair_status, req.Plan.Repairer, req.Plan.Regional_head, req.Plan.Material_status, req.Plan.Customer, req.Plan.Committed_completed_date, old_data.If_warn, req.Plan.Mcn, req.Plan.Actual_completed_date, req.Plan.ID) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_ma_plan_ex Exec Error:", err.Error()) resp.Ret = -1 goto exit } if location == "睿控维保" { sqlstr = fmt.Sprintf(`DELETE FROM [dbo].[processes] where [repair_id]='%s'`, old_data.Repair_id) sqlConn.Exec(sqlstr) for i := 0; i < len(old_data.Plan_data); i++ { v := old_data.Plan_data[i] sqlstr = fmt.Sprintf(`INSERT INTO [dbo].[processes] ([repair_id] ,[p_id] ,[p_serial] ,[rp] ,[serial_id] ,[produce_plan] ,[produce_plan_use_t] ,[produce_user] ,[p_actual_finished_t] ,[state] ,[times]) VALUES ('%s' ,'%s' ,'%s' ,'%s' ,%d ,'%s' ,'%s' ,'%s' ,'%s' ,'%s' ,%d)`, old_data.Repair_id, old_data.P_id, old_data.P_serial, old_data.Repair_plan, v.ID, v.Process_name, v.Process_t, v.Produce_user, v.Actual_finished_t, v.State, v.Times) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_ma_plan_ex Exec Error:", err.Error()) resp.Ret = -1 goto exit } } } } resp.Ret = 0 exit: jdata, _ = json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("update_ma_plan_ex recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func check_ma_plan_warn() { sqlstr := fmt.Sprintf("select [ID],[data],[if_warn] from [ma_plan] ") rdRow, err := sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("check_ma_plan_warn Query err:%v", err.Error())) return } defer rdRow.Close() for rdRow.Next() { var d ma_plan var id int var s string var if_warn int if err := rdRow.Scan(&id, &s, &if_warn); err == nil { json.Unmarshal([]byte(s), &d) if_warn = warn_ma_plan(d) sqlstr = fmt.Sprintf(`UPDATE [ma_plan] SET [if_warn]=%d WHERE ID=%d`, if_warn, id) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("check_ma_plan_warn Exec Error:", err.Error()) } } else { logs.Error("check_ma_plan_warn scan Error", err.Error()) } } } func check_ma_plan_warn_g() { tick := time.NewTicker(time.Hour * 1) check_ma_plan_warn() for { select { case <-tick.C: check_ma_plan_warn() default: time.Sleep(time.Second * 3) } } } func warn_ma_plan(data ma_plan) (if_warn int) { loc, _ := time.LoadLocation("Local") //维修报价日期为空 if data.Repair_quotation_date == "" { et := time.Now() bt, _ := time.ParseInLocation(g_time_format, strings.ReplaceAll(data.Dispath_date, "/", "-")+" 00:00:00", loc) if data.ID == 529 { fmt.Println(et, bt) } var cnt int var key int b_key := bt.Year()*10000 + int(bt.Month())*100 + bt.Day() e_key := et.Year()*10000 + int(et.Month())*100 + et.Day() key = b_key m := make(map[int]int) sqlstr := fmt.Sprintf(`select [day],[type] FROM [holiday] where [day] >%d `, b_key) fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Info("warn_ma_plan err:", err.Error()) return } for rows.Next() { var day, day_type int if err = rows.Scan(&day, &day_type); err == nil { m[day] = day_type } } rows.Close() if e_key > b_key { for { if key >= e_key { break } bt = bt.Add(time.Hour * 24) key = bt.Year()*10000 + int(bt.Month())*100 + bt.Day() if _, ok := m[key]; ok { //1--假期 2--上班 if m[key] == 1 { } else if m[key] == 2 { cnt++ //fmt.Println(key) } } else { if int(bt.Weekday()) == 0 || int(bt.Weekday()) == 6 { } else { cnt++ //fmt.Println(key) } } } if cnt > 5 { if_warn = 1 return } } } //确认维修日期为空 if data.Repair_quotation_date != "" && data.Repair_OK_date == "" { et := time.Now() bt, _ := time.ParseInLocation(g_time_format, strings.ReplaceAll(data.Repair_quotation_date, "/", "-")+" 00:00:00", loc) if data.ID == 529 { fmt.Println(et, bt) } var cnt int var key int b_key := bt.Year()*10000 + int(bt.Month())*100 + bt.Day() e_key := et.Year()*10000 + int(et.Month())*100 + et.Day() key = b_key m := make(map[int]int) sqlstr := fmt.Sprintf(`select [day],[type] FROM [holiday] where [day] >%d `, b_key) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Info("warn_ma_plan err:", err.Error()) return } for rows.Next() { var day, day_type int if err = rows.Scan(&day, &day_type); err == nil { m[day] = day_type } } rows.Close() if e_key > b_key { for { if key >= e_key { break } bt = bt.Add(time.Hour * 24) key = bt.Year()*10000 + int(bt.Month())*100 + bt.Day() if _, ok := m[key]; ok { //1--假期 2--上班 if m[key] == 1 { } else if m[key] == 2 { cnt++ //fmt.Println(key) } } else { if int(bt.Weekday()) == 0 || int(bt.Weekday()) == 6 { } else { cnt++ //fmt.Println(key) } } } if cnt > 14 { if_warn = 1 return } } } //发料日期为空 /*if data.Repair_OK_date != "" && data.Date_of_issuance == "" { et := time.Now() bt, _ := time.ParseInLocation(g_time_format, strings.ReplaceAll(data.Repair_OK_date, "/", "-")+" 00:00:00", loc) fmt.Println(et, bt) var cnt int var key int b_key := bt.Year()*10000 + int(bt.Month())*100 + bt.Day() e_key := et.Year()*10000 + int(et.Month())*100 + et.Day() key = b_key m := make(map[int]int) sqlstr := fmt.Sprintf(`select [day],[type] FROM [holiday] where [day] >%d `, b_key) fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Info("warn_ma_plan err:", err.Error()) return } for rows.Next() { var day, day_type int if err = rows.Scan(&day, &day_type); err == nil { m[day] = day_type } } rows.Close() if e_key > b_key { for { if key >= e_key { break } bt = bt.Add(time.Hour * 24) key = bt.Year()*10000 + int(bt.Month())*100 + bt.Day() if _, ok := m[key]; ok { //1--假期 2--上班 if m[key] == 1 { } else if m[key] == 2 { cnt++ //fmt.Println(key) } } else { if int(bt.Weekday()) == 0 || int(bt.Weekday()) == 6 { } else { cnt++ //fmt.Println(key) } } } if cnt > 3 { if_warn = 1 return } } }*/ //承诺完成日期 if data.Committed_completed_date != "" && data.Actual_completed_date == "" { bt := time.Now() et, _ := time.ParseInLocation(g_time_format, strings.ReplaceAll(data.Committed_completed_date, "/", "-")+" 00:00:00", loc) if data.ID == 529 { fmt.Println(et, bt) } var cnt int var key int b_key := bt.Year()*10000 + int(bt.Month())*100 + bt.Day() e_key := et.Year()*10000 + int(et.Month())*100 + et.Day() key = b_key m := make(map[int]int) sqlstr := fmt.Sprintf(`select [day],[type] FROM [holiday] where [day] >%d `, b_key) fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Info("warn_ma_plan err:", err.Error()) return } for rows.Next() { var day, day_type int if err = rows.Scan(&day, &day_type); err == nil { m[day] = day_type } } rows.Close() if e_key > b_key { for { if key >= e_key { break } bt = bt.Add(time.Hour * 24) key = bt.Year()*10000 + int(bt.Month())*100 + bt.Day() if _, ok := m[key]; ok { //1--假期 2--上班 if m[key] == 1 { } else if m[key] == 2 { cnt++ //fmt.Println(key) } } else { if int(bt.Weekday()) == 0 || int(bt.Weekday()) == 6 { } else { cnt++ //fmt.Println(key) } } } if cnt < 3 { if_warn = 1 return } } else { if_warn = 1 return } } return } func get_done_ma_plan(req get_ma_plan_req) (resp get_ma_plan_resp) { var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var t_data []ma_plan var where_sql string var if_where bool user_data, _ := getUserInfo(req.OpUser) if req.ID != "" { likeStr := "%" + req.ID + "%" if if_where { where_sql += fmt.Sprintf(` and [ID] like '%s'`, likeStr) } else { where_sql += fmt.Sprintf(` [ID] like '%s'`, likeStr) } if_where = true } if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [repair_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[repair_id] like '%s'`, likeStr) if_where = true } } if req.If_done { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } if req.Repair_status != "" { if if_where { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` and [rs] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` [rs] like '%s'`, likeStr) if_where = true } } if req.Regional_head != "" { if if_where { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` and [regional_head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` [regional_head] like '%s'`, likeStr) if_where = true } } if req.Material_status != "" { if if_where { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` and [ms] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` [ms] like '%s'`, likeStr) if_where = true } } if req.Pid != "" { if if_where { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` [p_name] like '%s'`, likeStr) if_where = true } } if user_data.RoleId != 1 && user_data.RoleId != 3 { if if_where { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } else { if req.Location != "" { if if_where { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } } if req.Station != "" { if if_where { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` and [station] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` [station] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [ma_plan]" } else { sqlstr = fmt.Sprintf("select count(ID) from [ma_plan] where %s", where_sql) } fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_ma_plan scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data],[mcn] from [ma_plan] where ID not in (select top %v ID from [ma_plan] order by [acd] desc) order by [acd] desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data],[mcn] from [ma_plan] where %s and ID not in (select top %v ID from [ma_plan] where %s order by [acd] desc) order by [acd] desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d ma_plan var id int var s string var mcn string if err := rdRow.Scan(&id, &s, &mcn); err == nil { json.Unmarshal([]byte(s), &d) d.ID = id d.If_warn = 0 d.Mcn = mcn if len(d.Recv_date) > 2 { d.Recv_date = d.Recv_date[2:] } if len(d.Dispath_date) > 2 { d.Dispath_date = d.Dispath_date[2:] } if len(d.Repair_quotation_date) > 2 { d.Repair_quotation_date = d.Repair_quotation_date[2:] } if len(d.Repair_OK_date) > 2 { d.Repair_OK_date = d.Repair_OK_date[2:] } if len(d.Committed_completed_date) > 2 { d.Committed_completed_date = d.Committed_completed_date[2:10] d.Committed_completed_date = strings.ReplaceAll(d.Committed_completed_date, "-", "/") } if len(d.Actual_completed_date) > 2 { d.Actual_completed_date = d.Actual_completed_date[2:] } if len(d.Material_committed_date) > 2 { d.Material_committed_date = d.Material_committed_date[2:] } if len(d.Date_of_issuance) > 2 { d.Date_of_issuance = d.Date_of_issuance[2:] } if d.Actual_completed_date != "" && d.Committed_completed_date != "" { if d.Actual_completed_date <= d.Committed_completed_date { d.Overdue = "否" } else { d.Overdue = "是" } } else { d.Overdue = "" } if len(d.Plan_data) == 0 { d.Plan_data = []plan_info{} } if len(t_data) == 0 { t_data = append(t_data, d) } else { if d.Repairer == t_data[len(t_data)-1].Repairer { t_data = append(t_data, d) } else { //排序 sort.Slice(t_data, func(i, j int) bool { return t_data[i].Committed_completed_date > t_data[j].Committed_completed_date }) resp.Data = append(resp.Data, t_data...) t_data = []ma_plan{} t_data = append(t_data, d) } } } else { logs.Error("get_ma_plan scan Error", err.Error()) } } exit: //fmt.Println(t_data) if len(t_data) > 0 { sort.Slice(t_data, func(i, j int) bool { return t_data[i].Committed_completed_date > t_data[j].Committed_completed_date }) resp.Data = append(resp.Data, t_data...) } return } func get_not_done_ma_plan(req get_ma_plan_req) (resp get_ma_plan_resp) { logs.Info("get_not_done_ma_plan-------------") recordCount := 0 var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var where_sql string var if_where bool user_data, _ := getUserInfo(req.OpUser) if req.ID != "" { likeStr := "%" + req.ID + "%" if if_where { where_sql += fmt.Sprintf(` and [ID] like '%s'`, likeStr) } else { where_sql += fmt.Sprintf(` [ID] like '%s'`, likeStr) } if_where = true } if req.Rid != "" { if if_where { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(` and [repair_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Rid + "%" where_sql += fmt.Sprintf(`[repair_id] like '%s'`, likeStr) if_where = true } } if req.If_done { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] ='不维修' or [rs]='维修完成')`) if_where = true } } else { if if_where { where_sql += fmt.Sprintf(` and ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } else { where_sql += fmt.Sprintf(` ([if_repair] !='不维修' and [rs]!='维修完成')`) if_where = true } } if req.Repairer != "" { if if_where { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` and [repairer] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repairer + "%" where_sql += fmt.Sprintf(` [repairer] like '%s'`, likeStr) if_where = true } } if req.Repair_status != "" { if if_where { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` and [rs] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Repair_status + "%" where_sql += fmt.Sprintf(` [rs] like '%s'`, likeStr) if_where = true } } if req.Regional_head != "" { if if_where { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` and [regional_head] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Regional_head + "%" where_sql += fmt.Sprintf(` [regional_head] like '%s'`, likeStr) if_where = true } } if req.Material_status != "" { if if_where { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` and [ms] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Material_status + "%" where_sql += fmt.Sprintf(` [ms] like '%s'`, likeStr) if_where = true } } if req.Pid != "" { if if_where { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` and [p_id] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Pid + "%" where_sql += fmt.Sprintf(` [p_id] like '%s'`, likeStr) if_where = true } } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` [p_name] like '%s'`, likeStr) if_where = true } } if user_data.RoleId != 1 && user_data.RoleId != 3 { if if_where { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + user_data.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } else { if req.Location != "" { if if_where { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` and [location] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Location + "%" where_sql += fmt.Sprintf(` [location] like '%s'`, likeStr) if_where = true } } } if req.Station != "" { if if_where { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` and [station] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Station + "%" where_sql += fmt.Sprintf(` [station] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [ma_plan]" } else { sqlstr = fmt.Sprintf("select count(ID) from [ma_plan] where %s", where_sql) } logs.Info("sqlstr---维保计划---", sqlstr) fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_ma_plan scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if req.Sort_field == "" { if req.Repair_status == "确认维修" { if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where ID not in (select top %v ID from [ma_plan] order by ccd asc) order by ccd asc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where %s and ID not in (select top %v ID from [ma_plan] where %s order by ccd asc) order by ccd asc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } } else { if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where ID not in (select top %v ID from [ma_plan] order by ID desc) order by ID desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where %s and ID not in (select top %v ID from [ma_plan] where %s order by ID desc) order by ID desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } } } else { var field string if req.Sort_field == "客户名称" { field = "[customer]" } else if req.Sort_field == "负责人" { field = "[regional_head]" } else if req.Sort_field == "维修人员" { field = "[repairer]" } else if req.Sort_field == "维修状态" { field = "[rs]" } else if req.Sort_field == "承诺完成日期" { field = "[ccd]" } else { field = "ID" } if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where ID not in (select top %v ID from [ma_plan] order by %s desc) order by %s desc", req.Count, (req.Index-1)*req.Count, field, field) } else { sqlstr = fmt.Sprintf("select top %v [ID],[data],[if_warn],[mcn] from [ma_plan] where %s and ID not in (select top %v ID from [ma_plan] where %s order by %s desc) order by %s desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql, field, field) } } logs.Info("sqlstr---维保计划111111111111111---", sqlstr) fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_ma_plan Query err:%v", err.Error())) goto exit } defer rdRow.Close() logs.Info("开始遍历查询结果...") for rdRow.Next() { var d ma_plan var id int var s string var if_warn int var mcn string logs.Info(fmt.Sprintf("开始处理第 %d 条记录", recordCount+1)) if err := rdRow.Scan(&id, &s, &if_warn, &mcn); err == nil { logs.Info(fmt.Sprintf("成功扫描记录 ID: %d, 数据长度: %d", id, len(s))) logs.Info(fmt.Sprintf("开始JSON反序列化, 原始数据前100字符: %.100s", s)) json.Unmarshal([]byte(s), &d) logs.Info(fmt.Sprintf("JSON反序列化完成, ID: %d", id)) d.ID = id d.Mcn = mcn logs.Info(fmt.Sprintf("开始处理日期字段, ID: %d", id)) if len(d.Recv_date) > 2 { d.Recv_date = d.Recv_date[2:] logs.Info(fmt.Sprintf("处理Recv_date: %s", d.Recv_date)) } if len(d.Dispath_date) > 2 { d.Dispath_date = d.Dispath_date[2:] logs.Info(fmt.Sprintf("处理Dispath_date: %s", d.Dispath_date)) } if len(d.Repair_quotation_date) > 2 { d.Repair_quotation_date = d.Repair_quotation_date[2:] logs.Info(fmt.Sprintf("处理Repair_quotation_date: %s", d.Repair_quotation_date)) } if len(d.Repair_OK_date) > 2 { d.Repair_OK_date = d.Repair_OK_date[2:] logs.Info(fmt.Sprintf("处理Repair_OK_date: %s", d.Repair_OK_date)) } if len(d.Committed_completed_date) > 2 { // 修复:确保不会出现切片越界 endIndex := 10 if len(d.Committed_completed_date) < 10 { endIndex = len(d.Committed_completed_date) } d.Committed_completed_date = d.Committed_completed_date[2:endIndex] d.Committed_completed_date = strings.ReplaceAll(d.Committed_completed_date, "-", "/") logs.Info(fmt.Sprintf("处理Committed_completed_date: %s", d.Committed_completed_date)) } if len(d.Actual_completed_date) > 2 { d.Actual_completed_date = d.Actual_completed_date[2:] logs.Info(fmt.Sprintf("处理Actual_completed_date: %s", d.Actual_completed_date)) } if len(d.Material_committed_date) > 2 { d.Material_committed_date = d.Material_committed_date[2:] logs.Info(fmt.Sprintf("处理Material_committed_date: %s", d.Material_committed_date)) } if len(d.Date_of_issuance) > 2 { d.Date_of_issuance = d.Date_of_issuance[2:] logs.Info(fmt.Sprintf("处理Date_of_issuance: %s", d.Date_of_issuance)) } logs.Info(fmt.Sprintf("检查逾期状态, Actual: %s, Committed: %s", d.Actual_completed_date, d.Committed_completed_date)) if d.Actual_completed_date != "" && d.Committed_completed_date != "" { if d.Actual_completed_date <= d.Committed_completed_date { d.Overdue = "否" } else { d.Overdue = "是" } logs.Info(fmt.Sprintf("逾期判断结果: %s", d.Overdue)) } else { d.Overdue = "" logs.Info("逾期判断: 缺少必要日期数据") } if len(d.Plan_data) == 0 { d.Plan_data = []plan_info{} logs.Info(fmt.Sprintf("Plan_data为空, 初始化为空数组")) } else { logs.Info(fmt.Sprintf("Plan_data有 %d 条记录", len(d.Plan_data))) } d.If_warn = if_warn resp.Data = append(resp.Data, d) recordCount++ logs.Info(fmt.Sprintf("成功处理第 %d 条记录, 当前resp.Data长度: %d", recordCount, len(resp.Data))) } else { logs.Error("get_ma_plan scan Error", err.Error()) } } logs.Info(fmt.Sprintf("记录遍历完成, 总共处理了 %d 条记录", recordCount)) logs.Info(fmt.Sprintf("函数返回前, resp.Total: %d, resp.Data长度: %d", resp.Total, len(resp.Data))) exit: return } func get_ma_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("get_ma_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_ma_plan_req var resp get_ma_plan_resp reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) logs.Info("是否在线-----------------", b) if !b { goto exit } logs.Info("req.If_done-----------------", req.If_done) if !req.If_done { //未处理 resp = get_not_done_ma_plan(req) } else { resp = get_done_ma_plan(req) } exit: logs.Info("resp-----------------", resp) jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("get_ma_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func import_ma_temp_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("import_ma_temp_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var flag int var reqdata []byte var req import_ma_temp_plan_Req var resp CommonResp var b bool ma_temp_plan_lock.Lock() flag = ma_temp_plan_lock_n ma_temp_plan_lock.Unlock() if flag == 1 { resp.Ret = 1 goto exit } else { ma_temp_plan_lock.Lock() ma_temp_plan_lock_n = 1 ma_temp_plan_lock.Unlock() } reqdata, _ = ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b = checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if req.OpUser == "王真" || req.OpUser == "刘世界" || req.OpUser == "李俊杉" { } else { resp.Ret = -1 goto exit } for i := 0; i < len(req.Plan); i++ { var id int sqlstr := fmt.Sprintf(`SELECT ID from [ma_temp_plan] where [return_task]='%s' and [p_id]='%s' and [p_serial]='%s' `, req.Plan[i].Return_task, req.Plan[i].P_id, req.Plan[i].P_serial) //fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf(`%s err:%s`, sqlstr, err.Error())) resp.Ret = -1 goto exit } for rows.Next() { if err := rows.Scan(&id); err != nil { logs.Error(fmt.Sprintf(`%s scan err:%s`, sqlstr, err.Error())) resp.Ret = -1 goto exit } } rows.Close() if id > 0 && req.Plan[i].Repair_type != "天工" { resp.Ret = 2 resp.Context = fmt.Sprintf(`维修任务(%s,%s,%s)已存在`, req.Plan[i].Return_task, req.Plan[i].P_id, req.Plan[i].P_serial) goto exit } req.Plan[i].Recv_date = strings.ReplaceAll(req.Plan[i].Recv_date, "-", "/") t := strings.Split(req.Plan[i].Recv_date, "/") if len(t) == 3 { month, _ := strconv.Atoi(t[1]) day, _ := strconv.Atoi(t[2]) req.Plan[i].Recv_date = fmt.Sprintf(`%s/%02d/%02d`, t[0], month, day) } var if_e1 int if req.Plan[i].If_e1_str == "是" { req.Plan[i].If_e1 = true if_e1 = 1 } jdata, _ := json.Marshal(req.Plan[i]) sqlstr1 := fmt.Sprintf(`INSERT INTO [ma_temp_plan] ([data] ,[return_task] ,[head] ,[p_id] ,[p_name] ,[p_serial] ,[repairer] ,[rt] ,[if_do] ,[state] ,[if_e1]) VALUES ('%s' ,'%s' ,'%s' ,'%s' ,'%s' ,'%s' ,'%s' ,'%s' ,%d ,'%s',%d)`, string(jdata), req.Plan[i].Return_task, req.Plan[i].Head, req.Plan[i].P_id, req.Plan[i].P_name, req.Plan[i].P_serial, req.Plan[i].Repairer, req.Plan[i].Repair_type, 0, "", if_e1) _, err = sqlConn.Exec(sqlstr1) if err != nil { logs.Info("import_ma_temp_plan Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: if resp.Ret != 1 { ma_temp_plan_lock.Lock() ma_temp_plan_lock_n = 0 ma_temp_plan_lock.Unlock() } jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("import_ma_temp_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func import_ma_plan(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("import_ma_plan recv req begin", time.Now().Format("2006-01-02 15:04:05")) var flag int var reqdata []byte var req import_ma_plan_Req var resp CommonResp var b bool var user_data useInfo ma_plan_lock.Lock() flag = ma_plan_lock_n ma_plan_lock.Unlock() if flag == 1 { resp.Ret = 1 goto exit } else { ma_plan_lock.Lock() ma_plan_lock_n = 1 ma_plan_lock.Unlock() } reqdata, _ = ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b = checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } user_data, _ = getUserInfo(req.OpUser) for i := 0; i < len(req.Plan); i++ { var id int sqlstr := fmt.Sprintf(`SELECT ID from ma_plan where [repair_id]='%s'`, req.Plan[i].Repair_id) //fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf(`%s err:%s`, sqlstr, err.Error())) resp.Ret = -1 goto exit } for rows.Next() { if err := rows.Scan(&id); err != nil { logs.Error(fmt.Sprintf(`%s scan err:%s`, sqlstr, err.Error())) resp.Ret = -1 goto exit } } rows.Close() if id > 0 { resp.Ret = 2 resp.Context = fmt.Sprintf(`维修订单号(%s)已存在`, req.Plan[i].Repair_id) goto exit } req.Plan[i].Recv_date = strings.ReplaceAll(req.Plan[i].Recv_date, "-", "/") t := strings.Split(req.Plan[i].Recv_date, "/") if len(t) == 3 { month, _ := strconv.Atoi(t[1]) day, _ := strconv.Atoi(t[2]) req.Plan[i].Recv_date = fmt.Sprintf(`%s/%02d/%02d`, t[0], month, day) } req.Plan[i].Dispath_date = strings.ReplaceAll(req.Plan[i].Dispath_date, "-", "/") t = strings.Split(req.Plan[i].Dispath_date, "/") if len(t) == 3 { month, _ := strconv.Atoi(t[1]) day, _ := strconv.Atoi(t[2]) req.Plan[i].Dispath_date = fmt.Sprintf(`%s/%02d/%02d`, t[0], month, day) } jdata, _ := json.Marshal(req.Plan[i]) if id == 0 { sqlstr = fmt.Sprintf(`INSERT INTO [ma_plan] ([data],[repair_id],[p_id],[p_name],[if_repair],[rs] ,[repairer],[regional_head],[ms],[customer],[ccd],[location] ,[if_warn],[station],[mcn]) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,'%s','%s')`, string(jdata), req.Plan[i].Repair_id, req.Plan[i].P_id, req.Plan[i].P_name, req.Plan[i].If_repair, req.Plan[i].Repair_status, req.Plan[i].Repairer, req.Plan[i].Regional_head, req.Plan[i].Material_status, req.Plan[i].Customer, req.Plan[i].Committed_completed_date, user_data.Location, 0, req.Plan[i].Station, req.Plan[i].Mcn) } _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("import_ma_plan Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: if resp.Ret != 1 { ma_plan_lock.Lock() ma_plan_lock_n = 0 ma_plan_lock.Unlock() } jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("import_ma_plan recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func del_process(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("del_process recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var resp del_p_resp reqdata, _ := ioutil.ReadAll(request.Body) var req del_process_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } for i := 0; i < len(req.Ids); i++ { sqlstr := fmt.Sprintf(`DELETE FROM [process] where ID=%d`, req.Ids[i].ID) fmt.Println(sqlstr) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("del_process Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("del_process recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func update_process(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("update_process recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp post_p_resp var jdata []byte reqdata, _ := ioutil.ReadAll(request.Body) var req update_process_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if req.Data.ID == 0 { logs.Info("update_process sap req id ==0") resp.Ret = -1 goto exit } sqlstr = fmt.Sprintf(`UPDATE [process] SET [process_name] = '%s',[process_t] = '%s' WHERE ID=%d`, req.Data.Process_name, req.Data.Process_t, req.Data.ID) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("update_process Exec Error:", err.Error()) resp.Ret = -1 goto exit } resp.Ret = 0 exit: jdata, _ = json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("update_process recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func import_process(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("import_process recv req begin", time.Now().Format("2006-01-02 15:04:05")) var p_flag int var reqdata []byte var req import_process_req var resp import_p_resp var b bool process_lock.Lock() p_flag = process_lock_n process_lock.Unlock() if p_flag == 1 { resp.Ret = 1 goto exit } else { process_lock.Lock() process_lock_n = 1 process_lock.Unlock() } reqdata, _ = ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b = checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } for i := 0; i < len(req.Data); i++ { var id int sqlstr := fmt.Sprintf(`SELECT ID from process where p_id='%s' and process_name='%s'`, req.Data[i].P_id, req.Data[i].Process_name) //fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf(`SELECT ID from process where p_id='%s' err:%s`, req.Data[i].P_id, err.Error())) resp.Ret = -1 goto exit } for rows.Next() { if err := rows.Scan(&id); err != nil { logs.Error(fmt.Sprintf(`SELECT ID from process where p_id='%s' scan err:%s`, req.Data[i].P_id, err.Error())) resp.Ret = -1 goto exit } } rows.Close() if id == 0 { sqlstr = fmt.Sprintf(`INSERT INTO [process] ([p_id],[p_name] ,[process_name],[process_t]) VALUES ('%s','%s','%s','%s')`, req.Data[i].P_id, req.Data[i].P_name, req.Data[i].Process_name, req.Data[i].Process_t) } else { sqlstr = fmt.Sprintf(`UPDATE [process] SET [p_id] = '%s' ,[p_name]='%s' ,[process_name] = '%s' ,[process_t]= '%s' WHERE ID=%d`, req.Data[i].P_id, req.Data[i].P_name, req.Data[i].Process_name, req.Data[i].Process_t, id) } _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("import_process Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: if resp.Ret != 1 { process_lock.Lock() process_lock_n = 0 process_lock.Unlock() } jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("import_process recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_process(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("get_process recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_process_req var resp get_process_resp var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.P_id != "" { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(`[p_id] like '%s'`, likeStr) if_where = true } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(`[p_name] like '%s'`, likeStr) if_where = true } } if req.Process_name != "" { if if_where { likeStr := "%" + req.Process_name + "%" where_sql += fmt.Sprintf(` and [process_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.Process_name + "%" where_sql += fmt.Sprintf(`[process_name] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [process]" } else { sqlstr = fmt.Sprintf("select count(ID) from [process] where %s", where_sql) } fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_process query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_process scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[p_id],[p_name],[process_name],[process_t] from [process] where ID not in (select top %v ID from [process] order by ID desc) order by ID desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[p_id],[p_name],[process_name],[process_t] from [process] where %s and ID not in (select top %v ID from [process] where %s order by ID desc) order by ID desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_process Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d process_info if err := rdRow.Scan(&d.ID, &d.P_id, &d.P_name, &d.Process_name, &d.Process_t); err == nil { resp.Data = append(resp.Data, d) } else { logs.Error("get_process scan Error", err.Error()) } } exit: jdata, _ := json.Marshal(resp) //fmt.Println(string(jdata)) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("get_process recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func download_file(rw http.ResponseWriter, r *http.Request) { //获取请求参数 /*var req download_file_req reqdata, _ := ioutil.ReadAll(r.Body) json.Unmarshal(reqdata, &req) fn := req.Filename*/ filename := r.FormValue("id") base_file_path := modelePath + "/file/" if filename != "" { //设置响应头 header := rw.Header() header.Add("Content-Type", "application/octet-stream") //header.Add("Content-Disposition", "attachment;filename="+fn) //使用ioutil包读取文件 filepath := base_file_path + filename fmt.Println(filepath) b, _ := ioutil.ReadFile(filepath) //写入到响应流中 rw.Write(b) } } func export_sap(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("export_sap recv req begin", time.Now().Format("2006-01-02 15:04:05")) var csv_data [][]string var filename string filename = fmt.Sprintf(`./file/%v.csv`, beginTime) f, err := os.Create(filename) if err != nil { fmt.Println(err) return } defer f.Close() var req get_p_Req var resp download_file_Resp var data []p_sap var sqlstr string var rdRow *sql.Rows var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.P_id != "" { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(`[p_id] like '%s'`, likeStr) if_where = true } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(`[p_name] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = fmt.Sprintf("select [ID],[p_id],[p_name] from [sap] order by ID asc") } else { sqlstr = fmt.Sprintf("select [ID],[p_id],[p_name] from [sap] where %s order by ID asc", where_sql) } //fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("export_sap Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d p_sap if err := rdRow.Scan(&d.ID, &d.P_id, &d.P_name); err == nil { data = append(data, d) } else { logs.Error("export_sap scan Error", err.Error()) } } csv_data = append(csv_data, []string{"产品编号", "产品名称"}) for i := 0; i < len(data); i++ { v := data[i] csv_data = append(csv_data, []string{v.P_id, v.P_name}) } exit: f.WriteString("\xEF\xBB\xBF") // 写入一个UTF-8 BOM 防止中文乱码 w := csv.NewWriter(f) //创建一个新的写入文件流 w.WriteAll(csv_data) w.Flush() resp.FileId = fmt.Sprintf(`%v.csv`, beginTime) jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("export_sap recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func import_p(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("import_p recv req begin", time.Now().Format("2006-01-02 15:04:05")) var p_flag int var reqdata []byte var req import_p_Req var resp import_p_resp var b bool p_lock.Lock() p_flag = p_import_f p_lock.Unlock() if p_flag == 1 { resp.Ret = 1 goto exit } else { p_lock.Lock() p_import_f = 1 p_lock.Unlock() } reqdata, _ = ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b = checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } for i := 0; i < len(req.Data); i++ { var id int sqlstr := fmt.Sprintf(`SELECT ID from sap where p_id='%s'`, req.Data[i].P_id) //fmt.Println(sqlstr) rows, err := sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf(`SELECT ID from sap where p_id='%s' err:%s`, req.Data[i].P_id, err.Error())) resp.Ret = -1 goto exit } for rows.Next() { if err := rows.Scan(&id); err != nil { logs.Error(fmt.Sprintf(`SELECT ID from sap where p_id='%s' scan err:%s`, req.Data[i].P_id, err.Error())) resp.Ret = -1 goto exit } } rows.Close() if id == 0 { sqlstr = fmt.Sprintf(`INSERT INTO [sap] ([p_id],[p_name]) VALUES ('%s','%s')`, req.Data[i].P_id, req.Data[i].P_name) } else { sqlstr = fmt.Sprintf(`UPDATE [dbo].[sap] SET [p_id] = '%s' ,[p_name] = '%s' WHERE ID=%d`, req.Data[i].P_id, req.Data[i].P_name, id) } _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("import_p Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: if resp.Ret != 1 { p_lock.Lock() p_import_f = 0 p_lock.Unlock() } jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("import_p recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func del_p(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("del_p recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var resp del_p_resp reqdata, _ := ioutil.ReadAll(request.Body) var req del_p_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } for i := 0; i < len(req.Ids); i++ { sqlstr := fmt.Sprintf(`DELETE FROM [sap] where ID=%d`, req.Ids[i].ID) fmt.Println(sqlstr) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("del_p Exec Error:", err.Error()) resp.Ret = -1 goto exit } } resp.Ret = 0 exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("del_p recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func post_p(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("post_p recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var sqlstr string var resp post_p_resp var jdata []byte reqdata, _ := ioutil.ReadAll(request.Body) var req post_p_req json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if req.OperType == 2 && req.Id == 0 { logs.Info("post_p sap req id ==0") resp.Ret = -1 goto exit } //add op check user for same info if req.OperType == 1 { var cnt int row, err := sqlConn.Query(fmt.Sprintf(`select ID from [sap] where [p_id] = '%s'`, req.P_id)) if err != nil { logs.Error(fmt.Sprintf("post_p get sap cnt err:%v", err.Error())) resp.Ret = -1 goto exit } for row.Next() { cnt++ } row.Close() if cnt > 0 { resp.Ret = 1 goto exit } } if req.OperType == 1 { //add sqlstr = fmt.Sprintf(`INSERT INTO [sap] ([p_id],[p_name]) VALUES ('%s','%s')`, req.P_id, req.P_name) } else if req.OperType == 2 { //update sqlstr = fmt.Sprintf(`UPDATE [sap] SET [p_id] = '%s',[p_name] = '%s' WHERE ID=%d`, req.P_id, req.P_name, req.Id) } else { resp.Ret = -1 goto exit } fmt.Println(sqlstr) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("post_p Exec Error:", err.Error()) resp.Ret = -1 goto exit } resp.Ret = 0 exit: jdata, _ = json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("post_p recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_p(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("get_p recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req get_p_Req var resp get_p_Resp var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error var where_sql string var if_where bool reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.P_id != "" { likeStr := "%" + req.P_id + "%" where_sql += fmt.Sprintf(`[p_id] like '%s'`, likeStr) if_where = true } if req.P_name != "" { if if_where { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(` and [p_name] like '%s'`, likeStr) if_where = true } else { likeStr := "%" + req.P_name + "%" where_sql += fmt.Sprintf(`[p_name] like '%s'`, likeStr) if_where = true } } if !if_where { sqlstr = "select count(ID) from [sap]" } else { sqlstr = fmt.Sprintf("select count(ID) from [sap] where %s", where_sql) } //fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_p query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("get_p scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if !if_where { sqlstr = fmt.Sprintf("select top %v [ID],[p_id],[p_name] from [sap] where ID not in (select top %v ID from [sap] order by ID desc) order by ID desc", req.Count, (req.Index-1)*req.Count) } else { sqlstr = fmt.Sprintf("select top %v [ID],[p_id],[p_name] from [sap] where %s and ID not in (select top %v ID from [sap] where %s order by ID desc) order by ID desc", req.Count, where_sql, (req.Index-1)*req.Count, where_sql) } //fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("get_p Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d p_sap if err := rdRow.Scan(&d.ID, &d.P_id, &d.P_name); err == nil { resp.Data = append(resp.Data, d) } else { logs.Error("get_p scan Error", err.Error()) } } exit: jdata, _ := json.Marshal(resp) //fmt.Println(string(jdata)) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("get_p recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func get_time_ex(search_time string) (st []string, b bool) { t := strings.Split(search_time, "-") if len(t) == 2 { t0 := strings.Split(t[0], "/") if len(t0) == 3 { year, _ := strconv.Atoi(t0[0]) month, _ := strconv.Atoi(t0[1]) day, _ := strconv.Atoi(t0[2]) t0 := fmt.Sprintf(`20%02d/%02d/%02d`, year, month, day) st = append(st, t0) } else { b = true } t1 := strings.Split(t[1], "/") if len(t1) == 3 { year, _ := strconv.Atoi(t1[0]) month, _ := strconv.Atoi(t1[1]) day, _ := strconv.Atoi(t1[2]) t0 := fmt.Sprintf(`20%02d/%02d/%02d`, year, month, day) st = append(st, t0) } else { b = true } } else if len(t) == 1 { tt := strings.Split(t[0], "/") if len(tt) == 3 { year, _ := strconv.Atoi(tt[0]) month, _ := strconv.Atoi(tt[1]) day, _ := strconv.Atoi(tt[2]) bt := fmt.Sprintf(`20%02d/%02d/%02d`, year, month, day) et := fmt.Sprintf(`20%02d/%02d/%02d`, year, month, day) st = append(st, bt) st = append(st, et) } else { b = true } } if b { st = []string{} } return } func get_time(search_time string) (whereSql string) { t := strings.Split(search_time, "-") if len(t) == 2 { var if_where bool t0 := strings.Split(t[0], "/") if len(t0) == 2 { year, _ := strconv.Atoi(t0[0]) month, _ := strconv.Atoi(t0[1]) t := (year+2000)*100 + month whereSql += fmt.Sprintf(` [month] >= %d `, t) if_where = true } else if len(t0) == 3 { year, _ := strconv.Atoi(t0[0]) month, _ := strconv.Atoi(t0[1]) day, _ := strconv.Atoi(t0[2]) t := fmt.Sprintf(`20%02d-%02d-%02d 00:00:00`, year, month, day) whereSql += fmt.Sprintf(` [time]>='%s' `, t) if_where = true } t1 := strings.Split(t[1], "/") if len(t1) == 2 { year, _ := strconv.Atoi(t1[0]) month, _ := strconv.Atoi(t1[1]) t := (year+2000)*100 + month if if_where { whereSql += fmt.Sprintf(` and [month] <= %d `, t) } else { whereSql += fmt.Sprintf(` [month] <= %d `, t) } } else if len(t1) == 3 { year, _ := strconv.Atoi(t1[0]) month, _ := strconv.Atoi(t1[1]) day, _ := strconv.Atoi(t1[2]) t := fmt.Sprintf(`20%02d-%02d-%02d 23:59:59`, year, month, day) if if_where { whereSql += fmt.Sprintf(` and [time]<='%s' `, t) } else { whereSql += fmt.Sprintf(` [time]<='%s' `, t) } if_where = true } } else if len(t) == 1 { tt := strings.Split(t[0], "/") if len(tt) == 2 { year, _ := strconv.Atoi(tt[0]) month, _ := strconv.Atoi(tt[1]) search_month := (year+2000)*100 + month whereSql = fmt.Sprintf(` [month] = %d`, search_month) } else if len(tt) == 3 { year, _ := strconv.Atoi(tt[0]) month, _ := strconv.Atoi(tt[1]) day, _ := strconv.Atoi(tt[2]) bt := fmt.Sprintf(`20%02d-%02d-%02d 00:00:00`, year, month, day) et := fmt.Sprintf(`20%02d-%02d-%02d 23:59:59`, year, month, day) whereSql = fmt.Sprintf(` [time]>='%s' and [time] <='%s' `, bt, et) } } return } //用户管理相关接口 func getUserNames(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("getUserNames recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req getUserNamesReq var resp getUserNamesResp var sqlstr string var rdRow *sql.Rows var err error reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkUserIfOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } sqlstr = fmt.Sprintf("select [username] from [user] order by ID asc") fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("getUserNames Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var name string var v usernams if err := rdRow.Scan(&name); err == nil { v.Label = name v.Value = name resp.Names = append(resp.Names, v) } else { logs.Error("getUserNames scan Error", err.Error()) } } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("getUserNames recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func checkIsSysUserOnline(username string, op_uuid string) bool { deesUserStatMaplck.RLock() if v, ok := deesUserStatMap[username]; ok { deesUserStatMaplck.RUnlock() v.RLock() refreshTime := v.RefreshTime userrole := v.UserRole uuid := v.Uuid v.RUnlock() if int64(time.Since(refreshTime).Seconds()) > int64(refreshSpan+1) { return false } if op_uuid != uuid { return false } if userrole != 1 { return false } return true } else { deesUserStatMaplck.RUnlock() return false } } func postUser(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("postUser recv req begin", time.Now().Format("2006-01-02 15:04:05")) var roleid int var err error var sqlstr string var resp PostUserResp var departmentid int reqdata, _ := ioutil.ReadAll(request.Body) var req PostUserReq json.Unmarshal(reqdata, &req) b := checkIsSysUserOnline(req.OpUser, req.OpUserUuid) if !b { resp.Ret = -1 goto exit } if (req.OperType == 2 || req.OperType == 3) && req.Id == 0 { logs.Info("update userinfo req id ==0") resp.Ret = -1 goto exit } //add op check user for same username if req.OperType == 1 { var cnt int row, err := sqlConn.Query(fmt.Sprintf(`select ID from [user] where [username] = '%s'`, req.Username)) if err != nil { logs.Error(fmt.Sprintf("postUser get user cnt err:%v", err.Error())) resp.Ret = -1 goto exit } for row.Next() { cnt++ } row.Close() if cnt > 0 { resp.Ret = 1 goto exit } } roleid = 2 if req.Role == "管理员" { roleid = 1 } else if req.Role == "普通用户" { roleid = 2 } else { roleid = 3 } //1生产 2质检 3供应链 4交付 5研发 6 保温瓶 /*if req.Department == "生产" { departmentid = 1 } else if req.Department == "质检" { departmentid = 2 } else if req.Department == "供应链" { departmentid = 3 } else if req.Department == "交付" { departmentid = 4 } else if req.Department == "研发" { departmentid = 5 } else if req.Department == "保温瓶" { departmentid = 6 } else if req.Department == "技术" { departmentid = 7 } else { if req.OperType != 3 { goto exit } }*/ if req.OperType == 1 { //add //opType = 10001 //opContent = fmt.Sprintf(`新增用户%s`, req.Username) sqlstr = fmt.Sprintf(`INSERT INTO [user] ([username],[password],[role_name],[role_id],[department],[department_id],[state],[location]) VALUES ('%s','%s','%s',%d,'%s',%d,'%s','%s')`, req.Username, req.Password, req.Role, roleid, req.Department, departmentid, "", req.Location) } else if req.OperType == 2 { //update //opType = 10002 //opContent = fmt.Sprintf(`修改用户%s`, req.Username) sqlstr = fmt.Sprintf(`UPDATE [user] SET [username] = '%s',[password] = '%s',[role_name] = '%s',[role_id] = %d,[department]='%s',[department_id]=%d ,[state]='%s',[location]='%s' WHERE ID=%d`, req.Username, req.Password, req.Role, roleid, req.Department, departmentid, "", req.Location, req.Id) } else if req.OperType == 3 { //opType = 10003 // opContent = fmt.Sprintf(`删除用户%s`, req.Username) sqlstr = fmt.Sprintf(`DELETE FROM [user] WHERE ID=%d`, req.Id) } else { resp.Ret = -1 goto exit } fmt.Println(sqlstr) _, err = sqlConn.Exec(sqlstr) if err != nil { logs.Info("postUser Exec Error:", err.Error()) resp.Ret = -1 goto exit } resp.Ret = 0 exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("postUser recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func getUsers(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("getUsers recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req getUsersReq var resp GetUsersResp var sqlstr string var rcnt int var cntRow *sql.Rows var rdRow *sql.Rows var err error reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) b := checkIsSysUserOnline(req.OpUser, req.OpUserUuid) if !b { goto exit } if req.Id == "" { sqlstr = "select count(ID) from [user] " } else { likeStr := "%" + req.Id + "%" sqlstr = fmt.Sprintf("select count(ID) from [user] where [username] like '%s'", likeStr) } fmt.Println(sqlstr) cntRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("getUsers query %s err:%v", sqlstr, err.Error())) goto exit } defer cntRow.Close() for cntRow.Next() { if err = cntRow.Scan(&rcnt); err != nil { logs.Error(fmt.Sprintf("getUsers scan %s err:%v", sqlstr, err.Error())) goto exit } } resp.Total = rcnt if req.Id == "" { sqlstr = fmt.Sprintf("select top %v [ID],[username],[password],[role_name],[role_id],[department] ,[state],[location] from [user] where ID not in (select top %v ID from [user] order by ID asc) order by ID asc", req.Count, (req.Index-1)*req.Count) } else { likeStr := "%" + req.Id + "%" sqlstr = fmt.Sprintf("select top %v [ID],[username],[password],[role_name],[role_id],[department] ,[state],[location] from [user] where username like '%s' and ID not in (select top %v ID from [user] where username like '%s' order by ID asc) order by ID asc", req.Count, likeStr, (req.Index-1)*req.Count, likeStr) } fmt.Println(sqlstr) rdRow, err = sqlConn.Query(sqlstr) if err != nil { logs.Error(fmt.Sprintf("getUsers Query err:%v", err.Error())) goto exit } defer rdRow.Close() for rdRow.Next() { var d useInfo if err := rdRow.Scan(&d.Userid, &d.Username, &d.Password, &d.RoleName, &d.RoleId, &d.Department, &d.State, &d.Location); err == nil { resp.Data = append(resp.Data, d) } else { logs.Error("getUsers scan Error", err.Error()) } } exit: jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("getUsers recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func checkUserIfOnline(username string, uuid string) bool { deesUserStatMaplck.RLock() if v, ok := deesUserStatMap[username]; ok { deesUserStatMaplck.RUnlock() v.RLock() refreshTime := v.RefreshTime lastuuid := v.Uuid v.RUnlock() if uuid != lastuuid { return false } if int64(time.Since(refreshTime).Seconds()) > int64(refreshSpan+1) { return false } return true } else { deesUserStatMaplck.RUnlock() return false } } func getUserInfo(username string) (d useInfo, err error) { var sql string sql = fmt.Sprintf("select [username],[password],[role_name],[role_id],[department],[department_id] ,[location] from [user] where [username] = '%s'", username) row, err := sqlConn.Query(sql) if err != nil { logs.Info("getUserInfo Query Error", err.Error()) return } for row.Next() { if err = row.Scan(&d.Username, &d.Password, &d.RoleName, &d.RoleId, &d.Department, &d.DepartmentId, &d.Location); err == nil { if d.Location == "" { d.Location = "睿控维保" } } else { logs.Info("Query Error", err.Error()) } } row.Close() return } func get_all_user() (resp []useInfo, err error) { var sql string sql = fmt.Sprintf("select [username],[password],[role_name],[role_id],[department],[department_id],[location],[state] from [user] ") row, err := sqlConn.Query(sql) if err != nil { logs.Info("get_all_user Query Error", err.Error()) return } for row.Next() { var d useInfo if err = row.Scan(&d.Username, &d.Password, &d.RoleName, &d.RoleId, &d.Department, &d.DepartmentId, &d.Location, &d.State); err == nil { resp = append(resp, d) } else { logs.Info("get_all_user scan Error", err.Error()) } } row.Close() return } // 菜单 func getMenu(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("getMenu recv req begin", time.Now().Format("2006-01-02 15:04:05")) var err error var req GetMenuReq var resp GetMenuResp var menu GetMenuRespData var mItem menuItem var userInfo useInfo reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) ifOnline := checkUserIfOnline(req.UserName, req.Uuid) if !ifOnline { goto exit } userInfo, err = getUserInfo(req.UserName) if err != nil { goto exit } menu.Title = "计划管理" menu.Index = "2" //menu.Class = "el-icon-s-data" //menu.SvgData.First = "M992.256 960 960 960 960 576.192C960 540.032 931.072 512 895.424 512l-126.784 0C732.352 512 704 540.736 704 576.192L704 960l-64 0L640 64.448C640 28.736 611.072 0 575.424 0L448.576 0C412.352 0 384 28.864 384 64.448L384 960 320 960 320 319.744C320 284.48 291.072 256 255.424 256L128.576 256C92.352 256 64 284.544 64 319.744L64 960 31.744 960C14.464 960 0 974.336 0 992 0 1009.152 14.208 1024 31.744 1024l960.448 0C1009.536 1024 1024 1009.664 1024 992 1024 974.848 1009.792 960 992.256 960z" menu.SvgData.First = "M955.3 77.1H798.1V59.3c0-16.6-13.4-30-30-30s-30 13.4-30 30v17.8H278.3V59.3c0-16.6-13.4-30-30-30s-30 13.4-30 30v17.8H69.2c-22.1 0-40 17.9-40 40v837.1c0 22.1 17.9 40 40 40h886.1c22.1 0 40-17.9 40-40V117.1c0-22.1-17.9-40-40-40z m-29.9 847.1H99.2V376.4h826.2v547.8z m0-607.8H99.2V137.1h119.1v17.8c0 16.6 13.4 30 30 30s30-13.4 30-30v-17.8h459.9v17.8c0 16.6 13.4 30 30 30s30-13.4 30-30v-17.8h127.2v179.3z" menu.SvgData.Second = "M470.4 551.3h321.4c18.2 0 33-14.8 33-33s-14.8-33-33-33H470.4c-18.2 0-33 14.8-33 33s14.8 33 33 33zM210.3 562.6l64.8 64.8 110.8-110.8c9.5-9.5 9.5-25 0-34.5s-25-9.5-34.5 0l-76.3 76.3-30.3-30.3c-9.5-9.5-25-9.5-34.5 0s-9.5 25 0 34.5zM470.4 785h321.4c18.2 0 33-14.8 33-33s-14.8-33-33-33H470.4c-18.2 0-33 14.8-33 33s14.8 33 33 33zM316.8 719.2h-67.9c-18.2 0-33 14.8-33 33s14.8 33 33 33h67.9c18.2 0 33-14.8 33-33s-14.8-33-33-33z" menu.Key = menu.Index mItem.Index = "/scb" mItem.Title = "维保计划" mItem.Key = mItem.Index menu.Items = append(menu.Items, mItem) if userInfo.RoleId == 1 || req.UserName == "霍涛" { mItem.Index = "/mr" mItem.Title = "维保审核" mItem.Key = mItem.Index menu.Items = append(menu.Items, mItem) } mItem.Index = "/tw" mItem.Title = "临时工作" mItem.Key = mItem.Index menu.Items = append(menu.Items, mItem) resp.MenuData = append(resp.MenuData, menu) if userInfo.RoleId == 1 { menu.Title = "用户管理" menu.Index = "1" //menu.Class = "el-icon-user" menu.SvgData.First = "M955.456 765.12a41.792 41.792 0 0 0-34.368-32.64 8.256 8.256 0 0 1-6.08-3.904 8.256 8.256 0 0 1-0.384-7.104 41.856 41.856 0 0 0-11.136-45.696 165.76 165.76 0 0 0-60.096-34.56 41.728 41.728 0 0 0-45.056 13.12c-1.216 1.472-3.328 3.264-6.336 3.264s-5.12-1.728-6.336-3.264a41.6 41.6 0 0 0-45.056-13.184 166.4 166.4 0 0 0-60.224 34.624 41.728 41.728 0 0 0-11.136 45.632 8.064 8.064 0 0 1-0.384 7.104 8.256 8.256 0 0 1-6.08 3.904 41.728 41.728 0 0 0-34.304 32.64 166.72 166.72 0 0 0 0 68.928c3.584 16.96 17.28 29.952 34.432 32.64 1.92 0.32 4.544 1.216 6.08 3.904a8.256 8.256 0 0 1 0.384 7.104 41.6 41.6 0 0 0 11.136 45.696c17.344 15.616 37.568 27.2 60.096 34.56a41.728 41.728 0 0 0 45.056-13.056c1.216-1.472 3.328-3.264 6.336-3.264s5.12 1.728 6.336 3.264a41.728 41.728 0 0 0 45.056 13.12c22.528-7.296 42.688-18.88 59.968-34.432 12.8-11.52 17.216-29.696 11.136-45.76a8.192 8.192 0 0 1 0.384-7.168 8.256 8.256 0 0 1 6.08-3.904 41.728 41.728 0 0 0 34.496-32.64 166.144 166.144 0 0 0 0-68.928z m-40.832 60.288a49.92 49.92 0 0 0-35.904 24.256 49.92 49.92 0 0 0-3.264 42.752 123.584 123.584 0 0 1-44.992 25.792 49.92 49.92 0 0 0-38.528-18.432 49.664 49.664 0 0 0-38.528 18.432 125.44 125.44 0 0 1-45.056-25.856 49.728 49.728 0 0 0-39.04-66.944 123.712 123.712 0 0 1 0-51.776 49.92 49.92 0 0 0 35.648-24.256 49.92 49.92 0 0 0 3.328-42.624c12.928-11.648 28.224-20.416 45.12-25.92a49.92 49.92 0 0 0 38.528 18.432c15.68 0 29.44-7.296 38.592-18.432 16.896 5.504 32.128 14.272 45.056 25.856a49.728 49.728 0 0 0 39.04 66.944 122.624 122.624 0 0 1 0 51.776z" menu.SvgData.Second = "M791.936 736.96c-34.496 0-62.592 28.096-62.592 62.592s28.096 62.592 62.592 62.592 62.592-28.096 62.592-62.592-28.096-62.592-62.592-62.592z m0 83.456a20.864 20.864 0 1 1 0-41.728 20.864 20.864 0 0 1 0 41.728zM670.336 588.736c0.256 0.128 0.512 0.064 0.768 0.128l1.472 0.512 0.064-0.256a35.392 35.392 0 0 0 22.912-67.008l-0.384-0.064c-8.512-3.392-17.472-6.144-26.304-9.088a247.424 247.424 0 0 0 104.192-201.472 248.192 248.192 0 1 0-496.384 0c0 83.072 41.216 156.224 103.936 201.28-175.68 57.984-304.832 218.368-315.776 410.688 0 0.128 0.256 0.192 0.256 0.256a35.328 35.328 0 0 0 68.608 13.504c1.344-3.456 1.536-7.04 1.728-10.56l0.256-0.192a390.016 390.016 0 0 1 389.248-366.336c51.264 0 100.032 10.176 144.832 28.16 0.192 0.192 0.32 0.384 0.576 0.448zM347.648 311.424a177.28 177.28 0 1 1 354.56 0 177.28 177.28 0 0 1-354.56 0z" menu.Key = menu.Index menu.Items = []menuItem{} mItem.Index = "/user" mItem.Title = "用户信息" mItem.Key = mItem.Index menu.Items = append(menu.Items, mItem) resp.MenuData = append(resp.MenuData, menu) } if userInfo.RoleId == 1 { menu.Title = "数据管理" menu.Index = "3" //menu.Class = "el-icon-user" menu.SvgData.First = "M64 192V896h896V192H64zM0 128h1024v832H0V128z" menu.SvgData.Second = "M64 384h896v64H64zM64 640h896v64H64zM128 256h192v64H128zM128 512h192v64H128zM128 768h192v64H128z" menu.Key = menu.Index menu.Items = []menuItem{} /*mItem.Index = "/base_data" mItem.Title = "产品信息" mItem.Key = mItem.Index menu.Items = append(menu.Items, mItem) */ mItem.Index = "/pf" mItem.Title = "工序工时" mItem.Key = mItem.Index menu.Items = append(menu.Items, mItem) mItem.Index = "/rsm" mItem.Title = "维修状态" mItem.Key = mItem.Index menu.Items = append(menu.Items, mItem) resp.MenuData = append(resp.MenuData, menu) } exit: jdata, _ := json.Marshal(resp) _, err = response.Write(jdata) if err != nil { logs.Error("getMenu:", err.Error()) } endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("getMenu recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func checkFileExpired() { t := time.NewTicker(time.Minute * 3) for { select { case <-t.C: modelePath, err := ModulePath.GetModuleCurrentPath() if err != nil { logs.Error("GetModuleCurrentPath() failed err:", err.Error()) return } fileInfoList, err := ioutil.ReadDir(modelePath + "/file") if err != nil { logs.Error("ioutil.ReadDir err:", err.Error()) } for i := range fileInfoList { index := strings.Index(fileInfoList[i].Name(), ".") filename := fileInfoList[i].Name()[:index] //filename := strings.TrimSuffix(fileInfoList[i].Name(), ".auf") logs.Info(filename) //打印当前文件或目录下的文件或目录名 t, err := strconv.ParseInt(filename, 10, 64) if err == nil { t = t / 1e9 if time.Now().Unix()-t > 60 { os.Remove(modelePath + "/file/" + fileInfoList[i].Name()) } } else { //logs.Error("checkFileExpired err:", err.Error()) } } default: time.Sleep(time.Minute * 1) } } } // 登录 func getUuid() string { return uuid.NewV4().String() } func refreshUser(response http.ResponseWriter, request *http.Request) { //beginTime := time.Now().UnixNano() //logs.Info("refreshUser recv req begin", time.Now().Format("2006-01-02 15:04:05")) var resp CommonResp reqdata, _ := ioutil.ReadAll(request.Body) var req RefreshUserReq json.Unmarshal(reqdata, &req) deesUserStatMaplck.RLock() if v, ok := deesUserStatMap[req.Username]; ok { deesUserStatMaplck.RUnlock() v.Lock() if v.Uuid == req.Uuid { if time.Now().Before(v.ExpireTime) { v.RefreshTime = time.Now() v.ExpireTime = time.Now().Add(ExpireTimeSpan) } else { resp.Ret = -1 } //logs.Info(fmt.Sprintf("refreshTime:%v expiretime:%v", v.RefreshTime.Format("2006-01-02 15:04:05"), v.ExpireTime.Format("2006-01-02 15:04:05"))) v.Unlock() } else { v.Unlock() resp.Ret = -1 //fmt.Println("uuid:", v.Uuid) //fmt.Println("req.uuid", req.Uuid) } } else { deesUserStatMaplck.RUnlock() resp.Ret = -1 } jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) // endTime := time.Now().UnixNano() //logs.Info(fmt.Sprintf("refreshUser recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func LoginOut(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("LoginOut recv req begin", time.Now().Format("2006-01-02 15:04:05")) var resp CommonResp reqdata, _ := ioutil.ReadAll(request.Body) var req LoginOutReq json.Unmarshal(reqdata, &req) /* deesUserStatMaplck.Lock() if _, ok := deesUserStatMap[req.Username]; ok { delete(deesUserStatMap, req.Username) } deesUserStatMaplck.Unlock() */ resp.Ret = 0 jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("LoginOut recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } func Login(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("Login recv req begin", time.Now().Format("2006-01-02 15:04:05")) var req LoginReq var resp LoginResp var err error var uuid string reqdata, _ := ioutil.ReadAll(request.Body) json.Unmarshal(reqdata, &req) userinfo, err := getUserInfo(req.Username) fmt.Println(userinfo) if err != nil { resp.Ret = -1 logs.Error("login::getUserInfo err:", err.Error()) goto exit } deesUserStatMaplck.RLock() if v, ok := deesUserStatMap[req.Username]; ok { deesUserStatMaplck.RUnlock() v.RLock() uuid = v.Uuid if time.Now().Before(v.ExpireTime) { refreshTime := v.RefreshTime v.RUnlock() if int64(time.Since(refreshTime).Seconds()) <= refreshSpan { resp.Ret = 1 goto exit } //online user nojust refresh //... } else { v.RUnlock() } uuid = getUuid() } else { deesUserStatMaplck.RUnlock() uuid = getUuid() } if req.Password != userinfo.Password { resp.Ret = -1 goto exit } exit: if resp.Ret == 0 { resp.RoleId = userinfo.RoleId resp.DId = userinfo.DepartmentId resp.Location = userinfo.Location //refresh user state var v DeesUserStat v.Username = req.Username v.RefreshTime = time.Now() v.ExpireTime = time.Now().Add(ExpireTimeSpan) v.Uuid = uuid v.UserRole = userinfo.RoleId resp.Uuid = uuid deesUserStatMaplck.Lock() deesUserStatMap[req.Username] = &v deesUserStatMaplck.Unlock() } resp.Url = "main.html" jdata, _ := json.Marshal(resp) fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("Login recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } // 跨域测试 func test(response http.ResponseWriter, request *http.Request) { fmt.Println("recv test req") response.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域 response.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型 response.Header().Set("content-type", "application/json") //返回数据格式是json fmt.Fprintf(response, "3") }