iedc-go/example/app/analyse.go
2022-07-12 11:45:41 +08:00

531 lines
15 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

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

package app
import (
. "../../../hotime"
. "../../common"
"fmt"
"github.com/xuri/excelize"
"os"
"sort"
"time"
)
func convertToTitle(columnNumber int) string {
var res []byte
for columnNumber > 0 {
a := columnNumber % 26
if a == 0 {
a = 26
}
res = append(res, 'A'+byte(a-1))
columnNumber = (columnNumber - a) / 26
}
// 上面输出的res是反着的前后交换
for i, n := 0, len(res); i < n/2; i++ {
res[i], res[n-1-i] = res[n-1-i], res[i]
}
return string(res)
}
var analyseCtr = Ctr{
"home_data": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
if orgId == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("org_analyse", "*", Map{"org_id": orgId})
if res == nil {
this.Display(4, "找不到该数据")
return
}
res["home_data"] = res.GetMap("home_data")
res["six_item_data"] = res.GetMap("six_item_data")
res["three_item_data"] = res.GetMap("three_item_data")
res["n_item_data"] = res.GetMap("n_item_data")
this.Display(0, res)
},
"home_excel": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
if orgId == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("org_analyse", "*", Map{"org_id": orgId})
if res == nil {
this.Display(4, "找不到该数据")
return
}
homeData := res.GetMap("home_data")
sixItemData := res.GetMap("six_item_data")
threeItemData := res.GetMap("three_item_data")
nItemData := res.GetMap("n_item_data")
filePath := "temp/home" + ObjToStr(orgId) + ".xlsx"
f, e := excelize.OpenFile(this.Config.GetString("tpt") + "/" + filePath)
// 设置单元格的值
tagCompany1 := this.Db.Select("tag", "*", Map{"AND": Map{"type": 2, "org_id": orgId}, "ORDER": Slice{"`sort` DESC", "id ASC"}})
if e != nil {
f = excelize.NewFile()
// 创建一个工作表
f.NewSheet("企业分析")
f.NewSheet("IEDC全局分析")
// 创建一个工作表
f.NewSheet("“6”项量化")
f.NewSheet("“3”项定性")
f.NewSheet("“N”项特色")
f.DeleteSheet("Sheet1")
//cs := append(NewCompanys{}, companys...)
f.SetCellValue("企业分析", convertToTitle(1)+"1", "企业名")
for k, tag := range tagCompany1 {
f.SetCellValue("企业分析", convertToTitle(k+2)+"1", tag.GetString("name"))
}
// 设置单元格的值
f.SetCellValue("IEDC全局分析", "A1", "指标项")
f.SetCellValue("IEDC全局分析", "B1", "指标值")
// 设置单元格的值
f.SetCellValue("“6”项量化", "A1", "指标项")
f.SetCellValue("“6”项量化", "B1", "指标值")
// 设置单元格的值
f.SetCellValue("“3”项定性", "A1", "指标项")
f.SetCellValue("“3”项定性", "B1", "指标值")
// 设置单元格的值
f.SetCellValue("“N”项特色", "A1", "指标项")
f.SetCellValue("“N”项特色", "B1", "指标值")
os.MkdirAll(this.Config.GetString("tpt")+"/temp/", os.ModeDir)
// 根据指定路径保存文件
if err := f.SaveAs(this.Config.GetString("tpt") + "/" + filePath); err != nil {
fmt.Println(err)
this.Display(4, "输出异常")
return
}
}
run := func(str string, data Map, f *excelize.File) {
var keys []string
for k := range data {
keys = append(keys, k)
}
//按字典升序排列
sort.Strings(keys)
for k, v := range keys {
// 设置单元格的值
f.SetCellValue(str, "A"+ObjToStr(k+2), v)
f.SetCellValue(str, "B"+ObjToStr(k+2), data[v])
}
}
run("IEDC全局分析", homeData, f)
run("“6”项量化", sixItemData, f)
run("“3”项定性", threeItemData, f)
run("“N”项特色", nItemData, f)
//f.SetCellValue("Sheet1", "B2", 100)
companys := this.Db.Select("company", "*", Map{"AND": Map{"org_id": orgId}, "ORDER": "`analyse`->'$.\"总排名\"' ASC"})
for k, v := range companys {
//上传数据
upload_data := v.GetMap("upload_data")
collect_data := v.GetMap("collect_data")
analysess := v.GetMap("analyse")
//total:=Map{}
//for kk {
//
//}
f.SetCellValue("企业分析", convertToTitle(1)+ObjToStr(k+2), v.GetString("name"))
for k1, tag := range tagCompany1 {
if analysess[tag.GetString("sn")] != nil {
f.SetCellValue("企业分析", convertToTitle(k1+2)+ObjToStr(k+2), analysess[tag.GetString("sn")])
}
if upload_data[tag.GetString("sn")] != nil {
f.SetCellValue("企业分析", convertToTitle(k1+2)+ObjToStr(k+2), upload_data[tag.GetString("sn")])
}
if collect_data[tag.GetString("sn")] != nil {
f.SetCellValue("企业分析", convertToTitle(k1+2)+ObjToStr(k+2), collect_data[tag.GetString("sn")])
}
}
}
f.Save()
this.Resp.Header().Set("Location", "/"+filePath)
this.Resp.WriteHeader(307) //关键在这里!
this.Display(0, filePath)
},
"home1_data": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
if orgId == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("org_analyse", "*", Map{"org_id": orgId})
if res == nil {
this.Display(4, "找不到该数据")
return
}
res["home1_data"] = res.GetMap("home1_data")
res["six_item_data"] = res.GetMap("six_item_data")
res["three_item_data"] = res.GetMap("three_item_data")
res["n_item_data"] = res.GetMap("n_item_data")
this.Display(0, res)
},
"ctg": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
ctgID := ObjToInt(this.Req.FormValue("ctg_id"))
if orgId == 0 || ctgID == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("category_analyse", "*", Map{"AND": Map{"org_id": orgId, "category_id": ctgID}})
if res == nil {
this.Display(4, "找不到该数据")
return
}
res["data"] = res.GetMap("data")
res1 := this.Db.Get("org_analyse", "home_data", Map{"org_id": orgId})
res["home"] = res1.GetMap("home_data")
this.Display(0, res)
},
"industrys": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
if orgId == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Select("industry_analyse", "industry_id,name", Map{"org_id": orgId})
if res == nil {
this.Display(4, "找不到该数据")
return
}
this.Display(0, res)
},
"industry": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
industryId := ObjToInt(this.Req.FormValue("industry_id"))
if orgId == 0 || industryId == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("industry_analyse", "*", Map{"AND": Map{"org_id": orgId, "industry_id": industryId}})
if res == nil {
this.Display(4, "找不到该数据")
return
}
res["data"] = res.GetMap("data")
res1 := this.Db.Get("org_analyse", "name,home_data", Map{"org_id": orgId})
res["home"] = res1.GetMap("home_data")
res["home_name"] = res1.GetString("name")
this.Display(0, res)
},
"industry_excel": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
industryId := ObjToInt(this.Req.FormValue("industry_id"))
if orgId == 0 || industryId == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("industry_analyse", "*", Map{"AND": Map{"org_id": orgId, "industry_id": industryId}})
if res == nil {
this.Display(4, "找不到该数据")
return
}
res["data"] = res.GetMap("data")
//res1 := this.Db.Get("org_analyse", "name,home_data", Map{"org_id": orgId})
//res["home"] = res1.GetMap("home_data")
//res["home_name"] = res1.GetString("name")
filePath := "temp/industry" + ObjToStr(industryId) + "x" + ObjToStr(orgId) + ".xlsx"
f, e := excelize.OpenFile(this.Config.GetString("tpt") + "/" + filePath)
if e != nil {
f = excelize.NewFile()
// 创建一个工作表
f.NewSheet(res.GetString("name"))
f.DeleteSheet("Sheet1")
// 设置单元格的值
f.SetCellValue(res.GetString("name"), "A1", "指标项")
f.SetCellValue(res.GetString("name"), "B1", "指标值")
os.MkdirAll(this.Config.GetString("tpt")+"/temp/", os.ModeDir)
// 根据指定路径保存文件
if err := f.SaveAs(this.Config.GetString("tpt") + "/" + filePath); err != nil {
fmt.Println(err)
this.Display(4, "输出异常")
return
}
}
run := func(str string, data Map, f *excelize.File) {
var keys []string
for k := range data {
keys = append(keys, k)
}
//按字典升序排列
sort.Strings(keys)
for k, v := range keys {
// 设置单元格的值
f.SetCellValue(str, "A"+ObjToStr(k+2), v)
f.SetCellValue(str, "B"+ObjToStr(k+2), data[v])
}
}
run(res.GetString("name"), res.GetMap("data"), f)
//f.SetCellValue("Sheet1", "B2", 100)
f.Save()
this.Resp.Header().Set("Location", "/"+filePath)
this.Resp.WriteHeader(307) //关键在这里!
this.Display(0, filePath)
},
"map": func(this *Context) {
orgId := ObjToInt(this.Req.FormValue("org_id"))
industryId := ObjToInt(this.Req.FormValue("industry_id"))
//if orgId == 0 || industryId == 0 {
// this.Display(3, "参数错误")
// return
//}
page := ObjToInt(this.Req.FormValue("page"))
pageSize := ObjToInt(this.Req.FormValue("pageSize"))
search := this.Req.FormValue("search")
where := Map{}
levelStr := this.Req.FormValue("level")
if levelStr != "" {
where["level"] = ObjToInt(levelStr)
}
if orgId != 0 {
where["org_id"] = orgId
}
if industryId != 0 {
where["industry_id"] = industryId
}
if search != "" {
where["name[~]"] = search
}
if len(where) > 1 {
where = Map{"AND": where}
}
if page == 0 {
page = 1
}
if pageSize == 0 {
pageSize = 10
}
count := this.Db.Count("company", where)
companys := this.Db.Page(page, pageSize).PageSelect("company", Map{"[><]industry": "company.industry_id=industry.id"},
"company.id,company.collect_data,company.name,company.level,company.address,company.score,company.lat,company.lng,company.category_id,industry.name AS industry_name,company.industry_id",
where)
for _, res := range companys {
res["collect_data"] = res.GetMap("collect_data")
//if res.GetMap("collect_data") == nil {
// path := "company/" + Md5(res.GetString("name")) + time.Now().Format("/200601021504.json")
//
// data := getCompany(res.GetString("name"), this.Config.GetString("tpt")+"/"+path)
//
// if len(data) != 0 {
// data["path"] = path
// re := this.Db.Update("company", Map{"collect_data": data.ToJsonString(),
// "address": data.GetString("companyAddress"),
// "sn": data.GetString("creditNo"),
// "unit": data.GetString("authority"),
// }, Map{"id": res.GetCeilInt("id")})
// fmt.Println(re)
// res["collect_data"] = data
// res["address"] = data.GetString("companyAddress")
// res["sn"] = data.GetString("creditNo")
// res["unit"] = data.GetString("authority")
// }
//}
}
this.Display(0, Map{"count": count, "pageSize": pageSize, "data": companys})
},
"updateCompany": func(this *Context) {
lng := ObjToFloat64(this.Req.FormValue("lng"))
lat := ObjToFloat64(this.Req.FormValue("lat"))
id := ObjToInt(this.Req.FormValue("id"))
if lng == 0 || lat == 0 || id == 0 {
this.Display(3, "请求异常")
return
}
re := this.Db.Update("company", Map{"lng": lng, "lat": lat}, Map{"id": id})
if re == 0 {
this.Display(4, "更新失败")
return
}
this.Display(0, "更新成功")
},
"companys": func(this *Context) {
page := ObjToInt(this.Req.FormValue("page"))
pageSize := ObjToInt(this.Req.FormValue("pageSize"))
orgId := ObjToInt(this.Req.FormValue("org_id"))
search := this.Req.FormValue("search")
sort := this.Req.FormValue("sort")
where := Map{"state": 0}
levelStr := this.Req.FormValue("level")
if levelStr != "" {
where["level"] = ObjToInt(levelStr)
}
industryId := ObjToInt(this.Req.FormValue("industry_id"))
if industryId != 0 {
where["industry_id"] = industryId
}
if orgId != 0 {
where["org_id"] = orgId
}
if search != "" {
where["name[~]"] = search
}
if len(where) > 1 {
where = Map{"AND": where}
}
if sort != "" {
where["ORDER"] = sort
} else {
where["ORDER"] = "score DESC"
}
if page == 0 {
page = 1
}
if pageSize == 0 {
pageSize = 10
}
count := this.Db.Count("company", where)
companys := this.Db.Page(page, pageSize).PageSelect("company",
"*",
where)
for _, res := range companys {
analyse := res.GetMap("analyse")
if analyse != nil {
for k, v := range analyse {
if ADataType[k] != nil {
analyse[ADataType.GetString(k)] = v
}
}
res["analyse"] = analyse
}
res["upload_data"] = res.GetMap("upload_data")
res["collect_data"] = res.GetMap("collect_data")
res["collect_data"] = res.GetMap("collect_data")
//if res.GetMap("collect_data") == nil && page == 1 {
// go func(res Map, this *Context) {
// path := "company/" + Md5(res.GetString("name")) + time.Now().Format("/200601021504.json")
//
// data := getCompany(res.GetString("name"), this.Config.GetString("tpt")+"/"+path)
//
// if len(data) != 0 {
// data["path"] = path
// this.Db.Update("company", Map{"collect_data": data.ToJsonString(),
// "address": data.GetString("companyAddress"),
// "sn": data.GetString("creditNo"),
// "unit": data.GetString("authority"),
// }, Map{"id": res.GetCeilInt("id")})
// res["collect_data"] = data
// }
// }(res, this)
//}
}
this.Display(0, Map{"count": count, "pageSize": pageSize, "data": companys})
},
"company": func(this *Context) {
id := ObjToInt(this.Req.FormValue("id"))
if id == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("company", "*", Map{"id": id})
if res == nil {
this.Display(4, "找不到该数据")
return
}
analyse := res.GetMap("analyse")
if analyse != nil {
for k, v := range analyse {
if ADataType[k] != nil {
analyse[ADataType.GetString(k)] = v
}
}
res["analyse"] = analyse
}
analyse1 := res.GetMap("analyse1")
if analyse1 != nil {
for k, v := range analyse1 {
if ADataType[k] != nil {
analyse1[ADataType.GetString(k)] = v
}
}
res["analyse1"] = analyse1
}
res["upload_data"] = res.GetMap("upload_data")
res["collect_data"] = res.GetMap("collect_data")
if res.GetMap("collect_data") == nil {
go func(res Map) {
path := "company/" + Md5(res.GetString("name")) + time.Now().Format("/200601021504.json")
data := getCompany(res.GetString("name"), this.Config.GetString("tpt")+"/"+path)
if len(data) != 0 {
data["path"] = path
this.Db.Update("company", Map{"collect_data": data.ToJsonString()}, Map{"id": res.GetCeilInt("id")})
res["collect_data"] = data
}
}(res)
}
this.Display(0, res)
},
"company_upload": func(this *Context) {
id := ObjToInt(this.Req.FormValue("id"))
if id == 0 {
this.Display(3, "参数错误")
return
}
res := this.Db.Get("company", "upload_data,org_id", Map{"id": id})
if res == nil {
this.Display(4, "找不到该数据")
return
}
uploadData := res.GetMap("upload_data")
tags := this.Db.Select("tag", "name,sn,`unit`,description", Map{"AND": Map{"type": 0, "org_id": res.GetCeilInt("org_id")}})
for _, v := range tags {
v["value"] = uploadData[v.GetString("sn")]
}
this.Display(0, tags)
},
}