diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index 7fb7c36c..f39bf387 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -116,6 +116,7 @@ public interface ErrorCodeConstants { ErrorCode AMOUNT_NOT_ENOUGH = new ErrorCode(1_007_904_008, "金额不足"); ErrorCode CODE_NOT_TIME = new ErrorCode(1_007_904_008, "二维码过期"); ErrorCode STATUS_ERROR = new ErrorCode(1_007_904_007, "订单已完成或已退款"); + ErrorCode STATUS_ERROR_REFUND = new ErrorCode(1_007_904_007, "订单已退款"); ErrorCode STATUS_ERROR_CANCEL = new ErrorCode(1_007_904_007, "订单已取消"); ErrorCode ORDER_FAIL = new ErrorCode(1_007_904_008, "下单失败"); ErrorCode ORDER_CANCEL_FAIL = new ErrorCode(1_007_904_008, "订单取消失败"); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java index 8c3bd297..dd98394a 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java @@ -64,4 +64,7 @@ public class MemberUserBaseVO { private String cardId; @Schema(description = "人脸") private Long faceId; + + @Schema(description = "人脸") + private String type; } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java index 6d176c57..f4982400 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/storeorder/AppStoreOrderController.java @@ -106,7 +106,7 @@ public class AppStoreOrderController { } @GetMapping("/refund") - @Operation(summary = "退款") + @Operation(summary = "用户退款申请") public CommonResult refund(Integer orderId) { return success(storeOrderService.refund(orderId)); } @@ -117,4 +117,15 @@ public class AppStoreOrderController { storeOrderService.reduction(orderId, money); return CommonResult.success(true); } + + @GetMapping("/refundAdmin") + @Operation(summary = "管理员执行退款") + public CommonResult refundAdmin(Integer orderId) { + AddReqVO addReqVO = storeOrderService.refundAdmin(orderId); + //记录 + memberAsyncService.batchRecord(addReqVO); + return success(true); + } + + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java index 22633e65..468cf600 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import javax.validation.Valid; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -108,4 +109,6 @@ public interface DiningPlatesService { List getBindDiningPlatesList(); Map checkBindAndUnBind(String diningPlatesNum, Long storeId); + + BigDecimal getOrderMoney(Long orderId); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java index 05c4f5e2..49ab4276 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java @@ -524,4 +524,11 @@ public class DiningPlatesServiceImpl implements DiningPlatesService { return map; } + @Override + public BigDecimal getOrderMoney(Long orderId) { + DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(Wrappers.lambdaQuery() + .eq(DiningPlatesDO::getOrderId, orderId)); + String s = stringRedisTemplate.opsForValue().get(diningPlatesDO.getDiningPlatesNum() + "-" + diningPlatesDO.getStoreId()); + return StrUtil.isNotBlank(s)?new BigDecimal(s):null; + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java index a518eb98..49f9222e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java @@ -31,6 +31,7 @@ import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.enums.TimePeriodEnum; import cn.iocoder.yudao.module.member.service.amount.DeductionService; import cn.iocoder.yudao.module.member.service.business.BusinessService; +import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService; import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService; import cn.iocoder.yudao.module.member.service.refund.RefundService; import cn.iocoder.yudao.module.member.util.MemberConstants; @@ -87,6 +88,8 @@ public class OrderServiceImpl implements OrderService { private BusinessService businessService; @Resource private DeductionService deductionService; + @Resource + private DiningPlatesService diningPlatesService; @Override public Long createOrder(AppOrderSaveReqVO createReqVO) { @@ -478,7 +481,12 @@ public class OrderServiceImpl implements OrderService { } } else { - dishOrderDO.setReductionAmount(dishOrderDO.getReductionAmount().add(money)); + BigDecimal orderMoney = diningPlatesService.getOrderMoney(orderId); + BigDecimal add = dishOrderDO.getReductionAmount().add(money); + if (orderMoney != null && orderMoney.compareTo(add) < 0) { + add = orderMoney; + } + dishOrderDO.setReductionAmount(add); } dishOrderMapper.updateById(dishOrderDO); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java index afdd8875..06d15579 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java @@ -94,4 +94,6 @@ public interface StoreOrderService { Long refund(Integer orderId); List selectPayOrder(); + + AddReqVO refundAdmin(Integer orderId); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java index 31031cff..1a6e6957 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java @@ -309,6 +309,10 @@ public class StoreOrderServiceImpl implements StoreOrderService { @Override public void reduction(Long orderId, BigDecimal money) { StoreOrderDO storeOrderDO = storeOrderMapper.selectById(orderId); + + + + Double totalPrice = storeOrderDO.getTotalPrice(); BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); Double reductionPrice = storeOrderDO.getReductionPrice(); @@ -571,6 +575,58 @@ public class StoreOrderServiceImpl implements StoreOrderService { .eq(StoreOrderDO::getStatus,StoreOrderStatusEnum.PAY.getCode())); } + @Override + public AddReqVO refundAdmin(Integer orderId) { + StoreOrderDO storeOrderDO; + synchronized (getStoreOrderLock(LockManager.CANCEL_KEY)) { + storeOrderDO = storeOrderMapper.selectById(orderId); + if(ObjectUtil.isEmpty(storeOrderDO)){ + throw exception(STORE_ORDER_NOT_EXISTS); + } + if( storeOrderDO.getStatus().equals(StoreOrderStatusEnum.REFUND.getCode())){ + throw exception(STATUS_ERROR_REFUND); + } + if(storeOrderDO.getStatus().equals(StoreOrderStatusEnum.CANCEL.getCode())){ + throw exception(STATUS_ERROR_CANCEL); + } + } + + //修改状态 + storeOrderDO.setStatus(StoreOrderStatusEnum.REFUND.getCode()); + storeOrderMapper.updateById(storeOrderDO); + + //退款 + deductionService.reduction(storeOrderDO.getUserId(),BigDecimal.valueOf(storeOrderDO.getTotalPrice()) + ,BigDecimal.ZERO,BigDecimal.valueOf(storeOrderDO.getTotalPrice()),BigDecimal.ZERO); + + //更新库存 + List listByOrderId = orderDetailService.getListByOrderId(storeOrderDO.getOrderId()); + + AddReqVO addReqVO = new AddReqVO(); + addReqVO.setType(InventoryTypeEnum.IN.getCode()); + addReqVO.setOutType(OutTypeEnum.ORDER_ADD.getCode()); + List infos = new ArrayList<>(); + for (StoreOrderDetailDO detail : listByOrderId){ + GoodsInfoReqVO vo = new GoodsInfoReqVO(); + BeanUtil.copyProperties(detail,vo); + vo.setCarteenId(storeOrderDO.getCarteenId()); + infos.add(vo); + } + addReqVO.setList(infos); + storeGoodsInventoryService.createStoreGoodsInventory(addReqVO); + + //营业数据 + StatisticsVo statisticsVo = new StatisticsVo(); + statisticsVo.setCarteenId(storeOrderDO.getCarteenId()); + statisticsVo.setTotalMoney(BigDecimal.valueOf(storeOrderDO.getTotalPrice()).negate()); + statisticsVo.setOrderSum(-1); + statisticsVo.setTime(storeOrderDO.getCreateTime()); + statisticsVo.setOrderId(storeOrderDO.getOrderId().longValue()); + storeBusinessService.updateStatistics(statisticsVo); + + return addReqVO; + } + public void test() { //计算金额 //if (total.compareTo(wxAmount) <= 0) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/QRCodeWithJWTUtil.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/QRCodeWithJWTUtil.java index 0060909c..b36690f8 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/QRCodeWithJWTUtil.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/QRCodeWithJWTUtil.java @@ -77,10 +77,11 @@ public class QRCodeWithJWTUtil { public static void main(String[] args) { - String encode = DigestUtil.md5Hex("340"+ System.currentTimeMillis()); - System.out.println(encode); + String encode = "https://yclhit.com:8896/qrCodes/code?id=177799"; +// System.out.println(encode); String fileName = "QRCode_" + "test" + ".png"; String path = QRCodeWithJWTUtil.BASE_PATH+fileName; - QRCodeWithJWTUtil.generateQRCode(encode, 350, 350, path); + String s = QRCodeWithJWTUtil.generateQRCode(encode, 350, 350, path); + System.out.println(s); } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishes/vo/DishesSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishes/vo/DishesSaveReqVO.java index f2915f5c..08c5a0dd 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishes/vo/DishesSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishes/vo/DishesSaveReqVO.java @@ -67,4 +67,6 @@ public class DishesSaveReqVO { private String weekTime; private String timeSlot; + + private Integer dailySigns; } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishes/DishesDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishes/DishesDO.java index 51ac2a79..8d86904d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishes/DishesDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishes/DishesDO.java @@ -80,4 +80,6 @@ public class DishesDO extends BaseDO { private String weekTime; private String timeSlot; + + private Integer dailySigns; } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java index 555a0f95..7f9c8dc7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java @@ -31,7 +31,9 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.time.format.TextStyle; import java.util.ArrayList; import java.util.List; @@ -74,7 +76,7 @@ public class DishesServiceImpl implements DishesService { LocalDateTime today = LocalDateTime.now(); int hour = today.getHour(); String time = dishesMapper.getTime(hour); - String dayOfWeekInChinese = today.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINESE); + String dayOfWeekInChinese = getToday(); if(StrUtil.isBlank(createReqVO.getWeekTime())){ dishes.setWeekTime(dayOfWeekInChinese); } @@ -124,7 +126,7 @@ public class DishesServiceImpl implements DishesService { LocalDateTime today = LocalDateTime.now(); int hour = today.getHour(); String time = dishesMapper.getTime(hour); - String dayOfWeekInChinese = today.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINESE); + String dayOfWeekInChinese = getToday(); dishes.setWeekTime(dayOfWeekInChinese); dishes.setTimeSlot(time); //计算每g多少钱 @@ -274,11 +276,7 @@ public class DishesServiceImpl implements DishesService { LocalDateTime today = LocalDateTime.now(); int hour = today.getHour(); String time = dishesMapper.getTime(hour); - String dayOfWeekInChinese = today.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINESE); - - ArrayList week = new ArrayList<>(); - week.add(dayOfWeekInChinese); - week.add("整周"); + String dayOfWeekInChinese = getToday(); ArrayList todayTime = new ArrayList<>(); todayTime.add(time); @@ -287,9 +285,9 @@ public class DishesServiceImpl implements DishesService { Long carteenId = deviceInfoService.getCarteen(getHearder()); List dishesDOS = dishesMapper.selectList(Wrappers.lambdaQuery() .eq(DishesDO::getCarteenId, carteenId) - .in(DishesDO::getWeekTime, week) + .and(w->w.eq(DishesDO::getWeekTime, dayOfWeekInChinese).or().eq(DishesDO::getDailySigns, 1)) .in(DishesDO::getTimeSlot, todayTime) - .orderByDesc(DishesDO::getCreateTime)); + .orderByDesc(DishesDO::getDailySigns,DishesDO::getCreateTime)); return dishesDOS; } @@ -302,15 +300,12 @@ public class DishesServiceImpl implements DishesService { } @Override public List getTodayDishesNew() { - LocalDateTime today = LocalDateTime.now(); - String dayOfWeekInChinese = today.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINESE); - - ArrayList week = new ArrayList<>(); - week.add(dayOfWeekInChinese); - week.add("整周"); + String dayOfWeekInChinese = getToday(); List dishesDOS = dishesMapper.selectList(Wrappers.lambdaQuery() - .in(DishesDO::getWeekTime, week) + .eq(DishesDO::getWeekTime, dayOfWeekInChinese) + .or() + .eq(DishesDO::getDailySigns,1) .orderByDesc(DishesDO::getCreateTime)); return dishesDOS; } @@ -326,4 +321,11 @@ public class DishesServiceImpl implements DishesService { } } + public String getToday(){ + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return currentDate.format(formatter); + } + + } \ No newline at end of file