From a74ab4e5e7c82404a6dcb2c8dc02b4a6a0c1f00a Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Wed, 19 Nov 2025 19:31:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6,=20=E5=AE=9E=E7=8E=B0=E4=BB=8Ejson=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E8=AF=BB=E5=8F=96=E5=8E=9F=E6=9D=90=E6=96=99=E8=90=A5?= =?UTF-8?q?=E5=85=BB=E9=A2=84=E8=AE=BE=E5=80=BC,=20=E5=B9=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=86=99=E5=85=A5=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/presets-data/nutrient.json | 1740 +++++++++++++++++++++ config/presets-data/system_plans.json | 0 design/archive/recipe-management/index.md | 5 + go.mod | 34 +- go.sum | 140 +- internal/core/application.go | 22 +- internal/core/data_initializer.go | 20 +- internal/infra/database/seeder.go | 203 +++ internal/infra/models/raw_material.go | 13 +- 9 files changed, 1991 insertions(+), 186 deletions(-) create mode 100644 config/presets-data/nutrient.json create mode 100644 config/presets-data/system_plans.json create mode 100644 internal/infra/database/seeder.go diff --git a/config/presets-data/nutrient.json b/config/presets-data/nutrient.json new file mode 100644 index 0000000..672f3f1 --- /dev/null +++ b/config/presets-data/nutrient.json @@ -0,0 +1,1740 @@ +{ + "type": "nutrient", + "data": { + "DL-蛋氨酸98": { + "可消化蛋氨酸 (SID %)": 98.0, + "干物质 (%)": 100, + "总蛋氨酸 (%)": 98.0, + "水分 (%)": 0 + }, + "L-色氨酸98": { + "可消化色氨酸 (SID %)": 98.0, + "干物质 (%)": 100, + "总色氨酸 (%)": 98.0, + "水分 (%)": 0 + }, + "L-苏氨酸98": { + "可消化苏氨酸 (SID %)": 98.0, + "干物质 (%)": 100, + "总苏氨酸 (%)": 98.0, + "水分 (%)": 0 + }, + "L-赖氨酸HCl 98": { + "可消化赖氨酸 (SID %)": 78.4, + "干物质 (%)": 100, + "总赖氨酸 (%)": 78.4, + "水分 (%)": 0, + "粗蛋白 (%)": 80.0 + }, + "乳清粉": { + "乳糖 (%)": 72, + "代谢能 (kcal/kg)": 3400, + "净能 (kcal/kg)": 2600, + "可消化色氨酸 (SID %)": 0.17, + "可消化苏氨酸 (SID %)": 0.81, + "可消化蛋氨酸 (SID %)": 0.21, + "可消化赖氨酸 (SID %)": 0.90, + "干物质 (%)": 95, + "总磷 (%)": 0.70, + "总色氨酸 (%)": 0.18, + "总苏氨酸 (%)": 0.85, + "总蛋氨酸 (%)": 0.22, + "总赖氨酸 (%)": 0.95, + "有效磷 (%)": 0.60, + "水分 (%)": 5, + "消化能 (kcal/kg)": 3500, + "盐分 (%)": 2.0, + "粗灰分 (%)": 9.0, + "粗纤维 (%)": 0, + "粗脂肪 (%)": 1.0, + "粗蛋白 (%)": 12.0, + "蛋+胱氨酸 (%)": 0.70, + "钙 (%)": 0.80 + }, + "兔肉粉": { + "代谢能 (kcal/kg)": 3600, + "净能 (kcal/kg)": 2850, + "可消化色氨酸 (SID %)": 0.62, + "可消化苏氨酸 (SID %)": 2.66, + "可消化蛋氨酸 (SID %)": 1.24, + "可消化赖氨酸 (SID %)": 4.28, + "干物质 (%)": 93, + "总磷 (%)": 1.20, + "总色氨酸 (%)": 0.65, + "总苏氨酸 (%)": 2.80, + "总蛋氨酸 (%)": 1.30, + "总赖氨酸 (%)": 4.50, + "有效磷 (%)": 0.95, + "水分 (%)": 7, + "消化能 (kcal/kg)": 3750, + "粗灰分 (%)": 12.0, + "粗纤维 (%)": 1.0, + "粗脂肪 (%)": 10.0, + "粗蛋白 (%)": 68.0, + "蛋+胱氨酸 (%)": 2.20, + "钙 (%)": 1.50 + }, + "全株玉米青贮": { + "代谢能 (kcal/kg)": 2650, + "净能 (kcal/kg)": 1950, + "可消化色氨酸 (SID %)": 0.05, + "可消化苏氨酸 (SID %)": 0.26, + "可消化蛋氨酸 (SID %)": 0.11, + "可消化赖氨酸 (SID %)": 0.25, + "干物质 (%)": 32, + "总磷 (%)": 0.23, + "总色氨酸 (%)": 0.06, + "总苏氨酸 (%)": 0.30, + "总蛋氨酸 (%)": 0.13, + "总赖氨酸 (%)": 0.28, + "有效磷 (%)": 0.09, + "水分 (%)": 68, + "消化能 (kcal/kg)": 2750, + "粗灰分 (%)": 4.8, + "粗纤维 (%)": 24.0, + "粗脂肪 (%)": 2.8, + "粗蛋白 (%)": 7.5, + "蛋+胱氨酸 (%)": 0.30, + "钙 (%)": 0.22 + }, + "双低菜籽粕": { + "代谢能 (kcal/kg)": 3100, + "净能 (kcal/kg)": 2100, + "单宁 (mg/kg)": 8000, + "可消化色氨酸 (SID %)": 0.42, + "可消化苏氨酸 (SID %)": 1.46, + "可消化蛋氨酸 (SID %)": 0.67, + "可消化赖氨酸 (SID %)": 1.85, + "噁唑烷硫酮 (μmol/g)": 8, + "干物质 (%)": 91, + "异硫氰酸酯 (μmol/g)": 4, + "总磷 (%)": 1.12, + "总色氨酸 (%)": 0.48, + "总苏氨酸 (%)": 1.65, + "总蛋氨酸 (%)": 0.75, + "总赖氨酸 (%)": 2.10, + "有效磷 (%)": 0.42, + "水分 (%)": 9, + "消化能 (kcal/kg)": 3200, + "硫甙 (μmol/g)": 15, + "粗灰分 (%)": 7.2, + "粗纤维 (%)": 10.5, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 37.5, + "蛋+胱氨酸 (%)": 1.55, + "钙 (%)": 0.72 + }, + "向日葵籽": { + "代谢能 (kcal/kg)": 3300, + "净能 (kcal/kg)": 2500, + "可消化色氨酸 (SID %)": 0.27, + "可消化苏氨酸 (SID %)": 0.71, + "可消化蛋氨酸 (SID %)": 0.45, + "可消化赖氨酸 (SID %)": 0.72, + "干物质 (%)": 92, + "总磷 (%)": 0.80, + "总色氨酸 (%)": 0.30, + "总苏氨酸 (%)": 0.80, + "总蛋氨酸 (%)": 0.50, + "总赖氨酸 (%)": 0.80, + "有效磷 (%)": 0.30, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3400, + "粗灰分 (%)": 4.0, + "粗纤维 (%)": 15.0, + "粗脂肪 (%)": 40.0, + "粗蛋白 (%)": 20.0, + "蛋+胱氨酸 (%)": 1.00, + "钙 (%)": 0.20 + }, + "啤酒糟干": { + "代谢能 (kcal/kg)": 2550, + "净能 (kcal/kg)": 1800, + "可消化色氨酸 (SID %)": 0.25, + "可消化苏氨酸 (SID %)": 0.80, + "可消化蛋氨酸 (SID %)": 0.40, + "可消化赖氨酸 (SID %)": 0.84, + "干物质 (%)": 92, + "总磷 (%)": 0.60, + "总色氨酸 (%)": 0.28, + "总苏氨酸 (%)": 0.90, + "总蛋氨酸 (%)": 0.45, + "总赖氨酸 (%)": 0.95, + "有效磷 (%)": 0.30, + "水分 (%)": 8, + "消化能 (kcal/kg)": 2650, + "粗灰分 (%)": 4.5, + "粗纤维 (%)": 14.0, + "粗脂肪 (%)": 6.5, + "粗蛋白 (%)": 25.0, + "蛋+胱氨酸 (%)": 1.20, + "钙 (%)": 0.30 + }, + "啤酒花渣": { + "代谢能 (kcal/kg)": 2300, + "净能 (kcal/kg)": 1600, + "可消化色氨酸 (SID %)": 0.27, + "可消化苏氨酸 (SID %)": 0.80, + "可消化蛋氨酸 (SID %)": 0.36, + "可消化赖氨酸 (SID %)": 0.88, + "干物质 (%)": 25, + "总磷 (%)": 0.50, + "总色氨酸 (%)": 0.30, + "总苏氨酸 (%)": 0.90, + "总蛋氨酸 (%)": 0.40, + "总赖氨酸 (%)": 1.00, + "有效磷 (%)": 0.20, + "水分 (%)": 75, + "消化能 (kcal/kg)": 2400, + "粗灰分 (%)": 10.0, + "粗纤维 (%)": 20.0, + "粗脂肪 (%)": 3.0, + "粗蛋白 (%)": 20.0, + "蛋+胱氨酸 (%)": 0.80, + "钙 (%)": 0.50 + }, + "国产鱼粉60": { + "代谢能 (kcal/kg)": 3400, + "净能 (kcal/kg)": 2600, + "可消化色氨酸 (SID %)": 0.57, + "可消化苏氨酸 (SID %)": 2.28, + "可消化蛋氨酸 (SID %)": 1.52, + "可消化赖氨酸 (SID %)": 4.18, + "干物质 (%)": 91, + "总磷 (%)": 3.80, + "总色氨酸 (%)": 0.60, + "总苏氨酸 (%)": 2.40, + "总蛋氨酸 (%)": 1.60, + "总赖氨酸 (%)": 4.40, + "挥发性盐基氮 (mg/100g)": 180, + "有效磷 (%)": 2.60, + "水分 (%)": 9, + "消化能 (kcal/kg)": 3600, + "粗灰分 (%)": 22.0, + "粗纤维 (%)": 1.0, + "粗脂肪 (%)": 8.0, + "粗蛋白 (%)": 60.0, + "组胺 (mg/kg)": 1200, + "蛋+胱氨酸 (%)": 2.20, + "钙 (%)": 6.50 + }, + "土豆蛋白": { + "代谢能 (kcal/kg)": 3000, + "净能 (kcal/kg)": 2200, + "可消化色氨酸 (SID %)": 0.76, + "可消化苏氨酸 (SID %)": 3.33, + "可消化蛋氨酸 (SID %)": 1.71, + "可消化赖氨酸 (SID %)": 5.23, + "干物质 (%)": 92, + "总磷 (%)": 0.50, + "总色氨酸 (%)": 0.80, + "总苏氨酸 (%)": 3.50, + "总蛋氨酸 (%)": 1.80, + "总赖氨酸 (%)": 5.50, + "有效磷 (%)": 0.30, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3100, + "粗灰分 (%)": 5.0, + "粗纤维 (%)": 2.0, + "粗脂肪 (%)": 1.0, + "粗蛋白 (%)": 80.0, + "蛋+胱氨酸 (%)": 3.00, + "钙 (%)": 0.10 + }, + "大豆油": { + "代谢能 (kcal/kg)": 8600, + "净能 (kcal/kg)": 7400, + "干物质 (%)": 100, + "水分 (%)": 0, + "消化能 (kcal/kg)": 8800, + "粗脂肪 (%)": 99.9 + }, + "大豆粕44": { + "KOH蛋白溶解度 (%)": 78, + "代谢能 (kcal/kg)": 3260, + "净能 (kcal/kg)": 2230, + "可消化色氨酸 (SID %)": 0.53, + "可消化苏氨酸 (SID %)": 1.52, + "可消化蛋氨酸 (SID %)": 0.55, + "可消化赖氨酸 (SID %)": 2.44, + "大豆抗原蛋白-β-伴球蛋白 (mg/kg)": 9200, + "大豆抗原蛋白-球蛋白 (mg/kg)": 18500, + "寡糖-棉子糖+水苏糖 (%)": 5.8, + "干物质 (%)": 89, + "总磷 (%)": 0.65, + "总色氨酸 (%)": 0.60, + "总苏氨酸 (%)": 1.72, + "总蛋氨酸 (%)": 0.62, + "总赖氨酸 (%)": 2.76, + "有效磷 (%)": 0.25, + "植酸磷 (%)": 1.15, + "水分 (%)": 11, + "消化能 (kcal/kg)": 3380, + "粗灰分 (%)": 6.2, + "粗纤维 (%)": 6.0, + "粗脂肪 (%)": 1.8, + "粗蛋白 (%)": 43.8, + "胰蛋白酶抑制因子 (TIU/mg)": 3.4, + "脲酶活性 (ΔpH)": 0.12, + "蛋+胱氨酸 (%)": 1.26, + "钙 (%)": 0.29, + "黄曲霉毒素B1 (μg/kg)": 6 + }, + "大豆粕46": { + "KOH蛋白溶解度 (%)": 82, + "代谢能 (kcal/kg)": 3360, + "净能 (kcal/kg)": 2320, + "可消化色氨酸 (SID %)": 0.57, + "可消化苏氨酸 (SID %)": 1.63, + "可消化蛋氨酸 (SID %)": 0.58, + "可消化赖氨酸 (SID %)": 2.61, + "大豆抗原蛋白-β-伴球蛋白 (mg/kg)": 6800, + "大豆抗原蛋白-球蛋白 (mg/kg)": 13800, + "寡糖-棉子糖+水苏糖 (%)": 5.5, + "干物质 (%)": 89, + "总磷 (%)": 0.68, + "总色氨酸 (%)": 0.64, + "总苏氨酸 (%)": 1.84, + "总蛋氨酸 (%)": 0.66, + "总赖氨酸 (%)": 2.95, + "有效磷 (%)": 0.27, + "植酸磷 (%)": 1.18, + "水分 (%)": 11, + "消化能 (kcal/kg)": 3480, + "粗灰分 (%)": 6.3, + "粗纤维 (%)": 5.5, + "粗脂肪 (%)": 1.5, + "粗蛋白 (%)": 46.8, + "胰蛋白酶抑制因子 (TIU/mg)": 2.7, + "脲酶活性 (ΔpH)": 0.09, + "蛋+胱氨酸 (%)": 1.34, + "钙 (%)": 0.30, + "黄曲霉毒素B1 (μg/kg)": 5 + }, + "大豆粕48": { + "KOH蛋白溶解度 (%)": 86, + "代谢能 (kcal/kg)": 3420, + "净能 (kcal/kg)": 2380, + "可消化色氨酸 (SID %)": 0.58, + "可消化苏氨酸 (SID %)": 1.68, + "可消化蛋氨酸 (SID %)": 0.60, + "可消化赖氨酸 (SID %)": 2.70, + "大豆抗原蛋白-β-伴球蛋白 (mg/kg)": 4200, + "大豆抗原蛋白-球蛋白 (mg/kg)": 8500, + "寡糖-棉子糖+水苏糖 (%)": 5.2, + "干物质 (%)": 89, + "总磷 (%)": 0.70, + "总色氨酸 (%)": 0.66, + "总苏氨酸 (%)": 1.90, + "总蛋氨酸 (%)": 0.68, + "总赖氨酸 (%)": 3.05, + "有效磷 (%)": 0.29, + "植酸磷 (%)": 1.20, + "水分 (%)": 11, + "消化能 (kcal/kg)": 3550, + "粗灰分 (%)": 6.4, + "粗纤维 (%)": 5.2, + "粗脂肪 (%)": 1.2, + "粗蛋白 (%)": 48.5, + "胰蛋白酶抑制因子 (TIU/mg)": 2.1, + "脲酶活性 (ΔpH)": 0.06, + "蛋+胱氨酸 (%)": 1.38, + "钙 (%)": 0.31, + "黄曲霉毒素B1 (μg/kg)": 4 + }, + "大麦": { + "代谢能 (kcal/kg)": 3050, + "净能 (kcal/kg)": 2350, + "可消化色氨酸 (SID %)": 0.12, + "可消化苏氨酸 (SID %)": 0.35, + "可消化蛋氨酸 (SID %)": 0.17, + "可消化赖氨酸 (SID %)": 0.35, + "呕吐毒素DON (μg/kg)": 1000, + "干物质 (%)": 89, + "总磷 (%)": 0.38, + "总色氨酸 (%)": 0.14, + "总苏氨酸 (%)": 0.40, + "总蛋氨酸 (%)": 0.19, + "总赖氨酸 (%)": 0.40, + "有效磷 (%)": 0.13, + "水分 (%)": 11, + "消化能 (kcal/kg)": 3150, + "粗灰分 (%)": 2.5, + "粗纤维 (%)": 5.5, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 11.2, + "蛋+胱氨酸 (%)": 0.42, + "钙 (%)": 0.06, + "黄曲霉毒素B1 (μg/kg)": 15 + }, + "小苏打": { + "Na": 27.0, + "干物质 (%)": 100, + "水分 (%)": 0 + }, + "小麦": { + "代谢能 (kcal/kg)": 3200, + "净能 (kcal/kg)": 2480, + "可消化色氨酸 (SID %)": 0.14, + "可消化苏氨酸 (SID %)": 0.37, + "可消化蛋氨酸 (SID %)": 0.18, + "可消化赖氨酸 (SID %)": 0.31, + "呕吐毒素DON (μg/kg)": 1200, + "干物质 (%)": 89, + "总磷 (%)": 0.38, + "总色氨酸 (%)": 0.16, + "总苏氨酸 (%)": 0.42, + "总蛋氨酸 (%)": 0.20, + "总赖氨酸 (%)": 0.35, + "有效磷 (%)": 0.12, + "水分 (%)": 11, + "消化能 (kcal/kg)": 3310, + "玉米赤霉烯酮ZEN (μg/kg)": 200, + "粗灰分 (%)": 1.8, + "粗纤维 (%)": 2.8, + "粗脂肪 (%)": 1.9, + "粗蛋白 (%)": 12.5, + "蛋+胱氨酸 (%)": 0.48, + "钙 (%)": 0.05, + "黄曲霉毒素B1 (μg/kg)": 10 + }, + "小麦次粉": { + "代谢能 (kcal/kg)": 3050, + "净能 (kcal/kg)": 2300, + "可消化色氨酸 (SID %)": 0.17, + "可消化苏氨酸 (SID %)": 0.46, + "可消化蛋氨酸 (SID %)": 0.22, + "可消化赖氨酸 (SID %)": 0.42, + "呕吐毒素DON (μg/kg)": 2500, + "干物质 (%)": 88, + "总磷 (%)": 0.75, + "总色氨酸 (%)": 0.19, + "总苏氨酸 (%)": 0.52, + "总蛋氨酸 (%)": 0.25, + "总赖氨酸 (%)": 0.48, + "有效磷 (%)": 0.28, + "水分 (%)": 12, + "消化能 (kcal/kg)": 3150, + "玉米赤霉烯酮ZEN (μg/kg)": 400, + "粗灰分 (%)": 3.5, + "粗纤维 (%)": 5.0, + "粗脂肪 (%)": 3.0, + "粗蛋白 (%)": 15.8, + "蛋+胱氨酸 (%)": 0.58, + "钙 (%)": 0.10, + "黄曲霉毒素B1 (μg/kg)": 20 + }, + "小麦麸": { + "代谢能 (kcal/kg)": 2350, + "净能 (kcal/kg)": 1650, + "可消化色氨酸 (SID %)": 0.19, + "可消化苏氨酸 (SID %)": 0.53, + "可消化蛋氨酸 (SID %)": 0.21, + "可消化赖氨酸 (SID %)": 0.51, + "呕吐毒素DON (μg/kg)": 3000, + "干物质 (%)": 89, + "总磷 (%)": 1.15, + "总色氨酸 (%)": 0.22, + "总苏氨酸 (%)": 0.60, + "总蛋氨酸 (%)": 0.24, + "总赖氨酸 (%)": 0.58, + "有效磷 (%)": 0.35, + "水分 (%)": 11, + "消化能 (kcal/kg)": 2450, + "玉米赤霉烯酮ZEN (μg/kg)": 500, + "粗灰分 (%)": 5.8, + "粗纤维 (%)": 10.0, + "粗脂肪 (%)": 3.9, + "粗蛋白 (%)": 15.5, + "蛋+胱氨酸 (%)": 0.55, + "钙 (%)": 0.13, + "黄曲霉毒素B1 (μg/kg)": 25 + }, + "木薯干": { + "代谢能 (kcal/kg)": 3300, + "净能 (kcal/kg)": 2550, + "可消化色氨酸 (SID %)": 0.03, + "可消化苏氨酸 (SID %)": 0.08, + "可消化蛋氨酸 (SID %)": 0.04, + "可消化赖氨酸 (SID %)": 0.09, + "干物质 (%)": 90, + "总磷 (%)": 0.35, + "总色氨酸 (%)": 0.03, + "总苏氨酸 (%)": 0.09, + "总蛋氨酸 (%)": 0.05, + "总赖氨酸 (%)": 0.10, + "有效磷 (%)": 0.12, + "水分 (%)": 10, + "消化能 (kcal/kg)": 3400, + "粗灰分 (%)": 3.0, + "粗纤维 (%)": 4.0, + "粗脂肪 (%)": 0.8, + "粗蛋白 (%)": 2.8, + "蛋+胱氨酸 (%)": 0.12, + "钙 (%)": 0.15 + }, + "杂交构树叶粉": { + "代谢能 (kcal/kg)": 2350, + "净能 (kcal/kg)": 1680, + "单宁 (mg/kg)": 18000, + "可消化色氨酸 (SID %)": 0.25, + "可消化苏氨酸 (SID %)": 0.80, + "可消化蛋氨酸 (SID %)": 0.34, + "可消化赖氨酸 (SID %)": 0.89, + "干物质 (%)": 91.5, + "总磷 (%)": 0.32, + "总色氨酸 (%)": 0.28, + "总苏氨酸 (%)": 0.92, + "总蛋氨酸 (%)": 0.38, + "总赖氨酸 (%)": 1.05, + "总黄酮 (mg/kg)": 12000, + "有效磷 (%)": 0.18, + "氢氰酸 (mg/kg)": 0, + "水分 (%)": 8.5, + "消化能 (kcal/kg)": 2480, + "生物碱 (mg/kg)": 800, + "粗灰分 (%)": 11.2, + "粗纤维 (%)": 16.5, + "粗脂肪 (%)": 4.2, + "粗蛋白 (%)": 21.8, + "绿原酸 (mg/kg)": 4500, + "草酸 (mg/kg)": 6000, + "蛋+胱氨酸 (%)": 0.68, + "钙 (%)": 2.10 + }, + "构树叶粉(老叶高纤维)": { + "代谢能 (kcal/kg)": 2050, + "净能 (kcal/kg)": 1450, + "单宁 (mg/kg)": 25000, + "可消化色氨酸 (SID %)": 0.19, + "可消化苏氨酸 (SID %)": 0.64, + "可消化蛋氨酸 (SID %)": 0.27, + "可消化赖氨酸 (SID %)": 0.70, + "干物质 (%)": 92.0, + "总磷 (%)": 0.28, + "总色氨酸 (%)": 0.22, + "总苏氨酸 (%)": 0.73, + "总蛋氨酸 (%)": 0.30, + "总赖氨酸 (%)": 0.82, + "有效磷 (%)": 0.15, + "水分 (%)": 8.0, + "消化能 (kcal/kg)": 2150, + "粗灰分 (%)": 12.5, + "粗纤维 (%)": 22.0, + "粗脂肪 (%)": 3.5, + "粗蛋白 (%)": 17.5, + "绿原酸 (mg/kg)": 6000, + "草酸 (mg/kg)": 9000, + "蛋+胱氨酸 (%)": 0.55, + "钙 (%)": 2.30 + }, + "柠檬酸渣": { + "代谢能 (kcal/kg)": 2700, + "净能 (kcal/kg)": 1950, + "可消化色氨酸 (SID %)": 0.13, + "可消化苏氨酸 (SID %)": 0.49, + "可消化蛋氨酸 (SID %)": 0.22, + "可消化赖氨酸 (SID %)": 0.53, + "干物质 (%)": 90, + "总磷 (%)": 0.40, + "总色氨酸 (%)": 0.15, + "总苏氨酸 (%)": 0.55, + "总蛋氨酸 (%)": 0.25, + "总赖氨酸 (%)": 0.60, + "有效磷 (%)": 0.15, + "水分 (%)": 10, + "消化能 (kcal/kg)": 2800, + "粗灰分 (%)": 8.0, + "粗纤维 (%)": 12.0, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 10.0, + "蛋+胱氨酸 (%)": 0.50, + "钙 (%)": 0.30 + }, + "棉籽粕": { + "代谢能 (kcal/kg)": 2750, + "净能 (kcal/kg)": 1900, + "可消化色氨酸 (SID %)": 0.37, + "可消化苏氨酸 (SID %)": 1.19, + "可消化蛋氨酸 (SID %)": 0.51, + "可消化赖氨酸 (SID %)": 1.50, + "干物质 (%)": 92, + "总棉酚 (mg/kg)": 9000, + "总磷 (%)": 1.00, + "总色氨酸 (%)": 0.42, + "总苏氨酸 (%)": 1.35, + "总蛋氨酸 (%)": 0.58, + "总赖氨酸 (%)": 1.70, + "有效磷 (%)": 0.30, + "水分 (%)": 8, + "消化能 (kcal/kg)": 2850, + "游离棉酚 (mg/kg)": 800, + "环丙烯酸 (mg/kg)": 300, + "粗灰分 (%)": 6.5, + "粗纤维 (%)": 12.0, + "粗脂肪 (%)": 2.5, + "粗蛋白 (%)": 41.0, + "蛋+胱氨酸 (%)": 1.15, + "钙 (%)": 0.20, + "黄曲霉毒素B1 (μg/kg)": 50 + }, + "棕榈油": { + "代谢能 (kcal/kg)": 8600, + "净能 (kcal/kg)": 7400, + "干物质 (%)": 100, + "水分 (%)": 0, + "消化能 (kcal/kg)": 8800, + "粗脂肪 (%)": 99.9 + }, + "棕榈粕": { + "代谢能 (kcal/kg)": 2550, + "净能 (kcal/kg)": 1800, + "可消化色氨酸 (SID %)": 0.14, + "可消化苏氨酸 (SID %)": 0.49, + "可消化蛋氨酸 (SID %)": 0.22, + "可消化赖氨酸 (SID %)": 0.40, + "干物质 (%)": 92, + "总磷 (%)": 0.60, + "总色氨酸 (%)": 0.16, + "总苏氨酸 (%)": 0.55, + "总蛋氨酸 (%)": 0.25, + "总赖氨酸 (%)": 0.45, + "有效磷 (%)": 0.20, + "水分 (%)": 8, + "消化能 (kcal/kg)": 2650, + "粗灰分 (%)": 6.0, + "粗纤维 (%)": 15.0, + "粗脂肪 (%)": 8.0, + "粗蛋白 (%)": 15.5, + "蛋+胱氨酸 (%)": 0.55, + "钙 (%)": 0.25 + }, + "椰子粕": { + "代谢能 (kcal/kg)": 3100, + "净能 (kcal/kg)": 2300, + "可消化色氨酸 (SID %)": 0.19, + "可消化苏氨酸 (SID %)": 0.62, + "可消化蛋氨酸 (SID %)": 0.31, + "可消化赖氨酸 (SID %)": 0.57, + "干物质 (%)": 92, + "总磷 (%)": 0.65, + "总色氨酸 (%)": 0.22, + "总苏氨酸 (%)": 0.70, + "总蛋氨酸 (%)": 0.35, + "总赖氨酸 (%)": 0.65, + "有效磷 (%)": 0.25, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3200, + "粗灰分 (%)": 6.5, + "粗纤维 (%)": 12.0, + "粗脂肪 (%)": 8.5, + "粗蛋白 (%)": 20.5, + "蛋+胱氨酸 (%)": 0.75, + "钙 (%)": 0.15 + }, + "燕麦": { + "代谢能 (kcal/kg)": 2950, + "净能 (kcal/kg)": 2250, + "可消化色氨酸 (SID %)": 0.15, + "可消化苏氨酸 (SID %)": 0.40, + "可消化蛋氨酸 (SID %)": 0.20, + "可消化赖氨酸 (SID %)": 0.42, + "呕吐毒素DON (μg/kg)": 800, + "干物质 (%)": 90, + "总磷 (%)": 0.40, + "总色氨酸 (%)": 0.17, + "总苏氨酸 (%)": 0.45, + "总蛋氨酸 (%)": 0.22, + "总赖氨酸 (%)": 0.48, + "有效磷 (%)": 0.14, + "水分 (%)": 10, + "消化能 (kcal/kg)": 3050, + "粗灰分 (%)": 3.0, + "粗纤维 (%)": 3.0, + "粗脂肪 (%)": 6.5, + "粗蛋白 (%)": 12.0, + "蛋+胱氨酸 (%)": 0.48, + "钙 (%)": 0.08, + "黄曲霉毒素B1 (μg/kg)": 10 + }, + "燕麦草": { + "代谢能 (kcal/kg)": 2050, + "净能 (kcal/kg)": 1350, + "可消化色氨酸 (SID %)": 0.09, + "可消化苏氨酸 (SID %)": 0.28, + "可消化蛋氨酸 (SID %)": 0.13, + "可消化赖氨酸 (SID %)": 0.31, + "干物质 (%)": 25, + "总磷 (%)": 0.25, + "总色氨酸 (%)": 0.10, + "总苏氨酸 (%)": 0.32, + "总蛋氨酸 (%)": 0.15, + "总赖氨酸 (%)": 0.35, + "有效磷 (%)": 0.08, + "水分 (%)": 75, + "消化能 (kcal/kg)": 2150, + "粗灰分 (%)": 8.0, + "粗纤维 (%)": 32.0, + "粗脂肪 (%)": 2.5, + "粗蛋白 (%)": 9.0, + "蛋+胱氨酸 (%)": 0.35, + "钙 (%)": 0.35 + }, + "猪肺粉": { + "代谢能 (kcal/kg)": 3450, + "净能 (kcal/kg)": 2700, + "可消化色氨酸 (SID %)": 0.66, + "可消化苏氨酸 (SID %)": 2.85, + "可消化蛋氨酸 (SID %)": 1.43, + "可消化赖氨酸 (SID %)": 4.75, + "干物质 (%)": 92, + "总磷 (%)": 1.50, + "总色氨酸 (%)": 0.70, + "总苏氨酸 (%)": 3.00, + "总蛋氨酸 (%)": 1.50, + "总赖氨酸 (%)": 5.00, + "有效磷 (%)": 1.20, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3600, + "粗灰分 (%)": 10.0, + "粗纤维 (%)": 1.0, + "粗脂肪 (%)": 15.0, + "粗蛋白 (%)": 70.0, + "蛋+胱氨酸 (%)": 2.50, + "钙 (%)": 1.00 + }, + "玉米": { + "T-2/HT-2毒素 (μg/kg)": 50, + "代谢能 (kcal/kg)": 3340, + "净能 (kcal/kg)": 2590, + "单宁 (mg/kg)": 800, + "可消化色氨酸 (SID %)": 0.06, + "可消化苏氨酸 (SID %)": 0.27, + "可消化蛋氨酸 (SID %)": 0.16, + "可消化赖氨酸 (SID %)": 0.22, + "呕吐毒素DON (μg/kg)": 800, + "噁唑烷硫酮 (μmol/g)": 0, + "干物质 (%)": 88, + "异硫氰酸酯 (μmol/g)": 0, + "总磷 (%)": 0.28, + "总色氨酸 (%)": 0.07, + "总苏氨酸 (%)": 0.31, + "总蛋氨酸 (%)": 0.18, + "总赖氨酸 (%)": 0.25, + "有效磷 (%)": 0.08, + "水分 (%)": 12, + "消化能 (kcal/kg)": 3450, + "游离棉酚 (mg/kg)": 0, + "玉米赤霉烯酮ZEN (μg/kg)": 120, + "硫甙 (μmol/g)": 0, + "粗灰分 (%)": 1.3, + "粗纤维 (%)": 2.0, + "粗脂肪 (%)": 3.8, + "粗蛋白 (%)": 8.2, + "胰蛋白酶抑制因子 (TIU/mg)": 0, + "脲酶活性 (ΔpH)": 0, + "蛋+胱氨酸 (%)": 0.38, + "钙 (%)": 0.02, + "黄曲霉毒素B1 (μg/kg)": 15 + }, + "玉米DDGS": { + "代谢能 (kcal/kg)": 3300, + "净能 (kcal/kg)": 2400, + "可消化色氨酸 (SID %)": 0.18, + "可消化苏氨酸 (SID %)": 0.88, + "可消化蛋氨酸 (SID %)": 0.46, + "可消化赖氨酸 (SID %)": 0.72, + "呕吐毒素DON (μg/kg)": 1500, + "干物质 (%)": 91, + "总磷 (%)": 0.82, + "总色氨酸 (%)": 0.20, + "总苏氨酸 (%)": 1.00, + "总蛋氨酸 (%)": 0.52, + "总赖氨酸 (%)": 0.82, + "有效磷 (%)": 0.55, + "水分 (%)": 9, + "消化能 (kcal/kg)": 3450, + "玉米赤霉烯酮ZEN (μg/kg)": 300, + "硫酸盐 (mg/kg)": 6000, + "粗灰分 (%)": 4.8, + "粗纤维 (%)": 8.0, + "粗脂肪 (%)": 9.5, + "粗蛋白 (%)": 26.5, + "蛋+胱氨酸 (%)": 1.12, + "钙 (%)": 0.08, + "黄曲霉毒素B1 (μg/kg)": 30 + }, + "玉米油": { + "代谢能 (kcal/kg)": 8600, + "净能 (kcal/kg)": 7400, + "干物质 (%)": 100, + "水分 (%)": 0, + "消化能 (kcal/kg)": 8800, + "粗脂肪 (%)": 99.9 + }, + "玉米胚芽粕": { + "代谢能 (kcal/kg)": 3200, + "净能 (kcal/kg)": 2350, + "可消化色氨酸 (SID %)": 0.16, + "可消化苏氨酸 (SID %)": 0.71, + "可消化蛋氨酸 (SID %)": 0.40, + "可消化赖氨酸 (SID %)": 0.79, + "干物质 (%)": 90, + "总磷 (%)": 0.75, + "总色氨酸 (%)": 0.18, + "总苏氨酸 (%)": 0.80, + "总蛋氨酸 (%)": 0.45, + "总赖氨酸 (%)": 0.90, + "有效磷 (%)": 0.40, + "水分 (%)": 10, + "消化能 (kcal/kg)": 3350, + "粗灰分 (%)": 4.0, + "粗纤维 (%)": 8.5, + "粗脂肪 (%)": 8.0, + "粗蛋白 (%)": 20.0, + "蛋+胱氨酸 (%)": 0.95, + "钙 (%)": 0.05 + }, + "玉米蛋白粉60": { + "代谢能 (kcal/kg)": 3950, + "净能 (kcal/kg)": 3000, + "可消化色氨酸 (SID %)": 0.27, + "可消化苏氨酸 (SID %)": 1.77, + "可消化蛋氨酸 (SID %)": 1.16, + "可消化赖氨酸 (SID %)": 0.92, + "干物质 (%)": 91, + "总磷 (%)": 0.50, + "总色氨酸 (%)": 0.30, + "总苏氨酸 (%)": 2.00, + "总蛋氨酸 (%)": 1.30, + "总赖氨酸 (%)": 1.05, + "有效磷 (%)": 0.20, + "水分 (%)": 9, + "消化能 (kcal/kg)": 4100, + "粗灰分 (%)": 2.0, + "粗纤维 (%)": 2.0, + "粗脂肪 (%)": 2.5, + "粗蛋白 (%)": 62.0, + "蛋+胱氨酸 (%)": 2.20, + "钙 (%)": 0.05 + }, + "玉米青贮": { + "代谢能 (kcal/kg)": 2750, + "净能 (kcal/kg)": 2000, + "可消化色氨酸 (SID %)": 0.05, + "可消化苏氨酸 (SID %)": 0.28, + "可消化蛋氨酸 (SID %)": 0.12, + "可消化赖氨酸 (SID %)": 0.26, + "干物质 (%)": 35, + "总磷 (%)": 0.25, + "总色氨酸 (%)": 0.06, + "总苏氨酸 (%)": 0.32, + "总蛋氨酸 (%)": 0.14, + "总赖氨酸 (%)": 0.30, + "有效磷 (%)": 0.10, + "水分 (%)": 65, + "消化能 (kcal/kg)": 2850, + "粗灰分 (%)": 5.0, + "粗纤维 (%)": 22.0, + "粗脂肪 (%)": 3.0, + "粗蛋白 (%)": 8.0, + "蛋+胱氨酸 (%)": 0.32, + "钙 (%)": 0.25 + }, + "瓜子粕": { + "代谢能 (kcal/kg)": 2900, + "净能 (kcal/kg)": 2100, + "可消化色氨酸 (SID %)": 0.36, + "可消化苏氨酸 (SID %)": 1.06, + "可消化蛋氨酸 (SID %)": 0.54, + "可消化赖氨酸 (SID %)": 1.06, + "干物质 (%)": 90, + "总磷 (%)": 0.70, + "总色氨酸 (%)": 0.40, + "总苏氨酸 (%)": 1.20, + "总蛋氨酸 (%)": 0.60, + "总赖氨酸 (%)": 1.20, + "有效磷 (%)": 0.25, + "水分 (%)": 10, + "消化能 (kcal/kg)": 3000, + "粗灰分 (%)": 6.0, + "粗纤维 (%)": 10.0, + "粗脂肪 (%)": 5.0, + "粗蛋白 (%)": 35.0, + "蛋+胱氨酸 (%)": 1.20, + "钙 (%)": 0.25 + }, + "甜菜粕": { + "代谢能 (kcal/kg)": 2750, + "净能 (kcal/kg)": 2000, + "可消化色氨酸 (SID %)": 0.09, + "可消化苏氨酸 (SID %)": 0.40, + "可消化蛋氨酸 (SID %)": 0.13, + "可消化赖氨酸 (SID %)": 0.48, + "干物质 (%)": 91, + "总磷 (%)": 0.12, + "总色氨酸 (%)": 0.10, + "总苏氨酸 (%)": 0.45, + "总蛋氨酸 (%)": 0.15, + "总赖氨酸 (%)": 0.55, + "有效磷 (%)": 0.05, + "水分 (%)": 9, + "消化能 (kcal/kg)": 2850, + "粗灰分 (%)": 7.0, + "粗纤维 (%)": 18.0, + "粗脂肪 (%)": 0.8, + "粗蛋白 (%)": 9.5, + "蛋+胱氨酸 (%)": 0.40, + "钙 (%)": 0.80 + }, + "石粉": { + "干物质 (%)": 100, + "总磷 (%)": 0.02, + "有效磷 (%)": 0.01, + "水分 (%)": 0, + "钙 (%)": 38.0 + }, + "碎米": { + "代谢能 (kcal/kg)": 3380, + "净能 (kcal/kg)": 2650, + "可消化色氨酸 (SID %)": 0.08, + "可消化苏氨酸 (SID %)": 0.26, + "可消化蛋氨酸 (SID %)": 0.18, + "可消化赖氨酸 (SID %)": 0.25, + "呕吐毒素DON (μg/kg)": 600, + "干物质 (%)": 88, + "总磷 (%)": 0.25, + "总色氨酸 (%)": 0.09, + "总苏氨酸 (%)": 0.30, + "总蛋氨酸 (%)": 0.20, + "总赖氨酸 (%)": 0.28, + "有效磷 (%)": 0.07, + "水分 (%)": 12, + "消化能 (kcal/kg)": 3500, + "粗灰分 (%)": 1.2, + "粗纤维 (%)": 1.0, + "粗脂肪 (%)": 1.5, + "粗蛋白 (%)": 7.8, + "蛋+胱氨酸 (%)": 0.40, + "钙 (%)": 0.03, + "黄曲霉毒素B1 (μg/kg)": 30 + }, + "磷酸氢钙": { + "干物质 (%)": 100, + "总磷 (%)": 18.5, + "有效磷 (%)": 17.0, + "水分 (%)": 0, + "钙 (%)": 21.0 + }, + "稻草粉": { + "代谢能 (kcal/kg)": 1700, + "净能 (kcal/kg)": 1200, + "可消化色氨酸 (SID %)": 0.03, + "可消化苏氨酸 (SID %)": 0.13, + "可消化蛋氨酸 (SID %)": 0.04, + "可消化赖氨酸 (SID %)": 0.13, + "干物质 (%)": 92, + "总磷 (%)": 0.10, + "总色氨酸 (%)": 0.04, + "总苏氨酸 (%)": 0.15, + "总蛋氨酸 (%)": 0.05, + "总赖氨酸 (%)": 0.15, + "有效磷 (%)": 0.04, + "水分 (%)": 8, + "消化能 (kcal/kg)": 1800, + "粗灰分 (%)": 8.0, + "粗纤维 (%)": 40.0, + "粗脂肪 (%)": 1.0, + "粗蛋白 (%)": 4.0, + "蛋+胱氨酸 (%)": 0.12, + "钙 (%)": 0.30 + }, + "稻谷": { + "代谢能 (kcal/kg)": 3100, + "净能 (kcal/kg)": 2400, + "可消化色氨酸 (SID %)": 0.09, + "可消化苏氨酸 (SID %)": 0.26, + "可消化蛋氨酸 (SID %)": 0.18, + "可消化赖氨酸 (SID %)": 0.27, + "干物质 (%)": 88, + "总磷 (%)": 0.50, + "总色氨酸 (%)": 0.10, + "总苏氨酸 (%)": 0.30, + "总蛋氨酸 (%)": 0.20, + "总赖氨酸 (%)": 0.30, + "有效磷 (%)": 0.15, + "水分 (%)": 12, + "消化能 (kcal/kg)": 3200, + "粗灰分 (%)": 5.0, + "粗纤维 (%)": 5.0, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 8.0, + "蛋+胱氨酸 (%)": 0.40, + "钙 (%)": 0.05 + }, + "稻谷糠": { + "代谢能 (kcal/kg)": 2800, + "净能 (kcal/kg)": 2050, + "可消化色氨酸 (SID %)": 0.18, + "可消化苏氨酸 (SID %)": 0.44, + "可消化蛋氨酸 (SID %)": 0.27, + "可消化赖氨酸 (SID %)": 0.44, + "干物质 (%)": 91, + "总磷 (%)": 1.50, + "总色氨酸 (%)": 0.20, + "总苏氨酸 (%)": 0.50, + "总蛋氨酸 (%)": 0.30, + "总赖氨酸 (%)": 0.50, + "有效磷 (%)": 0.45, + "水分 (%)": 9, + "消化能 (kcal/kg)": 2900, + "粗灰分 (%)": 10.0, + "粗纤维 (%)": 10.0, + "粗脂肪 (%)": 15.0, + "粗蛋白 (%)": 13.0, + "蛋+胱氨酸 (%)": 0.60, + "钙 (%)": 0.15 + }, + "米糠": { + "代谢能 (kcal/kg)": 2850, + "净能 (kcal/kg)": 2100, + "可消化色氨酸 (SID %)": 0.16, + "可消化苏氨酸 (SID %)": 0.49, + "可消化蛋氨酸 (SID %)": 0.25, + "可消化赖氨酸 (SID %)": 0.46, + "呕吐毒素DON (μg/kg)": 800, + "干物质 (%)": 91, + "总磷 (%)": 1.60, + "总色氨酸 (%)": 0.18, + "总苏氨酸 (%)": 0.55, + "总蛋氨酸 (%)": 0.28, + "总赖氨酸 (%)": 0.52, + "有效磷 (%)": 0.40, + "水分 (%)": 9, + "消化能 (kcal/kg)": 2950, + "玉米赤霉烯酮ZEN (μg/kg)": 150, + "粗灰分 (%)": 9.0, + "粗纤维 (%)": 11.0, + "粗脂肪 (%)": 14.0, + "粗蛋白 (%)": 13.5, + "蛋+胱氨酸 (%)": 0.60, + "钙 (%)": 0.10, + "黄曲霉毒素B1 (μg/kg)": 50 + }, + "米糠粕": { + "代谢能 (kcal/kg)": 2550, + "净能 (kcal/kg)": 1850, + "可消化色氨酸 (SID %)": 0.18, + "可消化苏氨酸 (SID %)": 0.53, + "可消化蛋氨酸 (SID %)": 0.27, + "可消化赖氨酸 (SID %)": 0.51, + "呕吐毒素DON (μg/kg)": 700, + "干物质 (%)": 92, + "总磷 (%)": 1.70, + "总色氨酸 (%)": 0.20, + "总苏氨酸 (%)": 0.60, + "总蛋氨酸 (%)": 0.30, + "总赖氨酸 (%)": 0.58, + "有效磷 (%)": 0.45, + "水分 (%)": 8, + "消化能 (kcal/kg)": 2650, + "粗灰分 (%)": 10.5, + "粗纤维 (%)": 13.0, + "粗脂肪 (%)": 3.0, + "粗蛋白 (%)": 15.0, + "蛋+胱氨酸 (%)": 0.65, + "钙 (%)": 0.12, + "黄曲霉毒素B1 (μg/kg)": 40 + }, + "红薯干": { + "代谢能 (kcal/kg)": 3100, + "净能 (kcal/kg)": 2350, + "可消化色氨酸 (SID %)": 0.04, + "可消化苏氨酸 (SID %)": 0.16, + "可消化蛋氨酸 (SID %)": 0.07, + "可消化赖氨酸 (SID %)": 0.13, + "干物质 (%)": 90, + "总磷 (%)": 0.20, + "总色氨酸 (%)": 0.05, + "总苏氨酸 (%)": 0.18, + "总蛋氨酸 (%)": 0.08, + "总赖氨酸 (%)": 0.15, + "有效磷 (%)": 0.08, + "水分 (%)": 10, + "消化能 (kcal/kg)": 3200, + "粗灰分 (%)": 4.0, + "粗纤维 (%)": 5.0, + "粗脂肪 (%)": 1.0, + "粗蛋白 (%)": 4.0, + "蛋+胱氨酸 (%)": 0.18, + "钙 (%)": 0.20 + }, + "肉粉": { + "代谢能 (kcal/kg)": 3200, + "净能 (kcal/kg)": 2400, + "可消化色氨酸 (SID %)": 0.33, + "可消化苏氨酸 (SID %)": 1.71, + "可消化蛋氨酸 (SID %)": 0.76, + "可消化赖氨酸 (SID %)": 2.85, + "干物质 (%)": 92, + "总磷 (%)": 4.50, + "总色氨酸 (%)": 0.35, + "总苏氨酸 (%)": 1.80, + "总蛋氨酸 (%)": 0.80, + "总赖氨酸 (%)": 3.00, + "有效磷 (%)": 3.20, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3400, + "粗灰分 (%)": 25.0, + "粗纤维 (%)": 2.0, + "粗脂肪 (%)": 12.0, + "粗蛋白 (%)": 55.0, + "蛋+胱氨酸 (%)": 1.40, + "钙 (%)": 8.50 + }, + "肉骨粉50": { + "代谢能 (kcal/kg)": 3000, + "净能 (kcal/kg)": 2200, + "可消化色氨酸 (SID %)": 0.28, + "可消化苏氨酸 (SID %)": 1.57, + "可消化蛋氨酸 (SID %)": 0.71, + "可消化赖氨酸 (SID %)": 2.57, + "干物质 (%)": 93, + "总磷 (%)": 5.20, + "总色氨酸 (%)": 0.30, + "总苏氨酸 (%)": 1.65, + "总蛋氨酸 (%)": 0.75, + "总赖氨酸 (%)": 2.70, + "有效磷 (%)": 3.60, + "水分 (%)": 7, + "消化能 (kcal/kg)": 3200, + "粗灰分 (%)": 30.0, + "粗纤维 (%)": 2.5, + "粗脂肪 (%)": 10.0, + "粗蛋白 (%)": 50.0, + "蛋+胱氨酸 (%)": 1.35, + "钙 (%)": 10.0 + }, + "脱脂奶粉": { + "代谢能 (kcal/kg)": 3800, + "净能 (kcal/kg)": 3100, + "可消化色氨酸 (SID %)": 0.46, + "可消化苏氨酸 (SID %)": 1.38, + "可消化蛋氨酸 (SID %)": 0.81, + "可消化赖氨酸 (SID %)": 2.57, + "干物质 (%)": 94, + "总磷 (%)": 1.00, + "总色氨酸 (%)": 0.48, + "总苏氨酸 (%)": 1.45, + "总蛋氨酸 (%)": 0.85, + "总赖氨酸 (%)": 2.70, + "有效磷 (%)": 0.90, + "水分 (%)": 6, + "消化能 (kcal/kg)": 3980, + "粗灰分 (%)": 8.0, + "粗纤维 (%)": 0, + "粗脂肪 (%)": 1.0, + "粗蛋白 (%)": 34.0, + "蛋+胱氨酸 (%)": 1.50, + "钙 (%)": 1.25 + }, + "膨化全脂大豆": { + "KOH蛋白溶解度 (%)": 90, + "代谢能 (kcal/kg)": 3950, + "净能 (kcal/kg)": 3050, + "可消化色氨酸 (SID %)": 0.44, + "可消化苏氨酸 (SID %)": 1.33, + "可消化蛋氨酸 (SID %)": 0.46, + "可消化赖氨酸 (SID %)": 2.03, + "大豆抗原蛋白-β-伴球蛋白 (mg/kg)": 1500, + "大豆抗原蛋白-球蛋白 (mg/kg)": 3200, + "干物质 (%)": 90, + "总磷 (%)": 0.60, + "总色氨酸 (%)": 0.50, + "总苏氨酸 (%)": 1.50, + "总蛋氨酸 (%)": 0.52, + "总赖氨酸 (%)": 2.30, + "有效磷 (%)": 0.24, + "水分 (%)": 10, + "消化能 (kcal/kg)": 4150, + "粗灰分 (%)": 5.2, + "粗纤维 (%)": 5.0, + "粗脂肪 (%)": 18.5, + "粗蛋白 (%)": 36.8, + "胰蛋白酶抑制因子 (TIU/mg)": 1.4, + "脲酶活性 (ΔpH)": 0.03, + "蛋+胱氨酸 (%)": 1.05, + "钙 (%)": 0.25, + "黄曲霉毒素B1 (μg/kg)": 8 + }, + "芝麻粕": { + "代谢能 (kcal/kg)": 3200, + "净能 (kcal/kg)": 2250, + "可消化色氨酸 (SID %)": 0.49, + "可消化苏氨酸 (SID %)": 1.33, + "可消化蛋氨酸 (SID %)": 0.98, + "可消化赖氨酸 (SID %)": 1.15, + "干物质 (%)": 92, + "总磷 (%)": 1.30, + "总色氨酸 (%)": 0.55, + "总苏氨酸 (%)": 1.50, + "总蛋氨酸 (%)": 1.10, + "总赖氨酸 (%)": 1.30, + "有效磷 (%)": 0.45, + "植酸磷 (%)": 1.8, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3350, + "粗灰分 (%)": 12.0, + "粗纤维 (%)": 8.0, + "粗脂肪 (%)": 6.0, + "粗蛋白 (%)": 43.0, + "草酸 (mg/kg)": 8000, + "蛋+胱氨酸 (%)": 1.60, + "钙 (%)": 1.20 + }, + "花生秧粉": { + "代谢能 (kcal/kg)": 2350, + "净能 (kcal/kg)": 1650, + "可消化色氨酸 (SID %)": 0.12, + "可消化苏氨酸 (SID %)": 0.44, + "可消化蛋氨酸 (SID %)": 0.20, + "可消化赖氨酸 (SID %)": 0.48, + "干物质 (%)": 90, + "总磷 (%)": 0.30, + "总色氨酸 (%)": 0.14, + "总苏氨酸 (%)": 0.50, + "总蛋氨酸 (%)": 0.22, + "总赖氨酸 (%)": 0.55, + "有效磷 (%)": 0.12, + "水分 (%)": 10, + "消化能 (kcal/kg)": 2450, + "粗灰分 (%)": 7.5, + "粗纤维 (%)": 25.0, + "粗脂肪 (%)": 3.0, + "粗蛋白 (%)": 13.5, + "蛋+胱氨酸 (%)": 0.45, + "钙 (%)": 1.10 + }, + "花生粕": { + "代谢能 (kcal/kg)": 2950, + "净能 (kcal/kg)": 2050, + "可消化色氨酸 (SID %)": 0.42, + "可消化苏氨酸 (SID %)": 1.19, + "可消化蛋氨酸 (SID %)": 0.44, + "可消化赖氨酸 (SID %)": 1.46, + "呕吐毒素DON (μg/kg)": 500, + "干物质 (%)": 92, + "总磷 (%)": 0.60, + "总色氨酸 (%)": 0.48, + "总苏氨酸 (%)": 1.35, + "总蛋氨酸 (%)": 0.50, + "总赖氨酸 (%)": 1.65, + "有效磷 (%)": 0.22, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3050, + "粗灰分 (%)": 5.5, + "粗纤维 (%)": 10.0, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 46.0, + "蛋+胱氨酸 (%)": 1.10, + "钙 (%)": 0.20, + "黄曲霉毒素B1 (μg/kg)": 80 + }, + "苜蓿草块": { + "代谢能 (kcal/kg)": 2250, + "净能 (kcal/kg)": 1500, + "可消化色氨酸 (SID %)": 0.21, + "可消化苏氨酸 (SID %)": 0.66, + "可消化蛋氨酸 (SID %)": 0.27, + "可消化赖氨酸 (SID %)": 0.77, + "干物质 (%)": 90, + "总磷 (%)": 0.30, + "总色氨酸 (%)": 0.24, + "总苏氨酸 (%)": 0.75, + "总蛋氨酸 (%)": 0.30, + "总赖氨酸 (%)": 0.88, + "有效磷 (%)": 0.14, + "水分 (%)": 10, + "消化能 (kcal/kg)": 2350, + "粗灰分 (%)": 10.0, + "粗纤维 (%)": 26.0, + "粗脂肪 (%)": 2.5, + "粗蛋白 (%)": 18.5, + "蛋+胱氨酸 (%)": 0.58, + "钙 (%)": 1.50 + }, + "苜蓿草粉": { + "代谢能 (kcal/kg)": 2100, + "净能 (kcal/kg)": 1400, + "单宁 (mg/kg)": 5000, + "可消化色氨酸 (SID %)": 0.19, + "可消化苏氨酸 (SID %)": 0.62, + "可消化蛋氨酸 (SID %)": 0.25, + "可消化赖氨酸 (SID %)": 0.70, + "干物质 (%)": 92, + "总磷 (%)": 0.28, + "总色氨酸 (%)": 0.22, + "总苏氨酸 (%)": 0.70, + "总蛋氨酸 (%)": 0.28, + "总赖氨酸 (%)": 0.80, + "有效磷 (%)": 0.12, + "水分 (%)": 8, + "消化能 (kcal/kg)": 2200, + "皂苷 (mg/kg)": 4000, + "粗灰分 (%)": 9.0, + "粗纤维 (%)": 28.0, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 17.0, + "蛋+胱氨酸 (%)": 0.55, + "钙 (%)": 1.40, + "香豆素 (mg/kg)": 800 + }, + "苹果渣": { + "代谢能 (kcal/kg)": 2500, + "净能 (kcal/kg)": 1800, + "可消化色氨酸 (SID %)": 0.06, + "可消化苏氨酸 (SID %)": 0.20, + "可消化蛋氨酸 (SID %)": 0.09, + "可消化赖氨酸 (SID %)": 0.18, + "干物质 (%)": 25, + "总磷 (%)": 0.10, + "总色氨酸 (%)": 0.07, + "总苏氨酸 (%)": 0.22, + "总蛋氨酸 (%)": 0.10, + "总赖氨酸 (%)": 0.20, + "有效磷 (%)": 0.05, + "水分 (%)": 75, + "消化能 (kcal/kg)": 2600, + "粗灰分 (%)": 3.0, + "粗纤维 (%)": 15.0, + "粗脂肪 (%)": 1.5, + "粗蛋白 (%)": 4.5, + "蛋+胱氨酸 (%)": 0.25, + "钙 (%)": 0.15 + }, + "菜籽粕": { + "代谢能 (kcal/kg)": 2950, + "净能 (kcal/kg)": 2000, + "单宁 (mg/kg)": 12000, + "可消化色氨酸 (SID %)": 0.40, + "可消化苏氨酸 (SID %)": 1.41, + "可消化蛋氨酸 (SID %)": 0.64, + "可消化赖氨酸 (SID %)": 1.75, + "噁唑烷硫酮 (μmol/g)": 25, + "干物质 (%)": 91, + "异硫氰酸酯 (μmol/g)": 18, + "总磷 (%)": 1.10, + "总色氨酸 (%)": 0.45, + "总苏氨酸 (%)": 1.60, + "总蛋氨酸 (%)": 0.72, + "总赖氨酸 (%)": 1.98, + "有效磷 (%)": 0.38, + "水分 (%)": 9, + "消化能 (kcal/kg)": 3050, + "硫甙 (μmol/g)": 45, + "粗灰分 (%)": 7.0, + "粗纤维 (%)": 11.0, + "粗脂肪 (%)": 2.5, + "粗蛋白 (%)": 36.5, + "蛋+胱氨酸 (%)": 1.50, + "钙 (%)": 0.70, + "黄曲霉毒素B1 (μg/kg)": 15 + }, + "葡萄糖": { + "代谢能 (kcal/kg)": 3650, + "净能 (kcal/kg)": 3650, + "干物质 (%)": 100, + "水分 (%)": 0, + "消化能 (kcal/kg)": 3650, + "粗蛋白 (%)": 0 + }, + "葵花籽粕": { + "代谢能 (kcal/kg)": 2450, + "净能 (kcal/kg)": 1700, + "单宁 (mg/kg)": 3000, + "可消化色氨酸 (SID %)": 0.34, + "可消化苏氨酸 (SID %)": 1.06, + "可消化蛋氨酸 (SID %)": 0.67, + "可消化赖氨酸 (SID %)": 1.01, + "干物质 (%)": 91, + "总磷 (%)": 1.00, + "总色氨酸 (%)": 0.38, + "总苏氨酸 (%)": 1.20, + "总蛋氨酸 (%)": 0.75, + "总赖氨酸 (%)": 1.15, + "有效磷 (%)": 0.32, + "水分 (%)": 9, + "消化能 (kcal/kg)": 2550, + "粗灰分 (%)": 7.0, + "粗纤维 (%)": 20.0, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 32.0, + "绿原酸 (mg/kg)": 1800, + "蛋+胱氨酸 (%)": 1.25, + "钙 (%)": 0.35 + }, + "蔗糖": { + "代谢能 (kcal/kg)": 3700, + "净能 (kcal/kg)": 3700, + "干物质 (%)": 100, + "水分 (%)": 0, + "消化能 (kcal/kg)": 3700, + "粗蛋白 (%)": 0 + }, + "虾粉": { + "代谢能 (kcal/kg)": 3350, + "净能 (kcal/kg)": 2600, + "可消化色氨酸 (SID %)": 0.38, + "可消化苏氨酸 (SID %)": 2.09, + "可消化蛋氨酸 (SID %)": 1.14, + "可消化赖氨酸 (SID %)": 3.61, + "干物质 (%)": 92, + "总磷 (%)": 2.50, + "总色氨酸 (%)": 0.40, + "总苏氨酸 (%)": 2.20, + "总蛋氨酸 (%)": 1.20, + "总赖氨酸 (%)": 3.80, + "有效磷 (%)": 2.00, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3500, + "粗灰分 (%)": 20.0, + "粗纤维 (%)": 2.0, + "粗脂肪 (%)": 5.0, + "粗蛋白 (%)": 50.0, + "蛋+胱氨酸 (%)": 2.00, + "钙 (%)": 5.00 + }, + "蚕蛹粉": { + "代谢能 (kcal/kg)": 3650, + "净能 (kcal/kg)": 2850, + "可消化色氨酸 (SID %)": 0.48, + "可消化苏氨酸 (SID %)": 1.90, + "可消化蛋氨酸 (SID %)": 0.86, + "可消化赖氨酸 (SID %)": 3.33, + "干物质 (%)": 95, + "总磷 (%)": 1.00, + "总色氨酸 (%)": 0.50, + "总苏氨酸 (%)": 2.00, + "总蛋氨酸 (%)": 0.90, + "总赖氨酸 (%)": 3.50, + "有效磷 (%)": 0.80, + "水分 (%)": 5, + "消化能 (kcal/kg)": 3800, + "粗灰分 (%)": 5.0, + "粗纤维 (%)": 1.0, + "粗脂肪 (%)": 30.0, + "粗蛋白 (%)": 55.0, + "蛋+胱氨酸 (%)": 1.50, + "钙 (%)": 0.50 + }, + "蚕豆": { + "代谢能 (kcal/kg)": 3280, + "净能 (kcal/kg)": 2500, + "可消化色氨酸 (SID %)": 0.22, + "可消化苏氨酸 (SID %)": 0.84, + "可消化蛋氨酸 (SID %)": 0.18, + "可消化赖氨酸 (SID %)": 1.50, + "干物质 (%)": 89, + "总磷 (%)": 0.45, + "总色氨酸 (%)": 0.25, + "总苏氨酸 (%)": 0.95, + "总蛋氨酸 (%)": 0.20, + "总赖氨酸 (%)": 1.70, + "有效磷 (%)": 0.18, + "水分 (%)": 11, + "消化能 (kcal/kg)": 3400, + "粗灰分 (%)": 3.5, + "粗纤维 (%)": 8.0, + "粗脂肪 (%)": 1.8, + "粗蛋白 (%)": 26.0, + "蛋+胱氨酸 (%)": 0.48, + "钙 (%)": 0.12 + }, + "蟹粉": { + "代谢能 (kcal/kg)": 3250, + "净能 (kcal/kg)": 2550, + "可消化色氨酸 (SID %)": 0.33, + "可消化苏氨酸 (SID %)": 1.90, + "可消化蛋氨酸 (SID %)": 0.95, + "可消化赖氨酸 (SID %)": 3.04, + "干物质 (%)": 93, + "总磷 (%)": 3.00, + "总色氨酸 (%)": 0.35, + "总苏氨酸 (%)": 2.00, + "总蛋氨酸 (%)": 1.00, + "总赖氨酸 (%)": 3.20, + "有效磷 (%)": 2.50, + "水分 (%)": 7, + "消化能 (kcal/kg)": 3400, + "粗灰分 (%)": 25.0, + "粗纤维 (%)": 3.0, + "粗脂肪 (%)": 4.0, + "粗蛋白 (%)": 45.0, + "蛋+胱氨酸 (%)": 1.80, + "钙 (%)": 8.00 + }, + "血浆蛋白粉": { + "代谢能 (kcal/kg)": 4350, + "免疫球蛋白IgG (%)": 18, + "净能 (kcal/kg)": 3400, + "可消化色氨酸 (SID %)": 1.04, + "可消化苏氨酸 (SID %)": 4.94, + "可消化蛋氨酸 (SID %)": 0.76, + "可消化赖氨酸 (SID %)": 6.55, + "干物质 (%)": 92, + "总磷 (%)": 1.30, + "总色氨酸 (%)": 1.10, + "总苏氨酸 (%)": 5.20, + "总蛋氨酸 (%)": 0.80, + "总赖氨酸 (%)": 6.90, + "有效磷 (%)": 1.10, + "水分 (%)": 8, + "消化能 (kcal/kg)": 4550, + "盐分 (%)": 2.5, + "粗灰分 (%)": 8.0, + "粗纤维 (%)": 0.5, + "粗脂肪 (%)": 1.0, + "粗蛋白 (%)": 78.0, + "蛋+胱氨酸 (%)": 1.60, + "钙 (%)": 0.20 + }, + "血粉": { + "代谢能 (kcal/kg)": 4000, + "净能 (kcal/kg)": 3100, + "可消化色氨酸 (SID %)": 1.14, + "可消化苏氨酸 (SID %)": 3.61, + "可消化蛋氨酸 (SID %)": 1.04, + "可消化赖氨酸 (SID %)": 7.13, + "干物质 (%)": 91, + "总磷 (%)": 0.40, + "总色氨酸 (%)": 1.20, + "总苏氨酸 (%)": 3.80, + "总蛋氨酸 (%)": 1.10, + "总赖氨酸 (%)": 7.50, + "有效磷 (%)": 0.35, + "水分 (%)": 9, + "消化能 (kcal/kg)": 4200, + "粗灰分 (%)": 4.0, + "粗纤维 (%)": 1.0, + "粗脂肪 (%)": 1.0, + "粗蛋白 (%)": 88.0, + "蛋+胱氨酸 (%)": 1.80, + "钙 (%)": 0.30 + }, + "豆磷脂": { + "代谢能 (kcal/kg)": 6300, + "净能 (kcal/kg)": 5500, + "干物质 (%)": 95, + "水分 (%)": 5, + "消化能 (kcal/kg)": 6500, + "粗脂肪 (%)": 50.0, + "粗蛋白 (%)": 12.0 + }, + "豌豆": { + "代谢能 (kcal/kg)": 3380, + "净能 (kcal/kg)": 2600, + "可消化色氨酸 (SID %)": 0.19, + "可消化苏氨酸 (SID %)": 0.75, + "可消化蛋氨酸 (SID %)": 0.22, + "可消化赖氨酸 (SID %)": 1.46, + "干物质 (%)": 88, + "总磷 (%)": 0.40, + "总色氨酸 (%)": 0.22, + "总苏氨酸 (%)": 0.85, + "总蛋氨酸 (%)": 0.25, + "总赖氨酸 (%)": 1.65, + "有效磷 (%)": 0.15, + "水分 (%)": 12, + "消化能 (kcal/kg)": 3500, + "粗灰分 (%)": 3.0, + "粗纤维 (%)": 6.0, + "粗脂肪 (%)": 1.5, + "粗蛋白 (%)": 22.5, + "蛋+胱氨酸 (%)": 0.55, + "钙 (%)": 0.10 + }, + "豌豆蛋白": { + "代谢能 (kcal/kg)": 3480, + "净能 (kcal/kg)": 2680, + "可消化色氨酸 (SID %)": 0.53, + "可消化苏氨酸 (SID %)": 2.13, + "可消化蛋氨酸 (SID %)": 0.72, + "可消化赖氨酸 (SID %)": 4.00, + "干物质 (%)": 90, + "总磷 (%)": 0.30, + "总色氨酸 (%)": 0.60, + "总苏氨酸 (%)": 2.40, + "总蛋氨酸 (%)": 0.80, + "总赖氨酸 (%)": 4.50, + "有效磷 (%)": 0.12, + "水分 (%)": 10, + "消化能 (kcal/kg)": 3600, + "粗灰分 (%)": 4.0, + "粗纤维 (%)": 4.0, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 65.0, + "蛋+胱氨酸 (%)": 1.60, + "钙 (%)": 0.10 + }, + "进口鱼粉65": { + "代谢能 (kcal/kg)": 3650, + "净能 (kcal/kg)": 2800, + "可消化色氨酸 (SID %)": 0.66, + "可消化苏氨酸 (SID %)": 2.56, + "可消化蛋氨酸 (SID %)": 1.75, + "可消化赖氨酸 (SID %)": 4.75, + "干物质 (%)": 92, + "总磷 (%)": 3.20, + "总色氨酸 (%)": 0.70, + "总苏氨酸 (%)": 2.70, + "总蛋氨酸 (%)": 1.85, + "总赖氨酸 (%)": 5.00, + "挥发性盐基氮 (mg/100g)": 120, + "有效磷 (%)": 2.40, + "水分 (%)": 8, + "沙门氏菌": 0, + "消化能 (kcal/kg)": 3850, + "粗灰分 (%)": 18.0, + "粗纤维 (%)": 0.5, + "粗脂肪 (%)": 9.0, + "粗蛋白 (%)": 65.0, + "组胺 (mg/kg)": 800, + "蛋+胱氨酸 (%)": 2.55, + "钙 (%)": 5.50 + }, + "食盐": { + "Cl": 60.0, + "Na": 39.0, + "干物质 (%)": 100, + "水分 (%)": 0 + }, + "饲料酵母粉": { + "代谢能 (kcal/kg)": 3450, + "净能 (kcal/kg)": 2650, + "可消化色氨酸 (SID %)": 0.52, + "可消化苏氨酸 (SID %)": 2.00, + "可消化蛋氨酸 (SID %)": 0.66, + "可消化赖氨酸 (SID %)": 3.04, + "干物质 (%)": 93, + "总磷 (%)": 1.40, + "总色氨酸 (%)": 0.55, + "总苏氨酸 (%)": 2.10, + "总蛋氨酸 (%)": 0.70, + "总赖氨酸 (%)": 3.20, + "有效磷 (%)": 1.00, + "水分 (%)": 7, + "消化能 (kcal/kg)": 3600, + "粗灰分 (%)": 8.0, + "粗纤维 (%)": 3.0, + "粗脂肪 (%)": 2.0, + "粗蛋白 (%)": 45.0, + "蛋+胱氨酸 (%)": 1.30, + "钙 (%)": 0.20 + }, + "高粱": { + "代谢能 (kcal/kg)": 3220, + "净能 (kcal/kg)": 2500, + "单宁 (mg/kg)": 8000, + "可消化色氨酸 (SID %)": 0.08, + "可消化苏氨酸 (SID %)": 0.25, + "可消化蛋氨酸 (SID %)": 0.14, + "可消化赖氨酸 (SID %)": 0.18, + "呕吐毒素DON (μg/kg)": 600, + "干物质 (%)": 89, + "总磷 (%)": 0.28, + "总色氨酸 (%)": 0.09, + "总苏氨酸 (%)": 0.29, + "总蛋氨酸 (%)": 0.16, + "总赖氨酸 (%)": 0.21, + "有效磷 (%)": 0.08, + "水分 (%)": 11, + "消化能 (kcal/kg)": 3320, + "游离棉酚 (mg/kg)": 0, + "玉米赤霉烯酮ZEN (μg/kg)": 80, + "粗灰分 (%)": 1.6, + "粗纤维 (%)": 2.3, + "粗脂肪 (%)": 3.2, + "粗蛋白 (%)": 9.0, + "蛋+胱氨酸 (%)": 0.35, + "钙 (%)": 0.03, + "黄曲霉毒素B1 (μg/kg)": 10 + }, + "鱼油": { + "代谢能 (kcal/kg)": 8800, + "净能 (kcal/kg)": 7600, + "干物质 (%)": 100, + "水分 (%)": 0, + "消化能 (kcal/kg)": 9000, + "粗脂肪 (%)": 99.9 + }, + "鸡肉粉": { + "代谢能 (kcal/kg)": 3550, + "净能 (kcal/kg)": 2800, + "可消化色氨酸 (SID %)": 0.57, + "可消化苏氨酸 (SID %)": 2.38, + "可消化蛋氨酸 (SID %)": 1.14, + "可消化赖氨酸 (SID %)": 3.80, + "干物质 (%)": 92, + "总磷 (%)": 2.00, + "总色氨酸 (%)": 0.60, + "总苏氨酸 (%)": 2.50, + "总蛋氨酸 (%)": 1.20, + "总赖氨酸 (%)": 4.00, + "有效磷 (%)": 1.50, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3700, + "粗灰分 (%)": 15.0, + "粗纤维 (%)": 1.5, + "粗脂肪 (%)": 12.0, + "粗蛋白 (%)": 65.0, + "蛋+胱氨酸 (%)": 2.00, + "钙 (%)": 3.00 + }, + "鸭肉粉": { + "代谢能 (kcal/kg)": 3500, + "净能 (kcal/kg)": 2750, + "可消化色氨酸 (SID %)": 0.52, + "可消化苏氨酸 (SID %)": 2.19, + "可消化蛋氨酸 (SID %)": 1.05, + "可消化赖氨酸 (SID %)": 3.52, + "干物质 (%)": 92, + "总磷 (%)": 1.80, + "总色氨酸 (%)": 0.55, + "总苏氨酸 (%)": 2.30, + "总蛋氨酸 (%)": 1.10, + "总赖氨酸 (%)": 3.70, + "有效磷 (%)": 1.40, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3650, + "粗灰分 (%)": 16.0, + "粗纤维 (%)": 2.0, + "粗脂肪 (%)": 14.0, + "粗蛋白 (%)": 60.0, + "蛋+胱氨酸 (%)": 1.90, + "钙 (%)": 2.50 + }, + "鹅肉粉": { + "代谢能 (kcal/kg)": 3470, + "净能 (kcal/kg)": 2720, + "可消化色氨酸 (SID %)": 0.55, + "可消化苏氨酸 (SID %)": 2.28, + "可消化蛋氨酸 (SID %)": 1.09, + "可消化赖氨酸 (SID %)": 3.61, + "干物质 (%)": 92, + "总磷 (%)": 1.90, + "总色氨酸 (%)": 0.58, + "总苏氨酸 (%)": 2.40, + "总蛋氨酸 (%)": 1.15, + "总赖氨酸 (%)": 3.80, + "有效磷 (%)": 1.45, + "水分 (%)": 8, + "消化能 (kcal/kg)": 3620, + "粗灰分 (%)": 14.0, + "粗纤维 (%)": 1.8, + "粗脂肪 (%)": 13.0, + "粗蛋白 (%)": 62.0, + "蛋+胱氨酸 (%)": 1.95, + "钙 (%)": 2.80 + } + } +} \ No newline at end of file diff --git a/config/presets-data/system_plans.json b/config/presets-data/system_plans.json new file mode 100644 index 0000000..e69de29 diff --git a/design/archive/recipe-management/index.md b/design/archive/recipe-management/index.md index f0a5cf9..ac0c8a0 100644 --- a/design/archive/recipe-management/index.md +++ b/design/archive/recipe-management/index.md @@ -45,3 +45,8 @@ http://git.huangwc.com/pig/pig-farm-controller/issues/66 7. 简单查看功能 - 两个配方对比页面(营养+成本对比) + +# 完成事项 + +1. 定义原料表, 营养表, 原料营养表, 原料库存变更表 +2. 迁移配置文件, 实现从json文件中读取原材料营养预设值, 并自动写入数据库 \ No newline at end of file diff --git a/go.mod b/go.mod index 2e56398..34117dc 100644 --- a/go.mod +++ b/go.mod @@ -13,9 +13,10 @@ require ( github.com/labstack/echo/v4 v4.13.4 github.com/panjf2000/ants/v2 v2.11.3 github.com/robfig/cron/v3 v3.0.1 - github.com/stretchr/testify v1.11.1 + github.com/swaggo/echo-swagger v1.4.1 github.com/swaggo/swag v1.16.6 github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 + github.com/tidwall/gjson v1.18.0 go.uber.org/zap v1.27.0 golang.org/x/crypto v0.43.0 google.golang.org/protobuf v1.36.9 @@ -23,7 +24,6 @@ require ( gopkg.in/yaml.v2 v2.4.0 gorm.io/datatypes v1.2.6 gorm.io/driver/postgres v1.6.0 - gorm.io/driver/sqlite v1.6.0 gorm.io/gorm v1.30.5 ) @@ -31,14 +31,7 @@ require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/bytedance/gopkg v0.1.3 // indirect - github.com/bytedance/sonic v1.14.1 // indirect - github.com/bytedance/sonic/loader v0.3.0 // indirect - github.com/cloudwego/base64x v0.1.6 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/gabriel-vasile/mimetype v1.4.10 // indirect github.com/ghodss/yaml v1.0.0 // indirect - github.com/gin-contrib/sse v1.1.0 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/analysis v0.23.0 // indirect @@ -57,39 +50,24 @@ require ( github.com/go-openapi/swag/stringutils v0.25.1 // indirect github.com/go-openapi/swag/typeutils v0.25.1 // indirect github.com/go-openapi/swag/yamlutils v0.25.1 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.27.0 // indirect github.com/go-sql-driver/mysql v1.8.1 // indirect - github.com/goccy/go-json v0.10.5 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.6.0 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect - github.com/josharian/intern v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/labstack/gommon v0.4.2 // indirect - github.com/leodido/go-urn v1.4.0 // indirect - github.com/mailru/easyjson v0.9.1 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-sqlite3 v1.14.22 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect - github.com/pelletier/go-toml/v2 v2.2.4 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect - github.com/stretchr/objx v0.5.2 // indirect - github.com/swaggo/echo-swagger v1.4.1 // indirect github.com/swaggo/files/v2 v2.0.2 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.3.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect @@ -98,7 +76,6 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.10.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/arch v0.21.0 // indirect golang.org/x/mod v0.29.0 // indirect golang.org/x/net v0.46.0 // indirect golang.org/x/sync v0.17.0 // indirect @@ -108,4 +85,5 @@ require ( golang.org/x/tools v0.38.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/mysql v1.5.6 // indirect + gorm.io/driver/sqlite v1.6.0 // indirect ) diff --git a/go.sum b/go.sum index 14ee566..a955b19 100644 --- a/go.sum +++ b/go.sum @@ -4,27 +4,11 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= -github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= -github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w= -github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc= -github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= -github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= -github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= -github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= -github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= -github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= -github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= -github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= -github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ= -github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -34,87 +18,49 @@ github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC0 github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= github.com/go-openapi/errors v0.22.2 h1:rdxhzcBUazEcGccKqbY1Y7NS8FDcMyIRr0934jrYnZg= github.com/go-openapi/errors v0.22.2/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= -github.com/go-openapi/jsonpointer v0.22.0 h1:TmMhghgNef9YXxTu1tOopo+0BGEytxA+okbry0HjZsM= -github.com/go-openapi/jsonpointer v0.22.0/go.mod h1:xt3jV88UtExdIkkL7NloURjRQjbeUgcxFblMjq2iaiU= github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk= github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM= -github.com/go-openapi/jsonreference v0.21.1 h1:bSKrcl8819zKiOgxkbVNRUBIr6Wwj9KYrDbMjRs0cDA= -github.com/go-openapi/jsonreference v0.21.1/go.mod h1:PWs8rO4xxTUqKGu+lEvvCxD5k2X7QYkKAepJyCmSTT8= github.com/go-openapi/jsonreference v0.21.2 h1:Wxjda4M/BBQllegefXrY/9aq1fxBA8sI5M/lFU6tSWU= github.com/go-openapi/jsonreference v0.21.2/go.mod h1:pp3PEjIsJ9CZDGCNOyXIQxsNuroxm8FAJ/+quA0yKzQ= github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ= github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc= -github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= -github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= github.com/go-openapi/spec v0.22.0 h1:xT/EsX4frL3U09QviRIZXvkh80yibxQmtoEvyqug0Tw= github.com/go-openapi/spec v0.22.0/go.mod h1:K0FhKxkez8YNS94XzF8YKEMULbFrRw4m15i2YUht4L0= github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= -github.com/go-openapi/swag v0.24.1 h1:DPdYTZKo6AQCRqzwr/kGkxJzHhpKxZ9i/oX0zag+MF8= -github.com/go-openapi/swag v0.24.1/go.mod h1:sm8I3lCPlspsBBwUm1t5oZeWZS0s7m/A+Psg0ooRU0A= github.com/go-openapi/swag v0.25.1 h1:6uwVsx+/OuvFVPqfQmOOPsqTcm5/GkBhNwLqIR916n8= github.com/go-openapi/swag v0.25.1/go.mod h1:bzONdGlT0fkStgGPd3bhZf1MnuPkf2YAys6h+jZipOo= -github.com/go-openapi/swag/cmdutils v0.24.0 h1:KlRCffHwXFI6E5MV9n8o8zBRElpY4uK4yWyAMWETo9I= -github.com/go-openapi/swag/cmdutils v0.24.0/go.mod h1:uxib2FAeQMByyHomTlsP8h1TtPd54Msu2ZDU/H5Vuf8= github.com/go-openapi/swag/cmdutils v0.25.1 h1:nDke3nAFDArAa631aitksFGj2omusks88GF1VwdYqPY= github.com/go-openapi/swag/cmdutils v0.25.1/go.mod h1:pdae/AFo6WxLl5L0rq87eRzVPm/XRHM3MoYgRMvG4A0= -github.com/go-openapi/swag/conv v0.24.0 h1:ejB9+7yogkWly6pnruRX45D1/6J+ZxRu92YFivx54ik= -github.com/go-openapi/swag/conv v0.24.0/go.mod h1:jbn140mZd7EW2g8a8Y5bwm8/Wy1slLySQQ0ND6DPc2c= github.com/go-openapi/swag/conv v0.25.1 h1:+9o8YUg6QuqqBM5X6rYL/p1dpWeZRhoIt9x7CCP+he0= github.com/go-openapi/swag/conv v0.25.1/go.mod h1:Z1mFEGPfyIKPu0806khI3zF+/EUXde+fdeksUl2NiDs= -github.com/go-openapi/swag/fileutils v0.24.0 h1:U9pCpqp4RUytnD689Ek/N1d2N/a//XCeqoH508H5oak= -github.com/go-openapi/swag/fileutils v0.24.0/go.mod h1:3SCrCSBHyP1/N+3oErQ1gP+OX1GV2QYFSnrTbzwli90= github.com/go-openapi/swag/fileutils v0.25.1 h1:rSRXapjQequt7kqalKXdcpIegIShhTPXx7yw0kek2uU= github.com/go-openapi/swag/fileutils v0.25.1/go.mod h1:+NXtt5xNZZqmpIpjqcujqojGFek9/w55b3ecmOdtg8M= -github.com/go-openapi/swag/jsonname v0.24.0 h1:2wKS9bgRV/xB8c62Qg16w4AUiIrqqiniJFtZGi3dg5k= -github.com/go-openapi/swag/jsonname v0.24.0/go.mod h1:GXqrPzGJe611P7LG4QB9JKPtUZ7flE4DOVechNaDd7Q= github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU= github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo= -github.com/go-openapi/swag/jsonutils v0.24.0 h1:F1vE1q4pg1xtO3HTyJYRmEuJ4jmIp2iZ30bzW5XgZts= -github.com/go-openapi/swag/jsonutils v0.24.0/go.mod h1:vBowZtF5Z4DDApIoxcIVfR8v0l9oq5PpYRUuteVu6f0= github.com/go-openapi/swag/jsonutils v0.25.1 h1:AihLHaD0brrkJoMqEZOBNzTLnk81Kg9cWr+SPtxtgl8= github.com/go-openapi/swag/jsonutils v0.25.1/go.mod h1:JpEkAjxQXpiaHmRO04N1zE4qbUEg3b7Udll7AMGTNOo= -github.com/go-openapi/swag/loading v0.24.0 h1:ln/fWTwJp2Zkj5DdaX4JPiddFC5CHQpvaBKycOlceYc= -github.com/go-openapi/swag/loading v0.24.0/go.mod h1:gShCN4woKZYIxPxbfbyHgjXAhO61m88tmjy0lp/LkJk= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1 h1:DSQGcdB6G0N9c/KhtpYc71PzzGEIc/fZ1no35x4/XBY= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1/go.mod h1:kjmweouyPwRUEYMSrbAidoLMGeJ5p6zdHi9BgZiqmsg= github.com/go-openapi/swag/loading v0.25.1 h1:6OruqzjWoJyanZOim58iG2vj934TysYVptyaoXS24kw= github.com/go-openapi/swag/loading v0.25.1/go.mod h1:xoIe2EG32NOYYbqxvXgPzne989bWvSNoWoyQVWEZicc= -github.com/go-openapi/swag/mangling v0.24.0 h1:PGOQpViCOUroIeak/Uj/sjGAq9LADS3mOyjznmHy2pk= -github.com/go-openapi/swag/mangling v0.24.0/go.mod h1:Jm5Go9LHkycsz0wfoaBDkdc4CkpuSnIEf62brzyCbhc= github.com/go-openapi/swag/mangling v0.25.1 h1:XzILnLzhZPZNtmxKaz/2xIGPQsBsvmCjrJOWGNz/ync= github.com/go-openapi/swag/mangling v0.25.1/go.mod h1:CdiMQ6pnfAgyQGSOIYnZkXvqhnnwOn997uXZMAd/7mQ= -github.com/go-openapi/swag/netutils v0.24.0 h1:Bz02HRjYv8046Ycg/w80q3g9QCWeIqTvlyOjQPDjD8w= -github.com/go-openapi/swag/netutils v0.24.0/go.mod h1:WRgiHcYTnx+IqfMCtu0hy9oOaPR0HnPbmArSRN1SkZM= github.com/go-openapi/swag/netutils v0.25.1 h1:2wFLYahe40tDUHfKT1GRC4rfa5T1B4GWZ+msEFA4Fl4= github.com/go-openapi/swag/netutils v0.25.1/go.mod h1:CAkkvqnUJX8NV96tNhEQvKz8SQo2KF0f7LleiJwIeRE= -github.com/go-openapi/swag/stringutils v0.24.0 h1:i4Z/Jawf9EvXOLUbT97O0HbPUja18VdBxeadyAqS1FM= -github.com/go-openapi/swag/stringutils v0.24.0/go.mod h1:5nUXB4xA0kw2df5PRipZDslPJgJut+NjL7D25zPZ/4w= github.com/go-openapi/swag/stringutils v0.25.1 h1:Xasqgjvk30eUe8VKdmyzKtjkVjeiXx1Iz0zDfMNpPbw= github.com/go-openapi/swag/stringutils v0.25.1/go.mod h1:JLdSAq5169HaiDUbTvArA2yQxmgn4D6h4A+4HqVvAYg= -github.com/go-openapi/swag/typeutils v0.24.0 h1:d3szEGzGDf4L2y1gYOSSLeK6h46F+zibnEas2Jm/wIw= -github.com/go-openapi/swag/typeutils v0.24.0/go.mod h1:q8C3Kmk/vh2VhpCLaoR2MVWOGP8y7Jc8l82qCTd1DYI= github.com/go-openapi/swag/typeutils v0.25.1 h1:rD/9HsEQieewNt6/k+JBwkxuAHktFtH3I3ysiFZqukA= github.com/go-openapi/swag/typeutils v0.25.1/go.mod h1:9McMC/oCdS4BKwk2shEB7x17P6HmMmA6dQRtAkSnNb8= -github.com/go-openapi/swag/yamlutils v0.24.0 h1:bhw4894A7Iw6ne+639hsBNRHg9iZg/ISrOVr+sJGp4c= -github.com/go-openapi/swag/yamlutils v0.24.0/go.mod h1:DpKv5aYuaGm/sULePoeiG8uwMpZSfReo1HR3Ik0yaG8= github.com/go-openapi/swag/yamlutils v0.25.1 h1:mry5ez8joJwzvMbaTGLhw8pXUnhDK91oSJLDPF1bmGk= github.com/go-openapi/swag/yamlutils v0.25.1/go.mod h1:cm9ywbzncy3y6uPm/97ysW8+wZ09qsks+9RS8fLWKqg= github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= -github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= -github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= -github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= @@ -123,7 +69,6 @@ github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= @@ -138,12 +83,6 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= -github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -152,10 +91,6 @@ github.com/labstack/echo/v4 v4.13.4 h1:oTZZW+T3s9gAu5L8vmzihV7/lkXGZuITzTQkTEhcX github.com/labstack/echo/v4 v4.13.4/go.mod h1:g63b33BZ5vZzcIUF8AtRH40DrTlXnx4UMC8rBdndmjQ= github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= -github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= -github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8= -github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -166,19 +101,12 @@ github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek= -github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= -github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= @@ -186,40 +114,28 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/swaggo/echo-swagger v1.4.1 h1:Yf0uPaJWp1uRtDloZALyLnvdBeoEL5Kc7DtnjzO/TUk= github.com/swaggo/echo-swagger v1.4.1/go.mod h1:C8bSi+9yH2FLZsnhqMZLIZddpUxZdBYuNHbtaS1Hljc= -github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= -github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= -github.com/swaggo/files/v2 v2.0.0 h1:hmAt8Dkynw7Ssz46F6pn8ok6YmGZqHSVLZ+HQM7i0kw= -github.com/swaggo/files/v2 v2.0.0/go.mod h1:24kk2Y9NYEJ5lHuCra6iVwkMjIekMCaFq/0JQj66kyM= github.com/swaggo/files/v2 v2.0.2 h1:Bq4tgS/yxLB/3nwOMcul5oLEUKa877Ykgz3CJMVbQKU= github.com/swaggo/files/v2 v2.0.2/go.mod h1:TVqetIzZsO9OhHX1Am9sRf9LdrFZqoK49N37KON/jr0= -github.com/swaggo/gin-swagger v1.6.1 h1:Ri06G4gc9N4t4k8hekMigJ9zKTFSlqj/9paAQCQs7cY= -github.com/swaggo/gin-swagger v1.6.1/go.mod h1:LQ+hJStHakCWRiK/YNYtJOu4mR2FP+pxLnILT/qNiTw= github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA= -github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= @@ -238,63 +154,23 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/arch v0.21.0 h1:iTC9o7+wP6cPWpDWkivCvQFGAHDQ59SrSxsLPcnkArw= -golang.org/x/arch v0.21.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= -golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= -golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= -golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= -golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= -golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/core/application.go b/internal/core/application.go index 2dff55d..5270b0a 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -14,9 +14,10 @@ import ( // Application 是整个应用的核心,封装了所有组件和生命周期。 type Application struct { - Config *config.Config - Ctx context.Context - API *api.API + cfgPath string + Config *config.Config + Ctx context.Context + API *api.API Infra *Infrastructure Domain *DomainServices @@ -68,12 +69,13 @@ func NewApplication(configPath string) (*Application, error) { // 4. 组装 Application 对象 app := &Application{ - Config: cfg, - Ctx: selfCtx, - API: apiServer, - Infra: infra, - Domain: domain, - App: appServices, + cfgPath: configPath, + Config: cfg, + Ctx: selfCtx, + API: apiServer, + Infra: infra, + Domain: domain, + App: appServices, } return app, nil @@ -90,7 +92,7 @@ func (app *Application) Start() error { } // 2. 初始化应用状态 (清理、刷新任务等) - if err := app.initializeState(startCtx); err != nil { + if err := app.initializeState(startCtx, app.cfgPath); err != nil { return fmt.Errorf("初始化应用状态失败: %w", err) } diff --git a/internal/core/data_initializer.go b/internal/core/data_initializer.go index 9081022..644d411 100644 --- a/internal/core/data_initializer.go +++ b/internal/core/data_initializer.go @@ -3,8 +3,10 @@ package core import ( "context" "fmt" + "path/filepath" "git.huangwc.com/pig/pig-farm-controller/internal/domain/task" + "git.huangwc.com/pig/pig-farm-controller/internal/infra/database" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" @@ -12,27 +14,35 @@ import ( // initializeState 在应用启动时准备其初始数据状态。 // 它遵循一个严格的顺序:清理 -> 更新 -> 刷新,以确保数据的一致性和正确性。 -func (app *Application) initializeState(ctx context.Context) error { +func (app *Application) initializeState(ctx context.Context, cfgPath string) error { appCtx, logger := logs.Trace(ctx, app.Ctx, "InitializeState") - // 1. 清理所有上次运行时遗留的待执行任务和相关日志。 + // 1. 播种预设数据 + logger.Info("开始播种预设数据...") + presetDir := filepath.Join(filepath.Dir(cfgPath), "presets-data") + if err := database.SeedFromPreset(appCtx, app.Infra.storage.GetDB(appCtx), presetDir); err != nil { + return fmt.Errorf("预设数据播种失败: %w", err) + } + logger.Info("预设数据播种成功。") + + // 2. 清理所有上次运行时遗留的待执行任务和相关日志。 // 这一步必须在任何可能修改计划结构的操作之前执行,以避免外键约束冲突。 if err := app.cleanupStaleTasksAndLogs(appCtx); err != nil { return fmt.Errorf("清理过期的任务及日志失败: %w", err) } - // 2. 清理待采集任务 (非致命错误)。 + // 3. 清理待采集任务 (非致命错误)。 if err := app.initializePendingCollections(appCtx); err != nil { logger.Errorw("清理待采集任务时发生非致命错误", "error", err) } - // 3. 初始化并更新系统计划。 + // 4. 初始化并更新系统计划。 // 此时,所有旧的待执行任务已被清除,可以安全地更新计划结构。 if err := app.initializeSystemPlans(ctx); err != nil { return fmt.Errorf("初始化预定义系统计划失败: %w", err) } - // 4. 最后,根据最新的计划状态,统一刷新所有计划的触发器。 + // 5. 最后,根据最新的计划状态,统一刷新所有计划的触发器。 // 这一步确保了新创建或更新的系统计划能够被正确地调度。 logger.Info("正在刷新所有计划的触发器...") if err := app.Domain.planService.RefreshPlanTriggers(appCtx); err != nil { diff --git a/internal/infra/database/seeder.go b/internal/infra/database/seeder.go new file mode 100644 index 0000000..8025bc9 --- /dev/null +++ b/internal/infra/database/seeder.go @@ -0,0 +1,203 @@ +package database + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "os" + "path/filepath" + "strings" + + "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" + "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" + + "github.com/tidwall/gjson" + "gorm.io/gorm" +) + +// SeederFunc 定义了处理一种特定类型预设数据文件的函数签名。 +type SeederFunc func(tx *gorm.DB, jsonData []byte) error + +// SeedFromPreset 是一个通用的数据播种函数。 +// 它会读取指定目录下的所有 .json 文件,并根据文件内容中的 "type" 字段进行分发。 +// 同时,它会校验所有必需的预设类型是否都已成功加载。 +func SeedFromPreset(ctx context.Context, db *gorm.DB, presetDir string) error { + logger := logs.TraceLogger(ctx, ctx, "SeedFromPreset") + + // 定义必须存在的预设数据类型 + requiredTypes := []string{"nutrient"} + processedTypes := make(map[string]bool) + + // 用于检测重复的 type + typeToFileMap := make(map[string]string) + + files, err := os.ReadDir(presetDir) + if err != nil { + return fmt.Errorf("读取预设数据目录 '%s' 失败: %w", presetDir, err) + } + + return db.Transaction(func(tx *gorm.DB) error { + for _, file := range files { + if filepath.Ext(file.Name()) != ".json" { + continue + } + + filePath := filepath.Join(presetDir, file.Name()) + jsonData, err := os.ReadFile(filePath) + if err != nil { + return fmt.Errorf("读取文件 '%s' 失败: %w", filePath, err) + } + + dataType := gjson.GetBytes(jsonData, "type") + if !dataType.Exists() { + logger.Warnf("警告: 文件 '%s' 中缺少 'type' 字段,已跳过\n", filePath) + continue + } + dataTypeStr := dataType.String() + + if existingFile, found := typeToFileMap[dataTypeStr]; found { + return fmt.Errorf("预设数据校验失败: type '%s' 在文件 '%s' 和 '%s' 中重复定义", dataTypeStr, existingFile, filePath) + } + typeToFileMap[dataTypeStr] = filePath + + var seederFunc SeederFunc + switch dataTypeStr { + case "nutrient": + seederFunc = seedNutrients + default: + logger.Warnf("警告: 文件 '%s' 中存在未知的 type: '%s',已跳过\n", filePath, dataTypeStr) + continue + } + + if err := seederFunc(tx, jsonData); err != nil { + return fmt.Errorf("处理文件 '%s' (type: %s) 时发生错误: %w", filePath, dataTypeStr, err) + } + processedTypes[dataTypeStr] = true + } + + // 校验所有必需的类型是否都已处理 + var missingTypes []string + for _, reqType := range requiredTypes { + if !processedTypes[reqType] { + missingTypes = append(missingTypes, reqType) + } + } + if len(missingTypes) > 0 { + return fmt.Errorf("预设数据校验失败: 缺少必需的预设文件类型: [%s]", strings.Join(missingTypes, ", ")) + } + + return nil // 提交事务 + }) +} + +// seedNutrients 先严格校验JSON源文件,然后以“有则跳过”的模式播种数据。 +func seedNutrients(tx *gorm.DB, jsonData []byte) error { + // 1. 严格校验JSON文件,检查内部重复键 + parsedData, err := validateAndParseNutrientJSON(jsonData) + if err != nil { + return fmt.Errorf("JSON源文件校验失败: %w", err) + } + + // 2. 将通过校验的、干净的数据写入数据库 + for rawMaterialName, nutrients := range parsedData { + var rawMaterial models.RawMaterial + if err := tx.Where(models.RawMaterial{Name: rawMaterialName}).FirstOrCreate(&rawMaterial).Error; err != nil { + return fmt.Errorf("预设原料 '%s' 失败: %w", rawMaterialName, err) + } + + for nutrientName, value := range nutrients { + var nutrient models.Nutrient + if err := tx.Where(models.Nutrient{Name: nutrientName}).FirstOrCreate(&nutrient).Error; err != nil { + return fmt.Errorf("预设营养素 '%s' 失败: %w", nutrientName, err) + } + + linkData := models.RawMaterialNutrient{ + RawMaterialID: rawMaterial.ID, + NutrientID: nutrient.ID, + } + // 使用 FirstOrCreate 确保关联的唯一性 + if err := tx.Where(linkData).FirstOrCreate(&linkData, models.RawMaterialNutrient{ + RawMaterialID: linkData.RawMaterialID, + NutrientID: linkData.NutrientID, + Value: value, + }).Error; err != nil { + return fmt.Errorf("为原料 '%s' 和营养素 '%s' 创建关联失败: %w", rawMaterialName, nutrientName, err) + } + } + } + return nil +} + +// validateAndParseNutrientJSON 使用 json.Decoder 手动解析,以捕获重复的键。 +func validateAndParseNutrientJSON(jsonData []byte) (map[string]map[string]float32, error) { + dataNode := gjson.GetBytes(jsonData, "data") + if !dataNode.Exists() { + return nil, errors.New("JSON文件中缺少 'data' 字段") + } + if !dataNode.IsObject() { + return nil, errors.New("'data' 字段必须是一个JSON对象") + } + + decoder := json.NewDecoder(bytes.NewReader([]byte(dataNode.Raw))) + decoder.UseNumber() + // 读取 "{" + if t, err := decoder.Token(); err != nil || t != json.Delim('{') { + return nil, errors.New("'data' 字段解析起始符失败") + } + + result := make(map[string]map[string]float32) + seenRawMaterials := make(map[string]bool) + + for decoder.More() { + // 1. 解析原料名称 + t, err := decoder.Token() + if err != nil { + return nil, fmt.Errorf("解析原料名称失败: %w", err) + } + rawMaterialName := t.(string) + if seenRawMaterials[rawMaterialName] { + return nil, fmt.Errorf("原料名称 '%s' 重复", rawMaterialName) + } + seenRawMaterials[rawMaterialName] = true + + // 2. 解析该原料的营养成分对象 + if t, err := decoder.Token(); err != nil || t != json.Delim('{') { + return nil, fmt.Errorf("期望原料 '%s' 的值是一个JSON对象", rawMaterialName) + } + + nutrients := make(map[string]float32) + seenNutrients := make(map[string]bool) + for decoder.More() { + // 解析营养素名称 + t, err := decoder.Token() + if err != nil { + return nil, fmt.Errorf("在原料 '%s' 中解析营养素名称失败: %w", rawMaterialName, err) + } + nutrientName := t.(string) + if seenNutrients[nutrientName] { + return nil, fmt.Errorf("在原料 '%s' 中, 营养素名称 '%s' 重复", rawMaterialName, nutrientName) + } + seenNutrients[nutrientName] = true + + // 解析营养素含量 + t, err = decoder.Token() + if err != nil { + return nil, fmt.Errorf("在原料 '%s' 中解析营养素 '%s' 的含量值失败: %w", rawMaterialName, nutrientName, err) + } + if value, ok := t.(json.Number); ok { + f64, _ := value.Float64() + nutrients[nutrientName] = float32(f64) + } else { + return nil, fmt.Errorf("期望营养素 '%s' 的含量值是数字, 但实际得到的类型是 %T, 值为 '%v'", nutrientName, t, t) + } + } + // 读取营养成分对象的 "}" + if t, err := decoder.Token(); err != nil || t != json.Delim('}') { + return nil, fmt.Errorf("解析原料 '%s' 的值结束符 '}' 失败", rawMaterialName) + } + result[rawMaterialName] = nutrients + } + return result, nil +} diff --git a/internal/infra/models/raw_material.go b/internal/infra/models/raw_material.go index d138231..b992cb4 100644 --- a/internal/infra/models/raw_material.go +++ b/internal/infra/models/raw_material.go @@ -18,14 +18,6 @@ const ( StockLogSourceFermentEnd StockLogSourceType = "发酵入库" // 发酵料产出,作为新原料计入库存 ) -// NutrientType 定义了营养素的分类,用于配方优化和成本控制。 -type NutrientType string - -const ( - PositiveNutrient NutrientType = "正面营养" // 希望在配方中最大化的营养素,如蛋白质、能量 - NegativeNutrient NutrientType = "负面营养" // 需要控制上限的营养素,如粗纤维、霉菌毒素 -) - // RawMaterial 代表一种原料的静态定义,是系统中的原料字典。 type RawMaterial struct { Model @@ -45,9 +37,8 @@ func (RawMaterial) TableName() string { // 约定:宏量营养素(粗蛋白等)单位为百分比(%),微量元素(氨基酸等)单位为毫克/千克(mg/kg)。 type Nutrient struct { Model - Name string `gorm:"size:100;unique;not null;comment:营养素名称"` - Type NutrientType `gorm:"size:50;not null;comment:营养素类型 (正面营养/负面营养)"` - Description string `gorm:"size:255;comment:描述"` + Name string `gorm:"size:100;unique;not null;comment:营养素名称"` + Description string `gorm:"size:255;comment:描述"` } func (Nutrient) TableName() string {