diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index 848588f8..32e59234 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -87,5 +87,8 @@ public interface ErrorCodeConstants { ErrorCode APP_UP_NOT_EXISTS = new ErrorCode(1_007_902_001, "app更新不存在"); + + ErrorCode DINING_PLATES_CANNOT_UNBIND = new ErrorCode(1_007_902_002, "餐盘已产生费用,无法解绑"); + ErrorCode DINING_PLATES_ALREADY = new ErrorCode(1_007_902_002, "餐盘已存在"); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/AdminCardController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/AdminCardController.java index 0bce7616..42890498 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/AdminCardController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/AdminCardController.java @@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.member.service.admincard.AdminCardService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -95,14 +94,14 @@ public class AdminCardController { @GetMapping("/export-excel") @Operation(summary = "导出管理员卡 Excel") - @PreAuthorize("@ss.hasPermission('member:admin-card:export')") + //@PreAuthorize("@ss.hasPermission('member:admin-card:export')") @OperateLog(type = EXPORT) public void exportAdminCardExcel(@Valid AdminCardPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = adminCardService.getAdminCardPage(pageReqVO).getList(); // 导出 Excel - ExcelUtils.write(response, "管理员卡.xls", "数据", AdminCardRespVO.class, + ExcelUtils.write(response, "饭卡管理.xls", "数据", AdminCardRespVO.class, BeanUtils.toBean(list, AdminCardRespVO.class)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardPageReqVO.java index 93d20a52..1a670f0e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardPageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardPageReqVO.java @@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class AdminCardPageReqVO extends PageParam { - @Schema(description = "手机号") + @Schema(description = "卡号") private String cardNo; @Schema(description = "类型") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardRespVO.java index cdc73cc3..7386d3c8 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/admincard/vo/AdminCardRespVO.java @@ -16,8 +16,8 @@ public class AdminCardRespVO { @ExcelProperty("编号") private Long id; - @Schema(description = "手机号") - @ExcelProperty("手机号") + @Schema(description = "卡号") + @ExcelProperty("卡号") private String cardNo; @Schema(description = "类型") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/BusinessController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/BusinessController.java index 5db664a0..9fc99247 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/BusinessController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/BusinessController.java @@ -1,33 +1,32 @@ package cn.iocoder.yudao.module.member.controller.admin.business; -import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO; -import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO; -import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; -import cn.iocoder.yudao.module.member.service.business.BusinessService; -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; -import javax.validation.*; -import javax.servlet.http.*; -import java.time.LocalDateTime; -import java.util.*; -import java.io.IOException; - +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; +import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO; +import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; +import cn.iocoder.yudao.module.member.service.business.BusinessService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +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.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 营业统计") @@ -66,7 +65,7 @@ public class BusinessController { @GetMapping("/get") @Operation(summary = "获得营业统计") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('t:business:query')") + //@PreAuthorize("@ss.hasPermission('t:business:query')") public CommonResult getBusiness(@RequestParam("id") Long id) { BusinessDO business = businessService.getBusiness(id); return success(BeanUtils.toBean(business, BusinessRespVO.class)); @@ -74,7 +73,7 @@ public class BusinessController { @GetMapping("/page") @Operation(summary = "获得营业统计分页") - @PreAuthorize("@ss.hasPermission('t:business:query')") + //@PreAuthorize("@ss.hasPermission('t:business:query')") public CommonResult> getBusinessPage(@Valid BusinessPageReqVO pageReqVO) { PageResult pageResult = businessService.getBusinessPage(pageReqVO); return success(BeanUtils.toBean(pageResult, BusinessRespVO.class)); @@ -82,7 +81,7 @@ public class BusinessController { @GetMapping("/export-excel") @Operation(summary = "导出营业统计 Excel") - @PreAuthorize("@ss.hasPermission('t:business:export')") + //@PreAuthorize("@ss.hasPermission('t:business:export')") @OperateLog(type = EXPORT) public void exportBusinessExcel(@Valid BusinessPageReqVO pageReqVO, HttpServletResponse response) throws IOException { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessRespVO.java index 7ec8e0c1..b518f69c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessRespVO.java @@ -1,13 +1,12 @@ package cn.iocoder.yudao.module.member.controller.admin.business.vo; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 营业统计 Response VO") @Data @@ -39,11 +38,11 @@ public class BusinessRespVO { private BigDecimal rechargePurse; @Schema(description = "补贴钱包") - @ExcelProperty("补贴钱包") + //@ExcelProperty("补贴钱包") private BigDecimal subsidyPurse; @Schema(description = "VIP免单") - @ExcelProperty("VIP免单") + //@ExcelProperty("VIP免单") private Integer gratis; @Schema(description = "早餐") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/diningplates/vo/DiningPlatesSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/diningplates/vo/DiningPlatesSaveReqVO.java index 15b8e36d..4aa9f8e7 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/diningplates/vo/DiningPlatesSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/diningplates/vo/DiningPlatesSaveReqVO.java @@ -1,10 +1,8 @@ package cn.iocoder.yudao.module.member.controller.admin.diningplates.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; @Schema(description = "管理后台 - 餐盘新增/修改 Request VO") @@ -26,4 +24,14 @@ public class DiningPlatesSaveReqVO { @Schema(description = "绑定时间") private LocalDateTime bindingTime; + /** + * 所属门店 + */ + private Long storeId; + + /** + * 所属门店 + */ + private String storeName; + } \ 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/admin/group/vo/MemberGroupUserVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupUserVo.java new file mode 100644 index 00000000..e4068ae2 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupUserVo.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.member.controller.admin.group.vo; + +import lombok.Data; + +/** + * @author zt + * @description + * @since 2024/7/17 + */ +@Data +public class MemberGroupUserVo { + private String name; + private Long memberId; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java index c223fe83..7a46610f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java @@ -1,7 +1,10 @@ package cn.iocoder.yudao.module.member.controller.admin.order; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsReqVO; import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsRespVO; import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderMoneyRespVO; @@ -18,9 +21,13 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.List; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + @Tag(name = "管理后台 - 会员订单") @RestController @RequestMapping("/member/order") @@ -73,18 +80,18 @@ public class OrderController { // return success(BeanUtils.toBean(pageResult, OrderRespVO.class)); //} // - //@GetMapping("/export-excel") - //@Operation(summary = "导出会员订单 Excel") - //@PreAuthorize("@ss.hasPermission('member:order:export')") - //@OperateLog(type = EXPORT) - //public void exportOrderExcel(@Valid OrderPageReqVO pageReqVO, - // HttpServletResponse response) throws IOException { - // pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - // List list = orderService.getOrderPage(pageReqVO).getList(); - // // 导出 Excel - // ExcelUtils.write(response, "会员订单.xls", "数据", OrderRespVO.class, - // BeanUtils.toBean(list, OrderRespVO.class)); - //} + @GetMapping("/export-excel") + @Operation(summary = "导出会员订单 Excel") + @PreAuthorize("@ss.hasPermission('member:order:export')") + @OperateLog(type = EXPORT) + public void exportOrderExcel(@Valid OrderDetailsReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = orderService.getPageOrderDetails(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "会员订单.xls", "数据", OrderDetailsRespVO.class, + list); + } /*================后台管理-订单管理========================*/ /** * @Description: diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsReqVO.java index cb27f059..bbdce29a 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsReqVO.java @@ -47,4 +47,6 @@ public class OrderDetailsReqVO extends PageParam { private String timePeriod; @Schema(description = "会员id", example = "早餐") private Long userId; + @Schema(description = "分组Id", example = "1") + private Long groupId; } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java index 8092bf83..dcca1720 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.member.controller.admin.order.vo; +import cn.iocoder.yudao.module.member.convert.excel.OrderStatusConverter; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -18,14 +19,15 @@ import java.time.LocalDateTime; @ToString(callSuper = true) @ExcelIgnoreUnannotated public class OrderDetailsRespVO { - @Schema(description = "门店名称", example = "真好") - @ExcelProperty("门店名称") - private String storeName; @Schema(description = "订单编号", example = "20240401090630943547146") @ExcelProperty("订单编号") private Long id; + @Schema(description = "门店名称", example = "真好") + @ExcelProperty("门店名称") + private String storeName; + @Schema(description = "门店Id", example = "127") private Long storeId; @@ -33,12 +35,15 @@ public class OrderDetailsRespVO { @ExcelProperty("用户名称") private String userName; - @Schema(description = "用户账号", example = "15111956918") - @ExcelProperty("用户账号") + @Schema(description = "小组", example = "1024") + @ExcelProperty("小组") + private String groupName; + + @Schema(description = "用户手机", example = "15111956918") + @ExcelProperty("用户手机") private String userAccount; @Schema(description = "工号", example = "15111956918") - @ExcelProperty("工号") private String userJob; @Schema(description = "用户头像", example = "15111956918") private String avatar; @@ -52,7 +57,6 @@ public class OrderDetailsRespVO { private BigDecimal totalMoney; @Schema(description = "支付方式", example = "钱包") - @ExcelProperty("钱包") private String payMethods; @Schema(description = "时间段", example = "早餐") @@ -60,9 +64,11 @@ public class OrderDetailsRespVO { private String timePeriod; @Schema(description = "订单状态", example = "交易完成") - @ExcelProperty("订单状态") + @ExcelProperty(value = "订单状态",converter = OrderStatusConverter.class) private String orderStatus ; @Schema(description = "用户id", example = "1024") private Long userId; + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java index 246be337..ac93c8e9 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java @@ -2,8 +2,13 @@ package cn.iocoder.yudao.module.member.controller.admin.user; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserAddVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserExportVo; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserRespVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateLevelReqVO; @@ -35,7 +40,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -46,6 +53,7 @@ import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - 会员用户") @@ -65,6 +73,9 @@ public class MemberUserController { @Resource private MemberPointRecordService memberPointRecordService; + @Resource + private MemberGroupService MemberGroupService; + @PutMapping("/update") @Operation(summary = "更新会员用户") @@ -106,12 +117,7 @@ public class MemberUserController { public CommonResult getUser(@RequestParam("id") Long id) { MemberUserDO user = memberUserService.getUser(id); MemberUserRespVO memberUserRespVO = MemberUserConvert.INSTANCE.convert03(user); - //if(StringUtils.isNotEmpty(memberUserRespVO.getFaceId())){ - // FaceVo faceData = cardService.getFaceData(memberUserRespVO.getFaceId()); - // System.out.println(faceData.toString()); - // //memberUserRespVO.setFaceData(faceData); - //} - + memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id)); return success(memberUserRespVO); } @@ -137,12 +143,11 @@ public class MemberUserController { List groups = memberGroupService.getGroupList( convertSet(pageResult.getList(), MemberUserDO::getGroupId)); PageResult memberUserRespVOPageResult = MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups); - //memberUserRespVOPageResult.getList().forEach(vo ->{ - // if(StringUtils.isNotEmpty(vo.getFaceId())){ - // Blob faceData = cardService.getFaceData(vo.getFaceId()); - // vo.setFaceData(faceData); - // } - //}); + //处理用户分组返显 + Map groupNames = MemberGroupService.getGroupNameByUserIds(pageResult.getList().stream().map(MemberUserDO::getId).collect(Collectors.toList())); + memberUserRespVOPageResult.getList().forEach(respVo->{ + respVo.setGroupName(groupNames.get(respVo.getId())); + }); return success(memberUserRespVOPageResult); } @GetMapping("/heat") @@ -172,5 +177,19 @@ public class MemberUserController { return success(memberUserService.create(addVO)); } + @GetMapping("/export-excel") + @Operation(summary = "导出用户 Excel") + @OperateLog(type = EXPORT) + public void exportUserExcel(@Valid MemberUserPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = getUserPage(pageReqVO).getData().getList(); + + // 导出 Excel + ExcelUtils.write(response, "用户.xls", "数据", MemberUserExportVo.class, + BeanUtils.toBean(list, MemberUserExportVo.class)); + } + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserExportVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserExportVo.java new file mode 100644 index 00000000..b83a46e1 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserExportVo.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.member.controller.admin.user.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author zt + * @description + * @since 2024/7/17 + */ +@Data +public class MemberUserExportVo { + + @ExcelProperty("编号") + private Long id; + + @ExcelProperty("用户昵称") + private String nickname; + + @ExcelProperty("手机号") + private String mobile; + + @ExcelProperty("分组") + private String groupName; + + @ExcelProperty("卡号") + private String cardId; + + @ExcelProperty("最后登录时间") + private LocalDateTime loginDate; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java index abb94285..d3f94c76 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserPageReqVO.java @@ -41,6 +41,12 @@ public class MemberUserPageReqVO extends PageParam { @Schema(description = "用户分组编号", example = "1") private Long groupId; + @Schema(description = "卡号", example = "1") + private Long cardId; + + @Schema(description = "分组筛选", example = "1") + private List userIds; + // TODO 芋艿:注册用户类型; // TODO 芋艿:登录用户类型; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java index 18dafe75..08b12345 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java @@ -49,9 +49,5 @@ public class MemberUserRespVO extends MemberUserBaseVO { @Schema(description = "用户经验值", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") private Integer experience; - @Schema(description = "绑定卡号") - private String cardId; - @Schema(description = "人脸ID") - private Long faceId; } 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 dd5ef507..3fa97c4c 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 @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.member.controller.app.diningplates; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesRespVO; +import cn.iocoder.yudao.module.member.controller.app.diningplates.vo.AppUserInfo; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService; @@ -53,4 +54,18 @@ public class AppDiningPlatesController { return success(diningPlatesService.appCheckBind(diningPlatesNum)); } + @GetMapping("/unbind") + @Operation(summary = "餐盘解绑") + public CommonResult unbind(String diningPlatesNum) { + diningPlatesService.unbind(diningPlatesNum); + return success("解绑成功"); + } + + @GetMapping("/getUserAndDish") + @Operation(summary = "根据餐盘号获取当前余额") + public CommonResult getMoney(String cId, Long dishesId) { + return success(diningPlatesService.getMoney(cId,dishesId)); + } + + } \ 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/diningplates/vo/AppUserInfo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/diningplates/vo/AppUserInfo.java new file mode 100644 index 00000000..6e9e15d7 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/diningplates/vo/AppUserInfo.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.member.controller.app.diningplates.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author zt + * @description + * @since 2024/7/16 + */ +@Data +public class AppUserInfo { + + private BigDecimal money; + + private String nickname; + + private String dishesName; + + private BigDecimal dishesBasePrice; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderdetail/vo/AppOrderDetailRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderdetail/vo/AppOrderDetailRespVO.java index 655d8281..4e255f94 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderdetail/vo/AppOrderDetailRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderdetail/vo/AppOrderDetailRespVO.java @@ -44,4 +44,15 @@ public class AppOrderDetailRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + private BigDecimal dishesBasePrice; + + /** + * 总价格 + */ + private BigDecimal dishesSumPrice; + /** + * 菜品总重量 + */ + private BigDecimal dishesNumber; + } \ 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 3f7d1bc6..9f720280 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 @@ -139,5 +139,11 @@ public class AppMemberUserController { public CommonResult> getDishesList(@RequestParam("platesNum") String platesNum){ return success(userService.getDishesList(platesNum)); } + + @GetMapping("/getCardId") + @Operation(summary = "获取用户绑定的卡号") + public CommonResult getCardId(Long userId){ + return success(userService.getCardId(userId)); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/excel/OrderStatusConverter.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/excel/OrderStatusConverter.java new file mode 100644 index 00000000..3d1eb1c4 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/excel/OrderStatusConverter.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.member.convert.excel; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.converters.ReadConverterContext; +import com.alibaba.excel.converters.WriteConverterContext; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.data.WriteCellData; +import org.springframework.stereotype.Component; + +/** + * @author zt + * @description + * @since 2024/7/17 + */ +@Component +public class OrderStatusConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return String.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + /** + * 这里读的时候会调用 + * + * @param context + * @return + */ + @Override + public String convertToJavaData(ReadConverterContext context) throws Exception { + return Converter.super.convertToJavaData(context); + } + + /** + * 这里是写的时候会调用 不用管 + * + * @return + */ + @Override + public WriteCellData convertToExcelData(WriteConverterContext context) { + + String value = context.getValue(); + if ("0".equals(value)) { + value = "待付款"; + } else if ("1".equals(value)) { + value = "已完成"; + } + + return new WriteCellData<>(value); + } + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/diningplates/DiningPlatesDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/diningplates/DiningPlatesDO.java index c1c49571..627b9f98 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/diningplates/DiningPlatesDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/diningplates/DiningPlatesDO.java @@ -70,4 +70,9 @@ public class DiningPlatesDO extends BaseDO { */ private LocalDateTime bindingTime; + /** + * 订单ID + */ + private Long orderId; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java index 23b5ee04..2be23974 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUserVo; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import org.apache.ibatis.annotations.Mapper; @@ -42,4 +43,10 @@ public interface MemberGroupMapper extends BaseMapperX { Long memberCount(MemberGroupPageVO vo); List getMemberList(Long groupId); + + List getAllMember(); + + String getGroupName(Long userId); + + List getGroupList(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 da350e6e..e8fd2abe 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 @@ -49,7 +49,9 @@ public interface MemberUserMapper extends BaseMapperX { .likeIfPresent(MemberUserDO::getNickname, reqVO.getNickname()) .betweenIfPresent(MemberUserDO::getCreateTime, reqVO.getCreateTime()) .eqIfPresent(MemberUserDO::getLevelId, reqVO.getLevelId()) - .eqIfPresent(MemberUserDO::getGroupId, reqVO.getGroupId()) + //.eqIfPresent(MemberUserDO::getGroupId, reqVO.getGroupId()) + .eqIfPresent(MemberUserDO::getCardId,reqVO.getCardId()) + .inIfPresent(MemberUserDO::getId,reqVO.getUserIds()) .apply(StrUtil.isNotEmpty(tagIdSql), tagIdSql) .orderByDesc(MemberUserDO::getId)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java index 8acd9e82..d914b26d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java @@ -41,9 +41,9 @@ public class BalanceDeductionJob implements JobHandler { private StringRedisTemplate stringRedisTemplate; /** - * 20分钟之后自动解绑并扣款 + * 30分钟之后自动解绑并扣款 */ - private static final Integer EXPIRATION_TIME = 20; + private static final Integer EXPIRATION_TIME = 30; @Override @@ -56,11 +56,11 @@ public class BalanceDeductionJob implements JobHandler { if(CollectionUtil.isNotEmpty(diningPlatesToCharging)){ List ids = diningPlatesToCharging.stream().map(DiningPlatesDO::getId).collect(Collectors.toList()); - List users = diningPlatesToCharging.stream().map(DiningPlatesDO::getUserId).collect(Collectors.toList()); + List orderIds = diningPlatesToCharging.stream().map(DiningPlatesDO::getOrderId).collect(Collectors.toList()); //先更改状态防止重复消费 //platesService.updatePayFlag(ids,DiningPlatesDO.PAY); //获取用户订单 - List toPay = orderService.getToPay(users); + List toPay = orderService.getToPayByOrder(orderIds); //扣除余额 List list = new ArrayList<>(); toPay.forEach(dishOrderDO -> { 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 4f01e560..493ebe1a 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 @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesSaveReqVO; import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVO; +import cn.iocoder.yudao.module.member.controller.app.diningplates.vo.AppUserInfo; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; @@ -92,4 +93,9 @@ public interface DiningPlatesService { AppUserInfoCardVO appCheckBind(String diningPlatesNum); List getDiningPlatesNum(LocalDateTime localDateTime, Integer time); + + void unbind(String diningPlatesNum); + + AppUserInfo getMoney(String diningPlatesNum, Long dishId); + } \ 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 e120ae92..0bc53017 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.member.service.diningplates; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -8,6 +9,7 @@ import cn.iocoder.yudao.framework.websocket.core.sender.WebSocketMessageSender; import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesSaveReqVO; import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVO; +import cn.iocoder.yudao.module.member.controller.app.diningplates.vo.AppUserInfo; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; @@ -19,6 +21,8 @@ import cn.iocoder.yudao.module.member.service.card.CardService; import cn.iocoder.yudao.module.member.util.MemberConstants; import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto; +import cn.iocoder.yudao.module.system.api.dish.DishesApi; +import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.data.redis.core.StringRedisTemplate; @@ -60,11 +64,18 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { private WebSocketMessageSender webSocketMessageSender; @Resource private CarteenApi carteenApi; + @Resource + private DishesApi dishesApi; @Override public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) { // 插入 DiningPlatesDO diningPlates = BeanUtils.toBean(createReqVO, DiningPlatesDO.class); + List diningPlatesDOS = diningPlatesMapper.selectList(Wrappers.lambdaQuery() + .eq(DiningPlatesDO::getDiningPlatesNum, diningPlates.getDiningPlatesNum())); + if(CollectionUtil.isNotEmpty(diningPlatesDOS)){ + throw exception(DINING_PLATES_ALREADY); + } diningPlatesMapper.insert(diningPlates); // 返回 return diningPlates.getId(); @@ -134,6 +145,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { .set(DiningPlatesDO::getStatus, DiningPlatesDO.FREE) .set(DiningPlatesDO::getUserId, null) .set(DiningPlatesDO::getBindingTime, null) + .set(DiningPlatesDO::getOrderId, null) .in(DiningPlatesDO::getId, ids)); } @@ -160,7 +172,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { diningPlatesDO.setUserId(memberUserDO.getId()); diningPlatesDO.setStatus(DiningPlatesDO.USE); diningPlatesDO.setBindingTime(LocalDateTime.now()); - diningPlatesMapper.updateById(diningPlatesDO); + //创建初始订单 DishOrderDO dishOrderDO = new DishOrderDO(); @@ -171,6 +183,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { .setStoreName(diningPlatesDO.getStoreName()); dishOrderMapper.insert(dishOrderDO); + diningPlatesDO.setOrderId(dishOrderDO.getId()); + diningPlatesMapper.updateById(diningPlatesDO); //设置总价 stringRedisTemplate.opsForValue().set(diningPlatesNum, "0"); AppUserInfoCardVO data = new AppUserInfoCardVO(); @@ -199,7 +213,6 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { diningPlatesDO.setUserId(memberUserDO.getId()); diningPlatesDO.setStatus(DiningPlatesDO.USE); diningPlatesDO.setBindingTime(LocalDateTime.now()); - diningPlatesMapper.updateById(diningPlatesDO); //创建初始订单 DishOrderDO dishOrderDO = new DishOrderDO(); @@ -210,6 +223,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { .setStoreName(diningPlatesDO.getStoreName()); dishOrderMapper.insert(dishOrderDO); + diningPlatesDO.setOrderId(dishOrderDO.getId()); + diningPlatesMapper.updateById(diningPlatesDO); //设置总价 stringRedisTemplate.opsForValue().set(diningPlatesNum, "0"); AppUserInfoCardVO data = new AppUserInfoCardVO(); @@ -331,4 +346,44 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), 1L, // 给指定用户 "demo-message-receive", s); } + + @Override + public void unbind(String diningPlatesNum) { + + String money = stringRedisTemplate.opsForValue().get(diningPlatesNum); + if(!"0".equals(money)){ + throw exception(DINING_PLATES_CANNOT_UNBIND); + } + DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(Wrappers.lambdaQuery() + .eq(DiningPlatesDO::getDiningPlatesNum, diningPlatesNum) + .last("limit 1")); + + diningPlatesMapper.update(Wrappers.lambdaUpdate() + .set(DiningPlatesDO::getPayFlag, DiningPlatesDO.TO_PAY) + .set(DiningPlatesDO::getStatus, DiningPlatesDO.FREE) + .set(DiningPlatesDO::getUserId, null) + .set(DiningPlatesDO::getBindingTime, null) + .set(DiningPlatesDO::getOrderId, null) + .eq(DiningPlatesDO::getId,diningPlatesDO.getId())); + } + + @Override + public AppUserInfo getMoney(String diningPlatesNum,Long dishId) { + DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(Wrappers.lambdaQuery() + .eq(DiningPlatesDO::getDiningPlatesNum, diningPlatesNum) + .last("limit 1")); + BigDecimal moneyByUserId = cardService.getMoneyByUserId(diningPlatesDO.getUserId()); + MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId()); + + DishesRespDto dish = dishesApi.getDish(dishId); + + AppUserInfo appUserInfo = new AppUserInfo(); + appUserInfo.setNickname(memberUserDO.getNickname()) + .setDishesName(dish.getDishesName()) + .setDishesBasePrice(dish.getDishesBasePrice()) + .setMoney(moneyByUserId); + return appUserInfo; + } + + } \ 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/group/MemberGroupService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java index 4156fb92..b4cd2bd6 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import javax.validation.Valid; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 用户分组 Service 接口 @@ -116,4 +117,13 @@ public interface MemberGroupService { PageResult getUserList(MemberUserListVO listVO); + /** + * 获取用户所在组 + */ + String getGroupNameByUserId(Long userId); + + /** + * 获取用户所在组 + */ + Map getGroupNameByUserIds(List userIds); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java index 592425c1..5c6daf4f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreat import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUserVo; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberUserVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO; @@ -25,6 +26,8 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER; @@ -142,11 +145,23 @@ public class MemberGroupServiceImpl implements MemberGroupService { @Override public PageResult getUserList(MemberUserListVO listVO) { - List memberList = memberGroupMapper.getMemberList(listVO.getGroupId()); + //List memberList = memberGroupMapper.getMemberList(listVO.getGroupId()); + List memberList = memberGroupMapper.getAllMember(); listVO.setIds(memberList); PageResult groupUserList = memberUserService.getGroupUserList(listVO); - return groupUserList; } + + @Override + public String getGroupNameByUserId(Long userId) { + return memberGroupMapper.getGroupName(userId); + } + + @Override + public Map getGroupNameByUserIds(List userIds) { + List groupList = memberGroupMapper.getGroupList(userIds); + Map map = groupList.stream().collect(Collectors.toMap(MemberGroupUserVo::getMemberId, MemberGroupUserVo::getName)); + return map; + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java index 12f4d110..2d94e77f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java @@ -74,6 +74,13 @@ public interface OrderService { */ List getToPay(List users); + + /** + * 获取用户的未支付订单 + * @return + */ + List getToPayByOrder(List orderIds); + /** * 更改用户的支付状态 * @return diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java index c1716e39..0dcc4b12 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.member.service.order; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -19,6 +20,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; 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.group.MemberGroupMapper; import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.enums.CostTypeEnum; @@ -29,6 +31,8 @@ import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto; import cn.iocoder.yudao.module.system.api.deviceInfo.DeviceInfoApi; import cn.iocoder.yudao.module.system.api.deviceInfo.dto.DeviceInfoDto; +import cn.iocoder.yudao.module.system.api.dish.DishesApi; +import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -69,7 +73,12 @@ public class OrderServiceImpl implements OrderService { @Resource private CarteenApi carteenApi; @Resource + private DishesApi dishesApi; + @Resource private CardMapper cardMapper; + @Resource + private MemberGroupMapper groupMapper; + @Override public Long createOrder(AppOrderSaveReqVO createReqVO) { // 插入 @@ -105,10 +114,10 @@ public class OrderServiceImpl implements OrderService { private void validateOrderExists(Long id) { DishOrderDO dishOrderDO = dishOrderMapper.selectById(id); - if ( dishOrderDO== null) { + if (dishOrderDO == null) { throw exception(ORDER_NOT_EXISTS); } - if("0".equals(dishOrderDO.getOrderStatus())){ + if ("0".equals(dishOrderDO.getOrderStatus())) { throw exception(ORDER_NOT_COMPLETE); } } @@ -119,19 +128,19 @@ public class OrderServiceImpl implements OrderService { AppOrderRespVO appOrderRespVO = BeanUtils.toBean(order, AppOrderRespVO.class); List appOrderDetailRespVOS = orderDetailService.selectListByOrderId(id); appOrderRespVO.setDetailList(appOrderDetailRespVOS); - BigDecimal reduce1 = appOrderDetailRespVOS.stream().filter(heat -> ObjUtil.isNotEmpty(heat.getHeat())).map(m-> BigDecimal.valueOf(m.getHeat())).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal reduce1 = appOrderDetailRespVOS.stream().filter(heat -> ObjUtil.isNotEmpty(heat.getHeat())).map(m -> BigDecimal.valueOf(m.getHeat())).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal reduce = reduce1.setScale(2, RoundingMode.HALF_UP); appOrderRespVO.setIntake(reduce); //判断时间 int hour = order.getCreateTime().getHour(); - if(TimePeriodEnum.MORNING.getStartInt()<=hour && hour<=TimePeriodEnum.MORNING.getEndInt()){ + if (TimePeriodEnum.MORNING.getStartInt() <= hour && hour <= TimePeriodEnum.MORNING.getEndInt()) { appOrderRespVO.setProposeIntake(MemberConstants.PROPOSE_MORNING); - } else if (TimePeriodEnum.MIDDAY.getStartInt()<=hour && hour<=TimePeriodEnum.MIDDAY.getEndInt()){ + } else if (TimePeriodEnum.MIDDAY.getStartInt() <= hour && hour <= TimePeriodEnum.MIDDAY.getEndInt()) { appOrderRespVO.setProposeIntake(MemberConstants.PROPOSE_NOON); - }else{ + } else { appOrderRespVO.setProposeIntake(MemberConstants.PROPOSE_NIGHT); } - appOrderRespVO.setDifference(NumberUtil.sub(reduce,appOrderRespVO.getProposeIntake())); + appOrderRespVO.setDifference(NumberUtil.sub(reduce, appOrderRespVO.getProposeIntake())); return appOrderRespVO; } @@ -141,48 +150,67 @@ public class OrderServiceImpl implements OrderService { } @Override - public PageResult getOrderList(AppPageVo vo) { + public PageResult getOrderList(AppPageVo vo) { PageResult dishOrderDOPageResult = dishOrderMapper.selectPage(vo, Wrappers.lambdaQuery().eq(DishOrderDO::getUserId, vo.getUserId()).orderByDesc(DishOrderDO::getCreateTime)); PageResult appOrderRespVOPageResult = BeanUtils.toBean(dishOrderDOPageResult, AppOrderRespVO.class); - for (AppOrderRespVO dishOrderDO : appOrderRespVOPageResult.getList()){ + List list = appOrderRespVOPageResult.getList(); + for (AppOrderRespVO dishOrderDO : list) { List appOrderDetailRespVOS = orderDetailService.selectListByOrderId(dishOrderDO.getId()); + + if (CollectionUtil.isNotEmpty(appOrderDetailRespVOS)) { + List dishIds = appOrderDetailRespVOS.stream().map(AppOrderDetailRespVO::getDishesId).collect(Collectors.toList()); + + List dishInfo = dishesApi.getDishInfo(dishIds); + Map dishMap = dishInfo.stream().collect(Collectors.toMap(DishesRespDto::getId, DishesRespDto -> DishesRespDto)); + + appOrderDetailRespVOS.forEach(respVo -> { + DishesRespDto dishesRespDto = dishMap.get(respVo.getDishesId()); + + respVo.setDishesBasePrice(dishesRespDto.getDishesBasePrice()) + .setDishesSumPrice(dishesRespDto.getDishesSumPrice()) + .setDishesNumber(dishesRespDto.getDishesNumber()); + }); + } + dishOrderDO.setDetailList(appOrderDetailRespVOS); } - return appOrderRespVOPageResult; } + @Override public PageResult getPageOrderDetails(OrderDetailsReqVO reqVO) { - List userIds=new ArrayList<>(); - if(ObjUtil.isNotEmpty(reqVO.getUserName()) + List userIds = new ArrayList<>(); + if (ObjUtil.isNotEmpty(reqVO.getUserName()) || ObjUtil.isNotEmpty(reqVO.getUserAccount()) || ObjUtil.isNotEmpty(reqVO.getUserJob()) || ObjUtil.isNotEmpty(reqVO.getUserId()) - ){ + || ObjUtil.isNotEmpty(reqVO.getGroupId()) + ) { //根据用户属性获取ids userIds = memberUserMapper.selectList(new LambdaQueryWrapperX() .likeIfPresent(MemberUserDO::getNickname, reqVO.getUserName()) .eqIfPresent(MemberUserDO::getMobile, reqVO.getUserAccount()) .eqIfPresent(MemberUserDO::getCardId, reqVO.getUserJob()) - .eqIfPresent(MemberUserDO::getId, reqVO.getUserId())) + .eqIfPresent(MemberUserDO::getId, reqVO.getUserId()) + .inIfPresent(MemberUserDO::getId,groupMapper.getMemberList(reqVO.getGroupId()))) .stream().map(MemberUserDO::getId).collect(Collectors.toList()); } Map timePeriod = this.getTimePeriod(reqVO.getTimePeriod()); - LocalDateTime startTime =null; - LocalDateTime endTime =null; - if(ObjUtil.isNotEmpty(timePeriod)){ - startTime=timePeriod.get("start"); - endTime=timePeriod.get("end"); + LocalDateTime startTime = null; + LocalDateTime endTime = null; + if (ObjUtil.isNotEmpty(timePeriod)) { + startTime = timePeriod.get("start"); + endTime = timePeriod.get("end"); } //进行分页查询 PageResult pageResult = dishOrderMapper.selectPageList(reqVO, userIds, startTime, endTime); - List list=new ArrayList<>(); + List list = new ArrayList<>(); for (DishOrderDO dishOrderDO : pageResult.getList()) { OrderDetailsRespVO bean = BeanUtils.toBean(dishOrderDO, OrderDetailsRespVO.class); userDetails(bean); list.add(bean); } - return new PageResult<>(list,pageResult.getTotal()); + return new PageResult<>(list, pageResult.getTotal()); } @Override @@ -194,6 +222,7 @@ public class OrderServiceImpl implements OrderService { private void userDetails(OrderDetailsRespVO bean) { MemberUserDO userDO = memberUserMapper.selectById(bean.getUserId()); + bean.setGroupName(groupMapper.getGroupName(bean.getUserId())); bean.setUserName(userDO.getNickname()); bean.setUserJob(userDO.getMobile()); bean.setAvatar(userDO.getAvatar()); @@ -203,19 +232,19 @@ public class OrderServiceImpl implements OrderService { } /** + * @return * @Description: 数据类型对标 {@link CostTypeEnum} * @Author: qjq * @Date: 2024/4/1 11:18 - * @return */ - public Map getTimePeriod(String type){ - if(TimePeriodEnum.MORNING.getCode().equalsIgnoreCase(type)){ + public Map getTimePeriod(String type) { + if (TimePeriodEnum.MORNING.getCode().equalsIgnoreCase(type)) { return TimePeriodEnum.MORNING.getStartToEnd(); - }else if(TimePeriodEnum.MIDDAY.getCode().equalsIgnoreCase(type)){ + } else if (TimePeriodEnum.MIDDAY.getCode().equalsIgnoreCase(type)) { return TimePeriodEnum.MIDDAY.getStartToEnd(); - }else if(TimePeriodEnum.NIGHT.getCode().equalsIgnoreCase(type)){ + } else if (TimePeriodEnum.NIGHT.getCode().equalsIgnoreCase(type)) { return TimePeriodEnum.NIGHT.getStartToEnd(); - }else { + } else { return Collections.emptyMap(); } } @@ -228,6 +257,14 @@ public class OrderServiceImpl implements OrderService { return dishOrderDOS; } + @Override + public List getToPayByOrder(List orderIds) { + List dishOrderDOS = dishOrderMapper.selectList(Wrappers.lambdaQuery() + .in(DishOrderDO::getId, orderIds) + .eq(DishOrderDO::getOrderStatus, DishOrderDO.INCOMPLETE)); + return dishOrderDOS; + } + @Override public void updateBatch(List orderDOS) { dishOrderMapper.updateBatch(orderDOS); @@ -236,19 +273,19 @@ public class OrderServiceImpl implements OrderService { @Override public List getDishOrderByTime(LocalDateTime startTime, LocalDateTime endTime) { List dishOrderDOS = dishOrderMapper.selectList(Wrappers.lambdaQuery() - .eq(DishOrderDO::getUserId,SecurityFrameworkUtils.getLoginUserId()) + .eq(DishOrderDO::getUserId, SecurityFrameworkUtils.getLoginUserId()) .between(DishOrderDO::getCreateTime, startTime, endTime)); return dishOrderDOS; } @Override public Integer selectUser(Long storeId, String time) { - return dishOrderMapper.selectUser(storeId,time); + return dishOrderMapper.selectUser(storeId, time); } @Override public BigDecimal getSaleMoney(Long storeId, String time) { - return dishOrderMapper.getSaleMoney(storeId,time); + return dishOrderMapper.getSaleMoney(storeId, time); } @Override @@ -259,7 +296,7 @@ public class OrderServiceImpl implements OrderService { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT); String today = LocalDateTime.now().format(formatter); List dishOrderDOS = dishOrderMapper.selectList(); - for (CarteenRespDto dto : carteenList){ + for (CarteenRespDto dto : carteenList) { CarTeenInfoVO carTeenInfoVO = new CarTeenInfoVO(); long deviceNum = device.stream().filter(vo -> vo.getCarteenId().equals(dto.getId())).count(); carTeenInfoVO.setDeviceNum(String.valueOf(deviceNum)); @@ -294,13 +331,13 @@ public class OrderServiceImpl implements OrderService { OrderMoneyRespVO orderMoneyRespVO = new OrderMoneyRespVO(); //获取充值的金额 BigDecimal add = cardMapper.selectAddMoney(userId, CardDO.ADD); - if(add == null){ + if (add == null) { add = BigDecimal.ZERO; } orderMoneyRespVO.setRechargeMoney(add); //消费的金额 BigDecimal minus = cardMapper.selectAddMoney(userId, CardDO.MINUS); - if(minus == null){ + if (minus == null) { minus = BigDecimal.ZERO; } orderMoneyRespVO.setConsumeMoney(minus); 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 13cfbd13..f67ce1c2 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 @@ -240,4 +240,7 @@ public interface MemberUserService { */ PageResult getGroupUserList(MemberUserListVO listVO); + String getCardId(Long userId); + + } 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 e3c6cace..fe165eb8 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 @@ -37,6 +37,7 @@ 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.diningplates.DiningPlatesMapper; +import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; 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; @@ -82,6 +83,7 @@ import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; /** @@ -128,6 +130,9 @@ public class MemberUserServiceImpl implements MemberUserService { @Resource private AdminCardService adminCardService; + @Resource + private MemberGroupMapper memberGroupMapper; + @Override public MemberUserDO getUserByMobile(String mobile) { @@ -353,6 +358,9 @@ public class MemberUserServiceImpl implements MemberUserService { @Override public PageResult getUserPage(MemberUserPageReqVO pageReqVO) { + if(pageReqVO.getGroupId()!=null){ + pageReqVO.setUserIds(memberGroupMapper.getMemberList(pageReqVO.getGroupId())); + } return memberUserMapper.selectPage(pageReqVO); } @@ -713,4 +721,13 @@ public class MemberUserServiceImpl implements MemberUserService { public PageResult getGroupUserList(MemberUserListVO listVO) { return memberUserMapper.selectUserList(listVO); } + + @Override + public String getCardId(Long userId) { + if(userId == null){ + userId = getLoginUserId(); + } + MemberUserDO memberUserDO = memberUserMapper.selectById(userId); + return memberUserDO.getCardId(); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml index 1cc858f7..41aefbfe 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml @@ -53,4 +53,22 @@ select member_id from member_group_member where group_id = #{groupId} + + + + + + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApi.java index 9a389617..73b26dbf 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApi.java @@ -21,4 +21,9 @@ public interface DishesApi { * @Description: 根据菜品id 获取菜品名称 */ public Map getDishName(List ids); + + /** + * @Description: 根据菜品id 批量获取菜品信息 + */ + public List getDishInfo(List ids); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/dto/DishesRespDto.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/dto/DishesRespDto.java index 0ba81bd4..3dbb5ba6 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/dto/DishesRespDto.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dish/dto/DishesRespDto.java @@ -32,5 +32,14 @@ public class DishesRespDto { private String dishecType; private LocalDateTime createTime; + /** + * 总价格 + */ + private BigDecimal dishesSumPrice; + /** + * 菜品总重量 + */ + private BigDecimal dishesNumber; + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApiImpl.java index 8d900af4..ff6e6cee 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/dish/DishesApiImpl.java @@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.system.service.dishes.DishesService; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -33,4 +32,10 @@ public class DishesApiImpl implements DishesApi { public Map getDishName(List ids) { return dishesService.getDishName(ids); } + + @Override + public List getDishInfo(List ids) { + List dishesList = dishesService.getDishesList(ids); + return BeanUtils.toBean(dishesList, DishesRespDto.class); + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/deviceinfo/vo/DeviceInfoRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/deviceinfo/vo/DeviceInfoRespVO.java index ae887f10..3972a972 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/deviceinfo/vo/DeviceInfoRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/deviceinfo/vo/DeviceInfoRespVO.java @@ -1,12 +1,11 @@ package cn.iocoder.yudao.module.system.controller.admin.deviceinfo.vo; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 设备信息关联门店 Response VO") @Data @@ -41,4 +40,9 @@ public class DeviceInfoRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + /** + * 是否在线 + */ + private String alive; + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/devuce/AppDevuceController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/devuce/AppDevuceController.java index 597e7835..bcae7200 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/devuce/AppDevuceController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/devuce/AppDevuceController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.system.controller.app.devuce.vo.DevuceReqVO; import cn.iocoder.yudao.module.system.controller.app.devuce.vo.DevuceSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dishes.DishesDO; import cn.iocoder.yudao.module.system.dal.dataobject.dishestype.DishesTypeDO; +import cn.iocoder.yudao.module.system.service.deviceinfo.DeviceInfoService; import cn.iocoder.yudao.module.system.service.devuce.DevuceService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -39,6 +40,8 @@ public class AppDevuceController { @Resource private DevuceService devuceService; + @Resource + private DeviceInfoService deviceInfoService; // @PostMapping("/create") // @Operation(summary = "创建设备") @@ -130,4 +133,11 @@ public class AppDevuceController { return success(true); } + @GetMapping("/alive") + @Operation(summary = "在线检测") + public void alive() { + deviceInfoService.alive(); + } + + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/deviceInfo/DeviceInfoDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/deviceInfo/DeviceInfoDO.java index faa2f79a..a3cfea5a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/deviceInfo/DeviceInfoDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/deviceInfo/DeviceInfoDO.java @@ -44,4 +44,9 @@ public class DeviceInfoDO extends BaseDO { * 门店名称 */ private String carteenName; + + /** + * 是否在线 + */ + private String alive; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/DevuceAliveJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/DevuceAliveJob.java new file mode 100644 index 00000000..f4b94091 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/DevuceAliveJob.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.system.job; + +import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; +import cn.iocoder.yudao.module.system.service.deviceinfo.DeviceInfoService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + * @author zt + * @description + * @since 2024/7/17 + */ +@Slf4j +@Component +public class DevuceAliveJob implements JobHandler { + + + @Resource + private DeviceInfoService deviceInfoService; + + + @Override + @TenantIgnore + @Transactional(rollbackFor = Exception.class) + public String execute(String param) { + int size = deviceInfoService.updateAlive(); + log.info("[execute][设备在线检测任务下线数量 ({}) 个]", size); + return String.format("设备在线检测任务下线数量 %s 个", size); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoService.java index 1ca76812..acfaf055 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoService.java @@ -52,4 +52,11 @@ public interface DeviceInfoService { */ PageResult getDeviceInfoPage(DeviceInfoPageReqVO pageReqVO); + void alive(); + + int updateAlive(); + + + + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoServiceImpl.java index a7d8a3e9..6d8efb02 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/deviceinfo/DeviceInfoServiceImpl.java @@ -7,10 +7,17 @@ import cn.iocoder.yudao.module.system.controller.admin.deviceinfo.vo.DeviceInfoS import cn.iocoder.yudao.module.system.dal.dataobject.deviceInfo.DeviceInfoDO; import cn.iocoder.yudao.module.system.dal.mysql.deviceInfo.DeviceInfoMapper; import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -26,6 +33,12 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { @Resource private DeviceInfoMapper deviceInfoMapper; + @Resource + private StringRedisTemplate RedisTemplate; + + @Resource + private HttpServletRequest httpServletRequest; + @Override public Long createDeviceInfo(DeviceInfoSaveReqVO createReqVO) { // 插入 @@ -68,4 +81,43 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { return deviceInfoMapper.selectPage(pageReqVO); } + @Override + public void alive() { + String deviceSn = getHearder(); + RedisTemplate.opsForValue().set(deviceSn, String.valueOf(System.currentTimeMillis())); + deviceInfoMapper.update(new DeviceInfoDO(),new LambdaUpdateWrapper() + .eq(DeviceInfoDO::getDeviceIp,deviceSn) + .set(DeviceInfoDO::getAlive,"1")); + } + + @Override + public int updateAlive() { + List updateList = new ArrayList<>(); + List deviceInfoDOS = deviceInfoMapper.selectList(); + List devuceList = deviceInfoDOS.stream().map(DeviceInfoDO::getDeviceIp).collect(Collectors.toList()); + for (String deviceSn : devuceList){ + String time = RedisTemplate.opsForValue().get(deviceSn); + if(StringUtils.isBlank(time)){ + updateList.add(deviceSn); + continue; + } + if(System.currentTimeMillis()-Long.valueOf(time)>120000){ + updateList.add(deviceSn); + } + } + + deviceInfoMapper.update(new DeviceInfoDO(),new LambdaUpdateWrapper() + .set(DeviceInfoDO::getAlive,"0") + .in(DeviceInfoDO::getDeviceIp,updateList)); + return updateList.size(); + } + + public String getHearder(){ + try { + return httpServletRequest.getHeader("Authorization"); + } catch (Exception e) { + throw exception(2000_10_001,"无法获取设备编码"); + } + } + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceService.java index 196c49bd..abd1c328 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceService.java @@ -92,4 +92,5 @@ public interface DevuceService { void updateWeight(DevuceReqVO updateReqVO); List getList(); + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceServiceImpl.java index ac467805..73b8efea 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/devuce/DevuceServiceImpl.java @@ -53,6 +53,8 @@ public class DevuceServiceImpl implements DevuceService { private DeviceInfoMapper deviceInfoMapper; @Resource private DishesNutritionMapper dishesNutritionMapper; + + @Override public Long createDevuce(DevuceSaveReqVO createReqVO) { // 插入 @@ -245,4 +247,5 @@ public class DevuceServiceImpl implements DevuceService { List list = devuceMapper.getList(); return list; } + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesService.java index 4aca0659..c56d153e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesService.java @@ -46,6 +46,8 @@ public interface DishesService { * @return 菜品管理 */ DishesDO getDishes(Long id); + + List getDishesList(List ids); DishesRespVO getDishes1(Long id); /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java index f068fb63..3d6fd106 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java @@ -122,6 +122,12 @@ public class DishesServiceImpl implements DishesService { return dishesMapper.selectById(id); } + @Override + public List getDishesList(List ids) { + return dishesMapper.selectList(Wrappers.lambdaQuery() + .in(DishesDO::getId,ids)); + } + @Override public DishesRespVO getDishes1(Long id) { DishesRespVO bean = BeanUtils.toBean(dishesMapper.selectById(id), DishesRespVO.class);