支持预设价格
This commit is contained in:
@@ -12,7 +12,7 @@ server:
|
|||||||
|
|
||||||
# 日志配置
|
# 日志配置
|
||||||
log:
|
log:
|
||||||
level: "info" # 日志级别: "debug", "info", "warn", "error", "dpanic", "panic", "fatal"
|
level: "debug" # 日志级别: "debug", "info", "warn", "error", "dpanic", "panic", "fatal"
|
||||||
format: "console" # 日志格式: "console" 或 "json"
|
format: "console" # 日志格式: "console" 或 "json"
|
||||||
enable_file: true # 是否启用文件日志
|
enable_file: true # 是否启用文件日志
|
||||||
file_path: "./app_logs/app.log" # 日志文件路径
|
file_path: "./app_logs/app.log" # 日志文件路径
|
||||||
|
|||||||
@@ -1739,87 +1739,330 @@
|
|||||||
},
|
},
|
||||||
"descriptions": {
|
"descriptions": {
|
||||||
"raw_materials": {
|
"raw_materials": {
|
||||||
"DL-蛋氨酸98": "饲料级合成蛋氨酸,几乎100%可利用,是猪限制性氨基酸补充的首选来源,可显著提高生长速度和饲料转化率。",
|
"DL-蛋氨酸98": {
|
||||||
"L-色氨酸98": "饲料级合成色氨酸,猪的第四限制性氨基酸,缺乏时严重影响采食量和生长,补充可提升猪只食欲和免疫力。",
|
"descriptions": "饲料级合成蛋氨酸,几乎100%可利用,是猪限制性氨基酸补充的首选来源,可显著提高生长速度和饲料转化率。",
|
||||||
"L-苏氨酸98": "饲料级合成苏氨酸,猪的第三限制性氨基酸,主要影响蛋白沉积和免疫器官发育,仔猪阶段尤为重要。",
|
"unit_price": 21.50
|
||||||
"L-赖氨酸HCl 98": "饲料级赖氨酸盐酸盐,猪的第一限制性氨基酸,低蛋白日粮配方核心,降低氮排放的同时维持生长性能。",
|
},
|
||||||
"乳清粉": "仔猪最优质的乳源蛋白和乳糖来源,提高采食量、促进肠道发育、缓解断奶应激,是教槽料和保育料黄金原料。",
|
"L-色氨酸98": {
|
||||||
"兔肉粉": "高蛋白高消化率动物蛋白源,氨基酸平衡好,适口性佳,适合高档仔猪料和母猪料使用。",
|
"descriptions": "饲料级合成色氨酸,猪的第四限制性氨基酸,缺乏时严重影响采食量和生长,补充可提升猪只食欲和免疫力。",
|
||||||
"全株玉米青贮": "粗饲料来源,提供有效纤维,调节成年母猪肠道健康,降低便秘,价格低廉。",
|
"unit_price": 68.00
|
||||||
"双低菜籽粕": "双低菜粕,硫甙和异硫氰酸酯含量低,可部分替代豆粕使用,但仍需注意赖氨酸利用率和甲状腺影响。",
|
},
|
||||||
"向日葵籽": "高油分能量原料,富含亚油酸,但纤维高,猪的利用率一般,多用于母猪料。",
|
"L-苏氨酸98": {
|
||||||
"啤酒糟干": "高蛋白高纤维副产品,适口性好,可用于生长肥育猪和母猪料,注意霉菌毒素风险。",
|
"descriptions": "饲料级合成苏氨酸,猪的第三限制性氨基酸,主要影响蛋白沉积和免疫器官发育,仔猪阶段尤为重要。",
|
||||||
"啤酒花渣": "啤酒副产物,湿态使用时适口性好,可降低母猪便秘,但干物质低、易发霉。",
|
"unit_price": 10.80
|
||||||
"国产鱼粉60": "中等品质鱼粉,蛋白高但新鲜度一般,挥发性盐基氮和组胺需关注,仔猪料谨慎使用。",
|
},
|
||||||
"土豆蛋白": "高消化率植物浓缩蛋白,氨基酸平衡好,是优质替代血浆和鱼粉的原料之一。",
|
"L-赖氨酸HCl 98": {
|
||||||
"大豆油": "高能量油脂,猪利用率极高,用于提高日粮能量浓度,改善皮毛光亮度。",
|
"descriptions": "饲料级赖氨酸盐酸盐,猪的第一限制性氨基酸,低蛋白日粮配方核心,降低氮排放的同时维持生长性能。",
|
||||||
"大豆粕44": "普通豆粕,蛋白43.8%左右,抗营养因子较高,需关注脲酶和KOH溶解度。",
|
"unit_price": 11.20
|
||||||
"大豆粕46": "优质豆粕,蛋白更高,抗营养因子更低,是猪料最常用蛋白原料。",
|
},
|
||||||
"大豆粕48": "高蛋白豆粕,抗营养因子最低,低蛋白日粮配方的理想蛋白源。",
|
"乳清粉": {
|
||||||
"大麦": "能量稍低于玉米,纤维较高,可部分替代玉米,注意DON毒素风险。",
|
"descriptions": "仔猪最优质的乳源蛋白和乳糖来源,提高采食量、促进肠道发育、缓解断奶应激,是教槽料和保育料黄金原料。",
|
||||||
"小苏打": "缓冲剂和钠源,缓解热应激、改善母猪泌乳期酸中毒。",
|
"unit_price": 6.50
|
||||||
"小麦": "能量与玉米接近,但黏性大,易导致肠道问题,仔猪料慎用。",
|
},
|
||||||
"小麦次粉": "小麦加工副产品,蛋白和磷较高,但DON和ZEN风险高,限量使用。",
|
"兔肉粉": {
|
||||||
"小麦麸": "高纤维原料,用于母猪料促进肠道蠕动,降低便秘。",
|
"descriptions": "高蛋白高消化率动物蛋白源,氨基酸平衡好,适口性佳,适合高档仔猪料和母猪料使用。",
|
||||||
"木薯干": "高能量淀粉源,几乎不含蛋白,价格低廉,但需搭配优质蛋白。",
|
"unit_price": 11.50
|
||||||
"杂交构树叶粉": "新型蛋白饲料资源,蛋白中等,富含黄酮,但单宁和草酸高,需限量并配合脱毒处理。",
|
},
|
||||||
"构树叶粉(老叶高纤维)": "老叶构树粉,纤维更高,适合母猪粗饲料使用。",
|
"全株玉米青贮": {
|
||||||
"柠檬酸渣": "湿态副产品,适口性好,可用于母猪料降低成本。",
|
"descriptions": "粗饲料来源,提供有效纤维,调节成年母猪肠道健康,降低便秘,价格低廉。",
|
||||||
"棉籽粕": "蛋白较高,但游离棉酚严重影响公猪生育力和生长,需严格限量或脱毒。",
|
"unit_price": 0.45
|
||||||
"棕榈油": "饱和脂肪酸高,能量高,但熔点高,冬季易凝固,仔猪利用率稍差。",
|
},
|
||||||
"棕榈粕": "高纤维高脂肪副产品,能量一般,多用于母猪料。",
|
"双低菜籽粕": {
|
||||||
"椰子粕": "蛋白和能量中等,适口性好,可部分替代豆粕。",
|
"descriptions": "双低菜粕,硫甙和异硫氰酸酯含量低,可部分替代豆粕使用,但仍需注意赖氨酸利用率和甲状腺影响。",
|
||||||
"燕麦": "能量和脂肪较高,适口性佳,但价格贵,一般少用。",
|
"unit_price": 2.40
|
||||||
"燕麦草": "粗饲料,母猪用以增加饱腹感和肠道健康。",
|
},
|
||||||
"猪肺粉": "优质动物蛋白,消化率高,适口性极佳,适合高档仔猪料。",
|
"向日葵籽": {
|
||||||
"玉米": "猪最主要的能量原料,淀粉消化率高,毒素风险需关注。",
|
"descriptions": "高油分能量原料,富含亚油酸,但纤维高,猪的利用率一般,多用于母猪料。",
|
||||||
"玉米DDGS": "高蛋白高脂肪玉米副产品,磷利用率高,适合生长肥育猪和母猪。",
|
"unit_price": 5.80
|
||||||
"玉米油": "优质植物油,富含不饱和脂肪酸,能量最高油脂之一。",
|
},
|
||||||
"玉米胚芽粕": "蛋白和脂肪较高,磷利用率好,可部分替代豆粕和油。",
|
"啤酒糟干": {
|
||||||
"玉米蛋白粉60": "高蛋白高蛋氨酸,色素来源,用于改善猪皮红毛亮。",
|
"descriptions": "高蛋白高纤维副产品,适口性好,可用于生长肥育猪和母猪料,注意霉菌毒素风险。",
|
||||||
"玉米青贮": "粗饲料,母猪用以调节肠道,降低饲料成本。",
|
"unit_price": 1.90
|
||||||
"瓜子粕": "葵花籽粕的别称,蛋白较高,纤维也高。",
|
},
|
||||||
"甜菜粕": "高可溶性纤维,母猪极佳的防便秘原料。",
|
"啤酒花渣": {
|
||||||
"石粉": "最常用的钙源,价格低廉,注意粒度影响吸收率。",
|
"descriptions": "啤酒副产物,湿态使用时适口性好,可降低母猪便秘,但干物质低、易发霉。",
|
||||||
"碎米": "能量接近玉米,蛋白稍低,适口性好。",
|
"unit_price": 0.60
|
||||||
"磷酸氢钙": "猪最常用磷钙来源,有效磷高。",
|
},
|
||||||
"稻草粉": "最廉价粗纤维来源,母猪限量使用防便秘。",
|
"国产鱼粉60": {
|
||||||
"稻谷": "带壳稻子,能量低于玉米,纤维高。",
|
"descriptions": "中等品质鱼粉,蛋白高但新鲜度一般,挥发性盐基氮和组胺需关注,仔猪料谨慎使用。",
|
||||||
"稻谷糠": "米糠的一种,高脂肪高磷,需注意酸败。",
|
"unit_price": 9.50
|
||||||
"米糠": "高能量高磷副产品,注意黄曲霉毒素和酸败。",
|
},
|
||||||
"米糠粕": "脱脂米糠,蛋白较高,能量降低。",
|
"土豆蛋白": {
|
||||||
"红薯干": "高淀粉低蛋白能量原料,类似木薯。",
|
"descriptions": "高消化率植物浓缩蛋白,氨基酸平衡好,是优质替代血浆和鱼粉的原料之一。",
|
||||||
"肉粉": "普通肉粉,蛋白和灰分波动大,质量不稳定。",
|
"unit_price": 8.50
|
||||||
"肉骨粉50": "含骨较高,钙磷比例好,但蛋白较低。",
|
},
|
||||||
"脱脂奶粉": "优质乳蛋白源,仔猪料黄金原料。",
|
"大豆油": {
|
||||||
"膨化全脂大豆": "经过高温膨化的全脂大豆,抗营养因子破坏彻底,仔猪可用。",
|
"descriptions": "高能量油脂,猪利用率极高,用于提高日粮能量浓度,改善皮毛光亮度。",
|
||||||
"芝麻粕": "蛋白高,蛋氨酸丰富,但草酸高,需限量。",
|
"unit_price": 8.20
|
||||||
"花生秧粉": "粗饲料,母猪用。",
|
},
|
||||||
"花生粕": "蛋白高,但黄曲霉毒素风险极高,猪场慎用。",
|
"大豆粕44": {
|
||||||
"苜蓿草块": "优质粗饲料,富含维生素和未知生长因子,母猪和仔猪都适用。",
|
"descriptions": "普通豆粕,蛋白43.8%左右,抗营养因子较高,需关注脲酶和KOH溶解度。",
|
||||||
"苜蓿草粉": "蛋白较高,但皂苷和香豆素可能影响采食。",
|
"unit_price": 3.05
|
||||||
"苹果渣": "湿态副产品,适口性好,母猪喜欢。",
|
},
|
||||||
"菜籽粕": "普通菜粕,硫甙高,对甲状腺影响大,猪限量使用。",
|
"大豆粕46": {
|
||||||
"葡萄糖": "快速能量源,教槽料常用,缓解应激。",
|
"descriptions": "优质豆粕,蛋白更高,抗营养因子更低,是猪料最常用蛋白原料。",
|
||||||
"葵花籽粕": "高纤维蛋白源,赖氨酸低,需补充赖氨酸。",
|
"unit_price": 3.25
|
||||||
"蔗糖": "高能量碳水,教槽料诱食用。",
|
},
|
||||||
"虾粉": "优质动物蛋白,含虾青素,改善体色。",
|
"大豆粕48": {
|
||||||
"蚕蛹粉": "高蛋白高脂肪,氨基酸平衡好,但脂肪易氧化。",
|
"descriptions": "高蛋白豆粕,抗营养因子最低,低蛋白日粮配方的理想蛋白源。",
|
||||||
"蚕豆": "蛋白较高,淀粉消化率好,但含抗营养因子。",
|
"unit_price": 3.60
|
||||||
"蟹粉": "高蛋白高灰分动物蛋白,钙磷丰富。",
|
},
|
||||||
"血浆蛋白粉": "仔猪断奶料黄金功能性蛋白,IgG高,促进肠道发育和免疫。",
|
"大麦": {
|
||||||
"血粉": "赖氨酸极高,但适口性差,需喷涂使用。",
|
"descriptions": "能量稍低于玉米,纤维较高,可部分替代玉米,注意DON毒素风险。",
|
||||||
"豆磷脂": "高能量乳化剂,促进脂肪消化,改善皮毛。",
|
"unit_price": 2.10
|
||||||
"豌豆": "蛋白中等,淀粉消化好,可部分替代玉米和豆粕。",
|
},
|
||||||
"豌豆蛋白": "豌豆浓缩蛋白,蛋白高,抗营养因子低。",
|
"小苏打": {
|
||||||
"进口鱼粉65": "高品质鱼粉,新鲜度好,仔猪和母猪料优质蛋白源。",
|
"descriptions": "缓冲剂和钠源,缓解热应激、改善母猪泌乳期酸中毒。",
|
||||||
"食盐": "提供钠和氯,调节电解质平衡。",
|
"unit_price": 1.60
|
||||||
"饲料酵母粉": "富含核苷酸和小肽,促进肠道健康和免疫。",
|
},
|
||||||
"高粱": "能量接近玉米,但单宁高影响消化率,需选低单宁品种。",
|
"小麦": {
|
||||||
"鱼油": "富含DHA和EPA,促进脑发育和抗炎,母猪和仔猪推荐。",
|
"descriptions": "能量与玉米接近,但黏性大,易导致肠道问题,仔猪料慎用。",
|
||||||
"鸡肉粉": "优质陆基动物蛋白,消化率高,适口性好。",
|
"unit_price": 2.55
|
||||||
"鸭肉粉": "与鸡肉粉类似,脂肪稍高。",
|
},
|
||||||
"鹅肉粉": "蛋白和脂肪中等,质量稳定。"
|
"小麦次粉": {
|
||||||
|
"descriptions": "小麦加工副产品,蛋白和磷较高,但DON和ZEN风险高,限量使用。",
|
||||||
|
"unit_price": 2.20
|
||||||
|
},
|
||||||
|
"小麦麸": {
|
||||||
|
"descriptions": "高纤维原料,用于母猪料促进肠道蠕动,降低便秘。",
|
||||||
|
"unit_price": 1.75
|
||||||
|
},
|
||||||
|
"木薯干": {
|
||||||
|
"descriptions": "高能量淀粉源,几乎不含蛋白,价格低廉,但需搭配优质蛋白。",
|
||||||
|
"unit_price": 2.05
|
||||||
|
},
|
||||||
|
"杂交构树叶粉": {
|
||||||
|
"descriptions": "新型蛋白饲料资源,蛋白中等,富含黄酮,但单宁和草酸高,需限量并配合脱毒处理。",
|
||||||
|
"unit_price": 2.20
|
||||||
|
},
|
||||||
|
"构树叶粉(老叶高纤维)": {
|
||||||
|
"descriptions": "老叶构树粉,纤维更高,适合母猪粗饲料使用。",
|
||||||
|
"unit_price": 1.50
|
||||||
|
},
|
||||||
|
"柠檬酸渣": {
|
||||||
|
"descriptions": "湿态副产品,适口性好,可用于母猪料降低成本。",
|
||||||
|
"unit_price": 0.50
|
||||||
|
},
|
||||||
|
"棉籽粕": {
|
||||||
|
"descriptions": "蛋白较高,但游离棉酚严重影响公猪生育力和生长,需严格限量或脱毒。",
|
||||||
|
"unit_price": 2.80
|
||||||
|
},
|
||||||
|
"棕榈油": {
|
||||||
|
"descriptions": "饱和脂肪酸高,能量高,但熔点高,冬季易凝固,仔猪利用率稍差。",
|
||||||
|
"unit_price": 8.50
|
||||||
|
},
|
||||||
|
"棕榈粕": {
|
||||||
|
"descriptions": "高纤维高脂肪副产品,能量一般,多用于母猪料。",
|
||||||
|
"unit_price": 1.60
|
||||||
|
},
|
||||||
|
"椰子粕": {
|
||||||
|
"descriptions": "蛋白和能量中等,适口性好,可部分替代豆粕。",
|
||||||
|
"unit_price": 2.30
|
||||||
|
},
|
||||||
|
"燕麦": {
|
||||||
|
"descriptions": "能量和脂肪较高,适口性佳,但价格贵,一般少用。",
|
||||||
|
"unit_price": 3.20
|
||||||
|
},
|
||||||
|
"燕麦草": {
|
||||||
|
"descriptions": "粗饲料,母猪用以增加饱腹感和肠道健康。",
|
||||||
|
"unit_price": 2.60
|
||||||
|
},
|
||||||
|
"猪肺粉": {
|
||||||
|
"descriptions": "优质动物蛋白,消化率高,适口性极佳,适合高档仔猪料。",
|
||||||
|
"unit_price": 9.00
|
||||||
|
},
|
||||||
|
"玉米": {
|
||||||
|
"descriptions": "猪最主要的能量原料,淀粉消化率高,毒素风险需关注。",
|
||||||
|
"unit_price": 2.30
|
||||||
|
},
|
||||||
|
"玉米DDGS": {
|
||||||
|
"descriptions": "高蛋白高脂肪玉米副产品,磷利用率高,适合生长肥育猪和母猪。",
|
||||||
|
"unit_price": 2.15
|
||||||
|
},
|
||||||
|
"玉米油": {
|
||||||
|
"descriptions": "优质植物油,富含不饱和脂肪酸,能量最高油脂之一。",
|
||||||
|
"unit_price": 9.50
|
||||||
|
},
|
||||||
|
"玉米胚芽粕": {
|
||||||
|
"descriptions": "蛋白和脂肪较高,磷利用率好,可部分替代豆粕和油。",
|
||||||
|
"unit_price": 2.05
|
||||||
|
},
|
||||||
|
"玉米蛋白粉60": {
|
||||||
|
"descriptions": "高蛋白高蛋氨酸,色素来源,用于改善猪皮红毛亮。",
|
||||||
|
"unit_price": 4.80
|
||||||
|
},
|
||||||
|
"玉米青贮": {
|
||||||
|
"descriptions": "粗饲料,母猪用以调节肠道,降低饲料成本。",
|
||||||
|
"unit_price": 0.40
|
||||||
|
},
|
||||||
|
"瓜子粕": {
|
||||||
|
"descriptions": "葵花籽粕的别称,蛋白较高,纤维也高。",
|
||||||
|
"unit_price": 2.10
|
||||||
|
},
|
||||||
|
"甜菜粕": {
|
||||||
|
"descriptions": "高可溶性纤维,母猪极佳的防便秘原料。",
|
||||||
|
"unit_price": 1.95
|
||||||
|
},
|
||||||
|
"石粉": {
|
||||||
|
"descriptions": "最常用的钙源,价格低廉,注意粒度影响吸收率。",
|
||||||
|
"unit_price": 0.18
|
||||||
|
},
|
||||||
|
"碎米": {
|
||||||
|
"descriptions": "能量接近玉米,蛋白稍低,适口性好。",
|
||||||
|
"unit_price": 2.80
|
||||||
|
},
|
||||||
|
"磷酸氢钙": {
|
||||||
|
"descriptions": "猪最常用磷钙来源,有效磷高。",
|
||||||
|
"unit_price": 3.20
|
||||||
|
},
|
||||||
|
"稻草粉": {
|
||||||
|
"descriptions": "最廉价粗纤维来源,母猪限量使用防便秘。",
|
||||||
|
"unit_price": 0.60
|
||||||
|
},
|
||||||
|
"稻谷": {
|
||||||
|
"descriptions": "带壳稻子,能量低于玉米,纤维高。",
|
||||||
|
"unit_price": 1.90
|
||||||
|
},
|
||||||
|
"稻谷糠": {
|
||||||
|
"descriptions": "米糠的一种,高脂肪高磷,需注意酸败。",
|
||||||
|
"unit_price": 1.60
|
||||||
|
},
|
||||||
|
"米糠": {
|
||||||
|
"descriptions": "高能量高磷副产品,注意黄曲霉毒素和酸败。",
|
||||||
|
"unit_price": 1.85
|
||||||
|
},
|
||||||
|
"米糠粕": {
|
||||||
|
"descriptions": "脱脂米糠,蛋白较高,能量降低。",
|
||||||
|
"unit_price": 1.95
|
||||||
|
},
|
||||||
|
"红薯干": {
|
||||||
|
"descriptions": "高淀粉低蛋白能量原料,类似木薯。",
|
||||||
|
"unit_price": 2.20
|
||||||
|
},
|
||||||
|
"肉粉": {
|
||||||
|
"descriptions": "普通肉粉,蛋白和灰分波动大,质量不稳定。",
|
||||||
|
"unit_price": 4.50
|
||||||
|
},
|
||||||
|
"肉骨粉50": {
|
||||||
|
"descriptions": "含骨较高,钙磷比例好,但蛋白较低。",
|
||||||
|
"unit_price": 4.20
|
||||||
|
},
|
||||||
|
"脱脂奶粉": {
|
||||||
|
"descriptions": "优质乳蛋白源,仔猪料黄金原料。",
|
||||||
|
"unit_price": 22.00
|
||||||
|
},
|
||||||
|
"膨化全脂大豆": {
|
||||||
|
"descriptions": "经过高温膨化的全脂大豆,抗营养因子破坏彻底,仔猪可用。",
|
||||||
|
"unit_price": 4.10
|
||||||
|
},
|
||||||
|
"芝麻粕": {
|
||||||
|
"descriptions": "蛋白高,蛋氨酸丰富,但草酸高,需限量。",
|
||||||
|
"unit_price": 2.90
|
||||||
|
},
|
||||||
|
"花生秧粉": {
|
||||||
|
"descriptions": "粗饲料,母猪用。",
|
||||||
|
"unit_price": 0.85
|
||||||
|
},
|
||||||
|
"花生粕": {
|
||||||
|
"descriptions": "蛋白高,但黄曲霉毒素风险极高,猪场慎用。",
|
||||||
|
"unit_price": 3.70
|
||||||
|
},
|
||||||
|
"苜蓿草块": {
|
||||||
|
"descriptions": "优质粗饲料,富含维生素和未知生长因子,母猪和仔猪都适用。",
|
||||||
|
"unit_price": 2.40
|
||||||
|
},
|
||||||
|
"苜蓿草粉": {
|
||||||
|
"descriptions": "蛋白较高,但皂苷和香豆素可能影响采食。",
|
||||||
|
"unit_price": 2.50
|
||||||
|
},
|
||||||
|
"苹果渣": {
|
||||||
|
"descriptions": "湿态副产品,适口性好,母猪喜欢。",
|
||||||
|
"unit_price": 0.55
|
||||||
|
},
|
||||||
|
"菜籽粕": {
|
||||||
|
"descriptions": "普通菜粕,硫甙高,对甲状腺影响大,猪限量使用。",
|
||||||
|
"unit_price": 2.30
|
||||||
|
},
|
||||||
|
"葡萄糖": {
|
||||||
|
"descriptions": "快速能量源,教槽料常用,缓解应激。",
|
||||||
|
"unit_price": 3.80
|
||||||
|
},
|
||||||
|
"葵花籽粕": {
|
||||||
|
"descriptions": "高纤维蛋白源,赖氨酸低,需补充赖氨酸。",
|
||||||
|
"unit_price": 2.10
|
||||||
|
},
|
||||||
|
"蔗糖": {
|
||||||
|
"descriptions": "高能量碳水,教槽料诱食用。",
|
||||||
|
"unit_price": 6.50
|
||||||
|
},
|
||||||
|
"虾粉": {
|
||||||
|
"descriptions": "优质动物蛋白,含虾青素,改善体色。",
|
||||||
|
"unit_price": 6.00
|
||||||
|
},
|
||||||
|
"蚕蛹粉": {
|
||||||
|
"descriptions": "高蛋白高脂肪,氨基酸平衡好,但脂肪易氧化。",
|
||||||
|
"unit_price": 8.00
|
||||||
|
},
|
||||||
|
"蚕豆": {
|
||||||
|
"descriptions": "蛋白较高,淀粉消化率好,但含抗营养因子。",
|
||||||
|
"unit_price": 3.40
|
||||||
|
},
|
||||||
|
"蟹粉": {
|
||||||
|
"descriptions": "高蛋白高灰分动物蛋白,钙磷丰富。",
|
||||||
|
"unit_price": 4.50
|
||||||
|
},
|
||||||
|
"血浆蛋白粉": {
|
||||||
|
"descriptions": "仔猪断奶料黄金功能性蛋白,IgG高,促进肠道发育和免疫。",
|
||||||
|
"unit_price": 45.00
|
||||||
|
},
|
||||||
|
"血粉": {
|
||||||
|
"descriptions": "赖氨酸极高,但适口性差,需喷涂使用。",
|
||||||
|
"unit_price": 6.50
|
||||||
|
},
|
||||||
|
"豆磷脂": {
|
||||||
|
"descriptions": "高能量乳化剂,促进脂肪消化,改善皮毛。",
|
||||||
|
"unit_price": 6.80
|
||||||
|
},
|
||||||
|
"豌豆": {
|
||||||
|
"descriptions": "蛋白中等,淀粉消化好,可部分替代玉米和豆粕。",
|
||||||
|
"unit_price": 3.50
|
||||||
|
},
|
||||||
|
"豌豆蛋白": {
|
||||||
|
"descriptions": "豌豆浓缩蛋白,蛋白高,抗营养因子低。",
|
||||||
|
"unit_price": 9.50
|
||||||
|
},
|
||||||
|
"进口鱼粉65": {
|
||||||
|
"descriptions": "高品质鱼粉,新鲜度好,仔猪和母猪料优质蛋白源。",
|
||||||
|
"unit_price": 12.80
|
||||||
|
},
|
||||||
|
"食盐": {
|
||||||
|
"descriptions": "提供钠和氯,调节电解质平衡。",
|
||||||
|
"unit_price": 0.50
|
||||||
|
},
|
||||||
|
"饲料酵母粉": {
|
||||||
|
"descriptions": "富含核苷酸和小肽,促进肠道健康和免疫。",
|
||||||
|
"unit_price": 6.50
|
||||||
|
},
|
||||||
|
"高粱": {
|
||||||
|
"descriptions": "能量接近玉米,但单宁高影响消化率,需选低单宁品种。",
|
||||||
|
"unit_price": 2.20
|
||||||
|
},
|
||||||
|
"鱼油": {
|
||||||
|
"descriptions": "富含DHA和EPA,促进脑发育和抗炎,母猪和仔猪推荐。",
|
||||||
|
"unit_price": 18.00
|
||||||
|
},
|
||||||
|
"鸡肉粉": {
|
||||||
|
"descriptions": "优质陆基动物蛋白,消化率高,适口性好。",
|
||||||
|
"unit_price": 7.50
|
||||||
|
},
|
||||||
|
"鸭肉粉": {
|
||||||
|
"descriptions": "与鸡肉粉类似,脂肪稍高。",
|
||||||
|
"unit_price": 7.20
|
||||||
|
},
|
||||||
|
"鹅肉粉": {
|
||||||
|
"descriptions": "蛋白和脂肪中等,质量稳定。",
|
||||||
|
"unit_price": 7.00
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"nutrients": {
|
"nutrients": {
|
||||||
"可消化蛋氨酸 (SID %)": "猪第二限制性氨基酸,直接影响瘦肉率和生长速度。",
|
"可消化蛋氨酸 (SID %)": "猪第二限制性氨基酸,直接影响瘦肉率和生长速度。",
|
||||||
|
|||||||
@@ -119,6 +119,12 @@ func SeedFromPreset(ctx context.Context, db *gorm.DB, presetDir string) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rawMaterialInfo 用于临时存储解析后的原料描述和价格信息。
|
||||||
|
type rawMaterialInfo struct {
|
||||||
|
Description string
|
||||||
|
UnitPrice float32
|
||||||
|
}
|
||||||
|
|
||||||
// seedNutrients 先严格校验JSON源文件,然后以“有则跳过”的模式播种数据。
|
// seedNutrients 先严格校验JSON源文件,然后以“有则跳过”的模式播种数据。
|
||||||
func seedNutrients(tx *gorm.DB, jsonData []byte) error {
|
func seedNutrients(tx *gorm.DB, jsonData []byte) error {
|
||||||
// 1. 严格校验JSON文件,检查内部重复键
|
// 1. 严格校验JSON文件,检查内部重复键
|
||||||
@@ -128,12 +134,16 @@ func seedNutrients(tx *gorm.DB, jsonData []byte) error {
|
|||||||
|
|
||||||
// 2. 解析简介信息
|
// 2. 解析简介信息
|
||||||
descriptionsNode := gjson.GetBytes(jsonData, "descriptions")
|
descriptionsNode := gjson.GetBytes(jsonData, "descriptions")
|
||||||
rawMaterialDescriptions := make(map[string]string)
|
rawMaterialInfos := make(map[string]rawMaterialInfo)
|
||||||
nutrientDescriptions := make(map[string]string)
|
nutrientDescriptions := make(map[string]string)
|
||||||
|
|
||||||
if descriptionsNode.Exists() {
|
if descriptionsNode.Exists() {
|
||||||
|
// 解析 raw_materials 描述和价格
|
||||||
descriptionsNode.Get("raw_materials").ForEach(func(key, value gjson.Result) bool {
|
descriptionsNode.Get("raw_materials").ForEach(func(key, value gjson.Result) bool {
|
||||||
rawMaterialDescriptions[key.String()] = value.String()
|
rawMaterialInfos[key.String()] = rawMaterialInfo{
|
||||||
|
Description: value.Get("descriptions").String(),
|
||||||
|
UnitPrice: float32(value.Get("unit_price").Float()),
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
descriptionsNode.Get("nutrients").ForEach(func(key, value gjson.Result) bool {
|
descriptionsNode.Get("nutrients").ForEach(func(key, value gjson.Result) bool {
|
||||||
@@ -148,11 +158,16 @@ func seedNutrients(tx *gorm.DB, jsonData []byte) error {
|
|||||||
dataNode.ForEach(func(rawMaterialKey, rawMaterialValue gjson.Result) bool {
|
dataNode.ForEach(func(rawMaterialKey, rawMaterialValue gjson.Result) bool {
|
||||||
rawMaterialName := rawMaterialKey.String()
|
rawMaterialName := rawMaterialKey.String()
|
||||||
var rawMaterial models.RawMaterial
|
var rawMaterial models.RawMaterial
|
||||||
// 将 Description 放入 Create 对象中
|
|
||||||
|
// 获取原料的描述和价格信息
|
||||||
|
info := rawMaterialInfos[rawMaterialName]
|
||||||
|
|
||||||
|
// 将 Description 和 ReferencePrice 放入 Create 对象中
|
||||||
err = tx.Where(models.RawMaterial{Name: rawMaterialName}).
|
err = tx.Where(models.RawMaterial{Name: rawMaterialName}).
|
||||||
FirstOrCreate(&rawMaterial, models.RawMaterial{
|
FirstOrCreate(&rawMaterial, models.RawMaterial{
|
||||||
Name: rawMaterialName,
|
Name: rawMaterialName,
|
||||||
Description: rawMaterialDescriptions[rawMaterialName],
|
Description: info.Description,
|
||||||
|
ReferencePrice: info.UnitPrice,
|
||||||
}).Error
|
}).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 返回 false 停止 ForEach 遍历
|
// 返回 false 停止 ForEach 遍历
|
||||||
@@ -454,6 +469,88 @@ func validateAndParsePigNutrientRequirementJSON(jsonData []byte) error {
|
|||||||
|
|
||||||
// validateAndParseNutrientJSON 严格校验JSON文件
|
// validateAndParseNutrientJSON 严格校验JSON文件
|
||||||
func validateAndParseNutrientJSON(jsonData []byte) error {
|
func validateAndParseNutrientJSON(jsonData []byte) error {
|
||||||
|
descriptionsNode := gjson.GetBytes(jsonData, "descriptions")
|
||||||
|
if !descriptionsNode.Exists() {
|
||||||
|
return errors.New("JSON文件中缺少 'descriptions' 字段")
|
||||||
|
}
|
||||||
|
if !descriptionsNode.IsObject() {
|
||||||
|
return errors.New("'descriptions' 字段必须是一个JSON对象")
|
||||||
|
}
|
||||||
|
|
||||||
|
rawMaterialsNode := descriptionsNode.Get("raw_materials")
|
||||||
|
if !rawMaterialsNode.Exists() {
|
||||||
|
return errors.New("JSON文件中缺少 'descriptions.raw_materials' 字段")
|
||||||
|
}
|
||||||
|
if !rawMaterialsNode.IsObject() {
|
||||||
|
return errors.New("'descriptions.raw_materials' 字段必须是一个JSON对象")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用 json.Decoder 严格校验 raw_materials 的结构
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader([]byte(rawMaterialsNode.Raw)))
|
||||||
|
decoder.UseNumber()
|
||||||
|
|
||||||
|
if t, err := decoder.Token(); err != nil || t != json.Delim('{') {
|
||||||
|
return fmt.Errorf("'descriptions.raw_materials' 字段解析起始符失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
seenRawMaterials := make(map[string]bool)
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
// 1. 解析原料名称
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("解析原料名称失败: %w", err)
|
||||||
|
}
|
||||||
|
rawMaterialName := t.(string)
|
||||||
|
if seenRawMaterials[rawMaterialName] {
|
||||||
|
return fmt.Errorf("原料名称 '%s' 重复", rawMaterialName)
|
||||||
|
}
|
||||||
|
seenRawMaterials[rawMaterialName] = true
|
||||||
|
|
||||||
|
// 2. 解析该原料的描述和价格对象
|
||||||
|
if t, err := decoder.Token(); err != nil || t != json.Delim('{') {
|
||||||
|
return fmt.Errorf("期望原料 '%s' 的值是一个JSON对象", rawMaterialName)
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("解析原料 '%s' 内部键失败: %w", rawMaterialName, err)
|
||||||
|
}
|
||||||
|
key := t.(string)
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "descriptions":
|
||||||
|
t, err = decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("解析原料 '%s' 的 'descriptions' 值失败: %w", rawMaterialName, err)
|
||||||
|
}
|
||||||
|
if _, ok := t.(string); !ok {
|
||||||
|
return fmt.Errorf("期望原料 '%s' 的 'descriptions' 值是字符串, 但实际得到的类型是 %T, 值为 '%v'", rawMaterialName, t, t)
|
||||||
|
}
|
||||||
|
case "unit_price":
|
||||||
|
t, err = decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("解析原料 '%s' 的 'unit_price' 值失败: %w", rawMaterialName, err)
|
||||||
|
}
|
||||||
|
if _, ok := t.(json.Number); !ok {
|
||||||
|
return fmt.Errorf("期望原料 '%s' 的 'unit_price' 值是数字, 但实际得到的类型是 %T, 值为 '%v'", rawMaterialName, t, t)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
// 忽略其他未知字段,但仍需读取其值以继续解析
|
||||||
|
if _, err := decoder.Token(); err != nil {
|
||||||
|
return fmt.Errorf("解析原料 '%s' 的未知键 '%s' 的值失败: %w", rawMaterialName, key, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取原料描述和价格对象的 "}"
|
||||||
|
if t, err := decoder.Token(); err != nil || t != json.Delim('}') {
|
||||||
|
return fmt.Errorf("解析原料 '%s' 的值结束符 '}' 失败", rawMaterialName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验 data 节点
|
||||||
dataNode := gjson.GetBytes(jsonData, "data")
|
dataNode := gjson.GetBytes(jsonData, "data")
|
||||||
if !dataNode.Exists() {
|
if !dataNode.Exists() {
|
||||||
return errors.New("JSON文件中缺少 'data' 字段")
|
return errors.New("JSON文件中缺少 'data' 字段")
|
||||||
@@ -462,14 +559,14 @@ func validateAndParseNutrientJSON(jsonData []byte) error {
|
|||||||
return errors.New("'data' 字段必须是一个JSON对象")
|
return errors.New("'data' 字段必须是一个JSON对象")
|
||||||
}
|
}
|
||||||
|
|
||||||
decoder := json.NewDecoder(bytes.NewReader([]byte(dataNode.Raw)))
|
// 重新初始化 decoder 用于 data 节点的校验
|
||||||
|
decoder = json.NewDecoder(bytes.NewReader([]byte(dataNode.Raw)))
|
||||||
decoder.UseNumber()
|
decoder.UseNumber()
|
||||||
// 读取 "{"
|
|
||||||
if t, err := decoder.Token(); err != nil || t != json.Delim('{') {
|
if t, err := decoder.Token(); err != nil || t != json.Delim('{') {
|
||||||
return errors.New("'data' 字段解析起始符失败")
|
return errors.New("'data' 字段解析起始符失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
seenRawMaterials := make(map[string]bool)
|
seenRawMaterials = make(map[string]bool) // 重置 seenRawMaterials 用于 data 节点校验
|
||||||
|
|
||||||
for decoder.More() {
|
for decoder.More() {
|
||||||
// 1. 解析原料名称
|
// 1. 解析原料名称
|
||||||
|
|||||||
Reference in New Issue
Block a user