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

View File

@ -5,11 +5,9 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 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.customertraffic.vo.CustomerTrafficRespVO;
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.CarTeenInfoVO; import cn.iocoder.yudao.module.member.controller.admin.screen.vo.*;
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.userpreference.vo.UserPreferencePercentVO; 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.business.BusinessDO;
import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO; 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.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.annotation.security.PermitAll; import javax.annotation.security.PermitAll;
@ -192,4 +187,19 @@ public class ScreenController {
return success(deviceInfo); 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.setTagNames(tagNames);
} }
memberUserRespVO.setFaceUrl(memberUserService.getFaceUrl(memberUserRespVO.getId())); memberUserRespVO.setFaceUrl(memberUserService.getFaceUrl(memberUserRespVO.getId()));
memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id)); // memberUserRespVO.setGroupName(MemberGroupService.getGroupNameByUserId(id));
return success(memberUserRespVO); return success(memberUserRespVO);
} }
@ -153,9 +153,9 @@ public class MemberUserController {
convertSet(pageResult.getList(), MemberUserDO::getGroupId)); convertSet(pageResult.getList(), MemberUserDO::getGroupId));
PageResult<MemberUserRespVO> memberUserRespVOPageResult = MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups); 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->{ memberUserRespVOPageResult.getList().forEach(respVo->{
respVo.setGroupName(groupNames.get(respVo.getId())); // respVo.setGroupName(groupNames.get(respVo.getId()));
respVo.setFaceUrl(memberUserService.getFaceUrl(respVo.getId())); respVo.setFaceUrl(memberUserService.getFaceUrl(respVo.getId()));
}); });
return success(memberUserRespVOPageResult); return success(memberUserRespVOPageResult);

View File

@ -84,4 +84,14 @@ public class CardDO extends BaseDO {
* 门店 * 门店
*/ */
private Long carteenId; 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}") @Delete("delete from member_group_member where group_id = #{groupId}")
void deleteAssociation(Long 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.BusinessRespVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO; 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.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.controller.app.business.vo.BusinessDataVO;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
@ -66,4 +67,8 @@ public interface BusinessService {
BusinessDataVO getMonth(String time,Long carteenId); BusinessDataVO getMonth(String time,Long carteenId);
BusinessDO getToday(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.BusinessRespVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO; 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.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.controller.app.business.vo.BusinessDataVO;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO; 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.dataobject.orderdetail.OrderDetailDO;
@ -37,6 +38,7 @@ import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.YearMonth; import java.time.YearMonth;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields; import java.time.temporal.WeekFields;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -398,4 +400,75 @@ public class BusinessServiceImpl implements BusinessService {
.eq(BusinessDO::getCarteenId, carteenId)); .eq(BusinessDO::getCarteenId, carteenId));
return CollectionUtil.isNotEmpty(businessDOS)?businessDOS.get(0):new BusinessDO(); 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); 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 @Override
public PageResult<MemberUserDO> getUserList(MemberUserListVO listVO) { public PageResult<MemberUserDO> getUserList(MemberUserListVO listVO) {
//List<Long> memberList = memberGroupMapper.getMemberList(listVO.getGroupId()); //List<Long> memberList = memberGroupMapper.getMemberList(listVO.getGroupId());
List<Long> memberList = memberGroupMapper.getAllMember(); // List<Long> memberList = memberGroupMapper.getAllMember();
listVO.setIds(memberList); // listVO.setIds(memberList);
PageResult<MemberUserDO> groupUserList = memberUserService.getGroupUserList(listVO); return memberUserService.getGroupUserList(listVO);
return groupUserList;
} }
@ -199,7 +198,7 @@ public class MemberGroupServiceImpl implements MemberGroupService {
} }
@Override @Override
public Long getCarteenId(Long userId) { public List<Long> getCarteenId(Long userId) {
return memberGroupMapper.getCarteenId(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.AppStoreGoodsDetail;
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderVO; 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.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.storeorder.StoreOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@ -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.DeductionService;
import cn.iocoder.yudao.module.member.service.amount.LockManager; 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.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.storebusiness.StoreBusinessService;
import cn.iocoder.yudao.module.member.service.storegoodsinventory.StoreGoodsInventoryService; import cn.iocoder.yudao.module.member.service.storegoodsinventory.StoreGoodsInventoryService;
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService; import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
@ -77,7 +79,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
private StoreOrderDetailService orderDetailService; private StoreOrderDetailService orderDetailService;
@Resource @Resource
private CardService cardService; private MoneyService moneyService;
@Resource @Resource
private MemberUserService userService; private MemberUserService userService;
@ -232,8 +234,13 @@ public class StoreOrderServiceImpl implements StoreOrderService {
BigDecimal totalMoney = BigDecimal.valueOf(sum); BigDecimal totalMoney = BigDecimal.valueOf(sum);
MemberUserDO user = userService.getUser(Long.valueOf(s)); 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()); dto.setUserId(user.getId());
if(user.getMoney().compareTo(totalMoney) < 0){ if(user.getWxAmount().add(cashAmount).compareTo(totalMoney) < 0){
throw exception(AMOUNT_NOT_ENOUGH); throw exception(AMOUNT_NOT_ENOUGH);
} }

View File

@ -99,4 +99,12 @@ public class MemberTimeUtils {
return DateUtil.month(date) + 1; 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 id="getCarteenId" resultType="long">
SELECT carteen_id FROM member_group WHERE 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> </select>
</mapper> </mapper>