菜品绑定修改

This commit is contained in:
qjq
2024-04-10 16:07:24 +08:00
parent 8dff194ec5
commit 8395ea0bcb
11 changed files with 236 additions and 47 deletions

View File

@ -0,0 +1,17 @@
package cn.iocoder.yudao.module.member.api.diningplates;
import cn.iocoder.yudao.module.member.api.diningplates.dto.DiningPlatesRespDTO;
/**
* @Author:qjq
* @Date:2024/4/10 下午2:36
*/
public interface DiningplatesApi {
/**
* @Description: 根据餐盘查询
* @Author: qjq
* @Date: 2024/4/10 下午2:41
* @return
*/
DiningPlatesRespDTO getQueryByDiningPlatesNum(String diningPlatesNum);
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.member.api.diningplates.dto;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @Author:qjq
* @Date:2024/4/10 下午2:38
*/
@Data
public class DiningPlatesRespDTO {
public final static String USE = "1";
public final static String FREE = "0";
public final static String PAY = "1";
public final static String TO_PAY = "0";
/**
* 餐盘编号
*/
private String diningPlatesNum;
/**
* 用户id
*/
private Long userId;
/**
* 状态0-空闲1-正在使用
*/
private String status;
/**
* 状态:付费标志(0-无付费1-正在付费)
*/
private String payFlag;
/**
* 绑定时间
*/
private LocalDateTime bindingTime;
}

View File

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.member.api.diningplates;
import cn.hutool.core.bean.BeanUtil;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.api.diningplates.dto.DiningPlatesRespDTO;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @Author:qjq
* @Date:2024/4/10 下午2:42
*/
@Service
public class DiningplatesApiImpl implements DiningplatesApi{
@Resource
private DiningPlatesMapper diningPlatesMapper;
/**
* @param diningPlatesNum
* @return
* @Description: 根据餐盘查询
* @Author: qjq
* @Date: 2024/4/10 下午2:41
*/
@Override
public DiningPlatesRespDTO getQueryByDiningPlatesNum(String diningPlatesNum) {
DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(new LambdaQueryWrapperX<DiningPlatesDO>()
.eq(DiningPlatesDO::getDiningPlatesNum, diningPlatesNum)
);
return BeanUtil.toBean(diningPlatesDO, DiningPlatesRespDTO.class);
}
}

View File

@ -2,15 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.user;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppBindCardVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserInfoRespVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileByWeixinReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionDayVo;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppWeekVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*;
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@ -18,17 +10,13 @@ import cn.iocoder.yudao.module.member.dal.dataobject.userexpand.UserExpandDO;
import cn.iocoder.yudao.module.member.service.level.MemberLevelService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.member.service.userexpand.UserExpandService;
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
@ -136,12 +124,20 @@ public class AppMemberUserController {
@RequestParam(value = "orderId",required = false)Long orderId){
return success(userService.getUserHeat(userId,startDate,endDate,orderId));
}
@GetMapping("/heat/dishes")
@Operation(summary = "获得会员热量分析")
public CommonResult<List<DishesNutritionRespDTO>> getUserHeat(@RequestParam(value = "dishesId",required = false)Long dishesId){
return success( userService.getHeatDishes(dishesId));
}
@PutMapping("/bindFace")
@Operation(summary = "绑脸")
public CommonResult<Boolean> bindFace(Long userId,Long faceId){
return success(userService.bindFace(userId,faceId));
}
@GetMapping("/dishes")
public CommonResult<Map<String,String>> getDishesList(@RequestParam("platesNum") String platesNum){
return success(userService.getDishesList(platesNum));
}
}

View File

@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdate
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionDayVo;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppWeekVO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
import javax.validation.Valid;
import java.time.LocalDateTime;
@ -214,10 +215,16 @@ public interface MemberUserService {
AppWeekVO NutritionWeek(String start, String end);
List<Map> getUserHeat(Long userId, LocalDateTime startDate,LocalDateTime endDate, Long orderId);
List<DishesNutritionRespDTO> getHeatDishes(Long dishesId);
/**
* 用户绑定人脸
*/
Boolean bindFace(Long userId,Long faceId);
/**
* @Description:
* @Author: qjq
* @Date: 2024/4/10 下午2:30
* @return
*/
Map<String,String> getDishesList(String platesNum);
}

