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("IEDCST(T)SPC、SBCQY") != "" && data.GetString("IEDCST(T)SPC、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": "高新技术企业得分", }