7342 lines
174 KiB
Go
7342 lines
174 KiB
Go
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")
|
||
|
||
}
|