0616bug修改

This commit is contained in:
jjLv 2025-06-17 13:50:18 +08:00
parent 0d72b09f48
commit 734301c714
8 changed files with 76 additions and 51 deletions

View File

@ -192,7 +192,7 @@ public class DeviceServiceImpl implements DeviceService {
intervalCompressVO.setStartTime(LocalTime.parse(mealTimeVO.getStartTime())); intervalCompressVO.setStartTime(LocalTime.parse(mealTimeVO.getStartTime()));
intervalCompressVO.setEndTime(LocalTime.parse(mealTimeVO.getEndTime())); intervalCompressVO.setEndTime(LocalTime.parse(mealTimeVO.getEndTime()));
for (CookMenuAndroidRecipeDetailVO menuAndroidRecipeDetailVO : menuRecipeDetailList){ for (CookMenuAndroidRecipeDetailVO menuAndroidRecipeDetailVO : menuRecipeDetailList){
if (mealTimeVO.getMealTimeType().equals(menuAndroidRecipeDetailVO.getMealTimeType())){ if (mealTimeVO.getMealTimeType().equals(menuAndroidRecipeDetailVO.getMealTimeType()) && date.equals(menuAndroidRecipeDetailVO.getApplyData())) {
List<CookRecipeDetailCompressVO> recipeDetailList = recipeDishList.stream().filter(x -> x.getDetailId().equals(menuAndroidRecipeDetailVO.getDetailId())).collect(Collectors.toList()); List<CookRecipeDetailCompressVO> recipeDetailList = recipeDishList.stream().filter(x -> x.getDetailId().equals(menuAndroidRecipeDetailVO.getDetailId())).collect(Collectors.toList());
intervalCompressVO.setProductList(recipeDetailList); intervalCompressVO.setProductList(recipeDetailList);
break; break;

View File

@ -66,7 +66,7 @@ public class MenuDishesImportDTO implements Serializable {
private String typeId; private String typeId;
public BigDecimal getPrice() { 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() { public Integer getSalesMode() {
@ -74,7 +74,7 @@ public class MenuDishesImportDTO implements Serializable {
} }
public BigDecimal getSpecificationOfWeighing() { 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) { public void setSpecificationOfWeighing(BigDecimal specificationOfWeighing) {
@ -95,7 +95,7 @@ public class MenuDishesImportDTO implements Serializable {
} }
public BigDecimal getWeight() { 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() { public String getAreaName() {

View File

@ -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.DishesImportCheckResult;
import com.bonus.canteen.core.cook.dto.MenuDishesImportDTO; import com.bonus.canteen.core.cook.dto.MenuDishesImportDTO;
import com.bonus.canteen.core.cook.vo.AppletDishesDetailVO; import com.bonus.canteen.core.cook.vo.AppletDishesDetailVO;
import com.bonus.common.core.web.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
/** /**
@ -77,7 +78,7 @@ public interface ICookDishesService {
* @param request 菜品导入请求 * @param request 菜品导入请求
* @return 是否成功 * @return 是否成功
*/ */
Boolean newImportDishes(List<MenuDishesImportDTO> request); AjaxResult newImportDishes(List<MenuDishesImportDTO> request);
public AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO); public AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO);
} }

View File

@ -9,6 +9,7 @@ import java.util.stream.Stream;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; 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.EasyExcelUtil;
import com.bonus.canteen.core.common.utils.LogUtil; import com.bonus.canteen.core.common.utils.LogUtil;
import com.bonus.canteen.core.cook.domain.*; 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.exception.ServiceException;
import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.utils.StringUtils; 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.houqin.constant.DelFlagEnum;
import com.bonus.common.security.utils.SecurityUtils; import com.bonus.common.security.utils.SecurityUtils;
import org.codehaus.groovy.tools.StringHelper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@ -306,7 +309,7 @@ public class CookDishesServiceImpl implements ICookDishesService {
private boolean validateData(MenuDishesImportDTO data, List<String> sqlDishesNameList, List<String> dishesNameList, private boolean validateData(MenuDishesImportDTO data, List<String> sqlDishesNameList, List<String> dishesNameList,
ImportDishesContext context, List<Integer> salesModeKeys, List<String> materialTypeKeys) { ImportDishesContext context, List<Integer> salesModeKeys, List<String> materialTypeKeys) {
// 校验价格 // 校验价格
if (data.getPrice().compareTo(BigDecimal.ZERO) < 0) { if (data.getPrice().multiply(BigDecimal.valueOf(100)).compareTo(BigDecimal.ZERO) < 0) {
data.setFailReason("菜品价格为负数"); data.setFailReason("菜品价格为负数");
return false; return false;
} }
@ -348,11 +351,12 @@ public class CookDishesServiceImpl implements ICookDishesService {
} }
// 校验规格称重 // 校验规格称重
if (data.getSalesMode() == two && data.getSpecificationOfWeighing() != null && if (data.getSalesMode() == two && data.getSpecificationOfWeighing() != null) {
data.getSpecificationOfWeighing().compareTo(BigDecimal.valueOf(50)) != 0 && BigDecimal num = data.getSpecificationOfWeighing();
data.getSpecificationOfWeighing().compareTo(BigDecimal.valueOf(100)) != 0) { if(num.intValue() != 50 && num.intValue() != 100){
data.setFailReason("称重菜品必须填写规格称重"); data.setFailReason("称重菜品规格必须是50克或者100克");
return false; return false;
}
} }
// 校验原料 // 校验原料
@ -491,21 +495,26 @@ public class CookDishesServiceImpl implements ICookDishesService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean newImportDishes(List<MenuDishesImportDTO> menuDishesImportDTO) { public AjaxResult newImportDishes(List<MenuDishesImportDTO> menuDishesImportDTO) {
try { try {
String currentTraceId = LogUtil.getCurrentTraceId(); String currentTraceId = LogUtil.getCurrentTraceId();
String username = SecurityUtils.getUsername(); String username = SecurityUtils.getUsername();
this.asyncTaskExecutor.execute(() -> { this.asyncTaskExecutor.execute(() -> {
LogUtil.putLogTraceId(currentTraceId); LogUtil.putLogTraceId(currentTraceId);
this.importDishesDTO(menuDishesImportDTO, username); this.importDishesDTO(menuDishesImportDTO, username);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}); });
} catch (Exception var7) { } catch (Exception var7) {
throw new ServiceException("批量导入菜品发生错误"); throw new ServiceException("批量导入菜品发生错误");
} }
return true; return AjaxResult.success();
} }
private void importDishesDTO(List<MenuDishesImportDTO> menuDishesImportList, String username) { private AjaxResult importDishesDTO(List<MenuDishesImportDTO> menuDishesImportList, String username) {
// try { // try {
// 重新组合数据 // 重新组合数据
List<CookDishes> dishesList = new ArrayList<>(); List<CookDishes> dishesList = new ArrayList<>();
@ -517,7 +526,7 @@ public class CookDishesServiceImpl implements ICookDishesService {
dishes.setStallId(menuDishesImportDTO.getStallId() == null ? null : Long.valueOf(menuDishesImportDTO.getStallId())); dishes.setStallId(menuDishesImportDTO.getStallId() == null ? null : Long.valueOf(menuDishesImportDTO.getStallId()));
dishes.setAreaId(menuDishesImportDTO.getAreaId() == null ? null : Long.valueOf(menuDishesImportDTO.getAreaId())); dishes.setAreaId(menuDishesImportDTO.getAreaId() == null ? null : Long.valueOf(menuDishesImportDTO.getAreaId()));
dishes.setDishesName(menuDishesImportDTO.getDishesName()); 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.setWeight(menuDishesImportDTO.getWeight() == null ? null : menuDishesImportDTO.getWeight());
dishes.setWeightDeviation(BigDecimal.ZERO); dishes.setWeightDeviation(BigDecimal.ZERO);
dishes.setTypeId(menuDishesImportDTO.getTypeId() == null ? null : Long.valueOf(menuDishesImportDTO.getTypeId())); dishes.setTypeId(menuDishesImportDTO.getTypeId() == null ? null : Long.valueOf(menuDishesImportDTO.getTypeId()));
@ -525,34 +534,55 @@ public class CookDishesServiceImpl implements ICookDishesService {
dishes.setRecommend("0"); dishes.setRecommend("0");
dishes.setSalesMode(menuDishesImportDTO.getSalesMode() == null ? null : Long.valueOf(menuDishesImportDTO.getSalesMode())); dishes.setSalesMode(menuDishesImportDTO.getSalesMode() == null ? null : Long.valueOf(menuDishesImportDTO.getSalesMode()));
dishes.setUnitPrice(menuDishesImportDTO.getSpecificationOfWeighing() == null ? null : Long.valueOf(String.valueOf(menuDishesImportDTO.getSpecificationOfWeighing()))); dishes.setUnitPrice(menuDishesImportDTO.getSpecificationOfWeighing() == null ? null : Long.valueOf(String.valueOf(menuDishesImportDTO.getSpecificationOfWeighing())));
String[] materialList = menuDishesImportDTO.getMaterialNames().replace("", ";").split(";"); if (!StringUtils.isBlank(menuDishesImportDTO.getMaterialNames())){
List<CookDishesMaterial> dishesMaterialList = new ArrayList<>(); String[] materialList = menuDishesImportDTO.getMaterialNames().replace("", ";").split(";");
for (String material : materialList) { List<CookDishesMaterial> dishesMaterialList = new ArrayList<>();
String[] materialSplit = material.split("&"); for (String material : materialList) {
if (materialSplit.length != 3) { String[] materialSplit = material.split("&");
continue; // 跳过格式不正确的原料 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(); dishes.setDishesMaterialList(dishesMaterialList);
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);
dishesList.add(dishes); 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) { public AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO) {
//AppletDishesDetailDTO dishesDetailDTO = (AppletDishesDetailDTO)JSON.parseObject(content, AppletDishesDetailDTO.class); //AppletDishesDetailDTO dishesDetailDTO = (AppletDishesDetailDTO)JSON.parseObject(content, AppletDishesDetailDTO.class);
dishesDetailDTO.setDelFlag(DelFlagEnum.DEL_FALSE.key()); dishesDetailDTO.setDelFlag(DelFlagEnum.DEL_FALSE.key());

View File

@ -65,8 +65,7 @@ public class NutritionEntity {
private Double totalWeight; private Double totalWeight;
private Double baseWeight; private Double baseWeight;
private Double vitaminD; private Double vitaminD;
private String processingMethod; private Double processingTime;
private BigDecimal processingTime;
public Double getVitaminD() { public Double getVitaminD() {
return vitaminD; return vitaminD;
@ -76,19 +75,11 @@ public class NutritionEntity {
this.vitaminD = vitaminD; this.vitaminD = vitaminD;
} }
public String getProcessingMethod() { public Double getProcessingTime() {
return processingMethod;
}
public void setProcessingMethod(String processingMethod) {
this.processingMethod = processingMethod;
}
public BigDecimal getProcessingTime() {
return processingTime; return processingTime;
} }
public void setProcessingTime(BigDecimal processingTime) { public void setProcessingTime(Double processingTime) {
this.processingTime = processingTime; this.processingTime = processingTime;
} }

View File

@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -35,6 +36,9 @@ public class NutritionEntityUtil {
try { try {
String fieldName = field.getName(); String fieldName = field.getName();
if ("processingMethod".equals(fieldName)) {
continue; // Skip weight and baseWeight fields
}
Object temp = field.get(tempNutrition); Object temp = field.get(tempNutrition);
double param = 0.0; double param = 0.0;
if (temp != null && (Double)temp != -1.0) { if (temp != null && (Double)temp != -1.0) {
@ -50,7 +54,6 @@ public class NutritionEntityUtil {
} }
double newValue = Arith.add(Arith.mul(param, proportion), lastValue); double newValue = Arith.add(Arith.mul(param, proportion), lastValue);
// System.err.println(fieldName+",newValue"+newValue+" ,lastValue="+lastValue);
declaredField.set(nutritionEntity, newValue); declaredField.set(nutritionEntity, newValue);
} catch (NoSuchFieldException | IllegalAccessException var21) { } catch (NoSuchFieldException | IllegalAccessException var21) {
log.info("获取属性值异常 : {}", var21.getMessage()); log.info("获取属性值异常 : {}", var21.getMessage());

View File

@ -590,7 +590,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="bean.niacin != null">niacin = #{bean.niacin},</if> <if test="bean.niacin != null">niacin = #{bean.niacin},</if>
<if test="bean.edible != null">edible = #{bean.edible},</if> <if test="bean.edible != null">edible = #{bean.edible},</if>
<if test="bean.vitaminD != null">vitamin_d = #{bean.vitaminD},</if> <if test="bean.vitaminD != null">vitamin_d = #{bean.vitaminD},</if>
<if test="bean.processingMethod != null">processing_method = #{bean.processingMethod},</if>
<if test="bean.processingTime != null">processing_time = #{bean.processingTime},</if> <if test="bean.processingTime != null">processing_time = #{bean.processingTime},</if>
<if test="bean.carotene != null">carotene = #{bean.carotene},</if> <if test="bean.carotene != null">carotene = #{bean.carotene},</if>
</trim> </trim>

View File

@ -37,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectCookNutritionTypeVo"/> <include refid="selectCookNutritionTypeVo"/>
where nutrition_type_name = #{nutritionTypeName} where nutrition_type_name = #{nutritionTypeName}
<if test="nutritionTypeId != null and nutritionTypeId != '' "> and parent_id = #{nutritionTypeId}</if> <if test="nutritionTypeId != null and nutritionTypeId != '' "> and parent_id = #{nutritionTypeId}</if>
limit 1
</select> </select>
<select id="checkIsExistChildren" resultType="java.lang.Integer"> <select id="checkIsExistChildren" resultType="java.lang.Integer">
select count(1) from cook_nutrition_type where parent_id in select count(1) from cook_nutrition_type where parent_id in