|
|
@@ -0,0 +1,123 @@
|
|
|
+package com.aijiuyi.admin.common.util;
|
|
|
+
|
|
|
+import com.aijiuyi.admin.entity.Acupoint;
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
+import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
+
|
|
|
+class AcupointLocationParserTest {
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void parsesPreviouslyUnsupportedBackReferences() {
|
|
|
+ assertParsed(acupoint("会阳", "双穴", "足太阳膀胱经", "骶区",
|
|
|
+ "在骶区,尾骨端旁开0.5寸。"));
|
|
|
+ assertParsed(acupoint("腰俞", "单穴", "督脉", "骶区",
|
|
|
+ "在骶区,正对骶管裂孔,后正中线上。"));
|
|
|
+ assertParsed(acupoint("腰眼", "双穴", "经外奇穴", "腰部",
|
|
|
+ "在腰区,横平第4腰椎棘突下,后正中线旁开约3.5凹陷中。"));
|
|
|
+ assertParsed(acupoint("腰奇", "单穴", "经外奇穴", "骶区",
|
|
|
+ "在骶区,尾骨端直上2寸,骶角之间凹陷中。"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void calculatesCombinedCoccyxReference() {
|
|
|
+ BigDecimal y = AcupointYReference.calculateY(
|
|
|
+ "尾骨端直上2寸", new BigDecimal("60"), new BigDecimal("25"));
|
|
|
+ assertEquals(new BigDecimal("550.00"), y);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void parsesAllBackAcupointsFromDataModel() {
|
|
|
+ String[][] rows = new String[][]{
|
|
|
+ {"肩外俞", "双穴", "手太阳小肠经", "背部", "在脊柱区,第1胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"肩中俞", "双穴", "手太阳小肠经", "背部", "在脊柱区,第7颈椎棘突下,后正中线旁开2寸。"},
|
|
|
+ {"大杼", "双穴", "足太阳膀胱经", "颈后部", "在脊柱区,第1胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"风门", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第2胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"肺俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第3胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"厥阴俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第4胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"心俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第5胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"督俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第6胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"膈俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第7胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"肝俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第9胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"胆俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第10胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"脾俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第11胸椎棘突下,后正中线旁开1.5寸"},
|
|
|
+ {"胃俞", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第12胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"三焦俞", "双穴", "足太阳膀胱经", "腰部", "在脊柱区,第1腰椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"肾俞", "双穴", "足太阳膀胱经", "腰部", "在脊柱区,第2腰椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"气海俞", "双穴", "足太阳膀胱经", "腰部", "在脊柱区,第3腰椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"大肠俞", "双穴", "足太阳膀胱经", "腰部", "在脊柱区,第4腰椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"关元俞", "双穴", "足太阳膀胱经", "腰部", "在脊柱区,第5腰椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"小肠俞", "双穴", "足太阳膀胱经", "骶区", "在骶区,横平第1骶后孔,骶正中嵴旁开1.5寸。"},
|
|
|
+ {"膀胱俞", "双穴", "足太阳膀胱经", "骶区", "在骶区,横平第2骶后孔,骶正中嵴旁开1.5寸。"},
|
|
|
+ {"中膂俞", "双穴", "足太阳膀胱经", "骶区", "在骶区,横平第3骶后孔,骶正中嵴旁开1.5寸。"},
|
|
|
+ {"白环俞", "双穴", "足太阳膀胱经", "骶区", "在骶区,横平第4骶后孔,骶正中嵴旁开1.5寸。"},
|
|
|
+ {"上髎", "双穴", "足太阳膀胱经", "骶区", "在骶区,正对第1骶后孔中。"},
|
|
|
+ {"次髎", "双穴", "足太阳膀胱经", "骶区", "在骶区,正对第2骶后孔中。"},
|
|
|
+ {"中髎", "双穴", "足太阳膀胱经", "骶区", "在骶区,正对第3骶后孔中。"},
|
|
|
+ {"下髎", "双穴", "足太阳膀胱经", "骶区", "在骶区,正对第4骶后孔中。"},
|
|
|
+ {"会阳", "双穴", "足太阳膀胱经", "骶区", "在骶区,尾骨端旁开0.5寸。"},
|
|
|
+ {"附分", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第2胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"魄户", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第3胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"膏肓", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第4胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"神堂", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第5胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"譩譆", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第6胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"膈关", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第7胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"魂门", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第9胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"阳纲", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第10胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"意舍", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第11胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"胃仓", "双穴", "足太阳膀胱经", "背部", "在脊柱区,第12胸椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"盲门", "双穴", "足太阳膀胱经", "腰部", "在腰区,第1腰椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"志室", "双穴", "足太阳膀胱经", "腰部", "在腰区,第2腰椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"胞肓", "双穴", "足太阳膀胱经", "骶区", "在骶区,横平第2骶后孔,骶正中嵴旁开3寸。"},
|
|
|
+ {"秩边", "双穴", "足太阳膀胱经", "骶区", "在骶区,横平第4骶后孔,骶正中嵴旁开3寸。"},
|
|
|
+ {"腰俞", "单穴", "督脉", "骶区", "在骶区,正对骶管裂孔,后正中线上。"},
|
|
|
+ {"腰阳关", "单穴", "督脉", "腰部", "在脊柱区,第4腰椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"命门", "单穴", "督脉", "腰部", "在脊柱区,第2腰椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"悬枢", "单穴", "督脉", "腰部", "在脊柱区,第1腰椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"脊中", "单穴", "督脉", "背部", "在脊柱区,第11胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"中枢", "单穴", "督脉", "背部", "在脊柱区,第10胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"筋缩", "单穴", "督脉", "背部", "在脊柱区,第9胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"至阳", "单穴", "督脉", "背部", "在脊柱区,第7胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"灵台", "单穴", "督脉", "背部", "在脊柱区,第6胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"神道", "单穴", "督脉", "背部", "在脊柱区,第5胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"身柱", "单穴", "督脉", "背部", "在脊柱区,第3胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"陶道", "单穴", "督脉", "背部", "在脊柱区,第1胸椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"大椎", "单穴", "督脉", "背部", "在脊柱区,第7颈椎棘突下凹陷中,后正中线上。"},
|
|
|
+ {"定喘", "双穴", "经外奇穴", "背部", "在脊柱区,横平第7颈椎棘突下,后正中线旁开0.5寸。"},
|
|
|
+ {"夹脊", "双穴", "经外奇穴", "背部", "在脊柱区,第1胸椎至第5腰椎棘突下两侧,后正中线旁开0.5寸,一侧17穴。"},
|
|
|
+ {"胃脘下俞", "双穴", "经外奇穴", "背部", "在脊柱区,横平第8胸椎棘突下,后正中线旁开1.5寸。"},
|
|
|
+ {"痞根", "双穴", "经外奇穴", "腰部", "在腰区,横平第1腰椎棘突下,后正中线旁开3.5寸。"},
|
|
|
+ {"下极俞", "单穴", "经外奇穴", "腰部", "在腰区,第3腰椎棘突下。"},
|
|
|
+ {"腰宜", "双穴", "经外奇穴", "腰部", "在腰区,横平第4腰椎棘突下,后正中线旁开3寸。"},
|
|
|
+ {"腰眼", "双穴", "经外奇穴", "腰部", "在腰区,横平第4腰椎棘突下,后正中线旁开约3.5凹陷中。"},
|
|
|
+ {"十七椎", "单穴", "经外奇穴", "腰部", "在腰区,第5腰椎棘突下凹陷中。"},
|
|
|
+ {"腰奇", "单穴", "经外奇穴", "骶区", "在骶区,尾骨端直上2寸,骶角之间凹陷中。"}
|
|
|
+ };
|
|
|
+
|
|
|
+ for (String[] row : rows) {
|
|
|
+ assertParsed(acupoint(row[0], row[1], row[2], row[3], row[4]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assertParsed(Acupoint acupoint) {
|
|
|
+ AcupointLocationParser.ParseResult result = AcupointLocationParser.parse(acupoint);
|
|
|
+ assertEquals(AcupointLocationParser.STATUS_PARSED, result.getParseStatus(),
|
|
|
+ acupoint.getName() + " should be parsed: " + result.getParseMessage());
|
|
|
+ assertNotNull(result.getYReferenceTerm(), acupoint.getName() + " should have a Y reference");
|
|
|
+ }
|
|
|
+
|
|
|
+ private Acupoint acupoint(String name, String singleDouble, String meridian,
|
|
|
+ String bodyRegion, String locationDescription) {
|
|
|
+ Acupoint acupoint = new Acupoint();
|
|
|
+ acupoint.setName(name);
|
|
|
+ acupoint.setSingleDouble(singleDouble);
|
|
|
+ acupoint.setMeridian(meridian);
|
|
|
+ acupoint.setBodyPart("背部");
|
|
|
+ acupoint.setBodyRegion(bodyRegion);
|
|
|
+ acupoint.setLocationDescription(locationDescription);
|
|
|
+ return acupoint;
|
|
|
+ }
|
|
|
+}
|