From 83275fe36dd8fc4cf2a821f8ee26509da2e53072 Mon Sep 17 00:00:00 2001 From: lupeng_zz <1486083023@qq.com> Date: Fri, 12 Dec 2025 16:21:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=89=8D=E7=BD=AE=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E7=9A=84=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- file/导入前置生产计划.csv | 2 +- main.go | 696 +++++++++++++++++++++++++++++++++++--- req.go | 18 +- res.go | 12 + 4 files changed, 682 insertions(+), 46 deletions(-) diff --git a/file/导入前置生产计划.csv b/file/导入前置生产计划.csv index bc8ad61..b437796 100644 --- a/file/导入前置生产计划.csv +++ b/file/导入前置生产计划.csv @@ -1 +1 @@ -ƻ/Ŀ,Ʒ,,,RDM,,Ƿͼӹ,Ƿȱ,Ƿ״μӹ,Ƿʹƹ +ƻ/Ŀ,Ʒ,,,ظ,RDM,,Ƿͼӹ,Ƿȱ,Ƿ״μӹ,Ƿʹƹ,ע diff --git a/main.go b/main.go index d0857a6..115ec07 100644 --- a/main.go +++ b/main.go @@ -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 ifwhere { - whereSql += fmt.Sprintf(` and %s`, s) - } else { - whereSql += fmt.Sprintf(` %s`, s) - } - ifwhere = true + 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", timeCondition) + } else { + 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 ============================== // 跨域测试 diff --git a/req.go b/req.go index 01b70d4..4712638 100644 --- a/req.go +++ b/req.go @@ -446,12 +446,13 @@ type post_p_req struct { } type get_p_Req struct { - OpUser string `json:"opuser"` - OpUserUuid string `json:"opuser_uuid"` - P_id string `json:"p_id"` - P_name string `json:"p_name"` - Index int `json:"index"` - Count int `json:"count"` + OpUser string `json:"opuser"` + OpUserUuid string `json:"opuser_uuid"` + P_id string `json:"p_id"` + 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"` diff --git a/res.go b/res.go index 11d2111..1ce8d4a 100644 --- a/res.go +++ b/res.go @@ -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"` +}