ma-api/main.go

7342 lines
174 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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