123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500 |
- package main
- import (
- log "github.com/donnie4w/go-logger/logger"
- "go.mongodb.org/mongo-driver/bson"
- qu "qfw/util"
- "regexp"
- "strings"
- "unicode/utf8"
- )
- var (
- codeRelation = map[string]string{
- "06": "医用成像器械",
- "01": "有源手术器械",
- "02": "无源手术器械",
- "14": "注输、护理和防护器械",
- "16": "眼科器械",
- "03": "神经和心血管手术器械",
- "12": "有源植入器械",
- "40": "体外诊断试剂",
- "13": "无源植入器械",
- "18": "妇产科、辅助生殖和避孕器械",
- "17": "口腔科器械",
- "22": "临床检验器械",
- "07": "医用诊察和监护器械",
- "04": "骨科手术器械",
- "20": "中医器械",
- "09": "物理治疗器械",
- "08": "呼吸、麻醉和急救器械",
- "19": "医用康复器械",
- "21": "医用软件",
- "10": "输血、透析和体外循环器械",
- "11": "医疗器械消毒灭菌器械",
- "15": "患者承载器械",
- "05": "放射治疗器械",
- "57": "医疗器械消毒灭菌器械",
- "68": "体外诊断试剂",
- "27": "中医器械",
- "26": "物理治疗器械",
- "46": "骨科手术器械",
- }
- rangeRelation = map[string]string{
- "6801": "无源手术器械",
- "6831": "X射线附属及辅助设备",
- "6812": "妇产科、辅助生殖和避孕器械",
- "6813": "妇产科手术器械",
- "6810": "骨科手术器械",
- "6824": "光治疗设备",
- "6854": "呼吸、麻醉和急救器械",
- "6856": "呼吸、麻醉和急救器械",
- "6806": "口腔科器械",
- "6855": "口腔科器械",
- "6863": "口腔科器械",
- "6840": "临床检验器械",
- "6841": "临床检验器械",
- "6803": "神经和心血管手术器械",
- "6807": "神经和心血管手术器械",
- "6877": "神经和心血管手术器械-心血管介入器械",
- "6845": "输血、透析和体外循环器械",
- "6805": "无源手术器械",
- "6809": "无源手术器械",
- "6808": "无源手术器械",
- "6816": "无源手术器械",
- "6846": "无源植入器械",
- "6826": "物理治疗器械",
- "6804": "眼科器械",
- "6857": "医疗器械消毒灭菌器械",
- "6822": "医用成像器械",
- "6828": "医用成像器械",
- "6833": "医用成像器械",
- "6870": "医用软件",
- "6834": "医用射线防护设备",
- "6820": "医用诊察和监护器械",
- "6821": "医用诊察和监护器械",
- "6827": "中医器械",
- "6815": "注射、穿刺器械",
- "6864": "注输、护理和防护器械",
- }
- productTemp = map[string]string{}
- companyTemp = map[string]string{}
- YlqxCodeName = map[string]string{}
- YlqxNameCode = map[string]string{}
- ScRangeReg1 = regexp.MustCompile("(\\d{2}|\\d{4})-(\\d{2}|\\d{1})([\\s -::]+)?([\u4e00-\u9fa5()、()/\\s ]+)")
- ScRangeReg2 = regexp.MustCompile("\\d{2}([\\s -::]+)?([\u4e00-\u9fa5()、()/\\s ]+)")
- ScRangeClean1 = regexp.MustCompile("[\\s ]+")
- ScRangeClean2 = regexp.MustCompile("(生产范围).*")
- SpecRangeReg = regexp.MustCompile("(检测试剂|试剂盒|抗体试剂|保存试剂|提取试剂)")
- )
- var cleanPN0 = regexp.MustCompile("[ \\s]+")
- var cleanPN1 = regexp.MustCompile("[\u30A0-\u30FF]+")
- var cleanPN2 = regexp.MustCompile("([A-Za-z]+)$")
- var cleanPN3 = regexp.MustCompile("[()()]+")
- var cleanPN4 = regexp.MustCompile("^([0-9]+)")
- //清洗产品名称
- func cleanProductName(product_name string) string {
- product_name = cleanPN0.ReplaceAllString(product_name, "")
- product_name = cleanPN1.ReplaceAllString(product_name, "")
- product_name = cleanPN2.ReplaceAllString(product_name, "")
- product_name = cleanParenthesesName(product_name)
- product_name = cleanPN4.ReplaceAllString(product_name, "")
- return product_name
- }
- func cleanParenthesesName(name string) string {
- indexArr := cleanPN3.FindAllStringIndex(name, -1)
- strArr, start, end := []string{}, 0, 0
- for k, v := range indexArr {
- if k%2 == 0 {
- start, end = 0, 0
- start = v[0]
- } else {
- end = v[1]
- str := name[start:end]
- strArr = append(strArr, str)
- }
- }
- for _, v := range strArr {
- name = strings.ReplaceAll(name, v, "")
- }
- return name
- }
- //加载医疗器械代码
- func loadYlqxInfo() {
- ylqxs := *MysqlMedicalTool.Find("code_productclass", nil, "", "", -1, -1)
- for _, v := range ylqxs {
- name := qu.ObjToString(v["name"])
- code := qu.ObjToString(v["code"])
- if name != "" && code != "" {
- YlqxCodeName[code] = name
- YlqxNameCode[name] = code
- }
- }
- log.Debug("产品数量~", len(YlqxCodeName))
- }
- func loadFifthInfo() map[string]string {
- info := map[string]string{}
- arr1 := []string{
- "手术刀、疣体剥离刀、皮屑刮刀",
- "手术刀片",
- "手术刀柄、刀片夹持器",
- "备皮刀",
- "医用剪、基础外科用剪、组织剪、手术剪、精细剪、精细手术剪、不锈钢手术剪",
- "拆线剪、纱布绷带剪",
- "止血钳、蚊式止血钳、血管钳、微血管止血钳",
- "组织钳、小切口组织钳、微针钳、异物钳、子弹钳、淋巴结钳、取样钳、分离结扎钳、息肉钳",
- "器械钳、持针钳、持针器、微血管持针钳、硬质合金镶片持针钳、小切口持针钳、皮管钳、置放钳、夹持钳、夹持器、结扎钳、帕巾钳、海绵钳",
- "施夹钳(不带夹)、施夹器",
- "拆钉钳、拆钉器、拆针器",
- "组织镊、医用镊",
- "探针、外科手术探针",
- "刺探针",
- "拔松针",
- "钩针",
- "动脉瘤针",
- "医用拉钩、基础外科用钩、拉钩、创口钩、扁平拉钩、皮肤拉钩、手术拉钩、双头拉钩、组织拉钩",
- "外科牵开器、钳式牵开器",
- "刮匙、皮肤刮匙",
- "皮肤组织钻孔器",
- "剥离器、医用剥离器、软组织剥离器",
- "吸引管、外科吸引管、吸引头、医用吸引头",
- "显微刀、显微喉刀",
- "显微剪、显微组织剪、显微枪形手术剪、显微喉剪",
- "显微钳、显微喉钳、微持针钳",
- "显微镊、显微组织镊、显微持针镊",
- "显微止血夹",
- "显微针、显微耳针、显微喉针",
- "显微平头冲洗针",
- "显微钩、显微耳钩、显微喉钩",
- "显微冲洗吸引管、显微喉用冲洗吸引管",
- "显微剥离器、显微喉剥离器",
- "动脉瘤夹钳、银夹钳、头皮夹钳、U型夹钳",
- "脑乳突牵开器、软轴牵开器、后颅凹牵开器",
- "颈椎牵开器",
- "颅骨牵引器",
- "手摇颅骨钻、颅骨钻",
- "颅骨线锯条",
- "线锯导引器",
- "脑压板",
- "手术用头架、手术头架",
- "眼内膜刀、扩口刀、眼科手术刀、显微眼用刀",
- "眼科手术刀片",
- "眼科手术刀柄",
- "眼用剪、角膜剪、虹膜剪、巩膜剪、结膜剪、囊膜剪、膜状内障剪、眼内剪、小梁剪、显微眼用手术剪、显微眼用剪、显微虹膜剪",
- "眼科镊、虹膜镊、视网膜镊、角膜移植镊、膜瓣镊、医用睫毛镊、眼内异物镊、睑板腺囊肿镊、剥膜镊、晶体植入镊、晶体折叠镊、碎核镊、抱核镊、撕囊镊、辅助夹持镊、翻眼镊、角膜固定镊、巩膜塞夹持镊、显微结膜镊、显微眼内鳄鱼镊、显微眼内非对称性视网膜镊、显微眼内镐头镊、显微眼内内界膜镊、显微眼内钳式镊、显微眼内视网膜镊、显微眼用镊、显微虹膜镊",
- "系线镊、缝线结扎镊、弹簧镊、眼用结扎镊",
- "眼科钳、眼用止血钳、显微眼用钳",
- "小梁切开器、巩膜咬切器",
- "眼用持针钳、眼用显微持针钳",
- "泪囊拉钩、斜视钩、眼睑拉钩、眼内膜钩、视网膜钩、虹膜拉钩、角膜上皮扒钩、角膜线钩、角膜异物钩、晶体定位钩、眼科手术辅助用钩、显微眼用钩具",
- "眼用破囊针、眼用注液针、眼用放液针、泪道探针、角膜异物针、冲洗针",
- "眼用笛针",
- "角膜上皮环锯、角膜环钻",
- "注吸器、注吸冲洗器、冲洗器",
- "冲洗器手柄、注吸器手柄",
- "晶体线环",
- "泪点扩张器、泪小点扩张器、显微眼用泪道扩张器",
- "开睑器",
- "泪囊牵开器",
- "眼球固定器",
- "眼用测量规、眼用测量器、眼用测量尺、眼窝测量球",
- "眼用刮匙",
- "双头片铲、眼内膜铲",
- "角膜异物铲",
- "碎核垫板、单头碎核垫板",
- "巩膜剥离子、眼用巩膜剥离器",
- "扁桃体刀、扁桃体切除器、耳鼓膜刀、耳道皮瓣刀、盒式切除刀、鼻粘膜刀、鼻中隔旋转刀",
- "鼻骨凿、乳突骨凿、耳用骨凿、鼻中隔凿",
- "耳息肉剪、镫骨足弓剪、耳用槌骨咬骨剪、耳剪、中耳剪、槌骨剪",
- "鼻剪、鼻组织剪、鼻粘膜剪、鼻中隔骨剪",
- "喉剪、甲状腺剪、扁桃体剪",
- "耳钳、中耳息肉钳、耳异物钳、耵聍钳",
- "鼻组织钳、鼻筛窦钳、鼻咬切钳、鼻咽活体取样钳、鼻粘膜钳、鼻(窦)息肉钳、鼻腔填塞钳、鼻骨复位钳、上颌窦咬骨钳、蝶窦咬骨钳、鼻中隔咬骨钳、上颌窦止血钳",
- "鼻息肉圈断器",
- "喉用钳、间接喉钳、喉分离钳、喉息肉钳、喉取样钳、异物喉钳、粘膜抓钳、扁桃体用钳",
- "耳用镊、耳用膝状镊、鼻用镊",
- "耳钩、耵聍钩、甲状腺拉钩、扁桃体拉钩、鼻腔拉钩",
- "上颌窦探针、耳用探针、鼻穿刺针",
- "内耳张开器",
- "乳突牵开器、鼻腔撑开器、鼻窥器",
- "五官科吸引管、鼻腔吸引管、扁桃体吸引管、鼻窦冲吸器",
- "鼻剥离器、鼻骨膜剥离器、鼻中隔剥离器",
- "鼻骨锉",
- "鼻骨锤",
- "牙龈刀、软组织环切刀、牙用刀、牙用手术刀、拔牙刀",
- "牙骨凿、牙釉凿、阻生牙骨凿",
- "牙科剪、牙龈剪",
- "咬骨钳、牙槽咬骨钳、拔牙钳、舌钳、切断钳、切断牙钳、正颌专用钳",
- "正畸钳、正畸切断钳、正畸弯制钳、粘合锁槽去除钳、正畸带环安置夹钳、磨牙带环就位器",
- "牙用镊、牙科镊",
- "成形片夹",
- "颌部组织拉钩、口角拉钩",
- "拔髓针",
- "牙周袋探针、牙用探针、牙探针",
- "根管扩大针、根管锉",
- "牙周锉、牙骨锉、牙用锉",
- "扭力扳手、螺丝起",
- "上颌窦提升器、置骨器、牙科种植定位器",
- "牙种植导向模板、种植用手术导板",
- "橡皮障",
- "橡皮障打孔器",
- "橡皮障夹",
- "橡皮障夹钳",
- "橡皮障支架",
- "牙用尺、牙用测力计",
- "牙挺、牙根尖挺、丁字形牙挺",
- "牙用充填器、银汞合金充填器、水门汀充填器、牙胶充填器、根管充填器、牙科树脂充填器、排龈线填塞器、粘固粉充填器",
- "牙用输送器、银汞合金输送器、汞合金输送器、树脂输送器、硅橡胶输送器",
- "牙用分离器、牙龈分离器",
- "口镜",
- "颌外牵引装置、唇颊牵开器、上颌窦牵开器",
- "口腔冲洗器、牙龈冲洗器",
- "口腔开口器、丁字式开口器、双头开口器",
- "洁治器、刮治器",
- "牙刮匙",
- "研光器",
- "剔挖器、挖匙",
- "去冠器",
- "牙骨锤",
- "牙正畸结扎器",
- "胸骨刀",
- "心脏手术剪、胸骨剪、肋骨剪",
- "心房持针钳、结扎钳、胸腔组织钳、三角肺叶钳、双关节肋骨咬骨钳、咬骨钳、直视大型肺叶钳",
- "胸腔止血钳",
- "凹凸齿止血夹",
- "胸腔镊、胸腔组织镊、肺组织镊",
- "心房拉钩、心室拉钩、二尖瓣膜拉钩",
- "双头剥离匙",
- "肋骨骨膜剥离器、内膜剥离器",
- "肋骨合拢器",
- "腹部用直视直剪、腹部用直视弯剪、双向剪、组织剪、腹部用双动直剪、腹部用双动弯剪、腹部用直剪、腹部用钩剪",
- "分离钳、三叶钳、三叶扇形钳、五叶扇形钳、五叶钳、无齿钳、牵引钳、腹膜钳、V形钳、O形钳、器官固定钳、剥离钳、扳克钳、撑开钳、大型分离钳、胆囊钳、胆管钳、钝头钳、中空竖齿钳、中空横齿钳、胃钳、芯轴钳、脾蒂钳、抵钉座对合钳、活检钳、取石钳、造影钳、抓钳、阑尾肠钳",
- "钛夹钳施、夹钳(不带夹)",
- "荷包钳、取物钳、钉座夹持钳、持针钳、缝合钳",
- "大腹钩、前列腺拉钩、胆道拉钩、腹部拉钩、腹壁拉钩、阑尾拉钩、深部拉钩、悬吊拉钩、活动拉钩、S状拉钩、L状拉钩、导光拉钩、腹部外科用拉钩、小切口拉钩、万向拉钩、直角拉钩",
- "气腹针",
- "腹部手术牵开器、下腹部牵开器、腹部手术单侧牵开器、可调式腹壁牵开器、框架式牵开器、环形牵开器、和式牵开器、腹壁牵开器、腹壁固定牵开器",
- "胆石匙 、胆囊刮匙",
- "荷包成型器",
- "腹腔吸引管",
- "压肠板",
- "拉钩装置器",
- "胆道探条",
- "前列腺剪",
- "肠剪",
- "爪钳、痔核钳、抓钳肠钳",
- "膀胱肿瘤钳、输尿管夹持钳、膀胱钳、后尿道钳、膀胱颈钳、前列腺组织钳",
- "取石钳、肾石钳、膀胱取石钳、碎石钳",
- "痔漏探针、导引针、肛门探针",
- "前列腺拉钩、膀胱拉钩、肾盂拉钩、肾窦拉钩",
- "膀胱前列腺牵开器、肛门牵开器、尿道扩张器 、扩肛器",
- "肛门镜、塑制肛门镜、不锈钢肛门镜、窥肛器",
- "阴茎夹",
- "全玻璃灌肠器",
- "医用排便清肠器",
- "截断刀、截骨刀、胫骨切刀、胫骨切割器、半月板刀、骨刀、削切刀",
- "髓腔铰刀、加压螺纹钉铰刀、骨铰刀",
- "髓腔扩大器、柔性扩髓器",
- "石膏刀",
- "骨用丝锥、丝攻",
- "骨锥、开口锥",
- "骨科用螺丝刀",
- "导钻",
- "骨科钻头、铰孔钻、骨钻",
- "手摇颅骨钻",
- "手枪式手摇骨钻、手摇式骨钻、弓形钻",
- "埋头钻",
- "髋关节成型凹凸钻",
- "髓腔扩大钻",
- "骨剪、双关节咬骨剪、双关节棘突骨剪、膝关节韧带手术剪、咬骨剪",
- "钢丝剪、钢针剪、钛网剪、钛笼剪",
- "石膏剪",
- "咬骨钳、腐骨钳、膝关节息肉钳",
- "骨科用撑开钳、椎体撑开钳、骨科撑开器、骨盆撑开器、股骨撑开器、颈椎撑开器、椎体撑开器、脊柱撑开器",
- "压缩钳",
- "持骨钳、髌骨钳、骨科复位钳、骨盆复位钳、三爪骨复位钳、持钉钳、持板钳、持棒钳、持钩钳、螺杆夹持钳、持针钳",
- "骨克丝钳、钢丝钳、钢针钳、剪切钳、断棒钳、钢丝结扎钳、钢板弯曲钳、弯棒钳、折弯钳",
- "热弯曲钳",
- "转棒钳、取出钳",
- "弓锯、骨锯、指骨锯、胸骨锯",
- "线锯",
- "锯片",
- "线锯条",
- "石膏锯",
- "骨凿、小圆刮凿、丁字凿、弧形凿、髋关节成型凿、肘关节肱骨成型骨凿、座导凿、平骨凿、圆骨凿、脱臼凿、峨眉凿",
- "骨锉、髓腔锉、椎管锉、隧道锉、髋臼锉",
- "梯形铲",
- "(单侧)椎板拉钩、半月板钩、下肢截断拉钩、颈椎拉钩、骨拉钩、髋关节拉钩、肩胛骨拉钩、膝关节拉钩",
- "神经根拉钩",
- "骨用牵开器、手摇式牵开器、自动牵开器、多(双)向牵开器、可调式牵开器、微创牵开器、胫骨牵开器、关节微创牵开器、后颅牵开器、坐骨神经牵开器、脊柱牵开器、椎板牵开器、颈椎椎体牵开器、颈椎关节牵开器、颈椎组织牵开器、颈椎微创牵开器、环形椎骨牵开器、不对称牵开器、髋关节牵开器、腰椎微创牵开器、手摇式颈椎牵开器",
- "骨钩",
- "骨牵引针、加压螺纹钉导引针、骨导引针、骨定位针、固定针",
- "骨探针",
- "穿孔针",
- "钩针",
- "骨刮匙",
- "骨膜剥离器(子)、可变神经剥离器(子)、神经剥离器(子)",
- "电动石膏剪、电动石膏锯、电动石膏切割器",
- "直径尺、医用尺、角度尺、测深器、骨测量器、试模、填充块、量规",
- "钢板塑型片",
- "膝关节伸直间隙评估垫片",
- "线锯导引器",
- "骨科定位片、骨科钻孔瞄准器",
- "钢丝穿引器、钢丝穿孔器",
- "石膏撑开器",
- "打入器、打拔器、拔出器、取钉器、螺钉取出器、断钉取出器、髂骨取出器、螺钉打滑取出器、扳手、起子",
- "持针镊、持钉镊、持钉夹、夹持器",
- "骨锤、骨撬、撬棒、骨锨",
- "开路器、打孔器、扩孔器",
- "植骨漏斗、双室漏斗、弯型漏斗、植骨器、骨移植搅拌器",
- "骨科吸引器",
- "骨质活检提取器",
- "膝关节固定器、肩关节固定器、踝关节固定器、髌骨加压固定器、颈椎固定器、腰椎固定器、足托固定器、臂外展固定器、膝关节加压固定器、骨盆固定器、骨科保护支具、肢体固定器、可调式固定支具、医用外固定支具",
- "骨把持器、三爪骨把持器、骨折固定夹",
- "骨折固定夹板、医用高分子夹板、肋骨固定板、医用固定带、胸骨固定板、植骨夹板、医用外固定夹板",
- "石膏绷带(粉状型)、石膏绷带(粘胶型)",
- "锁针加压器",
- "护套、快装手柄",
- "下肢骨折整复器",
- "钢板弯曲扳手、钢板弯曲器",
- "弯棒器",
- "扭断器、剪断器、剪棒器、断棒器、钢针切断器",
- "椎弓根钉尾部切断器",
- "负气压式骨折固定保护气垫",
- "股骨髓腔对线手柄套",
- "股骨髓腔探棒",
- "骨科冲头",
- "导引袖套、环状套扎器",
- "碎胎刀",
- "妇产科用剪、剖腹产剪、会阴剪、阴道环切剪、宫腔手术剪、子宫剪",
- "脐带剪",
- "产钳、剖腹产切口钳、妇科组织钳、子宫颈活体取样钳、子宫夹持钳、子宫颈钳、宫腔异物钳、卵巢钳、举宫钳、宫腔活检钳、子宫内取物钳、妇科分离钳",
- "产钳、头皮钳",
- "环形输卵管镊",
- "子宫拉钩、阴道拉钩",
- "子宫探针",
- "腹水穿刺针",
- "侧开式阴道扩张器、双翼阴道扩张器、双翼阴道检查扩张器、双翼阴道手术扩张器",
- "子宫颈扩张器、阴道牵开器、会阴牵开器",
- "输卵管通液器",
- "骨盆测量计",
- "子宫内膜刮吸管",
- "子宫拨棒",
- "阴道压板",
- "宫颈压板",
- "刮宫片、宫内刮片",
- "肌瘤剥离器",
- "举宫器、可冲洗举宫器、李式举宫器、杯式举宫器",
- "宫内节育器取出钳、宫内节育器取出钩、宫内节育器放置叉",
- "输精管分离钳、输精管皮外固定钳",
- "输卵管提取板",
- "子宫刮匙、子宫刮",
- "宫颈刮片",
- "放气针、输液用放气针",
- "无针注射推进器、弹簧驱动式无针注射推进器",
- "辊轴取皮刀、鼻手术刀",
- "鼻骨凿、指骨凿",
- "颌骨夹持钳、肌腱夹持钳",
- "整形镊、皮肤镊、眼睑镊",
- "唇夹",
- "鼻骨整形锯锉",
- "整形分离器、整形肌腱分离器、整形肌腱剥离器",
- "整形拉钩、光导整形拉钩",
- "鼓式取皮机、烧伤植皮机",
- "鼻导引器",
- "腋臭匙",
- "鼻假体导引器",
- "压舌板",
- "打诊锤、脑打诊锤、叩诊锤",
- "额戴反光镜",
- "单用听诊器、二用听诊器、三用听诊器、胎音听诊器",
- "视力表灯、视力表灯箱",
- "标准对数视力表、综合视力表、点状视力表",
- "遮眼板",
- "幼儿视锐度(视力)检测卡、儿童图形视力卡、婴幼儿选择性注视检测卡",
- "反光灯、医用检查灯、聚光灯",
- "医用头灯、额戴式照明灯、头灯",
- "手术放大镜、医用手术放大镜、双目手术放大镜、头戴式放大镜、医用放大镜",
- "超声耦合剂、医用超声耦合剂",
- "火罐、火罐瓶",
- "真空拔罐器、负压罐、负压拔罐器",
- "刮痧板、刮痧器、刮痧砭板",
- "医用X射线胶片、医用X光胶片",
- "医用红外激光胶片、医用激光胶片、医用干式胶片",
- "医用中速增感屏、医用高速增感屏、极光增感屏、增感纸、牙用增感屏、钨酸钙中速医用增感屏",
- "医用透视荧光屏、医用诊断X射线透视荧光屏",
- "影像板、影像IP板",
- "手动摄影平床、手动X射线摄影平床",
- "吊架、立柱/导轨、立式摄片架",
- "硬拷贝照相机、医用图像打印机、干式激光成像仪",
- "暗盒、成像板暗盒、暗匣、X射线摄影暗匣",
- "X射线胶片显影液、X射线胶片定影液、X射线胶片显影粉、X射线胶片定影粉",
- "X射线胶片观片灯、X射线胶片观片仪、X光片观片灯、X射线胶片观片灯箱",
- "医用X射线自动洗片机、医用牙科X光胶片全自动冲洗机、全自动洗片机",
- "放疗用患者体位固定袋、人体定位袋、定位膜、人体定位垫(用于放疗时)",
- "人体定位袋、人体定位垫(用于诊断时)",
- "医用射线防护面罩、医用射线防护手套、医用射线防护眼镜、防辐射衣、防辐射帽、防辐射裙、防辐射围领、医用射线防护帘、医用射线性腺防护帘、防辐射背心、医用射线防护玻璃板",
- "射线防护椅",
- "医用射线立式摄片架防护装置、医用射线防护悬吊屏风、医用射线防护屏",
- "全自动电泳仪、电泳仪、电泳装置、全自动毛细管电泳仪",
- "核酸提纯仪、全自动核酸提取仪、全自动核酸纯化仪、全自动核酸提取纯化仪",
- "采血笔、扁形采血笔、筒形采血笔、可调式医用采血笔",
- "切片机、轮转式切片机、手摇切片机、自动切片机、 冷冻切片机",
- "制片机、自动制片机、液基薄层细胞制片机",
- "脱水机、组织脱水机、自动组织脱水机",
- "包埋机、石蜡包埋机、 病理石蜡包埋机",
- "涂片机、离心涂片机、液基薄层细胞涂片机",
- "染色机、自动染片机、组织染色机",
- "免疫组化预处理系统、自动脱蜡抗原修复仪",
- "医用离心机、高速离心机、高速冷冻离心机、低速离心机、低速冷冻离心机、大容量冷冻离心机",
- "钠石灰、钙石灰、二氧化碳吸收剂、碱石灰",
- "普通产床、妇科手术台、妇科检查床、妇产科综合手术台",
- "普通手术台、简易手术台、手术床、手术台、骨科手术台、眼科手术台",
- "检查床、诊疗台、诊疗床",
- "手术辅助照明灯、手术辅助移动式手术照明灯",
- "转运车、医用转移车、病人推车、病人推床、平车、楼梯担架、担架、折叠担架、担架车、车载担架车、铲式担架、救护车担架、抢救床",
- "浮标式氧气吸入器、墙式氧气吸入器、手提式氧气吸入器、供氧系统氧气吸入器",
- "机械牙科椅、简易牙科椅、轻便牙科椅",
- "牙医师座椅、医师椅",
- "牙科电动抽吸机、牙科电动抽吸系统",
- "牙科电动空压机、牙科电动无油空压机",
- "水枪头、热气枪头",
- "吸唾管",
- "抛光杯",
- "银汞胶囊调合器、银汞合金调合器、银汞调合器",
- "口腔灯、口腔照明灯",
- "口腔观察仪",
- "体外牙胶加热器",
- "平型病床、医用平床、普通病床",
- "手动病床、手摇式病床、手摇式二折病床、手摇式三折病床",
- "婴儿/新生儿床、母婴床、儿童病床",
- "充气防褥疮床垫、防褥疮气床垫",
- "病人转移板、移动滑垫、病人转移垫、电动移位机/车",
- "医用清洗机、超声波清洗机、超声波清洗器、医用超声波清洗机、内镜清洗机、超声清洗器",
- "医用冷敷贴、医用降温贴、医用退热贴",
- "医用冰袋、医用冰垫、医用冰帽、医用冷敷头带、医用冷敷眼罩",
- "吸潮纸尖",
- "咬合纸",
- "基托蜡、铸造蜡、预成型蜡、模型蜡、间接嵌体蜡、代型材料、牙科石膏",
- "石膏铸造包埋材料、磷酸盐铸造包埋材料、硅胶包埋材料、铸钛包埋材料、模型包埋材料",
- "牙科分离剂",
- "琼脂复制材料、硅橡胶复制材料、藻酸盐复制材料",
- "菌斑指示剂、菌斑显示液",
- "研磨材料、牙科用研磨材料",
- "刷手衣、洗手衣",
- "检查手套、检查指套、卫生帽、护士帽",
- "石膏衬垫",
- "聚酯衬垫、冷敷隔离垫",
- "妇科检查垫、医用护理垫(看护垫)",
- "医用检查垫",
- "医用体位胶垫",
- "急救毯",
- "脱脂棉球、消毒刷(擦拭器)、棉签、棉片",
- "弹性创可贴、防水创可贴、棉布创可贴、透气创可贴、橡皮膏、创口贴",
- "弹性绷带、弹力绷带、纱布绷带、无纺布绷带、三角绷带、高分子固定绷带、玻璃纤维绷带、聚酯纤维绷带、聚氨酯衬垫绷带",
- "压敏胶带、透气胶贴(非织造布胶带)、透气胶带、弹性胶带、网纹易撕胶带、绑扎胶布、弹性柔棉宽胶带、丝绸布胶带、聚乙烯胶带",
- "压力绷带、乳腺压力绷带、腹股沟压力绷带、腹带",
- "卡扣式止血带",
- "疝气带",
- "引流袋、吸液袋、负压引流器、负压引流(吸引)接管、集尿袋、尿套",
- "医用导管夹",
- "造口袋、肛门袋、造口腰带、裤形造口绷带",
- "咬口、口垫、咬嘴",
- "洗耳球、医用洗耳球、塑料洗耳球、橡胶洗耳球",
- "医用阴道洗涤器、医用阴道冲洗器",
- "髋膝踝足截瘫行走支具",
- "造口灌洗器",
- "测瓣器",
- "医用打印胶片",
- "医用干式胶片",
- "一次性雾化吸入管",
- "四面镜",
- "斜视检查镜",
- "手背静脉显像仪",
- "打磨抛光组件",
- "倒像镜及装置",
- "移动式X射线检查支架",
- "",
- "血压袖套(带)",
- "自动血涂片制备仪",
- "护牙弯角",
- "孵育器",
- "持钉器",
- "医疗废液收集装置:",
- "超声治疗固定贴",
- "医用超声耦合贴片",
- "X线摄片乳头定位贴",
- "",
- "医学图像体外定位贴",
- "",
- "显影胶带",
- "",
- "一次性使用三用喷枪头",
- "踝关节无创牵引系统",
- "血管显像仪",
- "非接触式眼底广角观察镜",
- "咽喉镜",
- "医用胶片打印机",
- "多功能自助取片机:",
- "心电导联线",
- "医用X射线立式摄片架防护装置",
- "X射线防护舱",
- "放疗定位球",
- "超声探头穿刺架",
- "牙钻清洁工具",
- "隔离透声膜",
- "冲洗液袋用压力器",
- "供氧系统氧气吸入器",
- "支撑喉镜",
- "医用X射线悬挂防护服装置",
- "移动式床旁X射线机防护装置",
- "电动遥控式医用X射线立式摄片架防护装置",
- "视力表投影仪",
- "结扎缝合引线器",
- "肌腱套取器",
- "气管扩张钳",
- "拆钉钳",
- "异物钳",
- "微创手术扩张钳",
- "一次性使用敷料镊",
- "显微血管吻合牵线夹",
- "卷棉子",
- "虹膜刀",
- "截囊刀",
- "角巩膜缘切开刀",
- "劈核刀",
- "眼球摘出剪",
- "视网膜剥离镊",
- "眼用四面镜夹持镊",
- "眼科前房用针",
- "截囊钩",
- "视网膜铲",
- "人工晶体辅助植入器",
- "巩膜塞",
- "巩膜压迫器",
- "眼科微型器械手柄",
- "角膜标记环",
- "白内障手术切口测量尺",
- "咽喉部脓疱切开器",
- "乳突咬骨钳",
- "耳止血钳",
- "镫骨钳",
- "鼻异物钳",
- "喉异物钳",
- "气管导管夹持钳",
- "内耳手术剥离针",
- "耳刮匙",
- "鼻刮匙",
- "外耳道扩张器",
- "喉扩张器",
- "乳突器械敲击锤",
- "耳息肉圈断器",
- "扁桃体圈断器",
- "鼻骨复位器",
- "喉显微手术器械手柄",
- "牙科器械钳",
- "牙科钛板(网)",
- "针孔镊",
- "成形片",
- "成形片夹",
- "楔子",
- "楔形保护片",
- "转移帽",
- "牙科祛腐工作尖",
- "根管中器械取出器",
- "牙科种植体种植工具",
- "口腔麻醉注射架(不含针头",
- "旋入扳手",
- "自锁托槽开启工具",
- "托槽定位器",
- "方丝弓成型器",
- "方丝扭转器",
- "颌面外科钛板定位器",
- "颌面外科手术颊部穿通器",
- "微创手术用胆总管切开刀",
- "引导棒",
- "颈椎前路手术定位针",
- "髓内定位杆",
- "膝关节植入物试模",
- "股骨试模",
- "膝关节间隙评估块",
- "膝关节伸直间隙评估片",
- "胫骨冲头",
- "胫骨冲头导板",
- "截骨板",
- "对线杆",
- "股骨测定导板",
- "胫骨截骨定位工具",
- "股骨截骨定位工具",
- "对线手柄",
- "固定平台胫骨托试模",
- "膝关节骨撬",
- "膝关节手术用打击器",
- "关节假体夹持器",
- "上肢关节骨撬",
- "髋关节骨撬",
- "膝关节手术通用手柄",
- "快装手柄",
- "指骨夹板",
- "上/下肢医用外固定支具",
- "颈椎固定带",
- "腰椎固定带",
- "子宫深度测量棒",
- "输卵管提取钩",
- "注射助推器(不含注射器",
- "盆底肌肉康复器",
- "热塑固定板",
- "外科手术固定装置",
- "一次性使用捆扎止血带",
- "硬膜外穿刺体位约束带",
- "口腔正畸用反光镜",
- "牙科用毛刷",
- "造口减压环",
- "造口凸面嵌圈",
- "口腔撑开器",
- "非封闭式负压引流装置产品",
- "医用冲洗头",
- "肛门冲洗器",
- "一次性使用口腔涂药棒",
- "制片染色一体机",
- "细胞分离制片染色一体机",
- "试剂卡孵育器",
- "细胞过滤采集器",
- "组织微阵列制作仪",
- "标本液化处理仪",
- "全自动推片染片系统",
- "粪便检验预处理装置",
- "一次性使用微量采血吸管",
- "细胞过滤器",
- "一次性使用细胞过滤采集器",
- "马镫形多功能腿架",
- "飞秒透镜分离铲",
- "飞秒透镜镊",
- "飞秒分离匙",
- "位置定位器",
- "钻针深度停止器",
- "钻针引导器",
- "骨磨引导器",
- "一次性使用胃镜咬口",
- "种植体扫描体",
- "机用螺丝刀",
- "胸腰骶固定器",
- "一次性五官科清洗套装",
- "自助取片机",
- "热敏胶片",
- "超声波清洗机",
- }
- arr2 := []string{
- "手术器械-刀",
- "手术器械-刀",
- "手术器械-其他器械",
- "手术器械-刀",
- "手术器械-剪",
- "手术器械-剪",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-吻(缝)合器械及材料",
- "手术器械-钳",
- "手术器械-镊",
- "手术器械-针",
- "手术器械-针",
- "手术器械-针",
- "手术器械-针",
- "手术器械-针",
- "手术器械-钩",
- "手术器械-牵开器",
- "手术器械-刮匙",
- "手术器械-穿刺导引器",
- "手术器械-剥离器",
- "手术器械-冲吸器",
- "手术器械-刀",
- "手术器械-剪",
- "手术器械-钳",
- "手术器械-镊",
- "手术器械-夹",
- "手术器械-针",
- "手术器械-冲吸器",
- "手术器械-钩",
- "手术器械-冲吸器",
- "手术器械-剥离器",
- "神经和心血管手术器械-钳",
- "神经和心血管手术器械-牵开器",
- "骨科用钩",
- "外固定及牵引器械",
- "神经和心血管手术器械-穿刺导引器",
- "神经和心血管手术器械-其他器械",
- "神经和心血管手术器械-穿刺导引器",
- "神经和心血管手术器械-牵开器",
- "神经和心血管手术器械-其他器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源辅助手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源辅助手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科治疗和手术设备、辅助器具",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源辅助手术器械",
- "眼科无源辅助手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源辅助手术器械",
- "眼科无源辅助手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源辅助手术器械",
- "眼科无源手术器械",
- "手术器械-刀",
- "手术器械-凿",
- "手术器械-剪",
- "手术器械-剪",
- "手术器械-剪",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-其他器械",
- "手术器械-钳",
- "手术器械-镊",
- "手术器械-钩",
- "手术器械-针",
- "手术器械-牵开器",
- "手术器械-牵开器",
- "手术器械-冲吸器",
- "手术器械-剥离器",
- "手术器械-其他器械",
- "手术器械-凿",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔植入及组织重建材料",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔诊察器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔诊察器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "神经和心血管手术器械-刀",
- "神经和心血管手术器械-剪",
- "神经和心血管手术器械-钳",
- "神经和心血管手术器械-钳",
- "神经和心血管手术器械-夹",
- "神经和心血管手术器械-镊",
- "神经和心血管手术器械-钩",
- "手术器械-剥离器",
- "骨科其他手术器械",
- "神经和心血管手术器械-其他器械",
- "手术器械-剪",
- "手术器械-钳",
- "手术器械-吻(缝)合器械及材料",
- "手术器械-钳",
- "手术器械-钩",
- "手术器械-针",
- "手术器械-牵开器",
- "手术器械-刮匙",
- "手术器械-钳",
- "手术器械-冲吸器",
- "手术器械-牵开器",
- "手术器械-牵开器",
- "手术器械-牵开器",
- "手术器械-剪",
- "手术器械-剪",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-针",
- "手术器械-钩",
- "手术器械-牵开器",
- "手术器械-其他器械",
- "手术器械-夹",
- "清洗、灌洗、吸引、给药器械",
- "清洗、灌洗、吸引、给药器械",
- "骨科用刀",
- "骨科用刀",
- "创伤外科辅助器械",
- "骨科用刀",
- "骨科用锥",
- "骨科用锥",
- "基础通用辅助器械",
- "骨科用钻",
- "骨科用钻",
- "神经和心血管手术器械-穿刺导引器",
- "骨科用钻",
- "骨科用钻",
- "骨科用钻",
- "骨科用钻",
- "骨科用剪",
- "骨科用剪",
- "骨科用剪",
- "骨科用钳",
- "骨科用钳",
- "骨科用钳",
- "骨科用钳",
- "骨科用钳",
- "骨科用钳",
- "外固定及牵引器械",
- "骨科用锯",
- "骨科用锯",
- "骨科用锯",
- "骨科用锯",
- "骨科用锯",
- "骨科用凿",
- "骨科用锉、铲",
- "骨科用锉、铲",
- "骨科用钩",
- "骨科用钩",
- "骨科用钩",
- "骨科用钩",
- "骨科用针",
- "骨科用针",
- "骨科用针",
- "骨科用针",
- "骨科用刮",
- "骨科其他手术器械",
- "骨科用有源器械",
- "基础通用辅助器械",
- "创伤外科辅助器械",
- "关节外科辅助器械",
- "骨科用锯",
- "基础通用辅助器械",
- "创伤外科辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "外固定及牵引器械",
- "创伤外科辅助器械",
- "外固定及牵引器械",
- "外固定及牵引器械",
- "创伤外科辅助器械",
- "基础通用辅助器械",
- "创伤外科辅助器械",
- "创伤外科辅助器械",
- "创伤外科辅助器械",
- "创伤外科辅助器械",
- "脊柱外科辅助器械",
- "外固定及牵引器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "骨科其他手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科测量、监护设备",
- "手术器械-针",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科测量、监护设备",
- "妊娠控制器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妇产科诊断器械",
- "妇产科手术器械",
- "妇产科手术器械",
- "妊娠控制器械",
- "妊娠控制器械",
- "妊娠控制器械",
- "妇产科手术器械",
- "妇产科诊断器械",
- "血管内输液器械",
- "注射、穿刺器械",
- "手术器械-刀",
- "手术器械-凿",
- "手术器械-钳",
- "手术器械-镊",
- "手术器械-夹",
- "手术器械-其他器械",
- "手术器械-剥离器",
- "手术器械-钩",
- "手术器械-其他器械",
- "手术器械-穿刺导引器",
- "手术器械-刮匙",
- "手术器械-穿刺导引器",
- "诊察辅助器械",
- "诊察辅助器械",
- "诊察辅助器械",
- "诊察辅助器械",
- "视光设备和器具",
- "视光设备和器具",
- "视光设备和器具",
- "视光设备和器具",
- "诊察辅助器械",
- "诊察辅助器械",
- "光学成像诊断设备",
- "超声影像诊断附属设备",
- "中医器具",
- "中医器具",
- "中医器具",
- "X射线影像接收处理装置",
- "图像显示、处理、传输及打印设备",
- "X射线影像接收处理装置",
- "X射线影像接收处理装置",
- "X射线影像接收处理装置",
- "X射线附属及辅助设备",
- "X射线附属及辅助设备",
- "图像显示、处理、传输及打印设备",
- "X射线附属及辅助设备",
- "X射线附属及辅助设备",
- "X射线附属及辅助设备",
- "X射线附属及辅助设备",
- "放射治疗配套器械",
- "X射线附属及辅助设备",
- "医用射线防护设备",
- "医用射线防护设备",
- "医用射线防护设备",
- "其他医用分析设备",
- "样本分离设备",
- "采样设备和器具",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "样本分离设备",
- "呼吸、麻醉、急救设备辅助装置",
- "妇产科承载器械",
- "手术台",
- "诊疗台",
- "手术照明设备",
- "患者转运器械",
- "呼吸、麻醉、急救设备辅助装置",
- "口腔治疗设备",
- "口腔治疗设备",
- "口腔治疗设备",
- "口腔治疗设备",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗设备",
- "口腔诊察设备",
- "口腔诊察设备",
- "口腔治疗设备",
- "医用病床",
- "医用病床",
- "医用病床",
- "防压疮(褥疮)垫",
- "患者转运器械",
- "清洗消毒设备",
- "温热(冷)治疗设备/器具",
- "温热(冷)治疗设备/器具",
- "口腔治疗辅助材料",
- "口腔治疗辅助材料",
- "口腔治疗辅助材料",
- "口腔治疗辅助材料",
- "口腔治疗辅助材料",
- "口腔治疗辅助材料",
- "其他口腔材料",
- "口腔治疗辅助材料",
- "手术室感染控制用品",
- "医护人员防护用品",
- "外固定及牵引器械",
- "病人护理防护用品",
- "妇产科手术器械",
- "病人护理防护用品",
- "防压疮(褥疮)垫",
- "其它器械",
- "其它器械",
- "创面敷料",
- "包扎敷料",
- "包扎敷料",
- "其它器械",
- "止血器具",
- "矫形固定器械",
- "与非血管内导管配套用体外器械",
- "其它器械",
- "造口、疤痕护理用品",
- "内窥镜辅助用品",
- "清洗、灌洗、吸引、给药器械",
- "妇产科手术器械",
- "助行器械",
- "造口、疤痕护理用品",
- "神经和心血管手术器械-其他器械",
- "图像显示、处理、传输及打印设备",
- "图像显示、处理、传输及打印设备",
- "呼吸、麻醉用管路、面罩",
- "眼科测量诊断设备和器具",
- "眼科测量诊断设备和器具",
- "其它器械",
- "口腔治疗器具",
- "眼科测量诊断设备和器具",
- "X射线附属及",
- "辅助设备",
- "附件、耗材",
- "形态学分析前样本处理设备",
- "口腔治疗器具",
- "培养与孵育设备",
- "口腔治疗器具",
- "与非血管内导管配套用体外器械",
- "超声治疗设备",
- "超声影像诊断附属设备",
- "X射线附属及",
- "辅助设备",
- "X射线附属及",
- "辅助设备",
- "X射线附属及",
- "辅助设备",
- "口腔治疗器具",
- "外固定及牵引器械",
- "其它器械",
- "口腔充填修复材料",
- "诊察辅助器械",
- "图像显示、处理、传输及打印设备",
- "图像显示、处理、传输及打印设备",
- "附件、耗材",
- "医用射线防护设备",
- "医用射线防护设备",
- "放射治疗配套器械",
- "超声影像诊断附属设备",
- "清洗消毒设备",
- "超声治疗设备",
- "与非血管内导管配套用体外器械",
- "呼吸、麻醉、急救设备辅助装置",
- "诊察辅助器械",
- "医用射线防护设备",
- "医用射线防护设备",
- "医用射线防护设备",
- "口腔治疗设备",
- "手术器械-其他器械",
- "手术器械-其他器械",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-镊",
- "手术器械-夹",
- "手术器械-其他器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科植入物及辅助器械",
- "眼科无源辅助手术器械",
- "眼科无源辅助手术器械",
- "眼科无源辅助手术器械",
- "眼科无源辅助手术器械",
- "眼科无源辅助手术器械",
- "手术器械-刀",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-钳",
- "手术器械-针",
- "手术器械-刮匙",
- "手术器械-刮匙",
- "手术器械-牵开器",
- "手术器械-牵开器",
- "手术器械-凿",
- "手术器械-其他器械",
- "手术器械-其他器械",
- "手术器械-其他器械",
- "手术器械-其他器械",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗辅助材料",
- "口腔治疗器具",
- "口腔治疗辅助材料",
- "口腔治疗辅助材料",
- "口腔植入及组织重建材料",
- "口腔治疗设备",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "手术器械-刀",
- "手术器械-穿刺导引器",
- "骨科用针",
- "基础通用辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "基础通用辅助器械",
- "关节外科辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "基础通用辅助器械",
- "关节外科辅助器械",
- "关节外科辅助器械",
- "外固定及牵引器械",
- "外固定及牵引器械",
- "外固定及牵引器械",
- "外固定及牵引器械",
- "妇产科测量、监护设备",
- "妊娠控制器械",
- "注射、穿刺器械",
- "运动康复训练器械",
- "放射治疗配套器械",
- "患者位置固定辅助器械",
- "止血器具",
- "患者位置固定辅助器械",
- "口腔诊察器具",
- "口腔治疗器具",
- "造口、疤痕护理用品",
- "造口、疤痕护理用品",
- "手术器械-牵开器",
- "与非血管内导管配套用体外器械",
- "清洗、灌洗、吸引、给药器械",
- "清洗、灌洗、吸引、给药器械",
- "其它器械",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "培养与孵育设备",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "检验及其他辅助设备",
- "形态学分析前样本处理设备",
- "检验及其他辅助设备",
- "采样设备和器具",
- "形态学分析前样本处理设备",
- "形态学分析前样本处理设备",
- "患者位置固定辅助器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "眼科无源手术器械",
- "口腔植入及组织重建材料",
- "口腔治疗器具",
- "口腔治疗器具",
- "口腔治疗器具",
- "内窥镜辅助用品",
- "口腔治疗器具",
- "口腔治疗器具",
- "外固定及牵引器械",
- "外固定及牵引器械",
- "图像显示、处理、传输及打印设备",
- "图像显示、处理、传输及打印设备",
- "清洗消毒设备",
- }
- for k, v := range arr1 {
- arr := strings.Split(v, "、")
- for _, v1 := range arr {
- info[v1] = arr2[k]
- }
- }
- log.Debug("加载数量~", len(info))
- return info
- }
- //具体方法
- func calculationYlqxCode(yl_code string) (bool, map[string]interface{}) {
- update := map[string]interface{}{}
- if len(yl_code) == 2 {
- update["product_class_1"] = YlqxCodeName[yl_code]
- } else if len(yl_code) == 4 {
- update["product_class_1"] = YlqxCodeName[yl_code[:2]]
- update["product_class_2"] = YlqxCodeName[yl_code]
- } else if len(yl_code) == 7 {
- update["product_class_1"] = YlqxCodeName[yl_code[:2]]
- update["product_class_2"] = YlqxCodeName[yl_code[:4]]
- update["product_class_3"] = YlqxCodeName[yl_code]
- } else if len(yl_code) == 11 {
- update["product_class_1"] = YlqxCodeName[yl_code[:2]]
- update["product_class_2"] = YlqxCodeName[yl_code[:4]]
- update["product_class_3"] = YlqxCodeName[yl_code[:7]]
- update["product_class_4"] = YlqxCodeName[yl_code]
- } else {
- return false, update
- }
- update["product_class_code"] = yl_code
- return true, update
- }
- func calculationYlqxScRange(company string, old_class string, old_name string) ([]map[string]interface{}, []string) {
- dataArr, _ := Save_Mgo.Find("nmpa_company_new", bson.M{"company": company}, nil, bson.M{"product_range": 1})
- infoArr := []map[string]interface{}{}
- codeArr := []string{}
- for _, v := range dataArr {
- product_range := qu.ObjToString(v["product_range"])
- matchArr1 := ScRangeReg1.FindAllString(product_range, -1)
- if len(matchArr1) > 0 {
- for _, v1 := range matchArr1 {
- name := ScRangeReg1.ReplaceAllString(v1, "${4}")
- name = ScRangeClean1.ReplaceAllString(name, "")
- name = ScRangeClean2.ReplaceAllString(name, "")
- b, res := calculationYlqxCode(YlqxNameCode[name])
- //根据结果校验一下,是否有效合理
- if b && checkYlqxInfoRight(res, old_class, old_name) {
- infoArr = append(infoArr, res)
- codeArr = append(codeArr, YlqxNameCode[name])
- }
- }
- } else {
- matchArr2 := ScRangeReg2.FindAllString(product_range, -1)
- for _, v1 := range matchArr2 {
- if strings.Contains(v1, "分类目录") {
- continue
- }
- name := ScRangeReg2.ReplaceAllString(v1, "${2}")
- name = ScRangeClean1.ReplaceAllString(name, "")
- name = ScRangeClean2.ReplaceAllString(name, "")
- b, res := calculationYlqxCode(YlqxNameCode[name])
- //根据结果校验一下,是否有效合理
- if b && checkYlqxInfoRight(res, old_class, old_name) {
- infoArr = append(infoArr, res)
- codeArr = append(codeArr, YlqxNameCode[name])
- }
- }
- }
- }
- //进行有效结果去重
- infoArr, codeArr, _ = resultRepeat(infoArr, codeArr, nil)
- //进行有效结果合并
- infoArr, codeArr, _ = resultMerge(infoArr, codeArr, nil)
- return infoArr, codeArr
- }
- func resultRepeat(infos []map[string]interface{}, codes []string, matchs []string) ([]map[string]interface{}, []string, []string) {
- new_infos := []map[string]interface{}{}
- new_codes := []string{}
- new_matchs := []string{}
- temp := map[string]string{}
- for k, v := range infos {
- c1, c2 := qu.ObjToString(v["product_class_1"]), qu.ObjToString(v["product_class_2"])
- c3, c4 := qu.ObjToString(v["product_class_3"]), qu.ObjToString(v["product_class_4"])
- key := c1 + "~" + c2 + "~" + c3 + "~" + c4 + "~"
- if temp[key] == "" {
- new_infos = append(new_infos, v)
- new_codes = append(new_codes, codes[k])
- if matchs != nil && len(matchs) > 0 {
- new_matchs = append(new_matchs, matchs[k])
- }
- temp[key] = key
- }
- }
- return new_infos, new_codes, new_matchs
- }
- func resultMerge(infoArr []map[string]interface{}, codeArr []string, matchArr []string) ([]map[string]interface{}, []string, []string) {
- new_infos := []map[string]interface{}{}
- new_codes := []string{}
- new_matchs := []string{}
- for k, v := range codeArr {
- isValid := true
- l := utf8.RuneCountInString(v)
- for k1, v1 := range codeArr {
- if k == k1 {
- continue
- }
- l1 := utf8.RuneCountInString(v1)
- if l1 > l {
- if v1[:l] == v {
- isValid = false
- break
- }
- }
- }
- if isValid {
- new_infos = append(new_infos, infoArr[k])
- new_codes = append(new_codes, codeArr[k])
- if matchArr != nil && len(matchArr) > 0 {
- new_matchs = append(new_matchs, matchArr[k])
- }
- }
- }
- return new_infos, new_codes, new_matchs
- }
- func checkYlqxInfoRight(res map[string]interface{}, class string, name string) bool {
- if class != "" {
- if qu.ObjToString(res["product_class_1"]) != class {
- return false
- } else {
- if qu.ObjToString(res["product_class_2"]) == "" {
- return false
- }
- }
- }
- if SpecRangeReg.MatchString(name) {
- if qu.ObjToString(res["product_class_1"]) != "体外诊断试剂" {
- return false
- }
- }
- return true
- }
- func checkYlqxResultRightFourth(resArr []map[string]interface{}, codeArr []string, old_class string) (bool, map[string]interface{}, string) {
- if len(resArr) == 0 {
- return false, map[string]interface{}{}, ""
- }
- if len(resArr) == 1 {
- return true, resArr[0], codeArr[0]
- }
- if old_class != "" {
- return false, map[string]interface{}{}, ""
- }
- return false, map[string]interface{}{}, ""
- }
- func checkYlqxResultRightSeventh(resArr []map[string]interface{}, codeArr []string, matchArr []string, old_class string) (bool, map[string]interface{}, string) {
- if len(resArr) == 0 {
- return false, map[string]interface{}{}, ""
- }
- if len(resArr) == 1 {
- return true, resArr[0], codeArr[0]
- }
- //取最大配词
- if index := getMaxLengthMatchName(matchArr); index > -1 {
- return true, resArr[index], codeArr[index]
- }
- //取最大一级类别
- if old_class != "" {
- return false, map[string]interface{}{}, ""
- }
- if new_class := getMaxFirstClassName(resArr); new_class != "" {
- code := YlqxNameCode[new_class]
- return true, map[string]interface{}{"product_class_1": new_class, "product_class_code": code}, code
- }
- return false, map[string]interface{}{}, ""
- }
- func getMaxFirstClassName(resArr []map[string]interface{}) string {
- infos := map[string]int{}
- for _, v := range resArr {
- key := qu.ObjToString(v["product_class_1"])
- num := qu.IntAll(infos[key])
- infos[key] = num + 1
- }
- new_class := ""
- info_count := 0
- for k, v := range infos {
- if v > info_count {
- new_class = k
- info_count = v
- } else if v == info_count {
- new_class = ""
- } else {
- }
- }
- return new_class
- }
- func getMaxLengthMatchName(matchArr []string) int {
- //取长度最长的词
- match_count := 0
- match_index := -1
- for k, v := range matchArr {
- l := utf8.RuneCountInString(v)
- if l > match_count {
- match_index = k
- match_count = l
- } else if l == match_count {
- match_index = -1
- } else {
- }
- }
- return match_index
- }
- func flagTagLog(flag string, tag string) string {
- if flag == "" {
- return tag
- }
- return flag + "," + tag
- }
- //拆分合并医疗产品与企业信息
- func splitMergeMedicalInfo(coll string) {
- sess := Old_Mgo.GetMgoConn()
- defer Old_Mgo.DestoryMongoConn(sess)
- q, total := map[string]interface{}{}, 0
- it := sess.DB(Old_Mgo.DbName).C(coll).Find(&q).Sort("_id").Iter()
- for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
- if total%10000 == 0 {
- log.Debug("cur index ", total)
- }
- classify := qu.ObjToString(tmp["classify"])
- reg_no := qu.ObjToString(tmp["reg_no"])
- if reg_no == "" { //异常数据
- tmp = make(map[string]interface{})
- continue
- }
- if classify == "医疗器械生产企业(许可)" || classify == "医疗器械生产企业(备案)" ||
- classify == "医疗器械经营企业(许可)" || classify == "医疗器械经营企业(备案)" {
- company := qu.ObjToString(tmp["company"])
- if company != "" {
- if companyTemp[reg_no] == "" {
- companyTemp[reg_no] = company
- Save_Mgo.Save("nmpa_company_new", tmp)
- }
- }
- } else {
- product_name := qu.ObjToString(tmp["product_name"])
- if product_name != "" {
- if productTemp[reg_no] == "" {
- productTemp[reg_no] = product_name
- Save_Mgo.Save("nmpa_product_new", tmp)
- }
- }
- }
- tmp = make(map[string]interface{})
- }
- log.Debug("is over ", total)
- }
|