This commit is contained in:
zt
2024-12-24 17:19:56 +08:00
parent 211e30b199
commit dd82390592
13 changed files with 159 additions and 23 deletions

View File

@ -104,8 +104,8 @@ public class CardController {
@PutMapping("/recharge")
@Operation(summary = "充值")
//@PreAuthorize("@ss.hasPermission('member:card:update')")
public CommonResult<Boolean> recharge(BigDecimal money,BigDecimal giftMoney) {
cardService.recharge(money, CardDO.ADD,giftMoney, SecurityFrameworkUtils.getLoginUserId());
public CommonResult<Boolean> recharge(BigDecimal money,BigDecimal giftMoney,Long userId) {
cardService.recharge(money, CardDO.ADD,giftMoney, userId);
return success(true);
}

View File

@ -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<BusinessRespVO> getCanteenTurnover(TurnoverVO turnoverVO) {
return success(businessService.getTurnover(turnoverVO));
}
@GetMapping("/turnoverHistogram")
@Operation(summary = "获取食堂营业额柱状图")
@PermitAll
public CommonResult<List<BusinessRespVO>> getCanteenTurnoverHistogram(TurnoverVO turnoverVO) {
return success(businessService.getTurnoverList(turnoverVO));
}
}

View File

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

View File

@ -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<MemberUserRespVO> memberUserRespVOPageResult = MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups);
//处理用户分组返显
Map<Long, String> groupNames = MemberGroupService.getGroupNameByUserIds(pageResult.getList().stream().map(MemberUserDO::getId).collect(Collectors.toList()));
// Map<Long, String> groupNames = MemberGroupService.getGroupNameByUserIds(pageResult.getList().stream().map(MemberUserDO::getId).collect(Collectors.toList()));
memberUserRespVOPageResult.getList().forEach(respVo->{
respVo.setGroupName(groupNames.get(respVo.getId()));
// respVo.setGroupName(groupNames.get(respVo.getId()));
respVo.setFaceUrl(memberUserService.getFaceUrl(respVo.getId()));
});
return success(memberUserRespVOPageResult);

View File

@ -84,4 +84,14 @@ public class CardDO extends BaseDO {
* 门店
*/
private Long carteenId;
/**
* 分组
*/
private Long groupId;
/**
* 组名
*/
private String groupName;
}

View File

@ -62,5 +62,5 @@ public interface MemberGroupMapper extends BaseMapperX<MemberGroupDO> {
@Delete("delete from member_group_member where group_id = #{groupId}")
void deleteAssociation(Long groupId);
Long getCarteenId(Long userId);
List<Long> getCarteenId(Long userId);
}

View File

@ -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<BusinessRespVO> getTurnoverList(TurnoverVO turnoverVO);
}

View File

@ -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<BusinessDO> businessDOS = businessMapper.selectList(Wrappers.<BusinessDO>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<BusinessRespVO> 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<BusinessDO> businessDOS = businessMapper.selectList(Wrappers.<BusinessDO>lambdaQuery()
.between(BusinessDO::getCreateTime,startTime, endTime)
.eq(BusinessDO::getCarteenId, turnoverVO.getCarteenId()));
Map<Integer, BusinessDO> map = businessDOS.stream()
.filter(Objects::nonNull) // 过滤掉null值
.collect(Collectors.toMap(
vo -> vo.getCreateTime().toLocalDate().getDayOfMonth(),
vo -> vo,
(existing, replacement) -> existing
));
// 创建一个Map来存储每天的数据
Map<Integer, BusinessRespVO> 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());
}
}

View File

@ -132,5 +132,5 @@ public interface MemberGroupService {
void setAdmin(GroupAdminReqVO vo);
Long getCarteenId(Long userId);
List<Long> getCarteenId(Long userId);
}

View File

@ -148,10 +148,9 @@ public class MemberGroupServiceImpl implements MemberGroupService {
@Override
public PageResult<MemberUserDO> getUserList(MemberUserListVO listVO) {
//List<Long> memberList = memberGroupMapper.getMemberList(listVO.getGroupId());
List<Long> memberList = memberGroupMapper.getAllMember();
listVO.setIds(memberList);
PageResult<MemberUserDO> groupUserList = memberUserService.getGroupUserList(listVO);
return groupUserList;
// List<Long> 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<Long> getCarteenId(Long userId) {
return memberGroupMapper.getCarteenId(userId);
}
}

View File

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

View File

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

View File

@ -88,7 +88,7 @@
<select id="getCarteenId" resultType="long">
SELECT carteen_id FROM member_group WHERE
id = (select group_id from member_group_member where member_id = #{userId})
id in (select group_id from member_group_member where member_id = #{userId})
</select>
</mapper>