优化第一版

This commit is contained in:
zengtao01
2024-07-17 15:23:38 +08:00
parent f9600240d5
commit 2f8a2ae032
46 changed files with 660 additions and 127 deletions

View File

@ -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, "餐盘已存在");
}

View File

@ -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));
}

View File

@ -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 = "类型")

View File

@ -16,8 +16,8 @@ public class AdminCardRespVO {
@ExcelProperty("编号")
private Long id;
@Schema(description = "手机")
@ExcelProperty("手机")
@Schema(description = "")
@ExcelProperty("")
private String cardNo;
@Schema(description = "类型")

View File

@ -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 {

View File

@ -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 = "早餐")

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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:

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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 芋艿:登录用户类型;

View File

@ -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;
}

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -44,4 +44,15 @@ public class AppOrderDetailRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
private BigDecimal dishesBasePrice;
/**
* 总价格
*/
private BigDecimal dishesSumPrice;
/**
* 菜品总重量
*/
private BigDecimal dishesNumber;
}

View File

@ -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));
}
}

View File

@ -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);
}
}

View File

@ -70,4 +70,9 @@ public class DiningPlatesDO extends BaseDO {
*/
private LocalDateTime bindingTime;
/**
* 订单ID
*/
private Long orderId;
}

View File

@ -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);
}

View File

@ -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));
}

View File

@ -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 -> {

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -74,6 +74,13 @@ public interface OrderService {
*/
List<DishOrderDO> getToPay(List<Long> users);
/**
* 获取用户的未支付订单
* @return
*/
List<DishOrderDO> getToPayByOrder(List<Long> orderIds);
/**
* 更改用户的支付状态
* @return

View File

@ -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) {
// 插入
@ -144,13 +153,30 @@ public class OrderServiceImpl implements OrderService {
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());
dishOrderDO.setDetailList(appOrderDetailRespVOS);
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<>();
@ -158,13 +184,15 @@ public class OrderServiceImpl implements OrderService {
|| 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());
@ -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,10 +232,10 @@ 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)) {
@ -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);

View File

@ -240,4 +240,7 @@ public interface MemberUserService {
*/
PageResult<MemberUserDO> getGroupUserList(MemberUserListVO listVO);
String getCardId(Long userId);
}

View File

@ -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();
}
}

View File

@ -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>

View File

@ -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);
}

View File

@ -32,5 +32,14 @@ public class DishesRespDto {
private String dishecType;
private LocalDateTime createTime;
/**
* 总价格
*/
private BigDecimal dishesSumPrice;
/**
* 菜品总重量
*/
private BigDecimal dishesNumber;
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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();
}
}

View File

@ -44,4 +44,9 @@ public class DeviceInfoDO extends BaseDO {
* 门店名称
*/
private String carteenName;
/**
* 是否在线
*/
private String alive;
}

View File

@ -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);
}
}

View File

@ -52,4 +52,11 @@ public interface DeviceInfoService {
*/
PageResult<DeviceInfoDO> getDeviceInfoPage(DeviceInfoPageReqVO pageReqVO);
void alive();
int updateAlive();
}

View File

@ -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,"无法获取设备编码");
}
}
}

View File

@ -92,4 +92,5 @@ public interface DevuceService {
void updateWeight(DevuceReqVO updateReqVO);
List<DevuceListVO> getList();
}

View File

@ -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;
}
}

View File

@ -46,6 +46,8 @@ public interface DishesService {
* @return 菜品管理
*/
DishesDO getDishes(Long id);
List<DishesDO> getDishesList(List<Long> ids);
DishesRespVO getDishes1(Long id);
/**

View File

@ -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);