changeset 42:c58172a59534

bug fix.
author pyon@macmini
date Tue, 10 Mar 2020 21:12:29 +0900
parents 34a474fb83c3
children 77dd877929f5
files src/kaigo/Nk/nk.go src/kaigo/Perori/bk.go src/kaigo/Perori/manual.docx src/kaigo/Perori/perori.go
diffstat 4 files changed, 138 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/src/kaigo/Nk/nk.go	Wed Mar 04 23:46:59 2020 +0900
+++ b/src/kaigo/Nk/nk.go	Tue Mar 10 21:12:29 2020 +0900
@@ -1,7 +1,7 @@
 /*
  nk.go: Nintei Kekka
 
- Last Change: 2020-01-24 金 09:18:04.
+ Last Change: 2020-03-10 火 16:38:20.
 */
 
 package main
@@ -102,7 +102,7 @@
 	return (api_result >= 0);
 }
 
-int xdwaddatn(const char* file, char* atnlist) {
+int xdwhbaddatn(const char* file, char* atnlist) {
 	char in_path[_MAX_PATH];
 	_fullpath(in_path, file, _MAX_PATH);
 
@@ -275,6 +275,45 @@
     return 0;
 }
 
+int xdwerase(const char* in_file, const char* ktxt, const char* htxt) {
+	int x = 20000;
+	int y = 3685;
+	int sz = 480;
+
+	char in_path[_MAX_PATH];
+	_fullpath(in_path, in_file, _MAX_PATH);
+
+	XDW_DOCUMENT_HANDLE h = NULL;
+	XDW_OPEN_MODE_EX mode = {sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_UPDATE, XDW_AUTH_NODIALOGUE};
+
+	int api_result = XDW_OpenDocumentHandle(in_path, &h, (XDW_OPEN_MODE*)&mode);
+	if (api_result < 0) return api_result;
+
+	XDW_DOCUMENT_INFO info = {sizeof(XDW_DOCUMENT_INFO), 0, 0, 0};
+	XDW_GetDocumentInformation(h, &info);
+
+    XDW_FOUND_HANDLE pFoundHandle = NULL;
+	for (int i = 0; i < info.nPages; i++) {
+		api_result = XDW_FindTextInPage(h, i + 1, htxt, NULL, &pFoundHandle, NULL);
+		if (pFoundHandle == NULL) continue;
+
+		api_result = XDW_FindTextInPage(h, i + 1, ktxt, NULL, &pFoundHandle, NULL);
+		if (pFoundHandle == NULL) continue;
+
+		XDW_ANNOTATION_HANDLE annoation;
+		int api_result = XDW_AddAnnotation(h, XDW_AID_TEXT, i + 1, x, y, NULL, &annoation, NULL);
+		if (api_result < 0) return api_result;
+
+		api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_Text, XDW_ATYPE_STRING, "        ", 0, NULL);
+		api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_FontSize, XDW_ATYPE_INT, (char*)&sz, 0, NULL);
+	}
+
+	XDW_SaveDocument(h, NULL);
+	XDW_CloseDocumentHandle(h, NULL);
+
+	return 0;
+}
+
 int xdw2pdf(const char* xdwfile, const char* pdffile) {
 	char in_path[_MAX_PATH], out_path[_MAX_PATH];
 	_fullpath(in_path,  xdwfile, _MAX_PATH);
@@ -346,7 +385,7 @@
 )
 
 var (
-    ver = "0.1"
+    ver = "0.2"
 
 	flg_hb int
 	flg_time bool
@@ -368,7 +407,7 @@
     hb string // 発番
     fw, hs, kt = "", "", "kttemp.xdw" // 負担割合証, 被保険者証, 結果通知
 
-    step, totalstep = 1, 13
+    step, totalstep = 1, 14
 )
 
 type Annotation struct {
@@ -572,7 +611,7 @@
     /* MAKE SORT-TABEL */
     print_step("並び順の決定")
 
-	re_hhs := regexp.MustCompile(`05((2126)|(2159)|(4346))0[1238]\d{8}`)
+	re_hhs := regexp.MustCompile(`0[1238]\d{8}`)
 	re_kaigo := regexp.MustCompile(`要((介護)|(支援)).`)
 
 	hash_fw := make(map[string]int) // 負担割合証発行者のハッシュ
@@ -607,7 +646,7 @@
 	order := ""
 	for _, s := range sorttable {
 		t := strings.Split(s, "#")
-		order += ":" + t[len(t)-1][6:]
+		order += ":" + t[len(t)-1]
 	}
 	order = strings.Replace(order, ":", "", 1)
 
@@ -626,11 +665,18 @@
 	C.xdwsort(C.CString(kt), C.CString(kt_sorted), C.CString(order), C.CString(tmpdir), C.CString("kt"))
 	step_start = print_time(step_start)
 
-    /* ADD ANNOTATION */
+    /* ADD HATSUBAN */
     print_step("発番印字")
 	al := strings.Join(conf.AnnotationList(), ":")
 	al, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), al)
