add recipe product code also search sub menu, add recipe sharding.

This commit is contained in:
Pakin 2025-09-10 13:45:25 +07:00
parent 2761cf1676
commit 08bb0899a3
3 changed files with 279 additions and 39 deletions

View file

@ -106,16 +106,38 @@ impl Recipe {
///
/// an `Option` type, specifically `Option<&Recipe01>`.
pub fn search_pd(&self, product_code: String) -> Option<&Recipe01> {
self.Recipe01
.iter()
.find(|&r| r.productCode == product_code)
self.Recipe01.iter().find(|&r| {
if r.SubMenu.is_none() {
r.productCode == product_code
} else {
r.SubMenu
.as_ref()
.unwrap()
.iter()
.filter(|x| x.productCode == product_code)
.count()
> 0
|| r.productCode == product_code
}
})
}
/// Similar to `search_pd` but ignoring exacted matching.
pub fn search_pd_by_no_country_code(&self, product_code: String) -> Option<&Recipe01> {
self.Recipe01
.iter()
.find(|&r| r.productCode.contains(&product_code))
self.Recipe01.iter().find(|&r| {
if r.SubMenu.is_none() {
r.productCode.contains(&product_code)
} else {
r.SubMenu
.as_ref()
.unwrap()
.iter()
.filter(|x| x.productCode.contains(&product_code))
.count()
> 0
|| r.productCode.contains(&product_code)
}
})
}
/// Mulitple product code searching with parallel and no exact matching.
@ -126,7 +148,20 @@ impl Recipe {
.map(|pd| {
self.Recipe01
.par_iter()
.find_any(|x| x.productCode.contains(pd))
.find_any(|x| {
if x.SubMenu.is_none() {
x.productCode.contains(pd)
} else {
x.SubMenu
.clone()
.unwrap()
.iter()
.filter(|x2| x2.productCode.contains(pd))
.count()
> 0
|| x.productCode.contains(pd)
}
})
.cloned()
})
.collect_into_vec(&mut found);
@ -138,7 +173,20 @@ impl Recipe {
pub fn get_pd_index(&self, product_code: String) -> usize {
self.Recipe01
.iter()
.position(|r| r.productCode == product_code)
.position(|r| {
if r.SubMenu.is_none() {
r.productCode == product_code
} else {
r.SubMenu
.clone()
.unwrap()
.iter()
.filter(|x2| x2.productCode == product_code)
.count()
> 0
|| r.productCode == product_code
}
})
.unwrap()
}
@ -1508,6 +1556,10 @@ impl RecipeList {
diff_list
}
pub fn to_map(&self) -> serde_json::Value {
serde_json::to_value(self).unwrap()
}
}
/// The above code defines a Rust struct called MaterialSetting with various fields representing