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)
}
