This commit is contained in:
zengtao01
2024-04-08 15:46:57 +08:00
parent 15837f5260
commit 0a1ebeaac0
8 changed files with 128 additions and 26 deletions

View File

@ -34,10 +34,16 @@ public class AppDiningPlatesController {
return success(BeanUtils.toBean(pageResult, DiningPlatesRespVO.class)); return success(BeanUtils.toBean(pageResult, DiningPlatesRespVO.class));
} }
@GetMapping("/bind") @GetMapping("/bindByCard")
@Operation(summary = "绑定餐盘") @Operation(summary = "打卡绑定餐盘")
public CommonResult<Boolean> bind(String diningPlatesNum,String cardId) { public CommonResult<Boolean> bindByCard(String diningPlatesNum,String cardId) {
return success(diningPlatesService.bind(diningPlatesNum,cardId)); return success(diningPlatesService.bind(diningPlatesNum,cardId));
} }
@GetMapping("/bindByFace")
@Operation(summary = "人脸绑定餐盘")
public CommonResult<Boolean> bindByFace(String diningPlatesNum,Long faceId) {
return success(diningPlatesService.bindByFace(diningPlatesNum,faceId));
}
} }

View File

@ -2,7 +2,15 @@ package cn.iocoder.yudao.module.member.controller.app.user;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*; 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.convert.user.MemberUserConvert; 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.level.MemberLevelDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@ -11,8 +19,14 @@ import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; 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 javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
@ -97,24 +111,30 @@ public class AppMemberUserController {
@GetMapping("/nutritionDay") @GetMapping("/nutritionDay")
@Operation(summary = "营养日报") @Operation(summary = "营养日报")
public CommonResult<List<AppNutritionDayVo>> nutritionDay(String time){ public CommonResult<List<AppNutritionDayVo>> nutritionDay(String start, String end){
List<AppNutritionDayVo> appNutritionDayVos = userService.nutritionDay(time); List<AppNutritionDayVo> appNutritionDayVos = userService.nutritionDay(start,end);
return success(appNutritionDayVos); return success(appNutritionDayVos);
} }
@GetMapping("/NutritionWeek") @GetMapping("/NutritionWeek")
@Operation(summary = "营养周报") @Operation(summary = "营养周报")
public CommonResult<List<AppNutritionWeekVO>> NutritionWeek(String start, String end){ public CommonResult<AppWeekVO> NutritionWeek(String start, String end){
List<AppNutritionWeekVO> appNutritionWeekVOS = userService.NutritionWeek(start, end); return success(userService.NutritionWeek(start, end));
return success(appNutritionWeekVOS);
} }
@GetMapping("/heat") @GetMapping("/heat")
@Operation(summary = "获得会员热量分析") @Operation(summary = "获得会员热量分析")
public CommonResult<List<Map>> getUserHeat(@RequestParam(value = "userId",required = false) Long userId, public CommonResult<List<Map>> getUserHeat(@RequestParam(value = "userId",required = false) Long userId,
@RequestParam(value = "startDate",required = false) LocalDateTime startDate, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam(value = "startDate",required = false) LocalDateTime startDate,
@RequestParam(value = "endDate",required = false) LocalDateTime endDate, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam(value = "endDate",required = false) LocalDateTime endDate,
@RequestParam(value = "orderId",required = false)Long orderId){ @RequestParam(value = "orderId",required = false)Long orderId){
return success(userService.getUserHeat(userId,startDate,endDate,orderId)); return success(userService.getUserHeat(userId,startDate,endDate,orderId));
} }
@PutMapping("/bindFace")
@Operation(summary = "绑脸")
public CommonResult<Boolean> bindFace(Long userId,Long faceId){
return success(userService.bindFace(userId,faceId));
}
} }

View File

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.member.controller.app.user.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* @author zt
* @description <description class purpose>
* @since 2024/4/2
*/
@Data
public class AppWeekVO {
@Schema(description = "用餐次数")
private Integer num;
@Schema(description = "周报")
private List<AppNutritionWeekVO> list;
}

View File

@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
@ -93,4 +94,7 @@ public interface MemberUserMapper extends BaseMapperX<MemberUserDO> {
return update(null, lambdaUpdateWrapper); return update(null, lambdaUpdateWrapper);
} }
@Delete("delete from user_face where user_id = #{faceId}")
void deleteFace(Long faceId);
} }

View File

@ -82,4 +82,5 @@ public interface DiningPlatesService {
*/ */
Boolean bind(String diningPlatesNum,String cardId); Boolean bind(String diningPlatesNum,String cardId);
Boolean bindByFace(String diningPlatesNum,Long faceId);
} }

View File

@ -152,4 +152,32 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
stringRedisTemplate.opsForValue().set(diningPlatesNum,"0"); stringRedisTemplate.opsForValue().set(diningPlatesNum,"0");
return i>0; return i>0;
} }
@Override
public Boolean bindByFace(String diningPlatesNum, Long faceId) {
DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(Wrappers.<DiningPlatesDO>lambdaQuery()
.eq(DiningPlatesDO::getDiningPlatesNum, diningPlatesNum)
.last("limit 1"));
if(diningPlatesDO.getUserId()!=null){
throw new ServiceException(20001,"餐盘已被绑定");
}
MemberUserDO memberUserDO = memberUserMapper.selectOne(Wrappers.<MemberUserDO>lambdaQuery()
.eq(MemberUserDO::getFaceId, faceId)
.last("limit 1"));
diningPlatesDO.setUserId(memberUserDO.getId());
diningPlatesDO.setStatus(DiningPlatesDO.USE);
diningPlatesDO.setBindingTime(LocalDateTime.now());
int i = diningPlatesMapper.updateById(diningPlatesDO);
//创建初始订单
DishOrderDO dishOrderDO = new DishOrderDO();
dishOrderDO.setDiningPlatesNum(diningPlatesNum);
dishOrderDO.setOrderStatus(DishOrderDO.INCOMPLETE);
dishOrderDO.setUserId(memberUserDO.getId());
dishOrderMapper.insert(dishOrderDO);
//设置总价
stringRedisTemplate.opsForValue().set(diningPlatesNum,"0");
return i>0;
}
} }

