diff --git a/main.go b/main.go index 2b49089..b2ce29b 100644 --- a/main.go +++ b/main.go @@ -233,9 +233,9 @@ var ( loc string = "2006-01-02 15:04:05" - dbPath string = "D:\\deescloud\\deesCloudServer\\ip2region.xdb" - // dbPath string = "./ip2region.xdb" - cBuff []byte + // dbPath string = "D:\\deescloud\\deesCloudServer\\ip2region.xdb" + dbPath string = "./ip2region.xdb" + cBuff []byte pageSetting map[string]page_setting_req @@ -1610,7 +1610,6 @@ func remove_battery_life(response http.ResponseWriter, request *http.Request) { endTime := time.Now().UnixNano() logs.Info(fmt.Sprintf("remove_battery_life recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } - func get_battery_life(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() @@ -1621,6 +1620,16 @@ func get_battery_life(response http.ResponseWriter, request *http.Request) { json.Unmarshal(reqdata, &req) var resp get_battery_life_resp + + // 判断是否为特殊账号 + is_special := getUserSpecial(req.OpUser) + if is_special == "1" { + // 特殊账号直接返回空数据 + jdata, _ := json.Marshal(resp) + fmt.Fprintf(response, string(jdata)) + return + } + var sel_sql string var ifwhere bool @@ -1664,6 +1673,59 @@ func get_battery_life(response http.ResponseWriter, request *http.Request) { } +// func get_battery_life(response http.ResponseWriter, request *http.Request) { + +// beginTime := time.Now().UnixNano() +// logs.Info("get_battery_life recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req get_battery_base_req +// json.Unmarshal(reqdata, &req) + +// var resp get_battery_life_resp +// var sel_sql string + +// var ifwhere bool +// var whereSql string +// if req.B_code != "" { +// likestr := "%" + req.B_code + "%" +// whereSql += fmt.Sprintf(` [b_code] like '%s' `, likestr) +// ifwhere = true +// } + +// if ifwhere { +// sel_sql = fmt.Sprintf(`SELECT [ID] +// ,[b_code] +// ,[b_life] FROM [battery_life] where %s order by ID desc`, whereSql) +// } else { +// sel_sql = fmt.Sprintf(`SELECT [ID] +// ,[b_code] +// ,[b_life] FROM [battery_life] order by ID desc`) +// } + +// fmt.Println(sel_sql) +// rows, err := sqlConn.Query(sel_sql) +// if err == nil { + +// for rows.Next() { + +// var d Battery_life +// if err = rows.Scan(&d.ID, &d.B_code, &d.B_life); err == nil { +// resp.Data = append(resp.Data, d) +// } +// } +// rows.Close() +// } + +// resp.Total = len(resp.Data) +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) + +// endTime := time.Now().UnixNano() +// logs.Info(fmt.Sprintf("get_battery_life recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + +// } + func add_battery_life(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("add_battery_life recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -2220,6 +2282,38 @@ func get_battery_base(response http.ResponseWriter, request *http.Request) { var ifwhere bool var whereSql string + + // 特殊账号限制系列号 + is_special := getUserSpecial(req.OpUser) + if is_special == "1" { + // 允许的系列号列表(已去重) + seriesList := []string{"LHE6150E-02", "LHE6150C", "LHE6150B", "LHE6150K"} + // 构建 IN 子句 + inClause := "" + for i, s := range seriesList { + if i > 0 { + inClause += "," + } + inClause += "'" + strings.ReplaceAll(s, "'", "''") + "'" + } + if inClause != "" { + if ifwhere { + whereSql += fmt.Sprintf(" and [sid] IN (%s)", inClause) + } else { + whereSql += fmt.Sprintf(" [sid] IN (%s)", inClause) + ifwhere = true + } + } else { + // 理论上不会执行到这里,但若列表为空则让查询无结果 + if ifwhere { + whereSql += " and 1=0" + } else { + whereSql += " 1=0" + ifwhere = true + } + } + } + if req.S_ID != "" { likestr := "%" + req.S_ID + "%" whereSql += fmt.Sprintf(` [sid] like '%s' `, likestr) @@ -2297,6 +2391,97 @@ func get_battery_base(response http.ResponseWriter, request *http.Request) { } +// func get_battery_base(response http.ResponseWriter, request *http.Request) { + +// beginTime := time.Now().UnixNano() +// logs.Info("get_battery_base recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req get_battery_base_req +// json.Unmarshal(reqdata, &req) + +// var resp get_battery_base_resp +// var sel_sql string + +// var ifwhere bool +// var whereSql string +// if req.S_ID != "" { +// likestr := "%" + req.S_ID + "%" +// whereSql += fmt.Sprintf(` [sid] like '%s' `, likestr) +// ifwhere = true +// } + +// if req.IID != "" { +// likestr := "%" + req.IID + "%" +// if ifwhere { +// whereSql += fmt.Sprintf(` and [iid] like '%s' `, likestr) +// } else { +// whereSql += fmt.Sprintf(` [iid] like '%s' `, likestr) +// } + +// ifwhere = true +// } + +// if req.B_ID != "" { +// likestr := "%" + req.B_ID + "%" +// if ifwhere { +// whereSql += fmt.Sprintf(` and [b_id] like '%s' `, likestr) +// } else { +// whereSql += fmt.Sprintf(` [b_id] like '%s' `, likestr) +// } + +// ifwhere = true +// } + +// if req.B_code != "" { +// likestr := "%" + req.B_code + "%" +// if ifwhere { +// whereSql += fmt.Sprintf(` and [b_code] like '%s' `, likestr) +// } else { +// whereSql += fmt.Sprintf(` [b_code] like '%s' `, likestr) +// } + +// ifwhere = true +// } + +// if ifwhere { +// sel_sql = fmt.Sprintf(`SELECT [ID] +// ,[b_id] +// ,[b_code] +// ,[sid] +// ,[iid] FROM [battery_base] where %s order by ID desc`, whereSql) +// } else { +// sel_sql = fmt.Sprintf(`SELECT [ID] +// ,[b_id] +// ,[b_code] +// ,[sid] +// ,[iid] FROM [battery_base] order by ID desc`) +// } + +// fmt.Println(sel_sql) +// rows, err := sqlConn.Query(sel_sql) +// if err == nil { + +// for rows.Next() { + +// var d Battery_base +// if err = rows.Scan(&d.ID, &d.B_ID, &d.B_code, &d.S_ID, &d.IID); err == nil { + +// resp.Data = append(resp.Data, d) +// } +// } +// rows.Close() +// } + +// resp.Total = len(resp.Data) +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) + +// endTime := time.Now().UnixNano() +// logs.Info(fmt.Sprintf("get_battery_base recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + +// } + func add_battery_base(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("add_battery_base recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -2655,6 +2840,431 @@ exit: } +// func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { + +// beginTime := time.Now().UnixNano() +// logs.Info("get_up_off_well_info recv req begin", time.Now().Format(loc)) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req get_up_off_well_info_req +// json.Unmarshal(reqdata, &req) + +// var ps_info page_setting_req +// if _, ok := pageSetting[req.OpUser]; ok { +// ps_info = pageSetting[req.OpUser] +// } else { +// ps_info.R1 = "1" +// ps_info.R2 = "1" +// ps_info.R3 = "1" +// } + +// var resp get_up_off_well_info_resp + +// var cntSql string +// var selSql string +// var whereSql string +// var ifwhere bool +// if req.Wellname != "" { +// likestr := "%" + req.Wellname + "%" +// whereSql += fmt.Sprintf(` [6841] like '%s' `, likestr) +// ifwhere = true +// } +// if req.User != "" { +// likestr := "%" + req.User + "%" + +// if ifwhere { +// whereSql += fmt.Sprintf(` and [6845] like '%s' `, likestr) +// } else { +// whereSql += fmt.Sprintf(` [6845] like '%s' `, likestr) +// } + +// ifwhere = true +// } + +// if req.If_es { +// if ifwhere { +// whereSql += fmt.Sprintf(` and [6844] =1 `) +// } else { +// whereSql += fmt.Sprintf(` [6844] =1 `) +// } +// ifwhere = true +// } + +// if ifwhere { +// whereSql = " where " + whereSql +// } + +// if ifwhere { +// cntSql = fmt.Sprintf("select count(*) from (select distinct [6841],[6844],[6845],[6846],[6847],[6848],[6849] from WORKHOURS %s)t", whereSql) +// } else { +// cntSql = fmt.Sprintf("select count(*) from (select distinct [6841],[6844],[6845],[6846],[6847],[6848],[6849] from WORKHOURS )t") +// } +// logs.Info("get_up_off_well_info cntSql ", cntSql) +// fmt.Println("get_up_off_well_info cntSql:", cntSql) +// rcnt, err := getRecordCount(sqlConn, cntSql) +// if err != nil { +// logs.Error(fmt.Sprintf("%s err:%v", cntSql, err.Error())) +// return +// } + +// query_cnt := req.Index * req.Count +// var cnt int +// if query_cnt > rcnt { +// cnt = rcnt + req.Count - query_cnt +// } else { +// cnt = req.Count +// } + +// // selSql = fmt.Sprintf("select distinct top %v [6841],[6844],[6845],[6846],[6847],[6848],[6849],[6850] from ( select distinct top %v [6841],[6844],[6845],[6846],[6847],[6848],[6849],[6850] from WORKHOURS ", cnt, req.Index*req.Count) +// selSql = fmt.Sprintf("select distinct top %v [6841],[6844],[6845],ISNULL([6846],'') as [6846],ISNULL([6847],'') as [6847],ISNULL([6848],'') as [6848],ISNULL([6849],'') as [6849],ISNULL([6850],'') as [6850] from ( select distinct top %v [6841],[6844],[6845],ISNULL([6846],'') as [6846],ISNULL([6847],'') as [6847],ISNULL([6848],'') as [6848],ISNULL([6849],'') as [6849],ISNULL([6850],'') as [6850] from WORKHOURS ", cnt, req.Index*req.Count) + +// selSql += whereSql + +// ascSql := " order by [6846] asc" +// descSql := " order by [6846] desc" +// selSql += descSql + ")t " + whereSql + ascSql + +// fmt.Println("get_up_off_well_info sql:", selSql) +// logs.Info("get_up_off_well_info sql:", selSql) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Info("Query Error", err.Error()) +// return +// } +// defer row.Close() + +// var data []Up_off_well + +// resp.Total = rcnt +// for row.Next() { +// var d Up_off_well +// var s_type int +// if err := row.Scan(&d.Wellname, &s_type, &d.User, &d.Up_well_time, &d.Off_well_time, &d.Entry_time, &d.Out_time, &d.Op_type); err == nil { + +// ot := []byte(d.Up_well_time) +// if string(ot[0]) != "-" { +// if len(d.Up_well_time) >= 19 { +// d.Up_well_time = d.Up_well_time[:10] + " " + d.Up_well_time[11:19] +// d.Up_well_time = do_time_by_ps(d.Up_well_time, ps_info) +// } + +// } else { +// d.Up_well_time = "" +// } + +// ot = []byte(d.Entry_time) +// if string(ot[0]) != "-" { +// if len(d.Entry_time) >= 19 { +// d.Entry_time = d.Entry_time[:10] + " " + d.Entry_time[11:19] +// d.Entry_time = do_time_by_ps(d.Entry_time, ps_info) +// } + +// } else { +// d.Entry_time = "" +// } + +// //fmt.Println(d.Out_time) +// ot = []byte(d.Out_time) +// //fmt.Println(string(ot[0])) +// if string(ot[0]) != "-" { +// if len(d.Out_time) >= 19 { +// d.Out_time = d.Out_time[:10] + " " + d.Out_time[11:19] +// d.Out_time = do_time_by_ps(d.Out_time, ps_info) +// } +// } else { +// d.Out_time = "" +// } + +// ot = []byte(d.Off_well_time) +// if string(ot[0]) != "-" { +// if len(d.Off_well_time) >= 19 { +// d.Off_well_time = d.Off_well_time[:10] + " " + d.Off_well_time[11:19] +// d.Off_well_time = do_time_by_ps(d.Off_well_time, ps_info) +// } +// } else { +// d.Off_well_time = "" +// } + +// if s_type == 0 { +// d.Service_type = "其他服务" +// } else if s_type == 1 { +// d.Service_type = "工程服务" +// } else if s_type == 2 { +// d.Service_type = "售后服务" +// } + +// /* +// 0 一级定向 +// 1 二级定向 +// 2 一级仪器操作 +// 3 二级仪器操作 +// 4 三级仪器操作 +// 5 四级仪器操作 +// */ +// if d.Op_type == "0" { +// d.Op_type = "一级定向" +// } else if d.Op_type == "1" { +// d.Op_type = "二级定向" +// } else if d.Op_type == "2" { +// d.Op_type = "一级仪器操作" +// } else if d.Op_type == "3" { +// d.Op_type = "二级仪器操作" +// } else if d.Op_type == "4" { +// d.Op_type = "三级仪器操作" +// } else if d.Op_type == "5" { +// d.Op_type = "四级仪器操作" +// } else { +// d.Op_type = "" +// } + +// data = append(data, d) +// } else { +// logs.Info("get_up_off_well_info Query Error", err.Error()) +// fmt.Println("get_up_off_well_info Query Error", err.Error()) +// } +// } +// fmt.Println("len(data)---", len(data)) +// logs.Info("len(data)---", len(data)) +// if len(data) > 0 { +// for i := len(data) - 1; ; { +// resp.Data = append(resp.Data, data[i]) +// i-- +// if i < 0 { +// break +// } +// } +// } + +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) + +// endTime := time.Now().UnixNano() +// logs.Info(fmt.Sprintf("get_up_off_well_info recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + +// } + +// func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { + +// beginTime := time.Now().UnixNano() +// logs.Info("get_up_off_well_info recv req begin", time.Now().Format(loc)) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req get_up_off_well_info_req +// json.Unmarshal(reqdata, &req) + +// var ps_info page_setting_req +// if _, ok := pageSetting[req.OpUser]; ok { +// ps_info = pageSetting[req.OpUser] +// } else { +// ps_info.R1 = "1" +// ps_info.R2 = "1" +// ps_info.R3 = "1" +// } + +// var resp get_up_off_well_info_resp + +// var cntSql string +// var selSql string +// var whereSql string +// var ifwhere bool + +// is_special := getUserSpecial(req.OpUser) + +// if req.Wellname != "" { +// likestr := "%" + req.Wellname + "%" +// whereSql += fmt.Sprintf(` [6841] like '%s' `, likestr) +// ifwhere = true +// } + +// if is_special == "1" { +// specialWells := getSpecialWell(req.OpUser) +// if len(specialWells) > 0 { +// if ifwhere { +// whereSql += " and [6841] in (" +// } else { +// whereSql += " [6841] in (" +// } +// for i, name := range specialWells { +// if i > 0 { +// whereSql += "," +// } +// whereSql += "'" + name + "'" +// } +// whereSql += ")" +// ifwhere = true +// } +// } + +// if req.User != "" { +// likestr := "%" + req.User + "%" + +// if ifwhere { +// whereSql += fmt.Sprintf(` and [6845] like '%s' `, likestr) +// } else { +// whereSql += fmt.Sprintf(` [6845] like '%s' `, likestr) +// } + +// ifwhere = true +// } + +// if req.If_es { +// if ifwhere { +// whereSql += fmt.Sprintf(` and [6844] =1 `) +// } else { +// whereSql += fmt.Sprintf(` [6844] =1 `) +// } +// ifwhere = true +// } + +// if ifwhere { +// whereSql = " where " + whereSql +// } + +// if ifwhere { +// cntSql = fmt.Sprintf("select count(*) from (select distinct [6841],[6844],[6845],[6846],[6847],[6848],[6849] from WORKHOURS %s)t", whereSql) +// } else { +// cntSql = fmt.Sprintf("select count(*) from (select distinct [6841],[6844],[6845],[6846],[6847],[6848],[6849] from WORKHOURS )t") +// } +// logs.Info("get_up_off_well_info cntSql ", cntSql) +// fmt.Println("get_up_off_well_info cntSql:", cntSql) +// rcnt, err := getRecordCount(sqlConn, cntSql) +// if err != nil { +// logs.Error(fmt.Sprintf("%s err:%v", cntSql, err.Error())) +// return +// } + +// query_cnt := req.Index * req.Count +// var cnt int +// if query_cnt > rcnt { +// cnt = rcnt + req.Count - query_cnt +// } else { +// cnt = req.Count +// } + +// // 修复:如果 cnt <= 0 或 query_cnt <= 0,直接返回空结果,避免 top 0 或负数 +// if cnt <= 0 || query_cnt <= 0 { +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) +// return +// } + +// selSql = fmt.Sprintf("select distinct top %v [6841],[6844],[6845],ISNULL([6846],'') as [6846],ISNULL([6847],'') as [6847],ISNULL([6848],'') as [6848],ISNULL([6849],'') as [6849],ISNULL([6850],'') as [6850] from ( select distinct top %v [6841],[6844],[6845],ISNULL([6846],'') as [6846],ISNULL([6847],'') as [6847],ISNULL([6848],'') as [6848],ISNULL([6849],'') as [6849],ISNULL([6850],'') as [6850] from WORKHOURS ", cnt, req.Index*req.Count) + +// selSql += whereSql + +// ascSql := " order by [6846] asc" +// descSql := " order by [6846] desc" +// selSql += descSql + ")t " + whereSql + ascSql + +// fmt.Println("get_up_off_well_info sql:", selSql) +// logs.Info("get_up_off_well_info sql:", selSql) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Info("Query Error", err.Error()) +// return +// } +// defer row.Close() + +// var data []Up_off_well + +// resp.Total = rcnt +// for row.Next() { +// var d Up_off_well +// var s_type int +// if err := row.Scan(&d.Wellname, &s_type, &d.User, &d.Up_well_time, &d.Off_well_time, &d.Entry_time, &d.Out_time, &d.Op_type); err == nil { + +// ot := []byte(d.Up_well_time) +// if string(ot[0]) != "-" { +// if len(d.Up_well_time) >= 19 { +// d.Up_well_time = d.Up_well_time[:10] + " " + d.Up_well_time[11:19] +// d.Up_well_time = do_time_by_ps(d.Up_well_time, ps_info) +// } + +// } else { +// d.Up_well_time = "" +// } + +// ot = []byte(d.Entry_time) +// if string(ot[0]) != "-" { +// if len(d.Entry_time) >= 19 { +// d.Entry_time = d.Entry_time[:10] + " " + d.Entry_time[11:19] +// d.Entry_time = do_time_by_ps(d.Entry_time, ps_info) +// } + +// } else { +// d.Entry_time = "" +// } + +// ot = []byte(d.Out_time) +// if string(ot[0]) != "-" { +// if len(d.Out_time) >= 19 { +// d.Out_time = d.Out_time[:10] + " " + d.Out_time[11:19] +// d.Out_time = do_time_by_ps(d.Out_time, ps_info) +// } +// } else { +// d.Out_time = "" +// } + +// ot = []byte(d.Off_well_time) +// if string(ot[0]) != "-" { +// if len(d.Off_well_time) >= 19 { +// d.Off_well_time = d.Off_well_time[:10] + " " + d.Off_well_time[11:19] +// d.Off_well_time = do_time_by_ps(d.Off_well_time, ps_info) +// } +// } else { +// d.Off_well_time = "" +// } + +// if s_type == 0 { +// d.Service_type = "其他服务" +// } else if s_type == 1 { +// d.Service_type = "工程服务" +// } else if s_type == 2 { +// d.Service_type = "售后服务" +// } + +// if d.Op_type == "0" { +// d.Op_type = "一级定向" +// } else if d.Op_type == "1" { +// d.Op_type = "二级定向" +// } else if d.Op_type == "2" { +// d.Op_type = "一级仪器操作" +// } else if d.Op_type == "3" { +// d.Op_type = "二级仪器操作" +// } else if d.Op_type == "4" { +// d.Op_type = "三级仪器操作" +// } else if d.Op_type == "5" { +// d.Op_type = "四级仪器操作" +// } else { +// d.Op_type = "" +// } + +// data = append(data, d) +// } else { +// logs.Info("get_up_off_well_info Query Error", err.Error()) +// fmt.Println("get_up_off_well_info Query Error", err.Error()) +// } +// } +// fmt.Println("len(data)---", len(data)) +// logs.Info("len(data)---", len(data)) +// if len(data) > 0 { +// for i := len(data) - 1; ; { +// resp.Data = append(resp.Data, data[i]) +// i-- +// if i < 0 { +// break +// } +// } +// } + +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) + +// endTime := time.Now().UnixNano() +// logs.Info(fmt.Sprintf("get_up_off_well_info recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + +// } + func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() @@ -2679,11 +3289,34 @@ func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { var selSql string var whereSql string var ifwhere bool + + is_special := getUserSpecial(req.OpUser) + if req.Wellname != "" { likestr := "%" + req.Wellname + "%" whereSql += fmt.Sprintf(` [6841] like '%s' `, likestr) ifwhere = true } + + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + if ifwhere { + whereSql += " and [6841] in (" + } else { + whereSql += " [6841] in (" + } + for i, name := range specialWells { + if i > 0 { + whereSql += "," + } + whereSql += "'" + name + "'" + } + whereSql += ")" + ifwhere = true + } + } + if req.User != "" { likestr := "%" + req.User + "%" @@ -2730,7 +3363,13 @@ func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { cnt = req.Count } - // selSql = fmt.Sprintf("select distinct top %v [6841],[6844],[6845],[6846],[6847],[6848],[6849],[6850] from ( select distinct top %v [6841],[6844],[6845],[6846],[6847],[6848],[6849],[6850] from WORKHOURS ", cnt, req.Index*req.Count) + // 修复:如果 cnt <= 0 或 query_cnt <= 0,直接返回空结果,避免 top 0 或负数 + if cnt <= 0 || query_cnt <= 0 { + jdata, _ := json.Marshal(resp) + fmt.Fprintf(response, string(jdata)) + return + } + selSql = fmt.Sprintf("select distinct top %v [6841],[6844],[6845],ISNULL([6846],'') as [6846],ISNULL([6847],'') as [6847],ISNULL([6848],'') as [6848],ISNULL([6849],'') as [6849],ISNULL([6850],'') as [6850] from ( select distinct top %v [6841],[6844],[6845],ISNULL([6846],'') as [6846],ISNULL([6847],'') as [6847],ISNULL([6848],'') as [6848],ISNULL([6849],'') as [6849],ISNULL([6850],'') as [6850] from WORKHOURS ", cnt, req.Index*req.Count) selSql += whereSql @@ -2760,7 +3399,11 @@ func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { if string(ot[0]) != "-" { if len(d.Up_well_time) >= 19 { d.Up_well_time = d.Up_well_time[:10] + " " + d.Up_well_time[11:19] - d.Up_well_time = do_time_by_ps(d.Up_well_time, ps_info) + if d.Up_well_time == "1900-01-01 00:00:00" { + d.Up_well_time = "" + } else { + d.Up_well_time = do_time_by_ps(d.Up_well_time, ps_info) + } } } else { @@ -2771,20 +3414,26 @@ func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { if string(ot[0]) != "-" { if len(d.Entry_time) >= 19 { d.Entry_time = d.Entry_time[:10] + " " + d.Entry_time[11:19] - d.Entry_time = do_time_by_ps(d.Entry_time, ps_info) + if d.Entry_time == "1900-01-01 00:00:00" { + d.Entry_time = "" + } else { + d.Entry_time = do_time_by_ps(d.Entry_time, ps_info) + } } } else { d.Entry_time = "" } - //fmt.Println(d.Out_time) ot = []byte(d.Out_time) - //fmt.Println(string(ot[0])) if string(ot[0]) != "-" { if len(d.Out_time) >= 19 { d.Out_time = d.Out_time[:10] + " " + d.Out_time[11:19] - d.Out_time = do_time_by_ps(d.Out_time, ps_info) + if d.Out_time == "1900-01-01 00:00:00" { + d.Out_time = "" + } else { + d.Out_time = do_time_by_ps(d.Out_time, ps_info) + } } } else { d.Out_time = "" @@ -2794,7 +3443,11 @@ func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { if string(ot[0]) != "-" { if len(d.Off_well_time) >= 19 { d.Off_well_time = d.Off_well_time[:10] + " " + d.Off_well_time[11:19] - d.Off_well_time = do_time_by_ps(d.Off_well_time, ps_info) + if d.Off_well_time == "1900-01-01 00:00:00" { + d.Off_well_time = "" + } else { + d.Off_well_time = do_time_by_ps(d.Off_well_time, ps_info) + } } } else { d.Off_well_time = "" @@ -2808,14 +3461,6 @@ func get_up_off_well_info(response http.ResponseWriter, request *http.Request) { d.Service_type = "售后服务" } - /* - 0 一级定向 - 1 二级定向 - 2 一级仪器操作 - 3 二级仪器操作 - 4 三级仪器操作 - 5 四级仪器操作 - */ if d.Op_type == "0" { d.Op_type = "一级定向" } else if d.Op_type == "1" { @@ -20006,6 +20651,291 @@ func collect_well_nb() { } } +// func collect_well_nb_1() { + +// well_map := make(map[string]wellData) +// well_data, _ := getWellData(true) +// for i := 0; i < len(well_data); i++ { +// well_map[well_data[i].WellNameSource] = well_data[i] +// } + +// var wellnames []string +// sel_sql := fmt.Sprintf(`select distinct [6700] from [BATTERYRECORD] where [6703] > '2024-06-27 00:00:00' `) +// rows, err := sqlConn.Query(sel_sql) +// if err != nil { +// logs.Error("collect_well_nb err:", err.Error()) +// return +// } + +// for rows.Next() { +// var v string +// //var t string +// if err = rows.Scan(&v); err == nil { +// wellnames = append(wellnames, v) +// } +// } +// rows.Close() + +// //获取电池编号 +// var data []Well_battery_info +// for i := 0; i < len(wellnames); i++ { + +// wellname := wellnames[i] +// sel_sql := fmt.Sprintf(`select distinct [6707] from [BATTERYRECORD] where [6700]='%s' and [6703] > '2024-06-27 00:00:00' `, wellname) +// rows1, err := sqlConn.Query(sel_sql) +// if err != nil { +// logs.Error("collect_well_nb err:", err.Error()) +// continue +// } + +// for rows1.Next() { +// var bcode string +// if err = rows1.Scan(&bcode); err == nil { + +// var d Well_battery_info +// d.WellName = wellname +// d.Bcode = bcode +// d.Flag = 0 +// if _, ok := well_map[wellname]; ok { +// d.Cloud_account = well_map[wellname].Cloud_account +// d.Service_type = well_map[wellname].Service_type +// } +// data = append(data, d) + +// } +// } +// rows1.Close() +// } + +// //计算电池的开始结束时间 +// for i := 0; i < len(data); i++ { + +// v := data[i] + +// sel_sql := fmt.Sprintf(`select distinct [6703],[6704],[6705] from [BATTERYRECORD] where [6700]='%s' and [6707] = '%s' order by [6703] asc`, v.WellName, v.Bcode) +// rows1, err := sqlConn.Query(sel_sql) +// if err != nil { +// logs.Error("collect_well_nb err:", err.Error()) +// continue +// } + +// for rows1.Next() { +// var bt, sid, iid string +// if err = rows1.Scan(&bt, &sid, &iid); err == nil { + +// if len(bt) >= 19 { +// bt = bt[:10] + " " + bt[11:19] +// data[i].Bt = bt +// } + +// data[i].Sid = sid +// data[i].Iid = iid + +// break + +// } +// } +// rows1.Close() + +// sel_sql = fmt.Sprintf(`select distinct [6703] from [BATTERYRECORD] where [6700]='%s' and [6711] = '%s' `, v.WellName, v.Bcode) +// rows1, err = sqlConn.Query(sel_sql) +// if err != nil { +// logs.Error("collect_well_nb err:", err.Error()) +// continue +// } + +// for rows1.Next() { +// var et string +// if err = rows1.Scan(&et); err == nil { + +// if len(et) >= 19 { +// et = et[:10] + " " + et[11:19] + +// if et >= data[i].Bt { +// data[i].Et = et +// } +// } + +// } +// } +// rows1.Close() +// } + +// //电池时间计算 +// for j := 0; j < len(data); j++ { +// v := data[j] + +// js_data, _ := json.Marshal(v) +// logs.Info(fmt.Sprintf(`wellname:%s `, string(js_data))) + +// var well_db string +// if _, ok := well_map[v.WellName]; ok { +// well_db = well_map[v.WellName].WellName +// } +// if well_db != "" { +// conn, err := getOdbcConn(well_db) +// if err != nil { +// logs.Info("exportWellHistory Connecting Error", err.Error()) +// continue +// } + +// var et_sql string +// if data[j].Et != "" { +// et_sql = fmt.Sprintf(`select distinct [4304] from [DECODETABLE] where [4304] is not null and [4304]>'%s' and [4304]<'%s' order by [4304] asc`, data[j].Bt, data[j].Et) +// } else { +// et_sql = fmt.Sprintf(`select distinct [4304] from [DECODETABLE] where [4304] is not null and [4304]>'%s' order by [4304] asc`, data[j].Bt) +// } + +// var t_escapeSecond int64 +// rows, err := conn.Query(et_sql) +// if err == nil { + +// //oneHoueSecondes := 3600 +// timelayout := "2006-01-02 15:04:05" +// loc, _ := time.LoadLocation("Local") + +// var cnt int +// var lastTime time.Time +// var et string +// for rows.Next() { +// if err = rows.Scan(&et); err == nil { + +// var t string +// if len(et) >= 19 { +// t = et[:10] + " " + et[11:19] +// } + +// if cnt == 0 { +// t_seconds := get_dring_inout_seconds(conn, data[j].Bt, t) +// t_escapeSecond += t_seconds +// //logs.Info(fmt.Sprintf(`wellname %s 开始:%s 结束:%s 用时:%d`, v.WellName, data[j].Bt, t, t_seconds)) +// lastTime, _ = time.ParseInLocation(timelayout, t, loc) +// } else { +// endT, _ := time.ParseInLocation(timelayout, t, loc) +// ts := endT.Unix() - lastTime.Unix() +// if ts < int64(3600*3) { +// t_escapeSecond += ts +// } else { + +// t_seconds := get_dring_inout_seconds(conn, lastTime.Format(timelayout), t) +// t_escapeSecond += t_seconds +// //logs.Info(fmt.Sprintf(`wellname %s 开始:%s 结束:%s 用时:%d`, v.WellName, lastTime.Format(timelayout), t, t_seconds)) +// } + +// lastTime = endT +// } + +// cnt++ +// } +// } +// rows.Close() + +// var t string +// if len(et) >= 19 { +// t = et[:10] + " " + et[11:19] + +// t_seconds := get_dring_inout_seconds(conn, t, data[j].Et) +// t_escapeSecond += t_seconds +// //logs.Info(fmt.Sprintf(`wellname %s 开始:%s 结束:%s 用时:%d`, v.WellName, t, data[j].Et, t_seconds)) +// } + +// var sel_sql string +// if et != "" { +// sel_sql = fmt.Sprintf(`select top 1 [5213] from [EQUIPMENTRECORDS] where [5219]<'%s'`, t) +// } else { +// sel_sql = fmt.Sprintf(`select top 1 [5213] from [EQUIPMENTRECORDS] order by [5219] desc`) +// } + +// rows_1, err := conn.Query(sel_sql) +// if err == nil { + +// for rows_1.Next() { +// var s string +// if err = rows_1.Scan(&s); err == nil { +// if strings.Contains(s, "伽马") { +// if strings.Contains(s, "下座键") { +// data[j].B_life = 180 +// } else if strings.Contains(s, "上悬挂") { +// data[j].B_life = 220 +// } else { +// data[j].B_life = 200 +// } + +// } else { +// if strings.Contains(s, "下座键") { +// data[j].B_life = 200 +// } else if strings.Contains(s, "上悬挂") { +// data[j].B_life = 250 +// } else { +// data[j].B_life = 200 +// } +// } +// } +// } + +// rows_1.Close() +// } +// } + +// data[j].Uset = float32(t_escapeSecond) / 3600 + +// logs.Info(fmt.Sprintf(`wellname:%s ust %v`, data[j].WellName, data[j].Uset)) + +// conn.Close() + +// } else { +// logs.Info(fmt.Sprintf(`no wellname:%s`, v.WellName)) +// } +// } + +// //存储 +// for i := 0; i < len(data); i++ { +// remove_sql := fmt.Sprintf(`delete from [analysis_battery_well] where [wellname]='%s' and [op_flag]!=1`, data[i].WellName) +// sqlConn.Exec(remove_sql) +// } +// for k := 0; k < len(data); k++ { + +// if data[k].Uset < 0.001 { +// continue +// } + +// if data[k].WellName == "ManS7-H7井" && data[k].Bcode == "LHE6113-1586/1589" { +// data[k].Uset = 355 +// } + +// insert_sql := fmt.Sprintf(`INSERT INTO [analysis_battery_well] +// ([wellname] +// ,[sid] +// ,[iid] +// ,[b_code] +// ,[bt] +// ,[et] +// ,[use_t] +// ,[op_flag] +// ,[ClOUDACCOUNT] +// ,[service_type],[b_life]) +// VALUES +// ('%s' +// ,'%s' +// ,'%s' +// ,'%s' +// ,'%s' +// ,'%s' +// ,%v +// ,%d +// ,'%s',%d,%v)`, +// data[k].WellName, data[k].Sid, data[k].Iid, data[k].Bcode, data[k].Bt, data[k].Et, +// data[k].Uset, data[k].Flag, data[k].Cloud_account, data[k].Service_type, +// data[k].B_life) + +// fmt.Println(insert_sql) +// _, err = sqlConn.Exec(insert_sql) +// if err != nil { +// logs.Error(fmt.Sprintf(`%s err:%s`, insert_sql, err.Error())) +// } +// } +// } + func collect_well_nb_1() { well_map := make(map[string]wellData) @@ -20024,7 +20954,6 @@ func collect_well_nb_1() { for rows.Next() { var v string - //var t string if err = rows.Scan(&v); err == nil { wellnames = append(wellnames, v) } @@ -20034,7 +20963,6 @@ func collect_well_nb_1() { //获取电池编号 var data []Well_battery_info for i := 0; i < len(wellnames); i++ { - wellname := wellnames[i] sel_sql := fmt.Sprintf(`select distinct [6707] from [BATTERYRECORD] where [6700]='%s' and [6703] > '2024-06-27 00:00:00' `, wellname) rows1, err := sqlConn.Query(sel_sql) @@ -20046,7 +20974,6 @@ func collect_well_nb_1() { for rows1.Next() { var bcode string if err = rows1.Scan(&bcode); err == nil { - var d Well_battery_info d.WellName = wellname d.Bcode = bcode @@ -20056,7 +20983,6 @@ func collect_well_nb_1() { d.Service_type = well_map[wellname].Service_type } data = append(data, d) - } } rows1.Close() @@ -20064,7 +20990,6 @@ func collect_well_nb_1() { //计算电池的开始结束时间 for i := 0; i < len(data); i++ { - v := data[i] sel_sql := fmt.Sprintf(`select distinct [6703],[6704],[6705] from [BATTERYRECORD] where [6700]='%s' and [6707] = '%s' order by [6703] asc`, v.WellName, v.Bcode) @@ -20077,17 +21002,13 @@ func collect_well_nb_1() { for rows1.Next() { var bt, sid, iid string if err = rows1.Scan(&bt, &sid, &iid); err == nil { - if len(bt) >= 19 { bt = bt[:10] + " " + bt[11:19] data[i].Bt = bt } - data[i].Sid = sid data[i].Iid = iid - break - } } rows1.Close() @@ -20102,15 +21023,12 @@ func collect_well_nb_1() { for rows1.Next() { var et string if err = rows1.Scan(&et); err == nil { - if len(et) >= 19 { et = et[:10] + " " + et[11:19] - if et >= data[i].Bt { data[i].Et = et } } - } } rows1.Close() @@ -20123,6 +21041,9 @@ func collect_well_nb_1() { js_data, _ := json.Marshal(v) logs.Info(fmt.Sprintf(`wellname:%s `, string(js_data))) + // 判断是否为目标电池 + isTarget := (v.WellName == "KLP6DXZK2-1" && v.Bcode == "1054") + var well_db string if _, ok := well_map[v.WellName]; ok { well_db = well_map[v.WellName].WellName @@ -20141,11 +21062,14 @@ func collect_well_nb_1() { et_sql = fmt.Sprintf(`select distinct [4304] from [DECODETABLE] where [4304] is not null and [4304]>'%s' order by [4304] asc`, data[j].Bt) } + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 井名=%s, 电池=%s, Bt=%s, Et=%s, 查询DECODETABLE SQL: %s", + v.WellName, v.Bcode, data[j].Bt, data[j].Et, et_sql)) + } + var t_escapeSecond int64 rows, err := conn.Query(et_sql) if err == nil { - - //oneHoueSecondes := 3600 timelayout := "2006-01-02 15:04:05" loc, _ := time.LoadLocation("Local") @@ -20154,46 +21078,74 @@ func collect_well_nb_1() { var et string for rows.Next() { if err = rows.Scan(&et); err == nil { - var t string if len(et) >= 19 { t = et[:10] + " " + et[11:19] } if cnt == 0 { + // 第一段:从Bt到t + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 第%d个时间点 t=%s, 计算第一段 [%s -> %s] 调用 get_dring_inout_seconds", + cnt+1, t, data[j].Bt, t)) + } t_seconds := get_dring_inout_seconds(conn, data[j].Bt, t) t_escapeSecond += t_seconds - //logs.Info(fmt.Sprintf(`wellname %s 开始:%s 结束:%s 用时:%d`, v.WellName, data[j].Bt, t, t_seconds)) + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] get_dring_inout_seconds返回 %d 秒,累计总秒数=%d", t_seconds, t_escapeSecond)) + } lastTime, _ = time.ParseInLocation(timelayout, t, loc) } else { endT, _ := time.ParseInLocation(timelayout, t, loc) ts := endT.Unix() - lastTime.Unix() + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 第%d个时间点 t=%s, 与上一个时间点 %s 的日历差=%d 秒", + cnt+1, t, lastTime.Format(timelayout), ts)) + } if ts < int64(3600*3) { + // 短间隔直接累加日历差 t_escapeSecond += ts + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 间隔 <3小时,直接累加 %d 秒,累计总秒数=%d", ts, t_escapeSecond)) + } } else { - + // 长间隔调用 get_dring_inout_seconds + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 间隔 >=3小时,调用 get_dring_inout_seconds [%s -> %s]", + lastTime.Format(timelayout), t)) + } t_seconds := get_dring_inout_seconds(conn, lastTime.Format(timelayout), t) t_escapeSecond += t_seconds - //logs.Info(fmt.Sprintf(`wellname %s 开始:%s 结束:%s 用时:%d`, v.WellName, lastTime.Format(timelayout), t, t_seconds)) + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] get_dring_inout_seconds返回 %d 秒,累计总秒数=%d", t_seconds, t_escapeSecond)) + } } - lastTime = endT } - cnt++ } } rows.Close() + // 处理最后一段:从最后一个时间点(et变量)到 Et var t string if len(et) >= 19 { t = et[:10] + " " + et[11:19] - + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 最后一段 [%s -> %s] 调用 get_dring_inout_seconds", t, data[j].Et)) + } t_seconds := get_dring_inout_seconds(conn, t, data[j].Et) t_escapeSecond += t_seconds - //logs.Info(fmt.Sprintf(`wellname %s 开始:%s 结束:%s 用时:%d`, v.WellName, t, data[j].Et, t_seconds)) + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] get_dring_inout_seconds返回 %d 秒,累计总秒数=%d", t_seconds, t_escapeSecond)) + } } + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 所有分段累加完成,总有效秒数=%d,折合小时=%.2f", t_escapeSecond, float32(t_escapeSecond)/3600)) + } + + // 以下为计算 b_life 的部分(与时间累计无关,但保留原逻辑) var sel_sql string if et != "" { sel_sql = fmt.Sprintf(`select top 1 [5213] from [EQUIPMENTRECORDS] where [5219]<'%s'`, t) @@ -20203,7 +21155,6 @@ func collect_well_nb_1() { rows_1, err := conn.Query(sel_sql) if err == nil { - for rows_1.Next() { var s string if err = rows_1.Scan(&s); err == nil { @@ -20215,7 +21166,6 @@ func collect_well_nb_1() { } else { data[j].B_life = 200 } - } else { if strings.Contains(s, "下座键") { data[j].B_life = 200 @@ -20227,17 +21177,16 @@ func collect_well_nb_1() { } } } - rows_1.Close() } } data[j].Uset = float32(t_escapeSecond) / 3600 - + if isTarget { + logs.Info(fmt.Sprintf("[目标电池] 最终 use_t = %.2f 小时", data[j].Uset)) + } logs.Info(fmt.Sprintf(`wellname:%s ust %v`, data[j].WellName, data[j].Uset)) - conn.Close() - } else { logs.Info(fmt.Sprintf(`no wellname:%s`, v.WellName)) } @@ -20249,11 +21198,9 @@ func collect_well_nb_1() { sqlConn.Exec(remove_sql) } for k := 0; k < len(data); k++ { - if data[k].Uset < 0.001 { continue } - if data[k].WellName == "ManS7-H7井" && data[k].Bcode == "LHE6113-1586/1589" { data[k].Uset = 355 } @@ -20268,26 +21215,33 @@ func collect_well_nb_1() { ,[use_t] ,[op_flag] ,[ClOUDACCOUNT] - ,[service_type],[b_life]) + ,[service_type] + ,[b_life]) VALUES ('%s' ,'%s' - ,'%s' - ,'%s' - ,'%s' - ,'%s' + ,'%s' + ,'%s' + ,'%s' + ,'%s' ,%v - ,%d - ,'%s',%d,%v)`, + ,%d + ,'%s' + ,%d + ,%v)`, data[k].WellName, data[k].Sid, data[k].Iid, data[k].Bcode, data[k].Bt, data[k].Et, - data[k].Uset, data[k].Flag, data[k].Cloud_account, data[k].Service_type, - data[k].B_life) + data[k].Uset, data[k].Flag, data[k].Cloud_account, data[k].Service_type, data[k].B_life) fmt.Println(insert_sql) _, err = sqlConn.Exec(insert_sql) if err != nil { logs.Error(fmt.Sprintf(`%s err:%s`, insert_sql, err.Error())) } + + // 在插入时也打印一条确认日志(仅目标电池) + if data[k].WellName == "KLP6DXZK2-1" && data[k].Bcode == "1054" { + logs.Info(fmt.Sprintf("[目标电池] 已插入 analysis_battery_well, use_t=%v", data[k].Uset)) + } } } @@ -20505,6 +21459,27 @@ func get_nb_his_ex(response http.ResponseWriter, request *http.Request) { ifWhere = true } + is_special := getUserSpecial(req.OpUser) + + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + if ifWhere { + whereSql += " and wellname in (" + } else { + whereSql += " wellname in (" + } + for i, name := range specialWells { + if i > 0 { + whereSql += "," + } + whereSql += "'" + name + "'" + } + whereSql += ")" + ifWhere = true + } + } + if req.Wellname != "" { if ifWhere { whereSql += fmt.Sprintf(` and [wellname] = '%s' `, req.Wellname) @@ -20540,7 +21515,7 @@ func get_nb_his_ex(response http.ResponseWriter, request *http.Request) { logs.Error("get_nb count Query Error", err.Error()) return } - + fmt.Println("井位-电池sql--", selSql) row, err := sqlConn.Query(selSql) if err != nil { logs.Error("get_nb_his_ex Query Error", err.Error()) @@ -20570,6 +21545,91 @@ func get_nb_his_ex(response http.ResponseWriter, request *http.Request) { logs.Info(fmt.Sprintf("get_nb_his_ex recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } +// func get_nb_his_ex(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// logs.Info("get_nb_his_ex recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req get_nb_his_ex_req +// json.Unmarshal(reqdata, &req) + +// ps_info := get_ps_info(req.OpUser) + +// var selSql string +// var cntSql string +// var whereSql string +// var ifWhere bool + +// if spe_name, ok := spe_user[req.OpUser]; ok { +// whereSql = fmt.Sprintf(` [ClOUDACCOUNT] = '%s'`, spe_name) +// ifWhere = true +// } + +// if req.Wellname != "" { +// if ifWhere { +// whereSql += fmt.Sprintf(` and [wellname] = '%s' `, req.Wellname) +// } else { +// whereSql += fmt.Sprintf(` [wellname] = '%s' `, req.Wellname) +// } +// ifWhere = true +// } + +// if req.Checked { +// if ifWhere { +// whereSql += fmt.Sprintf(` and [service_type] = 1 `) +// } else { +// whereSql += fmt.Sprintf(` [service_type] = 1 `) +// } +// ifWhere = true +// } + +// if ifWhere { +// selSql = fmt.Sprintf("select top %d [ID],[wellname],[sid],[iid],[b_code],[bt],[et],[use_t],[op_flag] from [analysis_battery_well] where [ID] not in (select top %d [ID] from [analysis_battery_well] where %s order by [bt] desc) and %s order by [bt] desc", req.Count, (req.Index-1)*req.Count, whereSql, whereSql) +// } else { +// selSql = fmt.Sprintf("select top %d [ID],[wellname],[sid],[iid],[b_code],[bt],[et],[use_t],[op_flag] from [analysis_battery_well] where [ID] not in (select top %d [ID] from [analysis_battery_well] order by [bt] desc) order by [bt] desc", req.Count, (req.Index-1)*req.Count) +// } + +// if ifWhere { +// cntSql = fmt.Sprintf("select count([ID]) from [analysis_battery_well] where %s", whereSql) +// } else { +// cntSql = fmt.Sprintf("select count([ID]) from [analysis_battery_well]") +// } + +// cnt, err := getRecordCount(sqlConn, cntSql) +// if err != nil { +// logs.Error("get_nb count Query Error", err.Error()) +// return +// } +// fmt.Println("井位-电池sql--", selSql) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error("get_nb_his_ex Query Error", err.Error()) +// return +// } +// defer row.Close() + +// var resp get_nb_his_resp +// resp.Total = cnt +// for row.Next() { +// var d battery_his_info +// if err := row.Scan(&d.ID, &d.Wellname, &d.Sid, &d.Iid, &d.Bcode, &d.Bt, &d.Et, &d.Uset, &d.Flag); err == nil { + +// d.Bt = do_date_time_by_ps(d.Bt, ps_info) +// d.Et = do_date_time_by_ps(d.Et, ps_info) + +// resp.Data = append(resp.Data, d) +// } else { +// logs.Error(err.Error()) +// } +// } + +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) + +// endTime := time.Now().UnixNano() +// logs.Info(fmt.Sprintf("get_nb_his_ex recv req end, use time: %v ms", (endTime-beginTime)/1e6)) +// } + func get_nb_his_en(response http.ResponseWriter, request *http.Request) { /*beginTime := time.Now().UnixNano() logs.Info("get_nb_his_en recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -20709,7 +21769,7 @@ func get_nb_his(response http.ResponseWriter, request *http.Request) { func get_nb(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() - logs.Info("get_nb recv req begin", time.Now().Format("2006-01-02 15:04:05")) + fmt.Println("get_nb recv req begin", time.Now().Format("2006-01-02 15:04:05")) reqdata, _ := ioutil.ReadAll(request.Body) var req get_nb_req @@ -20720,23 +21780,96 @@ func get_nb(response http.ResponseWriter, request *http.Request) { var whereSql string var ifWhere bool + is_special := getUserSpecial(req.OpUser) + fmt.Println("get_nb is_special:", is_special) + if req.Sid != "" { wellnamesource := "%" + req.Sid + "%" whereSql += fmt.Sprintf(` [battery_sid] like '%s'`, wellnamesource) ifWhere = true } + // 特殊账号:根据井名获取电池编码列表 + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + fmt.Println("get_nb specialWells:", specialWells) + if len(specialWells) > 0 { + // 构建井名 IN 子句 + wellInClause := "" + for i, name := range specialWells { + if i > 0 { + wellInClause += "," + } + wellInClause += "'" + strings.ReplaceAll(name, "'", "''") + "'" + } + bCodeQuery := fmt.Sprintf("SELECT DISTINCT [b_code] FROM [analysis_battery_well] WHERE [wellname] IN (%s)", wellInClause) + fmt.Println("get_nb bCodeQuery:", bCodeQuery) + rows, err := sqlConn.Query(bCodeQuery) + if err != nil { + fmt.Println("get_nb query b_code error:", err.Error()) + if ifWhere { + whereSql += " and 1=0" + } else { + whereSql += " 1=0" + ifWhere = true + } + } else { + var bCodeList []string + for rows.Next() { + var bCode string + if err := rows.Scan(&bCode); err == nil && bCode != "" { + bCodeList = append(bCodeList, bCode) + } + } + rows.Close() + fmt.Println("get_nb bCodeList:", bCodeList) + if len(bCodeList) > 0 { + // 构建 battery_code IN 子句 + bCodeInClause := "" + for i, bc := range bCodeList { + if i > 0 { + bCodeInClause += "," + } + bCodeInClause += "'" + strings.ReplaceAll(bc, "'", "''") + "'" + } + if ifWhere { + whereSql += fmt.Sprintf(" and [battery_code] IN (%s)", bCodeInClause) + } else { + whereSql += fmt.Sprintf(" [battery_code] IN (%s)", bCodeInClause) + ifWhere = true + } + } else { + if ifWhere { + whereSql += " and 1=0" + } else { + whereSql += " 1=0" + ifWhere = true + } + } + } + } else { + if ifWhere { + whereSql += " and 1=0" + } else { + whereSql += " 1=0" + ifWhere = true + } + } + } + if req.Code != "" { likestr := "%" + req.Code + "%" - if ifWhere { - whereSql += fmt.Sprintf(` and [battery_code] like '%s' `, likestr) + whereSql += fmt.Sprintf(` and [battery_code] like '%s'`, likestr) } else { - whereSql += fmt.Sprintf(` [battery_code] like '%s' `, likestr) + whereSql += fmt.Sprintf(` [battery_code] like '%s'`, likestr) } ifWhere = true } + fmt.Println("get_nb final whereSql:", whereSql) + fmt.Println("get_nb ifWhere:", ifWhere) + if ifWhere { selSql = fmt.Sprintf("select top %d [ID] ,[battery_sid],[battery_code],[use_t] ,[remaining_t],[b_life] from [analysis_battery] where [ID] not in (select top %d [ID] from [analysis_battery] where %s order by [ID] asc) and %s order by [ID] asc", req.Count, (req.Index-1)*req.Count, whereSql, whereSql) } else { @@ -20751,14 +21884,14 @@ func get_nb(response http.ResponseWriter, request *http.Request) { cnt, err := getRecordCount(sqlConn, cntSql) if err != nil { - logs.Error("get_nb count Query Error", err.Error()) + fmt.Println("get_nb count Query Error", err.Error()) return } - //fmt.Println(selSql) + fmt.Println("电池查询sql---", selSql) row, err := sqlConn.Query(selSql) if err != nil { - logs.Error("get_nb Query Error", err.Error()) + fmt.Println("get_nb Query Error", err.Error()) return } defer row.Close() @@ -20768,7 +21901,6 @@ func get_nb(response http.ResponseWriter, request *http.Request) { var d battery_info var id int if err := row.Scan(&id, &d.Bid, &d.Bcode, &d.Uset, &d.Remaining_t, &d.B_life); err == nil { - //fmt.Println(d.Uset) if d.B_life != "" && d.B_life != "-0.00" { if d.Remaining_t > 0 { d.Remaining_t1 = fmt.Sprintf(`%0.2f`, (d.Remaining_t/(d.Remaining_t+d.Uset))*100) @@ -20776,10 +21908,9 @@ func get_nb(response http.ResponseWriter, request *http.Request) { } else if d.B_life == "-0.00" { d.B_life = "0.00" } - resp.Data = append(resp.Data, d) } else { - logs.Error(err.Error()) + fmt.Println("get_nb scan error:", err.Error()) } } @@ -20789,10 +21920,101 @@ func get_nb(response http.ResponseWriter, request *http.Request) { fmt.Fprintf(response, string(jdata)) endTime := time.Now().UnixNano() - - logs.Info(fmt.Sprintf("get_nb recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + fmt.Println(fmt.Sprintf("get_nb recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } +// func get_nb(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// logs.Info("get_nb recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req get_nb_req +// json.Unmarshal(reqdata, &req) + +// var selSql string +// var cntSql string +// var whereSql string +// var ifWhere bool + +// // is_special := getUserSpecial(req.OpUser) + +// if req.Sid != "" { +// wellnamesource := "%" + req.Sid + "%" +// whereSql += fmt.Sprintf(` [battery_sid] like '%s'`, wellnamesource) +// ifWhere = true +// } +// // if is_special == "1" { +// // specialWells := getSpecialWell(req.OpUser) + +// // } + +// if req.Code != "" { +// likestr := "%" + req.Code + "%" + +// if ifWhere { +// whereSql += fmt.Sprintf(` and [battery_code] like '%s' `, likestr) +// } else { +// whereSql += fmt.Sprintf(` [battery_code] like '%s' `, likestr) +// } +// ifWhere = true +// } + +// if ifWhere { +// selSql = fmt.Sprintf("select top %d [ID] ,[battery_sid],[battery_code],[use_t] ,[remaining_t],[b_life] from [analysis_battery] where [ID] not in (select top %d [ID] from [analysis_battery] where %s order by [ID] asc) and %s order by [ID] asc", req.Count, (req.Index-1)*req.Count, whereSql, whereSql) +// } else { +// selSql = fmt.Sprintf("select top %d [ID] ,[battery_sid],[battery_code],[use_t] ,[remaining_t],[b_life] from [analysis_battery] where [ID] not in (select top %d [ID] from [analysis_battery] order by [ID] asc) order by [ID] asc", req.Count, (req.Index-1)*req.Count) +// } + +// if ifWhere { +// cntSql = fmt.Sprintf("select count([ID]) from [analysis_battery] where %s", whereSql) +// } else { +// cntSql = fmt.Sprintf("select count([ID]) from [analysis_battery]") +// } + +// cnt, err := getRecordCount(sqlConn, cntSql) +// if err != nil { +// logs.Error("get_nb count Query Error", err.Error()) +// return +// } + +// fmt.Println("电池查询sql---", selSql) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error("get_nb Query Error", err.Error()) +// return +// } +// defer row.Close() + +// var resp get_nb_resp +// for row.Next() { +// var d battery_info +// var id int +// if err := row.Scan(&id, &d.Bid, &d.Bcode, &d.Uset, &d.Remaining_t, &d.B_life); err == nil { +// //fmt.Println(d.Uset) +// if d.B_life != "" && d.B_life != "-0.00" { +// if d.Remaining_t > 0 { +// d.Remaining_t1 = fmt.Sprintf(`%0.2f`, (d.Remaining_t/(d.Remaining_t+d.Uset))*100) +// } +// } else if d.B_life == "-0.00" { +// d.B_life = "0.00" +// } + +// resp.Data = append(resp.Data, d) +// } else { +// logs.Error(err.Error()) +// } +// } + +// resp.Total = cnt + +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) + +// endTime := time.Now().UnixNano() + +// logs.Info(fmt.Sprintf("get_nb recv req end, use time: %v ms", (endTime-beginTime)/1e6)) +// } + func userAuth(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("userAuth recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -23262,6 +24484,8 @@ func get_well_history(response http.ResponseWriter, request *http.Request) { var whereSql string var ifWhere bool + is_special := getUserSpecial(req.OpUser) + // 始终 JOIN well_type_t 表,以便获取每口井的类型信息 joinSql := ` LEFT JOIN [well_type_t] ON [WellInformation].[WELLNameSource] = [well_type_t].[well_name] ` @@ -23279,6 +24503,14 @@ func get_well_history(response http.ResponseWriter, request *http.Request) { } ifWhere = true } + if is_special == "1" { + if ifWhere { + whereSql += fmt.Sprintf(` and WellInformation.ClOUDACCOUNT='%s' `, req.OpUser) + } else { + whereSql += fmt.Sprintf(` WellInformation.ClOUDACCOUNT='%s' `, req.OpUser) + } + ifWhere = true + } if req.EndTime != "" { if ifWhere { @@ -23653,12 +24885,23 @@ func getWellEx1(response http.ResponseWriter, request *http.Request) { var whereSql string var ifWhere bool + is_special := getUserSpecial(req.OpUser) + if req.Wellname != "" { wellnamesource := "%" + req.Wellname + "%" whereSql += fmt.Sprintf(` WELLNameSource like '%s'`, wellnamesource) ifWhere = true } + if is_special == "1" { + if ifWhere { + whereSql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s'`, req.OpUser) + } else { + whereSql += fmt.Sprintf(` [ClOUDACCOUNT]='%s'`, req.OpUser) + } + ifWhere = true + } + if req.BeginTime != "" { if ifWhere { whereSql += fmt.Sprintf(` and CreateTableTime>'%s' `, req.BeginTime) @@ -23775,7 +25018,6 @@ func getWellEx1(response http.ResponseWriter, request *http.Request) { logs.Info(fmt.Sprintf("getWellEx1 recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } - func get_well_tool(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() logs.Info("get_well_tool recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -23791,12 +25033,33 @@ func get_well_tool(response http.ResponseWriter, request *http.Request) { var whereSql string var ifWhere bool + is_special := getUserSpecial(req.OpUser) + if req.Wellname != "" { wellnamesource := "%" + req.Wellname + "%" whereSql += fmt.Sprintf(` WELLNameSource like '%s'`, wellnamesource) ifWhere = true } + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + if ifWhere { + whereSql += " and WELLNameSource in (" + } else { + whereSql += " WELLNameSource in (" + } + for i, name := range specialWells { + if i > 0 { + whereSql += "," + } + whereSql += "'" + name + "'" + } + whereSql += ")" + ifWhere = true + } + } + if req.BeginTime != "" { if ifWhere { whereSql += fmt.Sprintf(` and CreateTableTime>'%s' `, req.BeginTime) @@ -23921,6 +25184,151 @@ func get_well_tool(response http.ResponseWriter, request *http.Request) { logs.Info(fmt.Sprintf("get_well_tool recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } +// func get_well_tool(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// logs.Info("get_well_tool recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req get_well_ex1_req +// json.Unmarshal(reqdata, &req) + +// ps_info := get_ps_info(req.OpUser) + +// var selSql string +// var cntSql string +// var whereSql string +// var ifWhere bool + +// if req.Wellname != "" { +// wellnamesource := "%" + req.Wellname + "%" +// whereSql += fmt.Sprintf(` WELLNameSource like '%s'`, wellnamesource) +// ifWhere = true +// } + +// if req.BeginTime != "" { +// if ifWhere { +// whereSql += fmt.Sprintf(` and CreateTableTime>'%s' `, req.BeginTime) +// } else { +// whereSql += fmt.Sprintf(` CreateTableTime>'%s' `, req.BeginTime) +// } +// ifWhere = true +// } + +// if req.EndTime != "" { +// if ifWhere { +// whereSql += fmt.Sprintf(` and CreateTableTime<'%s'`, req.EndTime) +// } else { +// whereSql += fmt.Sprintf(` CreateTableTime<'%s'`, req.EndTime) +// } +// ifWhere = true +// } + +// if req.Checked { +// if ifWhere { +// whereSql += fmt.Sprintf(` and service_type=1`) +// } else { +// whereSql += fmt.Sprintf(` service_type=1`) +// } +// ifWhere = true +// } + +// if req.If_warn { +// if ifWhere { +// whereSql += fmt.Sprintf(` and [tool_status_warning]=1`) +// } else { +// whereSql += fmt.Sprintf(` [tool_status_warning]=1`) +// } +// ifWhere = true +// } + +// if spe_name, ok := spe_user[req.OpUser]; ok { +// if ifWhere { +// whereSql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s' `, spe_name) +// } else { +// whereSql += fmt.Sprintf(` [ClOUDACCOUNT]='%s' `, spe_name) +// } +// ifWhere = true +// } + +// if ifWhere { +// whereSql += fmt.Sprintf(` and [es_flag]=1 `) +// } else { +// whereSql += fmt.Sprintf(` [es_flag]=1 `) +// } +// ifWhere = true + +// if ifWhere { +// selSql = fmt.Sprintf("select top %d [ID],[WELLNameSource],[stats],[CreateTableTime],COALESCE([Operator],''),[rt_flag],COALESCE([ClOUDACCOUNT],''),COALESCE([tool_status_warning], 0) from [WellInformation] where [ID] not in (select top %d [ID] from [WellInformation] where %s order by [CreateTableTime] desc) and %s order by [CreateTableTime] desc", req.Count, (req.Index-1)*req.Count, whereSql, whereSql) +// } else { +// selSql = fmt.Sprintf("select top %d [ID],[WELLNameSource],[stats],[CreateTableTime],COALESCE([Operator],''),[rt_flag],COALESCE([ClOUDACCOUNT],''),COALESCE([tool_status_warning], 0) from [WellInformation] where [ID] not in (select top %d [ID] from [WellInformation] order by [CreateTableTime] desc) order by [CreateTableTime] desc", req.Count, (req.Index-1)*req.Count) +// } + +// if ifWhere { +// cntSql = fmt.Sprintf("select count([ID]) from [WellInformation] where %s", whereSql) +// } else { +// cntSql = fmt.Sprintf("select count([ID]) from [WellInformation]") +// } +// logs.Info("getWellEx1 count Query ", cntSql) +// cnt, err := getRecordCount(sqlConn, cntSql) +// if err != nil { +// logs.Error("getWellEx1 count Query Error", err.Error()) +// return +// } +// logs.Info("getWellEx1 selSql Query ", selSql) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error("getWellEx1 Query Error", err.Error()) +// return +// } +// defer row.Close() + +// var resp GetWellExResp +// for row.Next() { +// var d wellExData +// var id int +// var wellstate int +// var rt_flag int +// var tsw int +// if err := row.Scan(&id, &d.WellNameSource, &wellstate, &d.Welltime, &d.Welloperator, +// &rt_flag, &d.Upload_user, &tsw); err == nil { + +// if len(d.Welltime) >= 19 { +// d.Welltime = d.Welltime[:10] + " " + d.Welltime[11:19] +// d.Welltime = do_time_by_ps(d.Welltime, ps_info) +// } +// if wellstate == 1 { +// d.Wellstate = "在线" +// } else { +// d.Wellstate = "离线" +// } + +// d.Welloperator = strings.Trim(d.Welloperator, " ") + +// if rt_flag == 1 { +// d.Rt_flag = true +// } + +// if tsw == 1 { +// d.Tool_state_warning = true +// } + +// resp.Data = append(resp.Data, d) + +// } else { +// fmt.Println(err.Error()) +// } +// } + +// resp.Total = cnt + +// jdata, _ := json.Marshal(resp) +// fmt.Fprintf(response, string(jdata)) + +// endTime := time.Now().UnixNano() + +// logs.Info(fmt.Sprintf("get_well_tool recv req end, use time: %v ms", (endTime-beginTime)/1e6)) +// } + func get_well_dev_en(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("get_well_dev_en recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -24059,6 +25467,7 @@ func get_well_dev(response http.ResponseWriter, request *http.Request) { json.Unmarshal(reqdata, &req) ps_info := get_ps_info(req.OpUser) + is_special := getUserSpecial(req.OpUser) var selSql string var cntSql string @@ -24071,6 +25480,15 @@ func get_well_dev(response http.ResponseWriter, request *http.Request) { ifWhere = true } + if is_special == "1" { + if ifWhere { + whereSql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s'`, req.OpUser) + } else { + whereSql += fmt.Sprintf(` [ClOUDACCOUNT]='%s'`, req.OpUser) + } + ifWhere = true + } + if req.BeginTime != "" { if ifWhere { whereSql += fmt.Sprintf(` and CreateTableTime>'%s' `, req.BeginTime) @@ -24341,11 +25759,21 @@ func get_well_cmp(response http.ResponseWriter, request *http.Request) { var whereSql string var ifWhere bool + is_special := getUserSpecial(req.OpUser) + if req.Wellname != "" { wellnamesource := "%" + req.Wellname + "%" whereSql += fmt.Sprintf(` WELLNameSource like '%s'`, wellnamesource) ifWhere = true } + if is_special == "1" { + if ifWhere { + whereSql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s'`, req.OpUser) + } else { + whereSql += fmt.Sprintf(` [ClOUDACCOUNT]='%s'`, req.OpUser) + } + ifWhere = true + } if req.BeginTime != "" { if ifWhere { @@ -24600,12 +26028,21 @@ func get_well_es(response http.ResponseWriter, request *http.Request) { var cntSql string var whereSql string var ifWhere bool + is_special := getUserSpecial(req.OpUser) if req.Wellname != "" { wellnamesource := "%" + req.Wellname + "%" whereSql += fmt.Sprintf(` WELLNameSource like '%s'`, wellnamesource) ifWhere = true } + if is_special == "1" { + if ifWhere { + whereSql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s'`, req.OpUser) + } else { + whereSql += fmt.Sprintf(` [ClOUDACCOUNT]='%s'`, req.OpUser) + } + ifWhere = true + } if req.BeginTime != "" && req.EndTime != "" { if ifWhere { @@ -24650,7 +26087,7 @@ func get_well_es(response http.ResponseWriter, request *http.Request) { logs.Error("getWellEx count Query Error", err.Error()) return } - + fmt.Println("工程服务信息--", selSql) row, err := sqlConn.Query(selSql) if err != nil { logs.Error("getWellEx Query Error", err.Error()) @@ -26973,6 +28410,29 @@ exit: } +func getSpecialWell(user string) []string { + var results []string + sql := fmt.Sprintf("select [WELLNameSource] from [WellInformation] where [CLOUDACCOUNT] = '%s'", user) + + rows, err := sqlConn.Query(sql) + if err != nil { + logs.Info("getSpecialWell Query Error", err.Error()) + return results // 返回空切片 + } + defer rows.Close() + + for rows.Next() { + var wellNameSource string + if err = rows.Scan(&wellNameSource); err != nil { + logs.Info("getSpecialWell Scan Error", err.Error()) + continue // 跳过当前行,继续扫描 + } + results = append(results, wellNameSource) + } + + return results +} + func getWellTestType(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("getWellTestType recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -26988,6 +28448,7 @@ func getWellTestType(response http.ResponseWriter, request *http.Request) { beginIndex := req.Count * (req.Index - 1) endIndex := req.Count*req.Index + 1 + is_special := getUserSpecial(req.OpUser) selSql := `SELECT [well_name],[well_type],[well_create_time] FROM [well_type_t]` var whereSql string = " where [if_available] !=1" @@ -26995,7 +28456,19 @@ func getWellTestType(response http.ResponseWriter, request *http.Request) { likeid := "%" + req.Wellname + "%" whereSql += fmt.Sprintf(` and well_name like '%s'`, likeid) } - + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + whereSql += " and well_name in (" + for i, name := range specialWells { + if i > 0 { + whereSql += "," + } + whereSql += "'" + name + "'" + } + whereSql += ")" + } + } if req.Type != 0 { whereSql += fmt.Sprintf(` and well_type&%d !=0`, req.Type) } @@ -27098,9 +28571,138 @@ exit: endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("getWellTestType recv req end, use time: %v ms", (endTime-beginTime)/1e6)) - } +// func getWellTestType(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// fmt.Println("getWellTestType recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req getWellTestTypeReq +// json.Unmarshal(reqdata, &req) + +// ps_info := get_ps_info(req.OpUser) +// var resp getWellTestTypeResp + +// var cnt int + +// beginIndex := req.Count * (req.Index - 1) +// endIndex := req.Count*req.Index + 1 +// is_special := getUserSpecial(req.OpUser) + +// selSql := `SELECT [well_name],[well_type],[well_create_time] FROM [well_type_t]` +// var whereSql string = " where [if_available] !=1" +// if req.Wellname != "" { +// likeid := "%" + req.Wellname + "%" +// whereSql += fmt.Sprintf(` and well_name like '%s'`, likeid) +// } +// if is_special == "1" { +// } +// if req.Type != 0 { +// whereSql += fmt.Sprintf(` and well_type&%d !=0`, req.Type) +// } + +// if req.BeginTime != "" && req.EndTime != "" { +// whereSql += fmt.Sprintf(` and [well_create_time]>'%s' and [well_create_time]<'%s'`, req.BeginTime, req.EndTime) +// } + +// if spe_name, ok := spe_user[req.OpUser]; ok { +// whereSql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s' `, spe_name) +// } + +// whereSql += ` order by [well_create_time] desc` +// selSql += whereSql + +// fmt.Println(selSql) +// rows, err := sqlConn.Query(selSql) +// if err != nil { +// goto exit +// } + +// for rows.Next() { +// var d wellTestType +// if err = rows.Scan(&d.Wellname, &d.Type, &d.WellCreateTime); err == nil { +// cnt++ +// if cnt > beginIndex && cnt < endIndex { + +// n, _ := strconv.Atoi(d.Type) + +// var t string + +// if n&(1<<0) != 0 { +// t = "测斜" +// } +// if n&(1<<1) != 0 { +// if t != "" { +// t += "," + "近钻头" +// } else { +// t = "近钻头" +// } +// } +// if n&(1<<2) != 0 { +// if t != "" { +// t += "," + "电阻率" +// } else { +// t = "电阻率" +// } +// } +// if n&(1<<3) != 0 { +// if t != "" { +// t += "," + "探管式方位伽马" +// } else { +// t = "探管式方位伽马" +// } +// } +// if n&(1<<4) != 0 { +// if t != "" { +// t += "," + "钻铤式方位伽马" +// } else { +// t = "钻铤式方位伽马" +// } +// } +// if n&(1<<5) != 0 { +// if t != "" { +// t += "," + "自然伽马" +// } else { +// t = "自然伽马" +// } +// } +// if n&(1<<6) != 0 { +// if t != "" { +// t += "," + "工程参数" +// } else { +// t = "工程参数" +// } +// } +// if n&(1<<7) != 0 { +// if t != "" { +// t += "," + "振动粘滑" +// } else { +// t = "振动粘滑" +// } +// } + +// d.Type = t + +// d.WellCreateTime = do_time_by_ps(d.WellCreateTime, ps_info) +// resp.Data = append(resp.Data, d) +// } +// } +// } +// rows.Close() + +// resp.Total = cnt + +// exit: +// jdata, _ := json.Marshal(resp) +// fmt.Println(string(jdata)) +// response.Write(jdata) + +// endTime := time.Now().UnixNano() +// fmt.Println(fmt.Sprintf("getWellTestType recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + +// } + func getFaultRateCsv_en(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("getFaultRateCsv_en recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -27357,6 +28959,128 @@ exit: } +// func getFaultRate(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// fmt.Println("getFaultRate recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req getFaultRateReq +// json.Unmarshal(reqdata, &req) + +// // 长城用户允许的系列号列表(已去重) +// changchengSeriesList := []string{ +// "LHE6150E-02", +// "LHE6150C", +// "LHE6150B", +// "LHE6150K", +// } +// // 构建 map 便于快速查找 +// changchengSeriesMap := make(map[string]bool) +// for _, s := range changchengSeriesList { +// changchengSeriesMap[s] = true +// } + +// frSetting := getFrSettingByUser(req.Op_user) +// m := getMsSeriesMapNewSeries(frSetting.Data) + +// var t_arr []faultRate +// mIndex := make(map[string]int) //series new nama index + +// var resp getFaultRateResp + +// beginIndex := req.Count * (req.Index - 1) +// endIndex := req.Count * req.Index + +// var rds []faultRate + +// selSql := `SELECT [series_num],[fault_cnt],[depth],[fault_rate] FROM [fault_rate_analysis_result] order by [series_num]` +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error("getFaultRate query err:", err.Error()) +// goto exit +// } + +// for row.Next() { +// var v faultRate +// if err = row.Scan(&v.Series, &v.RepairCnt, &v.TotalFootage, &v.Rate); err == nil { + +// if req.Series != "" { +// b := strings.Contains(v.Series, req.Series) +// if !b { +// continue +// } +// } + +// // 长城用户过滤:只保留允许的系列号 +// if req.Op_user == "长城" { +// if !changchengSeriesMap[v.Series] { +// continue +// } +// } + +// if series_new_name, ok := m[v.Series]; ok { +// if index, ok := mIndex[series_new_name]; ok { +// rds[index].RepairCnt += v.RepairCnt +// curDep, _ := strconv.ParseFloat(v.TotalFootage, 64) +// rds[index].tfootage += curDep +// } else { +// v.Series = series_new_name +// prevTotalDep, _ := strconv.ParseFloat(v.TotalFootage, 64) +// v.tfootage = prevTotalDep +// rds = append(rds, v) +// mIndex[series_new_name] = len(rds) - 1 +// } +// } else { +// prevTotalDep, _ := strconv.ParseFloat(v.TotalFootage, 64) +// v.tfootage = prevTotalDep +// rds = append(rds, v) +// } +// } else { +// logs.Error("getFaultRate scan err:", err.Error()) +// } +// } +// row.Close() + +// for i := 0; i < len(rds); i++ { +// d := rds[i] +// if d.tfootage > float64(0) { +// d.TotalFootage = fmt.Sprintf("%.4f", d.tfootage/float64(10000)) +// if d.tfootage != 0 { +// rate := float64(d.RepairCnt*10000) / d.tfootage +// rate, _ = decimal.NewFromFloat(rate).Round(1).Float64() +// if rate < float64(0.1) { +// d.Rate = "0" +// } else { +// d.Rate = fmt.Sprintf("%v", rate) +// } +// } else { +// d.Rate = "0" +// } +// } else { +// d.Rate = "0" +// d.TotalFootage = "0" +// } +// t_arr = append(t_arr, d) +// } + +// for i := beginIndex; i < endIndex; i++ { +// fmt.Println(i) +// if i >= len(t_arr) { +// break +// } +// resp.Data = append(resp.Data, t_arr[i]) +// } +// resp.Total = len(t_arr) + +// exit: +// jdata, _ := json.Marshal(resp) +// fmt.Println(string(jdata)) +// response.Write(jdata) + +// endTime := time.Now().UnixNano() +// fmt.Println(fmt.Sprintf("getFaultRate recv req end, use time: %v ms", (endTime-beginTime)/1e6)) +// } + func getFaultRate(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("getFaultRate recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -27378,7 +29102,24 @@ func getFaultRate(response http.ResponseWriter, request *http.Request) { var rds []faultRate - selSql := `SELECT [series_num],[fault_cnt],[depth],[fault_rate] FROM [fault_rate_analysis_result] order by [series_num]` + // 特殊账号:构建series_num IN条件 + is_special := getUserSpecial(req.Op_user) + seriesInClause := "" + if is_special == "1" { + // 去重后的允许系列号 + seriesList := []string{"LHE6150E-02", "LHE6150C", "LHE6150B", "LHE6150K"} + inValues := "" + for i, s := range seriesList { + if i > 0 { + inValues += "," + } + inValues += "'" + strings.ReplaceAll(s, "'", "''") + "'" + } + seriesInClause = fmt.Sprintf(" and series_num in (%s)", inValues) + } + + selSql := `SELECT [series_num],[fault_cnt],[depth],[fault_rate] FROM [fault_rate_analysis_result] where 1=1` + seriesInClause + ` order by [series_num]` + fmt.Println("万米故障率---", selSql) row, err := sqlConn.Query(selSql) if err != nil { logs.Error("getFaultRate query err:", err.Error()) @@ -27934,6 +29675,9 @@ func getTs(response http.ResponseWriter, request *http.Request) { var resp GetTsResp var likeid string + + is_special := getUserSpecial(req.OpUser) + if req.WellName != "" { likeid = "wellname = '" + req.WellName + "'" } @@ -27953,6 +29697,25 @@ func getTs(response http.ResponseWriter, request *http.Request) { } } + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + wellCondition := "wellname in (" + for i, name := range specialWells { + if i > 0 { + wellCondition += "," + } + wellCondition += "'" + name + "'" + } + wellCondition += ")" + if likeid == "" { + likeid = wellCondition + } else { + likeid += " and " + wellCondition + } + } + } + if spe_name, ok := spe_user[req.OpUser]; ok { if likeid == "" { likeid = fmt.Sprintf(` [ClOUDACCOUNT]='%s' `, spe_name) @@ -27965,11 +29728,9 @@ func getTs(response http.ResponseWriter, request *http.Request) { var selCntSql string if likeid == "" { selCntSql = fmt.Sprintf(`select count([wellname]) from (select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where [if_available] !=1)t`) - //selSql = fmt.Sprintf("select top %v [wellname],[series_num],[instrument_id] from (select distinct top %v [wellname],[series_num],[instrument_id] from temp_analysis_result where [if_available] !=1 order by [wellname] asc)t order by [wellname] desc", req.Count, req.Index*req.Count) selSql = fmt.Sprintf("select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where [if_available] !=1 order by [wellname] desc") } else { selCntSql = fmt.Sprintf(`select count([wellname]) from (select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where %s and [if_available] !=1)t`, likeid) - //selSql = fmt.Sprintf("select top %v [wellname],[series_num],[instrument_id] from (select distinct top %v [wellname],[series_num],[instrument_id] from temp_analysis_result where %s and [if_available] !=1 order by [wellname] asc)t order by [wellname] desc", req.Count, req.Index*req.Count, likeid) selSql = fmt.Sprintf("select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where %s and [if_available] !=1 order by [wellname] desc", likeid) } resp.Total, _ = getRecordCount(sqlConn, selCntSql) @@ -27981,16 +29742,13 @@ func getTs(response http.ResponseWriter, request *http.Request) { } for row.Next() { - //var id int var d tsData if err = row.Scan(&d.WellName, &d.Series, &d.InstrumentID); err == nil { if cnt >= beingIndex && cnt < endIndex { resp.Data = append(resp.Data, d) } - cnt++ } - } row.Close() @@ -28000,9 +29758,89 @@ exit: endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("getTs recv req end, use time: %v ms", (endTime-beginTime)/1e6)) - } +// func getTs(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// fmt.Println("getTs recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req GetTsReq +// json.Unmarshal(reqdata, &req) + +// beingIndex := req.Count * (req.Index - 1) +// endIndex := req.Count * req.Index +// cnt := 0 +// var resp GetTsResp + +// var likeid string +// if req.WellName != "" { +// likeid = "wellname = '" + req.WellName + "'" +// } + +// if req.Series != "" { +// if likeid == "" { +// likeid = "series_num like '%" + req.Series + "%'" +// } else { +// likeid += " and series_num like '%" + req.Series + "%'" +// } +// } +// if req.Instrument_id != "" { +// if likeid == "" { +// likeid = "Instrument_id like '%" + req.Instrument_id + "%'" +// } else { +// likeid += " and Instrument_id like '%" + req.Instrument_id + "%'" +// } +// } + +// if spe_name, ok := spe_user[req.OpUser]; ok { +// if likeid == "" { +// likeid = fmt.Sprintf(` [ClOUDACCOUNT]='%s' `, spe_name) +// } else { +// likeid += fmt.Sprintf(` and [ClOUDACCOUNT]='%s' `, spe_name) +// } +// } + +// var selSql string +// var selCntSql string +// if likeid == "" { +// selCntSql = fmt.Sprintf(`select count([wellname]) from (select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where [if_available] !=1)t`) +// selSql = fmt.Sprintf("select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where [if_available] !=1 order by [wellname] desc") +// } else { +// selCntSql = fmt.Sprintf(`select count([wellname]) from (select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where %s and [if_available] !=1)t`, likeid) +// selSql = fmt.Sprintf("select distinct [wellname],[series_num],[instrument_id] from temp_analysis_result where %s and [if_available] !=1 order by [wellname] desc", likeid) +// } +// resp.Total, _ = getRecordCount(sqlConn, selCntSql) + +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error("getTs err:", err.Error()) +// goto exit +// } + +// for row.Next() { +// //var id int +// var d tsData +// if err = row.Scan(&d.WellName, &d.Series, &d.InstrumentID); err == nil { +// if cnt >= beingIndex && cnt < endIndex { +// resp.Data = append(resp.Data, d) +// } + +// cnt++ +// } + +// } +// row.Close() + +// exit: +// jdata, _ := json.Marshal(resp) +// response.Write(jdata) + +// endTime := time.Now().UnixNano() +// fmt.Println(fmt.Sprintf("getTs recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + +// } + func checkWellnameIfAvaliable(wellname string) (available int) { data := []rune(wellname) @@ -28357,7 +30195,6 @@ func getMss_en(response http.ResponseWriter, request *http.Request) { endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("getMss recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } - func getMss(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("getMss recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -28371,6 +30208,23 @@ func getMss(response http.ResponseWriter, request *http.Request) { var resp GetMssResp var whereSql string = " where [if_available] !=1 and lastVer is not null and lastVer != '' " + + is_special := getUserSpecial(req.OpUser) + + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + whereSql += " and wellname in (" + for i, name := range specialWells { + if i > 0 { + whereSql += "," + } + whereSql += "'" + name + "'" + } + whereSql += ")" + } + } + if req.WellName != "" { whereSql += " and wellname like '%" + req.WellName + "%'" } @@ -28475,6 +30329,123 @@ func getMss(response http.ResponseWriter, request *http.Request) { fmt.Println(fmt.Sprintf("getMss recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } +// func getMss(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// fmt.Println("getMss recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req GetMssReq +// json.Unmarshal(reqdata, &req) + +// ps_info := get_ps_info(req.OpUser) + +// var resp GetMssResp + +// var whereSql string = " where [if_available] !=1 and lastVer is not null and lastVer != '' " +// if req.WellName != "" { +// whereSql += " and wellname like '%" + req.WellName + "%'" +// } + +// if req.Series != "" { +// whereSql += " and series like '%" + req.Series + "%'" +// } +// if req.Instrument_id != "" { +// whereSql += " and instrument_id like '%" + req.Instrument_id + "%'" +// } + +// if req.Checked { +// likeid := fmt.Sprintf(" and [service_type]=1") +// whereSql += likeid +// } + +// if spe_name, ok := spe_user[req.OpUser]; ok { +// likeid := fmt.Sprintf(" and [ClOUDACCOUNT]='%s' ", spe_name) +// whereSql += likeid +// } + +// selCountSql := fmt.Sprintf(`select count([ID]) from [analysis_result_mss] %s`, whereSql) +// logs.Info("getMss selCountSql------- : ", selCountSql) +// rcnt, err := getRecordCount(sqlConn, selCountSql) +// logs.Info("getMss select data : ", rcnt) +// if err != nil { +// logs.Error(fmt.Sprintf("%s err:%v", selCountSql, err.Error())) +// jdata, _ := json.Marshal(resp) +// response.Write(jdata) +// return +// } +// query_cnt := req.Index * req.Count +// var cnt int +// logs.Info("getMss query_cnt : ", query_cnt) +// logs.Info("getMss rcnt : ", rcnt) +// if query_cnt > rcnt { +// cnt = rcnt + req.Count - query_cnt +// } else { +// cnt = req.Count +// } +// logs.Info("getMss cnt : ", cnt) +// orderBySql := " order by saveTime desc" +// selSql := fmt.Sprintf(`select top %d [ID],[wellname],[series],[instrument_id],[saveTime],[ver],[lastVer],[workTime],[totalWorkTime],[state],[repairCnt] from [analysis_result_mss]`, cnt) +// if whereSql != "" { +// selSql += whereSql +// } +// selSql += fmt.Sprintf(`and lastVer is not null and lastVer != '' and ID not in (select top %v ID from analysis_result_mss %s %s)`, (req.Index-1)*req.Count, whereSql, orderBySql) +// selSql += orderBySql + +// logs.Info("getMss select data : ", selSql) +// fmt.Println(selSql) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error(fmt.Sprintf("getMss db query err:%s", err.Error())) +// jdata, _ := json.Marshal(resp) +// response.Write(jdata) +// return +// } + +// var rds []GetMssRespData +// timeLayout := "2006-01-02 15:04:05" +// loc, _ := time.LoadLocation("Local") + +// for row.Next() { + +// var id int +// var v GetMssRespData +// if err = row.Scan(&id, &v.WellName, &v.Series, &v.InstrumentID, &v.SaveTime, &v.Ver, &v.LastVer, &v.WorkTime, &v.TotalWorkTime, &v.State, &v.RepairCnt); err == nil { + +// opTime, _ := time.ParseInLocation(timeLayout, v.SaveTime, loc) + +// if time.Now().Sub(opTime).Hours() < 24*30 { + +// wt, _ := strconv.Atoi(v.WorkTime) +// if wt > 1000 { +// v.Warn_type = "1" +// } else { +// if strings.Contains(v.Ver, "A") || strings.Contains(v.Ver, "a") || strings.Contains(v.LastVer, "B") || strings.Contains(v.LastVer, "b") { + +// } else { +// if v.Ver != "" && v.LastVer != "" && v.Ver < v.LastVer { +// v.Warn_type = "2" +// } +// } +// } +// } + +// v.SaveTime = do_time_by_ps(v.SaveTime, ps_info) +// rds = append(rds, v) +// } + +// } +// row.Close() + +// resp.Total = rcnt +// resp.Data = append(resp.Data, rds...) + +// jdata, _ := json.Marshal(resp) +// response.Write(jdata) + +// endTime := time.Now().UnixNano() +// fmt.Println(fmt.Sprintf("getMss recv req end, use time: %v ms", (endTime-beginTime)/1e6)) +// } + func getMsCsv_en(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("getMsCsv_en recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -28678,9 +30649,34 @@ func getMs(response http.ResponseWriter, request *http.Request) { mIndex := make(map[string]int) //series new nama index var rds []GetMsRespData - var selRds []GetMsRespData - selSql := fmt.Sprintf(`SELECT [series_num],[fault_cnt],[total_worktime],[mf] FROM [mtbf_analysis_result] where [if_available] !=1 order by series_num`) + + // 特殊用户系列号限制 + is_special := getUserSpecial(req.Op_user) + seriesWhere := "" + if is_special == "1" { + // 定义并去重常量数组 + seriesList := []string{"LHE6150E-02", "LHE6150C", "LHE6150B", "LHE6150K"} + uniqueSeries := make(map[string]bool) + for _, s := range seriesList { + uniqueSeries[s] = true + } + // 构建 IN 子句 + inClause := "" + first := true + for s := range uniqueSeries { + if !first { + inClause += "," + } + inClause += "'" + strings.ReplaceAll(s, "'", "''") + "'" + first = false + } + if inClause != "" { + seriesWhere = fmt.Sprintf(" and series_num IN (%s)", inClause) + } + } + + selSql := fmt.Sprintf(`SELECT [series_num],[fault_cnt],[total_worktime],[mf] FROM [mtbf_analysis_result] where [if_available] !=1%s order by series_num`, seriesWhere) row, err := sqlConn.Query(selSql) if err != nil { logs.Error("getMs select data err:", err.Error()) @@ -28712,7 +30708,6 @@ func getMs(response http.ResponseWriter, request *http.Request) { t_arr = append(t_arr, selRds[i]) mIndex[series_new_name] = len(t_arr) - 1 } - } } @@ -28742,9 +30737,96 @@ exit: endTime := time.Now().UnixNano() fmt.Println(fmt.Sprintf("getMs recv req end, use time: %v ms", (endTime-beginTime)/1e6)) - } +// func getMs(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// fmt.Println("getMs recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// reqdata, _ := ioutil.ReadAll(request.Body) +// var req GetMsReq +// json.Unmarshal(reqdata, &req) + +// var resp GetMsResp + +// beginIndex := req.Count * (req.Index - 1) +// endIndex := req.Count * req.Index + +// //ms setting +// mhSetting := getMsSettingByUser(req.Op_user) +// m := getMsSeriesMapNewSeries(mhSetting.Data) + +// var t_arr []GetMsRespData +// mIndex := make(map[string]int) //series new nama index + +// var rds []GetMsRespData + +// var selRds []GetMsRespData +// selSql := fmt.Sprintf(`SELECT [series_num],[fault_cnt],[total_worktime],[mf] FROM [mtbf_analysis_result] where [if_available] !=1 order by series_num`) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error("getMs select data err:", err.Error()) +// goto exit +// } + +// for row.Next() { +// var d GetMsRespData +// if err = row.Scan(&d.Series, &d.RepairCnt, &d.TotalTime, &d.MtbfTime); err == nil { +// selRds = append(selRds, d) +// } +// } +// row.Close() + +// for i := 0; i < len(selRds); i++ { +// if series_new_name, ok := m[selRds[i].Series]; !ok { +// t_arr = append(t_arr, selRds[i]) +// } else { +// if index, ok := mIndex[series_new_name]; ok { +// t_arr[index].RepairCnt += selRds[i].RepairCnt +// t_arr[index].TotalTime += selRds[i].TotalTime +// if t_arr[index].RepairCnt != 0 { +// t_arr[index].MtbfTime = t_arr[index].TotalTime / t_arr[index].RepairCnt +// } else { +// t_arr[index].MtbfTime = t_arr[index].TotalTime +// } +// } else { +// selRds[i].Series = series_new_name +// t_arr = append(t_arr, selRds[i]) +// mIndex[series_new_name] = len(t_arr) - 1 +// } + +// } +// } + +// if req.SearchValue == "" { +// rds = append(rds, t_arr...) +// } else { +// for i := 0; i < len(t_arr); i++ { +// b := strings.Contains(t_arr[i].Series, req.SearchValue) +// if b { +// rds = append(rds, t_arr[i]) +// } +// } +// } + +// for i := beginIndex; i < endIndex; i++ { +// if i >= len(rds) { +// break +// } +// resp.Data = append(resp.Data, rds[i]) +// } + +// resp.Total = len(rds) + +// exit: +// jdata, _ := json.Marshal(resp) +// response.Write(jdata) + +// endTime := time.Now().UnixNano() +// fmt.Println(fmt.Sprintf("getMs recv req end, use time: %v ms", (endTime-beginTime)/1e6)) + +// } + func getMhSCsv_en(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() @@ -29493,7 +31575,8 @@ func getMh(response http.ResponseWriter, request *http.Request) { json.Unmarshal(reqdata, &req) ps_info := get_ps_info(req.OpUser) - //fmt.Println(req) + + is_special := getUserSpecial(req.OpUser) whereSql := " where [if_available]!=1" if req.Id != "" { @@ -29501,6 +31584,20 @@ func getMh(response http.ResponseWriter, request *http.Request) { whereSql += likeid } + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + whereSql += " and wellname in (" + for i, name := range specialWells { + if i > 0 { + whereSql += "," + } + whereSql += "'" + name + "'" + } + whereSql += ")" + } + } + if req.BeginTime != "" || req.EndTime != "" { likeid := fmt.Sprintf(" and [wellBeginTime]>'%s' and [wellEndTime]<'%s'", req.BeginTime, req.EndTime) whereSql += likeid @@ -29568,6 +31665,98 @@ exit: fmt.Println(fmt.Sprintf("getMh recv req end, use time: %v ms", (endTime-beginTime)/1e6)) } +// func getMh(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// fmt.Println("getMh recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// var rds []GetMhRespData + +// var err error +// var req GetMhReq +// var resp GetMhResp +// resp.Data = []GetMhRespData{} + +// reqdata, _ := ioutil.ReadAll(request.Body) +// json.Unmarshal(reqdata, &req) + +// ps_info := get_ps_info(req.OpUser) +// //fmt.Println(req) + +// is_special := getUserSpecial(req.OpUser) + +// whereSql := " where [if_available]!=1" +// if req.Id != "" { +// likeid := " and [wellname] like '%" + req.Id + "%'" +// whereSql += likeid +// } + +// if req.BeginTime != "" || req.EndTime != "" { +// likeid := fmt.Sprintf(" and [wellBeginTime]>'%s' and [wellEndTime]<'%s'", req.BeginTime, req.EndTime) +// whereSql += likeid +// } + +// if !req.IfAll { +// likeid := fmt.Sprintf(" and [wellBeginTime]!='' and [welloper]!='' ") +// whereSql += likeid +// } + +// if req.Checked { +// likeid := fmt.Sprintf(" and [service_type]=1") +// whereSql += likeid +// } + +// if spe_name, ok := spe_user[req.OpUser]; ok { +// likeid := fmt.Sprintf(" and [ClOUDACCOUNT]='%s' ", spe_name) +// whereSql += likeid +// } + +// whereSql += " order by [wellCreateTime] desc" + +// beginIndex := req.Count * (req.Index - 1) +// endIndex := req.Count * req.Index + +// selSql := fmt.Sprintf("select [wellname],[wellCreateTime],[welloper],[state],[wellBeginTime],[wellEndTime],[wellWorkTime] from [analysis_result_mh] %s", whereSql) +// fmt.Println("getMh--sql---", selSql) +// row, err := sqlConn.Query(selSql) +// if err != nil { +// logs.Error("getMh query:", selSql, " err:", err.Error()) +// goto exit +// } + +// for row.Next() { +// var v GetMhRespData +// if row.Scan(&v.WellName, &v.WellCreateT, &v.WellOper, &v.State, &v.WellBeginT, &v.WellEndT, &v.WellWorkT); err == nil { +// v.WellCreateT = do_time_by_ps(v.WellCreateT, ps_info) +// v.WellBeginT = do_time_by_ps(v.WellBeginT, ps_info) +// v.WellEndT = do_time_by_ps(v.WellEndT, ps_info) + +// rds = append(rds, v) +// } else { +// logs.Error("getMh scan err:", err.Error()) +// } +// } +// row.Close() + +// for i := 0; i < len(rds); i++ { +// if i >= beginIndex && i < endIndex { +// resp.Data = append(resp.Data, rds[i]) +// } +// } +// resp.Total = len(rds) + +// goto exit + +// exit: +// jdata, _ := json.Marshal(resp) +// _, err = response.Write(jdata) +// if err != nil { +// logs.Error("getMh:", err.Error()) +// } + +// endTime := time.Now().UnixNano() +// fmt.Println(fmt.Sprintf("getMh recv req end, use time: %v ms", (endTime-beginTime)/1e6)) +// } + func getUserLevel(userPosition string) (level int) { level = 4 @@ -33548,6 +35737,25 @@ func get_es_flag(req wellData) (flag bool) { return } +func getUserSpecial(user string) (isSpecial string) { + sql := fmt.Sprintf("select COALESCE([is_special], 0) from userinfo where username = '%s'", user) + + row, err := sqlConn.Query(sql) + if err != nil { + logs.Info("getUserSpecial Query Error", err.Error()) + return "0" + } + defer row.Close() + + for row.Next() { + if err = row.Scan(&isSpecial); err != nil { + logs.Info("getUserSpecial Scan Error", err.Error()) + return "0" + } + } + + return isSpecial +} func getWell(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() @@ -33558,6 +35766,7 @@ func getWell(response http.ResponseWriter, request *http.Request) { json.Unmarshal(reqdata, &req) ps_info := get_ps_info(req.OpUser) + is_special := getUserSpecial(req.OpUser) var where_sql string = " where [stats]=1" if req.Id != "" { @@ -33568,6 +35777,9 @@ func getWell(response http.ResponseWriter, request *http.Request) { if spe_name, ok := spe_user[req.OpUser]; ok { where_sql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s' `, spe_name) } + if is_special == "1" { + where_sql += fmt.Sprintf(` and [ClOUDACCOUNT]='%s'`, req.OpUser) + } sql := fmt.Sprintf(`select [ID],[WELLNameSource],[WELLName],[stats],[CreateTableTime],COALESCE([IPADDR],''),COALESCE([Operator],'') from [WellNameInformation].[dbo].[WellInformation] %s order by [CreateTableTime] desc`, where_sql) fmt.Println(sql) @@ -34255,7 +36467,6 @@ func saveLinkData(response http.ResponseWriter, request *http.Request) { "cost:", (time.Now().UnixNano()-beginTime)/1e6, "ms") } -// 设备资产管理,设备页签的列表接口。 func get_dev_list(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() fmt.Println("get_dev_list recv req begin", time.Now().Format("2006-01-02 15:04:05")) @@ -34309,6 +36520,19 @@ func get_dev_list(response http.ResponseWriter, request *http.Request) { // 构建 WHERE 条件 var whereParts []string + // 特殊用户井名限制 + is_special := getUserSpecial(req.OpUser) + if is_special == "1" { + specialWells := getSpecialWell(req.OpUser) + if len(specialWells) > 0 { + quoted := make([]string, len(specialWells)) + for i, v := range specialWells { + quoted[i] = "'" + escape(v) + "'" + } + whereParts = append(whereParts, fmt.Sprintf("well_name IN (%s)", strings.Join(quoted, ","))) + } + } + // 使用 IN 子句 if parts := buildIn(req.Serial, "series"); parts != "" { whereParts = append(whereParts, parts) @@ -34355,7 +36579,7 @@ func get_dev_list(response http.ResponseWriter, request *http.Request) { // 查询数据(分页) offset := (page - 1) * pageSize dataSQL := fmt.Sprintf(` - SELECT DISTINCT + SELECT product_name, series, instrument, @@ -34449,6 +36673,200 @@ func get_dev_list(response http.ResponseWriter, request *http.Request) { fmt.Println("get_dev_list recv req end", time.Now().Format("2006-01-02 15:04:05"), "cost:", (time.Now().UnixNano()-beginTime)/1e6, "ms") } +// // 设备资产管理,设备页签的列表接口。 +// func get_dev_list(response http.ResponseWriter, request *http.Request) { +// beginTime := time.Now().UnixNano() +// fmt.Println("get_dev_list recv req begin", time.Now().Format("2006-01-02 15:04:05")) + +// response.Header().Set("Content-Type", "application/json") + +// // 读取请求体(支持 JSON 格式参数) +// reqdata, err := ioutil.ReadAll(request.Body) +// if err != nil { +// fmt.Println("读取请求体失败:", err) +// response.WriteHeader(http.StatusBadRequest) +// response.Write([]byte(`{"code": 1, "msg": "无效的请求数据"}`)) +// return +// } + +// var req devData +// if err := json.Unmarshal(reqdata, &req); err != nil { +// fmt.Println("解析JSON失败:", err) +// response.WriteHeader(http.StatusBadRequest) +// response.Write([]byte(`{"code": 1, "msg": "无效的JSON数据"}`)) +// return +// } + +// // 分页参数(默认第1页,每页50条) +// page := 1 +// pageSize := 50 +// if req.Index > 0 { +// page = req.Index +// } +// if req.Count > 0 { +// pageSize = req.Count +// } + +// // 转义函数 +// escape := func(s string) string { +// return strings.ReplaceAll(s, "'", "''") +// } + +// // 辅助函数:构建 IN 子句 +// buildIn := func(values []string, col string) string { +// if len(values) == 0 { +// return "" +// } +// quoted := make([]string, len(values)) +// for i, v := range values { +// quoted[i] = "'" + escape(v) + "'" +// } +// return fmt.Sprintf("%s IN (%s)", col, strings.Join(quoted, ",")) +// } + +// // 构建 WHERE 条件 +// var whereParts []string + +// // 使用 IN 子句 +// if parts := buildIn(req.Serial, "series"); parts != "" { +// whereParts = append(whereParts, parts) +// } +// if parts := buildIn(req.Number, "instrument"); parts != "" { +// whereParts = append(whereParts, parts) +// } +// if parts := buildIn(req.WellName, "well_name"); parts != "" { +// whereParts = append(whereParts, parts) +// } +// if parts := buildIn(req.Engineer, "engineer"); parts != "" { +// whereParts = append(whereParts, parts) +// } +// if req.InTimeStart != "" { +// whereParts = append(whereParts, fmt.Sprintf("in_time >= '%s'", escape(req.InTimeStart))) +// } +// if req.InTimeEnd != "" { +// whereParts = append(whereParts, fmt.Sprintf("in_time <= '%s'", escape(req.InTimeEnd))) +// } + +// // 构建 WHERE 子句 +// whereSQL := "" +// if len(whereParts) > 0 { +// whereSQL = " WHERE " + strings.Join(whereParts, " AND ") +// } + +// // 查询总数 +// countSQL := `SELECT COUNT(*) FROM ( +// SELECT DISTINCT +// product_name, series, instrument, well_name, person_in_time, +// person_out_time, in_time, out_time, engineer, total_work_time, +// current_work_time, service_type, location +// FROM base_worktime_data` + whereSQL + ` +// ) t` +// var totalCount int64 +// err = sqlConn.QueryRow(countSQL).Scan(&totalCount) +// if err != nil { +// fmt.Println("get_dev_list查询总数失败:", err) +// response.WriteHeader(http.StatusInternalServerError) +// response.Write([]byte(`{"code": 1, "msg": "数据库查询失败"}`)) +// return +// } + +// // 查询数据(分页) +// offset := (page - 1) * pageSize +// dataSQL := fmt.Sprintf(` +// SELECT +// product_name, +// series, +// instrument, +// well_name, +// person_in_time, +// person_out_time, +// in_time, +// out_time, +// engineer, +// total_work_time, +// current_work_time, +// service_type, +// location +// FROM base_worktime_data%s +// ORDER BY in_time DESC +// OFFSET %d ROWS FETCH NEXT %d ROWS ONLY +// `, whereSQL, offset, pageSize) + +// fmt.Println("get_dev_list-sql----", dataSQL) + +// rows, err := sqlConn.Query(dataSQL) +// if err != nil { +// fmt.Println("查询设备列表失败:", err) +// response.WriteHeader(http.StatusInternalServerError) +// response.Write([]byte(`{"code": 1, "msg": "数据库查询失败"}`)) +// return +// } +// defer rows.Close() + +// // 初始化为空切片,而不是 nil +// resp := make([]devRespData, 0) + +// for rows.Next() { +// var d devRespData +// var ( +// productName, serial, number sql.NullString +// wellName, pinTimeRaw, poutTimeRaw, inTimeRaw, outTimeRaw sql.NullString +// engineer, totalWorkTime, currentWorkTime sql.NullString +// serviceType, location sql.NullString +// ) +// err := rows.Scan( +// &productName, &serial, &number, +// &wellName, &pinTimeRaw, &poutTimeRaw, &inTimeRaw, &outTimeRaw, &engineer, +// &totalWorkTime, ¤tWorkTime, &serviceType, +// &location, +// ) +// if err != nil { +// fmt.Println("扫描数据失败:", err) +// continue +// } + +// d.ProductName = productName.String +// d.Serial = serial.String +// d.Number = number.String +// d.WellName = wellName.String +// d.PInTime = formatDateTime(pinTimeRaw.String) +// d.POutTime = formatDateTime(poutTimeRaw.String) +// d.InTime = formatDateTime(inTimeRaw.String) +// d.OutTime = formatDateTime(outTimeRaw.String) +// d.Engineer = engineer.String +// d.TotalWorkTime = totalWorkTime.String +// d.CurrentWorkTime = currentWorkTime.String +// d.ServiceType = serviceType.String +// d.Location = location.String + +// resp = append(resp, d) +// } +// if err = rows.Err(); err != nil { +// fmt.Println("遍历数据失败:", err) +// response.WriteHeader(http.StatusInternalServerError) +// response.Write([]byte(`{"code": 1, "msg": "数据库查询失败"}`)) +// return +// } + +// // 返回数据(包含总数,便于前端分页) +// responseData := map[string]interface{}{ +// "code": 0, +// "msg": "操作成功", +// "data": resp, +// "total": totalCount, +// } + +// jsonResponse, err := json.Marshal(responseData) +// if err != nil { +// response.WriteHeader(http.StatusInternalServerError) +// response.Write([]byte(`{"code": 1, "msg": "生成响应失败"}`)) +// return +// } + +// response.Write(jsonResponse) +// fmt.Println("get_dev_list recv req end", time.Now().Format("2006-01-02 15:04:05"), "cost:", (time.Now().UnixNano()-beginTime)/1e6, "ms") +// } + func export_Seir_detail(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano() @@ -34944,6 +37362,7 @@ func formatDateTime(iso string) string { if iso == "" { return "" } + // 尝试解析 RFC3339 t, err := time.Parse(time.RFC3339, iso) if err == nil { @@ -34952,6 +37371,7 @@ func formatDateTime(iso string) string { } return t.Format("2006-01-02 15:04:05") } + // 尝试解析 "2006-01-02 15:04:05" 格式 t, err = time.Parse("2006-01-02 15:04:05", iso) if err == nil { @@ -34960,13 +37380,28 @@ func formatDateTime(iso string) string { } return t.Format("2006-01-02 15:04:05") } - // 如果 iso 本身就是 "1900-01-01 00:00:00" 等 - if strings.HasPrefix(iso, "1900-01-01") { - return "" - } - return iso // 其他情况返回原值 -} + // 尝试解析 "2006-01-02" 日期格式 + t, err = time.Parse("2006-01-02", iso) + if err == nil { + if t.Year() <= 1900 { + return "" + } + return t.Format("2006-01-02 15:04:05") + } + + // 尝试解析 "2006-01-02T15:04:05" 格式(无时区) + t, err = time.Parse("2006-01-02T15:04:05", iso) + if err == nil { + if t.Year() <= 1900 { + return "" + } + return t.Format("2006-01-02 15:04:05") + } + + // 如果所有解析都失败,返回空字符串 + return "" +} func export_Well_detail(response http.ResponseWriter, request *http.Request) { beginTime := time.Now().UnixNano()