From 0a1ebeaac0dfffe638ce52b957197f73e50502ca Mon Sep 17 00:00:00 2001 From: zengtao01 Date: Mon, 8 Apr 2024 15:46:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E8=84=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppDiningPlatesController.java | 12 ++++-- .../app/user/AppMemberUserController.java | 38 +++++++++++++----- .../controller/app/user/vo/AppWeekVO.java | 21 ++++++++++ .../dal/mysql/user/MemberUserMapper.java | 4 ++ .../diningplates/DiningPlatesService.java | 1 + .../diningplates/DiningPlatesServiceImpl.java | 28 +++++++++++++ .../service/user/MemberUserService.java | 10 +++-- .../service/user/MemberUserServiceImpl.java | 40 ++++++++++++++----- 8 files changed, 128 insertions(+), 26 deletions(-) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppWeekVO.java diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/diningplates/AppDiningPlatesController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/diningplates/AppDiningPlatesController.java index 78bc73d0..6f62400d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/diningplates/AppDiningPlatesController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/diningplates/AppDiningPlatesController.java @@ -34,10 +34,16 @@ public class AppDiningPlatesController { return success(BeanUtils.toBean(pageResult, DiningPlatesRespVO.class)); } - @GetMapping("/bind") - @Operation(summary = "绑定餐盘") - public CommonResult bind(String diningPlatesNum,String cardId) { + @GetMapping("/bindByCard") + @Operation(summary = "打卡绑定餐盘") + public CommonResult bindByCard(String diningPlatesNum,String cardId) { return success(diningPlatesService.bind(diningPlatesNum,cardId)); } + @GetMapping("/bindByFace") + @Operation(summary = "人脸绑定餐盘") + public CommonResult bindByFace(String diningPlatesNum,Long faceId) { + return success(diningPlatesService.bindByFace(diningPlatesNum,faceId)); + } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java index c3e59fff..f2f93af7 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java @@ -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.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.dal.dataobject.level.MemberLevelDO; 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.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.*; +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.validation.Valid; @@ -97,24 +111,30 @@ public class AppMemberUserController { @GetMapping("/nutritionDay") @Operation(summary = "营养日报") - public CommonResult> nutritionDay(String time){ - List appNutritionDayVos = userService.nutritionDay(time); + public CommonResult> nutritionDay(String start, String end){ + List appNutritionDayVos = userService.nutritionDay(start,end); return success(appNutritionDayVos); } @GetMapping("/NutritionWeek") @Operation(summary = "营养周报") - public CommonResult> NutritionWeek(String start, String end){ - List appNutritionWeekVOS = userService.NutritionWeek(start, end); - return success(appNutritionWeekVOS); + public CommonResult NutritionWeek(String start, String end){ + return success(userService.NutritionWeek(start, end)); } @GetMapping("/heat") @Operation(summary = "获得会员热量分析") public CommonResult> getUserHeat(@RequestParam(value = "userId",required = false) Long userId, - @RequestParam(value = "startDate",required = false) LocalDateTime startDate, - @RequestParam(value = "endDate",required = false) LocalDateTime endDate, + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam(value = "startDate",required = false) LocalDateTime startDate, + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam(value = "endDate",required = false) LocalDateTime endDate, @RequestParam(value = "orderId",required = false)Long orderId){ return success(userService.getUserHeat(userId,startDate,endDate,orderId)); } + + @PutMapping("/bindFace") + @Operation(summary = "绑脸") + public CommonResult bindFace(Long userId,Long faceId){ + return success(userService.bindFace(userId,faceId)); + } + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppWeekVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppWeekVO.java new file mode 100644 index 00000000..2b24dd1d --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppWeekVO.java @@ -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 + * @since 2024/4/2 + */ +@Data +public class AppWeekVO { + + @Schema(description = "用餐次数") + private Integer num; + + @Schema(description = "周报") + private List list; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java index 3f871020..5a692845 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java @@ -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.dal.dataobject.user.MemberUserDO; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -93,4 +94,7 @@ public interface MemberUserMapper extends BaseMapperX { return update(null, lambdaUpdateWrapper); } + @Delete("delete from user_face where user_id = #{faceId}") + void deleteFace(Long faceId); + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java index fde76663..7d332b9b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java @@ -82,4 +82,5 @@ public interface DiningPlatesService { */ Boolean bind(String diningPlatesNum,String cardId); + Boolean bindByFace(String diningPlatesNum,Long faceId); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java index a8d3bb2c..18e03f73 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java @@ -152,4 +152,32 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { stringRedisTemplate.opsForValue().set(diningPlatesNum,"0"); return i>0; } + + @Override + public Boolean bindByFace(String diningPlatesNum, Long faceId) { + DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(Wrappers.lambdaQuery() + .eq(DiningPlatesDO::getDiningPlatesNum, diningPlatesNum) + .last("limit 1")); + if(diningPlatesDO.getUserId()!=null){ + throw new ServiceException(20001,"餐盘已被绑定"); + } + MemberUserDO memberUserDO = memberUserMapper.selectOne(Wrappers.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; + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index ae6161d1..9f7cd1bc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -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.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.dal.dataobject.user.MemberUserDO; import javax.validation.Valid; @@ -207,13 +207,17 @@ public interface MemberUserService { /** * 营养日报 */ - List nutritionDay(String time); + List nutritionDay(String start, String end); /** * 营养周报 */ - List NutritionWeek(String start, String end); + AppWeekVO NutritionWeek(String start, String end); List getUserHeat(Long userId, LocalDateTime startDate,LocalDateTime endDate, Long orderId); + /** + * 用户绑定人脸 + */ + Boolean bindFace(Long userId,Long faceId); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 295d8306..e75d6884 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -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.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.convert.auth.AuthConvert; import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; @@ -401,11 +402,11 @@ public class MemberUserServiceImpl implements MemberUserService { } @Override - public List nutritionDay(String time) { + public List nutritionDay(String start, String end) { List result = new ArrayList<>(); //获取日期的订单 - String start = time+" 00:00:00"; - String end = time+" 23:59:59"; + //String start = time+" 00:00:00"; + //String end = time+" 23:59:59"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime startTime = LocalDateTime.parse(start, formatter); @@ -459,15 +460,16 @@ public class MemberUserServiceImpl implements MemberUserService { } @Override - public List NutritionWeek(String start, String end) { + public AppWeekVO NutritionWeek(String start, String end) { + AppWeekVO appWeekVO = new AppWeekVO(); List result = new ArrayList<>(); //获取日期的订单 - String newStart = start + " 00:00:00"; - String newEnd = end + " 23:59:59"; + //String newStart = start + " 00:00:00"; + //String newEnd = end + " 23:59:59"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDateTime startTime = LocalDateTime.parse(newStart, formatter); - LocalDateTime endTime = LocalDateTime.parse(newEnd, formatter); + LocalDateTime startTime = LocalDateTime.parse(start, formatter); + LocalDateTime endTime = LocalDateTime.parse(end, formatter); List dishOrderDOS = orderService.getDishOrderByTime(startTime, endTime); WeekFields weekFields = WeekFields.ISO; @@ -481,11 +483,13 @@ public class MemberUserServiceImpl implements MemberUserService { if (CollectionUtil.isNotEmpty(ids)) { List orderDetailDOS = orderDetailService.selectListByOrderIds(ids); 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); } - return result; + appWeekVO.setNum(dishOrderDOS.size()); + appWeekVO.setList(result); + return appWeekVO; } @Override @@ -519,7 +523,7 @@ public class MemberUserServiceImpl implements MemberUserService { .inIfPresent(OrderDetailDO::getOrderId, collect)); //热量求和统计方便 科学膳食小建议 double sum = orderDetailDOS - .stream() + .stream().filter(vo->vo!=null && vo.getHeat()!=null) .mapToDouble(OrderDetailDO::getHeat).sum(); //获取菜品id List 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; + } }