-    C.xdwaddatn(C.CString(kt_sorted), C.CString(al))
+    C.xdwhbaddatn(C.CString(kt_sorted), C.CString(al))
+	step_start = print_time(step_start)
+
+    /* ERASE HOUKATSU  */
+    print_step("包括除去")
+	ktxt, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), "要介護")
+	htxt, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), "包括支援センター")
+    C.xdwerase(C.CString(hs_sorted), C.CString(ktxt), C.CString(htxt))
 	step_start = print_time(step_start)
 
     /* OPTIMIZE OUTPUT-FILE */
@@ -654,11 +700,10 @@
 		t := strings.Split(s, "#")
 		u := strings.ReplaceAll(t[1], ":", ",")
 		u, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), u)
-		c := t[2][0:6]
-		h := t[2][6:16]
+		h := t[2]
 		n, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), hash_hhs[h])
-		// seq, city, hno, name, kaigo, fw, kyotaku
-		fmt.Fprintf(fcsv, "%04d,%s,%s,%s,%s\n", i + 1, c, h, n, u)
+		// seq, hno, name, kaigo, fw, kyotaku
+		fmt.Fprintf(fcsv, "%04d,%s,%s,%s\n", i + 1, h, n, u)
 	}
 	if err := fcsv.Close(); err != nil {
 		log.Fatal(err)
--- a/src/kaigo/Perori/bk.go	Wed Mar 04 23:46:59 2020 +0900
+++ b/src/kaigo/Perori/bk.go	Tue Mar 10 21:12:29 2020 +0900
@@ -1,7 +1,7 @@
 /*
  bk.go: Insert Biko & Hatsuban
 
- Last Change: 2020-03-04 水 16:48:05.
+ Last Change: 2020-03-10 火 15:13:54.
 */
 
 package main
@@ -76,6 +76,7 @@
 	XDW_DOCUMENT_INFO info = {sizeof(XDW_DOCUMENT_INFO), 0, 0, 0};
 	XDW_GetDocumentInformation(h, &info);
 
+	int color = XDW_COLOR_NONE;
     XDW_FOUND_HANDLE pFoundHandle = NULL;
 	for (int i = 0; i < info.nPages; i++) {
 		api_result = XDW_FindTextInPage(h, i + 1, stxt, NULL, &pFoundHandle, NULL);
@@ -87,8 +88,6 @@
 
 		api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_Text, XDW_ATYPE_STRING, hb, 0, NULL);
 		api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_FontSize, XDW_ATYPE_INT, (char*)&sz, 0, NULL);
-
-		int color = XDW_COLOR_NONE;
 		api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_BackColor, XDW_ATYPE_INT, (char*)&color, 0, NULL);
 	}
 
@@ -140,6 +139,46 @@
 	return 0;
 }
 
+int xdweraren(const char* in_file, const char* stxt)
+{
+	int x = 1870;
+	int y = 4680;
+	int yoff = 2825;
+	int sz = 90;
+
+	char in_path[_MAX_PATH];
+	_fullpath(in_path, in_file, _MAX_PATH);
+
+	XDW_DOCUMENT_HANDLE h = NULL;
+	XDW_OPEN_MODE_EX mode = {sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_UPDATE, XDW_AUTH_NODIALOGUE};
+
+	int api_result = XDW_OpenDocumentHandle(in_path, &h, (XDW_OPEN_MODE*)&mode);
+	if (api_result < 0) return api_result;
+
+	XDW_DOCUMENT_INFO info = {sizeof(XDW_DOCUMENT_INFO), 0, 0, 0};
+	XDW_GetDocumentInformation(h, &info);
+
+    XDW_FOUND_HANDLE pFoundHandle = NULL;
+	for (int i = 0; i < info.nPages; i++) {
+		api_result = XDW_FindTextInPage(h, i + 1, stxt, NULL, &pFoundHandle, NULL);
+		if (pFoundHandle != NULL) continue;
+
+		for (int r = 0; r < 9; r++) {
+			XDW_ANNOTATION_HANDLE annoation;
+			int api_result = XDW_AddAnnotation(h, XDW_AID_TEXT, i + 1, x, y + r * yoff, NULL, &annoation, NULL);
+			if (api_result < 0) return api_result;
+
+			api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_Text, XDW_ATYPE_STRING, "                                                                 ", 0, NULL);
+			api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_FontSize, XDW_ATYPE_INT, (char*)&sz, 0, NULL);
+		}
+	}
+
+	XDW_SaveDocument(h, NULL);
+	XDW_CloseDocumentHandle(h, NULL);
+
+	return 0;
+}
+
 */
 import "C"
 
@@ -162,7 +201,7 @@
 
 // Constants
 const (
-	version = "0.3"
+	version = "0.4"
 	default_ccsvfile = "chosairai.csv"
 	default_icsvfile = "ikenshoirai.csv"
 	default_cxdwfile = "KBPC116G.xdw"
@@ -230,7 +269,7 @@
 	if err != nil {
 		log.Fatal(err)
 	}
-	fmt.Println(" 備考データ読込")
+	fmt.Println(" 備考データ読込 ... done")
 	step_start := print_time(start)
 
     /* READ KUBUN FROM CSV */
@@ -238,7 +277,7 @@
 	if err != nil {
 		log.Fatal(err)
 	}
-	fmt.Println(" 申請区分データ読込")
+	fmt.Println(" 申請区分データ読込 ... done")
 	step_start = print_time(start)
 
 	/* INSERT BIKO */
@@ -252,17 +291,24 @@
 		}
 		ctxt = append(ctxt, t)
 	}
