-- Table structure for table `KuaiDiSender`
--

CREATE TABLE `KuaiDiSender` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL DEFAULT '',
  `phone` char(11) NOT NULL DEFAULT '0',
  `sum` int(11) NOT NULL DEFAULT 0,
  `date` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=615 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `KuaiDiSender`
--

INSERT INTO `KuaiDiSender` VALUES
(1,'覃艳奎','13926851468',64,'2024-02-29'),
(2,'春春','13788287721',72,'2024-02-29'),
(3,'覃留连','18377832036',182,'2024-02-29'),
(4,'覃曼林','15296051635',26,'2024-02-29'),
(5,'覃日晓','15177395725',26,'2024-02-29'),
(6,'韦凤皖','15924223049',10,'2024-02-29'),
(7,'小莫','17377050484',12,'2024-02-29'),
(8,'韦善告','13132786495',153,'2024-02-29'),
(9,'覃应果','13377492599',5,'2024-02-28'),
(10,'覃白暖','15577834133',6,'2024-02-27'),
(11,'覃素玲','19116769639',8,'2024-02-27'),
(12,'善兰','18176198641',70,'2024-02-27'),
(13,'覃世安','13132708130',14,'2024-02-27'),
(14,'覃艳妹','18776837649',32,'2024-02-27'),
(15,'覃壮豪','13097785663',140,'2024-02-27'),
(16,'韦秀欢','19877866207',115,'2024-02-27'),
(17,'莫白研','18277864629',27,'2024-02-26'),
(18,'覃甲杏','13471840423',45,'2024-02-26'),
(19,'覃艳玲','15099761357',30,'2024-02-25'),
(20,'吕晨曦','18477820878',1,'2024-02-25'),
(21,'覃贺生','14707782309',33,'2024-02-25'),
(22,'莫耐桃','13377382669',109,'2024-02-25'),
(23,'覃明莉','19994454864',19,'2024-02-25'),
(24,'莫白纺','18278802693',80,'2024-02-25'),
(25,'覃美生','19177836225',49,'2024-02-25'),
(26,'覃女士','19178872606',11,'2024-02-25'),
(27,'覃灵敢','18377824674',4,'2024-02-23'),
(28,'覃文武','18587833806',4,'2024-02-23'),
(29,'文博','13557182767',4,'2024-02-23'),
(30,'覃顺','18776825828',7,'2024-02-23'),
(31,'覃庆周','13377382802',8,'2024-02-23'),
(32,'韦萌萌','13557011259',1,'2024-02-23'),
(33,'覃纯宁','15058592100',64,'2024-02-22'),
(34,'覃飞达','13265464395',7,'2024-02-22'),
(35,'覃扬开','18776844329',39,'2024-02-22'),
(36,'陆惠纯','13132788150',195,'2024-02-22'),
(37,'覃燕妍','15007889341',20,'2024-02-22'),
(38,'覃扬芝','15007889780',5,'2024-02-22'),
(39,'覃文妹','18277860580',8,'2024-02-22'),
(40,'覃江婵','18820315815',48,'2024-02-22'),
(41,'覃幸群','13407792110',6,'2024-02-21'),
(42,'覃建','13958870483',7,'2024-02-20'),
(43,'覃玲曼','18077891446',25,'2024-02-20'),
(44,'覃汝满','18377831296',11,'2024-02-20'),
(45,'覃克孟','18877814862',16,'2024-02-20'),
(46,'覃美团','13737971423',39,'2024-02-20'),
(47,'覃日田','18377821672',2,'2024-02-20'),
(48,'覃纯班','18776849088',4,'2024-02-20'),
(49,'覃顺纳','18775820599',3,'2024-02-20'),
(50,'春岚','15777874719',68,'2024-02-20'),
(51,'兰锦','19994538776',111,'2024-02-20'),
(52,'覃艺鲜','18357561983',3,'2024-02-20'),
(53,'老快','13481840197',101,'2024-02-20'),
(54,'覃寒义','15277867105',29,'2024-02-20'),
(311,'覃冠达','15677817648',154,'2024-12-08'),
(56,'陈胤池','13922190580',15,'2024-02-19'),
(57,'谢嘉震','13802730818',13,'2024-02-19'),
(58,'杨静静','13600001762',10,'2024-02-19'),
(59,'覃顶红','18176195617',48,'2024-02-19'),
(60,'覃启革','19907887498',66,'2024-02-02'),
(61,'覃赞平','15078649643',62,'2024-02-02'),
(62,'苗苗','13481842753',11,'2024-02-02'),
(63,'覃在团','13132787653',32,'2024-02-02'),
(64,'覃仁杰','13517583337',139,'2024-02-02'),
(65,'覃永志','13587332285',446,'2024-01-31'),
(66,'覃艳玲','13100587358',4,'2024-01-31'),
(67,'曼芝','18858577067',245,'2024-01-31'),
(68,'韦金玉','18377820556',1,'2024-01-31'),
(69,'覃程叶','15177884583',16,'2024-01-31'),
(70,'覃欢','15676827656',5,'2024-01-31'),
(71,'覃永生','13768489937',21,'2024-01-30'),
(72,'肥妹','15977822089',15,'2024-01-30'),
(73,'覃雨畅','15078585904',1,'2024-01-30'),
(74,'覃苏源','13407795616',23,'2024-01-30'),
(75,'覃晚科','13802380495',8,'2024-01-30'),
(76,'崖往','18070824596',62,'2024-01-30'),
(77,'覃佳佳','15677802291',56,'2024-01-30'),
(78,'覃茂鲜','15977853575',20,'2024-01-30'),
(79,'覃小东','15078859339',5,'2024-01-30'),
(80,'韦桂凤','13677787974',28,'2024-01-29'),
(81,'邓玉珍','13527182750',7,'2024-01-29'),
(82,'薛崇飞','13316635138',4,'2024-01-29'),
(83,'吴晓','13901236694',35,'2024-01-29'),
(84,'欧阳','18627802782',5,'2024-01-29'),
(85,'覃顺勇','15230928756',1,'2024-01-29'),
(86,'覃春妹','17754780900',2,'2024-01-29'),
(87,'覃鲁俊','17328354050',296,'2024-01-29'),
(88,'杨克峰','13810189297',12,'2024-01-29'),
(89,'李为民','13977159417',2,'2024-01-29'),
(90,'莫雪丽','15778825027',2,'2024-01-29'),
(91,'莫中峰','15296051081',25,'2024-01-29'),
(92,'韦旦','18977825018',5,'2024-01-28'),
(93,'覃炳立','13481842826',38,'2024-01-28'),
(94,'现军','18148712559',35,'2024-01-28'),
(95,'凤端','18278801726',31,'2024-01-27'),
(96,'刘再茂','18977823666',24,'2024-01-27'),
(312,'周锡钱','13113117010',1,'2024-12-08'),
(98,'盼盼','15677877178',7,'2024-01-27'),
(99,'韦小纯','15977892590',14,'2024-01-26'),
(100,'覃正佳','13977897201',15,'2024-01-26'),
(101,'兰花秀','15977848977',4,'2024-01-26'),
(102,'覃文生','18977896285',3,'2024-01-25'),
(103,'黄明文','15296866190',14,'2024-01-25'),
(104,'莫壮媚','15078649831',17,'2024-01-25'),
(105,'覃万福','15277877960',3,'2024-01-25'),
(106,'韦善告','15707784095',4,'2024-01-25'),
(107,'廖漫转','13481836932',2,'2024-01-25'),
(108,'韦金云','18877880582',13,'2024-01-25'),
(109,'覃河念','18178899093',64,'2024-01-25'),
(110,'奶多','17777930357',84,'2024-01-25'),
(111,'覃顺合','18377823956',57,'2024-01-24'),
(112,'孟川','19802506780',48,'2024-01-24'),
(113,'莫荣顺','13877879760',4,'2024-01-24'),
(114,'莫正月','19127228086',39,'2024-01-24'),
(115,'潘浩锐','18077805511',25,'2024-01-24'),
(116,'莫五妹','15878848853',4,'2024-01-24'),
(117,'郭建东','13084103168',4,'2024-01-23'),
(118,'覃秋云','13471861755',12,'2024-01-23'),
(119,'覃立双','13645940795',15,'2024-01-23'),
(120,'仙先生','15563489901',14,'2024-01-23'),
(121,'莫先生','18074789691',1,'2024-01-23'),
(122,'覃文要','18100208636',10,'2024-01-22'),
(123,'覃素爱','13599735612',2,'2024-01-22'),
(124,'莫白','17758595834',2,'2024-01-22'),
(125,'胡女士','18924601820',3,'2024-01-22'),
(126,'覃会稳','13737957281',4,'2024-01-22'),
(127,'张文方','13591313547',2,'2024-01-22'),
(128,'覃梅','15677886718',6,'2024-01-21'),
(129,'韦丽妮','19127085416',5,'2024-01-21'),
(130,'韦政贵','18077838604',22,'2024-01-21'),
(131,'廖花棉','18977825927',16,'2024-01-20'),
(132,'志姣','13412916553',8,'2024-01-20'),
(133,'廖艳研','19977817145',42,'2024-01-20'),
(134,'覃纯宁','15277899973',22,'2024-01-19'),
(135,'韦礼雪','19977817495',33,'2024-01-19'),
(136,'许姐','18377882906',1,'2024-01-19'),
(137,'覃玲艺','13788083465',2,'2024-01-19'),
(138,'蒙秀金','13560362421',3,'2024-01-19'),
(139,'蒙春霞','13407797077',12,'2024-01-18'),
(140,'罗玲艳','15078578097',64,'2024-01-18'),
(141,'韦壮猛','13481881333',10,'2024-01-17'),
(142,'覃美四','15807884984',5,'2024-01-17'),
(143,'莫壮飞','13481838618',11,'2024-01-17'),
(144,'韦萍','15107886353',6,'2024-01-17'),
(145,'覃愿柳','18176181600',12,'2024-01-17'),
(146,'莫三妹','18977824689',19,'2024-01-16'),
(147,'海风年','15602469807',8,'2024-01-16'),
(148,'覃姗妮','19127083892',10,'2024-01-16'),
(149,'周翠姣','15078093719',21,'2024-01-16'),
(150,'月爱','13687783137',4,'2024-01-16'),
(151,'覃建峰','13481843215',11,'2024-01-16'),
(152,'莫伶伶','15808934696',3,'2024-01-16'),
(153,'覃贤凤','19116760562',5,'2024-01-16'),
(154,'卢覃东','15277872387',12,'2024-01-14'),
(155,'葛修彪','18977868009',10,'2024-01-14'),
(156,'韦燕菊','13471877753',7,'2024-01-14'),
(157,'韦玉盘','18178534114',1,'2024-01-14'),
(158,'覃壮奔','13737992506',1,'2024-01-14'),
(159,'覃美花','18277869629',1,'2024-01-13'),
(160,'覃春现','13788286515',13,'2024-01-13'),
(161,'覃火暖','15078589772',10,'2024-01-12'),
(162,'覃花田','18277866388',3,'2024-01-12'),
(163,'王先生1','15012958083',2,'2024-01-11'),
(164,'覃淑颖','15277862157',69,'2024-01-10'),
(165,'莫爱雪','13481837874',8,'2024-01-10'),
(166,'韦利雪','13237785987',73,'2024-01-09'),
(167,'覃云钊','18602071057',291,'2024-01-09'),
(168,'覃环恩','13407792421',3,'2024-01-09'),
(169,'莫灵在','18178867817',3,'2024-01-08'),
(170,'覃春燕','19977840945',3,'2024-03-29'),
(171,'覃怡霞','13471860418',203,'2024-03-29'),
(172,'莫满植','19127081376',25,'2024-03-29'),
(173,'覃丽珍','17878876170',120,'2024-03-29'),
(174,'覃先生','18676502006',38,'2024-03-28'),
(175,'覃叶弯','13434579787',17,'2024-03-28'),
(176,'飞飞','18277861108',1,'2024-03-28'),
(177,'韦凤才','18877883935',26,'2024-03-28'),
(178,'莫会兰','15078586776',5,'2024-03-28'),
(179,'李彦卯','18934929913',6,'2024-03-28'),
(180,'覃善上','13877886365',7,'2024-03-27'),
(181,'覃会安','15078089560',1,'2024-03-27'),
(182,'覃敏','18277860805',106,'2024-03-27'),
(183,'奇缘','19877866992',6,'2024-03-27'),
(184,'覃广平','18775863789',1,'2024-03-27'),
(185,'韦庆柳','15723780993',4,'2024-03-27'),
(186,'周秀寒','18977856017',3,'2024-03-27'),
(187,'叶优','13666083862',14,'2024-03-26'),
(188,'蒙东汉','19127223168',338,'2024-03-26'),
(189,'莫冬菊','18174915196',125,'2024-03-26'),
(190,'覃春梅','13481840269',6,'2024-03-26'),
(191,'覃秀妹','18777854166',4,'2024-03-26'),
(192,'莫香媚','18074893215',4,'2024-03-26'),
(193,'覃慧威','13607786517',2,'2024-03-26'),
(194,'覃孟叶','13558080283',2,'2024-03-25'),
(195,'谭善维','19148657386',64,'2024-03-25'),
(196,'覃胜波','18307883519',1,'2024-03-25'),
(197,'韦忆韩','13397882883',6,'2024-03-25'),
(198,'覃小英','15078645637',19,'2024-03-24'),
(199,'蒙柳娇','13086735516',15,'2024-03-24'),
(200,'覃妮','19194522962',21,'2024-03-24'),
(201,'黄虚','18777855137',5,'2024-03-24'),
(202,'莫桂连','19178873996',24,'2024-03-24'),
(203,'覃美年','15977815137',32,'2024-03-24'),
(204,'覃壮康','18174943425',37,'2024-03-24'),
(205,'覃桂团','13737990970',29,'2024-03-24'),
(206,'覃应军','15977825293',97,'2024-03-24'),
(207,'覃凤云','19127081679',17,'2024-03-24'),
(208,'岑显根','18278811077',12,'2024-03-24'),
(209,'覃春瑾','13717220027',5,'2024-03-24'),
(210,'莫志良','15977892718',5,'2024-03-23'),
(211,'龙云凤','18677841702',14,'2024-03-23'),
(212,'覃月妙','18377826636',2,'2024-03-23'),
(213,'覃灵奔','17777945753',2,'2024-03-23'),
(214,'覃顺妮','18777854669',14,'2024-03-22'),
(215,'覃介美','15878924672',5,'2024-03-22'),
(216,'覃爱玲','17776599286',3,'2024-03-22'),
(217,'覃美玉','19148658206',7,'2024-03-22'),
(218,'覃俊峰','15949330859',32,'2024-03-22'),
(219,'覃汉元','13788388042',2,'2024-03-22'),
(220,'覃在朗','18777854929',14,'2024-03-22'),
(221,'莫羽卉','18077858886',10,'2024-03-22'),
(222,'覃善块','15507784507',14,'2024-03-22'),
(223,'冉彩琼','19130224162',3,'2024-03-22'),
(224,'覃丽雅','15277875933',26,'2024-03-22'),
(225,'覃友兰','15296041494',8,'2024-03-21'),
(226,'农卫凤','15878925909',4,'2024-03-21'),
(227,'覃小岚','13117680446',34,'2024-03-21'),
(228,'覃壮族','18176754075',7,'2024-03-21'),
(229,'覃素娇','18124178986',4,'2024-03-21'),
(230,'周柳飞','18977895737',9,'2024-03-21'),
(231,'黄登汉','18278821272',8,'2024-03-21'),
(232,'覃宇宁','13737975941',1,'2024-03-21'),
(233,'谭兰叶','15277872798',2,'2024-03-21'),
(234,'覃飞雪','18077852956',14,'2024-03-20'),
(566,'蒙灵皱','13607783914',3,'2025-03-30'),
(236,'莫可可','13407791825',78,'2024-03-20'),
(237,'覃懂贫','18278812889',15,'2024-03-20'),
(238,'覃建华','13977802784',3,'2024-03-20'),
(239,'覃誉乾','18074893900',2,'2024-03-19'),
(240,'覃和卫','19178936823',28,'2024-03-19'),
(241,'覃艳芬','15296872756',30,'2024-03-19'),
(242,'覃六妹','18377838395',1,'2024-03-18'),
(243,'覃雅仙','18258083181',4,'2024-03-18'),
(244,'莫飞雪','18934931906',13,'2024-03-18'),
(245,'廖玉桃','17754780908',6,'2024-03-18'),
(246,'覃秀全','15777810679',25,'2024-03-17'),
(247,'覃意顺','15078564468',124,'2024-03-16'),
(248,'老覃','15977907052',4,'2024-03-16'),
(249,'覃永丽','15777868011',20,'2024-03-16'),
(250,'覃杨莉','15977892679',17,'2024-03-16'),
(251,'覃艳引','13968571463',10,'2024-03-15'),
(252,'覃玉鲜','13471860677',4,'2024-03-15'),
(253,'覃柳燕','18070827414',7,'2024-03-14'),
(254,'韦忆韩','13977847983',5,'2024-03-13'),
(255,'覃运惭','19877856612',17,'2024-03-13'),
(256,'覃爱美','18177898497',2,'2024-03-13'),
(257,'覃世共','19907788203',2,'2024-03-12'),
(614,'余小妹','18207886185',1,'2025-04-21'),
(259,'曼雅','19994539630',48,'2024-03-11'),
(260,'龙照滚','19148656809',2,'2024-03-10'),
(261,'覃运杰','18377838173',10,'2024-03-09'),
(262,'覃万水','19994539460',1,'2024-03-09'),
(263,'覃三高','15977893360',4,'2024-03-07'),
(264,'覃晚科','18977868619',32,'2024-03-06'),
(265,'贺香群','13728605897',38,'2024-03-05'),
(266,'覃柳纪','19977840465',3,'2024-03-05'),
(267,'覃彩莲','15977825464',1,'2024-03-04'),
(268,'覃丹','17395753935',7,'2024-03-04'),
(269,'覃金灵','18177883270',32,'2024-03-04'),
(270,'覃慧妮','19192849549',3,'2024-03-01'),
(271,'覃继宁','13481887292',4,'2024-03-01'),
(272,'覃慢卷','18249929076',6,'2024-03-30'),
(273,'莫曼玉','13737992671',3,'2024-03-30'),
(274,'黄华伟','13873204483',45,'2024-03-31'),
(275,'莫可长','18377831315',1,'2024-04-01'),
(276,'覃严松','19377880519',7,'2024-04-01'),
(277,'莫顶侯','13397882142',6,'2024-04-01'),
(278,'韦淋献','15977821089',2,'2024-04-02'),
(279,'覃雪香','15807884034',10,'2024-04-02'),
(280,'覃良玉','15107886021',15,'2024-04-02'),
(281,'莫桂喜','15676850260',13,'2024-04-03'),
(282,'莫柳英','15977824768',13,'2024-04-04'),
(283,'蒙秀鲁','17307782896',2,'2024-04-04'),
(284,'覃霞仙','18777849032',10,'2024-04-06'),
(285,'覃晚研','18977899160',70,'2024-04-06'),
(286,'莫环院','18178882229',2,'2024-04-06'),
(287,'覃善起','15677880665',2,'2024-04-07'),
(288,'覃汝想','15207782938',2,'2024-04-07'),
(289,'覃为秋','15577878776',5,'2024-04-07'),
(290,'覃政标','15078651181',6,'2024-04-07'),
(291,'覃火现','18377824663',13,'2024-04-08'),
(292,'覃春利','19127082210',17,'2024-04-08'),
(293,'覃灵晓','15205702152',13,'2024-04-09'),
(294,'覃纪元','15267563779',4,'2024-04-09'),
(295,'覃英乃','18176193639',2,'2024-04-09'),
(296,'覃益敏','18074789676',2,'2024-04-09'),
(297,'韦孟娟','18357585742',14,'2024-04-09'),
(298,'覃少灵','13977867320',9,'2024-04-11'),
(299,'覃冠西','17776190035',20,'2024-04-11'),
(300,'覃利蓬','13768385300',5,'2024-04-13'),
(301,'覃正克','15577822013',23,'2024-04-15'),
(302,'欧雄桃','15807882451',5,'2024-04-16'),
(303,'覃孝','18278361937',3,'2024-04-16'),
(304,'覃从举','15949332787',1,'2024-04-19'),
(305,'何美','19178936734',1,'2024-04-19'),
(306,'覃彩莲','15120920321',2,'2024-04-20'),
(307,'覃秋平','17776582190',3,'2024-04-21'),
(308,'覃庆明','19977894644',4,'2024-04-21'),
(309,'莫爱娇','18775882240',1,'2024-05-20'),
(310,'覃志敏','15296868873',2,'2024-05-31'),
(313,'覃苏通','17878878119',8,'2024-12-14'),
(314,'钟女士','18775806714',83,'2024-12-15'),
(315,'覃茜柠','15977892019',12,'2024-12-15'),
(316,'何希','15771135876',10,'2024-12-15'),
(317,'廖成','18978281670',10,'2024-12-16'),
(318,'孙成辉','13538614198',1,'2024-12-16'),
(319,'陈雄','18070823509',11,'2024-12-16'),
(320,'收寄点0','18070826105',2,'2024-12-17'),
(321,'覃曼纯','13481841055',3,'2024-12-17'),
(322,'收寄点1','15777832506',17,'2024-12-18'),
(323,'收寄点2','13377382702',19,'2024-12-19'),
(324,'覃耀灯','17878878084',28,'2024-12-19'),
(325,'覃珊','19877087158',10,'2024-12-20'),
(326,'收寄点3','18507787719',2,'2024-12-21'),
(327,'收寄点4','18877815307',1,'2024-12-22'),
(328,'收寄点5','18877881589',59,'2024-12-22'),
(329,'收寄点6','17776582310',6,'2024-12-22'),
(330,'收寄点7','13737991189',7,'2024-12-22'),
(331,'收寄点8','19877859001',2,'2024-12-23'),
(332,'收寄点9','18378310596',34,'2024-12-23'),
(333,'收寄点10','15577821456',11,'2024-12-23'),
(334,'收寄点11','18176740345',2,'2024-12-24'),
(335,'收寄点12','18176197065',3,'2024-12-25'),
(336,'蔡兄','19877087128',5,'2024-12-25'),
(337,'收寄点13','13557882012',9,'2024-12-26'),
(338,'收寄点14','13481836132',9,'2024-12-26'),
(339,'黄黄','13907882481',36,'2024-12-26'),
(340,'收寄点15','13558388698',2,'2024-12-27'),
(341,'莫叶惠','19116763913',2,'2024-12-27'),
(342,'邹','15277877306',61,'2024-12-27'),
(343,'收寄点16','19877087026',12,'2024-12-27'),
(344,'小梁','15277870434',20,'2024-12-28'),
(345,'覃雅婧','18775801181',13,'2024-12-28'),
(346,'收寄点17','13607783974',10,'2024-12-29'),
(347,'收寄点18','19178708113',4,'2024-12-29'),
(348,'夏女士','15078894249',24,'2024-12-29'),
(349,'收寄点19','15107886521',24,'2024-12-30'),
(350,'覃冠达-覃艳林','13265143236',54,'2024-12-31'),
(351,'周翠霞','15078645139',50,'2024-12-31'),
(352,'收寄点21','13558087300',2,'2024-12-31'),
(353,'覃益税','13907787792',23,'2024-12-31'),
(354,'收寄点22','13737976885',8,'2025-01-01'),
(355,'黄兰岸','18377838083',9,'2025-01-02'),
(356,'收寄点24','13687783056',8,'2025-01-02'),
(357,'收寄点25','15677185748',2,'2025-01-03'),
(358,'收寄点26','19952006750',3,'2025-01-03'),
(359,'收寄点27','18377824697',8,'2025-01-03'),
(360,'收寄点28','13735263376',2,'2025-01-04'),
(361,'覃卫科','18277862946',14,'2025-01-04'),
(362,'艳娜','19116762196',15,'2025-01-04'),
(363,'谢红平','19127083082',9,'2025-01-05'),
(364,'傅建江','13676854102',33,'2025-01-05'),
(365,'安大爷','15078589229',11,'2025-01-05'),
(366,'邹文霞','19148651728',1,'2025-01-05'),
(367,'胡胜英','15723780816',3,'2025-01-05'),
(368,'韦茜','18277863336',1,'2025-01-05'),
(369,'美堆','13407793011',38,'2025-01-06'),
(370,'覃喻','15078589301',2,'2025-01-06'),
(371,'林正通','18377828448',9,'2025-01-06'),
(373,'韦雅','18277849073',3,'2025-01-06'),
(374,'莫爱盘','19994539475',4,'2025-01-06'),
(375,'覃小艳','15277862890',111,'2025-01-07'),
(376,'肖佳沁','15977868030',2,'2025-01-08'),
(377,'叶美女','19127225530',4,'2025-01-08'),
(378,'覃叶删','17878872886',27,'2025-01-08'),
(379,'韦乃核','18934933076',20,'2025-01-09'),
(380,'灵优','15977848622',16,'2025-01-10'),
(381,'封国亮','13155880382',3,'2025-01-11'),
(382,'覃愿','19127229226',10,'2025-01-11'),
(383,'覃柱','18177883193',8,'2025-01-11'),
(384,'泽泽','13471868373',47,'2025-01-11'),
(385,'覃正虚','15296871759',4,'2025-01-12'),
(386,'覃乃芬','18807882465',2,'2025-01-12'),
(387,'莫耐运','15777869681',86,'2025-01-12'),
(388,'莫美纯','18775817081',1,'2025-01-12'),
(389,'韦智慧','19194526897',9,'2025-01-12'),
(390,'妈雪','18176193182',37,'2025-01-12'),
(391,'大才覃','18682156996',10,'2025-01-13'),
(392,'覃惠莲','13926155667',25,'2025-01-13'),
(393,'易宝余','18588881060',3,'2025-01-13'),
(394,'Reina','17713621954',3,'2025-01-14'),
(395,'乐乐','13657782681',3,'2025-01-14'),
(396,'文姐','13536363320',6,'2025-01-15'),
(397,'赵女士','18859995936',1,'2025-01-15'),
(398,'莫再令','18707795756',48,'2025-01-15'),
(399,'覃爱兰','15818300178',8,'2025-01-15'),
(400,'覃志才','13114780710',3,'2025-01-15'),
(401,'莫善妮','15257538227',26,'2025-01-16'),
(402,'韦鹏','18776771017',113,'2025-01-16'),
(403,'欧慧群','13977863537',24,'2025-01-16'),
(404,'覃顶','13558388330',5,'2025-01-17'),
(405,'莫红苗','13407791845',9,'2025-01-17'),
(406,'覃灵丘','17878801440',6,'2025-01-17'),
(407,'覃','15978854429',15,'2025-01-17'),
(408,'覃','13877887520',16,'2025-01-17'),
(409,'覃永乐','17707788587',25,'2025-01-17'),
(410,'莫桂选','18775818008',2,'2025-01-17'),
(411,'覃晚区','15878922213',6,'2025-01-17'),
(412,'老覃','18070820320',3,'2025-01-18'),
(413,'覃海堂','18277866146',24,'2025-01-18'),
(414,'兰丽英','18070826690',5,'2025-01-18'),
(415,'覃妮','18278887599',58,'2025-01-18'),
(416,'覃云珊','13868379141',6,'2025-01-18'),
(417,'贺生','13237882880',5,'2025-01-19'),
(418,'韦桂牙','18777852070',6,'2025-01-19'),
(419,'覃','15289644200',1,'2025-01-19'),
(420,'覃秋足','15977849552',7,'2025-01-19'),
(421,'廖','18666371480',5,'2025-01-19'),
(422,'莫壮灯','13677787486',2,'2025-01-19'),
(423,'罗锦华','15277870970',7,'2025-01-19'),
(424,'小谭','18278840621',4,'2025-01-19'),
(425,'莫玉美','15949348718',4,'2025-01-19'),
(426,'覃灵姗','18677888703',2,'2025-01-19'),
(427,'谭美变','13877893140',6,'2025-01-20'),
(428,'覃和彩','15277878095',6,'2025-01-20'),
(429,'刘凡苏','15078646065',2,'2025-01-21'),
(430,'莫雅娟','13930211216',13,'2025-01-21'),
(431,'何','13407784417',10,'2025-01-21'),
(432,'李文锋','18978280731',10,'2025-01-21'),
(433,'安小姐','18249999663',3,'2025-01-22'),
(434,'覃扬义','13667782578',4,'2025-01-22'),
(435,'覃立壮','19178878357',2,'2025-01-22'),
(436,'梁议','17758595556',2,'2025-01-22'),
(437,'覃美佳','13539465862',4,'2025-01-23'),
(438,'刘子赫','15975599706',5,'2025-01-23'),
(439,'傅建文','1508097',1,'2025-01-23'),
(440,'闫灿','19855721732',4,'2025-01-23'),
(441,'妈显','18978280365',1,'2025-02-03'),
(442,'覃介娥','18177881029',3,'2025-02-04'),
(443,'莫由朗','15766479286',3,'2025-02-04'),
(444,'覃春岚','13878105472',2,'2025-02-04'),
(445,'胡海军','15329386708',7,'2025-02-05'),
(446,'女人香','18077838965',2,'2025-02-05'),
(447,'覃泽小','19250587418',1,'2025-02-05'),
(448,'覃海芙','13410584185',5,'2025-02-05'),
(449,'覃善朗','18775802109',7,'2025-02-06'),
(450,'覃爱团','18877814183',3,'2025-02-06'),
(451,'覃美佳','13593465862',3,'2025-02-06'),
(452,'覃善猜','15277872189',6,'2025-02-06'),
(453,'陈平','13454568943',26,'2025-02-06'),
(454,'覃引迷','13714162167',3,'2025-02-06'),
(455,'覃美念','19127083165',6,'2025-02-06'),
(456,'小宗','13408769993',21,'2025-02-07'),
(457,'韦欢珍','19178934113',16,'2025-02-07'),
(458,'覃云聚','17677010206',3,'2025-02-07'),
(459,'家旺','18575294637',5,'2025-02-08'),
(460,'覃蕊','15012490407',2,'2025-02-08'),
(461,'莫','13262805788',3,'2025-02-09'),
(462,'小谢','15813615357',6,'2025-02-09'),
(463,'韦俏妮','18070822204',2,'2025-02-11'),
(464,'覃曼柳','18807882932',2,'2025-02-12'),
(465,'莫彩燕','18977891502',4,'2025-02-12'),
(466,'肖小珍','13097784468',17,'2025-02-12'),
(467,'覃在志','15078589982',55,'2025-02-14'),
(468,'覃志航','19127087756',4,'2025-02-14'),
(469,'覃先生','13777341101',1,'2025-02-15'),
(470,'覃生','18025189979',10,'2025-02-15'),
(471,'莫应转','15918343147',26,'2025-02-16'),
(472,'庞群飞','13557867497',18,'2025-02-17'),
(473,'陆红','13788089205',2,'2025-02-17'),
(474,'覃仁珊','15878838970',3,'2025-02-17'),
(475,'覃白暖','15578771516',12,'2025-02-18'),
(476,'欧慧群','13977863575',1,'2025-02-19'),
(477,'符实妈妈','15879749881',11,'2025-02-20'),
(478,'覃占涛','15707786436',5,'2025-02-20'),
(479,'覃召兴','18178195193',52,'2025-02-21'),
(480,'覃茂丰','15777871569',6,'2025-02-22'),
(481,'覃建凯','13557087930',4,'2025-02-24'),
(482,'覃晓登','19178873591',3,'2025-02-25'),
(483,'覃利姗','19148656550',6,'2025-02-27'),
(484,'覃文磊','18277863909',2,'2025-02-28'),
(485,'覃勇泉','15977894661',3,'2025-02-28'),
(486,'覃环舜','13367882939',1,'2025-02-28'),
(487,'覃会香','13407792476',7,'2025-03-01'),
(488,'妈真','19877856447',5,'2025-03-01'),
(489,'覃飞雪','15638069026',8,'2025-03-02'),
(490,'覃自念','18176741082',1,'2025-03-02'),
(491,'覃应福','18977856130',4,'2025-03-02'),
(492,'覃江婵','13737976652',11,'2025-03-03'),
(493,'覃会用','18176198746',11,'2025-03-04'),
(494,'莫善群','18978769294',4,'2025-03-05'),
(495,'覃素连','19116762670',4,'2025-03-06'),
(496,'莫美幸','13407790715',9,'2025-03-07'),
(497,'覃丽媛','15078316883',1,'2025-03-07'),
(498,'卢三姐','19977894995',7,'2025-03-08'),
(499,'覃春艳','13192640596',64,'2025-03-08'),
(500,'覃飞羽','19127228584',5,'2025-03-08'),
(501,'覃学中','19977841535',25,'2025-03-09'),
(502,'啊梦','14777180328',1,'2025-03-09'),
(503,'郑宏亮','13955937602',9,'2025-03-10'),
(504,'覃瑞芬','15078588663',1,'2025-03-11'),
(505,'覃晚斌','13317682383',5,'2025-03-12'),
(506,'覃乃素','19127223397',1,'2025-03-14'),
(507,'覃照杨','15078649745',16,'2025-03-15'),
(508,'覃红霞','15777853256',9,'2025-03-16'),
(509,'贺爱团','18278824585',6,'2025-03-16'),
(510,'覃雪飞','19354182356',1,'2025-03-16'),
(511,'韦照荣','19194525289',7,'2025-03-17'),
(512,'梁花袍','15977892430',36,'2025-03-17'),
(513,'姚新梅','15118249291',2,'2025-03-18'),
(514,'克权','15807882425',35,'2025-03-18'),
(515,'覃','13788083567',7,'2025-03-17'),
(516,'胡武彬','13560885111',5,'2025-03-18'),
(517,'覃为远','18776736771',1,'2025-03-18'),
(518,'覃扬体','15676803551',9,'2025-03-19'),
(519,'兰建开','19127083920',4,'2025-03-19'),
(520,'覃富华','18377831076',2,'2025-03-20'),
(521,'覃愿优','18826572707',12,'2025-03-20'),
(522,'韦善告','13217781531',15,'2025-03-20'),
(523,'覃志胆','15777815662',8,'2025-03-21'),
(524,'覃美色','13775807378',2,'2025-03-21'),
(525,'覃柳利','15577800696',3,'2025-03-21'),
(526,'荷凤荷','13737975253',1,'2025-03-21'),
(527,'覃宝','19127087670',3,'2025-03-22'),
(528,'莫杏告','18775800293',21,'2025-03-22'),
(529,'覃永东','15177395686',31,'2025-03-23'),
(530,'雨','18277867168',5,'2025-03-23'),
(531,'韦生','13367882638',4,'2025-03-23'),
(532,'覃宇涵','13471840952',2,'2025-03-23'),
(533,'覃伟','19127082957',2,'2025-03-23'),
(534,'覃菊英','17357561361',2,'2025-03-24'),
(535,'莫玉双','18176198978',5,'2025-03-24'),
(536,'武辉','13407772416',25,'2025-03-24'),
(537,'覃会鲜','15277874042',3,'2025-03-24'),
(538,'覃思涵','18377894462',2,'2025-03-24'),
(539,'覃素决','18377837310',1,'2025-03-25'),
(540,'覃光屏','15078085629',2,'2025-03-25'),
(541,'莫冬菊','13558023466',10,'2025-03-26'),
(542,'覃志红','15078090547',6,'2025-03-26'),
(543,'莫美鹅','19994538024',3,'2025-03-26'),
(544,'覃幸成','15977823071',18,'2025-03-26'),
(545,'覃利谷','19127083651',11,'2025-03-26'),
(546,'覃梦雪','18776833115',9,'2025-03-26'),
(547,'文咪','18877638960',5,'2025-03-27'),
(548,'覃红梅','19977840545',3,'2025-03-27'),
(549,'莫应雪','18775803835',2,'2025-03-27'),
(550,'覃凤师','18378044262',1,'2025-03-27'),
(551,'雨颂','18677897525',4,'2025-03-27'),
(552,'谢慧娟','19107885786',2,'2025-03-28'),
(553,'引浒','13768184113',4,'2025-03-28'),
(554,'美华','18377823082',1,'2025-03-28'),
(555,'覃玉优','17878886930',2,'2025-03-28'),
(556,'覃美云','13481884506',10,'2025-03-28'),
(557,'韦东莲','13132786341',2,'2025-03-29'),
(558,'妈凯','18776849880',59,'2025-03-29'),
(559,'覃宜朗','15012931180',7,'2025-03-29'),
(560,'覃志军','13907782550',14,'2025-03-29'),
(561,'小韦','15977840855',230,'2025-03-29'),
(562,'覃小华','13737990771',12,'2025-03-29'),
(563,'覃志勇','19178934597',2,'2025-03-29'),
(564,'覃红金','13877892815',2,'2025-03-30'),
(565,'韦凤眷','15218884975',3,'2025-03-30'),
(567,'梦思妈','13471841835',2,'2025-03-30'),
(568,'覃应纯','19127085660',3,'2025-03-30'),
(569,'覃密妲','15277870048',2,'2025-03-30'),
(570,'覃黎菌','19877858091',4,'2025-03-31'),
(571,'韦承喜','18077805092',13,'2025-03-31'),
(572,'韦志长','13877866847',8,'2025-04-01'),
(573,'覃汝桥','17878870736',2,'2025-04-01'),
(574,'韦志端','13877813615',4,'2025-04-01'),
(575,'黄利泽','15078566071',3,'2025-04-01'),
(576,'蔡小迎','18175906485',2,'2025-04-01'),
(577,'覃欢鹪','17853238366',4,'2025-04-03'),
(578,'覃爱检','15107780833',2,'2025-04-03'),
(579,'覃凤金','18070825814',12,'2025-04-03'),
(580,'莫艳群','15657501080',1,'2025-04-03'),
(581,'莫耐梅','13587334133',15,'2025-04-03'),
(582,'覃乃稠','15361898601',5,'2025-04-04'),
(583,'贤贤','15078653076',1,'2025-04-04'),
(584,'覃霞转','15217556725',8,'2025-04-04'),
(585,'覃康锐','17878871056',6,'2025-04-04'),
(586,'李清辉','13057667566',2,'2025-04-04'),
(587,'覃会谢','13407790988',3,'2025-04-04'),
(588,'覃微','13173965778',4,'2025-04-04'),
(589,'张健','18977868001',5,'2025-04-05'),
(590,'覃铭进','13877888806',3,'2025-04-05'),
(591,'崖良妮','13557882662',2,'2025-04-06'),
(592,'覃照勋','18777848821',2,'2025-04-06'),
(593,'莫彩依','18163846192',1,'2025-04-06'),
(594,'莫顺泽','13877879233',1,'2025-04-07'),
(595,'覃阿姨','13677718443',2,'2025-04-07'),
(596,'廖曼荣','13471840022',2,'2025-04-07'),
(597,'覃立妹','19127081109',5,'2025-04-07'),
(598,'莫钢村','15177395729',3,'2025-04-07'),
(599,'覃应奔','18977856862',1,'2025-04-07'),
(600,'覃祝灵','13807783473',4,'2025-04-07'),
(601,'覃阳妹','15878831646',1,'2025-04-08'),
(602,'莫有恒','13877885036',1,'2025-04-08'),
(603,'覃彩娥','13100586027',1,'2025-04-09'),
(604,'覃引梦','19978830649',22,'2025-04-09'),
(605,'覃曼欢','15878847870',3,'2025-04-09'),
(606,'欧雪','18316928133',4,'2025-04-09'),
(607,'覃庆龙','18977824956',1,'2025-04-09'),
(608,'莫向波','13557286807',3,'2025-04-10'),
(609,'覃华迷','13926522050',26,'2025-04-11'),
(610,'韦应展','15778833290',2,'2025-04-12'),
(611,'覃海娟','18278814948',1,'2025-04-13'),
(612,'谭菊稔','18377836649',1,'2025-04-13'),
(613,'覃羽敏','18978280387',3,'2025-04-14');

--
-- Table structure for table `LongRemind`
--

CREATE TABLE `LongRemind` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `day` varchar(32) NOT NULL,
  `text` text NOT NULL,
  `annually` int(1) NOT NULL DEFAULT 0,
  `userid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=352 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `LongRemind`
--

INSERT INTO `LongRemind` VALUES
(161,'2026-08-22 06:00:00','把原来三元催化器装上以便年检',0,1),
(314,'2025-11-11 06:00:00','两年了买马牌机油上次价格是181.5换机油',0,1),
(331,'2025-11-27 06:00:00','打药放促花芽分化的药,++芸苔素+磷酸二氢钾',1,1),
(332,'2025-11-08 06:00:00','域名续费',0,1),
(337,'2026-02-07 06:00:00','电商快递这两天停了,准备年货,汽车加油以便年间走亲戚',1,1),
(338,'2026-02-09 06:00:00','还有7天过春节了，购物(一年日常生活用品)/沐浴露/洗发水/侧纸/餐纸/汽车加油 ',1,1),
(339,'2025-09-01 06:00:00','还有8天换驾驶证了',0,1),
(340,'2026-03-17 06:00:00','每年这个时候沃柑树 现在已经有点小芽了',1,1),
(342,'2026-02-24 06:00:00','准备到3月份空气潮湿预防感冒传染',1,1),
(343,'2026-04-07 06:00:00','还有两天清明节,准备备货',1,1),
(344,'2026-04-14 06:00:00','清明时节雨多,记得现在就保果,下一个月雨果落光去了',1,1),
(345,'2026-04-15 06:00:00','看看花瓣能不能保果了，如果还不能，去摇花瓣以免粘连 ',1,1),
(346,'2026-05-27 06:00:00','明天是我的生日 ',1,1),
(349,'2025-08-17 06:00:00','www.nobiggie.cn申请tls',0,1);

--
-- Table structure for table `ShortRemind`
--

CREATE TABLE `ShortRemind` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userid` int(11) NOT NULL,
  `content` varchar(100) NOT NULL,
  `endtime` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `ShortRemind`
--


--
-- Table structure for table `Users`
--

CREATE TABLE `Users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `passwd` varchar(64) NOT NULL DEFAULT '',
  `openid` varchar(32) DEFAULT '',
  `level` int(1) NOT NULL DEFAULT 1,
  `session_id` varchar(40) DEFAULT '',
  `user_ip` varchar(20) DEFAULT '',
  `login_date` datetime DEFAULT '1000-01-01 00:00:00',
  `passwd2` varchar(20) DEFAULT '',
  `ocr` int(11) DEFAULT 0,
  `ocr_end` date DEFAULT '1000-01-01',
  `email` varchar(30) DEFAULT '',
  `birthday` varchar(11) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `Users`
--

INSERT INTO `Users` VALUES
(1,'15677817648','0xv3yVrNfL/c6iL1d48LV3KA==','oBenE5L_Q5JEFBIWn1wQMh8OVTeE',9,'','117.181.149.21','2025-08-29 21:10:36','282246101',8813,'2023-03-12','282246101@qq.com','1984-05-12'),
(2,'13788280442','0xNHLAtlaLQZagsYaf116A+Q==','oBenE5J-bPVd6_7BgzzV_Vd93ZMk',8,'','117.181.148.98','2023-08-01 06:24:25','',0,NULL,'',''),
(3,'18178898624','0x0XlfYMyMQHtgEBxut7HIeA==','oBenE5BBPh6iq8nrIfLjcjSMbvxU',8,'','117.181.148.2','2022-11-17 08:14:37','',0,NULL,'',''),
(4,'15078578097','0xtz+vCRDw/+a7PXNVhcUmjw==','oBenE5PiWlk--zrJNqSq6Lc7SQFQ',8,'','192.168.0.100','2024-09-10 07:08:19','',9992,'2023-03-12','348780705@qq.com','');

--
-- Table structure for table `VehicleCard`
--

CREATE TABLE `VehicleCard` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL DEFAULT '',
  `indate` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  `outdate` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
  `monthly` datetime DEFAULT '1000-01-01 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `VehicleCard`
--


--
-- Table structure for table `VehicleMoney`
--

CREATE TABLE `VehicleMoney` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `month` varchar(20) NOT NULL,
  `money` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `VehicleMoney`
--


--
-- Table structure for table `WarehouseBill`
--

CREATE TABLE `WarehouseBill` (
  `name` varchar(32) NOT NULL,
  `date` datetime NOT NULL,
  `phone` char(11) DEFAULT '0',
  `address` text DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mode` char(20) NOT NULL,
  `userid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WarehouseBill`
--

INSERT INTO `WarehouseBill` VALUES
('一年沃柑开支','2018-03-10 21:06:00','0','大才街上',9,'统计数据',1);

--
-- Table structure for table `WarehouseCategories`
--

CREATE TABLE `WarehouseCategories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userid` int(11) NOT NULL,
  `types` varchar(32) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WarehouseCategories`
--

INSERT INTO `WarehouseCategories` VALUES
(1,1,'电磁炉'),
(3,1,'洗衣机'),
(4,1,'微波炉'),
(5,1,'电脑'),
(8,1,'电风扇'),
(13,1,'个人必备'),
(14,1,'家庭必备'),
(73,1,'喷雾器'),
(25,1,'二极管'),
(26,1,'三极管'),
(37,1,'电容'),
(40,1,'电阻'),
(42,1,'液晶屏'),
(43,1,'饮水机'),
(46,1,'单片机'),
(49,1,'保险管'),
(51,1,'豆浆机'),
(52,1,'功放'),
(77,1,'汽车'),
(58,1,'dvd'),
(80,1,'锅'),
(62,1,'适配器'),
(63,1,'线座'),
(65,1,'机顶盒'),
(66,1,'制冷'),
(69,1,'电子称'),
(87,1,'继电器'),
(93,1,'传感器'),
(90,1,'电热燃气'),
(95,1,'割草机'),
(92,1,'耗材'),
(96,1,'饮水机'),
(97,1,'电商'),
(98,1,'电动配件'),
(99,1,'润滑油'),
(100,1,'电池');

--
-- Table structure for table `WarehouseGoods`
--

CREATE TABLE `WarehouseGoods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL DEFAULT '',
  `price` float DEFAULT 0,
  `number` float NOT NULL DEFAULT 0,
  `buy` float DEFAULT 0,
  `supplier` varchar(64) NOT NULL,
  `date` date NOT NULL,
  `userid` int(11) NOT NULL,
  `attribute` varchar(500) DEFAULT '',
  `quantity` int(7) DEFAULT 0,
  `shortage` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1283 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WarehouseGoods`
--

INSERT INTO `WarehouseGoods` VALUES
(4,'开关 非自锁8x8mm',2,6,0.2,'淘宝店 汕头市昇發电子','2023-07-30',1,'13\r\n按下为 断开,\r\n正常一直是导通',0,0),
(8,'电磁炉 万能电源块',15,5,3,'淘宝店 汕头市昇發电子','2018-09-07',1,'输入电压为300V直流 并接电路板直流滤波电容\r\n正负极别接错,拆掉变压器,拆掉电路板电源集成块\r\n输出电压分别是\r\n5v 并进电路一般拆下电路上78L05接在5V输出脚\r\n12v(很少用)\r\n18v 接散热风扇,插座下',1,0),
(9,'电压锅 温控器',20,1,4,'淘宝店 汕头市昇發电子','2018-10-03',1,'防止失控时烧坏锅体',0,0),
(10,'电脑 VGA视频线',15,1,6,'淘宝店 汕头市昇發电子','2024-09-21',1,'',5,0),
(11,'彩电9脚管座',15,2,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(12,'电压锅 压力开关10A',15,8,1.6,'淘宝店 汕头市昇發电子','2024-03-19',1,'压力开关调试方法\r\n上锅放水开机等上面冒白气时,拔电把压力开关调到刚好触发的状态即可\r\n维修30\r\n零售15',7,0),
(13,'微波炉 磁控管2M219J',70,1,32,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(1282,'电脑 SD卡套',8,1,1,'0','2025-08-22',1,'',5,0),
(18,'线座 圆形接线端',0.5,13,0.1,'淘宝店 汕头市昇發电子','2024-05-21',1,'',12,0),
(20,'电压锅 插簧+皮套',0.5,7,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'1\r\n6.3mm插簧+皮套',16,0),
(23,'电脑 双usb连接头',10,1,1.5,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(26,'线座 16A高级电源插头',5,21,2,'淘宝店 汕头市昇發电子','2021-07-17',1,'绿白固定22个',16,0),
(27,'电脑 显示器电源',35,1,15,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(28,'电容 1.5UF',5,3,0.8,'淘宝店 汕头市昇發电子','2024-10-04',1,'',15,0),
(29,'电容 6UF',10,3,2.2,'淘宝店 汕头市昇發电子','2018-04-30',1,'',1,0),
(31,'电容 400V2UF',5,9,0.7,'淘宝店 汕头市昇發电子','2023-07-30',1,'34',2,0),
(33,'电脑 鼠标垫',4,8,2,'淘宝店 汕头市昇發电子','2025-03-12',1,'',11,0),
(1229,'接线端子圆形内径5.2mm',5,100,0.006,'','2024-10-25',1,'接一个5元',0,0),
(35,'电磁炉 大整流桥GBJ2510',7,1,1,'淘宝店 汕头市昇發电子','2024-05-02',1,'36\r\n耐压1000V\r\n耐流25A\r\n可以在线电路测量其好坏\r\n根据二极管原理测量\r\n中间两个引脚为交流输入\r\n旁边两个脚分别都有标识正负极',8,0),
(37,'电磁炉 温度传感器',20,48,0.2,'淘宝店 汕头市昇發电子','2023-07-30',1,'19\r\n正常电阻值为33k左右',8,0),
(38,'电磁炉 三极管ACT30B',3,10,0.6,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(39,'保险管 微波炉 保险丝组件',10,3,2.5,'淘宝店 汕头市昇發电子','2023-07-30',1,'10\r\n有单独2个保险管',7,0),
(40,'液晶屏 19寸液晶显示器(收购)',310,1,310,'淘宝店 汕头市昇發电子','2022-03-30',1,'',0,0),
(41,'彩电行管D2553',5,7,0.4,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(42,'电脑 硬盘SATA数据线',7,3,1.5,'淘宝店 汕头市昇發电子','2025-02-24',1,'',2,0),
(43,'电容 电解电容450V4.7UF',1,4,0.2,'淘宝店 汕头市昇發电子','2023-10-09',1,'8',3,0),
(44,'电容 400V(394J)',3,5,0.3,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(45,'电磁炉 BYM26 二极管',1,4,0.3,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:F盒',0,0),
(46,'电磁炉 LED发光二极管',0.5,26,0.1,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:F盒',24,0),
(47,'电风扇 落地扇档位开关',8,2,1,'淘宝店 汕头市昇發电子','2021-05-25',1,'三个档位四个接触点\r\n除了三个档位外,另一个就是公共端\r\n分区拔到1.2.3\r\n档测量与公共端是否连通来判断是否良好',3,0),
(1130,'电脑 cpu散热膏袋装',3,10,0.2,'淘宝店 汕头市昇發电子','2023-09-09',1,'34',0,0),
(827,'电脑 内置有线网卡',45,1,19,'淘宝店 汕头市昇發电子','2020-09-20',1,'',0,0),
(50,'彩电消磁电阻',7,5,0.7,'淘宝店 汕头市昇發电子','2023-07-30',1,'30',0,0),
(52,'电磁炉 VIPer22A',20,2,1.2,'淘宝店 汕头市昇發电子','2023-07-30',1,'36\r\n电磁炉电源集成块\r\n可以代换VIPer12A',4,0),
(54,'机顶盒 电源板22V15V5V4V',30,1,7,'淘宝店 汕头市昇發电子','2021-09-26',1,'5V/4V/15V/22V',2,0),
(55,'液晶屏 电视DL0165R电源',10,5,0.4,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(56,'电磁炉 DH321电源芯片',10,5,0.3,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(57,'液晶屏 FSL206MR电源',20,4,1,'淘宝店 汕头市昇發电子','2019-01-25',1,'创维电源',0,0),
(58,'液晶屏 CP1653A',20,2,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(59,'液晶屏 SD6834',15,3,0.7,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(60,'液晶屏 FSQ510电源芯片',30,2,2,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(61,'单片机 EL/PC817C光耦 ',5,22,0.2,'淘宝店 汕头市昇發电子','2023-07-30',1,'9\r\n左边（1、2脚：输入端、控制端）是一个发光二极管。\r\n右边（3、4脚：输出端、受控端）是一个三极管（CE极）\r\n4脚必须接正电一边\r\n控制端：最大电压5V，最大电流50mA。最大反向电压6V。\r\n受控端：最大电压35V，最大电流50mA。\r\n隔离电压：5000V。\r\n工作温度：-30℃ ～ +100℃。\r\nCRT（电流比）：200% ～ 400%。\r\n[ 最佳电压电流范围 ]\r\n控制端最佳电压为0.3V~1.4V，最佳电流不超过20mA。\r\n受控端最佳电压不超过30V，最佳电流不超过30mA。',12,0),
(62,'液晶屏 电源芯片SD6832',10,5,0.5,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(64,'彩电高压帽',5,2,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(65,'机顶盒 开关电源板18v15v3.3v',30,1,3,'淘宝店 汕头市昇發电子','2021-04-20',1,'3.3V\r\nGND\r\n15V（12V-16V都插在15V这个电压上）\r\n18V（18V-24V都插在18V这个电压上）',0,0),
(977,'耗材 手机尾插 Micro 接口 ',10,4,2,'淘宝店 汕头市昇發电子','2022-03-30',1,'',0,0),
(66,'线座 3线6头视音频线',10,2,4,'淘宝店 汕头市昇發电子','2023-11-27',1,'红白黄三线\r\n长1.5米\r\n黄线一般接视频输入\r\n另外两根接左右声道',5,0),
(67,'功放 TDA2030A 音频',7,21,0.6,'淘宝店 汕头市昇發电子','2023-07-30',1,'9\r\n当零件卖7元/个,维修25元/一对管\r\n2030A可以直接代换1006',0,0),
(68,'功放 双联电位器50K',5,5,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',1,0),
(69,'三极管 稳压管L7805',7,8,0.21,'淘宝店 汕头市昇發电子','2018-11-07',1,'输入12V\r\n输出5V\r\n串联型稳压管',6,0),
(70,'三极管 s8050',1,98,0.03,'淘宝店 汕头市昇發电子','2023-07-30',1,'20\r\nNPN型\r\n耗散功率0.625W,集电极电流0.5A,集电极--基极电压40V\r\n集电极--发射极击穿电压25V\r\n按三极管后缀号分为 B C D档 贴片为 L H档,\r\n放大倍数B85-160 C120-200 D160-300 L100-200 H200-350\r\n引脚排列多为EBC',4,0),
(71,'三极管 9014',10,42,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'20',3,0),
(72,'三极管 ss8550',1,176,0.1,'淘宝店 汕头市昇發电子','2025-02-07',1,'20\r\nPNP型\r\n耗散功率: 1W(TA=25℃) 2W(TC=25℃)\r\n集电极电流1.5A\r\n集电极--基极电压40V\r\n集电极--发射极击穿电压25V\r\n特征频率fT 最小100MHZ\r\n放大倍数：按三极管后缀号分为 B C D 共3档\r\n放大倍数 B：85-160 C：120-200 D：160-300\r\n引脚排列多为EBC',25,0),
(73,'二极管 整流管RL207',1,48,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'35\r\n耐压是1000V.\r\n正向电流是2A',0,0),
(74,'二极管 整流管1N4007',10,108,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'35\r\n零售1元\r\n耐压700V\r\n二极管特性\r\n用于整流\r\n正向电阻50K左右反向无穷大',29,0),
(75,'三极管 稳压管L7812',7,3,0.4,'淘宝店 汕头市昇發电子','2023-07-30',1,'6\r\n输入18V\r\n输出12V\r\n串联型稳压管',2,0),
(76,'三极管 稳压管L7809',7,5,0.4,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(80,'三极管 s9013',1,49,0.1,'淘宝店 汕头市昇發电子','2024-09-29',1,'20\r\nNPN 　　\r\n集电极-发射极电压 25V 　　\r\n集电极-基极电压 45V 　　\r\n发射极-基极电压0.7V 　　\r\n集电极电流Ic Max 0.5A 　　\r\n耗散功率 0.625W 　　\r\n工作温度 -55℃ ~ +150℃ 　　\r\n特征频率 150MHz 　　\r\n放大倍数 D64-91 E78-122 F96-135 G122-166 H144-220 I190-300 　　\r\n主要用途 放大电路。   ',1,0),
(81,'三极管 c1815',1,95,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'20\r\nNPN型\r\n集电极-基极击穿电压(VCBO)：60V\r\n集电极-发射极击穿电压(VCEO)：50V\r\n发射极-基极击穿电压(VEBO)：5V\r\n集电极电流(IC)：150mA\r\n基极电流(IB)：50mA\r\n耗散功率(PC)：400mW\r\n集电极-发射极饱和压降(VCE)：0.25V\r\n特征频率(fr)：80MHz\r\n因生产厂商不同1815三极管会有不同前缀，如C1815、2SC1815、KSC1815等，其特性一致。\r\n与C1015配对',5,0),
(82,'三极管 c1015',1,49,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'20\r\nPNP型\r\n集电极-基极击穿电压(VCBO)：60V\r\n集电极-发射极击穿电压(VCEO)：50V\r\n发射极-基极击穿电压(VEBO)：5V\r\n集电极电流(IC)：150mA\r\n基极电流(IB)：50mA\r\n耗散功率(PC)：400mW\r\n集电极-发射极饱和压降(VCE)：0.25V\r\n特征频率(fr)：80MHz\r\n与C1815配对',1,0),
(83,'三极管 C2383 1A/160V',1,10,0.1,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:C盒',0,0),
(84,'功放 音频TEA2025',20,6,0.5,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(85,'单片机 陶瓷晶振 Z8.0M',5,11,0.4,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(86,'单片机 陶瓷晶振 Z4.0M',5,5,0.4,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(87,'单片机 晶振32.768K ',5,10,0.3,'淘宝店 汕头市昇發电子','2019-02-03',1,'石英',0,0),
(88,'集成电路 KA7500',5,1,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(89,'电磁炉 18v稳压管1n4746',0.5,77,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'17\r\n正反向电阻分别为 5.2m和无穷大',9,0),
(90,'二极管 12V稳压管1n4742',0.5,9,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'17',1,0),
(91,'保险管 250V2A ',1,4,0.2,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:A盒',1,0),
(93,'彩电场输出LA78040',20,2,0.4,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(94,'电脑 风扇轴承油脂',5,2,1.15,'淘宝店 汕头市昇發电子','2019-12-19',1,'',0,0),
(95,'彩电高压包 N2420C',50,1,20,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(96,'彩电场集成 LA78041',10,2,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(97,'电容 电解电容450V10UF',1,11,0.2,'淘宝店 汕头市昇發电子','2023-07-30',1,'8\r\n正负极之分\r\n电路板图标 空白划线为负极\r\n',0,0),
(98,'电容 电解电容50V100UF',0.5,15,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'8\r\n正负极之分\r\n电路板图标 空白划线为负极',1,0),
(99,'电容 电解电容160V220UF',5,2,0.6,'淘宝店 汕头市昇發电子','2023-07-30',1,'8\r\n正负极之分\r\n电路板图标 空白划线为负极',0,0),
(100,'电容 电解电容35V1000UF',1,16,0.2,'淘宝店 汕头市昇發电子','2023-07-30',1,'8\r\n正负极之分\r\n电路板图标 空白划线为负极',1,0),
(103,'DVD 皮带',10,8,2.5,'淘宝店 汕头市昇發电子','2023-07-30',1,'32',1,0),
(104,'电容 电磁炉0.3UF/1200V',10,4,0.8,'淘宝店 汕头市昇發电子','2019-09-23',1,'不区分正负极\r\n一般烧电磁炉IGBT管时都会连带这个一起更换',1,0),
(107,'微波炉 高压二极管',10,5,0.5,'淘宝店 汕头市昇發电子','2025-03-16',1,'10',3,0),
(110,'DVD 移动EVD拨动开关',5,9,0.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',1,0),
(112,'电饭锅 磁钢限温器',15,20,1,'淘宝店 汕头市昇發电子','2025-06-23',1,'温度达到饭熟时就失去磁力,使开关跳开断电\r\n煮饭不熟,直接更换这个',57,0),
(113,'电脑 4CM显卡风扇',5,5,1.5,'淘宝店 汕头市昇發电子','2018-04-30',1,'',1,0),
(1227,'电脑 7860k+am88+8g+240G',450,1,390,'','2024-10-22',1,'cpu 70 主板70  内存30 散热器20  电源40 机箱40  固态硬盘120\r\n一共390',0,0),
(115,'电阻 水泥5W/47欧',1,9,10,'淘宝店 汕头市昇發电子','2023-07-30',1,'30',0,0),
(117,'电容 电磁炉5UF/400V',8,4,1,'淘宝店 汕头市昇發电子','2019-09-26',1,'电磁炉，间接加热或者加热温度达不到沸点。\r\n更换就好了',4,0),
(118,'彩电万能遥控器',20,2,5,'淘宝店 汕头市昇發电子','2018-07-28',1,'',0,0),
(120,'电饭锅 保温片',10,2,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',3,0),
(122,'洗衣机 进水阀1A125V',25,1,5,'淘宝店 汕头市昇發电子','2025-01-02',1,'零售25 维修60',3,0),
(1220,'电容 12UF450V',18,1,3,'0','2024-10-10',1,'',0,0),
(125,'电脑 鼠标按键1A125V',3,18,0.2,'淘宝店 汕头市昇發电子','2018-06-16',1,'',0,0),
(126,'开关 6x6x8MM 轻触',1,29,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'12',39,0),
(127,'开关 6X6X9MM轻触',2,45,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'12',28,0),
(128,'微波炉 磁控管2M226',80,1,40,'淘宝店 汕头市昇發电子','2019-01-25',1,' 01GMT',0,0),
(129,'洗衣机 二脚水位开关',70,2,7,'淘宝店 汕头市昇發电子','2022-10-23',1,'零售20\r\n2脚一般阻值为20欧左右\r\n',2,0),
(1051,'机顶盒 通用板5V5v24v 带开关',30,1,7.9,'淘宝店 汕头市昇發电子','2022-07-31',1,'',2,0),
(1069,'dvd HOP-120X 带架移动激光头',50,3,15,'淘宝店 汕头市昇發电子','2023-10-26',1,'小型随身DVD激光头\r\n上面的电位器不能调，一调就用不了了',3,0),
(135,'线座 音频数据线1对1',10,2,1.6,'淘宝店 汕头市昇發电子','2018-12-25',1,'1拖1\r\n松育电子一个0.5',1,0),
(136,'电饭锅 2脚船型开关',5,6,0.3,'淘宝店 汕头市昇發电子','2025-08-22',1,'21',12,0),
(141,'三极管 三端稳压7810',3,2,0.5,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(143,'电脑 笔记本内存条2G',100,1,50,'淘宝店 汕头市昇發电子','2023-07-30',1,'2\r\n1333 ',0,0),
(152,'汽车 48-72v转12v20a',70,1,31,'淘宝店 汕头市昇發电子','2019-06-03',1,'已经使用在果树抽水遥控器上',0,0),
(155,'电压锅 三脚电源插座',10,15,0.4,'淘宝店 汕头市昇發电子','2025-04-07',1,'',30,0),
(156,'手电筒弯脚开关',5,8,0.5,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(159,'电风扇 鸿运塑料旋钮',2,10,0.2,'淘宝店 汕头市昇發电子','2025-05-20',1,'',2,0),
(161,'电风扇 定时开关120分',20,1,3.5,'淘宝店 汕头市昇發电子','2025-06-17',1,'通用定时开关120分',10,0),
(162,'电风扇 墙扇拉线档位开关',15,3,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',1,0),
(1263,'电热燃气 电热水壶电源线',12,1,4,'0','2025-05-23',1,'',2,0),
(174,'电容 400V1.2UF',5,9,0.54,'淘宝店 汕头市昇發电子','2024-09-28',1,'',9,0),
(179,'线座 硬塑料两脚插头',5,9,2,'淘宝店 汕头市昇發电子','2018-04-30',1,'',3,0),
(181,'电脑 usb母座',2,2,0.5,'淘宝店 汕头市昇發电子','2023-09-03',1,'',3,0),
(182,'电脑 复位开关',15,1,1,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(183,'电脑 读卡器3.0',35,1,20,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(188,'电风扇 风扇摇头同步电机',20,1,4.5,'淘宝店 汕头市昇發电子','2025-06-09',1,'这个是通用的，如果装不下，可以反过来装',3,0),
(265,'电磁炉 轻触开关8x8x10',5,4,0.25,'淘宝店 汕头市昇發电子','2023-07-30',1,'12',3,0),
(266,'开关 电筒开关两脚',5,8,0.25,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(270,'液晶屏 电源板RSAG7.820.',150,1,50,'淘宝店 汕头市昇發电子','2019-02-03',1,'海信',0,0),
(271,'电磁炉 按键板RK2106',35,1,18,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(284,'微波炉 定时器开关4插',80,1,7,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(285,'电磁炉 轻触开关4脚6x6x5',2,593,0.03,'淘宝店 汕头市昇發电子','2025-06-09',1,'12\r\n10元起步\r\n之后每一个3元\r\n\r\n零售1元一个',1189,50),
(286,'电磁炉 轻触开关2脚6x6x5',2,60,0.04,'淘宝店 汕头市昇發电子','2025-03-06',1,'12\r\n',55,0),
(1231,'电磁炉 电源线',15,4,4,'0','2025-06-17',1,'',7,0),
(292,'DVD 激光头HD65=HD850',50,5,12.5,'淘宝店 汕头市昇發电子','2024-09-02',1,'好像有一个是坏的，\r\n新激光头在正面把一坨焊锡焊开，\r\n才能正常使用\r\n上面的电位器不能调，一调就用不了了\r\n两个焊开了也是好的,试机的',3,0),
(294,'电脑 水晶头',2,131,0.1,'淘宝店 汕头市昇發电子','2025-02-13',1,'',25,0),
(299,'适配器 9v1a',15,1,5,'淘宝店 汕头市昇發电子','2019-05-29',1,'',1,0),
(1216,'电脑 HDMI高清线1.5米3D',20,2,5,'0','2024-10-11',1,'',1,0),
(753,'电风扇 墙壁扇摇头',20,1,4,'淘宝店 汕头市昇發电子','2023-07-20',1,'',1,0),
(313,'耗材 9V6F22电池 ',5,3,2.5,'淘宝店 汕头市昇發电子','2019-12-13',1,'位置:T盒\r\n万用表电池',3,0),
(314,'耗材 纽扣3V电池 ',5,8,0.5,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:T盒\r\n电脑电池',1,0),
(1254,'洗衣机 皮带O-470E',12,3,1.2,'0','2025-04-26',1,'',7,0),
(1208,'电脑 DVI转VGA转接头',15,1,9.9,'0','2024-09-01',1,'',0,0),
(333,'电脑 cpu硅脂散热膏',15,1,3,'淘宝店 汕头市昇發电子','2018-04-30',1,'',0,0),
(334,'电脑 读卡器川宇牌',5,17,1.5,'淘宝店 汕头市昇發电子','2019-06-07',1,'',15,0),
(336,'电脑 百兆网线(300M)',2,323,0.4,'淘宝店 汕头市昇發电子','2025-06-03',1,'',207,0),
(339,'电脑 硬盘80g',30,1,0,'淘宝店 汕头市昇發电子','2022-01-28',1,'外置硬盘正在使用中',1,0),
(350,'电脑 cpu速龙198(fm1)',50,1,20,'淘宝店 汕头市昇發电子','2018-05-03',1,'',0,0),
(356,'线座 DC电源插座',5,16,0.1,'淘宝店 汕头市昇發电子','2024-11-02',1,'位置:M盒',1,0),
(359,'二极管 肖特基MBR1660 16',5,7,0.8,'淘宝店 汕头市昇發电子','2018-06-02',1,'',0,0),
(367,'单片机 8脚ic插座',3,15,0.06,'淘宝店 汕头市昇發电子','2019-06-07',1,'位置:O盒',8,0),
(1193,'洗衣机 滚筒门锁120300 10210026',60,1,35,'淘宝 原厂洗衣机配件','2024-08-02',1,'DFF01 36024.245 通用',0,0),
(373,'电风扇 鸿运3档开关',15,15,2,'淘宝店 汕头市昇發电子','2025-05-20',1,'',8,0),
(384,'电脑 16g川宇内存卡',35,1,21,'淘宝店 汕头市昇發电子','2024-10-12',1,'一张音乐放车上\r\n剩下2个出售 35元不还价',4,0),
(388,'电饭锅 触点开关U型C型',20,6,0.7,'淘宝店 汕头市昇發电子','2025-03-29',1,'',4,0),
(390,'电压锅 接线片',1,5,0.08,'淘宝店 汕头市昇發电子','2018-07-22',1,'',0,0),
(394,'线座 鳄鱼夹',1,16,0.35,'淘宝店 汕头市昇發电子','2018-06-12',1,'',0,0),
(395,'线座 鳄鱼夹(中号)',0.5,20,0.14,'淘宝店 汕头市昇發电子','2019-07-15',1,'',0,0),
(399,'制冷 安全阀四种',100,1,53,'淘宝店 汕头市昇發电子','2018-06-13',1,'',0,0),
(402,'制冷 磷铜焊条',2,57,0.68,'淘宝店 汕头市昇發电子','2018-07-11',1,'',0,0),
(403,'制冷 2L焊枪+3米防爆管',60,1,24.5,'淘宝店 汕头市昇發电子','2018-06-14',1,'',0,0),
(404,'制冷 鸿森 加液表三通阀',20,2,10,'淘宝店 汕头市昇發电子','2018-06-21',1,'',0,0),
(408,'制冷 氟利昂R600a',15,1,3.2,'淘宝店 汕头市昇發电子','2019-01-22',1,'(净重120g)',7,0),
(409,'制冷 氟利昂 R12',12,3,4.25,'淘宝店 汕头市昇發电子','2019-01-22',1,'(净重150g)',0,0),
(411,'豆浆机 碰撞微动开关',10,4,0.4,'淘宝店 汕头市昇發电子','2018-06-21',1,'',0,0),
(414,'制冷 冰箱干燥过滤器',15,6,1.95,'淘宝店 汕头市昇發电子','2019-12-13',1,'三花19mm通用型',0,0),
(415,'制冷 毛细管1.8mm壁厚0.5',4,15,1.2,'淘宝店 汕头市昇發电子','2019-01-22',1,'1.8mm壁厚0.5mm',0,0),
(416,'制冷 铜管6壁厚0.5(mm)',15,2,5.9,'淘宝店 汕头市昇發电子','2018-06-17',1,'',0,0),
(417,'制冷 铜管4.0壁厚0.5(mm)',15,1,3.9,'淘宝店 汕头市昇發电子','2018-06-17',1,'',0,0),
(419,'制冷 通用加氟工具表',46,1,46,'淘宝店 汕头市昇發电子','2018-06-20',1,'',0,0),
(420,'制冷 冰箱快速接头0.35',5,28,1,'淘宝店 汕头市昇發电子','2019-01-22',1,'(厚0.35总长80MM)',0,0),
(421,'制冷 冰箱快速接头0.6',25,2,2.5,'淘宝店 汕头市昇發电子','2019-01-22',1,'(厚0.6总长80MM)',0,0),
(720,'电磁炉 pn8124f',20,4,1.2,'淘宝店 汕头市昇發电子','2019-06-20',1,'',0,0),
(428,'制冷 启动器125W 22欧',10,3,3,'淘宝店 汕头市昇發电子','2018-07-11',1,'',0,0),
(429,'制冷 冷凝器0.8米高8格',20,1,9.3,'淘宝店 汕头市昇發电子','2018-06-24',1,'',0,0),
(435,'制冷 公英加氟管',15,2,8.5,'淘宝店 汕头市昇發电子','2018-06-24',1,'',0,0),
(436,'电脑 英特尔G1610 CPU',30,1,0,'淘宝店 汕头市昇發电子','2022-03-16',1,'',0,0),
(782,'微波炉 302WP-1AH-C继电器',10,4,2,'淘宝店 汕头市昇發电子','2023-07-30',1,'7',2,0),
(884,'电热燃气 燃气灶左炉头总成',20,4,6,'淘宝店 汕头市昇發电子','2023-11-12',1,'打火针朝下，左边出气为左炉头',1,0),
(716,'液晶屏 索尔SON-303X万能遥控器',15,1,4.7,'淘宝店 汕头市昇發电子','2023-05-30',1,'索尔SON-303X电视万能遥控器 等离子液晶电视机CRT彩电LCDLED通用',8,0),
(443,'制冷 铜铝焊条',10,1,3,'淘宝店 汕头市昇發电子','2018-07-07',1,'',0,0),
(444,'液晶屏 LED灯条套件',120,1,7.7,'淘宝店 汕头市昇發电子','2019-01-22',1,'(19寸22寸24寸宽屏通用)',0,0),
(447,'制冷 铜管10壁厚1(mm)',30,1,14.8,'淘宝店 汕头市昇發电子','2018-07-07',1,'',0,0),
(448,'制冷 铜管3壁厚0.5(mm)',10,1,3.4,'淘宝店 汕头市昇發电子','2018-07-07',1,'',0,0),
(449,'制冷 铜管2壁厚0.5(mm)',10,3,3.3,'淘宝店 汕头市昇發电子','2018-07-07',1,'',0,0),
(452,'耗材 3号1.5v电池',5,2,1.8,'淘宝店 汕头市昇發电子','2018-09-07',1,'指针万用表备用电池',0,0),
(453,'电容 400V25UF',20,1,4.5,'淘宝店 汕头市昇發电子','2018-07-11',1,'',0,0),
(454,'电容 400V35UF',30,1,6.7,'淘宝店 汕头市昇發电子','2018-07-11',1,'',1,0),
(456,'制冷 5绝缘套管0.9米',2,4,0.45,'淘宝店 汕头市昇發电子','2018-07-11',1,'',0,0),
(458,'制冷 氟利昂R410A(变频空调)',50,1,25,'淘宝店 汕头市昇發电子','2019-04-26',1,'毛重650G净重450\r\n小一匹空调补加要1瓶左右，全加要2瓶左右。\r\n正一匹和大一匹补加要1-2瓶左右，全加要3瓶左右。\r\n1.5匹补加要1-3瓶左右，全加要4瓶左右。\r\n汽车一般加要2-3瓶左右。R410家用空调加6-7个压左右就行\r\n，R22家用空调加4.5个压左右就行，\r\n制冷剂保质期有3年',0,0),
(459,'制冷 氟利昂R22(定频空调)',30,1,15,'淘宝店 汕头市昇發电子','2019-01-22',1,'毛重450G净含量330G',0,0),
(1139,'洗衣机 主板神童 EB80BM029',130,1,60,'淘宝店 汕头市昇發电子','2023-11-08',1,'',0,0),
(467,'适配器 7W-15W镇流器',15,1,1.8,'淘宝店 汕头市昇發电子','2019-01-22',1,'通用台灯',0,0),
(470,'三极管 稳压管78L05',5,175,0.06,'淘宝店 汕头市昇發电子','2024-08-03',1,'6\r\n输入电压范围 5v-12V',20,0),
(472,'电容 电解电容50V470UF',3,8,0.12,'淘宝店 汕头市昇發电子','2023-07-30',1,'8',0,0),
(474,'开关 2200W船形',5,2,0.67,'淘宝店 汕头市昇發电子','2018-08-05',1,'',0,0),
(476,'三极管 ss8050',1,250,0.06,'淘宝店 汕头市昇發电子','2025-02-11',1,'20\r\nNPN型\r\n(耐流比s8050大)\r\n耗散功率: 1W(TA=25℃) 2W(TC=25℃)\r\n集电极电流1.5A\r\n集电极--基极电压40V\r\n集电极--发射极击穿电压25V\r\n特征频率fT 最小100MHZ\r\n放大倍数：按三极管后缀号分为 B C D 共3档\r\n放大倍数 B：85-160 C：120-200 D：160-300\r\n引脚排列多为EBC',72,0),
(479,'电风扇 三档电吹风开关',5,2,0.75,'淘宝店 汕头市昇發电子','2023-07-30',1,'15',1,0),
(480,'电磁炉 501可调电阻 500欧',5,8,0.2,'淘宝店 汕头市昇發电子','2021-07-12',1,'电磁炉可调电阻',2,0),
(483,'电脑 128G 内存卡 三星',179,1,179,'淘宝店 汕头市昇發电子','2023-07-16',1,'闲置摄像头2',0,0),
(1207,'电风扇 万能遥控器+主板',40,2,6,'拼多多 电子配件店1','2025-06-01',1,'',1,0),
(486,'继电器 12v30A',15,2,3,'淘宝店 汕头市昇發电子','2018-08-19',1,'',0,0),
(487,'电风扇 跌倒自停开关',10,6,0.8,'淘宝店 汕头市昇發电子','2023-07-30',1,'33',4,0),
(488,'线座 8字线',10,2,2,'淘宝店 汕头市昇發电子','2018-08-25',1,'',0,0),
(491,'线座 压线扣454Au形',1,280,0.1,'淘宝店 汕头市昇發电子','2025-02-11',1,'',46,0),
(1170,'洗衣机 排水阀拉簧',30,3,0.5,'淘宝店 汕头市昇發电子','2025-01-02',1,'',2,0),
(497,'耗材 剪刀',6,8,3.8,'淘宝店 汕头市昇發电子','2019-02-13',1,'',9,0),
(499,'饮水机 放水阀门水堵',3,3,0.5,'淘宝店 汕头市昇發电子','2018-08-26',1,'',1,0),
(500,'微波炉 电压锅 微动开关',15,7,0.6,'淘宝店 汕头市昇發电子','2025-03-16',1,'位置:K盒',3,0),
(501,'线座 电视天线插头',5,2,0.38,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:M盒',0,0),
(503,'线座 接收机F头',10,10,0.2,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:M盒',0,0),
(1242,'线座 一分二音频线',12,2,1.6,'0','2024-12-02',1,'',3,0),
(505,'电风扇 双向可控硅97A6',5,92,0.1,'淘宝店 汕头市昇發电子','2025-06-18',1,'23',4,0),
(506,'线座 接线帽',0.5,150,0.02,'淘宝店 汕头市昇發电子','2023-11-27',1,'14',31,0),
(507,'保险管 250V10A(玻璃)',1,11,0.1,'淘宝店 汕头市昇發电子','2025-05-01',1,'位置:A盒',8,0),
(508,'保险管 250V5A(玻璃)',1,19,0.06,'淘宝店 汕头市昇發电子','2024-04-20',1,'位置:A盒',1,0),
(509,'液晶屏 贴片按键3x6x2.5两脚',1,20,0.06,'淘宝店 汕头市昇發电子','2018-08-29',1,'',0,0),
(512,'电脑 usb声卡',15,1,6,'淘宝店 汕头市昇發电子','2023-07-30',1,'2',0,0),
(513,'三极管 贴片2n3904',1,266,0.05,'淘宝店 汕头市昇發电子','2023-07-30',1,'26\r\n元件表面显示1AM为3904\r\n一般换电磁炉IGBT管就连带一起换2N3906\r\n',21,0),
(514,'三极管 贴片2n3906',1,126,0.05,'淘宝店 汕头市昇發电子','2023-07-30',1,'26\r\n元件表面显示2A为3906\r\n一般换电磁炉IGBT管就连带一起换2N3904',16,0),
(1173,'单片机 ESP32 DEVKIT V1',17,1,17,'淘宝店 汕头市昇發电子','2024-06-04',1,'客户送的',0,0),
(517,'二极管 红外发射管5mm',2,10,0.16,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:P盒2格',0,0),
(518,'二极管 红外发射管3mm',1,20,0.16,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:P盒1格',0,0),
(520,'电容 400V6UF',15,1,2.8,'淘宝店 汕头市昇發电子','2018-09-07',1,'',0,0),
(523,'电阻 510',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(524,'电阻 220',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(525,'电阻 47',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(526,'电阻 47k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(527,'电阻 20k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(528,'电阻 100k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(529,'电阻 51k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(530,'电阻 6.8k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(531,'电阻 150',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(532,'电阻 4.7k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(533,'电阻 2.2k',0.5,38,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'\r\n',2,0),
(534,'电阻 10k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(535,'电阻 22',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(536,'电阻 5.1k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(537,'电阻 270',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(538,'电阻 300k',0.5,130,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(539,'电阻 220k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(540,'电阻 470',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(541,'电阻 330',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(542,'电阻 200',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'\r\n',0,0),
(543,'电阻 1k',0.5,34,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(544,'电阻 1m',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(545,'电阻 470k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(546,'电阻 68k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(547,'电阻 100',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(548,'电阻 680',0.5,39,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(549,'电阻 2k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(550,'电阻 3.3k',0.5,39,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(551,'电阻 680k',0.5,40,0.02,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(552,'电阻 10',0.5,40,0.01,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(553,'电磁炉 VIPER12A',5,13,0.11,'淘宝店 汕头市昇發电子','2024-10-27',1,'36\r\n可代换 ap8012',4,0),
(554,'二极管 一体红外接收HS0038',2,2,0.26,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:P盒3格',0,0),
(929,'汽车 刹车油500g',60,1,20,'淘宝店 汕头市昇發电子','2021-09-20',1,'盈科刹车油/制动液500g长安之星 五菱之光 东风小康 哈飞民意等 ',1,0),
(556,'单片机 晶振49s无源12m',5,12,0.3,'淘宝店 汕头市昇發电子','2018-09-17',1,'',0,0),
(557,'单片机 晶振49s无源10m',5,2,0.5,'淘宝店 汕头市昇發电子','2018-09-07',1,'',0,0),
(835,'单片机 ESP8266-01S',9,3,6,'淘宝店 汕头市昇發电子','2024-12-24',1,'',1,0),
(560,'单片机 STC89C52RC',20,2,4,'淘宝店 汕头市昇發电子','2018-09-25',1,'',0,0),
(563,'三极管 9018',1,50,0.04,'淘宝店 汕头市昇發电子','2023-07-30',1,'20\r\nNPN型\r\n超高频1GHZ\r\n耐压30V\r\n由于它的噪声较大，一般高档的话筒不用',0,0),
(564,'三极管 贴片s8050',3,182,0.04,'淘宝店 汕头市昇發电子','2023-07-30',1,'26\r\n表面显示J3Y\r\n',12,0),
(565,'单片机 CH340G刷机板模块',15,1,2.45,'淘宝店 汕头市昇發电子','2018-09-09',1,'',0,0),
(568,'单片机 16脚IC座',2,7,0.1,'淘宝店 汕头市昇發电子','2018-09-17',1,'位置:O盒',0,0),
(569,'电磁炉 1203p100',1,1,1,'淘宝店 汕头市昇發电子','2018-09-09',1,'',0,0),
(571,'单片机 40脚IC座(圆脚)',10,5,1.3,'淘宝店 汕头市昇發电子','2018-09-10',1,'',0,0),
(572,'制冷 冷凝器 1.3米加密型',40,2,28,'淘宝店 汕头市昇發电子','2018-09-15',1,'',0,0),
(574,'电风扇 控制电路8206BA4',20,2,0.7,'淘宝店 汕头市昇發电子','2018-09-16',1,'',0,0),
(575,'电风扇 控制电路SN8P2602',20,2,1.25,'淘宝店 汕头市昇發电子','2018-09-16',1,'',0,0),
(578,'电热燃气 电热水壶蒸汽开关',10,1,0.7,'淘宝店 汕头市昇發电子','2024-12-20',1,'15',3,0),
(852,'汽车 20A保险丝',5,3,0.5,'淘宝店 汕头市昇發电子','2023-07-30',1,'24\r\n一个放在SUV车上备用',0,0),
(581,'电磁炉 小整流桥(GBU15K)',7,6,1,'淘宝店 汕头市昇發电子','2018-11-17',1,'耐压1000V\r\n耐流15A\r\n可以在线电路测量其好坏\r\n根据二极管原理测量\r\n中间两个引脚为交流输入\r\n旁边两个脚分别都有标识正负极',3,0),
(582,'单片机 STC12C5A60S2',20,1,5.7,'淘宝店 汕头市昇發电子','2018-09-17',1,'',0,0),
(583,'电阻 精密可调 电位器10K',2,4,0.27,'淘宝店 汕头市昇發电子','2018-09-17',1,'',0,0),
(584,'单片机 USB转TTL PL2303',10,1,2.25,'淘宝店 汕头市昇發电子','2018-09-17',1,'',0,0),
(585,'单片机 USB转ESP8266模块',15,1,2.9,'淘宝店 汕头市昇發电子','2018-09-17',1,'',0,0),
(586,'单片机 40P锁紧 51单片机',20,1,5.2,'淘宝店 汕头市昇發电子','2018-09-17',1,'',0,0),
(587,'单片机 51单片机小系统板',10,2,1.85,'淘宝店 汕头市昇發电子','2018-09-25',1,'',0,0),
(590,'三极管 贴片AMS1117(3.3v)',5,46,0.1,'淘宝店 汕头市昇發电子','2021-10-17',1,'输出3.3v\r\n输入5v到15v\r\n左边第1脚为负\r\n第2脚为输出脚\r\n第3脚为输入脚',4,0),
(591,'单片机 49S型晶振11.0592',5,10,0.17,'淘宝店 汕头市昇發电子','2019-02-03',1,'无源',0,0),
(592,'线座 40p杜绑线母对母30CM',5,1,1.7,'淘宝店 汕头市昇發电子','2019-02-03',1,'杜绑',3,0),
(593,'线座 DC电源插头4.0x1.7',7,1,0.4,'淘宝店 汕头市昇發电子','2025-05-30',1,'4.0x1.7',12,0),
(1006,'洗衣机 水位传感器三脚',70,2,6.2,'淘宝店 汕头市昇發电子','2025-02-27',1,'零售20，更换手水位压力可能有变，需要随机应变开启档位',6,0),
(1239,'单片机 舵机MG996(180度)',20,1,11.3,'深圳市轩特佳电子','2025-06-11',1,'工作电压4.8-6v  可旋转180度 13公斤大扭矩\r\n红 +  黑 -  黄 信号线',0,0),
(597,'单片机 49S型无源晶振 24M',1,10,0.14,'淘宝店 汕头市昇發电子','2018-10-03',1,'',0,0),
(598,'单片机 49S型晶振22.1184',1,10,0.13,'淘宝店 汕头市昇發电子','2018-10-03',1,'',0,0),
(771,'保险管 185℃ 15A 250V',5,16,0.1,'淘宝店 汕头市昇發电子','2025-02-11',1,'',24,0),
(768,'电热燃气 热水器水动开关',10,4,1,'淘宝店 汕头市昇發电子','2025-06-14',1,'通水后有水压,触发开关,有3个带线的',17,0),
(601,'单片机 NRF24L01/2.4G无线',10,2,4.9,'淘宝店 汕头市昇發电子','2018-11-03',1,'带3.3V转接口1.8元/个',0,0),
(602,'单片机 USB转nRF24L01',15,1,7.45,'淘宝店 汕头市昇發电子','2018-10-11',1,'',0,0),
(610,'电热燃气 热水器3A250v KW12开关',5,1,0.4,'淘宝店 汕头市昇發电子','2023-07-30',1,'3\r\n燃气热水器',1,0),
(611,'继电器 891WP-1A-C  ',8,4,1.23,'淘宝店 汕头市昇發电子','2018-11-07',1,'12V25A',0,0),
(1275,'电压锅 圆轴DKJ-Y90分定时器',25,1,5.82,'0','2025-06-07',1,'',1,0),
(1083,'电热燃气 热水器旋钮帽小号',4,2,0.9,'淘宝店 汕头市昇發电子','2023-01-25',1,'',0,0),
(617,'适配器 可调压模块4~32V 5A',15,1,3.8,'淘宝店 汕头市昇發电子','2019-06-03',1,'',0,0),
(618,'三极管 贴片s8550',1,95,0.04,'淘宝店 汕头市昇發电子','2023-07-30',1,'26\r\n上面显示2TY',4,0),
(619,'单片机 声音检测模块',5,1,1.35,'淘宝店 汕头市昇發电子','2018-11-03',1,'有声音输出低电平',0,0),
(623,'耗材 9v电池扣子',1,5,0.16,'淘宝店 汕头市昇發电子','2018-11-07',1,'',0,0),
(625,'二极管 开关管4148',1,196,0.1,'淘宝店 汕头市昇發电子','2021-06-25',1,'正向电阻60K左右,反向电阻无穷大\r\n75V\r\n150mA\r\n防止继电器断开时线圈产生的反向自感电压击穿继电器的驱动电路',5,0),
(626,'电压锅 继电器SRD-12VDC-SL-C',20,1,1,'淘宝店 汕头市昇發电子','2025-08-22',1,'7\r\n电压力锅供电主板吸合继电器',13,0),
(629,'洗衣机 皮带O-450E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(985,'洗衣机 皮带O-500E',12,1,1.2,'淘宝店 汕头市昇發电子','2022-04-12',1,'',1,0),
(633,'洗衣机 皮带O-610E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(634,'洗衣机 皮带O-620E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(635,'洗衣机 皮带O-630E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(636,'洗衣机 皮带O-640E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(637,'洗衣机 皮带O-655E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(638,'洗衣机 皮带O-660E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(639,'洗衣机 皮带O-670E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(640,'洗衣机 皮带O-680E',12,1,1.2,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(641,'豆浆机 电机刀片',10,1,0.8,'淘宝店 汕头市昇發电子','2018-11-11',1,'',0,0),
(642,'二极管 整流1N5408',1,26,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'35\r\n耐压1000V\r\n耐流3A',4,0),
(643,'功放  贴片TDA2822',10,3,0.17,'淘宝店 汕头市昇發电子','2023-07-30',1,'9\r\n9v\r\n音频功率放大器',0,0),
(644,'果树 包装箱(30*25*18)',4,1,3.07,'淘宝店 汕头市昇發电子','2019-02-06',1,'',0,0),
(646,'果树 封箱胶布4.8CM*100',15,1,6.53,'淘宝店 汕头市昇發电子','2019-02-06',1,'',0,0),
(647,'电压锅 4.8mm插簧+皮套',1,47,0.08,'淘宝店 汕头市昇發电子','2018-11-12',1,'',0,0),
(648,'电压锅 2.8mm插簧+皮套',1,35,0.08,'淘宝店 汕头市昇發电子','2023-07-30',1,'1',10,0),
(964,'电磁炉 SP25N135T',40,4,5,'淘宝店 汕头市昇發电子','2024-01-07',1,'',4,0),
(652,'三极管 2N3904',2,181,0.03,'淘宝店 汕头市昇發电子','2024-09-24',1,'29',16,0),
(653,'三极管 2N3906',2,91,0.03,'淘宝店 汕头市昇發电子','2024-09-24',1,'29',7,0),
(654,'二极管 整流堆KBPC5010',20,2,1.97,'淘宝店 汕头市昇發电子','2018-11-17',1,'1000V\r\n50A',1,0),
(655,'电磁炉 TM1668 SM1668',25,13,0.5,'淘宝店 汕头市昇發电子','2024-03-18',1,'电磁炉面板任何按钮都失效\r\n测量 6脚为正 倒数第三脚为负 有电压就说明坏了\r\n更换就OK\r\n热风枪焊接技巧,先用电洛铁4个角的引脚焊上,中间两排放焊膏,再用热风枪',12,0),
(659,'功放 音频对管C5198 A1941',35,2,1.5,'淘宝店 汕头市昇發电子','2018-11-30',1,'一对是两个',0,0),
(660,'电磁炉 面板集成TM1628',25,15,0.58,'淘宝店 汕头市昇發电子','2024-12-06',1,'电磁炉面板任何按钮都失效\r\n更换就OK',20,0),
(664,'适配器 5v1a',15,1,4.99,'淘宝店 汕头市昇發电子','2024-11-21',1,'',3,0),
(665,'单片机 光敏电阻5516',5,20,1,'淘宝店 汕头市昇發电子','2023-07-30',1,'32',0,0),
(666,'传感器 霍尔 49e',3,9,0.26,'淘宝店 汕头市昇發电子','2018-12-14',1,'线性霍尔电路49e是一块线性霍尔效应集成电路，输出电压随着磁通密度的变化而变化，能检测出细微的磁场变化情况。它可应用于测量物体的运动、距离，位置传感器等方面，也适合在环境恶劣或污染严重的条件下使用。\r\n产品特点：线性度好，功耗低，灵敏度高（1.9mv/gs），输出阻抗低，\r\n工作电压在2.3v-10v 电参数\r\n 电参数\r\n功耗icc(ma)   \r\n负载电流io(ma)   \r\n输出高电平vol(mv)   \r\n输出低电平vol(mv)   \r\n灵敏度△vout   \r\n2～5   \r\n\r\n15   \r\n>4.2   \r\n<900   \r\n1.9mv/gs',0,0),
(670,'单片机 微音拾音器模块',30,1,13.3,'淘宝店 汕头市昇發电子','2018-12-24',1,'散件需要自己焊接\r\n用于200米内监听',0,0),
(671,'功放 NE5532P',5,4,0.85,'淘宝店 汕头市昇發电子','2019-04-15',1,'',0,0),
(672,'功放 TAD2822直插',10,5,0.35,'淘宝店 汕头市昇發电子','2018-12-25',1,'',0,0),
(673,'电磁炉 LM339',20,9,0.3,'淘宝店 汕头市昇發电子','2018-12-25',1,'',0,0),
(674,'功放 双声道3.5音频插座',2,10,0.06,'淘宝店 汕头市昇發电子','2019-01-07',1,'',0,0),
(675,'功放 二节 耳机插头',2,2,0.35,'淘宝店 汕头市昇發电子','2018-12-25',1,'',0,0),
(676,'功放 3.5立体声音频插头',2,3,0.35,'淘宝店 汕头市昇發电子','2018-12-25',1,'',0,0),
(678,'电脑 紫光dvd刻录光盘',5,48,0.92,'淘宝店 汕头市昇發电子','2019-01-06',1,'DVD-R 4.7G 16X空白光盘',0,0),
(1003,'线座 一分三音视频线',15,2,2.4,'淘宝店 汕头市昇發电子','2022-05-19',1,'',3,0),
(1166,'电脑 aoc黑色鼠标',20,2,6,'淘宝店 汕头市昇發电子','2024-09-21',1,'',7,0),
(953,'洗衣机 皮带O-480E',10,2,1.5,'淘宝店 汕头市昇發电子','2024-07-26',1,'',4,0),
(696,'电子称 船形开关3脚3档',10,5,0.8,'淘宝店 汕头市昇發电子','2025-08-22',1,'',14,0),
(700,'洗衣机 皮带O-460E',12,5,1.2,'淘宝店 汕头市昇發电子','2025-01-30',1,'',2,0),
(701,'电热燃气 热水器单耳水膜片大54',10,5,0.36,'淘宝店 汕头市昇發电子','2019-10-25',1,'燃气热水器水压开关,里面的水压膜\r\n卖10元,维修20元',2,0),
(702,'电热燃气 热水器单耳水膜片中49.5',10,16,0.36,'淘宝店 汕头市昇發电子','2025-04-11',1,'燃气热水器水压开关,里面的水压膜\r\n卖10元,维修20元',5,0),
(703,'电热燃气 热水器单耳水膜片小44.5',10,24,0.36,'淘宝店 汕头市昇發电子','2025-04-11',1,'燃气热水器水压开关,里面的水压膜\r\n卖10元,维修20元',15,0),
(704,'电热燃气 热水器双耳水膜片大53',10,7,0.36,'淘宝店 汕头市昇發电子','2019-10-25',1,'燃气热水器水压开关,里面的水压膜\r\n卖10元,维修20元',0,0),
(705,'电脑 4口2.0usb外接电源',20,1,16,'淘宝店 汕头市昇發电子','2019-06-03',1,'电脑正在使用中',0,0),
(706,'保险管 陶瓷250V15A',15,35,0.25,'淘宝店 汕头市昇發电子','2025-02-07',1,'24\r\n陶瓷保险管的好处在于,后面有短路只会断开,不会爆管危险\r\n零售5元',34,0),
(708,'电脑 机箱开关线',10,2,0.45,'淘宝店 汕头市昇發电子','2024-09-25',1,'电脑开不了机,或时而失灵,更换这个就好',2,0),
(712,'电风扇 万能遥控器',12,3,5,'淘宝店 汕头市昇發电子','2019-06-13',1,'(外观一样即可使用)',0,0),
(717,'适配器 5v2a手机充电头',15,1,5,'淘宝店 汕头市昇發电子','2024-10-20',1,'',1,0),
(718,'继电器 24v30a 6脚',20,4,4,'淘宝店 汕头市昇發电子','2019-06-20',1,'一开一闭',0,0),
(724,'单片机 覆铜板10x15',10,2,1.9,'淘宝店 汕头市昇發电子','2019-06-20',1,'',0,0),
(725,'单片机 覆铜板腐蚀剂',15,1,3.2,'淘宝店 汕头市昇發电子','2019-06-20',1,'一包可腐蚀10块10x15的覆铜板',0,0),
(726,'单片机 V3开发板CH-340 底座',15,1,4.6,'淘宝店 汕头市昇發电子','2019-09-10',1,'',0,0),
(1105,'喷雾器 超大功率耐用水泵',50,2,19,'淘宝店 汕头市昇發电子','2025-04-04',1,'最低50元,',5,0),
(901,'洗衣机 水位气管',20,9,1.1,'淘宝店 汕头市昇發电子','2024-07-11',1,'10米 还没剪成每条1米 \r\n零售10元',1,2),
(739,'电饭锅 大功率触点开关',20,8,1.3,'淘宝店 汕头市昇發电子','2024-05-13',1,'',2,0),
(742,'汽车 4.8a手机充电器',50,1,38,'淘宝店 汕头市昇發电子','2019-07-01',1,'',0,0),
(1114,'电压锅 加厚锅密封圈胶圈 5L/6L',10,1,4.8,'淘宝店 汕头市昇發电子','2024-07-08',1,'一分不少',11,0),
(749,'电风扇 遥控主板电容105J400V',30,9,0.18,'淘宝店 汕头市昇發电子','2025-06-18',1,'33\r\n容量是1UF\r\n115j是1.1uf',8,0),
(750,'电压锅 电源芯片ln8k06',30,6,1,'淘宝店 汕头市昇發电子','2019-08-15',1,'',0,0),
(751,'电风扇 晶振 455K 455E',20,3,0.15,'淘宝店 汕头市昇發电子','2019-08-15',1,'',0,0),
(758,'耗材 ab万能胶水',5,7,2,'淘宝店 汕头市昇發电子','2025-06-17',1,'',42,0),
(764,'电压锅 中心固定密封圈',4,2,0.6,'淘宝店 汕头市昇發电子','2019-09-23',1,'',2,0),
(1240,'单片机 有源蜂鸣器',10,3,2.2,'','2024-12-24',1,'通电就响 3-24v',1,0),
(767,'单片机 ESP8266串口V3 CH-340',30,1,10.8,'淘宝店 汕头市昇發电子','2024-12-19',1,'4个空闲',3,0),
(769,'电脑 DVD刻录机',80,1,32,'淘宝店 汕头市昇發电子','2019-11-05',1,'二手台式刻录机',0,0),
(770,'汽车 倒车灯p21w',1,9,1,'淘宝店 汕头市昇發电子','2019-11-18',1,'汽车倒车灯',0,0),
(779,'制冷 冰柜干燥过滤器',6,2,1.7,'淘宝店 汕头市昇發电子','2019-12-13',1,'',0,0),
(882,'电容 2.5uf/400v',10,1,0.9,'淘宝店 汕头市昇發电子','2025-06-15',1,'',14,0),
(1141,'电热燃气 燃气灶右炉头总成',20,3,7,'淘宝店 汕头市昇發电子','2025-02-22',1,'打火针朝下，右边出气为右炉头',16,0),
(783,'电热燃气 3V电磁阀煤气阀',25,4,7,'淘宝店 汕头市昇發电子','2025-06-07',1,'',8,0),
(784,'机顶盒 电源自锁开关',20,1,1,'淘宝店 汕头市昇發电子','2022-06-12',1,'',5,0),
(785,'电热燃气 热水器点火针',5,6,0.5,'淘宝店 汕头市昇發电子','2024-03-26',1,'3',6,0),
(786,'电热燃气 热水器感应针',5,2,0.5,'淘宝店 汕头市昇發电子','2023-07-30',1,'3',3,0),
(788,'线座 4.8MM 插簧',0.3,80,0.08,'淘宝店 汕头市昇發电子','2020-05-27',1,'',18,0),
(791,'洗衣机 皮带O-445E',12,2,1.35,'淘宝店 汕头市昇發电子','2020-04-29',1,'',0,0),
(792,'洗衣机 皮带O-410E',12,2,1.35,'淘宝店 汕头市昇發电子','2020-04-29',1,'',0,0),
(1174,'单片机 ESP32-CAM开发板(带底板)',28,1,28,'淘宝店 汕头市昇發电子','2024-06-04',1,'客户送的',0,0),
(794,'锅 电饭锅1000w电热盘',50,1,0,'淘宝店 汕头市昇發电子','2020-05-16',1,'',0,0),
(797,'液晶屏 42寸海信灯条',300,2,50,'淘宝店 汕头市昇發电子','2021-08-25',1,'另一个是二手拆机',0,0),
(820,'二极管 5.6v1w稳压管',15,73,0.07,'淘宝店 汕头市昇發电子','2023-07-30',1,'17\r\n零售价5元',7,0),
(837,'机顶盒 电源板KEHAI-SPB31D ',35,2,8.28,'淘宝店 汕头市昇發电子','2021-04-20',1,'GND \r\nLNB \r\nLNB-CTR \r\nGND \r\n5V',0,0),
(799,'喷雾器 大开关',12,10,2,'淘宝店 汕头市昇發电子','2024-11-30',1,'零售卖10块',13,0),
(869,'耗材 网套10*6规格',0.04,4300,0.02,'淘宝店 汕头市昇發电子','2024-03-09',1,'网套10*6规格540个每包\r\n25x540=13500个\r\n进货每个0.02元了，必须每个以0.03元卖',227,0),
(808,'电热燃气 热水器感应开关(免水压)',25,3,1.9,'淘宝店 汕头市昇發电子','2023-07-30',1,'3\r\n燃气 热水器',1,0),
(1133,'液晶屏 海信LED55N3000U灯条',300,1,45,'淘宝店 汕头市昇發电子','2023-09-21',1,'海信LED55N3000U灯条屏HD550K3U82-L1K1灯条JL.D55051330-003ES-M',0,0),
(818,'电容 4UF400v',10,1,1.5,'淘宝店 汕头市昇發电子','2022-06-24',1,'',2,0),
(828,'电脑 键盘ps2',35,1,16.5,'淘宝店 汕头市昇發电子','2024-10-22',1,'买电脑键盘尽量买PS2的这个不会有供电不足现象\r\n自己电脑正在使用\r\n',2,0),
(1252,'锅 压力锅万能主板17x14.5x11.5',55,2,16,'0','2025-02-03',1,'',1,0),
(830,'单片机 HC-SR501 人体红外感应模块',3,2,2.8,'淘宝店 汕头市昇發电子','2023-12-27',1,'',0,0),
(831,'单片机 DS18B20温度传感器',3,2,2.42,'淘宝店 汕头市昇發电子','2023-12-17',1,'已经回本',1,0),
(832,'单片机 土壤湿度计检测模块',2,2,1.6,'淘宝店 汕头市昇發电子','2021-05-20',1,'',0,0),
(833,'单片机 RCWL-0516 微波雷达感应',2,1,1.6,'淘宝店 汕头市昇發电子','2021-05-20',1,'',0,0),
(834,'单片机 超声波测距模块 HC-SR04',3,2,2.75,'淘宝店 汕头市昇發电子','2024-11-21',1,'3.3到5v通用',1,0),
(1237,'液晶屏 12mm导热双面胶',50,1,9,'广州广发电子(淘宝)','2024-11-03',1,'',0,0),
(839,'适配器 DK124',10,2,0.7,'淘宝店 汕头市昇發电子','2020-10-02',1,'',0,0),
(841,'dvd 万能开关电源板',30,1,4,'淘宝店 汕头市昇發电子','2020-10-26',1,'',0,0),
(1172,'润滑油 300克黄油',7,1,6.5,'淘宝店 汕头市昇發电子','2024-06-04',1,'',0,0),
(844,'保险管 陶瓷250V12A',15,7,0.2,'淘宝店 汕头市昇發电子','2023-07-30',1,'24\r\n不带线的',1,0),
(966,'电磁炉 18v大散热风扇',20,20,2.4,'淘宝店 汕头市昇發电子','2025-02-19',1,'零售12元 维修更换20',13,0),
(949,'单片机 NodeMCUesp32S',50,3,21,'淘宝店 汕头市昇發电子','2024-10-20',1,'',2,0),
(848,'电磁炉 H20PR5 场效应管',15,1,2.5,'淘宝店 汕头市昇發电子','2020-11-24',1,'40A1350V',0,0),
(849,'电磁炉 轻触开关4脚6x6x15',3,42,0.05,'淘宝店 汕头市昇發电子','2024-03-10',1,'12',8,0),
(853,'汽车 30A保险丝',5,3,0.5,'淘宝店 汕头市昇發电子','2020-12-23',1,'一个放在SUV车上备用',0,0),
(854,'汽车 5A保险丝',5,3,0.5,'淘宝店 汕头市昇發电子','2023-07-30',1,'24\r\n一个放在SUV车上备用',0,0),
(855,'液晶屏 32寸海信灯条',180,2,20,'淘宝店 汕头市昇發电子','2021-01-15',1,'还有2根灯条',0,0),
(856,'制冷 电容400v20uf',20,1,5,'淘宝店 汕头市昇發电子','2021-01-07',1,'',1,0),
(857,'电热燃气 电热水壶底座耦合器套',15,1,2,'淘宝店 汕头市昇發电子','2025-05-23',1,'',7,0),
(861,'电热燃气 热水器旋钮帽大号',4,3,0.9,'淘宝店 汕头市昇發电子','2025-04-11',1,'',6,0),
(862,'电热燃气 热水器O形密封圈套',20,1,9,'淘宝店 汕头市昇發电子','2021-02-03',1,'',0,0),
(863,'洗衣机 滚筒 皮带',25,1,12,'淘宝店 汕头市昇發电子','2021-03-24',1,'通用5PJ12818P1258 帮安装35',0,0),
(864,'耗材  封箱胶带（壹品骄胶带）',7,10,4.72,'淘宝店 汕头市昇發电子','2025-04-04',1,'原价208一箱，要两箱396元 就是每箱198元\r\n平均一个4.71元\r\n内纸外缘与胶带外缘是3cm',79,0),
(1088,'电动配件 103碳刷 14.5x10x6mm',8,6,0.7,'淘宝店 汕头市昇發电子','2023-08-07',1,'一对0.7元维修20,卖8',4,0),
(1053,'豆浆机 碳刷',4,3,0.6,'淘宝店 汕头市昇發电子','2022-08-08',1,'',2,0),
(868,'耗材  礼盒装(10斤)',5,1,4.2,'淘宝店 汕头市昇發电子','2025-03-22',1,'原厂价3.8元一个，运费0.4元\r\n',149,0),
(1004,'电热燃气 过热保护温控器 20A93度4脚',30,4,3.5,'淘宝店 汕头市昇發电子','2024-02-17',1,'5\r\n小圆形\r\n零售25',2,0),
(886,'二极管 5.1v稳压1N4733',10,58,0.07,'淘宝店 汕头市昇發电子','2023-07-30',1,'17',2,0),
(1030,'液晶屏 50寸灯条',350,9,6,'淘宝店 汕头市昇發电子','2022-12-25',1,'JL.D50051235-017AS-F\r\n换就换一套,不然容易坏',0,0),
(891,'单片机 5V700mA隔离开关电源',20,2,4.2,'淘宝店 汕头市昇發电子','2021-06-28',1,'',0,0),
(892,'继电器 5v模块带光耦隔离',20,3,2.5,'淘宝店 汕头市昇發电子','2021-06-28',1,'支持高低电平触发',0,0),
(896,'三极管 78L05贴片',30,11,0.4,'淘宝店 汕头市昇發电子','2022-07-07',1,'',0,0),
(898,'耗材 7号电池',1.5,17,10,'淘宝店 汕头市昇發电子','2025-06-23',1,'7号碱性电池1.5V\r\n1板60节=8.8元',71,0),
(1014,'线座 三脚插头10a3000瓦',5,10,1,'淘宝店 汕头市昇發电子','2025-05-24',1,'',14,0),
(905,'电容 400v4.7uf',20,5,0.08,'淘宝店 汕头市昇發电子','2025-02-02',1,'',5,0),
(906,'液晶屏 TCLL48P1S-CF背光灯条',400,10,4,'淘宝店 汕头市昇發电子','2022-06-27',1,'',0,0),
(907,'豆浆机 双向可控硅BTA12-800B',100,1,1.5,'淘宝店 汕头市昇發电子','2021-08-14',1,'为什么烧坏，很有可能电机跟线路板同时烧了必须收100元\r\n最左和最右两脚正反向电阻123欧左右，别的都是无穷大为正常',2,0),
(908,'豆浆机 BTA16-800BW',50,2,1,'淘宝店 汕头市昇發电子','2021-08-14',1,'为什么烧坏，很有可能电机跟线路板同时烧了必须收100元',0,0),
(909,'豆浆机 继电器 SRIH-12VDC-SH-C',50,13,1,'淘宝店 汕头市昇發电子','2025-06-07',1,'SRIH-12VDC-SL-C通用\r\n零售20',0,0),
(910,'液晶屏 海信42寸电脑主板',180,1,10,'淘宝店 汕头市昇發电子','2021-08-25',1,'二手拆机',0,0),
(911,'液晶屏 海信42寸电源板',180,1,10,'淘宝店 汕头市昇發电子','2021-09-02',1,'二手拆机的',0,0),
(913,'制冷 整流桥KBPC5010',15,2,2,'淘宝店 汕头市昇發电子','2021-09-01',1,'耐压1000v 耐流50a',1,0),
(915,'单片机 for 电压检测模块',10,1,0.7,'淘宝店 汕头市昇發电子','2021-09-04',1,'电压输入范围：DC0－25V\r\n电压检测范围：DC0.02445V-25V\r\n电压模拟分辨率：0.00489V\r\nDC输入接口：端子正极接VCC，负极接GND\r\n输出接口：\"+\"接5/3.3V, \"-\"接GND，\"s\"接Arduino的AD引脚',NULL,0),
(921,'汽车 割草机139活塞环',70,1,7.8,'淘宝店 汕头市昇發电子','2021-09-10',1,'活塞直径39mm',NULL,0),
(923,'DVD HOP-120X光头带架',50,1,13.9,'淘宝店 汕头市昇發电子','2021-09-11',1,'',1,0),
(930,'汽车 发动机水堵2CM',10,2,2,'淘宝店 汕头市昇發电子','2021-09-20',1,'',1,0),
(922,'汽车 割草机140活塞环',70,1,8,'淘宝店 汕头市昇發电子','2021-09-10',1,'活塞直径40mm',NULL,0),
(1209,'电磁炉 18v中风扇',15,1,1.47,'0','2024-09-09',1,'',0,0),
(927,'电磁炉 18v小风扇',20,2,6,'淘宝店 汕头市昇發电子','2021-09-11',1,'',NULL,0),
(928,'dvd 电源拨动开关 卧式 双排6脚',20,5,0.3,'淘宝店 汕头市昇發电子','2021-09-11',1,'',NULL,0),
(936,'电磁炉 轻触开关6*6*4.3MM',13,5,0.04,'淘宝店 汕头市昇發电子','2023-07-30',1,'12',1,0),
(937,'电磁炉 轻触开关4脚6*6*9MM侧键',15,3,0.07,'淘宝店 汕头市昇發电子','2022-02-27',1,'',3,0),
(939,'电热燃气 热水器 索尔两线点火器',35,2,8.5,'淘宝店 汕头市昇發电子','2021-10-21',1,'',1,0),
(940,'电热燃气 温控开关KSD301',10,2,1,'淘宝店 汕头市昇發电子','2021-10-21',1,'220v  16A',1,0),
(1196,'锅 电饭锅指示灯板',20,1,3,'拼多多 安徽小家电配件店','2024-08-14',1,'',0,0),
(1267,'汽车 电动车刹车固定螺丝',3,9,0.3,'','2025-05-07',1,'',0,0),
(1268,'液晶屏 灯条JS-MR385M1061',80,1,27,'','2025-05-11',1,'一套有3根',0,0),
(956,'锅 8升密封圈',12,1,4.8,'淘宝店 汕头市昇發电子','2023-07-27',1,'自己电压力锅备用',2,0),
(1278,'电风扇 鸿运电机',30,1,14.3,'','2025-06-17',1,'',1,0),
(968,'电脑 英特尔CPU G2010',40,1,0,'淘宝店 汕头市昇發电子','2022-03-16',1,'',0,0),
(969,'电脑 内存条DDR3 2G',30,1,0,'淘宝店 汕头市昇發电子','2023-07-30',1,'2\r\n维修电脑备用',0,0),
(1230,'电容 1.8uf/400v',5,6,1,'0','2024-12-20',1,'',1,0),
(1201,'锅 电压锅 卡扣锅密封圈胶圈 5L/6L',12,1,2.9,'汕头市昇發电子','2024-08-20',1,'',0,0),
(1111,'电脑 电源航嘉 300W',95,2,45,'淘宝店 汕头市昇發电子','2024-04-22',1,'300W 43',5,0),
(997,'线座 三脚插头16a4500瓦',6,10,2,'淘宝店 汕头市昇發电子','2022-05-07',1,'',0,0),
(979,'锅 TM1618',30,4,0.8,'淘宝店 汕头市昇發电子','2022-04-12',1,'',0,0),
(980,'锅 TM1638',30,1,1.7,'淘宝店 汕头市昇發电子','2022-04-12',1,'',0,0),
(981,'锅 TM1623',30,2,1.3,'淘宝店 汕头市昇發电子','2022-05-12',1,'',0,0),
(982,'锅 TM1812',30,1,1,'淘宝店 汕头市昇發电子','2022-04-12',1,'',0,0),
(983,'电磁炉 电源芯片 AP8012',25,3,0.23,'淘宝店 汕头市昇發电子','2023-07-30',1,'36',1,0),
(984,'锅 LED电源驱动PN8024',20,2,0.75,'淘宝店 汕头市昇發电子','2022-04-12',1,'',0,0),
(987,'锅 电感 1mh',15,99,0.05,'淘宝店 汕头市昇發电子','2023-07-30',1,'11',1,0),
(988,'锅 电感 1mh 大电流4x6',15,10,0.1,'淘宝店 汕头市昇發电子','2023-07-30',1,'11',0,0),
(989,'锅 MY-SS5048P按键板',55,1,1,'淘宝店 汕头市昇發电子','2022-04-15',1,'',1,0),
(1262,'单片机 MAX30102',15,2,5,'0','2025-03-07',1,'',1,0),
(993,'耗材 A4喷墨复印打印纸',1,1378,0.3,'淘宝店 汕头市昇發电子','2025-08-29',1,'爱普生L3156 从4000开始 \r\n进货价0.04每张，墨水和墨盒,电费损耗，共算0.3每张\r\n下次到5000张，加一次墨水(彩色每通道加1.5毫升)',5062,200),
(1000,'耗材 订书钉(盒)',5,1,1,'淘宝店 汕头市昇發电子','2022-05-10',1,'',0,0),
(1001,'耗材 936烙铁芯',10,2,10,'淘宝店 汕头市昇發电子','2023-07-30',1,'4号盒子',1,0),
(1002,'耗材 莲花内热烙铁芯',25,2,10,'淘宝店 汕头市昇發电子','2022-05-10',1,'',0,0),
(1005,'电热燃气 过热保护温控器 92-110度',30,2,12,'淘宝店 汕头市昇發电子','2023-07-30',1,'5\r\n大的有专门的导管感应器',0,0),
(1009,'电压锅 半圆轴机械定时器',30,1,10,'淘宝店 汕头市昇發电子','2022-05-24',1,'90分',0,0),
(1010,'耗材 电动车前进后退停止开关',10,1,1.5,'淘宝店 汕头市昇發电子','2022-05-24',1,'',0,0),
(1011,'耗材 水龙头接头',5,1,1.5,'淘宝店 汕头市昇發电子','2022-05-24',1,'',0,0),
(1012,'耗材 热缩管绝缘套管2mm',1,10,0.2,'淘宝店 汕头市昇發电子','2024-09-26',1,'0.2元每米',2,0),
(1215,'耗材 热缩管绝缘套管3mm',2,10,0.25,'汕头市昇發电子','2024-09-26',1,'',0,0),
(1217,'电风扇 落地壁扇遥控铝电机',50,1,26,'0','2024-10-04',1,'',0,0),
(1210,'电热燃气 热水器通用电池盒',8,2,1.1,'0','2024-09-26',1,'零售8元，',0,0),
(1037,'割草机 139/140化油器',50,2,22,'淘宝店 汕头市昇發电子','2022-07-21',1,'不易启动或者启动后熄火就需要更换\r\n这个是可以清洗保养的 主要清理汽油小滤网\r\n一个在抽水机上使用',0,0),
(1020,'耗材 磨砂橡皮擦',2,1,1,'淘宝店 汕头市昇發电子','2022-06-04',1,'',0,0),
(1023,'二极管 WL 18V 贴片稳压管SOD-123',2,10,0.15,'淘宝店 汕头市昇發电子','2022-06-04',1,'',0,0),
(1026,'电容 瓷片101(100pf)',5,95,0.06,'淘宝店 汕头市昇發电子','2022-06-19',1,'',5,0),
(1027,'电容 瓷片104(0.1uF 100V)',5,96,0.06,'淘宝店 汕头市昇發电子','2023-07-30',1,'18',4,0),
(1028,'电容 贴片101(100pf)',5,100,0.06,'淘宝店 汕头市昇發电子','2022-06-19',1,'100pf=0.0001uf',0,0),
(1029,'电容 贴片104M(100NF)',5,100,0.06,'淘宝店 汕头市昇發电子','2022-06-19',1,'100NF=0.1uf',0,0),
(1180,'洗衣机 美的小天鹅洗衣机直通进水阀',50,2,12,'淘宝店 汕头市昇發电子','2024-07-08',1,'正常电阻4k左右',0,0),
(1034,'电容 瓷片电容103',10,100,0.03,'淘宝店 汕头市昇發电子','2022-07-07',1,'0.01uf',0,0),
(1035,'电容 瓷片电容102',10,100,0.03,'淘宝店 汕头市昇發电子','2022-07-07',1,'1NF',0,0),
(1056,'液晶屏 TCL43寸灯条3800A',250,2,0,'淘宝店 汕头市昇發电子','2022-08-22',1,'拆机',1,0),
(1050,'液晶屏 灯条AE270C14-2204S',150,1,30,'淘宝店 汕头市昇發电子','2022-07-30',1,'',0,0),
(1040,'电磁炉 轻触开关12*12*10MM',15,9,0.08,'淘宝店 汕头市昇發电子','2023-07-30',1,'12',1,0),
(1041,'电容 3.5uf/400v',10,2,2,'淘宝店 汕头市昇發电子','2023-04-03',1,'',0,0),
(1042,'饮水机 通用制冷主板',50,1,25,'淘宝店 汕头市昇發电子','2022-07-18',1,'',0,0),
(1044,'饮水机 制冷片tec1-2706',50,1,11,'淘宝店 汕头市昇發电子','2022-07-18',1,'正反向电阻分别为0和45欧',1,0),
(1052,'制冷 氟利昂r134(220克)',50,2,11,'淘宝店 汕头市昇發电子','2022-08-01',1,'',0,0),
(1087,'电商 35x26x21 10斤装泡沫装',3.5,4488,2.1,'信科泡沫箱厂','2025-08-23',1,'内 长宽高 31x22x17(不算盖子) \r\n外 长宽高 35x26x21\r\n以上规格没有了,只能选 35x26x21\r\n电动三轮车拆后架一次可以啦11条(220个)\r\n\r\n\r\n原厂价1.58元 买了13米挂车装有5568个泡沫箱\r\n运费1500元，算下来平均一个2元到家\r\n\r\n零售10元3个\r\n10个以上3.2每个\r\n寄果3元每个\r\n\r\n信科泡沫 1.8*4400  +1200运费 35x26x21\r\n',21272,0),
(1058,'电容 3uf/400v',10,4,0.9,'淘宝店 汕头市昇發电子','2025-06-16',1,'',15,0),
(1067,'锅 保险管热熔断器JY169A四线',25,2,4.4,'淘宝店 汕头市昇發电子','2024-12-27',1,'',4,0),
(1197,'锅 电压锅 万能主板13.6x14.8x12',55,1,14.5,'0','2025-04-26',1,'',1,0),
(1198,'电容 400v20uf',15,3,3,'0.1','2024-08-19',1,'电机电容',2,0),
(1075,'电视接收机 遥控器 索乐-09',15,1,3.2,'淘宝店 汕头市昇發电子','2022-12-03',1,'(无需设置直接使用)',5,0),
(1076,'洗衣机 602胶水',5,1,1.1,'淘宝店 汕头市昇發电子','2022-12-25',1,'',0,0),
(1081,'洗衣机 通用进水管2米',20,2,6.8,'淘宝店 汕头市昇發电子','2023-09-22',1,'',2,0),
(1156,'电容 30uf/400v',20,1,4.5,'淘宝店 汕头市昇發电子','2024-01-05',1,'',0,0),
(1084,'电热燃气 热水器三线点火器',35,2,9.25,'淘宝店 汕头市昇發电子','2025-08-22',1,'燃气 热水器',20,0),
(1089,'洗衣机 滚筒门锁17438100000461',80,1,25,'淘宝店 汕头市昇發电子','2023-03-19',1,'',0,0),
(1091,'锅 电饭锅 电源开关',20,4,0.64,'淘宝店 汕头市昇發电子','2023-04-03',1,'零售15',0,0),
(1092,'电磁炉 FGA25N125P',40,1,2.3,'淘宝店 汕头市昇發电子','2025-02-07',1,'零售15',3,0),
(1096,'洗衣机 滚筒水位开关17438100001348',80,1,12,'淘宝店 汕头市昇發电子','2023-04-18',1,'',0,0),
(1101,'继电器 36VDC继电器6脚 C型',10,3,3.6,'淘宝店 汕头市昇發电子','2023-05-18',1,'电压低于25v的用24v继电器',4,0),
(1104,'单片机 PWM直流电机马达调速器',60,1,16,'淘宝店 汕头市昇發电子','2023-05-19',1,'产品参数：\r\n输入电压：DC9-55V                              \r\n输出电压：负载下线性       \r\n输出电流：0-40A                                   \r\n持续功率：2000W             \r\n调速类型：调流                                     \r\n调速方式：电位器（线性）\r\n调速范围：0——100%                          \r\n控制频率：25KHZ             \r\n接线类型：栅栏式接线端子                     \r\n旋钮规格：100K（148）  \r\n模块尺寸：长*宽*高83MM*56MM*28MM\r\n主板按装尺寸：长*宽72MM*48MM           \r\n电位器按装开孔：7MM',0,0),
(1106,'继电器 12v6脚继电器',15,3,3,'淘宝店 汕头市昇發电子','2023-06-13',1,'',0,0),
(1109,'电热燃气 磁控免水压开关',25,1,2.5,'淘宝店 汕头市昇發电子','2023-05-30',1,'',0,0),
(1219,'电子称 船型开关3脚',10,8,0.6,'全顺家居用品百货','2025-06-27',1,'',2,0),
(1115,'适配器 12v5a显示器电源',30,2,14,'淘宝店 汕头市昇發电子','2023-07-31',1,'另一个正在使用,可卖',1,0),
(1218,'电脑 8750+am88+8g+240G',450,1,390,'***','2024-10-22',1,'cpu 70 主板70  内存30 散热器20  电源40 机箱40  固态硬盘120\r\n一共390',2,0),
(1119,'耗材 轮胎补胎胶16+8',2,24,0.25,'淘宝店 汕头市昇發电子','2023-08-06',1,'16片小的8片大的',0,0),
(1120,'喷雾器 打药机单向阀',7,3,2.5,'淘宝店 汕头市昇發电子','2024-11-09',1,'新的已经使用,只有旧的',1,0),
(1121,'电风扇 80mm摇头杆',2,4,0.5,'淘宝店 汕头市昇發电子','2023-08-15',1,'',0,0),
(1122,'电子称 4.4v 5A电瓶',30,1,16.5,'淘宝店 汕头市昇發电子','2025-04-16',1,'',3,0),
(1123,'耗材 煤气罐',280,1,270,'淘宝店 汕头市昇發电子','2025-05-28',1,'赚10元',13,0),
(1124,'耗材 电瓶修复液500ml',20,1,6,'淘宝店 汕头市昇發电子','2023-08-20',1,'20元一次保养\r\n使用工具\r\n1.浓缩修复液  2 一字小螺丝刀 3 注射针管\r\n一 浓缩液用量 每个电瓶安数 / 2 \r\n比如12A的   12/2=6毫升  如果一个是电瓶有6个格，每个格要加6毫升,加完502胶水粘好盖子\r\n二 静放4小时,然后充电2小时,把点放完,然后一次性把点充满,再放电,做循环让修复液彻底循环',0,0),
(1125,'洗衣机 通用排水管',12,1,4,'淘宝店 汕头市昇發电子','2025-06-05',1,'',8,0),
(1127,'液晶屏 电源开关',50,2,2,'淘宝店 汕头市昇發电子','2025-05-14',1,'34',2,0),
(1128,'电动配件 电动配件 21碳刷 6.5x7.5x15',3,14,0.35,'淘宝店 汕头市昇發电子','2025-03-03',1,'一对6元',6,0),
(1131,'耗材 卷帘门门控开关',15,1,1.5,'淘宝店 汕头市昇發电子','2023-09-09',1,'32\r\n卷帘门备用',0,0),
(1134,'锅 电压力锅电源变压器',35,1,2.2,'淘宝店 汕头市昇發电子','2023-10-09',1,'',0,0),
(1135,'电风扇 10cm连杆',10,5,0.45,'淘宝店 汕头市昇發电子','2023-10-11',1,'34',0,0),
(1136,'锅 电压力锅开阀芯',5,2,2,'淘宝店 汕头市昇發电子','2023-10-11',1,'5',0,0),
(1137,'机顶盒 SON-09 索尔 遥控器',12,2,3.5,'淘宝店 汕头市昇發电子','2023-10-23',1,'',1,0),
(1138,'锅 DDFB-30罩极式电机定时器',30,1,6.5,'淘宝店 汕头市昇發电子','2023-10-23',1,'',1,0),
(1140,'洗衣机 滚筒排水电机PX2025-3',130,1,25,'淘宝店 汕头市昇發电子','2023-11-11',1,'',0,0),
(1265,'适配器 12v2a',15,1,7.5,' 汕头市昇發电子','2025-04-11',1,'',0,0),
(1266,'微波炉 磁控管插座',50,1,1.2,' 汕头市昇發电子','2025-04-11',1,'',0,0),
(1143,'电饭锅 电炒锅插头',20,1,6.4,'淘宝店 汕头市昇發电子','2023-11-26',1,'',5,0),
(1151,'单片机 常闭型震动传感器SW-420',5,2,1.07,'淘宝店 汕头市昇發电子','2023-12-27',1,'',0,0),
(1223,'单片机 NodeMCUesp32 38p螺母底座',10,1,8.8,'0','2024-10-20',1,'',0,0),
(1224,'耗材 纯铜软线1平方',1,18,0.5,'','2024-10-29',1,'',2,0),
(1149,'单片机 压力气压水位传感器',10,1,3.85,'淘宝店 汕头市昇發电子','2023-12-17',1,'可以测量气压,水位',0,0),
(1150,'单片机 温湿度传感器DHT11',10,3,3,'淘宝店 汕头市昇發电子','2025-03-07',1,'',0,0),
(1152,'单片机 水位传感器 Water Sensor',5,2,0.6,'淘宝店 汕头市昇發电子','2023-12-27',1,'',0,0),
(1153,'单片机 压电片 敲击 振动 震动传感器',10,1,2.55,'淘宝店 汕头市昇發电子','2023-12-27',1,'',0,0),
(1248,'单片机 火焰传感器模块4线',10,2,5.2,'诚禾电子','2024-12-24',1,'',0,0),
(1155,'单片机 微型SR602人体红外感应',10,2,2.2,'淘宝店 汕头市昇發电子','2023-12-27',1,'',0,0),
(1157,'电容 5uf/400v',20,1,1.2,'淘宝店 汕头市昇發电子','2024-01-07',1,'',0,0),
(1158,'电磁炉 IGBT管H20R1353',30,1,2,'淘宝店 汕头市昇發电子','2024-01-07',1,'',0,0),
(1162,'电热燃气 漏电保护插头带电源线',35,1,17.5,'淘宝店 汕头市昇發电子','2024-03-21',1,'16A',4,0),
(1164,'喷雾器 12v调速器',15,3,4,'淘宝店 汕头市昇發电子','2025-05-13',1,'',9,0),
(1167,'电脑 CPU散热硅脂GD900',4,23,0.22,'淘宝店 汕头市昇發电子','2024-10-18',1,'',7,0),
(1258,'耗材 绞肉机和面机开关',15,3,2,'','2025-02-13',1,'',0,0),
(1243,'锅 保险管20A185度长8.5cm',15,4,0.15,' 汕头市昇發电子','2024-12-13',1,'',1,0),
(1175,'单片机 SD卡传感器模块',9,1,8.7,'淘宝店 汕头市昇發电子','2024-06-04',1,'客户送的',0,0),
(1176,'单片机 压力变送器kc-131',120,1,120,'淘宝店 汕头市昇發电子','2024-06-04',1,'客户送的\r\n波特率9600 量程0-60MPa\r\nRS485通讯协议\r\n精度0.25级\r\n',0,0),
(1205,'制冷 空调万能遥控器',20,1,6.75,'0','2025-08-23',1,'',1,0),
(1206,'电风扇 18寸遥控铜电机2.2cm',60,1,32,'0','2025-06-09',1,'',1,0),
(1181,'电容 220v20uf',15,1,3.25,'淘宝店 汕头市昇發电子','2024-08-18',1,'',1,0),
(1182,'电池 12v23a',5,2,1,'淘宝店 汕头市昇發电子','2024-07-09',1,'',0,0),
(1255,'电脑 HDMI转VGA线',20,1,9,'牧佳人官方旗舰店','2025-02-08',1,'',0,0),
(1185,'机顶盒 开关电源板5v15v20v',35,2,12,'淘宝店 汕头市昇發电子','2024-07-23',1,'',1,0),
(1202,'耗材 热熔胶条/7mm胶棒',3,10,0.29,'汕头市昇發电子','2024-08-20',1,'',0,0),
(1203,'电磁炉 大功率主板',60,1,31,'0','2025-06-09',1,'',7,0),
(1204,'电动配件 60v20a 充电器',40,1,27,'0','2024-08-22',1,'带有电量数显',7,0),
(1211,'机顶盒 SON-09 索尔 机顶盒遥控',15,2,3.5,'汕头市昇發电子','2024-09-26',1,'',0,0),
(1212,'电子称 电池4v5ah',30,1,11,'鑫东源电池厂','2025-08-22',1,'拼多多 ',6,0),
(1214,'耗材 热缩管绝缘套管1.5mm',2,10,0.2,'汕头市昇發电子','2024-09-26',1,'热缩管绝缘套管1.5mm',0,0),
(1222,'电脑 ddr3 1600 8g',80,1,40,'四川数码科技','2024-10-11',1,'',0,0),
(1225,'电脑 VGA切换器2进1出',15,1,7,'','2024-10-22',1,'',0,0),
(1238,'耗材 铸工胶',10,1,4,'','2024-11-09',1,'维修新架子上,还有一个使用了一般在旧架子上',0,0),
(1241,'单片机 nano开发板V3.0',50,1,20,'','2024-11-21',1,'',0,0),
(1244,'电容 10UF450V',12,2,2.5,'汕头市昇發电子','2024-12-14',1,'',1,0),
(1245,'单片机 5~32V 3A 可调降压',15,1,2.2,'0','2024-12-14',1,'',1,0),
(1246,'单片机 光敏传感器4脚',10,3,2,'逸胜电子专营店','2024-12-19',1,'1、采用灵敏型光敏电阻传感器\r\n2、比较器输出，信号干净，波形好，驱动能力强，超过15mA。\r\n3、配可调电位器可调节检测光线亮度\r\n4、工作电压3.3V-5V\r\n5、输出形式 ：DO数字开关量输出（0和1）和AO模拟电压输出\r\n6、设有固定螺栓孔，方便安装\r\n7、小板PCB尺寸：3.2cm x 1.4cm\r\n8、使用宽电压LM393比较器',0,0),
(1247,'二极管 1N5401',1,10,0.1,'1','2024-12-20',1,'耐压100V\r\n耐流3A',3,0),
(1249,'单片机 1.8寸TFT彩屏',20,1,12.4,'','2024-12-24',1,'',0,0),
(1251,'单片机 arduino Uno',30,1,14,'0','2025-01-11',1,'',1,0),
(1256,'耗材 订书钉21/8',10,2000,5,'晨光末耀专卖店','2025-02-08',1,'',0,0),
(1257,'耗材 4分橡胶垫片',0.5,120,0.025,'','2025-02-08',1,'',0,0),
(1264,'微波炉 微波炉磁控管M24FA-410A',60,1,23,'','2025-03-16',1,'',0,0),
(1269,'单片机 STA32F103C8T6',100,1,18,'','2025-05-22',1,'',0,0),
(1270,'电子称 6v1a充电器',12,1,4,'','2025-05-24',1,'',2,0),
(1271,'单片机 ST-LINK V2 烧录器',17,1,6,'','2025-05-29',1,'',0,0),
(1272,'线座 三孔电源线',10,1,3.3,'','2025-06-09',1,'',2,0),
(1279,'电风扇 2cm手动电机',55,1,30,'0','2025-06-22',1,'',2,0),
(1277,'饮水机 制冷片12706',50,1,9,'','2025-06-10',1,'',2,0),
(1280,'适配器 6v1a',15,1,4.5,'0','2025-06-23',1,'',1,0);

--
-- Table structure for table `WarehousePreorder`
--

CREATE TABLE `WarehousePreorder` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL DEFAULT '',
  `price` float DEFAULT 0,
  `number` float NOT NULL DEFAULT 0,
  `buy` float DEFAULT 0,
  `supplier` varchar(64) NOT NULL DEFAULT '0',
  `userid` int(11) NOT NULL,
  `attribute` text NOT NULL,
  `quantity` int(7) DEFAULT 1,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=699 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WarehousePreorder`
--

INSERT INTO `WarehousePreorder` VALUES
(215,'电磁炉 JW28P50CD16J 芯片',35,1,11,'0',1,'电磁炉主控芯片',NULL),
(360,'洗衣机 TB75-5168g电脑板',150,1,60,'0',1,'',NULL),
(533,'洗衣机 荣事达XQB68-78A',150,1,75,'0',1,'电脑板',1),
(382,'机顶盒 电源板KEHAI-SPB31D',35,1,8.7,'1',1,'',NULL),
(363,'微波炉 电脑板G70D20CN1P-D2',120,1,30,'10',1,'',NULL),
(364,'洗衣机 小天鹅电脑板5168G',130,1,48,'10',1,'',NULL),
(365,'洗衣机 电脑板301330500010',200,1,70,'10',1,'美的滚筒洗衣机电脑版',NULL),
(645,'耗材 热缩管绝缘套管3mm',1,1,0.2,'淘宝店 汕头市昇發电子',1,'',2),
(372,'洗衣机 xqb70-a7238电脑板',170,1,85,'0',1,'',NULL),
(374,'洗衣机 小天鹅TG80-Q1266LPS门开关',80,1,27,'1',1,'一般主板烧了,门开关一起换',NULL),
(377,'洗衣机 滚筒门锁17438100000473',25,1,22,'0',1,'',NULL),
(411,'洗衣机 荣事达电脑板XQB70-950G',180,1,79,'0',1,'',NULL),
(414,'洗衣机 XQB65-2018主板',170,1,80,'0',1,'',NULL),
(402,'洗衣机 波轮电脑板TB75-Q5288CLSR',150,1,74,'0',1,'一套的包括副板',NULL),
(405,'微波炉 EG823MF7-NRH电脑板主板',150,1,55,'0',1,'保半年',NULL),
(484,'液晶屏 海尔LE40B510X 主板',180,1,49,'10',1,'',1),
(413,'洗衣机 波轮 小天鹅XQB65-2018电脑板',150,1,80,'2',1,'',NULL),
(409,'液晶屏 创维42E660EC背光板',30,1,5,'5',1,'',NULL),
(410,'液晶屏 创维42E660C电源板',150,1,22,'0',1,'',NULL),
(423,'电热燃气 万家乐电热水器D50电脑板',150,1,67,'1',1,'',NULL),
(432,'电热燃气 万家乐电热水器D50显示器',100,1,50,'1',1,'上次购买多余的配件',NULL),
(439,'单片机 DHT11温度模块',20,1,4.45,'1',1,'1 DO  小板开关数字量输出接口 接单片机IO口\r\n2 VCC 外接3.3V-5V\r\n3 GND 外接GND',NULL),
(607,'电磁炉 小整流桥(反向)',25,1,5,'0',1,'',3),
(518,'电磁炉 超薄万能主板大功能',60,1,33,'0',1,'零售45',2),
(454,'洗衣机 奇帅XQB75-7075电脑板',150,1,78,'0',1,'',1),
(479,'液晶屏 乐华TP.MS628M PB803电源板',250,1,108,'2',1,'',1),
(511,'电风扇 落地扇壁扇遥控纯铜电机',70,1,29.8,'0.5',1,'纯铜',1),
(498,'洗衣机 美的MB80-1100MH主板',150,1,41,'7',1,'',1),
(513,'洗衣机 洗衣机电脑板XQB85-S8286',180,1,95,'2',1,'原装显示板+六插座电源板一套',1),
(537,'单片机 XL4015可调降压模块',20,1,4.49,'0.5',1,'输出电流可达5A\r\n带散热片',1),
(563,'微波炉 M1-235E红色薄膜开关',50,1,24,'0.5',1,'',1),
(557,'液晶屏 带固定孔船形电源开关',15,1,1.23,'0',1,'',2),
(690,'线座 电源线3脚1500W',10,1,2.1,'淘宝店 汕头市昇發电子',1,'电压力锅,电脑通用',41),
(671,'单片机 火焰传感器模块3线',5,1,1.2,'淘宝店 汕头市昇發电子',1,'',1),
(586,'单片机 STARS-922强粘性散热硅胶',10,1,2.5,'0',1,'',1),
(604,'锅 带线温度保险15a',20,1,2.3,'0',1,'零售10元',6),
(622,'电风扇 18寸手动铜电机',50,1,27,'2',1,'钢片厚2cm 村长7.8cm ',11),
(620,'机顶盒 户户通 20v15v5v',35,1,9,'0.5',1,'24v12v5v通用',5),
(621,'洗衣机 小天鹅TB80VN02D驱动板',200,1,64,'0.5',1,'',1),
(638,'电磁炉 FGA25N120',10,1,1.6,'淘宝店 汕头市昇發电子',1,'36\r\n在线电路板测量方法\r\n测量2和3脚如果正反电阻都很小时,已经损坏\r\n指针万用表黑接3脚，红接2脚700欧反向无穷大\r\n其余都是测量不通\r\n为好管',17),
(628,'洗衣机 波轮平衡杆固定60cm',70,1,16.5,'拼多多 拼拼电气配件',1,'',1),
(633,'洗衣机 滚筒MG100-4623DG电脑板+锁',260,1,160,'原厂洗衣机配件(淘宝)',1,'',1),
(634,'液晶屏 技改闪屏偏色逻辑',200,1,30,'视小龙液晶配件',1,'',1),
(635,'锅 电源指示灯',10,1,0.24,'淘宝店 汕头市昇發电子',1,'13',4),
(648,'电风扇 鸿运电机',30,1,15,'淘宝店 汕头市昇發电子',1,'',1),
(659,'电热燃气 双炉灶3v4线点火器',60,1,15,'诚意胜电器',1,'',1),
(663,'液晶屏 TP.VST59S液晶主板',170,1,43,'0',1,'',3),
(654,'电脑 b85m-hd3',180,1,1,'淘宝店 汕头市昇發电子',1,'维修剩下的好板',1),
(691,'耗材 打印机黑色墨水100ml',6.88,1,6.88,'淘宝店 汕头市昇發电子',1,'70ml可以打印500张A4纸左右\r\n100ml应该可以打印700张A4纸\r\n在打印或复印110张A4纸左右就需要加墨水了，加到墨盒背后海绵有水印就要马上停止加了，这时刚刚好',1),
(668,'适配器 12v2a',15,1,7.5,'0',1,'',1),
(673,'洗衣机 万能平衡杆',70,1,16,'0',1,'',2),
(678,'锅 带线温度保险管',15,1,1.4,'淘宝店 汕头市昇發电子',1,'',3),
(692,'洗衣机 XQG1279滚筒电脑板',250,1,73,'人民电子配件店',1,'',1),
(693,'洗衣机 XQG1012滚筒电脑板',25,1,73,'人民电子配件店',1,'',1);

--
-- Table structure for table `WarehouseRebill`
--

CREATE TABLE `WarehouseRebill` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `goods` varchar(32) NOT NULL,
  `date` datetime NOT NULL,
  `number` int(11) NOT NULL,
  `price` float NOT NULL,
  `buy` float NOT NULL DEFAULT 0,
  `rid` int(11) NOT NULL,
  `userid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=316 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WarehouseRebill`
--

INSERT INTO `WarehouseRebill` VALUES
(10,'青苔药(2000水)','2018-02-24 00:00:00',1,60,0,9,1),
(11,'速诛套(2000水)','2018-03-01 21:06:00',1,170,0,9,1),
(12,'海藻精(2000水)','2018-03-01 21:06:00',1,60,0,9,1),
(13,'代森猛锌(1000)','2018-03-01 21:06:00',2,60,0,9,1),
(14,'爱多收(2000水)','2018-03-01 21:06:00',1,100,0,9,1),
(23,'沃柑细胞分裂素','2018-03-01 21:07:00',1,60,0,9,1),
(28,'狙螨组合套餐','2018-03-11 09:08:00',1,150,0,9,1),
(29,'普滋硼','2018-03-11 09:08:00',1,90,0,9,1),
(30,'毒死蜱','2018-03-11 09:09:00',1,50,0,9,1),
(35,'洋丰复合151515','2018-03-18 16:14:00',1,140,0,9,1),
(43,'毒死蜱','2018-04-09 19:29:00',1,40,0,9,1),
(44,'花果之素','2018-04-09 19:30:00',1,100,0,9,1),
(45,'戊唑 醚菌酯','2018-04-09 19:31:00',1,120,0,9,1),
(46,'芸苔素内酯','2018-04-09 19:31:00',1,90,0,9,1),
(47,'赤霉酸','2018-04-09 19:32:00',1,25,0,9,1),
(56,'绣满佳(2000水)','2018-05-02 10:14:00',80,1,0,9,1),
(57,'磷酸二氢甲1500水','2018-05-02 10:20:00',40,1,0,9,1),
(59,'叶面肥 广氮钾','2018-05-15 12:17:00',1,80,0,9,1),
(60,'虱螨脲','2018-05-15 12:18:00',1,80,0,9,1),
(65,'代森猛锌1000水','2018-06-04 08:38:00',2,70,0,9,1),
(66,'盖之素','2018-06-04 08:38:00',1,70,0,9,1),
(67,'丁硫克百威 2000','2018-06-04 08:39:00',1,70,0,9,1),
(68,'乙螨唑 2000','2018-06-04 08:39:00',1,170,0,9,1),
(72,'联苯肼酯 阿维甲氰','2018-06-16 14:38:00',1,170,0,9,1),
(73,'盖之素','2018-06-28 13:58:00',1,70,0,9,1),
(74,'丁硫 吡虫啉','2018-06-28 13:59:00',1,90,0,9,1),
(75,'世多乐百亮(2000)','2018-06-28 14:00:00',1,60,0,9,1),
(77,'公海磷酸二氢钾50','2018-07-16 14:30:00',1,420,0,9,1),
(82,'民乐丰 2000水','2018-07-20 13:32:00',1,150,0,9,1),
(83,'美除 虱螨脲2000水','2018-07-20 13:32:00',1,110,0,9,1),
(84,'代森孟辛1000斤水','2018-07-20 13:34:00',2,70,0,9,1),
(93,'金佳朗 螺螨酯','2018-08-15 11:35:00',1,150,0,9,1),
(94,'砂满锈','2018-08-15 11:36:00',1,40,0,9,1),
(95,'噻菌铜1000水','2018-08-15 11:36:00',2,90,0,9,1),
(96,'芭田 15-5-25','2018-09-01 11:46:00',1,230,0,9,1),
(97,'绣满佳(阿维菌素)','2018-09-15 11:42:00',1,50,0,9,1),
(98,'锈锐(虱螨脲)','2018-09-15 11:43:00',1,50,0,9,1),
(99,'咪鲜胺','2018-09-15 11:43:00',1,90,0,9,1),
(100,'联苯肼酯 阿维甲氰','2018-09-15 11:44:00',1,170,0,9,1),
(104,'啶虫脒','2018-10-04 09:36:00',1,50,0,9,1),
(105,'枯草芽孢标杆菌','2018-10-04 09:36:00',1,90,0,9,1),
(106,'阿维菌素(速诛)','2018-10-28 07:50:00',1,170,0,9,1),
(107,'春雷霉素3个','2018-10-28 07:51:00',1,100,0,9,1),
(110,'戊唑 醚菌酯','2018-11-25 16:36:00',1,120,0,9,1),
(112,'胺鲜脂(2000倍)','2018-11-25 20:10:00',1,65,0,9,1);

--
-- Table structure for table `Warehouse_sold`
--

CREATE TABLE `Warehouse_sold` (
  `id` int(17) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `sell_date` datetime DEFAULT NULL,
  `profit` float NOT NULL DEFAULT 0,
  `warranty` date DEFAULT NULL,
  `customer_phone` char(11) DEFAULT NULL,
  `userid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11572 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `Warehouse_sold`
--

INSERT INTO `Warehouse_sold` VALUES
(10894,'耗材 A4喷墨复印打印纸','2025-06-24 12:20:30',0.7,NULL,NULL,1),
(10895,'耗材 A4喷墨复印打印纸','2025-06-24 12:20:30',0.7,NULL,NULL,1),
(10896,'耗材 A4喷墨复印打印纸','2025-06-24 12:20:30',0.7,NULL,NULL,1),
(10897,'耗材 A4喷墨复印打印纸','2025-06-24 12:20:30',0.7,NULL,NULL,1),
(10898,'耗材 A4喷墨复印打印纸','2025-06-24 12:20:30',0.7,NULL,NULL,1),
(10899,'耗材 A4喷墨复印打印纸','2025-06-24 12:20:30',0.7,NULL,NULL,1),
(10900,'耗材 A4喷墨复印打印纸','2025-06-25 08:32:59',0.7,NULL,NULL,1),
(10901,'耗材 A4喷墨复印打印纸','2025-06-25 08:32:59',0.7,NULL,NULL,1),
(10902,'耗材 A4喷墨复印打印纸','2025-06-25 08:32:59',0.7,NULL,NULL,1),
(10903,'耗材 A4喷墨复印打印纸','2025-06-25 08:32:59',0.7,NULL,NULL,1),
(10904,'耗材 A4喷墨复印打印纸','2025-06-25 09:36:40',0.7,NULL,NULL,1),
(10905,'耗材 A4喷墨复印打印纸','2025-06-25 09:36:40',0.7,NULL,NULL,1),
(10906,'耗材 A4喷墨复印打印纸','2025-06-25 09:36:40',0.7,NULL,NULL,1),
(10907,'耗材 A4喷墨复印打印纸','2025-06-25 11:29:30',0.7,NULL,NULL,1),
(10908,'耗材 A4喷墨复印打印纸','2025-06-25 11:29:31',0.7,NULL,NULL,1),
(10909,'耗材 A4喷墨复印打印纸','2025-06-25 11:29:31',0.7,NULL,NULL,1),
(10910,'耗材 A4喷墨复印打印纸','2025-06-27 10:48:02',0.7,NULL,NULL,1),
(10911,'耗材 A4喷墨复印打印纸','2025-06-27 10:48:02',0.7,NULL,NULL,1),
(10912,'耗材 A4喷墨复印打印纸','2025-06-27 10:48:02',0.7,NULL,NULL,1),
(10913,'耗材 A4喷墨复印打印纸','2025-06-27 10:48:02',0.7,NULL,NULL,1),
(10914,'耗材 A4喷墨复印打印纸','2025-06-27 10:48:02',0.7,NULL,NULL,1),
(10915,'耗材 A4喷墨复印打印纸','2025-06-27 17:10:41',0.7,NULL,NULL,1),
(10916,'耗材 A4喷墨复印打印纸','2025-06-27 17:10:41',0.7,NULL,NULL,1),
(10917,'耗材 A4喷墨复印打印纸','2025-06-27 17:10:41',0.7,NULL,NULL,1),
(10918,'耗材 A4喷墨复印打印纸','2025-06-27 17:10:41',0.7,NULL,NULL,1),
(10919,'电子称 船型开关3脚','2025-06-27 17:11:12',9.4,NULL,NULL,1),
(10920,'耗材 A4喷墨复印打印纸','2025-06-28 09:21:42',0.7,NULL,NULL,1),
(10921,'耗材 A4喷墨复印打印纸','2025-06-28 09:21:42',0.7,NULL,NULL,1),
(10922,'耗材 A4喷墨复印打印纸','2025-06-28 09:21:42',0.7,NULL,NULL,1),
(10923,'耗材 A4喷墨复印打印纸','2025-06-28 09:21:42',0.7,NULL,NULL,1),
(10924,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10925,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10926,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10927,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10928,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10929,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10930,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10931,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10932,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10933,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10934,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10935,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10936,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10937,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10938,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10939,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10940,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10941,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10942,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10943,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10944,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10945,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10946,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10947,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10948,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10949,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10950,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10951,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10952,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10953,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10954,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10955,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10956,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10957,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10958,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10959,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10960,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10961,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10962,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10963,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10964,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10965,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10966,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10967,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10968,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10969,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10970,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10971,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10972,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10973,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10974,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10975,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10976,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10977,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10978,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10979,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10980,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10981,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10982,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10983,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10984,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10985,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10986,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10987,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10988,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10989,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10990,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10991,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10992,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10993,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10994,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10995,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10996,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10997,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10998,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(10999,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11000,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11001,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11002,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11003,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11004,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11005,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11006,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11007,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11008,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11009,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11010,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11011,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11012,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11013,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11014,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11015,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11016,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11017,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11018,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11019,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11020,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11021,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11022,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11023,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11024,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11025,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11026,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11027,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11028,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11029,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11030,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11031,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11032,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11033,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11034,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11035,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11036,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11037,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11038,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11039,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11040,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11041,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11042,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11043,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11044,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11045,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11046,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11047,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11048,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11049,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11050,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11051,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11052,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11053,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11054,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11055,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11056,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11057,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11058,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11059,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11060,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11061,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11062,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11063,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11064,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11065,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11066,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11067,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11068,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11069,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11070,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11071,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11072,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11073,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11074,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11075,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11076,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11077,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11078,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11079,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11080,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11081,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11082,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11083,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11084,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11085,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11086,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11087,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11088,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11089,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11090,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11091,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11092,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11093,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11094,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11095,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11096,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11097,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11098,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11099,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11100,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11101,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11102,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11103,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11104,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11105,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11106,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11107,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11108,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11109,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11110,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11111,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:42',0.7,NULL,NULL,1),
(11112,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11113,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11114,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11115,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11116,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11117,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11118,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11119,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11120,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11121,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11122,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11123,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11124,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11125,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11126,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11127,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11128,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11129,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11130,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11131,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11132,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11133,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11134,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11135,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11136,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11137,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11138,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11139,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11140,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11141,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11142,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11143,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11144,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11145,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11146,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11147,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11148,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11149,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11150,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11151,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11152,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11153,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11154,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11155,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11156,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11157,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11158,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11159,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11160,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11161,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11162,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11163,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11164,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11165,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11166,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11167,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11168,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11169,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11170,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11171,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11172,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11173,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11174,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11175,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11176,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11177,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11178,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11179,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11180,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11181,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11182,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11183,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11184,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11185,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11186,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11187,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11188,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11189,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11190,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11191,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11192,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11193,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11194,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11195,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11196,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11197,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11198,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11199,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11200,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11201,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11202,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11203,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11204,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11205,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11206,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11207,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11208,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11209,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11210,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11211,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11212,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11213,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11214,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11215,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11216,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11217,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11218,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11219,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11220,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11221,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11222,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11223,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11224,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11225,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11226,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11227,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11228,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11229,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11230,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11231,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11232,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11233,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11234,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11235,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11236,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11237,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11238,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11239,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11240,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11241,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11242,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11243,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11244,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11245,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11246,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11247,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11248,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11249,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11250,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11251,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11252,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11253,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11254,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11255,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11256,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11257,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11258,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11259,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11260,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11261,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11262,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11263,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11264,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11265,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11266,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11267,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11268,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11269,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11270,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11271,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11272,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11273,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11274,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11275,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11276,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11277,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11278,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11279,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11280,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11281,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11282,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11283,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11284,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11285,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11286,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11287,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11288,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11289,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11290,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11291,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11292,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11293,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11294,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11295,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11296,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11297,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11298,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11299,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11300,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11301,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11302,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11303,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11304,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11305,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11306,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11307,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11308,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11309,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11310,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11311,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11312,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11313,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11314,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11315,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11316,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11317,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11318,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11319,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11320,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11321,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11322,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11323,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11324,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11325,'耗材 A4喷墨复印打印纸','2025-08-17 09:29:43',0.7,NULL,NULL,1),
(11326,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:17',0.7,NULL,NULL,1),
(11327,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:17',0.7,NULL,NULL,1),
(11328,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:17',0.7,NULL,NULL,1),
(11329,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:17',0.7,NULL,NULL,1),
(11330,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:17',0.7,NULL,NULL,1),
(11331,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:17',0.7,NULL,NULL,1),
(11332,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:23',0.7,NULL,NULL,1),
(11333,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:23',0.7,NULL,NULL,1),
(11334,'耗材 A4喷墨复印打印纸','2025-08-17 10:05:23',0.7,NULL,NULL,1),
(11335,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11336,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11337,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11338,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11339,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11340,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11341,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11342,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11343,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11344,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11345,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11346,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11347,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11348,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11349,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11350,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11351,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11352,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11353,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11354,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11355,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11356,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11357,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11358,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11359,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11360,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11361,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11362,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11363,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11364,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11365,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11366,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11367,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11368,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11369,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11370,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11371,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11372,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11373,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11374,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11375,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11376,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11377,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:21',0.7,NULL,NULL,1),
(11378,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11379,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11380,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11381,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11382,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11383,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11384,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11385,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11386,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11387,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11388,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11389,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11390,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11391,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11392,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11393,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11394,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11395,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11396,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11397,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11398,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11399,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11400,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11401,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11402,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11403,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11404,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:30',0.7,NULL,NULL,1),
(11405,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11406,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11407,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11408,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11409,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11410,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11411,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11412,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11413,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11414,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11415,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11416,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11417,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11418,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11419,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11420,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11421,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:44',0.7,NULL,NULL,1),
(11422,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11423,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11424,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11425,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11426,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11427,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11428,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11429,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11430,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11431,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:45',0.7,NULL,NULL,1),
(11432,'耗材 A4喷墨复印打印纸','2025-08-22 12:31:50',0.7,NULL,NULL,1),
(11433,'电压锅 继电器SRD-12VDC-SL-C','2025-08-22 12:35:41',19,NULL,NULL,1),
(11434,'电热燃气 热水器三线点火器','2025-08-22 12:35:52',25.75,NULL,NULL,1),
(11435,'电子称 船形开关3脚3档','2025-08-22 12:36:13',9.2,NULL,NULL,1),
(11436,'耗材 A4喷墨复印打印纸','2025-08-22 13:38:02',0.7,NULL,NULL,1),
(11437,'耗材 A4喷墨复印打印纸','2025-08-22 13:38:02',0.7,NULL,NULL,1),
(11438,'耗材 A4喷墨复印打印纸','2025-08-22 13:38:02',0.7,NULL,NULL,1),
(11439,'耗材 A4喷墨复印打印纸','2025-08-22 13:38:02',0.7,NULL,NULL,1),
(11440,'电子称 电池4v5ah','2025-08-22 13:59:31',19,NULL,NULL,1),
(11441,'电子称 电池4v5ah','2025-08-22 13:59:31',19,NULL,NULL,1),
(11442,'电饭锅 2脚船型开关','2025-08-22 13:59:51',4.7,NULL,NULL,1),
(11443,'电饭锅 2脚船型开关','2025-08-22 13:59:51',4.7,NULL,NULL,1),
(11444,'电商 35x26x21 10斤装泡沫装','2025-08-22 18:34:39',1.4,NULL,NULL,1),
(11445,'耗材 A4喷墨复印打印纸','2025-08-22 18:34:41',0.7,NULL,NULL,1),
(11446,'耗材 A4喷墨复印打印纸','2025-08-22 18:34:45',0.7,NULL,NULL,1),
(11447,'电脑 SD卡套','2025-08-22 18:47:43',7,NULL,NULL,1),
(11448,'电脑 SD卡套','2025-08-22 18:48:53',7,NULL,NULL,1),
(11449,'电脑 SD卡套','2025-08-22 18:48:56',7,NULL,NULL,1),
(11450,'电脑 SD卡套','2025-08-22 18:49:00',7,NULL,NULL,1),
(11451,'电脑 SD卡套','2025-08-22 18:49:05',7,NULL,NULL,1),
(11452,'耗材 A4喷墨复印打印纸','2025-08-23 09:05:37',0.7,NULL,NULL,1),
(11453,'耗材 A4喷墨复印打印纸','2025-08-23 09:05:37',0.7,NULL,NULL,1),
(11454,'耗材 A4喷墨复印打印纸','2025-08-23 09:05:37',0.7,NULL,NULL,1),
(11455,'耗材 A4喷墨复印打印纸','2025-08-23 09:05:37',0.7,NULL,NULL,1),
(11456,'耗材 A4喷墨复印打印纸','2025-08-23 09:05:37',0.7,NULL,NULL,1),
(11457,'耗材 A4喷墨复印打印纸','2025-08-23 09:05:37',0.7,NULL,NULL,1),
(11458,'耗材 A4喷墨复印打印纸','2025-08-23 09:23:22',0.7,NULL,NULL,1),
(11459,'耗材 A4喷墨复印打印纸','2025-08-23 09:23:22',0.7,NULL,NULL,1),
(11460,'耗材 A4喷墨复印打印纸','2025-08-23 09:23:28',0.7,NULL,NULL,1),
(11461,'耗材 A4喷墨复印打印纸','2025-08-23 09:23:28',0.7,NULL,NULL,1),
(11462,'耗材 A4喷墨复印打印纸','2025-08-23 09:23:28',0.7,NULL,NULL,1),
(11463,'耗材 A4喷墨复印打印纸','2025-08-23 09:32:58',0.7,NULL,NULL,1),
(11464,'耗材 A4喷墨复印打印纸','2025-08-23 09:33:08',0.7,NULL,NULL,1),
(11465,'耗材 A4喷墨复印打印纸','2025-08-23 09:33:08',0.7,NULL,NULL,1),
(11466,'耗材 A4喷墨复印打印纸','2025-08-23 09:33:08',0.7,NULL,NULL,1),
(11467,'耗材 A4喷墨复印打印纸','2025-08-23 09:33:08',0.7,NULL,NULL,1),
(11468,'耗材 A4喷墨复印打印纸','2025-08-23 09:33:08',0.7,NULL,NULL,1),
(11469,'耗材 A4喷墨复印打印纸','2025-08-23 09:33:08',0.7,NULL,NULL,1),
(11470,'耗材 A4喷墨复印打印纸','2025-08-23 11:36:19',0.7,NULL,NULL,1),
(11471,'耗材 A4喷墨复印打印纸','2025-08-23 11:36:19',0.7,NULL,NULL,1),
(11472,'耗材 A4喷墨复印打印纸','2025-08-23 11:36:19',0.7,NULL,NULL,1),
(11473,'耗材 A4喷墨复印打印纸','2025-08-23 11:41:10',0.7,NULL,NULL,1),
(11474,'耗材 A4喷墨复印打印纸','2025-08-23 11:46:35',0.7,NULL,NULL,1),
(11475,'制冷 空调万能遥控器','2025-08-23 11:50:29',13.25,NULL,NULL,1),
(11476,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11477,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11478,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11479,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11480,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11481,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11482,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11483,'耗材 A4喷墨复印打印纸','2025-08-23 12:17:06',0.7,NULL,NULL,1),
(11484,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:10',0.7,NULL,NULL,1),
(11485,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:11',0.7,NULL,NULL,1),
(11486,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:11',0.7,NULL,NULL,1),
(11487,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:11',0.7,NULL,NULL,1),
(11488,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:11',0.7,NULL,NULL,1),
(11489,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:11',0.7,NULL,NULL,1),
(11490,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:11',0.7,NULL,NULL,1),
(11491,'耗材 A4喷墨复印打印纸','2025-08-23 12:54:11',0.7,NULL,NULL,1),
(11492,'电商 35x26x21 10斤装泡沫装','2025-08-23 16:25:01',1.4,NULL,NULL,1),
(11493,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:12',0.7,NULL,NULL,1),
(11494,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:12',0.7,NULL,NULL,1),
(11495,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:12',0.7,NULL,NULL,1),
(11496,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:12',0.7,NULL,NULL,1),
(11497,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:12',0.7,NULL,NULL,1),
(11498,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:19',0.7,NULL,NULL,1),
(11499,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:19',0.7,NULL,NULL,1),
(11500,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:19',0.7,NULL,NULL,1),
(11501,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:19',0.7,NULL,NULL,1),
(11502,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:19',0.7,NULL,NULL,1),
(11503,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:19',0.7,NULL,NULL,1),
(11504,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:19',0.7,NULL,NULL,1),
(11505,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:25',0.7,NULL,NULL,1),
(11506,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:25',0.7,NULL,NULL,1),
(11507,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:25',0.7,NULL,NULL,1),
(11508,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:33',0.7,NULL,NULL,1),
(11509,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:33',0.7,NULL,NULL,1),
(11510,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:33',0.7,NULL,NULL,1),
(11511,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:33',0.7,NULL,NULL,1),
(11512,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:33',0.7,NULL,NULL,1),
(11513,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:33',0.7,NULL,NULL,1),
(11514,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:33',0.7,NULL,NULL,1),
(11515,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11516,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11517,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11518,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11519,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11520,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11521,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11522,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11523,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11524,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11525,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11526,'耗材 A4喷墨复印打印纸','2025-08-23 16:25:45',0.7,NULL,NULL,1),
(11527,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11528,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11529,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11530,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11531,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11532,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11533,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11534,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11535,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11536,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11537,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11538,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11539,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11540,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11541,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11542,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11543,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11544,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11545,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11546,'耗材 A4喷墨复印打印纸','2025-08-23 17:09:09',0.7,NULL,NULL,1),
(11547,'耗材 A4喷墨复印打印纸','2025-08-23 17:15:03',0.7,NULL,NULL,1),
(11548,'耗材 A4喷墨复印打印纸','2025-08-23 17:15:03',0.7,NULL,NULL,1),
(11549,'耗材 A4喷墨复印打印纸','2025-08-23 17:27:32',0.7,NULL,NULL,1),
(11550,'耗材 A4喷墨复印打印纸','2025-08-23 17:27:32',0.7,NULL,NULL,1),
(11551,'耗材 A4喷墨复印打印纸','2025-08-23 17:27:32',0.7,NULL,NULL,1),
(11552,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11553,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11554,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11555,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11556,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11557,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11558,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11559,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11560,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11561,'耗材 A4喷墨复印打印纸','2025-08-23 18:33:27',0.7,NULL,NULL,1),
(11562,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11563,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11564,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11565,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11566,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11567,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11568,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11569,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11570,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1),
(11571,'耗材 A4喷墨复印打印纸','2025-08-29 07:29:39',0.7,NULL,NULL,1);

--
-- Table structure for table `WeChatTextVideo`
--

CREATE TABLE `WeChatTextVideo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `textOrUrl` text NOT NULL,
  `endtime` int(10) NOT NULL,
  `readZ` int(1) DEFAULT 0,
  `random_str` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=53 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WeChatTextVideo`
--


--
-- Table structure for table `WebsocketRoom`
--

CREATE TABLE `WebsocketRoom` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(24) NOT NULL,
  `date` datetime NOT NULL,
  `command` varchar(300) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WebsocketRoom`
--

INSERT INTO `WebsocketRoom` VALUES
(2,'server','2023-08-16 20:30:30','关机&重启&备份mqtt启动&WIFI热点开启&WIFI热点关闭&WIFI热点用户&今天快递到远程php&英语1250句备份'),
(4,'scan','2024-08-04 00:00:00','入库模式&统计数量&出库模式&显示模式&入库数据传远程服务器&出库数据传远程服务器&邮政模式&远程烧录'),
(6,'crane','2025-03-05 00:00:00','up|stop|down');

--
-- Table structure for table `WebsocketUsers`
--

CREATE TABLE `WebsocketUsers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(32) NOT NULL,
  `passwd` varchar(64) NOT NULL DEFAULT '',
  `roomid` int(7) DEFAULT 0,
  `nickname` varchar(32) NOT NULL,
  `onlineTime` datetime DEFAULT NULL,
  `downlineTime` datetime DEFAULT NULL,
  `remaining` int(11) DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WebsocketUsers`
--

INSERT INTO `WebsocketUsers` VALUES
(1,'15677817648','15677817648z',1,'','2025-06-17 12:12:28','2025-06-17 12:12:37',0),
(2,'13788280442','13788280442z',1,'','1000-01-01 00:00:00','1000-01-01 00:00:00',0),
(3,'18178898624','18178898624z',1,'','1000-01-01 00:00:00','1000-01-01 00:00:00',0),
(4,'15078578097','15078578097z',1,'','2024-08-14 22:39:41','2024-08-14 22:39:49',0),
(8,'15677817648','15677817648z',3,'','2025-04-18 08:16:44','2025-04-18 08:16:46',0),
(9,'15677817648','15677817648z',4,'','2025-06-22 09:02:58','2025-06-22 09:03:12',0),
(15,'15677817648','15677817648z',9,'webserverz','2024-12-31 19:24:00','2024-12-31 19:24:51',32400),
(16,'15677817648','15677817648z',5,'快递数据分析','2025-01-16 07:39:41','2025-01-16 07:39:53',0),
(17,'crane','efghijk',6,'吊机',NULL,NULL,0),
(18,'babata','efghijk',1,'芭芭塔',NULL,NULL,0);

--
-- Table structure for table `WisdomBar`
--

CREATE TABLE `WisdomBar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(60) NOT NULL,
  `content` text NOT NULL,
  `date` datetime NOT NULL,
  `userid` int(11) NOT NULL,
  UNIQUE KEY `id_2` (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=342 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WisdomBar`
--

INSERT INTO `WisdomBar` VALUES
(6,'手动代码创建数据表','create table abc(\r\n\'id\' int(11) not null auto_increment,\r\nprimary key(\'id\')\r\n)engine-innodb default charset=utf8;','2017-12-05 09:53:00',1),
(9,'邮件知识 IMAP是“双向”的而POP3是单向的','邮件知识 IMAP是“双向”的而POP3是单向的**作不会反馈到服务器上,IMAP正好相反','2017-12-05 09:54:00',1),
(13,'IMAP和POP有什么区别','POP 移动邮件标记已读等，这是不会反馈到服务器上的。IMAP就不同了。还有一点不同，IMAP可以只下载邮件的主题，只有当您真正需要的时候，才会下载邮件的所有内容','2017-12-14 16:36:00',1),
(14,'固态硬盘4K对齐','分区时使用4096','2018-01-01 14:46:00',1),
(15,'android 获取去电号码','String outgoingNumber = getResultData();\r\n            Toast.makeText(context, \"去电号码是：\" + outgoingNumber, Toast.LENGTH_LONG).show();','2018-01-03 18:46:00',1),
(16,'去电',' Uri  uri= Uri.parse(\"content://call_log/calls\");\r\n        //监听通话记录内容改变\r\n        getContentResolver().registerContentObserver(uri, true,\r\n                new ContentObserver(new Handler()) {\r\n            //监视的数据库发生了改变,就会触发的方法\r\n            @Override\r\n            public void onChange(boolean selfChange) {\r\n                super.onChange(selfChange);\r\n              tv.setText(\"状态改变了\");\r\n            }\r\n        });','2018-01-18 21:02:00',1),
(19,'手机隐藏的一个监听指令','*#*#4636#*#*','2018-03-02 07:53:00',1),
(144,'冰点还原秘钥','JZ1YM06A-3QT4X32Q-0DQEJ25S-M0ZWDWKQ-PJP93K3F','2020-07-29 20:59:00',1),
(25,'TP5使用','使用步骤','2018-03-27 21:28:00',1),
(30,'手机刷机三合一','1.ROM\r\n2.手机连接驱动\r\n3.平台','2018-04-13 18:37:00',1),
(104,'液化气罐','空罐33斤左右,满罐60斤左右','2019-12-19 21:48:00',1),
(33,'沃柑保花','普滋硼+泰森猛锌+细胞分裂素+杀红杀螨药 不能用溃疡病药','2018-04-21 13:53:00',1),
(34,'沃柑保果','普滋硼+毒死蜱+花果之素+戊唑 醚菌酯+芸苔素内酯(芸多乐)+赤霉酸+杀红杀螨药+磷酸二氢甲(叶面肥) 不能用溃疡病药','2018-04-21 13:53:00',1),
(35,'CSS的position属性','absolute绝对定位 在整个网页面中某个位置.fixed固定定位,固定在整个显示屏的某个位置.relative相对于其它位置进行定位','2018-04-23 08:30:00',1),
(36,'CSS的z-index属性','z-index使用前提必须要有position属性才有效果,z-index即在两个元素重叠的时为负数被遮挡,为正数值大的最前面显示','2018-04-23 08:36:00',1),
(40,'割草机机油更换量','一次80毫升,更换时间为10个小时更换一次','2018-06-04 18:19:00',1),
(45,'至尊30公斤电子称改斤显示方法','操作之前请注意，先准备一个准5公斤的物品。每个步骤中的去皮，零和小数点都不能掉，请依次操作：\r\n\r\n1.按3658（或者9868）去皮 出现CAL （半个零）\r\n\r\n2.输入:1去皮   单价窗口显示2\r\n\r\n3.放上5千克物品 再去皮  单价窗口显示3\r\n\r\n4.输入：10.000去皮   单价窗口显示4\r\n\r\n5.输入：60.000去皮  单价窗口显示5\r\n\r\n6.输入：3去皮   单价窗口显示6\r\n\r\n7.输入：10去皮   重量窗口显示10.000，其他窗口归零，操作完成，请先关机再拿下物品。开机即可使用','2018-09-06 22:17:00',1),
(46,'防止网站视频 或iframe被别的网站引用',' header(\'X-Frame-Options: deny\');','2018-09-10 08:33:00',1),
(56,'500斤水配1斤进口磷酸二氢钾','500斤水配1斤进口磷酸二氢钾','2018-10-30 14:53:00',1),
(58,'win10 开机启动方法','C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp  快捷方式存放地址','2019-02-06 20:26:00',1),
(70,'王者荣耀攻速阀','露娜12 李白1 老夫子5','2019-05-13 00:29:00',1),
(67,'4斤草甘膦可配500斤水3两洗衣粉','4斤草甘膦可配500斤水3两洗衣粉','2019-04-18 07:57:00',1),
(80,'程序开机自启方法','右键 我的电脑 ->管理 ->服务与应用程序->服务 \r\n\r\n找到你的程序选择 自启 确认后重启','2019-07-14 06:36:00',1),
(76,'宽带DNS大全','电信的 202.103.224.68 \r\n202.103.225.68\r\n移动的 211.138.240.100','2019-06-09 21:29:00',1),
(94,'奇迹私服法师攻速','不超过405是最快的','2019-12-12 19:36:00',1),
(91,'单机游戏','https://www.3dmgame.com','2019-11-03 21:35:00',1),
(93,'汽车5座6座7座区别','5-6座车6年免检\r\n7座车每2年车检1次\r\n567座车6年以后每年都车检1次\r\n567座车15年以后每年都车检2次\r\n强险770元每年\r\n车船税按排量计算1.0-1.6是每年360元\r\n强险+车船税=1130元每年\r\n','2019-11-10 08:47:00',1),
(90,'割草机汽油机启动巧门','用根小指大小木棍沾点汽油在进气口放,然后启动,这样容易启动','2019-10-21 11:52:00',1),
(95,'穿42码鞋子1.73米穿XL衣服','穿42码鞋子1.73米穿XL衣服','2019-12-18 15:36:00',1),
(99,'称动帐号amdin Cmcc10086#','称动帐号amdin Cmcc10086#','2019-12-18 15:38:00',1),
(101,'街上支付宝电费帐号查询040500420012782','街上支付宝电费帐号查询040500420012782','2019-12-18 15:40:00',1),
(107,'卖果套路说明','问:淘市上有卖价格很低的沃柑?\r\n\r\n答:不可能!果园田头批发价都在3到4元一斤,加上打包装,快递费,怎么可能比我更低呢?\r\n\r\n你买到的只有两种可能,\r\n\r\n1.次果,花皮,太阳果,小个青果(哪有那么多次果,最可能的是下面第二个原因)\r\n\r\n2.反问一下您自己是否会分辨真正的沃柑,某些商家都是挂羊头卖狗肉,发给你就是那种田头1块左右(非沃柑)果,坑你还帮人家数钱点赞!\r\n\r\n3.比你贵点人家买5斤送5斤(套路啊大哥).一共10斤你感觉赚到了是吧!\r\n\r\n套路=>给你发5斤沃柑,送的5斤却是市场上几毛钱一斤的迷橘类的东西,你还觉你赚到了吗?\r\n\r\n \r\n\r\n4.您可以去当地超市看一下沃柑的价格一斤多少再来对比一下!','2020-01-02 10:55:00',1),
(106,'沃柑广告语','广西沃柑 果园直销\r\n没有中间商赚差价,一件代发,全国包邮!\r\n净重9斤=50元,净重10斤=54元,量大可议!\r\n特别甜,发的都是大果65规格以上精品果\r\n支持淘宝下单交易,安心放心交易\r\n诚招微商或客商合作一起发展!\r\n网站www.360xyz.cn 有相关水果照片展示\r\n本人手机号15677817648 微信同号','2019-12-31 09:35:00',1),
(108,'东三省西六省','东三省 ->黑龙江省、吉林省、辽宁省\r\n西六省 ->宁夏、新疆、青海、陕西、甘肃、内蒙古自治区','2020-01-05 20:52:00',1),
(109,'沃柑商品广告标题','广西沃柑 果园直销基地发货 大果净重9斤10斤包邮 假一赔十 特甜\r\n\r\n沃柑 假一赔十量大从优,\r\n\r\n问:淘市上有卖价格很低的沃柑?\r\n\r\n答:不可能!果园田头批发价都在3到4元一斤,加上打包装,快递费,怎么可能比我更低呢?\r\n\r\n你买到的只有两种可能,\r\n\r\n1.次果,花皮,太阳果,小个青果(哪有那么多次果,最可能的是下面第二个原因)\r\n\r\n2.反问一下您自己是否会分辨真正的沃柑,某些商家都是挂羊头卖狗肉,发给你就是那种田头1块左右(非沃柑)果,坑你还帮人家数钱点赞!\r\n\r\n3.比你贵点人家买5斤送5斤(套路啊大哥).一共10斤你感觉赚到了是吧!\r\n\r\n套路=>给你发5斤沃柑,送的5斤却是市场上几毛钱一斤的迷橘类的东西,你还觉你赚到了吗?\r\n\r\n \r\n\r\n4.您可以去当地超市看一下沃柑的价格一斤多少再来对比一下!\r\n\r\n \r\n\r\n \r\n\r\n欢迎广大朋友合作 15677817648\r\n\r\n广西少数民族沃柑山青水秀育好果来自壮族的沃柑\r\n\r\n全国包邮\r\n\r\n特别声明: 本店的果树都是用割草机除草的,物理除草,没有污染!\r\n\r\n请客户放心!有时旺旺不在线可以电话 15677817648真正的沃柑,\r\n\r\n假一赔十','2020-01-26 12:12:00',1),
(303,'电费缴费详情','电费缴费详情','2024-11-01 08:46:00',1),
(304,'话费缴费详情','话费缴费详情','2024-11-01 08:49:00',1),
(117,'沃柑价格表','礼盒装净果9斤68元\r\n<普通装>净果10斤大果55元(70以上)\r\n<普通装>净果10斤中大果45元(65-70)\r\n<普通装>净果10斤中果40元(60-65)\r\n<普通装>净果10斤中果35元(55-60)\r\n','2020-03-04 20:06:00',1),
(118,'老款小喷雾机正负电识别','直立好喷雾器，最靠近底部的是正极','2020-03-11 15:54:00',1),
(119,'沃柑冷库保存温度','沃柑冷库贮藏最适宜的温度是0℃～1.2℃，湿度最好保持在85%—90%。沃柑放在这样的冷库环境中贮藏，保质期可达2个月左右\r\n','2020-03-12 11:38:00',1),
(120,'木瓜奇迹1万点法师加点','力300 敏捷 1380 智力5400 剩下的体力','2020-03-19 14:44:00',1),
(218,'抖音号： 77406979860','\r\n达哥悦读\r\n抖音号： 77406979860','2022-07-24 08:44:00',1),
(217,'外出工作职业选择 非常重要','有粉尘污染，或刺激味的工作，多少钱都不能做\r\n','2022-07-23 09:11:00',1),
(253,'真理1','读万卷书不如行万里路\r\n行万里路不如阅人无数\r\n阅人无数不如名师指路\r\n名师指路不如贵人相助','2023-12-31 09:06:00',1),
(212,'帖瓷砖方法','1.先用电子水平仪整体标记水平点\r\n2.用粘有墨水的细线，两点一线，回弹让墙壁有一条水平线\r\n3.水泥+河沙+水 1比3比1 比例混合成半湿状态\r\n4.沙子铺平整，把瓷砖预先放好在要贴的位置，该切割的切，切割瓷砖，搅拌水泥 要做好防尘工作，最好是用电风扇 吹向自己\r\n5.找一水桶 放上3分之1的水跟水泥混合用于直接粘在瓷砖背面  水跟水泥比例大概1比1\r\n6.水平尺，瓷砖振动器，水平细线准备好，现在就要使用\r\n7.瓷砖之间间隔2毫米左右可以用两个绑瓷砖的带子折叠，在一线上下两头放上去，用于隔开\r\n\r\n','2022-07-12 08:50:00',1),
(125,'手机型号首个字母的意思','M -> 正规零售机\r\nN -> 官方换亲机\r\nF -> 官方翻新机\r\n3A-> 店铺展示机 ','2020-03-31 20:53:00',1),
(127,'王者荣耀甄姬心得','王者荣耀甄姬。可以边移动边放技能。\r\n连招方式。\r\n3 2 1 普通攻击直到二技能冷却 2技能\r\n开局主点 2技能。','2020-05-15 04:13:00',1),
(128,'电压力锅煮白粥设置','调到01','2020-05-22 09:32:00',1),
(133,'mysql source 就断开连接','问题主要是编码问题，把编码设置成utf8\r\n打开my.cnf后，在文件内的[mysqld]下增加如下几行代码:\r\n[client]\r\ndefault-character-set=utf8\r\n[mysqld]\r\ncharacter-set-server=utf8\r\n[mysql]\r\ndefault-character-set=utf8\r\n\r\n\r\n重启','2020-05-28 09:35:00',1),
(136,'火狐浏览器帐号密码','282246101@qq.com    www.360xyz.cn','2020-07-09 12:19:00',1),
(235,'天火奇迹革新区','golang\r\nQQ28224610','2023-07-18 08:15:00',1),
(139,'二冲程汽油机油锯','加的燃油 汽油和二冲程专用机油比例25比1.2\r\n油锯链条 切记加汽油机普通发动机油 \r\n等机油从油锯链条上溅出来的时候，才能锯木头\r\n装油锯链条时装完后记得手动转一下链条\r\n检查是否卡住，顺畅为正确\r\n','2020-07-18 20:20:00',1),
(143,'更改mysql密码','use mysql\r\nupdate user set password=password(\'新密码\') where user=\'root\' and host=\'localhost\';\r\nflush privilege','2020-07-29 20:58:00',1),
(167,'物联网公安备案帐号密码','qq282246101  qq@282246101','2020-09-20 17:54:00',1),
(161,'ubuntu18.04与centos8 文件大小，性能对比','ubuntu18.04与centos8 文件大小，性能对比','2020-08-18 20:05:00',1),
(173,'suv前后轮胎气压','前两轮胎218kpa  后两轮胎气压215kpa','2020-12-17 13:51:00',1),
(174,'买suv时陈吉佳奶奶打了666.6元红包','买suv时陈吉佳奶奶打了666.6元红包','2020-12-17 13:53:00',1),
(175,'买SUV时覃慧春发了66.66元微信红包','买SUV时覃慧春发了66.66元微信红包','2020-12-23 22:26:00',1),
(179,'一件代发计算','网套0.5元每单\r\n纸箱胶带0.3元每单\r\n纸箱2元每单\r\n快递费4.5元每单\r\n10000斤按损耗5%就是500斤\r\n剩余9500斤 以9斤净果为例 就是1055单\r\n小果15%x1055=158单\r\n中果35%x1055=369单\r\n大果55%x1055=580单\r\n以2000单请8个人工为例1000单请4个人\r\n每人每天180元x4=720元人工费 / 1055=0.68算0.7元每件打包费用\r\n网套0.5+胶带0.3+纸箱2+快递4.5=7.3元每件打包运费+0.7元打包费用=8元\r\n每单完成任务送到客户手上成本是8元 x 1055=8440元\r\n以价格2元一斤收10000斤成本就是20000元\r\n20000+8440=28440元\r\n每单应挣1？x1055=1055\r\n28440+1055=总合费用\r\n29495\r\n然后用总合费用算出 小中大果应该卖多少钱每件\r\n','2021-04-02 23:11:00',1),
(327,'3000元项目','液位报警器\r\n报警器要求：\r\n1.水位报警器需向微信及小程序发送报警信息\r\n(60%以下为安全水位，60%-80%为黄色报警，80%以上为红色报警)\r\n2.小程序中需可自由添加删除用户信息（用户账号邀请方式为微信邀请）\r\n3.小程序显示模拟水位百分比实时状态图，可从0%-100%分十级逐级显示\r\n4.视图中分为17个一级类别，每个一级类别下最少监控15台以上的二级类别：既液位报\r\n警器。每台液位报警器空栏处显示是否关联液位报警器，如已关联显示第三条，未关联显\r\n示未关联信息，关联设备操作时需简单明了。\r\n5.液位报警器需有自检功能\r\n（如10%触发，20%却不触发，30%又得到触发，那20%点位存在可能损坏情况以此类推）\r\n6.此上故障情况也均通过视图及微信进行故障报警，提醒需就地检查','2025-05-04 08:13:00',1),
(191,'机油防伪查询网站','先上网站手动输入查询\r\n再微信描码看看','2021-06-06 13:18:00',1),
(189,'附近WIFI密码','HUAWEI-EY6V WIFI密码13481836880 \r\nCMCC-nCYi 6rmj242f \r\nMERCURY_3E7E  a13768488886','2021-04-17 08:50:00',1),
(192,'cloud.vivo.com','密码qq282246101','2021-07-12 22:00:00',1),
(234,'php PDO类','<?php\r\nnamespace myclass;\r\n\r\nclass PdoXyz{\r\n	//private $host=\"192.168.100.254\";\r\n	private $host=\"2280lan.dnstoo.com\";\r\n	//private $sqlUser=\"root\";\r\n	private $sqlUser=\"xyz_f\";\r\n	private $sqlPasswd=\"qq282246101\";\r\n	private $sqlDb=\"xyz\";\r\n	private $PDO=null;\r\n	public function __construct(string $dbName=\"\"){\r\n		if ($dbName!=\"\") {\r\n			$this->sqlDb=$dbName;\r\n		}\r\n		$this->PDO = new \\pdo(\"mysql:host={$this->host};port=3306;dbname={$this->sqlDb}\", $this->sqlUser,$this->sqlPasswd);\r\n		//转义交由MySQL Server转义\r\n		$this->PDO->setAttribute(\\PDO::ATTR_EMULATE_PREPARES, false);\r\n		$this->PDO->exec(\'set names utf8\');\r\n	}\r\n	public function Fetch(string $sql, array $arr){\r\n		$execute = $this->PDO->prepare($sql);\r\n		if ($execute) {\r\n			if($execute->execute($arr)){\r\n				$execute->setFetchMode(\\PDO::FETCH_ASSOC);\r\n				$result = $execute->fetch();\r\n				return $result;\r\n			}\r\n		}\r\n		return null;\r\n	}\r\n	public function FetchAll(string $sql, array $arr) :array{\r\n		$execute = $this->PDO->prepare($sql);\r\n		if ($execute) {\r\n			if($execute->execute($arr)){\r\n				$execute->setFetchMode(\\PDO::FETCH_ASSOC);\r\n				$result = $execute->fetchAll();\r\n				return $result;\r\n			}\r\n		}\r\n		return array();\r\n	}\r\n	public function Exec(string $sql, array $arr):int{\r\n		$execute = $this->PDO->prepare($sql);\r\n		$execute->execute($arr);\r\n		return $execute->rowCount();\r\n	}\r\n	public function LastInsertId(string $sql): int{\r\n		$execute = $this->PDO->prepare($sql);\r\n		$execute->execute();\r\n		return $execute->lastInsertId;\r\n	}\r\n	public function DeleteAll(String $table): bool{\r\n		$execute = $this->PDO->prepare(\"SELECT id FROM {$table}\");\r\n		if ($execute) {\r\n			if($execute->execute(array())){\r\n				$execute->setFetchMode(\\PDO::FETCH_ASSOC);\r\n				$a = $execute->fetchAll();\r\n				foreach ($a as $k => $v) {\r\n					$sql = \"DELETE FROM {$table} WHERE id=?\";\r\n					$execute1 = $this->PDO->prepare($sql);\r\n					$execute1->execute(array($v[\'id\']));\r\n				}\r\n				return true;\r\n			}\r\n			return false;\r\n		}\r\n		return false;\r\n	}\r\n	public function __destruct(){\r\n		$this->PDO=null;\r\n	}\r\n}\r\n','2023-06-30 08:06:00',1),
(227,'早晚一大杯豆浆可以调理胃','豆浆什么都不要放,豆浆是碱性可以中和胃酸,补钙,\r\n胃酸太多可以吐出来缓解.','2022-12-25 09:34:00',1),
(222,'wx','wx0732ee13b305beba\r\n3ca043a8038d6b73cc2cf0651ffc9130','2022-09-10 10:55:00',1),
(194,'怎么判断感冒是病毒性还是细菌性','1.病毒性感冒的时候，往往全身症状是比较严重的，会有浑身的肌肉酸疼、乏力的症状出现，会有流清鼻涕的症状\r\n\r\n四季抗病毒合剂、利巴韦林颗粒或者蒲地蓝消炎口服液\r\n2.细菌性感冒，往往会有扁桃体咽喉部的化脓，检查血常规的时候会有白细胞的升高，会有流黄鼻涕或者咳黄痰的症状出现\r\n抗生素进行消炎治疗的。可以使用头孢类抗生素，如果平时没有过敏的情况，可以使用头孢克肟、头孢羟氨苄或者头孢克洛进行消炎的治疗','2021-08-10 05:28:00',1),
(195,'细菌感冒治疗特效药','1.阿莫西林\r\n2.复方甘草口服溶液','2021-08-11 20:34:00',1),
(196,'高压电线是有辐射的，要远离300米以上最安全','高压电线是有辐射的，要远离300米以上最安全','2021-08-22 18:33:00',1),
(198,'望远镜 分为 伽利略 和 开普勒','伽利略 物镜是 凹透镜 + 目镜 凸透镜\r\n开普勒 物镜是 凸透镜 + 目镜 凸透镜 放大倍数完胜伽利略 伽利略望远镜一般都是玩具','2021-09-22 14:18:00',1),
(200,'vscode golang 安装插件','vscode golang 插件安装\r\nhttps://goproxy.io/zh/ 一个全球代理为 Go 模块而生\r\n\r\n按说明配置 go 1.13 及以上\r\n\r\ngo env -w GO111MODULE=on\r\ngo env -w GOPROXY=https://goproxy.io,direct\r\n安装完记得关一下\r\ngo env -w GO111MODULE=off','2021-10-28 20:21:00',1),
(201,'java vs go性能\r\nstprintboot   iris','单纯返回字符串   go是java 3倍速度\r\n返回json        go是java 3倍多一点速度\r\n数据库全量查询  go是java 的4倍速度','2021-11-12 16:58:00',1),
(204,'go 性能是java的2.5倍','go 性能是java的2.5倍','2021-12-11 22:27:00',1),
(205,'移动宽带路由登录','192.168.100.254\r\nadmin\r\nCmcc10086#','2021-12-12 08:21:00',1),
(206,'TCS-180 电子台称 公斤市斤互换','开机 12763  去皮 63 去皮    （公斤转市斤）\r\n开机 12763  去皮 33 去皮    （市斤转公斤）','2021-12-12 11:47:00',1),
(207,'宝骏530更换机油','1.拆开发动机防尘罩，四个角，每一个角用点力往上提渐个提起就能拆开\r\n2.找个盆装废机油，找个六角螺丝板手用于扭开机油底壳放机油。机油格板手\r\n3.先扭螺母机油底壳放机油。同时拆机油格，面向车头往左手边扭，拆下后及时把新的机油格装上。\r\n装上新机油格之前要注意在机油格塑料垫那里放新机油。\r\n4.把机油底螺母扭紧。倒入新机油，使之剩余机油瓶一起称重在1.7斤左右就好了\r\n5.启动车子怠速3分钟','2022-01-30 09:43:00',1),
(209,'https://www.oracle.com下载java帐号密码','282246101@qq.com\r\nwww.360xyz.CN','2022-03-12 07:21:00',1),
(232,'火狐浏览器缓存','C:\\Users\\Administrator\\AppData\\Local\\Mozilla\\Firefox\\Profiles\\k8lrn5xn.default-release\\cache2\\entries','2023-06-20 01:03:00',1),
(322,'更换电动车后轮胎','更换电动车后轮胎','2025-03-16 06:30:00',1),
(326,'101.35.107.23','101.35.107.23','2025-04-30 04:00:00',1),
(215,'CMCC-YUKY','88888888','2022-07-16 07:36:00',1),
(230,'网络MAC地址','6a:e4:07:75:d2:ee  #我的手机\r\n5a:ab:53:13:82:98  #小罗手机\r\nd0:fa:1d:11:a1:8f  #360摄像头\r\nb0:59:47:4c:68:76  #360夜视摄像头\r\n98:cd:ac:29:44:99  #大门\r\n3a:5e:d4:6e:f9:0f  #老豆手机\r\n2c:73:60:19:db:00  #邮政打印机\r\na4:56:02:36:c9:53  #360路由器','2023-04-24 08:51:00',1),
(220,'FAST_6C5A 林','FAST_6C5A 林','2022-08-30 06:46:00',1),
(225,'https://www.raspberrypi.org/downloads/raspberry-pi-os/','https://www.raspberrypi.org/downloads/raspberry-pi-os/','2022-11-15 11:56:00',1),
(228,'超能世界','刀妹 13224武士+2罪恶 竞技场强袭+罪恶\r\n屠龙 飞刃 1322 2+2+2 狂热者罪恶审判强袭+罪恶龙女3443 女妖+进化\r\n大树 4445救赎+进化\r\n诗人/鹦鹉3422 武士+进化\r\n电龙1322 破绽+罪恶\r\n药剂/小猫 3422 武士+进化\r\n皇后 3445 女妖+进化\r\n万花 1321 破绽+罪恶/主宰+罪恶\r\n树女 3422 主宰+进化','2023-01-27 09:55:00',1),
(324,'木瓜奇迹','php_xyz','2025-04-26 06:48:00',1),
(325,'天火奇迹公益服','golang   密保 817648  密码qq28224610  \r\n安全码 7817648\r\n\r\narduino    密保 817648  密码golang  安全吗 8760488','2025-04-26 07:15:00',1),
(236,'php mysqli预处理','/**\r\n * $a=new MysqliXyz;\r\n * $stmt=$a->sql($sql,\"类型\",?对应值);\r\n * $stmt->bind_result(...$list); //接收返回变量\r\n * $stmt->execute();\r\n * $stmt->fetch();  //单条数据查询\r\n * //多条数据\r\n $result=array();\r\n $temp=array();\r\n while($stmt->fetch()){\r\n		$temp[\"passwd\"]= $passwd;\r\n		$result[]=$temp;\r\n }\r\n */\r\nclass MysqliXyz\r\n{\r\n	private $host=\"192.168.100.254\";\r\n	//private $sqlUser=\"root\";\r\n	private $sqlUser=\"root\";\r\n	private $sqlPasswd=\"qq282246101\";\r\n	private $sqlDb=\"xyz\";\r\n	public $stmt=\"\";\r\n	private $db=null;\r\n	function __construct(){\r\n\r\n		$this->db=new \\mysqli($this->host,$this->sqlUser,$this->sqlPasswd,$this->sqlDb,3306);\r\n		if ($this->db->connect_error) {\r\n			die(\"连接 Mysaql 失败 \".$this->db->connect_error);\r\n		}\r\n		$this->db->set_charset(\"utf8\");\r\n	}\r\n	//参数1 sql语句  参数2 ?对应类型  参数3 ?对应值 \r\n	public function GetStmt($sql,$types,...$list){\r\n		$this->stmt=$this->db->prepare($sql);\r\n		$this->stmt->bind_param($types,...$list);\r\n		return $this->stmt;\r\n	}\r\n	public function __destruct(){\r\n		$this->stmt->close();\r\n		$this->db->close();\r\n	}\r\n}\r\n','2023-07-20 09:11:00',1),
(309,'电脑','cpu  70\r\n主板 67\r\n机箱 51\r\n电源 45\r\n固态硬盘 43\r\n内存 22\r\ncpu风扇 20\r\n318\r\n\r\n\r\n','2024-11-12 08:02:00',1),
(310,'180雷达','屏幕             41元\r\n芯片 nano v3     20元\r\n舵机MG996R       15元\r\n5v2a 适配器      9元\r\n6v1a 适配器      9元\r\n超时波+壳        5元\r\n外壳             10元\r\n电阻             5元\r\n快递费           20元\r\n导线若干         5元\r\n合计  139元\r\n\r\n','2024-11-21 08:33:00',1),
(311,'19374036877充值详情','2024-4-12充值50送120元,每月返10元\r\n失效时间2025-06-30\r\n2024-11-24充值50送120元,每月返10元\r\n失效时间2026-06-30\r\n','2024-11-24 04:27:00',1),
(244,'NodeMCU ESP32 MAX98357','NodeMCU ESP32 MAX98357','2023-09-28 08:34:00',1),
(239,'win10 删除运行记录','HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU，删除右边除“(默认)”之外的所有值，也可以选择性删除，可参照“数据”中命令内容来决定是否删除','2023-08-13 09:27:00',1),
(240,'pc mac','	\"pc001\": \"74:d4:35:a0:69:73\",\r\n	\"pc002\": \"1c:b7:2c:af:ee:9c\",\r\n	\"pc003\": \"1c:1b:0d:8e:8b:fe\",','2023-08-14 04:53:00',1),
(242,'电脑MQTT限时上网','// 客户机\r\n1. 电脑主机 MQTT 订阅  \"home/system/pc\"\r\n2. 客户电脑主机 MQTT 断线自动重连\r\n3. 电脑每5分钟定时向服务器 home/system/pctosystem 发布 本机名, \r\n判断有返回 来确定是否已经掉线\r\n//服务器\r\n1. 服务器 MQTT服务器\r\n2. 服务器 建立一个协程 MQTT Client 监听 home/system/pctosystem  电脑主机 发送来的  消息\r\n消息信息是  客户机的主机名  然后 进行计算时间,当时间超过时\r\n向 home/system/pctosystem 发送 json  pcname:主机名 msg:关机\r\n3. 客户机 通过 web 192.168.100.254 主页查询上网剩余时间','2023-08-16 01:08:00',1),
(243,'获取网络时间网址','http://quan.suning.com/getSysTime.do','2023-09-12 11:24:00',1),
(245,'https://github.com/topics/inmp441','https://github.com/topics/inmp441','2023-10-09 08:55:00',1),
(252,'esp订单任务','esp订单任务','2023-12-29 07:10:00',1),
(247,'ssh root@111.229.99.208 ','ssh root@111.229.99.208 \r\nqq@1234567','2023-10-24 06:07:00',1),
(248,'识别记账','200开工定金\r\n1000元买 扫描机器\r\n500元 -109元域名费-60元快递费=330元\r\n\r\n请人美化页面 350元未给 ','2023-10-30 06:08:00',1),
(249,'sub 汽车加机油量 净重 5.5 斤','sub 汽车加机油量 净重 5.5 斤','2023-11-10 01:52:00',1),
(250,'景安虚拟主机账号密码','golangjacob\r\nqq@282246101','2023-12-04 08:18:00',1),
(251,'换煤气时间','2023 年 12 月 9 日 115','2023-12-09 10:44:00',1),
(254,'arduino WIFI网页配网说明','查看附近WIFI  有 192, 168, 168, 2     密码 nobiggie.cn\r\n连接后 手机打开IE浏览器  输入 192.168.168.2\r\n进入页面 会扫描出附近的WIFI,选择你自己的 \r\n下面打上你们家的wifi 密码 确定  等待20秒后就联网成功','2024-01-04 04:32:00',1),
(260,'https://yidian68.com/','https://yidian68.com/','2024-01-28 09:40:00',1),
(264,'乡下快递','乡下快递','2024-02-18 08:49:00',1),
(266,'ems 协议客户号','账号：1100179214387\r\n密码：hj123456789','2024-02-23 10:54:00',1),
(267,'php 账号密码','webserver golangjacob','2024-03-06 08:30:00',1),
(313,'AppID','AppID: wxf8a976e46172b789\r\nAppSecret: a916917763c2cf129b00697c51d256f8\r\nEncodingAESKey: 0Tu6DJvH5XO89YZRBwxBXDfi52u5QYh7FJJlFF4ViuU','2024-12-05 07:35:00',1),
(312,'dnf女弹药pk连招','浮空弹(或者空中手雷)+BBQ+滑铲+机器人+膝撞+镭射狙击+3次普攻+1次普攻+钉刺射+凝固汽油弹+回旋踢+\r\n后退+交叉射击','2024-12-02 08:33:00',1),
(290,'电脑主板维修','15777874231','2024-09-18 07:37:00',1),
(292,'景安ssh','    \"host\": \"vhost197.cnameaddress.top\",\r\n    \"protocol\": \"ftp\",\r\n    \"port\": 21,\r\n    \"username\": \"webmaster@HA699435\",\r\n    \"password\": \"t4Sm41G\"','2024-09-30 08:42:00',1),
(293,'热水器','13977848930','2024-10-02 11:46:00',1),
(299,'https://m.huade315.com/','https://m.huade315.com/','2024-10-27 08:29:00',1),
(321,'修电饭锅19178934597','修电饭锅19178934597','2025-03-05 01:06:00',1),
(315,'智能充电桩','#include <ArduinoJson.h>\r\n#include <ESP8266WiFi.h>\r\n#include <OneWire.h>\r\n#include <DallasTemperature.h>\r\n#include <Adafruit_Sensor.h>\r\n#include <DHT.h>\r\n#include <DHT_U.h>\r\n#include <PubSubClient.h>\r\n\r\nconst char* ssid = \"webserver\";            //WIFI名字\r\nconst char* password = \"www.nobiggie.cn\";  //WIFI密码\r\n\r\nconst char* mqtt_server = \"tcp://bemfa.com:9501\";      //服务器与 端口9501\r\nString clientId = \"07b120062a7972cf9831d7d9bc8012bc\";  //mqttID\r\nconst char* inTopic = \"esp8266/inTopic\";                    //订阅主题\r\nconst char* outTopic = \"esp8266/outTopic\";                  //发送主题\r\n\r\nWiFiClient espClient;\r\nPubSubClient client(espClient);\r\nunsigned long lastMsg = 0;\r\n#define MSG_BUFFER_SIZE (50)\r\nchar msg[MSG_BUFFER_SIZE];\r\nint value = 0;\r\n\r\n#define DHTPIN 13          // 数字引脚连接DHT传感器\r\n#define PHOTOSENSITIVE 14  //光敏传感器 默认高电平\r\n// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --\r\n#define DHTTYPE DHT11  // DHT 11\r\nDHT_Unified dht(DHTPIN, DHTTYPE);\r\nfloat humidity;\r\nfloat temperature;\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  delay(10);\r\n\r\n  pinMode(PHOTOSENSITIVE, INPUT);  // 将引脚设置为输入模式\r\n  Serial.println();\r\n  Serial.print(\"Connecting to \");\r\n  Serial.println(ssid);\r\n  WiFi.begin(ssid, password);\r\n\r\n  while (WiFi.status() != WL_CONNECTED) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n  }\r\n  Serial.println(\"WiFi connected\");\r\n  dht.begin();\r\n  sensor_t sensor;\r\n  dht.temperature().getSensor(&sensor);\r\n  dht.humidity().getSensor(&sensor);\r\n  client.setServer(mqtt_server, 1883);\r\n  client.setCallback(callback);\r\n}\r\n\r\nvoid loop() {\r\n  if (!client.connected()) {\r\n    reconnect();\r\n  }\r\n  client.loop();\r\n  sensors_event_t event;\r\n  dht.temperature().getEvent(&event);\r\n  if (isnan(event.temperature)) {\r\n    Serial.println(F(\"Error reading temperature!\"));\r\n  } else {\r\n    temperature = event.temperature;\r\n  }\r\n  delay(500);\r\n  dht.humidity().getEvent(&event);\r\n  if (isnan(event.relative_humidity)) {\r\n    Serial.println(F(\"Error reading humidity!\"));\r\n  } else {\r\n    humidity = event.relative_humidity;\r\n  }\r\n  String th = String(temperature) + \"℃\" + String(humidity) + \"%\";\r\n  Serial.println(th);\r\n\r\n  int v = digitalRead(PHOTOSENSITIVE);  // 读取引脚的电平值\r\n  if (v == 0) {\r\n    Serial.println(\"night\");\r\n  } else {\r\n    Serial.println(\"day\");\r\n  }\r\n  delay(3000);\r\n}\r\nvoid reconnect() {\r\n  while (!client.connected()) {\r\n    Serial.print(\"Attempting MQTT connection...\");\r\n    clientId += String(random(0xffff), HEX);\r\n    if (client.connect(clientId.c_str())) {\r\n      Serial.println(\"connected\");\r\n      client.publish(outTopic, \"hello world\");  //向主题outTopic 发送hello world\r\n      client.subscribe(inTopic);                //订阅主题inTopic\r\n    } else {\r\n      Serial.print(\"failed, rc=\");\r\n      Serial.print(client.state());\r\n      Serial.println(\" try again in 5 seconds\");\r\n      // Wait 5 seconds before retrying\r\n      delay(5000);\r\n    }\r\n  }\r\n}\r\nvoid callback(char* topic, byte* payload, unsigned int length) {\r\n  Serial.print(\"Message arrived [\");\r\n  Serial.print(topic);\r\n  Serial.print(\"] \");\r\n  String str2;\r\n  for (int i = 0; i < length; i++) {\r\n    str2 += (char)payload[i];\r\n  }\r\n  str2.trim();\r\n  Serial.print(str2);\r\n  if (str2 == \"buzzerOn\") {  //蜂鸣器响\r\n\r\n  } else if (str2 == \"buzzerOff\") {  //蜂鸣器关\r\n\r\n  } else if (str2 == \"relayOn\") {   //继电器通\r\n\r\n  } else if (str2 == \"relayOff\") {  //继电器关\r\n\r\n  }\r\n}','2024-12-19 12:40:00',1),
(316,'9438320956586','9438320956586','2024-12-29 09:28:00',1),
(317,'2025年水果异常快递赔偿','9447954762786  延误派送','2025-01-03 11:45:00',1),
(320,'打印机密码','XAJ2409519','2025-03-05 11:08:00',1),
(319,'澁谷果歩','澁谷果歩','2025-02-28 02:50:00',1),
(328,'phone19374036877小程序','AppID(小程序ID)\r\nwx84a85e7930266bdf\r\n原始ID\r\ngh_5e96e9603ec3','2025-05-04 10:53:00',1),
(330,'公众号','服务器地址(URL)\r\nhttp://www.nobiggie.cn/wechat_official_account/token\r\n\r\n令牌(Token)\r\nqq282246101\r\n\r\n消息加解密密钥 (EncodingAESKey)\r\ntTfQ3UpMYYQlnzT0lmx26U5jACoYdJAB3kEgSn86DID\r\n\r\n消息加解密方式\r\n兼容模式','2025-05-22 05:48:00',1),
(337,'2025年4月 寄果总件数6534','6534\r\n','2025-06-26 03:12:00',1),
(338,'修煤气灶13207888339','修煤气灶13207888339','2025-06-27 11:00:00',1),
(339,'2025年果树投资','2025年果树投资','2025-06-27 11:38:00',1),
(336,'修理大电风扇','17758595404','2025-06-23 09:25:00',1),
(340,'邮政汽车加油','已经加了600元','2025-08-17 10:05:00',1),
(341,'106.53.221.241','106.53.221.241','2025-08-23 08:24:00',1);

--
-- Table structure for table `WisdomBarReply`
--

CREATE TABLE `WisdomBarReply` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rid` int(11) NOT NULL,
  `content` text NOT NULL,
  `imgtext` varchar(80) NOT NULL DEFAULT '',
  `date` datetime NOT NULL,
  `userid` int(11) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=284 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WisdomBarReply`
--

INSERT INTO `WisdomBarReply` VALUES
(282,339,'喷雾器更换锂电池34元','','2025-06-27 07:19:00',1),
(281,339,'喷雾器喷杆9元','','2025-06-27 07:19:00',1),
(280,339,'芸苔素 12 +磷酸二氢钾19+钙镁鹏锌铁10+比作米40+螺螨酯84+阿维49=214元','','2025-06-27 11:44:00',1),
(278,339,'ros217  170+160=330元','','2025-06-27 11:39:00',1),
(279,339,'除草 21+19+14=54元','','2025-06-27 11:40:00',1),
(277,339,'5袋尿素100元','','2025-06-27 11:38:00',1),
(276,338,'收费25','','2025-06-27 11:16:00',1),
(283,340,'200','','2025-08-22 06:26:00',1);

--
-- Table structure for table `WisdomProgram`
--

CREATE TABLE `WisdomProgram` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(20) NOT NULL DEFAULT '',
  `userid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WisdomProgram`
--

INSERT INTO `WisdomProgram` VALUES
(1,'linux树莓派',1),
(2,'mysql',1),
(3,'golang',1),
(4,'arduino',1),
(5,'c++',1),
(6,'stm32',1),
(7,'php',1),
(8,'python',1);

--
-- Table structure for table `WisdomProgramReply`
--

CREATE TABLE `WisdomProgramReply` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tid` int(11) NOT NULL DEFAULT 0,
  `title` varchar(64) NOT NULL DEFAULT 'null',
  `content` text NOT NULL,
  `imgtext` varchar(100) NOT NULL DEFAULT '',
  `userid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=316 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

--
-- Dumping data for table `WisdomProgramReply`
--

INSERT INTO `WisdomProgramReply` VALUES
(1,1,'linux 服务器设置','\r\nsudo passwd root //设置root密码\r\n密码\r\n密码\r\nsu root //登陆root\r\n//配置 ssh权限\r\nvi /etc/ssh/sshd_config\r\n\r\nLoginGraceTime 2m\r\nPermitRootLogin yes\r\n//把#号去掉,保存退出\r\n---------------------------------------------------\r\n//更新系统\r\napt-get update\r\n\r\n--------------------安装mysql ------------------------\r\nsudo apt-get install mysql-server mysql-client\r\n\r\n//设置 mysql 可以外网访问\r\nsudo vim /etc/mysql/mysql.conf.d/mysqld.cnf\r\nbind-address前添加 #注释掉该行\r\n\r\n//还没设置前用户不需要密码\r\nsudo mysql -uroot -p //回车 \r\n//远程访问数据库\r\nupdate mysql.user set host=\'%\';\r\nflush privileges;\r\n//更改密码\r\nALTER USER \'root\'@\'%\' IDENTIFIED WITH mysql_native_password BY \'qq282246101\';\r\nflush privileges;\r\nexit\r\n------------------------------------------------------\r\n//杀死之前的相关进程\r\nps -e|grep apt-get \r\n//安装gcc\r\napt install gcc\r\n------------------------------------------------------\r\n//支持程序关机\r\nchmod 4777 /sbin/shutdown\r\n------------------------------------------------------\r\n//校准时间\r\nsudo dpkg-reconfigure tzdata\r\nAsia\r\nshanghai\r\n//查看时间是否准确\r\ndate \r\n//安装,设置开机同步时间\r\napt install ntpdate\r\ncrontab -e\r\n@reboot ntpdate ntp.ubuntu.com\r\n@reboot sleep 3; cd /opt/website; nohup ./main &\r\n------------------------------------------------------\r\n# 安装redis\r\nsudo apt install redis-server\r\n# 配置\r\nsudo vim /etc/redis/redis.conf\r\n# 找到 supervised 设置为 systemd\r\nsudo service redis restart  # 重新加载Redis服务文件\r\nsudo systemctl status redis # 查看 Redis 的运行状态\r\n# 一些操作\r\nsudo service redis start  # 启动\r\nsudo service redis stop  # 关闭\r\nsudo service redis restart  # 重启\r\nredis-cli  # 客户端连接\r\n# 远程连接 \r\nsudo vi /etc/redis/redis.conf\r\n# 将 bind 127.0.0.1 ::1 改为 bind 0.0.0.0\r\nsudo service redis restart  # 重启\r\n# 设置密码\r\nsudo vi /etc/redis/redis.conf\r\n# 设置：requirepass 自己的密码\r\n默认端口6379\r\nredis-server /etc/redis/redis.conf --test 用于找出配置错误','',1),
(2,1,' php也能执行关机命令shutdown 网卡ifconfig','//root用户登陆\r\nchmod 4755 /sbin/shutdown\r\n\r\nchmod 4755 /sbin/ifconfig\r\n          ','',1),
(3,1,'ubuntu 18 设置wifi开机自动连接','apt install wireless-tools\r\n安装完后，就可以使用iwconfig按下面步骤设置无线网络了\r\niwconfig wlan0 power on\r\nifconfig wlan0 up\r\niwconfig wlan0 essid \"无线名称\"\r\n//然后使用wpa_passphrase生成无线密钥\r\nsudo -i \r\nwpa_passphrase 无线名称 密码 > /etc/wpa_supplicant/wpa_supplicant.conf\r\nvim /etc/wpa_supplicant/wpa_supplicant.conf\r\n//里面应该有大致以下内容\r\nnetwork={\r\n        ssid=\"my_network\"   #注意ssid名区分大小写。\r\n        proto=RSN           #Robust Security Network:强健安全网络，表示这个网络配置比WEP模式要更安全。\r\n        key_mgmt=WPA-PSK    #请无论你是使用WPA-PSK，WPA2-PSK，都请在这里输入 WPA-PSK。这在wpa_supplicant看来WPA-PSK，WPA2-PSK都是 WPA-PSK\r\n        pairwise=CCMP TKIP  #关键点，wpa_supplicant目前还不认AES的加密标准\r\n        group=CCMP TKIP     #同上\r\n        psk=7b271c9a7c8a6ac07d12403a1f0792d7d92b5957ff8dfd56481ced43ec6a6515 #wpa_supplicant算出来的加密密码。\r\nchmod +wrx /etc/wpa_supplicant.conf\r\n//以上配置文件设置完成后，接下来手动应用配置\r\n//为了开机自动开启wifi，需要将启动脚本加到自动执行服务中，首先在/etc/rc.local中加入如下脚本：\r\n#!/bin/bash\r\nip link set wlan0 up && killall wpa_supplicant && wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &&\r\ndhclient wlan0\r\nexit 0\r\nchmod a+x /etc/rc.local\r\n然后编辑 /lib/systemd/system/rc-local.service加入如下配置：\r\n[Unit]\r\nDescription=/etc/rc.local Compatibility\r\nDocumentation=man:systemd-rc-local-generator(8)\r\nConditionPathExists=/etc/rc.local\r\nAfter=network.target\r\n\r\n[Service]\r\nType=forking\r\nExecStart=/etc/rc.local start\r\nTimeoutSec=0\r\nRemainAfterExit=yes\r\nGuessMainPID=no\r\n[Install]\r\nWantedBy=multi-user.target\r\nAlias=rc-local.service\r\n\r\nsystemctl enable rc-local.service\r\nsystemctl disable rc-local.service\r\nsystemctl start rc-local.service\r\nsystemctl status rc-local.service\r\n如下内容为成功了\r\n● rc-local.service - /etc/rc.local Compatibility\r\n   Loaded: loaded (/lib/systemd/system/rc-local.service; enabled; vendor preset: enabled)\r\n  Drop-In: /lib/systemd/system/rc-local.service.d\r\n           └─debian.conf\r\n   Active: active (running) since Fri 2019-10-25 16:03:17 UTC; 26min ago\r\n     Docs: man:systemd-rc-local-generator(8)\r\n  Process: 1621 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)\r\n    Tasks: 2 (limit: 1056)\r\n   CGroup: /system.slice/rc-local.service\r\n           ├─1627 wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf\r\n           └─1647 dhclient wlan0\r\n//重启\r\nreboot ','',1),
(4,1,'ffmpeg','ffmpeg -i 查看 视频文件属性\r\n1.pass1编码\r\n\r\nffmpeg -i 01.rmvb -an -vcodec libx264 -b 560k -pass 1 -f mp4 -y 新名.mp4\r\n\r\n-acodec libfaac output.aac 音频编码 aac\r\n-an : 不编码音频\r\n-vcodec : 设置视频的编码，我这里使用的是x264\r\n-b : 这个是码率\r\n-f : 强制使用格式\r\n-y : 自动输y确认\r\nNUL : 因为是pass1 所以不需要输出文件，直接用NUL\r\n\r\n2.pass2编码\r\n\r\nffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -pass 2 -f mp4 01.mp4\r\n\r\n因为现在很多rmvb的音频部分都是aac编码的，所以可以直接用-acodec copy复制音频部份\r\n3、针对某些文件的参数调整\r\n\r\n有些rmvb或着mkv之类的分辨率比较高，所以传到itouch需要调整一下。在ffmpeg里面可以用-s参数:\r\n\r\nffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -s 960x640 -f mp4 01.mp4\r\n\r\n960x640需要自己计算一下，按比例进行调整\r\n\r\n按时间截取:\r\n\r\nffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -ss 00:00:00 -t 00:01:00 -f mp4 01.mp4\r\n\r\n设置B-frame对动画片有些好处，2pass的时候不是很明显，1pass的比较明显:\r\n\r\nffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -bf 6 -f mp4 01.mp4\r\n\r\n\r\nwindows下安装\r\n可以将 ffmpeg 的 bin 目录（包含 ffmpeg.exe、ffprobe.exe 等文件）添加到系统的环境变量中','',1),
(5,1,'ceate_ap开启热点','在终端中运行 rfkill list，查看所有被禁用的无线设备列表。如果 wlan0 被列出并显示为 Soft blocked: yes（软件禁用）或 Hard blocked: yes（硬件禁用），则需要解除禁用。\r\n sudo rfkill unblock wlan\r\n这将尝试解除对无线设备的软件禁用\r\nifconfig wlan0 up\r\n//安装依赖库\r\nsudo apt-get install hostapd\r\nsudo apt-get install network-manager\r\nsudo apt-get install util-linux procps hostapd iproute2 iw haveged dnsmasq\r\n//也可以QQ云盘里下载create_ap-master.zip再安装\r\nsudo git clone https://github.com/oblique/create_ap\r\ncd create_ap\r\nsudo make install\r\n//临时启用热点 360xyz是wifi名  qq282246101是密码\r\n//sudo create_ap wlan0 eth0 360xyz qq282246101\r\nsudo apt install iptables\r\n//修改 create_ap.service 服务功能的配置\r\nsudo vim /etc/create_ap.conf\r\n————————WiFi 2.4g 只需要改这三项————————\r\n//固定设置自己的 GATEWAY（网关）、SSID（热点名）、PASSPHRASE（密码）\r\nGATEWAY=???\r\nSSID=???\r\nPASSPHRASE=???\r\n\r\n//防止它人连接WIFI\r\nMAC_FILTER=0    //1代表使用MAC过滤\r\nMAC_FILTER_ACCEPT=/etc/hostapd/hostapd.accept   \r\n// 创建hostapd.accept 文件 这个文件存MAC地址，有地址才能访问网络\r\ntouch /etc/hostapd/hostapd.accept\r\ncd /etc/hostapd\r\nchmod ugo+x hostapd.accept\r\nvi hostapd.accept\r\n6a:e4:07:75:d2:ee  #我的手机\r\n5a:ab:53:13:82:98  #小罗手机\r\nd0:fa:1d:11:a1:8f   #360摄像头\r\n\r\n—————---WiFi 5G 配置增加如下修改——————---\r\n//149信道是5G信道\r\nCHANNEL=149 \r\nIEEE80211N=1\r\nIEEE80211AC=1\r\nCOUNTRY=US  \r\n\r\n\r\n//设置服务开机启动。\r\nsystemctl enable create_ap.service\r\n//查看服务是否开机启动。\r\nsystemctl is-enable create_ap\r\n\r\n# 启动服务：\r\nsystemctl start create_ap\r\n# 关闭服务：\r\nsystemctl stop create_ap\r\n# 重启服务：\r\nsystemctl restart create_ap\r\n# 显示服务状态：\r\nsystemctl status create_ap\r\n# 禁用服务开机启动：\r\nsystemctl disable create_ap.service\r\n//连接有线网络就是无线中继器,断开有线就是独立AP\r\n\r\n//设置发射功率 调小\r\nsudo iwconfig wlan0 txpower 5\r\nsudo create_ap --fix-unmanaged\r\nvi /etc/hosts //设置别名访问特IP  写入\r\n127.0.0.1 raspberry.nobiggie.cn\r\n','',1),
(6,1,'Ubuntu下卸载nginx','sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件\r\nsudo apt-get purge nginx nginx-common # 卸载所有东东，包括删除配置文件\r\nsudo apt-get autoremove # 在上面命令结束后执行，主要是卸载删除Nginx的不再被使用的依赖包\r\nsudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。','',1),
(7,1,'ubuntu 重装php7','一、删除php的相关包及配置\r\n    sudo apt-get autoremove php7*\r\n二、删除关联\r\n    sudo find /etc -name \"*php*\" |xargs  rm -rf\r\n三、清除dept列表\r\n    sudo apt purge `dpkg -l | grep php| awk \'{print $2}\' |tr \"\\n\" \" \"`','',1),
(8,1,'crontab 定时任务','#开机启动go程序\r\n@reboot sleep 3; cd /var/www/html; nohup ./main &\r\n#如果启动失败\r\n@reboot sleep 3; cd /var/www/html; nohup ./main\r\n#晚上关闭WIFI\r\n#0 20 * * * ifconfig wlan0 down\r\n\r\n#每天夜里1点30分备分远程服务器数据库到本地\r\n#30 1 * * * /var/www/html/mysql_source.sh\r\n\r\n#夜里关机 chmod 4777 /sbin/shutdown\r\n#30 2 * * * /sbin/shutdown -h now\r\n\r\n#每次重启后 清空redis数据 启动swoole_redis (限php swoole) 启动swoole_websocket\r\n#@reboot rm -f /var/www/html/app/Libraries/myclass/server/db\r\n#@reboot sleep 10; /usr/bin/php /var/www/html/app/Libraries/myclass/server/Swoole_redis.php > /dev/null &\r\n#@reboot sleep 20; /usr/bin/php /var/www/html/app/Libraries/myclass/server/Swoole_websocket.php > /dev/null &\r\n\r\n#4到8月份检测CPU温度过60度保护关机\r\n#* * * 4-8 * /usr/bin/curl http://localhost/service/CpuHighDown\r\n#定时提醒 每天早上6点触发\r\n0 6 * * * /usr/bin/curl http://localhost/service/TimeingSend\r\n\r\n#每天早上6点10分自动校准时间\r\n#10 6 * * * /usr/sbin/ntpdate ntp.ubuntu.com;/sbin/hwclock -w','',1),
(9,1,' 树莓派花生壳信息\r\n',' Oray Phtunnel Raspberry 5.0.0 \r\n --------------------------------\r\n  SN: oray296b3a9ef73f \r\n  Default password: admin  |\r\n -------------------------------\r\n Remote Management Address http://b.oray.com\r\n\r\n1、输入命令：phddns回车，可以看到扩展功能。phddns start（启动）| status（状态）| stop（停止）|restart（重启）| reset（重置）|enable（开机自启动）|disable（关闭开机自启动）|version（版本）\r\n日志文件存放路径：/var/log/phddns\r\n在浏览器中访问远程管理地址http://b.oray.com ，在登录页面中输入SN码与默认密码（admin）登录\r\n\r\n卸载命令：dpkg -r phddns            ','',1),
(10,1,'nginx缺少fastcgi-php.conf 文件','# regex to split $uri to $fastcgi_script_name and $fastcgi_path\r\nfastcgi_split_path_info ^(.+\\.php)(/.+)$;\r\n\r\n# Check that the PHP script exists before passing it\r\ntry_files $fastcgi_script_name =404;\r\n\r\n# Bypass the fact that try_files resets $fastcgi_path_info\r\n# see: http://trac.nginx.org/nginx/ticket/321\r\nset $path_info $fastcgi_path_info;\r\nfastcgi_param PATH_INFO $path_info;\r\n\r\nfastcgi_index index.php;\r\ninclude fastcgi.conf;\r\n','',1),
(11,1,'ubuntu 更新php新版本','一、删除php的相关包及配置\r\n    sudo apt-get autoremove php7*\r\n二、删除关联\r\n    sudo find /etc -name \"*php*\" |xargs  rm -rf\r\n三、清除dept列表\r\n    sudo apt purge `dpkg -l | grep php| awk \'{print $2}\' |tr \"\\n\" \" \"`\r\n//这行代码可有可无\r\nsudo apt install software-properties-common\r\n//电信网络有时连接不了,使用别的网络\r\nsudo add-apt-repository ppa:ondrej/php\r\napt install php{新版}-fpm\r\nphp{新版}-mysql \r\nphp{新版}-gd\r\nphp{新版}-json\r\nphp{新版}-shmop\r\nphp{新版}-sqlite3\r\nphp{新版}-mbstring\r\nphp{新版}-sockets\r\nphp{新版}-redis\r\nphp{新版}-intl\r\nphp{新版}-xml   \r\nphp{新版}-curl\r\nphp{新版}-swoole  ','',1),
(12,1,'\r\nlinux 添加环境变量','vi~/.bashrc \r\n在里面写入环境变量\r\nsource ~/.bashrc\r\nreboot  //看效果\r\n','',1),
(13,1,'centos8 安装lnmp','yum -y upgrade 只更新软件包,不更新内核\r\nyum install nginx\r\nsystemctl restart nginx -y\r\n网站根目录 /usr/share/nginx/html\r\n//nginx 重写 rewrite\r\n/etc/nginx/nginx.conf文件下\r\n//在 location / { 　} 上\r\ninclude /网站根目录/nginx.htaccess\r\n//nginx.htaccess 写入以下内容\r\nif (!-e $request_filename) {\r\n         rewrite  ^(.*)$  /index.php?s=$1  last;\r\n         break;\r\n} \r\nsystemctl restart nginx\r\n------------ 安装php7.2 -----------------\r\nyum install php -y\r\nyum install php-sqlite3 -y\r\nyum install php-pdo php-gd\r\nyum install php-mysqlnd\r\n//后台返回数据json报错记得安装php-json\r\nyum install php-json\r\nvim /etc/nginx/nginx.conf.default \r\nindex.html前加入index.php\r\n------------ 安装mysql-----------------\r\nyum install mysql-server\r\nsystemctl restart mysqld.service\r\nmysql -uroot -p //回车\r\n//远程访问数据库\r\nupdate mysql.user set host=\'%\';\r\nflush privileges;\r\n//更改密码\r\nALTER USER \'root\'@\'%\' IDENTIFIED WITH mysql_native_password BY \'qq282246101\';\r\nflush privileges;\r\nexit;','',1),
(14,1,'linux常用命令','#更改ip地址\r\nifconfig eth0 192.168.100.254 netmask 255.255.255.0\r\n#更改网关\r\nroute add default gw  192.168.100.1\r\n#关闭防火墙\r\nsystemctl stop firewalld.service\r\n#设置开机自动启动\r\nsystemctl enable 程序名.service\r\n\r\n#循环定时      crontab -e\r\n#在下面进行编辑 每天夜里3点30分执行备份\r\n30 3 * * * /执行文件路径/mysql.sh\r\n\r\n#记得给文件权限\r\nchmod ugo+x /执行文件路径/mysql.sh\r\n　　u 表示“用户（user）”，即文件或目录的所有者\r\n　　g 表示“同组（group）用户”，即与文件属主有相同组ID的所有用户\r\n　　o 表示“其他（others）用户\r\n+-增加或减少  r读取 x执行 w写入\r\n\r\n#复制文件 -v 是显示进度的意思\r\ncp -f -v /源文件/  /目标文件目录\r\n#复制文件夹及文件夹下的所有子目录文件 -v 是显示进度的意思\r\ncp -r -v /源文件目录/  /目标文件目录\r\n\r\n#安装支持ntfs格式的磁盘\r\napt install ntfs-3g -y  \r\nblkid  或者 fdisk -l#查看Linux系统每个磁盘与分区的信息\r\n#挂载磁盘\r\nmount /dev/sda1 /mnt\r\n#卸载磁盘\r\numount /mnt  \r\n\r\nrm -r /路径    	#删除文件夹\r\nrm -f /路径/文件名    #删除文件\r\nrm -r -f *                   #删除该目录所有文件夹和文件\r\n#mysql 备份命令 mysql密码跟-p之间没有空格\r\n/usr/bin/mysqldump -u root -p密码 数据库名 > /路径/$(date +%Y%m%d%H%M).sql;\r\ntouch /路径/文件  #新建文件     \r\nmkdir -p /路径/文件夹  #新建文件夹   \r\napt-get remove packagename --purge #卸截软件及配置文件\r\n\r\nlast -x|grep shutdown #查看关机时间日志\r\nlast -x|grep shutdown|head -1 #查看最后一次关机时间\r\n让php 也能执行关机命令shutdown\r\n#root用户登陆\r\nchmod u+s,u=rwx,go=rx /sbin/shutdown   #(4755)\r\n/sbin/shutdown\r\n\r\napt-get install unrar\r\nunrar x -p密码 文件.rar  /解压目录\r\n//去除根目录的方法\r\nunrar x -p密码 文件.rar\r\nmv 根目录/* /目标目录\r\n\r\n\r\napt-get install unzip \r\nunzip  文件.zip  /解压目录 \r\ntar -xvf 包名  #普通没有进行压缩的文件解压 \r\ntar -zxvf 包名  #对于进行过压缩的文件解压 \r\ntar -cvf renwolesshel.tar.gz  renwolesshel  #不压缩打包\r\ntar -czvf renwolesshel.tar.gz  renwolesshel  #压缩打包\r\n\r\nnetstat -tunlp|grep 端口  #查看某个服务\r\nkill -9 端口下的id  #关闭某个服务\r\n\r\nsudo dpkg-reconfigure tzdata #校准时间\r\nAsia\r\nshanghai\r\ntop -o %MEM  #查看程序内存占用情况，同时也可以查看CPU使用率','',1),
(15,1,'linux 循环自动定时备份mysql数据库','//新建mysql.sh \r\ntouch /路径/mysql.sh\r\nvim /路径/mysql.sh  //写入以下内容\r\n/usr/bin/mysqldump -u root -p密码 数据库名 > /路径/$(date +%Y%m%d%H%M).sql;\r\n//备份远程云主机方法\r\n/usr/bin/mysqldump -h云主机ip -u root -p密码 数据库名 > /路径/$(date +%Y%m%d%H%M).sql;\r\n//设置可执行权限\r\nchmod -x /路径/mysql.sh\r\ncrontab -e \r\n//定时每天夜里3.30分进行备份\r\n30 3 * * * /路径/mysql.sh\r\n//自动删除前5天的备份\r\nrm -f /路径/$(date -d -5day +%Y%m%d%H%M).sql; \r\n//6点到23点间执行\r\n* 6-23 **** /','',1),
(16,1,'树莓派 debian 安装','1.刷好系统之后，新建一个文件 userconf.txt 来设置初始话账号密码\r\npi:$6$/4.VdYgDm7RJ0qM1$FwXCeQgDKkqrOU3RIRuDSKpauAbBvP11msq9X58c8Que2l1Dwq3vdJMgiZlQSbEXGaY5esVHGBNbCxKLVNqZW1\r\n用户名：pi\r\n密码：raspberry\r\n2.新建一个空白文件，文件名：ssh，不要后缀，不用写入数据\r\n','',1),
(17,1,'网络无法连接外网','sudo nano /etc/dnsmasq.conf\r\n\r\nserver=8.8.8.8\r\nserver=8.8.4.4\r\n\r\n\r\nsudo service dnsmasq restart','',1),
(18,1,'scp 命令进行文件上传,下载','window linux 下都通用\r\n\r\n文件上传命令\r\nscp -f 本地路径/文件名 root@192.168.7.254:/远程文件目录\r\n文件夹上传命令\r\nscp -r 本地路径/文件夹 root@192.168.7.254:/远程文件目录\r\n上传本目录下的所有文件\r\nscp -r * -f * root@192.168.7.254:/远程文件目录\r\n下载文件\r\nscp -f root@192.168.7.254:/远程文件目录 本地路径 ','',1),
(32,2,'mysql基础语句','//增 添加插入数据\r\ninsert into table(a,b,c) values (\'?\',\'?\',\'?\');\r\n//删 删除一条数据\r\ndelete from table where id=\'?\';\r\n//更 修改数据\r\nupdate table set a=\'?\',b=\'?\' where id=\'?\'\r\n//查 查询一条数据\r\nselect id from table where name=\'?\';\r\n//更改字段名称\r\nALTER TABLE 表名 CHANGE 原来字段 新字段  VARCHAR(字段长度)\r\n\r\n查看数据结构\r\ndesc table;\r\n\r\n删除字段\r\nALTER TABLE 表名 drop COLUMN 字段名;\r\n\r\n增加字段\r\nALTER TABLE 表名 ADD 字段名 类型  NOT NULL 默认(DEFAULT \'0\'); \r\n指定字段kuaidi_number后追加字段\r\nALTER TABLE 表名 ADD 字段名 类型  NOT NULL DEFAULT \'0\' after kuaidi_number;\r\n\r\nmysql 更改字段类型\r\nALTER TABLE 表名 modify column 字段 类型 NOT NULL 默认(DEFAULT \'0\');  \r\n\r\n//更改字段名 及字段属性 默认值\r\nALTER TABLE 表名 change 旧字段 新字段 varchar(32) DEFAULT 1\r\n\r\n修改字段默认值语法：\r\nalter  table 表名 alter  column 字段名 drop default （本身存在默认值,则先删除）\r\nalter  table 表名 alter  column 字段名 set default 默认值 （本身不存在默认值可直接设定）  \r\n\r\n//修改字段 not null\r\nalter table CommerceCustomer modify address varchar(64)  not null\r\n\r\n//复制远程服务器数据库到本地数据库 \r\nmysqldump -h360xyz.cn -uroot -pqq282246101 --opt --compress xyz --skip-lock-tables | mysql -h localhost -uroot -pqq282246101 xyz \r\n\r\n//备份本地数据库成一个sql文件 并且文件大于5个自动删除最久一个文件\r\n/usr/bin/mysqldump -hlocalhost -uroot -pqq282246101 xyz > /var/www/html/vvwd/tool/sql/$(date +%Y%m%d%H%M).sql;\r\nrm -f /var/www/html/vvwd/tool/sql/$(date -d -5day +%Y%m%d%H%M).sql;  \r\n','',1),
(33,2,'windows或linux备份远程mysql命令','运行 cmd 到mysqldump.exe的目录下(mysqldump.exe可以从mysql目录里复制) 以下命令\r\nmysqldump -h服务器ip -u root -p密码 数据库名 > /路径/xyz.sql;\r\n或者写个.bat批处理文件直接点击就可以了            ','',1),
(34,2,'ubuntu 安装mysql','------------安装mysql-------------------\r\nsudo apt-get install mysql-server mysql-client\r\n\r\n//设置 mysql 可以外网访问\r\nsudo vim /etc/mysql/mysql.conf.d/mysqld.cnf\r\nbind-address前添加 #注释掉该行\r\n//刚安装完成时root用户不需要密码\r\nsudo mysql -uroot -p //回车 \r\n//远程访问数据库\r\nupdate mysql.user set host=\'%\';\r\nflush privileges;\r\n//更改密码\r\nALTER USER \'root\'@\'%\' IDENTIFIED WITH mysql_native_password BY \'qq282246101\';\r\nflush privileges;\r\nsudo service mysql restart //重启','',1),
(35,2,'windows下的mysql默认不是utf-8编码','不是UTF-8编码中文时会现乱码或sql无法识别中文字符，需要手动更改一下为UTF-8\r\nmysql 下找到 my.ini\r\n查找 [mysqld]\r\n在它下面输入 character-set-server=utf8   保存后重启mysql\r\n','',1),
(36,2,'计算所有行某个字段的相加总合','SELECT sum(字段名) FROM TABLE','',1),
(37,2,'windows 下修改mysql密码',' set password for root@localhost=password(\'qq282246101\');','',1),
(38,2,'debian 11 安装MYSQL5.7.39 ','https://downloads.mysql.com/archives/community/\r\n选择debian适合的版本\r\ncd 到预定安装目录\r\n解压\r\ntar -xvf mysql-server_5.7.39-1debian10_amd64.deb-bundle.tar\r\n\r\n依赖安装\r\napt install psmisc libaio1 libnuma1 libatomic1 libmecab2\r\n\r\n安装MySQL程序（需要按照顺序依次安装）\r\n\r\n    dpkg -i mysql-common_5.7.39-1debian10_amd64.deb\r\n    dpkg -i mysql-community-client_5.7.39-1debian10_amd64.deb\r\n    dpkg -i mysql-client_5.7.39-1debian10_amd64.deb\r\n    dpkg -i mysql-community-server_5.7.39-1debian10_amd64.deb\r\n# 期间会提示输入密码, 并确认密码\r\n    dpkg -i mysql-server_5.7.39-1debian10_amd64.deb\r\n\r\n# 配置客户端默认字符集，新增参数default-character-set=utf8\r\n    vim /etc/mysql/conf.d/mysql.cnf\r\n     \r\n    default-character-set=utf8\r\n     \r\n','',1),
(39,2,'windows source命令导入报错','mysql -uroot --default-character-set=utf8 -p','',1),
(40,2,'linux redis安装配置 ','sudo apt update\r\n\r\n# 安装\r\nsudo apt install redis-server\r\n\r\n# 配置\r\nsudo vim /etc/redis/redis.conf\r\n# 找到 supervised 设置为 systemd\r\nsudo service redis restart  # 重新加载Redis服务文件\r\nsudo systemctl status redis # 查看 Redis 的运行状态\r\n\r\n# 一些操作\r\nsudo service redis start  # 启动\r\nsudo service redis stop  # 关闭\r\nsudo service redis restart  # 重启\r\nredis-cli  # 客户端连接\r\n\r\n# 远程连接 \r\nsudo vi /etc/redis/redis.conf\r\n# 将 bind 127.0.0.1 ::1 改为 bind 0.0.0.0\r\nsudo service redis restart  # 重启\r\n\r\n# 设置密码\r\nsudo vi /etc/redis/redis.conf\r\n# 设置：requirepass 自己的密码\r\n\r\n默认端口6379','',1),
(41,2,'mysql 复制数据库某表','mysql 复制数据库某表到另一个数据库\r\n//先复制数据结构\r\nCREATE TABLE English.English1000 LIKE xyz.English1000\r\nEnglish.English1000为目标    xyz.English1000为源\r\n//复制数据\r\nINSERT INTO English.English1000 SELECT * FROM xyz.English1000;','',1),
(42,2,'windows redis使用与设置密码 ','redis 根目录\r\n修改redis.windows-service.conf\r\nappendonly yes\r\nrequirepass qq282246101\r\n\r\n','',1),
(43,2,'linux mysql备份指定几个表','mysqldump -uroot -pqq282246101 xyz  WarehouseGoods WarehousePreorder WisdomCategory WisdomPreview WisdomToolsType WisdomToolsName WisdomBartitle WisdomBarrtitle > /home/php.sql','',1),
(44,2,'mariaDB远程访问设置','sudo apt install mariadb-server\r\n/etc/mysql/mariadb.conf.d/60-galera.cnf\r\nbind-address = 0.0.0.0 去掉前面的 #\r\nmysql -uroot -p\r\n-- 登录 MariaDB 后执行\r\nALTER USER \'root\'@\'localhost\' IDENTIFIED BY \'新密码\';\r\nFLUSH PRIVILEGES; -- 刷新权限使设置生效','',1),
(45,2,'Linux phpmyadmin配置1 config.inc.php','phpMyAdmin-5.2.1-all-languages.tar.gz 解压到 /usr/share/phpmyadmin\r\n创建config.inc.php 如下代码\r\n\r\n\r\n<?php\r\n/**\r\n * phpMyAdmin sample configuration, you can use it as base for\r\n * manual configuration. For easier setup you can use setup/\r\n *\r\n * All directives are explained in documentation in the doc/ folder\r\n * or at <https://docs.phpmyadmin.net/>.\r\n */\r\n\r\ndeclare(strict_types=1);\r\n\r\n/**\r\n * This is needed for cookie based authentication to encrypt the cookie.\r\n * Needs to be a 32-bytes long string of random bytes. See FAQ 2.10.\r\n */\r\n$cfg[\'blowfish_secret\'] = \'\'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */\r\n\r\n/**\r\n * Servers configuration\r\n */\r\n$i = 0;\r\n\r\n/**\r\n * First server\r\n */\r\n$i++;\r\n/* Authentication type */\r\n$cfg[\'Servers\'][$i][\'auth_type\'] = \'cookie\';\r\n/* Server parameters */\r\n$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';\r\n$cfg[\'Servers\'][$i][\'compress\'] = false;\r\n$cfg[\'Servers\'][$i][\'AllowNoPassword\'] = false;\r\n\r\n/**\r\n * phpMyAdmin configuration storage settings.\r\n */\r\n\r\n/* User used to manipulate with storage */\r\n $cfg[\'Servers\'][$i][\'controlhost\'] = \'localhost\';\r\n $cfg[\'Servers\'][$i][\'controlport\'] = \'3306\';\r\n $cfg[\'Servers\'][$i][\'controluser\'] = \'root\';\r\n $cfg[\'Servers\'][$i][\'controlpass\'] = \'qq282246101\';\r\n\r\n/* Storage database and tables */\r\n $cfg[\'Servers\'][$i][\'pmadb\'] = \'phpmyadmin\';\r\n $cfg[\'Servers\'][$i][\'bookmarktable\'] = \'pma__bookmark\';\r\n $cfg[\'Servers\'][$i][\'relation\'] = \'pma__relation\';\r\n $cfg[\'Servers\'][$i][\'table_info\'] = \'pma__table_info\';\r\n $cfg[\'Servers\'][$i][\'table_coords\'] = \'pma__table_coords\';\r\n $cfg[\'Servers\'][$i][\'pdf_pages\'] = \'pma__pdf_pages\';\r\n $cfg[\'Servers\'][$i][\'column_info\'] = \'pma__column_info\';\r\n $cfg[\'Servers\'][$i][\'history\'] = \'pma__history\';\r\n $cfg[\'Servers\'][$i][\'table_uiprefs\'] = \'pma__table_uiprefs\';\r\n $cfg[\'Servers\'][$i][\'tracking\'] = \'pma__tracking\';\r\n $cfg[\'Servers\'][$i][\'userconfig\'] = \'pma__userconfig\';\r\n $cfg[\'Servers\'][$i][\'recent\'] = \'pma__recent\';\r\n $cfg[\'Servers\'][$i][\'favorite\'] = \'pma__favorite\';\r\n $cfg[\'Servers\'][$i][\'users\'] = \'pma__users\';\r\n $cfg[\'Servers\'][$i][\'usergroups\'] = \'pma__usergroups\';\r\n $cfg[\'Servers\'][$i][\'navigationhiding\'] = \'pma__navigationhiding\';\r\n $cfg[\'Servers\'][$i][\'savedsearches\'] = \'pma__savedsearches\';\r\n $cfg[\'Servers\'][$i][\'central_columns\'] = \'pma__central_columns\';\r\n $cfg[\'Servers\'][$i][\'designer_settings\'] = \'pma__designer_settings\';\r\n $cfg[\'Servers\'][$i][\'export_templates\'] = \'pma__export_templates\';\r\n\r\n/**\r\n * End of servers configuration\r\n */\r\n\r\n/**\r\n * Directories for saving/loading files from server\r\n */\r\n$cfg[\'UploadDir\'] = \'\';\r\n$cfg[\'SaveDir\'] = \'\';\r\n\r\n/**\r\n * Whether to display icons or text or both icons and text in table row\r\n * action segment. Value can be either of \'icons\', \'text\' or \'both\'.\r\n * default = \'both\'\r\n */\r\n//$cfg[\'RowActionType\'] = \'icons\';\r\n\r\n/**\r\n * Defines whether a user should be displayed a \"show all (records)\"\r\n * button in browse mode or not.\r\n * default = false\r\n */\r\n//$cfg[\'ShowAll\'] = true;\r\n\r\n/**\r\n * Number of rows displayed when browsing a result set. If the result\r\n * set contains more rows, \"Previous\" and \"Next\".\r\n * Possible values: 25, 50, 100, 250, 500\r\n * default = 25\r\n */\r\n//$cfg[\'MaxRows\'] = 50;\r\n\r\n/**\r\n * Disallow editing of binary fields\r\n * valid values are:\r\n *   false    allow editing\r\n *   \'blob\'   allow editing except for BLOB fields\r\n *   \'noblob\' disallow editing except for BLOB fields\r\n *   \'all\'    disallow editing\r\n * default = \'blob\'\r\n */\r\n//$cfg[\'ProtectBinary\'] = false;\r\n\r\n/**\r\n * Default language to use, if not browser-defined or user-defined\r\n * (you find all languages in the locale folder)\r\n * uncomment the desired line:\r\n * default = \'en\'\r\n */\r\n//$cfg[\'DefaultLang\'] = \'en\';\r\n//$cfg[\'DefaultLang\'] = \'de\';\r\n\r\n/**\r\n * How many columns should be used for table display of a database?\r\n * (a value larger than 1 results in some information being hidden)\r\n * default = 1\r\n */\r\n//$cfg[\'PropertiesNumColumns\'] = 2;\r\n\r\n/**\r\n * Set to true if you want DB-based query history.If false, this utilizes\r\n * JS-routines to display query history (lost by window close)\r\n *\r\n * This requires configuration storage enabled, see above.\r\n * default = false\r\n */\r\n//$cfg[\'QueryHistoryDB\'] = true;\r\n\r\n/**\r\n * When using DB-based query history, how many entries should be kept?\r\n * default = 25\r\n */\r\n//$cfg[\'QueryHistoryMax\'] = 100;\r\n\r\n/**\r\n * Whether or not to query the user before sending the error report to\r\n * the phpMyAdmin team when a JavaScript error occurs\r\n *\r\n * Available options\r\n * (\'ask\' | \'always\' | \'never\')\r\n * default = \'ask\'\r\n */\r\n//$cfg[\'SendErrorReports\'] = \'always\';\r\n\r\n/**\r\n * \'URLQueryEncryption\' defines whether phpMyAdmin will encrypt sensitive data from the URL query string.\r\n * \'URLQueryEncryptionSecretKey\' is a 32 bytes long secret key used to encrypt/decrypt the URL query string.\r\n */\r\n//$cfg[\'URLQueryEncryption\'] = true;\r\n//$cfg[\'URLQueryEncryptionSecretKey\'] = \'\';\r\n\r\n/**\r\n * You can find more configuration options in the documentation\r\n * in the doc/ folder or at <https://docs.phpmyadmin.net/>.\r\n */\r\n','',1),
(46,2,'Linux phpmyadmin配置2','sudo vim /etc/apache2/conf-available/phpmyadmin.conf\r\n//写入如下代码\r\nAlias /phpmyadmin /usr/share/phpmyadmin\r\n\r\n<Directory /usr/share/phpmyadmin>\r\n    Options SymLinksIfOwnerMatch\r\n    DirectoryIndex index.php\r\n\r\n    <IfModule mod_php5.c>\r\n        <IfModule mod_mime.c>\r\n            AddType application/x-httpd-php .php\r\n        </IfModule>\r\n        <FilesMatch \".+\\.php$\">\r\n            SetHandler application/x-httpd-php\r\n        </FilesMatch>\r\n\r\n        php_value include_path .\r\n        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/\r\n        php_admin_value mbstring.func_overload 0\r\n    </IfModule>\r\n    <IfModule mod_php.c>\r\n        <IfModule mod_mime.c>\r\n            AddType application/x-httpd-php .php\r\n        </IfModule>\r\n        <FilesMatch \".+\\.php$\">\r\n            SetHandler application/x-httpd-php\r\n        </FilesMatch>\r\n\r\n        php_value include_path .\r\n        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/\r\n        php_admin_value mbstring.func_overload 0\r\n    </IfModule>\r\n\r\n</Directory>\r\n# Authorize for setup\r\n<Directory /usr/share/phpmyadmin/setup>\r\n    <IfModule mod_authz_core.c>\r\n        <IfModule mod_authn_file.c>\r\n            AuthType Basic\r\n            AuthName \"phpMyAdmin Setup\"\r\n            AuthUserFile /etc/phpmyadmin/htpasswd.setup\r\n        </IfModule>\r\n        Require valid-user\r\n    </IfModule>\r\n</Directory>\r\n\r\n# Disallow web access to directories that don\'t need it\r\n<Directory /usr/share/phpmyadmin/templates>\r\n    Require all denied\r\n</Directory>\r\n<Directory /usr/share/phpmyadmin/libraries>\r\n    Require all denied\r\n</Directory>\r\n<Directory /usr/share/phpmyadmin/setup/lib>\r\n    Require all denied\r\n</Directory>\r\n\r\n\r\n# 2. 启用phpMyAdmin配置文件\r\n#sudo a2enconf phpmyadmin.conf\r\n#sudo systemctl reload apache2\r\n','',1),
(47,3,'vscode golang 安装插件','https://goproxy.io/zh/ 一个全球代理为 Go 模块而生\r\n\r\ngo env -w GO111MODULE=on\r\n\r\n可选一  go env -w GOPROXY=https://goproxy.io,direct\r\n可选二 go env -w GOPROXY=https://goproxy.cn,direct\r\n或者 # 还可以设置不走 proxy 的私有仓库或组，多个用逗号相隔（可选）\r\ngo env -w GOPRIVATE = \"git.mycompany.com,github.com/my/private\"','',1),
(48,3,'golang 调用异步协程','//定义这个WaitGroup是为了 go协程执行完毕后wg.Wait() 放行主线程继续往下	\r\n	wg := sync.WaitGroup{}\r\n	wg.Add(10)//表示调用异步次数\r\n	for i := 0; i < 10; i++ {\r\n		go func(i int) {\r\n			fmt.Println(i)\r\n		wg.Done()//调用次数减1\r\n		}(i)\r\n	}\r\n//wg 是为了等待异步执行完毕 有这句话就算主程序完成了程序还是要等待 直到异步完成为止\r\n	wg.Wait()\r\n	fmt.Println(\"ok\")\r\n\r\n//示例如下\r\n\r\nfunc Aaa(wg *sync.WaitGroup) {\r\n	fmt.Println(\"Aaa\")\r\n	wg.Done()\r\n}\r\nfunc Baa(wg *sync.WaitGroup) {\r\n	fmt.Println(\"Baa\")\r\n	wg.Done()\r\n}\r\nfunc Caa(wg *sync.WaitGroup) {\r\n	fmt.Println(\"Caa\")\r\n	wg.Done()\r\n}\r\nfunc Daa(wg *sync.WaitGroup) {\r\n	fmt.Println(\"Daa\")\r\n	wg.Done()\r\n}\r\nfunc main() {\r\n	wg := sync.WaitGroup{}\r\n	wg.Add(4)\r\n	go Aaa(&wg)\r\n	go Baa(&wg)\r\n	go Caa(&wg)\r\n	go Daa(&wg)\r\n	wg.Wait()\r\n	fmt.Println(\"ok\")\r\n}','',1),
(49,3,'linux 手动安装golang或更新版本 ','官网下载最新包\r\n如果是 树莓派 就下载 arm构架的包\r\n下载后放到 /usr/local/下面 这里是linux默认安装的地方 当然也可以装到别的地方\r\n把包放到这个目录下 cd 到该目录\r\ntar -zxvf 包名  //进行解压\r\n\r\n最重要一点来了  设置环境变量\r\n\r\nvi ~/.bashrc\r\n\r\n里面添加\r\n\r\n//更新golang版本 直接进入/usr/local/\r\nrm -r go\r\n//然后把包放到这个目录下解压就可以了\r\n//我们的工作目录设置是 /opt/go\r\n//下面有三个目录 bin  pkg(这个目录是依赖包目录很重要千万别删) src(代码目录 也就是工作目录 写完代码直接命令运行或编译 go run main.go   或者 go build main.go)\r\n\r\nexport GOROOT=/usr/local/go  //就是你包解压的地方\r\n\r\nexport GOPATH=/opt/go  //你网站运行的目录\r\n\r\nexport PATH=$GOPATH/bin:$GOROOT/bin:$PATH\r\n\r\n保存退出\r\n\r\n再  source ~/.bashrc\r\n//下载beego\r\ngo get github.com/astaxie/beego\r\ngo get github.com/beego/bee','',1),
(50,3,'defer 关键名','defer 关键名 相当于c# finaly\r\n\r\n\r\n\r\ndefer conn.close()\r\n\r\ndb.select()...\r\n\r\n//它是会等待db.select()...再进行conn.close() 它会等他代码下一行语句执行完毕再调用到它','',1),
(51,3,'go 判断客户端是是手机还是电脑','import (\r\n\r\n	\"strings\"\r\n\r\n	\"github.com/astaxie/beego\"\r\n\r\n)\r\n\r\ntype Isphome struct{\r\n\r\n	beego.Controller\r\n\r\n}\r\n\r\nfunc (c *Isphome)Isphone() bool{\r\n\r\n	//User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0\r\n\r\n	UserAgent := c.Ctx.Request.Header.Get(\"User-Agent\")\r\n\r\n	//找不到返回 -1 成功为正数\r\n\r\n	i := strings.Index(UserAgent, \"Windows\")\r\n\r\n	if i> -1 {\r\n\r\n		return true\r\n\r\n	}else{\r\n\r\n		return false\r\n\r\n	}\r\n\r\n}\r\n','',1),
(52,3,'golang 执行先后','先执行引入包的 全局变量 -> init方法\r\n\r\n再执行本文件的 全局变量 -> init方法\r\n\r\n再到 main()方法','',1),
(53,3,'golang mysql自定义 类','package models\r\n\r\nimport (\r\n	\"database/sql\"\r\n	\"fmt\"\r\n\r\n	\"time\"\r\n\r\n	_ \"github.com/go-sql-driver/mysql\"\r\n)\r\n\r\ntype GoSql struct {\r\n	conn *sql.DB\r\n	arr  []interface{}\r\n	stmt *sql.Stmt\r\n}\r\n\r\n// mysqlPasswd DES  8位Key加密过了\r\nfunc (ggg *GoSql) ConnectDb(mysqlHost, mysqlUser, mysqlPasswd, port, dbDatabase string) *GoSql {\r\n	var err error\r\n	ggg.conn, err = sql.Open(\"mysql\", mysqlUser+\":\"+mysqlPasswd+\"@tcp(\"+mysqlHost+\":\"+port+\")/\"+dbDatabase+\"?charset=utf8\")\r\n	if err != nil {\r\n		fmt.Println(\"连接数据库fail\")\r\n		ggg.conn.Close()\r\n		return nil\r\n	}\r\n	//设置每个链接的过期时间\r\n	ggg.conn.SetConnMaxLifetime(180 * time.Second)\r\n	//设置最大连接数\r\n	ggg.conn.SetMaxOpenConns(30)\r\n	//设置最大空闲连接数\r\n	ggg.conn.SetMaxIdleConns(10)\r\n	return ggg\r\n}\r\nfunc (ggg *GoSql) Ping() error {\r\n	// 测试数据库连接\r\n	err := ggg.conn.Ping()\r\n	if err != nil {\r\n		return err\r\n	}\r\n	return nil\r\n}\r\n\r\n// 第一个参数 sql语句 第二个参数 sql语句 ? 对应的值\r\nfunc (ggg *GoSql) Sql(sql string, arr ...interface{}) *GoSql {\r\n	Stmt, err := ggg.conn.Prepare(sql)\r\n	if err != nil {\r\n		ggg.conn.Close()\r\n		return nil\r\n	}\r\n	ggg.stmt = Stmt\r\n	ggg.arr = arr\r\n	return ggg\r\n}\r\n\r\n// 参数就是返回结果只  查询success 返回 true 如果只判断bool Row里不用传 指针取值\r\nfunc (ggg *GoSql) Row(show ...interface{}) bool {\r\n	row, err := ggg.stmt.Query(ggg.arr...)\r\n	if err != nil {\r\n		return false\r\n	}\r\n	defer row.Close()\r\n	bl := row.Next()\r\n	if !bl {\r\n		return false\r\n	}\r\n	row.Scan(show...)\r\n\r\n	return true\r\n}\r\n\r\n// 返回*sql.Rows, error 手动写 指针取值\r\nfunc (ggg *GoSql) MultiRows() (*sql.Rows, error) {\r\n	rows, err1 := ggg.stmt.Query(ggg.arr...)\r\n	return rows, err1\r\n}\r\n\r\n/*\r\n执行查询并返回多行结果。\r\n每行结果存储为一个映射，键为列名，值为该列的值。\r\n返回的映射的键是行号，值是该行的数据映射。\r\n如果查询过程中发生错误，将返回一个空的映射和错误。\r\nfail返回空MAP 数据库字段默认null即sql.NullString之类不能使用该方法\r\n*/\r\n\r\nfunc (ggg *GoSql) AutoMultiRows() map[int]map[string]interface{} {\r\n	// 初始化结果映射\r\n	result := make(map[int]map[string]interface{})\r\n	// 执行查询\r\n	rows, err := ggg.stmt.Query(ggg.arr...)\r\n	if err != nil {\r\n		// 关闭rows资源，避免资源泄露\r\n		rows.Close()\r\n		return nil\r\n	}\r\n\r\n	// 获取查询结果的列名\r\n	columns, err1 := rows.Columns()\r\n	if err1 != nil {\r\n		// 关闭rows资源，避免资源泄露\r\n		rows.Close()\r\n		return nil\r\n	}\r\n\r\n	// 初始化与列数相等的切片，用于存储每行的数据\r\n	values := make([]interface{}, len(columns))\r\n	valuePtrs := make([]interface{}, len(columns))\r\n	// 将每列的指针存储到valuePtrs中，以便Scan能够直接填充数据\r\n	for i := range columns {\r\n		valuePtrs[i] = &values[i]\r\n	}\r\n	rowIndex := 0\r\n	// 关闭rows资源，避免资源泄露\r\n	defer rows.Close()\r\n	// 遍历查询结果的每一行\r\n	for rows.Next() {\r\n		// 将当前行的数据填充到valuePtrs指向的变量中\r\n		if err := rows.Scan(valuePtrs...); err != nil {\r\n			return nil\r\n		}\r\n		// 初始化当前行的数据映射\r\n		rowData := make(map[string]interface{})\r\n		for i, colName := range columns {\r\n			var v interface{}\r\n			val := values[i]\r\n			b, ok := val.([]byte)\r\n			if ok {\r\n				v = string(b)\r\n			} else {\r\n				v = val\r\n			}\r\n			rowData[colName] = v\r\n		}\r\n		// 将当前行的数据添加到结果集中\r\n		result[rowIndex] = rowData\r\n		rowIndex++\r\n	}\r\n	// 检查是否有查询过程中的错误\r\n	if err = rows.Err(); err != nil {\r\n		return nil\r\n	}\r\n	return result\r\n}\r\n\r\n// fail返回0 success返回 受影响行的个数\r\nfunc (ggg *GoSql) Execute() int64 {\r\n	crow, err := ggg.stmt.Exec(ggg.arr...)\r\n	if err != nil {\r\n		return 0\r\n	}\r\n	re, err1 := crow.RowsAffected()\r\n	if err1 != nil {\r\n		return 0\r\n	}\r\n	return re\r\n}\r\n\r\nfunc (ggg *GoSql) AutoInsert(table string, m map[string]interface{}) int64 {\r\n	sql := \"INSERT INTO \" + table + \" (\"\r\n	//(rid,user,password) VALUES (?,?,?)\r\n	ik := \"\"\r\n	iv := \"\"\r\n	var mv []interface{}\r\n	for k, v := range m {\r\n		if ik == \"\" {\r\n			ik = k + \",\"\r\n		} else {\r\n			ik = ik + k + \",\"\r\n		}\r\n		if iv == \"\" {\r\n			iv = \"?,\"\r\n		} else {\r\n			iv = iv + \"?\" + \",\"\r\n		}\r\n		mv = append(mv, v)\r\n	}\r\n	ik = ik[0 : len(ik)-1]\r\n	iv = iv[0 : len(iv)-1]\r\n	sql = sql + ik + \") VALUES (\" + iv + \")\"\r\n	return ggg.Sql(sql, mv...).Execute()\r\n}\r\nfunc (ggg *GoSql) Count(table string) int64 {\r\n	count := int64(0)\r\n	sql := \"SELECT count(id) FROM \" + table\r\n	ggg.Sql(sql).Row(&count)\r\n	return count\r\n}\r\n','',1),
(54,3,'bee 分页','package models\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"strconv\"\r\n	\"strings\"\r\n)\r\n\r\ntype Pages struct {\r\n	PageNo     int    //当前页\r\n	PageSize   int    //每页多少数据\r\n	TotalPage  int    //总共多少页\r\n	TotalCount int    //总共多少条数据\r\n	FirstPage  int    //第一页\r\n	LastPage   int    //最后一页\r\n	Url        string //链接\r\n}\r\n\r\nfunc NewPage(PageNo int, PageSize int, TotalCount int, Url string) Pages {\r\n	return Pages{PageNo: PageNo, PageSize: PageSize, TotalCount: TotalCount, Url: Url}\r\n}\r\n\r\n//计算总页数\r\nfunc (c *Pages) getPageCount() {\r\n	var tp float32 = float32(c.TotalCount) / float32(c.PageSize)\r\n	if tp < 1 {\r\n		c.TotalPage = 1\r\n	}\r\n	var tpint float32 = float32(int(tp))\r\n\r\n	if tp > tpint {\r\n		tpint += 1\r\n	}\r\n	c.TotalPage = int(tpint)\r\n	c.LastPage = int(tpint)\r\n	c.FirstPage = 1\r\n	c.execUrl()\r\n}\r\n\r\n//格式化URL地址\r\nfunc (c *Pages) execUrl() {\r\n	if strings.Contains(c.Url, \"?\") {\r\n		c.Url = strings.Join([]string{c.Url, \"&page=\"}, \"\")\r\n	} else {\r\n		c.Url = strings.Join([]string{c.Url, \"?page=\"}, \"\")\r\n	}\r\n}\r\n\r\n//获取URL组织\r\nfunc (c *Pages) getUrl(page int) string {\r\n	return strings.Join([]string{c.Url, strconv.Itoa(page)}, \"\")\r\n}\r\n\r\nfunc (c *Pages) getNum(page int, num int) (int, int) {\r\n	var k = 1\r\n	//分布显示数量\r\n	var v = 5\r\n	if page > 3 {\r\n		k = page - 2\r\n		v = page + 2\r\n		if v > num {\r\n			k = num - 4\r\n			v = num\r\n		}\r\n	} else {\r\n		if v > num {\r\n			v = num\r\n		}\r\n	}\r\n	return k, v\r\n}\r\nfunc (c *Pages) LimitStart() int {\r\n	return (c.PageNo - 1) * c.PageSize\r\n}\r\nfunc (c *Pages) Show() string {\r\n	c.getPageCount()\r\n	var style bytes.Buffer\r\n	style.WriteString(\"<style> .pageing{ width:360px; list-style-type:none; margin: 0px;padding: 0px; } .pageing>li {  float: left; width: 30px; line-height:23px; text-align: center; border: 1px solid #7B7B7B; margin:3px; }  </style>\")\r\n	var buf bytes.Buffer\r\n	str := \"<div style=\\\"clear:both;\\\"></div><ul class=\\\"pageing\\\"><li><a href=\\\"\" + c.getUrl(1) + \"\\\">1</a></li>\"\r\n	buf.WriteString(str)\r\n	if c.PageNo > 1 {\r\n		buf.WriteString(\"<li><a href=\\\"\" + c.getUrl(c.PageNo-1) + \"\\\"><<</a></li>\")\r\n	}\r\n\r\n	k, v := c.getNum(c.PageNo, c.TotalPage)\r\n\r\n	for i := k; i <= v; i++ {\r\n		if i == c.PageNo {\r\n			buf.WriteString(\"<li style=\\\"background-color: green;\\\">\")\r\n			buf.WriteString(strconv.Itoa(i))\r\n		} else {\r\n			buf.WriteString(\"<li><a href=\\\"\" + c.getUrl(i) + \"\\\">\")\r\n			buf.WriteString(strconv.Itoa(i))\r\n		}\r\n		buf.WriteString(\"</a></li>\")\r\n	}\r\n\r\n	if c.PageNo < c.TotalPage {\r\n		var nextPage int = c.PageNo + 1\r\n		buf.WriteString(\"<li><a href=\\\"\" + c.getUrl(nextPage) + \"\\\">>></a></li>\")\r\n	}\r\n\r\n	buf.WriteString(\"<li><a href=\\\"\" + c.getUrl(c.TotalPage) + \"\\\">\" + strconv.Itoa(c.TotalPage) + \"</a></li></ul>\")\r\n	return style.String() + buf.String()\r\n}\r\n','',1),
(55,3,'beego 验证码','import (\r\n	\"beego/models\"\r\n	\"encoding/base64\"\r\n	\"encoding/json\"\r\n	\"fmt\"\r\n	\"strings\"\r\n\r\n	\"github.com/astaxie/beego\"\r\n	\"github.com/astaxie/beego/cache\"\r\n	captcha2 \"github.com/astaxie/beego/utils/captcha\"\r\n)\r\n\r\ntype VcodeController struct {\r\n	beego.Controller\r\n}\r\n\r\n// 全局验证码结构体\r\nvar captcha *captcha2.Captcha\r\n\r\n// init函数初始化captcha\r\nfunc init() {\r\n	// 验证码功能\r\n	// 使用Beego缓存存储验证码数据\r\n	store := cache.NewMemoryCache()\r\n	// 创建验证码\r\n	captcha = captcha2.NewWithFilter(\"/captcha\", store)\r\n	// 设置验证码长度\r\n	captcha.ChallengeNums = 4\r\n	// 设置验证码模板高度\r\n	captcha.StdHeight = 50\r\n	// 设置验证码模板宽度\r\n	captcha.StdWidth = 120\r\n}\r\n\r\n\r\n <p> {{create_captcha}}<--刷新 </p> \r\n\r\n// if !captcha.VerifyReq(c.Ctx.Request) {\r\n	// 	c.Ctx.WriteString(\"验证码错误\")\r\n	// 	return\r\n	// }','',1),
(56,3,'map数组','make(map[string]interface{})\r\n\r\nmap[string]string{ \"k\":\"v\", } //map数组 初始值声明方式','',1),
(57,3,'map转换  json','data, _ := json.Marshal(map_array)\r\nc.Ctx.WriteString(string(data))  //返回json响应','',1),
(58,3,'* 和 & 的区别','* 代表取指针地址中存的值\r\n& 代表取一个值的内存地址\r\nfunc main() {\r\n	a := 100\r\n	var ptr *int\r\n\r\n	ptr = &a\r\n	fmt.Println(ptr)\r\n	fmt.Println(*ptr)//获取值\r\n	fmt.Println(*&a)//获取值\r\n}\r\n','',1),
(59,3,'管道 chan','chan   \r\nchan:=make(chan int,3) //(管道 类型,容量 ) 这个是双向管道 \r\nchan<-20  //管道赋值\r\naa:=<-chan //管道赋值给变量\r\nmake(chan<- int,3) //单向只写 只能这与不能取\r\nmake(<-chan int,3) //单向只读 只能取不能写\r\n管道特性 不管使用协程与否，管道都是排顺序 存取 主要应用于 协程+管道\r\n特别注意 chan存多少次就要取多少次\r\n\r\nchan<-10\r\nchan<-20\r\nchan<-30\r\n<-chan\r\n<-chan\r\n<-chan','',1),
(62,3,'go 浏览文件夹','import (\r\n	\"fmt\"\r\n	\"io/ioutil\"\r\n)\r\n\r\nfunc readDir(dirPath string) {\r\n	str := []string{}\r\n	files, err := ioutil.ReadDir(dirPath)\r\n	if err != nil {\r\n		fmt.Println(\"文件打开失败\")\r\n	}\r\n	for _, v := range files {\r\n		if v.IsDir() {\r\n			str = append(str, \"<\"+v.Name()+\">\")\r\n		} else {\r\n			str = append(str, v.Name())\r\n		}\r\n	}\r\n	fmt.Println(str)\r\n}','',1),
(63,3,'go编译后的程序关联详情','编译后 可删除的文件夹\r\n1.控制器 controllers 文件夹\r\n2.static文件夹\r\n但是views是不可以删除的','',1),
(64,3,'go 删除文件','os.Remove(\"123123.jpg\")','',1),
(65,3,'go 发送邮件','package models\r\n\r\nimport (\r\n	\"strconv\"\r\n\r\n	\"gopkg.in/gomail.v2\"\r\n)\r\n\r\ntype MyMail struct {\r\n	to     []string\r\n	title  string\r\n	body   string\r\n	attach string\r\n}\r\n\r\nfunc (class *MyMail) To(to string) *MyMail {\r\n	class.attach = \"\"\r\n	class.to = append(class.to, to)\r\n	return class\r\n}\r\nfunc (class *MyMail) Title(str string) *MyMail {\r\n	class.title = str\r\n	return class\r\n}\r\nfunc (class *MyMail) Body(str string) *MyMail {\r\n	class.body = str\r\n	return class\r\n}\r\nfunc (class *MyMail) Attach(path string) *MyMail {\r\n	class.attach = path\r\n	return class\r\n}\r\nfunc (class *MyMail) Send() error {\r\n	mailConn := map[string]string{\r\n		\"user\": \"282246101@qq.com\",\r\n		\"pass\": \"jwssaevivurwcbai\",\r\n		\"host\": \"smtp.qq.com\",\r\n		\"port\": \"465\",\r\n	}\r\n	port, _ := strconv.Atoi(mailConn[\"port\"]) //转换端口类型为int\r\n\r\n	m := gomail.NewMessage()\r\n\r\n	m.SetHeader(\"From\", m.FormatAddress(mailConn[\"user\"], \"360xyz\"))\r\n	//这种方式可以添加别名，即“XX官方”\r\n	//说明：如果是用网易邮箱账号发送，以下方法别名可以是中文，如果是qq企业邮箱，以下方法用中文别名，会报错，需要用上面此方法转码\r\n	//m.SetHeader(\"From\", \"FB Sample\"+\"<\"+mailConn[\"user\"]+\">\") //这种方式可以添加别名，即“FB Sample”， 也可以直接用<code>m.SetHeader(\"From\",mailConn[\"user\"])</code> 读者可以自行实验下效果\r\n	//m.SetHeader(\"From\", mailConn[\"user\"])\r\n	m.SetHeader(\"To\", class.to...)      //发送给多个用户\r\n	m.SetHeader(\"Subject\", class.title) //设置邮件主题\r\n	m.SetBody(\"text/html\", class.body)  //设置邮件正文\r\n	if class.attach != \"\" {\r\n		m.Attach(class.attach) //设置邮件附件\r\n	}\r\n	d := gomail.NewDialer(mailConn[\"host\"], port, mailConn[\"user\"], mailConn[\"pass\"])\r\n\r\n	err := d.DialAndSend(m)\r\n	return err\r\n}\r\n','',1),
(66,3,'go 防止表单重复提交','package models\r\n\r\nimport (\r\n	\"math/rand\"\r\n	\"strconv\"\r\n	\"time\"\r\n\r\n	\"github.com/astaxie/beego\"\r\n)\r\n\r\nfunc FormValidation(c *beego.Controller) {\r\n	PostFormSession, _ := strconv.Atoi(c.GetString(\"FormSession\"))\r\n	if c.GetSession(\"FormSession\") != PostFormSession {\r\n		c.Ctx.Output.ContentType(\"text/html;chart=utf8\")\r\n		c.Ctx.Output.Body([]byte(\"<script>alert(\'表单重复提交了,已被拦截,生效一个\');location.href=\'../\'</script>\"))\r\n		return\r\n	}\r\n}\r\nfunc FormSessionStart(c *beego.Controller) {\r\n	rand.Seed(time.Now().UnixNano())\r\n	t := rand.Intn(999)\r\n	c.SetSession(\"FormSession\", t)\r\n	c.Data[\"FormSession\"] = t\r\n}\r\n','',1),
(67,3,'go程序linux crontab开机后台自动运行','@reboot sleep 3;cd /opt/gogin;nohup ./man >/dev/null 2>& 1 &','',1),
(68,3,'golang 类似php php parse_str()','//类似php php parse_str()\r\nfunc parse_str(uri string) (map[string]string, error) {\r\n	m := make(map[string]string)\r\n	if len(uri) < 1 { // 空字符串\r\n		return m, errors.New(\"uri is none\")\r\n	}\r\n	if uri[0:1] == \"?\" { // 有没有包含？,有的话忽略。\r\n		uri = uri[1:]\r\n	}\r\n\r\n	// 首先分解&（sessionid=22222&token=3333 )变成\r\n	// sessionid=222222 和 token=3333\r\n	pars := strings.Split(uri, \"&\")\r\n	for _, par := range pars {\r\n		// 然后分解 sessionid=222222 和 token=3333\r\n		parkv := strings.Split(par, \"=\")\r\n		m[parkv[0]] = parkv[1] // 等号前面是key,后面是value\r\n	}\r\n	return m, nil\r\n}','',1),
(69,3,'golang time date 详细',' //时间 to 时间戳\r\n   loc, _ := time.LoadLocation(\"Asia/Shanghai\")        //设置时区\r\n   tt, _ := time.ParseInLocation(\"2006-01-02 15:04:05\", \"2018-07-11 15:07:51\", loc) //2006-01-02 15:04:05是转换的格式如php的\"Y-m-d H:i:s\"\r\n   fmt.Println(tt.Unix())                             //1531292871\r\n  \r\n   //时间戳 to 时间\r\n   tm := time.Unix(1531293019, 0)\r\n   fmt.Println(tm.Format(\"2006-01-02 15:04:05\")) //2018-07-11 15:10:19\r\n//12小时制\r\ntime.Now().Format(\"2006-01-02 03:04:05\")\r\n\r\n//24小时制 15刚好是下午3点\r\ntime.Now().Format(\"2006-01-02 15:04:05\")\r\n//当天0点时间戳\r\n	a := time.Now().Format(\"2006-01-02\")\r\n	tt, _ := time.Parse(\"2006-01-02\", a)\r\n	timeNumber := tt.Unix()\r\n	today_start := timeNumber - 28800\r\n	//当天23:59:59 时间戳\r\n	today_end := today_start + 86399\r\n	fmt.Print(today_end)','',1),
(70,3,'golan map range 随机问题','golan map range 每次输出都是随机顺序的\r\n如果需要 map[int]map[string]interface{}\r\n这种 map 前面或后面添加map 可以使用 range k,v 中的k 方法如下\r\n			arr[0] = make(map[string]interface{})\r\n			for k, _ := range result {\r\n				m := make(map[string]interface{})\r\n				m[\"date\"] = result[k][\"date\"]\r\n				m[\"kuaidi\"] = result[k][\"kuaidi\"]\r\n				m[\"kuaidi_number\"] = result[k][\"kuaidi_number\"]\r\n				if send == true {\r\n					m[\"name\"] = result[k][\"name\"]\r\n				}\r\n				arr[k+1] = m\r\n			}','',1),
(72,3,'golang 图片上传','file,h,err:=c.Ctx.Request.FormFile(\"imgaaa\")\r\nif err != nil {\r\nfmt.Println(\"获取上传文件失败\")\r\nreturn \r\n}\r\ndefer file.Close()\r\nf, err := os.OpenFile(\"vvwd/\"+h.Filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)\r\nif err != nil {\r\nfmt.Println(\"创建文件失败\")\r\n}\r\ndefer f.Close()\r\nio.Copy(f, file)\r\n\r\nc.TplName = \"index.html\"','',1),
(73,3,'js POST GET 两边空格','request过来的字符串两边都有好多空格\r\n必须用 js 处理一下 str.replace(/\\s+/g, \' \')\r\n清除两边空格才正常','',1),
(74,3,'跨域请求','跨域请求要在被请求服务器上设置\r\nc.Ctx.ResponseWriter.Header().Set(\"Access-Control-Allow-Origin\", \"*\")\r\n微信小程序为什么不设置Access-control-allow-origin也可以实现跨域请求？\r\n跨域请求限制是浏览器做的事情，而小程序的『浏览器』是微信，它想限制就限制不想限制就不限制','',1),
(75,3,'复制字符串到剪贴板','import \"github.com/atotto/clipboard\"\r\nclipboard.WriteAll(str)','',1),
(76,3,'golang程序开机启动方法','@reboot sleep 3; cd /var/www/html; nohup ./main &\r\n','',1),
(77,3,'go判断目录或文件是否存在，并创建','	d := time.Now().Format(\"2006-1-02\")\r\n	_, err := os.Stat(d)\r\n	if err != nil {\r\n		//fmt.Println(\"目录不存在\")\r\n		os.Mkdir(d, os.ModePerm)\r\n		fmt.Println(\"创建目录\")\r\n	}\r\n','',1),
(78,3,'go拍照自动填快递单号','package main\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"encoding/base64\"\r\n	\"fmt\"\r\n	\"io\"\r\n	\"io/ioutil\"\r\n	\"net/http\"\r\n	\"os\"\r\n	\"time\"\r\n)\r\n\r\nfunc JsonPost() {\r\n	d := time.Now().Format(\"2006-1-02\")\r\n	_, err := os.Stat(d)\r\n	if err != nil {\r\n		//fmt.Println(\"目录不存在\")\r\n		os.Mkdir(d, os.ModePerm)\r\n		fmt.Println(\"创建目录\")\r\n	}\r\n	url := \"https://tysbgpu.market.alicloudapi.com/api/predict/ocr_general\"\r\n	appcode := \"5bdfc02ebd4c4f31bc9d3e0b62b8ec49\"\r\n	f, err1 := os.Open(\"a.jpg\")\r\n	if err1 != nil {\r\n		fmt.Println(\"err1\")\r\n		fmt.Println(err1)\r\n		return\r\n	}\r\n\r\n	defer f.Close()\r\n	buf := bytes.NewBuffer(nil)\r\n	io.Copy(buf, f)\r\n	//buf.Bytes()\r\n	imgstr := base64.StdEncoding.EncodeToString(buf.Bytes())\r\n	bodys := \"{\\\"image\\\": \\\"\" + imgstr + \"\\\",\\\"configure\\\":{\\\"min_size\\\":16,\\\"output_prob\\\":true,\\\"output_keypoints\\\":false,\\\"skip_detection\\\":false,\\\"without_predicting_direction\\\":false}}\"\r\n	req, _ := http.NewRequest(\"POST\", url, bytes.NewBuffer([]byte(bodys)))\r\n	req.Header.Set(\"Content-Type\", \"application/json; charset=UTF-8\")\r\n	req.Header.Set(\"Authorization\", \"APPCODE \"+appcode)\r\n	client := &http.Client{}\r\n	resp, err2 := client.Do(req)\r\n	if err2 != nil {\r\n		fmt.Println(\"err2\")\r\n		fmt.Println(err2)\r\n		return\r\n	}\r\n	defer resp.Body.Close()\r\n	// fmt.Println(\"status\", resp.Status)\r\n	// fmt.Println(\"headers\", resp.Header)\r\n	body, _ := ioutil.ReadAll(resp.Body)\r\n	fmt.Println(string(body))\r\n}\r\n\r\nfunc main() {\r\n	JsonPost()\r\n\r\n}\r\n','',1),
(79,3,'windows下编译linux GO程序','cmd cd到GO程序根目录下\r\nset GOARCH=amd64\r\nset GOOS=linux\r\n然后直接  go build main.go\r\n----------------------------------\r\ngo env -w CGO_ENABLED=0\r\ngo env -w GOARCH=amd64\r\ngo env -w GOOS=windows\r\n','',1),
(80,3,'golang 定时任务','func init() {\r\n	go func() {\r\n		MyCron()\r\n	}()\r\n}\r\n/*\r\n*内置定时任务 非使用linux crontab 比linux crontab 多一位定时时间 秒 这个是6位\r\n*定时每天早上6点查询定时任务\r\n*每周六夜里1.30分数据库导出到sql文件\r\n*每周六早上9点提取数据库备份sql附件形式发给QQ邮箱\r\n*每天早上6点40 开广告牌   19点关广告牌\r\n*只能放在init() 初始化 方法里，如果放在request是无效的\r\n */\r\nfunc MyCron() {\r\n	mycron := cron.New()\r\n	//服务器为arm64\r\n	if runtime.GOARCH == \"arm64\" {\r\n		//周六夜里1点备份远程数据库到本地\r\n		mycron.AddFunc(\"0 0 1 * * 6\", func() {\r\n			beegoPath, _ := os.Getwd()\r\n			cmd := exec.Command(\"/bin/sh\", \"-c\", beegoPath+\"/RemoteToMysql.sh\")\r\n			cmd.StdoutPipe()\r\n			cmd.StderrPipe()\r\n			cmd.Start()\r\n		})\r\n		//周六夜里1点半 导出本地数据库\r\n		mycron.AddFunc(\"0 30 1 * * 6\", func() {\r\n			beegoPath, _ := os.Getwd()\r\n			cmd := exec.Command(\"/bin/sh\", \"-c\", beegoPath+\"/mysql.sh\")\r\n			cmd.StdoutPipe()\r\n			cmd.StderrPipe()\r\n			cmd.Start()\r\n		})\r\n		//周六早上9点 邮件附件备份数据库\r\n		mycron.AddFunc(\"0 0 9 * * 6\", func() {\r\n			date := time.Now().Format(\"2006-01-02\")\r\n			date = strings.Replace(date, \"-\", \"\", -1)\r\n			date = strings.Replace(date, \"-\", \"\", -1)\r\n			sqldate := \"./tool/sql/\" + date + \".sql\"\r\n			m := models.MyMail{}\r\n			m.SendMail([]string{\"282246101@qq.com\"}, \"树莓派数据库定时附件备份\", \"数据库定时附件备份\", sqldate)\r\n		})\r\n		//每天早上6点40分 开启广告牌灯箱  多加参数  email=true 表示发邮件提醒自己\r\n		mycron.AddFunc(beego.AppConfig.String(\"BillboardStart\"), func() {\r\n			models.MyHttpGet(\"http://localhost/service/GetToPostWebsoket?room=admin&message=mydoor1->灯箱开&key=www.360xyz.cn\")\r\n		})\r\n		//每天晚上19点 关闭广告牌灯箱\r\n		mycron.AddFunc(beego.AppConfig.String(\"BillboardEnd\"), func() {\r\n			models.MyHttpGet(\"http://localhost/service/GetToPostWebsoket?room=admin&message=mydoor1->灯箱关&key=www.360xyz.cn\")\r\n		})\r\n	} else {\r\n		mycron.AddFunc(\"0 0 6 * * *\", selectRemind)\r\n		//每天早上6点40分 开启广告牌灯箱  多加参数  email=true 表示发邮件提醒自己\r\n		mycron.AddFunc(beego.AppConfig.String(\"BillboardStart\"), func() {\r\n			models.MyHttpGet(\"http://www.360xyz.cn/service/GetToPostWebsoket?room=admin&message=mydoor1->灯箱开&key=www.360xyz.cn\")\r\n		})\r\n		//每天晚上19点 关闭广告牌灯箱\r\n		mycron.AddFunc(beego.AppConfig.String(\"BillboardEnd\"), func() {\r\n			models.MyHttpGet(\"http://www.360xyz.cn/service/GetToPostWebsoket?room=admin&message=mydoor1->灯箱关&key=www.360xyz.cn\")\r\n		})\r\n		mycron.AddFunc(\"0 * * * * *\", func() {\r\n			fmt.Println(\"每分钟执行一次\")\r\n		})\r\n	}\r\n	fmt.Println(\"cron ---> start\")\r\n	mycron.Run()\r\n}','',1),
(81,3,'golang windows关机命令','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"log\"\r\n	\"net/url\"\r\n	\"os\"\r\n	\"os/exec\"\r\n	\"time\"\r\n\r\n	\"github.com/gorilla/websocket\"\r\n)\r\n\r\ntype websocketClientManager struct {\r\n	conn        *websocket.Conn\r\n	addr        *string\r\n	path        string\r\n	Userinfo    interface{}\r\n	sendMsgChan chan string\r\n	recvMsgChan chan string\r\n	isAlive     bool\r\n	timeout     int\r\n	wtype       string\r\n	user        string\r\n	password    string\r\n	room        string\r\n}\r\n\r\n// 构造函数\r\nfunc NewWsClientManager(addrIp, addrPort, path string, timeout int, wtype string, password string, room string) *websocketClientManager {\r\n	addrString := addrIp + \":\" + addrPort\r\n	var sendChan = make(chan string, 10)\r\n	var recvChan = make(chan string, 10)\r\n	var conn *websocket.Conn\r\n	//获取本机电脑名\r\n	usertemp, _ := os.Hostname()\r\n	user := usertemp\r\n\r\n	return &websocketClientManager{\r\n		addr:        &addrString,\r\n		path:        path,\r\n		conn:        conn,\r\n		sendMsgChan: sendChan,\r\n		recvMsgChan: recvChan,\r\n		isAlive:     false,\r\n		timeout:     timeout,\r\n		wtype:       wtype,\r\n		user:        user,\r\n		password:    password,\r\n		room:        room,\r\n	}\r\n}\r\n\r\n// 链接服务端\r\nfunc (this *websocketClientManager) dail(wtype string, user string, password string, room string) {\r\n	var err error\r\n\r\n	u := url.URL{Scheme: \"wss\", Host: *this.addr, Path: this.path, ForceQuery: true, RawQuery: \"user=\" + user + \"&password=\" + password + \"&room=\" + room}\r\n	log.Printf(\"connecting to %s\", u.String())\r\n	this.conn, _, err = websocket.DefaultDialer.Dial(u.String(), nil)\r\n	if err != nil {\r\n		fmt.Println(err)\r\n		os.Exit(1)\r\n		return\r\n	}\r\n	this.isAlive = true\r\n	log.Printf(\"connecting to %s 链接成功！！！\", u.String())\r\n	//主动向服务端发送断开连接消息\r\n	this.conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(4001, \"close\"), time.Now().Add(time.Second))\r\n	ShutDownEXE()\r\n}\r\n\r\nfunc ShutDownEXE() {\r\n	fmt.Println(\"关闭主机\")\r\n	arg := []string{\"-s\", \"-t\", \"0\"}\r\n	cmd := exec.Command(\"shutdown\", arg...)\r\n	_, err := cmd.CombinedOutput()\r\n	if err != nil {\r\n		fmt.Println(\"Error:\", err)\r\n		return\r\n	}\r\n}\r\nfunc main() {\r\n	wss := \"wss\"\r\n	password := \"efghijk\"\r\n	room := \"admin\"\r\n	t := NewWsClientManager(\"www.360xyz.cn\", \"443\", \"/service/wss\", 10, wss, password, room)\r\n	t.dail(t.wtype, t.user, t.password, t.room)\r\n}\r\n','',1),
(82,3,'go 短时间定时循环','	//设置定时器为15秒\r\n	timer := time.NewTimer(15 * time.Second)\r\n	fmt.Println(\"定时开始\")\r\n	for {\r\n		<-timer.C\r\n\r\n		//15秒后执行这条\r\n		fmt.Println(\"send\")\r\n		//重设定时时间\r\n		timer.Reset(15 * time.Second)\r\n		fmt.Println(\"已经重设定时时间，正在回滚for 循环\")\r\n	}','',1),
(83,3,'golang websocket 客户端','package main\r\n\r\nimport (\r\n	\"encoding/json\"\r\n	\"fmt\"\r\n	\"net\"\r\n	\"net/url\"\r\n	\"os\"\r\n	\"os/exec\"\r\n	\"strings\"\r\n	\"syscall\"\r\n	\"time\"\r\n	\"unsafe\"\r\n\r\n	\"github.com/gorilla/websocket\"\r\n)\r\n\r\n/*\r\ngo build -o xxx.exe -ldflags \"-s -w -H=windowsgui\"\r\n运行命令\r\nshell:startup\r\n把程序扔到里面\r\n*/\r\nfunc GetMac() string {\r\n	netInterfaces, err := net.Interfaces()\r\n	if err != nil {\r\n		return \"\"\r\n	}\r\n	for _, i2 := range netInterfaces {\r\n		//fmt.Println(i2.Name)\r\n		mac := i2.HardwareAddr\r\n		//fmt.Println(mac)\r\n		return mac.String()\r\n	}\r\n	return \"\"\r\n}\r\nfunc main() {\r\n	wss := \"ws\"\r\n	//获取电脑主机名\r\n	mac := GetMac()\r\n	mac = strings.TrimSpace(mac)\r\n	passwd := \"abcdefg\"\r\n	room := \"computer\"\r\n	w := WebsocketClient{}\r\n	w.Setup(\"192.168.0.254\", 80, \"/websocket\", 10, wss, mac, passwd, room, true).Start()\r\n\r\n}\r\n\r\ntype WebsocketClient struct {\r\n	conn          *websocket.Conn\r\n	addr          *string\r\n	path          string\r\n	Userinfo      interface{}\r\n	sendMsgChan   chan string\r\n	isAlive       bool //联网状态\r\n	timeout       int\r\n	wstype        string //连接 wss 还是ws\r\n	user          string\r\n	passwd        string\r\n	room          string\r\n	StartDate     string // 上线时间\r\n	Ch            chan os.Signal\r\n	authorization bool\r\n}\r\n\r\n// 初始化 Setup(\"192.168.0.254\", 443, \"/websocket\", 10, wss,user, password, room,true).Start()\r\nfunc (ggg *WebsocketClient) Setup(addrIp string, addrPort int, path string, timeout int, wstype, user, passwd, room string, authorization bool) *WebsocketClient {\r\n	ggg.authorization = authorization\r\n	var conn *websocket.Conn\r\n	ggg.conn = conn\r\n	temp := addrIp + \":\" + fmt.Sprintf(\"%d\", addrPort)\r\n	ggg.addr = &temp\r\n	ggg.path = path\r\n	ggg.sendMsgChan = make(chan string, 10)\r\n	ggg.isAlive = false\r\n	ggg.timeout = timeout\r\n	ggg.wstype = wstype\r\n	ggg.user = user\r\n	ggg.passwd = passwd\r\n	ggg.room = room\r\n	ggg.Ch = make(chan os.Signal, 1)\r\n	ggg.StartDate = time.Now().Format(\"2006-01-02 15:04\")\r\n\r\n	return ggg\r\n}\r\n\r\n// 开启服务并重连\r\nfunc (ggg *WebsocketClient) Start() {\r\n	for {\r\n		if !ggg.isAlive {\r\n			if ggg.authorization {\r\n				ggg.AuthorizationDail() //Authorization 头信息登录方式\r\n			} else {\r\n				ggg.dail()\r\n			}\r\n			if ggg.isAlive {\r\n				ggg.sendMsgThread()\r\n				ggg.readMsgThread()\r\n			}\r\n		}\r\n		time.Sleep(time.Second * time.Duration(ggg.timeout))\r\n	}\r\n}\r\n\r\n// 链接服务端\r\nfunc (ggg *WebsocketClient) AuthorizationDail() {\r\n	// 替换为实际的 WebSocket 服务器地址\r\n	url := ggg.wstype + \"://\" + *ggg.addr + ggg.path\r\n	fmt.Println(url)\r\n	var err error\r\n	// 创建自定义请求头，包含 Authorization 信息\r\n	header := make(map[string][]string)\r\n	header[\"Authorization\"] = []string{\"user=\" + ggg.user + \"&passwd=\" + ggg.passwd + \"&room=\" + ggg.room}\r\n	ggg.conn, _, err = websocket.DefaultDialer.Dial(url, header)\r\n	if err != nil {\r\n		fmt.Println(err)\r\n		ggg.isAlive = false\r\n		//os.Exit(1)\r\n		return\r\n	}\r\n	ggg.isAlive = true\r\n	fmt.Println(\"链接成功！！！\")\r\n	ggg.StartDate = time.Now().Format(\"2006-01-02 15:04\")\r\n	ggg.conn.WriteMessage(websocket.TextMessage, []byte(\"上线时间\"+ggg.StartDate))\r\n	ggg.conn.PongHandler()\r\n	ggg.conn.SetPingHandler(func(appData string) error {\r\n		fmt.Println(\"单片机返回ping 消息是\" + appData)\r\n		//设置pong超时时间 因为这个只能生效一次,所以每次接受到pong都设置一次\r\n		ggg.conn.SetReadDeadline(time.Now().Add(time.Second * 50)) //20秒ping一次50秒2次没收到返回pong认定超时\r\n		return nil\r\n	})\r\n}\r\n\r\n// 链接服务端\r\nfunc (ggg *WebsocketClient) dail() {\r\n	var err error\r\n	u := url.URL{Scheme: ggg.wstype, Host: *ggg.addr, Path: ggg.path, ForceQuery: true, RawQuery: \"user=\" + ggg.user + \"&passwd=\" + ggg.passwd + \"&room=\" + ggg.room}\r\n	fmt.Println(\"connecting to \" + u.String())\r\n	ggg.conn, _, err = websocket.DefaultDialer.Dial(u.String(), nil)\r\n	if err != nil {\r\n		fmt.Println(err)\r\n		ggg.isAlive = false\r\n		//os.Exit(1)\r\n		return\r\n	}\r\n\r\n	ggg.isAlive = true\r\n	fmt.Println(\"链接成功！！！\")\r\n	ggg.StartDate = time.Now().Format(\"2006-01-02 15:04\")\r\n	ggg.conn.WriteMessage(websocket.TextMessage, []byte(\"上线时间\"+ggg.StartDate))\r\n\r\n}\r\n\r\n// 发送消息\r\nfunc (ggg *WebsocketClient) sendMsgThread() {\r\n	go func() {\r\n		for {\r\n			msg := <-ggg.sendMsgChan\r\n			err := ggg.conn.WriteMessage(websocket.TextMessage, []byte(msg))\r\n			if err != nil {\r\n				fmt.Println(\"write:\", err)\r\n				continue\r\n			}\r\n		}\r\n	}()\r\n}\r\n\r\n// 读取消息\r\nfunc (ggg *WebsocketClient) readMsgThread() {\r\n	go func() {\r\n		for {\r\n			if ggg.conn != nil {\r\n				msgType, msg, err := ggg.conn.ReadMessage()\r\n				if err != nil {\r\n					fmt.Println(\"read:超时\", err)\r\n					ggg.isAlive = false\r\n					return\r\n				}\r\n				if msgType == 9 {\r\n					//响应服务器主动发来的pong 表示我还在线\r\n					//ggg.conn.WriteMessage(websocket.PongMessage, []byte{})\r\n					ggg.conn.WriteControl(websocket.PongMessage, []byte{}, time.Now().Add(time.Second))\r\n				}\r\n				var msgs map[string]string\r\n				json.Unmarshal(msg, &msgs)\r\n				fmt.Println(msgs[\"message\"])\r\n				if len(msgs[\"message\"]) != 0 {\r\n					if strings.Contains(msgs[\"message\"], ggg.user+\".\") {\r\n						if msgs[\"message\"] == ggg.user+\".shutdown\" {\r\n							ggg.conn.WriteMessage(websocket.TextMessage, []byte(\"执行关机中...\"))\r\n							//主动向服务端发送断开连接消息\r\n							ggg.conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(4001, \"close\"), time.Now().Add(time.Second))\r\n							time.Sleep(time.Millisecond * 200)\r\n							ShutDown()\r\n							return\r\n						}\r\n						x := WindowsAlert{}\r\n						a := []rune(msgs[\"message\"])\r\n						x.ShowMessage(\"弹窗提示\", string(a))\r\n					}\r\n				}\r\n			}\r\n		}\r\n	}()\r\n	go func() {\r\n		for {\r\n			s := <-ggg.Ch\r\n			switch s {\r\n			case syscall.SIGINT:\r\n				ggg.conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(4001, \"close\"), time.Now().Add(time.Millisecond*100))\r\n				//fmt.Println(\"退出前执行\")\r\n			case syscall.SIGILL:\r\n				//fmt.Println(\"null\")\r\n			default:\r\n				//fmt.Println(\"default\")\r\n			}\r\n		}\r\n	}()\r\n}\r\n\r\nfunc ShutDown() {\r\n	arg := []string{\"-s\", \"-t\", \"0\"}\r\n	cmd := exec.Command(\"shutdown\", arg...)\r\n	cmd.CombinedOutput()\r\n}\r\n\r\ntype WindowsAlert struct {\r\n}\r\n\r\nfunc (ggg *WindowsAlert) StrPtr(s string) uintptr {\r\n	utf16Ptr, _ := syscall.UTF16PtrFromString(s)\r\n	return uintptr(unsafe.Pointer(utf16Ptr))\r\n}\r\nfunc (ggg *WindowsAlert) ShowMessage(title, text string) {\r\n	user32dll, _ := syscall.LoadLibrary(\"user32.dll\")\r\n	user32 := syscall.NewLazyDLL(\"user32.dll\")\r\n	MessageBoxW := user32.NewProc(\"MessageBoxW\")\r\n	defer syscall.FreeLibrary(user32dll)\r\n	MessageBoxW.Call(uintptr(0), ggg.StrPtr(text), ggg.StrPtr(title), uintptr(0))\r\n	time.Sleep(time.Second * 3)\r\n}\r\n','',1),
(84,3,'golang windows开机自启动隐藏窗口','go build -o xxx.exe -ldflags \"-s -w -H=windowsgui\"\r\n运行命令\r\nshell:startup\r\n把程序扔到里面','',1),
(85,3,'go.sum','github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\r\ngithub.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=\r\ngithub.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=\r\ngithub.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=\r\ngithub.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=\r\ngithub.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=\r\ngithub.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=\r\ngithub.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=\r\ngithub.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=\r\ngithub.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=\r\ngithub.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=\r\ngithub.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=\r\ngithub.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=\r\ngithub.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=\r\ngithub.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=\r\ngithub.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=\r\ngithub.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=\r\ngithub.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=\r\ngithub.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=\r\ngithub.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\r\ngithub.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=\r\ngithub.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=\r\ngithub.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=\r\ngithub.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=\r\ngithub.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=\r\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\r\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\r\ngithub.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=\r\ngithub.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=\r\ngithub.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=\r\ngithub.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=\r\ngithub.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=\r\ngithub.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=\r\ngithub.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=\r\ngithub.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=\r\ngithub.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=\r\ngithub.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=\r\ngithub.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=\r\ngithub.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=\r\ngithub.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=\r\ngithub.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=\r\ngithub.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=\r\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\r\ngithub.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\r\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\r\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\r\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\r\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\r\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\r\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\r\ngithub.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=\r\ngithub.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\r\ngithub.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\r\ngithub.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\r\ngithub.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=\r\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\r\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\r\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\r\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\r\ngithub.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=\r\ngithub.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\r\ngithub.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=\r\ngithub.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=\r\ngithub.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=\r\ngithub.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=\r\ngithub.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\r\ngithub.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=\r\ngithub.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=\r\ngithub.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=\r\ngithub.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\r\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\r\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\r\ngithub.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=\r\ngithub.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=\r\ngithub.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=\r\ngithub.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=\r\ngithub.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=\r\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\r\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\r\ngithub.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=\r\ngithub.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=\r\ngithub.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=\r\ngithub.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=\r\ngithub.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=\r\ngithub.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=\r\ngithub.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=\r\ngithub.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=\r\ngithub.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=\r\ngithub.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=\r\ngithub.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\r\ngithub.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\r\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\r\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\r\ngithub.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=\r\ngithub.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=\r\ngithub.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U=\r\ngithub.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=\r\ngithub.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=\r\ngithub.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\r\ngithub.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=\r\ngithub.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\r\ngithub.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=\r\ngithub.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=\r\ngithub.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=\r\ngithub.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=\r\ngithub.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=\r\ngithub.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=\r\ngithub.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=\r\ngithub.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=\r\ngithub.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=\r\ngithub.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=\r\ngithub.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=\r\ngithub.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=\r\ngithub.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=\r\ngithub.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=\r\ngithub.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=\r\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\r\ngithub.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\r\ngithub.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=\r\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\r\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\r\ngithub.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=\r\ngithub.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=\r\ngithub.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=\r\ngithub.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=\r\ngithub.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=\r\ngolang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\r\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\r\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=\r\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\r\ngolang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\r\ngolang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\r\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\r\ngolang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\r\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=\r\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\r\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\r\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\r\ngolang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\r\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\r\ngolang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\r\ngolang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\r\ngolang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\r\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\r\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\r\ngolang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\r\ngolang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\r\ngolang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\r\ngolang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80=\r\ngolang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\r\ngolang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=\r\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\r\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\r\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\r\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\r\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\r\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\r\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\r\ngoogle.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=\r\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\r\ngopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=\r\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\r\ngopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\r\ngopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\r\ngopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=\r\ngopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=\r\ngopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=\r\ngopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\r\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\r\ngopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\r\ngopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\r\ngopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=\r\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\r\ngithub.com/nosixtools/solarlunar@v0.0.0-20211112060703-1b6dea7b4a19','',1),
(86,3,'golang 阳历 阴历互转换','import (\r\n	\"fmt\"\r\n	\"time\"\r\n\r\n	\"github.com/nosixtools/solarlunar\"\r\n)\r\n\r\nfunc main() {\r\n	//阳历转阴历 中文\r\n	solarDate := time.Now().Format(\"2006-01-02\")\r\n	fmt.Println(solarlunar.SolarToChineseLuanr(solarDate))\r\n\r\n	//阳历转阴历 数字\r\n	fmt.Println(solarlunar.SolarToSimpleLuanr(solarDate))\r\n\r\n	//阴历转阳历\r\n	lunarDate := \"2022-02-26\"\r\n	fmt.Println(solarlunar.LunarToSolar(lunarDate, false))\r\n}','',1),
(87,3,'git 使用','cd 到仓库目录 \r\ngit init 初始化成本地仓库\r\ngit add .   //添加所有\r\n\r\ngit config --global user.email \"任意邮箱名都行\"\r\ngit config --global user.name \"\"\r\n\r\ngit commit -m \"添加到仓库的备注\"\r\ngit branch -M  分支名\r\ngit push -u origin main\r\n\r\n//-b 表示从分支下载\r\ngit clone -b 分支名 url','',1),
(88,3,'go 抽奖','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"math/rand\"\r\n	\"time\"\r\n)\r\n\r\n//查询数组是否有重复 返回重复数组位置 没有重复返回0\r\nfunc RepeatInt(arr []int) int {\r\n	m := make(map[int]int)\r\n	for k, v := range arr {\r\n		_, ok := m[v]\r\n		if ok {\r\n			return k\r\n		} else {\r\n			m[v] = 1\r\n		}\r\n\r\n	}\r\n	return 0\r\n}\r\n\r\n//从 ii 个数随机取 getCount个 随机数\r\nfunc IntRan(ii int, getCount int) []int {\r\n	a := time.Now().Unix()\r\n	rand.Seed(a)\r\n	arr := []int{}\r\n	for i := 0; i < getCount; i++ {\r\n		a := rand.Intn(ii) + 1\r\n		arr = append(arr, a)\r\n	}\r\n	return arr\r\n}\r\nfunc GetCj() []int {\r\n	arr := []int{}\r\n	for {\r\n		arr = IntRan(99, 10)\r\n		if RepeatInt(arr) == 0 {\r\n			break\r\n		}\r\n	}\r\n	fmt.Println(arr)\r\n	a := []int{}\r\n	for {\r\n		a = IntRan(9, 3)\r\n		//fmt.Println(a)\r\n		if RepeatInt(a) == 0 {\r\n			break\r\n		}\r\n	}\r\n	fmt.Println(a)\r\n	result := []int{}\r\n	for _, v := range a {\r\n		result = append(result, arr[v])\r\n	}\r\n	return result\r\n}\r\nfunc main() {\r\n	a := GetCj()\r\n	fmt.Println(a)\r\n}\r\n','',1),
(89,3,'用fmt.Sprintf 其它类型转换 string','格  式 	描  述\r\n%v 	按值的本来值输出\r\n%+v 	在 %v 基础上，对结构体字段名和值进行展开\r\n%#v 	输出 Go 语言语法格式的值\r\n%T 	输出 Go 语言语法格式的类型和值\r\n%% 	输出 % 本体\r\n%b 	整型以二进制方式显示\r\n%o 	整型以八进制方式显示\r\n%d 	整型以十进制方式显示\r\n%x 	整型以十六进制方式显示\r\n%X 	整型以十六进制、字母大写方式显示\r\n%U 	Unicode 字符\r\n%f 	浮点数\r\n%p 	指针，十六进制方式显示\r\n\r\nint 转string  fmt.Sprintf(\"%d\",int)\r\nfloat 转string  fmt.Sprintf(\"%f\",float) //保留6位小数，如果要只保留两位小数  fmt.Sprintf(\"%.2f\",float)\r\nbool 转string  fmt.Sprintf(\"%t\",float)\r\nbyte 转string  fmt.Sprintf(\"%c\",float) //单字符\r\n一般常用的是用 strconv 包转换','',1),
(90,3,'字符串修改 ','一个英文字母占用一个字节，一个汉字占用三个字节\r\nbyte  //支持英文\r\ns2:=\"big\"\r\nbyte2:=[]byte(s2)\r\nbyte2[0]=\"p\"\r\nfmt.Println(string(byte2)) //pig\r\nnune //支持utf-8 \r\ns2:=\"大家好golang\"\r\nrune2:=[]rune(s2)\r\nrune2[0]=\"家\"\r\nfmt.println(string(rune2))   //家家好golang','',1),
(91,3,'获取当前项目根目录路径','beegoPath, _ := os.Getwd()','',1),
(92,3,'golang yaml读取配置文件类','package models\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"io/ioutil\"\r\n\r\n	\"gopkg.in/yaml.v2\"\r\n)\r\n\r\ntype YmlRead struct {\r\n}\r\n\r\nfunc (this *YmlRead) Read(filePath string) (map[string]interface{}, error) {\r\n	data, err := ioutil.ReadFile(filePath)\r\n	if err != nil {\r\n		fmt.Println(\"err\")\r\n		return nil, err\r\n	}\r\n	a := make(map[string]interface{})\r\n	err1 := yaml.Unmarshal([]byte(data), &a)\r\n	if err1 != nil {\r\n		fmt.Println(\"err1\")\r\n		return nil, err1\r\n	}\r\n	return a, nil\r\n}\r\n','',1),
(93,3,'go 递归删除全部文件','package models\r\n\r\nimport (\r\n	\"io/ioutil\"\r\n	\"os\"\r\n	\"runtime\"\r\n)\r\n\r\ntype DeleteAll struct {\r\n}\r\n\r\n// 递归循环删除目录及文件\r\nfunc (this *DeleteAll) Dir(d string) bool {\r\n	if d[len(d)-1:] == \"/\" {\r\n		d = d[0 : len(d)-1]\r\n	}\r\n	files, err := ioutil.ReadDir(d)\r\n	if err != nil {\r\n		return false\r\n	}\r\n	fuhk := \"/\"\r\n	if runtime.GOOS == \"windows\" {\r\n		fuhk = \"\\\\\"\r\n	}\r\n	for _, v := range files {\r\n		if v.IsDir() {\r\n			path := d + fuhk + v.Name()\r\n			this.Dir(path)\r\n		} else {\r\n			os.Remove(v.Name())\r\n		}\r\n	}\r\n	return true\r\n}\r\n','',1),
(94,3,'获取变量类型','两种方法\r\nfmt.Println(fmt.Sprintf(\"%T\", a))\r\nfmt.Println(reflect.TypeOf(a))','',1),
(95,3,'golang get post请求','package models\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"io\"\r\n	\"time\"\r\n\r\n	\"net/http\"\r\n	\"strings\"\r\n)\r\n\r\ntype XyzRequest struct {\r\n}\r\n\r\n// Get请求 url里携带参数\r\nfunc (class *XyzRequest) Get(url string) (string, error) {\r\n	var err error\r\n	myhttp := &http.Client{}\r\n	myhttp.Timeout = time.Duration(3 * time.Second)\r\n	resp, err1 := myhttp.Get(url)\r\n	if err1 != nil {\r\n		return \"\", err\r\n	}\r\n	defer resp.Body.Close()\r\n	body, err2 := io.ReadAll(resp.Body)\r\n	if err2 != nil {\r\n		return \"\", err\r\n	}\r\n	return string(body), nil\r\n}\r\n\r\n// post地址 请求参数，string格式\r\nfunc (class *XyzRequest) Post(url string, KVstring string) (string, error) {\r\n	var err error\r\n	myhttp := &http.Client{}\r\n	myhttp.Timeout = time.Duration(3 * time.Second)\r\n	resp, err1 := myhttp.Post(url, \"application/x-www-form-urlencoded; charset=UTF-8\", strings.NewReader(KVstring))\r\n	if err1 != nil {\r\n		return \"\", err\r\n	}\r\n	defer resp.Body.Close()\r\n	body, err2 := io.ReadAll(resp.Body)\r\n	if err2 != nil {\r\n		return \"\", err\r\n	}\r\n	return string(body), nil\r\n}\r\n\r\n// post地址 请求参数，json格式 返回json\r\nfunc (class *XyzRequest) PostJson(url string, strJson string) (string, error) {\r\n	var err error\r\n	req, _ := http.NewRequest(\"POST\", url, bytes.NewBuffer([]byte(strJson)))\r\n	req.Header.Set(\"Content-Type\", \"application/json; charset=UTF-8\")\r\n	client := &http.Client{}\r\n	client.Timeout = time.Duration(3 * time.Second)\r\n	resp, err2 := client.Do(req)\r\n	if err2 != nil {\r\n		return \"\", err\r\n	}\r\n	defer resp.Body.Close()\r\n	// fmt.Println(\"status\", resp.Status)\r\n	// fmt.Println(\"headers\", resp.Header)\r\n	body, err3 := io.ReadAll(resp.Body)\r\n	if err3 != nil {\r\n		return \"\", err\r\n	}\r\n	return string(body), nil\r\n}\r\n','',1),
(96,3,'golang 连接数据库类','package models\r\n\r\nimport (\r\n	\"database/sql\"\r\n	\"fmt\"\r\n	\"reflect\"\r\n\r\n	_ \"github.com/go-sql-driver/mysql\"\r\n)\r\n\r\ntype Gdo struct {\r\n	conn *sql.DB\r\n	arr  []interface{}\r\n	stmt *sql.Stmt\r\n}\r\n\r\nfunc NewGdo(dbDatabase string) *Gdo {\r\n	conn, err := sql.Open(\"mysql\", \"root:qq282246101@tcp(localhost:3306)/\"+dbDatabase+\"?charset=utf8\")\r\n	if err != nil {\r\n		fmt.Println(\"连接数据库失败\")\r\n		conn.Close()\r\n	}\r\n	conn.SetConnMaxLifetime(100)\r\n	conn.SetMaxOpenConns(30)\r\n	g := &Gdo{}\r\n	g.conn = conn\r\n	return g\r\n}\r\nfunc (this *Gdo) Sql(sql string, arr ...interface{}) *Gdo {\r\n	Stmt, err := this.conn.Prepare(sql)\r\n	if err != nil {\r\n		fmt.Printf(\"prepare sql failed, err:%v\\n\", err)\r\n		this.conn.Close()\r\n		return nil\r\n	}\r\n	this.stmt = Stmt\r\n	this.arr = arr\r\n	return this\r\n}\r\n\r\n// 查询成功 返回 true 返回值是 bool 手动写 指针取值\r\nfunc (this *Gdo) Row(show ...interface{}) bool {\r\n	row, _ := this.stmt.Query(this.arr...)\r\n	defer row.Close()\r\n	bl := row.Next()\r\n	if bl == false {\r\n		return false\r\n	}\r\n	row.Scan(show...)\r\n\r\n	return true\r\n}\r\n\r\n// 返回*sql.Rows, error 手动写 指针取值\r\nfunc (this *Gdo) RowS() (*sql.Rows, error) {\r\n	rows, err := this.stmt.Query(this.arr...)\r\n	return rows, err\r\n}\r\n\r\n// 失败返回空MAP 返回数据全部是string 数据库字段默认null即sql.NullString之类不能使用该方法\r\nfunc (this *Gdo) Fetch() map[string]string {\r\n	result := make(map[string]string)\r\n	row, _ := this.stmt.Query(this.arr...)\r\n	column, err := row.Columns()\r\n	if err != nil {\r\n		return result\r\n	}\r\n	values := make([][]byte, len(column))\r\n	scans := make([]interface{}, len(column))\r\n	for i, _ := range values {\r\n		scans[i] = &values[i]\r\n	}\r\n	defer row.Close()\r\n	bl := row.Next()\r\n	if bl == false {\r\n		return result\r\n	}\r\n	row.Scan(scans...)\r\n	for i, v := range values {\r\n		key := column[i]\r\n		result[key] = string(v)\r\n	}\r\n	return result\r\n}\r\n\r\n// 失败返回空MAP 返回数据全部是string 数据库字段默认null即sql.NullString之类不能使用该方法\r\nfunc (this *Gdo) FetchAll() map[int]map[string]string {\r\n	result := make(map[int]map[string]string)\r\n	rows, _ := this.stmt.Query(this.arr...)\r\n	//得到 select 查询字段名与个数\r\n	column, err := rows.Columns()\r\n	if err != nil {\r\n		return result\r\n	}\r\n	values := make([][]byte, len(column))\r\n	//fmt.Println(values)\r\n	scans := make([]interface{}, len(column))\r\n	for i, _ := range values {\r\n		scans[i] = &values[i]\r\n	}\r\n	//fmt.Println(scans)\r\n	i := 0\r\n	defer rows.Close()\r\n	for rows.Next() {\r\n		rows.Scan(scans...)\r\n		row := make(map[string]string)\r\n		for i, v := range values {\r\n			key := column[i]\r\n			row[key] = string(v)\r\n		}\r\n		result[i] = row\r\n		i++\r\n	}\r\n	return result\r\n}\r\n\r\n// 失败返回0 成功返回 受影响行的个数\r\nfunc (this *Gdo) Execute() int64 {\r\n	crow, _ := this.stmt.Exec(this.arr...)\r\n	re, err := crow.RowsAffected()\r\n	if err != nil {\r\n		return 0\r\n	}\r\n	return re\r\n}\r\n\r\n// 失败返回0 成功返回 行的id\r\nfunc (this *Gdo) Insert() int64 {\r\n	crow, _ := this.stmt.Exec(this.arr...)\r\n	re, err := crow.LastInsertId()\r\n	if err != nil {\r\n		return 0\r\n	}\r\n	return re\r\n}\r\nfunc (this *Gdo) AutoInsert(table string, m map[string]interface{}) int64 {\r\n	sql := \"INSERT INTO \" + table + \" (\"\r\n	//(rid,user,password) VALUES (?,?,?)\r\n	ik := \"\"\r\n	iv := \"\"\r\n	var mv []interface{}\r\n	for k, v := range m {\r\n		if ik == \"\" {\r\n			ik = k + \",\"\r\n		} else {\r\n			ik = ik + k + \",\"\r\n		}\r\n		if iv == \"\" {\r\n			iv = \"?,\"\r\n		} else {\r\n			iv = iv + \"?\" + \",\"\r\n		}\r\n		mv = append(mv, v)\r\n	}\r\n	ik = ik[0 : len(ik)-1]\r\n	iv = iv[0 : len(iv)-1]\r\n	sql = sql + ik + \") VALUES (\" + iv + \")\"\r\n	return this.Sql(sql, mv...).Insert()\r\n}\r\nfunc StructToMap(obj interface{}) map[string]interface{} {\r\n	t := reflect.TypeOf(obj)\r\n\r\n	//获取到里面的值 一维数组 {100 beego gobee}\r\n	v := reflect.ValueOf(obj)\r\n	data := make(map[string]interface{})\r\n	for i := 0; i < t.NumField(); i++ {\r\n		//得到键名                //得到里面的值\r\n		data[t.Field(i).Name] = v.Field(i)\r\n	}\r\n	return data\r\n}\r\nfunc StructToMapS(obj interface{}) map[string]string {\r\n	t := reflect.TypeOf(obj)\r\n\r\n	//获取到里面的值 一维数组 {100 beego gobee}\r\n	v := reflect.ValueOf(obj)\r\n	data := make(map[string]string)\r\n	for i := 0; i < t.NumField(); i++ {\r\n		//得到键名                //得到里面的值\r\n		data[t.Field(i).Name] = v.Field(i).String()\r\n	}\r\n	return data\r\n}\r\n','',1),
(97,3,'go 泛型 ','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n)\r\n\r\n// 定义一个inteface 里面包含多个数据类型\r\ntype Cde interface {\r\n	int64 | float64 | ~string\r\n}\r\n\r\nfunc add[T Cde](x, y T) T {\r\n	return x + y\r\n}\r\nfunc main() {\r\n	var c, d int64\r\n	c = 3\r\n	d = 8\r\n	a := add(c, d)\r\n	fmt.Println(a)\r\n}\r\n','',1),
(98,3,'重定向301 302区别','301是永久访问a直接跳转b， 缓存了跳转连接\r\n下次访问a直接跳转b了,不会经过b后台程序\r\n\r\n302是临时的 关了网页就没了,用302多','',1),
(99,3,'获取随机字符串','//获取随机字符串\r\nfunc GetRandString(length int) string {\r\n	if length < 1 {\r\n		return \"\"\r\n	}\r\n	char := \"abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWSYZ0123456789\"\r\n	charArr := strings.Split(char, \"\")\r\n	//fmt.Println(charArr)\r\n	charlen := len(charArr)\r\n\r\n	b := rand.New(rand.NewSource(time.Now().Unix()))\r\n	//fmt.Println(b)\r\n	str := \"\"\r\n	for i := 1; i <= length; i++ {\r\n		r := b.Intn(charlen)\r\n		str = str + charArr[r]\r\n	}\r\n	return str\r\n}\r\n','',1),
(100,3,'go 微信小程序登录解密','package main\r\n\r\nimport (\r\n	\"crypto/aes\"\r\n	\"crypto/cipher\"\r\n	\"encoding/base64\"\r\n	\"fmt\"\r\n	\"strings\"\r\n)\r\n\r\nfunc main() {\r\n	var appid = \"wx4f4bc4dec97d474b\"\r\n	var sessionKey = \"tiihtNczf5v6AKRyjwEUhQ==\"\r\n	var iv = \"r7BXXKkLb8qrSNn05n0qiA==\"\r\n	var encryptedData = \"CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew==\"\r\n	str := DecryptWXOpenData(sessionKey, encryptedData, iv)\r\n	if strings.Index(str, appid) != -1 {\r\n		fmt.Println(\"解析成功\")\r\n	} else {\r\n		fmt.Println(\"失败\")\r\n	}\r\n\r\n}\r\nfunc DecryptWXOpenData(sessionKey, encryptData, iv string) string {\r\n	decodeBytes, err := base64.StdEncoding.DecodeString(encryptData)\r\n	if err != nil {\r\n		return \"\"\r\n	}\r\n	sessionKeyBytes, err := base64.StdEncoding.DecodeString(sessionKey)\r\n	if err != nil {\r\n		return \"\"\r\n	}\r\n	ivBytes, err := base64.StdEncoding.DecodeString(iv)\r\n	if err != nil {\r\n		return \"\"\r\n	}\r\n	dataBytes, err := AesDecrypt(decodeBytes, sessionKeyBytes, ivBytes)\r\n	return string(dataBytes)\r\n}\r\n\r\nfunc AesDecrypt(crypted, key, iv []byte) ([]byte, error) {\r\n	block, err := aes.NewCipher(key)\r\n	if err != nil {\r\n		return nil, err\r\n	}\r\n	//blockSize := block.BlockSize()\r\n	blockMode := cipher.NewCBCDecrypter(block, iv)\r\n	origData := make([]byte, len(crypted))\r\n	blockMode.CryptBlocks(origData, crypted)\r\n	//获取的数据尾端有\'/x0e\'占位符,去除它\r\n	for i, ch := range origData {\r\n		if ch == \'\\x0e\' {\r\n			origData[i] = \' \'\r\n		}\r\n	}\r\n	//{\"phoneNumber\":\"15082726017\",\"purePhoneNumber\":\"15082726017\",\"countryCode\":\"86\",\"watermark\":{\"timestamp\":1539657521,\"appid\":\"wx4c6c3ed14736228c\"}}//<nil>\r\n	return origData, nil\r\n}\r\n','',1),
(101,3,'rune 的作用','rune 是把中文也计算进字符串，不会出现乱码报错\r\n[]rune(\"\")','',1),
(102,3,'* 和 & 的区别 ','任何变量都有 内存地址和值 组成\r\n指针也是\r\n\r\n指针的值 是一个变量的内存地址\r\n这个指针它也有自己的内存地址\r\n\r\n* 代表取指针地址中存的值\r\n& 代表取一个值的内存地址\r\nfunc main() {\r\n	a := 100\r\n	var ptr *int\r\n\r\n	ptr = &a\r\n	fmt.Println(ptr)\r\n	fmt.Println(*ptr)//获取值\r\n	fmt.Println(*&a)//获取值\r\n}\r\n','',1),
(103,3,'golang file_get_content','	res, err := http.Get(\"https://img2.baidu.com/it/u=9107913,2560446129&fm=253&fmt=auto&app=138&f=JPEG?w=281&h=500\")\r\n	if err != nil {\r\n		fmt.Println(\"err\")\r\n	}\r\n	robots, _ := ioutil.ReadAll(res.Body)\r\n	res.Body.Close(','',1),
(104,3,'移动ORC ','package models\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"crypto/hmac\"\r\n	\"crypto/sha1\"\r\n	\"crypto/sha256\"\r\n	\"encoding/hex\"\r\n	\"errors\"\r\n	\"fmt\"\r\n	\"io\"\r\n	\"io/ioutil\"\r\n	\"net/http\"\r\n	\"net/url\"\r\n	\"strconv\"\r\n	\"strings\"\r\n	\"time\"\r\n)\r\n\r\n/* 	ocr := YiDsOcr{}\r\nresultM := ocr.New().UrlAddSignIsPostUrl().PostGetAllJson(this.GetString(\"image\")).RemoveOtherGetItems().GetItemM()\r\nfmt.Println(resultM) */\r\n\r\ntype YiDsOcr struct {\r\n	host        string\r\n	urlPath     string\r\n	url         string\r\n	query       string\r\n	AccessKey   string\r\n	Secretkey   string\r\n	Sign        string\r\n	RequestType string\r\n	PostUrl     string\r\n	AllJson     string\r\n\r\n	items  string\r\n	i      int\r\n	itemsM map[int]string\r\n}\r\n\r\n// ok\r\nfunc (this *YiDsOcr) New() *YiDsOcr {\r\n	this.RequestType = \"GET\"\r\n	this.AllJson = \"\"\r\n	this.host = \"https://api-wuxi-1.cmecloud.cn:8443\"\r\n	this.urlPath = \"/api/ocr/v1/general\"\r\n	this.url = this.host + this.urlPath\r\n	this.AccessKey = \"566fb5cc631047c9b8e330246522c6a9\"\r\n	this.Secretkey = \"cbea3dde4d414ef3915a570d1f61afb0\"\r\n	bq := \"AccessKey=\" + this.AccessKey +\r\n		\"&SignatureMethod=HmacSHA1&SignatureNonce=\" + this.Sha1(strconv.Itoa(int(time.Now().Unix()))) +\r\n		\"&SignatureVersion=V2.0&Timestamp=\" + time.Now().Format(\"2006-01-02T15:04:05Z\") +\r\n		\"&Version=2016-12-05\"\r\n	this.query = bq\r\n\r\n	this.items = \"\"\r\n	this.i = 0\r\n	this.itemsM = make(map[int]string)\r\n	return this\r\n}\r\n\r\nfunc (this *YiDsOcr) Sha256(str string) string {\r\n	m := sha256.New()\r\n	m.Write([]byte(str))\r\n	res := hex.EncodeToString(m.Sum(nil))\r\n	return res\r\n}\r\n\r\nfunc (this *YiDsOcr) Sha1(s string) string {\r\n	o := sha1.New()\r\n	o.Write([]byte(s))\r\n	res := hex.EncodeToString(o.Sum(nil))\r\n	return res\r\n}\r\n\r\nfunc (this *YiDsOcr) HmacSha1(v, keyStr string) string {\r\n	h := sha1.New()\r\n	io.WriteString(h, v)\r\n	h.Sum(nil)\r\n	//hmac ,use sha1\r\n	key := []byte(keyStr)\r\n	mac := hmac.New(sha1.New, key)\r\n	// mac := hmac.New(md5.New, key)\r\n	mac.Write([]byte(v))\r\n	a := fmt.Sprintf(\"%x\", mac.Sum(nil))\r\n	return a\r\n}\r\n\r\nfunc (this *YiDsOcr) UrlAddSignIsPostUrl() *YiDsOcr {\r\n	this.RequestType = \"POST\"\r\n	Urr := this.url + \"?\" + this.query + \"&Signature=\" + this.GetSign()\r\n	this.PostUrl = Urr\r\n	return this\r\n\r\n}\r\n\r\nfunc (this *YiDsOcr) Pencode(str string) string {\r\n	str = strings.Replace(str, \"+\", \"%20\", -1)\r\n	str = strings.Replace(str, \"*\", \"%2A\", -1)\r\n	str = strings.Replace(str, \"%7E\", \"~\", -1)\r\n	return str\r\n\r\n}\r\n\r\nfunc (this *YiDsOcr) ToASCII(str string) string {\r\n	s := strconv.QuoteToASCII(str)\r\n	true_utf := s[1 : len(s)-1]\r\n	return true_utf\r\n}\r\n\r\nfunc (this *YiDsOcr) GetSign() string {\r\n	m := make(map[int]map[string]string)\r\n	uri := this.query\r\n	if len(uri) < 1 { // 空字符串\r\n		return \"error\"\r\n	}\r\n	if uri[0:1] == \"?\" { // 有没有包含？,有的话忽略。\r\n		uri = uri[1:]\r\n	}\r\n\r\n	// 首先分解&（sessionid=22222&token=3333 )变成\r\n	// sessionid=222222 和 token=3333\r\n	pars := strings.Split(uri, \"&\")\r\n	i := 0\r\n	for _, par := range pars {\r\n		mm := make(map[string]string)\r\n		// 然后分解 sessionid=222222 和 token=3333\r\n		parkv := strings.Split(par, \"=\")\r\n		mm[parkv[0]] = parkv[1] // 等号前面是key,后面是value\r\n		m[i] = mm\r\n		i++\r\n	}\r\n	result := \"\"\r\n	for i := 0; i < len(m); i++ {\r\n		for k, v := range m[i] {\r\n			result = result + this.Pencode(url.QueryEscape(this.ToASCII(k))) + \"=\" + this.Pencode(url.QueryEscape(this.ToASCII(v))) + \"&\"\r\n		}\r\n	}\r\n	result = result[0 : len(result)-1]\r\n\r\n	//url utf8编码\r\n	re := this.RequestType + \"\\n\" +\r\n		this.Pencode(url.QueryEscape(this.urlPath)) + \"\\n\" +\r\n		this.Sha256(result)\r\n	key := this.ToASCII(\"BC_SIGNATURE&\" + this.Secretkey)\r\n	res := this.HmacSha1(re, key)\r\n\r\n	return url.QueryEscape(res)\r\n}\r\n\r\n// ok\r\nfunc (this *YiDsOcr) Parse_str(uri string) (map[string]string, error) {\r\n	m := make(map[string]string)\r\n	if len(uri) < 1 { // 空字符串\r\n		return m, errors.New(\"uri is none\")\r\n	}\r\n	if uri[0:1] == \"?\" { // 有没有包含？,有的话忽略。\r\n		uri = uri[1:]\r\n	}\r\n\r\n	// 首先分解&（sessionid=22222&token=3333 )变成\r\n	// sessionid=222222 和 token=3333\r\n	pars := strings.Split(uri, \"&\")\r\n	for _, par := range pars {\r\n		// 然后分解 sessionid=222222 和 token=3333\r\n		parkv := strings.Split(par, \"=\")\r\n		m[parkv[0]] = parkv[1] // 等号前面是key,后面是value\r\n	}\r\n	return m, nil\r\n}\r\n\r\n// 注意一点js 发送的Base64必须把头文件去除 不然报错 这API要求不能包含有头文件\r\nfunc (this *YiDsOcr) PostGetAllJson(base64 string) *YiDsOcr {\r\n	bodys := \"{\\\"image\\\": \\\"\" + base64 + \"\\\"}\"\r\n	//fmt.Println(bodys)\r\n	req, _ := http.NewRequest(\"POST\", this.PostUrl, bytes.NewBuffer([]byte(bodys)))\r\n	req.Header.Set(\"Content-Type\", \"application/json; charset=UTF-8\")\r\n	client := &http.Client{}\r\n	resp, err2 := client.Do(req)\r\n	if err2 != nil {\r\n		return nil\r\n	}\r\n	defer resp.Body.Close()\r\n	// fmt.Println(\"status\", resp.Status)\r\n	// fmt.Println(\"headers\", resp.Header)\r\n	body, _ := ioutil.ReadAll(resp.Body)\r\n	this.AllJson = string(body)\r\n	return this\r\n}\r\n\r\n// 过滤掉不需要的 只要返回内容 items\r\nfunc (this *YiDsOcr) RemoveOtherGetItems() *YiDsOcr {\r\n	//fmt.Println(restr)\r\n	start := strings.Index(this.AllJson, \"items\")\r\n	end := strings.Index(this.AllJson, \"class\")\r\n	this.items = this.AllJson[start+7 : end-2]\r\n	this.items = strings.ReplaceAll(this.items, \" \", \"\")\r\n	return this\r\n}\r\n\r\n// items 长在3000多个字符串中 找到对应 \"itemstring\":后面的值 合并到一个 map[int]string 想要的数据都在这里面\r\nfunc (this *YiDsOcr) GetItemM() map[int]string {\r\n	start := -1\r\n	end := 0\r\n	if strings.Index(this.items, \"itemstring\") != -1 {\r\n		start = strings.Index(this.items, \"itemstring\") + 12\r\n		this.items = this.items[start:]\r\n		end = strings.Index(this.items, \",\")\r\n		this.itemsM[this.i] = this.items[0:end]\r\n		this.items = this.items[end+1:]\r\n		this.i++\r\n		this.GetItemM()\r\n	}\r\n	this.AllJson = \"\"\r\n	this.i = 0\r\n	return this.itemsM\r\n}\r\n','',1),
(105,3,'HmacSha1 加密 ','func HmacSha1(v, keyStr string) string {\r\n	h := sha1.New()\r\n	io.WriteString(h, v)\r\n	h.Sum(nil)\r\n	//hmac ,use sha1\r\n	key := []byte(keyStr)\r\n	mac := hmac.New(sha1.New, key)\r\n	// mac := hmac.New(md5.New, key)\r\n	mac.Write([]byte(v))\r\n	a := fmt.Sprintf(\"%x\", mac.Sum(nil))\r\n	return a\r\n}','',1),
(106,3,'sha1 加密 ','func Sha1(s string) string {\r\n	o := sha1.New()\r\n	o.Write([]byte(s))\r\n	res := hex.EncodeToString(o.Sum(nil))\r\n	return res\r\n}','',1),
(107,3,'sha256 加密 ','func Sha256(str string) string {\r\n	m := sha256.New()\r\n	m.Write([]byte(str))\r\n	res := hex.EncodeToString(m.Sum(nil))\r\n	return res\r\n}','',1),
(108,3,'utf8编码','func ToASCII(str string) string {\r\n	s := strconv.QuoteToASCII(str)\r\n	true_utf := s[1 : len(s)-1]\r\n	return true_utf\r\n}','',1),
(109,3,'Ocr遍历items放到MAP','/*\r\nocr := OcrItems{}\r\nm := ocr.New().Getitems(jsonS)\r\n*/\r\ntype OcrItems struct {\r\n	items string\r\n	i     int\r\n	m     map[int]string\r\n}\r\n\r\nfunc (this *OcrItems) New() *OcrItems {\r\n	this.items = \"\"\r\n	this.i = 0\r\n	this.m = make(map[int]string)\r\n	return this\r\n}\r\n\r\nfunc (this *OcrItems) Getitems(str string) map[int]string {\r\n	start := -1\r\n	end := 0\r\n	this.items = str\r\n	if strings.Index(this.items, \"itemstring\") != -1 {\r\n		start = strings.Index(this.items, \"itemstring\") + 12\r\n		this.items = this.items[start:]\r\n		end = strings.Index(this.items, \",\")\r\n		this.m[this.i] = this.items[0:end]\r\n		this.items = this.items[end+1:]\r\n		this.i++\r\n		this.Getitems(this.items)\r\n	}\r\n	return this.m\r\n}\r\n','',1),
(110,3,'数据库导出成Excel或Excel导入数据库类','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"strconv\"\r\n	\"strings\"\r\n\r\n	\"github.com/xuri/excelize/v2\"\r\n)\r\n\r\ntype MyExcel struct {\r\n	f *excelize.File\r\n}\r\n\r\n// pages 文件里生成几页 默认1 生成两页写2\r\nfunc (this *MyExcel) WriteBegin(pages int) *MyExcel {\r\n	f := excelize.NewFile()\r\n	this.f = f\r\n	if pages > 1 {\r\n		//创建工作表\r\n		for i := 2; i <= pages; i++ {\r\n			f.NewSheet(\"Sheet\" + strconv.Itoa(i))\r\n		}\r\n	}\r\n	return this\r\n}\r\n\r\n/*\r\ncurrent当前执行插入页 不能超过总页数\r\ntableK插入到表格的哪行哪列\r\ntableV插入的值\r\n*/\r\nfunc (this *MyExcel) WriteExcel(current int, tableK string, tableV string) *MyExcel {\r\n	this.f.SetCellValue(\"Sheet\"+strconv.Itoa(current), tableK, tableV)\r\n	return this\r\n}\r\n\r\n// Save 生成Excel文件名(路径)\r\nfunc (this *MyExcel) Save(filaname string) error {\r\n	//设置打开后默认 页\r\n	//f.SetActiveSheet(index)\r\n	err := this.f.SaveAs(filaname)\r\n	if err != nil {\r\n		return err\r\n	}\r\n	return nil\r\n}\r\n\r\n// filename 文件名  readCount代表要读取Excel第几页（如果多页的话）\r\nfunc (this *MyExcel) ReadExcel(filename string, readCount int) ([][]string, error) {\r\n	f, err := excelize.OpenFile(filename)\r\n\r\n	if err != nil {\r\n		fmt.Println(err)\r\n	}\r\n	if readCount > 0 {\r\n		readCount--\r\n	} else {\r\n		readCount = 0\r\n	}\r\n	//f.GetSheetName(0)里面的012分别代表是123页\r\n	firstSheet := f.GetSheetName(readCount)\r\n	defer f.Close()\r\n	rows, err1 := f.GetRows(firstSheet)\r\n	return rows, err1\r\n}\r\n\r\n// strArr  := []string{\"name\", \"phone\", \"address\", \"quantity\"} Map字段   再通过map[int]map[string]interface{} 遍历插入数据库\r\nfunc (this *MyExcel) ExcelToMaps(filename string, readCount int, strArr []string) map[int]map[string]interface{} {\r\n	rows1, _ := this.ReadExcel(filename, 13)\r\n	mm := make(map[int]map[string]interface{})\r\n	mmi := 0\r\n	for _, v := range rows1 {\r\n		i := 0\r\n		m := make(map[string]interface{})\r\n		for _, v2 := range v {\r\n			strS := strings.Split(v2, \" \")\r\n			switch i {\r\n			case 0:\r\n				m[strArr[i]] = strS[0]\r\n			case 1:\r\n				m[strArr[i]] = strS[0]\r\n			case 2:\r\n				m[strArr[i]] = strS[0]\r\n			case 3:\r\n				m[strArr[i]] = strS[0]\r\n			}\r\n			i++\r\n		}\r\n		mm[mmi] = m\r\n		mmi++\r\n	}\r\n	return mm\r\n}\r\n\r\n/*  //数据库导出Excel\r\ne := MyExcel{}\r\nvar name, phone, address string\r\nvar quantity, cid int\r\ni := 1\r\nthisI := 1\r\nDb := NewGdo(\"xyz\")\r\nDb.Sql(\"SELECT count(id) FROM CommerceCustomer WHERE user=?\", \"webserver\").Fetch(&cid)\r\npage := cid / 40\r\nif cid > (page * 40) {\r\n	page++\r\n}\r\nfmt.Println(cid)\r\nfmt.Println(page)\r\ne.WriteBegin(page)\r\nrows, _ := Db.Sql(\"SELECT name,phone,address,quantity FROM CommerceCustomer WHERE user=?\", \"webserver\").FetchAll()\r\n\r\ndefer rows.Close()\r\nfor rows.Next() {\r\n	rows.Scan(&name, &phone, &address, &quantity)\r\n	e.WriteExcel(thisI, \"A\"+strconv.Itoa(i), name)\r\n	e.WriteExcel(thisI, \"B\"+strconv.Itoa(i), phone)\r\n	e.WriteExcel(thisI, \"C\"+strconv.Itoa(i), address)\r\n	e.WriteExcel(thisI, \"D\"+strconv.Itoa(i), strconv.Itoa(quantity))\r\n	//就翻页插入\r\n	if i == 40 {\r\n		//翻页第几页\r\n		thisI++\r\n		i = 0\r\n	}\r\n	i++\r\n}\r\ne.Save(\"xyz.xlsx\")\r\n*/\r\n','',1),
(111,3,'gorilla/websocket 客户端主动关闭连接','this.conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(4001, \"close\"), time.Now().Add(time.Second))','',1),
(112,3,'网络传输原理','网卡MAC   链路层 \r\nip        网络层\r\n端口      传输层\r\n程序      应用层','',1),
(113,3,'golang获取MAC地址','func GetMac() string {\r\n	netInterfaces, err := net.Interfaces()\r\n	if err != nil {\r\n		return \"\"\r\n	}\r\n	for _, i2 := range netInterfaces {\r\n		//fmt.Println(i2.Name)\r\n		mac := i2.HardwareAddr\r\n		//fmt.Println(mac)\r\n		return mac.String()\r\n	}\r\n	return \"\"\r\n}','',1),
(114,3,'交叉编译','不支持 cgo交叉编译 sqlite数据库\r\narm64 ->  amd64\r\nexport CGO_ENABLED=0 GOOS=linux GOARCH=amd64\r\n//CGO_ENABLED=0 代表禁用CGO\r\ngo build main.go\r\n//重启系统 GOARCH 会自动变为arm64    CGO_ENABLED=1\r\ngo env  //查看是否已经更改\r\n\r\nwindows arm64 -> linux arm64\r\nset GOOS=linux\r\nset CGO_ENABLED=0\r\ngo build main.go','',1),
(115,3,'gin 微服务或mvc','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"goweb/models\"\r\n	\"goweb/routers\"\r\n	\"html/template\"\r\n	\"net/http\"\r\n\r\n	\"github.com/gin-contrib/sessions\"\r\n	\"github.com/gin-contrib/sessions/cookie\"\r\n	\"github.com/gin-gonic/gin\"\r\n	\"github.com/unrolled/secure\"\r\n)\r\n\r\nfunc main() {\r\n	yaml := models.YmlRead{}\r\n	yml, _ := yaml.Read(\"conf/app.yml\")\r\n	myttps := fmt.Sprintf(\"%v\", yml[\"HttpS\"])\r\n	if myttps == \"\" {\r\n		myttps = \"false\"\r\n	}\r\n\r\n	gin.SetMode(gin.ReleaseMode)\r\n	//r := gin.Default()\r\n	r := gin.New()\r\n	r.SetFuncMap(template.FuncMap{\r\n		\"strhtml\": func(s string) template.HTML {\r\n			return template.HTML(s)\r\n		},\r\n		\"substr\": func(s string, start int, end int) string {\r\n			return s[start:end]\r\n		},\r\n	})\r\n	//静态目录 css js\r\n	r.Static(\"static\", \"static\")\r\n	//前端多级目录views/admin/xxx.html\r\n	r.LoadHTMLGlob(\"views/**/**/*\")\r\n	//文件服务器\r\n	r.StaticFS(\"tool\", http.Dir(\"tool\"))\r\n	// 创建基于cookie的存储引擎，secret11111 参数是用于加密的密钥\r\n	Store := cookie.NewStore([]byte(\"360xyz\"))\r\n	// 设置session中间件，参数mysession，指的是session的名字，也是cookie的名字\r\n	// store是前面创建的存储引擎，我们可以替换成其他存储引擎\r\n	//session过期时间30分\r\n	Store.Options(sessions.Options{\r\n		MaxAge: 1800,\r\n		Path:   \"/\",\r\n	})\r\n\r\n	r.Use(sessions.Sessions(\"mysession\", Store))\r\n	//调用路由\r\n	routers.GinRouterInit(r)\r\n\r\n	if myttps == \"true\" {\r\n		https := gin.New()\r\n		https.SetFuncMap(template.FuncMap{\r\n			\"strhtml\": func(s string) template.HTML {\r\n				return template.HTML(s)\r\n			},\r\n			\"substr\": func(s string, start int, end int) string {\r\n				return s[start:end]\r\n			},\r\n		})\r\n		https.Static(\"static\", \"static\")\r\n		https.LoadHTMLGlob(\"views/**/**/*\")\r\n		https.Use(sessions.Sessions(\"mysession\", Store))\r\n		routers.GinRouterInit(https)\r\n		https.Use(func(ctx *gin.Context) {\r\n			secureMiddleware := secure.New(secure.Options{\r\n				SSLRedirect: true,\r\n				SSLHost:     \"localhost:443\",\r\n			})\r\n			err := secureMiddleware.Process(ctx.Writer, ctx.Request)\r\n			if err != nil {\r\n				return\r\n			}\r\n			ctx.Next()\r\n		})\r\n		go func() {\r\n			err7 := http.ListenAndServeTLS(\":\"+fmt.Sprintf(\"%v\", yml[\"HttpsPort\"]), fmt.Sprintf(\"%v\", yml[\"certFile\"]), fmt.Sprintf(\"%v\", yml[\"keyFile\"]), https)\r\n			if err7 != nil {\r\n				fmt.Println(\"httpsError\")\r\n			}\r\n		}()\r\n	}\r\n	//不指定端口，默认8080\r\n	r.Run(\":80\")\r\n\r\n}\r\n','',1),
(116,3,'验证码','package models\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"net/http\"\r\n	\"time\"\r\n\r\n	\"github.com/dchest/captcha\"\r\n	\"github.com/gin-contrib/sessions\"\r\n	\"github.com/gin-gonic/gin\"\r\n)\r\n\r\ntype CaptchaXyz struct {\r\n}\r\n\r\nfunc (this *CaptchaXyz) Captcha(ctx *gin.Context, length ...int) {\r\n	l := captcha.DefaultLen\r\n	w, h := 107, 36\r\n	if len(length) == 1 {\r\n		l = length[0]\r\n	}\r\n	if len(length) == 2 {\r\n		w = length[1]\r\n	}\r\n	if len(length) == 3 {\r\n		h = length[2]\r\n	}\r\n	captchaId := captcha.NewLen(l)\r\n	session := sessions.Default(ctx)\r\n	session.Set(\"captcha\", captchaId)\r\n	_ = session.Save()\r\n	_ = this.Serve(ctx.Writer, ctx.Request, captchaId, \".png\", \"zh\", false, w, h)\r\n}\r\nfunc (this *CaptchaXyz) CaptchaVerify(c *gin.Context, code string) bool {\r\n	session := sessions.Default(c)\r\n	if captchaId := session.Get(\"captcha\"); captchaId != nil {\r\n		session.Delete(\"captcha\")\r\n		_ = session.Save()\r\n		if captcha.VerifyString(captchaId.(string), code) {\r\n			return true\r\n		} else {\r\n			return false\r\n		}\r\n	} else {\r\n		return false\r\n	}\r\n}\r\nfunc (this *CaptchaXyz) Serve(w http.ResponseWriter, r *http.Request, id, ext, lang string, download bool, width, height int) error {\r\n	w.Header().Set(\"Cache-Control\", \"no-cache, no-store, must-revalidate\")\r\n	w.Header().Set(\"Pragma\", \"no-cache\")\r\n	w.Header().Set(\"Expires\", \"0\")\r\n\r\n	var content bytes.Buffer\r\n	switch ext {\r\n	case \".png\":\r\n		w.Header().Set(\"Content-Type\", \"image/png\")\r\n		_ = captcha.WriteImage(&content, id, width, height)\r\n	case \".wav\":\r\n		w.Header().Set(\"Content-Type\", \"audio/x-wav\")\r\n		_ = captcha.WriteAudio(&content, id, lang)\r\n	default:\r\n		return captcha.ErrNotFound\r\n	}\r\n\r\n	if download {\r\n		w.Header().Set(\"Content-Type\", \"application/octet-stream\")\r\n	}\r\n	http.ServeContent(w, r, id+ext, time.Time{}, bytes.NewReader(content.Bytes()))\r\n	return nil\r\n}\r\nif !Cpt.CaptchaVerify(ctx, ctx.PostForm(\"captcha\")) {\r\n			ctx.Writer.Write([]byte(\"<script>alert(\'验证码错误\');location.href=\'../account/login\'</script>\"))\r\n		}','',1),
(117,3,'Beego  Gin 区别','Beego                             Gin区别\r\n----------------------------------------------------Context 区别---------------------------------------------\r\nContext集成在控制器controller类里        方法里转入 func xxx(ctx *gin.Context)\r\n\r\n-----------------------------------------------get请求-----------------------------------------------------------\r\nthis.Ctx.Input.Query(\"key\")                                  ctx.Query(\"key\")\r\n\r\n-----------------------------------------------post请求------------------------------------------------------------\r\nthis.Ctx.Request.PostFormValue(\"key\")              ctx.Request.PostFormValue(\"key\")\r\n\r\n------------------------------------------网页返回字符串-------------------------------------------------------\r\nthis.Ctx.WriteString(\"返回的字符串\")                 ctx.String(200,\"返回的字符串\")\r\n\r\n------------------------------------------网页弹出提示框-------------------------------------------------------\r\nthis.Ctx.Output.ContentType(\"text/html;chart=utf8\")\r\nthis.Ctx.Output.Body([]byte(\"<script>alert(\'不能重复登录\');location.href=\'../\'</script>\"))\r\n\r\nctx.Writer.Write([]byte(\"<script>alert(\'不能重复登录\');location.href=\'../\'</script>\"))\r\n-----------------------------------------------Cookie操作-------------------------------------------------------\r\nthis.Ctx.SetCookie(\"key\", \"value\", time.Now().Unix()+3600)    ctx.SetCookie(\"key\",\"value\",int(time.Now().Unix()),\"/\",ctx.Request.Host,false,true)\r\n\r\nthis.Ctx.GetCookie(\"key\")                           cookie, err := ctx.Cookie(\"key\")\r\n\r\n---------------------------------------------Session操作----------------------------------------------------------\r\n                              		//传Context获取session := sessions.Default(ctx)\r\nthis.SetSession(\"key\")                                  session.Set(\"key\", value)\r\n//必须执行保存操作session.Save()\r\n\r\nthis.GetSession(\"key\")                                      session.Get(\"key\")                 \r\n----------------------------------------------------前端加载------------------------------------------------------\r\nthis.Data[“key”]=value\r\nthis.TplName = \"test/index.html\"             ctx.HTML(200, \"test/index.html\", data)\r\n--------------------------------------获取前端提交的图片---------------------------------------------------\r\nc.Ctx.Request.FormFile(\"imageKey\")               ctx.Request.FormFile(\"imageKey\")\r\n\r\n\r\n\r\n','',1),
(118,3,'Beego VS  Gin','Beego                                           Gin区别\r\n\r\nContext 区别\r\nContext集成在控制器controller类里        方法里转入 func xxx(ctx *gin.Context)\r\n\r\n\r\nget请求\r\nthis.Ctx.Input.Query(\"key\")                                  ctx.Query(\"key\")\r\n\r\n\r\npost请求\r\nthis.Ctx.Request.PostFormValue(\"key\")              ctx.Request.PostFormValue(\"key\")\r\n\r\n\r\n网页返回字符串-\r\nthis.Ctx.WriteString(\"返回的字符串\")                 ctx.String(200,\"返回的字符串\")\r\n\r\n\r\n网页弹出提示框-\r\nthis.Ctx.Output.ContentType(\"text/html;chart=utf8\")\r\nthis.Ctx.Output.Body([]byte(\"<script>alert(\'不能重复登录\');location.href=\'../\'</script>\"))\r\n\r\nctx.Writer.Write([]byte(\"<script>alert(\'不能重复登录\');location.href=\'../\'</script>\"))\r\n\r\n\r\n-Cookie操作-\r\nthis.Ctx.SetCookie(\"key\", \"value\", time.Now().Unix()+3600)    ctx.SetCookie(\"key\",\"value\",int(time.Now().Unix()),\"/\",ctx.Request.Host,false,true)\r\n\r\nthis.Ctx.GetCookie(\"key\")                           cookie, err := ctx.Cookie(\"key\")\r\n\r\n\r\nSession操作\r\n                              		//传Context获取session := sessions.Default(ctx)\r\nthis.SetSession(\"key\")                                  session.Set(\"key\", value)\r\n//必须执行保存操作session.Save()\r\nthis.GetSession(\"key\")                                      session.Get(\"key\")   \r\n\r\n              \r\n前端加载-\r\nthis.Data[“key”]=value\r\nthis.TplName = \"test/index.html\"             ctx.HTML(200, \"test/index.html\", data)\r\n\r\n\r\n获取前端提交的图片-\r\nc.Ctx.Request.FormFile(\"imageKey\")               ctx.Request.FormFile(\"imageKey\")\r\n\r\n\r\n\r\n','',1),
(119,3,'interface 转 string','fmt.Sprintf(\"%v\", interface)','',1),
(120,3,'RESTful 风格','GET    //获取\r\nPOST  //创建\r\nPUT    //更改\r\nDELETE //删除','',1),
(121,3,'文件读写类 ','package models\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"io\"\r\n	\"os\"\r\n)\r\n\r\n// 文件读写\r\ntype FileWR struct {\r\n}\r\n\r\n// 只读\r\nfunc (this *FileWR) Open(path string) string {\r\n	file, err := os.Open(path)\r\n	defer file.Close()\r\n	if err != nil {\r\n		fmt.Println(err)\r\n		return \"\"\r\n	}\r\n	result := []byte{}\r\n	for {\r\n		mm := make([]byte, 1024)\r\n		_, errR := file.Read(mm)\r\n		if errR != nil && errR == io.EOF {\r\n			fmt.Println(\"读取完毕\")\r\n			break\r\n		}\r\n		result = append(result, mm...)\r\n	}\r\n	return string(result)\r\n}\r\n\r\n// 清空重新写入\r\nfunc (this *FileWR) Put(path string, str string) bool {\r\n	file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0666)\r\n	defer file.Close()\r\n	if err != nil {\r\n		fmt.Println(err)\r\n		return false\r\n	}\r\n	file.WriteString(str)\r\n	return true\r\n}\r\n','',1),
(122,3,'Windows PowerShell进行ssh服务器连接','root@xxx.xxx.xxx.x\r\nyes\r\npassword','',1),
(123,3,'停车收费系统','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"strconv\"\r\n	\"time\"\r\n	\"tyieih/models\"\r\n\r\n	\"github.com/gin-gonic/gin\"\r\n)\r\n\r\nvar Db = models.Gdo{}\r\n\r\nfunc init() {\r\n	Db = *models.NewGdo()\r\n}\r\n\r\ntype VehicleSql struct {\r\n	id      int\r\n	name    string\r\n	indate  string\r\n	outdate string\r\n	day     int\r\n	monthly string\r\n}\r\n\r\n/*\r\n车牌号     ->ocr 自动拍照识别 并存到数据库   	string\r\n进场时间   ->记录时间 并存到数据库 		date\r\n出场时间    ->\r\n\r\n	10分钟内免费   ->出场时对比时间戳 少于600秒免费\r\n	3小时内 5元     ->  大于600秒 小于10800秒\r\n	3-10小时 10元   -> 大于10800秒 小于 36000秒\r\n	10-23小时15元  -> 大于36000秒 小于82800秒\r\n	0-7点过夜5元   ->如果0点前进场并且小于3小时 5元 +5元 =10元\r\n	月票400月          直接记录充值时间 +30天的到期时间date    -> 字段 monthly  string\r\n	包月到期时 如果车子还在停车场则按非包月进行计费\r\n\r\n白天和夜晚累计计费以电脑计时为准，24小时全天封顶收费20元\r\n\r\nCREATE TABLE `vehicle` (\r\n\r\n	`id` int(11) NOT NULL AUTO_INCREMENT,\r\n	`name` varchar(30) NOT NULL DEFAULT \'\',\r\n	`indate` datetime NOT NULL DEFAULT \'1000-01-01 00:00:00\',\r\n	`outdate` datetime NOT NULL DEFAULT \'1000-01-01 00:00:00\',\r\n	 `monthly` datetime DEFAULT \'1000-01-01 00:00:00\',\r\n	PRIMARY KEY (`id`)\r\n\r\n) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;\r\n*/\r\nfunc main() {\r\n	r := gin.Default()\r\n	//车辆进场\r\n	r.POST(\"in\", func(ctx *gin.Context) {\r\n		//1.ocr提取车辆车牌号\r\n		numberStr := \"\"\r\n		//进场 记录车牌号 进场时间\r\n		inDate := time.Now().Format(\"2006-01-02 15:04-05\")\r\n		i64 := Db.Sql(\"INSERT INTO vehicle (name,indate) VALUES (?,?)\", numberStr, inDate).Insert()\r\n		if i64 > 0 {\r\n			ctx.String(200, \"true\")\r\n		} else {\r\n			ctx.String(200, \"false\")\r\n		}\r\n\r\n	})\r\n	//车辆出场\r\n	r.POST(\"out\", func(ctx *gin.Context) {\r\n		//1.ocr提取车辆车牌号\r\n		u := VehicleSql{}\r\n		bl := Db.Sql(\"SELECT * FROM vehicle WHERE name=?\").Row(&u.id, &u.name, &u.indate, &u.outdate, &u.day, &u.monthly)\r\n		if !bl {\r\n			ctx.String(200, \"车辆查询失败,请重新识别\")\r\n			return\r\n		}\r\n		loc, _ := time.LoadLocation(\"Asia/Shanghai\")\r\n		tt, _ := time.ParseInLocation(\"2006-01-02 15:04:05\", u.indate, loc) //2006-01-02 15:04:05是转换的格式如php的\"Y-m-d H:i:s\"\r\n		inTime := tt.Unix()\r\n		tt1, _ := time.ParseInLocation(\"2006-01-02 15:04:05\", u.outdate, loc) //2006-01-02 15:04:05是转换的格式如php的\"Y-m-d H:i:s\"\r\n		outTime := tt1.Unix()\r\n		//停车秒数\r\n		result := outTime - inTime\r\n		if result < 600 {\r\n			ctx.String(200, \"车辆10分钟内免费\")\r\n			return\r\n		}\r\n		//包月用户\r\n		if u.monthly > time.Now().Format(\"2006-01-02 15:04:05\") {\r\n			ctx.String(200, \"车辆为包月客户,免费\")\r\n			return\r\n		}\r\n		h := int64(360)\r\n		reH := result / h\r\n		//夜里0-7点进场,出场 ,并且停车时间不大于7个小时,否则以白天和夜晚累计计费以电脑计时为准\r\n		dateH, _ := strconv.Atoi(u.outdate[5:7])\r\n		if dateH < 8 && reH <= 7 {\r\n			ctx.String(200, \"夜里0-7点停车,收费5元\")\r\n			return\r\n		}\r\n\r\n		day, h, f := Calculate(result)\r\n		//停车一天内\r\n		if day == 0 {\r\n			//3-10小时 10元\r\n			if h < 3 {\r\n				ctx.String(200, \"停车\"+fmt.Sprintf(\"%d\", reH)+\"小时\"+fmt.Sprintf(\"%d\", f)+\"分,收费5元\")\r\n				return\r\n			}\r\n			//3-10小时 10元\r\n			if h < 10 {\r\n				ctx.String(200, \"停车\"+fmt.Sprintf(\"%d\", reH)+\"小时\"+fmt.Sprintf(\"%d\", f)+\"分,收费10元\")\r\n				return\r\n			}\r\n			//10-23小时15元\r\n			if h < 24 {\r\n				ctx.String(200, \"停车\"+fmt.Sprintf(\"%d\", reH)+\"小时\"+fmt.Sprintf(\"%d\", f)+\"分,收费15元\")\r\n				return\r\n			}\r\n			return\r\n		}\r\n		dayMoney := day * 10\r\n		hMoney := int64(0)\r\n		showStr := \"\"\r\n		//3-10小时 10元\r\n		if h < 3 {\r\n			hMoney = 5\r\n			showStr = fmt.Sprintf(\"%d\", h) + \"小时\" + fmt.Sprintf(\"%d\", f) + \"分,收费\"\r\n		}\r\n		//3-10小时 10元\r\n		if h < 10 {\r\n			hMoney = 10\r\n			showStr = fmt.Sprintf(\"%d\", h) + \"小时\" + fmt.Sprintf(\"%d\", f) + \"分,收费\"\r\n		}\r\n		//10-23小时15元\r\n		if h < 24 {\r\n			hMoney = 15\r\n			showStr = fmt.Sprintf(\"%d\", h) + \"小时\" + fmt.Sprintf(\"%d\", f) + \"分,收费\"\r\n		}\r\n		Money := dayMoney + hMoney\r\n		showStr = \"停车 \" + fmt.Sprintf(\"%d\", day) + \" 天\" + showStr + \" \" + fmt.Sprintf(\"%d\", Money) + \" 元\"\r\n		ctx.String(200, showStr)\r\n	})\r\n	//管理员登录 管理车辆\r\n	r.GET(\"vehicle\", func(ctx *gin.Context) {\r\n\r\n	})\r\n	r.Run(\":80\")\r\n}\r\n\r\n// 返回 天数 小时 分钟\r\nfunc Calculate(result int64) (int64, int64, int64) {\r\n	resulD := int64(0)\r\n	resulH := int64(0)\r\n	resulF := int64(0)\r\n	//一小时3600秒\r\n	h := int64(3600)\r\n	//停车总小时数\r\n	countH := result / h\r\n	//停车一天内\r\n	if countH < 24 {\r\n		miao := result - (countH * h)\r\n		if miao > 60 {\r\n			resulF = miao / 60\r\n			return 0, resulH, resulF\r\n		}\r\n		return 0, resulH, resulF\r\n	}\r\n	//停车天数\r\n	resulD = resulH / 24\r\n	//得到小时数\r\n	resulH = resulH - (resulD * 24)\r\n	//得到剩余秒数\r\n	mm := result - (countH * h)\r\n	if mm > 60 {\r\n		//得到剩余分钟\r\n		resulF = mm / 60\r\n		return resulD, resulH, resulF\r\n	} else {\r\n		//小于1分的剩余秒数 忽略\r\n		return resulD, resulH, resulF\r\n	}\r\n\r\n}\r\n','',1),
(124,3,'发送POST GET PostJson请求','package models\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"io/ioutil\"\r\n	\"net/http\"\r\n	\"strings\"\r\n)\r\n\r\ntype XyzRequest struct {\r\n}\r\n\r\n// Get请求 url里携带参数\r\nfunc (class *XyzRequest) GetSend(url string) (string, error) {\r\n	var err error\r\n	resp, err1 := http.Get(url)\r\n	if err1 != nil {\r\n		return \"\", err\r\n	}\r\n	defer resp.Body.Close()\r\n	body, err2 := ioutil.ReadAll(resp.Body)\r\n	if err2 != nil {\r\n		return \"\", err\r\n	}\r\n	return string(body), nil\r\n\r\n}\r\n\r\n// post地址 请求参数，string格式\r\nfunc (class *XyzRequest) PostSend(url string, KVstring string) (string, error) {\r\n	var err error\r\n	resp, err1 := http.Post(url, \"application/x-www-form-urlencoded\", strings.NewReader(KVstring))\r\n	if err1 != nil {\r\n		return \"\", err\r\n	}\r\n	defer resp.Body.Close()\r\n	body, err2 := ioutil.ReadAll(resp.Body)\r\n	if err2 != nil {\r\n		return \"\", err\r\n	}\r\n	return string(body), nil\r\n}\r\n\r\n// post地址 请求参数，json格式 返回json\r\nfunc (class *XyzRequest) PostJson(url string, strJson string) (string, error) {\r\n	var err error\r\n	req, _ := http.NewRequest(\"POST\", url, bytes.NewBuffer([]byte(strJson)))\r\n	req.Header.Set(\"Content-Type\", \"application/json; charset=UTF-8\")\r\n	client := &http.Client{}\r\n	resp, err2 := client.Do(req)\r\n	if err2 != nil {\r\n		return \"\", err\r\n	}\r\n	defer resp.Body.Close()\r\n	// fmt.Println(\"status\", resp.Status)\r\n	// fmt.Println(\"headers\", resp.Header)\r\n	body, err3 := ioutil.ReadAll(resp.Body)\r\n	if err3 != nil {\r\n		return \"\", err\r\n	}\r\n	return string(body), nil\r\n}\r\n','',1),
(125,3,'golang 讲解1','// 代表 main 包里\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\n//程序入口\r\nfunc main() {\r\n	/*Abc 功能 传入两个参数 2 3\r\n	Abc功能里面进行的是 两个参数相加\r\n	返回值 赋予 result变量\r\n	:=代表result变量类型随Abc返回类型一样\r\n	也可以写成\r\n	var result=Abc(2, 3) 意思一样的\r\n	*/\r\n	result := Abc(2, 3)\r\n	//fmt.Println 代表在控制台打印输出 值\r\n	fmt.Println(result)\r\n}\r\n\r\n/*\r\n定义一个功能 func 英文就是 功能 的意思\r\nAbc 就是功能名\r\n首字母大写 代表 别的地方引用这个包就可以调用该 Abc功能 (像 java public)\r\n首字母小写 代表 不支持外部调用,只能本文件包里调用 (像 java private)\r\n小括号里 参数可以根据需要定义需要个数\r\n小括号后面 int64 代表最后返回 什么类型\r\n*/\r\nfunc Abc(a int64, b int64) int64 {\r\n	return a + b\r\n}\r\n','',1),
(126,3,'在Ubuntu Linux实现图片识别','1、安装tesseract ocr包\r\nsudo apt install tesseract-ocr\r\nsudo apt install libtesseract-dev\r\nsudo apt install tesseract-ocr-chi-sim\r\n\r\n2、安装完成后使用以下命令查看语言安装包\r\ntesseract --list-langs\r\n\r\n\r\n//测试\r\ntesseract 234.png output.txt -l chi_sim\r\n','',1),
(127,3,'go 操作Redis数据库','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n\r\n	\"github.com/go-redis/redis\"\r\n)\r\n\r\nfunc main() {\r\n	rdb := redis.NewClient(&redis.Options{\r\n		Addr:     \"192.168.100.254:6379\", //地址  端口\r\n		Password: \"qq282246101\",          //密码\r\n		DB:       0,                      //连接哪个redis reids有16个数据库\r\n		PoolSize: 10,                     //连接池大小\r\n	})\r\n	//检测连接是否成功 成功返回 pong\r\n	_, err := rdb.Ping().Result()\r\n	if err != nil {\r\n		fmt.Println(\"Ping出错\")\r\n		return\r\n	}\r\n	//插入数据是否成功，成功返回ok 第三个参数表示过期时间 0表示 永不过期\r\n	// _, err1 := rdb.Set(\"name\", \"webserver\", 0).Result()\r\n	// if err1 != nil {\r\n	// 	fmt.Println(\"设置数据失败:\", err1)\r\n	// 	return\r\n	// }\r\n	res, err2 := rdb.Get(\"name\").Result()\r\n	if err2 != nil {\r\n		fmt.Println(\"获取数据失败:\", err2)\r\n		return\r\n	}\r\n	fmt.Println(res)\r\n	//3 SetNX:key不存在时才设置（新增操作）\r\n	//rdb.SetNX(\"name\", 19, 0) // name存在，不会修改\r\n\r\n	//4 SetXX:key存在时才设置（修改操作）\r\n	//rdb.SetXX(\"name\", \"pyy\", 0)\r\n\r\n	// 5 Incr\r\n	rdb.Incr(\"age\")\r\n\r\n	// 6 strlen\r\n	l, _ := rdb.StrLen(\"name\").Result()\r\n	fmt.Println(l)\r\n\r\n}\r\n','',1),
(128,3,'golang 讲解2 循环','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n)\r\n\r\nfunc main() {\r\n	ii := 10\r\n	//ii=10 循环10次\r\n	for i := 0; i < ii; i++ {\r\n		if i == 5 {\r\n			//跳过 i值为5 本次循环 后面 6 7 8 9继续\r\n			continue\r\n		}\r\n		fmt.Println(i)\r\n		//输出 0 1 2 3 4 6 7 8 9\r\n	}\r\n	//ii=10 循环10次\r\n	for i := 0; i < ii; i++ {\r\n		if i == 5 {\r\n			//跳出 for循环体 后面不继续\r\n			break\r\n		}\r\n		fmt.Println(i)\r\n		//输出 0 1 2 3 4\r\n	}\r\n	//永远循环 只要不break\r\n	for {\r\n		//永远循环\r\n	}\r\n}\r\n','',1),
(129,3,'新旧日历润星期日月天','package models\r\n\r\nimport (\r\n	\"errors\"\r\n	\"fmt\"\r\n	\"strconv\"\r\n	\"strings\"\r\n	\"time\"\r\n)\r\n\r\ntype Lunar struct {\r\n	MIN_YEAR             int\r\n	MAX_YEAR             int\r\n	DATELAYOUT           string\r\n	STARTDATESTR         string\r\n	CHINESENUMBER        []string\r\n	CHINESENUMBERSPECIAL []string\r\n	MONTHNUMBER          map[string]int\r\n	LUNAR_INFO           []int\r\n}\r\n\r\nfunc (class *Lunar) Init() {\r\n	class.MIN_YEAR = 1900\r\n	class.MAX_YEAR = 2049\r\n\r\n	class.DATELAYOUT = \"2006-01-02\"\r\n	class.STARTDATESTR = \"1900-01-30\"\r\n\r\n	class.CHINESENUMBER = []string{\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\", \"十一\", \"十二\"}\r\n	class.CHINESENUMBERSPECIAL = []string{\"正\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\", \"十一\", \"腊\"}\r\n	class.MONTHNUMBER = map[string]int{\"January\": 1, \"February\": 2, \"March\": 3, \"April\": 4, \"May\": 5, \"June\": 6, \"July\": 7, \"August\": 8, \"September\": 9, \"October\": 10, \"November\": 11, \"December\": 12}\r\n	class.LUNAR_INFO = []int{\r\n		0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,\r\n		0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,\r\n		0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,\r\n		0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,\r\n		0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,\r\n		0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,\r\n		0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,\r\n		0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,\r\n		0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,\r\n		0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,\r\n		0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,\r\n		0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,\r\n		0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,\r\n		0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,\r\n		0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0}\r\n}\r\n\r\n// 旧历转新历leapMonthFlag =false\r\nfunc (class *Lunar) LunarToSolar(date string, leapMonthFlag bool) string {\r\n	date, offset := class.dealWithSpecialFebruaryDate(date)\r\n	loc, _ := time.LoadLocation(\"Local\")\r\n	lunarTime, err := time.ParseInLocation(class.DATELAYOUT, date, loc)\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n	}\r\n	lunarYear := lunarTime.Year()\r\n	lunarMonth := class.MONTHNUMBER[lunarTime.Month().String()]\r\n	lunarDay := lunarTime.Day()\r\n	err = class.checkLunarDate(lunarYear, lunarMonth, lunarDay, leapMonthFlag)\r\n\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n		return \"\"\r\n	}\r\n\r\n	for i := class.MIN_YEAR; i < lunarYear; i++ {\r\n		yearDaysCount := class.getYearDays(i) // 求阴历某年天数\r\n		offset += yearDaysCount\r\n	}\r\n	//计算该年闰几月\r\n	leapMonth := class.getLeapMonth(lunarYear)\r\n	if leapMonthFlag && leapMonth != lunarMonth {\r\n		panic(\"您输入的闰月标志有误！\")\r\n	}\r\n	if leapMonth == 0 || (lunarMonth < leapMonth) || (lunarMonth == leapMonth && !leapMonthFlag) {\r\n		for i := 1; i < lunarMonth; i++ {\r\n			tempMonthDaysCount := class.getMonthDays(lunarYear, uint(i))\r\n			offset += tempMonthDaysCount\r\n		}\r\n\r\n		// 检查日期是否大于最大天\r\n		if lunarDay > class.getMonthDays(lunarYear, uint(lunarMonth)) {\r\n			panic(\"不合法的农历日期！\")\r\n		}\r\n		offset += lunarDay // 加上当月的天数\r\n	} else { //当年有闰月，且月份晚于或等于闰月\r\n		for i := 1; i < lunarMonth; i++ {\r\n			tempMonthDaysCount := class.getMonthDays(lunarYear, uint(i))\r\n			offset += tempMonthDaysCount\r\n		}\r\n		if lunarMonth > leapMonth {\r\n			temp := class.getLeapMonthDays(lunarYear) // 计算闰月天数\r\n			offset += temp                            // 加上闰月天数\r\n\r\n			if lunarDay > class.getMonthDays(lunarYear, uint(lunarMonth)) {\r\n				panic(\"不合法的农历日期！\")\r\n			}\r\n			offset += lunarDay\r\n		} else { // 如果需要计算的是闰月，则应首先加上与闰月对应的普通月的天数\r\n			// 计算月为闰月\r\n			temp := class.getMonthDays(lunarYear, uint(lunarMonth)) // 计算非闰月天数\r\n			offset += temp\r\n\r\n			if lunarDay > class.getLeapMonthDays(lunarYear) {\r\n				panic(\"不合法的农历日期！\")\r\n			}\r\n			offset += lunarDay\r\n		}\r\n	}\r\n\r\n	myDate, err := time.ParseInLocation(class.DATELAYOUT, class.STARTDATESTR, loc)\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n	}\r\n\r\n	myDate = myDate.AddDate(0, 0, offset)\r\n	return myDate.Format(class.DATELAYOUT)\r\n}\r\n\r\nfunc (class *Lunar) dealWithSpecialFebruaryDate(date string) (string, int) {\r\n	items := strings.Split(date, \"-\")\r\n	year, _ := strconv.Atoi(items[0])\r\n	if items[1] == \"02\" {\r\n		if (year/4 == 0 && year/100 != 0) || (year/400 == 0) {\r\n			if items[2] == \"30\" {\r\n				return items[0] + \"-\" + items[1] + \"-29\", 1\r\n			}\r\n		} else {\r\n			if items[2] == \"30\" {\r\n				return items[0] + \"-\" + items[1] + \"-28\", 2\r\n			}\r\n			if items[2] == \"29\" {\r\n				return items[0] + \"-\" + items[1] + \"-28\", 1\r\n			}\r\n		}\r\n	}\r\n	return date, 0\r\n}\r\n\r\nfunc (class *Lunar) SolarToChineseLuanr(date string) string {\r\n	lunarYear, lunarMonth, lunarDay, leapMonth, leapMonthFlag := class.calculateLunar(date)\r\n	result := class.cyclical(lunarYear) + \"年\"\r\n	if leapMonthFlag && (lunarMonth == leapMonth) {\r\n		result += \"闰\"\r\n	}\r\n	result += class.CHINESENUMBERSPECIAL[lunarMonth-1] + \"月\"\r\n	result += class.chineseDayString(lunarDay) + \"日\"\r\n	return result\r\n}\r\n\r\nfunc (class *Lunar) SolarToSimpleLuanr(date string) string {\r\n	lunarYear, lunarMonth, lunarDay, leapMonth, leapMonthFlag := class.calculateLunar(date)\r\n	result := strconv.Itoa(lunarYear) + \"-\"\r\n	if leapMonthFlag && (lunarMonth == leapMonth) {\r\n		result += \"闰\"\r\n	}\r\n	if lunarMonth < 10 {\r\n		result += \"0\" + strconv.Itoa(lunarMonth) + \"-\"\r\n	} else {\r\n		result += strconv.Itoa(lunarMonth) + \"-\"\r\n	}\r\n	if lunarDay < 10 {\r\n		result += \"0\" + strconv.Itoa(lunarDay) + \"\"\r\n	} else {\r\n		result += strconv.Itoa(lunarDay) + \"\"\r\n	}\r\n	return result\r\n}\r\n\r\nfunc (class *Lunar) SolarToLuanr(date string) (string, bool) {\r\n	lunarYear, lunarMonth, lunarDay, leapMonth, leapMonthFlag := class.calculateLunar(date)\r\n	result := strconv.Itoa(lunarYear) + \"-\"\r\n	if lunarMonth < 10 {\r\n		result += \"0\" + strconv.Itoa(lunarMonth) + \"-\"\r\n	} else {\r\n		result += strconv.Itoa(lunarMonth) + \"-\"\r\n	}\r\n	if lunarDay < 10 {\r\n		result += \"0\" + strconv.Itoa(lunarDay)\r\n	} else {\r\n		result += strconv.Itoa(lunarDay)\r\n	}\r\n\r\n	if leapMonthFlag && (lunarMonth == leapMonth) {\r\n		return result, true\r\n	} else {\r\n		return result, false\r\n	}\r\n}\r\n\r\nfunc (class *Lunar) calculateLunar(date string) (lunarYear, lunarMonth, lunarDay, leapMonth int, leapMonthFlag bool) {\r\n	loc, _ := time.LoadLocation(\"Local\")\r\n	i := 0\r\n	temp := 0\r\n	leapMonthFlag = false\r\n	isLeapYear := false\r\n\r\n	myDate, err := time.ParseInLocation(class.DATELAYOUT, date, loc)\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n	}\r\n	startDate, err := time.ParseInLocation(class.DATELAYOUT, class.STARTDATESTR, loc)\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n	}\r\n\r\n	offset := class.daysBwteen(myDate, startDate)\r\n	for i = class.MIN_YEAR; i < class.MAX_YEAR; i++ {\r\n		temp = class.getYearDays(i) //求当年农历年天数\r\n		if offset-temp < 1 {\r\n			break\r\n		} else {\r\n			offset -= temp\r\n		}\r\n	}\r\n	lunarYear = i\r\n\r\n	leapMonth = class.getLeapMonth(lunarYear) //计算该年闰哪个月\r\n\r\n	//设定当年是否有闰月\r\n	if leapMonth > 0 {\r\n		isLeapYear = true\r\n	} else {\r\n		isLeapYear = false\r\n	}\r\n\r\n	for i = 1; i <= 12; i++ {\r\n		if i == leapMonth+1 && isLeapYear {\r\n			temp = class.getLeapMonthDays(lunarYear)\r\n			isLeapYear = false\r\n			leapMonthFlag = true\r\n			i--\r\n		} else {\r\n			temp = class.getMonthDays(lunarYear, uint(i))\r\n		}\r\n		offset -= temp\r\n		if offset <= 0 {\r\n			break\r\n		}\r\n	}\r\n	offset += temp\r\n	lunarMonth = i\r\n	lunarDay = offset\r\n	return\r\n}\r\n\r\nfunc (class *Lunar) checkLunarDate(lunarYear, lunarMonth, lunarDay int, leapMonthFlag bool) error {\r\n	if (lunarYear < class.MIN_YEAR) || (lunarYear > class.MAX_YEAR) {\r\n		return errors.New(\"非法农历年份！\")\r\n	}\r\n	if (lunarMonth < 1) || (lunarMonth > 12) {\r\n		return errors.New(\"非法农历月份！\")\r\n	}\r\n	if (lunarDay < 1) || (lunarDay > 30) { // 中国的月最多30天\r\n		return errors.New(\"非法农历天数！\")\r\n	}\r\n\r\n	leap := class.getLeapMonth(lunarYear) // 计算该年应该闰哪个月\r\n	if (leapMonthFlag) && (lunarMonth != leap) {\r\n		return errors.New(\"非法闰月！\")\r\n	}\r\n	return nil\r\n}\r\n\r\n// 计算该月总天数\r\nfunc (class *Lunar) getMonthDays(lunarYeay int, month uint) int {\r\n	if (month > 31) || (month < 0) {\r\n		fmt.Println(\"error month\")\r\n	}\r\n	// 0X0FFFF[0000 {1111 1111 1111} 1111]中间12位代表12个月，1为大月，0为小月\r\n	bit := 1 << (16 - month)\r\n	if ((class.LUNAR_INFO[lunarYeay-1900] & 0x0FFFF) & bit) == 0 {\r\n		return 29\r\n	} else {\r\n		return 30\r\n	}\r\n}\r\n\r\n// 计算阴历年的总天数\r\nfunc (class *Lunar) getYearDays(year int) int {\r\n	sum := 29 * 12\r\n	for i := 0x8000; i >= 0x8; i >>= 1 {\r\n		if (class.LUNAR_INFO[year-1900] & 0xfff0 & i) != 0 {\r\n			sum++\r\n		}\r\n	}\r\n	return sum + class.getLeapMonthDays(year)\r\n}\r\n\r\n// 计算阴历年闰月多少天\r\nfunc (class *Lunar) getLeapMonthDays(year int) int {\r\n	if class.getLeapMonth(year) != 0 {\r\n		if (class.LUNAR_INFO[year-1900] & 0xf0000) == 0 {\r\n			return 29\r\n		} else {\r\n			return 30\r\n		}\r\n	} else {\r\n		return 0\r\n	}\r\n}\r\n\r\n// 计算阴历年闰哪个月 1-12 , 没闰传回 0\r\nfunc (class *Lunar) getLeapMonth(year int) int {\r\n	return (int)(class.LUNAR_INFO[year-1900] & 0xf)\r\n}\r\n\r\n// 计算差的天数\r\nfunc (class *Lunar) daysBwteen(myDate time.Time, startDate time.Time) int {\r\n	subValue := float64(myDate.Unix()-startDate.Unix())/86400.0 + 0.5\r\n	return int(subValue)\r\n}\r\n\r\nfunc (class *Lunar) cyclicalm(num int) string {\r\n	tianGan := []string{\"甲\", \"乙\", \"丙\", \"丁\", \"戊\", \"己\", \"庚\", \"辛\", \"壬\", \"癸\"}\r\n	diZhi := []string{\"子\", \"丑\", \"寅\", \"卯\", \"辰\", \"巳\", \"午\", \"未\", \"申\", \"酉\", \"戌\", \"亥\"}\r\n	animals := []string{\"鼠\", \"牛\", \"虎\", \"兔\", \"龙\", \"蛇\", \"马\", \"羊\", \"猴\", \"鸡\", \"狗\", \"猪\"}\r\n	return tianGan[num%10] + diZhi[num%12] + animals[num%12]\r\n}\r\n\r\nfunc (class *Lunar) cyclical(year int) string {\r\n	num := year - 1900 + 36\r\n	return class.cyclicalm(num)\r\n}\r\n\r\nfunc (class *Lunar) chineseDayString(day int) string {\r\n	chineseTen := []string{\"初\", \"十\", \"廿\", \"三\"}\r\n	n := 0\r\n	if day%10 == 0 {\r\n		n = 9\r\n	} else {\r\n		n = day%10 - 1\r\n	}\r\n	if day > 30 {\r\n		return \"\"\r\n	}\r\n	if day == 20 {\r\n		return \"二十\"\r\n	} else if day == 10 {\r\n		return \"初十\"\r\n	} else {\r\n		return chineseTen[day/10] + class.CHINESENUMBER[n]\r\n	}\r\n}\r\n\r\n// 获取当月最后一天的天数\r\nfunc (class *Lunar) LastDayOfMonth() int {\r\n	t := time.Time{}\r\n	firstDay := time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.UTC)\r\n	lastDay := firstDay.AddDate(0, 1, 0).Add(-time.Nanosecond)\r\n	return lastDay.Day()\r\n}\r\n\r\n// 获取指定日期对应的时间 xxxx-xx-xx 格式不对返回0\r\nfunc (class *Lunar) GetWeek(dateYMD string) int {\r\n	if len(dateYMD) != 10 {\r\n		return 0\r\n	}\r\n	t, _ := time.Parse(\"2006-01-02\", dateYMD)\r\n	s := t.Weekday().String()\r\n	weekI := 0\r\n	switch s {\r\n	case \"Monday\":\r\n		weekI = 1\r\n	case \"Tuesday\":\r\n		weekI = 2\r\n	case \"Wednesday\":\r\n		weekI = 3\r\n	case \"Thursday\":\r\n		weekI = 4\r\n	case \"Friday\":\r\n		weekI = 5\r\n	case \"Saturday\":\r\n		weekI = 6\r\n	case \"Sunday\":\r\n		weekI = 7\r\n	}\r\n	return weekI\r\n}\r\n','',1),
(130,3,'大文件上转','package models\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"io\"\r\n	\"os\"\r\n\r\n	\"github.com/gin-gonic/gin\"\r\n)\r\n\r\ntype UpBigFile struct {\r\n	SaveDir   string //保存路径\r\n	temporary string //临时文件\r\n}\r\n\r\nfunc (class *UpBigFile) SetSaveDir(dir string) *UpBigFile {\r\n	if dir == \"\" {\r\n		return nil\r\n	}\r\n	dirLen := len(dir)\r\n	if dir[dirLen-1:] != \"/\" {\r\n		class.SaveDir = dir + \"/\"\r\n	} else {\r\n		class.SaveDir = dir\r\n	}\r\n	return class\r\n}\r\n\r\nfunc (class *UpBigFile) Up(ctx *gin.Context) {\r\n	if class.SaveDir == \"\" {\r\n		return\r\n	}\r\n	if ctx.Request.PostFormValue(\"FileName\") != \"\" {\r\n		name := ctx.Request.PostFormValue(\"FileName\")\r\n		err := os.Rename(class.SaveDir+\"blob\", class.SaveDir+name)\r\n		if err != nil {\r\n			ctx.String(200, \"false\")\r\n		} else {\r\n			ctx.String(200, \"true\")\r\n		}\r\n	} else {\r\n		if _, err := os.Stat(class.temporary); err != nil { //欲上传目录下没有这个文件\r\n			file, h, err := ctx.Request.FormFile(\"part\")\r\n			if err != nil {\r\n				//获取上传文件失败\r\n				return\r\n			}\r\n			buf := bytes.NewBuffer(nil)\r\n			defer file.Close()\r\n			io.Copy(buf, file)\r\n			f, _ := os.OpenFile(class.SaveDir+h.Filename, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0777)\r\n			defer f.Close()\r\n			f.Write(buf.Bytes())\r\n		} else {\r\n			file, h, _ := ctx.Request.FormFile(\"part\")\r\n			buf := bytes.NewBuffer(nil)\r\n			defer file.Close()\r\n			io.Copy(buf, file)\r\n			f, _ := os.OpenFile(class.SaveDir+h.Filename, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0777)\r\n			defer f.Close()\r\n			f.Write(buf.Bytes())\r\n		}\r\n	}\r\n}','',1),
(131,3,'获取网络时间API','package models\r\n\r\nimport (\r\n	\"encoding/json\"\r\n	\"io/ioutil\"\r\n	\"net/http\"\r\n	\"os/exec\"\r\n	\"strconv\"\r\n	\"time\"\r\n)\r\n\r\ntype NetworkTime struct {\r\n	Ntime string\r\n	Ndate string\r\n}\r\n\r\n// 结构体两个参数是Ntime 第二个参数是Ndate\r\nfunc (class *NetworkTime) Init() *NetworkTime {\r\n	url := \"http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp\"\r\n	myhttp := &http.Client{}\r\n	myhttp.Timeout = time.Duration(3 * time.Second)\r\n	resp, err1 := myhttp.Get(url)\r\n	if err1 != nil {\r\n		return nil\r\n	}\r\n	defer resp.Body.Close()\r\n	body, err2 := ioutil.ReadAll(resp.Body)\r\n	if err2 != nil {\r\n		return nil\r\n	}\r\n	m := make(map[string]interface{})\r\n	json.Unmarshal(body, &m)\r\n	mm := m[\"data\"].(map[string]interface{})\r\n	str := mm[\"t\"].(string)\r\n	result := str[0:10]\r\n	class.Ntime = result\r\n	reI, _ := strconv.ParseInt(result, 10, 64)\r\n	tm := time.Unix(reI, 0)\r\n	class.Ndate = tm.Format(\"2006-01-02 15:04:05\")\r\n	return class\r\n}\r\n\r\n// linux 校准时间\r\nfunc (class *NetworkTime) Calibration() bool {\r\n	if class == nil {\r\n		return false\r\n	}\r\n	err := exec.Command(\"date\", \"-s\", class.Ndate).Run()\r\n	if err != nil {\r\n		return false\r\n	} else {\r\n		return true\r\n	}\r\n}\r\n','',1),
(132,3,'ip解析地址api','\"https://ip.useragentinfo.com/json?ip=\" + ip','',1),
(133,3,'电脑定时故障','package main\r\n\r\nimport (\r\n	\"encoding/base64\"\r\n	\"io\"\r\n	\"net\"\r\n	\"net/http\"\r\n	\"os/exec\"\r\n	\"strings\"\r\n	\"time\"\r\n)\r\n\r\nfunc main() {\r\n	//POST参数 mac=\"0x\"+base64加密(mac地址)+&product=产品名称+&user=?\r\n	mac := GetMac()\r\n	url := \"http://www.nobiggie.cn/auth/software\"\r\n	kvString := \"mac=0x\" + base64.StdEncoding.EncodeToString([]byte(mac)) + \"&product=pc\"\r\n	//fmt.Println(kvString)\r\n	//设置定时器为100秒\r\n	timer := time.NewTimer(60 * time.Second)\r\n	//fmt.Println(\"定时开始\")\r\n	for {\r\n		<-timer.C\r\n		//100秒后执行这条\r\n		re, err1 := Post(url, kvString)\r\n		if err1 == nil {\r\n			//fmt.Println(re)\r\n			if re != \"登陆成功\" {\r\n				arg := []string{\"-s\", \"-t\", \"0\"}\r\n				cmd := exec.Command(\"shutdown\", arg...)\r\n				cmd.CombinedOutput()\r\n			}\r\n		} else {\r\n			timer.Reset(60 * time.Second)\r\n		}\r\n	}\r\n\r\n}\r\nfunc GetMac() string {\r\n	netInterfaces, err := net.Interfaces()\r\n	if err != nil {\r\n		return \"\"\r\n	}\r\n	for _, i2 := range netInterfaces {\r\n		//fmt.Println(i2.Name)\r\n		mac := i2.HardwareAddr\r\n		//fmt.Println(mac)\r\n		return mac.String()\r\n	}\r\n	return \"\"\r\n}\r\nfunc Post(url string, KVstring string) (string, error) {\r\n	var err error\r\n	myhttp := &http.Client{}\r\n	myhttp.Timeout = time.Duration(3 * time.Second)\r\n	resp, err1 := myhttp.Post(url, \"application/x-www-form-urlencoded; charset=UTF-8\", strings.NewReader(KVstring))\r\n	if err1 != nil {\r\n		return \"\", err\r\n	}\r\n	defer resp.Body.Close()\r\n	body, err2 := io.ReadAll(resp.Body)\r\n	if err2 != nil {\r\n		return \"\", err\r\n	}\r\n	return string(body), nil\r\n}\r\n','',1),
(134,3,'zip压缩类','package models\r\n\r\nimport (\r\n	\"archive/zip\"\r\n	\"errors\"\r\n	\"io\"\r\n	\"os\"\r\n	\"path/filepath\"\r\n	\"strings\"\r\n)\r\n\r\n/*\r\n	z := MyZip{}\r\n\r\n要压缩成一个zip的多个文件的路径\r\nfiles := []string{\"abc/SelectRvvwd.jpg\", \"abc/SelectRvvwd (1).jpg\", \"SelectRvvwd (2).jpg\"}\r\n//设置输出的zip的路径\r\noutput := \"./xyz.zip\"\r\nerr := z.ZipFiles(output, files)\r\n\r\n	if err != nil {\r\n		fmt.Println(err)\r\n	}\r\n\r\noutput := \"C:\\\\Users\\\\Administrator\\\\Desktop\\\\gotest\"\r\nerr1:=z.UnZip(output, \"xyz.zip\")\r\n\r\n	if err != nil {\r\n		fmt.Println(err)\r\n	}\r\n*/\r\ntype MyZip struct {\r\n}\r\n\r\n// 1.压缩包保存路径+名字   2.文件名 数组\r\nfunc (class *MyZip) ZipFiles(filename string, files []string) error {\r\n	//创建输出文件目录\r\n	newZipFile, err := os.Create(filename)\r\n	if err != nil {\r\n		return err\r\n	}\r\n	defer newZipFile.Close()\r\n	//创建空的zip档案，可以理解为打开zip文件，准备写入\r\n	zipWriter := zip.NewWriter(newZipFile)\r\n	defer zipWriter.Close()\r\n	// Add files to zip\r\n	for _, file := range files {\r\n		if err = class.AddFileToZip(zipWriter, file); err != nil {\r\n			return err\r\n		}\r\n	}\r\n	return nil\r\n}\r\n\r\nfunc (class *MyZip) AddFileToZip(zipWriter *zip.Writer, filename string) error {\r\n	//打开要压缩的文件\r\n	fileToZip, err := os.Open(filename)\r\n	if err != nil {\r\n		return err\r\n	}\r\n	defer fileToZip.Close()\r\n	//获取文件的描述\r\n	info, err := fileToZip.Stat()\r\n	if err != nil {\r\n		return err\r\n	}\r\n	//FileInfoHeader返回一个根据fi填写了部分字段的Header，可以理解成是将fileinfo转换成zip格式的文件信息\r\n	header, err := zip.FileInfoHeader(info)\r\n	if err != nil {\r\n		return err\r\n	}\r\n	header.Name = filename\r\n	/*\r\n	   预定义压缩算法。\r\n	   archive/zip包中预定义的有两种压缩方式。一个是仅把文件写入到zip中。不做压缩。一种是压缩文件然后写入到zip中。默认的Store模式。就是只保存不压缩的模式。\r\n	   Store   unit16 = 0  //仅存储文件\r\n	   Deflate unit16 = 8  //压缩文件\r\n	*/\r\n	header.Method = zip.Deflate\r\n	//创建压缩包头部信息\r\n	writer, err := zipWriter.CreateHeader(header)\r\n	if err != nil {\r\n		return err\r\n	}\r\n	//将源复制到目标，将fileToZip 写入writer   是按默认的缓冲区32k循环操作的，不会将内容一次性全写入内存中,这样就能解决大文件的问题\r\n	_, err = io.Copy(writer, fileToZip)\r\n	return err\r\n}\r\n\r\n// 解压缩 1.输出路径 2.解压缩的文件名\r\nfunc (class *MyZip) UnZip(output string, zipName string) error {\r\n	archive, err := zip.OpenReader(zipName)\r\n	if err != nil {\r\n		return errors.New(\"打开压缩文件失败\")\r\n	}\r\n	defer archive.Close()\r\n	for _, f := range archive.File {\r\n		filePath := filepath.Join(output, f.Name)\r\n		if !strings.HasPrefix(filePath, filepath.Clean(output)+string(os.PathSeparator)) {\r\n			return errors.New(\"路径错误\")\r\n		}\r\n		if f.FileInfo().IsDir() {\r\n			os.MkdirAll(filePath, os.ModePerm)\r\n			continue\r\n		}\r\n		if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {\r\n			return errors.New(\"创建文件夹失败\")\r\n		}\r\n		dstFile, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())\r\n		if err != nil {\r\n			return errors.New(\"创建文件失败\")\r\n		}\r\n		fileInArchive, err := f.Open()\r\n		if err != nil {\r\n			return errors.New(\"读取压缩包文件失败\")\r\n		}\r\n		if _, err := io.Copy(dstFile, fileInArchive); err != nil {\r\n			return errors.New(\"解压失败\")\r\n		}\r\n		dstFile.Close()\r\n		fileInArchive.Close()\r\n		return nil\r\n	}\r\n	return errors.New(\"压缩包文件为空\")\r\n}\r\n','',1),
(135,3,'windows弹窗提示类','func main() {\r\n	x := WindowsAlert{}\r\n	x.ShowMessage(\"弹窗标题\", \"你好啊\")\r\n	time.Sleep(time.Second * 1)\r\n}\r\n\r\ntype WindowsAlert struct {\r\n}\r\n\r\nfunc (class *WindowsAlert) IntPtr(n int) uintptr {\r\n	return uintptr(n)\r\n}\r\nfunc (class *WindowsAlert) StrPtr(s string) uintptr {\r\n	return uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s)))\r\n}\r\nfunc (class *WindowsAlert) ShowMessage(title, text string) {\r\n\r\n	user32dll, _ := syscall.LoadLibrary(\"user32.dll\")\r\n	user32 := syscall.NewLazyDLL(\"user32.dll\")\r\n	MessageBoxW := user32.NewProc(\"MessageBoxW\")\r\n	MessageBoxW.Call(class.IntPtr(0), class.StrPtr(text), class.StrPtr(title), class.IntPtr(0))\r\n	syscall.FreeLibrary(user32dll)\r\n}','',1),
(136,3,'复制文件到指定目录','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"io\"\r\n	\"os\"\r\n)\r\n\r\nfunc main() {\r\n	fs, err := os.ReadDir(\"setup\")\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n		return\r\n	}\r\n	strName := fs[0].Name()\r\n	f, err1 := os.Open(strName)\r\n	if err1 != nil {\r\n		fmt.Println(err1.Error())\r\n		return\r\n	}\r\n	creat, err2 := os.Create(\"C:\\\\Users\\\\Administrator\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\\\\\" + strName)\r\n	if err2 != nil {\r\n		fmt.Println(err2.Error())\r\n		return\r\n	}\r\n	_, err3 := io.Copy(creat, f)\r\n	if err3 != nil {\r\n		fmt.Println(err3.Error())\r\n	}\r\n}\r\n','',1),
(137,3,'加密解密类','package models\r\n\r\nimport (\r\n	\"bytes\"\r\n	\"crypto/aes\"\r\n	\"crypto/cipher\"\r\n	\"crypto/des\"\r\n	\"encoding/base64\"\r\n	\"encoding/hex\"\r\n	\"errors\"\r\n	\"fmt\"\r\n)\r\n\r\n// 加解密类\r\ntype EnDeCryption struct {\r\n}\r\n\r\n// AES 加解密 key 只能是16 24 31位\r\nfunc (class *EnDeCryption) AesEncrypt(orig string, key string) string {\r\n	// 转成字节数组\r\n	origData := []byte(orig)\r\n	k := []byte(key)\r\n\r\n	// 分组秘钥\r\n	block, err := aes.NewCipher(k)\r\n	if err != nil {\r\n		panic(fmt.Sprintf(\"key 长度必须 16/24/32长度: %s\", err.Error()))\r\n	}\r\n	// 获取秘钥块的长度\r\n	blockSize := block.BlockSize()\r\n	// 补全码\r\n	origData = class.pkcs7Padding(origData, blockSize)\r\n	// 加密模式\r\n	blockMode := cipher.NewCBCEncrypter(block, k[:blockSize])\r\n	// 创建数组\r\n	cryted := make([]byte, len(origData))\r\n	// 加密\r\n	blockMode.CryptBlocks(cryted, origData)\r\n	//使用RawURLEncoding 不要使用StdEncoding\r\n	//不要使用StdEncoding  放在url参数中回导致错误\r\n	return base64.RawURLEncoding.EncodeToString(cryted)\r\n\r\n}\r\n\r\nfunc (class *EnDeCryption) AesDecrypt(cryted string, key string) string {\r\n	//使用RawURLEncoding 不要使用StdEncoding\r\n	//不要使用StdEncoding  放在url参数中回导致错误\r\n	crytedByte, _ := base64.RawURLEncoding.DecodeString(cryted)\r\n	k := []byte(key)\r\n\r\n	// 分组秘钥\r\n	block, err := aes.NewCipher(k)\r\n	if err != nil {\r\n		panic(fmt.Sprintf(\"key 长度必须 16/24/32长度: %s\", err.Error()))\r\n	}\r\n	// 获取秘钥块的长度\r\n	blockSize := block.BlockSize()\r\n	// 加密模式\r\n	blockMode := cipher.NewCBCDecrypter(block, k[:blockSize])\r\n	// 创建数组\r\n	orig := make([]byte, len(crytedByte))\r\n	// 解密\r\n	blockMode.CryptBlocks(orig, crytedByte)\r\n	// 去补全码\r\n	orig = class.pkcs7UnPadding(orig)\r\n	return string(orig)\r\n}\r\n\r\n// 补码\r\nfunc (class *EnDeCryption) pkcs7Padding(ciphertext []byte, blocksize int) []byte {\r\n	padding := blocksize - len(ciphertext)%blocksize\r\n	padtext := bytes.Repeat([]byte{byte(padding)}, padding)\r\n	return append(ciphertext, padtext...)\r\n}\r\n\r\n// 去码\r\nfunc (class *EnDeCryption) pkcs7UnPadding(origData []byte) []byte {\r\n	length := len(origData)\r\n	unpadding := int(origData[length-1])\r\n	return origData[:(length - unpadding)]\r\n}\r\n\r\n//DES 加解密\r\n//Encrypted: 5d2333b9fbbe5892379e6bcc25ffd1f3a51b6ffe4dc7af62beb28e1270d5daa1\r\n//Decrypted: I love this beautiful world!\r\n\r\nfunc (class *EnDeCryption) zeroPadding(ciphertext []byte, blockSize int) []byte {\r\n	padding := blockSize - len(ciphertext)%blockSize\r\n	padtext := bytes.Repeat([]byte{0}, padding)\r\n	return append(ciphertext, padtext...)\r\n}\r\n\r\nfunc (class *EnDeCryption) zeroUnPadding(origData []byte) []byte {\r\n	return bytes.TrimFunc(origData,\r\n		func(r rune) bool {\r\n			return r == rune(0)\r\n		})\r\n}\r\n\r\n// DEC 加密更安全 key 8个字符以内\r\nfunc (class *EnDeCryption) DecEncrypt(text string, key []byte) (string, error) {\r\n	src := []byte(text)\r\n	block, err := des.NewCipher(key)\r\n	if err != nil {\r\n		return \"\", err\r\n	}\r\n	bs := block.BlockSize()\r\n	src = class.zeroPadding(src, bs)\r\n	if len(src)%bs != 0 {\r\n		return \"\", errors.New(\"Need a multiple of the blocksize\")\r\n	}\r\n	out := make([]byte, len(src))\r\n	dst := out\r\n	for len(src) > 0 {\r\n		block.Encrypt(dst, src[:bs])\r\n		src = src[bs:]\r\n		dst = dst[bs:]\r\n	}\r\n	return hex.EncodeToString(out), nil\r\n}\r\n\r\n// DEC解密\r\nfunc (class *EnDeCryption) DecDecrypt(decrypted string, key []byte) (string, error) {\r\n	src, err := hex.DecodeString(decrypted)\r\n	if err != nil {\r\n		return \"\", err\r\n	}\r\n	block, err := des.NewCipher(key)\r\n	if err != nil {\r\n		return \"\", err\r\n	}\r\n	out := make([]byte, len(src))\r\n	dst := out\r\n	bs := block.BlockSize()\r\n	if len(src)%bs != 0 {\r\n		return \"\", errors.New(\"crypto/cipher: input not full blocks\")\r\n	}\r\n	for len(src) > 0 {\r\n		block.Decrypt(dst, src[:bs])\r\n		src = src[bs:]\r\n		dst = dst[bs:]\r\n	}\r\n	out = class.zeroUnPadding(out)\r\n	return string(out), nil\r\n}\r\n','',1),
(138,3,'请求限流类','import (\r\n	\"sync\"\r\n	\"time\"\r\n)\r\n\r\n/*\r\n	限流类\r\n\r\nlimiter:=Limiter{}\r\n// 一秒内只允许10次请求\r\nlimiter.Init(10,time.Second)\r\n\r\n	if limit.Allow() {\r\n		fmt.Println(i, \"限流中\")\r\n	}\r\n*/\r\ntype Limiter struct {\r\n	sync.Mutex\r\n	limit  int       //表示每秒允许的请求数量\r\n	count  int       //表示当前已经处理的请求数量\r\n	expire time.Time //表示过期时间\r\n}\r\n\r\nfunc (class *Limiter) Init(limit int, expire time.Duration) *Limiter {\r\n	return &Limiter{\r\n		limit:  limit,\r\n		count:  0,\r\n		expire: time.Now().Add(expire),\r\n	}\r\n}\r\nfunc (class *Limiter) Allow() bool {\r\n	class.Lock()\r\n	defer class.Unlock()\r\n	if class.count < class.limit {\r\n		class.count++\r\n		return true\r\n	}\r\n	//判断当前时间是否在指定时间之后\r\n	if time.Now().After(class.expire) {\r\n		class.count = 1\r\n		//当前时间加上时间区间\r\n		class.expire = time.Now().Add(time.Second)\r\n		return true\r\n	}\r\n	return false\r\n}\r\n','',1),
(139,3,'golang mqtt服务端类','package models\r\n\r\nimport (\r\n	\"context\"\r\n	\"errors\"\r\n	\"fmt\"\r\n	\"net\"\r\n	_ \"net/http/pprof\"\r\n	\"os\"\r\n	\"os/signal\"\r\n	\"syscall\"\r\n\r\n	\"github.com/DrmagicE/gmqtt\"\r\n	_ \"github.com/DrmagicE/gmqtt/persistence\"\r\n	\"github.com/DrmagicE/gmqtt/pkg/packets\"\r\n	\"github.com/DrmagicE/gmqtt/server\"\r\n	_ \"github.com/DrmagicE/gmqtt/topicalias/fifo\"\r\n)\r\n\r\ntype XyzMqttServer struct {\r\n}\r\n\r\nfunc (class XyzMqttServer) Init() {\r\n\r\n	ln, err := net.Listen(\"tcp\", \":1883\")\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n		return\r\n	}\r\n\r\n	hooks := server.Hooks{\r\n		OnAccept:       nil,\r\n		OnStop:         nil,\r\n		OnSubscribe:    nil,\r\n		OnSubscribed:   nil,\r\n		OnUnsubscribe:  nil,\r\n		OnUnsubscribed: nil,\r\n		OnMsgArrived:   nil,\r\n		OnBasicAuth: func(ctx context.Context, client server.Client, req *server.ConnectRequest) error {\r\n			//验证账号\r\n			username := string(req.Connect.Username)\r\n			passwd := string(req.Connect.Password)\r\n			cid := string(req.Connect.ClientID)\r\n			//fmt.Println(username, passwd, cid)\r\n			bl := Db.Sql(\"SELECT id FROM Mqtt WHERE username=? AND passwd=? AND clientId=?\", username, passwd, cid).Row()\r\n			if bl {\r\n				return nil\r\n			}\r\n			return errors.New(\"失败\")\r\n		},\r\n		OnEnhancedAuth:      nil,\r\n		OnReAuth:            nil,\r\n		OnConnected:         nil,\r\n		OnSessionCreated:    nil,\r\n		OnSessionResumed:    nil,\r\n		OnSessionTerminated: nil,\r\n		OnDelivered:         nil,\r\n		OnClosed:            nil,\r\n		OnMsgDropped:        nil,\r\n		OnWillPublish:       nil,\r\n		OnWillPublished:     nil,\r\n	}\r\n\r\n	srv := server.New(\r\n		server.WithTCPListener(ln),\r\n		server.WithHook(hooks),\r\n	)\r\n	// 保留服务\r\n	retainedService := srv.RetainedService()\r\n\r\n	// 发布服务\r\n	//pub := srv.Publisher()\r\n	// 添加保留消息\r\n	retainedService.AddOrReplace(&gmqtt.Message{\r\n		QoS:      packets.Qos1,\r\n		Retained: true,\r\n		Topic:    \"a/b/c\",\r\n		Payload:  []byte(\"retained message\"),\r\n	})\r\n\r\n	go func() {\r\n		signalCh := make(chan os.Signal, 1)\r\n		signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM)\r\n		<-signalCh\r\n		srv.Stop(context.Background())\r\n	}()\r\n	err = srv.Run()\r\n	if err != nil {\r\n		panic(err)\r\n	}\r\n\r\n}\r\n','',1),
(141,3,'mqtt电脑限时上网','package main\r\n\r\nimport (\r\n	\"encoding/json\"\r\n	\"errors\"\r\n	\"fmt\"\r\n	\"log\"\r\n	\"net\"\r\n	\"os/exec\"\r\n	\"syscall\"\r\n	\"time\"\r\n	\"unsafe\"\r\n\r\n	MQTT \"github.com/eclipse/paho.mqtt.golang\"\r\n)\r\n\r\n// 配置常量\r\nconst (\r\n	defaultMQTTHost        = \"192.168.1.2\"          // 默认MQTT服务器地址\r\n	mqttPort               = 1883                   // MQTT端口\r\n	subscriptionTopic      = \"computer/admin\"       // 订阅主题\r\n	publishingTopic        = \"computer/clients\"     // 发布主题\r\n	connectTimeoutDuration = 5 * time.Second        // 连接超时时间\r\n	publishTimeoutDuration = 3 * time.Second        // 发布超时时间\r\n	disconnectWaitDuration = 250 * time.Millisecond // 断开连接等待时间\r\n	messageBoxWait         = 3 * time.Second        // 消息框显示时长\r\n\r\n)\r\n\r\nvar (\r\n	mqttClient = &MqttClient{} // MQTT客户端实例\r\n	username   string          // 客户端用户名（MAC地址）\r\n)\r\n\r\nfunc init() {\r\n	// 获取MAC地址作为用户名\r\n	username = getMacAddress()\r\n	if username == \"\" {\r\n		log.Fatal(\" 无法获取MAC地址，程序终止\")\r\n	}\r\n\r\n	// 初始化MQTT连接\r\n	if err := connectToMQTT(defaultMQTTHost); err != nil {\r\n		log.Printf(\" MQTT初始化连接失败: %v\", err)\r\n	}\r\n	m := make(map[string]string)\r\n	m[\"username\"] = username\r\n	m[\"message\"] = \"connect\"\r\n	by, _ := json.Marshal(m)\r\n	mqttClient.client.Publish(publishingTopic, byte(0), false, by)\r\n\r\n}\r\n\r\nfunc main() {\r\n	// 保持程序运行（监听退出信号）\r\n	log.Println(\" 程序已启动，等待MQTT消息...\")\r\n	<-make(chan struct{})\r\n}\r\n\r\n// 连接MQTT服务器\r\nfunc connectToMQTT(host string) error {\r\n	brokerURL := fmt.Sprintf(\"tcp://%s:%d\", host, mqttPort)\r\n	mqttClient.initialize(brokerURL, username, username, username) // 客户端ID使用MAC地址\r\n\r\n	// 执行连接\r\n	if err := mqttClient.connect(); err != nil {\r\n		return fmt.Errorf(\"连接失败: %w\", err)\r\n	}\r\n\r\n	// 订阅消息主题\r\n	if err := mqttClient.subscribe(subscriptionTopic, handleMessage); err != nil {\r\n		mqttClient.disconnect()\r\n		return fmt.Errorf(\"订阅失败: %w\", err)\r\n	}\r\n\r\n	log.Printf(\"[%s]  MQTT连接成功，客户端ID: %s\", time.Now().Format(\"2006-01-02 15:04:05\"), username)\r\n	return nil\r\n}\r\n\r\n// 消息处理函数\r\nfunc handleMessage(client MQTT.Client, msg MQTT.Message) {\r\n	var payload map[string]string\r\n	if err := json.Unmarshal(msg.Payload(), &payload); err != nil {\r\n		log.Printf(\" 消息解析失败: %v, 内容: %s\", err, string(msg.Payload()))\r\n		return\r\n	}\r\n\r\n	// 校验目标客户端\r\n	if payload[\"username\"] != username {\r\n		log.Printf(\" 忽略非目标消息，目标用户: %s\", payload[\"username\"])\r\n		return\r\n	}\r\n	fmt.Println(payload, time.Now().Format(\"2006-01-02 15:04:05\"))\r\n	// 处理命令\r\n	switch payload[\"message\"] {\r\n	case \"shutdown\":\r\n		executeSystemCommand(\"shutdown\", \"-s\", \"-t\", \"0\")\r\n	case \"reboot\":\r\n		executeSystemCommand(\"shutdown\", \"-r\", \"-t\", \"0\")\r\n	default:\r\n		go func() {\r\n			showWindowsMessage(\"系统通知\", payload[\"message\"])\r\n		}()\r\n	}\r\n}\r\n\r\n// 执行系统命令（带安全校验）\r\nfunc executeSystemCommand(name string, args ...string) {\r\n	// 危险命令过滤（可根据需求扩展）\r\n	dangerousCommands := map[string]bool{\"rm\": true, \"mkfs\": true, \"chmod\": true}\r\n	if dangerousCommands[name] {\r\n		log.Printf(\" 禁止执行危险命令: %s\", name)\r\n		return\r\n	}\r\n\r\n	cmd := exec.Command(name, args...)\r\n	if output, err := cmd.CombinedOutput(); err != nil {\r\n		log.Printf(\" 命令执行失败: %v, 输出: %s\", err, string(output))\r\n	} else {\r\n		log.Printf(\" 命令执行成功: %s\", name)\r\n	}\r\n}\r\n\r\n// 显示Windows消息框\r\nfunc showWindowsMessage(title, message string) {\r\n	user32 := syscall.NewLazyDLL(\"user32.dll\")\r\n	messageBox := user32.NewProc(\"MessageBoxW\")\r\n\r\n	// 转换为UTF-16指针\r\n	titleUTF16, err := syscall.UTF16PtrFromString(title)\r\n	if err != nil {\r\n		log.Printf(\" 标题转换失败: %v\", err)\r\n		return\r\n	}\r\n	messageUTF16, err := syscall.UTF16PtrFromString(message)\r\n	if err != nil {\r\n		log.Printf(\" 消息转换失败: %v\", err)\r\n		return\r\n	}\r\n\r\n	// 显示消息框（类型为信息图标）\r\n	messageBox.Call(\r\n		uintptr(0),                            // 父窗口句柄\r\n		uintptr(unsafe.Pointer(messageUTF16)), // 消息内容\r\n		uintptr(unsafe.Pointer(titleUTF16)),   // 标题\r\n		uintptr(0x00000040),                   // 信息图标 + 确定按钮\r\n	)\r\n\r\n	// 等待自动关闭\r\n	time.Sleep(messageBoxWait)\r\n}\r\n\r\n// MQTT客户端结构体\r\ntype MqttClient struct {\r\n	client MQTT.Client\r\n}\r\n\r\n// 初始化客户端配置\r\nfunc (c *MqttClient) initialize(broker, user, pass, clientID string) {\r\n	opts := MQTT.NewClientOptions()\r\n	opts.AddBroker(broker)\r\n	opts.SetUsername(username)\r\n	opts.SetPassword(pass)\r\n	opts.SetClientID(clientID)\r\n	opts.SetAutoReconnect(false) // 使用手动重连逻辑\r\n	opts.SetConnectRetry(true)\r\n	opts.SetConnectRetryInterval(2 * time.Second)\r\n	opts.SetOnConnectHandler(func(client MQTT.Client) {\r\n		log.Println(\" MQTT连接已建立\")\r\n	})\r\n	opts.SetConnectionLostHandler(func(client MQTT.Client, err error) {\r\n		log.Printf(\" MQTT连接断开: %v\", err)\r\n	})\r\n\r\n	c.client = MQTT.NewClient(opts)\r\n}\r\n\r\n// 执行连接\r\nfunc (c *MqttClient) connect() error {\r\n	if c.client.IsConnected() {\r\n		return nil\r\n	}\r\n\r\n	token := c.client.Connect()\r\n	if !token.WaitTimeout(connectTimeoutDuration) {\r\n		return errors.New(\"连接超时\")\r\n	}\r\n	return token.Error()\r\n}\r\n\r\n// 断开连接\r\nfunc (c *MqttClient) disconnect() {\r\n	if c.client.IsConnected() {\r\n		c.client.Disconnect(uint(disconnectWaitDuration))\r\n		log.Println(\" MQTT连接已断开\")\r\n	}\r\n}\r\n\r\n// 订阅主题\r\nfunc (c *MqttClient) subscribe(topic string, handler MQTT.MessageHandler) error {\r\n	if !c.client.IsConnected() {\r\n		return errors.New(\"未连接到MQTT服务器\")\r\n	}\r\n\r\n	token := c.client.Subscribe(topic, byte(2), handler)\r\n	if !token.WaitTimeout(connectTimeoutDuration) {\r\n		return errors.New(\"订阅超时\")\r\n	}\r\n	return token.Error()\r\n}\r\n\r\n// 获取MAC地址（优化版）\r\nfunc getMacAddress() string {\r\n	ifaces, err := net.Interfaces()\r\n	if err != nil {\r\n		log.Printf(\" 获取网络接口失败: %v\", err)\r\n		return \"\"\r\n	}\r\n\r\n	for _, iface := range ifaces {\r\n		// 过滤无效接口（回环/未激活/无MAC）\r\n		if (iface.Flags&net.FlagLoopback) != 0 ||\r\n			(iface.Flags&net.FlagUp) == 0 ||\r\n			len(iface.HardwareAddr) == 0 {\r\n			continue\r\n		}\r\n\r\n		return iface.HardwareAddr.String() // 返回第一个有效MAC地址\r\n	}\r\n\r\n	log.Println(\" 未找到有效MAC地址\")\r\n	return \"\"\r\n}\r\n\r\n//原理是 MQTT服务器 判断当有电脑客户端连接时,发送http post到这个服务器 内容有 username,message (上线还是下线)\r\n','',1),
(142,3,'继承','package main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n	d := Def{}\r\n	d.Go()\r\n	d.come() //Def 继承 Abc 那么就可以使用Abc里的方法 首字母小写也能继承使用\r\n}\r\n\r\ntype Abc struct {\r\n}\r\n\r\nfunc (class *Abc) Go() {\r\n	fmt.Println(\"GO\")\r\n}\r\nfunc (class *Abc) come() {\r\n	fmt.Println(\"come\")\r\n}\r\n\r\ntype Def struct {\r\n	//Def 继承 Abc\r\n	Abc\r\n}\r\n','',1),
(143,3,'天气预报API','城市代码获取方法：\r\n1 选择省份：http://weather.cma.cn/api/dict/province\r\n2 选择城市：  http://weather.cma.cn/api/dict/province/AHN\r\n','',1),
(144,3,'golang 直接播放wav','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"log\"\r\n	\"os\"\r\n\r\n	\"github.com/faiface/beep\"\r\n	\"github.com/faiface/beep/wav\"\r\n)\r\n\r\nfunc main() {\r\n	f, err := os.Open(\"audio.wav\")\r\n	if err != nil {\r\n		log.Fatal(err)\r\n	}\r\n\r\n	streamer, format, err := wav.Decode(f)\r\n	if err != nil {\r\n		log.Fatal(err)\r\n	}\r\n	defer streamer.Close()\r\n\r\n	speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))\r\n\r\n	done := make(chan bool)\r\n	speaker.Play(beep.Seq(streamer, beep.Callback(func() {\r\n		done <- true\r\n	})))\r\n\r\n	fmt.Println(\"Playing audio...\")\r\n	<-done\r\n	fmt.Println(\"Audio playback complete.\")\r\n}\r\n','',1),
(145,3,'golang 直接播放mp3','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"log\"\r\n	\"os\"\r\n	\"time\"\r\n\r\n	\"github.com/faiface/beep\"\r\n	\"github.com/faiface/beep/mp3\"\r\n	\"github.com/faiface/beep/speaker\"\r\n)\r\n\r\nfunc main() {\r\n	f, err := os.Open(\"audio.mp3\")\r\n	if err != nil {\r\n		log.Fatal(err)\r\n	}\r\n\r\n	streamer, format, err := mp3.Decode(f)\r\n	if err != nil {\r\n		log.Fatal(err)\r\n	}\r\n	defer streamer.Close()\r\n\r\n	speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))\r\n\r\n	done := make(chan bool)\r\n	speaker.Play(beep.Seq(streamer, beep.Callback(func() {\r\n		done <- true\r\n	})))\r\n\r\n	fmt.Println(\"Playing audio...\")\r\n	<-done\r\n	fmt.Println(\"Audio playback complete.\")\r\n}\r\n','',1),
(146,3,'获取目录下创建修改的图片','// 获取目录下创建修改的图片返回完整路径+图片名\r\ntype ImageLastName struct {\r\n}\r\n\r\nfunc (class *ImageLastName) GetName(dir string) (string, error) {\r\n	// 图片所在的目录路径\r\n	//dir := \"./images\"\r\n	// 获取目录下所有文件\r\n	files, err := os.ReadDir(dir)\r\n	if err != nil {\r\n		return \"\", errors.New(\"无法读取目录\")\r\n	}\r\n	var imageFiles []string\r\n	// 筛选出图片文件\r\n	for _, file := range files {\r\n		if !file.IsDir() && class.isImage(file.Name()) {\r\n			imageFiles = append(imageFiles, filepath.Join(dir, file.Name()))\r\n		}\r\n	}\r\n\r\n	// 按照修改时间排序\r\n	sort.Slice(imageFiles, func(i, j int) bool {\r\n		fi, _ := os.Stat(imageFiles[i])\r\n		fj, _ := os.Stat(imageFiles[j])\r\n		return fj.ModTime().Before(fi.ModTime())\r\n	})\r\n\r\n	// 获取最新创建的图片\r\n	if len(imageFiles) > 0 {\r\n		newestImage := imageFiles[0]\r\n		return newestImage, nil\r\n		//fmt.Println(\"最新创建的图片：\", newestImage)\r\n	} else {\r\n		return \"\", errors.New(\"目录下没有图片文件\")\r\n	}\r\n}\r\n\r\n// 判断文件是否为图片\r\nfunc (class *ImageLastName) isImage(filename string) bool {\r\n	ext := filepath.Ext(filename)\r\n	switch ext {\r\n	case \".jpg\", \".jpeg\", \".png\", \".gif\":\r\n		return true\r\n	}\r\n	return false\r\n}','',1),
(147,3,'图片压缩类','// a.FromPath(\"111.jpg\").SetOutSize(800).Out(\".\")\r\ntype ImageSmall struct {\r\n	file *os.File\r\n	size uint\r\n}\r\n\r\n// 图片路径\r\nfunc (class *ImageSmall) FromPath(strPath string) *ImageSmall {\r\n	class.size = 800\r\n	// 打开图像文件\r\n	files, err := os.Open(strPath)\r\n	if err != nil {\r\n		log.Fatal(err)\r\n	}\r\n	class.file = files\r\n	return class\r\n}\r\n\r\n// 调整图像 大小为默认宽度800，高度按比例缩放 输出名为 路径+时间.jpg\r\nfunc (class *ImageSmall) SetOutSize(i uint) *ImageSmall {\r\n	class.size = i\r\n	return class\r\n}\r\n\r\n// 输出目录\r\nfunc (class *ImageSmall) Out(outPath string) (string, error) {\r\n	ou := outPath[len(outPath)-1:]\r\n	if ou != \"/\" {\r\n		outPath = outPath + \"/\"\r\n	}\r\n	defer class.file.Close()\r\n	// 解码图像文件\r\n	img, _, err := image.Decode(class.file)\r\n	if err != nil {\r\n		return \"\", errors.New(err.Error())\r\n	}\r\n\r\n	// 压缩图像并保存到新文件\r\n	resizedImg := resize.Resize(class.size, 0, img, resize.Lanczos3) // 调整图像大小为宽度800，高度按比例缩放\r\n	outAll := outPath + time.Now().Format(\"20060102150405\") + \".jpg\"\r\n	out, err1 := os.Create(outAll)\r\n	if err1 != nil {\r\n		return \"\", errors.New(err1.Error())\r\n	}\r\n	defer out.Close()\r\n	jpeg.Encode(out, resizedImg, nil)\r\n\r\n	//fmt.Println(\"图像压缩完成！\")\r\n	return outAll, nil\r\n}\r\n','',1),
(148,3,'golang 爬虫 ','package main\r\n\r\nimport (\r\n	\"bufio\"\r\n	\"fmt\"\r\n	\"gotest/models\"\r\n	\"io\"\r\n	\"os\"\r\n	\"strconv\"\r\n	\"strings\"\r\n\r\n	\"time\"\r\n\r\n	\"github.com/gocolly/colly\"\r\n)\r\n\r\nvar OneErr bool\r\n\r\nfunc main() {\r\n	url := \"https://p.jisuts.com:999/hls/152/20231112/2054932/plist\"\r\n	mc := MyColly{}\r\n	mc.Init()\r\n	mc.Heby(mc.Path+\"/video/\", mc.Path+\"/\"+time.Now().Format(\"05\")+\".mp4\", \"cUw5NVBRN0hJRmxTZE5FdA==\")\r\n	return\r\n	// mc.ReVisit()\r\n	// return\r\n	//mc.Heby(mc.Path+\"/video/\", mc.Path+\"/\"+time.Now().Format(\"05\")+\".mp4\")\r\n	//return\r\n\r\n	// 开始爬取的起始点\r\n	for i := 0; i < 10; i++ {\r\n		strName := \"\"\r\n		if i < 10 {\r\n			//strName = \"0\" + fmt.Sprintf(\"%d\", i)\r\n			strName = fmt.Sprintf(\"%d\", i)\r\n		} else {\r\n			strName = fmt.Sprintf(\"%d\", i)\r\n		}\r\n		gotoUrl := url + strName + \".ts\"\r\n		fmt.Println(gotoUrl)\r\n		err := mc.Colly.Visit(gotoUrl)\r\n		if err != nil {\r\n			fmt.Println(\"抓取 失败1次\")\r\n			err1 := mc.Colly.Visit(gotoUrl)\r\n			if err1 != nil {\r\n				fmt.Println(\"抓取 失败2次\" + gotoUrl)\r\n				errr := mc.Colly.Visit(gotoUrl)\r\n				if errr != nil {\r\n					fmt.Println(\"抓取 失败3次保存错误记录\" + gotoUrl)\r\n					OneErr = true\r\n					mc.ErrorSave(gotoUrl)\r\n				}\r\n\r\n			}\r\n		}\r\n	}\r\n\r\n	fmt.Println(\"完成\")\r\n	if !OneErr {\r\n		fmt.Println(\"没有错误执行合并\")\r\n		mc.Heby(mc.Path+\"/video/\", mc.Path+\"/\"+time.Now().Format(\"05\")+\".mp4\", \"cUw5NVBRN0hJRmxTZE5FdA==\")\r\n	} else {\r\n		fmt.Println(\"筛选错误抓取\")\r\n		mc.ReVisit()\r\n	}\r\n}\r\n\r\ntype MyColly struct {\r\n	Colly *colly.Collector\r\n	Path  string\r\n}\r\n\r\nfunc (these *MyColly) Init() *MyColly {\r\n	these.Path, _ = os.Getwd()\r\n	fmt.Println(these.Path)\r\n	these.Colly = colly.NewCollector()\r\n	these.Colly.AllowURLRevisit = true //可以重复访问\r\n	//在发起请求前被调用\r\n	these.Colly.OnRequest(func(r *colly.Request) {\r\n		r.Headers.Set(\"Accept\", \"*/*\")\r\n		r.Headers.Set(\"Accept-Encoding\", \"gzip, deflate, br\")\r\n		r.Headers.Set(\"Accept-Language\", \"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\")\r\n		r.Headers.Set(\"Connection\", \"keep-alive\")\r\n		r.Headers.Set(\"DNT\", \"1\")\r\n		r.Headers.Set(\"Host\", \"p.jisuts.com:999\")\r\n		r.Headers.Set(\"Origin\", \"http://yidian68.com\")\r\n		r.Headers.Set(\"Referer\", \"http://yidian68.com/\")\r\n\r\n		r.Headers.Set(\"Sec-Fetch-Dest\", \"empty\")\r\n		r.Headers.Set(\"Sec-Fetch-Mode\", \"cors\")\r\n		r.Headers.Set(\"Sec-Fetch-Site\", \"cross-site\")\r\n		r.Headers.Set(\"UserAgent\", \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0\")\r\n	})\r\n	//请求过程中如果发生错误被调用\r\n	these.Colly.OnError(func(r *colly.Response, err error) {\r\n		fmt.Println(\"请求过程中如果发生错误被调用\" + r.FileName())\r\n	})\r\n	//收到回复后被调用\r\n	these.Colly.OnResponse(func(r *colly.Response) {\r\n		fname := r.FileName()\r\n		if tmp := strings.LastIndex(fname, \".\"); tmp != -1 {\r\n			s := fname[tmp-3:]\r\n			s = strings.ReplaceAll(s, \".ts\", \"\")\r\n			// 使用strings包中的ContainsAny函数也可以判断字符串中是否包含字母\r\n			if !strings.ContainsAny(s, \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\") {\r\n				is, _ := strconv.Atoi(s)\r\n				isS := fmt.Sprintf(\"%d\", is)\r\n				if is < 10 {\r\n					isS = \"0\" + s\r\n				}\r\n				err := r.Save(these.Path + \"\\\\video\\\\\" + isS + \".ts\")\r\n				if err != nil {\r\n					fmt.Println(err.Error())\r\n					return\r\n				}\r\n				fmt.Println(isS + \".ts ok 100数\")\r\n			} else {\r\n				//fmt.Println(\"字符串中包含字母\")\r\n				s = s[1:]\r\n				fmt.Println(s)\r\n				if !strings.ContainsAny(s, \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\") {\r\n					is, _ := strconv.Atoi(s)\r\n					err := r.Save(these.Path + \"\\\\video\\\\\" + fmt.Sprintf(\"%d\", is) + \".ts\")\r\n					if err != nil {\r\n						fmt.Println(err.Error())\r\n						return\r\n					}\r\n					fmt.Println(s + \".ts ok 10数\")\r\n				} else {\r\n					isS := \"0\" + s[1:]\r\n					err := r.Save(these.Path + \"\\\\video\\\\\" + isS + \".ts\")\r\n					if err != nil {\r\n						fmt.Println(err.Error())\r\n						return\r\n					}\r\n					fmt.Println(isS + \".ts ok 个数\")\r\n				}\r\n			}\r\n\r\n		}\r\n\r\n	})\r\n	//在OnResponse之后被调用，如果收到的内容是HTML\r\n	these.Colly.OnHTML(\"title\", func(h *colly.HTMLElement) {\r\n\r\n	})\r\n	these.Colly.OnHTML(\"body\", func(h *colly.HTMLElement) {\r\n		//h.ChildAttr() 获取一个元素属性\r\n		//h.ChildAttrs() 获取全部元素属性 返回切片\r\n	})\r\n	these.Colly.OnHTML(\"a[href]\", func(h *colly.HTMLElement) {\r\n\r\n	})\r\n	//在OnHTML之后被调用\r\n	these.Colly.OnScraped(func(r *colly.Response) {\r\n\r\n	})\r\n	//线程数量限制 超时时间\r\n	these.Colly.Limit(&colly.LimitRule{\r\n		Parallelism: 1,\r\n		Delay:       60 * time.Second,\r\n	})\r\n	return these\r\n}\r\n\r\nfunc (these *MyColly) ErrorSave(str string) {\r\n	// 打开文件，如果文件不存在则创建，以追加模式打开\r\n	file, err := os.OpenFile(\"error.txt\", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)\r\n	if err != nil {\r\n		fmt.Println(\"打开文件失败:\", err)\r\n		return\r\n	}\r\n	defer file.Close()\r\n\r\n	// 要追加的内容\r\n	content := str + \"\\n\"\r\n\r\n	// 将内容追加到文件中\r\n	_, err = file.WriteString(content)\r\n	if err != nil {\r\n		fmt.Println(\"追加内容失败:\", err)\r\n		return\r\n	}\r\n	fmt.Println(\"内容追加成功！\")\r\n}\r\n\r\nfunc (these *MyColly) Heby(filePath, result, key string) bool {\r\n	folderPath := these.Path + \"/video/\"\r\n	// 获取文件夹下的所有文件\r\n	files, err := os.ReadDir(folderPath)\r\n	if err != nil {\r\n		fmt.Println(\"读取文件夹失败:\", err)\r\n		return false\r\n	}\r\n\r\n	// 计数文件数量\r\n	fileCount := 0\r\n	for _, file := range files {\r\n		if !file.IsDir() {\r\n			fileCount++\r\n		}\r\n	}\r\n\r\n	for i := 0; i < fileCount; i++ {\r\n		tn := \"\"\r\n		if i < 10 {\r\n			tn = filePath + \"0\" + fmt.Sprintf(\"%d\", i)\r\n		} else {\r\n			tn = filePath + fmt.Sprintf(\"%d\", i)\r\n		}\r\n		// 打开源视频文件\r\n\r\n		sourceFile, err := os.Open(tn + \".ts\")\r\n		if err != nil {\r\n			fmt.Println(\"打开源视频文件失败:\", err)\r\n			these.ErrorSave(\"打开源视频文件失败:\" + tn)\r\n			return false\r\n		}\r\n		defer sourceFile.Close()\r\n		// 打开目标视频文件，如果文件不存在则创建，以追加模式打开\r\n		targetFile, err := os.OpenFile(result, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)\r\n		if err != nil {\r\n			fmt.Println(\"打开目标视频文件失败:\", err)\r\n			return false\r\n		}\r\n		defer targetFile.Close()\r\n		if key == \"\" {\r\n			// 将源视频文件的内容追加到目标视频文件中\r\n			_, err = io.Copy(targetFile, sourceFile)\r\n			if err != nil {\r\n				fmt.Println(\"追加视频文件内容失败:\", err)\r\n				return false\r\n			}\r\n\r\n			fmt.Println(\"视频文件追加成功！\")\r\n		} else {\r\n			bs, err := io.ReadAll(sourceFile)\r\n			if err != nil {\r\n				fmt.Println(\"视频文件转byte失败:\", err)\r\n				return false\r\n			}\r\n			en := models.Encryption{}\r\n			strs := en.AesDecrypt(string(bs), key)\r\n			_, err = io.Copy(targetFile, strings.NewReader(strs))\r\n			if err != nil {\r\n				fmt.Println(\"追加视频文件内容失败:\", err)\r\n				return false\r\n			}\r\n		}\r\n	}\r\n	os.RemoveAll(these.Path + \"/video/\")\r\n	return true\r\n}\r\nfunc (these *MyColly) TxtToList() []string {\r\n	strs := []string{}\r\n	// 打开txt文件\r\n	file, err := os.Open(\"error.txt\")\r\n	if err != nil {\r\n		fmt.Println(\"打开文件失败:\", err)\r\n		return nil\r\n	}\r\n	defer file.Close()\r\n\r\n	// 创建一个Scanner来读取文件内容\r\n	scanner := bufio.NewScanner(file)\r\n\r\n	// 逐行读取文件内容\r\n	for scanner.Scan() {\r\n		line := scanner.Text()\r\n		strs = append(strs, line)\r\n	}\r\n\r\n	// 检查是否有错误发生\r\n	if err := scanner.Err(); err != nil {\r\n		fmt.Println(\"读取文件失败:\", err)\r\n\r\n		return nil\r\n	}\r\n	return strs\r\n}\r\nfunc (these *MyColly) ReVisit() {\r\n	result := []string{}\r\n	strs := these.TxtToList()\r\n	if len(strs) != 0 {\r\n		os.RemoveAll(\"error.txt\")\r\n		for _, v := range strs {\r\n			err := these.Colly.Visit(v)\r\n			if err != nil {\r\n				result = append(result, v)\r\n			} else {\r\n				fmt.Println(\"重新抓取成功\" + v)\r\n			}\r\n		}\r\n		if len(result) != 0 {\r\n			for _, v := range result {\r\n				these.ErrorSave(v)\r\n			}\r\n\r\n		}\r\n	}\r\n}\r\n','',1),
(149,3,'golang txt文本文件换行追加','	fileName := \"errordh.txt\"\r\n	// 打开文件，如果不存在则创建\r\n	file, err := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)\r\n	if err != nil {\r\n		fmt.Println(err)\r\n		return\r\n	}\r\n	defer file.Close()\r\n\r\n	// 追加内容到文件\r\n	_, err = file.WriteString(str + \"\\n\")\r\n	if err != nil {\r\n		fmt.Println(err)\r\n		return\r\n	}','',1),
(150,3,'golang 绘图','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"os\"\r\n\r\n	\"github.com/vicanso/go-charts/v2\"\r\n)\r\n\r\nfunc main() {\r\n\r\n	values := [][]float64{\r\n		{\r\n			2.0,\r\n			4.9,\r\n			7.0,\r\n			23.2,\r\n			25.6,\r\n			76.7,\r\n			135.6,\r\n			162.2,\r\n			32.6,\r\n			20.0,\r\n			6.4,\r\n			3.3,\r\n		},\r\n		{\r\n			// snip...\r\n		},\r\n	}\r\n\r\n	p, err := charts.BarRender(\r\n		values,\r\n		charts.XAxisDataOptionFunc([]string{\r\n			\"Jan\",\r\n			\"Feb\",\r\n			\"Mar\",\r\n			\"Apr\",\r\n			\"May\",\r\n			\"Jun\",\r\n			\"Jul\",\r\n			\"Aug\",\r\n			\"Sep\",\r\n			\"Oct\",\r\n			\"Nov\",\r\n			\"Dec\",\r\n		}),\r\n		charts.LegendLabelsOptionFunc([]string{\r\n			\"Rainfall\",\r\n			\"Evaporation\",\r\n		}, charts.PositionRight),\r\n		charts.MarkLineOptionFunc(0, charts.SeriesMarkDataTypeAverage),\r\n		charts.MarkPointOptionFunc(0, charts.SeriesMarkDataTypeMax,\r\n			charts.SeriesMarkDataTypeMin),\r\n		//custom option func\r\n		// func(opt *charts.ChartOption) {\r\n		// 	opt.SeriesList[0].MarkPoint = charts.NewMarkPoint(\r\n		// 		charts.SeriesMarkDataTypeMax,\r\n		// 		charts.SeriesMarkDataTypeMin,\r\n		// 	)\r\n		// 	opt.SeriesList[0].MarkLine = charts.NewMarkLine(\r\n		// 		charts.SeriesMarkDataTypeAverage,\r\n		// 	)\r\n		// },\r\n	)\r\n	if err != nil {\r\n		panic(err)\r\n	}\r\n\r\n	buf, err := p.Bytes()\r\n	if err != nil {\r\n		panic(err)\r\n	}\r\n	f, err := os.OpenFile(\"bar.jpg\", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)\r\n	if err != nil {\r\n		fmt.Println(\"创建文件失败\")\r\n	}\r\n	defer f.Close()\r\n\r\n	f.Write(buf)\r\n}\r\n','',1),
(151,3,'golang 生成二维码库 读取二维码库','package main\r\n\r\nimport \"github.com/skip2/go-qrcode\"\r\n\r\nfunc main() {\r\n	qrcode.WriteFile(\"http://jyan.360xyz.cn/api/date\", qrcode.Medium, 256, \"./qrcode.png\")\r\n}\r\n\r\npackage main\r\n\r\nimport (\r\n	\"fmt\"\r\n	\"os\"\r\n\r\n	\"github.com/tuotoo/qrcode\"\r\n)\r\n\r\nfunc main() {\r\n	fi, err := os.Open(\"./qrcode.png\")\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n		return\r\n	}\r\n	defer fi.Close()\r\n	qrmatrix, err := qrcode.Decode(fi)\r\n	if err != nil {\r\n		fmt.Println(err.Error())\r\n		return\r\n	}\r\n	fmt.Println(qrmatrix.Content)\r\n}\r\n','',1),
(152,3,'自动下载','		//合成完成自动下载\r\n		ctx.Writer.WriteHeader(http.StatusOK)\r\n		ctx.Header(\"Content-Disposition\", \"attachment; filename=qrcode.png\")\r\n		ctx.Header(\"Content-Type\", \"application/text/plain\")\r\n		ctx.Header(\"Accept-Length\", fmt.Sprintf(\"%d\", len(bs)))\r\n		ctx.Writer.Write(bs)','',1),
(153,3,'循坏介绍','continue //跳出本次循坏,执行下一次循环\r\nbreak  //只能结束本循环,对于更上层循环结束不了\r\n//如果需要结束上层循坏需要bool判断,在上层循坏使用break\r\n','',1),
(174,4,'DH11温湿度传感器32与8266代码通用','#include <OneWire.h>\r\n#include <DallasTemperature.h>\r\n#include <Adafruit_Sensor.h>\r\n#include <DHT.h>\r\n#include <DHT_U.h>\r\n#define DHTPIN 0  // 数字引脚连接DHT传感器\r\n// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --\r\n#define DHTTYPE DHT11  // DHT 11\r\nDHT_Unified dht(DHTPIN, DHTTYPE);\r\nfloat humidity;\r\nfloat temperature;\r\nvoid setup() {\r\n  // put your setup code here, to run once:\r\n\r\n  Serial.begin(115200);\r\n  dht.begin();\r\n  sensor_t sensor;\r\n  dht.temperature().getSensor(&sensor);\r\n  dht.humidity().getSensor(&sensor);\r\n}\r\n\r\nvoid loop() {\r\n  sensors_event_t event;\r\n  dht.temperature().getEvent(&event);\r\n  if (isnan(event.temperature)) {\r\n    Serial.println(F(\"Error reading temperature!\"));\r\n  } else {\r\n    temperature = event.temperature;\r\n  }\r\n  delay(500);\r\n  // Get humidity event and print its value.\r\n  dht.humidity().getEvent(&event);\r\n  if (isnan(event.relative_humidity)) {\r\n    Serial.println(F(\"Error reading humidity!\"));\r\n  } else {\r\n    humidity = event.relative_humidity;\r\n  }\r\n  String th = String(temperature) + \",\" + String(humidity);\r\n  Serial.println(th);\r\n  delay(3000);\r\n}\r\n','',1),
(175,4,'Micro SD 连接ESP32DEVKIT V1','vcc  -> VIN 或 3.3V\r\nMOSI -> D23\r\nMISO -> D19\r\nSCK -> D18\r\n','',1),
(176,4,'点灯科技+tft屏幕心率血氧','#define BLINKER_WIFI\r\n#include <Arduino.h>\r\n#include <Blinker.h>\r\n#include <TFT_eSPI.h>\r\n#include <Wire.h>\r\n#include \"MAX30105.h\"\r\n#include \"spo2_algorithm.h\"\r\nMAX30105 particleSensor;\r\n// 存储红外光和红光数据的缓冲区\r\nuint32_t irBuffer[100];\r\nuint32_t redBuffer[100];\r\n// 测量得到的血氧饱和度和心率值\r\nint32_t spo2;\r\nint8_t validSPO2;\r\nint32_t heartRate;\r\nint8_t validHeartRate;\r\n// 引脚定义\r\nbyte pulseLED = 21;\r\nbyte readLED = 22;\r\n\r\nchar auth[] = \"74f197d54ce2\";   //点灯科技 秘钥\r\nchar ssid[] = \"webserver\";      //输入你的WIFI名\r\nchar pswd[] = \"www.360xyz.cn\";  //输入你的WIFI密码\r\n\r\nBlinkerNumber Number1(\"num-auq\");  //心率\r\nBlinkerNumber Number2(\"num-2lc\");  //血氧\r\n\r\nTFT_eSPI tft = TFT_eSPI();  //屏幕操作对象\r\n\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  pinMode(pulseLED, OUTPUT);\r\n  pinMode(readLED, OUTPUT);\r\n  pinMode(pulseLED, OUTPUT);\r\n  pinMode(readLED, OUTPUT);\r\n\r\n  // 初始化传感器\r\n  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {\r\n    Serial.println(\"MAX30105 was not found. Please check wiring/power.\");\r\n    while (1)\r\n      ;\r\n  }\r\n  // 设置传感器参数\r\n  byte ledBrightness = 60;\r\n  byte sampleAverage = 4;\r\n  byte ledMode = 2;\r\n  byte sampleRate = 100;\r\n  int pulseWidth = 411;\r\n  int adcRange = 4096;\r\n  particleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange);\r\n\r\n\r\n  Blinker.begin(auth, ssid, pswd);   //连接WIFI\r\n  Blinker.attachData(dataRead);      //绑定dataRead\r\n  delay(500);\r\n\r\n  tft.init();                    //屏幕初始化\r\n  tft.fillScreen(TFT_BLACK);     //屏幕颜色\r\n  tft.setTextColor(TFT_YELLOW);  //设置文本颜色为黄色\r\n  //tft.setTextSize(1);            //设置文字的大小 (1~7)\r\n}\r\n\r\nvoid loop() {\r\n  Blinker.run();\r\n\r\n  // 读取 30 个样本\r\n  int bufferLength = 30;\r\n  for (byte i = 0; i < bufferLength; i++) {\r\n    while (particleSensor.available() == false) {\r\n      particleSensor.check();\r\n    }\r\n    redBuffer[i] = particleSensor.getRed();\r\n    irBuffer[i] = particleSensor.getIR();\r\n    particleSensor.nextSample();\r\n    //Serial.print(\"red=\");\r\n    //Serial.print(redBuffer[i], DEC);\r\n    //Serial.print(\", ir=\");\r\n    //Serial.println(irBuffer[i], DEC);\r\n  }\r\n  // 计算血氧饱和度和心率\r\n  maxim_heart_rate_and_oxygen_saturation(irBuffer, bufferLength, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate);\r\n  // 输出结果\r\n  if (validHeartRate == 1 && validSPO2 == 1) {\r\n    int32_t temHR = heartRate / 2.4;\r\n    Serial.print(\"心率 \");\r\n    Serial.print(temHR);\r\n    Serial.print(\", 血氧 \");\r\n    Serial.println(spo2, DEC);\r\n\r\n    Number1.print(temHR);\r\n    Number2.print(spo2);\r\n    tft.fillScreen(TFT_BLACK);\r\n    tft.setCursor(30, 20, 2);             //设置起始坐标(10, 10)，1 号字M体\r\n    tft.println(\"HR: \" + String(temHR));  //显示文字\r\n\r\n    tft.setCursor(30, 100, 2);  //设置起始坐标(10, 10)，1 号字体\r\n    tft.println(\"S2: \" + String(spo2));\r\n  } else {\r\n    Serial.println(\"检测失败,请手指放好位置\");\r\n    //Number1.print(0);\r\n    //Number2.print(0);\r\n    // tft.fillScreen(TFT_BLACK);\r\n    // tft.setCursor(30, 20, 2);   //设置起始坐标(10, 10)，1 号字M体\r\n    // tft.println(\"HR: 0\");       //显示文字\r\n    // tft.setCursor(30, 100, 2);  //设置起始坐标(10, 10)，1 号字体\r\n    // tft.println(\"S2: 0\");\r\n  }\r\n}\r\n\r\nvoid dataRead(const String& data) {\r\n  BLINKER_LOG(\"Blinker readString: \", data);\r\n}\r\n','',1),
(177,4,'TFT_eSPI.h ESP32 DEVKIT V1 配置使用','// libraries/TFT_eSPI/User_Setup.h  \r\n//使用 ESP32 DEVKIT V1 芯片\r\n// 85行 #define TFT_WIDTH\r\n// 88 行找出 尺寸高度  #define TFT_HEIGHT\r\n\r\n// 223行\r\n// #define TFT_MOSI 15 // 在一些显示驱动器板中，它可能会写成“SDA”等等  Q\r\n// #define TFT_SCLK 14  //SCL    14\r\n// #define TFT_CS   5  // 芯片选择控制引脚  Q\r\n// #define TFT_DC   27  // 数据命令控制引脚  D2\r\n// #define TFT_RST  33  // 重置引脚(可连接至Arduino重置引脚) Q\r\n// #define TFT_BL   22  // LED背光\r\n#include <Arduino.h>\r\n#include <SPI.h> //导入库\r\n#include <TFT_eSPI.h> \r\n  \r\nTFT_eSPI tft = TFT_eSPI(); \r\nvoid setup() {\r\n  // put your setup code here, to run once:\r\n  Serial.begin(115200);\r\n  tft.init();                               //初始化\r\n  tft.fillScreen(TFT_BLACK);                //屏幕颜色\r\n  tft.setCursor(10, 10, 1);                 //设置起始坐标(10, 10)，1 号字M体\r\n  tft.setTextColor(TFT_YELLOW);             //设置文本颜色为黄色\r\n  tft.setTextSize(2);                       //设置文字的大小 (1~7)\r\n  tft.println(\"TFT_Text\");                  //显示文字\r\n  \r\n  tft.fillCircle(30,30,10,TFT_BLUE);        //画圆\r\n  tft.drawLine(10,50, 118, 50, TFT_WHITE);  //画线\r\n  tft.drawPixel(70,70,TFT_RED);             //画点\r\n  \r\n  tft.setTextColor(TFT_WHITE,TFT_BLUE);     //设置文字颜色和背景颜色\r\n  tft.setCursor(10, 80, 1);                 //设置起始坐标(10, 10)，1 号字体\r\n  tft.println(\"GEJC\");                  //显示文字\r\n}\r\nvoid loop() {\r\n  // put your main code here, to run repeatedly:\r\n\r\n}','',1),
(178,4,'nodeMCUesp8266通用OTA','#include <ESP8266WiFi.h>\r\n#include <ESP8266HTTPClient.h>\r\n#include <ESP8266httpUpdate.h>\r\nWiFiClient wificlient;\r\nString ssid=\"TP-LINK_C97D\"; //你的wifif名\r\nString wifipwd=\"19805282968\"; //你的wifi密码\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  delay(500);\r\n  WiFi.begin(ssid.c_str(), wifipwd.c_str());\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"Wifi->connet\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"Wifi 连接成功\");\r\n      break;\r\n    }\r\n  }\r\n  String upUrl = esp8266post();\r\n  if (upUrl.length() > 10) {\r\n    upUrl.trim(); \r\n    while (1) {\r\n      ESPhttpUpdate.onStart(update_started);\r\n      ESPhttpUpdate.onEnd(update_finished);\r\n      ESPhttpUpdate.onProgress(update_progress);\r\n      ESPhttpUpdate.onError(update_error);\r\n      ESPhttpUpdate.update(wificlient, upUrl);\r\n\r\n    }\r\n    ESP.restart();\r\n  }\r\n}\r\n\r\nvoid loop() {\r\n  // put your main code here, to run repeatedly:\r\n}\r\nvoid update_started() {\r\n  Serial.println(\"CALLBACK:  HTTP update process started\");\r\n}\r\n\r\nvoid update_finished() {\r\n  Serial.println(\"CALLBACK:  HTTP update process finished\");\r\n}\r\nString esp8266post() {\r\n  HTTPClient http;\r\n  String url = \"http://jyan.nobiggie.cn/query/vs\";\r\n  http.begin(wificlient, url);\r\n  http.setTimeout(3000);\r\n  http.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n  String postData = \"vs=abc1124267212\";\r\n  int httpResponseCode = http.POST(postData);\r\n  if (httpResponseCode > 0) {\r\n    String response = http.getString();\r\n    if (response != \"false\") {\r\n      return response;\r\n    }\r\n  }\r\n  return \"\";\r\n}\r\nvoid update_progress(int cur, int total) {\r\n  Serial.printf(\"CALLBACK:  HTTP update process at %d of %d bytes...\\n\", cur, total);\r\n}\r\n\r\nvoid update_error(int err) {\r\n  Serial.printf(\"CALLBACK:  HTTP update fatal error code %d\\n\", err);\r\n}','',1),
(179,4,'esp32 HTTPUpdate OTA','#include <Arduino.h>\r\n#include <WiFi.h>\r\n#include <HTTPClient.h>\r\n#include <HTTPUpdate.h>\r\nWiFiClient wificlient;\r\nString ssid=\"webserver\";\r\nString wifipwd=\"www.360xyz.cn\";\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  WiFi.begin(ssid.c_str(), wifipwd.c_str());\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"wifiConnet...\");\r\n  while (1) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"wifi connet success\");\r\n      break;\r\n    }\r\n  }\r\n  delay(500);\r\n  String re = esp32post();\r\n  Serial.println(re);\r\n  re.trim();\r\n  if (re.length()>10) {\r\n    while (1) {\r\n      httpUpdate.onStart(update_started);\r\n      httpUpdate.onEnd(update_finished);\r\n      httpUpdate.onProgress(update_progress);\r\n      httpUpdate.onError(update_error);\r\n      t_httpUpdate_return ret = httpUpdate.update(wificlient, re);\r\n      //t_httpUpdate_return ret = httpUpdate.update(wificlient, \"server\", 80, \"/file.bin\");\r\n      switch (ret) {\r\n        case HTTP_UPDATE_FAILED:\r\n          Serial.printf(\"HTTP_UPDATE_FAILED Error (%d): %s\\n\", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());\r\n          break;\r\n        case HTTP_UPDATE_NO_UPDATES:\r\n          Serial.println(\"HTTP_UPDATE_NO_UPDATES\");\r\n          break;\r\n        case HTTP_UPDATE_OK:\r\n          Serial.println(\"HTTP_UPDATE_OK\");\r\n          break;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nvoid loop() {\r\n  // put your main code here, to run repeatedly:\r\n  delay(5000);\r\n  Serial.println(\"123\");\r\n}\r\nvoid update_started() {\r\n  Serial.println(\"CALLBACK:  HTTP update process started\");\r\n}\r\n\r\nvoid update_finished() {\r\n  Serial.println(\"CALLBACK:  HTTP update process finished\");\r\n}\r\n\r\nvoid update_progress(int cur, int total) {\r\n  Serial.printf(\"CALLBACK:  HTTP update process at %d of %d bytes...\\n\", cur, total);\r\n}\r\n\r\nvoid update_error(int err) {\r\n  Serial.printf(\"CALLBACK:  HTTP update fatal error code %d\\n\", err);\r\n}\r\n\r\nString esp32post() {\r\n  HTTPClient http;\r\n  String url = \"http://jyan.nobiggie.cn/query/vs\";\r\n  http.begin(wificlient, url);\r\n  http.setTimeout(3000);\r\n  String postStr = \"version=nodemcuesp32s01\";\r\n  char dataBuff[postStr.length()];\r\n  strcpy(dataBuff, postStr.c_str());\r\n  http.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n  int httpResponseCode = http.POST(dataBuff);\r\n  if (httpResponseCode > 0) {\r\n    String response = http.getString();\r\n    return response;\r\n  }\r\n  return \"\";\r\n}','',1),
(180,4,'摄像头4组开关温湿度1','/* *****************************************************************\r\n *\r\n * Download latest Blinker library here:\r\n * https://github.com/blinker-iot/blinker-library/archive/master.zip\r\n * \r\n * \r\n * Blinker is a cross-hardware, cross-platform solution for the IoT. \r\n * It provides APP, device and server support, \r\n * and uses public cloud services for data transmission and storage.\r\n * It can be used in smart home, data monitoring and other fields \r\n * to help users build Internet of Things projects better and faster.\r\n * \r\n * Make sure installed 2.7.4 or later ESP8266/Arduino package,\r\n * if use ESP8266 with Blinker.\r\n * https://github.com/esp8266/Arduino/releases\r\n * \r\n * Make sure installed 1.0.5 or later ESP32/Arduino package,\r\n * if use ESP32 with Blinker.\r\n * https://github.com/espressif/arduino-esp32/releases\r\n * \r\n * Docs: https://diandeng.tech/doc\r\n *       \r\n * \r\n * *****************************************************************\r\n * \r\n * Blinker 库下载地址:\r\n * https://github.com/blinker-iot/blinker-library/archive/master.zip\r\n * \r\n * Blinker 是一套跨硬件、跨平台的物联网解决方案，提供APP端、设备端、\r\n * 服务器端支持，使用公有云服务进行数据传输存储。可用于智能家居、\r\n * 数据监测等领域，可以帮助用户更好更快地搭建物联网项目。\r\n * \r\n * 如果使用 ESP8266 接入 Blinker,\r\n * 请确保安装了 2.7.4 或更新的 ESP8266/Arduino 支持包。\r\n * https://github.com/esp8266/Arduino/releases\r\n * \r\n * 如果使用 ESP32 接入 Blinker,\r\n * 请确保安装了 1.0.5 或更新的 ESP32/Arduino 支持包。\r\n * https://github.com/espressif/arduino-esp32/releases\r\n * \r\n * 文档: https://diandeng.tech/doc\r\n *       \r\n * \r\n * *****************************************************************/\r\n\r\n#define BLINKER_WIFI\r\n\r\n#include <Blinker.h>\r\n#include \"ESP32_CAM_SERVER.h\"\r\n\r\nchar ssid[] = \"webserver\";\r\nchar wifipwd[] = \"www.360xyz.cn\";\r\nchar auth[] = \"7eb873d19e73\";\r\nint D12 = 12;\r\nint D13 = 13;\r\nint D15 = 15;\r\nint D14 = 14;\r\nBlinkerButton Button1(\"btn-xyb\");  //\r\nBlinkerButton Button2(\"btn-902\");  //\r\nBlinkerButton Button3(\"btn-fmc\");  //\r\nBlinkerButton Button4(\"btn-126\");  //\r\n\r\nbool d1 = false;\r\nbool d2 = false;\r\nbool d5 = false;\r\nbool d6 = false;\r\nbool setup_camera = false;\r\n\r\nvoid dataRead(const String& data) {\r\n  BLINKER_LOG(\"Blinker readString: \", data);\r\n\r\n  Blinker.vibrate();\r\n\r\n  uint32_t BlinkerTime = millis();\r\n\r\n  Blinker.print(\"millis\", BlinkerTime);\r\n}\r\n\r\nvoid setup() {\r\n  pinMode(D12, OUTPUT);\r\n  pinMode(D13, OUTPUT);\r\n  pinMode(D15, OUTPUT);\r\n  pinMode(D14, OUTPUT);\r\n  digitalWrite(D12, LOW);\r\n  digitalWrite(D13, LOW);\r\n  digitalWrite(D15, LOW);\r\n  digitalWrite(D14, LOW);\r\n  Serial.begin(115200);\r\n  BLINKER_DEBUG.stream(Serial);\r\n\r\n  pinMode(LED_BUILTIN, OUTPUT);\r\n  digitalWrite(LED_BUILTIN, LOW);\r\n\r\n  Blinker.begin(auth, ssid, wifipwd);\r\n  Blinker.attachData(dataRead);\r\n  Button1.attach(button1_callback);\r\n  Button2.attach(button2_callback);\r\n  Button3.attach(button3_callback);\r\n  Button4.attach(button4_callback);\r\n}\r\n\r\nvoid loop() {\r\n  Blinker.run();\r\n\r\n  if (Blinker.connected() && !setup_camera) {\r\n    setupCamera();\r\n    setup_camera = true;\r\n\r\n    Blinker.printObject(\"video\", \"{\\\"str\\\":\\\"mjpg\\\",\\\"url\\\":\\\"http://\" + WiFi.localIP().toString() + \"\\\"}\");\r\n  }\r\n}\r\nvoid button1_callback(const String& state) {\r\n  if (d1 == true) {\r\n    d1 = false;\r\n    digitalWrite(D12, LOW);\r\n    Button1.color(\"#000000\");\r\n    Button1.text(\"关\");\r\n  } else {\r\n    d1 = true;\r\n    digitalWrite(D12, HIGH);\r\n    Button1.color(\"#00FF00\");\r\n    Button1.text(\"开\");\r\n  }\r\n  Button1.print();\r\n}\r\nvoid button2_callback(const String& state) {\r\n  if (d2 == true) {\r\n    d2 = false;\r\n    digitalWrite(D13, LOW);\r\n    Button2.color(\"#000000\");\r\n    Button2.text(\"关\");\r\n  } else {\r\n    d2 = true;\r\n    digitalWrite(D13, HIGH);\r\n    Button2.color(\"#00FF00\");\r\n    Button2.text(\"开\");\r\n  }\r\n  Button2.print();\r\n}\r\nvoid button3_callback(const String& state) {\r\n  if (d5 == true) {\r\n    d5 = false;\r\n    digitalWrite(D15, LOW);\r\n    Button3.color(\"#000000\");\r\n    Button3.text(\"关\");\r\n  } else {\r\n    d5 = true;\r\n    digitalWrite(D15, HIGH);\r\n    Button3.color(\"#00FF00\");\r\n    Button3.text(\"开\");\r\n  }\r\n  Button3.print();\r\n}\r\nvoid button4_callback(const String& state) {\r\n  if (d6 == true) {\r\n    d6 = false;\r\n    digitalWrite(D14, LOW);\r\n    Button4.color(\"#000000\");\r\n    Button4.text(\"关\");\r\n  } else {\r\n    d6 = true;\r\n    digitalWrite(D14, HIGH);\r\n    Button4.color(\"#00FF00\");\r\n    Button4.text(\"开\");\r\n  }\r\n  Button4.print();\r\n}\r\n','',1),
(181,4,'智能照明','#define BLINKER_WIFI\r\n#include <Arduino.h>\r\n#include <Blinker.h>\r\nchar auth[] = \"1fac905d4e32\";\r\nchar ssid[] = \"webserver\";      //你的wifi\r\nchar pswd[] = \"www.360xyz.cn\";  //你的WIFI密码\r\n\r\n#define D5 14                      //人体感应\r\n#define D6 12                      //光敏感应\r\n#define D8 15                       //灯\r\nBlinkerButton Button1(\"btn-64g\");  //遥控灯开关\r\nbool lightStatu = false;           //默认灯是关的状态\r\nbool onOff = false;                //开关状态 默认关\r\nvoid setup() {\r\n  pinMode(D5, INPUT);\r\n  pinMode(D6, INPUT);\r\n  pinMode(D8, OUTPUT);\r\n  digitalWrite(D8, LOW);\r\n  // put your setup code here, to run once:\r\n  Serial.begin(115200);\r\n  Blinker.begin(auth, ssid, pswd);\r\n  Button1.attach(button1_callback);\r\n  delay(500);\r\n}\r\n\r\nvoid loop() {\r\n  // put your main code here, to run repeatedly:\r\n  Blinker.run();\r\n  //晚上光敏导通  全亮\r\n  if (digitalRead(D6) == HIGH) {\r\n    if (lightStatu == false) {\r\n      lightStatu = true;\r\n      digitalWrite(D8, HIGH);  //点亮灯\r\n      Button1.color(\"#00FF00\");\r\n      Button1.text(\"开\");\r\n      Button1.print();\r\n      Serial.println(\"晚上光敏导通  全亮\");\r\n    }\r\n  } else {\r\n    //白天\r\n    //并且是开灯状态 并且 人体感应 没有人    关灯\r\n    if (lightStatu == true && digitalRead(D5) == LOW && onOff == false) {\r\n      lightStatu = false;\r\n      digitalWrite(D8, LOW);  //关灯\r\n      Button1.color(\"#000000\");\r\n      Button1.text(\"关\");\r\n      Button1.print();\r\n      Serial.println(\"并且是开灯状态 并且 人体感应 没有人    ->关灯\");\r\n    } else {\r\n      //人体感应 有人 并且灯没有点亮\r\n      if (digitalRead(D5) == HIGH && lightStatu == false) {\r\n        lightStatu = true;       //点亮\r\n        digitalWrite(D8, HIGH);  //点亮灯\r\n        Button1.color(\"#00FF00\");\r\n        Button1.text(\"开\");\r\n        Button1.print();\r\n        Serial.println(\"人体感应 有人 并且灯没有点亮\");\r\n      }\r\n      //如果人体感应 没有人 并且 灯的状态是开的 并且没有手动开灯\r\n      if (digitalRead(D5) == LOW && lightStatu == true && onOff == false) {\r\n        lightStatu = false;\r\n        digitalWrite(D8, LOW);  //关灯\r\n        Button1.color(\"#000000\");\r\n        Button1.text(\"关\");\r\n        Button1.print();\r\n        Serial.println(\"如果人体感应 没有人 并且 灯的状态是开的 并且没有手动开灯\");\r\n      }\r\n    }\r\n  }\r\n}\r\nvoid button1_callback(const String& state) {\r\n  //BLINKER_LOG(\"get button state: \", state);\r\n  if (lightStatu == false) {\r\n    Button1.color(\"#00FF00\");\r\n    Button1.text(\"开\");\r\n    Button1.print();\r\n    lightStatu = true;\r\n    digitalWrite(D8, HIGH);\r\n    onOff = true;\r\n  } else {\r\n    Button1.color(\"#000000\");\r\n    Button1.text(\"关\");\r\n    Button1.print();\r\n    lightStatu = false;\r\n    digitalWrite(D8, LOW);\r\n    onOff = false;\r\n  }\r\n}\r\n','',1),
(182,4,'ESP8266 http Post与Get请求','#include <ESP8266WiFi.h>\r\n#include <ESP8266HTTPClient.h>\r\nWiFiClient wificlient;\r\nvoid setup() {\r\n  // put your setup code here, to run once:\r\n  Serial.begin(115200);\r\n  WiFi.begin(\"webserver\", \"www.360xyz.cn\");\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"FlashConnetWifi->connet\");\r\n  while (1) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"FlashConnetWifi 闪存配置连接成功\");\r\n      break;\r\n    }\r\n  }\r\n}\r\n\r\nvoid loop() {\r\n\r\n  String a = esp8266Get(\"http://server.nobiggie.cn/query/date\");\r\n  Serial.println(a);\r\n  delay(5000);\r\n}\r\nString esp8266Get(String string) {\r\n  HTTPClient http;\r\n  String response;\r\n  http.begin(wificlient, string);\r\n  http.setTimeout(3000);\r\n  int httpCode = http.GET();\r\n  // httpCode will be negative on error\r\n  if (httpCode == 200) {\r\n    response = http.getString();\r\n    return response;\r\n  } else {\r\n    return \"\";\r\n  }\r\n  http.end();\r\n}\r\nString esp8266Post(String url, String postStr) {\r\n  HTTPClient http;\r\n  String response;\r\n  http.begin(wificlient, url);\r\n  http.setTimeout(3000);\r\n  //需要传输的数据\r\n  char dataBuff[postStr.length()];\r\n  strcpy(dataBuff, postStr.c_str());\r\n  //头信息，需要的反注释就可以\r\n  //http.addHeader(\"Content-Type\", \"application/json;charset=utf-8\");\r\n  http.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n  int httpCode = http.POST(dataBuff);\r\n  if (httpCode == 200) {\r\n    response = http.getString();\r\n    return response;\r\n  } else {\r\n    return \"\";\r\n  }\r\n  http.end();\r\n}','',1),
(183,4,'ESP32 http POST与GET请求','String esp32get() {\r\n  HTTPClient http;\r\n  String response;\r\n  String urlstr=\"http://jyan.nobiggie.cn/query/version?version=123456\";\r\n  http.begin(wificlient, urlstr);\r\n  http.setTimeout(3000);\r\n  int httpCode = http.GET();\r\n  // httpCode will be negative on error\r\n  if (httpCode == 200) {\r\n    response = http.getString();\r\n    return response;\r\n  } else {\r\n    return \"\";\r\n  }\r\n  http.end();\r\n}\r\nString esp32post() {\r\n  HTTPClient http;\r\n  String url = \"http://jyan.nobiggie.cn/query/version\";  // 替换为你的POST接口地址\r\n  http.begin(wificlient, url);\r\n  http.setTimeout(3000);\r\n  String postStr = \"version=esp32test10\";\r\n  char dataBuff[postStr.length()];\r\n  strcpy(dataBuff, postStr.c_str());\r\n  http.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n  int httpResponseCode = http.POST(dataBuff);\r\n  if (httpResponseCode > 0) {\r\n    String response = http.getString();\r\n    return response;\r\n  }\r\n  return \"\";\r\n}','',1),
(184,4,'巴法云 get post控制设备','获取设备是否在线\r\nhttps://apis.bemfa.com/va/online?uid=07b120062a7972cf9831d7d9bc8012bc&topic=nobiggie01&type=1\r\n返回 \r\n{\r\n    \"code\": 0,  //0代表 成功\r\n    \"message\": \"OK\",\r\n    \"data\": false //true 为在线\r\n}\r\n获取设备所有主题\r\nhttps://apis.bemfa.com/va/alltopic?uid=07b120062a7972cf9831d7d9bc8012bc&type=1\r\n{\r\n    \"code\": 0,\r\n    \"message\": \"OK\",\r\n    \"data\": [\r\n        {\r\n            \"topic\": \"nobiggie01\",\r\n            \"msg\": \"\",\r\n            \"name\": \"\",\r\n            \"room\": \"\",\r\n            \"online\": false, //是否在线\r\n            \"tid\": \"\",\r\n            \"sid\": \"\", //如果是分享设备，此字段是分享者密钥\r\n            \"time\": \"2023-12-15 17:58:05\", //消息发送的时间，时区UTC/GMT+08:00\r\n            \"unix\": 1702634285 //消息发送的时间戳\r\n        }\r\n    ]\r\n}\r\n\r\n获取主题消息，支持GET协议\r\nhttps://apis.bemfa.com/va/getmsg?uid=07b120062a7972cf9831d7d9bc8012bc&topic=nobiggie01&type=1\r\n\r\n{\r\n    \"code\": 0,\r\n    \"message\": \"OK\",\r\n    \"data\": [\r\n        {\r\n            \"msg\": \"啊哈哈哈哈\",\r\n            \"time\": \"2023-12-18 11:09:04\",\r\n            \"unix\": 1702868944\r\n        }\r\n    ]\r\n}\r\n\r\n\r\n向主题推送消息，支持POST协议\r\nhttps://apis.bemfa.com/va/postmsg\r\n\r\nuid=07b120062a7972cf9831d7d9bc8012bc&topic=nobiggie01&type=1&msg=on&wemsg=on\r\n\r\n\r\n定时控制\r\n添加定时+删除定时 采用POST接口\r\n\r\n数据类型 \"Content-Type\": \"application/x-www-form-urlencoded\"\r\nhttps://api.bemfa.com/cloud/settime/v1/\r\nuid=07b120062a7972cf9831d7d9bc8012bc&topic=nobiggie01&type=1&msg=on&time=12:00:00&action=add    //add添加定时  del删除定时\r\n返回\r\n{\"code\":4003013,\"status\":\"add ok\"}  //成功\r\n删除 code:4003014 表示删除成功\r\n','',1),
(185,4,'超声波智能垃圾桶','#include <Arduino.h>\r\n#include <ESP32Servo.h>\r\nconst int trigPin = 4;\r\nconst int echoPin = 16;\r\nServo servo1;\r\nint pos = 0;\r\nbool bl;\r\nint minUs = 500;   //0度是脉宽,单位us\r\nint maxUs = 2500;  //180度脉宽,单位us\r\nint servo1Pin = 15;\r\nvoid setup() {\r\n  // put your setup code here, to run once:\r\n  Serial.begin(115200);\r\n  delay(200);\r\n  pinMode(trigPin, OUTPUT);\r\n  pinMode(echoPin, INPUT);\r\n  ESP32PWM::allocateTimer(0);  //指定使用的硬件定时器 esp32有4个\r\n  ESP32PWM::allocateTimer(1);\r\n  ESP32PWM::allocateTimer(2);\r\n  ESP32PWM::allocateTimer(3);\r\n  servo1.setPeriodHertz(50);  //指定PWM频率\r\n  servo1.attach(servo1Pin, minUs, maxUs);\r\n // servo1.write(0);  //转到指定角度(0-180);\r\n  //servo1.detach();  //不需要的时候将引脚和ledc分离\r\n}\r\n\r\nvoid loop() {\r\n  // put your main code here, to run repeatedly:\r\n  digitalWrite(trigPin, HIGH);\r\n  delayMicroseconds(15);  //us 间隔15微秒的脉冲信号供应给超声波HC-SR04\r\n  digitalWrite(trigPin, LOW);\r\n\r\n  auto t = pulseIn(echoPin, HIGH);\r\n  double dis = t * 0.01715;  //cm 通过接收超声波返回的时间差计算距离 单位厘米\r\n  Serial.println(dis);\r\n  if (dis < 27) {\r\n    bl = true;\r\n  } else {\r\n    if (bl == true) {  //离开垃圾桶后触发 如果一直在感应区 bl 一直是true,首次是true得下次false触发\r\n      Serial.println(\"打开盖子到特定角度..........例如140度后停止............5秒后关闭盖子........................\");\r\n      servo1.write(140);  //转到指定角度(0-180);\r\n      //servo1.detach();    //不需要的时候将引脚和ledc分离\r\n      delay(5000);\r\n      servo1.write(0);  //转到指定角度(0-180);\r\n     // servo1.detach();  //不需要的时候将引脚和ledc分离\r\n      Serial.println(\"5秒了关闭盖子中.....................舵机恢复到0角度后停止...................................\");\r\n    }\r\n    bl = false;\r\n  }\r\n  delay(200);\r\n}\r\n','',1),
(186,4,'网络音响','#include <Arduino.h>\r\n#include <WiFi.h>\r\n#include <WiFiClientSecure.h>\r\n#include <HTTPClient.h>\r\n#include <WebServer.h>\r\n#include <FS.h>\r\n#include \"SPIFFS.h\"\r\n#include \"ESPmDNS.h\"\r\n#include <Ticker.h>\r\n#include <Audio.h>\r\n\r\nTicker myTicker;\r\n//被读取的文件位置和名称\r\nString flash_wifi = \"/wifi.txt\";\r\nWebServer webServer(80);  // 创建网络服务器对象，HTTP服务的标准端口为：80\r\nString ssid = \"\";\r\nString passwd = \"\";\r\nString html;\r\nString espIp;\r\nString localServerIP;\r\n\r\nWiFiClient client;\r\nString localserver;\r\n// Digital I/O used\r\n#define I2S_DOUT 25\r\n#define I2S_BCLK 26\r\n#define I2S_LRC 27\r\nAudio audio;\r\nvoid hexdump(const void *mem, uint32_t len, uint8_t cols = 16) {\r\n  const uint8_t *src = (const uint8_t *)mem;\r\n  Serial.printf(\"\\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)\", (ptrdiff_t)src, len, len);\r\n  for (uint32_t i = 0; i < len; i++) {\r\n    if (i % cols == 0) {\r\n      Serial.printf(\"\\n[0x%08X] 0x%08X: \", (ptrdiff_t)src, i);\r\n    }\r\n    Serial.printf(\"%02X \", *src);\r\n    src++;\r\n  }\r\n  Serial.printf(\"\\n\");\r\n}\r\n\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  //Serial.setDebugOutput(true);\r\n  if (FlashConnetWifi() == false) {\r\n    HtmlSetWifi();\r\n  }\r\n  localserver = \"http://\" + localServerIP + \"/apiview/everyday5english\";\r\n  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);\r\n  audio.setVolume(19);  // 0...21   音量大小\r\n  String ttmps1 = HttpPost(localserver, \"MusicId=0\");\r\n  String tmps1 = \"http://\" + localServerIP + \"/\" + ttmps1;\r\n  //Serial.println(tmps1);\r\n  audio.connecttohost(tmps1.c_str());\r\n  delay(500);\r\n}\r\n\r\nvoid loop() {\r\n  audio.loop();\r\n}\r\n\r\nString HttpPost(String url, String postStr) {\r\n  HTTPClient http;\r\n  String response;\r\n  http.begin(client, url);\r\n  http.setTimeout(2000);\r\n  //需要传输的数据\r\n  char dataBuff[postStr.length()];\r\n  strcpy(dataBuff, postStr.c_str());\r\n  //头信息，需要的反注释就可以\r\n  http.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n  int httpCode = http.POST(dataBuff);\r\n  if (httpCode == 200) {\r\n    response = http.getString();\r\n    return response;\r\n  } else {\r\n    return \"\";\r\n  }\r\n  http.end();\r\n}\r\nvoid HtmlSetWifi() {\r\n  WifiScan();\r\n  ApOpen();\r\n  delay(1000);\r\n  Serial.println(\"启动网页\");\r\n  //5分后重启 防止停电后复电，路由器连接WIFI速度慢于ESP导致ESP连接不到路由器进入无限AP模式，所以这里只让AP激活5分钟后就重启\r\n  myTicker.once(300, EspRestart);\r\n  delay(200);\r\n  WebServerOpen();\r\n  while (1) {\r\n    webServer.handleClient();  // 检查网络服务请求并处理\r\n  }\r\n}\r\n\r\nvoid EspRestart() {\r\n  ESP.restart();\r\n}\r\n//扫描附件WIFI\r\nvoid WifiScan() {\r\n  WiFi.disconnect();\r\n  Serial.begin(115200);\r\n  WiFi.mode(WIFI_STA);\r\n  delay(100);\r\n  int n = WiFi.scanNetworks();\r\n  if (n > 0) {\r\n    Serial.println(n);\r\n    String a = \"附近WiFi <select id=\\\"ssid\\\">\";\r\n    for (int i = 0; i < n; i++) {\r\n      Serial.println(WiFi.SSID(i));\r\n      a = a + \"<option value=\\\"\" + WiFi.SSID(i) + \"\\\">\" + WiFi.SSID(i) + \"</option>\";\r\n      delay(50);\r\n    }\r\n    String HtmlStart = String(\"\") + \"<!DOCTYPE html>\" + \"<html>\" + \"<head>\" + \"<meta charset=\\\"utf-8\\\">\" + \"<meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\\\" />\" + \"<title>设置WiFi</title>\" + \"<link rel=\\\"stylesheet\\\" href=\\\"\\\">\" + \"</head>\" + \"<script>\" + \"onload  = function() {\" + \"document.getElementById(\\\"up\\\").onclick = function(){\" + \"var ssida=document.getElementById(\\\"ssid\\\").value;\" + \"var ssid=ssida.replace(/\\\\s+/g, \\\" \\\");\" + \"var passwda=document.getElementsByTagName(\'input\')[0].value;\" + \"var passwd=passwda.replace(/\\\\s+/g, \\\" \\\");\" + \"xhr = new XMLHttpRequest();\" + \"xhr.open(\\\"POST\\\",\\\"./SetWifi\\\",true);\" + \"var posts = (\\\"ssid=\\\"+ssid+\\\"&passwd=\\\"+ passwd);\" + \"xhr.setRequestHeader(\\\"Content-Type\\\",\\\"application/x-www-form-urlencoded\\\");\" + \"xhr.send(posts);\" + \"xhr.onreadystatechange = function(){\" + \"if(this.readyState == 4 && this.status == 200){\" + \"alert(this.responseText);\" + \"}\" + \"}\" + \"}\" + \"}\" + \"</script>\" + \"<body>\";\r\n    String HtmlEnd = String(\"\") + \"<p>WiFi密码<input type=\\\"text\\\" id=\\\"passwd\\\"></p>\" + \"<input type=\\\"submit\\\" id=\\\"up\\\" value=\\\"设 置\\\">\" + \"<hr/>\" + \"<div>如果附近WiFi没有显示到自己的WIFI<div>\" + \"<div>请重启或离信号近点</div>\" + \"<div>连接成功AP热点退出转WIFI_STA</div>\" + \"</body>\" + \"</html>\";\r\n    a = a + \"</select>\";\r\n    html = HtmlStart + a + HtmlEnd;\r\n  } else {\r\n    html = \"扫描不到网络\";\r\n    Serial.println(\"扫描不到网络\");\r\n  }\r\n}\r\nvoid SetWifi() {\r\n  ssid = webServer.arg(0);\r\n  passwd = webServer.arg(1);\r\n  const char *Ssid = ssid.c_str();\r\n  const char *Passwd = passwd.c_str();\r\n  String sp = ssid + \"&\" + passwd;\r\n\r\n  Serial.println(sp);\r\n  Serial.begin(115200);\r\n  delay(500);\r\n  WiFi.begin(Ssid, Passwd);\r\n  WiFi.mode(WIFI_STA);\r\n  delay(200);\r\n  Serial.println(\"wifi_connet\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      webServer.send(200, \"text/plane\", \"Wifi密码正确，ESP准备重启\");\r\n      webServer.close();\r\n      delay(500);\r\n      WiFi.disconnect();\r\n      delay(500);\r\n      //写入数据\r\n      SPIFFS.format();\r\n      delay(500);\r\n      SPIFFS.begin();\r\n      File dataFile = SPIFFS.open(flash_wifi, \"w\");\r\n      dataFile.println(sp);\r\n      dataFile.close();\r\n      Serial.println(\"HTML连接成功\");\r\n      delay(1000);\r\n      ESP.restart();\r\n    }\r\n  }\r\n  webServer.send(200, \"text/plane\", \"Wifi密码错误，请重新输入\");\r\n  //HtmlSetWifi();\r\n}\r\n//------- 展示页面-------\r\nvoid handleRoot() {\r\n  webServer.send(500, \"text/html\", html);\r\n}\r\nvoid handleNotFound(void) {\r\n  webServer.send(404, \"text/plain\", \"404-The page is not Found!\");\r\n}\r\n\r\n\r\nvoid ApOpen() {\r\n  Serial.begin(115200);\r\n  WiFi.mode(WIFI_AP);\r\n  IPAddress local_IP(192, 168, 168, 2);\r\n  IPAddress gateway(192, 168, 168, 1);\r\n  IPAddress subnet(255, 255, 255, 0);\r\n  WiFi.softAPConfig(local_IP, gateway, subnet);\r\n\r\n  //启动AP模式，并设置账号和密码\r\n  boolean result = WiFi.softAP(\"192.168.168.2\", \"192.168.168.2\");\r\n  if (result) {\r\n    //输出 soft-ap ip地址\r\n    Serial.println(String(\"Soft-AP IP address = \") + WiFi.softAPIP());\r\n  }\r\n}\r\nvoid WebServerOpen() {\r\n  //-----------------启动webserver网络服务--------------------\r\n  webServer.begin();              // 启用网络服务\r\n  webServer.on(\"/\", handleRoot);  // / 在HTTP中，表示请求首页服务，\r\n  webServer.on(\"/SetWifi\", SetWifi);\r\n  webServer.onNotFound(handleNotFound);  // 当服务器没找到所需的服务，调用404函数\r\n  Serial.println(\"webserver started\");\r\n}\r\n\r\nbool FlashConnetWifi() {\r\n  Serial.begin(115200);\r\n  delay(500);\r\n  //是否存在数据\r\n  SPIFFS.begin();\r\n  if (SPIFFS.exists(flash_wifi) == false) {\r\n    Serial.print(flash_wifi);\r\n    Serial.println(\" NOT FOUND\");\r\n    return false;\r\n  }\r\n\r\n  File dateFile = SPIFFS.open(flash_wifi, \"r\");\r\n  String result;\r\n  for (int i = 0; i < dateFile.size(); i++) {\r\n    //Serial.print((char)dateFile.read());\r\n    result += (char)dateFile.read();\r\n  }\r\n  //去除前后空格\r\n  result.trim();\r\n  Serial.println(result);\r\n  int i = result.indexOf(\"&\");\r\n\r\n  String wifiname = result.substring(0, i);\r\n  String wifipw = result.substring(i + 1);\r\n  const char *WifiName = wifiname.c_str();\r\n  const char *WifiPw = wifipw.c_str();\r\n  Serial.println(WifiName);\r\n  Serial.println(WifiPw);\r\n  WiFi.begin(WifiName, WifiPw);\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"FlashConnetWifi->connet\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"FlashConnetWifi 闪存配置连接成功\");\r\n      espIp = WiFi.localIP().toString();\r\n      localServerIP = espIp.substring(0, espIp.lastIndexOf(\".\")) + \".254\";\r\n      return true;\r\n    }\r\n  }\r\n  Serial.println(\"FlashConnetWifi->false\");\r\n  return false;\r\n}\r\n// optional\r\nvoid audio_info(const char *info) {\r\n  // Serial.print(\"info        \"); Serial.println(info);\r\n  String str = info;\r\n  if (str.indexOf(\"End of webstream\") != -1) {\r\n    delay(900);\r\n    String ttmps = HttpPost(localserver, \"MusicId=next\");\r\n    String tmps2 = \"http://\" + localServerIP + \"/\" + ttmps;\r\n    audio.connecttohost(tmps2.c_str());\r\n  }\r\n}\r\nvoid audio_id3data(const char *info) {  //id3 metadata\r\n  Serial.print(\"id3data     \");\r\n  Serial.println(info);\r\n}\r\nvoid audio_eof_mp3(const char *info) {  //end of file\r\n  Serial.print(\"eof_mp3     \");\r\n  Serial.println(info);\r\n}\r\nvoid audio_showstation(const char *info) {\r\n  Serial.print(\"station     \");\r\n  Serial.println(info);\r\n}\r\nvoid audio_showstreamtitle(const char *info) {\r\n  Serial.print(\"streamtitle \");\r\n  Serial.println(info);\r\n}\r\nvoid audio_bitrate(const char *info) {\r\n  Serial.print(\"bitrate     \");\r\n  Serial.println(info);\r\n}\r\nvoid audio_commercial(const char *info) {  //duration in sec\r\n  Serial.print(\"commercial  \");\r\n  Serial.println(info);\r\n}\r\nvoid audio_icyurl(const char *info) {  //homepage\r\n  Serial.print(\"icyurl      \");\r\n  Serial.println(info);\r\n}\r\nvoid audio_lasthost(const char *info) {  //stream URL played\r\n  Serial.print(\"lasthost    \");\r\n  Serial.println(info);\r\n}','',1),
(187,4,'ESP8266 AP配网','#include <ESP8266WiFi.h>\r\n#include <ESP8266WebServer.h>\r\n#include <ESP8266HTTPClient.h>\r\n#include <Ticker.h>\r\n\r\n\r\nTicker myTicker;\r\nWiFiClient wificlient;\r\n\r\n//被读取的文件位置和名称\r\nString flash_wifi = \"/wifi.txt\";\r\nESP8266WebServer ESP8266webServer;  // 创建网络服务器对象,HTTP服务的标准端口为：80\r\nString ssid = \"\";\r\nString passwd = \"\";\r\nString html;\r\n\r\nvoid setup(void) {\r\n  Serial.begin(115200);\r\n  delay(1000);\r\n  if (FlashConnetWifi() == false) {\r\n    HtmlSetWifi();\r\n  }\r\n}\r\nvoid loop(void) {\r\n}\r\n\r\nvoid SetWifi() {\r\n  ssid = ESP8266webServer.arg(0);\r\n  passwd = ESP8266webServer.arg(1);\r\n  String sp = ssid + \"&\" + passwd;\r\n  Serial.println(sp);\r\n  Serial.println(\"密码在前面\");\r\n  Serial.begin(115200);\r\n  delay(500);\r\n  const char* Ssid = ssid.c_str();\r\n  const char* WifiPw = passwd.c_str();\r\n  WiFi.begin(Ssid, WifiPw);\r\n  WiFi.mode(WIFI_STA);\r\n  delay(200);\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      ESP8266webServer.send(200, \"text/plane\", \"Wifi密码正确,ESP准备重启\");\r\n      ESP8266webServer.close();\r\n      delay(500);\r\n      WiFi.disconnect();\r\n      delay(500);\r\n\r\n      //写入数据\r\n      SPIFFS.format();\r\n      delay(500);\r\n      SPIFFS.begin();\r\n      File dataFile = SPIFFS.open(flash_wifi, \"w\");\r\n      dataFile.println(sp);\r\n      dataFile.close();\r\n      Serial.println(\"HTML连接成功\");\r\n      delay(500);\r\n      ESP.restart();\r\n    }\r\n  }\r\n  ESP8266webServer.send(200, \"text/plane\", \"Wifi密码错误,请重新输入\");\r\n}\r\n//------- 展示页面-------\r\nvoid handlejsonStr() {\r\n  ESP8266webServer.send(500, \"text/html\", html);\r\n}\r\nvoid handleNotFound(void) {\r\n  ESP8266webServer.send(404, \"text/plain\", \"404-The page is not Found!\");\r\n}\r\n\r\nvoid ApStart() {\r\n  WiFi.disconnect();\r\n  delay(500);\r\n  Serial.begin(115200);\r\n  WiFi.mode(WIFI_AP);\r\n  IPAddress local_IP(192, 168, 168, 2);\r\n  IPAddress gateway(192, 168, 168, 1);\r\n  IPAddress subnet(255, 255, 255, 0);\r\n  WiFi.softAPConfig(local_IP, gateway, subnet);\r\n  //启动AP模式,并设置账号和密码\r\n  WiFi.softAP(\"192.168.168.2\", \"nobiggie.cn\");\r\n}\r\nvoid WebserverStart() {\r\n  ESP8266webServer.begin(80);               // 启用网络服务\r\n  ESP8266webServer.on(\"/\", handlejsonStr);  // / 在HTTP中,表示请求首页服务,\r\n  ESP8266webServer.on(\"/SetWifi\", SetWifi);\r\n  ESP8266webServer.onNotFound(handleNotFound);  // 当服务器没找到所需的服务,调用404函数\r\n  Serial.println(\"webserver started\");\r\n}\r\n\r\nvoid ForPing() {\r\n  //定时时间到了,先取消定时状态\r\n  myTicker.detach();\r\n  delay(500);\r\n  ESP.restart();\r\n}\r\n\r\n//扫描附件WIFI\r\nvoid WifiScan() {\r\n  Serial.begin(115200);\r\n  WiFi.disconnect();\r\n  WiFi.mode(WIFI_STA);\r\n  delay(100);\r\n  int n = WiFi.scanNetworks();\r\n  if (n > 0) {\r\n    Serial.println(n);\r\n    String a = \"附近WiFi <select id=\\\"ssid\\\">\";\r\n    for (int i = 0; i < n; i++) {\r\n      Serial.println(WiFi.SSID(i));\r\n      a = a + \"<option value=\\\"\" + WiFi.SSID(i) + \"\\\">\" + WiFi.SSID(i) + \"</option>\";\r\n      delay(50);\r\n    }\r\n    String HtmlStart = String(\"\") + \"<!DOCTYPE html>\" + \"<html>\" + \"<head>\" + \"<meta charset=\\\"utf-8\\\">\" + \"<meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\\\" />\" + \"<title>设置WiFi</title>\" + \"<link rel=\\\"stylesheet\\\" href=\\\"\\\">\" + \"</head>\" + \"<script>\" + \"onload  = function() {\" + \"document.getElementById(\\\"up\\\").onclick = function(){\" + \"var ssida=document.getElementById(\\\"ssid\\\").value;\" + \"var ssid=ssida.replace(/\\\\s+/g, \\\" \\\");\" + \"var passwda=document.getElementsByTagName(\'input\')[0].value;\" + \"var passwd=passwda.replace(/\\\\s+/g, \\\" \\\");\" + \"xhr = new XMLHttpRequest();\" + \"xhr.open(\\\"POST\\\",\\\"./SetWifi\\\",true);\" + \"var posts = (\\\"ssid=\\\"+ssid+\\\"&passwd=\\\"+ passwd);\" + \"xhr.setRequestHeader(\\\"Content-Type\\\",\\\"application/x-www-form-urlencoded\\\");\" + \"xhr.send(posts);\" + \"xhr.onreadystatechange = function(){\" + \"if(this.readyState == 4 && this.status == 200){\" + \"alert(this.responseText);\" + \"}\" + \"}\" + \"}\" + \"}\" + \"</script>\" + \"<body>\";\r\n    String HtmlEnd = String(\"\") + \"<p>WiFi密码<input type=\\\"text\\\" id=\\\"passwd\\\"></p>\" + \"<input type=\\\"submit\\\" id=\\\"up\\\" value=\\\"设 置\\\">\" + \"<hr/>\" + \"<font color=\\\"red\\\">附近WiFi没有显示到自己的WIFI请重启或离信号源近点</font>\" + \"</body>\" + \"</html>\";\r\n    a = a + \"</select>\";\r\n    html = HtmlStart + a + HtmlEnd;\r\n  } else {\r\n    html = \"扫描不到网络\";\r\n    Serial.println(\"扫描不到网络\");\r\n  }\r\n}\r\nbool FlashConnetWifi() {\r\n  Serial.begin(115200);\r\n  delay(500);\r\n  //是否存在数据\r\n  SPIFFS.begin();\r\n  if (SPIFFS.exists(flash_wifi) == false) {\r\n    Serial.print(flash_wifi);\r\n    Serial.println(\" NOT FOUND\");\r\n    return false;\r\n  }\r\n\r\n  File dateFile = SPIFFS.open(flash_wifi, \"r\");\r\n  String result = dateFile.readString();\r\n  result.trim();\r\n  Serial.println(result);\r\n  int i = result.indexOf(\"&\");\r\n  String wifiname = result.substring(0, i);\r\n  String wifipw = result.substring(i + 1);\r\n  const char* Ssid = wifiname.c_str();\r\n  const char* WifiPw = wifipw.c_str();\r\n  WiFi.begin(Ssid, WifiPw);\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"FlashConnetWifi->connet\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"FlashConnetWifi 闪存配置连接成功\");\r\n      return true;\r\n    }\r\n  }\r\n  Serial.println(\"FlashConnetWifi->false\");\r\n  return false;\r\n}\r\n\r\nvoid HtmlSetWifi() {\r\n  WifiScan();\r\n  ApStart();\r\n  delay(1000);\r\n  Serial.println(\"启动网页\");\r\n  myTicker.detach();\r\n  delay(200);\r\n  //5分后重启 防止停电后复电,路由器连接WIFI速度慢于ESP导致ESP连接不到路由器进入无限AP模式,所以这里只让AP 激活5分钟后就重启\r\n  myTicker.once(300, espReboot);\r\n  delay(200);\r\n  WebserverStart();\r\n  while (1) {\r\n    ESP8266webServer.handleClient();  // 检查网络服务请求并处理\r\n  }\r\n}\r\nvoid espReboot() {\r\n  ESP.restart();\r\n}\r\n','',1),
(188,4,'ESP32 AP配网','#include <WiFi.h>\r\n#include <WebServer.h>\r\n#include <HTTPClient.h>\r\n#include <FS.h>\r\n#include \"SPIFFS.h\"\r\n#include \"ESPmDNS.h\"\r\n#include <Ticker.h>\r\n\r\nTicker myTicker;\r\nString flashWifi = \"/wifi.txt\";  //wifi密码存放文件\r\nWebServer webServer;\r\nString ssid;\r\nString passwd;\r\nString html;\r\n#define baudRate 115200\r\nvoid setup(void) {\r\n  if (FlashConnetWifi() == false) {\r\n    HtmlSetWifi();\r\n  }\r\n}\r\n\r\nvoid loop(void) {\r\n}\r\n\r\nvoid HtmlSetWifi() {\r\n  WifiScan();\r\n  apStart();\r\n  delay(1000);\r\n  Serial.println(\"start webserver\");\r\n  //5分后重启 防止停电后复电，路由器连接WIFI速度慢于ESP导致ESP连接不到路由器进入无限AP模式，所以这里只让AP激活5分钟后就重启\r\n  myTicker.once(300, espReboot);\r\n  delay(200);\r\n  webserverStart();\r\n  while (1) {\r\n    webServer.handleClient();  //检查网络服务请求并处理\r\n  }\r\n}\r\nvoid espReboot() {\r\n  ESP.restart();\r\n}\r\n//扫描附件WIFI\r\nvoid WifiScan() {\r\n  WiFi.disconnect();\r\n  Serial.begin(baudRate);\r\n  WiFi.mode(WIFI_STA);\r\n  delay(100);\r\n  int n = WiFi.scanNetworks();\r\n  if (n > 0) {\r\n    String a = \"附近WiFi <select id=\\\"ssid\\\">\";\r\n    for (int i = 0; i < n; i++) {\r\n      Serial.println(WiFi.SSID(i));\r\n      a = a + \"<option value=\\\"\" + WiFi.SSID(i) + \"\\\">\" + WiFi.SSID(i) + \"</option>\";\r\n      delay(50);\r\n    }\r\n    String HtmlStart = String(\"\") + \"<!DOCTYPE html>\" + \"<html>\" + \"<head>\" + \"<meta charset=\\\"utf-8\\\">\" + \"<meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\\\" />\" + \"<title>设置WiFi</title>\" + \"<link rel=\\\"stylesheet\\\" href=\\\"\\\">\" + \"</head>\" + \"<script>\" + \"onload  = function() {\" + \"document.getElementById(\\\"up\\\").onclick = function(){\" + \"var ssida=document.getElementById(\\\"ssid\\\").value;\" + \"var ssid=ssida.replace(/\\\\s+/g, \\\" \\\");\" + \"var passwda=document.getElementsByTagName(\'input\')[0].value;\" + \"var passwd=passwda.replace(/\\\\s+/g, \\\" \\\");\" + \"xhr = new XMLHttpRequest();\" + \"xhr.open(\\\"POST\\\",\\\"./setWifi\\\",true);\" + \"var posts = (\\\"ssid=\\\"+ssid+\\\"&passwd=\\\"+ passwd);\" + \"xhr.setRequestHeader(\\\"Content-Type\\\",\\\"application/x-www-form-urlencoded\\\");\" + \"xhr.send(posts);\" + \"xhr.onreadystatechange = function(){\" + \"if(this.readyState == 4 && this.status == 200){\" + \"alert(this.responseText);\" + \"}\" + \"}\" + \"}\" + \"}\" + \"</script>\" + \"<body>\";\r\n    String HtmlEnd = String(\"\") + \"<p>WiFi密码<input type=\\\"text\\\" id=\\\"passwd\\\"></p>\" + \"<input type=\\\"submit\\\" id=\\\"up\\\" value=\\\"设 置\\\">\" + \"<hr/>\" + \"<div>如果附近WiFi没有显示到自己的WIFI<div>\" + \"<div>请重启或离信号近点</div>\" + \"<div>连接成功AP热点退出转WIFI_STA</div>\" + \"</body>\" + \"</html>\";\r\n    a = a + \"</select>\";\r\n    html = HtmlStart + a + HtmlEnd;\r\n  } else {\r\n    html = \"扫描不到网络\";\r\n  }\r\n}\r\nvoid setWifi() {\r\n  ssid = webServer.arg(0);\r\n  passwd = webServer.arg(1);\r\n  const char* Ssid = ssid.c_str();\r\n  const char* Passwd = passwd.c_str();\r\n  String sp = ssid + \"&\" + passwd;\r\n  Serial.println(sp);\r\n  Serial.begin(baudRate);\r\n  delay(500);\r\n  WiFi.begin(Ssid, Passwd);\r\n  WiFi.mode(WIFI_STA);\r\n  delay(200);\r\n  Serial.println(\"wifi_connet\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      webServer.send(200, \"text/plane\", \"Wifi密码正确,ESP准备重启\");\r\n      webServer.close();\r\n      delay(500);\r\n      WiFi.disconnect();\r\n      delay(500);\r\n      //写入数据\r\n      SPIFFS.format();\r\n      delay(500);\r\n      SPIFFS.begin();\r\n      File dataFile = SPIFFS.open(flashWifi, \"w\");\r\n      dataFile.println(sp);\r\n      dataFile.close();\r\n      Serial.println(\"HTML设置网络连接成功\");\r\n      delay(500);\r\n      ESP.restart();\r\n    }\r\n  }\r\n  webServer.send(200, \"text/plane\", \"Wifi密码错误,请重新输入\");\r\n}\r\n//------- 展示页面-------\r\nvoid handleRoot() {\r\n  webServer.send(500, \"text/html\", html);\r\n}\r\nvoid handleNotFound(void) {\r\n  webServer.send(404, \"text/plain\", \"404-The page is not Found!\");\r\n}\r\nvoid apStart() {\r\n  Serial.begin(baudRate);\r\n  WiFi.mode(WIFI_AP);\r\n  IPAddress local_IP(192, 168, 168, 2);\r\n  IPAddress gateway(192, 168, 168, 1);\r\n  IPAddress subnet(255, 255, 255, 0);\r\n  WiFi.softAPConfig(local_IP, gateway, subnet);\r\n  //启动AP模式，并设置账号和密码\r\n  boolean result = WiFi.softAP(\"192.168.168.2\", \"nobiggie.cn\");\r\n  if (result) {\r\n    Serial.println(String(\"Soft-AP IP address = \") + WiFi.softAPIP());\r\n  }\r\n}\r\nvoid webserverStart() {\r\n  webServer.begin(80);            // 启用网络服务\r\n  webServer.on(\"/\", handleRoot);  // / 在HTTP中，表示请求首页服务，\r\n  webServer.on(\"/setWifi\", setWifi);\r\n  webServer.onNotFound(handleNotFound);  // 当服务器没找到所需的服务，调用404函数\r\n  Serial.println(\"webserver started\");\r\n}\r\nbool FlashConnetWifi() {\r\n  Serial.begin(baudRate);\r\n  delay(200);\r\n  SPIFFS.begin();\r\n  if (SPIFFS.exists(flashWifi) == false) {\r\n    Serial.println(\"NOT FOUND\");\r\n    return false;\r\n  }\r\n\r\n  File dateFile = SPIFFS.open(flashWifi, \"r\");\r\n  String result;\r\n  for (int i = 0; i < dateFile.size(); i++) {\r\n    //Serial.print((char)dateFile.read());\r\n    result += (char)dateFile.read();\r\n  }\r\n  result.trim();\r\n  Serial.println(result);\r\n  int i = result.indexOf(\"&\");\r\n  String wifiname = result.substring(0, i);\r\n  String wifipw = result.substring(i + 1);\r\n  const char* WifiName = wifiname.c_str();\r\n  const char* WifiPw = wifipw.c_str();\r\n  Serial.println(WifiName);\r\n  Serial.println(WifiPw);\r\n  WiFi.begin(WifiName, WifiPw);\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"FlashConnet...\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"flash connet success\");\r\n      return true;\r\n    }\r\n  }\r\n  Serial.println(\"flash read error\");\r\n  return false;\r\n}','',1),
(189,4,'esp32舵机','#include <ESP32Servo.h>\r\nServo servo1;\r\nint minUs = 500;   //0度是脉宽,单位us\r\nint maxUs = 2500;  //180度脉宽,单位us\r\nint servo1Pin = 15;\r\nvoid setup() {\r\n  // put your setup code here, to run once:\r\n  Serial.begin(115200);\r\n  ESP32PWM::allocateTimer(0);  //指定使用的硬件定时器 esp32有4个\r\n  servo1.setPeriodHertz(50);   //指定PWM频率\r\n  servo1.attach(servo1Pin, minUs, maxUs);\r\n  servo1.write(90);  //转到指定角度(0-180);\r\n  servo1.detach();   //不需要的时候将引脚和ledc分离\r\n}\r\n\r\nvoid loop() {\r\n  // put your main code here, to run repeatedly:\r\n}\r\n','',1),
(190,4,'ESP32 WIFI 舵机','#include <Arduino.h>\r\n#include <WiFi.h>\r\n#include <WiFiMulti.h>\r\n#include <WiFiClientSecure.h>\r\n#include <WebSocketsClient.h>\r\n#include <ESP32Servo.h>\r\n#include <WebServer.h>\r\n#include <HTTPClient.h>\r\n#include <FS.h>\r\n#include \"SPIFFS.h\"\r\n#include \"ESPmDNS.h\"\r\n#include <Ticker.h>\r\n#include <ArduinoJson.h>\r\nServo servo1;\r\nint minUs = 500;   //0度是脉宽,单位us\r\nint maxUs = 2500;  //180度脉宽,单位us\r\nint servo1Pin = 15;\r\nint thisOpt=0;//当前角度\r\n\r\nTicker myTicker;\r\nDynamicJsonDocument  jsonBuffer(100);\r\nJsonObject desJson;\r\n//被读取的文件位置和名称\r\nString flash_wifi = \"/wifi.txt\";\r\nWebServer webServer(80);  // 创建网络服务器对象，HTTP服务的标准端口为：80\r\nString ssid = \"\";\r\nString passwd = \"\";\r\nString html;\r\n\r\nWiFiMulti WiFiMulti;\r\nWebSocketsClient webSocket;\r\n\r\n#define USE_SERIAL Serial1\r\n\r\nvoid hexdump(const void *mem, uint32_t len, uint8_t cols = 16) {\r\n  const uint8_t* src = (const uint8_t*) mem;\r\n  USE_SERIAL.printf(\"\\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)\", (ptrdiff_t)src, len, len);\r\n  for (uint32_t i = 0; i < len; i++) {\r\n    if (i % cols == 0) {\r\n      USE_SERIAL.printf(\"\\n[0x%08X] 0x%08X: \", (ptrdiff_t)src, i);\r\n    }\r\n    USE_SERIAL.printf(\"%02X \", *src);\r\n    src++;\r\n  }\r\n  USE_SERIAL.printf(\"\\n\");\r\n}\r\n\r\nvoid webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {\r\n\r\n  switch (type) {\r\n    case WStype_DISCONNECTED:\r\n      USE_SERIAL.printf(\"[WSc] Disconnected!\\n\");\r\n      break;\r\n    case WStype_CONNECTED:\r\n      USE_SERIAL.printf(\"[WSc] Connected to url: %s\\n\", payload);\r\n\r\n      // send message to server when Connected\r\n      webSocket.sendTXT(\"Connected\");\r\n      break;\r\n    case WStype_TEXT:\r\n      USE_SERIAL.printf(\"[WSc] get text: %s\\n\", payload);\r\n      deserializeJson(jsonBuffer, payload);\r\n      desJson = jsonBuffer.as<JsonObject>();\r\n      if (desJson[\"message\"] != \"\") {\r\n        String str = desJson[\"message\"];\r\n        Serial.println(str);\r\n        if(str==\"+\"){\r\n          if(thisOpt <=175){\r\n             thisOpt=thisOpt+5;\r\n             servo1.write(thisOpt);\r\n          }\r\n        }\r\n        if(str==\"-\"){\r\n          if(thisOpt<=5){\r\n             thisOpt=thisOpt-5;\r\n             servo1.write(thisOpt);\r\n          }\r\n        }\r\n        str=String(thisOpt);\r\n        webSocket.sendTXT(str);\r\n      }\r\n      // send message to server\r\n\r\n      break;\r\n    case WStype_BIN:\r\n      USE_SERIAL.printf(\"[WSc] get binary length: %u\\n\", length);\r\n      hexdump(payload, length);\r\n\r\n      // send data to server\r\n      // webSocket.sendBIN(payload, length);\r\n      break;\r\n    case WStype_PING:\r\n      // pong will be send automatically\r\n      Serial.printf(\"[WSc] get ping\\n\");\r\n      break;\r\n    case WStype_PONG:\r\n      // answer to a ping we send\r\n      Serial.printf(\"[WSc] get pong\\n\");\r\n      break;\r\n\r\n    case WStype_ERROR:\r\n    case WStype_FRAGMENT_TEXT_START:\r\n    case WStype_FRAGMENT_BIN_START:\r\n    case WStype_FRAGMENT:\r\n    case WStype_FRAGMENT_FIN:\r\n      break;\r\n  }\r\n\r\n}\r\n\r\nvoid setup() {\r\n  // USE_SERIAL.begin(921600);\r\n  USE_SERIAL.begin(115200);\r\n\r\n  //Serial.setDebugOutput(true);\r\n  USE_SERIAL.setDebugOutput(true);\r\n\r\n  USE_SERIAL.println();\r\n  USE_SERIAL.println();\r\n  USE_SERIAL.println();\r\n\r\n  for (uint8_t t = 4; t > 0; t--) {\r\n    USE_SERIAL.printf(\"[SETUP] BOOT WAIT %d...\\n\", t);\r\n    USE_SERIAL.flush();\r\n    delay(1000);\r\n  }\r\n\r\n  if (FlashConnetWifi() == false) {\r\n    HtmlSetWifi();\r\n  }\r\n  ESP32PWM::allocateTimer(0);  //指定使用的硬件定时器 esp32有4个\r\n  servo1.setPeriodHertz(50);   //指定PWM频率\r\n  servo1.attach(servo1Pin, minUs, maxUs);\r\n  //WiFi.disconnect();\r\n\r\n  // server address, port and URL\r\n  webSocket.begin(\"192.168.0.254\", 80, \"/service/wss\");\r\n\r\n  // event handler\r\n  webSocket.onEvent(webSocketEvent);\r\n\r\n  // use HTTP Basic Authorization this is optional remove if not needed\r\n  webSocket.setAuthorization(\"user=mg996r&password=efghijk&room=root\");\r\n\r\n  // try ever 5000 again if connection has failed\r\n  webSocket.setReconnectInterval(5000);\r\n\r\n}\r\n\r\nvoid loop() {\r\n  webSocket.loop();\r\n}\r\n\r\n\r\n\r\nvoid HtmlSetWifi() {\r\n  WifiScan();\r\n  ApOpen();\r\n  delay(1000);\r\n  Serial.println(\"启动网页\");\r\n  //5分后重启 防止停电后复电，路由器连接WIFI速度慢于ESP导致ESP连接不到路由器进入无限AP模式，所以这里只让AP激活5分钟后就重启\r\n  myTicker.once(300, EspRestart);\r\n  delay(200);\r\n  WebServerOpen();\r\n  while (1) {\r\n    webServer.handleClient();   // 检查网络服务请求并处理\r\n  }\r\n}\r\nvoid EspRestart() {\r\n  ESP.restart();\r\n}\r\n//扫描附件WIFI\r\nvoid WifiScan() {\r\n  Serial.begin(115200);\r\n  WiFi.mode(WIFI_STA);\r\n  WiFi.disconnect();\r\n  delay(500);\r\n  int n = WiFi.scanNetworks();\r\n  if (n > 0) {\r\n    Serial.println(n);\r\n    String a =  \"附近WiFi <select id=\\\"ssid\\\">\";\r\n    for (int i = 0; i < n; i++) {\r\n      Serial.println(WiFi.SSID(i));\r\n      a = a +  \"<option value=\\\"\" + WiFi.SSID(i) + \"\\\">\" + WiFi.SSID(i) + \"</option>\";\r\n      delay(50);\r\n    }\r\n    String HtmlStart = String(\"\") + \"<!DOCTYPE html>\" +\r\n                       \"<html>\" +\r\n                       \"<head>\" +\r\n                       \"<meta charset=\\\"utf-8\\\">\" +\r\n                       \"<meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\\\" />\" +\r\n                       \"<title>设置WiFi</title>\" +\r\n                       \"<link rel=\\\"stylesheet\\\" href=\\\"\\\">\" +\r\n                       \"</head>\" +\r\n                       \"<script>\" +\r\n                       \"onload  = function() {\" +\r\n                       \"document.getElementById(\\\"up\\\").onclick = function(){\" +\r\n                       \"var ssida=document.getElementById(\\\"ssid\\\").value;\" +\r\n                       \"var ssid=ssida.replace(/\\\\s+/g, \\\" \\\");\" +\r\n                       \"var passwda=document.getElementsByTagName(\'input\')[0].value;\" +\r\n                       \"var passwd=passwda.replace(/\\\\s+/g, \\\" \\\");\" +\r\n                       \"xhr = new XMLHttpRequest();\" +\r\n                       \"xhr.open(\\\"POST\\\",\\\"./SetWifi\\\",true);\" +\r\n                       \"var posts = (\\\"ssid=\\\"+ssid+\\\"&passwd=\\\"+ passwd);\" +\r\n                       \"xhr.setRequestHeader(\\\"Content-Type\\\",\\\"application/x-www-form-urlencoded\\\");\" +\r\n                       \"xhr.send(posts);\" +\r\n                       \"xhr.onreadystatechange = function(){\" +\r\n                       \"if(this.readyState == 4 && this.status == 200){\" +\r\n                       \"alert(this.responseText);\" +\r\n                       \"}\" +\r\n                       \"}\" +\r\n                       \"}\" +\r\n                       \"}\" +\r\n                       \"</script>\" +\r\n                       \"<body>\";\r\n    String HtmlEnd = String(\"\") + \"<p>WiFi密码<input type=\\\"text\\\" id=\\\"passwd\\\"></p>\" +\r\n                     \"<input type=\\\"submit\\\" id=\\\"up\\\" value=\\\"设 置\\\">\" +\r\n                     \"<hr/>\" +\r\n                     \"<div>如果附近WiFi没有显示到自己的WIFI<div>\" +\r\n                     \"<div>请重启或离信号近点</div>\" +\r\n                     \"<div>连接成功AP热点退出转WIFI_STA</div>\" +\r\n                     \"</body>\" +\r\n                     \"</html>\";\r\n    a = a +  \"</select>\";\r\n    html = HtmlStart + a + HtmlEnd;\r\n  } else {\r\n    html = \"no wifis\";\r\n    Serial.println(\"no wifis\");\r\n  }\r\n}\r\nvoid SetWifi() {\r\n  ssid = webServer.arg(0);\r\n  passwd = webServer.arg(1);\r\n  const char* Ssid = ssid.c_str();\r\n  const char* Passwd = passwd.c_str();\r\n  String sp = ssid + \"&\" + passwd;\r\n\r\n  Serial.println(sp);\r\n  Serial.begin(115200);\r\n  delay(500);\r\n  WiFi.begin(Ssid, Passwd);\r\n  WiFi.mode(WIFI_STA);\r\n  delay(200);\r\n  Serial.println(\"wifi_connet\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      webServer.send(200, \"text/plane\", \"Wifi密码正确，ESP准备重启\");\r\n      webServer.close();\r\n      delay(500);\r\n      WiFi.disconnect();\r\n      delay(500);\r\n      //写入数据\r\n      SPIFFS.format();\r\n      delay(500);\r\n      SPIFFS.begin();\r\n      File dataFile = SPIFFS.open(flash_wifi, \"w\");\r\n      dataFile.println(sp);\r\n      dataFile.close();\r\n      Serial.println(\"HTML连接成功\");\r\n      delay(1000);\r\n      ESP.restart();\r\n    }\r\n  }\r\n  webServer.send(200, \"text/plane\", \"Wifi密码错误，请重新输入\");\r\n  //HtmlSetWifi();\r\n}\r\n//------- 展示页面-------\r\nvoid handleRoot() {\r\n  webServer.send(200, \"text/html\", html);\r\n}\r\nvoid handleNotFound(void) {\r\n  webServer.send(404, \"text/plain\", \"404-The page is not Found!\");\r\n}\r\n\r\n\r\nvoid ApOpen() {\r\n  Serial.begin(115200);\r\n  WiFi.mode(WIFI_AP);\r\n  IPAddress local_IP(192, 168, 168, 2);\r\n  IPAddress gateway(192, 168, 168, 1);\r\n  IPAddress subnet(255, 255, 255, 0);\r\n  WiFi.softAPConfig(local_IP, gateway, subnet) ;\r\n\r\n  //启动AP模式，并设置账号和密码\r\n  boolean result = WiFi.softAP(\"192.168.168.2\", \"192.168.168.2\");\r\n  if (result) {\r\n    //输出 soft-ap ip地址\r\n    Serial.println(String(\"Soft-AP IP address = \") + WiFi.softAPIP());\r\n  }\r\n}\r\nvoid WebServerOpen() {\r\n  //-----------------启动webserver网络服务--------------------\r\n  webServer.begin(); // 启用网络服务\r\n  webServer.on(\"/\", handleRoot);   // / 在HTTP中，表示请求首页服务，\r\n  webServer.on(\"/SetWifi\", SetWifi);\r\n  webServer.onNotFound(handleNotFound);    // 当服务器没找到所需的服务，调用404函数\r\n  Serial.println(\"webserver started\");\r\n}\r\n\r\nbool FlashConnetWifi() {\r\n  Serial.begin(115200);\r\n  delay(500);\r\n  //是否存在数据\r\n  SPIFFS.begin();\r\n  if (SPIFFS.exists(flash_wifi) == false) {\r\n    Serial.print(flash_wifi);\r\n    Serial.println(\" NOT FOUND\");\r\n    return false;\r\n  }\r\n\r\n  File dateFile = SPIFFS.open(flash_wifi, \"r\");\r\n  String result;\r\n  for (int i = 0; i < dateFile.size(); i++) {\r\n    //Serial.print((char)dateFile.read());\r\n    result += (char)dateFile.read();\r\n  }\r\n  //去除前后空格\r\n  result.trim();\r\n  Serial.println(result);\r\n  int i = result.indexOf(\"&\");\r\n\r\n  String wifiname = result.substring(0, i);\r\n  String wifipw = result.substring(i + 1);\r\n  const char* WifiName = wifiname.c_str();\r\n  const char* WifiPw = wifipw.c_str();\r\n  Serial.println(WifiName);\r\n  Serial.println(WifiPw);\r\n  WiFi.begin(WifiName, WifiPw);\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"FlashConnetWifi->connet\");\r\n  int ii = 0;\r\n  for (ii; ii < 20; ii++) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"FlashConnetWifi 闪存配置连接成功\");\r\n      return true;\r\n    }\r\n  }\r\n  Serial.println(\"FlashConnetWifi->false\");\r\n  return false;\r\n}','',1),
(191,4,'ESP8266 pwm 控制直流电机速度','const int ledPin = 3; \r\n\r\nvoid setup() {\r\n  // put your setup code here, to run once:\r\n  pinMode(ledPin, OUTPUT);\r\n  //频率为 1kHz 默认也是1kHz\r\n  analogWriteFreq(1000);\r\n  //设置 最大值  默认情况下为 1023\r\n  analogWriteRange(100);\r\n  Serial.begin(115200);\r\n}\r\nvoid loop() {\r\n  // 增加电机速度\r\n  for(int dutyCycle = 0; dutyCycle < 100; dutyCycle++){   \r\n    // 通过PWM改变速度\r\n    analogWrite(ledPin, dutyCycle);\r\n    delay(5);\r\n  }\r\n  // 降低电机速度\r\n  for(int dutyCycle = 100; dutyCycle > 0; dutyCycle--){\r\n    // 通过PWM改变速度\r\n    analogWrite(ledPin, dutyCycle);\r\n    delay(5);\r\n  }\r\n\r\n}','',1),
(192,4,'esp32 pwm 控制直流电机速度','//PWM控制\r\nint pwm1 = 21;\r\n//管道esp32有16个管道,0-7为80hz 高速管道  8-16为低速管道\r\nconst int channel1 = 0;\r\n//分辨率  2的8次方 256\r\nconst int resolution = 8;\r\n//PWM频率\r\nconst int freq = 1000;\r\n//初始值 49%\r\nint PwmNow = 125;\r\n//累加数\r\nint fadeAmount = 5;  \r\nvoid setup(void) {\r\npinMode(pwm1, OUTPUT);\r\n  ledcSetup(channel1, freq, resolution);\r\n  ledcAttachPin(pwm1, channel1);\r\n  ledcWrite(channel1, PwmNow);\r\n  pinMode(infrared1, INPUT_PULLUP);\r\n  digitalWrite(infrared1, LOW);\r\n}\r\nvoid loop(void) {\r\n  if(PwmNow<255){\r\n      PwmNow = PwmNow + fadeAmount;\r\n      ledcWrite(channel1, PwmNow);\r\n      int temp=PwmNow*100/255;\r\n      String tempStr=String(temp)+\"%\";\r\nSerial.println(tempStr);\r\ndelay(1000);\r\n  }\r\n//上面这个是旧版的 下面是新版的使用方法\r\n#include <Arduino.h>\r\n\r\nint  pwmPin = 4;              //PWM控制\r\nconst uint32_t pwmFreq = 1000;   // PWM频率1kHz（1-10kHz适合电机控制）\r\nconst uint8_t pwmResolution = 8; // 8位分辨率（0-255）\r\n\r\nvoid setup(void) {\r\n  // 手动选择通道并绑定引脚\r\n  if (ledcAttach( pwmPin,pwmFreq, pwmResolution)) {\r\n    Serial.printf(\"PWM配置成功：频率=%dHz，分辨率=%dbits\\n\", pwmFreq, pwmResolution);\r\n  } else {\r\n     Serial.println(\"PWM配置失败，请检查参数或通道占用情况\");\r\n  }\r\n}\r\nledcWrite(pwmPin,angle);//这个设置占空比','',1),
(193,4,'土壤湿度传感器','                int shidu = 0; // 土壤传感器输入接模拟引脚 A0\r\nint value = 0; //初始化变量value\r\n\r\nvoid setup() {\r\n  Serial.begin(19200);//设置波特率为115200\r\n  Serial.println(\"\\n\");//换行\r\n}\r\n\r\nvoid loop() {\r\n  value = analogRead(shidu);//模拟数据读取（A0脚输入的数据）\r\n  value = value / 10.2;    //上面的value值除以10.2 值得多少要看空悬时也就是干燥时为100%赋值给value\r\n  Serial.print(value);\r\n  Serial.println(\"%\");\r\n  //value值小于50时，对结果进行判\r\n  if (value < 50){\r\n    Serial.println(\"土壤是湿润的\");\r\n  }else{\r\n    Serial.println(\"土壤是干燥的\");\r\n  }\r\n  delay(1000);//延时1s，每一秒读取一次\r\n}     \r\n\r\n/* 该传感器可以独立工作\r\nD0 LED灯不亮时  D0脚为高电平3.3v 亮为低电平，调节小电位器让其到指定的阀值LED灯点亮即低电平,\r\n如果需要读取湿度比例值就必须要接ESP单片机了\r\n*/        ','',1),
(194,4,'向芯片flash读写数据','闪存 相当于 电脑硬盘的C以外盘符\r\n每次重新烧录是不会被清除的只有手动操作<FS.h>库来清除\r\n比如 WIFI 帐号密码存到闪存中\r\n这样就不用向程序里写死WIFI帐号密码\r\n#include <FS.h> //库文件\r\nString flash_file = \"/false.txt\"; //被读取的文件位置和名称\r\n\r\n//是否存在数据\r\nif (SPIFFS.exists(flash_file)) {\r\n  Serial.print(file_name);\r\n  Serial.print(\" FOUND\");\r\n} else {\r\n  Serial.print(file_name);\r\n  Serial.println(\" NOT FOUND\");\r\n}\r\n\r\n//写入数据\r\n  SPIFFS.format();//格式化SPIFFS 慎用\r\n  delay(500);\r\n  SPIFFS.begin();//启动闪存写入模式\r\n  File dataFile = SPIFFS.open(\"./wifi.txt\", \"w\");\r\n  dataFile.println(str);\r\n  dataFile.close();\r\n  return true;\r\n\r\n//读取数据  wra 代表 w r a a+  其中a代表追加数据 a+代表可读可追加\r\n  //是否存在数据\r\n  SPIFFS.begin();\r\n  if (SPIFFS.exists(\"./wifi.txt\") == false) {\r\n    Serial.print(path);\r\n    Serial.println(\" NOT FOUND\");\r\n    return \"\";\r\n  }\r\n  File dataFile = SPIFFS.open(\"./wifi.txt\", \"r\");\r\n  String result = dataFile.readString();\r\n  result.trim(); //清理字符两边的空格\r\n  Serial.print(result);\r\n\r\n\r\n//显示目录中文件内容以及文件大小\r\nDir dir = SPIFFS.openDir(flash_file); //建立“目录对象”dir\r\nwhile (dir.next()) //dir.next()用于检查目录中是否还有”下一个文件“\r\n{\r\n  Serial.println(dir.fileName());//输出文件名\r\n}\r\n\r\n//删除数据\r\nSPIFFS.remove(flash_file);      ','',1),
(195,4,'MQTT协议','MQTT连接服务器\r\n=======固定报头======\r\n10 ??(后面做完,再数有几个再转16进制值)\r\n\r\n======可变报头 协议名======\r\n00 04   4D 51 54 54(MQTT 转换成16进制的值)\r\n======可变报头 协议级别\r\n04\r\n======可变报头 连接标示======\r\n1(用户名) 1(密码) 0 0 0 0 1 0\r\n转换16进制是\r\nC2\r\n======可变报头 保持连接======\r\n00 78(120秒十进制转换16进制是78)\r\n可变报头串连\r\n10 ?? 00 04 4D 51 54 54 04 C2 00 78\r\n\r\n=========有效载荷=============\r\n//没有遗嘱\r\n有效载荷 = 客户ID + 用户 + 密码\r\nclient id的16进制长度+client id+mqtt username的16进制长度+mqtt username+mqtt password的16进\r\n\r\n制长度+mqtt password\r\n//有遗嘱\r\n有效载荷 = 客户ID + 遗嘱主题 + 遗嘱消息 + 用户 + 密码\r\n?? 超过128字节 请查看 第二条 MQTT剩余长度规则\r\n服务器返回 20 02 00 00 (00)代表成功\r\n\r\n//MQTT剩余长度规则\r\n小于128个字节的可以用 一个字节表示\r\n等于128就要用两个字节表示\r\n计算公式  剩余长度=128*a+b\r\nb是10进制转换成2进制 从后面开始数第8位置为1\r\n比如b=33 二进制是100001 第8位置1那么就等于\r\n10100001 再转换成16进制就是A1\r\n记往低位放前 A1 下面计算放后面的高位\r\na=1 二进制就是1 转换成16进制也是1 那行得到\r\nA1 01\r\n\r\n\r\n//MQTT订阅主题\r\n固定报头 + (可变报头16进制长度(00 xx)+可变报头)+权限等级01\r\n如下\r\n82 ?? 00 0A \r\n(可变报头16进制长度(00 xx)+可变报头)+权限等级01\r\n?? 是(可变报头16进制长度(00 xx)+可变报头)+权限等级01的总长度16进制\r\n服务器返回 90 03 00 0A 01 代表成功\r\n如权限等级是0则返回 90 03 00 0A 00\r\n\r\n//MQTT发布消息 固定报头+可变报头+\r\n30 ?? +发布可变报头长度+发布可变报头+01+消息内容长度+消息内容\r\n\r\n//MQTT取消订阅\r\n====取消订阅=====\r\n固定报头+可变报头+有效载荷\r\nA2 ??(固定报)\r\n00 0A (可变报头)\r\n之前 订阅主题 的16进制的长度+  订阅主题 的16进制(有效载荷)\r\n返回 B0 02 00 0A(代表退订成功)','',1),
(196,4,'arduino 自带函数库Ticker定时','Ticker myTicker;\r\nmyTicker.once(秒为单位只执行一次,方法名);\r\nmyTicker.once_ms(毫秒为单位只执行一次,方法名);\r\n\r\nmyTicker.attach(秒为单位死循环,方法名);\r\nmyTicker.attach_ms(毫秒为单位死循环,方法名);\r\n//也可以加第三个参数为 回调函数\r\n\r\nmyTicker.detch(); //停止定时\r\n\r\nmyTicker.active(); //查看是否有定时状态','',1),
(197,4,'esp32遥控小车AP(电容感应切换车头,射频遥控)','/*\r\n面向车尾   \r\np32  左边电机  左正\r\np33  右边电机  右正\r\np25  左边电机  左反\r\np26  右边电机  右反\r\np27  升   正\r\np14  降   反\r\np12  关发动机  触动3秒后断开\r\nP15  开机通电一直手摸线 可以遥控方向相互转换\r\np4   设置 射频遥控 与 WIFI遥控 切换\r\np21  PWM脚\r\np0   Power8266 输出高电平增加射频遥控 8键射频433遥控\r\n手机要用火狐浏览器\r\n\r\n\r\nP36 前进\r\nP39 后退\r\nP34 左拐弯\r\nP35 右拐弯\r\nP17 移动速度+\r\nP16 移动速度-\r\n*/\r\n#include <WiFi.h>\r\n#include <WebServer.h>\r\n#include <HTTPClient.h>\r\n#include <FS.h>\r\n#include \"SPIFFS.h\"\r\n#include \"ESPmDNS.h\"\r\n\r\n#include <Arduino.h>\r\n#include <WiFi.h>\r\n#include <WiFiMulti.h>\r\n#include <WiFiClientSecure.h>\r\n#include <ArduinoJson.h>\r\n#include <WebSocketsClient.h>\r\n\r\nString direction = \"/boolStr.txt\";\r\nString controlMode=\"/controlMode.txt\";\r\nWebServer webServer(80);  // 创建网络服务器对象，HTTP服务的标准端口为：80\r\nString request = \"\";\r\n\r\n//方向相互转换\r\nint touch15 = 15;\r\n//射频遥控  感应切换开关\r\nint touch4=4;\r\n\r\nboolean globalBL=false;\r\n\r\n//转换成功指示灯\r\nint light22 = 22;\r\n\r\n//PWM控制\r\nint pwm1 = 21;\r\n//管道esp32有16个管道,0-7为80hz 高速管道  8-16为低速管道\r\nconst int channel1 = 0;\r\n//分辨率  2的8次方 256\r\nconst int resolution = 8;\r\n//PWM频率\r\nconst int freq = 1000;\r\n//初始值 41%\r\nint PwmNow = 105;\r\n//累加数\r\nint fadeAmount = 5;\r\n//接通esp8266电源\r\nint Power8266 = 0;\r\n\r\nWiFiMulti WiFiMulti;\r\nWebSocketsClient webSocket;\r\nDynamicJsonDocument jsonBuffer(100);\r\nJsonObject root;\r\n\r\nvoid hexdump(const void* mem, uint32_t len, uint8_t cols = 16) {\r\n  const uint8_t* src = (const uint8_t*)mem;\r\n  Serial.printf(\"\\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)\", (ptrdiff_t)src, len, len);\r\n  for (uint32_t i = 0; i < len; i++) {\r\n    if (i % cols == 0) {\r\n      Serial.printf(\"\\n[0x%08X] 0x%08X: \", (ptrdiff_t)src, i);\r\n    }\r\n    Serial.printf(\"%02X \", *src);\r\n    src++;\r\n  }\r\n  Serial.printf(\"\\n\");\r\n}\r\n\r\nString html = String(\"\")+\r\n\"<!DOCTYPE html><html lang=\\\"en\\\">\"+\r\n\"<head>\"+\r\n    \"<meta charset=\\\"UTF-8\\\">\"+\r\n    \"<meta name=\\\"viewport\\\" <meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\\\" />\"+\r\n    \"<title>遥控车</title>\"+\r\n    \"<script>window.onload = function () {\"+\r\n            \"document.getElementById(\\\"xyzUp\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest();\"+\r\n                \"xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=↑\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"xyzLeft\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\"); xhr.send(\\\"xyz=←\\\");\"+\r\n                \"xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"xyzLeft\\\").addEventListener(\\\"touchend\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\"); xhr.send(\\\"xyz=■\\\");\"+\r\n                \"xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"xyzStop\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=■\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"xyzRight\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=→\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"xyzRight\\\").addEventListener(\\\"touchend\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest();\"+\r\n                \"xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true); xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=■\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"xyzDonw\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=↓\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"rise\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest();\"+\r\n                \"xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=rise\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"rise\\\").addEventListener(\\\"touchend\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=■\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"decline\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=decline\\\"); xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"decline\\\").addEventListener(\\\"touchend\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\"); xhr.send(\\\"xyz=■\\\");\"+\r\n                \"xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"TurnOff\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=TurnOff\\\");\"+\r\n                \"xhr.onreadystatechange = function () {\"+\r\n                   \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"speedA\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=speedA\\\");\"+\r\n                \"xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n            \"document.getElementById(\\\"speedB\\\").addEventListener(\\\"touchstart\\\", function () {\"+\r\n                \"let xhr = new XMLHttpRequest(); xhr.open(\\\"POST\\\", \\\"./xyzgo\\\", true);\"+\r\n                \"xhr.setRequestHeader(\\\"Content-Type\\\", \\\"application/x-www-form-urlencoded\\\");\"+\r\n                \"xhr.send(\\\"xyz=speedB\\\");\"+\r\n                \"xhr.onreadystatechange = function () {\"+\r\n                    \"if (this.readyState == 4 && this.status == 200) {\"+\r\n                        \"document.getElementById(\\\"show\\\").innerHTML = this.responseText;\"+\r\n                    \"}}});\"+\r\n        \"}</script>\"+\r\n\"</head>\"+\r\n\"<style> *{ -moz-user-select: none; -ms-user-select:none; user-select:none; } </style>\"+\r\n\"<body>\"+\r\n    \"<div style=\\\"width: auto;margin-top:30px;text-align: center;\\\" id=\\\"show\\\"></div>\"+\r\n    \"<div style=\\\"padding: 20px;width:auto;margin: 80px auto auto; background-color: #EEF0F2;\\\">\"+\r\n        \"<p><input type=\\\"submit\\\" style=\\\"margin:auto auto 20% 42%;\\\" id=\\\"xyzUp\\\" value=\\\"&nbsp ↑ &nbsp\\\"></p>\"+\r\n        \"<p><input type=\\\"submit\\\" style=\\\"margin-left: 10%;\\\" id=\\\"xyzLeft\\\" value=\\\"&nbsp ← &nbsp\\\">\"+\r\n        \"<input type=\\\"submit\\\" style=\\\"margin:auto 17% auto 17%\\\" id=\\\"xyzStop\\\" value=\\\"&nbsp ■ &nbsp\\\">\"+\r\n        \"<input type=\\\"submit\\\" style=\\\"margin-right: 10%;\\\" id=\\\"xyzRight\\\" value=\\\"&nbsp → &nbsp\\\"></p>\"+\r\n        \"<p></p><input type=\\\"submit\\\" style=\\\"margin:20% auto auto 42%;\\\" id=\\\"xyzDonw\\\" value=\\\"&nbsp ↓ &nbsp\\\"></p>\"+\r\n    \"</div>\"+\r\n    \"<div style=\\\"width:auto;margin: 50px auto;text-align: center; background-color: #EEF0F2;\\\">\"+\r\n        \"<p><input type=\\\"submit\\\" style=\\\"float:left;\\\" id=\\\"rise\\\" value=\\\"&nbsp 机器升 &nbsp\\\"></p>\"+\r\n        \"<p><input type=\\\"submit\\\" style=\\\"margin-left:50%;\\\" id=\\\"decline\\\" value=\\\"&nbsp 机器降 &nbsp\\\"><br />\"+\r\n        \"<p><input type=\\\"submit\\\" value=\\\"速度+\\\" id=\\\"speedA\\\"></p>\"+\r\n        \"<p><input type=\\\"submit\\\" value=\\\"速度-\\\" id=\\\"speedB\\\"></p><br />\"+\r\n        \"<p><input type=\\\"submit\\\" id=\\\"TurnOff\\\" value=\\\"&nbsp 关闭发动机 &nbsp\\\"></p>\"+\r\n    \"</div></body></html>\";\r\n\r\nint LeftAdvance = 32;\r\nint RightAdvance = 33;\r\nint LeftRetreat = 25;\r\nint RightRetreat = 26;\r\nint rise = 27;\r\nint decline = 14;\r\n//发动机\r\nint TurnOff = 12;\r\n\r\n//touch 最大65  手摸20以下 但是运行环境 触摸达不到20以下,20-50间,应该设置为50\r\nconst int ConstTouch = 50;\r\nString runState = \"■\";\r\nString WebSocKetUserName=\"cart1\";\r\n\r\nvoid setup(void) {\r\n  pinMode(LeftAdvance, OUTPUT);\r\n  pinMode(LeftRetreat, OUTPUT);\r\n  pinMode(RightAdvance, OUTPUT);\r\n  pinMode(RightRetreat, OUTPUT);\r\n  pinMode(rise, OUTPUT);\r\n  pinMode(decline, OUTPUT);\r\n  pinMode(TurnOff, OUTPUT);\r\n  pinMode(light22, OUTPUT);\r\n  //pinMode(d5, INPUT_PULLUP);\r\n  //pinMode(d6, INPUT_PULLUP);\r\n\r\n  digitalWrite(LeftAdvance, LOW);\r\n  digitalWrite(LeftRetreat, LOW);\r\n  digitalWrite(RightAdvance, LOW);\r\n  digitalWrite(RightRetreat, LOW);\r\n\r\n  digitalWrite(rise, LOW);\r\n  digitalWrite(decline, LOW);\r\n  digitalWrite(TurnOff, LOW);\r\n  digitalWrite(light22, LOW);\r\n\r\n  pinMode(pwm1, OUTPUT);\r\n  ledcSetup(channel1, freq, resolution);\r\n  ledcAttachPin(pwm1, channel1);\r\n  ledcWrite(channel1, PwmNow);\r\n  pinMode(Power8266, OUTPUT);\r\n  digitalWrite(Power8266, LOW);\r\n\r\n  Serial.begin(115200);\r\n  delay(500);\r\n\r\n  if (!SPIFFS.begin(true)) {\r\n    Serial.println(\"SPIFFS加载失败\");\r\n  }\r\n  if (SPIFFS.exists(direction) == false) {\r\n    //写入数据\r\n    SetSPIFFS(direction, \"true\");\r\n    delay(300);\r\n  }\r\n\r\n  File dateFile = SPIFFS.open(direction, \"r\");\r\n  String boolStr;\r\n  for (int i = 0; i < dateFile.size(); i++) {\r\n    //Serial.print((char)dateFile.read());\r\n    boolStr += (char)dateFile.read();\r\n  }\r\n  //去除前后空格\r\n  boolStr.trim();\r\n  Serial.println(boolStr);\r\n  delay(500);\r\n  int intto = touchRead(touch15);\r\n  delay(1000);\r\n  if (intto < ConstTouch) {\r\n    if (boolStr == \"true\") {\r\n        Serial.println(\"转换遥控方向成 重\");\r\n        SetSPIFFS(direction, \"false\");\r\n        delay(200);\r\n        globalBL=false;\r\n        ledFlicker();\r\n    } else {\r\n        Serial.println(\"转换遥控方向成 轻\");\r\n        SetSPIFFS(direction, \"true\");\r\n        delay(200);\r\n        globalBL=true;\r\n        ledFlicker();\r\n    }\r\n  }\r\n  delay(500);\r\n  int intto4 = touchRead(touch4);\r\n  delay(500);\r\n  //touch4 是否触摸操作 true为触摸\r\n  bool touch4BL=false;\r\n  if(intto4 < ConstTouch){\r\n    touch4BL=true;\r\n    if (!SPIFFS.begin(true)) {\r\n      Serial.println(\"SPIFFS加载失败\");\r\n    }\r\n    if (SPIFFS.exists(controlMode) == false) {\r\n      //写入数据  true代表 增加射频遥控 模式\r\n      SetSPIFFS(controlMode, \"false\");\r\n      delay(300);\r\n    }else{\r\n      String boolStr1;\r\n      File dateFile = SPIFFS.open(controlMode, \"r\");\r\n      for (int i = 0; i < dateFile.size(); i++) {\r\n      //Serial.print((char)dateFile.read());\r\n      boolStr1 += (char)dateFile.read();\r\n      }\r\n      //去除前后空格\r\n      boolStr1.trim();\r\n      Serial.println(boolStr1);\r\n      //上次是true射频模式 现在就关闭射频模式\r\n      if(boolStr1==\"true\"){\r\n        Serial.println(\"关闭射频模式\");\r\n        SetSPIFFS(controlMode, \"false\");\r\n      }else{\r\n        //开户射频模式\r\n        SetSPIFFS(controlMode, \"true\");\r\n        Serial.println(\"开启射频模式\");\r\n        digitalWrite(Power8266,HIGH);\r\n      }\r\n    }\r\n    ledFlicker();\r\n  }\r\n\r\n  if(touch4BL==false){\r\n    if (!SPIFFS.begin(true)) {\r\n      Serial.println(\"SPIFFS加载失败\");\r\n    }else{\r\n      String boolStr2;\r\n      File dateFile = SPIFFS.open(controlMode, \"r\");\r\n      for (int i = 0; i < dateFile.size(); i++) {\r\n      //Serial.print((char)dateFile.read());\r\n      boolStr2 += (char)dateFile.read();\r\n      }\r\n      //去除前后空格\r\n      boolStr2.trim();\r\n      Serial.println(boolStr2);\r\n      \r\n      if(boolStr2==\"true\"){\r\n        digitalWrite(Power8266,HIGH);\r\n      }\r\n    }\r\n  }\r\n\r\n  delay(200);\r\n  ApStart();\r\n  delay(200);\r\n  Serial.println(\"启动网页遥控AP\");\r\n  delay(200);\r\n  WebServerStart();\r\n}\r\n\r\nvoid loop(void) {\r\n  webServer.handleClient();\r\n\r\n}\r\n\r\n\r\n//------- 展示页面-------\r\nvoid handleRoot() {\r\n  webServer.send(500, \"text/html\", html);\r\n}\r\nvoid handleNotFound(void) {\r\n  webServer.send(404, \"text/plain\", \"404-The page is not Found!\");\r\n}\r\nvoid xyzgo() {\r\n  request = webServer.arg(\"xyz\");\r\n  //Serial.println(request);\r\n  if (request == \"↑\") {\r\n    if(globalBL==false){\r\n      LeftFore();\r\n      RightFore();\r\n    }else{\r\n      LeftAft();\r\n      RightAft();\r\n    }\r\n    runState = \"↑\";\r\n    webServer.send(200, \"text/plane\", request);\r\n    Serial.println(\"↑\");\r\n    return;\r\n  }\r\n  if (request == \"↓\") {\r\n    if(globalBL==false){\r\n      LeftAft();\r\n      RightAft();\r\n    }else{\r\n      LeftFore();\r\n      RightFore();\r\n    }\r\n    runState = \"↓\";\r\n    webServer.send(200, \"text/plane\", request);\r\n    Serial.println(\"↓\");\r\n    return;\r\n  }\r\n  if (request == \"■\") {\r\n    StopAllExec();\r\n    runState = \"■\";\r\n    webServer.send(200, \"text/plane\", request);\r\n    Serial.println(\"■\");\r\n    return;\r\n  }\r\n  if (request == \"←\") {\r\n      RightFore();\r\n      LeftAft();\r\n    runState = \"←\";\r\n    webServer.send(200, \"text/plane\", request);\r\n    Serial.println(\"←\");\r\n    return;\r\n  }\r\n  if (request == \"→\") {\r\n      LeftFore();\r\n      RightAft();\r\n    \r\n    runState = \"→\";\r\n    webServer.send(200, \"text/plane\", request);\r\n    Serial.println(\"→\");\r\n    return;\r\n  }\r\n  if (request == \"rise\") {\r\n    digitalWrite(decline, LOW);\r\n    digitalWrite(rise, HIGH);\r\n    webServer.send(200, \"text/plane\", request);\r\n    return;\r\n  }\r\n  if (request == \"decline\") {\r\n    digitalWrite(rise, LOW);\r\n    digitalWrite(decline, HIGH);\r\n    webServer.send(200, \"text/plane\", request);\r\n    return;\r\n  }\r\n  if (request == \"TurnOff\") {\r\n    digitalWrite(TurnOff, HIGH);\r\n    webServer.send(200, \"text/plane\", request);\r\n    delay(3000);\r\n    digitalWrite(TurnOff, LOW);\r\n    return;\r\n  }\r\n  if (request == \"speedA\") {\r\n    if (PwmNow >= 178) {\r\n      webServer.send(200, \"text/plane\", \"已达到70%限速,无法继续加速\");\r\n    } else {\r\n      PwmNow = PwmNow + fadeAmount;\r\n      ledcWrite(channel1, PwmNow);\r\n      int temp=PwmNow*100/255;\r\n      String tempStr=String(temp)+\"%\";\r\n      webServer.send(200, \"text/plane\", tempStr);\r\n      Serial.println(\"speedA\");\r\n    }\r\n    return;\r\n  }\r\n  if (request == \"speedB\") {\r\n    if (PwmNow <= 77) {\r\n      webServer.send(200, \"text/plane\", \"已达到30%限速,无法继续减速\");\r\n    } else {\r\n      PwmNow = PwmNow - fadeAmount;\r\n      ledcWrite(channel1, PwmNow);\r\n      int temp=PwmNow*100/255;\r\n      String tempStr=String(temp)+\"%\";\r\n      webServer.send(200, \"text/plane\", tempStr);\r\n      Serial.println(\"speedB\");\r\n    }\r\n\r\n    return;\r\n  }\r\n  //HtmlSetWifi();\r\n}\r\n\r\nvoid ApStart() {\r\n  Serial.begin(115200);\r\n  WiFi.mode(WIFI_AP);\r\n  IPAddress local_IP(192, 168, 168, 2);\r\n  IPAddress gateway(192, 168, 168, 1);\r\n  IPAddress subnet(255, 255, 255, 0);\r\n  WiFi.softAPConfig(local_IP, gateway, subnet);\r\n  String mymac=WiFi.macAddress();\r\n  Serial.println(mymac);\r\n  mymac.replace(\":\",\"\");\r\n  mymac.toLowerCase();\r\n  String temp1=mymac.substring(0,2);\r\n  String temp2=mymac.substring(10,12);\r\n  String ApPasswd=temp1+temp2;\r\n  Serial.println(ApPasswd);\r\n  //启动AP模式，并设置账号和密码\r\n  boolean result = WiFi.softAP(\"esp32WebServer192.168.168.2\", \"www.360xyz.cn\");\r\n  if (result) {\r\n    //输出 soft-ap ip地址\r\n    Serial.println(String(\"Soft-AP IP address = \") + WiFi.softAPIP());\r\n  }\r\n}\r\n//------- 展示页面-------\r\n\r\nvoid WebServerStart() {\r\n  //-----------------启动webserver网络服务--------------------\r\n  webServer.begin();              // 启用网络服务\r\n  webServer.on(\"/\", handleRoot);  // / 在HTTP中，表示请求首页服务，\r\n  webServer.on(\"/xyzgo\", xyzgo);\r\n  webServer.onNotFound(handleNotFound);  // 当服务器没找到所需的服务，调用404函数\r\n  Serial.println(\"webserver started\");\r\n}\r\n\r\nvoid SetSPIFFS(String direction, String str) {\r\n  //写入数据\r\n  SPIFFS.remove(direction);\r\n  delay(500);\r\n  SPIFFS.begin();\r\n  File dataFile = SPIFFS.open(direction, \"w\");\r\n  dataFile.println(str);\r\n  dataFile.close();\r\n}\r\n//左轮前进\r\nvoid LeftFore() {\r\n  digitalWrite(LeftRetreat, LOW);\r\n  digitalWrite(LeftAdvance, HIGH);\r\n}\r\n//左轮后退\r\nvoid LeftAft() {\r\n  digitalWrite(LeftAdvance, LOW);\r\n  digitalWrite(LeftRetreat, HIGH);\r\n}\r\n//右轮前进\r\nvoid RightFore() {\r\n  digitalWrite(RightRetreat, LOW);\r\n  digitalWrite(RightAdvance, HIGH);\r\n}\r\n//右轮后退\r\nvoid RightAft() {\r\n  digitalWrite(RightAdvance, LOW);\r\n  digitalWrite(RightRetreat, HIGH);\r\n}\r\nvoid StopAllExec() {\r\n  digitalWrite(LeftAdvance, LOW);\r\n  digitalWrite(RightAdvance, LOW);\r\n  digitalWrite(LeftRetreat, LOW);\r\n  digitalWrite(RightRetreat, LOW);\r\n  digitalWrite(rise, LOW);\r\n  digitalWrite(decline, LOW);\r\n  delay(500);\r\n}\r\n//LED 闪烁\r\nvoid ledFlicker(){\r\n  digitalWrite(light22, HIGH);\r\n  delay(500);\r\n  digitalWrite(light22, LOW);\r\n  delay(500);\r\n  digitalWrite(light22, HIGH);\r\n  delay(500);\r\n  digitalWrite(light22, LOW);\r\n}','',1),
(198,4,'ESP8266 https GET','#include <ArduinoJson.h>\r\n#include <ESP8266WiFi.h>\r\n\r\nconst char* ssid = \"CMCC-j3vt\";\r\nconst char* password = \"qq282246101\";\r\n\r\n\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  delay(10);\r\n\r\n  Serial.println();\r\n  Serial.print(\"Connecting to \");\r\n  Serial.println(ssid);\r\n\r\n  WiFi.begin(ssid, password);\r\n\r\n  while (WiFi.status() != WL_CONNECTED) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n  }\r\n\r\n  Serial.println(\"\");\r\n  Serial.println(\"WiFi connected\");\r\n  Serial.println(\"IP address: \");\r\n  Serial.println(WiFi.localIP());\r\n}\r\nString MyHttpsGet(String host, String url) {\r\n  // Use WiFiClient class to create TCP connections\r\n  WiFiClientSecure client;\r\n  const int httpPort = 443;\r\n  client.setInsecure(); \r\n  if (!client.connect(host, httpPort)) { \r\n    Serial.println(\"connection failed\");\r\n    return \"\";\r\n  }\r\n\r\n  // This will send the request to the server\r\n  client.print(String(\"GET \") + url + \" HTTP/1.1\\r\\n\" +\r\n               \"Host: \" + host + \"\\r\\n\" +\r\n               \"Connection: close\\r\\n\\r\\n\");\r\n  String ss;\r\n  while (client.connected())\r\n  {\r\n    String line = client.readStringUntil(\'\\n\');\r\n    if (line.length() != 0) {\r\n      ss = ss + line;\r\n    }\r\n  }\r\n  return ss.substring(ss.lastIndexOf(\"Connection: close\") + 17);\r\n  client.stop();\r\n}\r\nvoid loop() {\r\n  String host = \"www.360xyz.cn\";\r\n  String url = \"/query/GetDate\";\r\n\r\n  String a = MyHttpsGet(host, url);\r\n  Serial.println(a);\r\n  delay(10000);\r\n}','',1),
(199,4,'esp32 https GET','String cat=String(\"\")+\"-----BEGIN CERTIFICATE-----\\r\\n\"+\r\n\"MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb\\r\\n\"+\r\n\"MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\\r\\n\"+\r\n\"GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj\\r\\n\"+\r\n\"YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL\\r\\n\"+\r\n\"MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\\r\\n\"+\r\n\"BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM\\r\\n\"+\r\n\"GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP\\r\\n\"+\r\n\"ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua\\r\\n\"+\r\n\"BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe\\r\\n\"+\r\n\"3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4\\r\\n\"+\r\n\"YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR\\r\\n\"+\r\n\"rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm\\r\\n\"+\r\n\"ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU\\r\\n\"+\r\n\"oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF\\r\\n\"+\r\n\"MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v\\r\\n\"+\r\n\"QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t\\r\\n\"+\r\n\"b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF\\r\\n\"+\r\n\"AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q\\r\\n\"+\r\n\"GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz\\r\\n\"+\r\n\"Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2\\r\\n\"+\r\n\"G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi\\r\\n\"+\r\n\"l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3\\r\\n\"+\r\n\"smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==\\r\\n\"+\r\n\"-----END CERTIFICATE-----\";\r\nString MyHttpsGet(String url){\r\n  HTTPClient http;\r\n  String result;\r\n  http.begin(url,cat.c_str());\r\n  int httpCode=http.GET();\r\n  if(httpCode>0){\r\n     result=http.getString();\r\n  }\r\n  http.end();\r\n  return result;\r\n}','',1),
(200,4,'ESP32 多开一条线程','\r\n#include <Thread.h>\r\nThread myThread = Thread();\r\nvoid setup(void) {\r\n  myThread.onRun(niceCallback);\r\n  myThread.setInterval(10000);\r\n}\r\nvoid loop(void) {\r\n  if (myThread.shouldRun()) {\r\n    myThread.run();\r\n  }\r\n}\r\n\r\n\r\n\r\nvoid niceCallback() {\r\n  String HI = esp32getHI();\r\n  Serial.println(HI);\r\n  tft.setTextColor(TFT_WHITE, TFT_BLACK);\r\n  tft.setCursor(10, 10, 2);  //设置起始坐标(10, 10)，1 号字体\r\n  tft.println(HI);           //显示文字\r\n  millis();\r\n}','',1),
(205,5,'window 窗口创建使用','#include <windows.h>\r\n#include <commctrl.h>>\r\nUINT IDC_BUTTON_1=200;\r\n/* This is where all the input to the window goes to这是窗口的所有输入的位置 */\r\nLRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {\r\n\r\n	switch(Message) {\r\n		//在创建窗口过程时 未显示窗口前 接收 WM_CREATE 这时可以创建控件 \r\n		case WM_CREATE: {\r\n			UINT IDC_BUTTON_1=200;\r\n			HWND hButtonWnd=CreateWindow(WC_BUTTON,\"确定\",WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,100,100,50,20,hwnd,(HMENU)IDC_BUTTON_1,NULL,NULL);\r\n\r\n		}\r\n		break;\r\n		//接收 来自button的点击事件 WM_COMMAND\r\n		case WM_COMMAND: {\r\n			UINT buttio_id=LOWORD(wParam);\r\n			UINT nCode=HIWORD(wParam);\r\n			if(nCode==BN_CLICKED && buttio_id==IDC_BUTTON_1) {\r\n				MessageBox(hwnd,\"弹出消息了\",\"tip\",MB_OK);\r\n			}\r\n		}\r\n		break;\r\n		/* Upon destruction, tell the main thread to stop 销毁时，告诉主线程停止*/\r\n		case WM_DESTROY: {\r\n			PostQuitMessage(0);\r\n			break;\r\n		}\r\n\r\n		/* All other messages (a lot of them) are processed using default procedures */\r\n		default:\r\n			return DefWindowProc(hwnd, Message, wParam, lParam);\r\n	}\r\n	return 0;\r\n}\r\n\r\n/* The \'main\' function of Win32 GUI programs: this is where execution starts */\r\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {\r\n	WNDCLASSEX wc; /* A properties struct of our window  窗口的一个属性结构体*/\r\n	HWND hwnd; /* A \'HANDLE\', hence the H, or a pointer to our window 一个\'HANDLE\'，也就是H，或者一个指向窗口的指针*/\r\n	MSG msg; /* A temporary location for all messages 所有消息的临时位置*/\r\n\r\n	/* zero out the struct and set the stuff we want to modify 将结构归零并设置我们想要修改的内容 */\r\n	memset(&wc,0,sizeof(wc));\r\n	wc.cbSize		 = sizeof(WNDCLASSEX);\r\n	wc.lpfnWndProc	 = WndProc; /* This is where we will send messages to 这是我们要发送消息的地方*/\r\n	wc.hInstance	 = hInstance;\r\n	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);\r\n\r\n	/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it 白色，COLOR_WINDOW只是一个系统颜色的#定义，尝试Ctrl+点击它*/\r\n	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);\r\n	wc.lpszClassName = \"WindowClass\";\r\n	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon 加载一个标准图标*/\r\n	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION); /* use the name \"A\" to use the project icon 使用名称“A”来使用项目图标*/\r\n	//MessageBox(NULL,\"111111\",\"标题\",MB_ICONEXCLAMATION|MB_OK);\r\n	if(!RegisterClassEx(&wc)) {\r\n		MessageBox(NULL, \"Window Registration Failed!\",\"Error!\",MB_ICONEXCLAMATION|MB_OK);\r\n		return 0;\r\n	}\r\n\r\n	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,\"WindowClass\",\"Caption123\",WS_VISIBLE|WS_OVERLAPPEDWINDOW,\r\n	                      CW_USEDEFAULT, /* x */\r\n	                      CW_USEDEFAULT, /* y */\r\n	                      640, /* width */\r\n	                      480, /* height */\r\n	                      NULL,NULL,hInstance,NULL);\r\n\r\n	if(hwnd == NULL) {\r\n		MessageBox(NULL, \"Window Creation Failed!\",\"Error!\",MB_ICONEXCLAMATION|MB_OK);\r\n		return 0;\r\n	}\r\n\r\n\r\n\r\n\r\n	/*\r\n		This is the heart of our program where all input is processed and\r\n		sent to WndProc. Note that GetMessage blocks code flow until it receives something, so\r\n		this loop will not produce unreasonably high CPU usage\r\n	*/\r\n	while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */\r\n		TranslateMessage(&msg); /* Translate key codes to chars if present */\r\n		DispatchMessage(&msg); /* Send it to WndProc */\r\n	}\r\n	return msg.wParam;\r\n}','',1),
(206,5,'window窗口API开发一些常用函数','都是在WndProc 里面响应\r\nWM_CREATE  //窗口创建前\r\n\r\nWM_COMMAND  //窗口点击事件\r\nUINT nCode=HIWORD(wParam);\r\nnCode==BN_CLICKED\r\n//WS_CHILD子窗口\r\n//WS_VISIBLE 显示的意思\r\n\r\n//HMENU  UINT强制类型转换HMENU\r\nhwnd H= CreateWindow(窗口类型,控件名,样式(WS_CHILD|WS_VISIBLE),坐标x, 坐标y,宽,高,句柄,(HMENU)菜单(控件id),NULL,NULL );\r\n','',1),
(207,5,'c++类','#include <iostream>\r\nusing namespace std;\r\n\r\nclass Xyz\r\n{\r\n    int sz;\r\n    // 构造方法\r\npublic:\r\n    Xyz(int size)\r\n    {\r\n        sz = size;\r\n    }\r\n\r\npublic:\r\n    int Show()\r\n    {\r\n        return sz;\r\n    }\r\n\r\npublic:\r\n    string abc()\r\n    {\r\n        return \"Hello Worde\";\r\n    }\r\n    // 析构方法\r\npublic:\r\n    ~Xyz()\r\n    {\r\n    }\r\n};\r\n//main函数 是必须 放最后面 不然调用不了上面的类\r\nint main()\r\n{\r\n    Xyz abc(456);\r\n    cout << abc.abc();\r\n    return 0;\r\n}\r\n','',1),
(208,5,'c++引用 指针','#include <iostream>\r\nusing namespace std;\r\nint main()\r\n{\r\n    string a = \"123\";\r\n    // b变量是引用变量 a变量是本体\r\n    // 随着本体变量a的变化而变化\r\n    string &b = a;\r\n    a = \"321\";\r\n\r\n    // c是指针变量 存储的是a变量的内存地址\r\n    string *c = &a;\r\n    cout << b << endl;\r\n    cout << c << endl;\r\n    return 0;\r\n}\r\n输出结果 \r\n321\r\n0x12ebfffb90','',1),
(209,5,'c++ 获取当前时间','#include <ctime>\r\nusing namespace std;\r\nclass NowTime\r\n{\r\npublic:\r\n	int Time()\r\n	{\r\n		return time(0);\r\n	}\r\n\r\npublic:\r\n	string DateTime()\r\n	{\r\n		time_t now = time(0);\r\n		tm *p = localtime(&now);\r\n		int a = printf(\"%d-%d-%d %02d:%02d:%02d\\n\", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);\r\n		return to_string(a);\r\n	}\r\n};','',1),
(210,2,'apache2+php7卸载重装','一、删除apache的相关包及配置\r\n    sudo apt-get autoremove apache*\r\n二、删除关联\r\n    sudo find /etc -name \"*apache*\" |xargs  rm -rf\r\n三、清除dept列表\r\n    sudo apt purge `dpkg -l | grep apache| awk \'{print $2}\' |tr \"\\n\" \" \"`\r\n\r\n一、删除php的相关包及配置\r\n    sudo apt-get autoremove php7*\r\n二、删除关联\r\n    sudo find /etc -name \"*php*\" |xargs  rm -rf\r\n三、清除dept列表\r\n    sudo apt purge `dpkg -l | grep php| awk \'{print $2}\' |tr \"\\n\" \" \"`\r\n\r\n\r\napt install apache2 -y\r\nvi /etc/apache2/ports.conf   可以修改端口\r\n\r\nsudo apt install php libapache2-mod-php  //apache 关联php\r\nsudo systemctl restart apache2\r\nsudo a2enmod rewrite  //apache2 rewrite\r\n\r\nvi /etc/apache2/sites-enabled/000-default.conf\r\n<VirtualHost *:80> 里添加\r\n\r\n     <Directory /var/www/html>\r\n       Options Indexes FollowSymLinks\r\n       AllowOverride All\r\n       Require all granted\r\n     </Directory>\r\n\r\napt install php -y\r\napt install php-gd\r\napt install php-mysqli\r\napt install php-mbstring\r\n','',1),
(211,2,'要取消phpMyAdmin最大上传2M的限制','修改 php.ini 文件：\r\n打开 php.ini 文件，该文件的位置可能因服务器配置而异。常见位置是在 PHP 安装目录下。\r\n找到并修改以下参数：\r\nupload_max_filesize：允许上传文件大小的最大值，默认为 2M。将其修改为你需要的大小，例如 10M（即 upload_max_filesize = 10M）。\r\npost_max_size：指通过表单 POST 给 PHP 的所能接收的最大值，包括表单里的所有值。默认为 8M。设置该值必须大于 upload_max_filesize，例如 post_max_size = 10M。\r\nfile_uploads：确认其值为 on，以确保允许通过 HTTP 上传文件。\r\nupload_tmp_dir：指定文件上传至服务器上存储临时文件的目录。如果不指定，将使用系统默认的临时目录。\r\n还可以考虑修改以下参数，以避免因页面执行时间或内存限制导致的问题：\r\nmax_execution_time：每个 PHP 页面运行的最大时间值（秒），默认 30 秒。可适当增大，例如 max_execution_time = 300。\r\nmax_input_time：每个 PHP 页面接收数据所需的最大时间，默认 60 秒。可适当增大，例如 max_input_time = 300。\r\nmemory_limit：每个 PHP 页面所占用的最大内存，默认 8M。需根据服务器实际情况进行调整，确保其大于 post_max_size，例如 memory_limit = 128M。\r\n修改完 php.ini 文件后，需要重启 Web 服务器（如 Apache 或 Nginx），使修改生效。','',1),
(212,3,'个别浏览器session不同步','火狐浏览器,post更改session不会同步,还有验证码都是失败','',1),
(213,4,'nodeMCU esp8266获取串口2数据并POST','#include <ESP8266WiFi.h>\r\n#include <ESP8266HTTPClient.h>\r\n#include <SoftwareSerial.h>\r\nWiFiClient wificlient;\r\n#define RX_PIN 13  // 接收引脚\r\n#define TX_PIN 15  // 发送引脚\r\nSoftwareSerial mySerial(RX_PIN, TX_PIN);\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  mySerial.begin(19200);\r\n  WiFi.begin(\"webserver\", \"www.nobiggie.cn\");\r\n  delay(500);\r\n  WiFi.mode(WIFI_STA);\r\n  Serial.println(\"FlashConnetWifi->connet\");\r\n  while (1) {\r\n    delay(500);\r\n    Serial.print(\" . \");\r\n    if (WiFi.status() == WL_CONNECTED) {\r\n      Serial.println(\"FlashConnetWifi 闪存配置连接成功\");\r\n      break;\r\n    }\r\n  }\r\n}\r\n\r\nvoid loop() {\r\n  if (mySerial.available()) {\r\n    String receivedData = \"\";\r\n    int i=1;\r\n    while (mySerial.available()) {\r\n      char c = mySerial.read();\r\n      receivedData += c;\r\n      i++;\r\n    }\r\n\r\n    if (i>10) {\r\n      Serial.println(\"单号数据\"+receivedData);\r\n      String postStr=\"number=\"+receivedData;\r\n      esp8266Post(\"http://192.168.7.254/api/scan\",postStr);\r\n    }\r\n  }\r\n}\r\nString esp8266Post(String url, String postStr) {\r\n  HTTPClient http;\r\n  String response;\r\n  http.begin(wificlient, url);\r\n  http.setTimeout(3000);\r\n  //需要传输的数据\r\n  char dataBuff[postStr.length()];\r\n  strcpy(dataBuff, postStr.c_str());\r\n  //头信息，需要的反注释就可以\r\n  //http.addHeader(\"Content-Type\", \"application/json;charset=utf-8\");\r\n  http.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n  int httpCode = http.POST(dataBuff);\r\n  if (httpCode == 200) {\r\n    response = http.getString();\r\n    return response;\r\n  } else {\r\n    return \"\";\r\n  }\r\n  http.end();\r\n}','',1),
(220,3,'float64转string','ff := 0.64\r\nstr := fmt.Sprintf(\"%.2f\", ff)','',1),
(221,3,'string转float64','    str := \"3.14\"\r\n    num, err := strconv.ParseFloat(str, 64)\r\n    if err!= nil {\r\n        // 处理转换错误\r\n        fmt.Println(\"转换出错:\", err)\r\n        return\r\n    }','',1),
(222,3,'int转string','str:= fmt.Sprintf(\"%d\", i)','',1),
(223,3,'string转int','    str := \"123\"\r\n    num, err := strconv.Atoi(str)\r\n    if err!= nil {\r\n        fmt.Println(\"转换出错:\", err)\r\n        return\r\n    }','',1),
(224,3,'bool转string','    b := true\r\n    str := fmt.Sprintf(\"%t\", b)','',1),
(225,3,'string转bool','str := \"true\"\r\nb, err := strconv.ParseBool(str)\r\nif err != nil {\r\n	fmt.Println(\"转换错误:\", err)\r\n	return\r\n}','',1),
(226,3,'websocket','func (ggg ServiceClass) Wss(ctx *gin.Context) {\r\n	if WebsocketLimiter.Allow() {\r\n		if ctx.Request.Method == \"GET\" {\r\n			var ws = websocket.Upgrader{\r\n				WriteBufferSize: 1028,\r\n				ReadBufferSize:  1028,\r\n				//跨域\r\n				CheckOrigin: func(r *http.Request) bool {\r\n					return true\r\n				},\r\n			}\r\n			var user, passwd, room string\r\n			webOs := true //默认网页登录\r\n			if ctx.Query(\"user\") != \"\" {\r\n				//fmt.Println(\"帐号用户\")\r\n				user = ctx.Query(\"user\")\r\n				passwd = ctx.Query(\"passwd\")\r\n				room = ctx.Query(\"room\")\r\n				if user == \"\" || passwd == \"\" || room == \"\" {\r\n					return\r\n				}\r\n				u := \"wQMh8OVTeE\"\r\n				//密码不是站长就验证  站长可以进任何房间\r\n				if passwd != u {\r\n					roomId := 0\r\n					bl1 := models.Db.Sql(\"SELECT id FROM WebsocketRoom WHERE name=?\", room).Row(&roomId)\r\n					if !bl1 {\r\n						return\r\n					}\r\n					//验证 帐号密码,房间room\r\n					openid := \"\"\r\n					b := models.Db.Sql(\"SELECT openid FROM Users WHERE user=? AND passwd=? AND roomid=?\", user, passwd, roomId).Row(&openid)\r\n					if !b {\r\n						return\r\n					}\r\n					if openid[len(openid)-10:] != passwd {\r\n						return\r\n					}\r\n				}\r\n			} else {\r\n				authorization := ctx.Request.Header[\"Authorization\"][0]\r\n				if authorization != \"\" {\r\n					webOs = false //非网页登录\r\n					//fmt.Println(\"单片机\")\r\n					arr, err7 := models.WebSystem.Parse_str(authorization)\r\n					if err7 != nil {\r\n						fmt.Println(\"单片机解析错误\")\r\n						return\r\n					}\r\n					user = arr[\"user\"]\r\n					passwd = arr[\"passwd\"]\r\n					room = arr[\"room\"]\r\n					if user == \"\" || passwd == \"\" || room == \"\" {\r\n						return\r\n					}\r\n				}\r\n				roomId := 0\r\n				bl1 := models.Db.Sql(\"SELECT id FROM WebsocketRoom WHERE name=?\", room).Row(&roomId)\r\n				if !bl1 {\r\n					return\r\n				}\r\n				//验证 帐号密码,房间room\r\n				passwdSql := \"\"\r\n				b := models.Db.Sql(\"SELECT id FROM Users WHERE user=? AND passwd=? AND roomid=?\", user, passwd, roomId).Row(&passwdSql)\r\n				if !b {\r\n					return\r\n				}\r\n			}\r\n			//正确 升级为websocket\r\n			conn, _ := ws.Upgrade(ctx.Writer, ctx.Request, nil)\r\n			//检查一下 自己组里有没有相同名字的,如果有把之前登录的同名用户下线\r\n			duplicationName := false //如果有同名用户 为 true\r\n			gUser := []string{}\r\n\r\n			if len(models.GroupFd[room]) != 0 {\r\n				for _, v := range models.GroupFd[room] {\r\n					if models.Clients[v].User == user {\r\n						duplicationName = true\r\n						//下线该用户名\r\n						models.Clients[v].Client.Close()\r\n\r\n						//重组在线成员列表\r\n						gFd := []uint32{}\r\n\r\n						for _, vv := range models.GroupFd[room] {\r\n							if v != vv {\r\n								gFd = append(gFd, vv)\r\n								gUser = append(gUser, models.Clients[vv].User)\r\n								//同时向在线该组成员 推送 用户重新上线消息\r\n								models.RWlock.Lock()\r\n								models.Clients[vv].Client.WriteMessage(websocket.TextMessage, []byte(\"SystemMessage: \"+user+\" 重新上线了\"))\r\n								models.RWlock.Unlock()\r\n							}\r\n						}\r\n						//得到去除同名的在线组成员 下一步把自己 加到该分组中\r\n						models.GroupFd[room] = gFd\r\n						models.GroupUser[room] = gUser\r\n						for _, v := range models.GroupFd[room] {\r\n							tmp := map[string][]string{}\r\n							//组成员赋值给 map[\"Group\"] 发送json\r\n							tmp[\"Group\"] = models.GroupUser[room]\r\n							models.Clients[v].Client.WriteJSON(tmp)\r\n						}\r\n\r\n						break\r\n					}\r\n				}\r\n				//加到 自己的fd 加到分组中 把自己的用户名 加到 在线组成员列表中\r\n				models.GroupFd[room] = append(models.GroupFd[room], models.Fd)\r\n				models.GroupUser[room] = append(models.GroupUser[room], user)\r\n			} else {\r\n				models.GroupFd[room] = []uint32{models.Fd}\r\n				models.GroupUser[room] = []string{user}\r\n			}\r\n			// 	//注册到系统 room fd user\r\n			client := models.WebsocketStruct{Client: conn, User: user, Fd: models.Fd, Room: room, WebOs: webOs}\r\n			models.RWlock.Lock()\r\n			models.Clients[models.Fd] = &client\r\n			models.RWlock.Unlock()\r\n			pongTimeOut := make(chan bool)\r\n\r\n			if len(models.GroupFd[room]) != 0 {\r\n				//推送在线组成员到每个成员中\r\n				//fmt.Println(models.GroupUser[room])\r\n				for _, v := range models.GroupFd[room] {\r\n					//不同名 向在该组在线成员推送 上线消息\r\n					if !duplicationName && v != models.Fd {\r\n						models.Clients[v].Client.WriteMessage(websocket.TextMessage, []byte(\"SystemMessage: \"+user+\" 上线了\"))\r\n					}\r\n					tmp := map[string][]string{}\r\n					tmp[\"Group\"] = models.GroupUser[room]\r\n					models.Clients[v].Client.WriteJSON(tmp)\r\n				}\r\n			}\r\n\r\n			//返回ping 向客户表示连接成功\r\n			if webOs {\r\n				conn.WriteMessage(websocket.PingMessage, []byte{})\r\n			}\r\n			//监听客户端close事件或者非常断开\r\n			conn.SetCloseHandler(func(code int, text string) error {\r\n				gFd := []uint32{}\r\n				for _, v := range models.GroupFd[room] {\r\n					if v != client.Fd {\r\n						gFd = append(gFd, v)\r\n					}\r\n				}\r\n				models.GroupFd[room] = gFd\r\n\r\n				gFd = []uint32{}\r\n				gUser = []string{}\r\n				//向组里广播该用户已经下线\r\n				for _, v := range models.GroupFd[room] {\r\n					models.Clients[v].Client.WriteMessage(websocket.TextMessage, []byte(\"system: \"+client.User+\"下线了\"))\r\n					if models.Clients[v].User != client.User {\r\n						gFd = append(gFd, v)\r\n						gUser = append(gUser, models.Clients[v].User)\r\n					}\r\n				}\r\n				//清除Client 连接\r\n				models.Clients[client.Fd].Client.Close()\r\n				//清除Clients 下这个成员的Fd 写列队互斥锁\r\n				models.RWlock.Lock()\r\n				delete(models.Clients, client.Fd)\r\n				models.RWlock.Unlock()\r\n				//组里有人下线就更新组成员\r\n				models.GroupFd[room] = gFd\r\n				models.GroupUser[room] = gUser\r\n				//然后逐个发送组成员 给组里的成员\r\n				for _, v := range models.GroupFd[room] {\r\n					tmp := map[string][]string{}\r\n					//组成员赋值给 map[\"Group\"] 发送json\r\n					tmp[\"Group\"] = models.GroupUser[room]\r\n					models.Clients[v].Client.WriteJSON(tmp)\r\n				}\r\n\r\n				return nil\r\n			})\r\n			if !webOs {\r\n				go func(fd uint32) {\r\n					breakBl := false //为true跳出循环\r\n					room := models.Clients[fd].Room\r\n					user := models.Clients[fd].User\r\n					ticker := time.NewTicker(time.Second * 20)\r\n					defer ticker.Stop()\r\n					for {\r\n						select {\r\n						case <-ticker.C:\r\n							//fmt.Println(\"每20秒发送ping\")\r\n							conn.WriteMessage(websocket.PingMessage, []byte{})\r\n						case <-pongTimeOut: //接受到pong超时chan\r\n							// 处理超时的情况\r\n							fmt.Println(\"发送 Ping 消息出错，客户端可能离线:\")\r\n							groupFdTmp := []uint32{}\r\n							for _, v := range models.GroupFd[room] {\r\n								if v != fd {\r\n									groupFdTmp = append(groupFdTmp, v)\r\n								}\r\n							}\r\n							models.GroupFd[room] = groupFdTmp\r\n							groupUserTmp := []string{}\r\n							for _, v := range models.GroupUser[room] {\r\n								if v != user {\r\n									groupUserTmp = append(groupUserTmp, v)\r\n								}\r\n							}\r\n							models.GroupUser[room] = groupUserTmp\r\n							//fmt.Println(models.GroupUser[room])\r\n							if len(models.GroupFd[room]) != 0 {\r\n								//向组里广播该用户已经下线\r\n								for _, v := range models.GroupFd[room] {\r\n									if models.Clients[v] == nil {\r\n										continue\r\n									}\r\n									//不同名 向在该组在线成员推送 上线消息\r\n									mm := make(map[string]string)\r\n									mm[\"date\"] = time.Now().Format(\"15:04:05\")\r\n									mm[\"message\"] = user + \" 下线了\"\r\n									mm[\"user\"] = \"system\"\r\n									models.RWlock.Lock()\r\n\r\n									models.Clients[v].Client.WriteJSON(mm)\r\n\r\n									models.RWlock.Unlock()\r\n									//更新组用户\r\n									tmp := map[string][]string{}\r\n									tmp[\"Group\"] = models.GroupUser[room]\r\n									models.RWlock.Lock()\r\n\r\n									models.Clients[v].Client.WriteJSON(tmp)\r\n\r\n									models.RWlock.Unlock()\r\n									if models.Clients[fd] != nil {\r\n										models.Clients[fd].Client.Close()\r\n									}\r\n\r\n									//fmt.Println(models.Clients)\r\n									//models.RWlock.Lock()\r\n									//delete(models.Clients, fd)\r\n									//models.RWlock.Unlock()\r\n									//fmt.Println(models.Clients)\r\n								}\r\n							}\r\n							breakBl = true\r\n						}\r\n						if breakBl {\r\n							fmt.Println(\"已经结束循环\")\r\n							break\r\n						}\r\n					}\r\n				}(models.Fd)\r\n				//不支持无阻塞 Pong 处理\r\n				conn.SetPongHandler(func(appData string) error {\r\n					//fmt.Println(\"单片机返回pong 消息是\" + appData)\r\n					//设置pong超时时间 因为这个只能生效一次,所以每次接受到pong都设置一次\r\n					conn.SetReadDeadline(time.Now().Add(time.Second * 50))\r\n					return nil\r\n				})\r\n\r\n			}\r\n\r\n			models.Fd++\r\n\r\n			for {\r\n				//第一个参数是数据类型,只是一个int,1代表String,2代表[]byte -1代表pong超时\r\n				//接收时是普通字符串。服务器返回给客户端是json\r\n				messageType, data, err := conn.ReadMessage()\r\n				if err != nil {\r\n					fmt.Println(\"err\")\r\n					if messageType == -1 { //pong超时\r\n						pongTimeOut <- true\r\n					}\r\n					return\r\n				}\r\n				mm := make(map[string]string)\r\n				if room == \"server\" {\r\n					mm[\"fd\"] = fmt.Sprintf(\"%d\", client.Fd)\r\n					mm[\"message\"] = string(data)\r\n					models.WebsocketMessageChan <- mm\r\n				} else {\r\n					mm[\"date\"] = time.Now().Format(\"15:04:05\")\r\n					str := string(data)\r\n					mm[\"message\"] = strings.Trim(str, \" \")\r\n					mm[\"user\"] = user\r\n					for _, v := range models.GroupFd[room] {\r\n						if client.Fd != v {\r\n							models.Clients[v].Client.WriteJSON(mm)\r\n						}\r\n					}\r\n					//admin 温湿度\r\n					if room == \"admin\" {\r\n						if strings.Contains(mm[\"message\"], \".\") && strings.Contains(mm[\"message\"], \",\") {\r\n							thStr := mm[\"message\"]\r\n							ii := strings.LastIndex(thStr, \",\")\r\n							tStr := thStr[0:ii]\r\n							hStr := thStr[ii+1:]\r\n							models.WebSystem.RequestPost(\"http://\"+models.Host+\"/wechat/door1publish\", \"msg=\"+tStr+hStr+\"&send=publish\")\r\n						}\r\n						if strings.Contains(mm[\"message\"], \"限制\") {\r\n							models.WebSystem.RequestPost(\"http://\"+models.Host+\"/wechat/door1publish\", \"msg=\"+mm[\"message\"]+\"&send=publish\")\r\n						}\r\n						if strings.Contains(mm[\"message\"], \"广告牌\") {\r\n							models.WebSystem.RequestPost(\"http://\"+models.Host+\"/wechat/door1publish\", \"msg=\"+mm[\"message\"]+\"&send=publish\")\r\n						}\r\n						if strings.Contains(mm[\"message\"], \"mydoor1.power1On\") {\r\n							msg := mm[\"message\"]\r\n							n := strings.Index(msg, \"mydoor1.power1On\")\r\n							if n != -1 {\r\n								t := msg[16:]\r\n								intt, _ := strconv.Atoi(t)\r\n								if intt != 0 {\r\n									if !Mydoor1power1On {\r\n										Mydoor1power1On = true\r\n										fmt.Println(\"定时开始\", intt)\r\n										go func() {\r\n											//定时intt 小时后关闭电源\r\n											timer := time.NewTimer(time.Duration(intt) * time.Hour)\r\n											for {\r\n												<-timer.C\r\n												timer.Stop()\r\n												Mydoor1power1On = false\r\n												models.WebsocketMessageChan <- map[string]string{\"message\": \"mydoor1.power1Off\"}\r\n												break\r\n											}\r\n										}()\r\n									}\r\n								}\r\n							}\r\n						}\r\n						if mm[\"message\"] == \"mydoor1.power1Off\" {\r\n							Mydoor1power1On = false\r\n						}\r\n					}\r\n				}\r\n			}\r\n\r\n		}\r\n	} else {\r\n		ctx.String(200, \"请求超过限流\")\r\n		return\r\n	}\r\n	ctx.String(200, \"\")\r\n}','',1),
(227,3,'gin 中间件 c.Next()原理','package main\r\n\r\nimport (\r\n	\"fmt\"\r\n\r\n	\"github.com/gin-gonic/gin\"\r\n)\r\n\r\n// 中间件函数\r\nfunc loggingMiddleware() gin.HandlerFunc {\r\n	return func(c *gin.Context) {\r\n		fmt.Println(\"loggingMiddleware start\")\r\n		c.Next()\r\n		fmt.Println(\"loggingMiddleware end\")\r\n	}\r\n}\r\n\r\nfunc main() {\r\n	r := gin.Default()\r\n	// 将中间件函数应用到需要共享处理逻辑的路由上\r\n	r.Use(loggingMiddleware())\r\n	r.GET(\"/\", func(c *gin.Context) {\r\n		fmt.Println(\"这里是c.Next()\")\r\n	})\r\n\r\n	r.Run(\":8080\")\r\n}\r\n\r\n\r\n//输出是\r\nloggingMiddleware start\r\n这里是c.Next()\r\nloggingMiddleware end','',1),
(228,4,'arduino 串口接收字符串整行输出','  if (Serial.available()) {\r\n    while (Serial.available()) {\r\n      String receivedString = Serial.readStringUntil(\'\\n\');  // 读取直到遇到换行符\r\n      webSocket.sendTXT(receivedString);\r\n    }\r\n  }','',1),
(230,4,'esp01s websocket串口发送','#include <Arduino.h>\r\n#include <ESP8266WiFi.h>\r\n#include <WebSocketsClient.h>\r\n#include <ESP8266httpUpdate.h>\r\n#include <Hash.h>\r\n#include <ArduinoJson.h>\r\n\r\nWebSocketsClient webSocket;\r\nDynamicJsonDocument jsonBuffer(100);\r\nJsonObject jsonArr;\r\nWiFiClient wificlient;\r\nvoid webSocketEvent(WStype_t type, uint8_t* payload, size_t length) {\r\n\r\n  switch (type) {\r\n    case WStype_DISCONNECTED:\r\n      Serial.printf(\"[WSc] Disconnected!\\n\");\r\n      break;\r\n    case WStype_CONNECTED:\r\n      {\r\n        Serial.printf(\"[WSc] Connected to url: %s\\n\", payload);\r\n\r\n        // send message to server when Connected\r\n        //webSocket.sendTXT(\"Connected\");\r\n      }\r\n      break;\r\n    case WStype_TEXT:\r\n      Serial.printf(\"[WSc] get text: %s\\n\", payload);\r\n      deserializeJson(jsonBuffer, payload);\r\n      jsonArr = jsonBuffer.as<JsonObject>();\r\n      if (jsonArr[\"message\"] != \"\") {\r\n        String message = jsonArr[\"message\"];\r\n        if (message == \"updateBin\") {\r\n          while (1) {\r\n            ESPhttpUpdate.onStart(update_started);\r\n            ESPhttpUpdate.onEnd(update_finished);\r\n            ESPhttpUpdate.onProgress(update_progress);\r\n            ESPhttpUpdate.onError(update_error);\r\n            ESPhttpUpdate.update(wificlient, \"http://192.168.0.254/tool/ota/GolangCpp/scan.bin\");\r\n          }\r\n        }\r\n      }\r\n      // send message to server\r\n      // webSocket.sendTXT(\"message here\");\r\n      break;\r\n    case WStype_BIN:\r\n      Serial.printf(\"[WSc] get binary length: %u\\n\", length);\r\n      hexdump(payload, length);\r\n\r\n      // send data to server\r\n      // webSocket.sendBIN(payload, length);\r\n      break;\r\n    case WStype_PING:\r\n      // pong will be send automatically\r\n      //Serial.printf(\"[WSc] get ping\\n\");\r\n      break;\r\n    case WStype_PONG:\r\n      // answer to a ping we send\r\n      Serial.printf(\"[WSc] get pong\\n\");\r\n      break;\r\n  }\r\n}\r\n\r\nvoid setup() {\r\n  // Serial.begin(921600);\r\n  Serial.begin(9600);\r\n\r\n  WiFi.begin(\"webserver\", \"www.nobiggie.cn\");\r\n\r\n  while (WiFi.status() != WL_CONNECTED) {\r\n    delay(500);\r\n    Serial.print(\".\");\r\n  }\r\n   Serial.printf(\"wifi OK\");\r\n  // server address, port and URL\r\n  webSocket.begin(\"192.168.0.254\", 80, \"/websocket\");\r\n\r\n  // event handler\r\n  webSocket.onEvent(webSocketEvent);\r\n\r\n  // use HTTP Basic Authorization this is optional remove if not needed\r\n  webSocket.setAuthorization(\"user=scan&passwd=efghijk&room=scan\");\r\n\r\n  // try ever 5000 again if connection has failed\r\n  webSocket.setReconnectInterval(5000);\r\n\r\n  // start heartbeat (optional)\r\n  // ping server every 15000 ms\r\n  // expect pong from server within 3000 ms\r\n  // consider connection disconnected if pong is not received 2 times\r\n  webSocket.enableHeartbeat(15000, 3000, 2);\r\n}\r\n\r\nvoid loop() {\r\n  webSocket.loop();\r\n  if (Serial.available()) {\r\n    while (Serial.available()) {\r\n      String receivedString = Serial.readStringUntil(\'\\n\');  // 读取直到遇到换行符\r\n      webSocket.sendTXT(receivedString);\r\n    }\r\n  }\r\n}\r\nvoid update_started() {\r\n  Serial.println(\"CALLBACK:  HTTP update process started\");\r\n}\r\n\r\nvoid update_finished() {\r\n  Serial.println(\"CALLBACK:  HTTP update process finished\");\r\n}\r\nvoid update_progress(int cur, int total) {\r\n  Serial.printf(\"CALLBACK:  HTTP update process at %d of %d bytes...\\n\", cur, total);\r\n}\r\n\r\nvoid update_error(int err) {\r\n  Serial.printf(\"CALLBACK:  HTTP update fatal error code %d\\n\", err);\r\n}\r\n','',1),
(232,3,'date转time时间戳','	// 获取当前 UTC 时间保证UTC一样, 不然解析出来不准\r\n	nowP := time.Now().UTC()\r\n	timeStr := nowP.Format(\"2006-01-02 15:04:05\")\r\n	layout := \"2006-01-02 15:04:05\"\r\n\r\n	loc, _ := time.LoadLocation(\"UTC\")\r\n	t, err := time.ParseInLocation(layout, timeStr, loc)\r\n	if err != nil {\r\n		fmt.Println(\"解析时间错误:\", err)\r\n		return\r\n	}\r\n	old := t.Unix()\r\n	now := time.Now().UTC().Unix()\r\n	fmt.Println(old)\r\n	fmt.Println(now)','',1),
(233,3,'协程互斥锁','map 全局变量 如果不加锁,会产生抢夺全局变量报错\r\n\r\nvar mutex sync.Mutex //互斥锁 防止开启协程后 同时1个以上协程同时抢占全局变量报错\r\n// 互斥锁 变成非协程\r\nmutex.Lock //锁上\r\n协程都变成列队\r\nmutex.UnLock //解锁\r\n\r\nlock.Lock()\r\nfor i := 0; i < 1000; i++ {\r\n	globalVariable[\"root\"]++\r\n}\r\nlock.Unlock()\r\n上面代码等同于\r\nfor i := 0; i < 1000; i++ {\r\n	lock.Lock()\r\n	globalVariable[\"root\"]++\r\n	lock.Unlock()\r\n}\r\n\r\n\r\n//主要应用 于商品抢购 可以读并发协程，写锁列队\r\nvar mutex sync.RWMutex\r\n//RWMutex可以mutex.Lock //锁上\r\n//协程都变成列队，写时不能读\r\n//mutex.UnLock //解锁\r\nmutex.RLock()\r\n并发协程读操作 特别注意 这里不是协程都变成列队\r\n读时不能写\r\nmutex.RUnlock()\r\n\r\n','',1),
(236,1,'服务器有线固定ip设置','sudo vi /etc/dhcpcd.conf\r\ninterface eth0\r\nstatic ip_address=192.168.x.x/24\r\nstatic routers=192.168.x.x\r\nstatic domain_name_servers=192.168.x.x\r\n//如果是通过无线连接，可以将  interface eth0  改为  interface wlan0\r\n//1. 可以使用命令  sudo service dhcpcd restart  重启网络服务。\r\n2. 或者直接重启树莓派，使用命令  sudo reboot 。\r\n\r\n新版树莓派需要使用nmcli 你可以使用 nmcli con show 命令列出所有的网络连接\r\nnmcli con modify \"Wired connection 1\" ipv4.addresses 192.168.1.254/24\r\nnmcli con modify \"Wired connection 1\" ipv4.gateway 192.168.1.1\r\nnmcli con modify \"Wired connection 1\" ipv4.dns \"8.8.8.8,8.8.4.4\"\r\nnmcli con modify \"Wired connection 1\" ipv4.method manual\r\n请根据你的网络环境替换上述命令中的IP地址、网关和DNS服务器地址。如果你需要设置动态IP（即DHCP），可以将 ipv4.method 设置为 auto 而不是 manual','',1),
(237,1,'wifi连接路由器设置','一、配置无线网络\r\n使用 sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 命令打开无线网络配置文件。\r\n在文件中添加以下内容：\r\n\r\nnetwork={\r\n    ssid=\"你的无线网络名称\"\r\n    psk=\"你的无线网络密码\"\r\n}\r\n\r\n二、设置网络优先级\r\n创建一个名为 /etc/network/interfaces.d/wlan0.cfg 的文件，用于配置无线网络接口：\r\n\r\nallow-hotplug wlan0\r\niface wlan0 inet dhcp\r\nwpa-conf /etc/wpa_supplicant/wpa_supplicant.conf\r\n修改 /etc/network/interfaces 文件，添加以下内容：\r\n\r\nsource-directory /etc/network/interfaces.d\r\n\r\n执行 sudo service networking restart 命令重启网络服务，使配置生效','',1),
(241,1,'docker','docker run -d --name mynginx -p 8080:80 nginx\r\ndocker exec -it mynginx /bin/bash  //进入docker内部\r\n//保存镜像\r\ndocker commit -a xyz -m \"名字\"\r\ndocker save -o mynginx.tar mynginx:v1.0\r\ndocker load -i mynginx.tar //导入镜像\r\n//挂载\r\ndocker run -d --name mynginx -p 8080:80 -v /var/www/html:/docker内部目录 nginx\r\n-v /var/www/html:/docker内部目录\r\n//分享社区\r\ndocker login\r\n\r\ndocker tag myngin:v1.0 账号/mynginx:v2.0 更改名字版本\r\n\r\n\r\n\r\n','',1),
(242,1,'无法启动无线','在终端中运行 rfkill list，查看所有被禁用的无线设备列表。如果 wlan0 被列出并显示为 Soft blocked: yes（软件禁用）或 Hard blocked: yes（硬件禁用），则需要解除禁用。\r\n sudo rfkill unblock wlan\r\n这将尝试解除对无线设备的软件禁用\r\n禁用的方法\r\n     sudo rfkill block wlan','',1),
(243,1,'关闭窗口 后台 apt install ','nohup apt install xxxx -y &\r\n使用ps aux | grep apt命令查看所有进程中包含 “apt” 关键字的进程','',1),
(244,4,'快递CAM','#include <Arduino.h>\r\n#include <WiFi.h>\r\n#include <ArduinoJson.h>\r\n#include <WebSocketsClient.h>\r\n#include <WebServer.h>\r\n#include <HTTPClient.h>\r\n#include <HTTPUpdate.h>\r\n#include \"esp_camera.h\"\r\nString version = \"1.0\";\r\nDynamicJsonDocument jsonBuffer(100);\r\nJsonObject jsonArr;\r\n\r\nWebSocketsClient webSocket;\r\n\r\nWiFiClient wificlient;\r\nString localServerIP = \"192.168.0.254\";\r\nString upBinUrl = \"http://\" + localServerIP + \"/tool/ota/englishgolangcpp/dkcam.bin\";\r\n// 图像缓冲区大小\r\nconst int bufferSize = 1024 * 10;\r\nuint8_t buffer[bufferSize];\r\nString ssid = \"webserver\";                                             //wifi账号\r\nString passwd = \"www.nobiggie.cn\";                                           //wifi密码\r\n\r\nvoid hexdump(const void* mem, uint32_t len, uint8_t cols = 16) {\r\n  const uint8_t* src = (const uint8_t*)mem;\r\n  Serial.printf(\"\\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)\", (ptrdiff_t)src, len, len);\r\n  for (uint32_t i = 0; i < len; i++) {\r\n    if (i % cols == 0) {\r\n      Serial.printf(\"\\n[0x%08X] 0x%08X: \", (ptrdiff_t)src, i);\r\n    }\r\n    Serial.printf(\"%02X \", *src);\r\n    src++;\r\n  }\r\n  Serial.printf(\"\\n\");\r\n}\r\n\r\nvoid webSocketEvent(WStype_t type, uint8_t* payload, size_t length) {\r\n\r\n  switch (type) {\r\n    case WStype_DISCONNECTED:\r\n      break;\r\n    case WStype_CONNECTED:\r\n      Serial.printf(\"[WSc] Connected to url: %s\\n\", payload);\r\n      break;\r\n    case WStype_TEXT:\r\n      Serial.printf(\"[WSc] get text: %s\\n\", payload);\r\n      deserializeJson(jsonBuffer, payload);\r\n      jsonArr = jsonBuffer.as<JsonObject>();\r\n      if (jsonArr[\"message\"] != \"\") {\r\n        String user = jsonArr[\"user\"];\r\n        String date = jsonArr[\"date\"];\r\n        String message = jsonArr[\"message\"];\r\n        if (message == \"picture\") {\r\n          // 拍照并发送图片\r\n          camera_fb_t* fb = esp_camera_fb_get();\r\n          if (!fb) {\r\n            Serial.println(\"Failed to take picture\");\r\n            return;\r\n          }\r\n          size_t jpegSize = fb->len;\r\n          memcpy(buffer, fb->buf, jpegSize);\r\n          esp_camera_fb_return(fb);\r\n\r\n          WiFiClient client;\r\n          if (!client.connect(localServerIP.c_str(),80)) {\r\n            Serial.println(\"Connection failed\");\r\n            return;\r\n          }\r\n\r\n          // 构造 HTTP 请求头\r\n          client.printf(\"POST /dkimage HTTP/1.1\\r\\n\");\r\n          client.printf(\"Host: %s\\r\\n\", localServerIP);\r\n          client.printf(\"Content-Type: image/jpeg\\r\\n\");\r\n          client.printf(\"Content-Length: %d\\r\\n\", jpegSize);\r\n          client.printf(\"\\r\\n\");\r\n\r\n          // 发送图片数据\r\n          client.write(buffer, jpegSize);\r\n          client.flush();\r\n\r\n          Serial.println(\"Image sent\");\r\n        }\r\n        if (message == \"updateBin\") {\r\n          while (1) {\r\n            httpUpdate.onStart(update_started);\r\n            httpUpdate.onEnd(update_finished);\r\n            httpUpdate.onProgress(update_progress);\r\n            httpUpdate.onError(update_error);\r\n            t_httpUpdate_return ret = httpUpdate.update(wificlient, upBinUrl);\r\n            //t_httpUpdate_return ret = httpUpdate.update(wificlient, \"server\", 80, \"/file.bin\");\r\n            switch (ret) {\r\n              case HTTP_UPDATE_FAILED:\r\n                Serial.printf(\"HTTP_UPDATE_FAILED Error (%d): %s\\n\", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());\r\n                break;\r\n              case HTTP_UPDATE_NO_UPDATES:\r\n                Serial.println(\"HTTP_UPDATE_NO_UPDATES\");\r\n                break;\r\n              case HTTP_UPDATE_OK:\r\n                Serial.println(\"HTTP_UPDATE_OK\");\r\n                break;\r\n            }\r\n          }\r\n          espReboot();\r\n        }\r\n      }\r\n      // send message to server\r\n      // webSocket.sendTXT(\"message here\");\r\n      break;\r\n    case WStype_BIN:\r\n      //语音是以 []byte 传输\r\n      Serial.printf(\"[WSc] get binary length: %u\\n\", length);\r\n      break;\r\n    case WStype_ERROR:\r\n    case WStype_FRAGMENT_TEXT_START:\r\n    case WStype_FRAGMENT_BIN_START:\r\n    case WStype_FRAGMENT:\r\n    case WStype_FRAGMENT_FIN:\r\n      break;\r\n  }\r\n}\r\n\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  // 设置相机\r\n  camera_config_t config;\r\n  config.ledc_channel = LEDC_CHANNEL_0;\r\n  config.ledc_timer = LEDC_TIMER_0;\r\n  config.pin_d0 = 5;\r\n  config.pin_d1 = 18;\r\n  config.pin_d2 = 19;\r\n  config.pin_d3 = 21;\r\n  config.pin_d4 = 36;\r\n  config.pin_d5 = 39;\r\n  config.pin_d6 = 34;\r\n  config.pin_d7 = 35;\r\n  config.pin_xclk = 0;\r\n  config.pin_pclk = 22;\r\n  config.pin_vsync = 25;\r\n  config.pin_href = 23;\r\n  config.pin_sscb_sda = 26;\r\n  config.pin_sscb_scl = 27;\r\n  config.pin_pwdn = 32;\r\n  config.pin_reset = -1;\r\n  config.xclk_freq_hz = 20000000;\r\n  config.pixel_format = PIXFORMAT_JPEG;\r\n\r\n  // 初始化相机\r\n  esp_err_t err = esp_camera_init(&config);\r\n  if (err != ESP_OK) {\r\n    Serial.printf(\"Camera init failed with error 0x%x\", err);\r\n    return;\r\n  }\r\n  delay(300);\r\n  // 连接 Wi-Fi\r\n  WiFi.begin(\"webserver\", \"www.nobiggie.cn\");\r\n  while (WiFi.status() != WL_CONNECTED) {\r\n    delay(1000);\r\n    Serial.println(\"Connecting to WiFi...\");\r\n  }\r\n  Serial.println(\"Connected to WiFi\");\r\n  //通知服务器 我正在重启,验证一下广告牌开关状态 10秒后我启动完成发送广告牌开关状态给我\r\n  webSocket.begin(localServerIP, 80, \"/websocket\");\r\n  webSocket.onEvent(webSocketEvent);\r\n  webSocket.setAuthorization(\"user=esp32camkd&passwd=efghijk&room=admin\");\r\n  webSocket.setReconnectInterval(5000);\r\n}\r\nvoid loop() {\r\n  webSocket.loop();\r\n}\r\n\r\nvoid espReboot() {\r\n  ESP.restart();\r\n}\r\n\r\nString esp32post(String url) {\r\n  HTTPClient http;\r\n  http.begin(wificlient, url);\r\n  http.setTimeout(3000);\r\n  String postStr = \"version=esp32test10\";\r\n  char dataBuff[postStr.length()];\r\n  strcpy(dataBuff, postStr.c_str());\r\n  http.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n  int httpResponseCode = http.POST(dataBuff);\r\n  if (httpResponseCode > 0) {\r\n    String response = http.getString();\r\n    return response;\r\n  }\r\n  return \"\";\r\n}\r\n\r\n\r\n\r\n//当升级开始时，打印日志\r\nvoid update_started() {\r\n  Serial.println(\"CALLBACK: HTTP update process started\");\r\n}\r\n//当升级结束时，打印日志\r\nvoid update_finished() {\r\n  Serial.println(\"CALLBACK: HTTP update process finished\");\r\n}\r\n//当升级中，打印日志\r\nvoid update_progress(int cur, int total) {\r\n  Serial.printf(\"CALLBACK: HTTP update process at %d of %d bytes...\\n\", cur, total);\r\n}\r\n//当升级失败时，打印日志\r\nvoid update_error(int err) {\r\n  Serial.printf(\"CALLBACK: HTTP update fatal error code %d\\n\", err);\r\n}\r\n','',1),
(245,4,'NodeMCU ESP32s 彩灯带变色，闪烁，亮度 ','#include <FastLED.h>\r\n\r\n#define TOUCH_PIN_BRIGHTNESS 13  // 触摸引脚13用于亮度调节\r\n#define TOUCH_PIN_FLASH 12       // 触摸引脚12用于闪烁模式切换\r\n#define TOUCH_PIN_COLOR 14       // 触摸引脚14用于彩带颜色切换\r\n#define LED_PIN 2                // LED串连接的引脚\r\n#define NUM_LEDS 30              // LED数量\r\nint mycolor = 0;\r\nCRGB leds[NUM_LEDS];      // 用于存储LED颜色数据的数组\r\nbool isFlashing = false;  // 闪烁模式标志\r\n                          //touch 最大65  手摸20以下 但是运行环境 触摸达不到20以下,20-50间,应该设置为50\r\nconst int ConstTouch = 50;\r\nvoid setup() {\r\n  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);  // 初始化LED串\r\n  pinMode(TOUCH_PIN_BRIGHTNESS, INPUT);                   // 设置触摸引脚为输入\r\n  pinMode(TOUCH_PIN_FLASH, INPUT);\r\n  pinMode(TOUCH_PIN_COLOR, INPUT);\r\n}\r\n\r\nvoid loop() {\r\n  int lhdu = touchRead(TOUCH_PIN_BRIGHTNESS);\r\n  delay(300);\r\n  // 亮度调节\r\n  if (lhdu < ConstTouch) {\r\n    if (FastLED.getBrightness() > 250) {\r\n      FastLED.setBrightness(50);\r\n    }\r\n    FastLED.setBrightness(FastLED.getBrightness() + 50);  // 增加亮度\r\n    delay(100);\r\n  }\r\n\r\n  // 闪烁模式切换\r\n  int sjuo = touchRead(TOUCH_PIN_FLASH);\r\n  delay(300);\r\n  if (sjuo < ConstTouch) {\r\n    isFlashing = !isFlashing;  // 切换闪烁模式状态\r\n    delay(100);\r\n  }\r\n\r\n  // 彩带颜色切换\r\n  int bmse = touchRead(TOUCH_PIN_COLOR);\r\n  delay(300);\r\n  if (bmse < ConstTouch) {\r\n    mycolor++;\r\n    if (mycolor > 2) {\r\n      mycolor = 0;\r\n    }\r\n    if (mycolor == 0) {\r\n      fill_solid(leds, NUM_LEDS, CRGB(CHSV(0, 255, 255)));  // 红色\r\n    }\r\n    if (mycolor == 1) {\r\n      fill_solid(leds, NUM_LEDS, CRGB(CHSV(85, 255, 255)));\r\n    }\r\n    if (mycolor == 2) {\r\n      fill_solid(leds, NUM_LEDS, CRGB(CHSV(170, 255, 255)));\r\n    }\r\n    // 这里可以添加切换不同颜色的逻辑\r\n    delay(100);\r\n  }\r\n\r\n  if (isFlashing) {\r\n    static bool state = false;\r\n    state = !state;\r\n    fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(100, 255, 255)));  // 闪烁效果\r\n    if (mycolor == 0) {\r\n      fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(0, 255, 255)));\r\n    }\r\n    if (mycolor == 1) {\r\n      fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(85, 255, 255)));\r\n    }\r\n    if (mycolor == 2) {\r\n      fill_solid(leds, NUM_LEDS, state ? CRGB::Black : CRGB(CHSV(170, 255, 255)));\r\n    }\r\n  } else {\r\n    // 常亮颜色\r\n    if (mycolor == 0) {\r\n      fill_solid(leds, NUM_LEDS, CRGB(CHSV(0, 255, 255)));  // 红色\r\n    }\r\n    if (mycolor == 1) {\r\n      fill_solid(leds, NUM_LEDS, CRGB(CHSV(85, 255, 255)));\r\n    }\r\n    if (mycolor == 2) {\r\n      fill_solid(leds, NUM_LEDS, CRGB(CHSV(170, 255, 255)));\r\n    }\r\n  }\r\n\r\n  FastLED.show();  // 显示当前颜色\r\n  delay(10);       // 延时以避免CPU过载\r\n}','',1),
