获取菜品原料反算接口
This commit is contained in:
parent
6ea3015204
commit
8a53fee0aa
|
|
@ -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<DishesConvertVO> dishesConvert(@RequestBody @Valid List<DishesConvertDTO> list) {
|
||||
return this.cookDishesService.dishesConvert(list);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -166,4 +166,6 @@ public interface CookDishesMapper {
|
|||
AppletDishesDetailVO selectDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO);
|
||||
|
||||
List<CookMaterialBasVO> getCookMaterialById(Long dishesId);
|
||||
|
||||
List<CookDishesMaterialModel> listDishesMaterial(@Param("dishesIdList") List<Long> dishesIdList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<MenuDishesImportDTO> request);
|
||||
|
||||
public AppletDishesDetailVO getDishesDetailByDishesId(AppletDishesDetailDTO dishesDetailDTO);
|
||||
|
||||
public List<DishesConvertVO> dishesConvert(List<DishesConvertDTO> content);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<DishesConvertVO> dishesConvert(List<DishesConvertDTO> content) {
|
||||
if (CollectionUtils.isEmpty(content)) {
|
||||
throw new ServiceException("菜品列表不能为空");
|
||||
}
|
||||
List<Long> dishesIdList = content.stream().map(DishesConvertDTO::getDishesId).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(dishesIdList)) {
|
||||
throw new ServiceException("菜品ID列表不能为空");
|
||||
}
|
||||
List<CookDishesMaterialModel> 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<Long, BigDecimal> 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<Long, CookDishesMaterialModel> collect = (Map) cookDishesMaterialModelList.stream().collect(Collectors.toMap(CookDishesMaterialModel::getMaterialId, Function.identity(), (k1, k2) -> {
|
||||
return k1;
|
||||
}));
|
||||
List<DishesConvertVO> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -18,6 +18,8 @@ public interface ImsUnitMapper {
|
|||
*/
|
||||
public ImsUnit selectImsUnitByUnitId(Long unitId);
|
||||
|
||||
public ImsUnit selectImsUnitByUnitName(String unitName);
|
||||
|
||||
/**
|
||||
* 查询计量单位列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
</select>
|
||||
|
||||
<select id="listDishesMaterial" resultType="com.bonus.canteen.core.cook.domain.CookDishesMaterialModel">
|
||||
SELECT a.dishes_id,
|
||||
a.dishes_name,
|
||||
b.material_id,
|
||||
c.material_name,
|
||||
b.weight,
|
||||
d.edible,
|
||||
c.size
|
||||
FROM cook_dishes a
|
||||
LEFT JOIN cook_dishes_material b ON b.dishes_id = a.dishes_id
|
||||
LEFT JOIN cook_material c ON c.material_id = b.material_id
|
||||
LEFT JOIN cook_nutrition d ON d.nutrition_id = c.nutrition_id
|
||||
WHERE
|
||||
b.material_id IS NOT NULL
|
||||
AND a.dishes_id IN
|
||||
<foreach collection="dishesIdList" item="dishesId" separator="," open="(" close=")">
|
||||
#{dishesId}
|
||||
</foreach>
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -32,6 +32,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
where unit_id = #{unitId}
|
||||
</select>
|
||||
|
||||
<select id="selectImsUnitByUnitName" parameterType="Long" resultMap="ImsUnitResult">
|
||||
<include refid="selectImsUnitVo"/>
|
||||
where unit_name = #{unitName}
|
||||
</select>
|
||||
|
||||
<select id="selectImsUnitByUnitIds" resultMap="ImsUnitResult">
|
||||
<include refid="selectImsUnitVo"/>
|
||||
where unit_id in
|
||||
|
|
|
|||
Loading…
Reference in New Issue