template_builder.py 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973
  1. from collections import defaultdict
  2. from sqlalchemy import text # 新增这一行
  3. ms = {
  4. "99181":{
  5. "template": [
  6. {
  7. "stepName": "物品信息",
  8. "step": "1",
  9. "properties": []
  10. },
  11. {
  12. "stepName": "成色情况",
  13. "step": "2",
  14. "properties": [
  15. {
  16. "isMulti": False,
  17. "values": [
  18. {
  19. "valueId": "100330",
  20. "valueText": "个人账号可退出",
  21. "isNormal": True
  22. },
  23. {
  24. "valueId": "100329",
  25. "valueText": "个人账号无法退出",
  26. "isNormal": False
  27. }
  28. ],
  29. "name": "账号情况",
  30. "id": "1066",
  31. "required": True
  32. },
  33. {
  34. "isMulti": False,
  35. "values": [
  36. {
  37. "valueId": "100339",
  38. "valueText": "全新机未拆封(质检时会进行拆封)",
  39. "isNormal": True
  40. },
  41. {
  42. "valueId": "100029",
  43. "valueText": "外壳完美",
  44. "isNormal": True
  45. },
  46. {
  47. "valueId": "100341",
  48. "valueText": "外壳有细微划痕",
  49. "isNormal": False
  50. },
  51. {
  52. "valueId": "100342",
  53. "valueText": "外壳有磕碰掉漆",
  54. "isNormal": False
  55. },
  56. {
  57. "valueId": "100034",
  58. "valueText": "外壳缺失/裂缝/孔变形/翘起/刻字",
  59. "isNormal": False
  60. },
  61. {
  62. "valueId": "100408",
  63. "valueText": "机身有弯曲",
  64. "isNormal": False
  65. }
  66. ],
  67. "name": "机身外观",
  68. "id": "1006",
  69. "required": True
  70. },
  71. {
  72. "isMulti": False,
  73. "values": [
  74. {
  75. "valueId": "100069",
  76. "valueText": "屏幕外观完美",
  77. "isNormal": True
  78. },
  79. {
  80. "valueId": "100335",
  81. "valueText": "屏幕有细微划痕",
  82. "isNormal": False
  83. },
  84. {
  85. "valueId": "100533",
  86. "valueText": "屏幕较明显划痕",
  87. "isNormal": False
  88. },
  89. {
  90. "valueId": "100534",
  91. "valueText": "屏幕裂痕/小缺角/脱胶进灰",
  92. "isNormal": False
  93. }
  94. ],
  95. "name": "屏幕外观",
  96. "id": "1011",
  97. "required": True
  98. }
  99. ]
  100. },
  101. {
  102. "stepName": "功能情况",
  103. "step": "3",
  104. "properties": [
  105. {
  106. "isMulti": False,
  107. "values": [
  108. {
  109. "valueId": "100085",
  110. "valueText": "显示完美,无任何异常",
  111. "isNormal": True
  112. },
  113. {
  114. "valueId": "100331",
  115. "valueText": "显示轻微泛黄/亮点/亮斑(有其中一项)",
  116. "isNormal": False
  117. },
  118. {
  119. "valueId": "100333",
  120. "valueText": "显示有透图/透字",
  121. "isNormal": False
  122. },
  123. {
  124. "valueId": "100092",
  125. "valueText": "显示异常(漏液/错乱/闪屏/屏生线/亮度坏)",
  126. "isNormal": False
  127. },
  128. {
  129. "valueId": "100535",
  130. "valueText": "屏幕全花屏/无法显示",
  131. "isNormal": False
  132. }
  133. ],
  134. "name": "屏幕显示",
  135. "id": "1013",
  136. "required": False
  137. },
  138. {
  139. "isMulti": False,
  140. "values": [
  141. {
  142. "valueId": "100392",
  143. "valueText": "触摸正常",
  144. "isNormal": True
  145. },
  146. {
  147. "valueId": "100394",
  148. "valueText": "触摸异常(延迟/失灵)",
  149. "isNormal": False
  150. }
  151. ],
  152. "name": "触摸",
  153. "id": "1074",
  154. "required": False
  155. },
  156. {
  157. "isMulti": False,
  158. "values": [
  159. {
  160. "valueId": "100395",
  161. "valueText": "拍摄正常",
  162. "isNormal": True
  163. },
  164. {
  165. "valueId": "100397",
  166. "valueText": "拍摄异常(抖动/模糊/不对焦/分层/颠倒)",
  167. "isNormal": False
  168. }
  169. ],
  170. "name": "拍摄",
  171. "id": "1076",
  172. "required": False
  173. },
  174. {
  175. "isMulti": False,
  176. "values": [
  177. {
  178. "valueId": "100398",
  179. "valueText": "WiFi/蓝牙连接正常",
  180. "isNormal": True
  181. },
  182. {
  183. "valueId": "100399",
  184. "valueText": "WiFi/蓝牙连接异常",
  185. "isNormal": False
  186. }
  187. ],
  188. "name": "WiFi/蓝牙",
  189. "id": "1072",
  190. "required": False
  191. },
  192. {
  193. "isMulti": False,
  194. "values": [
  195. {
  196. "valueId": "100400",
  197. "valueText": "通话正常",
  198. "isNormal": True
  199. },
  200. {
  201. "valueId": "100401",
  202. "valueText": "通话异常",
  203. "isNormal": False
  204. }
  205. ],
  206. "name": "通话",
  207. "id": "1078",
  208. "required": False
  209. },
  210. {
  211. "isMulti": False,
  212. "values": [
  213. {
  214. "valueId": "100402",
  215. "valueText": "面容/指纹功能正常",
  216. "isNormal": True
  217. },
  218. {
  219. "valueId": "100403",
  220. "valueText": "面容/指纹功能异常",
  221. "isNormal": False
  222. }
  223. ],
  224. "name": "面容/指纹",
  225. "id": "1073",
  226. "required": False
  227. },
  228. {
  229. "isMulti": True,
  230. "values": [
  231. {
  232. "valueId": "100370",
  233. "valueText": "电池健康度<80%",
  234. "isNormal": False
  235. },
  236. {
  237. "valueId": "100555",
  238. "valueText": "展示机/资源机/官换机",
  239. "isNormal": False
  240. },
  241. {
  242. "valueId": "100560",
  243. "valueText": "已开启丢失模式",
  244. "isNormal": False
  245. }
  246. ],
  247. "name": "其他功能问题(可多选或不选)",
  248. "id": "1069",
  249. "required": False
  250. },
  251. {
  252. "isMulti": True,
  253. "values": [
  254. {
  255. "valueId": "100344",
  256. "valueText": "机器无维修痕迹",
  257. "isNormal": True
  258. },
  259. {
  260. "valueId": "100529",
  261. "valueText": "更换电池/摄像头/外壳/其他配件",
  262. "isNormal": False
  263. },
  264. {
  265. "valueId": "100530",
  266. "valueText": "更换原厂屏",
  267. "isNormal": False
  268. },
  269. {
  270. "valueId": "100346",
  271. "valueText": "屏幕维修(更换非原厂屏等)",
  272. "isNormal": False
  273. },
  274. {
  275. "valueId": "100384",
  276. "valueText": "主板维修/扩容",
  277. "isNormal": False
  278. }
  279. ],
  280. "name": "整机维修(可多选或不选1)",
  281. "id": "1067",
  282. "required": False
  283. }
  284. ]
  285. }
  286. ],
  287. "templateVersion": "19",
  288. "templateId": "99181"
  289. },
  290. "99198": {
  291. "template": [
  292. {
  293. "stepName": "物品信息",
  294. "step": "1",
  295. "properties": []
  296. },
  297. {
  298. "stepName": "成色情况",
  299. "step": "2",
  300. "properties": [
  301. {
  302. "isMulti": False,
  303. "values": [
  304. {
  305. "valueId": "100330",
  306. "valueText": "个人账号可退出",
  307. "isNormal": True
  308. },
  309. {
  310. "valueId": "100329",
  311. "valueText": "个人账号无法退出",
  312. "isNormal": False
  313. }
  314. ],
  315. "name": "账号情况",
  316. "id": "1066",
  317. "required": True
  318. },
  319. {
  320. "isMulti": False,
  321. "values": [
  322. {
  323. "valueId": "100339",
  324. "valueText": "全新机未拆封(质检时会进行拆封)",
  325. "isNormal": True
  326. },
  327. {
  328. "valueId": "100029",
  329. "valueText": "外壳完美",
  330. "isNormal": True
  331. },
  332. {
  333. "valueId": "100341",
  334. "valueText": "外壳有细微划痕",
  335. "isNormal": False
  336. },
  337. {
  338. "valueId": "100342",
  339. "valueText": "外壳有磕碰掉漆",
  340. "isNormal": False
  341. },
  342. {
  343. "valueId": "100034",
  344. "valueText": "外壳缺失/裂缝/孔变形/翘起/刻字",
  345. "isNormal": False
  346. },
  347. {
  348. "valueId": "100408",
  349. "valueText": "机身有弯曲",
  350. "isNormal": False
  351. }
  352. ],
  353. "name": "机身外观",
  354. "id": "1006",
  355. "required": True
  356. },
  357. {
  358. "isMulti": False,
  359. "values": [
  360. {
  361. "valueId": "100069",
  362. "valueText": "屏幕外观完美",
  363. "isNormal": True
  364. },
  365. {
  366. "valueId": "100335",
  367. "valueText": "屏幕有细微划痕",
  368. "isNormal": False
  369. },
  370. {
  371. "valueId": "100533",
  372. "valueText": "屏幕较明显划痕",
  373. "isNormal": False
  374. },
  375. {
  376. "valueId": "100534",
  377. "valueText": "屏幕裂痕/小缺角/脱胶进灰",
  378. "isNormal": False
  379. }
  380. ],
  381. "name": "屏幕外观",
  382. "id": "1011",
  383. "required": True
  384. }
  385. ]
  386. },
  387. {
  388. "stepName": "功能情况",
  389. "step": "3",
  390. "properties": [
  391. {
  392. "isMulti": False,
  393. "values": [
  394. {
  395. "valueId": "100085",
  396. "valueText": "显示完美,无任何异常",
  397. "isNormal": True
  398. },
  399. {
  400. "valueId": "100331",
  401. "valueText": "显示轻微泛黄/亮点/亮斑(有其中一项)",
  402. "isNormal": False
  403. },
  404. {
  405. "valueId": "100333",
  406. "valueText": "显示有透图/透字",
  407. "isNormal": False
  408. },
  409. {
  410. "valueId": "100092",
  411. "valueText": "显示异常(漏液/错乱/闪屏/屏生线/亮度坏)",
  412. "isNormal": False
  413. },
  414. {
  415. "valueId": "100535",
  416. "valueText": "屏幕全花屏/无法显示",
  417. "isNormal": False
  418. }
  419. ],
  420. "name": "屏幕显示",
  421. "id": "1013",
  422. "required": False
  423. },
  424. {
  425. "isMulti": False,
  426. "values": [
  427. {
  428. "valueId": "100392",
  429. "valueText": "触摸正常",
  430. "isNormal": True
  431. },
  432. {
  433. "valueId": "100394",
  434. "valueText": "触摸异常(延迟/失灵)",
  435. "isNormal": False
  436. }
  437. ],
  438. "name": "触摸",
  439. "id": "1074",
  440. "required": False
  441. },
  442. {
  443. "isMulti": False,
  444. "values": [
  445. {
  446. "valueId": "100395",
  447. "valueText": "拍摄正常",
  448. "isNormal": True
  449. },
  450. {
  451. "valueId": "100397",
  452. "valueText": "拍摄异常(抖动/模糊/不对焦/分层/颠倒)",
  453. "isNormal": False
  454. }
  455. ],
  456. "name": "拍摄",
  457. "id": "1076",
  458. "required": False
  459. },
  460. {
  461. "isMulti": False,
  462. "values": [
  463. {
  464. "valueId": "100398",
  465. "valueText": "WiFi/蓝牙连接正常",
  466. "isNormal": True
  467. },
  468. {
  469. "valueId": "100399",
  470. "valueText": "WiFi/蓝牙连接异常",
  471. "isNormal": False
  472. }
  473. ],
  474. "name": "WiFi/蓝牙",
  475. "id": "1072",
  476. "required": False
  477. },
  478. {
  479. "isMulti": False,
  480. "values": [
  481. {
  482. "valueId": "100400",
  483. "valueText": "通话正常",
  484. "isNormal": True
  485. },
  486. {
  487. "valueId": "100401",
  488. "valueText": "通话异常",
  489. "isNormal": False
  490. }
  491. ],
  492. "name": "通话",
  493. "id": "1078",
  494. "required": False
  495. },
  496. {
  497. "isMulti": False,
  498. "values": [
  499. {
  500. "valueId": "100402",
  501. "valueText": "面容/指纹功能正常",
  502. "isNormal": True
  503. },
  504. {
  505. "valueId": "100403",
  506. "valueText": "面容/指纹功能异常",
  507. "isNormal": False
  508. }
  509. ],
  510. "name": "面容/指纹",
  511. "id": "1073",
  512. "required": False
  513. },
  514. {
  515. "isMulti": True,
  516. "values": [
  517. {
  518. "valueId": "100555",
  519. "valueText": "展示机/资源机/官换机",
  520. "isNormal": False
  521. }
  522. ],
  523. "name": "其他功能问题(可多选或不选)",
  524. "id": "1069",
  525. "required": False
  526. },
  527. {
  528. "isMulti": True,
  529. "values": [
  530. {
  531. "valueId": "100344",
  532. "valueText": "机器无维修痕迹",
  533. "isNormal": True
  534. },
  535. {
  536. "valueId": "100529",
  537. "valueText": "更换电池/摄像头/外壳/其他配件",
  538. "isNormal": False
  539. },
  540. {
  541. "valueId": "100530",
  542. "valueText": "更换原厂屏",
  543. "isNormal": False
  544. },
  545. {
  546. "valueId": "100346",
  547. "valueText": "屏幕维修(更换非原厂屏等)",
  548. "isNormal": False
  549. },
  550. {
  551. "valueId": "100384",
  552. "valueText": "主板维修/扩容",
  553. "isNormal": False
  554. }
  555. ],
  556. "name": "整机维修(可多选或不选)",
  557. "id": "1067",
  558. "required": False
  559. }
  560. ]
  561. }
  562. ],
  563. "templateVersion": "9",
  564. "templateId": "99198"
  565. },
  566. "99197":{
  567. "template": [
  568. {
  569. "stepName": "物品信息",
  570. "step": "1",
  571. "properties": []
  572. },
  573. {
  574. "stepName": "成色情况",
  575. "step": 2,
  576. "properties": [
  577. {
  578. "isMulti": False,
  579. "values": [
  580. {
  581. "valueId": 100330,
  582. "valueText": "个人账号可退出",
  583. "isNormal": True
  584. },
  585. {
  586. "valueId": 100329,
  587. "valueText": "个人账号无法退出",
  588. "isNormal": False
  589. }
  590. ],
  591. "name": "账号情况",
  592. "id": 1066,
  593. "required": True
  594. },
  595. {
  596. "isMulti": False,
  597. "values": [
  598. {
  599. "valueId": 100339,
  600. "valueText": "全新机未拆封(质检时会进行拆封)",
  601. "isNormal": True
  602. },
  603. {
  604. "valueId": 100029,
  605. "valueText": "外壳完美",
  606. "isNormal": True
  607. },
  608. {
  609. "valueId": 100341,
  610. "valueText": "外壳有细微划痕",
  611. "isNormal": False
  612. },
  613. {
  614. "valueId": 100342,
  615. "valueText": "外壳有磕碰掉漆",
  616. "isNormal": False
  617. },
  618. {
  619. "valueId": 100034,
  620. "valueText": "外壳缺失/裂缝/孔变形/翘起/刻字(含镜片碎裂)",
  621. "isNormal": False
  622. },
  623. {
  624. "valueId": 100408,
  625. "valueText": "机身有弯曲",
  626. "isNormal": False
  627. }
  628. ],
  629. "name": "机身外观",
  630. "id": 1006,
  631. "required": True
  632. },
  633. {
  634. "isMulti": False,
  635. "values": [
  636. {
  637. "valueId": 100495,
  638. "valueText": "转轴开合正常",
  639. "isNormal": True
  640. },
  641. {
  642. "valueId": 100496,
  643. "valueText": "转轴开合异常",
  644. "isNormal": False
  645. }
  646. ],
  647. "name": "转轴情况",
  648. "id": 1092,
  649. "required": True
  650. },
  651. {
  652. "isMulti": False,
  653. "values": [
  654. {
  655. "valueId": 100069,
  656. "valueText": "屏幕外观完美",
  657. "isNormal": True
  658. },
  659. {
  660. "valueId": 100335,
  661. "valueText": "屏幕有细微划痕",
  662. "isNormal": False
  663. },
  664. {
  665. "valueId": 100533,
  666. "valueText": "屏幕较明显划痕",
  667. "isNormal": False
  668. },
  669. {
  670. "valueId": 100534,
  671. "valueText": "屏幕裂痕/小缺角/脱胶进灰",
  672. "isNormal": False
  673. }
  674. ],
  675. "name": "屏幕外观",
  676. "id": 1011,
  677. "required": True
  678. }
  679. ]
  680. },
  681. {
  682. "stepName": "功能情况",
  683. "step": 3,
  684. "properties": [
  685. {
  686. "isMulti": False,
  687. "values": [
  688. {
  689. "valueId": 100085,
  690. "valueText": "显示完美,无任何异常",
  691. "isNormal": True
  692. },
  693. {
  694. "valueId": 100331,
  695. "valueText": "显示轻微泛黄/亮点/亮斑(有其中一项)",
  696. "isNormal": False
  697. },
  698. {
  699. "valueId": 100333,
  700. "valueText": "显示有透图/透字",
  701. "isNormal": False
  702. },
  703. {
  704. "valueId": 100092,
  705. "valueText": "显示异常(漏液/错乱/闪屏/屏生线/亮度坏)",
  706. "isNormal": False
  707. },
  708. {
  709. "valueId": 100535,
  710. "valueText": "屏幕全花屏/无法显示",
  711. "isNormal": False
  712. }
  713. ],
  714. "name": "屏幕显示",
  715. "id": 1013,
  716. "required": False
  717. },
  718. {
  719. "isMulti": False,
  720. "values": [
  721. {
  722. "valueId": 100392,
  723. "valueText": "触摸正常",
  724. "isNormal": True
  725. },
  726. {
  727. "valueId": 100394,
  728. "valueText": "触摸异常(延迟/失灵)",
  729. "isNormal": False
  730. }
  731. ],
  732. "name": "触摸",
  733. "id": 1074,
  734. "required": False
  735. },
  736. {
  737. "isMulti": False,
  738. "values": [
  739. {
  740. "valueId": 100395,
  741. "valueText": "拍摄正常",
  742. "isNormal": True
  743. },
  744. {
  745. "valueId": 100397,
  746. "valueText": "拍摄异常(抖动/模糊/不对焦/分层/颠倒)",
  747. "isNormal": False
  748. }
  749. ],
  750. "name": "拍摄",
  751. "id": 1076,
  752. "required": False
  753. },
  754. {
  755. "isMulti": False,
  756. "values": [
  757. {
  758. "valueId": 100398,
  759. "valueText": "WiFi/蓝牙连接正常",
  760. "isNormal": True
  761. },
  762. {
  763. "valueId": 100399,
  764. "valueText": "WiFi/蓝牙连接异常",
  765. "isNormal": False
  766. }
  767. ],
  768. "name": "WiFi/蓝牙",
  769. "id": 1072,
  770. "required": False
  771. },
  772. {
  773. "isMulti": False,
  774. "values": [
  775. {
  776. "valueId": 100400,
  777. "valueText": "通话正常",
  778. "isNormal": True
  779. },
  780. {
  781. "valueId": 100401,
  782. "valueText": "通话异常",
  783. "isNormal": False
  784. }
  785. ],
  786. "name": "通话",
  787. "id": 1078,
  788. "required": False
  789. },
  790. {
  791. "isMulti": False,
  792. "values": [
  793. {
  794. "valueId": 100402,
  795. "valueText": "面容/指纹功能正常",
  796. "isNormal": True
  797. },
  798. {
  799. "valueId": 100403,
  800. "valueText": "面容/指纹功能无法录入或识别",
  801. "isNormal": False
  802. }
  803. ],
  804. "name": "面容/指纹",
  805. "id": 1073,
  806. "required": False
  807. },
  808. {
  809. "isMulti": True,
  810. "values": [
  811. {
  812. "valueId": 100357,
  813. "valueText": "充电功能异常/充电孔接触不良",
  814. "isNormal": False
  815. },
  816. {
  817. "valueId": 100360,
  818. "valueText": "距离/光线感应异常",
  819. "isNormal": False
  820. },
  821. {
  822. "valueId": 100362,
  823. "valueText": "听筒/麦克风/扬声器 异常",
  824. "isNormal": False
  825. },
  826. {
  827. "valueId": 100367,
  828. "valueText": "指南针/重力感应异常",
  829. "isNormal": False
  830. },
  831. {
  832. "valueId": 100555,
  833. "valueText": "展示机/资源机/官换机",
  834. "isNormal": False
  835. }
  836. ],
  837. "name": "其他功能问题(需员工检测,可多选或不选)",
  838. "id": 1069,
  839. "required": False
  840. },
  841. {
  842. "isMulti": True,
  843. "values": [
  844. {
  845. "valueId": 100344,
  846. "valueText": "机器无维修痕迹",
  847. "isNormal": True
  848. },
  849. {
  850. "valueId": 100529,
  851. "valueText": "更换电池/摄像头/外壳/其他配件",
  852. "isNormal": False
  853. },
  854. {
  855. "valueId": 100530,
  856. "valueText": "更换原厂屏",
  857. "isNormal": False
  858. },
  859. {
  860. "valueId": 100346,
  861. "valueText": "屏幕维修(更换非原厂屏等)",
  862. "isNormal": False
  863. },
  864. {
  865. "valueId": 100384,
  866. "valueText": "主板维修/扩容",
  867. "isNormal": False
  868. }
  869. ],
  870. "name": "整机维修(可多选或不选)",
  871. "id": 1067,
  872. "required": False
  873. }
  874. ]
  875. }
  876. ],
  877. "templateVersion": 11,
  878. "templateId": "99197"
  879. }
  880. }
  881. def build_estimate_template(rows):
  882. """
  883. rows: release_option 查询结果
  884. """
  885. result = defaultdict(lambda: defaultdict(list))
  886. for r in rows:
  887. result[r.step_name][r.option_key_name].append({
  888. "option_id": r.option_id,
  889. "option_name": r.option_name,
  890. "selected": False
  891. })
  892. return result
  893. def build_estimate_packet(db, base_template_id: int):
  894. packet = []
  895. return ms[str(base_template_id)]["template"]
  896. return packet
  897. # -------- step 1 --------
  898. step1_rows = db.execute(text("""
  899. SELECT * FROM step1_attr
  900. WHERE base_template_id = :tpl
  901. ORDER BY attr_key, sort_order
  902. """), {"tpl": base_template_id}).fetchall()
  903. step1_map = {}
  904. for r in step1_rows:
  905. key = r.attr_key
  906. if key not in step1_map:
  907. step1_map[key] = {
  908. "id": r.attr_key,
  909. "name": r.attr_name,
  910. "required": bool(r.required),
  911. "isMulti": bool(r.is_multi),
  912. "values": []
  913. }
  914. step1_map[key]["values"].append({
  915. "valueId": str(r.value_id),
  916. "valueText": r.value_name,
  917. "isNormal": bool(r.is_normal)
  918. })
  919. packet.append({
  920. "step": "1",
  921. "stepName": "物品信息",
  922. "properties": list(step1_map.values())
  923. })
  924. # -------- step 2 / 3 --------
  925. option_rows = db.execute(text("""
  926. SELECT step_id, step_name, option_key_id, option_key_name,
  927. option_id, option_name
  928. FROM release_option
  929. ORDER BY step_id, option_key_id
  930. """)).fetchall()
  931. step_map = {}
  932. for r in option_rows:
  933. step = str(r.step_id)
  934. if step not in step_map:
  935. step_map[step] = {
  936. "step": step,
  937. "stepName": r.step_name,
  938. "properties": {}
  939. }
  940. props = step_map[step]["properties"]
  941. if r.option_key_id not in props:
  942. props[r.option_key_id] = {
  943. "id": str(r.option_key_id),
  944. "name": r.option_key_name,
  945. "isMulti": False,
  946. "required": True,
  947. "values": []
  948. }
  949. props[r.option_key_id]["values"].append({
  950. "valueId": str(r.option_id),
  951. "valueText": r.option_name,
  952. "isNormal": True
  953. })
  954. for step in sorted(step_map.keys()):
  955. step_map[step]["properties"] = list(step_map[step]["properties"].values())
  956. packet.append(step_map[step])
  957. return packet