From 8a53fee0aa1e3031eacc27c2ae8fc7ac943b6cfe Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Wed, 16 Jul 2025 10:36:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=8F=9C=E5=93=81=E5=8E=9F?= =?UTF-8?q?=E6=96=99=E5=8F=8D=E7=AE=97=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cook/controller/CookDishesController.java | 9 ++- .../cook/domain/CookDishesMaterialModel.java | 29 +++++++++ .../core/cook/dto/DishesConvertDTO.java | 20 ++++++ .../core/cook/mapper/CookDishesMapper.java | 2 + .../core/cook/service/ICookDishesService.java | 4 ++ .../service/impl/CookDishesServiceImpl.java | 61 +++++++++++++++++++ .../canteen/core/cook/vo/DishesConvertVO.java | 34 +++++++++++ .../core/ims/mapper/ImsUnitMapper.java | 2 + .../mapper/cook/CookDishesMapper.xml | 20 ++++++ .../resources/mapper/ims/ImsUnitMapper.xml | 5 ++ 10 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/domain/CookDishesMaterialModel.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/DishesConvertDTO.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/vo/DishesConvertVO.java 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 727903a..d80f2d9 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 @@ -4,12 +4,13 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import com.bonus.canteen.core.cook.dto.DishesConvertDTO; import com.bonus.canteen.core.cook.dto.MenuDishesImportDTO; +import com.bonus.canteen.core.cook.vo.DishesConvertVO; import com.bonus.common.log.enums.OperaType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import com.bonus.common.log.annotation.SysLog; import com.bonus.canteen.core.cook.domain.CookDishes; @@ -120,4 +121,10 @@ public class CookDishesController extends BaseController { } return AjaxResult.success(); } + + @PostMapping({"/dishes/convert"}) + @ApiOperation("获取菜品原料反算接口") + public List dishesConvert(@RequestBody @Valid List list) { + return this.cookDishesService.dishesConvert(list); + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/domain/CookDishesMaterialModel.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/domain/CookDishesMaterialModel.java new file mode 100644 index 0000000..e7f4fd8 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/domain/CookDishesMaterialModel.java @@ -0,0 +1,29 @@ +package com.bonus.canteen.core.cook.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.math.BigDecimal; + +@Data +public class CookDishesMaterialModel { + @ApiModelProperty("菜品id") + private Long dishesId; + @ApiModelProperty("菜品id") + private Long baseDishesId; + @ApiModelProperty("菜品") + private String dishesName; + @ApiModelProperty("原料id") + private Long materialId; + @ApiModelProperty("原料") + private String materialName; + @ApiModelProperty("原重量(g)") + private BigDecimal weight; + @ApiModelProperty("可食部分%") + private BigDecimal edible; + @ApiModelProperty("计算后重量(g)") + private BigDecimal calWeight; + @ApiModelProperty("预留比例(0-100)") + private Integer reserveRate; + @ApiModelProperty("规格") + private String size; +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/DishesConvertDTO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/DishesConvertDTO.java new file mode 100644 index 0000000..843cbe8 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/dto/DishesConvertDTO.java @@ -0,0 +1,20 @@ +package com.bonus.canteen.core.cook.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +@Data +public class DishesConvertDTO { + @ApiModelProperty("菜品id") + private @NotNull(message = "请选择菜品") + Long dishesId; + + @ApiModelProperty("菜品数量") + private @Min(value = 1L, message = "菜品份数不能小于1") @NotNull(message = "请填写菜品数量") + Integer dishesNum; + + @ApiModelProperty("规格") + private Long sizeType; +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/mapper/CookDishesMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/mapper/CookDishesMapper.java index 56be3e4..69cc8c1 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/mapper/CookDishesMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/mapper/CookDishesMapper.java @@ -166,4 +166,6 @@ public interface CookDishesMapper { AppletDishesDetailVO selectDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO); List getCookMaterialById(Long dishesId); + + List listDishesMaterial(@Param("dishesIdList") List dishesIdList); } 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 9014fb9..35103bd 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 @@ -3,9 +3,11 @@ package com.bonus.canteen.core.cook.service; import java.util.List; import com.bonus.canteen.core.cook.domain.CookDishes; import com.bonus.canteen.core.cook.dto.AppletDishesDetailDTO; +import com.bonus.canteen.core.cook.dto.DishesConvertDTO; 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.canteen.core.cook.vo.DishesConvertVO; import com.bonus.common.core.web.domain.AjaxResult; import org.springframework.web.multipart.MultipartFile; @@ -81,4 +83,6 @@ public interface ICookDishesService { AjaxResult newImportDishes(List request); public AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO); + + public List dishesConvert(List content); } 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 5b7f9e2..48880b9 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 @@ -2,18 +2,25 @@ package com.bonus.canteen.core.cook.service.impl; import java.lang.reflect.Field; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import cn.hutool.core.bean.BeanUtil; 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.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.bonus.canteen.core.common.utils.EasyExcelUtil; import com.bonus.canteen.core.common.utils.LogUtil; import com.bonus.canteen.core.cook.domain.*; import com.bonus.canteen.core.cook.dto.AppletDishesDetailDTO; +import com.bonus.canteen.core.cook.dto.DishesConvertDTO; import com.bonus.canteen.core.cook.dto.DishesImportCheckResult; import com.bonus.canteen.core.cook.dto.MenuDishesImportDTO; import com.bonus.canteen.core.cook.enums.CookMealTypeEnum; @@ -23,6 +30,9 @@ import com.bonus.canteen.core.cook.mapper.CookCollectionDishesMapper; import com.bonus.canteen.core.cook.mapper.CookNutritionMapper; import com.bonus.canteen.core.cook.vo.AppletDishesDetailVO; import com.bonus.canteen.core.cook.vo.AppletDishesSizeV2VO; +import com.bonus.canteen.core.cook.vo.DishesConvertVO; +import com.bonus.canteen.core.ims.domain.ImsUnit; +import com.bonus.canteen.core.ims.mapper.ImsUnitMapper; import com.bonus.canteen.core.utils.Arith; import com.bonus.canteen.core.utils.NutritionEntity; import com.bonus.canteen.core.utils.NutritionEntityUtil; @@ -63,6 +73,8 @@ public class CookDishesServiceImpl implements ICookDishesService { private CookNutritionMapper cookNutritionMapper; @Autowired private CookCollectionDishesMapper cookCollectionDishesMapper; + @Autowired + private ImsUnitMapper imsUnitMapper; @Lazy @Resource( name = "smartCanteenTaskExecutor" @@ -629,4 +641,53 @@ public class CookDishesServiceImpl implements ICookDishesService { } } + public List dishesConvert(List content) { + if (CollectionUtils.isEmpty(content)) { + throw new ServiceException("菜品列表不能为空"); + } + List dishesIdList = content.stream().map(DishesConvertDTO::getDishesId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(dishesIdList)) { + throw new ServiceException("菜品ID列表不能为空"); + } + List cookDishesMaterialModelList = this.cookDishesMapper.listDishesMaterial(dishesIdList); + if (CollectionUtils.isEmpty(cookDishesMaterialModelList)) { + throw new ServiceException("原料列表不能为空"); + } + Iterator var21 = cookDishesMaterialModelList.iterator(); + while(true) { + while (var21.hasNext()) { + CookDishesMaterialModel menuDishesMaterialModel = (CookDishesMaterialModel) var21.next(); + Iterator var26 = content.iterator(); + while (var26.hasNext()) { + DishesConvertDTO drpDishesConvertDTO = (DishesConvertDTO) var26.next(); + Long dishesId = drpDishesConvertDTO.getDishesId(); + if (ObjectUtil.equal(menuDishesMaterialModel.getDishesId(), dishesId)) { + menuDishesMaterialModel.setCalWeight(menuDishesMaterialModel.getWeight().multiply(new BigDecimal(drpDishesConvertDTO.getDishesNum()))); + menuDishesMaterialModel.setCalWeight(menuDishesMaterialModel.getCalWeight().divide(menuDishesMaterialModel.getEdible().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP), 0, RoundingMode.HALF_UP)); + break; + } + } + } + Map materialTotalWeightMap = (Map) cookDishesMaterialModelList.stream().collect(Collectors.groupingBy(CookDishesMaterialModel::getMaterialId, Collectors.reducing(BigDecimal.ZERO, CookDishesMaterialModel::getCalWeight, BigDecimal::add))); + ImsUnit drpUnit = this.imsUnitMapper.selectImsUnitByUnitName("公斤"); + if (ObjectUtil.isEmpty(drpUnit)) { + throw new ServiceException("公斤列表为空"); + } + Map collect = (Map) cookDishesMaterialModelList.stream().collect(Collectors.toMap(CookDishesMaterialModel::getMaterialId, Function.identity(), (k1, k2) -> { + return k1; + })); + List resultList = new ArrayList(); + Iterator var29 = collect.values().iterator(); + while (var29.hasNext()) { + CookDishesMaterialModel menuDishesMaterialModel = (CookDishesMaterialModel) var29.next(); + DishesConvertVO drpDishesConvertVO = new DishesConvertVO(); + BeanUtil.copyProperties(menuDishesMaterialModel, drpDishesConvertVO, new String[0]); + drpDishesConvertVO.setUnitId(drpUnit.getUnitId()); + drpDishesConvertVO.setUnitName(drpUnit.getUnitName()); + drpDishesConvertVO.setTotalConvertWeight(((BigDecimal) materialTotalWeightMap.get(menuDishesMaterialModel.getMaterialId())).divide(drpUnit.getRate(), 3, RoundingMode.HALF_UP)); + resultList.add(drpDishesConvertVO); + } + return resultList; + } + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/vo/DishesConvertVO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/vo/DishesConvertVO.java new file mode 100644 index 0000000..dbe93d1 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/cook/vo/DishesConvertVO.java @@ -0,0 +1,34 @@ +package com.bonus.canteen.core.cook.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DishesConvertVO { + @ApiModelProperty("原料id") + private Long materialId; + @ApiModelProperty("原料名称") + private String materialName; + @ApiModelProperty("单位id") + private Long unitId; + @ApiModelProperty("单位") + private String unitName; + @ApiModelProperty("可食用部分") + private BigDecimal edible; + @ApiModelProperty("系统分解总重量(kg)") + private BigDecimal totalConvertWeight; + @ApiModelProperty("库存数") + private BigDecimal inventoryNum; + @ApiModelProperty("菜品id") + private Long baseDishesId; + @ApiModelProperty("菜品名称") + private String dishesName; + @ApiModelProperty("预留比例(0-100)") + private Integer reserveRate; + @ApiModelProperty("档口id") + private Long stallId; + @ApiModelProperty("规格") + private String size; +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/ims/mapper/ImsUnitMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/ims/mapper/ImsUnitMapper.java index 7e199ee..9a670cb 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/ims/mapper/ImsUnitMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/ims/mapper/ImsUnitMapper.java @@ -18,6 +18,8 @@ public interface ImsUnitMapper { */ public ImsUnit selectImsUnitByUnitId(Long unitId); + public ImsUnit selectImsUnitByUnitName(String unitName); + /** * 查询计量单位列表 * 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 7393f74..164dc33 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 @@ -650,4 +650,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN cook_nutrition cn ON cn.nutrition_id = cm.nutrition_id WHERE cdm.dishes_id = #{dishesId} + + \ No newline at end of file diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/ims/ImsUnitMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/ims/ImsUnitMapper.xml index 1d804f1..d99d444 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/ims/ImsUnitMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/ims/ImsUnitMapper.xml @@ -32,6 +32,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where unit_id = #{unitId} + +