forked from golang/hotime
533 lines
15 KiB
Go
533 lines
15 KiB
Go
package app
|
||
|
||
import (
|
||
. "code.hoteas.com/golang/hotime"
|
||
. "code.hoteas.com/golang/hotime/common"
|
||
"fmt"
|
||
"github.com/xuri/excelize/v2"
|
||
"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)
|
||
//fmt.Println(e)
|
||
// 设置单元格的值
|
||
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)
|
||
|
||
},
|
||
}
|