diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/controller/CookDishesController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/controller/CookDishesController.java index d1dfdf2..b07656f 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/controller/CookDishesController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/controller/CookDishesController.java @@ -109,10 +109,14 @@ public class CookDishesController extends BaseController { } - @PostMapping({"/import/dishes"}) + @PostMapping({"/upload/importDishes"}) @ApiOperation("导入成功的菜品信息") - @Transactional(rollbackFor = Exception.class) public AjaxResult importDishes(@RequestBody List request) { - return AjaxResult.success(this.cookDishesService.newImportDishes(request)); + try { + this.cookDishesService.newImportDishes(request); + }catch (Exception e){ + return AjaxResult.error(e.getMessage()); + } + return AjaxResult.success(); } } 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 64cbec1..1bd3484 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 @@ -37,11 +37,11 @@ public class MenuDishesImportDTO implements Serializable { @ExcelProperty( index = 5 ) - private Double specificationOfWeighing; + private BigDecimal specificationOfWeighing; @ExcelProperty( index = 6 ) - private Double weight; + private BigDecimal weight; @ExcelProperty( index = 7 ) @@ -56,20 +56,28 @@ public class MenuDishesImportDTO implements Serializable { private String stallName; @ExcelIgnore private String failReason; + @ExcelIgnore + private String areaId; + @ExcelIgnore + private String canteenId; + @ExcelIgnore + private String stallId; + @ExcelIgnore + private String typeId; public BigDecimal getPrice() { - return ObjectUtil.isNull(this.price) ? BigDecimal.ZERO : this.price.setScale(2, RoundingMode.HALF_UP); + return ObjectUtil.isNull(this.price) ? BigDecimal.ZERO : this.price.multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.DOWN); } public Integer getSalesMode() { return ObjectUtil.isNull(this.salesMode) ? 1 : this.salesMode; } - public Double getSpecificationOfWeighing() { - return specificationOfWeighing; + public BigDecimal getSpecificationOfWeighing() { + return ObjectUtil.isNull(this.price) ? BigDecimal.ZERO : this.price.multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.DOWN); } - public void setSpecificationOfWeighing(Double specificationOfWeighing) { + public void setSpecificationOfWeighing(BigDecimal specificationOfWeighing) { this.specificationOfWeighing = specificationOfWeighing; } @@ -86,8 +94,8 @@ public class MenuDishesImportDTO implements Serializable { return this.materialNames; } - public Double getWeight() { - return this.weight; + public BigDecimal getWeight() { + return ObjectUtil.isNull(this.weight) ? BigDecimal.ZERO : this.weight.setScale(0, RoundingMode.DOWN); } public String getAreaName() { @@ -126,7 +134,7 @@ public class MenuDishesImportDTO implements Serializable { this.salesMode = salesMode; } - public void setWeight(final Double weight) { + public void setWeight(final BigDecimal weight) { this.weight = weight; } @@ -145,4 +153,57 @@ public class MenuDishesImportDTO implements Serializable { public void setFailReason(final String failReason) { this.failReason = failReason; } + + public String getAreaId() { + return areaId; + } + + public void setAreaId(String areaId) { + this.areaId = areaId; + } + + public String getCanteenId() { + return canteenId; + } + + public void setCanteenId(String canteenId) { + this.canteenId = canteenId; + } + + public String getStallId() { + return stallId; + } + + public void setStallId(String stallId) { + this.stallId = stallId; + } + + public String getTypeId() { + return typeId; + } + + public void setTypeId(String typeId) { + this.typeId = typeId; + } + + @Override + public String toString() { + return "MenuDishesImportDTO{" + + "dishesName='" + dishesName + '\'' + + ", price=" + price + + ", dishesTypeName='" + dishesTypeName + '\'' + + ", materialNames='" + materialNames + '\'' + + ", salesMode=" + salesMode + + ", specificationOfWeighing=" + specificationOfWeighing + + ", weight=" + weight + + ", areaName='" + areaName + '\'' + + ", canteenName='" + canteenName + '\'' + + ", stallName='" + stallName + '\'' + + ", failReason='" + failReason + '\'' + + ", areaId='" + areaId + '\'' + + ", canteenId='" + canteenId + '\'' + + ", stallId='" + stallId + '\'' + + ", typeId='" + typeId + '\'' + + '}'; + } } 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 6a0b574..807bee1 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 @@ -28,6 +28,8 @@ import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.security.utils.SecurityUtils; import com.google.common.collect.Lists; +import com.sun.org.slf4j.internal.Logger; +import com.sun.org.slf4j.internal.LoggerFactory; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -48,6 +50,8 @@ import javax.annotation.Resource; */ @Service public class CookDishesServiceImpl implements ICookDishesService { + private static final Logger log = LoggerFactory.getLogger(CookDishesServiceImpl.class); + @Autowired private CookDishesMapper cookDishesMapper; @Autowired @@ -107,7 +111,7 @@ public class CookDishesServiceImpl implements ICookDishesService { } return 1; } catch (Exception e) { - throw new ServiceException(e.getMessage()); + throw new ServiceException("操作失败: " + e.getMessage()); } } @@ -145,21 +149,24 @@ public class CookDishesServiceImpl implements ICookDishesService { if (cookDishes.getDishesId() == null && isUpdate) { throw new ServiceException("菜品ID不能为空"); } - if (StringUtils.isNull(cookDishes.getAreaId()) || cookDishes.getAreaId() == 0) { - throw new ServiceException("区域不能为空"); - } - if (StringUtils.isNull(cookDishes.getCanteenId()) || cookDishes.getCanteenId() == 0) { - throw new ServiceException("食堂不能为空"); - } - if (StringUtils.isNull(cookDishes.getStallId()) || cookDishes.getStallId() == 0) { - throw new ServiceException("档口不能为空"); - } +// if (StringUtils.isNull(cookDishes.getAreaId()) || cookDishes.getAreaId() == 0) { +// throw new ServiceException("区域不能为空"); +// } +// if (StringUtils.isNull(cookDishes.getCanteenId()) || cookDishes.getCanteenId() == 0) { +// throw new ServiceException("食堂不能为空"); +// } +// if (StringUtils.isNull(cookDishes.getStallId()) || cookDishes.getStallId() == 0) { +// throw new ServiceException("档口不能为空"); +// } if (StringUtils.isNull(cookDishes.getTypeId()) || cookDishes.getTypeId() == 0) { throw new ServiceException("菜品分类不能为空"); } if (StringUtils.isNull(cookDishes.getPrice()) || cookDishes.getPrice() == 0) { throw new ServiceException("菜品价格不能为空"); } + if (StringUtils.isNull(cookDishes.getWeight()) || cookDishes.getWeight().compareTo(BigDecimal.ZERO) < 0) { + throw new ServiceException("菜品份量不能为空或者小于0"); + } if (cookDishesMapper.checkDishIsExist(cookDishes) > 0) { throw new ServiceException("菜品名称已存在"); } @@ -200,7 +207,7 @@ public class CookDishesServiceImpl implements ICookDishesService { for (CookDishesMaterial i : dishesMaterialList) { NutritionEntity nutritionEntity = cookNutritionMapper.getNutritionEntity(i); if (nutritionEntity != null) { - System.err.println(i.getMaterialId() + ",开始值:" + nutritionEntity.getCalcium()); + log.debug("原料ID: {}, 初始钙含量: {}", i.getMaterialId(), nutritionEntity.getCalcium()); nutritionEntity.setWeight(Double.valueOf(i.getWeight() + "")); nutritionEntity.setBaseWeight(100.0); nutritionEntityList.add(nutritionEntity); @@ -208,10 +215,12 @@ public class CookDishesServiceImpl implements ICookDishesService { } NutritionEntity nutritionEntity = NutritionEntityUtil.countNutrition(nutritionEntityList); if (!nutritionEntityList.isEmpty()) { + log.debug("总和: {}", nutritionEntity.getCalcium()); System.err.println("总和:" + nutritionEntity.getCalcium()); //计算营养成分 countNum(nutritionEntity, Double.valueOf(cookDishes.getWeight() + "")); System.err.println("计算后:" + nutritionEntity.getCalcium()); + log.debug("计算后: {}", nutritionEntity.getCalcium()); cookDishesMapper.updateFinalNutrition(nutritionEntity, cookDishes.getDishesId()); } } @@ -223,11 +232,11 @@ public class CookDishesServiceImpl implements ICookDishesService { try { Double value = (Double) field.get(nutritionEntity); if (value != null) { - System.err.println("先前值----:" + value); + log.debug("先前值----:{}", value); double proportion = Arith.div(weight, 100); value = Arith.mul(value, proportion); field.set(nutritionEntity, value); - System.err.println("后来值++++:" + value); + log.debug("后来值++++:{}", value); } else { field.set(nutritionEntity, 0.00); } @@ -249,178 +258,157 @@ public class CookDishesServiceImpl implements ICookDishesService { } if (CollectionUtils.isEmpty(menuDishesImportDTOS)) { throw new ServiceException("导入新增菜品为空"); - } else { - List sqlDishesNameList = this.cookDishesMapper.selectDishesNameAndCanteenName(); - ImportDishesContext importDishesContext = this.getImportDishesContext(null); - Map areaMap = importDishesContext.getAreaMap(); - Map typeMap = importDishesContext.getTypeMap(); - Map allocStallMap = importDishesContext.getAllocStallMap(); - Map allocCanteenMap = importDishesContext.getAllocCanteenMap(); - Map allocAreaIdMap = importDishesContext.getAllocAreaIdMap(); - Map allocCanteenIdMap = importDishesContext.getAllocCanteenIdMap(); - Map materialMap = importDishesContext.getMaterialMap(); - List salesModeKeyList = Arrays.stream(MenuSalesTypeEnum.values()).map(MenuSalesTypeEnum::key).collect(Collectors.toList()); - List menuMaterialTypeList = Arrays.stream(MenuMaterialTypeEnum.values()).map(MenuMaterialTypeEnum::key).map(Object::toString).collect(Collectors.toList()); - List dishesNameList = Lists.newArrayList(); - List successList = new ArrayList<>(); - List errorList = new ArrayList<>(); + } + // 初始化上下文 + List sqlDishesNameList = cookDishesMapper.selectDishesNameAndCanteenName(); + ImportDishesContext context = getImportDishesContext(null); + Map areaMap = context.getAreaMap(); + Map typeMap = context.getTypeMap(); + Map stallMap = context.getAllocStallMap(); + Map canteenMap = context.getAllocCanteenMap(); + Map areaIdMap = context.getAllocAreaIdMap(); + Map canteenIdMap = context.getAllocCanteenIdMap(); + Map materialMap = context.getMaterialMap(); + List salesModeKeys = Arrays.stream(MenuSalesTypeEnum.values()).map(MenuSalesTypeEnum::key).collect(Collectors.toList()); + List materialTypeKeys = Arrays.stream(MenuMaterialTypeEnum.values()).map(MenuMaterialTypeEnum::key).map(Object::toString).collect(Collectors.toList()); - for (MenuDishesImportDTO data : menuDishesImportDTOS) { - try { - BigDecimal price = data.getPrice(); - if (BigDecimal.ZERO.compareTo(price) > 0) { - data.setFailReason("菜品价格为负数"); - errorList.add(data); - } else { - Integer salesMode = data.getSalesMode(); - if (!salesModeKeyList.contains(salesMode)) { - data.setFailReason("计价方式只能填写1或者2"); - errorList.add(data); - } else { - String dishesTypeName = data.getDishesTypeName(); - if (CharSequenceUtil.isNotBlank(dishesTypeName) && typeMap.get(dishesTypeName) == null) { - data.setFailReason(dishesTypeName + "菜品类别不存在"); - errorList.add(data); - } else { - String dishesName = data.getDishesName(); - String canteenName = data.getCanteenName(); - String stallName = data.getStallName(); - String areaName = data.getAreaName(); - String itemDishesName = Stream.of(data.getDishesName(), areaName, canteenName, stallName).map((x) -> CharSequenceUtil.isBlank(x) ? "*" : x).collect(Collectors.joining("-")); - if (CharSequenceUtil.isBlank(dishesName)) { - data.setFailReason("菜品名称为空"); - errorList.add(data); - } else if (dishesNameList.contains(itemDishesName)) { - data.setFailReason("菜品名称重复"); - errorList.add(data); - } else if (CollUtil.isNotEmpty(sqlDishesNameList) && sqlDishesNameList.contains(itemDishesName)) { - data.setFailReason("菜品名称数据库已存在"); - errorList.add(data); - } else { - String menuMaterialNames = data.getMaterialNames(); - BigDecimal totalWeight = BigDecimal.ZERO; - if (CharSequenceUtil.isNotBlank(menuMaterialNames)) { - String[] materialList = menuMaterialNames.replace(";", ";").split(";"); - String[] var33 = materialList; - int var34 = materialList.length; + List dishesNameList = new ArrayList<>(); + List successList = new ArrayList<>(); + List errorList = new ArrayList<>(); - for (int var35 = 0; var35 < var34; ++var35) { - String material = var33[var35]; - String[] materialSplit = material.split("&"); - if (materialSplit.length != 3) { - data.setFailReason(material + "原料格式不正确"); - errorList.add(data); - break; - } - - String materialName = materialSplit[0]; - String materialType = materialSplit[1]; - String materialWeight = materialSplit[2]; - if (materialMap.get(materialName) == null) { - data.setFailReason(materialName + "原料不存在"); - errorList.add(data); - break; - } - - if (!menuMaterialTypeList.contains(materialType)) { - data.setFailReason(materialType + "原料类型填写错误"); - errorList.add(data); - break; - } - - if (!NumberUtil.isNumber(materialWeight)) { - data.setFailReason(materialWeight + "原料重量不是数字"); - errorList.add(data); - break; - } - - BigDecimal weight = new BigDecimal(materialWeight); - totalWeight = totalWeight.add(weight); - if (BigDecimal.ZERO.compareTo(weight) > 0) { - data.setFailReason(materialWeight + "原料重量为负数"); - errorList.add(data); - } - } - - if (ObjectUtil.isNotEmpty(data.getFailReason())) { - continue; - } - } - - Long areaId; - if (ObjectUtil.isNotEmpty(stallName)) { - AllocStall allocStall = allocStallMap.get(stallName); - if (allocStall == null) { - data.setFailReason("档口名称不存在"); - errorList.add(data); - continue; - } - - if (ObjectUtil.isEmpty(canteenName)) { - data.setFailReason("食堂名称不能为空"); - errorList.add(data); - continue; - } - - areaId = allocStall.getCanteenId(); - AllocCanteen allocCanteen = allocCanteenIdMap.get(areaId); - if (!allocCanteen.getCanteenName().equals(canteenName)) { - data.setFailReason("食堂:" + canteenName + "填写错误"); - errorList.add(data); - continue; - } - } - Double weight = data.getSpecificationOfWeighing(); - if (ObjectUtil.isNotEmpty(weight) && weight != 50 && weight != 100) { - data.setFailReason("规格称重填写错误"); - errorList.add(data); - continue; - } - if (ObjectUtil.isNotEmpty(canteenName)) { - AllocCanteen allocCanteen = allocCanteenMap.get(canteenName); - if (allocCanteen == null) { - data.setFailReason("食堂名称不存在"); - errorList.add(data); - continue; - } - - if (ObjectUtil.isEmpty(areaName)) { - data.setFailReason("区域名称不能为空"); - errorList.add(data); - continue; - } - - areaId = allocCanteen.getAreaId(); - AllocArea allocArea = allocAreaIdMap.get(areaId); - if (!allocArea.getAreaName().equals(areaName)) { - data.setFailReason("区域:" + allocArea.getAreaName() + "填写错误"); - errorList.add(data); - continue; - } - } - - if (ObjectUtil.isNotEmpty(areaName) && !areaMap.containsKey(areaName)) { - data.setFailReason("区域名称不存在"); - errorList.add(data); - } else { - dishesNameList.add(itemDishesName); - successList.add(data); - } - - } - } - } - } - } catch (Exception var43) { - data.setFailReason(var43.getMessage()); + for (MenuDishesImportDTO data : menuDishesImportDTOS) { + try { + // 校验数据 + if (!validateData(data, sqlDishesNameList, dishesNameList, context, salesModeKeys, materialTypeKeys)) { errorList.add(data); + continue; + } + + // 校验区域、食堂、档口 + if (!validateLocation(data, areaMap, stallMap, canteenMap, areaIdMap, canteenIdMap)) { + errorList.add(data); + continue; + } + + // 校验通过 + dishesNameList.add(generateUniqueName(data)); + successList.add(data); + } catch (Exception e) { + data.setFailReason("未知错误: " + e.getMessage()); + errorList.add(data); + } + } + dishesImportCheckResult.setErrorList(errorList); + dishesImportCheckResult.setSuccessList(successList); + return dishesImportCheckResult; + } + + + private boolean validateData(MenuDishesImportDTO data, List sqlDishesNameList, List dishesNameList, + ImportDishesContext context, List salesModeKeys, List materialTypeKeys) { + // 校验价格 + if (data.getPrice().compareTo(BigDecimal.ZERO) <= 0) { + data.setFailReason("菜品价格为负数"); + return false; + } + + // 校验计价方式 + if (!salesModeKeys.contains(data.getSalesMode())) { + data.setFailReason("计价方式只能填写1或者2"); + return false; + } + + // 校验菜品类别 + if (CharSequenceUtil.isNotBlank(data.getDishesTypeName()) && context.getTypeMap().get(data.getDishesTypeName()) == null) { + data.setFailReason(data.getDishesTypeName() + "菜品类别不存在"); + return false; + } + data.setTypeId(String.valueOf(context.getTypeMap().get(data.getDishesTypeName()))); + + // 校验菜品名称 + String uniqueName = generateUniqueName(data); + if (CharSequenceUtil.isBlank(data.getDishesName())) { + data.setFailReason("菜品名称为空"); + return false; + } + if (dishesNameList.contains(uniqueName) || sqlDishesNameList.contains(uniqueName)) { + data.setFailReason("菜品名称重复或已存在"); + return false; + } + + // 校验规格称重 + if (data.getSpecificationOfWeighing() != null && + data.getSpecificationOfWeighing().compareTo(BigDecimal.valueOf(50)) != 0 && + data.getSpecificationOfWeighing().compareTo(BigDecimal.valueOf(100)) != 0) { + data.setFailReason("规格称重填写错误"); + return false; + } + + // 校验原料 + if (!validateMaterials(data, context.getMaterialMap(), materialTypeKeys)) { + return false; + } + + return true; + } + + + private boolean validateMaterials(MenuDishesImportDTO data, Map materialMap, List materialTypeKeys) { + if (CharSequenceUtil.isNotBlank(data.getMaterialNames())) { + String[] materials = data.getMaterialNames().replace(";", ";").split(";"); + for (String material : materials) { + String[] parts = material.split("&"); + if (parts.length != 3 || materialMap.get(parts[0]) == null || !materialTypeKeys.contains(parts[1]) || !NumberUtil.isNumber(parts[2])) { + data.setFailReason("原料格式或数据错误: " + material); + return false; + } + if (new BigDecimal(parts[2]).compareTo(BigDecimal.ZERO) <= 0) { + data.setFailReason("原料重量为负数: " + parts[2]); + return false; } } - - dishesImportCheckResult.setErrorList(errorList); - dishesImportCheckResult.setSuccessList(successList); - return dishesImportCheckResult; } + return true; + } + + private boolean validateLocation(MenuDishesImportDTO data, Map areaMap, Map stallMap, + Map canteenMap, Map areaIdMap, Map canteenIdMap) { + // 校验档口 + if (ObjectUtil.isNotEmpty(data.getStallName())) { + AllocStall stall = stallMap.get(data.getStallName()); + if (stall == null || ObjectUtil.isEmpty(data.getCanteenName()) || + !canteenIdMap.get(stall.getCanteenId()).getCanteenName().equals(data.getCanteenName())) { + data.setFailReason("档口或食堂名称错误"); + return false; + } + data.setStallId(String.valueOf(stall.getStallId())); + } + + // 校验食堂和区域 + if (ObjectUtil.isNotEmpty(data.getCanteenName())) { + AllocCanteen canteen = canteenMap.get(data.getCanteenName()); + if (canteen == null || ObjectUtil.isEmpty(data.getAreaName()) || + !areaIdMap.get(canteen.getAreaId()).getAreaName().equals(data.getAreaName())) { + data.setFailReason("食堂或区域名称错误"); + return false; + } + data.setCanteenId(String.valueOf(canteen.getCanteenId())); + data.setAreaId(String.valueOf(canteen.getAreaId())); + } + + // 校验区域 + if (ObjectUtil.isNotEmpty(data.getAreaName()) && !areaMap.containsKey(data.getAreaName())) { + data.setFailReason("区域名称不存在"); + return false; + } + + return true; + } + + private String generateUniqueName(MenuDishesImportDTO data) { + return Stream.of(data.getDishesName(), data.getAreaName(), data.getCanteenName(), data.getStallName()) + .map(x -> CharSequenceUtil.isBlank(x) ? "*" : x) + .collect(Collectors.joining("-")); } public ImportDishesContext getImportDishesContext(String username) { @@ -485,19 +473,67 @@ public class CookDishesServiceImpl implements ICookDishesService { } @Override - public Boolean newImportDishes(List menuDishesImportDTOS) { + @Transactional(rollbackFor = Exception.class) + public Boolean newImportDishes(List menuDishesImportDTO) { try { String currentTraceId = LogUtil.getCurrentTraceId(); String username = SecurityUtils.getUsername(); this.asyncTaskExecutor.execute(() -> { LogUtil.putLogTraceId(currentTraceId); + this.importDishesDTO(menuDishesImportDTO, username); }); } catch (Exception var7) { throw new ServiceException("批量导入菜品发生错误"); } return true; -// } } + private void importDishesDTO(List menuDishesImportList, String username) { +// try { + // 重新组合数据 + List dishesList = new ArrayList<>(); + ImportDishesContext importDishesContext = this.getImportDishesContext(null); + Map materialMap = importDishesContext.getMaterialMap(); + for (MenuDishesImportDTO menuDishesImportDTO : menuDishesImportList) { + CookDishes dishes = new CookDishes(); + dishes.setCanteenId(menuDishesImportDTO.getCanteenId() == null ? null : Long.valueOf(menuDishesImportDTO.getCanteenId())); + 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.setWeight(menuDishesImportDTO.getWeight() == null ? null : menuDishesImportDTO.getWeight()); + dishes.setWeightDeviation(BigDecimal.ZERO); + dishes.setTypeId(menuDishesImportDTO.getTypeId() == null ? null : Long.valueOf(menuDishesImportDTO.getTypeId())); + dishes.setPungencyDegree(0L); + 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; // 跳过格式不正确的原料 + } + 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); + dishesList.add(dishes); + } + dishesList.forEach(this::insertCookDishes); + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/android/UserMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/android/UserMapper.xml index b33d70a..7c24576 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/android/UserMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/android/UserMapper.xml @@ -18,19 +18,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join account_card ac on ac.user_id = su.user_id left join account_info ai on ai.user_id = su.user_id where ai.del_flag = '0' - - - AND su.update_time >= #{time} - INTERVAL 5 SECOND; - - - - - AND ac.update_time >= #{time} - INTERVAL 5 SECOND; - - AND su.user_id = #{userId} + + + AND su.update_time >= (#{time} - INTERVAL 5 SECOND) + + + + + AND ac.update_time >= (#{time} - INTERVAL 5 SECOND) + + select canteen_id as canteenId, - canteen_name as canteenName + canteen_name as canteenName, + area_id as areaId from basic_canteen where del_flag = '0'