新增前置计划的新功能

This commit is contained in:
lupeng_zz 2025-12-12 16:21:06 +08:00
parent 0827397a05
commit 83275fe36d
4 changed files with 682 additions and 46 deletions

View File

@ -1 +1 @@
计划/项目号,产品编号,数量,需求日期,RDM任务号,需求人,是否附图加工,是否缺料,是否首次加工,是否使用新螺纹规
计划/项目号,产品编号,数量,需求日期,生产回复日期,RDM任务号,需求人,是否附图加工,是否缺料,是否首次加工,是否使用新螺纹规,备注

1 计划/项目号 产品编号 数量 需求日期 生产回复日期 RDM任务号 需求人 是否附图加工 是否缺料 是否首次加工 是否使用新螺纹规 备注

690
main.go
View File

@ -429,6 +429,7 @@ func main() {
http.HandleFunc("/pkpi/getkpi", getKpi)
http.HandleFunc("/pkpi/getPrekpi", getPrekpi)
http.HandleFunc("/pkpi/importKpi", importKpi)
http.HandleFunc("/pkpi/importPreTaskKpi", importPreTaskKpi)
http.HandleFunc("/pkpi/importPreKpi", importPreKpi)
http.HandleFunc("/pkpi/updatekpi_5", updatekpi_5)
@ -473,6 +474,7 @@ func main() {
http.HandleFunc("/pkpi/import_plan_t", import_plan_t)
http.HandleFunc("/pkpi/get_p_id_options", get_p_id_options)
http.HandleFunc("/pkpi/get_options_byId", get_options_byId)
http.HandleFunc("/pkpi/get_p_process_options", get_p_process_options)
@ -535,6 +537,9 @@ func main() {
http.HandleFunc("/pkpi/export_not_completed_Kpi", export_not_completed_Kpi)
http.HandleFunc("/pkpi/export_completed_Kpi", export_completed_Kpi)
http.HandleFunc("/pkpi/getPrePlanMess", getPrePlanMess)
http.HandleFunc("/pkpi/ConfirmBaseData", ConfirmBaseData)
// ==================== 08/28 添加操作日志 start ====================
http.HandleFunc("/pkpi/add_operation_log", add_operation_log)
http.HandleFunc("/pkpi/get_operation_log", get_operation_log)
@ -1970,9 +1975,9 @@ func get_p_id_options(response http.ResponseWriter, request *http.Request) {
if req.P_like_id != "" {
like_id := "%" + req.P_like_id + "%"
sqlstr = fmt.Sprintf("select [p_id] from [sap] where p_id like '%s' order by ID desc", like_id)
sqlstr = fmt.Sprintf("select [p_id] from [sap] where p_id like '%s' and flag = '1' order by ID desc", like_id)
} else {
sqlstr = fmt.Sprintf("select [p_id] from [sap] order by ID desc")
sqlstr = fmt.Sprintf("select [p_id] from [sap] where flag = '1' order by ID desc")
}
fmt.Println(sqlstr)
@ -2003,6 +2008,78 @@ exit:
}
func get_options_byId(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
// 定义新的返回类型
type OptionItem struct {
Code string `json:"code"`
Name string `json:"name"`
}
// 修改:定义新的响应结构
resp := struct {
Data []OptionItem `json:"data"`
}{
Data: []OptionItem{},
}
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 + "%"
// 修改SQL查询增加p_name字段
sqlstr = fmt.Sprintf("select DISTINCT [p_id], [p_name] from [sap] where p_id like '%s' and flag = '1' order by p_id desc", like_id)
} else {
// 修改SQL查询增加p_name字段
sqlstr = fmt.Sprintf("select DISTINCT [p_id], [p_name] from [sap] where flag = '1' order by p_id desc")
}
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 code string
var name string // 增加name变量
// 修改Scan扫描两个字段
if err := rdRow.Scan(&code, &name); err == nil {
// 将数据添加到resp中
resp.Data = append(resp.Data, OptionItem{
Code: code,
Name: name,
})
} 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 import_plan_t(response http.ResponseWriter, request *http.Request) {
beginTime := time.Now().UnixNano()
fmt.Println("import_plan_t recv req begin", time.Now().Format("2006-01-02 15:04:05"))
@ -2167,8 +2244,8 @@ func import_p(response http.ResponseWriter, request *http.Request) {
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)
sqlstr = fmt.Sprintf(`INSERT INTO [sap] ([p_id],[p_name],[flag])
VALUES ('%s','%s','%s')`, req.Data[i].P_id, req.Data[i].P_name, "1")
} else {
sqlstr = fmt.Sprintf(`UPDATE [dbo].[sap]
SET [p_id] = '%s'
@ -2274,7 +2351,7 @@ func post_p(response http.ResponseWriter, request *http.Request) {
//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))
row, err := sqlConn.Query(fmt.Sprintf(`select ID from [sap] where [p_id] = '%s' and [flag] = '1'`, req.P_id))
if err != nil {
logs.Error(fmt.Sprintf("post_p get sap cnt err:%v", err.Error()))
resp.Ret = -1
@ -2544,7 +2621,7 @@ func get_p_info(p_id string) (p_name string, if_exist bool) {
var rdRow *sql.Rows
var err error
sqlstr = fmt.Sprintf("select [p_name] from [sap] where p_id='%s'", p_id)
sqlstr = fmt.Sprintf("select [p_name] from [sap] where p_id='%s' and [flag] = '1'", p_id)
fmt.Println(sqlstr)
rdRow, err = sqlConn.Query(sqlstr)
@ -2611,8 +2688,26 @@ func get_p(response http.ResponseWriter, request *http.Request) {
}
}
if req.Show_unconfirmed {
if if_where {
where_sql += fmt.Sprintf(` and [flag] = 0`)
if_where = true
} else {
where_sql += fmt.Sprintf(`[flag] = 0`)
if_where = true
}
} else {
if if_where {
where_sql += fmt.Sprintf(` and [flag] = 1`)
if_where = true
} else {
where_sql += fmt.Sprintf(`[flag] = 1`)
if_where = true
}
}
if !if_where {
sqlstr = "select count(ID) from [sap]"
sqlstr = "select count(ID) from [sap] and [flag] = '1'"
} else {
sqlstr = fmt.Sprintf("select count(ID) from [sap] where %s", where_sql)
}
@ -5319,8 +5414,9 @@ func task_transfer(response http.ResponseWriter, request *http.Request) {
resp.Ret = -1
goto exit
}
fmt.Println("转入生产计划depa22222rtmentid", req.DepartmentName)
departmentid = get_department_id_from_name(req.DepartmentName)
fmt.Println("转入生产计划departmentid", departmentid)
now_time = time.Now().Format("2006-01-02 15:04:05")
for i := 0; i < len(req.ID); i++ {
var kpiData kpi
@ -5341,8 +5437,10 @@ func task_transfer(response http.ResponseWriter, request *http.Request) {
}
}
rows.Close()
fmt.Println("转入生产计划depa33333333rtmentid", departmentid)
scan_flag = scan_flag | (1 << (departmentid - 1))
fmt.Println("转入生产计划depa444444444rtmentid", scan_flag)
//update time
task_transfer_update_time(stay_departmentid, departmentid, &kpiData)
@ -5350,6 +5448,8 @@ func task_transfer(response http.ResponseWriter, request *http.Request) {
kpiData.Plan_state = "待分解"
}
fmt.Println("kpiData.Plan_state = ", kpiData.Plan_state)
if stay_departmentid == 1 && departmentid != 1 {
kpiData.Flag1 = true
}
@ -5373,6 +5473,8 @@ func task_transfer(response http.ResponseWriter, request *http.Request) {
}
jdata, _ = json.Marshal(kpiData)
fmt.Println("kpiData---------", kpiData)
fmt.Println("jdata---------", jdata)
sqlstr = fmt.Sprintf(`UPDATE [plan]
SET [data] = '%s' ,[stay_department_id] = %d,[scan_flag] = %d,[p_state]='%s' WHERE ID=%d`,
escapeSingleQuote(string(jdata)), departmentid, scan_flag, kpiData.Plan_state, req.ID[i])
@ -5744,7 +5846,8 @@ func updatePrekpi(response http.ResponseWriter, request *http.Request) {
promise_date = '%s',
rmd_id = '%s',
conveyer = '%s',
total_num = '%s'
total_num = '%s',
remarks = '%s'
WHERE id = %d`,
escapeSingleQuote(req.Data.Task_id),
req.Data.Product_id,
@ -5753,6 +5856,7 @@ func updatePrekpi(response http.ResponseWriter, request *http.Request) {
req.Data.RDM_id,
req.Data.Conveyer,
req.Data.Total_num,
req.Data.Remarks,
req.Data.ID)
fmt.Println("Update SQL:", sqlstr)
@ -7574,7 +7678,7 @@ exit:
}
func importPreKpi(response http.ResponseWriter, request *http.Request) {
func importPreTaskKpi(response http.ResponseWriter, request *http.Request) {
beginTime := time.Now().UnixNano()
fmt.Println("importKpi recv req begin", time.Now().Format("2006-01-02 15:04:05"))
@ -7614,9 +7718,8 @@ func importPreKpi(response http.ResponseWriter, request *http.Request) {
v := req.Data[i]
if v.Task_id == "" || v.Product_id == "" || v.Total_num == "" ||
v.Demand_date == "" || v.Conveyer == "" || v.RDM_id == "" || v.Is_img == "" || v.Is_materials == "" ||
v.Is_new_gauge == "" || v.First_procesds == "" {
resp.Err_text = "计划/项目号,产品编号,数量,需求日期,RDM任务号,交付人,是否附图加工,是否缺料,是否首次加工,是否使用新螺纹规,不可为空!"
v.Demand_date == "" || v.Conveyer == "" {
resp.Err_text = "计划/项目号,产品编号,数量,生产回复日期,RDM任务号,需求人不可为空!"
resp.Ret = 1
goto exit
}
@ -7723,12 +7826,345 @@ func importPreKpi(response http.ResponseWriter, request *http.Request) {
err_context3 += " 不存在,请联系生产管理员添加!"
}
if err_context4 != "" {
err_context4 += " 需求日期必须大于当前日期三天及以上!"
if err_context1 != "" || err_context2 != "" || err_context3 != "" {
resp.Err_text = err_context3 + err_context2 + err_context1
resp.Ret = 1
goto exit
}
if err_context1 != "" || err_context2 != "" || err_context3 != "" || err_context4 != "" {
resp.Err_text = err_context3 + err_context2 + err_context1 + err_context4
for i := 0; i < len(req.Data); i++ {
req.Data[i].RDM_id = strings.ReplaceAll(req.Data[i].RDM_id, "#", "")
demand_t := req.Data[i].Demand_date
demand_t = strings.ReplaceAll(demand_t, "-", "/")
t := strings.Split(demand_t, "/")
if len(t) == 3 {
month, _ := strconv.Atoi(t[1])
day, _ := strconv.Atoi(t[2])
req.Data[i].Demand_date = fmt.Sprintf(`%s/%02d/%02d`, t[0], month, day)
}
var maxid int
var rows *sql.Rows
var start_department_id int
var stay_department_id int
var scan_flag int
//mark stay did
text := req.Data[i].Plan_state
if text == "" {
start_department_id = usrinfo.DepartmentId
stay_department_id = start_department_id
scan_flag = 1 << (usrinfo.DepartmentId - 1)
task_transfer_update_time(0, usrinfo.DepartmentId, &req.Data[i])
} else {
start_department_id = usrinfo.DepartmentId
task_transfer_update_time(0, usrinfo.DepartmentId, &req.Data[i])
if strings.Contains(text, "核对物料") {
stay_department_id = 3
} else {
stay_department_id = start_department_id
}
task_transfer_update_time(start_department_id, stay_department_id, &req.Data[i])
scan_flag = (1 << (start_department_id - 1)) | (1 << (stay_department_id - 1))
}
req.Data[i].Department_name = usrinfo.Department
req.Data[i].Plan_state = ""
if req.Data[i].Plan_state == "" {
req.Data[i].Plan_state = "待分解"
}
data, _ = json.Marshal(req.Data[i])
month = time.Now().Year()*100 + int(time.Now().Month())
// 对包含单引号的字符串进行转义
escapeSingleQuote := func(s string) string {
return strings.Replace(s, "'", "''", -1)
}
sqlstr = fmt.Sprintf(`INSERT INTO [plan]
([time]
,[month]
,[data]
,[start_department_id]
,[stay_department_id]
,[scan_flag]
,[del_flag]
,[p_id]
,[p_name]
,[group_leader]
,[p_state]
,[group_name]
,[task_id]
,[conveyer]
,[rmd_id])
VALUES ('%s',%d,'%s',%d,%d,%d,%d,'%s','%s','%s','%s','%s','%s','%s','%s')`,
time.Now().Format("2006-01-02 15:04:05"), month,
escapeSingleQuote(string(data)), // 转义JSON中的单引号
start_department_id, stay_department_id,
scan_flag, 0,
escapeSingleQuote(req.Data[i].Product_id),
escapeSingleQuote(req.Data[i].Product_name),
"",
req.Data[i].Plan_state,
escapeSingleQuote(req.Data[i].Group_name),
escapeSingleQuote(req.Data[i].Task_id),
escapeSingleQuote(req.Data[i].Conveyer),
escapeSingleQuote(req.Data[i].RDM_id))
mu.Lock()
_, err = sqlConn.Exec(sqlstr)
fmt.Println("sqlstr-------------------", sqlstr)
if err != nil {
mu.Unlock()
logs.Info("importKpi Exec Error:", err.Error())
fmt.Println("sqlstr-------------------", err.Error())
resp.Ret = -1
goto exit
}
//将前置表更新为提交状态
sqlstr = fmt.Sprintf(`UPDATE [pre_plan] SET [commit_flag] = 1 WHERE [id] = %v`, req.Data[i].ID)
_, err = sqlConn.Exec(sqlstr)
if err != nil {
mu.Unlock()
logs.Info("前置表更新失败:", err.Error())
fmt.Println("前置表更新失败-------------------", err.Error())
resp.Ret = -1
goto exit
}
//获取id
sqlstr = fmt.Sprintf(`SELECT top 1 [ID] FROM [plan] order by ID desc`)
rows, err = sqlConn.Query(sqlstr)
if err == nil {
for rows.Next() {
if err = rows.Scan(&maxid); err != nil {
logs.Info("addKpi scan Error:", err.Error())
}
}
rows.Close()
}
mu.Unlock()
if maxid > 0 {
now_time := time.Now().Format("2006-01-02 15:04:05")
update_context := fmt.Sprintf(`任务导入`)
sqlstr = fmt.Sprintf(`INSERT INTO [update_history] ([ID],[op_time],[op_user],[data]) VALUES (%d,'%s','%s','%s')`, maxid, now_time, req.OpUser, update_context)
_, err = sqlConn.Exec(sqlstr)
if err != nil {
logs.Info("importKpi Exec Error:", err.Error())
goto exit
}
if stay_department_id != start_department_id {
stay_did_name := get_department_name_from_did(stay_department_id)
update_context = fmt.Sprintf(`任务从%s转到%s`, usrinfo.Department, stay_did_name)
sqlstr = fmt.Sprintf(`INSERT INTO [update_history] ([ID],[op_time],[op_user],[data]) VALUES (%d,'%s','%s','%s')`, maxid, now_time, req.OpUser, update_context)
_, err = sqlConn.Exec(sqlstr)
if err != nil {
logs.Info("importKpi Exec Error:", err.Error())
goto exit
}
}
}
}
resp.Ret = 0
exit:
jdata, _ := json.Marshal(resp)
fmt.Fprintf(response, string(jdata))
endTime := time.Now().UnixNano()
fmt.Println(fmt.Sprintf("importKpi recv req end, use time: %v ms", (endTime-beginTime)/1e6))
}
func importPreKpi(response http.ResponseWriter, request *http.Request) {
beginTime := time.Now().UnixNano()
fmt.Println("importKpi recv req begin", time.Now().Format("2006-01-02 15:04:05"))
var data []byte
var month int
var err error
var sqlstr string
var resp import_kpi_resp
var usrinfo useInfo
var err_context1 string
var err_context2 string
var err_context3 string
var err_context4 string
// var err_context5 string
reqdata, _ := ioutil.ReadAll(request.Body)
var req importKpiReq
json.Unmarshal(reqdata, &req)
fmt.Println("Data------", req.Data)
b := checkUserIfOnline(req.OpUser, req.OpUserUuid)
if !b {
logs.Info(fmt.Sprintf("用户%s不在线"))
resp.Ret = -1
goto exit
}
usrinfo, err = getUserInfo(req.OpUser)
if err != nil {
logs.Info(fmt.Sprintf("importKpi getUserInfo err:%s", err.Error()))
resp.Ret = -1
goto exit
}
for i := 0; i < len(req.Data); i++ {
v := req.Data[i]
if v.Task_id == "" || v.Product_id == "" || v.Total_num == "" ||
v.Demand_date == "" || v.Conveyer == "" || v.RDM_id == "" || v.Is_img == "" || v.Is_materials == "" ||
v.Is_new_gauge == "" || v.First_procesds == "" {
resp.Err_text = "计划/项目号,产品编号,数量,需求日期,RDM任务号,交付人,是否附图加工,是否缺料,是否首次加工,是否使用新螺纹规,不可为空!"
resp.Ret = 1
goto exit
}
if v.Total_num != "" {
n, err := strconv.Atoi(v.Total_num)
if err != nil {
if err_context1 == "" {
err_context1 += fmt.Sprintf(`产品编号:%s`, v.Product_id)
} else {
err_context1 += fmt.Sprintf(`;产品编号:%s`, v.Product_id)
}
} else {
if n > 9999 {
if err_context1 == "" {
err_context1 += fmt.Sprintf(`产品编号:%s`, v.Product_id)
} else {
err_context1 += fmt.Sprintf(`;产品编号:%s`, v.Product_id)
}
}
}
}
if v.RDM_id != "" {
v.RDM_id = strings.ReplaceAll(v.RDM_id, "#", "")
n, err := strconv.Atoi(v.RDM_id)
if err != nil {
if err_context2 == "" {
err_context2 += fmt.Sprintf(`产品编号:%s`, v.Product_id)
} else {
err_context2 += fmt.Sprintf(`;产品编号:%s`, v.Product_id)
}
} else {
if n > 9999999 {
if err_context2 == "" {
err_context2 += fmt.Sprintf(`产品编号:%s`, v.Product_id)
} else {
err_context2 += fmt.Sprintf(`;产品编号:%s`, v.Product_id)
}
}
}
}
sqlstr = fmt.Sprintf("select [p_name] from [sap] where p_id='%s'", v.Product_id)
fmt.Println(sqlstr)
logs.Error("导入产品编号-------------", sqlstr)
rdRow, err := sqlConn.Query(sqlstr)
if err != nil {
logs.Error(fmt.Sprintf("importKpi Query err:%v", err.Error()))
goto exit
}
var p_name string
for rdRow.Next() {
if err := rdRow.Scan(&p_name); err == nil {
} else {
logs.Error("importKpi scan Error", err.Error())
}
}
logs.Error("导入产品名称-------------", p_name)
rdRow.Close()
if p_name == "" {
if err_context3 == "" {
err_context3 += fmt.Sprintf(`产品编号:%s`, v.Product_id)
} else {
err_context3 += fmt.Sprintf(`;产品编号:%s`, v.Product_id)
}
} else {
req.Data[i].Product_name = p_name
}
demand_t := req.Data[i].Demand_date
demand_t = strings.ReplaceAll(demand_t, "-", "/")
t := strings.Split(demand_t, "/")
if len(t) == 3 {
month, _ := strconv.Atoi(t[1])
day, _ := strconv.Atoi(t[2])
demand_time := fmt.Sprintf(`%s-%02d-%02d 00:00:00`, t[0], month, day)
fmt.Println(demand_time)
timeLayout := "2006-01-02 15:04:05"
loc, _ := time.LoadLocation("Local")
bt, _ := time.ParseInLocation(timeLayout, demand_time, loc)
fmt.Println("hour:", bt.Sub(time.Now()).Hours())
// if int(bt.Sub(time.Now()).Hours()) < 72 {
// if err_context4 == "" {
// err_context4 += fmt.Sprintf(`需求日期必须大于当前日期三天及以上!`)
// } else {
// err_context4 += fmt.Sprintf(`需求日期必须大于当前日期三天及以上!`)
// }
// }
}
if req.Data[i].Promise_date != "" {
promise_date := req.Data[i].Promise_date
promise_date = strings.ReplaceAll(promise_date, "-", "/")
s := strings.Split(promise_date, "/")
if len(s) == 3 {
month, _ := strconv.Atoi(s[1])
day, _ := strconv.Atoi(s[2])
promise_date := fmt.Sprintf(`%s-%02d-%02d 00:00:00`, s[0], month, day)
fmt.Println(promise_date)
timeLayout := "2006-01-02 15:04:05"
loc, _ := time.LoadLocation("Local")
bt, _ := time.ParseInLocation(timeLayout, promise_date, loc)
fmt.Println("hour:", bt.Sub(time.Now()).Hours())
if int(bt.Sub(time.Now()).Hours()) < 72 {
if err_context4 == "" {
err_context4 += fmt.Sprintf(`生产确认日期必须大于当前日期三天及以上!`)
} else {
err_context4 += fmt.Sprintf(`生产确认日期必须大于当前日期三天及以上!`)
}
}
}
}
}
if err_context1 != "" {
err_context1 += " 数量含非数字或大于9999请仔细核对"
}
if err_context2 != "" {
err_context2 += " RDM任务号只允许1-9999999请仔细核对"
}
// if err_context3 != "" {
// err_context3 += " 不存在,请联系生产管理员添加!"
// }
if err_context1 != "" || err_context2 != "" || err_context4 != "" {
resp.Err_text = err_context2 + err_context1 + err_context4
resp.Ret = 1
goto exit
}
@ -7785,6 +8221,28 @@ func importPreKpi(response http.ResponseWriter, request *http.Request) {
return strings.Replace(s, "'", "''", -1)
}
//插入数据之前如果不存在产品数据则插入sap基础数据表中
countSql := fmt.Sprintf(`SELECT COUNT(*) from sap where p_id='%s'`, req.Data[i].Product_id)
fmt.Println(countSql)
var count int
err := sqlConn.QueryRow(countSql).Scan(&count)
if err != nil {
return
}
if count == 0 {
sqlstr = fmt.Sprintf(`INSERT INTO [sap] ([p_id],[p_name] , [flag]) VALUES ('%s','%s','0')`,
req.Data[i].Product_id, req.Data[i].Product_name)
_, err = sqlConn.Exec(sqlstr)
fmt.Println("sap-------------------", sqlstr)
if err != nil {
mu.Unlock()
fmt.Println("sap-------------------", err.Error())
resp.Ret = -1
goto exit
}
}
sqlstr = fmt.Sprintf(`INSERT INTO [pre_plan]
([time]
,[month]
@ -7805,8 +8263,11 @@ func importPreKpi(response http.ResponseWriter, request *http.Request) {
,[start_dept]
,[remarks]
,[task_id]
,[total_num])
VALUES ('%s', %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s','%s')`,
,[demand_date]
,[total_num]
,[commit_flag]
,[promise_date])
VALUES ('%s', %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s','%s','%s','%s','%s')`,
time.Now().Format("2006-01-02 15:04:05"),
month,
escapeSingleQuote(string(data)),
@ -7826,7 +8287,11 @@ func importPreKpi(response http.ResponseWriter, request *http.Request) {
escapeSingleQuote(usrinfo.Department),
escapeSingleQuote(req.Data[i].Remarks),
escapeSingleQuote(req.Data[i].Task_id),
req.Data[i].Total_num)
req.Data[i].Demand_date,
req.Data[i].Total_num,
"0",
req.Data[i].Promise_date)
mu.Lock()
_, err = sqlConn.Exec(sqlstr)
fmt.Println("sqlstr-------------------", sqlstr)
@ -7992,6 +8457,7 @@ func getKpi(response http.ResponseWriter, request *http.Request) {
}
usrinfo, err = getUserInfo(req.OpUser)
if err != nil {
logs.Info(fmt.Sprintf("getKpi getUserInfo err:%s", err.Error()))
goto exit
@ -8160,6 +8626,7 @@ func getKpi(response http.ResponseWriter, request *http.Request) {
}
logs.Info(sqlstr)
fmt.Println("首页查询sql ", sqlstr)
cntRow, err = sqlConn.Query(sqlstr)
if err != nil {
logs.Error(fmt.Sprintf("getKpi query %s err:%v", sqlstr, err.Error()))
@ -8462,23 +8929,32 @@ func getPrekpi(response http.ResponseWriter, request *http.Request) {
ifwhere = true
}
if req.Bt != "" {
s := get_time(req.Bt)
if s != "" {
if req.Bt != "" && req.Et != "" {
fmt.Println("req.Bt-------", req.Bt)
fmt.Println("req.Et-------", req.Et)
timeCondition := fmt.Sprintf(" [time] >= '%s 00:00:00' and [time] <= '%s 23:59:59' ", req.Bt, req.Et)
if ifwhere {
whereSql += fmt.Sprintf(` and %s`, s)
whereSql += fmt.Sprintf(" and %s", timeCondition)
} else {
whereSql += fmt.Sprintf(` %s`, s)
whereSql += fmt.Sprintf(" %s", timeCondition)
}
ifwhere = true
}
}
if req.If_finished {
if ifwhere {
whereSql += fmt.Sprintf(` and [promise_date] IS NULL`)
whereSql += fmt.Sprintf(` and [commit_flag] = 1 `)
} else {
whereSql += fmt.Sprintf(` [promise_date] IS NULL`)
whereSql += fmt.Sprintf(` [commit_flag] = 1`)
}
ifwhere = true
} else {
if ifwhere {
whereSql += fmt.Sprintf(` and [commit_flag] = 0 `)
} else {
whereSql += fmt.Sprintf(` [commit_flag] = 0`)
}
ifwhere = true
}
@ -8532,11 +9008,11 @@ func getPrekpi(response http.ResponseWriter, request *http.Request) {
cnt = req.Count
if ifwhere {
sqlstr = fmt.Sprintf("select top %v [ID],[time],[p_id],[p_name],[p_state],[group_name],[rmd_id],[promise_date],[conveyer],[is_img],[is_materials],[is_frist_process],[is_new_gauge],[start_dept],[task_id],[total_num] from [pre_plan] where ID not in (select top %v ID from [plan] where %s order by ID desc) and %s order by [ID] desc",
cnt, (req.Index-1)*req.Count, whereSql, whereSql)
sqlstr = fmt.Sprintf("SELECT [ID],[time],[p_id],[p_name],[p_state],[group_name],[rmd_id],[promise_date],[conveyer],[is_img],[is_materials],[is_frist_process],[is_new_gauge],[start_dept],[task_id],[total_num],[remarks],[demand_date] FROM [pre_plan] WHERE %s ORDER BY [ID] DESC OFFSET %d ROWS FETCH NEXT %d ROWS ONLY",
whereSql, (req.Index-1)*req.Count, cnt)
} else {
sqlstr = fmt.Sprintf("select top %v [ID],[time],[p_id],[p_name],[p_state],[group_name],[rmd_id],[promise_date],[conveyer],[is_img],[is_materials],[is_frist_process],[is_new_gauge],[start_dept],[task_id],[total_num] from [pre_plan] where ID not in (select top %v ID from [plan] order by ID desc) order by [ID] desc",
cnt, (req.Index-1)*req.Count)
sqlstr = fmt.Sprintf("SELECT [ID],[time],[p_id],[p_name],[p_state],[group_name],[rmd_id],[promise_date],[conveyer],[is_img],[is_materials],[is_frist_process],[is_new_gauge],[start_dept],[task_id],[total_num],[remarks],[demand_date] FROM [pre_plan] ORDER BY [ID] DESC OFFSET %d ROWS FETCH NEXT %d ROWS ONLY",
(req.Index-1)*req.Count, cnt)
}
fmt.Println("sqlstr数据----------", sqlstr)
logs.Info(sqlstr)
@ -8549,15 +9025,18 @@ func getPrekpi(response http.ResponseWriter, request *http.Request) {
for rdRow.Next() {
var d preKpi
if err := rdRow.Scan(&d.ID, &d.CreateTime, &d.Product_id, &d.Product_name, &d.Product_state, &d.Group_name, &d.RDM_id, &d.Promise_date, &d.Conveyer, &d.Is_img, &d.Is_materials, &d.First_procesds, &d.Is_new_gauge, &d.Department_name, &d.Task_id, &d.Total_num); err == nil {
if err := rdRow.Scan(&d.ID, &d.CreateTime, &d.Product_id, &d.Product_name, &d.Product_state, &d.Group_name, &d.RDM_id, &d.Promise_date, &d.Conveyer, &d.Is_img, &d.Is_materials, &d.First_procesds, &d.Is_new_gauge, &d.Department_name, &d.Task_id, &d.Total_num, &d.Remarks, &d.Demand_date); err == nil {
if d.CreateTime != "" {
// 如果 CreateTime 是字符串类型
if t, err := time.Parse("2006-01-02 15:04:05", d.CreateTime); err == nil {
d.CreateTime = t.Format("2006-01-02 15:04:05")
d.CreateTime = t.Format("2006-01-02")
} else if t, err := time.Parse(time.RFC3339, d.CreateTime); err == nil {
// 如果是 RFC3339 格式(如数据库的 datetime 格式)
d.CreateTime = t.Format("2006-01-02 15:04:05")
d.CreateTime = t.Format("2006-01-02")
} else if t, err := time.Parse("2006-01-02", d.CreateTime); err == nil {
// 如果本来就是只有日期的格式,保持原样
d.CreateTime = t.Format("2006-01-02")
}
// 可以根据需要添加其他时间格式的解析
}
@ -8570,7 +9049,6 @@ func getPrekpi(response http.ResponseWriter, request *http.Request) {
}
resp.Data = append(resp.Data, d)
fmt.Println("------------------next", resp.Data)
} else {
logs.Error("getPrekpi scan Error", err.Error())
fmt.Println("getPrekpi scan Error", err.Error())
@ -9866,6 +10344,146 @@ func export_operation_log(response http.ResponseWriter, request *http.Request) {
logs.Info(fmt.Sprintf("export_operation_log recv req end, use time: %v ms", (endTime-beginTime)/1e6))
}
func getPrePlanMess(response http.ResponseWriter, request *http.Request) {
beginTime := time.Now().UnixNano()
fmt.Println("getPrePlanMess----------- ")
var req getPrePlanMessReq
var resp getPrePlanMessResp
var usrinfo useInfo
var err error // 修复:声明 err 变量
var name string
reqdata, _ := ioutil.ReadAll(request.Body)
json.Unmarshal(reqdata, &req)
logs.Info(string(reqdata))
b := checkUserIfOnline(req.OpUser, req.OpUserUuid)
if !b {
logs.Info(fmt.Sprintf("用户%s不在线", req.OpUser))
goto exit
}
usrinfo, err = getUserInfo(req.OpUser)
name = usrinfo.Username
if err != nil {
logs.Error("getPrePlanMess getUserInfo err:", err.Error())
resp.Ret = -1
goto exit
}
fmt.Println("getPrePlanMess--name--------- ", name)
// TODO: 添加获取前置计划消息的业务逻辑
if name == "尚永强" {
var sqlstr = "select count([ID]) from [pre_plan] where [promise_date] IS NULL"
fmt.Println(sqlstr)
rdRow, err := sqlConn.Query(sqlstr)
if err != nil {
logs.Error(fmt.Sprintf("查询条数出错:%v", err.Error()))
return
}
defer rdRow.Close()
// 读取查询结果
var count int
if rdRow.Next() {
err = rdRow.Scan(&count)
if err != nil {
logs.Error(fmt.Sprintf("读取查询结果出错:%v", err.Error()))
return
}
}
if count > 0 {
resp.Mess = fmt.Sprintf("您当前有 %d 条未回复的前置计划,请及时处理!", count)
} else {
resp.Mess = " "
// 或者直接不设置 resp.Mess让前端根据 Mess 是否为空来判断
}
// 设置返回消息
}
resp.Ret = 0
exit:
jdata, _ := json.Marshal(resp)
fmt.Fprintf(response, string(jdata))
endTime := time.Now().UnixNano()
logs.Info(fmt.Sprintf("getPrePlanMess recv req end, use time: %v ms", (endTime-beginTime)/1e6))
}
func ConfirmBaseData(response http.ResponseWriter, request *http.Request) {
beginTime := time.Now().UnixNano()
fmt.Println("ConfirmBaseData recv req begin", time.Now().Format("2006-01-02 15:04:05"))
var resp CommonResp
var req struct {
Ids []int `json:"ids"`
OpUser string `json:"opUser"`
OpUserUuid string `json:"opUserUuid"`
}
// 提前声明所有变量
var idsStr []string
var idsList string
var sqlstr string
var jdata []byte
var reqdata []byte
var b bool
var err error
// 初始化响应,确保总是有值
resp.Ret = -1 // 默认失败
reqdata, err = ioutil.ReadAll(request.Body)
if err != nil {
logs.Error("ConfirmBaseData ReadAll Error:", err.Error())
goto exit
}
err = json.Unmarshal(reqdata, &req)
if err != nil {
logs.Error("ConfirmBaseData Unmarshal Error:", err.Error())
goto exit
}
b = checkIsSysUserOnline(req.OpUser, req.OpUserUuid)
if !b {
goto exit
}
if len(req.Ids) == 0 {
goto exit
}
// 构造IN查询语句
idsStr = make([]string, 0, len(req.Ids))
for _, id := range req.Ids {
idsStr = append(idsStr, strconv.Itoa(id))
}
idsList = strings.Join(idsStr, ",")
sqlstr = fmt.Sprintf("UPDATE [sap] SET [flag] = 1 WHERE [ID] IN (%s)", idsList)
fmt.Println(sqlstr)
_, err = sqlConn.Exec(sqlstr)
if err != nil {
logs.Error("ConfirmBaseData Exec Error:", err.Error())
fmt.Println("ConfirmBaseData Exec Error:", err.Error())
goto exit
}
resp.Ret = 0
exit:
jdata, _ = json.Marshal(resp)
fmt.Fprintf(response, string(jdata))
endTime := time.Now().UnixNano()
fmt.Println(fmt.Sprintf("ConfirmBaseData recv req end, use time: %v ms", (endTime-beginTime)/1e6))
}
// ================== 日志操作 end ==============================
// 跨域测试

6
req.go
View File

@ -452,6 +452,7 @@ type get_p_Req struct {
P_name string `json:"p_name"`
Index int `json:"index"`
Count int `json:"count"`
Show_unconfirmed bool `json:"show_unconfirmed"`
}
type download_template_file_Req struct {
@ -582,6 +583,11 @@ type getKpiReq struct {
Product_user string `json:"product_user"`
}
type getPrePlanMessReq struct {
OpUser string `json:"opuser"`
OpUserUuid string `json:"opuser_uuid"`
}
type getPreKpiReq struct {
OpUser string `json:"opuser"`
OpUserUuid string `json:"opuser_uuid"`

12
res.go
View File

@ -85,6 +85,13 @@ type get_p_id_options_resp struct {
Data []string `json:"data"`
}
type get_options_byId_resp struct {
Data []struct {
Code string `json:"code"`
Name string `json:"name"`
} `json:"data"`
}
type import_kpi_resp import_plan_t_resp
type import_plan_t_resp struct {
@ -371,3 +378,8 @@ type GetOperationLogUserResp struct {
type download_file_Resp struct {
FileId string `json:"fileId"`
}
type getPrePlanMessResp struct {
Ret int `json:"ret"`
Mess string `json:"mess"`
}