diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java index 27b584f6..21572652 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java @@ -104,8 +104,8 @@ public class CardController { @PutMapping("/recharge") @Operation(summary = "充值") //@PreAuthorize("@ss.hasPermission('member:card:update')") - public CommonResult recharge(BigDecimal money,BigDecimal giftMoney) { - cardService.recharge(money, CardDO.ADD,giftMoney, SecurityFrameworkUtils.getLoginUserId()); + public CommonResult recharge(BigDecimal money,BigDecimal giftMoney,Long userId) { + cardService.recharge(money, CardDO.ADD,giftMoney, userId); return success(true); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/ScreenController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/ScreenController.java index 30943ce2..886e2eb2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/ScreenController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/ScreenController.java @@ -5,11 +5,9 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; 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.business.vo.BusinessRespVO; import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficRespVO; -import cn.iocoder.yudao.module.member.controller.admin.screen.vo.CarTeenInfoVO; -import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DeviceInfo; -import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO; -import cn.iocoder.yudao.module.member.controller.admin.screen.vo.StoreEvaluateVO; +import cn.iocoder.yudao.module.member.controller.admin.screen.vo.*; import cn.iocoder.yudao.module.member.controller.admin.userpreference.vo.UserPreferencePercentVO; import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO; @@ -26,10 +24,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.format.annotation.DateTimeFormat; -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 org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.annotation.security.PermitAll; @@ -192,4 +187,19 @@ public class ScreenController { return success(deviceInfo); } + @GetMapping("/turnover") + @Operation(summary = "获取食堂营业额") + @PermitAll + public CommonResult getCanteenTurnover(TurnoverVO turnoverVO) { + return success(businessService.getTurnover(turnoverVO)); + } + + @GetMapping("/turnoverHistogram") + @Operation(summary = "获取食堂营业额柱状图") + @PermitAll + public CommonResult> getCanteenTurnoverHistogram(TurnoverVO turnoverVO) { + return success(businessService.getTurnoverList(turnoverVO)); + } + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/vo/TurnoverVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/vo/TurnoverVO.java new file mode 100644 index 00000000..0c68abac --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/vo/TurnoverVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.member.controller.admin.screen.vo; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.sun.xml.internal.ws.developer.Serialization; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class TurnoverVO { + + @Schema(description = "开始时间 yyyy-MM-dd HH:mm:ss") + private String startTime; + + @Schema(description = "结束时间 yyyy-MM-dd HH:mm:ss") + private String endTime; + + @Schema(description = "门店") + private Long carteenId; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java index 71ac22c5..64484d45 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java @@ -126,7 +126,7 @@ public class MemberUserController { memberUserRespVO.setTagNames(tagNames); } memberUserRespVO.setFaceUrl(memberUserService.getFaceUrl(memberUserRespVO.getId())); - memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id)); +// memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id)); return success(memberUserRespVO); } @@ -153,9 +153,9 @@ public class MemberUserController { convertSet(pageResult.getList(), MemberUserDO::getGroupId)); PageResult memberUserRespVOPageResult = MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups); //处理用户分组返显 - Map groupNames = MemberGroupService.getGroupNameByUserIds(pageResult.getList().stream().map(MemberUserDO::getId).collect(Collectors.toList())); +// Map groupNames = MemberGroupService.getGroupNameByUserIds(pageResult.getList().stream().map(MemberUserDO::getId).collect(Collectors.toList())); memberUserRespVOPageResult.getList().forEach(respVo->{ - respVo.setGroupName(groupNames.get(respVo.getId())); +// respVo.setGroupName(groupNames.get(respVo.getId())); respVo.setFaceUrl(memberUserService.getFaceUrl(respVo.getId())); }); return success(memberUserRespVOPageResult); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java index 107bc247..1db58106 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java @@ -84,4 +84,14 @@ public class CardDO extends BaseDO { * 门店 */ private Long carteenId; + + /** + * 分组 + */ + private Long groupId; + + /** + * 组名 + */ + private String groupName; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java index 084f364f..a77bebae 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java @@ -62,5 +62,5 @@ public interface MemberGroupMapper extends BaseMapperX { @Delete("delete from member_group_member where group_id = #{groupId}") void deleteAssociation(Long groupId); - Long getCarteenId(Long userId); + List getCarteenId(Long userId); } 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 408171ee..cb40eb59 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.admin.screen.vo.TurnoverVO; import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO; import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; @@ -66,4 +67,8 @@ public interface BusinessService { BusinessDataVO getMonth(String time,Long carteenId); BusinessDO getToday(Long carteenId); + + BusinessRespVO getTurnover(TurnoverVO turnoverVO); + + List getTurnoverList(TurnoverVO turnoverVO); } \ 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 bc0ff7f0..7d413740 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 @@ -8,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.admin.screen.vo.TurnoverVO; 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; @@ -37,6 +38,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; import java.time.temporal.WeekFields; import java.util.*; import java.util.stream.Collectors; @@ -398,4 +400,75 @@ public class BusinessServiceImpl implements BusinessService { .eq(BusinessDO::getCarteenId, carteenId)); return CollectionUtil.isNotEmpty(businessDOS)?businessDOS.get(0):new BusinessDO(); } + + @Override + public BusinessRespVO getTurnover(TurnoverVO turnoverVO) { + + List businessDOS = businessMapper.selectList(Wrappers.lambdaQuery() + .between(BusinessDO::getCreateTime,MemberTimeUtils.string2Time(turnoverVO.getStartTime()), MemberTimeUtils.string2Time(turnoverVO.getEndTime())) + .eq(BusinessDO::getCarteenId, turnoverVO.getCarteenId())); + BusinessRespVO businessDO = getInitBusinessRespVO(); + if(CollectionUtil.isNotEmpty(businessDOS)){ + businessDO.setTurnover(businessDOS.stream().map(BusinessDO::getTurnover).reduce(BigDecimal.ZERO, BigDecimal::add)); + businessDO.setOrderSum(businessDOS.stream().map(BusinessDO::getOrderSum).reduce(0, Integer::sum)); + businessDO.setCustomerSum(businessDOS.stream().map(BusinessDO::getCustomerSum).reduce(0, Integer::sum)); + businessDO.setPriceAvg(businessDOS.stream().map(BusinessDO::getPriceAvg).reduce(BigDecimal.ZERO, BigDecimal::add)); + businessDO.setBreakfast(businessDOS.stream().map(BusinessDO::getBreakfast).reduce(BigDecimal.ZERO, BigDecimal::add)); + businessDO.setLunch(businessDOS.stream().map(BusinessDO::getLunch).reduce(BigDecimal.ZERO, BigDecimal::add)); + businessDO.setDinner(businessDOS.stream().map(BusinessDO::getDinner).reduce(BigDecimal.ZERO, BigDecimal::add)); + businessDO.setBreakfastNum(businessDOS.stream().map(BusinessDO::getBreakfastNum).reduce(0, Integer::sum)); + businessDO.setLunchNum(businessDOS.stream().map(BusinessDO::getLunchNum).reduce(0, Integer::sum)); + businessDO.setDinnerNum(businessDOS.stream().map(BusinessDO::getDinnerNum).reduce(0, Integer::sum)); + } + return businessDO; + } + + @Override + public List getTurnoverList(TurnoverVO turnoverVO) { + LocalDateTime startTime = MemberTimeUtils.string2Time(turnoverVO.getStartTime()); + LocalDateTime endTime = MemberTimeUtils.string2Time(turnoverVO.getEndTime()); + + LocalDate startDate = startTime.toLocalDate(); + LocalDate endDate = endTime.toLocalDate(); + if(startDate.equals(endDate)){ + // 获取本月开始时间:本月的第一天00:00:00 + startDate= startTime.with(TemporalAdjusters.firstDayOfMonth()).toLocalDate(); + startTime = startDate.atStartOfDay(); + + // 获取本月结束时间:本月的最后一天23:59:59.999999999 + endDate = endTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate(); + endTime = endDate.atTime(LocalTime.MAX); + } + List businessDOS = businessMapper.selectList(Wrappers.lambdaQuery() + .between(BusinessDO::getCreateTime,startTime, endTime) + .eq(BusinessDO::getCarteenId, turnoverVO.getCarteenId())); + + Map map = businessDOS.stream() + .filter(Objects::nonNull) // 过滤掉null值 + .collect(Collectors.toMap( + vo -> vo.getCreateTime().toLocalDate().getDayOfMonth(), + vo -> vo, + (existing, replacement) -> existing + )); + // 创建一个Map来存储每天的数据 + Map monthData = new LinkedHashMap<>(); + + int start = startDate.getDayOfMonth(); + + int end = endDate.getDayOfMonth(); + + for (int day = start; day <= end; day++) { + new BusinessRespVO(); + BusinessRespVO bean; + if(map.get(day) == null){ + bean = getInitBusinessRespVO().setTime(String.valueOf(day)); + }else { + bean = BeanUtils.toBean(map.get(day), BusinessRespVO.class); + bean.setTime(String.valueOf(day)); + } + monthData.put(day,bean); + + } + return new ArrayList<>(monthData.values()); + } } \ 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/group/MemberGroupService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java index 05b81989..84018341 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java @@ -132,5 +132,5 @@ public interface MemberGroupService { void setAdmin(GroupAdminReqVO vo); - Long getCarteenId(Long userId); + List getCarteenId(Long userId); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java index b5775a1e..04f835fb 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java @@ -148,10 +148,9 @@ public class MemberGroupServiceImpl implements MemberGroupService { @Override public PageResult getUserList(MemberUserListVO listVO) { //List memberList = memberGroupMapper.getMemberList(listVO.getGroupId()); - List memberList = memberGroupMapper.getAllMember(); - listVO.setIds(memberList); - PageResult groupUserList = memberUserService.getGroupUserList(listVO); - return groupUserList; +// List memberList = memberGroupMapper.getAllMember(); +// listVO.setIds(memberList); + return memberUserService.getGroupUserList(listVO); } @@ -199,7 +198,7 @@ public class MemberGroupServiceImpl implements MemberGroupService { } @Override - public Long getCarteenId(Long userId) { + public List getCarteenId(Long userId) { return memberGroupMapper.getCarteenId(userId); } } 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 29e1886c..af5eb859 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 @@ -23,6 +23,7 @@ import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo; import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreGoodsDetail; import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderVO; import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.CardDto; +import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; @@ -32,6 +33,7 @@ import cn.iocoder.yudao.module.member.service.amount.AmountService; import cn.iocoder.yudao.module.member.service.amount.DeductionService; import cn.iocoder.yudao.module.member.service.amount.LockManager; import cn.iocoder.yudao.module.member.service.card.CardService; +import cn.iocoder.yudao.module.member.service.money.MoneyService; import cn.iocoder.yudao.module.member.service.storebusiness.StoreBusinessService; import cn.iocoder.yudao.module.member.service.storegoodsinventory.StoreGoodsInventoryService; import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService; @@ -77,7 +79,7 @@ public class StoreOrderServiceImpl implements StoreOrderService { private StoreOrderDetailService orderDetailService; @Resource - private CardService cardService; + private MoneyService moneyService; @Resource private MemberUserService userService; @@ -232,8 +234,13 @@ public class StoreOrderServiceImpl implements StoreOrderService { BigDecimal totalMoney = BigDecimal.valueOf(sum); MemberUserDO user = userService.getUser(Long.valueOf(s)); + MoneyDO moneyDO = moneyService.getMoney(user.getId(), storeId); + BigDecimal cashAmount = BigDecimal.ZERO; + if(ObjectUtil.isNotEmpty(moneyDO)){ + cashAmount = moneyDO.getCashAmount(); + } dto.setUserId(user.getId()); - if(user.getMoney().compareTo(totalMoney) < 0){ + if(user.getWxAmount().add(cashAmount).compareTo(totalMoney) < 0){ throw exception(AMOUNT_NOT_ENOUGH); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberTimeUtils.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberTimeUtils.java index 8eec3112..9c63cd99 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberTimeUtils.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberTimeUtils.java @@ -99,4 +99,12 @@ public class MemberTimeUtils { return DateUtil.month(date) + 1; } + public static LocalDateTime string2Time(String time) { + // 定义日期字符串格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + // 将字符串解析为LocalDate对象 + return LocalDateTime.parse(time, formatter); + } + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml index 6f3f436c..c0947ae6 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml @@ -88,7 +88,7 @@ \ No newline at end of file