package api import ( "bytes" "database/sql" "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "os" "path" "regexp" "sort" "strconv" "strings" "sync" "time" "tmr-watch/conf/setting" "tmr-watch/http/handle/restful" "tmr-watch/module" "tmr-watch/pkg/app" "tmr-watch/pkg/e" "tmr-watch/pkg/logging" "github.com/360EntSecGroup-Skylar/excelize" "github.com/Anderson-Lu/gofasion/gofasion" "github.com/astaxie/beego/logs" "github.com/gin-gonic/gin" "github.com/tealeg/xlsx" "github.com/xormplus/xorm" ) // @Summary 根据SQL执行得到数据集 // @Tags getData // @Accept json // @Produce json // @Param sql query string true "sql" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/getdata [POST] func GetData(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlstr := fsion.Get("sql").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") queryData, err := getDataBySql(sqlstr, offset, pagecount, returntype, nil) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } func Testpartitions(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) databaseName := fsion.Get("databaseName").ValueStr() //获取新数据库名称 user := fsion.Get("user").ValueStr() //获取新数据库用户 passWord := fsion.Get("passWord").ValueStr() //获取新数据库名称 host := fsion.Get("host").ValueStr() //获取新数据库名称 port := fsion.Get("port").ValueStr() //获取新数据库名称 sqls, err1 := restful.Engine.SQL("SELECT * FROM sql_new ").QueryString() //获取新数据库表 if sqls == nil || err1 != nil { appG.Response(http.StatusOK, e.SUCCESS, "失败:"+err1.Error()) } sqlstrs := strings.Split(sqls[0]["sql"], ";") //分割sql connecting := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", user, passWord, host, port, "mysql") mydb, err := sql.Open("mysql", connecting) //连接新连接 if err != nil { println("err1", err.Error()) } _, err = mydb.Exec("CREATE DATABASE IF NOT EXISTS `" + databaseName + "`") // 创建数据库 if err != nil { println("err2", err.Error()) } mydb.Close() connecting = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", user, passWord, host, port, databaseName) //连接新数据库,创建表格 mydb, err = sql.Open("mysql", connecting) if err != nil { println("err3", err.Error()) } defer mydb.Close() if err == nil { mydb.SetMaxOpenConns(10) mydb.SetMaxIdleConns(10) } errmsg := "" if err == nil { //tx ,_ :=mydb.Begin() for _, sqlstr := range sqlstrs { //println("sqlstr---",sqlstr) if sqlstr == "" { continue } _, err = mydb.Exec(sqlstr) if err != nil { println("err4", err.Error()) errmsg = err.Error() //err1 :=tx.Rollback() } } //_, err = mydb.Exec("CREATE TABLE `sql_new` (`sql` text DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;") //err =tx.Commit() } if errmsg == "" { appG.Response(http.StatusOK, e.SUCCESS, "成功"+databaseName) } else { appG.Response(http.StatusOK, e.SUCCESS, "失败"+errmsg) } } func TestData(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlstr := fsion.Get("sql").ValueStr() token := "" if tempv, exists := c.Get("jwt_username"); exists { token = tempv.(string) } appG.Response(http.StatusOK, e.SUCCESS, "你录入的名字是:"+sqlstr+";token:"+token) } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags GetDataByName // @Accept json // @Produce json // @Param sqlname body string true "sqlname" // @Param offset body int true "offset" // @Param pagecount body int true "pagecount" // @Param returntype body string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/GetDataByName [POST] func GetDataByName(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") if sqlnamestr != "getNoMesList" && sqlnamestr != "getNoMesCount" { logging.Info("GetDataByName", c.Keys, c.Request.RemoteAddr, sqlnamestr, parammaps.ValueStr()) } paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { // if sqlnamestr == "getprocessAnalysis" && value == "tmrtname" { // tmrArray := parammaps.Get(strings.Trim(value, " ")).Array() // tmrNameList := []string{} // for _, tmr := range tmrArray { // tmrNameList = append(tmrNameList, tmr.ValueStr()) // } // s_params = append(s_params, strings.Join(tmrNameList, ",")) // } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) // } } } } } else if fsion.HasKey("params") { params := fsion.Get("params").Array() logging.Info("GetDataByName", c.Keys, c.Request.RemoteAddr, sqlnamestr, params) for _, v_params := range params { s_params = append(s_params, v_params.ValueStr()) } } if returntype == "xlsx" { var xlsxfile *xlsx.File xlsxfile, _ = restful.QueryByXlsx(sql, s_params) //c.File("c:/dd.xlsx") c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") c.Header("Content-Disposition", "attachment; filename="+"Workbook.xlsx") c.Header("Content-Transfer-Encoding", "binary") _ = xlsxfile.Write(c.Writer) } else { if sqlnamestr == "getHomepageStr" { parammaps := fsion.Get("parammaps") pastureid := parammaps.Get("pastureid").ValueStr() var montimeList []float64 var montime float64 var wg sync.WaitGroup now := time.Now() for i := 0; i < 30; i++ { wg.Add(1) nowstr := now.AddDate(0, 0, -i).Format("2006-01-02") go func(nowstr string) { defer wg.Done() sqlstr := `select ifnull( getSLtimeDiffSINGEL ( ?, ? ), 0.0 ) as montime` slTimeList, _ := restful.QueryByMap(sqlstr, 0, 0, []interface{}{pastureid, nowstr}) m, _ := strconv.ParseFloat(slTimeList.(map[string]interface{})["list"].([]map[string]interface{})[0]["montime"].(string), 64) montimeList = append(montimeList, m) }(nowstr) } queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { logging.Error("GetDataByName err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } wg.Wait() for _, m := range montimeList { montime += m } queryData.(map[string]interface{})["list"].([]map[string]interface{})[0]["montime"] = Decimal(montime / 30) appG.Response(http.StatusOK, e.SUCCESS, queryData) return } queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { logging.Error("GetDataByName err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags GetDataByName // @Accept json // @Produce json // @Param sqlname body string true "sqlname" // @Param offset body int true "offset" // @Param pagecount body int true "pagecount" // @Param returntype body string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/GetDataByName [POST] func GetDataBySqlIN(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") if sqlnamestr != "getNoMesList" && sqlnamestr != "getNoMesCount" { logging.Info("GetDataByName", c.Keys, c.Request.RemoteAddr, sqlnamestr, parammaps.ValueStr()) } paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } else if fsion.HasKey("params") { params := fsion.Get("params").Array() logging.Info("GetDataByName", c.Keys, c.Request.RemoteAddr, sqlnamestr, params) for _, v_params := range params { s_params = append(s_params, v_params.ValueStr()) } } if returntype == "xlsx" { var xlsxfile *xlsx.File xlsxfile, _ = restful.QueryByXlsx(sql, s_params) //c.File("c:/dd.xlsx") c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") c.Header("Content-Disposition", "attachment; filename="+"Workbook.xlsx") c.Header("Content-Transfer-Encoding", "binary") _ = xlsxfile.Write(c.Writer) } else { queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { logging.Error("GetDataByName err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } // 错误处理 // 将报错信息处理成汉字 func geterrmsg(errstr string) (msgstr string) { var hzRegexp = regexp.MustCompile("^[\u4e00-\u9fa5]$") // 判断是否为汉字 rs := []rune(errstr) if hzRegexp.MatchString(string(rs[0])) { msgstr = errstr return } if strings.Contains(errstr, "Duplicate entry") { strs := strings.Split(errstr, ` key '`) if len(strs) > 1 { if len(strs[len(strs)-1]) > 1 { errstr = "Duplicate entry :" + strs[len(strs)-1] } } } msg, err := restful.Engine.SQL("SELECT msg FROM err_msg where err = ? ", errstr).QueryString() if err != nil { msgstr = errstr return } if msg == nil || len(msg) == 0 { var param []interface{} param = append(param, errstr, errstr) go func() { tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() _, err = restful.ExecQueryT("insert into err_msg(err,msg) VALUES(?,?) ON DUPLICATE KEY UPDATE err=err", param, tx) if err != nil { logging.Error("insert into err_msg(err,msg) err", err) } }() msgstr = errstr } else { msgstr = msg[0]["msg"] } return } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags GetDataByNameForm // @Accept json // @Produce json // @Param sqlname body json true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Param s formData json true "ss" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/GetDataByNameForm [POST] func GetDataByNameForm(c *gin.Context) { appG := app.Gin{C: c} //sqlnamestr := c.PostForm("measureNumber") //dataByte, _ := ioutil.ReadAll(c.Request.Body) //fsion := gofasion.NewFasion(string(dataByte)) //sqlnamestr := fsion.Get("name").ValueStr() //offset := fsion.Get("offset").ValueInt() //pagecount := fsion.Get("pagecount").ValueInt() //returntype := fsion.Get("returntype").ValueStr() //params := fsion.Get("params").Array() c.Request.ParseForm() params := c.Request.Form offset := 0 pageSize_ := 0 returntype := params.Get("page") if returntype == "" { returntype = "0" } if tempv, exists := c.Get("jwt_username"); exists { params.Set("JwtUserName", tempv.(string)) } else { params.Set("JwtUserName", "") } sqlnamestr := params.Get("name") logging.Info("GetDataByNameForm ", c.Keys, sqlnamestr) s_params := make([]interface{}, 0) if returntype == "1" { pageNum, error := strconv.Atoi(params.Get("pageNum")) if error != nil { appG.ResponseEq(http.StatusOK, e.ERROR, 0, "页码不是整数") } pageSize, error := strconv.Atoi(params.Get("pageSize")) if error != nil { appG.ResponseEq(http.StatusOK, e.ERROR, 0, "每页行数不是整数") } pageSize_ = pageSize offset = pageNum } sql, p := restful.GetSqlByNameDB(sqlnamestr) paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { s_params = append(s_params, params.Get(strings.Trim(value, " "))) } } if sql != "" { if returntype == "xlsx" { var xlsxfile *xlsx.File xlsxfile, _ = restful.QueryByXlsx(sql, s_params) c.Header("Content-Type", "application/octet-stream") c.Header("Content-Disposition", "attachment; filename="+sqlnamestr+".xlsx") c.Header("Content-Transfer-Encoding", "binary") _ = xlsxfile.Write(c.Writer) } else { queryData, err := getDataBySql(sql, offset, pageSize_, returntype, s_params) if err != nil { appG.ResponseEq(http.StatusOK, e.ERROR, 1, err.Error()) } else { appG.ResponseEq(http.StatusOK, e.SUCCESS, 0, queryData) } } } else { appG.ResponseEq(http.StatusOK, e.SUCCESS, 0, "后台没有数据接口") } } // @Summary 递归获取所有 // @Tags menu // @Accept json // @Produce json // @Param Ton query string true "Ton" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Router /authdata/GetRoleMenus [GET] func GetRecuDataByName(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() parentidname := fsion.Get("idname").ValueStr() sql, p := restful.GetSqlByNameDB(sqlnamestr) params := make(map[string]interface{}) s_params := make([]interface{}, 0) if fsion.HasKey("params") { for _, v_params := range fsion.Get("params").Array() { s_params = append(s_params, v_params.ValueStr()) } params["params"] = s_params } else { jparams := fsion.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { params[value] = tempv.(string) } else { params[value] = "" } } else { params[value] = jparams.Get(strings.Trim(value, " ")).ValueStr() } } } } queryData, err := GetRecuData_BySql(sql, p, parentidname, params, fsion.HasKey("params")) logging.Info("sqlname parammaps", c.Keys, c.Request.RemoteAddr, sqlnamestr, params) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } appG.Response(http.StatusOK, e.SUCCESS, queryData) } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags GetDataByNames // @Accept json // @Produce json // @RequestBody sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/GetDataByNames [POST] func GetDataByNames(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlParams := fsion.Array() queryData := make(map[string]interface{}) for _, v := range sqlParams { fsion2 := gofasion.NewFasion(v.Json()) logging.Info("GetDataByNames", c.Keys, fsion2.Get("name").ValueStr(), c.Request.RemoteAddr) sql, p := restful.GetSqlByNameDB(fsion2.Get("name").ValueStr()) if sql == "" { errorm := make(map[string]interface{}) errorm["code"] = e.ERROR errorm["message"] = "sql没找到" queryData[fsion2.Get("name").ValueStr()] = errorm continue } else if sql != "" { offset := fsion2.Get("offset").ValueInt() pagecount := fsion2.Get("pagecount").ValueInt() returntype := fsion2.Get("returntype").ValueStr() s_params := make([]interface{}, 0) if fsion2.HasKey("parammaps") { parammaps := fsion2.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } else if fsion2.HasKey("params") { params := fsion2.Get("params").Array() for _, v_params := range params { s_params = append(s_params, v_params.ValueStr()) } } queryData1, err := getDataBySql(sql, offset, pagecount, returntype, s_params) if err != nil { errorm := make(map[string]interface{}) errorm["code"] = e.ERROR errorm["message"] = err.Error() queryData[fsion2.Get("name").ValueStr()] = errorm logging.Error("GetDataByNames err: ", err) continue } else { queryData[fsion2.Get("name").ValueStr()] = queryData1 } } } appG.Response(http.StatusOK, e.SUCCESS, queryData) } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags PostDataByNameForm // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误朱红彬彬"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/PostDataByNameForm [POST] func PostDataByNameForm(c *gin.Context) { appG := app.Gin{C: c} c.Request.ParseForm() params := c.Request.Form sqlnamestr := params.Get("name") logging.Info("PostDataByNameForm ", c.Keys, sqlnamestr) s_params := make([]interface{}, 0) sql, p := restful.GetSqlByNameDB(sqlnamestr) paramslist := strings.Split(p, ",") if len(paramslist) > 0 { for _, value := range paramslist { s_params = append(s_params, params.Get(strings.Trim(value, " "))) } } if sql != "" { queryData, err := execDataBySql(sql, s_params) if err != nil { appG.ResponseEq(http.StatusOK, e.ERROR, 1, err.Error()) } else { appG.ResponseEq(http.StatusOK, e.SUCCESS, 0, queryData) } } else { appG.ResponseEq(http.StatusOK, e.SUCCESS, 0, "后台没有数据接口") } } // GetReportform 将数据集转换格式 // @Tags PostDataByNameForm // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误朱红彬彬"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" func GetReportform(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() checked := fsion.Get("checked").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) parammaps := fsion.Get("parammaps") typea := parammaps.Get("typea").ValueDefaultInt(0) //0 全部 1 理论, 2实际 logging.Info("GetReportform ", c.Keys, sqlnamestr, parammaps) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() queryData, err := praseReportform(sqlnamestr, parammaps, tx, checked, offset, pagecount, typea) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } // GetUpkeepPlan 保养计划 func GetUpkeepPlan(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") month := fsion.Get("month").ValueDefaultStr("map") logging.Info("GetUpkeepPlan ", c.Keys, sqlnamestr, month) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } else if fsion.HasKey("params") { params := fsion.Get("params").Array() for _, v_params := range params { s_params = append(s_params, v_params.ValueStr()) } } if returntype == "xlsx" { var xlsxfile *xlsx.File xlsxfile, _ = restful.QueryByXlsx(sql, s_params) //c.File("c:/dd.xlsx") c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") c.Header("Content-Disposition", "attachment; filename="+"Workbook.xlsx") c.Header("Content-Transfer-Encoding", "binary") _ = xlsxfile.Write(c.Writer) } else { queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { for index, value := range queryData.(map[string]interface{})["list"].([]map[string]interface{}) { if v, ok := value["id"]; ok { //month = "2020-03" seviceplans, _ := tx.SQL("SELECT * FROM seviceplan where eqId = ? and month=? ", v, month).QueryString() //获取保养计划 if seviceplans != nil { for _, va := range seviceplans { //根据保养计划获取保养单 //day,_ :=strconv.Atoi(va["day"]) bigupkeeps, _ := tx.SQL("SELECT * FROM bigupkeep where seviceplanId = ?", va["id"]).QueryString() //获取保养计划中的保养单 //buk := make(map[string]map[string]string) for _, bu := range bigupkeeps { //日期为key ,保养单为value 存到map中 jstr := "" if bu["plantime"][8:9] == "0" { jstr = "m" + bu["plantime"][9:] } else { jstr = "m" + bu["plantime"][8:] } if bu["flowCompeleted"] < "2" && bu["plantime"] < time.Now().Format("2006-01-02") { //如果保养状态是0并且小于当前日期 则状态已延期2 queryData.(map[string]interface{})["list"].([]map[string]interface{})[index][jstr] = va["upkeepName"] + "#" + va["id"] + "#2" + "#" + bu["id"] + "#" + bu["pushbackId"] } else { if bu["flowCompeleted"] >= "2" { queryData.(map[string]interface{})["list"].([]map[string]interface{})[index][jstr] = va["upkeepName"] + "#" + va["id"] + "#1" + "#" + bu["id"] + "#" + bu["pushbackId"] } else { queryData.(map[string]interface{})["list"].([]map[string]interface{})[index][jstr] = va["upkeepName"] + "#" + va["id"] + "#0" + "#" + bu["id"] + "#" + bu["pushbackId"] } } } } } } } appG.Response(http.StatusOK, e.SUCCESS, queryData) } } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } // @Summary 根据APISQL表中的两条SQL执行得到数据集,其中name1会根据name的每一条去执行 // todo 优化性能 children统一查询 // @Tags PostDataByNameForm // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误朱红彬彬"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" func GetArrList(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() sqlnamestr1 := fsion.Get("name1").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") month := fsion.Get("month").ValueDefaultStr("map") logging.Info("GetUpkeepPlan ", c.Keys, sqlnamestr, month) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) sql1, p1 := restful.GetSqlByNameDBT(sqlnamestr1, tx) if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { paramslist1 := strings.Split(p1, ",") for index, value := range queryData.(map[string]interface{})["list"].([]map[string]interface{}) { s_params1 := make([]interface{}, 0) if len(paramslist1) > 0 && p1 != "" { for _, v := range paramslist1 { s_params1 = append(s_params1, value[strings.ToLower(strings.Trim(v, " "))]) } } arr, _ := tx.SQL(sql1, s_params1...).QueryString() //获取 queryData.(map[string]interface{})["list"].([]map[string]interface{})[index]["arrList"] = arr } appG.Response(http.StatusOK, e.SUCCESS, queryData) } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } func GetAccount(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") if sqlnamestr != "getNoMesList" && sqlnamestr != "getNoMesCount" { logging.Info("GetDataByName", c.Keys, c.Request.RemoteAddr, sqlnamestr, parammaps.ValueStr()) } paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } else if fsion.HasKey("params") { params := fsion.Get("params").Array() logging.Info("GetDataByName", c.Keys, c.Request.RemoteAddr, sqlnamestr, params) for _, v_params := range params { s_params = append(s_params, v_params.ValueStr()) } } if returntype == "xlsx" { var xlsxfile *xlsx.File xlsxfile, _ = restful.QueryByXlsx(sql, s_params) //c.File("c:/dd.xlsx") c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") c.Header("Content-Disposition", "attachment; filename="+"Workbook.xlsx") c.Header("Content-Transfer-Encoding", "binary") _ = xlsxfile.Write(c.Writer) } else { queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { logging.Error("GetDataByName err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) //appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } // PostDataByName 根据APISQL表中SQL执行得到数据集 // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/PostDataByName [POST] func PostDataByName(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) var err error queryData, err := module.PostDataByName(c, fsion) if err != nil { appG.Response(http.StatusOK, e.ERROR, err) return } var ( keyWord string ) switch fsion.Get("name").ValueStr() { case "insertFeedclass": keyWord = "feed" err = module.GroupCategorySync(keyWord, fsion) case "deleteFeedclass": keyWord = "feed_delete" err = module.GroupCategoryDelete(keyWord, fsion) case "insertCowclass": keyWord = "cow" err = module.GroupCategorySync(keyWord, fsion) case "deleteCowclass": keyWord = "cow_delete" err = module.GroupCategoryDelete(keyWord, fsion) default: } if err != nil { logging.Error(keyWord, err) } if queryData != nil { appG.Response(http.StatusOK, e.SUCCESS, queryData) return } appG.Response(http.StatusOK, e.SUCCESS, nil) } //人脸识别/格润富德接口 func GetRJSBData(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() sqlnamestr1 := fsion.Get("name1").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("plancount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") month := fsion.Get("month").ValueDefaultStr("map") logging.Info("GetUpkeepPlan ", c.Keys, sqlnamestr, month) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() //STR :=Httppostdata("http://192.168.1.104:8081/authdata/GetDataBySqlIN","POST",string(dataByte),tx) sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) sql1, p1 := restful.GetSqlByNameDBT(sqlnamestr1, tx) if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { paramslist1 := strings.Split(p1, ",") for index, value := range queryData.(map[string]interface{})["list"].([]map[string]interface{}) { s_params1 := make([]interface{}, 0) if len(paramslist1) > 0 && p1 != "" { for _, v := range paramslist1 { s_params1 = append(s_params1, value[strings.ToLower(strings.Trim(v, " "))]) } } arr, _ := tx.SQL(sql1, s_params1...).QueryString() //获取 queryData.(map[string]interface{})["list"].([]map[string]interface{})[index]["arrList"] = arr } // var wg sync.WaitGroup // for _, value := range queryData.(map[string]interface{})["list"].([]map[string]interface{}) { // wg.Add(1) // go func(value map[string]interface{}) { // defer wg.Done() // _, err = tx.SQL(`update downloadedplan set havebutton = 1 where id = ? and pastureid = ? `, value["projuctid"], value["pastureid"]).Execute() // }(value) // } // wg.Wait() appG.Response(http.StatusOK, e.SUCCESS, queryData) } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } func PostRJSBData(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) logging.Info("PostRJSBData err: ", string(dataByte)) s_params := make([]interface{}, 0) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT("updatedownloadedplanYJ", tx) sql1, p1 := restful.GetSqlByNameDBT("updated1YJ", tx) sql2, p2 := restful.GetSqlByNameDBT("updated1execYJ", tx) sql3, p3 := restful.GetSqlByNameDBT("updated2YJ", tx) if !fsion.HasKey("parammaps") { appG.Response(http.StatusOK, e.ERROR, "参数解析失败") return } parammaps := fsion.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } _, err = tx.SQL(sql, s_params...).Execute() if err != nil { logging.Error("PostRJSBData err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } s_params = make([]interface{}, 0) paramslist = strings.Split(p1, ",") if len(paramslist) > 0 && p1 != "" { for _, value := range paramslist { // if value == "ID" { // id := parammaps.Get("ID").ValueStr() // pastureid := parammaps.Get("pastureid").ValueStr() // datalist, err := tx.SQL(`select d2.id as id from downloadplandtl1 d1 join downloadplandtl1_exec d2 on d1.id = d2.id where d1.pid = (select pid from downloadplandtl1 where id = ? and pastureid = ? ) and // d1.sort = (select sort from downloadplandtl1 where id = ? and pastureid = ? )`, id, pastureid, id, pastureid).QueryString() // if err != nil { // logging.Error("PostRJSBData err: ", err) // msg := geterrmsg(err.Error()) // appG.Response(http.StatusOK, e.ERROR, msg) // return // } // for _, item := range datalist { // id = item["id"] // } // s_params = append(s_params, id) // } else { // s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) // } s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } _, err = tx.SQL(sql1, s_params...).Execute() if err != nil { logging.Error("PostRJSBData1 err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } s_params = make([]interface{}, 0) paramslist = strings.Split(p2, ",") if len(paramslist) > 0 && p2 != "" { for _, value := range paramslist { if value == "ID" { id := parammaps.Get("ID").ValueStr() pastureid := parammaps.Get("pastureid").ValueStr() datalist, err := tx.SQL(`select d2.id as id from downloadplandtl1 d1 join downloadplandtl1_exec d2 on d1.id = d2.id where d1.pid = (select pid from downloadplandtl1 where id = ? and pastureid = ? ) and d1.sort = (select sort from downloadplandtl1 where id = ? and pastureid = ? )`, id, pastureid, id, pastureid).QueryString() if err != nil { logging.Error("PostRJSBData err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } for _, item := range datalist { id = item["id"] } s_params = append(s_params, id) } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } _, err = tx.SQL(sql2, s_params...).Execute() if err != nil { logging.Error("PostRJSBData2 err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } s_params = make([]interface{}, 0) paramslist = strings.Split(p3, ",") if len(paramslist) > 0 && p3 != "" { for _, value := range paramslist { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } _, err = tx.SQL(sql3, s_params...).Execute() if err != nil { logging.Error("PostRJSBData3 err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } appG.Response(http.StatusOK, e.SUCCESS, "ok") } func PostRJSBDatas(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsions := gofasion.NewFasion(string(dataByte)).Array() logging.Info("PostRJSBDatas err: ", string(dataByte)) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT("updatedownloadedplanYJ", tx) sql1, p1 := restful.GetSqlByNameDBT("updated1YJV2", tx) sql2, p2 := restful.GetSqlByNameDBT("updated1execYJV2", tx) sql3, p3 := restful.GetSqlByNameDBT("updated2YJV2", tx) for _, fsion := range fsions { if !fsion.HasKey("parammaps") { appG.Response(http.StatusOK, e.ERROR, "参数解析失败") return } parammaps := fsion.Get("parammaps") s_params := make([]interface{}, 0) paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } _, err = tx.SQL(sql, s_params...).Execute() if err != nil { logging.Error("PostRJSBData err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } s_params = make([]interface{}, 0) paramslist = strings.Split(p1, ",") if len(paramslist) > 0 && p1 != "" { for _, value := range paramslist { // if value == "ID" { // id := parammaps.Get("ID").ValueStr() // pastureid := parammaps.Get("pastureid").ValueStr() // datalist, err := tx.SQL(`select d2.id as id from downloadplandtl1 d1 join downloadplandtl1_exec d2 on d1.id = d2.id where d1.pid = (select pid from downloadplandtl1 where id = ? and pastureid = ? ) and // d1.sort = (select sort from downloadplandtl1 where id = ? and pastureid = ? )`, id, pastureid, id, pastureid).QueryString() // if err != nil { // logging.Error("PostRJSBData err: ", err) // msg := geterrmsg(err.Error()) // appG.Response(http.StatusOK, e.ERROR, msg) // return // } // for _, item := range datalist { // id = item["id"] // } // s_params = append(s_params, id) // } else { // s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) // } s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } _, err = tx.SQL(sql1, s_params...).Execute() if err != nil { logging.Error("PostRJSBData1 err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } s_params = make([]interface{}, 0) paramslist = strings.Split(p2, ",") if len(paramslist) > 0 && p2 != "" { for _, value := range paramslist { if value == "ID" { id := parammaps.Get("ID").ValueStr() pastureid := parammaps.Get("pastureid").ValueStr() datalist, err := tx.SQL(`select d2.id as id from downloadplandtl1 d1 join downloadplandtl1_exec d2 on d1.id = d2.id where d1.pid = (select pid from downloadplandtl1 where id = ? and pastureid = ? ) and d1.sort = (select sort from downloadplandtl1 where id = ? and pastureid = ? )`, id, pastureid, id, pastureid).QueryString() if err != nil { logging.Error("PostRJSBData err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } for _, item := range datalist { id = item["id"] } s_params = append(s_params, id) } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } // s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } _, err = tx.SQL(sql2, s_params...).Execute() if err != nil { logging.Error("PostRJSBData2 err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } s_params = make([]interface{}, 0) paramslist = strings.Split(p3, ",") if len(paramslist) > 0 && p3 != "" { for _, value := range paramslist { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } _, err = tx.SQL(sql3, s_params...).Execute() if err != nil { logging.Error("PostRJSBData3 err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) return } } appG.Response(http.StatusOK, e.SUCCESS, "ok") } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags ExecDataByConfig // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/PostDataByName [POST] func ExecDataByConfig(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) tempval_ := make(map[string]interface{}) tempCommon := make(map[string]interface{}) tempval := make([]map[string]interface{}, 0) err := json.Unmarshal(dataByte, &tempval_) logging.Info("ExecDataByConfig ", c.Keys, c.Request.RemoteAddr, tempval_["common"], tempval_["data"]) // fmt.Println("ExecDataByConfig ", c.Keys, c.Request.RemoteAddr, tempval_["common"], tempval_["data"]) if err != nil { } else { if v, ok := tempval_["common"].(map[string]interface{}); ok { tempCommon = v } if v, ok := tempval_["data"].([]interface{}); ok { for _, Tvalue := range v { if v1, ok := Tvalue.(map[string]interface{}); ok { tempval = append(tempval, v1) } } } tx := restful.Engine.NewSession() err := tx.Begin() if err != nil { logging.Error("tx.Begin 事务启动失败__error:", err) } defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() if err == nil { if tempv, exists := c.Get("jwt_username"); exists { tempCommon["jwt_username"] = tempv.(string) } for _, paramvalue := range tempval { if _, ok := paramvalue["resultname"]; !ok { paramvalue["resultname"] = paramvalue["name"] } _, err = ExecDataParam(paramvalue, tempCommon, tempval, nil, nil, tx) if err != nil { logging.Error("ExecDataParam error:", err) break } } if err == nil { if tempCommon["returnmap"] != nil && tempCommon["returnmap"] != "" { appG.Response(http.StatusOK, e.SUCCESS, tempval) } else { appG.Response(http.StatusOK, e.SUCCESS, "成功执行!") } } else { msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) //appG.Response(http.StatusOK, e.ERROR, err.Error()) } } } if err != nil { msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) //appG.Response(http.StatusOK, e.ERROR, err.Error()) } } func interfacetostring(val interface{}) string { switch val.(type) { case string: ss := val.(string) return ss break case int: ss := val.(int) return strconv.Itoa(ss) break case int64: ss := val.(int64) return strconv.FormatInt(ss, 10) break case float64: ss := val.(float64) return strconv.FormatFloat(ss, 'E', -1, 32) break } return "" } func getParamValue(parammaps map[string]interface{}, value string, ParamMap []map[string]interface{}) string { if valuestring, ok := parammaps[strings.Trim(value, " ")].(string); ok { tempstrb := strings.IndexAny(valuestring, "@") tempstre := strings.IndexAny(valuestring, ".") if tempstrb > -1 && tempstre > -1 { for _, ParamMapList := range ParamMap { if v, ok := ParamMapList["resultname"]; ok { if v == valuestring[tempstrb+1:tempstre] { if v1, ok := ParamMapList["resultmaps"]; ok { if newA, ok := v1.([]map[string]interface{}); ok { return interfacetostring(newA[0][valuestring[tempstre+1:]]) } else if newA, ok := v1.(map[string]interface{}); ok { return interfacetostring(newA[valuestring[tempstre+1:]]) } } } } } } else { return valuestring } } else if valuestring, ok := parammaps[strings.Trim(value, " ")].(float64); ok { return strconv.FormatInt(int64(valuestring), 10) } return "" } func getParamValue_(parammaps map[string]interface{}, value string, ParamMap map[string]interface{}) string { if valuestring, ok := parammaps[strings.Trim(value, " ")].(string); ok { tempstrb := strings.IndexAny(valuestring, "@") tempstre := strings.IndexAny(valuestring, ".") if tempstrb > -1 && tempstre > -1 { if v, ok := ParamMap[valuestring[tempstre+1:]]; ok { if s, ok := v.(string); ok { return s } else if s, ok := v.(float64); ok { return strconv.FormatFloat(s, 'f', -1, 64) // return strconv.FormatInt(int64(s), 10) } } } } return "" } func ExecDataParam(fasion map[string]interface{}, CommonParamMap map[string]interface{}, ParamMap []map[string]interface{}, ParentParamMap map[string]interface{}, sameParamMap []map[string]interface{}, tx *xorm.Session) ([]map[string]interface{}, error) { sqlname := fasion["name"].(string) sqltype := "" //v 校验/s1 查询/sm 查询/e 执行 if v, ok := fasion["type"]; ok { sqltype = v.(string) } sql := "" p := "" s_params := make([]interface{}, 0) if sqltype != "" { sql, p = restful.GetSqlByName(sqlname, tx) //sqlApi, _ := models.GetApisqlByName(sqlname) if v, ok := fasion["parammaps"].(map[string]interface{}); ok { paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { ss := "" if strings.ToLower(strings.Trim(value, " ")) == "snowid" { ids, err := setting.SnowIds.NextId() if err != nil { ids = time.Now().UnixNano() logging.Info("create SnowIds err", err) } s_params = append(s_params, ids) } else { if ss == "" && CommonParamMap != nil { if valuestring, ok := v[strings.Trim(value, " ")].(string); ok { ss = valuestring tempstrb := strings.IndexAny(valuestring, "@") tempstre := strings.IndexAny(valuestring, ".") if (tempstre > tempstrb) && (strings.ToLower(valuestring[tempstrb+1:tempstre]) == "common") { if CommonParamMap[valuestring[tempstre+1:]] != nil { ss = CommonParamMap[valuestring[tempstre+1:]].(string) } } else { ss = "" } } } if ss == "" && ParentParamMap != nil { ss = getParamValue_(v, value, ParentParamMap) } if ss == "" && sameParamMap != nil { ss = getParamValue(v, value, sameParamMap) } if ss == "" && ParamMap != nil { ss = getParamValue(v, value, ParamMap) } s_params = append(s_params, ss) } } } } } if sql == "" { sqltype = "" } if sqltype == "s1" { tempValParam, err := restful.QueryByMap(sql, 0, 1, s_params) if v, ok := tempValParam.(map[string]interface{}); ok { fasion["resultmaps"] = v["list"].([]map[string]interface{}) } if err != nil { return nil, err } err = ExitsChildrenParam(fasion, tempValParam, ParamMap, CommonParamMap, tx) if err != nil { return nil, err } return tempValParam.(map[string]interface{})["list"].([]map[string]interface{}), err } else if sqltype == "sm" { tempValParam, err := restful.QueryByMap(sql, 0, 0, s_params) if v, ok := tempValParam.(map[string]interface{}); ok { fasion["resultmaps"] = v["list"].([]map[string]interface{}) } else { } if err != nil { return nil, err } err = ExitsChildrenParam(fasion, tempValParam, ParamMap, CommonParamMap, tx) if err != nil { return nil, err } return tempValParam.(map[string]interface{})["list"].([]map[string]interface{}), err } else if sqltype == "v" { tempValParam, err := restful.QueryByMap(sql, 0, 1, s_params) if v, ok := tempValParam.(map[string]interface{}); ok { fasion["resultmaps"] = v["list"].([]map[string]interface{}) } else { } if err != nil { return nil, err } if tempValParam.(map[string]interface{})["list"].([]map[string]interface{})[0]["vmsg"] != "" { return nil, errors.New(tempValParam.(map[string]interface{})["list"].([]map[string]interface{})[0]["vmsg"].(string)) } } else if sqltype == "e" { tempVal_arrary := make([]map[string]interface{}, 0) tempVal_map := make(map[string]interface{}) tempValParam, err := restful.ExecQueryT(sql, s_params, tx) if err == nil { fasion["resultmaps"] = tempValParam.(map[string]interface{}) tempVal_map["result"] = tempValParam.(map[string]interface{})["result"] tempVal_map["LastInsertId"] = tempValParam.(map[string]interface{})["LastInsertId"] tempVal_arrary = append(tempVal_arrary, tempVal_map) return tempVal_arrary, err } return nil, err } else { if tempValParam, ok := fasion["resultmaps"].(map[string]interface{}); ok { err := ExitsChildrenParam(fasion, tempValParam, ParamMap, CommonParamMap, tx) if err != nil { return nil, err } return nil, err } } return nil, nil } func ExitsChildrenParam(fasion map[string]interface{}, tempValParam interface{}, ParamMap []map[string]interface{}, commonParam map[string]interface{}, tx *xorm.Session) error { var err error subarray, ok := fasion["children"] if ok { for _, v := range tempValParam.(map[string]interface{})["list"].([]interface{}) { //遍历父集有多少行数据 tempVal_arrary := make([]map[string]interface{}, 0) for _, subarrayvalue := range subarray.([]interface{}) { //遍历所有执行命令 tempVal_ := make(map[string]interface{}) if _, ok := subarrayvalue.(map[string]interface{})["resultname"]; !ok { tempVal_["resultname"] = subarrayvalue.(map[string]interface{})["name"] } else { tempVal_["resultname"] = subarrayvalue.(map[string]interface{})["resultname"] } tempVal_["resultmaps"], err = ExecDataParam(subarrayvalue.(map[string]interface{}), commonParam, ParamMap, v.(map[string]interface{}), tempVal_arrary, tx) //递归调用执行 if err != nil { return err } tempVal_arrary = append(tempVal_arrary, tempVal_) } v.(map[string]interface{})["children"] = tempVal_arrary } } return nil } // @Summary 删除图片 // @Tags RemovePicByName // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/PostDataByName [POST] func RemovePicByName(c *gin.Context) { logging.Info("RemovePicByName ", c.Keys) appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() picname := fsion.Get("picname").ValueStr() sql, _ := restful.GetSqlByNameDB(sqlnamestr) params := fsion.Get("params").Array() s_params := make([]interface{}, 0) for _, v_params := range params { s_params = append(s_params, v_params.ValueStr()) } if sql != "" { queryData, err := execDataBySql(sql, s_params) if picname != "" { // Destination distPath := path.Join(setting.CurrentPath, setting.AppSetting.ImageSavePath, picname) err := os.Remove(distPath) //删除文件test.txt if err != nil { //如果删除失败则输出 file remove Error! fmt.Println("file remove Error!") //输出错误详细信息 fmt.Printf("%s", err) } else { //如果删除成功则输出 file remove OK! fmt.Print("file remove OK!") } distPath = path.Join(setting.CurrentPath, setting.AppSetting.ThumbnailSavePath, picname) err = os.Remove(distPath) //删除文件test.txt if err != nil { //如果删除失败则输出 file remove Error! fmt.Println("file remove Error!") //输出错误详细信息 fmt.Printf("%s", err) } else { //如果删除成功则输出 file remove OK! fmt.Print("file remove OK!") } } if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } // @Summary 删除文件 // @Tags RemoveFileByName // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/PostDataByName [POST] func RemoveFileByName(c *gin.Context) { appG := app.Gin{C: c} id := c.Param("id") logging.Info("DownloadFile ", c.Keys, id) eqdoc, err := restful.Engine.SQL("SELECT * FROM eq_doc where id = ? ", id).QueryString() if eqdoc == nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) return } distPath := path.Join(setting.CurrentPath, setting.AppSetting.FileSavePath, eqdoc[0]["docpath"], eqdoc[0]["newdocname"]) err = os.Remove(distPath) //删除文件test.txt if err != nil { //如果删除失败则输出 file remove Error! fmt.Println("file remove Error!") //输出错误详细信息 fmt.Printf("%s", err) appG.Response(http.StatusOK, e.ERROR, err.Error()) return } _, err = restful.Engine.SQL("delete FROM eq_doc where id = ? ", id).QueryString() appG.Response(http.StatusOK, e.SUCCESS, "OK") } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags PostDataByName // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/PostDataByName [POST] func UpdateDataRelation(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) tablename := fsion.Get("name").ValueStr() dataname := fsion.Get("dataname").ValueStr() datavalue := fsion.Get("datavalue").ValueStr() valuename := fsion.Get("valuename").ValueStr() logging.Info("UpdateDataRelation ", c.Keys, c.Request.RemoteAddr, tablename, dataname, datavalue, valuename) values := fsion.Get("values").Array() tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() insertSqlstr := "insert into " + tablename + "( " + dataname + "," + valuename + ") select DISTINCT ?, ? from DUAL " + " where NOT EXISTS (select " + valuename + " from " + tablename + " where " + valuename + " = ? and " + dataname + " = ?)" d_params := make([]interface{}, 4) d_params[0] = datavalue s_params := "" for _, v_values := range values { d_params[1] = v_values.ValueStr() if s_params == "" { s_params = v_values.ValueStr() } else { s_params = s_params + "," + v_values.ValueStr() } d_params[2] = d_params[1] d_params[3] = d_params[0] _, err := execDataBySqlT(insertSqlstr, d_params, tx) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) break } } if s_params != "" { deleteSqlstr := "delete from " + tablename + " " + " where " + dataname + " = " + datavalue + " and " + valuename + " not in (" + s_params + ")" queryData, err := execDataBySqlT(deleteSqlstr, nil, tx) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else if err == nil { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } else { deleteSqlstr := "delete from " + tablename + " " + " where " + dataname + " = " + datavalue queryData, err := execDataBySqlT(deleteSqlstr, nil, tx) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else if err == nil { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } } // @Summary 根据APISQL表中SQL执行得到数据集 // @Tags PostDatasByName // @Accept json // @Produce json // @Param sqlname query string true "sqlname" // @Param offset query int true "offset" // @Param pagecount query int true "pagecount" // @Param returntype query string true "returntype" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/PostDatasByName [POST] func PostDataByNames(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlParams := fsion.Get("array").Array() queryData := make(map[string]interface{}) for _, v := range sqlParams { fsion2 := gofasion.NewFasion(v.Json()) ss := fsion2.Get("name") aa := fsion2.Get("params") fmt.Println(ss, aa) logging.Info("PostDataByNames ", c.Keys, fsion2.Get("name").ValueStr()) sql, p := restful.GetSqlByNameDB(fsion2.Get("name").ValueStr()) if sql == "" { errorm := make(map[string]interface{}) errorm["code"] = e.ERROR errorm["message"] = "sql没有找到" errorm["param"] = "" queryData[fsion2.Get("name").ValueStr()] = errorm continue } else if sql != "" { s_params := make([]interface{}, 0) if fsion2.HasKey("parammaps") { parammaps := fsion2.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else if strings.ToLower(strings.Trim(value, " ")) == "snowid" { ids, err := setting.SnowIds.NextId() if err != nil { ids = time.Now().UnixNano() logging.Info("create SnowIds err", err) } s_params = append(s_params, ids) } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } else if fsion2.HasKey("params") { params := fsion2.Get("params").Array() //ids,err := setting.SnowIds.NextId() //if err !=nil{ // ids = time.Now().UnixNano() // logging.Info("create SnowIds err",err) //} //s_params = append(s_params, ids) for _, v_params := range params { s_params = append(s_params, v_params.ValueStr()) } } _, err := execDataBySql(sql, s_params) if err != nil { logging.Error("PostDataByName err: ", err) errorm := make(map[string]interface{}) errorm["code"] = e.ERROR errorm["message"] = err.Error() errorm["param"] = s_params queryData[fsion2.Get("name").ValueStr()] = errorm continue } else { errorm := make(map[string]interface{}) errorm["code"] = e.SUCCESS errorm["message"] = "success" queryData[fsion2.Get("name").ValueStr()] = errorm continue } } else { errorm := make(map[string]interface{}) errorm["code"] = e.ERROR errorm["message"] = "NO SQL" errorm["param"] = "" queryData[fsion2.Get("name").ValueStr()] = errorm } } appG.Response(http.StatusOK, e.SUCCESS, queryData) } func getDataBySql(sqlstr string, offset, pagecount int, returntype string, params []interface{}) (interface{}, error) { if offset > 0 { offset = offset - 1 } //if pagecount == 0 { // pagecount = setting.AppSetting.PageSize //}else if pagecount>setting.AppSetting.PageSize{ // pagecount = setting.AppSetting.PageSize //} if returntype == "list" { queryData, err := restful.QueryByList(sqlstr, offset, pagecount, params) return queryData, err } else if returntype == "listlist" { queryData, err := restful.QueryByListList(sqlstr, offset, pagecount, params) return queryData, err } else { queryData, err := restful.QueryByMap(sqlstr, offset, pagecount, params) return queryData, err } } func getDataBySqlT(sqlstr string, offset, pagecount int, returntype string, params []interface{}, tx *xorm.Session) (interface{}, error) { if offset > 0 { offset = offset - 1 } //if pagecount == 0 { // pagecount = setting.AppSetting.PageSize //}else if pagecount>setting.AppSetting.PageSize{ // pagecount = setting.AppSetting.PageSize //} if returntype == "list" { queryData, err := restful.QueryByListT(sqlstr, offset, pagecount, params, tx) return queryData, err } else if returntype == "listlist" { queryData, err := restful.QueryByListListT(sqlstr, offset, pagecount, params, tx) return queryData, err } else { fmt.Println(params) queryData, err := restful.QueryByMapT(sqlstr, offset, pagecount, params, tx) return queryData, err } } func GetRecuData_BySql(sql string, Params string, idname string, thisParams map[string]interface{}, isList bool) (interface{}, error) { paramslist := strings.Split(Params, ",") s_params := make([]interface{}, 0) if isList { for _, v_params := range thisParams["params"].([]interface{}) { s_params = append(s_params, v_params) } } else { paramslist := strings.Split(Params, ",") if len(paramslist) > 0 && Params != "" { for _, value := range paramslist { s_params = append(s_params, thisParams[strings.Trim(value, " ")]) } } } queryData, err := restful.QueryByMapMenu(sql, 0, 0, s_params) for _, queryData_ := range queryData { if v, ok := queryData_["haschildren"]; (ok && v.(int64) > 0) || !ok { if isList { if queryData_[idname] != nil { thisParams["params"].([]interface{})[len(thisParams["params"].([]interface{}))-1] = queryData_[idname].(interface{}) } } else { if queryData_[idname] != nil { thisParams[idname] = queryData_[idname].(interface{}) } if len(paramslist) > 0 && Params != "" { s_params = make([]interface{}, 0) for _, value := range paramslist { s_params = append(s_params, thisParams[strings.Trim(value, " ")]) } } } queryData_["children"], _ = GetRecuData_BySql(sql, Params, idname, thisParams, isList) } else { } } return queryData, err } func execDataBySql(sqlstr string, params []interface{}) (interface{}, error) { queryData, err := restful.ExecQuery(sqlstr, params) return queryData, err } func execDataBySqlT(sqlstr string, params []interface{}, tx *xorm.Session) (interface{}, error) { queryData, err := restful.ExecQueryT(sqlstr, params, tx) return queryData, err } func ExecDataBySql(sqlstr string, params []interface{}) (interface{}, error) { queryData, err := restful.ExecQuery(sqlstr, params) return queryData, err } // @Summary 导入excel文件到数据库,excel第一行作为参数 // @Tags ImportExcel // @Accept json // @Produce json // @Param file query string true "文件名" // @Param name header string true "执行sql的名字" // @Success 200 {string} json "{ "code": 200, "data": {}, "msg": "ok" }" // @Failure 400 {string} json "{"code":400, "data":null,"msg":"请求参数错误"}" // @Failure 404 {string} json "{ "code": 404, "data":null,"msg":"请求参数错误"}" // @Router /data/ImportExcel [POST] func ImportExcel(c *gin.Context) { appG := app.Gin{C: c} inputdata := "" c.Request.ParseForm() params := c.Request.Form file, _, err := c.Request.FormFile("file") if err != nil { appG.Response(http.StatusOK, e.ERROR, err) return } sqlnamestrs := params.Get("name") sheetname := params.Get("sheetname") pastureid := params.Get("pastureid") //importParams := params.Get("importParams") logging.Info("ImportExcel ", c.Keys, c.Request.RemoteAddr, sqlnamestrs) // 必输项参数 (字符串格式 "field1,field2,field3") requiredParams := params.Get("requiredParams") // 日期参数 dateParams := params.Get("dateParams") // 数字参数 numParams := params.Get("numParams") //将字符串分割开 dateParamslist := strings.Split(dateParams, ",") requiredParamslist := strings.Split(requiredParams, ",") numParamslist := strings.Split(numParams, ",") queryData := make([]interface{}, 0) sqlslist := strings.Split(sqlnamestrs, ",") xlsx1, err := excelize.OpenReader(file) if err != nil { fmt.Println(err) return } ok := 0 error := 0 isdone := true rows := xlsx1.GetRows(sheetname) // 限制10000条,多余的截取掉 if len(rows) > 10000 { rows = rows[:10000] } for i, row := range rows { if i > 0 { entry := make(map[string]interface{}) outentry := make(map[string]interface{}) for j, colCell := range rows[0] { for k, colCell1 := range row { if j == k { outentry[colCell] = colCell1 entry[colCell] = colCell1 } } } inputdata = "" a := "" fmt.Println(outentry, entry) //校验日期格式 for _, v := range dateParamslist { if v == "" { continue } if d, ok := outentry[strings.Trim(v, " ")]; ok { dtime, err := TransfTime(d.(string)) if err != nil { a = strings.Trim(v, " ") break } outentry[strings.Trim(v, " ")] = dtime } } if a != "" { outentry["error_msg"] = a + " 格式错误" error++ queryData = append(queryData, outentry) continue } a = "" //校验必填格式 for _, v := range requiredParamslist { if v == "" { continue } if d, ok := outentry[strings.Trim(v, " ")]; !ok || d == "" { a = strings.Trim(v, " ") break } } if a != "" { outentry["error_msg"] = a + " 未填或格式错误" error++ queryData = append(queryData, outentry) continue } a = "" //校验数字格式 for _, v := range numParamslist { if v == "" { continue } d, ok := outentry[strings.Trim(v, " ")] if !ok || d == "" { outentry[strings.Trim(v, " ")] = 0 } else { var fl float64 switch d.(type) { case string: fl, err = strconv.ParseFloat(d.(string), 64) } if err != nil || fl < 0 { a = strings.Trim(v, " ") break } } } if a != "" { outentry["error_msg"] = a + " 为数值类型且不可为负数" error++ queryData = append(queryData, outentry) continue } tx := restful.Engine.NewSession() err := tx.Begin() for _, sqlnamestr := range sqlslist { sql, paramslists := restful.GetSqlByNameDB(strings.Replace(sqlnamestr, " ", "", -1)) paramslist := strings.Split(paramslists, ",") if len(paramslist) > 0 { s_params := make([]interface{}, 0) for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else if strings.ToLower(strings.Trim(value, " ")) == "pastureid" { s_params = append(s_params, pastureid) } else if strings.ToLower(strings.Trim(value, " ")) == "snowid" { ids, err := setting.SnowIds.NextId() if err != nil { ids = time.Now().UnixNano() logging.Info("create SnowIds err", err) } s_params = append(s_params, ids) } else { if outentry[strings.Trim(value, " ")] == nil { s_params = append(s_params, "") } else { s_params = append(s_params, outentry[strings.Trim(value, " ")]) } } } outentry["input"] = inputdata fmt.Println(sql, s_params) returnmsgmap1, err := tx.SQL(sql, s_params...).Query().List() if err != nil { if tx != nil { tx.Rollback() } if tx != nil { tx.Close() } msg := geterrmsg(err.Error()) outentry["error_msg"] = msg error++ queryData = append(queryData, outentry) isdone = true break } else { if len(returnmsgmap1) > 0 { if va, ok := returnmsgmap1[0]["msg"]; ok && va != "" { if tx != nil { tx.Rollback() } if tx != nil { tx.Close() } msg := geterrmsg(va.(string)) outentry["error_msg"] = msg error++ queryData = append(queryData, outentry) isdone = true break } } isdone = false } } } switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } } if !isdone { ok++ isdone = true } } data := make(map[string]interface{}) data["result"] = queryData data["success"] = ok data["err_count"] = error appG.Response(http.StatusOK, e.SUCCESS, data) } func TransfTime(timestr string) (string, error) { if timestr == "" { return time.Now().Format("2006-01-02"), nil } days, err := strconv.Atoi(timestr) if err != nil { if len(timestr) == 8 && strings.Count(timestr, "-") == 2 { return "20" + timestr[6:] + "-" + timestr[:5], nil } _, err := time.Parse("2006-01-02", timestr) if err != nil { t, err := time.Parse("2006/01/02", timestr) if err != nil { t, err := time.Parse("2006.01.02", timestr) if err != nil { return "", err } else { return t.Format("2006-01-02"), nil } } else { return t.Format("2006-01-02"), nil } } else { return timestr, nil } } times, _ := time.Parse("2006-01-02", "1899-12-30") times = times.AddDate(0, 0, days) return times.Format("2006-01-02"), nil } func Createchart(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) chart_name := fsion.Get("chart_name").ValueStr() desc := fsion.Get("desc").ValueStr() pastureid := fsion.Get("pastureid").ValueStr() source_id := fsion.Get("source_id").ValueStr() emp := fsion.Get("emp").ValueStr() content := fsion.Get("content").Json() var mapResult map[string]interface{} err1 := json.Unmarshal([]byte(content), &mapResult) if err1 != nil { fmt.Println("JsonToMapDemo err: ", err1) } tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() ids, err := setting.SnowIds.NextId() if err != nil { ids = time.Now().UnixNano() logging.Info("create SnowIds err", err) } exec, err := tx.Exec("insert into chart(id,pastureid,cname,statue,emp,opratetime,content,sourceid)VALUEs(?,?,?,?,?,?,?)", ids, pastureid, chart_name, 0, emp, desc, source_id) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, exec) } } func Updatedashboard(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) dashboard_id := fsion.Get("dashboard_id").ValueStr() pastureid := fsion.Get("pastureid").ValueStr() content := fsion.Get("content").Json() var mapResult map[string]interface{} err1 := json.Unmarshal([]byte(content), &mapResult) if err1 != nil { fmt.Println("JsonToMapDemo err: ", err1) } layout := mapResult["layout"] tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() exec, err := tx.SQL("select content from dashboard where pastureid=? and id=?", pastureid, dashboard_id).Query().List() if err != nil { println("2", err.Error()) appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { if exec != nil { if exec[0]["content"] == nil { mapR := make(map[string]interface{}) mapR["layout"] = layout mjson, _ := json.Marshal(mapR) mString := string(mjson) exec1, err3 := tx.Exec("update dashboard set content=? where pastureid=? and id=?", mString, pastureid, dashboard_id) if err3 != nil { println("3", err3.Error()) appG.Response(http.StatusOK, e.ERROR, err3.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, exec1) } } else { var mapR map[string]interface{} err2 := json.Unmarshal([]byte(exec[0]["content"].(string)), &mapR) if err1 != nil { fmt.Println("JsonToMapDemo err: ", err2) } mapR["layout"] = layout mjson, _ := json.Marshal(mapR) mString := string(mjson) exec1, err3 := tx.Exec("update dashboard set content=? where pastureid=? and id=?", mString, pastureid, dashboard_id) if err3 != nil { println("3", err3.Error()) appG.Response(http.StatusOK, e.ERROR, err3.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, exec1) } } } else { appG.Response(http.StatusOK, e.ERROR, "未找到对应的仪表盘") } } } func ExecSQL(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) content := fsion.Get("content").Json() pastureid := fsion.Get("pastureid").ValueStr() var mapResult map[string]interface{} err1 := json.Unmarshal([]byte(content), &mapResult) if err1 != nil { fmt.Println("JsonToMapDemo err: ", err1) } sqlstr := "select " groupstr := " GROUP BY " for _, value := range mapResult["selectedDimension"].([]interface{}) { sqlstr = sqlstr + value.(map[string]interface{})["Column"].(string) + "," groupstr = groupstr + value.(map[string]interface{})["Column"].(string) + "," } for _, value := range mapResult["selectedCalcul"].([]interface{}) { if value.(map[string]interface{})["calculFunc"].(string) == "none" { sqlstr = sqlstr + value.(map[string]interface{})["Column"].(string) + "," groupstr = groupstr + value.(map[string]interface{})["Column"].(string) + "," } else if value.(map[string]interface{})["calculFunc"].(string) == "custbiaozhun" { tem := "STDDEV" + "(" + value.(map[string]interface{})["Column"].(string) + ") as " + value.(map[string]interface{})["Column"].(string) sqlstr = sqlstr + tem + "," } else if value.(map[string]interface{})["calculFunc"].(string) == "custbianyi" { tem := "STDDEV" + "(" + value.(map[string]interface{})["Column"].(string) + ")/ AVG(" + value.(map[string]interface{})["Column"].(string) + ")as " + value.(map[string]interface{})["Column"].(string) sqlstr = sqlstr + tem + "," } else { tem := value.(map[string]interface{})["calculFunc"].(string) + "(" + value.(map[string]interface{})["Column"].(string) + ") as " + value.(map[string]interface{})["Column"].(string) sqlstr = sqlstr + tem + "," } } if _, ok := mapResult["selectedCalcul2"]; ok { for _, value := range mapResult["selectedCalcul2"].([]interface{}) { if value.(map[string]interface{})["calculFunc"].(string) == "none" { sqlstr = sqlstr + value.(map[string]interface{})["Column"].(string) + "," groupstr = groupstr + value.(map[string]interface{})["Column"].(string) + "," } else if value.(map[string]interface{})["calculFunc"].(string) == "custbiaozhun" { tem := "STDDEV" + "(" + value.(map[string]interface{})["Column"].(string) + ") as " + value.(map[string]interface{})["Column"].(string) sqlstr = sqlstr + tem + "," } else if value.(map[string]interface{})["calculFunc"].(string) == "custbianyi" { tem := "STDDEV" + "(" + value.(map[string]interface{})["Column"].(string) + ")/ AVG(" + value.(map[string]interface{})["Column"].(string) + ")as " + value.(map[string]interface{})["Column"].(string) sqlstr = sqlstr + tem + "," } else { tem := value.(map[string]interface{})["calculFunc"].(string) + "(" + value.(map[string]interface{})["Column"].(string) + ") as " + value.(map[string]interface{})["Column"].(string) sqlstr = sqlstr + tem + "," } } } sqlstr = sqlstr[0 : len(sqlstr)-1] sqlstr = sqlstr + " from " + mapResult["dataSrc"].(string) sqlstr = sqlstr + " where pastureid=" + pastureid if len(mapResult["filters"].([]interface{})) > 0 { sqlstr = sqlstr + " and " } println(len(mapResult["filters"].([]interface{})), sqlstr) for _, value := range mapResult["filters"].([]interface{}) { switch value.(map[string]interface{})["filterOperator"].(string) { case ">", "=", "<", ">=", "<=", "!=", "like": sqlstr = sqlstr + value.(map[string]interface{})["filteCol"].(string) + value.(map[string]interface{})["filterOperator"].(string) + " " + value.(map[string]interface{})["value"].(map[string]interface{})["value1"].(string) + " AND " case "IN": sqlstr = sqlstr + value.(map[string]interface{})["filteCol"].(string) + " " + value.(map[string]interface{})["filterOperator"].(string) + "(" for _, value1 := range value.(map[string]interface{})["value"].(map[string]interface{})["arrValue"].([]interface{}) { sqlstr = sqlstr + value1.(string) + "," } sqlstr = sqlstr[0 : len(sqlstr)-1] sqlstr = sqlstr + ")" + " AND " case "BETWEEN": sqlstr = sqlstr + value.(map[string]interface{})["filteCol"].(string) + " " + value.(map[string]interface{})["filterOperator"].(string) + " " + value.(map[string]interface{})["value"].(map[string]interface{})["value1"].(string) + " and " + value.(map[string]interface{})["value"].(map[string]interface{})["value2"].(string) + " AND " } } if len(mapResult["filters"].([]interface{})) > 0 { sqlstr = sqlstr[0 : len(sqlstr)-4] } // groupstr = groupstr[0 : len(groupstr)-1] sqlstr = sqlstr + groupstr + " " if len(mapResult["orderByStrs"].([]interface{})) > 0 { sqlstr = sqlstr + " order by " } // for key, value := range mapResult["orderByStrs"].([]interface{}) { if key == len(mapResult["orderByStrs"].([]interface{}))-1 { sqlstr = sqlstr + value.(string) + " " } else { sqlstr = sqlstr + value.(string) + "," } } // sqlstr = sqlstr + " limit " + strconv.Itoa(int(mapResult["limit"].(float64))) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() exec, err := tx.SQL(sqlstr).Query().List() if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { appG.Response(http.StatusOK, e.SUCCESS, exec) } } func Dashboards(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() //sqlnamestr1 := fsion.Get("name1").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") month := fsion.Get("month").ValueDefaultStr("map") logging.Info("GetUpkeepPlan ", c.Keys, sqlnamestr, month) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) //sql1, p1 := restful.GetSqlByNameDBT(sqlnamestr1, tx) if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } } queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { appG.Response(http.StatusOK, e.ERROR, err.Error()) } else { //paramslist1 := strings.Split(p1, ",") dids := make([]interface{}, 0) for index, value := range queryData.(map[string]interface{})["list"].([]map[string]interface{}) { var mapResult map[string]interface{} dids = append(dids, value["dashboard_id"]) if value["content"] != nil { err1 := json.Unmarshal([]byte(value["content"].(string)), &mapResult) if err1 != nil { println("JsonToMapDemo1 err: ", err1) } temap := make(map[string]interface{}) tem := mapResult["layout"].([]interface{}) if v, ok := value["chartids"]; ok { chartids := strings.Split(v.(string), ",") for _, va := range chartids { a := false for _, v2 := range tem { if v2.(map[string]interface{})["id"].(string) == va { a = true //println("va1======",va) } } if !a { laytem := "{\"bottomLine\":[[3,18],[15,18]],\"h\":9,\"i\":\"" + va + "\",\"id\":\"" + va + "\",\"moved\":false,\"topLine\":[[3,9],[15,9]],\"w\":12,\"x\":0,\"xOffSet\":15,\"y\":100,\"yOffSet\":18}" var mapTem map[string]interface{} err1 := json.Unmarshal([]byte(laytem), &mapTem) if err1 != nil { println("JsonToMapDemo err: ", err1) } tem = append(tem, mapTem) } } temap["layout"] = tem queryData.(map[string]interface{})["list"].([]map[string]interface{})[index]["content"] = temap } } else { temap := make(map[string]interface{}) tem := make([]interface{}, 0) if v, ok := value["chartids"]; ok { chartids := strings.Split(v.(string), ",") for _, va := range chartids { laytem := "{\"bottomLine\":[[3,18],[15,18]],\"h\":9,\"i\":\"" + va + "\",\"id\":\"" + va + "\",\"moved\":false,\"topLine\":[[3,9],[15,9]],\"w\":12,\"x\":0,\"xOffSet\":15,\"y\":0,\"yOffSet\":18}" var mapTem map[string]interface{} err1 := json.Unmarshal([]byte(laytem), &mapTem) if err1 != nil { println("JsonToMapDemo err: ", err1) } tem = append(tem, mapTem) } temap["layout"] = tem queryData.(map[string]interface{})["list"].([]map[string]interface{})[index]["content"] = temap } } } queryData.(map[string]interface{})["order"] = dids queryData.(map[string]interface{})["dashboards"] = queryData.(map[string]interface{})["list"] appG.Response(http.StatusOK, e.SUCCESS, queryData) } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } func HttpPostData(url, RequestMethod, parammaps string, tx *xorm.Session) string { fsion := gofasion.NewFasion(parammaps) sqlnamestr := fsion.Get("name").ValueStr() sqlnamestr1 := fsion.Get("name1").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) sql1, p1 := restful.GetSqlByNameDBT(sqlnamestr1, tx) body := []byte("") if sql != "" { s_params := make([]interface{}, 0) if fsion.HasKey("parammaps") { parammaps := fsion.Get("parammaps") paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { } else { paramslist1 := strings.Split(p1, ",") for index, value := range queryData.(map[string]interface{})["list"].([]map[string]interface{}) { s_params1 := make([]interface{}, 0) if len(paramslist1) > 0 && p1 != "" { for _, v := range paramslist1 { s_params1 = append(s_params1, value[strings.ToLower(strings.Trim(v, " "))]) } } arr, _ := tx.SQL(sql1, s_params1...).QueryString() //获取 queryData.(map[string]interface{})["list"].([]map[string]interface{})[index]["arrList"] = arr body, _ = json.Marshal(queryData) } } } bs := bytes.NewBuffer(body) client := &http.Client{} //body1 := bytes.NewBuffer([]byte("{\"username\":\"00028\",\"password\":\"123456\"}")) req, err := http.NewRequest(RequestMethod, url, bs, ) if err != nil { } req.Header.Set("Content-Type", "application/json;charset=utf-8") req.Header.Set("token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjAwMDI4IiwicGFzc3dvcmQiOiJlMTBhZGMzOTQ5YmE1OWFiYmU1NmUwNTdmMjBmODgzZSIsImV4cCI6MTYxOTM4NjU0MiwiaXNzIjoiaHR0cHM6Ly9naXRodWIuY29tL2twdHl1bi9nby1hZG1pbi8ifQ.sJwnE9HTOVnDNOaeHqOQzi7cSydYkWS4uQHxtjY7UMY") if err != nil { // handle error } resp, err := client.Do(req) if err != nil { return "" } defer resp.Body.Close() result_body, err := ioutil.ReadAll(resp.Body) if err != nil { return "" } fmt.Println(string(result_body)) return "" } func GetSummary(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") parammaps := fsion.Get("parammaps") status := parammaps.Get("status").ValueStr() //0 按驾驶员 1 配方名称 2 栏舍名称 3 牲畜名称 4 车次 5 tmr名称 genre := parammaps.Get("genre").ValueStr() //0 混料 1 撒料 isDate := parammaps.Get("isdate").ValueStr() //0 不按时间 1 按时间 tx := restful.Engine.NewSession() defer tx.Close() sqlnamestr := "" if genre == "0" { if status == "0" { sqlnamestr = "getAccuracyJSY" } else if status == "1" { sqlnamestr = "getAccuracyHFT" } else if status == "2" { sqlnamestr = "getAccuracyHNS" } else if status == "3" { sqlnamestr = "getAccuracyHSC" } else if status == "4" { sqlnamestr = "getAccuracyHCC" } else if status == "5" { sqlnamestr = "getAccuracyMC" } else if status == "6" { sqlnamestr = "getAccuracyFeedHL" } else if status == "7" { sqlnamestr = "getAccuracyRT" } } else { if status == "0" { sqlnamestr = "getAccuracySCCJSY" } else if status == "1" { sqlnamestr = "getAccuracySFT" } else if status == "2" { sqlnamestr = "getAccuracySNS" } else if status == "3" { sqlnamestr = "getAccuracySSC" } else if status == "4" { sqlnamestr = "getAccuracySCC" } else if status == "5" { sqlnamestr = "getAccuracySLCL" } else if status == "7" { sqlnamestr = "getAccuracySCCRT" } } if isDate == "1" { sqlnamestr += "Date" } sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) // fmt.Println(sqlnamestr, sql) if sql != "" { s_params := make([]interface{}, 0) // if fsion.HasKey("parammaps") { fmt.Println(s_params, "222", p) paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } if returntype == "xlsx" { var xlsxfile *xlsx.File xlsxfile, _ = restful.QueryByXlsx(sql, s_params) //c.File("c:/dd.xlsx") c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") c.Header("Content-Disposition", "attachment; filename="+"Workbook.xlsx") c.Header("Content-Transfer-Encoding", "binary") _ = xlsxfile.Write(c.Writer) } else { queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { logging.Error("GetDataByName err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } // type lpplanStruct struct { // Id int64 `xorm:"id"` // Tmrname string `xorm:"tmrname"` // Tmrid int64 `xorm:"tmrid"` // Sort int64 `xorm:"sort"` // Sel int64 `xorm:"sel"` // Times int64 `xorm:"times"` // Ftname string `xorm:"ftname"` // Ftid int64 `xorm:"ftid"` // Maxweight float64 `xorm:"maxweight"` // Sumweight float64 `xorm:"sumweight"` // Sumcowcount int64 `xorm:"sumcowcount"` // Pastureid string `xorm:"pastureid"` // Display string `xorm:"display"` // Issplit int64 `xorm:"issplit"` // BeginTime string `xorm:"begintime"` // } func UpdateFTdetail(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) tempval_ := make(map[string]interface{}) tempCommon := make(map[string]interface{}) tempval := make([]map[string]interface{}, 0) fTChange := make(map[string]interface{}, 0) fpdOldDataList := make([]map[string]interface{}, 0) fpdDataList := make([]map[string]interface{}, 0) fsion := gofasion.NewFasion(string(dataByte)) // parammaps := fsion.Get("parammaps") createdate := fsion.Get("createdate").ValueStr() err := json.Unmarshal(dataByte, &tempval_) if err != nil { appG.Response(http.StatusOK, e.ERROR, false) return } logging.Info("ExecDataByConfig ", c.Keys, c.Request.RemoteAddr, tempval_["common"], tempval_["data"]) tx := restful.Engine.NewSession() if v, ok := tempval_["data"].([]interface{}); ok { for _, Tvalue := range v { if v1, ok := Tvalue.(map[string]interface{}); ok { if v1["name"] == "updateFPbyFTChange" { fTChange = v1 continue } tempval = append(tempval, v1) } } } parammaps := fTChange["parammaps"].(map[string]interface{}) // oldFpdDataList, err := tx.SQL(` select * from fpdetail where ptid = ? or ptsid = ? `, parammaps["ftid"], parammaps["ftid"]).Query().List() // if err != nil { // logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) // return // } // oldLpplandtl1List, err := tx.SQL(` select lppland.* from lpplan lpp join lpplandtl1 lppland on lppland.lppid = lpp.id where lpp.ftid = ? `, parammaps["ftid"]).Query().List() // if err != nil { // logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) // return // } // oldFeedpList, err := tx.SQL(` select * from feedp where ftid = ? or ptsfid = ? `, parammaps["ftid"], parammaps["ftid"]).Query().List() // if err != nil { // logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) // return // } err = tx.Begin() if err != nil { logging.Error("tx.Begin 事务启动失败__error:", err) } defer func() { if err != nil { if tx != nil { tx.Rollback() } } if tx != nil { tx.Close() } }() if err != nil { } else { if v, ok := tempval_["common"].(map[string]interface{}); ok { tempCommon = v } fpdOldDataList, err = tx.SQL(`select * from (SELECT TRIM(id) id,times,tratio,ifnull(ROUND(ptsrate*weight,2)-ptsuse,0) weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,0 AS fttype,cowcount,ccountradio,1 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and (ptid = ? or ptsid = ?) UNION SELECT TRIM(id) id,times,tratio,ifnull(ROUND((1-ptsrate)*weight,2)-ptuse,0) weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,1 AS fttype,cowcount,ccountradio,0 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and (ptid = ? or ptsid = ?)) t order by t.barname,t.times`, parammaps["pastureid"], parammaps["ftid"], parammaps["ftid"], parammaps["pastureid"], parammaps["ftid"], parammaps["ftid"]).Query().List() if err == nil { if tempv, exists := c.Get("jwt_username"); exists { tempCommon["jwt_username"] = tempv.(string) } for _, paramvalue := range tempval { if _, ok := paramvalue["resultname"]; !ok { paramvalue["resultname"] = paramvalue["name"] } _, err = ExecDataParam(paramvalue, tempCommon, tempval, nil, nil, tx) if err != nil { logging.Error("ExecDataParam error:", err) break } } if err != nil { msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) //appG.Response(http.StatusOK, e.ERROR, err.Error()) } } } tx.Commit() // go func() { if fTChange != nil { parammaps := fTChange["parammaps"].(map[string]interface{}) if parammaps["type"].(float64) == 1 { _, err = tx.SQL(`UPDATE feedp fp set fp.ftweight= IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0),fp.feedweight = IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0) +ifnull(fp.supplyweight,0) WHERE fp.pastureid = ? AND fp.ftid =?`, parammaps["pastureid"], parammaps["ftid"]).Execute() _, err = tx.SQL(`UPDATE fpdetail fpd INNER JOIN feedp fp ON fpd.barid = fp.barid AND fpd.pastureid = fp.pastureid SET fpd.weight = fp.feedweight*fpd.tratio/100 WHERE fp.pastureid = ? AND fp.ftid =?`, parammaps["pastureid"], parammaps["ftid"]).Execute() } else { _, err = tx.SQL(`UPDATE feedp fp SET fp.supplyweight= IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0),fp.feedweight = IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0) +ifnull(fp.supplyweight,0) WHERE fp.pastureid = ? AND fp.ptsfid =?`, parammaps["pastureid"], parammaps["ftid"]).Execute() _, err = tx.SQL(`UPDATE fpdetail fpd INNER JOIN feedp fp ON fpd.barid = fp.barid AND fpd.pastureid = fp.pastureid SET fpd.weight = fp.feedweight*fpd.tratio/100 WHERE fp.pastureid = ? AND fp.ptsfid =?`, parammaps["pastureid"], parammaps["ftid"]).Execute() } fpdDataList, err = tx.SQL(`select * from (SELECT TRIM(id) id,times,tratio,ifnull(ROUND(ptsrate*weight,2)-ptsuse,0) weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,0 AS fttype,cowcount,ccountradio,1 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and (ptid = ? or ptsid = ?) UNION SELECT TRIM(id) id,times,tratio,ifnull(ROUND((1-ptsrate)*weight,2)-ptuse,0) weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,1 AS fttype,cowcount,ccountradio,0 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and (ptid = ? or ptsid = ?)) t order by t.barname,t.times`, parammaps["pastureid"], parammaps["ftid"], parammaps["ftid"], parammaps["pastureid"], parammaps["ftid"], parammaps["ftid"]).Query().List() lpplanList := make([]*lpplanStruct, 0) err = tx.SQL(`select id,times,maxweight from lpplan where pastureid = ? and ftid = ? order by sort desc`, parammaps["pastureid"], parammaps["ftid"]).Find(&lpplanList) if err != nil { logs.Error(err, 1) return } lppidlist := []string{} for _, lpp := range lpplanList { lppidlist = append(lppidlist, strconv.FormatInt(lpp.Id, 10)) } if len(lppidlist) <= 0 { appG.Response(http.StatusOK, e.SUCCESS, true) return } lpplandtl1AllList := make([]*lpplandtl1, 0) err = tx.SQL(fmt.Sprintf(`select id,lppid,barid,fpdid,lweight from lpplandtl1 where pastureid = ? and lppid in (%s) order by sort desc`, strings.Join(lppidlist, ",")), parammaps["pastureid"]).Find(&lpplandtl1AllList) if err != nil { // tx.Rollback() logs.Error(err, 2, parammaps["pastureid"]) return } var wg sync.WaitGroup for _, old := range fpdOldDataList { for _, fpd := range fpdDataList { wg.Add(1) go func(old, fpd map[string]interface{}) { updateLppandList := make([]*lpplandtl1, 0) defer wg.Done() if fpd["id"].(string) == old["id"].(string) && fpd["fttype"].(int64) == old["fttype"].(int64) && fpd["weight"].(string) != old["weight"].(string) && fpd["times"].(int64) == old["times"].(int64) { weight, _ := strconv.ParseFloat(fpd["weight"].(string), 64) oldweight, _ := strconv.ParseFloat(old["weight"].(string), 64) var w float64 var status int if fpd["barname"].(string) == "D1" { fmt.Println("1") } if weight < oldweight { if weight >= 0 { return } w = weight status = 0 } else { if oldweight > 0 { return } w = weight status = 1 } // fweight = w for _, lpp := range lpplanList { var fweight float64 var lweight float64 lpplandtl1List := make([]*lpplandtl1, 0) fpdid, _ := strconv.ParseInt(fpd["id"].(string), 10, 64) for _, lppland := range lpplandtl1AllList { if lppland.Lppid == lpp.Id && lppland.Fpdid == fpdid { lpplandtl1List = append(lpplandtl1List, lppland) } } if len(lpplandtl1List) == 0 { continue } for _, lppland := range lpplandtl1List { lweight += lppland.Lweight } if status == 0 { if lweight <= 0 { continue } } else { if lpp.Maxweight <= lweight { continue } } for _, lppland := range lpplandtl1List { if fpdid == lppland.Fpdid { if status == 1 { // if w <= lppland.Lweight { if lpp.Maxweight <= lweight { continue } if w+lweight <= lpp.Maxweight { lppland.Lweight += w lweight += w fweight += w w = 0 } else { w = w - (lpp.Maxweight - lweight) n := (lpp.Maxweight - lweight) lppland.Lweight = lppland.Lweight + n lweight += n fweight += n } } else { if lppland.Lweight == 0 { continue } if w+lppland.Lweight >= 0 { lppland.Lweight = lppland.Lweight + w lweight = lweight + w fweight = fweight + w w = 0 } else { w = w + lppland.Lweight lweight = lweight - lppland.Lweight fweight = fweight - lppland.Lweight lppland.Lweight = 0 } } updateLppandList = append(updateLppandList, lppland) break } } _, err = tx.SQL(`UPDATE fpdetail SET ptuse=IF(?=1,IF(ptuse+? <0,0,ptuse+?),ptuse), ptsuse=IF(?=0,IF(ptsuse+?<0,0,ptsuse+?),ptsuse) WHERE pastureid=? AND id=?`, parammaps["type"], fweight, fweight, parammaps["type"], fweight, fweight, parammaps["pastureid"], fpd["id"]).Execute() if err != nil { // tx.Rollback() logs.Error(err, 4, parammaps["type"], fweight, fweight, parammaps["type"], fweight, fweight, parammaps["pastureid"], fpd["id"]) return } for _, lppland := range updateLppandList { fmt.Println(lppland.Lweight, lppland.Id, parammaps["pastureid"], status) _, err = tx.SQL(`update lpplandtl1 set Lweight = ? where id = ? and pastureid = ?`, lppland.Lweight, lppland.Id, parammaps["pastureid"]).Execute() if err != nil { fmt.Println(lppland.Lweight, lppland.Id, parammaps["pastureid"], status) // tx.Rollback() logs.Error(err, 3) return } // defer wg.Done() } updateLppandList = []*lpplandtl1{} if w == 0 { break } } } }(old, fpd) } } wg.Wait() } newFpdDataList, err := tx.SQL(` select * from fpdetail where ptid = ? or ptsid = ? `, parammaps["ftid"], parammaps["ftid"]).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } newLpplandtl1List, err := tx.SQL(` select lppland.* from lpplan lpp join lpplandtl1 lppland on lppland.lppid = lpp.id where lpp.ftid = ? `, parammaps["ftid"]).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } newFeedpList, err := tx.SQL(` select * from feedp where ftid = ? or ptsfid = ? `, parammaps["ftid"], parammaps["ftid"]).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } now := createdate // for _, oldFpd := range oldFpdDataList { for _, newFpd := range newFpdDataList { // if oldFpd["id"].(int64) == newFpd["id"].(int64) && oldFpd["times"].(int64) == newFpd["times"].(int64) { // if oldFpd["tratio"].(string) != newFpd["tratio"].(string) || oldFpd["weight"].(string) != newFpd["weight"].(string) { // go func() { _, err := tx.SQL(` insert into fpdetailhistory(pastureid,barid,barname,times,tratio,weight,ptsrate,cowcount,ccountradio,ptid,ptsid,ptuse,ptsuse,supplement,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newFpd["pastureid"], newFpd["barid"], newFpd["barname"], newFpd["times"], newFpd["tratio"], newFpd["weight"], newFpd["ptsrate"], newFpd["cowcount"], newFpd["ccountradio"], newFpd["ptid"], newFpd["ptsid"], newFpd["ptuse"], newFpd["ptsuse"], newFpd["supplement"], now).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } // }() } // break // } // } // } // for _, oldLpplandtl1 := range oldLpplandtl1List { for _, newLpplandtl1 := range newLpplandtl1List { // if oldLpplandtl1["id"].(int64) == newLpplandtl1["id"].(int64) { // if oldLpplandtl1["lweight"] != newLpplandtl1["lweight"] { // go func() { _, err := tx.SQL(` insert into lpplandtl1history(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname, background,cowcount,ccountradio,lweighthis,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newLpplandtl1["pastureid"], newLpplandtl1["lppid"], newLpplandtl1["barid"], newLpplandtl1["barname"], newLpplandtl1["fpdid"], newLpplandtl1["fttype"], newLpplandtl1["lweight"], newLpplandtl1["sort"], newLpplandtl1["tmrid"], newLpplandtl1["tmrname"], newLpplandtl1["background"], newLpplandtl1["cowcount"], newLpplandtl1["ccountradio"], newLpplandtl1["lweighthis"], now).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } // }() // } // break // } // } } // for _, oldFeedp := range oldFeedpList { for _, newFeedp := range newFeedpList { // if oldFeedp["id"].(int64) == newFeedp["id"].(int64) && oldFeedp["feedweight"].(string) != newFeedp["feedweight"].(string) && // oldFeedp["ftweight"].(string) != newFeedp["ftweight"].(string) { // go func() { _, err := tx.SQL(` insert into feedphistory(pastureid,barname,barid,softccount,ccount,ratio,ccountratio,ftid, ftname,ptsfid,ptsfname,feedweight,ftweight,supplyweight,owner,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newFeedp["pastureid"], newFeedp["barname"], newFeedp["barid"], newFeedp["softccount"], newFeedp["ccount"], newFeedp["ratio"], newFeedp["ccountratio"], newFeedp["ftid"], newFeedp["ftname"], newFeedp["ptsfid"], newFeedp["ptsfname"], newFeedp["feedweight"], newFeedp["ftweight"], newFeedp["supplyweight"], newFeedp["owner"], now).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } // }() // } // } } appG.Response(http.StatusOK, e.SUCCESS, true) } type lpplandtlInfo struct { Id int64 `xorm:"id"` Pastureid int64 `xorm:"pastureid"` Lppid int64 `xorm:"lppid"` Barid int64 `xorm:"barid"` Barname string `xorm:"barname"` Fpdid int64 `xorm:"fpdid"` Fttype int64 `xorm:"fttype"` Lweight float64 `xorm:"lweight"` Sort int64 `xorm:"sort"` Tmrid int64 `xorm:"tmrid"` Tmrname string `xorm:"tmrname"` Cowcount int64 `xorm:"cowcount"` Ccountradio float64 `xorm:"ccountradio"` Background string `xorm:"background"` Lweighthis float64 `xorm:"lweighthis"` Maxweight float64 `xorm:"maxweight"` } func UpdateFpdetailBar(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) pastureid := fsion.Get("pastureid").ValueStr() id := fsion.Get("id").ValueStr() tx := restful.Engine.NewSession() tx.Begin() fpdList, err := tx.SQL(` select id,ifnull(ROUND((1-ptsrate)*weight,2),"") weight,ptuse from fpdetail where pastureid = ? and barid = ? order by times `, pastureid, id).Query().List() if err != nil { logs.Error(err) } for _, fpd := range fpdList { lpplandList, err := tx.SQL(` select lppland.id,lppland.lweight from lpplandtl1 lppland join lpplan lpp on lpp.id = lppland.lppid where lppland.pastureid = ? and lppland.fpdid = ? order by lpp.sort desc `, pastureid, fpd["id"]).Query().List() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } var lweight float64 for _, lppland := range lpplandList { lweight1, _ := strconv.ParseFloat(lppland["lweight"].(string), 64) lweight += lweight1 } fpdweight, _ := strconv.ParseFloat(fpd["weight"].(string), 64) ptuse, _ := strconv.ParseFloat(fpd["ptuse"].(string), 64) if fpdweight >= ptuse && lweight == ptuse { continue } else { if lweight <= fpdweight { _, err := tx.SQL(` update fpdetail set ptuse = ? where id = ? `, lweight, fpd["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } } else { weight := fpdweight - lweight for _, lppland := range lpplandList { lpplandlweight, _ := strconv.ParseFloat(lppland["lweight"].(string), 64) if weight >= lpplandlweight { weight = weight - lpplandlweight _, err := tx.SQL(` delete from lpplandtl1 where id = ? `, lppland["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } } else { _, err := tx.SQL(` update lpplandtl1 set lweight = ? where id = ? `, lppland["lweight"].(float64)-weight, lppland["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } weight = 0 break } } } } } for _, list := range fsion.Get("data").Array() { ftmap := make(map[string]interface{}) ftmap["old"] = list.Get("old").ValueFloat64() ftmap["new"] = list.Get("new").ValueFloat64() ftmap["times"] = list.Get("times").ValueInt64() ftmap["ptid"] = list.Get("ptid").ValueStr() ftmap["ptsid"] = list.Get("ptsid").ValueStr() // fmt.Println(ftmap) fpdDataList, err := tx.SQL(`select * from (SELECT TRIM(id) id,times,tratio,ifnull(ROUND(ptsrate*weight,2)-ptsuse,"") weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,0 AS fttype,cowcount,ccountradio,1 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and barid = ? and times = ? UNION SELECT TRIM(id) id,times,tratio,ifnull(ROUND((1-ptsrate)*weight,2)-ptuse,"") weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,1 AS fttype,cowcount,ccountradio,0 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and barid = ? and times = ? ) t order by t.barname,t.times`, pastureid, id, ftmap["times"], pastureid, id, ftmap["times"]).Query().List() // fmt.Println(pastureid, id, ftmap["times"], pastureid, id, ftmap["times"]) if err != nil { tx.Rollback() logs.Error(err) } for _, fpd := range fpdDataList { if fpd["times"].(int64) == ftmap["times"].(int64) && (fpd["ptid"].(string) == ftmap["ptid"].(string) || fpd["ptsid"].(string) == ftmap["ptsid"].(string)) { fttype := -1 if ftmap["ptid"].(string) != "-1" { fttype = 1 } var fweight float64 var lweight float64 lpplandtl1List := make([]*lpplandtlInfo, 0) err = tx.SQL(`select lppland.*,lpp.maxweight from lpplan lpp join lpplandtl1 lppland on lpp.id = lppland.lppid where lppland.fpdid =? and lppland.fttype = ? and lpp.pastureid = ? and lpp.times = ? order by lpp.sort desc `, fpd["id"], fttype, pastureid, ftmap["times"]).Find(&lpplandtl1List) if err != nil { tx.Rollback() logs.Error(err) } weight, _ := strconv.ParseFloat(fpd["weight"].(string), 64) var w float64 var status int if ftmap["new"].(float64) < ftmap["old"].(float64) { if weight >= 0 { continue } w = weight status = 0 } else { if weight-(ftmap["new"].(float64)-ftmap["old"].(float64)) > 0 { continue } w = weight status = 1 } for _, lppland := range lpplandtl1List { lweight += lppland.Lweight } for _, lppland := range lpplandtl1List { if status == 1 { // if w <= lppland.Lweight { if lppland.Maxweight <= lweight { continue } if w+lweight <= lppland.Maxweight { lppland.Lweight += w lweight += w fweight += w w = 0 } else { w = w - (lppland.Maxweight - lweight) n := (lppland.Maxweight - lweight) lppland.Lweight = lppland.Lweight + n lweight += n fweight += n } } else { if lppland.Lweight == 0 { continue } if w+lppland.Lweight >= 0 { lppland.Lweight = lppland.Lweight + w lweight = lweight + w fweight = fweight + w w = 0 } else { w = w + lppland.Lweight lweight = lweight - lppland.Lweight fweight = fweight - lppland.Lweight lppland.Lweight = 0 } } _, err = tx.SQL(`update lpplandtl1 set Lweight = ? where id = ? and pastureid = ?`, lppland.Lweight, lppland.Id, pastureid).Execute() if err != nil { tx.Rollback() logs.Error(err) return } break } _, err = tx.SQL(`UPDATE fpdetail SET ptuse=IF(?=1,IF(ptuse+? <0,0,ptuse+?),ptuse), ptsuse=IF(?=0,IF(ptsuse+?<0,0,ptsuse+?),ptsuse) WHERE pastureid=? AND id=?`, fttype, fweight, fweight, fttype, fweight, fweight, pastureid, fpd["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) } if w == 0 { break } } } } tx.Commit() now := time.Now() newLpplandtl1List, err := tx.SQL(` select lppland.* from lpplandtl1 lppland where lppland.barid = ? and pastureid = ? `, id, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } // newFpdDataList, err := tx.SQL(` select * from fpdetail where barid = ? and pastureid = ? `, id, pastureid).Query().List() // if err != nil { // logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) // return // } // newFeedpList, err := tx.SQL(` select * from feedp where barid = ? and pastureid = ?`, id, pastureid).Query().List() // if err != nil { // logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) // return // } for _, newLpplandtl1 := range newLpplandtl1List { _, err := tx.SQL(` insert into lpplandtl1history(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname, background,cowcount,ccountradio,lweighthis,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newLpplandtl1["pastureid"], newLpplandtl1["lppid"], newLpplandtl1["barid"], newLpplandtl1["barname"], newLpplandtl1["fpdid"], newLpplandtl1["fttype"], newLpplandtl1["lweight"], newLpplandtl1["sort"], newLpplandtl1["tmrid"], newLpplandtl1["tmrname"], newLpplandtl1["background"], newLpplandtl1["cowcount"], newLpplandtl1["ccountradio"], newLpplandtl1["lweighthis"], now).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } } // for _, newFpd := range newFpdDataList { // _, err := tx.SQL(` insert into fpdetailhistory(pastureid,barid,barname,times,tratio,weight,ptsrate,cowcount,ccountradio,ptid,ptsid,ptuse,ptsuse,supplement,createdate) // values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newFpd["pastureid"], newFpd["barid"], newFpd["barname"], newFpd["times"], // newFpd["tratio"], newFpd["weight"], newFpd["ptsrate"], newFpd["cowcount"], newFpd["ccountradio"], // newFpd["ptid"], newFpd["ptsid"], newFpd["ptuse"], newFpd["ptsuse"], newFpd["supplement"], now).Execute() // if err != nil { // logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) // return // } // } // for _, newFeedp := range newFeedpList { // _, err := tx.SQL(` insert into feedphistory(pastureid,barname,barid,softccount,ccount,ratio,ccountratio,ftid, // ftname,ptsfid,ptsfname,feedweight,ftweight,supplyweight,owner,createdate) // values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, // newFeedp["pastureid"], newFeedp["barname"], newFeedp["barid"], // newFeedp["softccount"], newFeedp["ccount"], newFeedp["ratio"], // newFeedp["ccountratio"], newFeedp["ftid"], newFeedp["ftname"], // newFeedp["ptsfid"], newFeedp["ptsfname"], newFeedp["feedweight"], // newFeedp["ftweight"], newFeedp["supplyweight"], newFeedp["owner"], now).Execute() // if err != nil { // logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) // return // } // } appG.Response(http.StatusOK, e.SUCCESS, true) } func GetProcessAnalysis(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() offset := fsion.Get("offset").ValueDefaultInt(0) pagecount := fsion.Get("pagecount").ValueDefaultInt(0) returntype := fsion.Get("returntype").ValueDefaultStr("map") parammaps := fsion.Get("parammaps") tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: logging.Error("tx.Begin 事务启动失败__error:", err) if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) s_params := make([]interface{}, 0) paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } tmrtnameStr := "" for _, tmr := range parammaps.Get("tmrtname").Array() { if len(tmrtnameStr) == 0 { tmrtnameStr = fmt.Sprintf("'%s'", tmr.ValueStr()) } else { tmrtnameStr += fmt.Sprintf(",'%s'", tmr.ValueStr()) } } if len(tmrtnameStr) > 0 { sql += fmt.Sprintf(" AND (d.`tmrtname` in (%s) ) ", tmrtnameStr) } sql += " ORDER BY d.intime" queryData, err := getDataBySqlT(sql, offset, pagecount, returntype, s_params, tx) if err != nil { logging.Error("GetDataByName err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } func UpdateFeedtempletStatus(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) parammaps := fsion.Get("parammaps") tx := restful.Engine.NewSession() tx.Begin() _, err := tx.SQL(fmt.Sprintf(" update feedtemplet set enable = ? where id in (%s) ", parammaps.Get("id").ValueStr()), parammaps.Get("enable").ValueInt64()).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusOK, e.ERROR, err) return } tx.Commit() appG.Response(http.StatusOK, e.SUCCESS, true) } func AddFtdry(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) sqlnamestr := fsion.Get("name").ValueStr() s_params := make([]interface{}, 0) tx := restful.Engine.NewSession() err := tx.Begin() defer func() { switch { case err != nil: if tx != nil { tx.Rollback() } default: if tx != nil { err = tx.Commit() } } if tx != nil { tx.Close() } }() sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx) if sql != "" { parammaps := fsion.Get("parammaps") logging.Info("AddFtdry ", c.Keys, c.Request.RemoteAddr, sqlnamestr, parammaps.ValueStr()) paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else if strings.ToLower(strings.Trim(value, " ")) == "snowid" { ids, err := setting.SnowIds.NextId() if err != nil { ids = time.Now().UnixNano() logging.Info("create SnowIds err", err) } s_params = append(s_params, ids) } else { s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr()) } } } var actweight float64 actweightList, err := tx.SQL(`select ROUND(avg(actweight),2) as actweight from ftdry where barid in ( select barid from feedp where ftid in ( select ftid from feedp where barid = ? and pastureid = ?)) and operatetime = (select date_format(operatetime ,'%Y-%m-%d') from ftdry where barid in ( select barid from feedp where ftid in ( select ftid from feedp where barid = ? and pastureid = ? )) and date_format(operatetime ,'%Y-%m-%d') 0 { for _, item := range actweightList { fl, err := strconv.ParseFloat(item["actweight"].(string), 64) if err != nil { logging.Error("AddFtdry err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } actweight = fl } } else { dryList, err := tx.SQL(`select ifnull(dry,0.0) as dry from feednur where fid in (select fid from ftdetail where ftid = (select ftid from feedp where barid = ? and pastureid = ?)) and pastureid = ?`, parammaps.Get("barid").ValueStr(), parammaps.Get("pastureid").ValueStr(), parammaps.Get("pastureid").ValueStr()).Query().List() if err != nil { logging.Error("AddFtdry err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } for _, item := range dryList { dry, err := strconv.ParseFloat(item["dry"].(string), 64) if err != nil { logging.Error("AddFtdry err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } actweight += parammaps.Get("freshweight").ValueFloat64() * dry } } if sqlnamestr == "insertFtdry" { s_params = append(s_params, actweight) } else if sqlnamestr == "updateFtdry" { sql = fmt.Sprintf(sql, actweight) } queryData, err := execDataBySqlT(sql, s_params, tx) if err != nil { logging.Error("AddFtdry err: ", err) msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } else { appG.Response(http.StatusOK, e.SUCCESS, queryData) } } else { appG.Response(http.StatusOK, e.SUCCESS, nil) } } func CheckDates(c *gin.Context) { tx := restful.Engine.NewSession() defer tx.Close() appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) tempval_ := make(map[string]interface{}) tempCommon := make(map[string]interface{}) tempval := make([]map[string]interface{}, 0) err := json.Unmarshal(dataByte, &tempval_) logging.Info("ExecDataByConfig ", c.Keys, c.Request.RemoteAddr, tempval_["common"], tempval_["data"]) // fmt.Println("ExecDataByConfig ", c.Keys, c.Request.RemoteAddr, tempval_["common"], tempval_["data"]) if err != nil { } else { if v, ok := tempval_["common"].(map[string]interface{}); ok { tempCommon = v } if v, ok := tempval_["data"].([]interface{}); ok { for _, Tvalue := range v { if v1, ok := Tvalue.(map[string]interface{}); ok { tempval = append(tempval, v1) } } } if err == nil { if tempv, exists := c.Get("jwt_username"); exists { tempCommon["jwt_username"] = tempv.(string) } for _, paramvalue := range tempval { if _, ok := paramvalue["resultname"]; !ok { paramvalue["resultname"] = paramvalue["name"] } _, err := ExecDataQuery(paramvalue, tempCommon, tempval, nil, nil, tx) if err != nil { logging.Error("ExecDataParam error:", err) } } if err == nil { vmsg := "" for _, item := range tempval { for _, list := range item["resultmaps"].(map[string]interface{}) { for _, childrenList := range list.([]interface{}) { for k, children := range childrenList.(map[string]interface{}) { if k != "children" { continue } for _, v := range children.([]map[string]interface{}) { for k1, v1 := range v["resultmaps"].(map[string]interface{}) { if k1 == "list" { for _, v2 := range v1.([]map[string]interface{}) { if v2["vmsg"].(string) != "1" { if len(vmsg) == 0 { vmsg = v2["vmsg"].(string) } else { vmsg = fmt.Sprintf("%s,%s", vmsg, v2["vmsg"]) } } } } } } } } } } if len(vmsg) > 0 { appG.Response(http.StatusOK, e.SUCCESS, vmsg) } else { appG.Response(http.StatusOK, e.SUCCESS, true) } } else { msg := geterrmsg(err.Error()) appG.Response(http.StatusInternalServerError, e.ERROR, msg) } } } if err != nil { msg := geterrmsg(err.Error()) appG.Response(http.StatusOK, e.ERROR, msg) } } func ExecDataQuery(fasion map[string]interface{}, CommonParamMap map[string]interface{}, ParamMap []map[string]interface{}, ParentParamMap map[string]interface{}, sameParamMap []map[string]interface{}, tx *xorm.Session) (interface{}, error) { sqlname := fasion["name"].(string) sqltype := "" //v 校验/s1 查询/sm 查询/e 执行 if v, ok := fasion["type"]; ok { sqltype = v.(string) } sql := "" p := "" s_params := make([]interface{}, 0) if sqltype != "" { sql, p = restful.GetSqlByName(sqlname, tx) //sqlApi, _ := models.GetApisqlByName(sqlname) if v, ok := fasion["parammaps"].(map[string]interface{}); ok { paramslist := strings.Split(p, ",") if len(paramslist) > 0 && p != "" { for _, value := range paramslist { ss := "" if strings.ToLower(strings.Trim(value, " ")) == "snowid" { ids, err := setting.SnowIds.NextId() if err != nil { ids = time.Now().UnixNano() logging.Info("create SnowIds err", err) } s_params = append(s_params, ids) } else { if ss == "" && CommonParamMap != nil { if valuestring, ok := v[strings.Trim(value, " ")].(string); ok { ss = valuestring tempstrb := strings.IndexAny(valuestring, "@") tempstre := strings.IndexAny(valuestring, ".") if (tempstre > tempstrb) && (strings.ToLower(valuestring[tempstrb+1:tempstre]) == "common") { if CommonParamMap[valuestring[tempstre+1:]] != nil { ss = CommonParamMap[valuestring[tempstre+1:]].(string) } } else { ss = "" } } } if ss == "" && ParentParamMap != nil { ss = getParamValue_(v, value, ParentParamMap) } if ss == "" && sameParamMap != nil { ss = getParamValue(v, value, sameParamMap) } if ss == "" && ParamMap != nil { ss = getParamValue(v, value, ParamMap) } s_params = append(s_params, ss) } } } } } if sql == "" { sqltype = "" } if sql != "" { tempValParam, err := restful.QueryByMap(sql, 0, 1, s_params) if err != nil { return nil, err } // fmt.Println(tempValParam) return tempValParam.(map[string]interface{}), nil } else { if tempValParam, ok := fasion["resultmaps"].(map[string]interface{}); ok { err := ExitsChildrenQuery(fasion, tempValParam, ParamMap, CommonParamMap, tx) if err != nil { return nil, err } return nil, err } } return nil, nil } func ExitsChildrenQuery(fasion map[string]interface{}, tempValParam interface{}, ParamMap []map[string]interface{}, commonParam map[string]interface{}, tx *xorm.Session) error { var err error subarray, ok := fasion["children"] if ok { for _, v := range tempValParam.(map[string]interface{})["list"].([]interface{}) { //遍历父集有多少行数据 tempVal_arrary := make([]map[string]interface{}, 0) for _, subarrayvalue := range subarray.([]interface{}) { //遍历所有执行命令 tempVal_ := make(map[string]interface{}) if _, ok := subarrayvalue.(map[string]interface{})["resultname"]; !ok { tempVal_["resultname"] = subarrayvalue.(map[string]interface{})["name"] } else { tempVal_["resultname"] = subarrayvalue.(map[string]interface{})["resultname"] } tempVal_["resultmaps"], err = ExecDataQuery(subarrayvalue.(map[string]interface{}), commonParam, ParamMap, v.(map[string]interface{}), tempVal_arrary, tx) //递归调用执行 if err != nil { return err } tempVal_arrary = append(tempVal_arrary, tempVal_) } v.(map[string]interface{})["children"] = tempVal_arrary } } return nil } func FpdImportExcel(c *gin.Context) { appG := app.Gin{C: c} inputdata := "" c.Request.ParseForm() params := c.Request.Form file, _, err := c.Request.FormFile("file") if err != nil { appG.Response(http.StatusOK, e.ERROR, err) return } sqlnamestrs := params.Get("name") sheetname := params.Get("sheetname") pastureid := params.Get("pastureid") // importParams := params.Get("importParams") logging.Info("ImportExcel ", c.Keys, c.Request.RemoteAddr, sqlnamestrs) // 必输项参数 (字符串格式 "field1,field2,field3") requiredParams := params.Get("requiredParams") // 日期参数 dateParams := params.Get("dateParams") // 数字参数 numParams := params.Get("numParams") //将字符串分割开 dateParamslist := strings.Split(dateParams, ",") requiredParamslist := strings.Split(requiredParams, ",") numParamslist := strings.Split(numParams, ",") queryData := make([]interface{}, 0) sqlslist := strings.Split(sqlnamestrs, ",") xlsx1, err := excelize.OpenReader(file) if err != nil { fmt.Println(err) return } ok := 0 error := 0 isdone := true tx := restful.Engine.NewSession() defer tx.Close() oldFpdList, err := tx.SQL(` select ifnull(ROUND((1-ptsrate)*weight,2)-ptuse,"") fweight,fpd.id,fpd.barname,fpd.weight,fpd.times,fp.ftweight,fp.supplyweight from fpdetail fpd join feedp fp on fp.barid = fpd.barid and fpd.pastureid = fp.pastureid where fpd.pastureid = ?`, pastureid).Query().List() if err != nil { appG.Response(http.StatusInternalServerError, e.ERROR, false) return } rows := xlsx1.GetRows(sheetname) // 限制10000条,多余的截取掉 if len(rows) > 10000 { rows = rows[:10000] } for i, row := range rows { if i > 0 { entry := make(map[string]interface{}) outentry := make(map[string]interface{}) for j, colCell := range rows[0] { for k, colCell1 := range row { if j == k { outentry[colCell] = colCell1 entry[colCell] = colCell1 } } } inputdata = "" a := "" // fmt.Println(outentry, entry, "aaaaaaaaaaa") //校验日期格式 for _, v := range dateParamslist { if v == "" { continue } if d, ok := outentry[strings.Trim(v, " ")]; ok { dtime, err := TransfTime(d.(string)) if err != nil { a = strings.Trim(v, " ") break } outentry[strings.Trim(v, " ")] = dtime } } if a != "" { outentry["error_msg"] = a + " 格式错误" error++ queryData = append(queryData, outentry) continue } a = "" //校验必填格式 for _, v := range requiredParamslist { if v == "" { continue } if d, ok := outentry[strings.Trim(v, " ")]; !ok || d == "" { a = strings.Trim(v, " ") break } } if a != "" { outentry["error_msg"] = a + " 未填或格式错误" error++ queryData = append(queryData, outentry) continue } a = "" //校验数字格式 for _, v := range numParamslist { if v == "" { continue } d, ok := outentry[strings.Trim(v, " ")] if !ok || d == "" { outentry[strings.Trim(v, " ")] = 0 } else { var fl float64 switch d.(type) { case string: fl, err = strconv.ParseFloat(d.(string), 64) } if err != nil || fl < 0 { a = strings.Trim(v, " ") break } } } if a != "" { outentry["error_msg"] = a + " 为数值类型且不可为负数" error++ queryData = append(queryData, outentry) continue } errExist := false for _, sqlnamestr := range sqlslist { sql, paramslists := restful.GetSqlByNameDB(strings.Replace(sqlnamestr, " ", "", -1)) paramslist := strings.Split(paramslists, ",") if len(paramslist) > 0 { s_params := make([]interface{}, 0) for _, value := range paramslist { if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" { if tempv, exists := c.Get("jwt_username"); exists { s_params = append(s_params, tempv.(string)) } else { s_params = append(s_params, "") } } else if strings.ToLower(strings.Trim(value, " ")) == "pastureid" { s_params = append(s_params, pastureid) } else if strings.ToLower(strings.Trim(value, " ")) == "snowid" { ids, err := setting.SnowIds.NextId() if err != nil { ids = time.Now().UnixNano() logging.Info("create SnowIds err", err) } s_params = append(s_params, ids) } else { if outentry[strings.Trim(value, " ")] == nil { s_params = append(s_params, "") } else { s_params = append(s_params, outentry[strings.Trim(value, " ")]) } } } outentry["input"] = inputdata returnmsgmap1, err := tx.SQL(sql, s_params...).Query().List() if err != nil { errExist = true // if tx != nil { // tx.Rollback() // } // if tx != nil { // tx.Close() // } msg := geterrmsg(err.Error()) outentry["error_msg"] = msg error++ queryData = append(queryData, outentry) isdone = true break } else { if len(returnmsgmap1) > 0 { if va, ok := returnmsgmap1[0]["msg"]; ok && va != "" { // if tx != nil { // tx.Rollback() // } // if tx != nil { // tx.Close() // } msg := geterrmsg(va.(string)) outentry["error_msg"] = msg error++ queryData = append(queryData, outentry) isdone = true break } } isdone = false } } } if !errExist { dataexcel := make(map[string]interface{}, 0) if _, ok := outentry["栏舍名称"]; ok { dataexcel["barname"] = outentry["栏舍名称"] } if _, ok := outentry["实际牛头数"]; ok { dataexcel["ccount"] = outentry["实际牛头数"] } if _, ok := outentry["系数(%)"]; ok { dataexcel["ratio"] = outentry["系数(%)"] } if _, ok := outentry["配方模板"]; ok { dataexcel["ftname"] = outentry["配方模板"] } if _, ok := outentry["补料配方"]; ok { dataexcel["ptsfname"] = outentry["补料配方"] } if _, ok := outentry["第一班比例(%)"]; ok { dataexcel["1"] = outentry["第一班比例(%)"] } if _, ok := outentry["第二班比例(%)"]; ok { dataexcel["2"] = outentry["第二班比例(%)"] } if _, ok := outentry["第三班比例(%)"]; ok { dataexcel["3"] = outentry["第三班比例(%)"] } if _, ok := outentry["第四班比例(%)"]; ok { dataexcel["4"] = outentry["第四班比例(%)"] } existbar, err := tx.SQL(` select id from bar where bname = ? and pastureid = ? `, dataexcel["barname"], pastureid).Exist() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } if !existbar { continue } ftexist, err := tx.SQL(` select id from feedp where barname = ? and pastureid = ? and ftname = ? `, dataexcel["barname"], pastureid, dataexcel["ftname"]).Exist() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } if !ftexist { tx.SQL(` delete from lpplandtl1 where barname = ? and pastureid = ? `, dataexcel["barname"], pastureid).Exist() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } tx.SQL(` update fpdetail set ptuse = 0 where barname = ? and pastureid = ? `, dataexcel["barname"], pastureid).Exist() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } } exist, err := tx.SQL(` select id from feedp where barname = ? and pastureid = ? `, dataexcel["barname"], pastureid).Exist() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } if !exist { _, err := tx.SQL(` insert into feedp(pastureid,barid,barname,ccount)values(?,(select id from bar where bname = ? and pastureid = ? ),?,?) `, pastureid, dataexcel["barname"], pastureid, dataexcel["barname"], 0).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } } var feedpargs []interface{} upFeedpSql := `update feedp set ccount = ? ,ratio = ? ,ccountratio = ?*(?*0.01) ` feedpargs = append(feedpargs, dataexcel["ccount"], dataexcel["ratio"], dataexcel["ccount"], dataexcel["ratio"]) if _, ok := dataexcel["ftname"]; ok { feedpargs = append(feedpargs, dataexcel["ftname"], pastureid, dataexcel["ftname"]) upFeedpSql += ` , ftid = (select id from feedtemplet where tname = ? and pastureid = ? ),ftname = ? ` upFeedpSql += `,ftweight = (select sum(fweight) fweight from ftdetail where ftid = (select id from feedtemplet where tname = ? and pastureid = ? )) * (?*(?*0.01)) ` feedpargs = append(feedpargs, dataexcel["ftname"], pastureid, dataexcel["ccount"], dataexcel["ratio"]) } else { upFeedpSql += ` , ftid = -1,ftname = '' ,ftweight = 0 ` } if _, ok := dataexcel["ptsfname"]; ok { feedpargs = append(feedpargs, dataexcel["ptsfname"], pastureid, dataexcel["ptsfname"]) upFeedpSql += ` , ptsfid = (select id from feedtemplet where tname = ? and pastureid = ? ),ptsfname = ? ` upFeedpSql += `,supplyweight = (select sum(fweight) fweight from ftdetail where ftid = (select id from feedtemplet where tname = ? and pastureid = ? )) * (?*(?*0.01))` feedpargs = append(feedpargs, dataexcel["ptsfname"], pastureid, dataexcel["ccount"], dataexcel["ratio"]) } else { upFeedpSql += ` , ptsfid = -1,ptsfname = '',supplyweight = 0 ` } upFeedpSql += " where barname = ? and pastureid = ? " feedpargs = append(feedpargs, dataexcel["barname"], pastureid) _, err = tx.SQL(upFeedpSql, feedpargs...).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } exist1, err := tx.SQL(` select id from fpdetail where barname = ? and pastureid = ? `, dataexcel["barname"], pastureid).Exist() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } if !exist1 { _, err := tx.SQL(` insert into fpdetail(pastureid,barid,barname,times,ptuse,ptsuse,ptsrate,ptsid,ptid)values(?,(select id from bar where bname = ? and pastureid = ? ),?,1,0,0,0,-1,-1) `, pastureid, dataexcel["barname"], pastureid, dataexcel["barname"]).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } _, err = tx.SQL(` insert into fpdetail(pastureid,barid,barname,times,ptuse,ptsuse,ptsrate,ptsid,ptid)values(?,(select id from bar where bname = ? and pastureid = ? ),?,2,0,0,0,-1,-1) `, pastureid, dataexcel["barname"], pastureid, dataexcel["barname"]).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } _, err = tx.SQL(` insert into fpdetail(pastureid,barid,barname,times,ptuse,ptsuse,ptsrate,ptsid,ptid)values(?,(select id from bar where bname = ? and pastureid = ? ),?,3,0,0,0,-1,-1) `, pastureid, dataexcel["barname"], pastureid, dataexcel["barname"]).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } _, err = tx.SQL(` insert into fpdetail(pastureid,barid,barname,times,ptuse,ptsuse,ptsrate,ptsid,ptid)values(?,(select id from bar where bname = ? and pastureid = ? ),?,4,0,0,0,-1,-1) `, pastureid, dataexcel["barname"], pastureid, dataexcel["barname"]).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, false) return } } upFpdSql := ` update fpdetail set tratio = ? ,weight = (? *0.01) * ((select sum(fweight) fweight from ftdetail where ftid = (select id from feedtemplet where tname = ? and pastureid = ? )) * (?*(?*0.01))) ,cowcount = ? , ccountradio= ?,ptid= (select id from feedtemplet where tname = ? and pastureid = ? ) where barname = ? and pastureid = ? and times = ?` var fpdargs1 []interface{} fpdargs1 = append(fpdargs1, dataexcel["1"], dataexcel["1"], dataexcel["ftname"], pastureid, dataexcel["ccount"], dataexcel["ratio"], dataexcel["ccount"], dataexcel["ratio"], dataexcel["ftname"], pastureid, dataexcel["barname"], pastureid, 1) _, err = tx.SQL(upFpdSql, fpdargs1...).Execute() if err != nil { appG.Response(http.StatusInternalServerError, e.ERROR, false) return } // upFpdSql := ` update fpdetail set tratio = ? ,weight = (? *0.01) * ((select sum(fweight) fweight from ftdetail // where ftid = (select id from feedtemplet where tname = ? and pastureid = ? )) * (?*(?*0.01))) ,cowcount = ? , // ccountradio= ?,ptid= (select id from feedtemplet where tname = ? and pastureid = ? ) where barname = ? // and pastureid = ? and times = ?` var fpdargs2 []interface{} fpdargs2 = append(fpdargs2, dataexcel["2"], dataexcel["2"], dataexcel["ftname"], pastureid, dataexcel["ccount"], dataexcel["ratio"], dataexcel["ccount"], dataexcel["ratio"], dataexcel["ftname"], pastureid, dataexcel["barname"], pastureid, 2) _, err = tx.SQL(upFpdSql, fpdargs2...).Execute() if err != nil { appG.Response(http.StatusInternalServerError, e.ERROR, false) return } var fpdargs3 []interface{} fpdargs3 = append(fpdargs3, dataexcel["3"], dataexcel["3"], dataexcel["ftname"], pastureid, dataexcel["ccount"], dataexcel["ratio"], dataexcel["ccount"], dataexcel["ratio"], dataexcel["ftname"], pastureid, dataexcel["barname"], pastureid, 3) _, err = tx.SQL(upFpdSql, fpdargs3...).Execute() if err != nil { appG.Response(http.StatusInternalServerError, e.ERROR, false) return } var fpdargs4 []interface{} fpdargs4 = append(fpdargs4, dataexcel["4"], dataexcel["4"], dataexcel["ftname"], pastureid, dataexcel["ccount"], dataexcel["ratio"], dataexcel["ccount"], dataexcel["ratio"], dataexcel["ftname"], pastureid, dataexcel["barname"], pastureid, 4) _, err = tx.SQL(upFpdSql, fpdargs4...).Execute() if err != nil { appG.Response(http.StatusInternalServerError, e.ERROR, false) return } // _, err = tx.SQL(`call updateLPPbyFPChange(?,( select id from feedp where barname = ? and pastureid = ?))`, pastureid, dataexcel["barname"], pastureid).Execute() newList, err := tx.SQL(` select ifnull(ROUND((1-ptsrate)*weight,2)-ptuse,"") fweight,id,ptid,weight,times from fpdetail where barname = ? and pastureid = ? `, dataexcel["barname"], pastureid).Query().List() if err != nil { appG.Response(http.StatusInternalServerError, e.ERROR, false) return } // oldFpdList, err := tx.SQL(` select fpd.id,fpd.barname,fpd.weight,fpd.times,fp.ftweight,fp.supplyweight from fpdetail fpd // join feedp fp on fp.barid = fpd.barid and fpd.pastureid = fp.pastureid where fpd.pastureid = ?`, pastureid).Query().List() upFpdetailList := make([]*upFpdetail, 0) for _, newfpd := range newList { for _, oldfpd := range oldFpdList { if oldfpd["id"].(int64) == newfpd["id"].(int64) { var oldweight, newweight float64 if oldfpd["weight"] != nil { oldweight, _ = strconv.ParseFloat(oldfpd["weight"].(string), 64) } if newfpd["weight"] != nil { newweight, _ = strconv.ParseFloat(newfpd["weight"].(string), 64) } fweight, _ := strconv.ParseFloat(newfpd["fweight"].(string), 64) upFpdetailList = append(upFpdetailList, &upFpdetail{ Old: oldweight, New: newweight, Times: newfpd["times"].(int64), Ptid: newfpd["ptid"].(int64), Fweight: fweight, Id: oldfpd["id"].(int64), }) break } } } updateFpdetailByBar(pastureid, dataexcel["barname"].(string), upFpdetailList) } } if !isdone { ok++ isdone = true } } data := make(map[string]interface{}) data["result"] = queryData data["success"] = ok data["err_count"] = error appG.Response(http.StatusOK, e.SUCCESS, data) } type upFpdetail struct { Old float64 New float64 Times int64 Ptid int64 Fweight float64 Id int64 // Ptsid string } func updateFpdetailByBar(pastureid, barname string, dataList []*upFpdetail) error { tx := restful.Engine.NewSession() defer tx.Close() tx.Begin() fpdList, err := tx.SQL(` select id,ifnull(ROUND((1-ptsrate)*weight,2),"") weight,ptuse,times from fpdetail where pastureid = ? and barname = ? order by times `, pastureid, barname).Query().List() if err != nil { logs.Error(err) } for _, fpd := range fpdList { lpplandList, err := tx.SQL(` select lppland.id,lppland.lweight from lpplandtl1 lppland join lpplan lpp on lpp.id = lppland.lppid where lppland.pastureid = ? and lppland.fpdid = ? and lpp.times = ? order by lpp.sort desc `, pastureid, fpd["id"], fpd["times"]).Query().List() if err != nil { tx.Rollback() logs.Error(err) return err } var lweight float64 for _, lppland := range lpplandList { lweight1, _ := strconv.ParseFloat(lppland["lweight"].(string), 64) lweight += lweight1 } fpdweight, _ := strconv.ParseFloat(fpd["weight"].(string), 64) ptuse, _ := strconv.ParseFloat(fpd["ptuse"].(string), 64) if fpdweight >= ptuse && lweight == ptuse { continue } else { if lweight <= fpdweight { _, err := tx.SQL(` update fpdetail set ptuse = ? where id = ? `, lweight, fpd["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) return err } } else { weight := lweight - fpdweight _, err = tx.SQL(`UPDATE fpdetail SET ptuse=? WHERE pastureid=? AND id=?`, fpdweight, pastureid, fpd["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) return err } for _, lppland := range lpplandList { lpplandlweight, _ := strconv.ParseFloat(lppland["lweight"].(string), 64) if weight >= lpplandlweight { weight = weight - lpplandlweight _, err := tx.SQL(` delete from lpplandtl1 where id = ? `, lppland["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) return err } } else { lpplandlweight, _ := strconv.ParseFloat(lppland["lweight"].(string), 64) _, err := tx.SQL(` update lpplandtl1 set lweight = ? where id = ? `, lpplandlweight-weight, lppland["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) return err } weight = 0 break } } } } } for _, list := range dataList { ftmap := make(map[string]interface{}) ftmap["old"] = list.Old ftmap["new"] = list.New ftmap["times"] = list.Times ftmap["ptid"] = strconv.FormatInt(list.Ptid, 10) ftmap["ptsid"] = "" // fmt.Println(ftmap) fpdDataList, err := tx.SQL(`select * from (SELECT TRIM(id) id,times,tratio,ifnull(ROUND(ptsrate*weight,2)-ptsuse,"") weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,0 AS fttype,cowcount,ccountradio,1 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and barname = ? and times = ? UNION SELECT TRIM(id) id,times,tratio,ifnull(ROUND((1-ptsrate)*weight,2)-ptuse,"") weight,TRIM(barid) barid,TRIM(pastureid) pastureid,TRIM(ptid) ptid,TRIM(ptsid ) ptsid , (select bname from bar where pastureid =fpdetail.pastureid and id = fpdetail.barid ) barname,1 AS fttype,cowcount,ccountradio,0 isfill FROM fpdetail WHERE fpdetail.pastureid = ? and barname = ? and times = ? ) t order by t.barname,t.times`, pastureid, barname, ftmap["times"], pastureid, barname, ftmap["times"]).Query().List() // fmt.Println(pastureid, id, ftmap["times"], pastureid, id, ftmap["times"]) if err != nil { tx.Rollback() logs.Error(err) } for _, fpd := range fpdDataList { if fpd["times"].(int64) == ftmap["times"].(int64) && (fpd["ptid"].(string) == ftmap["ptid"].(string) || fpd["ptsid"].(string) == ftmap["ptsid"].(string)) { fttype := -1 if ftmap["ptid"].(string) != "-1" { fttype = 1 } var fweight float64 var lweight float64 lpplandtl1List := make([]*lpplandtlInfo, 0) err = tx.SQL(`select lppland.*,lpp.maxweight from lpplan lpp join lpplandtl1 lppland on lpp.id = lppland.lppid where lppland.fpdid =? and lppland.fttype = ? and lpp.pastureid = ? and lpp.times = ? order by lpp.sort desc `, fpd["id"], fttype, pastureid, ftmap["times"]).Find(&lpplandtl1List) if err != nil { tx.Rollback() logs.Error(err) } weight, _ := strconv.ParseFloat(fpd["weight"].(string), 64) // ptuse, _ := strconv.ParseFloat(fpd["ptuse"].(string), 64) var w float64 var status int if ftmap["new"].(float64) < ftmap["old"].(float64) { if weight >= 0 { continue } w = weight status = 0 } else { if weight-(ftmap["new"].(float64)-ftmap["old"].(float64)) > 0 { continue } w = weight status = 1 } for _, lppland := range lpplandtl1List { lweight += lppland.Lweight } for _, lppland := range lpplandtl1List { if status == 1 { // if w <= lppland.Lweight { if lppland.Maxweight <= lweight { continue } if w+lweight <= lppland.Maxweight { lppland.Lweight += w lweight += w fweight += w w = 0 } else { w = w - (lppland.Maxweight - lweight) n := (lppland.Maxweight - lweight) lppland.Lweight = lppland.Lweight + n lweight += n fweight += n } } else { if lppland.Lweight == 0 { continue } if w+lppland.Lweight >= 0 { lppland.Lweight = lppland.Lweight + w lweight = lweight + w fweight = fweight + w w = 0 } else { w = w + lppland.Lweight lweight = lweight - lppland.Lweight fweight = fweight - lppland.Lweight lppland.Lweight = 0 } } _, err = tx.SQL(`update lpplandtl1 set Lweight = ? where id = ? and pastureid = ?`, lppland.Lweight, lppland.Id, pastureid).Execute() if err != nil { tx.Rollback() logs.Error(err) return err } break } _, err = tx.SQL(`UPDATE fpdetail SET ptuse=IF(?=1,IF(ptuse+? <0,0,ptuse+?),ptuse), ptsuse=IF(?=0,IF(ptsuse+?<0,0,ptsuse+?),ptsuse) WHERE pastureid=? AND id=?`, fttype, fweight, fweight, fttype, fweight, fweight, pastureid, fpd["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) } if w == 0 { break } } } } // for _, data := range dataList { // fttype := -1 // if data.Ptid != -1 { // fttype = 1 // } // var fweight float64 // var lweight float64 // lpplandtl1List := make([]*lpplandtlInfo, 0) // err := tx.SQL(`select lppland.*,lpp.maxweight from lpplan lpp // join lpplandtl1 lppland on lpp.id = lppland.lppid where lppland.fpdid =? // and lppland.fttype = ? and lpp.pastureid = ? and lpp.times = ? order by lpp.sort desc `, // data.Id, fttype, pastureid, data.Times).Find(&lpplandtl1List) // if err != nil { // tx.Rollback() // logs.Error(err) // return err // } // weight := data.Fweight // // weight, _ := strconv.ParseFloat(fpd["weight"].(string), 64) // var w float64 // var status int // if data.New < data.Old { // if weight >= 0 { // continue // } // w = weight // status = 0 // } else { // // if weight-(data.New-data.Old) > 0 { // // continue // // } // w = data.New - data.Old // status = 1 // } // for _, lppland := range lpplandtl1List { // var lppdata lpplandtlInfo // tx.SQL(`select sum(lweight) as lweight from lpplandtl1 lpp where lppid = ? and lpp.pastureid = ? `, // lppland.Lppid, pastureid).GetFirst(&lppdata) // if err != nil { // tx.Rollback() // logs.Error(err) // return err // } // lweight = lppdata.Lweight // if status == 1 { // // if w <= lppland.Lweight { // if lppland.Maxweight <= lweight { // continue // } // if w+lweight <= lppland.Maxweight { // lppland.Lweight += w // lweight += w // fweight += w // w = 0 // } else { // w = w - (lppland.Maxweight - lweight) // n := (lppland.Maxweight - lweight) // lppland.Lweight = lppland.Lweight + n // lweight += n // fweight += n // } // } else { // if lppland.Lweight == 0 { // continue // } // if w+lppland.Lweight >= 0 { // lppland.Lweight = lppland.Lweight + w // lweight = lweight + w // fweight = fweight + w // w = 0 // } else { // w = w + lppland.Lweight // lweight = lweight - lppland.Lweight // fweight = fweight - lppland.Lweight // lppland.Lweight = 0 // } // } // _, err = tx.SQL(`update lpplandtl1 set Lweight = ? where id = ? and pastureid = ?`, lppland.Lweight, lppland.Id, pastureid).Execute() // if err != nil { // tx.Rollback() // logs.Error(err) // return err // } // break // } // _, err = tx.SQL(`UPDATE fpdetail SET ptuse=IF(?=1,IF(ptuse+? <0,0,ptuse+?),ptuse), // ptsuse=IF(?=0,IF(ptsuse+?<0,0,ptsuse+?),ptsuse) // WHERE pastureid=? AND id=?`, fttype, fweight, fweight, fttype, fweight, fweight, pastureid, data.Id).Execute() // if err != nil { // tx.Rollback() // logs.Error(err) // return err // } // // if w == 0 { // // break // // } // // } // } err = tx.Commit() if err != nil { logs.Error(err) tx.Rollback() return err } now := time.Now() newLpplandtl1List, err := tx.SQL(` select lppland.* from lpplandtl1 lppland where lppland.barname = ? and pastureid = ? `, barname, pastureid).Query().List() if err != nil { logs.Error(err) return nil } newFpdDataList, err := tx.SQL(` select * from fpdetail where barname = ? and pastureid = ? `, barname, pastureid).Query().List() if err != nil { logs.Error(err) return nil } newFeedpList, err := tx.SQL(` select * from feedp where barname = ? and pastureid = ? `, barname, pastureid).Query().List() if err != nil { logs.Error(err) return nil } for _, newLpplandtl1 := range newLpplandtl1List { _, err := tx.SQL(` insert into lpplandtl1history(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname, background,cowcount,ccountradio,lweighthis,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newLpplandtl1["pastureid"], newLpplandtl1["lppid"], newLpplandtl1["barid"], newLpplandtl1["barname"], newLpplandtl1["fpdid"], newLpplandtl1["fttype"], newLpplandtl1["lweight"], newLpplandtl1["sort"], newLpplandtl1["tmrid"], newLpplandtl1["tmrname"], newLpplandtl1["background"], newLpplandtl1["cowcount"], newLpplandtl1["ccountradio"], newLpplandtl1["lweighthis"], now).Execute() if err != nil { logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) return nil } } for _, newFpd := range newFpdDataList { _, err := tx.SQL(` insert into fpdetailhistory(pastureid,barid,barname,times,tratio,weight,ptsrate,cowcount,ccountradio,ptid,ptsid,ptuse,ptsuse,supplement,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newFpd["pastureid"], newFpd["barid"], newFpd["barname"], newFpd["times"], newFpd["tratio"], newFpd["weight"], newFpd["ptsrate"], newFpd["cowcount"], newFpd["ccountradio"], newFpd["ptid"], newFpd["ptsid"], newFpd["ptuse"], newFpd["ptsuse"], newFpd["supplement"], now).Execute() if err != nil { logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) return nil } } for _, newFeedp := range newFeedpList { _, err := tx.SQL(` insert into feedphistory(pastureid,barname,barid,softccount,ccount,ratio,ccountratio,ftid, ftname,ptsfid,ptsfname,feedweight,ftweight,supplyweight,owner,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, newFeedp["pastureid"], newFeedp["barname"], newFeedp["barid"], newFeedp["softccount"], newFeedp["ccount"], newFeedp["ratio"], newFeedp["ccountratio"], newFeedp["ftid"], newFeedp["ftname"], newFeedp["ptsfid"], newFeedp["ptsfname"], newFeedp["feedweight"], newFeedp["ftweight"], newFeedp["supplyweight"], newFeedp["owner"], now).Execute() if err != nil { logs.Error(err) // appG.Response(http.StatusOK, e.ERROR, false) return nil } } return nil } func DeleteFTdetail(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) parammaps := fsion.Get("parammaps") pastureid := parammaps.Get("pastureid").ValueStr() ftid := parammaps.Get("ftid").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() tx.Begin() _, err := tx.SQL(`delete from ftdetail where ftid = ? and pastureid = ? `, ftid, pastureid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } if parammaps.Get("type").ValueStr() == "1" { _, err := tx.SQL(`UPDATE feedp fp set fp.ftweight= IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0),fp.feedweight = IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ftid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0) +ifnull(fp.supplyweight,0) WHERE fp.pastureid = ? AND fp.ftid =?`, pastureid, ftid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } // UPDATE fpdetail SET ptuse=0 ,weight = 0 _, err = tx.SQL(` UPDATE fpdetail fpd INNER JOIN feedp fp ON fpd.barid = fp.barid AND fpd.pastureid = fp.pastureid SET fpd.weight = fp.feedweight*fpd.tratio/100, ptuse= 0 WHERE fp.pastureid = ? AND fp.ftid =?`, pastureid, ftid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err := tx.SQL(`UPDATE feedp fp SET fp.supplyweight= IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0),fp.feedweight = IFNULL(IF( (SELECT sysopt.inforvalue FROM sysopt WHERE sysopt.pastureid= fp.pastureid AND sysopt.inforname='isLockCount')=0, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid ),0)*ccountratio, IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=0),0)*ccountratio + IFNULL((SELECT SUM(fweight) FROM ftdetail WHERE ftdetail.ftid =fp.ptsfid AND ftdetail.pastureid=fp.pastureid AND ftdetail.islockcount=1),0)*ccount ),0) + ifnull(fp.supplyweight,0) WHERE fp.pastureid = ? AND fp.ptsfid =?`, pastureid, ftid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } // ptsuse=IF(?=0,IF(ptsuse+?<0,0,ptsuse+?),ptsuse) _, err = tx.SQL(` UPDATE fpdetail fpd INNER JOIN feedp fp ON fpd.barid = fp.barid AND fpd.pastureid = fp.pastureid SET fpd.weight = fp.feedweight*fpd.tratio/100, ptsrate = 0 WHERE fp.pastureid = ? AND fp.ptsfid =?`, pastureid, ftid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } _, err = tx.SQL(` update lpplandtl1 set lweight = 0 where lppid in(select id from lpplan where ftid = ? and pastureid = ? )`, ftid, pastureid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } err = tx.Commit() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } appG.Response(http.StatusOK, e.SUCCESS, true) } func DeleteSpillageAll(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) parammaps := fsion.Get("parammaps") pastureid := parammaps.Get("pastureid").ValueStr() times := parammaps.Get("times").ValueStr() barid := parammaps.Get("barid").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() lpplandtl1List, err := tx.SQL(` select lppland.* from lpplan lpp join lpplandtl1 lppland on lppland.lppid = lpp.id where lpp.times = ? `, times).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } now := time.Now() for _, item := range lpplandtl1List { go func(item map[string]interface{}) { _, err := tx.SQL(` insert into lpplandtl1history(pastureid,lppid,barid,barname,fpdid,fttype,lweight,sort,tmrid,tmrname, background,cowcount,ccountradio,lweighthis,createdate) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, item["pastureid"], item["lppid"], item["barid"], item["barname"], item["fpdid"], item["fttype"], item["lweight"], item["sort"], item["tmrid"], item["tmrname"], item["background"], item["cowcount"], item["ccountradio"], item["lweighthis"], now).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusOK, e.ERROR, false) return } }(item) } tx.Begin() _, err = tx.SQL(` delete from lpplandtl1 where pastureid = ? and lppid in(select id from lpplan where pastureid = ? and times = ?) and find_in_set(barid,?) `, pastureid, pastureid, times, barid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } _, err = tx.SQL(` UPDATE fpdetail SET ptuse=0,ptsuse=0 WHERE pastureid=? and times = ? and find_in_set(barid,?) `, pastureid, times, barid).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } err = tx.Commit() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } appG.Response(http.StatusOK, e.SUCCESS, true) } func GetTMRListEnableTypeAll(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) parammaps := fsion.Get("parammaps") pastureid := parammaps.Get("pastureid").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() dataList, err := tx.SQL(`SELECT eqcode, tname, datacaptureno, trim(tclassid) tclassid, concat(tname,' / ',eqcode) tmrmix, d.label tclassname, maxstirfeed, remark, tmr.enable, TRIM(tmr.id) id, TRIM(tmr.pastureid)pastureid FROM tmr left join dictlist d on d.pid = 16 and d.value = tmr.tclassid WHERE tmr.pastureid = ? and tmr.enable=1 and tclassid in (1,3) ORDER BY id DESC`, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } sysoptData, err := tx.SQL(`select inforvalue from sysopt where inforname = 'anyCar' and pastureid = ? `, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var carNum int64 for _, sysopt := range sysoptData { if sysopt["inforvalue"] == nil { carNum = 1 } else { carNum, _ = strconv.ParseInt(sysopt["inforvalue"].(string), 10, 64) } } id := 200 n := 0 for i := carNum; i > 0; i-- { id++ n++ data := make(map[string]interface{}, 0) data["eqcode"] = fmt.Sprintf("任意车%d", n) data["tname"] = fmt.Sprintf("任意车%d", n) data["datacaptureno"] = -2 data["tclassid"] = -2 data["tmrmix"] = fmt.Sprintf("任意车%d", n) data["tclassname"] = fmt.Sprintf("任意车%d", n) data["maxstirfeed"] = 100000 data["remark"] = fmt.Sprintf("任意车%d", n) data["enable"] = 1 data["id"] = fmt.Sprintf("%d", id) data["pastureid"] = pastureid dataList = append(dataList, data) } // UNION ALL // SELECT '任意车','任意车','-2',-2,'任意车','任意车',100000,'任意车',1,-2,? appG.Response(http.StatusOK, e.SUCCESS, dataList) } func GetFeedpHistory(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) // parammaps := fsion.Get("parammaps") bar := fsion.Get("barname").ValueStr() startDate := fsion.Get("startDate").ValueStr() endDate := fsion.Get("endDate").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() feedpList, err := tx.SQL(` select barid,barname,ccount,ratio,ccountratio,ftid,ftname, DATE_FORMAT(createdate,'%Y-%m-%d %H:%i:%s') as createdate from feedphistory where barname = ? and createdate between ? and ? order by createdate desc `, bar, startDate, endDate).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } fpdList, err := tx.SQL(` select times,tratio,weight, DATE_FORMAT(createdate,'%Y-%m-%d %H:%i:%s') as createdate from fpdetailhistory where barname = ? and createdate between ? and ? order by createdate desc, times asc`, bar, startDate, endDate).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } for _, feedp := range feedpList { // LastftList, err := tx.SQL(` select tname ,id // from feedtemplethistory where id = ? // and createdate < ? order by createdate desc limit 0,1 `, feedp["ftid"], feedp["createdate"]).Query().List() // if err != nil { // logs.Error(err) // appG.Response(http.StatusInternalServerError, e.ERROR, err) // return // } nextfeedpList, err := tx.SQL(` select barid,barname,ccount,ratio,ccountratio,ftid,ftname, DATE_FORMAT(createdate,'%Y-%m-%d %H:%i:%s') as createdate from feedphistory where barname = ? and createdate < ? order by createdate desc limit 0,1 `, bar, feedp["createdate"]).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var ftname interface{} ftnamestatus := 0 ftname = feedp["ftname"] var lastftid int64 if len(nextfeedpList) > 0 { for _, ft := range nextfeedpList { if ft["ftname"].(string) != feedp["ftname"].(string) { ftname = fmt.Sprintf("%v/%v", feedp["ftname"], ft["ftname"]) lastftid = ft["ftid"].(int64) ftnamestatus = 1 break } } } for i, fpd := range fpdList { if feedp["createdate"].(string) == fpd["createdate"].(string) { fpd["weightstatus"] = 0 fpd["tratiostatus"] = 0 fpd["ftnamestatus"] = ftnamestatus for k, fpd2 := range fpdList { if k > i && fpd["times"].(int64) == fpd2["times"].(int64) { if fpd["weight"].(string) != fpd2["weight"].(string) { fpd["weight"] = fmt.Sprintf("%v/%v", fpd2["weight"], fpd["weight"]) fpd["weightstatus"] = 1 } if fpd["tratio"].(string) != fpd2["tratio"].(string) { fpd["tratio"] = fmt.Sprintf("%v/%v", fpd2["tratio"], fpd["tratio"]) fpd["tratiostatus"] = 1 } break } } fpd["barid"] = feedp["barid"] fpd["barname"] = feedp["barname"] fpd["ccount"] = feedp["ccount"] fpd["ratio"] = feedp["ratio"] fpd["ccountratio"] = feedp["ccountratio"] fpd["ftid"] = feedp["ftid"] fpd["ftname"] = ftname fpd["ccountstatus"] = 0 fpd["ccountratiostatus"] = 0 fpd["ratiostatus"] = 0 fpd["ftnamestatus"] = 0 fpd["lastftid"] = lastftid for _, next := range nextfeedpList { if next["ccount"].(int64) != fpd["ccount"].(int64) { fpd["ccount"] = fmt.Sprintf("%v/%v", next["ccount"], fpd["ccount"]) fpd["ccountstatus"] = 1 } if next["ccountratio"].(string) != fpd["ccountratio"].(string) { fpd["ccountratio"] = fmt.Sprintf("%v/%v", next["ccountratio"], fpd["ccountratio"]) fpd["ccountratiostatus"] = 1 } if next["ratio"].(string) != fpd["ratio"].(string) { fpd["ratio"] = fmt.Sprintf("%v/%v", next["ratio"], fpd["ratio"]) fpd["ratiostatus"] = 1 } // if next["ftname"].(string) != fpd["ftname"].(string) { // fpd["ftname"] = fmt.Sprintf("%v/%v", next["ftname"], fpd["ftname"]) // fpd["ftnamestatus"] = 1 // } } } } } appG.Response(http.StatusOK, e.SUCCESS, fpdList) } // func GetLpplandtl1History(c *gin.Context) { // appG := app.Gin{C: c} // dataByte, _ := ioutil.ReadAll(c.Request.Body) // fsion := gofasion.NewFasion(string(dataByte)) // // parammaps := fsion.Get("parammaps") // barid := fsion.Get("barid").ValueStr() // startDate := fsion.Get("startDate").ValueStr() // endDate := fsion.Get("endDate").ValueStr() // tx := restful.Engine.NewSession() // defer tx.Close() // // feedpList, err := tx.SQL(` select lpp.times, DATE_FORMAT(lh.createdate,'%Y-%m-%d %H:%i:%s') as createdate // // from lpplandtl1history lh join lpplan lpp on lpp.id = lh.lppid where lh.barid = ? // // and lh.createdate between ? and ? order by lh.createdate desc lpp.times `, barid, startDate, endDate).Query().List() // // if err != nil { // // logs.Error(err) // // appG.Response(http.StatusInternalServerError, e.ERROR, err) // // return // // } // // for _, feedp := range feedpList { // // fmt.Println(feedp) // // for i, fpd := range fpdList { // // if feedp["createdate"].(string) == fpd["createdate"].(string) { // // for k, fpd2 := range fpdList { // // if k > i && fpd["times"].(int64) == fpd2["times"].(int64) { // // if fpd["weight"].(string) != fpd2["weight"].(string) { // // fpd["weight"] = fmt.Sprintf("%v/%v", fpd2["weight"], fpd["weight"]) // // } // // break // // } // // } // // fpd["barid"] = feedp["barid"] // // fpd["barname"] = feedp["barname"] // // fpd["ccount"] = feedp["ccount"] // // fpd["ratio"] = feedp["ratio"] // // fpd["ccountratio"] = feedp["ccountratio"] // // fpd["ftid"] = feedp["ftid"] // // fpd["ftname"] = feedp["ftname"] // // } // // } // // } // appG.Response(http.StatusOK, e.SUCCESS, nil) // } func GetRemind(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) fsion := gofasion.NewFasion(string(dataByte)) parammaps := fsion.Get("parammaps") pastureid := parammaps.Get("pastureid").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() dataList, err := tx.SQL("select * from remind where pastureid = ? ", pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } // pastureid = "3" resp, err := http.Get(fmt.Sprintf("http://tmrwatch.cn/notice/msgtype?sys_name=tmrwatch&pasture_id=%s", pastureid)) if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } defer resp.Body.Close() buf := bytes.NewBuffer(make([]byte, 0, 512)) buf.ReadFrom(resp.Body) fmt.Println(string(buf.Bytes())) respMap := make(map[string]interface{}, 0) err = json.Unmarshal(buf.Bytes(), &respMap) if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } for _, data := range dataList { r := make(map[string]interface{}, 0) r["sys_name"] = "" r["service_id"] = "" r["pasture_id"] = "" r["type_name"] = "" r["remind_type_id"] = "" r["remind_type"] = "" r["push_date"] = "" r["push_time"] = "" r["interval_time"] = "" r["push_limit"] = "" r["template_id"] = "" r["roles_id"] = "" r["users_id"] = "" r["date_type"] = "" r["cycle_type"] = "" data["data"] = r for _, resp := range respMap["data"].([]interface{}) { resp1 := resp.(map[string]interface{}) if data["id"].(int64) == int64(resp1["service_id"].(float64)) { if resp1["push_time"] == nil { resp1["push_time"] = "" } data["data"] = resp1 break } } } appG.Response(http.StatusOK, e.SUCCESS, dataList) } type NoticeMsgtype struct { SysName string `json:"sys_name"` PastureId int64 `json:"pasture_id"` ServiceId int64 `json:"service_id"` TypeName string `json:"type_name"` RemindType int64 `json:"remind_type"` PushDate int64 `json:"push_date"` PushTime string `json:"push_time"` IntervalTime int64 `json:"interval_time"` PushLimit int64 `json:"push_limit"` TemplateId string `json:"template_id"` UsersId string `json:"users_id"` DateType int64 `json:"date_type"` CycleType int64 `json:"cycle_type"` DelayTime int64 `json:"delay_time"` Status int64 `json:"status"` } func UpdateRemind(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) // parammaps := fsion.Get("parammaps") // user := parammaps.Get("user").ValueStr() id := parammaps.Get("id").ValueInt64() noticeMsgtype := new(NoticeMsgtype) noticeMsgtype.SysName = parammaps.Get("sys_name").ValueStr() noticeMsgtype.ServiceId = id noticeMsgtype.PastureId = parammaps.Get("pastureid").ValueInt64() noticeMsgtype.TypeName = parammaps.Get("type_name").ValueStr() // noticeMsgtype.RemindTypeId = parammaps.Get("remind_type_id").ValueInt64() noticeMsgtype.RemindType = parammaps.Get("remind_type").ValueInt64() noticeMsgtype.PushDate = parammaps.Get("push_date").ValueInt64() noticeMsgtype.PushTime = parammaps.Get("push_time").ValueStr() noticeMsgtype.IntervalTime = parammaps.Get("interval_time").ValueInt64() noticeMsgtype.PushLimit = parammaps.Get("push_limit").ValueInt64() noticeMsgtype.TemplateId = parammaps.Get("template_id").ValueStr() // noticeMsgtype. = parammaps.Get("roles_id").ValueStr() noticeMsgtype.DateType = parammaps.Get("date_type").ValueInt64() noticeMsgtype.CycleType = parammaps.Get("cycle_type").ValueInt64() noticeMsgtype.DelayTime = parammaps.Get("delay_time").ValueInt64() noticeMsgtype.Status = parammaps.Get("status").ValueInt64() //TODO noticeMsgtype.SysName = "tmrWatch" userList := parammaps.Get("user").Array() var userstr []string for _, user := range userList { userstr = append(userstr, user.ValueStr()) } tx := restful.Engine.NewSession() defer tx.Close() _, err := tx.SQL(` update remind set user = ? where id = ? and pastureid = ? `, strings.Join(userstr, ","), id, noticeMsgtype.PastureId).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } // var jsonStr = []byte(noticeMsgtype noticeMsgtypebyte, err := json.Marshal(noticeMsgtype) fmt.Println(string(noticeMsgtypebyte), "aaaaaaaaaa") req, err := http.NewRequest("POST", "http://tmrwatch.cn/notice/msgtype", bytes.NewBuffer(noticeMsgtypebyte)) req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { logs.Error(err) } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println("response Body:", string(body)) getresp, err := http.Get(fmt.Sprintf("http://tmrwatch.cn/notice/msgtype?sys_name=tmrwatch&pasture_id=%d&service_id=%d", noticeMsgtype.PastureId, id)) if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } defer getresp.Body.Close() buf := bytes.NewBuffer(make([]byte, 0, 512)) buf.ReadFrom(getresp.Body) // fmt.Println(string(buf.Bytes())) respMap := make(map[string]interface{}, 0) err = json.Unmarshal(buf.Bytes(), &respMap) if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } for _, resp := range respMap["data"].([]interface{}) { resp1 := resp.(map[string]interface{}) _, err := tx.SQL(` update remind set service_id = ? where id = ? and pastureid = ? `, resp1["service_id"], id, noticeMsgtype.PastureId).Execute() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } appG.Response(http.StatusOK, e.SUCCESS, true) } func GetSpillageallHistory(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) barname := parammaps.Get("barname").ValueStr() pastureid := parammaps.Get("pastureid").ValueStr() startdate := parammaps.Get("startDate").ValueStr() enddate := parammaps.Get("endDate").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() historyList, err := tx.SQL(` select lpp.id,lpp.times,lppland.lweight,lppland.tmrid,lppland.tmrname,lpp.sort,DATE_FORMAT(lppland.createdate,'%Y-%m-%d %H:%i:%s') as createdate from lpplandtl1history lppland join lpplan lpp on lpp.id = lppland.lppid where lppland.barname = ? and lppland.pastureid = ? and lppland.createdate between ? and ? order by lppland.createdate desc ,lpp.times,lpp.sort asc `, barname, pastureid, startdate, enddate).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } respMap := make([]map[string]interface{}, 0) data := make(map[interface{}]interface{}) for _, history := range historyList { data[history["createdate"]] = history["createdate"] } createList := []string{} for _, v := range data { createList = append(createList, v.(string)) } // sort.Sort() // sort.Sort(sort.Reverse(sort.StringSlice(createList))) sort.Slice(createList, func(i, j int) bool { return createList[i] > createList[j] }) for _, v := range createList { a := make(map[string]interface{}) a["createdate"] = data[v] // createList = append(createList, v.(string)) respMap = append(respMap, a) } number := 0 dataMap := make([]interface{}, 0) for k, resp := range respMap { createdate := resp["createdate"].(string) var nextcreatedate string if len(respMap) > k+1 { nextcreatedate = respMap[k+1]["createdate"].(string) } // dataList := make(map[string][]interface{}) // list := make(map[string]interface{}) times := make(map[interface{}]int) for _, history := range historyList { // List := make(map[interface{}][]interface{}) i := 0 if history["createdate"].(string) == createdate { times[history["times"]]++ data := make(map[string]interface{}) data[fmt.Sprintf("a%d", times[history["times"]])] = fmt.Sprintf("%v", history["lweight"]) // exist := false if nextcreatedate != "" { for _, history1 := range historyList { if history1["createdate"].(string) == nextcreatedate && history1["id"].(int64) == history["id"].(int64) && history1["times"].(int64) == history["times"].(int64) { data[fmt.Sprintf("a%d", times[history["times"]])] = fmt.Sprintf("%v/%v", data[fmt.Sprintf("a%d", times[history["times"]])], history["lweight"]) break // exist = true } } } // data[fmt.Sprintf("a%d", times[history["times"]])] = fmt.Sprintf("%v(%v)", data[fmt.Sprintf("a%d", times[history["times"]])], history["tmrname"]) i++ // list[fmt.Sprintf("a%d", m)] = append(list[fmt.Sprintf("a%d", m)], data) // dataList[strconv.FormatInt(history["times"].(int64), 10)][fmt.Sprintf("a%d", m)] = nil // dataList[strconv.FormatInt(history["times"].(int64), 10)] = append(dataList[strconv.FormatInt(history["times"].(int64), 10)], data) // resp["times"] = history["times"] // resp[fmt.Sprintf("a%d", times[history["times"]])] = fmt.Sprintf("%v(%v)", data[fmt.Sprintf("a%d", times[history["times"]])], history["tmrname"]) data1 := make(map[string]interface{}) data1["times"] = history["times"] data1[fmt.Sprintf("a%d", times[history["times"]])] = fmt.Sprintf("%v(%v)", data[fmt.Sprintf("a%d", times[history["times"]])], history["tmrname"]) data1["createdate"] = resp["createdate"] // fmt.Println(dataList) dataMap = append(dataMap, data1) } if i > number { number = i } // respMap = append(respMap, dataList) } // for k, data := range dataList { // resp[k] = data // } // resp["data"] = dataList } // resp := make(map[string]interface{}) // sort.Strings(createList) // // for _, create := range createList { // for _, r := range respMap { // if create == r["createdate"].(string) { // resp[create] = r // break // } // } // } sz := []string{"一", "二", "三", "四", "五", "六", "七", "八", "九"} var trainsList []interface{} for i := 0; i < number; i++ { trains := make(map[string]interface{}) trains["label"] = fmt.Sprintf("第%s车", sz[i]) trains["prop"] = fmt.Sprintf("a%d", i+1) trainsList = append(trainsList, trains) } respdata := make(map[string]interface{}) respdata["data"] = dataMap respdata["trains"] = trainsList appG.Response(http.StatusOK, e.SUCCESS, respdata) } func GetRecipeTemplateRecordHistory(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) ftid := parammaps.Get("ftid").ValueInt64() lastftid := parammaps.Get("lastftid").ValueInt64() pastureid := parammaps.Get("pastureid").ValueInt64() // createdate := parammaps.Get("createdate").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() data := make(map[string]interface{}) feedtempletList, err := tx.SQL(`select * from feedtemplet fthis where fthis.id = ? and fthis.pastureId = ?`, ftid, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } feedtemplet := make(map[string]interface{}) for _, f := range feedtempletList { feedtemplet = f } fitList, err := tx.SQL(` select * from ftdetail fit where fit.ftid = ? and fit.pastureid = ?`, ftid, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } feedtemplet["fit"] = fitList data["current"] = feedtemplet lastfeedtempletList, err := tx.SQL(`select * from feedtemplet fthis where fthis.id = ? and fthis.pastureId = ?`, lastftid, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } lastfeedtemplet := make(map[string]interface{}) for _, f := range lastfeedtempletList { lastfeedtemplet = f } lastfitList, err := tx.SQL(` select * from ftdetail fit where fit.ftid = ? and fit.pastureid = ?`, lastftid, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } lastfeedtemplet["fit"] = lastfitList data["last"] = lastfeedtemplet appG.Response(http.StatusOK, e.SUCCESS, data) } func GetFeedtempletHistory(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) ftid := parammaps.Get("ftid").ValueStr() pastureid := parammaps.Get("pastureid").ValueInt64() start := parammaps.Get("startdate").ValueStr() end := parammaps.Get("enddate").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() ftList, err := tx.SQL(` select *,DATE_FORMAT(createdate,'%Y-%m-%d %H:%i:%s') as createdate1 from feedtemplethistory where createdate between ? and ? and id = ? and pastureid = ? order by createdate desc `, start, end, ftid, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } ftdetailList, err := tx.SQL(` select * from ftdetail where ftid = ? and pastureid = ? order by sort `, ftid, pastureid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } // join feed f on f.fname = fit.name and f.pastureId = fit.pastureId for i, ft := range ftList { fithisList, err := tx.SQL(` select fit.Eweight,fit.weight,fit.name as fname, ifnull(fit.feedgroup,( select ft.feedgroup from ftdetail ft where ft.ftid = fit.fitid and fit.name = ft.fname )) as feedgroup, ifnull(fit.autosecond ,( select ft.autosecond from ftdetail ft where ft.ftid = fit.fitid and fit.name = ft.fname )) as autosecond from fit_history fit where fit.fitid = ? and fit.dateTime1 = ( select dateTime1 from fit_history where fitid = ? and dateTime1 <= ? group by dateTime1 order by dateTime1 desc limit 0,1 )`, ftid, ftid, ft["createdate"]).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } ft["createdate"] = ft["createdate1"] // data["tname"] = ft["tname"] // data["tcode"] = ft["tcode"] // data["tcolor"] = ft["tcolor"] // data["fttype"] = ft["fttype"] // data["ccname"] = ft["ccname"] // data["source"] = ft["source"] // data["version"] = ft["version"] // data["remark"] = ft["remark"] for n, ft2 := range ftList { if i < n { if ft["tname"].(string) != ft2["tname"].(string) { ft["tname"] = fmt.Sprintf("%v/%v", ft["tname"], ft2["tname"]) } if _, ok := ft["tcode"]; ok { if _, ok := ft2["tcode"]; ok { if ft["tcode"].(string) != ft2["tcode"].(string) { ft["tcode"] = fmt.Sprintf("%v/%v", ft["tcode"], ft2["tcode"]) } } } if _, ok := ft["tcolor"]; ok { if _, ok := ft2["tcolor"]; ok { if ft["tcolor"].(string) != ft2["tcolor"].(string) { ft["tcolor"] = fmt.Sprintf("%v/%v", ft["tcolor"], ft2["tcolor"]) } } } if _, ok := ft["fttype"]; ok { if _, ok := ft2["fttype"]; ok { if ft["fttype"].(string) != ft2["fttype"].(string) { ft["fttype"] = fmt.Sprintf("%v/%v", ft["fttype"], ft2["fttype"]) } } } if _, ok := ft["ccname"]; ok { if _, ok := ft2["ccname"]; ok { if ft["ccname"].(string) != ft2["ccname"].(string) { ft["ccname"] = fmt.Sprintf("%v/%v", ft["ccname"], ft2["ccname"]) } } } if _, ok := ft["source"]; ok { if _, ok := ft2["source"]; ok { if ft["source"].(string) != ft2["source"].(string) { ft["source"] = fmt.Sprintf("%v/%v", ft["source"], ft2["source"]) } } } if _, ok := ft["version"]; ok { if _, ok := ft2["version"]; ok { if ft["version"].(int64) != ft2["version"].(int64) { ft["version"] = fmt.Sprintf("%v/%v", ft["version"], ft2["version"]) } } } if _, ok := ft["remark"]; ok { if _, ok := ft2["remark"]; ok { if ft["remark"].(string) != ft2["remark"].(string) { ft["remark"] = fmt.Sprintf("%v/%v", ft["remark"], ft2["remark"]) } } } break } } dataList := make([]map[string]interface{}, 0) if len(fithisList) > 0 { for _, fit := range fithisList { data := make(map[string]interface{}) data["feedgroup"] = fit["feedgroup"] data["fname"] = fit["fname"] if fit["Eweight"] != nil { if fit["Eweight"].(string) != fit["weight"].(string) { data["fweight"] = fmt.Sprintf("%v/%v", fit["Eweight"], fit["weight"]) } else { data["fweight"] = fit["Eweight"] } data["fweightstatus"] = 1 } else { data["fweight"] = fit["weight"] data["fweightstatus"] = 0 } data["autosecond"] = fit["autosecond"] // data["tname"] = ft["tname"] // data["tcode"] = ft["tcode"] // data["tcolor"] = ft["tcolor"] // data["fttype"] = ft["fttype"] // data["ccname"] = ft["ccname"] // data["source"] = ft["source"] // data["version"] = ft["version"] // data["remark"] = ft["remark"] // data["createdate"] = ft["createdate1"] // ft["fit"] = data dataList = append(dataList, data) } } else { for _, fit := range ftdetailList { data := make(map[string]interface{}) data["feedgroup"] = fit["feedgroup"] data["fname"] = fit["fname"] // if fit["Eweight"] != nil { // data["weight"] = fit["Eweight"] // } else { data["fweight"] = fit["fweight"] // } data["autosecond"] = fit["autosecond"] // ft["fit"] = data dataList = append(dataList, data) } } ft["fit"] = dataList } appG.Response(http.StatusOK, e.SUCCESS, ftList) } func UpdateMaterialTMR(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) tmrid := parammaps.Get("tmrid").ValueStr() tmrtype := parammaps.Get("tmrtype").ValueStr() lppid := parammaps.Get("lppid").ValueStr() times := parammaps.Get("times").ValueStr() pastureid := parammaps.Get("pastureid").ValueStr() // oldtmrid := parammaps.Get("oldtmrid").ValueStr() // oldtmrtype := parammaps.Get("oldtmrtype").ValueStr() status := parammaps.Get("status").ValueInt64() // 0 多出的饲料平均从已分配的各栏舍中扣减 1 多出的饲料从最后一个栏舍依次往前扣减 2 清空已分配的撒料车 tx := restful.Engine.NewSession() defer tx.Close() tx.Begin() if tmrid != "1000" { tmrList, err := tx.SQL(" select maxstirfeed from tmr where id = ? ", tmrid).Query().List() if err != nil { logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var maxstirfeed float64 for _, tmr := range tmrList { maxstirfeed += float64(tmr["maxstirfeed"].(int64)) } if status == 0 { lpplandtl1List, err := tx.SQL(" select id,lweight,fttype,barid from lpplandtl1 where lppid = ? and pastureid = ? order by sort desc ", lppid, pastureid).Query().List() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var lweight float64 for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) lweight += fl } if lweight > maxstirfeed { lweight = lweight - maxstirfeed } else { lweight = 0 } if lweight > 0 { lweight1 := lweight / float64(len(lpplandtl1List)) number := 0 for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) if lweight1 >= fl { number++ } } lweight := lweight / float64((len(lpplandtl1List) - number)) for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) if lweight1 >= fl { continue } if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ( select tname from tmr where id = ?),lweight = lweight- ? where id = ? ", tmrid, tmrid, lweight, item["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1 set tmrid = 201 , tmrname = '任意车1',lweight = lweight- ? where id = ? ", lweight, item["id"]).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetail set ptsuse = ptsuse - ? where times = ? and barid = ? ", lweight, times, item["barid"]).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetail set ptuse = ptuse - ? where times = ? and barid = ? ", lweight, times, item["barid"]).Execute() if err != nil { tx.Rollback() logs.Error(err) appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } else { for _, item := range lpplandtl1List { // 自走式 if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ( select tname from tmr where id = ?) where id = ? ", tmrid, tmrid, item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1 set tmrid = 201 , tmrname = '任意车1' where id = ? ", item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } } else if status == 1 { lpplandtl1List, err := tx.SQL(" select id,lweight,fttype,barid from lpplandtl1 where lppid = ? and pastureid = ? order by sort desc ", lppid, pastureid).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var lweight float64 for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) lweight += fl } if lweight > maxstirfeed { lweight = lweight - maxstirfeed } else { lweight = 0 } for _, item := range lpplandtl1List { if lweight > 0 { // `ttype` tinyint(4) DEFAULT NULL COMMENT '设备类型0铲车,1tmr,3撒料设备 fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) if fl >= lweight { item["lweight"] = fl - lweight lweight = 0 if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ( select tname from tmr where id = ?) ,lweight = ? where id = ? ", tmrid, tmrid, item["lweight"], item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1 set tmrid = 201 , tmrname = '任意车1' ,lweight = ? where id = ? ", item["lweight"], item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetail set ptsuse = ptsuse - ? where times = ? and barid = ? ", lweight, times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetail set ptuse = ptuse - ? where times = ? and barid = ? ", lweight, times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } else { lweight = lweight - fl _, err = tx.SQL(" delete from lpplandtl1 where id = ? ", item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetail set ptsuse = ptsuse - ? where times = ? and barid = ? ", item["lweight"], times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetail set ptuse = ptuse - ? where times = ? and barid = ? ", item["lweight"], times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } else { // 自走式 if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1 set tmrid = ? , tmrname = ( select tname from tmr where id = ?) where id = ? ", tmrid, tmrid, item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1 set tmrid = 201 , tmrname = '任意车1' where id = ? ", item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } } else { lpplandtl1List, err := tx.SQL(" select id,lweight,fttype,barid from lpplandtl1 where lppid = ? and pastureid = ? ", lppid, pastureid).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } for _, item := range lpplandtl1List { if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetail set ptsuse = ptsuse - ? where times = ? and barid = ? ", item["lweight"], times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetail set ptuse = ptuse - ? where times = ? and barid = ? ", item["lweight"], times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } _, err = tx.SQL(" delete from lpplandtl1 where `id` = ? ", item["id"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } _, err = tx.SQL(" update lpplan set tmrid = ? , tmrname = ( select tname from tmr where id = ?) , maxweight = ? where id = ? ", tmrid, tmrid, maxstirfeed, lppid).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { if status == 2 { lpplandtl1List, err := tx.SQL(`select * from lpplandtl1 where lppid = ? `, lppid).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } for _, item := range lpplandtl1List { if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetail set ptsuse = ptsuse - ? where times = ? and barid = ? ", item["lweight"], times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetail set ptuse = ptuse - ? where times = ? and barid = ? ", item["lweight"], times, item["barid"]).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } _, err = tx.SQL(" delete from lpplandtl1 where `lppid` = ? ", lppid).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err := tx.SQL(" update lpplan set tmrid = ? , tmrname = ?, maxweight = ? where id = ? ", tmrid, "搅拌任意车", 100000, lppid).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } err := tx.Commit() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } appG.Response(http.StatusOK, e.SUCCESS, true) } func UpdateMaterialTMRDate(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) tmrid := parammaps.Get("tmrid").ValueStr() tmrtype := parammaps.Get("tmrtype").ValueStr() lppid := parammaps.Get("lppid").ValueStr() times := parammaps.Get("times").ValueStr() pastureid := parammaps.Get("pastureid").ValueStr() date := parammaps.Get("date").ValueStr() // oldtmrtype := parammaps.Get("oldtmrtype").ValueStr() status := parammaps.Get("status").ValueInt64() // 0 多出的饲料平均从已分配的各栏舍中扣减 1 多出的饲料从最后一个栏舍依次往前扣减 2 清空已分配的撒料车 tx := restful.Engine.NewSession() defer tx.Close() tx.Begin() if tmrid != "1000" { tmrList, err := tx.SQL(" select maxstirfeed from tmr where id = ? ", tmrid).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var maxstirfeed float64 for _, tmr := range tmrList { maxstirfeed += float64(tmr["maxstirfeed"].(int64)) } if status == 0 { lpplandtl1List, err := tx.SQL(" select id,lweight,fttype,barid from lpplandtl1date where lppid = ? and pastureid = ? and date = ? order by sort desc ", lppid, pastureid, date).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var lweight float64 for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) lweight += fl } if lweight > maxstirfeed { lweight = lweight - maxstirfeed } else { lweight = 0 } if lweight > 0 { lweight1 := lweight / float64(len(lpplandtl1List)) number := 0 for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) if lweight1 >= fl { number++ } } lweight := lweight / float64((len(lpplandtl1List) - number)) for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) if lweight1 >= fl { continue } if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ( select tname from tmr where id = ?),lweight = lweight- ? where id = ? and date = ? ", tmrid, tmrid, lweight, item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1date set tmrid = 201, tmrname = '任意车1',lweight = lweight- ? where id = ? and date = ? ", lweight, item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetaildate set ptsuse = ptsuse - ? where times = ? and barid = ? and date = ? ", lweight, times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetaildate set ptuse = ptuse - ? where times = ? and barid = ? and date = ? ", lweight, times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } else { for _, item := range lpplandtl1List { // 自走式 if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ( select tname from tmr where id = ?) where id = ? and date = ? ", tmrid, tmrid, item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1date set tmrid = 201 , tmrname = '任意车1' where id = ? and date = ? ", item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } } else if status == 1 { lpplandtl1List, err := tx.SQL(" select id,lweight,fttype,barid from lpplandtl1date where lppid = ? and pastureid = ? and date = ? order by sort desc ", lppid, pastureid, date).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } var lweight float64 for _, item := range lpplandtl1List { fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) lweight += fl } if lweight > maxstirfeed { lweight = lweight - maxstirfeed } else { lweight = 0 } for _, item := range lpplandtl1List { if lweight > 0 { // `ttype` tinyint(4) DEFAULT NULL COMMENT '设备类型0铲车,1tmr,3撒料设备 fl, _ := strconv.ParseFloat(item["lweight"].(string), 64) if fl >= lweight { item["lweight"] = fl - lweight lweight = 0 if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ( select tname from tmr where id = ?) ,lweight = ? where id = ? and date = ? ", tmrid, tmrid, item["lweight"], item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1date set tmrid = 201 , tmrname = '任意车1' ,lweight = ? where id = ? and date = ? ", item["lweight"], item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetaildate set ptsuse = ptsuse - ? where times = ? and barid = ? and date = ? ", lweight, times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetaildate set ptuse = ptuse - ? where times = ? and barid = ? and date = ? ", lweight, times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } else { lweight = lweight - fl _, err = tx.SQL(" delete from lpplandtl1date where id = ? and date = ? ", item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetaildate set ptsuse = ptsuse - ? where times = ? and barid = ? and date = ? ", item["lweight"], times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetaildate set ptuse = ptuse - ? where times = ? and barid = ? and date = ? ", item["lweight"], times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } else { // 自走式 if tmrtype == "1" { _, err = tx.SQL(" update lpplandtl1date set tmrid = ? , tmrname = ( select tname from tmr where id = ?) where id = ? and date = ? ", tmrid, tmrid, item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else if tmrtype == "2" { _, err = tx.SQL(" update lpplandtl1date set tmrid = 201 , tmrname = '任意车1' where id = ? and date = ? ", item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } } } else { lpplandtl1List, err := tx.SQL(" select id,lweight,fttype,barid from lpplandtl1date where lppid = ? and pastureid = ? and date = ? ", lppid, pastureid, date).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } for _, item := range lpplandtl1List { if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetaildate set ptsuse = ptsuse - ? where times = ? and barid = ? and date = ? ", item["lweight"], times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetaildate set ptuse = ptuse - ? where times = ? and barid = ? and date = ? ", item["lweight"], times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } _, err = tx.SQL(" delete from lpplandtl1date where id = ? and date = ? ", item["id"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } _, err = tx.SQL(" update lpplandate set tmrid = ? , tmrname = ( select tname from tmr where id = ?) , maxweight = ? where id = ? and date = ?", tmrid, tmrid, maxstirfeed, lppid, date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { if status == 2 { lpplandtl1List, err := tx.SQL(`select * from lpplandtl1date where lppid = ? and date = ? `, lppid, date).Query().List() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } for _, item := range lpplandtl1List { if item["fttype"].(int64) == 0 { _, err = tx.SQL(" update fpdetaildate set ptsuse = ptsuse - ? where times = ? and barid = ? and date = ? ", item["lweight"], times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err = tx.SQL(" update fpdetaildate set ptuse = ptuse - ? where times = ? and barid = ? and date = ? ", item["lweight"], times, item["barid"], date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } _, err = tx.SQL(" delete from lpplandtl1date where `lppid` = ? and date = ? ", lppid, date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } else { _, err := tx.SQL(" update lpplandate set tmrid = ? , tmrname = ?, maxweight = ? where id = ? ", tmrid, "搅拌任意车", 100000, lppid, date).Execute() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } } } err := tx.Commit() if err != nil { logs.Error(err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } appG.Response(http.StatusOK, e.SUCCESS, true) } func Decimal(value float64) float64 { value, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", value), 64) return value } func UpdateDailyData(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) pid := parammaps.Get("pid").ValueDefaultStr("0") weight := parammaps.Get("weight").ValueDefaultFloat64(0) sort := parammaps.Get("sort").ValueDefaultStr("0") location := parammaps.Get("location").ValueInt64() // 0 饲料 1 撒料车辆 date := parammaps.Get("date").ValueStr() tx := restful.Engine.NewSession() defer tx.Close() tx.Begin() if location == 0 { fid := parammaps.Get("fid").ValueStr() downloadplandtl1, err := tx.SQL(`select lweight from downloadplandtl1 where pid = ? and sort = ? and fid = ? `, pid, sort, fid).Query().List() if err != nil { logs.Error("UpdateDailyData-error-1:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } downloadedplan, err := tx.SQL(`select lweight,lpplantype from downloadedplan where id = ? `, pid).Query().List() if err != nil { logs.Error("UpdateDailyData-error-1:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } num, err := strconv.ParseFloat(downloadplandtl1[0]["lweight"].(string), 64) if err != nil { fmt.Println("Error:", err) return } actualWeight := weight - num _, err = tx.SQL(`update downloadplandtl1 set lweight = ? where pid = ? and sort = ? and fid = ? `, weight, pid, sort, fid).Execute() if err != nil { logs.Error("UpdateDailyData-error-2:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(`update downloadplandtl1_exec set lweight = lweight + ? where pid = ? and sort = ? `, actualWeight, pid, sort).Execute() if err != nil { logs.Error("UpdateDailyData-error-3:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(`update downloadplandtl2 set lweight =lweight+ lweight / ?*? where pid = ? `, downloadedplan[0]["lweight"], actualWeight, pid).Execute() if err != nil { logs.Error("UpdateDailyData-error-4:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadedplan set lweight = lweight + ? where id = ?`, actualWeight, pid).Execute() if err != nil { logs.Error("UpdateDailyData-error-5:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } if downloadedplan[0]["lpplantype"].(int64) == 0 || downloadedplan[0]["lpplantype"].(int64) == 1 { downloadedplanList, _ := tx.SQL(`select id,lweight from downloadedplan where pid = (select pid from downloadedplan where id = ? ) and id != ? and lpplantype != 5 and mydate = ? `, pid, pid, date).Query().List() lweight, err := strconv.ParseFloat(downloadedplan[0]["lweight"].(string), 64) if err != nil { fmt.Println("Error:", err) return } // actual := actualWeight / float64(len(downloadedplanList)) for _, item := range downloadedplanList { itemLweight, err := strconv.ParseFloat(item["lweight"].(string), 64) if err != nil { fmt.Println("Error:", err) return } actual := itemLweight / lweight * actualWeight _, err = tx.SQL(` update downloadedplan set lweight = lweight + ? where id = ?`, actual, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-6:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1 d1 set lweight =lweight+ lweight /? *? where pid = ?`, lweight, actual, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-7:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1_exec d1e set lweight = (select sum(lweight) from downloadplandtl1 where pid = d1e.pid and sort = d1e.sort ) where pid = ?`, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-8:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl2 set lweight =lweight+ lweight /? *? where pid = ?`, lweight, actual, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-9:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } } } else { downloadedplanList, _ := tx.SQL(`select id,lweight from downloadedplan where pid = (select pid from downloadedplan where id = ? ) and id != ? and lpplantype in(0,1) and mydate = ? `, pid, pid, date).Query().List() // lweight, err := strconv.ParseFloat(downloadedplan[0]["lweight"].(string), 64) // if err != nil { // fmt.Println("Error:", err) // return // } for _, item := range downloadedplanList { _, err = tx.SQL(` update downloadedplan set lweight = lweight + ? where id = ?`, actualWeight, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-6:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1 set lweight =lweight+ lweight /? *? where pid = ?`, item["lweight"], actualWeight, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-7:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1_exec d1e set lweight = (select sum(lweight) from downloadplandtl1 where pid = d1e.pid and sort = d1e.sort ) where pid = ?`, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-8:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl2 set lweight = lweight+ lweight /? *? where pid = ?`, item["lweight"], actualWeight, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-9:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } } } } else { fbarid := parammaps.Get("fbarid").ValueStr() downloadplandtl2, err := tx.SQL(`select lweight from downloadplandtl2 where pid = ? and sort = ? and fbarid = ? `, pid, sort, fbarid).Query().List() if err != nil { logs.Error("UpdateDailyData-error-10:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改栏舍计划失败:%s", err.Error())) return } downloadedplan, err := tx.SQL(`select lweight,lpplantype from downloadedplan where id = ? `, pid).Query().List() if err != nil { logs.Error("UpdateDailyData-error-1:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } num, err := strconv.ParseFloat(downloadplandtl2[0]["lweight"].(string), 64) if err != nil { fmt.Println("Error:", err) return } actualWeight := weight - num _, err = tx.SQL(`update downloadplandtl2 set lweight = ? where pid = ? and sort = ? and fbarid = ? `, weight, pid, sort, fbarid).Execute() if err != nil { logs.Error("UpdateDailyData-error-11:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改栏舍计划失败:%s", err.Error())) return } _, err = tx.SQL(`update downloadplandtl1 set lweight = lweight + lweight /? * ? where pid = ? `, downloadedplan[0]["lweight"], actualWeight, pid).Execute() if err != nil { logs.Error("UpdateDailyData-error-12:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改栏舍计划失败:%s", err.Error())) return } _, err = tx.SQL(`update downloadplandtl1_exec d1e set lweight = (select sum(lweight) from downloadplandtl1 where pid = d1e.pid and sort = d1e.sort ) where pid = ? `, pid).Execute() if err != nil { logs.Error("UpdateDailyData-error-13:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改栏舍计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadedplan set lweight = lweight + ? where id = ?`, actualWeight, pid).Execute() if err != nil { logs.Error("UpdateDailyData-error-14:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改栏舍计划失败:%s", err.Error())) return } if downloadedplan[0]["lpplantype"].(int64) == 0 || downloadedplan[0]["lpplantype"].(int64) == 1 { downloadedplanList, _ := tx.SQL(`select id,lweight from downloadedplan where pid = (select pid from downloadedplan where id = ? ) and id != ? and lpplantype != 5 and mydate = ? `, pid, pid, date).Query().List() lweight, err := strconv.ParseFloat(downloadedplan[0]["lweight"].(string), 64) if err != nil { fmt.Println("Error:", err) return } for _, item := range downloadedplanList { itemLweight, err := strconv.ParseFloat(item["lweight"].(string), 64) if err != nil { fmt.Println("Error:", err) return } actual := itemLweight / lweight * actualWeight _, err = tx.SQL(` update downloadedplan set lweight = lweight + ? where id = ?`, actual, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-6:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1 d1 set lweight =lweight+ lweight /? *? where pid = ?`, itemLweight, actual, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-7:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1_exec d1e set lweight = (select sum(lweight) from downloadplandtl1 where pid = d1e.pid and sort = d1e.sort ) where pid = ?`, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-8:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl2 set lweight = lweight+ lweight /? *? where pid = ?`, itemLweight, actual, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-9:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } } } else { downloadedplanList, _ := tx.SQL(`select id,lweight from downloadedplan where pid = (select pid from downloadedplan where id = ? ) and id != ? and lpplantype in(0,1) and mydate = ? `, pid, pid, date).Query().List() for _, item := range downloadedplanList { // lweight, err := strconv.ParseFloat(item["lweight"].(string), 64) // if err != nil { // fmt.Println("Error:", err) // return // } _, err = tx.SQL(` update downloadedplan set lweight = lweight + ? where id = ?`, actualWeight, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-6:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1 set lweight =lweight+ lweight /? *? where pid = ?`, item["lweight"], actualWeight, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-7:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl1_exec d1e set lweight = (select sum(lweight) from downloadplandtl1 where pid = d1e.pid and sort = d1e.sort ) where pid = ?`, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-8:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } _, err = tx.SQL(` update downloadplandtl2 set lweight =lweight+ lweight /? *? where pid = ?`, item["lweight"], actualWeight, item["id"]).Execute() if err != nil { logs.Error("UpdateDailyData-error-9:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("修改饲料计划失败:%s", err.Error())) return } } } } err := tx.Commit() if err != nil { logs.Error("UpdateDailyData-error-20:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, err) return } appG.Response(http.StatusOK, e.SUCCESS, true) } func GetFormulaStatistics(c *gin.Context) { appG := app.Gin{C: c} dataByte, _ := ioutil.ReadAll(c.Request.Body) parammaps := gofasion.NewFasion(string(dataByte)) startTime := parammaps.Get("startTime").ValueStr() endTime := parammaps.Get("endTime").ValueStr() pastureId := parammaps.Get("pastureId").ValueStr() tx := restful.Engine.NewSession() feedtempletList, err := tx.SQL(`select id,tname from feedtemplet where pastureId = ? and enable = 1`, pastureId).Query().List() if err != nil { logs.Error("GetFormulaStatistics-error-1:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("查看配方统计图标报错:%s", err.Error())) return } var feedtemplet, dateList []string for _, f := range feedtempletList { feedtemplet = append(feedtemplet, f["tname"].(string)) } layout := "2006-01-02" // s := "2023-05-01" // e := "2023-05-23" start, err := time.Parse(layout, startTime) if err != nil { fmt.Println(err) return } end, err := time.Parse(layout, endTime) if err != nil { fmt.Println(err) return } end = end.AddDate(0, 0, 1) for d := start; d.Before(end); d = d.AddDate(0, 0, 1) { dateList = append(dateList, d.Format("2006-01-02")) } downloadedplanList, err := tx.SQL(`select count(1) total,ft.tname,date_format(d.mydate ,'%Y-%m-%d') mydate from downloadedplan d join feedtemplet ft on ft.id = d.tempid where d.mydate between ? and ? and d.lpplantype in(0,1) and d.iscompleted = 1 and d.pastureId= ? group by d.tempid,d.mydate `, startTime, endTime, pastureId).Query().List() if err != nil { logs.Error("GetFormulaStatistics-error-2:", err) tx.Rollback() appG.Response(http.StatusInternalServerError, e.ERROR, fmt.Sprintf("查看配方统计图标报错:%s", err.Error())) return } var data2 [][]interface{} for _, f := range feedtemplet { var data1 []interface{} for _, date := range dateList { exist := false for _, item := range downloadedplanList { if date == item["mydate"].(string) && f == item["tname"].(string) { data1 = append(data1, item["total"]) exist = true break } } if !exist { data1 = append(data1, 0) } } data2 = append(data2, data1) } //前端让加的 feedtemplet = append(feedtemplet, "") { var data1 []interface{} for _, f := range dateList { // f = f + "\n" fmt.Println(f) data1 = append(data1, 0) } data2 = append(data2, data1) } resp := make(map[string]interface{}, 0) resp["xdata"] = dateList resp["data1"] = feedtemplet resp["data2"] = data2 appG.Response(http.StatusOK, e.SUCCESS, resp) }