From 8d4f8a6706204bed5d3350a944552931ab928646 Mon Sep 17 00:00:00 2001 From: seesaw Date: Thu, 17 Oct 2024 16:01:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/enums/ErrorCodeConstants.java | 2 +- .../admin/business/vo/BusinessPageReqVO.java | 2 +- .../app/business/AppBusinessController.java | 5 +- .../app/business/vo/BusinessDataVO.java | 16 ++ .../member/service/amount/AmountService.java | 13 ++ .../service/amount/AmountServiceImpl.java | 73 +++++++ .../service/amount/CashRechargeService.java | 12 ++ .../amount/CashRechargeServiceImpl.java | 154 +++++++++++++ .../service/amount/DeductionService.java | 11 + .../service/amount/DeductionServiceImpl.java | 173 +++++++++++++++ .../service/amount/WxRechargeService.java | 11 + .../service/amount/WxRechargeServiceImpl.java | 204 ++++++++++++++++++ .../service/business/BusinessService.java | 7 +- .../service/business/BusinessServiceImpl.java | 153 +++++++------ .../service/user/MemberUserService.java | 2 + .../service/user/MemberUserServiceImpl.java | 5 + .../system/enums/ErrorCodeConstants.java | 1 + .../system/dal/mysql/dishes/DishesMapper.java | 2 + .../service/dishes/DishesServiceImpl.java | 24 ++- 19 files changed, 792 insertions(+), 78 deletions(-) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/vo/BusinessDataVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java 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 bc4c7e57..2e3c8f56 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 @@ -86,7 +86,7 @@ public interface ErrorCodeConstants { ErrorCode EXIST_TO_COMPLETE_ORDER = new ErrorCode(1_004_099_008, "存在未支付完的订单"); ErrorCode CARD_ALREADY_BIND = new ErrorCode(1_004_099_008, "卡号已绑定"); ErrorCode ORDER_NOT_COMPLETE = new ErrorCode(1_004_099_009, "订单未完成"); - ErrorCode NEED_ADD_USER = new ErrorCode(1_007_901_004, "请先添加人员"); + ErrorCode NEED_ADD_USER = new ErrorCode(1_007_901_004, "人员未指定"); ErrorCode ADMIN_CARD_NOT_EXISTS = new ErrorCode(1_007_901_005, "管理员卡不存在"); ErrorCode CARD_NOT_EXIST = new ErrorCode(1_007_901_005, "卡号不存在"); ErrorCode ADMIN_CARD = new ErrorCode(1_007_901_006, "管理员餐盘无法绑定"); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessPageReqVO.java index 3149fa93..71afcfa9 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessPageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/business/vo/BusinessPageReqVO.java @@ -49,7 +49,7 @@ public class BusinessPageReqVO extends PageParam { @Schema(description = "智能称重") private BigDecimal weigh; - @Schema(description = "创建时间") + @Schema(description = "日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/AppBusinessController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/AppBusinessController.java index 4228f8af..97313b12 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/AppBusinessController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/AppBusinessController.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; 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.business.vo.BusinessRespVO; +import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO; 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; @@ -35,8 +36,8 @@ public class AppBusinessController { @GetMapping("/data") @Operation(summary = "获得营业统计") - public CommonResult> getBusinessPage(String time,Long carteenId,Integer type) { - List result = new ArrayList<>(); + public CommonResult getBusinessPage(String time,Long carteenId,Integer type) { + BusinessDataVO result = new BusinessDataVO(); switch (type){ case 0: result = businessService.getDay(time, carteenId); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/vo/BusinessDataVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/vo/BusinessDataVO.java new file mode 100644 index 00000000..f74def83 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/business/vo/BusinessDataVO.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.member.controller.app.business.vo; + + +import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO; +import lombok.Data; + +import java.util.List; + +@Data +public class BusinessDataVO { + + private BusinessRespVO old; + private List businessList; + + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java new file mode 100644 index 00000000..3a89fc20 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.member.service.amount; + +import java.math.BigDecimal; + +public interface AmountService { + + + void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount); + + BigDecimal getAmount(Long userId); + + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java new file mode 100644 index 00000000..23f46fd7 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.member.service.amount; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +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.rechargelog.RechargeLogDO; +import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO; +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.order.DishOrderMapper; +import cn.iocoder.yudao.module.member.dal.mysql.rechargelog.RechargeLogMapper; +import cn.iocoder.yudao.module.member.dal.mysql.refund.IntegralRefundMapper; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; +import cn.iocoder.yudao.module.member.enums.CostTypeEnum; +import cn.iocoder.yudao.module.member.service.appup.AppUpService; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + + +/** + * 金额操作 Service 实现类 + * + * @author 开发账号 + */ + +@Service +@Slf4j +public class AmountServiceImpl implements AmountService { + + @Resource + private MemberUserMapper userMapper; + @Resource + private DishOrderMapper dishOrderMapper; + @Resource + private CardMapper cardMapper; + @Resource + private IntegralRefundMapper refundMapper; + @Resource + private RechargeLogMapper rechargeLogMapper; + + @Override + public void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount) { + synchronized (userId) { + MemberUserDO memberUserDO = userMapper.selectById(userId); + if (memberUserDO != null) { + memberUserDO.setMoney(memberUserDO.getMoney().add(money)); + memberUserDO.setCashAmount(memberUserDO.getCashAmount().add(cashAmount)); + memberUserDO.setGiftAmount(memberUserDO.getGiftAmount().add(giftAmount)); +// memberUserDO.setWxAmt(memberUserDO.getWxAmt().add(wxAmount)); + userMapper.updateById(memberUserDO); + } + } + } + + @Override + public BigDecimal getAmount(Long userId) { + return null; + } + + //微信充值 + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeService.java new file mode 100644 index 00000000..b8a02889 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeService.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.member.service.amount; + +import cn.iocoder.yudao.module.member.controller.admin.card.vo.RechargeVO; + +import java.math.BigDecimal; +import java.util.List; + +public interface CashRechargeService { + + + void rechargeByAdmin(List userIds, Long groupId, BigDecimal money); +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java new file mode 100644 index 00000000..98ef0d7e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java @@ -0,0 +1,154 @@ +package cn.iocoder.yudao.module.member.service.amount; + + +import cn.hutool.core.collection.CollectionUtil; +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.refund.RefundDO; +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.refund.IntegralRefundMapper; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; +import cn.iocoder.yudao.module.member.enums.CostTypeEnum; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 现金充值 Service 实现类 + * + * @author 开发账号 + */ +@Service +@Slf4j +public class CashRechargeServiceImpl implements CashRechargeService{ + + @Resource + private MemberUserMapper userMapper; + @Resource + private DishOrderMapper dishOrderMapper; + @Resource + private CardMapper cardMapper; + @Resource + private IntegralRefundMapper refundMapper; + @Resource + private MemberGroupMapper memberGroupMapper; + + + @Override + public void rechargeByAdmin(List userIds, Long groupId, BigDecimal money) { + List memberList = new ArrayList<>(); + if (groupId != null) { + memberList.addAll(memberGroupMapper.getMemberList(groupId)); + } else { + memberList.addAll(userIds); + } + //明细列表 + ArrayList addList = new ArrayList<>(); + + for (Long userId : memberList){ + + BigDecimal newMoney; + BigDecimal wxNewMoney; + BigDecimal giftNewMoney; + BigDecimal cashNewAmount; + + synchronized (userId){ + MemberUserDO memberUserDO = userMapper.selectById(userId); + //金额变动 + memberUserDO.setMoney(memberUserDO.getMoney().add(money)); + if (memberUserDO.getMoney().compareTo(BigDecimal.ZERO) > 0) { + memberUserDO.setCashAmount(memberUserDO.getCashAmount().add(money)); + } + userMapper.updateById(memberUserDO); + + newMoney = memberUserDO.getMoney(); + wxNewMoney = memberUserDO.getWxAmount(); + giftNewMoney = memberUserDO.getGiftAmount(); + cashNewAmount = memberUserDO.getCashAmount(); + } + + //记录明细 + CardDO add = new CardDO(); + add.setUserId(userId); + add.setFlag(CardDO.ADD); + add.setChangeMoney(money); + add.setType(CostTypeEnum.ADMIN_PAY.getCode()); + add.setMoney(newMoney); + add.setCashAmount(cashNewAmount); + add.setWxAmount(wxNewMoney); + add.setGiftAmount(giftNewMoney); + addList.add(add); + + } + + //处理订单 + handleOrderCash(memberList,money); + + //批量添加 + cardMapper.insertBatch(addList); + } + + + void handleOrderCash(List userIds, BigDecimal money) { + ArrayList updateList = new ArrayList<>(); + List refundOrder = getRefundOrder(); + //查询出所有未完全支付订单 + for (Long userId : userIds){ + BigDecimal cashMoney = money; + + List dishOrderDOS = dishOrderMapper.selectList(Wrappers.lambdaQuery() + .eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)); + + if (CollectionUtil.isNotEmpty(dishOrderDOS)) { + for (DishOrderDO dishOrderDO : dishOrderDOS) { + BigDecimal payAmount = dishOrderDO.getPayAmount(); + if(payAmount.compareTo(cashMoney)<=0){ + dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE); + dishOrderDO.setPayAmount(BigDecimal.ZERO); + dishOrderDO.setRefundAmount(dishOrderDO.getRefundAmount().add(payAmount)); + if(refundOrder.contains(dishOrderDO.getId())){ + dishOrderDO.setRefundAmount(BigDecimal.ZERO); + } + dishOrderDO.setCashAmount(dishOrderDO.getCashAmount().add(payAmount)); + cashMoney = cashMoney.subtract(payAmount); + updateList.add(dishOrderDO); + }else { + dishOrderDO.setPayAmount(payAmount.subtract(cashMoney)); + dishOrderDO.setRefundAmount(dishOrderDO.getRefundAmount().add(cashMoney)); + if(refundOrder.contains(dishOrderDO.getId())){ + dishOrderDO.setRefundAmount(BigDecimal.ZERO); + } + dishOrderDO.setCashAmount(dishOrderDO.getCashAmount().add(cashMoney)); + updateList.add(dishOrderDO); + break; + } + } + } + } + if(CollectionUtil.isNotEmpty(updateList)){ + dishOrderMapper.updateBatch(updateList); + } + + } + + public List getRefundOrder(){ + List refundDOS = refundMapper.selectList(Wrappers.lambdaQuery().in(RefundDO::getStatus, Arrays.asList("2", "3"))); + ArrayList orderIds = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(refundDOS)){ + List collect = refundDOS.stream().map(RefundDO::getOrderId).collect(Collectors.toList()); + orderIds.addAll(collect); + } + + return orderIds; + } +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java new file mode 100644 index 00000000..a75c3c6e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.member.service.amount; + +import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; + +import java.math.BigDecimal; +import java.util.List; + +public interface DeductionService { + + void deduction(DishOrderDO dishOrderDO); +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java new file mode 100644 index 00000000..e91de825 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java @@ -0,0 +1,173 @@ +package cn.iocoder.yudao.module.member.service.amount; + + +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo; +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.user.MemberUserMapper; +import cn.iocoder.yudao.module.member.enums.TimePeriodEnum; +import cn.iocoder.yudao.module.member.service.business.BusinessService; +import cn.iocoder.yudao.module.member.service.card.CardService; +import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService; +import cn.iocoder.yudao.module.member.service.order.OrderService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + + +/** + * 餐盘统一扣款 Service 实现类 + * + * @author 开发账号 + */ + +@Service +@Slf4j +public class DeductionServiceImpl implements DeductionService { + + @Resource + private StringRedisTemplate deductionRedisTemplate; + @Resource + private CardService cardService; + @Resource + private MemberUserService userService; + @Resource + private BusinessService businessService; + + @Override + public void deduction(DishOrderDO dishOrderDO) { + Long userId = dishOrderDO.getUserId(); + + BigDecimal newMoney; + BigDecimal changeMoney; + BigDecimal wxNewMoney; + BigDecimal giftNewMoney; + BigDecimal cashNewAmount; + + synchronized (userId) { + MemberUserDO user = userService.getUser(userId); + + //新的总价 + String s = deductionRedisTemplate.opsForValue().get(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId()); + BigDecimal total = new BigDecimal(StrUtil.isBlank(s) ? "0" : s); + //现有金额 + BigDecimal money = user.getMoney(); + //计算减免价格 + BigDecimal reductionAmount = BigDecimal.ZERO; + if (total.compareTo(BigDecimal.ZERO) > 0) { + reductionAmount = userService.getReductionAmount(userId, total, dishOrderDO.getCreateTime()); + } + if(dishOrderDO.getReductionAmount().compareTo(BigDecimal.ZERO) > 0){ + reductionAmount = reductionAmount.add(dishOrderDO.getReductionAmount()); + dishOrderDO.setReductionAmount(reductionAmount); + }else { + dishOrderDO.setReductionAmount(reductionAmount); + } + dishOrderDO.setReductionState(reductionAmount.compareTo(BigDecimal.ZERO) > 0 ? "1" : "0"); + //计算减免后的总价 + if (total.compareTo(reductionAmount) < 0) { + total = BigDecimal.ZERO; + } else { + total = total.subtract(reductionAmount); + } + + BigDecimal wxAmount = user.getWxAmount(); + BigDecimal giftAmount = user.getGiftAmount(); + BigDecimal cashAmount = user.getCashAmount(); + + user.setMoney(money.subtract(total)); + + //待支付金额 最大退款金额 + dishOrderDO.setRefundAmount(total); + if (money.compareTo(BigDecimal.ZERO) <= 0) { + dishOrderDO.setPayAmount(total); + dishOrderDO.setRefundAmount(BigDecimal.ZERO); + } else { + if (total.compareTo(money) > 0) { + dishOrderDO.setPayAmount(total.subtract(money)); + dishOrderDO.setRefundAmount(money); + } + } + + if (total.compareTo(money) > 0) { + dishOrderDO.setOrderStatus(DishOrderDO.TOCOMPLETE); + dishOrderDO.setWxAmount(wxAmount); + dishOrderDO.setCashAmount(cashAmount); + dishOrderDO.setGiftAmount(giftAmount); + + user.setWxAmount(BigDecimal.ZERO); + user.setCashAmount(BigDecimal.ZERO); + user.setGiftAmount(BigDecimal.ZERO); + } else { + dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE); + //计算金额 + if (total.compareTo(cashAmount) <= 0) { + user.setCashAmount(cashAmount.subtract(total)); + dishOrderDO.setCashAmount(total); + } else { + user.setCashAmount(BigDecimal.ZERO); + dishOrderDO.setCashAmount(cashAmount); + BigDecimal total1 = total.subtract(cashAmount); + if (total1.compareTo(giftAmount) <= 0) { + user.setGiftAmount(giftAmount.subtract(total1)); + dishOrderDO.setGiftAmount(total1); + } else { + user.setGiftAmount(BigDecimal.ZERO); + dishOrderDO.setGiftAmount(giftAmount); + BigDecimal total2 = total1.subtract(giftAmount); + + user.setWxAmount(wxAmount.subtract(total2)); + dishOrderDO.setWxAmount(total2); + } + } + } + + userService.updateById(user); + newMoney = user.getMoney(); + wxNewMoney = user.getWxAmount(); + giftNewMoney = user.getGiftAmount(); + cashNewAmount = user.getCashAmount(); + changeMoney = total; + } + + + + CardDO cardDO = new CardDO(); + cardDO.setType(TimePeriodEnum.getTimePeriod(dishOrderDO.getCreateTime())); + cardDO.setUserId(userId); + cardDO.setChangeMoney(changeMoney); + cardDO.setFlag(CardDO.MINUS); + cardDO.setMoney(newMoney); + cardDO.setCashAmount(cashNewAmount); + cardDO.setWxAmount(wxNewMoney); + cardDO.setGiftAmount(giftNewMoney); + + cardService.insertOne(cardDO); + + dishOrderDO.setTotalMoney(changeMoney); + dishOrderDO.setUpdateTime(LocalDateTime.now()); + deductionRedisTemplate.delete(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId()); + + //更新营业数据 + if(dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)){ + StatisticsVo statisticsVo = new StatisticsVo(); + statisticsVo.setCarteenId(dishOrderDO.getStoreId()); + statisticsVo.setTotalMoney(dishOrderDO.getTotalMoney()); + statisticsVo.setOrder_sum(1); + statisticsVo.setReduceMoney(dishOrderDO.getReductionAmount()); + statisticsVo.setTime(dishOrderDO.getCreateTime()); + statisticsVo.setOrderId(dishOrderDO.getId()); + businessService.updateStatistics(statisticsVo); + } + + } +} + diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeService.java new file mode 100644 index 00000000..ec6df3fa --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeService.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.member.service.amount; + +import java.math.BigDecimal; + + + + +public interface WxRechargeService { + + void wxRecharge(BigDecimal money, BigDecimal wxAmount, BigDecimal giftAmount, Long userId); +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java new file mode 100644 index 00000000..9176b20f --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java @@ -0,0 +1,204 @@ +package cn.iocoder.yudao.module.member.service.amount; + + +import cn.hutool.core.collection.CollectionUtil; +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.rechargelog.RechargeLogDO; +import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO; +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.order.DishOrderMapper; +import cn.iocoder.yudao.module.member.dal.mysql.rechargelog.RechargeLogMapper; +import cn.iocoder.yudao.module.member.dal.mysql.refund.IntegralRefundMapper; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; +import cn.iocoder.yudao.module.member.enums.CostTypeEnum; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + + + +/** + * 微信充值 Service 实现类 + * + * @author 开发账号 + */ +@Service +@Slf4j +public class WxRechargeServiceImpl implements WxRechargeService { + @Resource + private MemberUserMapper userMapper; + @Resource + private DishOrderMapper dishOrderMapper; + @Resource + private CardMapper cardMapper; + @Resource + private IntegralRefundMapper refundMapper; + @Resource + private RechargeLogMapper rechargeLogMapper; + + + @Override + public void wxRecharge(BigDecimal money, BigDecimal wxAmount, BigDecimal giftAmount, Long userId) { + + BigDecimal newMoney; + BigDecimal wxNewMoney; + BigDecimal giftNewMoney; + BigDecimal cashNewAmount; + + + synchronized (userId) { + //获取最新余额 + MemberUserDO memberUserDO = userMapper.selectById(userId); + + BigDecimal oldMoney = memberUserDO.getMoney(); + BigDecimal wxOldMoney = memberUserDO.getWxAmount(); + BigDecimal giftOldMoney = memberUserDO.getGiftAmount(); + BigDecimal cashAmount = memberUserDO.getCashAmount(); + + memberUserDO.setMoney(oldMoney.add(money)); + memberUserDO.setCashAmount(cashAmount); + memberUserDO.setGiftAmount(giftOldMoney); + memberUserDO.setWxAmount(wxOldMoney); + + if (memberUserDO.getMoney().compareTo(BigDecimal.ZERO) > 0) { + + if (oldMoney.compareTo(BigDecimal.ZERO) < 0) { + if (wxAmount.add(oldMoney).compareTo(BigDecimal.ZERO) >= 0) { + memberUserDO.setWxAmount(wxAmount.add(oldMoney)); + memberUserDO.setGiftAmount(giftOldMoney.add(giftAmount)); + } else { + BigDecimal left = wxAmount.add(oldMoney); + memberUserDO.setWxAmount(BigDecimal.ZERO); + memberUserDO.setGiftAmount(giftAmount.add(left)); + } + } else { + memberUserDO.setWxAmount(wxOldMoney.add(wxAmount)); + memberUserDO.setGiftAmount(giftOldMoney.add(giftAmount)); + + } + } + + userMapper.updateById(memberUserDO); + + newMoney = memberUserDO.getMoney(); + wxNewMoney = memberUserDO.getWxAmount(); + giftNewMoney = memberUserDO.getGiftAmount(); + cashNewAmount = memberUserDO.getCashAmount(); + + } + + + //明细处理 + CardDO cardDO = new CardDO(); + cardDO.setUserId(userId); + cardDO.setFlag(CardDO.ADD); + cardDO.setChangeMoney(money); + cardDO.setType(CostTypeEnum.WX_PAY.getCode()); + cardDO.setMoney(newMoney); + cardDO.setCashAmount(wxNewMoney); + cardDO.setGiftAmount(giftNewMoney); + cardDO.setWxAmount(cashNewAmount); + //处理未完全支付订单 + handleOrderWx(cardDO.getUserId(), money, wxAmount, giftAmount); + + cardMapper.insert(cardDO); + + + } + + void handleOrderWx(Long userId, BigDecimal money, BigDecimal wxMoney, BigDecimal giftMoney) { + + //开始的微信金额 + BigDecimal wxStart = wxMoney; + //已审核的订单 + List refundOrder = getRefundOrder(); + + //查询出所有未完全支付订单 + List dishOrderDOS = dishOrderMapper.selectList(Wrappers.lambdaQuery() + .eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)); + + ArrayList updateList = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(dishOrderDOS)) { + for (DishOrderDO dishOrderDO : dishOrderDOS) { + BigDecimal payAmount = dishOrderDO.getPayAmount(); + if (payAmount.compareTo(money) <= 0) { + dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE); + dishOrderDO.setPayAmount(BigDecimal.ZERO); + dishOrderDO.setRefundAmount(dishOrderDO.getRefundAmount().add(payAmount)); + if (refundOrder.contains(dishOrderDO.getId())) { + dishOrderDO.setRefundAmount(BigDecimal.ZERO); + } + if (payAmount.compareTo(wxMoney) <= 0) { + dishOrderDO.setWxAmount(dishOrderDO.getWxAmount().add(payAmount)); + wxMoney = wxMoney.subtract(payAmount); + } else { + dishOrderDO.setWxAmount(dishOrderDO.getWxAmount().add(wxMoney)); + wxMoney = BigDecimal.ZERO; + BigDecimal left = payAmount.subtract(wxMoney); + dishOrderDO.setGiftAmount(dishOrderDO.getGiftAmount().add(left)); + giftMoney = giftMoney.subtract(left); + } + money = money.subtract(payAmount); + + updateList.add(dishOrderDO); + } else { + dishOrderDO.setPayAmount(payAmount.subtract(money)); + dishOrderDO.setRefundAmount(dishOrderDO.getRefundAmount().add(money)); + if (refundOrder.contains(dishOrderDO.getId())) { + dishOrderDO.setRefundAmount(BigDecimal.ZERO); + } + dishOrderDO.setWxAmount(dishOrderDO.getWxAmount().add(wxMoney)); + dishOrderDO.setGiftAmount(dishOrderDO.getGiftAmount().add(giftMoney)); + wxMoney = BigDecimal.ZERO; + updateList.add(dishOrderDO); + break; + } + } + } + + rechargeLog(wxStart.subtract(wxMoney)); + if (CollectionUtil.isNotEmpty(updateList)) { + dishOrderMapper.updateBatch(updateList); + } + + } + + //补充金额记录 + public void rechargeLog(BigDecimal money) { + List rechargeLogDOList = rechargeLogMapper.selectList(Wrappers.lambdaQuery() + .apply("TO_DAYS(NOW())-TO_DAYS(create_time) = 0")); + if (CollectionUtil.isNotEmpty(rechargeLogDOList)) { + RechargeLogDO rechargeLogDO = rechargeLogDOList.get(0); + rechargeLogDO.setMoney(rechargeLogDO.getMoney().add(money)); + rechargeLogMapper.updateById(rechargeLogDO); + } else { + RechargeLogDO rechargeLogDO = new RechargeLogDO(); + rechargeLogDO.setMoney(money); + rechargeLogDO.setCreateTime(LocalDateTime.now()); + rechargeLogMapper.insert(rechargeLogDO); + } + } + + public List getRefundOrder() { + List refundDOS = refundMapper.selectList(Wrappers.lambdaQuery().in(RefundDO::getStatus, Arrays.asList("2", "3"))); + ArrayList orderIds = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(refundDOS)) { + List collect = refundDOS.stream().map(RefundDO::getOrderId).collect(Collectors.toList()); + orderIds.addAll(collect); + } + + return orderIds; + } + + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/business/BusinessService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/business/BusinessService.java index 4432f609..411f3f63 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/business/BusinessService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/business/BusinessService.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageR 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.controller.admin.business.vo.StatisticsVo; +import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO; import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; import javax.validation.*; @@ -58,9 +59,9 @@ public interface BusinessService { void updateStatistics(StatisticsVo vo); - List getDay(String time,Long carteenId); + BusinessDataVO getDay(String time, Long carteenId); - List getWeek(String time,Long carteenId); + BusinessDataVO getWeek(String time,Long carteenId); - List getMonth(String time,Long carteenId); + BusinessDataVO getMonth(String time,Long carteenId); } \ 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/business/BusinessServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/business/BusinessServiceImpl.java index 1530ac0d..d2021671 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/business/BusinessServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/business/BusinessServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.member.service.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -7,6 +8,7 @@ import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageR 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.controller.admin.business.vo.StatisticsVo; +import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO; import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO; import cn.iocoder.yudao.module.member.dal.mysql.business.BusinessMapper; @@ -159,7 +161,9 @@ public class BusinessServiceImpl implements BusinessService { } @Override - public List getDay(String time,Long carteenId) { + public BusinessDataVO getDay(String time,Long carteenId) { + + BusinessDataVO businessDataVO = new BusinessDataVO(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BusinessDO::getCarteenId,carteenId); @@ -167,11 +171,12 @@ public class BusinessServiceImpl implements BusinessService { wrapper.apply("DATE_FORMAT(create_time, '%Y-%m') = {0}", time); List businessDOS = businessMapper.selectList(wrapper); - Map map = businessDOS.stream().collect(Collectors.toMap(vo -> vo.getCreateTime().format(DateTimeFormatter.ofPattern("dd")) + Map map = businessDOS.stream().collect(Collectors.toMap( + vo -> vo.getCreateTime().toLocalDate().getDayOfMonth() , vo -> vo, (existing, replacement) -> existing)); // 创建一个Map来存储每天的数据 - Map monthData = new LinkedHashMap<>(); + Map monthData = new LinkedHashMap<>(); // 定义日期格式化器 @@ -188,30 +193,52 @@ public class BusinessServiceImpl implements BusinessService { // 循环遍历该月的每一天 for (int day = 1; day <= daysInMonth; day++) { - // 获取当前日期 - LocalDate date = yearMonth.atDay(day); - - // 格式化日期为两位数的形式 - String key = date.format(dayFormatter); - - if(map.get(key) == null){ + if(map.get(day) == null){ BusinessRespVO bean = new BusinessRespVO(); bean.setTurnover(BigDecimal.ZERO).setOrderSum(0).setReduce(BigDecimal.ZERO).setWeigh(BigDecimal.ZERO) .setBreakfast(BigDecimal.ZERO).setLunch(BigDecimal.ZERO).setDinner(BigDecimal.ZERO) - .setTime(key); - monthData.put(key,bean); + .setTime(String.valueOf(day)); + monthData.put(day,bean); }else { - BusinessRespVO bean = BeanUtils.toBean(map.get(key), BusinessRespVO.class); - bean.setTime(key); - monthData.put(key,bean); + BusinessRespVO bean = BeanUtils.toBean(map.get(day), BusinessRespVO.class); + bean.setTime(String.valueOf(day)); + monthData.put(day,bean); } } - return new ArrayList<>(monthData.values()); + + //获取上一个月最后一天的数据 + // 获取上一个月的最后一天 + YearMonth previousMonth = yearMonth.minusMonths(1); + LocalDate lastDayOfPreviousMonth = previousMonth.atEndOfMonth(); + // 定义格式化器,将 LocalDate 转换为 yyyy-MM-dd 格式 + DateTimeFormatter formatterDay = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 将 LocalDate 转换为指定格式的字符串 + String formattedDate = lastDayOfPreviousMonth.format(formatterDay); + + + LambdaQueryWrapper previousWrapper = new LambdaQueryWrapper<>(); + previousWrapper.eq(BusinessDO::getCarteenId,carteenId); + previousWrapper.orderByAsc(BusinessDO::getCreateTime); + previousWrapper.apply("DATE_FORMAT(create_time, '%Y-%m-%d') = {0}", formattedDate); + List previousList = businessMapper.selectList(previousWrapper); + BusinessRespVO old = new BusinessRespVO(); + if(CollectionUtil.isNotEmpty(previousList)){ + BeanUtil.copyProperties(previousList.get(0), old); + }else { + old.setTurnover(BigDecimal.ZERO).setOrderSum(0).setReduce(BigDecimal.ZERO).setWeigh(BigDecimal.ZERO) + .setBreakfast(BigDecimal.ZERO).setLunch(BigDecimal.ZERO).setDinner(BigDecimal.ZERO); + } + + businessDataVO.setOld(old); + businessDataVO.setBusinessList(new ArrayList<>(monthData.values())); + return businessDataVO; } @Override - public List getWeek(String time,Long carteenId) { + public BusinessDataVO getWeek(String time,Long carteenId) { + + BusinessDataVO businessDataVO = new BusinessDataVO(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BusinessDO::getCarteenId,carteenId); @@ -240,31 +267,18 @@ public class BusinessServiceImpl implements BusinessService { // 使用weekFields获取当前日期属于当月的第几周 int i = date.get(weekFields.weekOfMonth()); BusinessRespVO businessRespVO = map.get(i); - - //营业额 - businessRespVO.setTurnover(businessRespVO.getTurnover().add(businessDO.getTurnover())); - //订单数 - businessRespVO.setOrderSum(businessRespVO.getOrderSum()+businessDO.getOrderSum()); - //均单价 - businessRespVO.setPriceAvg(businessDO.getTurnover().divide(new BigDecimal(businessDO.getOrderSum()), 2, RoundingMode.HALF_UP)); - //减免金额 - businessRespVO.setReduce(businessRespVO.getReduce().add(businessDO.getReduce())); - //重量 - businessRespVO.setWeigh(businessRespVO.getWeigh().add(businessDO.getWeigh())); - //早 - businessRespVO.setBreakfast(businessRespVO.getBreakfast().add(businessDO.getBreakfast())); - //中 - businessRespVO.setLunch(businessRespVO.getLunch().add(businessDO.getLunch())); - //晚 - businessRespVO.setDinner(businessRespVO.getDinner().add(businessDO.getDinner())); - //门店 - businessRespVO.setCarteenId(businessDO.getCarteenId()); + handleBusiness(businessDO,businessRespVO); } - return new ArrayList<>(map.values()); + + + businessDataVO.setBusinessList(new ArrayList<>(map.values())); + return businessDataVO; } @Override - public List getMonth(String time,Long carteenId) { + public BusinessDataVO getMonth(String time,Long carteenId) { + + BusinessDataVO businessDataVO = new BusinessDataVO(); int year = MemberTimeUtils.getYearFromYearMonthString(time); @@ -287,33 +301,52 @@ public class BusinessServiceImpl implements BusinessService { LocalDate date = businessDO.getCreateTime().toLocalDate(); - // 使用weekFields获取当前日期属于当月的第几周 + // 当前日期属于哪月 int i = date.getMonthValue(); - BusinessRespVO businessRespVO = map.get(i); - - //营业额 - businessRespVO.setTurnover(businessRespVO.getTurnover().add(businessDO.getTurnover())); - //订单数 - businessRespVO.setOrderSum(businessRespVO.getOrderSum()+businessDO.getOrderSum()); - //均单价 - businessRespVO.setPriceAvg(businessDO.getTurnover().divide(new BigDecimal(businessDO.getOrderSum()), 2, RoundingMode.HALF_UP)); - //减免金额 - businessRespVO.setReduce(businessRespVO.getReduce().add(businessDO.getReduce())); - //重量 - businessRespVO.setWeigh(businessRespVO.getWeigh().add(businessDO.getWeigh())); - //早 - businessRespVO.setBreakfast(businessRespVO.getBreakfast().add(businessDO.getBreakfast())); - //中 - businessRespVO.setLunch(businessRespVO.getLunch().add(businessDO.getLunch())); - //晚 - businessRespVO.setDinner(businessRespVO.getDinner().add(businessDO.getDinner())); - //门店 - businessRespVO.setCarteenId(businessDO.getCarteenId()); + handleBusiness(businessDO,businessRespVO); } - return new ArrayList<>(map.values()); + + //上一年最后一月 + int previousYear = year - 1; + LambdaQueryWrapper previousWrapper = new LambdaQueryWrapper<>(); + previousWrapper.eq(BusinessDO::getCarteenId,carteenId); + previousWrapper.orderByAsc(BusinessDO::getCreateTime); + previousWrapper.apply("DATE_FORMAT(create_time, '%Y-%m') = {0}", previousYear+"-12"); + List previousList = businessMapper.selectList(previousWrapper); + BusinessRespVO previousVO = new BusinessRespVO(); + previousVO.setTurnover(BigDecimal.ZERO).setOrderSum(0).setReduce(BigDecimal.ZERO).setWeigh(BigDecimal.ZERO) + .setBreakfast(BigDecimal.ZERO).setLunch(BigDecimal.ZERO).setDinner(BigDecimal.ZERO); + for (BusinessDO businessDO : previousList) { + handleBusiness(businessDO,previousVO); + } + + businessDataVO.setOld(previousVO); + businessDataVO.setBusinessList(new ArrayList<>(map.values())); + + return businessDataVO; } + void handleBusiness(BusinessDO businessDO, BusinessRespVO businessRespVO) { + //营业额 + businessRespVO.setTurnover(businessRespVO.getTurnover().add(businessDO.getTurnover())); + //订单数 + businessRespVO.setOrderSum(businessRespVO.getOrderSum()+businessDO.getOrderSum()); + //均单价 + businessRespVO.setPriceAvg(businessDO.getTurnover().divide(new BigDecimal(businessDO.getOrderSum()), 2, RoundingMode.HALF_UP)); + //减免金额 + businessRespVO.setReduce(businessRespVO.getReduce().add(businessDO.getReduce())); + //重量 + businessRespVO.setWeigh(businessRespVO.getWeigh().add(businessDO.getWeigh())); + //早 + businessRespVO.setBreakfast(businessRespVO.getBreakfast().add(businessDO.getBreakfast())); + //中 + businessRespVO.setLunch(businessRespVO.getLunch().add(businessDO.getLunch())); + //晚 + businessRespVO.setDinner(businessRespVO.getDinner().add(businessDO.getDinner())); + //门店 + businessRespVO.setCarteenId(businessDO.getCarteenId()); + } } \ 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/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index edc5f39d..442f81f9 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -86,6 +86,8 @@ public interface MemberUserService { */ MemberUserDO getUser(Long id); + void updateById(MemberUserDO memberUserDO); + /** * 通过用户 ID 查询用户们 * diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index dfa3c47b..70ec6279 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -209,6 +209,11 @@ public class MemberUserServiceImpl implements MemberUserService { return memberUserMapper.selectById(id); } + @Override + public void updateById(MemberUserDO memberUserDO) { + memberUserMapper.updateById(memberUserDO); + } + @Override public List getUserList(Collection ids) { if (CollUtil.isEmpty(ids)) { diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 1a1f7eaa..94275721 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -174,6 +174,7 @@ public interface ErrorCodeConstants { ErrorCode CARTEEN_NOT_EXISt = new ErrorCode(1_002_029_002, "当前门店不存在"); // ========== 菜品管理 1-002-030-000 ========== ErrorCode DISHES_NOT_EXISTS = new ErrorCode(1_002_030_002, "当前菜品不存在"); + ErrorCode DISHES_EXISTS = new ErrorCode(1_002_030_003, "菜品名重复"); // ========== 菜品关联门店 1-002-032-000 ========== ErrorCode DISHES_TYPE_NOT_EXISTS = new ErrorCode(1_002_032_002, "当前菜品类型不存在"); // ========== 门店 流水 1_002_033_002 ========== diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishes/DishesMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishes/DishesMapper.java index f9547092..f660f915 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishes/DishesMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishes/DishesMapper.java @@ -30,6 +30,8 @@ public interface DishesMapper extends BaseMapperX { .eqIfPresent(DishesDO::getDishesVipWeighPrice, reqVO.getDishesVipWeighPrice()) .eqIfPresent(DishesDO::getDishecCook, reqVO.getDishecCook()) .eqIfPresent(DishesDO::getDishecType, reqVO.getDishecType()) + .eqIfPresent(DishesDO::getWeekTime, reqVO.getWeekTime()) + .eqIfPresent(DishesDO::getTimeSlot,reqVO.getTimeSlot()) .inIfPresent(DishesDO::getWeekTime, reqVO.getWeekTimes()) .betweenIfPresent(DishesDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(DishesDO::getId)); 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 f83127bc..cdf407df 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 @@ -69,7 +69,7 @@ public class DishesServiceImpl implements DishesService { DishesDO dishes = BeanUtils.toBean(createReqVO, DishesDO.class); dishes.setDeleted(Boolean.FALSE); - checkDishes(dishes.getDishesName(),dishes.getCarteenId()); + checkDishes(dishes.getDishesName(),dishes.getCarteenId(),null); LocalDateTime today = LocalDateTime.now(); int hour = today.getHour(); @@ -117,7 +117,7 @@ public class DishesServiceImpl implements DishesService { dishes.setCarteenId(carteenId); dishes.setDishesNumber(new BigDecimal("50")); - checkDishes(dishes.getDishesName(),dishes.getCarteenId()); + checkDishes(dishes.getDishesName(),dishes.getCarteenId(),null); LocalDateTime today = LocalDateTime.now(); int hour = today.getHour(); @@ -148,7 +148,7 @@ public class DishesServiceImpl implements DishesService { // 更新 DishesDO updateObj = BeanUtils.toBean(updateReqVO, DishesDO.class); - checkDishes(updateObj.getDishesName(),updateObj.getCarteenId()); + checkDishes(updateObj.getDishesName(),updateObj.getCarteenId(),updateReqVO.getId()); //计算每g多少钱 BigDecimal dishesSumPrice = updateObj.getDishesSumPrice(); @@ -175,10 +175,10 @@ public class DishesServiceImpl implements DishesService { @Override public void updateDishesApp(AppUpdateVO vo) { - validateDishesExists(vo.getId()); + DishesDO dishesDO = validateDishesExists(vo.getId()); DishesDO updateObj = BeanUtils.toBean(vo, DishesDO.class); - checkDishes(updateObj.getDishesName(),updateObj.getCarteenId()); + checkDishes(updateObj.getDishesName(),dishesDO.getCarteenId(),vo.getId()); //计算每g多少钱 BigDecimal dishesSumPrice = updateObj.getDishesSumPrice(); @@ -201,10 +201,12 @@ public class DishesServiceImpl implements DishesService { dishesMapper.deleteById(id); } - private void validateDishesExists(Long id) { - if (dishesMapper.selectById(id) == null) { + private DishesDO validateDishesExists(Long id) { + DishesDO dishesDO = dishesMapper.selectById(id); + if ( dishesDO == null) { throw exception(ErrorCodeConstants.DISHES_NOT_EXISTS); } + return dishesDO; } /** @@ -308,13 +310,13 @@ public class DishesServiceImpl implements DishesService { } - void checkDishes(String dishName,Long carteenId){ + void checkDishes(String dishName,Long carteenId,Long id){ List dishesDOS = dishesMapper.selectList(Wrappers.lambdaQuery() .eq(DishesDO::getCarteenId, carteenId) - .eq(DishesDO::getDishesName, dishName)); - + .eq(DishesDO::getDishesName, dishName) + .ne(id!=null, DishesDO::getId, id)); if(!dishesDOS.isEmpty()){ - throw exception(2000_10_002, "菜品名称已存在"); + throw exception(ErrorCodeConstants.DISHES_EXISTS); } }