View File

@ -16,25 +16,21 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileByWeixinReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionDayVo;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionWeekVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppWeekVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*;
import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
import cn.iocoder.yudao.module.member.mq.producer.user.MemberUserProducer;
import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.order.OrderService;
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
import cn.iocoder.yudao.module.member.service.userexpand.UserExpandService;
@ -58,15 +54,11 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
import javax.annotation.Resource;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.WeekFields;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -88,10 +80,12 @@ public class MemberUserServiceImpl implements MemberUserService {
private OrderDetailMapper orderDetailMapper;
@Resource
private DishesNutritionApi dishesNutritionApil;
@Resource
private DiningPlatesMapper diningPlatesMapper;
@Resource
private MemberUserMapper memberUserMapper;
@Resource
private CardService cardService;
@Resource
private SmsCodeApi smsCodeApi;
@ -488,6 +482,13 @@ public class MemberUserServiceImpl implements MemberUserService {
return appWeekVO;
}
@Override
public List<DishesNutritionRespDTO> getHeatDishes(Long dishesId) {
List<DishesNutritionRespDTO> dishesList = dishesNutritionApil.getDishesList(dishesId);
this.computePercentage(dishesList);
return dishesList;
}
@Override
public List<Map> getUserHeat(Long userId, LocalDateTime startDate,LocalDateTime endDate,Long orderId) {
if(ObjectUtil.isNotEmpty(orderId)){
@ -541,8 +542,16 @@ public class MemberUserServiceImpl implements MemberUserService {
.map(x -> new BigDecimal(x.getNutritionNumber()))
// 使用reduce聚合函数,实现累加器
.reduce(BigDecimal.ZERO, BigDecimal::add);
//获取菜品总量总和
BigDecimal reduce = value.stream()
.map(x -> new BigDecimal(x.getDishesNumber()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
//计算营养乘数 菜品总量/100g=营养乘数
BigDecimal divide = reduce.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
BigDecimal bigDecimal = sum1.multiply(divide).setScale(0, RoundingMode.HALF_UP);
dto.setNutritionName(entry.getKey());
dto.setNutritionNumber(sum1.toString());
dto.setNutritionNumber(bigDecimal.toString());
list.add(dto);
}
this.computePercentage(list);
@ -594,4 +603,27 @@ public class MemberUserServiceImpl implements MemberUserService {
memberUserDO.setFaceId(faceId);
return memberUserMapper.updateById(memberUserDO)>0;
}
/**
* @param platesNum
* @return
* @Description:
* @Author: qjq
* @Date: 2024/4/10 下午2:30
*/
@Override
public Map<String,String> getDishesList(String platesNum) {
DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(new LambdaQueryWrapperX<DiningPlatesDO>()
.eq(DiningPlatesDO::getDiningPlatesNum,platesNum));
//获取用户id
Long userId = diningPlatesDO.getUserId();
//获取用户名称
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
BigDecimal moneyByUserId = cardService.getMoneyByUserId(userId);
Map<String, String> map = new HashMap<>();
map.put("name",memberUserDO.getName());
map.put("money", String.valueOf(moneyByUserId));
return map;
}
}

View File

@ -75,7 +75,7 @@ public class DevuceController {
}
@GetMapping("/list")
@Operation(summary = "获得绑定的菜品")
public CommonResult<DishesRespVO> getDevuceList(@RequestParam("sn")String sn) {
public CommonResult<DishesRespVO> getDevuceList(@RequestParam("sn")String sn){
DishesDO devuceList = devuceService.getDevuceList(sn);
return success(BeanUtils.toBean(devuceList, DishesRespVO.class));
}

View File

@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.system.controller.app.devuce.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 设备新增/修改 Request VO")
@Data
@ -13,8 +13,7 @@ public class DevuceSaveReqVO {
@Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11545")
private Long id;
@Schema(description = "设备SN码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "设备SN码不能为空")
private String deviceSn;
@Schema(description = "菜品id", example = "17970")
@ -25,4 +24,13 @@ public class DevuceSaveReqVO {
@NotNull(message = "是否绑定不能为空")
private Boolean bind;
@Schema(description = "菜品总重量")
private BigDecimal totalWeight;
@Schema(description = "变化重量")
private BigDecimal diff;
@Schema(description = "剩余重量")
private BigDecimal remWeight;
}

View File

@ -1,11 +1,12 @@
package cn.iocoder.yudao.module.system.dal.dataobject.devuce;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.math.BigDecimal;
/**
* 设备 DO
@ -41,5 +42,17 @@ public class DevuceDO extends BaseDO {
* 是否绑定
*/
private Boolean bind;
/**
* 菜品总重量
*/
private BigDecimal totalWeight;
/**
* 菜品变化重量
*/
private BigDecimal diff;
/**
* 菜品剩余重量
*/
private BigDecimal remWeight;
}

View File

@ -54,7 +54,14 @@ public interface DevuceService {
* @return 设备分页
*/
PageResult<DevuceDO> getDevucePage(DevucePageReqVO pageReqVO);
/**
* @Description: 设备绑定菜品,或计算菜品重量与剩余重量
* @Author: qjq
* @Date: 2024/4/10 下午1:40
* @return
*/
DishesDO getDevuceList(String sn);
List<DishesDO> getDishesList(Long carteenId,Long dishecType);
/**
* @Description: 获取菜品分类
@ -63,4 +70,7 @@ public interface DevuceService {
* @return
*/
List<DishesTypeDO> getDishesTypeList(Long carteenId);
}

View File

@ -1,8 +1,8 @@
package cn.iocoder.yudao.module.system.service.devuce;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.app.devuce.vo.DevucePageReqVO;
import cn.iocoder.yudao.module.system.controller.app.devuce.vo.DevuceSaveReqVO;
@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.stream.Collectors;
@ -38,10 +39,12 @@ public class DevuceServiceImpl implements DevuceService {
private DishesMapper dishesMapper;
@Resource
private DishesTypeMapper dishesTypeMapper;
@Resource
private HttpServletRequest httpServletRequest;
@Override
public Long createDevuce(DevuceSaveReqVO createReqVO) {
// 插入
DevuceDO devuce = BeanUtils.toBean(createReqVO, DevuceDO.class);
DevuceDO devuce = BeanUtil.toBean(createReqVO, DevuceDO.class);
devuceMapper.insert(devuce);
// 返回
return devuce.getId();
@ -51,6 +54,37 @@ public class DevuceServiceImpl implements DevuceService {
@Override
public void updateDevuce(DevuceSaveReqVO updateReqVO) {
// 校验存在
/*if (ObjUtil.isNotEmpty(updateReqVO.getRemWeight())
|| ObjUtil.isNotEmpty(updateReqVO.getTotalWeight())
|| ObjUtil.isNotEmpty(updateReqVO.getDiff())) {
//进行计算总量数据
if (ObjUtil.isEmpty(updateReqVO.getDiff())) {
//第一次绑定
updateReqVO.setRemWeight(updateReqVO.getTotalWeight());
bind(updateReqVO);
return updateReqVO;
} else {
BigDecimal remWeight = updateReqVO.getRemWeight();
BigDecimal diff = updateReqVO.getDiff();
//下一次剩余的重量
BigDecimal subtract = remWeight.subtract(diff);
updateReqVO.setRemWeight(subtract);
bind(updateReqVO);
return updateReqVO;
}
}else{
bind(updateReqVO);
return null;
}*/
try {
String header = httpServletRequest.getHeader("Authorization");
updateReqVO.setDeviceSn(header);
bind(updateReqVO);
} catch (Exception e) {
throw exception(2000_10_001,"无法获取设备编码");
}
}
public void bind(DevuceSaveReqVO updateReqVO){
if (devuceMapper.selectOne(new LambdaQueryWrapperX<DevuceDO>()
.eqIfPresent(DevuceDO::getDeviceSn,updateReqVO.getDeviceSn())) == null) {
createDevuce(updateReqVO);
@ -64,7 +98,6 @@ public class DevuceServiceImpl implements DevuceService {
createDevuce(updateReqVO);
}
}
@Override
public void deleteDevuce(Long id) {
// 校验存在
@ -134,4 +167,6 @@ public class DevuceServiceImpl implements DevuceService {
public List<DishesTypeDO> getDishesTypeList(Long carteenId) {
return dishesTypeMapper.selectList(new LambdaQueryWrapperX<DishesTypeDO>().eq(DishesTypeDO::getCarteenId,carteenId));
}
}