123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package main
- import (
- _ "embed"
- "encoding/json"
- "flag"
- "fmt"
- "html/template"
- "io/ioutil"
- "log"
- "os"
- "regexp"
- "strconv"
- "strings"
- )
- type (
- //Attach 附件
- Attach struct {
- Id int
- Department string `json:"department"`
- Href string `json:"attach_href"`
- Title string `json:"info_title"`
- Raw string
- }
- Attaches []*Attach
- )
- var (
- df = flag.String("df", "./data.dat", "datafile 数据文件")
- of = flag.String("of", "./data.html", "输出的html文件")
- tpl *template.Template
- //go:embed tpl.html
- html string
- reg, _ = regexp.Compile("(\\d{4}年)")
- repeart = map[string]int{}
- )
- // readDataFile
- func readDataFile() Attaches {
- ret := make(Attaches, 0, 0)
- bs, err := ioutil.ReadFile(*df)
- if err != nil {
- log.Fatal(err)
- }
- content := string(bs)
- index := 1
- for _, s := range strings.Split(content, "\n") {
- if len(s) == 0 {
- continue
- }
- var data string = s
- if strings.HasPrefix(s, ",") {
- data = s[1:]
- }
- var attach = new(Attach)
- err = json.Unmarshal([]byte(data), attach)
- if err == nil {
- ret = append(ret, attach)
- attach.Raw = s
- attach.Id = index
- index += 1
- //TODO 修改标题
- attach.Title = rename(attach.Title)
- }
- }
- return ret
- }
- // rename
- func rename(text string) string {
- if reg.MatchString(text) {
- m := reg.FindAllString(text, -1)
- year := findMaxYear(m)
- text = reg.ReplaceAllString(text, "")
- ext := ""
- if strings.Contains(text, ".") {
- tmp := strings.Split(text, ".")
- ext = strings.ToLower(tmp[len(tmp)-1])
- if ext == "pdf" || ext == "doc" || ext == "docx" || ext == "xls" || ext == "xlsx" || ext == "zip" || ext == "rar" {
- text = text[:len(text)-4]
- }
- }
- key := fmt.Sprintf("%d_%s", year, text)
- if v, ok := repeart[key]; ok {
- repeart[key] = v + 1
- return fmt.Sprintf("%s_%d.%s", key, v+1, ext)
- } else {
- repeart[key] = 1
- return fmt.Sprintf("%s_%d.%s", key, 1, ext)
- }
- }
- return text
- }
- // findMaxYear
- func findMaxYear(src []string) int {
- year := 2022
- for _, v := range src {
- y, err := strconv.Atoi(v[:4])
- if err == nil && y > year {
- year = y
- }
- }
- return year
- }
- // init
- func init() {
- flag.Parse()
- var err error
- tpl, err = template.New("tpl").Parse(html)
- if err != nil {
- log.Fatal(err)
- }
- }
- // main
- func main() {
- rs := readDataFile()
- fo, err := os.Create(*of)
- if err != nil {
- log.Fatal(err)
- }
- err = tpl.Execute(fo, rs)
- if err != nil {
- log.Fatal(err)
- }
- fo.Close()
- }
|