diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/billing/vo/BillingPageDataVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/billing/vo/BillingPageDataVo.java new file mode 100644 index 00000000..31dafef6 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/billing/vo/BillingPageDataVo.java @@ -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; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/billing/AppBillingController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/billing/AppBillingController.java index 75241b16..6fe0abce 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/billing/AppBillingController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/billing/AppBillingController.java @@ -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 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 getBillingPage(BillingPageDataVo vo) { + BigDecimal totalMoney = billingService.getTotalMoney(vo); return success(totalMoney); } @GetMapping("/data") @Operation(summary = "获取月时间段的订单详情") - public CommonResult 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 getData(BillingPageDataVo vo) { + Object data = billingService.getData(vo); return success(data); } @GetMapping("/TypeTotal") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingService.java index 8c08822b..29b36850 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingService.java @@ -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); /** diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingServiceImpl.java index e3e8ab58..e467d4c2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/billing/BillingServiceImpl.java @@ -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 getDishOrderDO(BillingPageDataVo vo,Date startTime, Date endTime, List ids){ + return dishOrderMapper.selectPage(vo,new LambdaQueryWrapperX() + .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 getStoreOrderDO(BillingPageDataVo vo,Date startTime, Date endTime, List ids){ + return storeOrderMapper.selectPage(vo,new LambdaQueryWrapperX() + .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 getOrderSpaceCapsuleDO(BillingPageDataVo vo,Date startTime, Date endTime, List ids){ + return orderSpaceCapsuleMapper.selectPage(vo,new LambdaQueryWrapperX() + .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 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 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 memberList = getMemberListByUserId(userId); + List 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 ids,Long carteenId) { + private PageResult getOrders(BillingPageDataVo vo, List 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 = getDishOrderDO(vo, start, end, ids); + return BeanUtils.toBean(dishOrderDO, OrderDetailRespVO.class); case BILLING_SUPERMARKET: - return getStoreOrderDO(start, end, ids,carteenId); + PageResult pageResult =getStoreOrderDO(vo, start, end, ids); + PageResult bean = BeanUtils.toBean(pageResult, StoreOrderRespVO.class); + //处理订单详情 + for (StoreOrderRespVO vo1 : bean.getList()) { + List 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 = getOrderSpaceCapsuleDO(vo, start, end, ids); + return BeanUtils.toBean(orderSpaceCapsuleDO, OrderSpaceCapsuleRespVO.class); default: throw new IllegalArgumentException("Unsupported billing type"); } diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 86867069..98094f71 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -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 的自动配置