iedc-go/example/admin/companyinout.go
2022-01-19 05:38:49 +08:00

582 lines
14 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 admin
import (
. "../../../hotime"
. "../../common"
"../../dri/baidu"
"errors"
"fmt"
"github.com/chain-zhang/pinyin"
"github.com/xuri/excelize"
"io"
"os"
"strings"
"time"
)
var CompanyInOutCtr = Ctr{
"upload": func(this *Context) {
//读取网络文件
fi, fheader, err := this.Req.FormFile("file")
if err != nil {
this.Display(3, err)
return
}
filePath := this.Config.GetString("filePath")
if filePath == "" {
filePath = "excel/2006/01/02/"
}
path := time.Now().Format(filePath)
e := os.MkdirAll(this.Config.GetString("tpt")+"/"+path, os.ModeDir)
if e != nil {
this.Display(3, e)
return
}
filePath = path + Md5(ObjToStr(RandX(100000, 9999999))) + fheader.Filename[strings.LastIndex(fheader.Filename, "."):]
newFile, e := os.Create(this.Config.GetString("tpt") + "/" + filePath)
if e != nil {
this.Display(3, e)
return
}
_, e = io.Copy(newFile, fi)
if e != nil {
this.Display(3, e)
return
}
//this.Display(0, filePath)
//读取excel
data := excel(this.Config.GetString("tpt") + "/" + filePath)
if len(data) != 1 {
this.Display(3, "表格不标准,请重新提交")
return
}
err = decodeData2Sql(data[0], this)
if err != nil {
this.Display(4, err)
return
}
this.Display(0, "上传成功")
},
}
func decodeData2Sql(table [][]string, this *Context) error {
tags := []Map{} //报错所有的tag记录
tagCtgs := []Map{}
for k, v := range table {
//第一排是指标分类,去除掉第一个参数,其存在合并所以,如果是合并的则删除
if k == 0 {
for ck, cv := range v {
cv = strings.Replace(cv, " ", "", -1)
cv = strings.Replace(cv, "\r\t", "", -1)
cv = strings.Replace(cv, "\r", "", -1)
v[ck] = cv
if ck == 0 {
continue
}
if cv == "" {
v[ck] = v[ck-1]
cv = v[ck]
}
tagCtg := this.Db.Get("tag_ctg", "*", Map{"name": cv})
if tagCtg != nil {
tagCtgs = append(tagCtgs, tagCtg)
continue
}
tagCtg = Map{
"name": cv,
"admin_id": this.Session("admin_id").ToInt(),
"create_time": time.Now().Unix(),
"modify_time": time.Now().Unix(),
}
id := this.Db.Insert("tag_ctg", tagCtg)
if id != 0 {
tagCtg["id"] = id
this.Db.Update("tag_ctg", Map{
"index": "," + ObjToStr(id) + ",",
}, Map{"id": id})
tagCtgs = append(tagCtgs, tagCtg)
}
}
}
//第二排是指标项,去除掉第一个参数,
//最重要的是参数tag生成通过中文转拼音获取首字母实现遇到同名的则最后加一位数字
if k == 1 {
for ck, cv := range v {
cv = strings.Replace(cv, " ", "", -1)
cv = strings.Replace(cv, "\r\t", "", -1)
cv = strings.Replace(cv, "\r", "", -1)
v[ck] = cv
if ck == 0 {
continue
}
//补充分类
if ck >= len(table[0]) {
tagCtgs = append(tagCtgs, tagCtgs[len(tagCtgs)-1])
}
//补充说明
if ck >= len(table[3]) {
table[3] = append(table[3], table[3][len(table[3])-1])
}
//补充单位
if ck >= len(table[2]) {
table[2] = append(table[2], "")
}
tag := this.Db.Get("tag", "*", Map{"name": cv})
if tag != nil {
tags = append(tags, tag)
continue
}
sn, err := pinyin.New(cv).Split(" ").Mode(pinyin.InitialsInCapitals).Convert()
if err != nil {
fmt.Println(err)
sn = cv
} else {
sns := strings.Split(sn, " ")
sn = "IEDC"
for _, v1 := range sns {
if v1 != "" {
sn = sn + string([]rune(v1)[:1])
fmt.Println(sn, v1)
}
}
}
//sn=strings.Replace(sn,"\ufffd","",-1)
tagsn := this.Db.Get("tag", "id", Map{"sn": sn})
if tagsn != nil {
for i := 0; i < 100; i++ {
tagsn = this.Db.Get("tag", "id", Map{"sn": sn + ObjToStr(i)})
if tagsn == nil {
sn = sn + ObjToStr(i)
break
}
}
}
tag = Map{
"name": cv,
"description": table[3][ck], //第三行对应位置为描述
"unit": table[2][ck],
"admin_id": this.Session("admin_id").ToInt(),
"type": 1,
"sn": sn,
"tag_ctg_id": tagCtgs[ck-1].GetCeilInt("id"),
"create_time": time.Now().Unix(),
"modify_time": time.Now().Unix(),
}
id := this.Db.Insert("tag", tag)
tag["id"] = id
tags = append(tags, tag)
}
}
//第四排以后是数据项,去除掉第一个参数,
//根据统一社会信用代码识别是否存在,同时将校验部分数字
if k > 4 {
//整行数据
rowData := Map{}
for ck, cv := range v {
if ck == 0 {
continue
}
cv = strings.Replace(cv, " ", "", -1)
cv = strings.Replace(cv, "\r\t", "", -1)
cv = strings.Replace(cv, "\r", "", -1)
v[ck] = cv
if cv == "" {
return errors.New("第" + ObjToStr(k+1) + "行," + ObjToStr(ck+1) + "列,数据为空请注意检查")
}
rowData[tags[ck-1].GetString("sn")] = cv
}
companyData := Map{
"name": rowData["IEDCQYMC"],
"sn": rowData["IEDCTYSHXYDM"],
"address": rowData["IEDCQYDZ"],
"unit": rowData["IEDCSDMC"],
"zdmj": rowData["IEDCYDMJ"],
"yysr": rowData["IEDC2NYYSR"],
"lrze": rowData["IEDC2NLRZE"],
"yjsj": rowData["IEDCYNSJ"],
"yfjf": rowData["IEDCNYFFY"],
"zgrs": rowData["IEDCSBRS"],
"zywrwpfdl": rowData["IEDCZYWRWPFDL"],
"zhnh": rowData["IEDCZHNH"],
"admin_id": this.Session("admin_id").ToInt(),
"upload_data": rowData.ToJsonString(),
//"create_time": time.Now().Unix(),
"modify_time": time.Now().Unix(),
//"lat": lat,
//"lng": lng,
}
baiduDataStr, _ := baidu.DefaultBaiDuMap.GetPosition(companyData.GetString("address"))
baiduData := ObjToMap(baiduDataStr)
city := Map{}
if baiduData != nil && baiduData.GetCeilInt("status") == 0 {
address := baiduData.GetSlice("result")
if len(address) != 0 {
companyData["lat"] = address.GetMap(0).GetMap("location").GetFloat64("lat")
companyData["lng"] = address.GetMap(0).GetMap("location").GetFloat64("lng")
city = this.Db.Get("city", "id", Map{"name[~]": address.GetMap(0).GetString("district"), "ORDER": "`level` DESC"})
if city == nil {
city = this.Db.Get("city", "id", Map{"name[~]": address.GetMap(0).GetString("city"), "ORDER": "`level` DESC"})
}
}
}
if city != nil {
companyData["city_id"] = city.GetCeilInt("id")
}
//行业ID
category := this.Db.Get("category", "id", Map{"code": rowData["IEDCSSXYXLDM"]})
if category != nil {
companyData["category_id"] = category.GetCeilInt("id")
}
//此处需要优化
companyData["org_id"] = 3
company := this.Db.Get("company", "id", Map{"sn": companyData["sn"]})
//没有则创建
if company == nil {
//更新两张表
companyData["create_time"] = time.Now().Unix()
id := this.Db.Insert("company", companyData)
companyData["company_id"] = id
} else {
//有则更新
this.Db.Update("company", companyData, Map{"sn": companyData["sn"]})
companyData["company_id"] = company.GetCeilInt("id")
companyData["create_time"] = time.Now().Unix()
}
this.Db.Insert("company_history", companyData)
}
}
return nil
}
func excel(filePath string) [][][]string {
xlsx, err := excelize.OpenFile(filePath)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
list := xlsx.GetSheetList()
var data [][][]string
for _, v := range list {
rows, e := xlsx.GetRows(v)
if e != nil {
fmt.Println(e)
continue
}
data = append(data, rows)
}
return data
}
func companyAnalyse(data Map) Map {
res := Map{}
//亩均收入
res["MJSR"] = data.GetFloat64("IEDC2NYYSR") / data.GetFloat64("IEDCYDMJ")
res["MJSRDF"] = "" //亩均收入得分
//亩均税收
res["MJSS"] = data.GetFloat64("IEDCYNSJ") / data.GetFloat64("IEDCYDMJ")
res["MJSSDF"] = "" //亩均税收得分
//人均收入
res["RJSR"] = data.GetFloat64("IEDC2NYYSR") / data.GetFloat64("IEDCSBRS")
res["RJSRDF"] = "" //人均收入得分
//研发经费投入强度
res["YFJFTRQD"] = data.GetFloat64("IEDCNYFFY") / data.GetFloat64("IEDC2NYYSR")
res["YFJFTRQDDF"] = "" //研发经费投入强度得分
//单位能耗税收
res["DWNHSS"] = data.GetFloat64("IEDCYNSJ") / data.GetFloat64("IEDCZHNH")
res["DWNHSSDF"] = "" //单位能耗税收得分
//主要污染物税收
res[""] = data.GetFloat64("IEDCYNSJ") / data.GetFloat64("IEDCZHNH")
res["DF"] = "" //单位能耗税收得分
//主要污染物税收
//不足1按1计算
if data.GetFloat64("IEDCZYWRWPFDL") < 1 {
data["IEDCZYWRWPFDL"] = 1
}
res["ZYWRWSS"] = data.GetFloat64("IEDCYNSJ") / data.GetFloat64("IEDCZYWRWPFDL")
res["ZYWRWSSDF"] = "" //单位能耗税收得分
//独角兽、瞪羚企业得分,一个一分
res["DJSDLQYDF"] = 0
if data.GetString("IEDC“DJS”QY") != "" && data.GetString("IEDC“DJS”QY") != "无" {
res["DJSDLQYDF"] = res.GetCeilInt("DJSDLQYDF") + 1
}
if data.GetString("IEDC“DL”QY") != "" && data.GetString("IEDC“DL”QY") != "无" {
res["DJSDLQYDF"] = res.GetCeilInt("DJSDLQYDF") + 1
}
//企业获得国家级、省级、市级企业技术中心,国家级省级得1分市级得0.5
res["JSZXDF"] = 0
//国家级及省级
if (data.GetString("IEDCGJJQYJSZX") != "" && data.GetString("IEDCGJJQYJSZX") != "无") || //国家级
(data.GetString("IEDCSJQYJSZX") != "" && data.GetString("IEDCSJQYJSZX") != "无") || //省级
(data.GetString("IEDCGJJGCJSZX") != "" && data.GetString("IEDCGJJGCJSZX") != "无") || //国家级
(data.GetString("IEDCSJGCJSZX") != "" && data.GetString("IEDCSJGCJSZX") != "无") { //省级
res["JSZXDF"] = res.GetFloat64("JSZXDF") + 1
} else
//市级
if (data.GetString("IEDCSJQYJSZX0") != "" && data.GetString("IEDCSJQYJSZX0") != "无") ||
(data.GetString("IEDCSJGCJSZX0") != "" && data.GetString("IEDCSJQYJSZX") != "无") {
res["JSZXDF"] = res.GetFloat64("JSZXDF") + 0.5
}
//研发费用得分
res["YFFYDF"] = 0
if data.GetString("IEDCTRQD1WHZ3YS") != "" && data.GetString("IEDCTRQD1WHZ3YS") != "否" {
res["YFFYDF"] = 1
}
//高新技术企业得分
res["GXJSQYDF"] = 0
if data.GetString("IEDCGXJSQY") != "" && data.GetString("IEDCGXJSQY") != "否" {
res["GXJSQYDF"] = 1
}
//首台(套)、首批次、首版次企业
res["STTDF"] = 0
if data.GetString("IEDCSTTSPC、SBCQY") != "" && data.GetString("IEDCSTTSPC、SBCQY") != "无" {
res["STTDF"] = 1
}
//专利得分
res["ZLDF"] = 0
res["ZLDF"] = data.GetFloat64("IEDCPGJZL") +
data.GetFloat64("IEDCFMZL")*0.5 +
data.GetFloat64("IEDCSYXXZL")*0.1 +
data.GetFloat64("IEDCWGSJZL")*0.1
if res.GetFloat64("ZLDF") > 1 {
res["ZLDF"] = 1
}
//推广目录得分
res["TGMLDF"] = 0
if data.GetString("IEDCQYCPJRBDQMYCPMLQY") != "" && data.GetString("IEDCQYCPJRBDQMYCPMLQY") != "无" {
res["TGMLDF"] = 1
}
//连续3年盈利得分
res["LXSNYLDF"] = 3
//18年
if data.GetFloat64("IEDC1NLRZE") < 0 {
res["LXSNYLDF"] = res.GetInt("LXSNYLDF") - 1
}
//19年
if data.GetFloat64("IEDC1NLRZE0") < 0 {
res["LXSNYLDF"] = res.GetInt("LXSNYLDF") - 1
}
//20年
if data.GetFloat64("IEDC2NLRZE") < 0 {
res["LXSNYLDF"] = res.GetInt("LXSNYLDF") - 1
}
if res.GetInt("LXSNYLDF") == 3 {
res["LXSNYLDF"] = 1
} else if res.GetInt("LXSNYLDF") > 0 {
res["LXSNYLDF"] = 0.5
}
//当年利润总额得分
res["DNLRZEDF"] = 0
//企业利润率
res["QYLRL"] = data.GetFloat64("IEDC2NLRZE") / data.GetFloat64("IEDC2NYYSR")
if res.GetFloat64("QYLRL") > 0.1 {
res["DNLRZEDF"] = 1
} else if res.GetFloat64("QYLRL") > 0 {
res["DNLRZEDF"] = 0.5
}
//企业连续3年亏损得分
res["KSDF"] = 3
//18年
if data.GetFloat64("IEDC1NLRZE") < 0 {
res["KSDF"] = res.GetInt("LXSNYLDF") - 1
}
//19年
if data.GetFloat64("IEDC1NLRZE0") < 0 {
res["KSDF"] = res.GetInt("LXSNYLDF") - 1
}
//20年
if data.GetFloat64("IEDC2NLRZE") < 0 {
res["KSDF"] = res.GetInt("LXSNYLDF") - 1
}
//先统一扣0.5分
if res.GetInt("LXSNYLDF") == 0 {
res["KSDF"] = 0.5
}
//环保检查得分
res["HBJCDF"] = 1
if data.GetString("IEDCHBJC、HBCCZBFXWT") == "一般" {
res["HBJCDF"] = 0.5
}
if data.GetString("IEDCHBJC、HBCCZBFXWT") == "重大" {
res["HBJCDF"] = 0
}
//减排技术升级改造
res["JPJSSJDF"] = 0
if data.GetString("IEDCJPJSSJGZ") != "" && data.GetString("IEDCJPJSSJGZ") != "无" {
res["JPJSSJDF"] = 1
}
//安全检查得分
res["AQJCDF"] = 0
if data.GetString("IEDCFXAQFXYH") == "一般" {
res["HBJCDF"] = -1
}
if data.GetString("IEDCFXAQFXYH") == "重大" {
res["HBJCDF"] = -2
}
//安全事故得分
res["AQSGDF"] = 0
if data.GetString("IEDCFSAQSG") == "轻微" {
res["HBJCDF"] = -0.5
}
if data.GetString("IEDCFSAQSG") == "一般" {
res["HBJCDF"] = -1
}
if data.GetString("IEDCFSAQSG") == "重大" {
res["HBJCDF"] = -2
}
//企业风险隐患双预控体系建设得分
res["QYFXYHSKTXJSDF"] = 0
if data.GetString("IEDCFXYHSYKTXJS") != "" && data.GetString("IEDCFXYHSYKTXJS") != "无" {
res["QYFXYHSKTXJSDF"] = 1
}
//企业安全生产是否达标得分
res["QYAQSCDBDF"] = 0
if data.GetString("IEDCQYSCBZHJS") == "达标" {
res["QYAQSCDBDF"] = 1
}
//产业链30户得分
res["CYL30HDF"] = 0
if data.GetString("IEDCCYLLZ、SJZD、SJ3HLTQY") != "" && data.GetString("IEDCCYLLZ、SJZD、SJ3HLTQY") != "否" {
res["CYL30HDF"] = 1
}
return res
}
var ADataType = Map{
"CYL30HDF": "产业链30户得分",
"QYAQSCDBDF": "企业安全生产是否达标得分",
"QYFXYHSKTXJSDF": "企业风险隐患双预控体系建设得分",
"AQSGDF": "安全事故得分",
"AQJCDF": "安全检查得分",
"JPJSSJDF": "减排技术升级改造得分",
"HBJCDF": "环保检查得分",
"KSDF": "企业连续3年亏损得分",
"QYLRL": "企业利润率",
"DNLRZEDF": "当年利润总额得分",
"LXSNYLDF": "连续3年盈利得分",
"TGMLDF": "推广目录得分",
"ZLDF": "专利得分",
"STTDF": "首台(套)、首批次、首版次企业得分",
"MJSR": "亩均收入",
"MJSRDF": "亩均收入得分",
"MJSS": "亩均税收",
"MJSSDF": "亩均税收得分",
"RJSR": "人均收入",
"RJSRDF": "人均收入得分",
"YFJFTRQD": "研发经费投入强度",
"YFJFTRQDDF": "研发经费投入强度得分",
"DWNHSS": "单位能耗税收",
"DWNHSSDF": "单位能耗税收得分",
"ZYWRWSS": "主要污染物税收",
"ZYWRWSSDF": "主要污染物税收得分",
"DJSDLQYDF": "独角兽、瞪羚企业得分",
"JSZXDF": "企业获得技术中心得分",
"YFFYDF": "研发费用得分",
"GXJSQYDF": "高新技术企业得分",
}