View File

@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdate
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; 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.AppMemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionDayVo; 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.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import javax.validation.Valid; import javax.validation.Valid;
@ -207,13 +207,17 @@ public interface MemberUserService {
/** /**
* 营养日报 * 营养日报
*/ */
List<AppNutritionDayVo> nutritionDay(String time); List<AppNutritionDayVo> nutritionDay(String start, String end);
/** /**
* 营养周报 * 营养周报
*/ */
List<AppNutritionWeekVO> NutritionWeek(String start, String end); AppWeekVO NutritionWeek(String start, String end);
List<Map> getUserHeat(Long userId, LocalDateTime startDate,LocalDateTime endDate, Long orderId); List<Map> getUserHeat(Long userId, LocalDateTime startDate,LocalDateTime endDate, Long orderId);
/**
* 用户绑定人脸
*/
Boolean bindFace(Long userId,Long faceId);
} }

View File

@ -27,6 +27,7 @@ import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdate
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO; 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.AppNutritionDayVo;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionWeekVO; 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.convert.auth.AuthConvert; import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
@ -401,11 +402,11 @@ public class MemberUserServiceImpl implements MemberUserService {
} }
@Override @Override
public List<AppNutritionDayVo> nutritionDay(String time) { public List<AppNutritionDayVo> nutritionDay(String start, String end) {
List<AppNutritionDayVo> result = new ArrayList<>(); List<AppNutritionDayVo> result = new ArrayList<>();
//获取日期的订单 //获取日期的订单
String start = time+" 00:00:00"; //String start = time+" 00:00:00";
String end = time+" 23:59:59"; //String end = time+" 23:59:59";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(start, formatter); LocalDateTime startTime = LocalDateTime.parse(start, formatter);
@ -459,15 +460,16 @@ public class MemberUserServiceImpl implements MemberUserService {
} }
@Override @Override
public List<AppNutritionWeekVO> NutritionWeek(String start, String end) { public AppWeekVO NutritionWeek(String start, String end) {
AppWeekVO appWeekVO = new AppWeekVO();
List<AppNutritionWeekVO> result = new ArrayList<>(); List<AppNutritionWeekVO> result = new ArrayList<>();
//获取日期的订单 //获取日期的订单
String newStart = start + " 00:00:00"; //String newStart = start + " 00:00:00";
String newEnd = end + " 23:59:59"; //String newEnd = end + " 23:59:59";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime startTime = LocalDateTime.parse(newStart, formatter); LocalDateTime startTime = LocalDateTime.parse(start, formatter);
LocalDateTime endTime = LocalDateTime.parse(newEnd, formatter); LocalDateTime endTime = LocalDateTime.parse(end, formatter);
List<DishOrderDO> dishOrderDOS = orderService.getDishOrderByTime(startTime, endTime); List<DishOrderDO> dishOrderDOS = orderService.getDishOrderByTime(startTime, endTime);
WeekFields weekFields = WeekFields.ISO; WeekFields weekFields = WeekFields.ISO;
@ -481,11 +483,13 @@ public class MemberUserServiceImpl implements MemberUserService {
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(ids); List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(ids);
mondayVO.setDetailList(orderDetailDOS); mondayVO.setDetailList(orderDetailDOS);
mondayVO.setIntake(orderDetailDOS.stream().map(OrderDetailDO::getHeat).reduce(0d, Double::sum)); mondayVO.setIntake(orderDetailDOS.stream().filter(vo->vo!=null && vo.getHeat()!=null).map(OrderDetailDO::getHeat).reduce(0d, Double::sum));
} }
result.add(mondayVO); result.add(mondayVO);
} }
return result; appWeekVO.setNum(dishOrderDOS.size());
appWeekVO.setList(result);
return appWeekVO;
} }
@Override @Override
@ -519,7 +523,7 @@ public class MemberUserServiceImpl implements MemberUserService {
.inIfPresent(OrderDetailDO::getOrderId, collect)); .inIfPresent(OrderDetailDO::getOrderId, collect));
//热量求和统计方便 科学膳食小建议 //热量求和统计方便 科学膳食小建议
double sum = orderDetailDOS double sum = orderDetailDOS
.stream() .stream().filter(vo->vo!=null && vo.getHeat()!=null)
.mapToDouble(OrderDetailDO::getHeat).sum(); .mapToDouble(OrderDetailDO::getHeat).sum();
//获取菜品id //获取菜品id
List<Long> collect1 = orderDetailDOS.stream() List<Long> collect1 = orderDetailDOS.stream()
@ -580,4 +584,18 @@ public class MemberUserServiceImpl implements MemberUserService {
} }
} }
} }
@Override
public Boolean bindFace(Long userId,Long faceId) {
MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
if(memberUserDO == null){
throw new ServerException(20003,"用户不存在");
}
if(memberUserDO.getFaceId()!=null){
memberUserMapper.deleteFace(memberUserDO.getFaceId());
}
memberUserDO.setFaceId(faceId);
return memberUserMapper.updateById(memberUserDO)>0;
}
} }