diff src/kaigo/Porori/src2/porori.go @ 65:0369656be06c default tip

many changes.
author pyon@macmini
date Fri, 20 May 2022 06:30:34 +0900
parents 34a474fb83c3
children
line wrap: on
line diff
--- a/src/kaigo/Porori/src2/porori.go	Fri Dec 25 20:48:01 2020 +0900
+++ b/src/kaigo/Porori/src2/porori.go	Fri May 20 06:30:34 2022 +0900
@@ -1,10 +1,13 @@
+/*
+	Last Change: 2021-09-07 火 14:39:09.
+*/
 package main
 
 import (
+	"bufio"
 	"encoding/csv"
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
 	"log"
 	"os"
 	"sort"
@@ -25,11 +28,36 @@
 	Ccn string
 	Bgn string
 	End string
-	Term string
+	Hist string
+	ReqI string
+	Acc string
+	ReqC string
+	Visit string
+	Remark string
 }
 
 func (s Sinsei) String() string {
-	return strings.Join([]string{s.No, s.Name, s.Ymd, s.Kbn, s.Bgn, s.End, s.Term, s.Ccn}, ",")
+	s.ChangeExpression()
+
+	var ymd, ccn, bgn, end, reqi, acc, reqc, visit, remark time.Time
+	ymd, s.Ymd       = s.TransDate(s.Ymd)
+	ccn, s.Ccn       = s.TransDate(s.Ccn)
+	bgn, s.Bgn       = s.TransDate(s.Bgn)
+	end, s.End       = s.TransDate(s.End)
+	reqi, s.ReqI     = s.TransDate(s.ReqI)
+	acc,  s.Acc      = s.TransDate(s.Acc)
+	reqc,  s.ReqC    = s.TransDate(s.ReqC)
+	visit, s.Visit   = s.TransDate(s.Visit)
+	remark, s.Remark = s.TransDate(s.Remark)
+
+	term   := fmt.Sprintf("%d", s.CalcTerm(bgn, end))
+	ridays := fmt.Sprintf("%d", s.CountDay(ymd, reqi))
+	adays  := fmt.Sprintf("%d", s.CountDay(reqi, acc))
+	rcdays := fmt.Sprintf("%d", s.CountDay(ymd, reqc))
+	vdays  := fmt.Sprintf("%d", s.CountDay(reqc, visit))
+	tdays  := fmt.Sprintf("%d", s.CountDay(visit, remark))
+	rdays  := fmt.Sprintf("%d", s.CountDay(ymd, ccn))
+	return strings.Join([]string{s.No, s.Name, s.Ymd, s.Kbn, s.Bgn, s.End, term, s.Ccn, rdays, s.ReqI, ridays, s.Acc, adays, s.ReqC, rcdays, s.Visit, vdays, s.Remark, tdays}, ",")
 }
 
 func (s Sinsei) TransDate (ymd string) (time.Time, string) {
@@ -41,8 +69,8 @@
 	return t, t.Format(" 2006-01-02")
 }
 
-func (s Sinsei) CountMonth(bgn, end time.Time) int {
-	if bgn.IsZero() {
+func (s Sinsei) CalcTerm(bgn, end time.Time) int {
+	if bgn.IsZero() || end.IsZero() {
 		return 0
 	}
 
@@ -53,6 +81,25 @@
 	return m
 }
 
+func (s Sinsei) CountDay(bgn, end time.Time) int {
+	if bgn.IsZero() || end.IsZero() {
+		return -9999
+	}
+
+	if bgn.Year() == end.Year() {
+		return end.YearDay() - bgn.YearDay()
+	}
+	if end.Year() - bgn.Year() == 1 {
+		d := 365 - bgn.YearDay() + end.YearDay()
+		if bgn.Year() % 4 == 0 { // can use 2001 - 2099
+			d++
+		}
+		return d
+	}
+
+	return -9999
+}
+
 func (s *Sinsei) ChangeExpression() {
 	s.No = "=\"" + strings.TrimSpace(s.No) + "\""
 
@@ -71,19 +118,29 @@
 		s.Kbn = "証交"
 	}
 	s.Kbn, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), s.Kbn)
+}
 
