diff --git a/.gitignore b/.gitignore index 70409ce9..f6137c40 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,8 @@ /dsWatch/Logs/ /dsAutoCode/.idea/ -/dsSupport/Source/ -/dsSupport/Target/ -/dsSupport/build/ \ No newline at end of file + +/dsSupport/.idea/ +/dsSupport/build/ +/dsSupport/WinBuild/ +/dsSupport/Logs/ \ No newline at end of file diff --git a/dsSupport/Config/Config.ini b/dsSupport/Config/Config.ini new file mode 100644 index 00000000..55a8665f --- /dev/null +++ b/dsSupport/Config/Config.ini @@ -0,0 +1,29 @@ +[distribute] #发布功能的配置 +ip = 10.10.14.187 +port = 22 +user = root +pwd = dsideal +remotePath = /usr/local/dsMin/dsSupport/ +localPath = E:/Work/dsMin/dsSupport + +[mysql] +ip = 10.10.14.187 +port = 22066 +db_name = base_db_dev + +[redis] +ip = 10.10.14.187 +port = 18890 +db = 0 +expireTime = 86400 + +#gin服务器的端口 +[server] +port = 8005 + +# 本项目名称,用于记录日志 +[project] +project_name = dsSupport + + + diff --git a/dsSupport/Config/logo.txt b/dsSupport/Config/logo.txt new file mode 100644 index 00000000..f6f3c6b2 --- /dev/null +++ b/dsSupport/Config/logo.txt @@ -0,0 +1,11 @@ + _ _____ _ + | | / ____| | | + __| |___| (___ _ _ _ __ _ __ ___ _ __| |_ + / _` / __|\___ \| | | | '_ \| '_ \ / _ \| '__| __| + | (_| \__ \____) | |_| | |_) | |_) | (_) | | | |_ + \__,_|___/_____/ \__,_| .__/| .__/ \___/|_| \__| + | | | | + |_| |_| + +Created By HuangHai 2020-01-20 +http://patorjk.com/software/taag/#p=display&f=Big&t=dsSupport diff --git a/dsSupport/Router/BaseRouter.go b/dsSupport/Router/BaseRouter.go new file mode 100644 index 00000000..8a0bfc32 --- /dev/null +++ b/dsSupport/Router/BaseRouter.go @@ -0,0 +1,14 @@ +package Router + +import ( + "github.com/gin-gonic/gin" +) + +//接口路由 +func GinRouter(r *gin.Engine) { + //注册分路线 + //rr := r.Group("/support") + + //t_gov_area 行政区划 + //GovAreaController.Routers(rr) +} diff --git a/dsSupport/Utils/CommonUtil/CommonUtil.go b/dsSupport/Utils/CommonUtil/CommonUtil.go new file mode 100644 index 00000000..93ad9677 --- /dev/null +++ b/dsSupport/Utils/CommonUtil/CommonUtil.go @@ -0,0 +1,640 @@ +package CommonUtil + +import ( + "bufio" + "bytes" + "crypto/md5" + "encoding/binary" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + uuid "github.com/satori/go.uuid" + "io" + "log" + "math/rand" + "os" + "os/exec" + "path/filepath" + "regexp" + "strconv" + "strings" + "time" +) + +/** +功能:获取UUID +作者:黄海 +时间:2020-02-03 +*/ +func GetUUID() string { + u2 := strings.ToUpper(uuid.NewV4().String()) + return u2 +} + +/** +功能:判断是不是合法的日期格式 +作者:黄海 +时间:2020-03-23 +*/ +func IsDate(date string) bool { + _, err := time.Parse("2006-01-02 15:04:05", date) + if err != nil { + return false + } else { + return true + } +} + +/** +功能:从一个数据库的查询返回结果中获取指定字段的IDS +作者:黄海 +时间:2020-02-14 +*/ +func SelectIdsFromMapInterface(list []map[string]interface{}, key string) []string { + var ids []string + for i := 0; i < len(list); i++ { + switch list[i][key].(type) { + case string: + ids = append(ids, list[i][key].(string)) + break + case int64: + ids = append(ids, strconv.FormatInt(list[i][key].(int64), 10)) + } + } + return ids +} + +/** +功能:将一个数据库查询返回结果中的某一列,形成字典 +作者:黄海 +时间:2020-02-14 +*/ +func PutSelectResultToMapByField(list []map[string]interface{}, field string) map[string]interface{} { + _dict := make(map[string]interface{}) + for i, _ := range list { + record := list[i] + switch record[field].(type) { + case int64: + _dict[strconv.FormatInt(record[field].(int64), 10)] = 1 + default: + _dict[record[field].(string)] = 1 + } + } + return _dict +} + +/** +功能:通过字典获取字符串数组 +作者:黄海 +时间:2020-02-14 +*/ +func GetArrayByMap(_dict map[string]interface{}) []string { + Ids := make([]string, 0, len(_dict)) + for k := range _dict { + Ids = append(Ids, k) // + } + return Ids +} + +/** +功能:将数据库返回的查询结果映射成字典,用于扩展字段 +作者:黄海 +时间:2020-02-14 +*/ +func ConvertMapInterfaceToMapByField(list []map[string]interface{}, key string, value string) map[string]string { + _map := make(map[string]string) + for i, _ := range list { + var areaTypeId string + switch list[i][key].(type) { + case int64: + areaTypeId = strconv.FormatInt(list[i][key].(int64), 10) + default: + areaTypeId = list[i][key].(string) + } + switch list[i][value].(type) { + case int64: + _map[areaTypeId] = strconv.FormatInt(list[i][value].(int64), 10) + default: + _map[areaTypeId] = list[i][value].(string) + } + } + return _map +} + +/** +功能:扩展数据库查询结果集 +作者:黄海 +时间:2020-02-14 +*/ +func ExtendList(list *[]map[string]interface{}, _map map[string]string, key string, value string) { + for i, _ := range *list { + sourceRecord := (*list)[i] + var a string + switch sourceRecord[key].(type) { + case int64: + a = strconv.FormatInt(sourceRecord[key].(int64), 10) + default: + a = sourceRecord[key].(string) + } + sourceRecord[value] = _map[a] + } +} + +/** +功能:带回显的执行DOS命令 +作者:黄海 +时间:2020-05-18 +*/ +func Exec(name string, args ...string) error { + cmd := exec.Command(name, args...) + stderr, _ := cmd.StderrPipe() + stdout, _ := cmd.StdoutPipe() + if err := cmd.Start(); err != nil { + log.Println("exec the cmd ", name, " failed") + return err + } + // 正常日志 + logScan := bufio.NewScanner(stdout) + go func() { + for logScan.Scan() { + log.Println(logScan.Text()) + } + }() + // 错误日志 + errBuf := bytes.NewBufferString("") + scan := bufio.NewScanner(stderr) + for scan.Scan() { + s := scan.Text() + log.Println("", s) + errBuf.WriteString(s) + errBuf.WriteString("\n") + } + // 等待命令执行完 + cmd.Wait() + if !cmd.ProcessState.Success() { + // 执行失败,返回错误信息 + return errors.New(errBuf.String()) + } + return nil +} + +func CopyFile(dstName, srcName string) (written int64, err error) { + src, err := os.Open(srcName) + if err != nil { + return + } + defer src.Close() + dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644) + if err != nil { + return + } + defer dst.Close() + return io.Copy(dst, src) +} + +/** +功能:是不是在指定的数组中存在 +作者:黄海 +时间:2020-05-15 +*/ +func IsContain(items []string, item string) bool { + for _, eachItem := range items { + if eachItem == item { + return true + } + } + return false +} + +/** +功能:删除字符串多余的空格 +作者:黄海 +时间:2020-01-20 +*/ +func DeleteExtraSpace(s string) string { + //删除字符串中的多余空格,有多个空格时,仅保留一个空格 + s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格 + regstr := "\\s{2,}" //两个及两个以上空格的正则表达式 + reg, _ := regexp.Compile(regstr) //编译正则表达式 + s2 := make([]byte, len(s1)) //定义字符数组切片 + copy(s2, s1) //将字符串复制到切片 + spcIndex := reg.FindStringIndex(string(s2)) //在字符串中搜索 + for len(spcIndex) > 0 { //找到适配项 + s2 = append(s2[:spcIndex[0]+1], s2[spcIndex[1]:]...) //删除多余空格 + spcIndex = reg.FindStringIndex(string(s2)) //继续在字符串中搜索 + } + return string(s2) +} + +// Capitalize 字符首字母大写 +func Capitalize(str string) string { + var upperStr string + vv := []rune(str) // 后文有介绍 + for i := 0; i < len(vv); i++ { + if i == 0 { + if vv[i] >= 97 && vv[i] <= 122 { // 后文有介绍 + vv[i] -= 32 // string的码表相差32位 + upperStr += string(vv[i]) + } else { + fmt.Println("Not begins with lowercase letter,") + return str + } + } else { + upperStr += string(vv[i]) + } + } + return upperStr +} + +/** +功能:获取蛇形命名的字符串 +作者:黄海 +时间:2020-01-22 +*/ +func GetSnakeCaseStr(str string) string { + array := strings.Split(str, "_") + var result string + for i := 0; i < len(array); i++ { + result = result + strings.ToUpper(array[i][0:1]) + array[i][1:] + } + return result +} + +const ( + // 可自定义盐值 + TokenSalt = "DsideaL4r5t6y7u" +) + +func MD5(data []byte) string { + _md5 := md5.New() + _md5.Write(data) + return hex.EncodeToString(_md5.Sum([]byte(""))) +} + +//isSymbol表示有无符号 +func BytesToInt(b []byte, isSymbol bool) (int, error) { + if isSymbol { + return BytesToIntS(b) + } + return bytesToIntU(b) +} + +//字节数(大端)组转成int(无符号的) +func bytesToIntU(b []byte) (int, error) { + if len(b) == 3 { + b = append([]byte{0}, b...) + } + bytesBuffer := bytes.NewBuffer(b) + switch len(b) { + case 1: + var tmp uint8 + err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) + return int(tmp), err + case 2: + var tmp uint16 + err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) + return int(tmp), err + case 4: + var tmp uint32 + err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) + return int(tmp), err + default: + return 0, fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!") + } +} + +//字节数(大端)组转成int(有符号) +func BytesToIntS(b []byte) (int, error) { + if len(b) == 3 { + b = append([]byte{0}, b...) + } + bytesBuffer := bytes.NewBuffer(b) + switch len(b) { + case 1: + var tmp int8 + err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) + return int(tmp), err + case 2: + var tmp int16 + err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) + return int(tmp), err + case 4: + var tmp int32 + err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) + return int(tmp), err + default: + return 0, fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!") + } +} + +//整形转换成字节 +func IntToBytes(n int, b byte) ([]byte, error) { + switch b { + case 1: + tmp := int8(n) + bytesBuffer := bytes.NewBuffer([]byte{}) + binary.Write(bytesBuffer, binary.BigEndian, &tmp) + return bytesBuffer.Bytes(), nil + case 2: + tmp := int16(n) + bytesBuffer := bytes.NewBuffer([]byte{}) + binary.Write(bytesBuffer, binary.BigEndian, &tmp) + return bytesBuffer.Bytes(), nil + case 3, 4: + tmp := int32(n) + bytesBuffer := bytes.NewBuffer([]byte{}) + binary.Write(bytesBuffer, binary.BigEndian, &tmp) + return bytesBuffer.Bytes(), nil + } + return nil, fmt.Errorf("IntToBytes b param is invaild") +} + +/** +功能:生成一个随机盐 +作者: 黄海 +时间:2020-02-18 +*/ +func GetRandomSalt() string { + return GetRandomString(8) +} + +//生成随机字符串 +func GetRandomString(l int) string { + str := "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + bytes := []byte(str) + var result []byte + r := rand.New(rand.NewSource(time.Now().UnixNano())) + for i := 0; i < l; i++ { + result = append(result, bytes[r.Intn(len(bytes))]) + } + return string(result) +} + +/** +功能:获取当前的时间戳,精确度纳秒 +作者:黄海 +时间:2020-02-18 +*/ +func GetCurrentTimestamp() int64 { + return time.Now().UnixNano() +} + +/** +功能:获取当前的时间字符串 +作者:黄海 +时间:2020-02-21 +*/ +func GetCurrentTime() string { + timeStr := time.Now().Format("2006-01-02 15:04:05") + //当前时间的字符串,2006-01-02 15:04:05据说是golang的诞生时间,固定写法 + return timeStr +} + +/** +功能:将Json格式的字符串转为map +作者:吴缤 +日期:2020-02-21 +*/ +func JsonStrToMap(jsonStr string) (map[string]interface{}, error) { + var _map map[string]interface{} + err := json.Unmarshal([]byte(jsonStr), &_map) + if err == nil { + if _map["code"] != nil { + var _code = int(_map["code"].(float64)) + _map["code"] = _code + } + return _map, nil + } else { + return nil, err + } +} + +/* +获取程序运行路径 +*/ +func GetCurrentDirectory() string { + dir, err := filepath.Abs(filepath.Dir(os.Args[0])) + if err != nil { + fmt.Println(err) + } + return strings.Replace(dir, "\\", "/", -1) +} + +// 判断所给路径文件/文件夹是否存在 +func Exists(path string) bool { + _, err := os.Stat(path) //os.Stat获取文件信息 + if err != nil { + if os.IsExist(err) { + return true + } + return false + } + return true +} + +/** +功能:将int数据类型转为int64 +作者:黄海 +时间:2020-02-18 +*/ +func ConvertIntToInt64(i int) int64 { + s := strconv.Itoa(i) + s64, _ := strconv.ParseInt(s, 10, 64) + return s64 +} + +/** +功能:将字符串转为整数 +作者:黄海 +时间:2020-04-17 +*/ +func ConvertStringToInt(s string) int { + i, _ := strconv.Atoi(s) + return i +} + +/** +功能:将字符串转为整数64 +作者:黄海 +时间:2020-04-17 +*/ +func ConvertStringToInt64(s string) int64 { + i, _ := strconv.ParseInt(s, 10, 64) + return i +} + +/** +功能:将整数转为字符串 +作者:黄海 +时间:2020-04-17 +*/ +func ConvertIntToString(i int) string { + s := strconv.Itoa(i) + return s +} + +/** +功能:将字符串转为int32整数 +作者:黄海 +时间:2020-04-17 +*/ +func ConvertStringToInt32(s string) int32 { + i, _ := strconv.Atoi(s) + return int32(i) +} + +/** +功能:将整数64转为字符串 +作者:黄海 +时间:2020-04-17 +*/ +func ConvertInt64ToString(i int64) string { + s := strconv.FormatInt(i, 10) + return s +} + +/** +功能:将JSON字符串转化为map数组 +作者: 黄海 +时间:2020-04-17 +*/ +func ConvertJsonStringToMapArray(data string) []map[string]interface{} { + var m = make([]map[string]interface{}, 0) + str := []byte(data) + json.Unmarshal(str, &m) + return m +} + +func ConvertStringArrayToArray(data string) []string { + data = strings.ReplaceAll(data, "[", "") + data = strings.ReplaceAll(data, "]", "") + if len(data) > 0 { + return strings.Split(data, ",") + } else { + return []string{} + } +} + +/** +功能:将JSON字符串转化为map数组 +作者: 黄海 +时间:2020-04-17 +*/ +func ConvertJsonStringToMap(data string) map[string]interface{} { + var m = make(map[string]interface{}, 0) + str := []byte(data) + json.Unmarshal(str, &m) + return m +} + +/** +功能:将int转化为string +作者:黄海 +时间:2020-04-20 +*/ +func ConvertInt32ToString(n int32) string { + buf := [11]byte{} + pos := len(buf) + i := int64(n) + signed := i < 0 + if signed { + i = -i + } + for { + pos-- + buf[pos], i = '0'+byte(i%10), i/10 + if i == 0 { + if signed { + pos-- + buf[pos] = '-' + } + return string(buf[pos:]) + } + } +} + +/** +功能:将一个查询结果转化为字符串,方便返回 +作者:黄海 +时间:2020-04-22 +*/ +func SerializeToString(list interface{}) string { + switch list.(type) { + case []map[string]interface{}: + if len(list.([]map[string]interface{})) == 0 { + return "[]" + } else { + data, _ := json.Marshal(list) + return string(data) + } + case map[string]interface{}: + data, _ := json.Marshal(list) + return string(data) + default: + return "" + } +} + +/** +功能:两个LIST进行合并 +作者:吴缤 +日期:2020-05-15 +*/ +func ListMerge(a string, b string, correspondSourceId string, correspondTargetId string, displaySourceKey string, displayTargetKey string) string { + aList := ConvertJsonStringToMapArray(a) + bList := ConvertJsonStringToMapArray(b) + bMap := make(map[string]interface{}) + for i := 0; i < len(bList); i++ { + bRecord := (bList)[i] + var bKey string + switch bRecord[correspondTargetId].(type) { + case string: + bKey = bRecord[correspondTargetId].(string) + break + case int: + bKey = strconv.Itoa(bRecord[correspondTargetId].(int)) + break + case int32: + bKey = ConvertInt32ToString(bRecord[correspondTargetId].(int32)) + break + case int64: + bKey = strconv.FormatInt(bRecord[correspondTargetId].(int64), 10) + break + } + bMap[bKey] = bRecord[displayTargetKey] + } + + for i := 0; i < len(aList); i++ { + aRecord := (aList)[i] + var aKey string + switch aRecord[correspondSourceId].(type) { + case string: + aKey = aRecord[correspondSourceId].(string) + break + case int: + aKey = strconv.Itoa(aRecord[correspondSourceId].(int)) + break + case int32: + aKey = ConvertInt32ToString(aRecord[correspondSourceId].(int32)) + break + case int64: + aKey = strconv.FormatInt(aRecord[correspondSourceId].(int64), 10) + } + display := "" + if bMap[aKey] != nil { + display = bMap[aKey].(string) + } + aRecord[displaySourceKey] = display + } + return SerializeToString(aList) +} +func ListCollectAttributes(listStr string, attr string) []string { + var orgIdArray []string + list := ConvertJsonStringToMapArray(listStr) + for i := 0; i < len(list); i++ { + orgId := list[i][attr].(string) + orgIdArray = append(orgIdArray, orgId) + } + return orgIdArray +} diff --git a/dsSupport/Utils/CommonUtil/HttpUtil.go b/dsSupport/Utils/CommonUtil/HttpUtil.go new file mode 100644 index 00000000..219c980c --- /dev/null +++ b/dsSupport/Utils/CommonUtil/HttpUtil.go @@ -0,0 +1,30 @@ +package CommonUtil + +import ( + "fmt" + "io/ioutil" + "net/http" + "strings" +) + +/** +功能:POST请求 +作者:吴缤 +日期:2020-02-21 +备注:data方式为id=123 +*/ +func HttpPost(url string, data string) (string, error) { + request, err := http.Post(url, "application/x-www-form-urlencoded", strings.NewReader(data)) + defer request.Body.Close() + if err != nil { + fmt.Printf("post data error:%v\n", err) + return "", err + } else { + respBody, err := ioutil.ReadAll(request.Body) + if err != nil { + return "", err + } else { + return string(respBody), nil + } + } +} diff --git a/dsSupport/Utils/CommonUtil/SwaggerUtil.go b/dsSupport/Utils/CommonUtil/SwaggerUtil.go new file mode 100644 index 00000000..ec0ac54e --- /dev/null +++ b/dsSupport/Utils/CommonUtil/SwaggerUtil.go @@ -0,0 +1,32 @@ +package CommonUtil + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "log" + "os" +) +var swaggerFile = "docs/swagger.json" +/** +功能:读取swagger的生成json +作者:黄海 +时间:2020-03-16 +*/ +func ReadSwaggerJson() interface{} { + //读取doc目录下的swagger.json + f, err := os.Open(swaggerFile) + if err != nil { + log.Fatal("读取swagger.json失败!") + return nil + } + content, _ := ioutil.ReadAll(f) + var jsonBody interface{} + err = json.Unmarshal(content, &jsonBody) + if err != nil { + fmt.Println("ERROR: ", err.Error()) + return nil + } + return jsonBody +} + diff --git a/dsSupport/Utils/ConfigUtil/ConfigUtil.go b/dsSupport/Utils/ConfigUtil/ConfigUtil.go new file mode 100644 index 00000000..9b20f37c --- /dev/null +++ b/dsSupport/Utils/ConfigUtil/ConfigUtil.go @@ -0,0 +1,212 @@ +package ConfigUtil + +import ( + "fmt" + "gopkg.in/ini.v1" + "os" +) + +var ( + //要发布到的主机信息 + DistributeIp string + DistributePort int32 + DistributeUser string + DistributePwd string + DistributeRemotePath string + DistributeLocalPath string + //服务器的端口 + ServerPort string + //运行时配置 + StartPathWindows string + StartPathLinux string + + //mysql配置 + MysqlIp string + MysqlPort string + MysqlDbName string + + //REDIS配置 + RedisIp string + RedisPort string + RedisDb string + RedisExpireTime int64 + //项目名称 + ProjectName string + + +) + +// 判断所给路径文件/文件夹是否存在 +func Exists(path string) bool { + _, err := os.Stat(path) //os.Stat获取文件信息 + if err != nil { + if os.IsExist(err) { + return true + } + return false + } + return true +} +func init() { + //判断是不是单元测试,如果是的话,那么配置文件的路径需要加上一个. + var configIniFile = "./Config/Config.ini" + //判断文件不是存在 + if !Exists(configIniFile) { + configIniFile = "." + configIniFile + } + //再不存在,直接走物理路径 + if !Exists(configIniFile) { + configIniFile = "/usr/local/dsMin/dsBaseWeb/Config/Config.ini" + } + + iniParser := IniParser{} + if err := iniParser.Load(configIniFile); err != nil { + fmt.Printf("try load config file[%s] error[%s]\n", configIniFile, err.Error()) + return + } + //发布的远端IP + DistributeIp = iniParser.GetString("distribute", "ip") + //发布的远端端口 + DistributePort = iniParser.GetInt32("distribute", "port") + //发布的远端用户名 + DistributeUser = iniParser.GetString("distribute", "user") + //发布的远端密码 + DistributePwd = iniParser.GetString("distribute", "pwd") + //远端路径 + DistributeRemotePath = iniParser.GetString("distribute", "remotePath") + //本地路径 + DistributeLocalPath = iniParser.GetString("distribute", "localPath") + //web服务器端口 + ServerPort = iniParser.GetString("server", "port") + //读取redis配置 + RedisIp = iniParser.GetString("redis", "ip") + RedisPort = iniParser.GetString("redis", "port") + RedisDb = iniParser.GetString("redis", "db") + RedisExpireTime = iniParser.GetInt64("redis", "expireTime") + //项目名称 + ProjectName = iniParser.GetString("project", "project_name") + //mysql + MysqlIp = iniParser.GetString("mysql", "ip") + MysqlPort = iniParser.GetString("mysql", "port") + MysqlDbName = iniParser.GetString("mysql", "db_name") + +} + +type IniParser struct { + confReader *ini.File // config reader +} + +type IniParserError struct { + errorInfo string +} + +func (e *IniParserError) Error() string { return e.errorInfo } + +func (this *IniParser) Load(configFileName string) error { + conf, err := ini.Load(configFileName) + if err != nil { + this.confReader = nil + return err + } + this.confReader = conf + return nil +} + +func (this *IniParser) GetString(section string, key string) string { + if this.confReader == nil { + return "" + } + + s := this.confReader.Section(section) + if s == nil { + return "" + } + + return s.Key(key).String() +} + +func (this *IniParser) GetInt32(section string, key string) int32 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Int() + + return int32(valueInt) +} + +func (this *IniParser) GetUint32(section string, key string) uint32 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Uint() + + return uint32(valueInt) +} + +func (this *IniParser) GetInt64(section string, key string) int64 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Int64() + return valueInt +} + +func (this *IniParser) GetUint64(section string, key string) uint64 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Uint64() + return valueInt +} + +func (this *IniParser) GetFloat32(section string, key string) float32 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueFloat, _ := s.Key(key).Float64() + return float32(valueFloat) +} + +func (this *IniParser) GetFloat64(section string, key string) float64 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueFloat, _ := s.Key(key).Float64() + return valueFloat +} diff --git a/dsSupport/Utils/FileUtil/FileUtil.go b/dsSupport/Utils/FileUtil/FileUtil.go new file mode 100644 index 00000000..80817837 --- /dev/null +++ b/dsSupport/Utils/FileUtil/FileUtil.go @@ -0,0 +1,84 @@ +package FileUtil + +import ( + "io" + "io/ioutil" + "log" + "os" + "path/filepath" +) + +/** +功能:读取文件内容 +作者:黄海 +时间:2019-12-31 +*/ +func ReadFileContent(filepath string) string { + file, err := os.Open(filepath) + if err != nil { + log.Print("文件打开失败:", err) + } + defer file.Close() + + buf := make([]byte, 12) // 存放文件内容的缓存,相当于中转站 + data := make([]byte, 0) // 用来存放文件内容,buf读取的内容都会写到data里面去 + + for { + //无限循环,不断读取 + n, err := file.Read(buf) + // 什么时候文件读完呢?如果文件读完的话,那么err不为nil,而是io.EOF + // 所以我们可以进行判断 + if err != nil { + //如果err != nil说明出错了,但如果还等于io.EOF的话,说明读完了,因为文件读完,err也不为nil。直接break + if err == io.EOF { + break + } else { + //如果错误不是io.EOF的话,说明就真的在读取中出现了错误,直接panic出来 + panic(err) + } + } + //此时文件内容写到buf里面去了,写了多少个呢?写了n个,那么我们再写到data里面去 + data = append(data, buf[:n]...) + } + return string(data) +} + +/** +功能:获取文件的大小 +作者:黄海 +时间:2020-01-20 +*/ +func GetFileSize(filename string) int64 { + var result int64 + filepath.Walk(filename, func(path string, f os.FileInfo, err error) error { + result = f.Size() + return nil + }) + return result +} + +/** +功能:写入文件 +作者:黄海 +时间:2020-05-16 +*/ +func WriteFileContent(filename string, content string) { + var d1 = []byte(content) + ioutil.WriteFile(filename, d1, 0666) //写入文件(字节数组) +} + +/** +功能:判断目录是不是存在 +作者:黄海 +时间:2020-05-20 +*/ +func PathExists(path string) bool { + _, err := os.Stat(path) + if err == nil { + return true + } + if os.IsNotExist(err) { + return false + } + return false +} \ No newline at end of file diff --git a/dsSupport/Utils/cors.go b/dsSupport/Utils/cors.go new file mode 100644 index 00000000..e8ee3191 --- /dev/null +++ b/dsSupport/Utils/cors.go @@ -0,0 +1,27 @@ +package Utils + +import ( + "github.com/gin-gonic/gin" + "net/http" + "strings" + "time" +) + +// 处理跨域请求,支持options访问 +func Cors() gin.HandlerFunc { + return func(c *gin.Context) { + c.Header("Access-Control-Allow-Origin", "*") + c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token") + c.Header("Access-Control-Allow-Methods", "POST, GET") + c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type") + c.Header("Access-Control-Allow-Credentials", "true") + //如果是GET接口,禁止它缓存 + if strings.Index(c.Request.RequestURI, ".") < 0 { + c.Header("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate, value") + c.Header("Expires", "Thu, 01 Jan 1970 00:00:00 GMT") + c.Header("Last-Modified", time.Now().UTC().Format(http.TimeFormat)) + } + // 处理请求 + c.Next() + } +} diff --git a/dsSupport/go.mod b/dsSupport/go.mod new file mode 100644 index 00000000..b9e239b0 --- /dev/null +++ b/dsSupport/go.mod @@ -0,0 +1,10 @@ +module dsSupport + +go 1.13 + +require ( + github.com/gin-gonic/gin v1.6.3 + github.com/satori/go.uuid v1.2.0 + github.com/swaggo/gin-swagger v1.2.0 + gopkg.in/ini.v1 v1.60.0 +) diff --git a/dsSupport/go.sum b/dsSupport/go.sum new file mode 100644 index 00000000..643fcc58 --- /dev/null +++ b/dsSupport/go.sum @@ -0,0 +1,115 @@ +github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w= +github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/go-openapi/jsonpointer v0.17.0 h1:nH6xp8XdXHx8dqveo0ZuJBluCO2qGrPbDNZ0dwoRHP0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.0 h1:BqWKpV1dFd+AuiKlgtddwVIFQsuMpxfBDBHGfM2yNpk= +github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/spec v0.19.0 h1:A4SZ6IWh3lnjH0rG0Z5lkxazMGBECtrZcbyYQi+64k4= +github.com/go-openapi/spec v0.19.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/swag v0.17.0 h1:iqrgMg7Q7SvtbWLlltPrkMs0UBJI6oTSs79JFRUi880= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/swaggo/gin-swagger v1.2.0 h1:YskZXEiv51fjOMTsXrOetAjrMDfFaXD79PEoQBOe2W0= +github.com/swaggo/gin-swagger v1.2.0/go.mod h1:qlH2+W7zXGZkczuL+r2nEBR2JTT+/lX05Nn6vPhc7OI= +github.com/swaggo/swag v1.5.1 h1:2Agm8I4K5qb00620mHq0VJ05/KT4FtmALPIcQR9lEZM= +github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/oBQZ/0= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181022190402-e5e69e061d4f/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190611141213-3f473d35a33a h1:+KkCgOMgnKSgenxTBoiwkMqTiouMIy/3o8RLdmSbGoY= +golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b h1:/mJ+GKieZA6hFDQGdWZrjj4AXPl5ylY+5HusG80roy0= +golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/ini.v1 v1.60.0 h1:P5ZzC7RJO04094NJYlEnBdFK2wwmnCAy/+7sAzvWs60= +gopkg.in/ini.v1 v1.60.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/dsSupport/main.go b/dsSupport/main.go new file mode 100644 index 00000000..799e0f43 --- /dev/null +++ b/dsSupport/main.go @@ -0,0 +1,51 @@ +package main + +import ( + "dsSupport/Router" + Utils "dsSupport/Utils" + "dsSupport/Utils/CommonUtil" + "dsSupport/Utils/ConfigUtil" + "dsSupport/Utils/FileUtil" + "fmt" + "github.com/gin-gonic/gin" + ginSwagger "github.com/swaggo/gin-swagger" + "github.com/swaggo/gin-swagger/swaggerFiles" +) + +// @title 基础数据API +// @version 1.0 +// @description 分布式,大并发,高可用 +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html +// @host 127.0.0.1:8002 +func main() { + // 发布模式 + //gin.SetMode(gin.ReleaseMode) + // 开发模式 + gin.SetMode(gin.DebugMode) + // 开启gin服务器 + r := gin.Default() + // 使用跨域中间件 + r.Use(Utils.Cors()) + // 显示Logo + configIniFile := "./Config/logo.txt" + if !CommonUtil.Exists(configIniFile) { + configIniFile = "/usr/local/dsMin/dsSupport/Config/logo.txt" + } + var logo = FileUtil.ReadFileContent(configIniFile) + fmt.Print(logo) + + //注册swagger + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) + + //前台页面目录 + r.Static("/dsBaseWeb", "./Html") + //主路由 + Router.GinRouter(r) + + // 监听并在 0.0.0.0:8002 上启动服务 + r.Run(":" + ConfigUtil.ServerPort) +}