-	fmt.Println(" 備考と申請区分を追加")
+	fmt.Println(" 備考と申請区分を追加 ... done")
+	step_start = print_time(step_start)
 
 	/* INSERT HATSU-BAN & OPTIMIZE */
 	stxt, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), "大仙広介")
-    C.xdwhb(C.CString(default_tmpxdw), C.CString(default_cout), C.CString(hbi), C.CString(stxt))
-	fmt.Println(" 発番追加(調査依頼ファイル)")
+    C.xdwhb(C.CString(default_tmpxdw), C.CString(default_cout), C.CString(hbc), C.CString(stxt))
+	fmt.Println(" 発番追加(調査依頼ファイル)... done")
 	step_start = print_time(step_start)
 
+	/* ERASE RENRAKUSAKI */
 	copy_tmp(default_ixdwfile)
-    C.xdwhb(C.CString(default_tmpxdw), C.CString(default_iout), C.CString(hbc), C.CString(stxt))
-	fmt.Println(" 発番追加( 意見書依頼ファイル)")
+	C.xdweraren(C.CString(default_tmpxdw), C.CString(stxt))
+	fmt.Println(" 連絡先消去 ... done")
+	step_start = print_time(step_start)
+
+	/* INSERT HATSU-BAN & OPTIMIZE */
+    C.xdwhb(C.CString(default_tmpxdw), C.CString(default_iout), C.CString(hbi), C.CString(stxt))
+	fmt.Println(" 発番追加( 意見書依頼ファイル)... done")
 	step_start = print_time(step_start)
 
 	/* CHOSA IRAI LIST */
@@ -319,12 +365,12 @@
 	}
 	w.Flush()
 
-	fmt.Println(" 調査依頼リスト作成")
+	fmt.Println(" 調査依頼リスト作成 ... done")
 	step_start = print_time(step_start)
 
 	/* CLEAN */
     os.Remove(default_tmpxdw)
-	fmt.Println(" 終了")
+	fmt.Println(" 終了 ... end")
 	step_start = print_time(step_start)
 }
 
Binary file src/kaigo/Perori/manual.docx has changed
--- a/src/kaigo/Perori/perori.go	Wed Mar 04 23:46:59 2020 +0900
+++ b/src/kaigo/Perori/perori.go	Tue Mar 10 21:12:29 2020 +0900
@@ -20,7 +20,7 @@
 var debug_log bool
 
 // Constants
-const version =  "0.2"
+const version =  "0.3"
 const default_dbfile =  "ikenshoirai.db"
 const default_csvfile = "ikenshoirai.csv"
 
@@ -205,7 +205,11 @@
 	hhscnt := make(map[string]int)
 	for _, ss := range dbdata {
 		ss.Humanize()
-		if n := hhscnt[ss.Hhsno]; n == 1 {
+		switch hhscnt[ss.Hhsno] {
+		case 0:
+			recentdata = append(recentdata, ss)
+			hhscnt[ss.Hhsno]++;
+		case 1:
 			prevhash[ss.Hhsno] = PrevSinsei{
 				Biko: ss.Biko,
 				DrId: ss.DrId,
@@ -214,9 +218,6 @@
 				Ymd: ss.Ymd,
 				Kubun: ss.Kubun,
 			}
-		} else {
-			recentdata = append(recentdata, ss)
-			hhscnt[ss.Hhsno]++;
 		}
 	}
 	print_debug_log(fmt.Sprintf("recentdata: n=%d", len(recentdata)))	//
@@ -248,7 +249,13 @@
 		doctors = append(doctors, dr)
 	}
 	sort.Slice(doctors, func(i, j int) bool {
-		return doctors[i].Kana < doctors[j].Kana
+		if doctors[i].Kana != doctors[j].Kana {
+			return doctors[i].Kana < doctors[j].Kana
+		}
+		if doctors[i].Id != doctors[j].Id {
+			return doctors[i].Id < doctors[j].Id
+		}
+		return false
 	})
 
 	irai := struct {
@@ -319,11 +326,16 @@
 
 	for _, record := range records {
 		ss := csv2sinsei(record)
-		if ss.IraiYmd != date {
-			continue
+		if ss.IraiYmd == date {
+			hhshash[ss.Hhsno] = true
 		}
-		hhshash[ss.Hhsno] = true
-		sinsei = append(sinsei, ss)
+	}
+
+	for _, record := range records {
+		ss := csv2sinsei(record)
+		if _, ok := hhshash[ss.Hhsno]; ok {
+			sinsei = append(sinsei, ss)
+		}
 	}
 
 	return sinsei, hhshash, nil