RunDataCacheRefresh.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. #include "RunDataCacheRefresh.h"
  2. #include "InteractiveData.h"
  3. #include "InteractiveHttp.h"
  4. #include "../user/httpclient.h"
  5. #include "../user/config.h"
  6. extern config *pconfig;
  7. #include <QFile>
  8. // 用于临时存储http json返回值的函数
  9. void TempFuncWriteData(const QString &path, const QByteArray &data)
  10. {
  11. QFile file(path);
  12. if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
  13. file.write(data);
  14. file.close();
  15. }
  16. }
  17. RunDataCacheRefresh::RunDataCacheRefresh(InteractiveTask *task, QMutex *mutex)
  18. : RunAbstract(task, mutex)
  19. {
  20. }
  21. void RunDataCacheRefresh::run()
  22. {
  23. // 获取物资属性值
  24. httpGetMaterialProp();
  25. // 获取物资类型
  26. httpGetMaterialType();
  27. // 获取物资信息
  28. // httpGetMaterialInfo();
  29. // // 获取异常类型字典值
  30. // httpGetExceptionTypeDict();
  31. // // 获取严重等级字典值
  32. // httpGetSeverityLevelDict();
  33. // 获取异常物资信息
  34. httpGetExMaterialInfo();
  35. // 获取物资柜物资错放异常
  36. }
  37. void RunDataCacheRefresh::httpGetMaterialProp()
  38. {
  39. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  40. // 访问http服务
  41. QString strUrl = "http://" + pconfig->httpHost + pconfig->getMaterialPropList_url;
  42. QByteArray inData = QString("cabinetCode=" + pconfig->devUuid).toUtf8();
  43. QByteArray outData;
  44. httpClient::getRequest(strUrl, pSingletonData->m_token, inData, outData);
  45. // 进行数据写操作
  46. QWriteLocker locker(&pSingletonData->m_dataCacheLock);
  47. // 如果数据发生改变,缓存信息
  48. if (pSingletonData->m_jsonCacheMaterialProp != outData)
  49. {
  50. // 缓存json信息
  51. pSingletonData->m_jsonCacheMaterialProp = outData;
  52. // 清理缓存数据
  53. pSingletonData->m_dataCacheMaterialPropId.clear();
  54. pSingletonData->m_dataCacheMaterialPropName.clear();
  55. pSingletonData->m_dataCacheMaterialPropPropertyId.clear();
  56. pSingletonData->m_dataCacheMaterialPropPropertyName.clear();
  57. QJsonParseError error;
  58. QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
  59. if (error.error == QJsonParseError::NoError)
  60. {
  61. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  62. {
  63. QJsonObject jsonObjRoot = jsonDoc.object();
  64. if(jsonObjRoot.contains("code") && jsonObjRoot.contains("data"))
  65. {
  66. QJsonObject jsonObjData = jsonObjRoot.value("data").toObject();
  67. if(jsonObjRoot.value("code").toInt() == 200 && jsonObjData.contains("records"))
  68. {
  69. QJsonArray jsonArrRecords = jsonObjData.value("records").toArray();
  70. for (int i = 0; i < jsonArrRecords.count(); ++i)
  71. {
  72. if (!jsonArrRecords.at(i).isObject())
  73. {
  74. continue;
  75. }
  76. QJsonObject jsonObjRecord = jsonArrRecords.at(i).toObject();
  77. QString recordId = jsonObjRecord.value("recordId").toString();
  78. QString valueName = jsonObjRecord.value("valueName").toString();
  79. QString propertyId = jsonObjRecord.value("propertyId").toString();
  80. QString propertyName = jsonObjRecord.value("propertyName").toString();
  81. pSingletonData->m_dataCacheMaterialPropId.append(recordId);
  82. pSingletonData->m_dataCacheMaterialPropName.insert(recordId, valueName);
  83. pSingletonData->m_dataCacheMaterialPropPropertyId.insert(recordId, propertyId);
  84. pSingletonData->m_dataCacheMaterialPropPropertyName.insert(recordId, propertyName);
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }
  91. }
  92. void RunDataCacheRefresh::httpGetMaterialType()
  93. {
  94. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  95. // 访问http服务
  96. QString strUrl = "http://" + pconfig->httpHost + pconfig->getMaterialTypeList_url;
  97. QByteArray inData = QString("current=1&size=-1").toUtf8();
  98. QByteArray outData;
  99. httpClient::getRequest(strUrl, pSingletonData->m_token, inData, outData);
  100. // 进行数据写操作
  101. QWriteLocker locker(&pSingletonData->m_dataCacheLock);
  102. // 如果数据发生改变,缓存信息
  103. if (pSingletonData->m_jsonCacheMaterialType != outData)
  104. {
  105. // 缓存json信息
  106. pSingletonData->m_jsonCacheMaterialType = outData;
  107. // 清理缓存数据
  108. pSingletonData->m_dataCacheMaterialTypeId.clear();
  109. pSingletonData->m_dataCacheMaterialTypeName.clear();
  110. pSingletonData->m_dataCacheMaterialTypePicture.clear();
  111. pSingletonData->m_dataCacheMaterialTypeAncestors.clear();
  112. pSingletonData->m_dataCacheMaterialTypePropertyIds.clear();
  113. QJsonParseError error;
  114. QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
  115. if (error.error == QJsonParseError::NoError)
  116. {
  117. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  118. {
  119. QJsonObject jsonObjRoot = jsonDoc.object();
  120. if(jsonObjRoot.contains("code") && jsonObjRoot.contains("data"))
  121. {
  122. QJsonObject jsonObjData = jsonObjRoot.value("data").toObject();
  123. if(jsonObjRoot.value("code").toInt() == 200 && jsonObjData.contains("records"))
  124. {
  125. QJsonArray jsonArrRecords = jsonObjData.value("records").toArray();
  126. for (int i = 0; i < jsonArrRecords.count(); ++i)
  127. {
  128. if (!jsonArrRecords.at(i).isObject())
  129. {
  130. continue;
  131. }
  132. QJsonObject jsonObjRecord = jsonArrRecords.at(i).toObject();
  133. QString materialsTypeId = jsonObjRecord.value("materialsTypeId").toString();
  134. QString materialsTypeName = jsonObjRecord.value("materialsTypeName").toString();
  135. QString materialsTypeIcon = jsonObjRecord.value("materialsTypeIcon").toString();
  136. QString materialsTypePicture = jsonObjRecord.value("materialsTypePicture").toString();
  137. QStringList ancestors = jsonObjRecord.value("ancestors").toString().split(",");
  138. QStringList propertyIds = jsonObjRecord.value("propertyIds").toString().split(",");
  139. pSingletonData->m_dataCacheMaterialTypeId.append(materialsTypeId);
  140. pSingletonData->m_dataCacheMaterialTypeName.insert(materialsTypeId, materialsTypeName);
  141. pSingletonData->m_dataCacheMaterialTypeIcon.insert(materialsTypeId, materialsTypeIcon);
  142. pSingletonData->m_dataCacheMaterialTypePicture.insert(materialsTypeId, materialsTypePicture);
  143. pSingletonData->m_dataCacheMaterialTypeAncestors.insert(materialsTypeId, ancestors);
  144. pSingletonData->m_dataCacheMaterialTypePropertyIds.insert(materialsTypeId, propertyIds);
  145. }
  146. }
  147. }
  148. }
  149. }
  150. }
  151. }
  152. void RunDataCacheRefresh::httpGetMaterialInfo()
  153. {
  154. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  155. // 访问http服务
  156. QString strUrl = "http://" + pconfig->httpHost + pconfig->getMaterialInfoList_url;
  157. QByteArray inData = QString("cabinetCode=" + pconfig->devUuid).toUtf8();
  158. QByteArray outData;
  159. httpClient::getRequest(strUrl, pSingletonData->m_token, inData, outData);
  160. // 进行数据写操作
  161. QWriteLocker locker(&pSingletonData->m_dataCacheLock);
  162. // 如果数据发生改变,缓存信息
  163. if (pSingletonData->m_jsonCacheMaterialInfo != outData)
  164. {
  165. // 缓存json信息
  166. pSingletonData->m_jsonCacheMaterialInfo = outData;
  167. // 清理缓存数据
  168. pSingletonData->m_dataCacheMaterialInfoId.clear();
  169. pSingletonData->m_dataCacheMaterialInfoName.clear();
  170. pSingletonData->m_dataCacheMaterialInfoRfid.clear();
  171. pSingletonData->m_dataCacheMaterialInfoStat.clear();
  172. pSingletonData->m_dataCacheMaterialInfoDate.clear();
  173. pSingletonData->m_dataCacheMaterialInfoTypeId.clear();
  174. QJsonParseError error;
  175. QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
  176. if (error.error == QJsonParseError::NoError)
  177. {
  178. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  179. {
  180. QJsonObject jsonObjRoot = jsonDoc.object();
  181. if(jsonObjRoot.contains("code") && jsonObjRoot.contains("data"))
  182. {
  183. QJsonObject jsonObjData = jsonObjRoot.value("data").toObject();
  184. if(jsonObjRoot.value("code").toInt() == 200 && jsonObjData.contains("records"))
  185. {
  186. QJsonArray jsonArrRecords = jsonObjData.value("records").toArray();
  187. for (int i = 0; i < jsonArrRecords.count(); ++i)
  188. {
  189. if (!jsonArrRecords.at(i).isObject())
  190. {
  191. continue;
  192. }
  193. QJsonObject jsonObjRecord = jsonArrRecords.at(i).toObject();
  194. QString materialsId = jsonObjRecord.value("materialsId").toString();
  195. QString materialsName = jsonObjRecord.value("materialsName").toString();
  196. QString materialsRfid = jsonObjRecord.value("materialsRfid").toString();
  197. QString expirationDate = jsonObjRecord.value("expirationDate").toString();
  198. QString materialsTypeId = jsonObjRecord.value("materialsTypeId").toString();
  199. QString propertiesValueId = jsonObjRecord.value("propertiesValueId").toString();
  200. QString loanState = jsonObjRecord.value("loanState").toString();
  201. QString status = jsonObjRecord.value("status").toString();
  202. pSingletonData->m_dataCacheMaterialInfoId.append(materialsId);
  203. pSingletonData->m_dataCacheMaterialInfoName.insert(materialsId, materialsName);
  204. pSingletonData->m_dataCacheMaterialInfoRfid.insert(materialsId, materialsRfid);
  205. pSingletonData->m_dataCacheMaterialInfoLoan.insert(materialsId, loanState);
  206. pSingletonData->m_dataCacheMaterialInfoStat.insert(materialsId, status);
  207. pSingletonData->m_dataCacheMaterialInfoDate.insert(materialsId, expirationDate);
  208. pSingletonData->m_dataCacheMaterialInfoTypeId.insert(materialsId, materialsTypeId);
  209. pSingletonData->m_dataCacheMaterialInfoPropId.insert(materialsId, propertiesValueId);
  210. // 如果类型不存在
  211. if (materialsTypeId != "")
  212. {
  213. if (!pSingletonData->m_dataCacheMaterialTypeId.contains(materialsTypeId))
  214. {
  215. QString materialsTypeName = jsonObjRecord.value("materialsTypeName").toString();
  216. QString materialsTypeIcon = jsonObjRecord.value("materialsTypeIcon").toString();
  217. QString materialsTypePicture = jsonObjRecord.value("materialsTypePicture").toString();
  218. // ...
  219. pSingletonData->m_dataCacheMaterialTypeId.append(materialsTypeId);
  220. pSingletonData->m_dataCacheMaterialTypeName.insert(materialsTypeId, materialsTypeName);
  221. pSingletonData->m_dataCacheMaterialTypeIcon.insert(materialsTypeId, materialsTypeIcon);
  222. pSingletonData->m_dataCacheMaterialTypePicture.insert(materialsTypeId, materialsTypePicture);
  223. }
  224. }
  225. }
  226. }
  227. }
  228. }
  229. }
  230. }
  231. }
  232. void RunDataCacheRefresh::httpGetExceptionTypeDict()
  233. {
  234. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  235. // 访问http服务,获取字典值
  236. QString strUrl = "http://" + pconfig->httpHost + "/dev-api/system/dict/data/type/" + "exception_type";
  237. QByteArray inData;
  238. QByteArray outData;
  239. httpClient::getRequest(strUrl, pSingletonData->m_token, inData, outData);
  240. // // 进行数据写操作
  241. // QWriteLocker locker(&pSingletonData->m_dataCacheLock);
  242. // // 如果数据发生改变,缓存信息
  243. // if (pSingletonData->m_jsonCacheExceptionTypeDict != outData)
  244. // {
  245. // // 缓存json信息
  246. // pSingletonData->m_jsonCacheExceptionTypeDict = outData;
  247. // // 异常类型字典清理数据缓存
  248. // pSingletonData->m_dataCacheExceptionTypeDictCode.clear();
  249. // pSingletonData->m_dataCacheExceptionTypeDictLabel.clear();
  250. // pSingletonData->m_dataCacheExceptionTypeDictValue.clear();
  251. // QJsonParseError error;
  252. // QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
  253. // if (error.error == QJsonParseError::NoError)
  254. // {
  255. // if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  256. // {
  257. // QJsonObject jsonObjRoot = jsonDoc.object();
  258. // if(jsonObjRoot.contains("code") && jsonObjRoot.contains("data"))
  259. // {
  260. // if (jsonObjRoot.value("code").toInt() == 200 && jsonObjRoot.value("data").isArray())
  261. // {
  262. // QJsonArray jsonArrData = jsonObjRoot.value("data").toArray();
  263. // for (int i = 0; i < jsonArrData.size(); ++i)
  264. // {
  265. // if (!jsonArrData.at(i).isObject())
  266. // {
  267. // continue;
  268. // }
  269. // QJsonObject jsonObjData = jsonArrData.at(i).toObject();
  270. // QString dictCode = jsonObjData.value("dictCode").toString();
  271. // QString dictLabel = jsonObjData.value("dictLabel").toString();
  272. // QString dictValue = jsonObjData.value("dictValue").toString();
  273. // if (pSingletonData->m_dataCacheExceptionTypeDictCode.contains(dictCode))
  274. // {
  275. // continue;
  276. // }
  277. // pSingletonData->m_dataCacheExceptionTypeDictCode.append(dictCode);
  278. // pSingletonData->m_dataCacheExceptionTypeDictLabel.insert(dictCode, dictLabel);
  279. // pSingletonData->m_dataCacheExceptionTypeDictValue.insert(dictCode, dictValue);
  280. // }
  281. // }
  282. // }
  283. // }
  284. // }
  285. // }
  286. }
  287. void RunDataCacheRefresh::httpGetSeverityLevelDict()
  288. {
  289. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  290. // 访问http服务,获取字典值
  291. QString strUrl = "http://" + pconfig->httpHost + "/dev-api/system/dict/data/type/" + "severity_level";
  292. QByteArray inData;
  293. QByteArray outData;
  294. httpClient::getRequest(strUrl, pSingletonData->m_token, inData, outData);
  295. // // 进行数据写操作
  296. // QWriteLocker locker(&pSingletonData->m_dataCacheLock);
  297. // // 如果数据发生改变,缓存信息
  298. // if (pSingletonData->m_jsonCacheSeverityLevelDict != outData)
  299. // {
  300. // // 缓存json信息
  301. // pSingletonData->m_jsonCacheSeverityLevelDict = outData;
  302. // // 异常类型字典清理数据缓存
  303. // pSingletonData->m_dataCacheSeverityLevelDictCode.clear();
  304. // pSingletonData->m_dataCacheSeverityLevelDictLabel.clear();
  305. // pSingletonData->m_dataCacheSeverityLevelDictValue.clear();
  306. // QJsonParseError error;
  307. // QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
  308. // if (error.error == QJsonParseError::NoError)
  309. // {
  310. // if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  311. // {
  312. // QJsonObject jsonObjRoot = jsonDoc.object();
  313. // if(jsonObjRoot.contains("code") && jsonObjRoot.contains("data"))
  314. // {
  315. // if (jsonObjRoot.value("code").toInt() == 200 && jsonObjRoot.value("data").isArray())
  316. // {
  317. // QJsonArray jsonArrData = jsonObjRoot.value("data").toArray();
  318. // for (int i = 0; i < jsonArrData.size(); ++i)
  319. // {
  320. // if (!jsonArrData.at(i).isObject())
  321. // {
  322. // continue;
  323. // }
  324. // QJsonObject jsonObjData = jsonArrData.at(i).toObject();
  325. // QString dictCode = jsonObjData.value("dictCode").toString();
  326. // QString dictLabel = jsonObjData.value("dictLabel").toString();
  327. // QString dictValue = jsonObjData.value("dictValue").toString();
  328. // if (pSingletonData->m_dataCacheSeverityLevelDictCode.contains(dictCode))
  329. // {
  330. // continue;
  331. // }
  332. // pSingletonData->m_dataCacheSeverityLevelDictCode.append(dictCode);
  333. // pSingletonData->m_dataCacheSeverityLevelDictLabel.insert(dictCode, dictLabel);
  334. // pSingletonData->m_dataCacheSeverityLevelDictValue.insert(dictCode, dictValue);
  335. // }
  336. // }
  337. // }
  338. // }
  339. // }
  340. // }
  341. }
  342. void RunDataCacheRefresh::httpGetExMaterialInfo()
  343. {
  344. InteractiveData *pSingletonData = SINGLETON_CREATE(InteractiveData)();
  345. // 访问http服务
  346. QString strUrl = "http://" + pconfig->httpHost + pconfig->getExMaterialInfoList_url;
  347. QByteArray inData = QString("cabinetCode=" + pconfig->devUuid).toUtf8();
  348. QByteArray outData;
  349. httpClient::getRequest(strUrl, pSingletonData->m_token, inData, outData);
  350. qDebug() << outData;
  351. // 进行数据写操作
  352. QWriteLocker locker(&pSingletonData->m_dataCacheLock);
  353. // 如果数据发生改变,缓存信息
  354. if (pSingletonData->m_jsonCacheExMaterialInfo != outData)
  355. {
  356. // 缓存json信息
  357. pSingletonData->m_jsonCacheExMaterialInfo = outData;
  358. pSingletonData->m_dataCacheExMaterialTypeId.clear();
  359. pSingletonData->m_dataCacheExMaterialTypeExNumber.clear();
  360. // 物资信息清理数据缓存
  361. pSingletonData->m_dataCacheExMaterialInfoId.clear();
  362. pSingletonData->m_dataCacheExMaterialInfoName.clear();
  363. pSingletonData->m_dataCacheExMaterialInfoRfid.clear();
  364. pSingletonData->m_dataCacheExMaterialInfoStat.clear();
  365. pSingletonData->m_dataCacheExMaterialInfoDate.clear();
  366. pSingletonData->m_dataCacheExMaterialInfoTypeId.clear();
  367. pSingletonData->m_dataCacheExMaterialInfoPropId.clear();
  368. QJsonParseError error;
  369. QJsonDocument jsonDoc = QJsonDocument::fromJson(outData, &error);
  370. if (error.error == QJsonParseError::NoError)
  371. {
  372. if(!(jsonDoc.isNull() || jsonDoc.isEmpty()))
  373. {
  374. QJsonObject jsonObjRoot = jsonDoc.object();
  375. if(jsonObjRoot.contains("code") && jsonObjRoot.contains("data"))
  376. {
  377. if (jsonObjRoot.value("code").toInt() == 200)
  378. {
  379. QJsonArray jsonArrData = jsonObjRoot.value("data").toArray();
  380. for (int i = 0; i < jsonArrData.size(); ++i)
  381. {
  382. if (!jsonArrData.at(i).isObject())
  383. {
  384. continue;
  385. }
  386. QJsonObject jsonObjData = jsonArrData.at(i).toObject();
  387. if (!jsonObjData.contains("materials"))
  388. {
  389. continue;
  390. }
  391. QString materialsTypeName = jsonObjData.value("materialsTypeName").toString();
  392. QString materialsTypeId = jsonObjData.value("materialsTypeId").toString();
  393. int exNumber = jsonObjData.value("exNumber").toInt();
  394. if (materialsTypeId == "0")
  395. {
  396. continue;
  397. }
  398. if (!pSingletonData->m_dataCacheExMaterialTypeId.contains(materialsTypeId))
  399. {
  400. pSingletonData->m_dataCacheExMaterialTypeId.append(materialsTypeId);
  401. pSingletonData->m_dataCacheExMaterialTypeExNumber.insert(materialsTypeId, exNumber);
  402. }
  403. if (materialsTypeName == "全部")
  404. {
  405. continue;
  406. }
  407. QJsonArray jsonArrRecords = jsonObjData.value("materials").toArray();
  408. for (int j = 0; j < jsonArrRecords.count(); ++j)
  409. {
  410. if (!jsonArrRecords.at(j).isObject())
  411. {
  412. continue;
  413. }
  414. QJsonObject jsonObjMaterials = jsonArrRecords.at(j).toObject();
  415. QString materialsId = jsonObjMaterials.value("materialsId").toString();
  416. QString materialsName = jsonObjMaterials.value("materialsName").toString();
  417. QString materialsRfid = jsonObjMaterials.value("materialsRfid").toString();
  418. QString expirationDate = jsonObjMaterials.value("expirationDate").toString();
  419. QString materialsTypeId = jsonObjMaterials.value("materialsTypeId").toString();
  420. QString propertiesValueId = jsonObjMaterials.value("propertiesValueId").toString();
  421. QString loanState = jsonObjMaterials.value("loanState").toString();
  422. QString status = jsonObjMaterials.value("status").toString();
  423. if (pSingletonData->m_dataCacheExMaterialInfoId.contains(materialsId))
  424. {
  425. continue;
  426. }
  427. pSingletonData->m_dataCacheExMaterialInfoId.append(materialsId);
  428. pSingletonData->m_dataCacheExMaterialInfoName.insert(materialsId, materialsName);
  429. pSingletonData->m_dataCacheExMaterialInfoRfid.insert(materialsId, materialsRfid);
  430. pSingletonData->m_dataCacheExMaterialInfoLoan.insert(materialsId, loanState);
  431. pSingletonData->m_dataCacheExMaterialInfoStat.insert(materialsId, status);
  432. pSingletonData->m_dataCacheExMaterialInfoDate.insert(materialsId, expirationDate);
  433. pSingletonData->m_dataCacheExMaterialInfoTypeId.insert(materialsId, materialsTypeId);
  434. pSingletonData->m_dataCacheExMaterialInfoPropId.insert(materialsId, propertiesValueId);
  435. }
  436. }
  437. }
  438. }
  439. }
  440. }
  441. }
  442. }