This commit is contained in:
zengtao01
2024-09-29 17:31:59 +08:00
parent 0febebc82f
commit cc46939e86
11 changed files with 96 additions and 86 deletions

View File

@ -1,14 +1,7 @@
package cn.iocoder.yudao.framework.common.pojo; package cn.iocoder.yudao.framework.common.pojo;
import cn.iocoder.yudao.framework.common.exception.ErrorCode; import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import org.springframework.util.Assert;
import java.io.Serializable;
import java.util.Objects;
/** /**
* 通用返回 * 通用返回
@ -23,7 +16,7 @@ public class StoreResult<T> {
* *
* @see ErrorCode#getCode() * @see ErrorCode#getCode()
*/ */
private String statusCode; private Integer statusCode;
/** /**
* 返回数据 * 返回数据
*/ */
@ -40,7 +33,7 @@ public class StoreResult<T> {
public static <T> StoreResult<T> success(T data) { public static <T> StoreResult<T> success(T data) {
StoreResult<T> result = new StoreResult<>(); StoreResult<T> result = new StoreResult<>();
result.statusCode = "200"; result.statusCode = 200;
result.data = data; result.data = data;
result.message = "操作成功"; result.message = "操作成功";
result.success = true; result.success = true;
@ -48,8 +41,8 @@ public class StoreResult<T> {
} }
public static <T> StoreResult<T> fail(String message) { public static <T> StoreResult<T> fail(String message) {
StoreResult<T> result = new StoreResult<>(); StoreResult<T> result =new StoreResult<>();
result.statusCode = "300"; result.statusCode = 300;
result.message = message; result.message = message;
result.success = false; result.success = false;
return result; return result;

View File

@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.member.controller.admin.storegoods.vo; package cn.iocoder.yudao.module.member.controller.admin.storegoods.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.Data;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 商品 Response VO") @Schema(description = "管理后台 - 商品 Response VO")
@Data @Data
@ -15,7 +14,7 @@ public class StoreGoodsRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32656") @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32656")
@ExcelProperty("编号") @ExcelProperty("编号")
private Integer goodId; private Integer goodsId;
@Schema(description = "类别Id", example = "28357") @Schema(description = "类别Id", example = "28357")
@ExcelProperty("类别Id") @ExcelProperty("类别Id")

View File

@ -1,16 +1,14 @@
package cn.iocoder.yudao.module.member.controller.admin.storegoods.vo; package cn.iocoder.yudao.module.member.controller.admin.storegoods.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.Data;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 商品新增/修改 Request VO") @Schema(description = "管理后台 - 商品新增/修改 Request VO")
@Data @Data
public class StoreGoodsSaveReqVO { public class StoreGoodsSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32656") @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32656")
private Integer goodId; private Integer goodsId;
@Schema(description = "类别Id", example = "28357") @Schema(description = "类别Id", example = "28357")
private Integer categoryId; private Integer categoryId;

View File

@ -90,11 +90,11 @@ public class AppStoreController {
StoreResult<String> result = new StoreResult<>(); StoreResult<String> result = new StoreResult<>();
if (b) { if (b) {
result.setStatusCode("200"); result.setStatusCode(200);
result.setMessage("操作成功"); result.setMessage("操作成功");
result.setSuccess(true); result.setSuccess(true);
}else{ }else{
result.setStatusCode("300"); result.setStatusCode(300);
result.setSuccess(false); result.setSuccess(false);
} }
return JsonUtils.toJsonString(result); return JsonUtils.toJsonString(result);
@ -113,7 +113,7 @@ public class AppStoreController {
if(CollectionUtil.isEmpty(goodsIds)){ if(CollectionUtil.isEmpty(goodsIds)){
return JsonUtils.toJsonString(goodsResult); return JsonUtils.toJsonString(goodsResult);
} }
List<StoreGoodsDO> goodsDOS = storeGoodsService.getAll(null); List<StoreGoodsDO> goodsDOS = storeGoodsService.getAll(goodsIds);
List<StoreGoodsTypeDO> goodsTypeDOS = goodsTypeService.getAll(); List<StoreGoodsTypeDO> goodsTypeDOS = goodsTypeService.getAll();
List<StoreGoodsListVo> goodData = BeanUtils.toBean(goodsDOS, StoreGoodsListVo.class); List<StoreGoodsListVo> goodData = BeanUtils.toBean(goodsDOS, StoreGoodsListVo.class);
List<StoreGoodsTypeListVo> categoryData = BeanUtils.toBean(goodsTypeDOS, StoreGoodsTypeListVo.class); List<StoreGoodsTypeListVo> categoryData = BeanUtils.toBean(goodsTypeDOS, StoreGoodsTypeListVo.class);
@ -146,11 +146,17 @@ public class AppStoreController {
@PostMapping("/mgcr/order/payByCardOrder") @PostMapping("/mgcr/order/payByCardOrder")
@Operation(summary = "添加刷卡订单") @Operation(summary = "添加刷卡订单")
public String payByCardOrder(@RequestBody StoreOrderDto dto) { public String payByCardOrder(@RequestBody StoreOrderDto dto) {
Boolean b = orderService.cardPay(dto); String s1 = reverseHexAndConvert(dto.getCardNumber());
if(b){ System.out.println(s1);
dto.setCardNumber(s1);
String s = orderService.cardPay(dto);
if("true".equals(s)){
return JsonUtils.toJsonString(StoreResult.success(null)); return JsonUtils.toJsonString(StoreResult.success(null));
}else { } else if ("false".equals(s)) {
return JsonUtils.toJsonString(StoreResult.fail("余额不足")); return JsonUtils.toJsonString(StoreResult.fail("余额不足"));
}else {
return JsonUtils.toJsonString(StoreResult.fail(s));
} }
} }
@ -166,4 +172,23 @@ public class AppStoreController {
public String heartbeat() { public String heartbeat() {
return JsonUtils.toJsonString(StoreResult.success(null)); return JsonUtils.toJsonString(StoreResult.success(null));
} }
public String reverseHexAndConvert(String hexStr) {
// 将十六进制字符串反转,每两位一组
StringBuilder reversedHex = new StringBuilder();
for (int i = 0; i < hexStr.length(); i += 2) {
reversedHex.insert(0, hexStr.substring(i, i + 2));
}
// 将反转后的十六进制字符串转换为十进制
long decimalNumber = Long.parseLong(reversedHex.toString(), 16);
// 将十进制数转换为字符串并确保它有10位不足的前面补零
String decimalStr = String.valueOf(decimalNumber);
while (decimalStr.length() < 10) {
decimalStr = "0" + decimalStr;
}
return decimalStr;
}
} }

View File

@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.member.controller.app.store.vo; package cn.iocoder.yudao.module.member.controller.app.store.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
@Data @Data
public class StoreGoodsListVo { public class StoreGoodsListVo {
private Integer goodId; private Integer goodsId;
/** /**
* 类别Id * 类别Id
*/ */

View File

@ -1,11 +1,15 @@
package cn.iocoder.yudao.module.member.dal.dataobject.storegoods; package cn.iocoder.yudao.module.member.dal.dataobject.storegoods;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
/** /**
* 商品 DO * 商品 DO
@ -26,7 +30,7 @@ public class StoreGoodsDO extends BaseDO {
* 编号 * 编号
*/ */
@TableId @TableId
private Integer goodId; private Integer goodsId;
/** /**
* 类别Id * 类别Id
*/ */

View File

@ -1,23 +1,21 @@
package cn.iocoder.yudao.module.member.service.storegoods; package cn.iocoder.yudao.module.member.service.storegoods;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreGoodsPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.StoreGoodsSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO;
import cn.iocoder.yudao.module.member.dal.mysql.storegoods.StoreGoodsMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*; import javax.annotation.Resource;
import cn.iocoder.yudao.module.member.controller.admin.storegoods.vo.*; import java.util.List;
import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.storegoods.StoreGoodsMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_GOODS_NOT_EXISTS;
/** /**
* 商品 Service 实现类 * 商品 Service 实现类
@ -37,13 +35,13 @@ public class StoreGoodsServiceImpl implements StoreGoodsService {
StoreGoodsDO storeGoods = BeanUtils.toBean(createReqVO, StoreGoodsDO.class); StoreGoodsDO storeGoods = BeanUtils.toBean(createReqVO, StoreGoodsDO.class);
storeGoodsMapper.insert(storeGoods); storeGoodsMapper.insert(storeGoods);
// 返回 // 返回
return storeGoods.getGoodId(); return storeGoods.getGoodsId();
} }
@Override @Override
public void updateStoreGoods(StoreGoodsSaveReqVO updateReqVO) { public void updateStoreGoods(StoreGoodsSaveReqVO updateReqVO) {
// 校验存在 // 校验存在
validateStoreGoodsExists(updateReqVO.getGoodId()); validateStoreGoodsExists(updateReqVO.getGoodsId());
// 更新 // 更新
StoreGoodsDO updateObj = BeanUtils.toBean(updateReqVO, StoreGoodsDO.class); StoreGoodsDO updateObj = BeanUtils.toBean(updateReqVO, StoreGoodsDO.class);
storeGoodsMapper.updateById(updateObj); storeGoodsMapper.updateById(updateObj);
@ -78,7 +76,7 @@ public class StoreGoodsServiceImpl implements StoreGoodsService {
if (CollectionUtil.isEmpty(goodsIds)) { if (CollectionUtil.isEmpty(goodsIds)) {
return storeGoodsMapper.selectList(); return storeGoodsMapper.selectList();
}else { }else {
return storeGoodsMapper.selectList(new LambdaQueryWrapper<StoreGoodsDO>().in(StoreGoodsDO::getGoodId, goodsIds)); return storeGoodsMapper.selectList(new LambdaQueryWrapper<StoreGoodsDO>().in(StoreGoodsDO::getGoodsId, goodsIds));
} }
} }

View File

@ -1,16 +1,15 @@
package cn.iocoder.yudao.module.member.service.storeorder; package cn.iocoder.yudao.module.member.service.storeorder;
import java.util.*; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import javax.validation.*; import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*; import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.store.dto.FacePayDto; import cn.iocoder.yudao.module.member.controller.app.store.dto.FacePayDto;
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderDto; import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderDto;
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderUploadDto; import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderUploadDto;
import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo; import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import javax.validation.Valid;
import org.springframework.web.bind.annotation.RequestBody;
/** /**
* 商品订单 Service 接口 * 商品订单 Service 接口
@ -61,7 +60,7 @@ public interface StoreOrderService {
UserInfoVo facePay(FacePayDto dto); UserInfoVo facePay(FacePayDto dto);
Boolean cardPay(StoreOrderDto dto); String cardPay(StoreOrderDto dto);
void batchCacheOrder(StoreOrderUploadDto dto); void batchCacheOrder(StoreOrderUploadDto dto);
} }

View File

@ -1,48 +1,40 @@
package cn.iocoder.yudao.module.member.service.storeorder; package cn.iocoder.yudao.module.member.service.storeorder;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.math.Money;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.app.store.dto.*; import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.store.dto.FacePayDto;
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreGoodsDto;
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreLocalOrderDto;
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderDto;
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderUploadDto;
import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo; import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; 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.storeorder.StoreOrderMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
import cn.iocoder.yudao.module.member.service.card.CardService; import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService; import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import com.sun.org.apache.regexp.internal.RE;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.ArrayList;
import java.util.stream.Collectors; import java.util.List;
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_ORDER_NOT_EXISTS;
/** /**
* 商品订单 Service 实现类 * 商品订单 Service 实现类
@ -147,18 +139,18 @@ public class StoreOrderServiceImpl implements StoreOrderService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean cardPay(StoreOrderDto dto) { public String cardPay(StoreOrderDto dto) {
Double totalPrice = createOrder(dto).getTotalPrice(); Double totalPrice = createOrder(dto).getTotalPrice();
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
MemberUserDO userDO = userService.getByCardId(dto.getCardNumber()); MemberUserDO userDO = userService.getByCardId(dto.getCardNumber());
if (ObjectUtil.isEmpty(userDO)){ if (ObjectUtil.isEmpty(userDO)){
throw new ServiceException(CARD_NOT_BIND_USER); return "该卡未绑定用户";
} }
BigDecimal compute = compute(total, userDO.getId()); BigDecimal compute = compute(total, userDO.getId());
if (compute.compareTo(BigDecimal.ZERO) < 0) { if (compute.compareTo(BigDecimal.ZERO) < 0) {
return false; return "false";
} else { } else {
return true; return "true";
} }
} }

View File

@ -130,6 +130,9 @@ public class DeviceInfoServiceImpl implements DeviceInfoService {
List<FaceDeviceInfoDO> faceDeviceInfoDOS = faceDeviceInfoMapper.selectList(); List<FaceDeviceInfoDO> faceDeviceInfoDOS = faceDeviceInfoMapper.selectList();
List<String> macList = faceDeviceInfoDOS.stream().map(FaceDeviceInfoDO::getMac).collect(Collectors.toList()); List<String> macList = faceDeviceInfoDOS.stream().map(FaceDeviceInfoDO::getMac).collect(Collectors.toList());
for (String deviceSn : macList){ for (String deviceSn : macList){
if(StringUtils.isBlank(deviceSn)){
continue;
}
String time = RedisTemplate.opsForValue().get(deviceSn); String time = RedisTemplate.opsForValue().get(deviceSn);
if(StringUtils.isBlank(time)){ if(StringUtils.isBlank(time)){
upList.add(deviceSn); upList.add(deviceSn);

View File

@ -12,8 +12,8 @@ spring:
servlet: servlet:
# 文件上传相关配置项 # 文件上传相关配置项
multipart: multipart:
max-file-size: 20MB # 单个文件大小 max-file-size: 200MB # 单个文件大小
max-request-size: 40MB # 设置总上传的文件大小 max-request-size: 400MB # 设置总上传的文件大小
mvc: mvc:
pathmatch: pathmatch:
matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类