-	var bgn, end time.Time
-	_, s.Ymd = s.TransDate(s.Ymd)
-	_, s.Ccn = s.TransDate(s.Ccn)
-	bgn, s.Bgn = s.TransDate(s.Bgn)
-	end, s.End = s.TransDate(s.End)
+func read_line(file string) ([]string, error) {
+	f, err := os.Open(file)
+	if err != nil {
+		return nil, err
+	}
+	defer f.Close()
 
-	s.Term = fmt.Sprintf("%d", s.CountMonth(bgn, end))
+	var s []string
+	scanner := bufio.NewScanner(f)
+	for scanner.Scan() {
+		s = append(s, scanner.Text())
+	}
+	if err := scanner.Err(); err != nil {
+		return nil, err
+	}
+	return s, nil
 }
 
 func main() {
 
-	if len(os.Args) != 2 {
+	if len(os.Args) != 5 {
 		fmt.Fprint(os.Stderr, "bat input.")
 		os.Exit(1)
 	}
@@ -95,7 +152,7 @@
 	}
 	var yf YF
 
-	content, err := ioutil.ReadFile(jsonfile)
+	content, err := os.ReadFile(jsonfile)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -104,7 +161,7 @@
 	}
 
 	// Read CSV
-	content, err = ioutil.ReadFile(os.Args[1])
+	content, err = os.ReadFile(os.Args[1]) // nintei.csv
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -116,25 +173,68 @@
 		log.Fatal(err)
 	}
 
+	ikensho, err := read_line(os.Args[2]) // i.csv
+	if err != nil {
+		log.Fatal(err)
+	}
+	chosa, err := read_line(os.Args[3]) // c.csv
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	remark, err := read_line(os.Args[4]) // t.csv
+	if err != nil {
+		log.Fatal(err)
+	}
+
 	// Main Proccess
 	var sinsei []Sinsei
 
 	for _, record := range records {
-		if record[4] < yf.From || record[4] > yf.To {
+		if record[5] < yf.From || record[5] > yf.To {
 			continue
 		}
+		var riymd, aymd, rcymd, vymd string
+		key := strings.Join([]string{record[0], record[1]}, ",")
+		for _, i := range ikensho {
+			if strings.HasPrefix(i, key) {
+				riymd = strings.Split(i, ",")[2]
+				aymd  = strings.Split(i, ",")[3]
+				break
+			}
+		}
+		for _, c := range chosa {
+			if strings.HasPrefix(c, key) {
+				rcymd = strings.Split(c, ",")[2]
+				vymd  = strings.Split(c, ",")[3]
+				break
+			}
+		}
+		var rymd string
+		for _, t := range remark {
+			h := strings.TrimSpace(record[0])
+			c := strings.Split(t, ",")
+			if strings.EqualFold(h, c[0]) && strings.EqualFold(record[3], c[1]) {
+				rymd = c[2]
+				break
+			}
+		}
 
 		ss := Sinsei{
 			No: record[0],
-			Name: record[1],
-			Ymd: record[2],
-			Kbn: record[3],
-			Ccn: record[4],
-			Bgn: record[5],
-			End: record[6],
+			Hist: record[1],
+			Name: record[2],
+			Ymd: record[3],
+			Kbn: record[4],
+			Ccn: record[5],
+			Bgn: record[6],
+			End: record[7],
+			ReqI: riymd,
+			Acc: aymd,
+			ReqC: rcymd,
+			Visit: vymd,
+			Remark: rymd,
 		}
-		ss.ChangeExpression()
-
 		sinsei = append(sinsei, ss)
 	}
 
@@ -143,10 +243,16 @@
 	})
 
 	// Output
-	header := strings.Join([]string{"被保番", "氏名", "申請日", "区分", "開始日", "終了日", "期間", "審査会"}, ",")
+	header := strings.Join([]string{"被保番", "氏名", "申請日", "区分", "開始日", "終了日", "期間", "審査会", "日数", "意見書依頼", "日数", "意見書入手", "日数", "調査依頼", "日数", "調査", "日数", "特記", "日数"}, ",")
 	header, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), header)
 	fmt.Println(header)
 
+	/*
+	for i, s := range sinsei {
+		fmt.Print(s)
+		fmt.Printf(",=\"0\"&A%d\n", i + 2)
+	}
+	*/
 	for _, s := range sinsei {
 		fmt.Println(s)
 	}