From 734301c714e16008958170158d5858e03127f699 Mon Sep 17 00:00:00 2001 From: jjLv <1981429112@qq.com> Date: Tue, 17 Jun 2025 13:50:18 +0800 Subject: [PATCH] =?UTF-8?q?0616bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DeviceServiceImpl.java | 2 +- .../core/cook/dto/MenuDishesImportDTO.java | 6 +- .../core/cook/service/ICookDishesService.java | 3 +- .../service/impl/CookDishesServiceImpl.java | 94 ++++++++++++------- .../canteen/core/utils/NutritionEntity.java | 15 +-- .../core/utils/NutritionEntityUtil.java | 5 +- .../mapper/cook/CookDishesMapper.xml | 1 - .../mapper/cook/CookNutritionTypeMapper.xml | 1 + 8 files changed, 76 insertions(+), 51 deletions(-) diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/android/service/impl/DeviceServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/android/service/impl/DeviceServiceImpl.java index 9be9105..c684a3e 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/android/service/impl/DeviceServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/android/service/impl/DeviceServiceImpl.java @@ -192,7 +192,7 @@ public class DeviceServiceImpl implements DeviceService { intervalCompressVO.setStartTime(LocalTime.parse(mealTimeVO.getStartTime())); intervalCompressVO.setEndTime(LocalTime.parse(mealTimeVO.getEndTime())); for (CookMenuAndroidRecipeDetailVO menuAndroidRecipeDetailVO : menuRecipeDetailList){ - if (mealTimeVO.getMealTimeType().equals(menuAndroidRecipeDetailVO.getMealTimeType())){ + if (mealTimeVO.getMealTimeType().equals(menuAndroidRecipeDetailVO.getMealTimeType()) && date.equals(menuAndroidRecipeDetailVO.getApplyData())) { List recipeDetailList = recipeDishList.stream().filter(x -> x.getDetailId().equals(menuAndroidRecipeDetailVO.getDetailId())).collect(Collectors.toList()); intervalCompressVO.setProductList(recipeDetailList); break; diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/MenuDishesImportDTO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/MenuDishesImportDTO.java index 1bd3484..cffc968 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/MenuDishesImportDTO.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/MenuDishesImportDTO.java @@ -66,7 +66,7 @@ public class MenuDishesImportDTO implements Serializable { private String typeId; public BigDecimal getPrice() { - return ObjectUtil.isNull(this.price) ? BigDecimal.ZERO : this.price.multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.DOWN); + return ObjectUtil.isNull(this.price) ? BigDecimal.ZERO : this.price; } public Integer getSalesMode() { @@ -74,7 +74,7 @@ public class MenuDishesImportDTO implements Serializable { } public BigDecimal getSpecificationOfWeighing() { - return ObjectUtil.isNull(this.price) ? BigDecimal.ZERO : this.price.multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.DOWN); + return ObjectUtil.isNull(this.specificationOfWeighing) ? BigDecimal.ZERO : this.specificationOfWeighing; } public void setSpecificationOfWeighing(BigDecimal specificationOfWeighing) { @@ -95,7 +95,7 @@ public class MenuDishesImportDTO implements Serializable { } public BigDecimal getWeight() { - return ObjectUtil.isNull(this.weight) ? BigDecimal.ZERO : this.weight.setScale(0, RoundingMode.DOWN); + return ObjectUtil.isNull(this.weight) ? BigDecimal.ZERO : this.weight; } public String getAreaName() { diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/ICookDishesService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/ICookDishesService.java index eb403b4..9014fb9 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/ICookDishesService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/ICookDishesService.java @@ -6,6 +6,7 @@ import com.bonus.canteen.core.cook.dto.AppletDishesDetailDTO; import com.bonus.canteen.core.cook.dto.DishesImportCheckResult; import com.bonus.canteen.core.cook.dto.MenuDishesImportDTO; import com.bonus.canteen.core.cook.vo.AppletDishesDetailVO; +import com.bonus.common.core.web.domain.AjaxResult; import org.springframework.web.multipart.MultipartFile; /** @@ -77,7 +78,7 @@ public interface ICookDishesService { * @param request 菜品导入请求 * @return 是否成功 */ - Boolean newImportDishes(List request); + AjaxResult newImportDishes(List request); public AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/impl/CookDishesServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/impl/CookDishesServiceImpl.java index 4d0b78e..2fa591f 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/impl/CookDishesServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/service/impl/CookDishesServiceImpl.java @@ -9,6 +9,7 @@ import java.util.stream.Stream; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.db.handler.StringHandler; import com.bonus.canteen.core.common.utils.EasyExcelUtil; import com.bonus.canteen.core.common.utils.LogUtil; import com.bonus.canteen.core.cook.domain.*; @@ -28,8 +29,10 @@ import com.bonus.canteen.core.utils.NutritionEntityUtil; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.houqin.constant.DelFlagEnum; import com.bonus.common.security.utils.SecurityUtils; +import org.codehaus.groovy.tools.StringHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.collections4.CollectionUtils; @@ -306,7 +309,7 @@ public class CookDishesServiceImpl implements ICookDishesService { private boolean validateData(MenuDishesImportDTO data, List sqlDishesNameList, List dishesNameList, ImportDishesContext context, List salesModeKeys, List materialTypeKeys) { // 校验价格 - if (data.getPrice().compareTo(BigDecimal.ZERO) < 0) { + if (data.getPrice().multiply(BigDecimal.valueOf(100)).compareTo(BigDecimal.ZERO) < 0) { data.setFailReason("菜品价格为负数"); return false; } @@ -348,11 +351,12 @@ public class CookDishesServiceImpl implements ICookDishesService { } // 校验规格称重 - if (data.getSalesMode() == two && data.getSpecificationOfWeighing() != null && - data.getSpecificationOfWeighing().compareTo(BigDecimal.valueOf(50)) != 0 && - data.getSpecificationOfWeighing().compareTo(BigDecimal.valueOf(100)) != 0) { - data.setFailReason("称重菜品必须填写规格称重"); - return false; + if (data.getSalesMode() == two && data.getSpecificationOfWeighing() != null) { + BigDecimal num = data.getSpecificationOfWeighing(); + if(num.intValue() != 50 && num.intValue() != 100){ + data.setFailReason("称重菜品规格必须是50克或者100克"); + return false; + } } // 校验原料 @@ -491,21 +495,26 @@ public class CookDishesServiceImpl implements ICookDishesService { @Override @Transactional(rollbackFor = Exception.class) - public Boolean newImportDishes(List menuDishesImportDTO) { + public AjaxResult newImportDishes(List menuDishesImportDTO) { try { String currentTraceId = LogUtil.getCurrentTraceId(); String username = SecurityUtils.getUsername(); this.asyncTaskExecutor.execute(() -> { LogUtil.putLogTraceId(currentTraceId); this.importDishesDTO(menuDishesImportDTO, username); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } }); } catch (Exception var7) { throw new ServiceException("批量导入菜品发生错误"); } - return true; + return AjaxResult.success(); } - private void importDishesDTO(List menuDishesImportList, String username) { + private AjaxResult importDishesDTO(List menuDishesImportList, String username) { // try { // 重新组合数据 List dishesList = new ArrayList<>(); @@ -517,7 +526,7 @@ public class CookDishesServiceImpl implements ICookDishesService { dishes.setStallId(menuDishesImportDTO.getStallId() == null ? null : Long.valueOf(menuDishesImportDTO.getStallId())); dishes.setAreaId(menuDishesImportDTO.getAreaId() == null ? null : Long.valueOf(menuDishesImportDTO.getAreaId())); dishes.setDishesName(menuDishesImportDTO.getDishesName()); - dishes.setPrice(menuDishesImportDTO.getPrice() == null ? null : Long.valueOf(String.valueOf(menuDishesImportDTO.getPrice()))); + dishes.setPrice(menuDishesImportDTO.getPrice() == null ? null : Long.valueOf(String.valueOf(menuDishesImportDTO.getPrice().multiply(BigDecimal.valueOf(100))))); dishes.setWeight(menuDishesImportDTO.getWeight() == null ? null : menuDishesImportDTO.getWeight()); dishes.setWeightDeviation(BigDecimal.ZERO); dishes.setTypeId(menuDishesImportDTO.getTypeId() == null ? null : Long.valueOf(menuDishesImportDTO.getTypeId())); @@ -525,34 +534,55 @@ public class CookDishesServiceImpl implements ICookDishesService { dishes.setRecommend("0"); dishes.setSalesMode(menuDishesImportDTO.getSalesMode() == null ? null : Long.valueOf(menuDishesImportDTO.getSalesMode())); dishes.setUnitPrice(menuDishesImportDTO.getSpecificationOfWeighing() == null ? null : Long.valueOf(String.valueOf(menuDishesImportDTO.getSpecificationOfWeighing()))); - String[] materialList = menuDishesImportDTO.getMaterialNames().replace(";", ";").split(";"); - List dishesMaterialList = new ArrayList<>(); - for (String material : materialList) { - String[] materialSplit = material.split("&"); - if (materialSplit.length != 3) { - continue; // 跳过格式不正确的原料 + if (!StringUtils.isBlank(menuDishesImportDTO.getMaterialNames())){ + String[] materialList = menuDishesImportDTO.getMaterialNames().replace(";", ";").split(";"); + List dishesMaterialList = new ArrayList<>(); + for (String material : materialList) { + String[] materialSplit = material.split("&"); + if (materialSplit.length != 3) { + continue; // 跳过格式不正确的原料 + } + CookDishesMaterial dishesMaterial = new CookDishesMaterial(); + try { + dishesMaterial.setWeight(BigDecimal.valueOf(Double.parseDouble(materialSplit[2]))); + } catch (NumberFormatException e) { + dishesMaterial.setWeight(BigDecimal.ZERO); + } + dishesMaterial.setMaterialName(materialSplit[0]); + try { + dishesMaterial.setMaterialType(Long.valueOf(materialSplit[1])); + } catch (NumberFormatException e) { + dishesMaterial.setMaterialType(0L); + } + dishesMaterial.setMaterialId(materialMap.getOrDefault(materialSplit[0], 0L)); + dishesMaterialList.add(dishesMaterial); } - CookDishesMaterial dishesMaterial = new CookDishesMaterial(); - try { - dishesMaterial.setWeight(BigDecimal.valueOf(Double.parseDouble(materialSplit[2]))); - } catch (NumberFormatException e) { - dishesMaterial.setWeight(BigDecimal.ZERO); - } - dishesMaterial.setMaterialName(materialSplit[0]); - try { - dishesMaterial.setMaterialType(Long.valueOf(materialSplit[1])); - } catch (NumberFormatException e) { - dishesMaterial.setMaterialType(0L); - } - dishesMaterial.setMaterialId(materialMap.getOrDefault(materialSplit[0], 0L)); - dishesMaterialList.add(dishesMaterial); + dishes.setDishesMaterialList(dishesMaterialList); } - dishes.setDishesMaterialList(dishesMaterialList); dishesList.add(dishes); } - dishesList.forEach(this::insertCookDishes); +// dishesList.forEach(this::insertCookDishes); + for (int i = 0; i < dishesList.size(); i++) { + CookDishes cookDishes = dishesList.get(i); + cookDishesMapper.insertCookDishes(cookDishes); + //添加菜品-原料关联关系 + if (cookDishes.getDishesMaterialList() != null && !cookDishes.getDishesMaterialList().isEmpty()) { + cookDishesMapper.insertDishesMaterial(cookDishes.getDishesMaterialList(), cookDishes.getDishesId()); + calculateNutritionalInfo(cookDishes); + } + } +// dishesList.forEach(cookDishes -> { +// cookDishesMapper.insertCookDishes(cookDishes); +// //添加菜品-原料关联关系 +// if (cookDishes.getDishesMaterialList() != null && !cookDishes.getDishesMaterialList().isEmpty()) { +// cookDishesMapper.insertDishesMaterial(cookDishes.getDishesMaterialList(), cookDishes.getDishesId()); +// calculateNutritionalInfo(cookDishes); +// } +// }); + return AjaxResult.success("批量导入菜品成功"); } + @Override public AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO) { //AppletDishesDetailDTO dishesDetailDTO = (AppletDishesDetailDTO)JSON.parseObject(content, AppletDishesDetailDTO.class); dishesDetailDTO.setDelFlag(DelFlagEnum.DEL_FALSE.key()); diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntity.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntity.java index 85b4954..4be4787 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntity.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntity.java @@ -65,8 +65,7 @@ public class NutritionEntity { private Double totalWeight; private Double baseWeight; private Double vitaminD; - private String processingMethod; - private BigDecimal processingTime; + private Double processingTime; public Double getVitaminD() { return vitaminD; @@ -76,19 +75,11 @@ public class NutritionEntity { this.vitaminD = vitaminD; } - public String getProcessingMethod() { - return processingMethod; - } - - public void setProcessingMethod(String processingMethod) { - this.processingMethod = processingMethod; - } - - public BigDecimal getProcessingTime() { + public Double getProcessingTime() { return processingTime; } - public void setProcessingTime(BigDecimal processingTime) { + public void setProcessingTime(Double processingTime) { this.processingTime = processingTime; } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntityUtil.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntityUtil.java index 704311d..1e4bad4 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntityUtil.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/utils/NutritionEntityUtil.java @@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory; import org.springframework.util.ReflectionUtils; import java.lang.reflect.Field; +import java.math.BigDecimal; import java.util.Iterator; import java.util.List; @@ -35,6 +36,9 @@ public class NutritionEntityUtil { try { String fieldName = field.getName(); + if ("processingMethod".equals(fieldName)) { + continue; // Skip weight and baseWeight fields + } Object temp = field.get(tempNutrition); double param = 0.0; if (temp != null && (Double)temp != -1.0) { @@ -50,7 +54,6 @@ public class NutritionEntityUtil { } double newValue = Arith.add(Arith.mul(param, proportion), lastValue); - // System.err.println(fieldName+",newValue:"+newValue+" ,lastValue="+lastValue); declaredField.set(nutritionEntity, newValue); } catch (NoSuchFieldException | IllegalAccessException var21) { log.info("获取属性值异常 : {}", var21.getMessage()); diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookDishesMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookDishesMapper.xml index 262e46f..7393f74 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookDishesMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookDishesMapper.xml @@ -590,7 +590,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" niacin = #{bean.niacin}, edible = #{bean.edible}, vitamin_d = #{bean.vitaminD}, - processing_method = #{bean.processingMethod}, processing_time = #{bean.processingTime}, carotene = #{bean.carotene}, diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookNutritionTypeMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookNutritionTypeMapper.xml index ba55527..691ef66 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookNutritionTypeMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/cook/CookNutritionTypeMapper.xml @@ -37,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where nutrition_type_name = #{nutritionTypeName} and parent_id = #{nutritionTypeId} + limit 1