优化第一版
This commit is contained in:
@ -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, "餐盘已存在");
|
||||
}
|
||||
|
||||
|
@ -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<AdminCardDO> list = adminCardService.getAdminCardPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "管理员卡.xls", "数据", AdminCardRespVO.class,
|
||||
ExcelUtils.write(response, "饭卡管理.xls", "数据", AdminCardRespVO.class,
|
||||
BeanUtils.toBean(list, AdminCardRespVO.class));
|
||||
}
|
||||
|
||||
|
@ -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 = "类型")
|
||||
|
@ -16,8 +16,8 @@ public class AdminCardRespVO {
|
||||
@ExcelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "手机号")
|
||||
@ExcelProperty("手机号")
|
||||
@Schema(description = "卡号")
|
||||
@ExcelProperty("卡号")
|
||||
private String cardNo;
|
||||
|
||||
@Schema(description = "类型")
|
||||
|
@ -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<BusinessRespVO> 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<PageResult<BusinessRespVO>> getBusinessPage(@Valid BusinessPageReqVO pageReqVO) {
|
||||
PageResult<BusinessDO> 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 {
|
||||
|
@ -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 = "早餐")
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.group.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author zt
|
||||
* @description <description class purpose>
|
||||
* @since 2024/7/17
|
||||
*/
|
||||
@Data
|
||||
public class MemberGroupUserVo {
|
||||
private String name;
|
||||
private Long memberId;
|
||||
}
|
@ -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<OrderDO> 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<OrderDetailsRespVO> list = orderService.getPageOrderDetails(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "会员订单.xls", "数据", OrderDetailsRespVO.class,
|
||||
list);
|
||||
}
|
||||
/*================后台管理-订单管理========================*/
|
||||
/**
|
||||
* @Description:
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
@ -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<MemberUserRespVO> 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<MemberGroupDO> groups = memberGroupService.getGroupList(
|
||||
convertSet(pageResult.getList(), MemberUserDO::getGroupId));
|
||||
PageResult<MemberUserRespVO> 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<Long, String> 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<MemberUserRespVO> list = getUserPage(pageReqVO).getData().getList();
|
||||
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "用户.xls", "数据", MemberUserExportVo.class,
|
||||
BeanUtils.toBean(list, MemberUserExportVo.class));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -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 <description class purpose>
|
||||
* @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;
|
||||
|
||||
|
||||
|
||||
}
|
@ -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<Long> userIds;
|
||||
|
||||
// TODO 芋艿:注册用户类型;
|
||||
|
||||
// TODO 芋艿:登录用户类型;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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<String> unbind(String diningPlatesNum) {
|
||||
diningPlatesService.unbind(diningPlatesNum);
|
||||
return success("解绑成功");
|
||||
}
|
||||
|
||||
@GetMapping("/getUserAndDish")
|
||||
@Operation(summary = "根据餐盘号获取当前余额")
|
||||
public CommonResult<AppUserInfo> getMoney(String cId, Long dishesId) {
|
||||
return success(diningPlatesService.getMoney(cId,dishesId));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.diningplates.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author zt
|
||||
* @description <description class purpose>
|
||||
* @since 2024/7/16
|
||||
*/
|
||||
@Data
|
||||
public class AppUserInfo {
|
||||
|
||||
private BigDecimal money;
|
||||
|
||||
private String nickname;
|
||||
|
||||
private String dishesName;
|
||||
|
||||
private BigDecimal dishesBasePrice;
|
||||
}
|
@ -44,4 +44,15 @@ public class AppOrderDetailRespVO {
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
private BigDecimal dishesBasePrice;
|
||||
|
||||
/**
|
||||
* 总价格
|
||||
*/
|
||||
private BigDecimal dishesSumPrice;
|
||||
/**
|
||||
* 菜品总重量
|
||||
*/
|
||||
private BigDecimal dishesNumber;
|
||||
|
||||
}
|
@ -139,5 +139,11 @@ public class AppMemberUserController {
|
||||
public CommonResult<Map<String,String>> getDishesList(@RequestParam("platesNum") String platesNum){
|
||||
return success(userService.getDishesList(platesNum));
|
||||
}
|
||||
|
||||
@GetMapping("/getCardId")
|
||||
@Operation(summary = "获取用户绑定的卡号")
|
||||
public CommonResult<String> getCardId(Long userId){
|
||||
return success(userService.getCardId(userId));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 <description class purpose>
|
||||
* @since 2024/7/17
|
||||
*/
|
||||
@Component
|
||||
public class OrderStatusConverter implements Converter<String> {
|
||||
|
||||
@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<String> convertToExcelData(WriteConverterContext<String> context) {
|
||||
|
||||
String value = context.getValue();
|
||||
if ("0".equals(value)) {
|
||||
value = "待付款";
|
||||
} else if ("1".equals(value)) {
|
||||
value = "已完成";
|
||||
}
|
||||
|
||||
return new WriteCellData<>(value);
|
||||
}
|
||||
|
||||
}
|
@ -70,4 +70,9 @@ public class DiningPlatesDO extends BaseDO {
|
||||
*/
|
||||
private LocalDateTime bindingTime;
|
||||
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private Long orderId;
|
||||
|
||||
}
|
@ -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<MemberGroupDO> {
|
||||
Long memberCount(MemberGroupPageVO vo);
|
||||
|
||||
List<Long> getMemberList(Long groupId);
|
||||
|
||||
List<Long> getAllMember();
|
||||
|
||||
String getGroupName(Long userId);
|
||||
|
||||
List<MemberGroupUserVo> getGroupList(List<Long> list);
|
||||
}
|
||||
|
@ -49,7 +49,9 @@ public interface MemberUserMapper extends BaseMapperX<MemberUserDO> {
|
||||
.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));
|
||||
}
|
||||
|
@ -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<Long> ids = diningPlatesToCharging.stream().map(DiningPlatesDO::getId).collect(Collectors.toList());
|
||||
List<Long> users = diningPlatesToCharging.stream().map(DiningPlatesDO::getUserId).collect(Collectors.toList());
|
||||
List<Long> orderIds = diningPlatesToCharging.stream().map(DiningPlatesDO::getOrderId).collect(Collectors.toList());
|
||||
//先更改状态防止重复消费
|
||||
//platesService.updatePayFlag(ids,DiningPlatesDO.PAY);
|
||||
//获取用户订单
|
||||
List<DishOrderDO> toPay = orderService.getToPay(users);
|
||||
List<DishOrderDO> toPay = orderService.getToPayByOrder(orderIds);
|
||||
//扣除余额
|
||||
List<CardDO> list = new ArrayList<>();
|
||||
toPay.forEach(dishOrderDO -> {
|
||||
|
@ -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<DiningPlatesStoreVO> getDiningPlatesNum(LocalDateTime localDateTime, Integer time);
|
||||
|
||||
void unbind(String diningPlatesNum);
|
||||
|
||||
AppUserInfo getMoney(String diningPlatesNum, Long dishId);
|
||||
|
||||
}
|
@ -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<DiningPlatesDO> diningPlatesDOS = diningPlatesMapper.selectList(Wrappers.<DiningPlatesDO>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.<DiningPlatesDO>lambdaQuery()
|
||||
.eq(DiningPlatesDO::getDiningPlatesNum, diningPlatesNum)
|
||||
.last("limit 1"));
|
||||
|
||||
diningPlatesMapper.update(Wrappers.<DiningPlatesDO>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.<DiningPlatesDO>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;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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<MemberUserDO> getUserList(MemberUserListVO listVO);
|
||||
|
||||
|
||||
/**
|
||||
* 获取用户所在组
|
||||
*/
|
||||
String getGroupNameByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 获取用户所在组
|
||||
*/
|
||||
Map<Long,String> getGroupNameByUserIds(List<Long> userIds);
|
||||
}
|
||||
|
@ -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<MemberUserDO> getUserList(MemberUserListVO listVO) {
|
||||
List<Long> memberList = memberGroupMapper.getMemberList(listVO.getGroupId());
|
||||
//List<Long> memberList = memberGroupMapper.getMemberList(listVO.getGroupId());
|
||||
List<Long> memberList = memberGroupMapper.getAllMember();
|
||||
listVO.setIds(memberList);
|
||||
PageResult<MemberUserDO> groupUserList = memberUserService.getGroupUserList(listVO);
|
||||
|
||||
return groupUserList;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGroupNameByUserId(Long userId) {
|
||||
return memberGroupMapper.getGroupName(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Long, String> getGroupNameByUserIds(List<Long> userIds) {
|
||||
List<MemberGroupUserVo> groupList = memberGroupMapper.getGroupList(userIds);
|
||||
Map<Long, String> map = groupList.stream().collect(Collectors.toMap(MemberGroupUserVo::getMemberId, MemberGroupUserVo::getName));
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
@ -74,6 +74,13 @@ public interface OrderService {
|
||||
*/
|
||||
List<DishOrderDO> getToPay(List<Long> users);
|
||||
|
||||
|
||||
/**
|
||||
* 获取用户的未支付订单
|
||||
* @return
|
||||
*/
|
||||
List<DishOrderDO> getToPayByOrder(List<Long> orderIds);
|
||||
|
||||
/**
|
||||
* 更改用户的支付状态
|
||||
* @return
|
||||
|
@ -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<AppOrderDetailRespVO> 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<AppOrderRespVO> getOrderList(AppPageVo vo) {
|
||||
public PageResult<AppOrderRespVO> getOrderList(AppPageVo vo) {
|
||||
PageResult<DishOrderDO> dishOrderDOPageResult = dishOrderMapper.selectPage(vo, Wrappers.<DishOrderDO>lambdaQuery().eq(DishOrderDO::getUserId, vo.getUserId()).orderByDesc(DishOrderDO::getCreateTime));
|
||||
PageResult<AppOrderRespVO> appOrderRespVOPageResult = BeanUtils.toBean(dishOrderDOPageResult, AppOrderRespVO.class);
|
||||
for (AppOrderRespVO dishOrderDO : appOrderRespVOPageResult.getList()){
|
||||
List<AppOrderRespVO> list = appOrderRespVOPageResult.getList();
|
||||
for (AppOrderRespVO dishOrderDO : list) {
|
||||
List<AppOrderDetailRespVO> appOrderDetailRespVOS = orderDetailService.selectListByOrderId(dishOrderDO.getId());
|
||||
|
||||
if (CollectionUtil.isNotEmpty(appOrderDetailRespVOS)) {
|
||||
List<Long> dishIds = appOrderDetailRespVOS.stream().map(AppOrderDetailRespVO::getDishesId).collect(Collectors.toList());
|
||||
|
||||
List<DishesRespDto> dishInfo = dishesApi.getDishInfo(dishIds);
|
||||
Map<Long, DishesRespDto> 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<OrderDetailsRespVO> getPageOrderDetails(OrderDetailsReqVO reqVO) {
|
||||
List<Long> userIds=new ArrayList<>();
|
||||
if(ObjUtil.isNotEmpty(reqVO.getUserName())
|
||||
List<Long> 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<MemberUserDO>()
|
||||
.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<String, LocalDateTime> 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<DishOrderDO> pageResult = dishOrderMapper.selectPageList(reqVO, userIds, startTime, endTime);
|
||||
List<OrderDetailsRespVO> list=new ArrayList<>();
|
||||
List<OrderDetailsRespVO> 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<String,LocalDateTime> getTimePeriod(String type){
|
||||
if(TimePeriodEnum.MORNING.getCode().equalsIgnoreCase(type)){
|
||||
public Map<String, LocalDateTime> 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<DishOrderDO> getToPayByOrder(List<Long> orderIds) {
|
||||
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
|
||||
.in(DishOrderDO::getId, orderIds)
|
||||
.eq(DishOrderDO::getOrderStatus, DishOrderDO.INCOMPLETE));
|
||||
return dishOrderDOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBatch(List<DishOrderDO> orderDOS) {
|
||||
dishOrderMapper.updateBatch(orderDOS);
|
||||
@ -236,19 +273,19 @@ public class OrderServiceImpl implements OrderService {
|
||||
@Override
|
||||
public List<DishOrderDO> getDishOrderByTime(LocalDateTime startTime, LocalDateTime endTime) {
|
||||
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>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<DishOrderDO> 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);
|
||||
|
@ -240,4 +240,7 @@ public interface MemberUserService {
|
||||
*/
|
||||
PageResult<MemberUserDO> getGroupUserList(MemberUserListVO listVO);
|
||||
|
||||
String getCardId(Long userId);
|
||||
|
||||
|
||||
}
|
||||
|
@ -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<MemberUserDO> 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<MemberUserDO> 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();
|
||||
}
|
||||
}
|
||||
|
@ -53,4 +53,22 @@
|
||||
select member_id from member_group_member where group_id = #{groupId}
|
||||
</select>
|
||||
|
||||
<select id="getAllMember" resultType="Long">
|
||||
select member_id from member_group_member
|
||||
</select>
|
||||
|
||||
<select id="getGroupName" resultType="string">
|
||||
SELECT name FROM member_group WHERE
|
||||
id = (select group_id from member_group_member where member_id = #{userId})
|
||||
</select>
|
||||
|
||||
<select id="getGroupList" resultType="cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUserVo">
|
||||
SELECT mg.name,mm.member_id FROM member_group_member mm left join member_group mg on mm.group_id = mg.id
|
||||
where mm.member_id in
|
||||
<foreach item="id" collection="list" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -21,4 +21,9 @@ public interface DishesApi {
|
||||
* @Description: 根据菜品id 获取菜品名称
|
||||
*/
|
||||
public Map<Long,String> getDishName(List<Long> ids);
|
||||
|
||||
/**
|
||||
* @Description: 根据菜品id 批量获取菜品信息
|
||||
*/
|
||||
public List<DishesRespDto> getDishInfo(List<Long> ids);
|
||||
}
|
||||
|
@ -32,5 +32,14 @@ public class DishesRespDto {
|
||||
private String dishecType;
|
||||
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
* 总价格
|
||||
*/
|
||||
private BigDecimal dishesSumPrice;
|
||||
/**
|
||||
* 菜品总重量
|
||||
*/
|
||||
private BigDecimal dishesNumber;
|
||||
|
||||
|
||||
}
|
@ -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<Long, String> getDishName(List<Long> ids) {
|
||||
return dishesService.getDishName(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DishesRespDto> getDishInfo(List<Long> ids) {
|
||||
List<DishesDO> dishesList = dishesService.getDishesList(ids);
|
||||
return BeanUtils.toBean(dishesList, DishesRespDto.class);
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -44,4 +44,9 @@ public class DeviceInfoDO extends BaseDO {
|
||||
* 门店名称
|
||||
*/
|
||||
private String carteenName;
|
||||
|
||||
/**
|
||||
* 是否在线
|
||||
*/
|
||||
private String alive;
|
||||
}
|
||||
|
@ -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 <description class purpose>
|
||||
* @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);
|
||||
}
|
||||
}
|
@ -52,4 +52,11 @@ public interface DeviceInfoService {
|
||||
*/
|
||||
PageResult<DeviceInfoDO> getDeviceInfoPage(DeviceInfoPageReqVO pageReqVO);
|
||||
|
||||
void alive();
|
||||
|
||||
int updateAlive();
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -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<DeviceInfoDO>()
|
||||
.eq(DeviceInfoDO::getDeviceIp,deviceSn)
|
||||
.set(DeviceInfoDO::getAlive,"1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateAlive() {
|
||||
List<String> updateList = new ArrayList<>();
|
||||
List<DeviceInfoDO> deviceInfoDOS = deviceInfoMapper.selectList();
|
||||
List<String> 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<DeviceInfoDO>()
|
||||
.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,"无法获取设备编码");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -92,4 +92,5 @@ public interface DevuceService {
|
||||
void updateWeight(DevuceReqVO updateReqVO);
|
||||
List<DevuceListVO> getList();
|
||||
|
||||
|
||||
}
|
@ -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<DevuceListVO> list = devuceMapper.getList();
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
@ -46,6 +46,8 @@ public interface DishesService {
|
||||
* @return 菜品管理
|
||||
*/
|
||||
DishesDO getDishes(Long id);
|
||||
|
||||
List<DishesDO> getDishesList(List<Long> ids);
|
||||
DishesRespVO getDishes1(Long id);
|
||||
|
||||
/**
|
||||
|
@ -122,6 +122,12 @@ public class DishesServiceImpl implements DishesService {
|
||||
return dishesMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DishesDO> getDishesList(List<Long> ids) {
|
||||
return dishesMapper.selectList(Wrappers.<DishesDO>lambdaQuery()
|
||||
.in(DishesDO::getId,ids));
|
||||
}
|
||||
|
||||
@Override
|
||||
public DishesRespVO getDishes1(Long id) {
|
||||
DishesRespVO bean = BeanUtils.toBean(dishesMapper.selectById(id), DishesRespVO.class);
|
||||
|
Reference in New Issue
Block a user