# HG changeset patch # User pyon@macmini # Date 1583842349 -32400 # Node ID c58172a595344b2e106f3279ec3766260c87f689 # Parent 34a474fb83c311326e828a1d9dc309a37aa7d9fc bug fix. diff -r 34a474fb83c3 -r c58172a59534 src/kaigo/Nk/nk.go --- 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) diff -r 34a474fb83c3 -r c58172a59534 src/kaigo/Perori/bk.go --- 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) } diff -r 34a474fb83c3 -r c58172a59534 src/kaigo/Perori/manual.docx Binary file src/kaigo/Perori/manual.docx has changed diff -r 34a474fb83c3 -r c58172a59534 src/kaigo/Perori/perori.go --- 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