查看订单详情进行分页

This commit is contained in:
qjq
2024-11-20 16:55:02 +08:00
parent 8c21220c48
commit fd165dc9b4
5 changed files with 130 additions and 37 deletions

View File

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.member.controller.admin.billing.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Schema(description = "小程序 - 开票选择订单详情")
@Data
public class BillingPageDataVo extends PageParam {
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date time;
private Integer billingType;
private Long carteenId;
private Long userId;
}

View File

@ -3,10 +3,7 @@ package cn.iocoder.yudao.module.member.controller.app.billing;
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.billing.vo.BillingPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMoneyVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.billing.BillingDO;
import cn.iocoder.yudao.module.member.service.billing.BillingService;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -79,22 +76,14 @@ public class AppBillingController {
}
@GetMapping("/totalMoney")
@Operation(summary = "获取月时间段的金额")
public CommonResult<BigDecimal> getBillingPage(@DateTimeFormat(pattern = "yyyy-MM-dd")
@RequestParam("time") Date time,
@RequestParam("billingType") Integer billingType,
@RequestParam("carteenId") Long carteenId,
@RequestParam("userId")Long userId) {
BigDecimal totalMoney = billingService.getTotalMoney(time, billingType, carteenId,userId);
public CommonResult<BigDecimal> getBillingPage(BillingPageDataVo vo) {
BigDecimal totalMoney = billingService.getTotalMoney(vo);
return success(totalMoney);
}
@GetMapping("/data")
@Operation(summary = "获取月时间段的订单详情")
public CommonResult<Object> getData(@DateTimeFormat(pattern = "yyyy-MM-dd")
@RequestParam("time") Date time,
@RequestParam("billingType") Integer billingType,
@RequestParam("carteenId") Long carteenId,
@RequestParam("userId")Long userId) {
Object data = billingService.getData(time, billingType, carteenId,userId);
public CommonResult<Object> getData(BillingPageDataVo vo) {
Object data = billingService.getData(vo);
return success(data);
}
@GetMapping("/TypeTotal")

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.member.service.billing;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageDataVo;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMoneyVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO;
@ -66,13 +67,10 @@ public interface BillingService {
/**
* 获取指定时间段的所有金额
* @param time
* @param billingType
* @param carteenId
* @return
*/
BigDecimal getTotalMoney(Date time,Integer billingType,Long carteenId,Long userId);
Object getData(Date time,Integer billingType,Long carteenId,Long userId);
BigDecimal getTotalMoney(BillingPageDataVo vo);
Object getData(BillingPageDataVo vo);
String getMemberId(Long userId);
/**

View File

@ -5,6 +5,7 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
@ -13,9 +14,14 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageDataVo;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMoneyVO;
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.orderdetail.vo.OrderDetailRespVO;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleRespVO;
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderRespVO;
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderDetailVo;
import cn.iocoder.yudao.module.member.dal.dataobject.billing.BillingDO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO;
@ -29,6 +35,9 @@ import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper;
import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper;
import cn.iocoder.yudao.module.member.enums.*;
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
@ -41,6 +50,7 @@ import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.BillingEnum.BILLING_CANTEEN;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
/**
@ -64,6 +74,55 @@ public class BillingServiceImpl implements BillingService {
private MemberGroupMapper memberGroupMapper;
@Resource
private CardMapper cardMapper;
@Resource
private StoreOrderDetailService storeOrderDetailService;
@Resource
private CarteenApi carteenApi;
/**
* 食堂
* @param startTime
* @param endTime
* @return
*/
public PageResult<DishOrderDO> getDishOrderDO(BillingPageDataVo vo,Date startTime, Date endTime, List<Long> ids){
return dishOrderMapper.selectPage(vo,new LambdaQueryWrapperX<DishOrderDO>()
.betweenIfPresent(DishOrderDO::getCreateTime,startTime,endTime)
.eq(DishOrderDO::getOrderStatus,DishOrderDO.COMPLETE)
.eq(DishOrderDO::getBillingExist,Boolean.FALSE)
.eq(DishOrderDO::getStoreId,vo.getCarteenId())
.in(DishOrderDO::getUserId,ids)
);
}
/**
* 超市
* @param startTime
* @param endTime
* @return
*/
public PageResult<StoreOrderDO> getStoreOrderDO(BillingPageDataVo vo,Date startTime, Date endTime, List<Long> ids){
return storeOrderMapper.selectPage(vo,new LambdaQueryWrapperX<StoreOrderDO>()
.betweenIfPresent(StoreOrderDO::getCreateTime,startTime,endTime)
.eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode())
.eq(StoreOrderDO::getBillingExist,Boolean.FALSE)
.eq(StoreOrderDO::getCarteenId,vo.getCarteenId())
.in(StoreOrderDO::getUserId,ids)
);
}
/**
* 太空舱
* @param startTime
* @param endTime
* @return
*/
public PageResult<OrderSpaceCapsuleDO> getOrderSpaceCapsuleDO(BillingPageDataVo vo,Date startTime, Date endTime, List<Long> ids){
return orderSpaceCapsuleMapper.selectPage(vo,new LambdaQueryWrapperX<OrderSpaceCapsuleDO>()
.betweenIfPresent(OrderSpaceCapsuleDO::getCreateTime,startTime,endTime)
.eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())
.eq(OrderSpaceCapsuleDO::getBillingExist,Boolean.FALSE)
.eq(OrderSpaceCapsuleDO::getCarteenId,vo.getCarteenId())
.in(OrderSpaceCapsuleDO::getUserId,ids)
);
}
/**
* 食堂
* @param startTime
@ -426,21 +485,37 @@ public class BillingServiceImpl implements BillingService {
.map(f -> BigDecimal.valueOf(f.getTotalPrice()))
.reduce(BigDecimal.ZERO, BigDecimal::add); // 求和
}
private List<?> getOrders(Date time, Integer billingType,List<Long> ids,Long carteenId) {
// 获取时间内的订单
DateTime start = DateUtil.beginOfMonth(time);
DateTime end = DateUtil.endOfMonth(time);
switch (BillingEnum.fromCode(billingType)) {
case BILLING_CANTEEN:
return getDishOrderDO(start, end, ids,carteenId);
case BILLING_SUPERMARKET:
return getStoreOrderDO(start, end, ids,carteenId);
case BILLING_SPACE_CAPSULE:
return getOrderSpaceCapsuleDO(start, end, ids,carteenId);
default:
throw new IllegalArgumentException("Unsupported billing type");
}
}
@Override
public BigDecimal getTotalMoney(Date time, Integer billingType, Long carteenId, Long userId) {
List<?> data =(List<?>) getData(time, billingType, carteenId, userId);
public BigDecimal getTotalMoney(BillingPageDataVo vo) {
// 获取当前单位下的所有成员
List<Long> ids = getMemberListByUserId(vo.getUserId());
List<?> data = getOrders(vo.getTime(), vo.getBillingType(), ids, vo.getCarteenId());
// 根据账单类型计算总金额
return calculateTotalMoneyByBillingType(billingType, data);
return calculateTotalMoneyByBillingType(vo.getBillingType(), data);
}
@Override
public Object getData(Date time, Integer billingType, Long carteenId, Long userId) {
public Object getData(BillingPageDataVo vo) {
// 获取当前单位下的所有成员
List<Long> memberList = getMemberListByUserId(userId);
List<Long> memberList = getMemberListByUserId(vo.getUserId());
// 获取订单并返回
List<?> orders = getOrders(time, billingType, memberList,carteenId);
if (CollUtil.isEmpty(orders)) {
PageResult<?> orders = getOrders(vo, memberList);
if (ObjUtil.isEmpty(orders)) {
throw exception(BILLING_NOT_ORDER_EXISTS);
}
return orders;
@ -505,17 +580,27 @@ public class BillingServiceImpl implements BillingService {
throw new IllegalArgumentException("Unsupported billing type: " + billingType);
}
}
private List<?> getOrders(Date time, Integer billingType,List<Long> ids,Long carteenId) {
private PageResult<?> getOrders(BillingPageDataVo vo, List<Long> ids) {
// 获取时间内的订单
DateTime start = DateUtil.beginOfMonth(time);
DateTime end = DateUtil.endOfMonth(time);
switch (BillingEnum.fromCode(billingType)) {
DateTime start = DateUtil.beginOfMonth(vo.getTime());
DateTime end = DateUtil.endOfMonth(vo.getTime());
switch (BillingEnum.fromCode(vo.getBillingType())) {
case BILLING_CANTEEN:
return getDishOrderDO(start, end, ids,carteenId);
PageResult<DishOrderDO> dishOrderDO = getDishOrderDO(vo, start, end, ids);
return BeanUtils.toBean(dishOrderDO, OrderDetailRespVO.class);
case BILLING_SUPERMARKET:
return getStoreOrderDO(start, end, ids,carteenId);
PageResult<StoreOrderDO> pageResult =getStoreOrderDO(vo, start, end, ids);
PageResult<StoreOrderRespVO> bean = BeanUtils.toBean(pageResult, StoreOrderRespVO.class);
//处理订单详情
for (StoreOrderRespVO vo1 : bean.getList()) {
List<AppStoreOrderDetailVo> listByOrderNo = storeOrderDetailService.getListByOrderNo(vo1.getOrderId());
vo1.setDetailDOS(listByOrderNo);
vo1.setStoresName(carteenApi.getCarteenById(vo.getCarteenId()).getStoresName());
}
return bean;
case BILLING_SPACE_CAPSULE:
return getOrderSpaceCapsuleDO(start, end, ids,carteenId);
PageResult<OrderSpaceCapsuleDO> orderSpaceCapsuleDO = getOrderSpaceCapsuleDO(vo, start, end, ids);
return BeanUtils.toBean(orderSpaceCapsuleDO, OrderSpaceCapsuleRespVO.class);
default:
throw new IllegalArgumentException("Unsupported billing type");
}

View File

@ -8,7 +8,7 @@ spring:
autoconfigure:
exclude:
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
- org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置
#- org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置
- de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
- de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
- de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置