发票功能添加

This commit is contained in:
qjq
2024-11-14 10:14:51 +08:00
parent c3eef023e9
commit 69a4b064a0
22 changed files with 372 additions and 16 deletions

View File

@ -148,5 +148,6 @@ public interface ErrorCodeConstants {
ErrorCode INVOICE_INFORMATION_NOT_EXISTS = new ErrorCode(1_004_022_001, "用户发票信息不存在");
ErrorCode BILLING_NOT_EXISTS = new ErrorCode(1_004_023_00, "开票记录不存在");
ErrorCode BILLING_NOT_ORDER_EXISTS= new ErrorCode(1_004_023_00, "该时间段没有订单可开票");
}

View File

@ -62,4 +62,6 @@ public class BillingPageReqVO extends PageParam {
private LocalDateTime[] createTime;
@Schema(description = "发票商品名称")
private String billingName;
@Schema(description = "订单ids")
private String orderId;
}

View File

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.member.controller.admin.billing.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 开票金额 Response VO")
@Data
public class BillingRespMoneyVO {
@Schema(description = "发票编号", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal haveMoney;
private BigDecimal withoutMoney;
}

View File

@ -76,4 +76,6 @@ public class BillingRespVO {
@Schema(description = "发票商品名称")
@ExcelProperty("发票商品名称")
private String billingName;
@Schema(description = "订单ids")
private String orderId;
}

View File

@ -16,19 +16,15 @@ public class BillingSaveReqVO {
private String id;
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@NotEmpty(message = "用户名称不能为空")
private String userName;
@Schema(description = "用户手机号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "用户手机号不能为空")
private String userPhone;
@Schema(description = "申请开票时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "申请开票时间不能为空")
private LocalDateTime requestBillingTime;
@Schema(description = "发票金额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "发票金额不能为空")
private BigDecimal billingMoney;
@Schema(description = "开票人,谁要开票", requiredMode = Schema.RequiredMode.REQUIRED, example = "6477")
@ -63,5 +59,10 @@ public class BillingSaveReqVO {
private String pdfUrl;
@Schema(description = "发票商品名称")
private String billingName;
@Schema(description = "订单选择时间段-开始时间")
private LocalDateTime startTime;
@Schema(description = "订单选择时间段-结束时间")
private LocalDateTime endTime;
@Schema(description = "订单id")
private Set<Long> orderId;
}

View File

@ -87,4 +87,7 @@ public class OrderSpaceCapsulePageReqVO extends PageParam {
private String phone;
@Schema(description = "太空舱名称")
private String spaceName;
@Schema(description = "是否开票")
private Boolean billingExist;
private String billingNum;
}

View File

@ -99,4 +99,6 @@ public class OrderSpaceCapsuleRespVO {
@Schema(description = "太空舱名称")
@ExcelProperty("太空舱名称")
private String spaceName;
private Boolean billingExist;
private String billingNum;
}

View File

@ -37,7 +37,10 @@ public class StoreOrderPageReqVO extends PageParam {
@Schema(description = "用户ID")
private Long userId;
@Schema(description = "订单状态 1-已支付2-已完成3-已取消4-已退款")
private Integer status;
@Schema(description = "是否开票 0开票1未开票")
private Boolean billingExist;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

View File

@ -4,6 +4,7 @@ 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.dal.dataobject.billing.BillingDO;
@ -55,7 +56,11 @@ public class AppBillingController {
BillingDO billing = billingService.getBilling(id);
return success(BeanUtils.toBean(billing, BillingRespVO.class));
}
@GetMapping("/moeny")
@Operation(summary = "获得开票金额与未开票金额")
public CommonResult<BillingRespMoneyVO> getBillingPage(@RequestParam("userId")Long userId) {
return success(billingService.getHaveWithoutMoney(userId));
}
@GetMapping("/page")
@Operation(summary = "获得开票记录分页")
public CommonResult<PageResult<BillingRespVO>> getBillingPage(@Valid BillingPageReqVO pageReqVO) {

View File

@ -14,4 +14,6 @@ public class AppPageVo extends PageParam {
private Long userId;
private String mobile;
private String orderStatus;
private Boolean billingExist;
}

View File

@ -86,4 +86,8 @@ public class BillingDO extends BaseDO {
* 发票商品名称
*/
private String billingName;
/**
* 订单id 用json
*/
private String orderId;
}

View File

@ -12,6 +12,7 @@ import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
/**
* 会员订单 Mapper
@ -48,5 +49,5 @@ public interface DishOrderMapper extends BaseMapperX<DishOrderDO> {
Integer selectUser(@Param("time")Long storeId,@Param("storeId")String time);
BigDecimal getSaleMoney(@Param("storeId")Long storeId, @Param("time")String time);
Integer updateByIdBillingExist(@Param("ids")Set<Long> ids,@Param("exist")Boolean exist);
}

View File

@ -14,6 +14,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Set;
/**
* 太空舱订单 Mapper
@ -40,6 +41,7 @@ public interface OrderSpaceCapsuleMapper extends BaseMapperX<OrderSpaceCapsuleDO
.eqIfPresent(OrderSpaceCapsuleDO::getEndMoney, reqVO.getEndMoney())
.likeIfPresent(OrderSpaceCapsuleDO::getPhone, reqVO.getPhone())
.eqIfPresent(OrderSpaceCapsuleDO::getPayNum, reqVO.getPayNum())
.eqIfPresent(OrderSpaceCapsuleDO::getBillingExist, reqVO.getBillingExist())
.eqIfPresent(OrderSpaceCapsuleDO::getPayMethods, reqVO.getPayMethods())
.eqIfPresent(OrderSpaceCapsuleDO::getPayMethods, reqVO.getPayMethods())
.orderByDesc(OrderSpaceCapsuleDO::getId));
@ -47,4 +49,5 @@ public interface OrderSpaceCapsuleMapper extends BaseMapperX<OrderSpaceCapsuleDO
OrderSpaceCapsuleStatisticsVo compDay(@Param("status")Integer status,@Param("start") Date start,@Param("end") Date end,@Param("carteenId")Long carteenId);
SpaceCapsuleOrderNameRespVO compDay1(@Param("status")Integer status, @Param("start") Date start, @Param("end") Date end,@Param("spId")Long spId);
OrderSpaceCapsuleStatisticsComVo compMoney(@Param("start") Date start, @Param("end") Date end);
Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist);
}

View File

@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* 商品订单 Mapper
@ -25,6 +26,8 @@ public interface StoreOrderMapper extends BaseMapperX<StoreOrderDO> {
.eqIfPresent(StoreOrderDO::getCardNumber, reqVO.getCardNumber())
.eqIfPresent(StoreOrderDO::getOpenId, reqVO.getOpenId())
.eqIfPresent(StoreOrderDO::getNumber, reqVO.getNumber())
.eqIfPresent(StoreOrderDO::getStatus, reqVO.getStatus())
.eqIfPresent(StoreOrderDO::getBillingExist, reqVO.getBillingExist())
.eqIfPresent(StoreOrderDO::getEquipmentCode, reqVO.getEquipmentCode())
.eqIfPresent(StoreOrderDO::getUuid, reqVO.getUuid())
.eqIfPresent(StoreOrderDO::getTotalPrice, reqVO.getTotalPrice())
@ -37,4 +40,5 @@ public interface StoreOrderMapper extends BaseMapperX<StoreOrderDO> {
IPage<StoreOrderPageVO> getStoreOrderPageNew(IPage<StoreOrderPageVO> page, @Param("vo") StoreOrderPageVO vo);
List<StoreOrderPageVO> getStoreOrderPageNewList(@Param("vo") StoreOrderPageVO vo);
Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist);
}

View File

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.member.enums;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.poi.ss.formula.functions.T;
@AllArgsConstructor
@Getter
public enum BillingEnum {
//0食堂发票,1超市发票,2太空舱;
BILLING_CANTEEN(0,"食堂"),
BILLING_SUPERMARKET(1,"超市"),
BILLING_SPACE_CAPSULE(2,"太空舱");
/**
* 编码
*/
private final Integer code;
/**
* 类型
*/
private final String name;
// 根据 code 查找对应的枚举实例
public static BillingEnum fromCode(int code) {
for (BillingEnum type : BillingEnum.values()) {
if (type.getCode() == code) {
return type;
}
}
throw new IllegalArgumentException("Invalid code for BillingEnum: " + code);
}
}

View File

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.member.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum BillingStatusEnum {
//0开票中,1开票完成,2开票回拒
BILLING_INVOICING(0,"开票中"),
BILLING_INVOICING_IS_COMPLETE(1,"开票完成"),
BILLING_INVOICING_REJECTION(2,"开票回拒");
/**
* 编码
*/
private final Integer code;
/**
* 类型
*/
private final String name;
}

View File

@ -2,10 +2,9 @@ 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.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.dal.dataobject.billing.BillingDO;
import java.util.*;
import javax.validation.*;
/**
@ -52,5 +51,6 @@ public interface BillingService {
* @return 开票记录分页
*/
PageResult<BillingDO> getBillingPage(BillingPageReqVO pageReqVO);
BillingRespMoneyVO getHaveWithoutMoney(Long userId);
}

View File

@ -1,21 +1,57 @@
package cn.iocoder.yudao.module.member.service.billing;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
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;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.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.dal.dataobject.billing.BillingDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.billing.BillingMapper;
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.BillingEnum;
import cn.iocoder.yudao.module.member.enums.BillingStatusEnum;
import cn.iocoder.yudao.module.member.enums.SpaceCapsuleOrderEnum;
import cn.iocoder.yudao.module.member.enums.StoreOrderStatusEnum;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.Set;
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.ErrorCodeConstants.BILLING_NOT_EXISTS;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.BILLING_NOT_ORDER_EXISTS;
/**
* 开票记录 Service 实现类
@ -28,23 +64,182 @@ public class BillingServiceImpl implements BillingService {
@Resource
private BillingMapper billingMapper;
@Resource
private MemberUserService userService;
@Resource
private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper;
@Resource
private DishOrderMapper dishOrderMapper;
@Resource
private StoreOrderMapper storeOrderMapper;
/**
* 食堂
* @param startTime
* @param endTime
* @return
*/
public List<DishOrderDO> getDishOrderDO(LocalDateTime startTime, LocalDateTime endTime, Set<Long> ids){
return dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>()
.betweenIfPresent(DishOrderDO::getCreateTime,startTime,endTime)
.eq(DishOrderDO::getOrderStatus,DishOrderDO.COMPLETE)
.ne(DishOrderDO::getBillingExist,Boolean.TRUE)
.in(ObjUtil.isNotEmpty(ids), DishOrderDO::getId,ids)
);
}
/**
* 超市
* @param startTime
* @param endTime
* @return
*/
public List<StoreOrderDO> getStoreOrderDO(LocalDateTime startTime, LocalDateTime endTime, Set<Long> ids){
return storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>()
.betweenIfPresent(StoreOrderDO::getCreateTime,startTime,endTime)
.eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode())
.ne(StoreOrderDO::getBillingExist,Boolean.TRUE)
.in(ObjUtil.isNotEmpty(ids), StoreOrderDO::getOrderId,ids)
);
}
/**
* 太空舱
* @param startTime
* @param endTime
* @return
*/
public List<OrderSpaceCapsuleDO> getOrderSpaceCapsuleDO(LocalDateTime startTime, LocalDateTime endTime, Set<Long> ids){
return orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>()
.betweenIfPresent(OrderSpaceCapsuleDO::getCreateTime,startTime,endTime)
.eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())
.ne(OrderSpaceCapsuleDO::getBillingExist,Boolean.TRUE)
.in(ObjUtil.isNotEmpty(ids), OrderSpaceCapsuleDO::getId,ids)
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createBilling(BillingSaveReqVO createReqVO) {
// 插入
// 插入 BillingDO 对象并生成唯一主键
BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class);
//这里使用雪花算法 作为主键
billing.setId(IdUtil.getSnowflakeNextId() + "");
// 获取用户信息
MemberUserDO user = userService.getUser(createReqVO.getUserId());
billing.setUserName(user.getNickname());
billing.setUserPhone(user.getMobile());
// 根据不同的 billingType 获取订单、金额和订单 ID 列表,并设置开票信息
List<Long> orderIds;
BigDecimal totalMoney;
String billingName;
switch (BillingEnum.fromCode(billing.getBillingType())) {
case BILLING_CANTEEN:
List<DishOrderDO> dishOrders = getDishOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId());
if (CollUtil.isEmpty(dishOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
totalMoney = calculateTotalMoney(dishOrders, DishOrderDO::getTotalMoney);
orderIds = getOrderIds(dishOrders, DishOrderDO::getId);
billingName = "食堂餐饮费";
updateBillingExist(dishOrders, dishOrderMapper);
break;
case BILLING_SUPERMARKET:
List<StoreOrderDO> storeOrders = getStoreOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId());
if (CollUtil.isEmpty(storeOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
totalMoney = calculateTotalMoney1(storeOrders, StoreOrderDO::getTotalPrice);
List<Integer> orderIds1 = getOrderIds(storeOrders, StoreOrderDO::getOrderId);
orderIds = orderIds1.stream().map(Integer::longValue).collect(Collectors.toList());
billingName = "超市物品费";
updateBillingExist(storeOrders, storeOrderMapper);
break;
case BILLING_SPACE_CAPSULE:
List<OrderSpaceCapsuleDO> capsuleOrders = getOrderSpaceCapsuleDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId());
if (CollUtil.isEmpty(capsuleOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
totalMoney = calculateTotalMoney(capsuleOrders, OrderSpaceCapsuleDO::getMoney);
orderIds = getOrderIds(capsuleOrders, OrderSpaceCapsuleDO::getId);
billingName = "太空舱费用";
updateBillingExist(capsuleOrders, orderSpaceCapsuleMapper);
break;
default:
throw new IllegalArgumentException("Unsupported billing type");
}
// 设置 BillingDO 对象的基本信息
billing.setBillingMoney(totalMoney);
billing.setStatus(BillingStatusEnum.BILLING_INVOICING.getCode());
billing.setBillingName(billingName);
billing.setOrderId(JsonUtils.toJsonString(orderIds));
billing.setRequestBillingTime(LocalDateTime.now());
// 插入 BillingDO 对象到数据库
billingMapper.insert(billing);
// 返回
// 返回主键 ID
return billing.getId();
}
// 计算订单的总金额,处理 Double 到 BigDecimal 的转换
private <T> BigDecimal calculateTotalMoney1(List<T> orders, Function<T, Double> moneyMapper) {
return orders.stream()
.map(moneyMapper)
.filter(Objects::nonNull) // 过滤掉 null 值,避免空指针异常
.map(BigDecimal::valueOf) // 将 Double 转换为 BigDecimal
.reduce(BigDecimal.ZERO, BigDecimal::add); // 求和
}
// 计算订单的总金额
private <T> BigDecimal calculateTotalMoney(List<T> orders, Function<T, BigDecimal> moneyMapper) {
return orders.stream()
.map(moneyMapper)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
// 获取订单 ID 列表
private <T, R> List<R> getOrderIds(List<T> orders, Function<T, R> idMapper) {
return orders.stream()
.map(idMapper)
.collect(Collectors.toList());
}
// 更新订单为开票状态
private <T> void updateBillingExist(List<T> orders, BaseMapperX<T> mapper) {
orders.forEach(order -> {
// Assuming that the order has a `setBillingExist` method
try {
Method setBillingExist = order.getClass().getMethod("setBillingExist", Boolean.class);
setBillingExist.invoke(order, Boolean.TRUE);
} catch (Exception e) {
throw new RuntimeException("Error setting billing exist status", e);
}
});
mapper.updateBatch(orders);
}
@Override
public void updateBilling(BillingSaveReqVO updateReqVO) {
// 校验存在
validateBillingExists(updateReqVO.getId());
// 更新
BillingDO updateObj = BeanUtils.toBean(updateReqVO, BillingDO.class);
//开票成功是根据pdf上传成功没
if(StrUtil.isNotBlank(updateObj.getPdfUrl())){
//上传成功 修改状态
updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode());
//设置同意人
updateObj.setSystemId(SecurityFrameworkUtils.getLoginUserId());
}else{
//开票回拒
Assert.notNull(updateObj.getRefuseDetails(),"拒绝理由不能为空");
updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_REJECTION.getCode());
updateObj.setRefuseTime(LocalDateTime.now());
String orderId = updateObj.getOrderId();
JSONArray jsonArray = JSONUtil.parseArray(orderId);
// 转换为 Set<Long>
Set<Long> orderIds = jsonArray.stream()
.map(object -> Long.parseLong(object.toString())) // 将每个元素转换为 Long
.collect(Collectors.toSet());
//拒绝就把锁住的订单释放掉
switch (BillingEnum.fromCode(updateObj.getBillingType())){
case BILLING_CANTEEN:
dishOrderMapper.updateByIdBillingExist(orderIds,Boolean.FALSE);
break;
case BILLING_SUPERMARKET:
storeOrderMapper.updateByIdBillingExist(orderIds,Boolean.FALSE);
break;
case BILLING_SPACE_CAPSULE:
orderSpaceCapsuleMapper.updateByIdBillingExist(orderIds,Boolean.FALSE);
break;
default:
throw new IllegalArgumentException("Unsupported billing type");
}
}
billingMapper.updateById(updateObj);
}
@ -61,7 +256,6 @@ public class BillingServiceImpl implements BillingService {
throw exception(BILLING_NOT_EXISTS);
}
}
@Override
public BillingDO getBilling(String id) {
return billingMapper.selectById(id);
@ -72,4 +266,37 @@ public class BillingServiceImpl implements BillingService {
return billingMapper.selectPage(pageReqVO);
}
@Override
public BillingRespMoneyVO getHaveWithoutMoney(Long userId) {
BillingRespMoneyVO b=new BillingRespMoneyVO();
//查询开票的订单
BigDecimal reduce = billingMapper.selectList(new LambdaQueryWrapperX<BillingDO>()
.eq(BillingDO::getStatus, BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode())
.eq(BillingDO::getUserId,userId)
).stream()
.map(BillingDO::getBillingMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);// 求和
b.setHaveMoney(reduce);
BigDecimal reduce1 = orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>()
.eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())
.eq(OrderSpaceCapsuleDO::getBillingExist, Boolean.FALSE)
.eq(OrderSpaceCapsuleDO::getUserId,userId)
)
.stream().map(OrderSpaceCapsuleDO::getMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);// 求和
BigDecimal reduce2 = dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>()
.eq(DishOrderDO::getOrderStatus, DishOrderDO.COMPLETE)
.eq(DishOrderDO::getBillingExist, Boolean.FALSE).eq(DishOrderDO::getUserId,userId))
.stream().map(DishOrderDO::getTotalMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);// 求和
BigDecimal reduce3 = storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>()
.eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode())
.eq(StoreOrderDO::getBillingExist, Boolean.FALSE).eq(StoreOrderDO::getUserId,userId))
.stream().map(f-> BigDecimal.valueOf(f.getTotalPrice()))
.reduce(BigDecimal.ZERO, BigDecimal::add);// 求和
BigDecimal add = reduce1.add(reduce2).add(reduce3);
b.setWithoutMoney(add);
return b;
}
}

View File

@ -174,6 +174,8 @@ public class OrderServiceImpl implements OrderService {
PageResult<DishOrderDO> dishOrderDOPageResult = dishOrderMapper.selectPage(vo, Wrappers.<DishOrderDO>lambdaQuery()
.in(CollectionUtil.isNotEmpty(ids), DishOrderDO::getUserId, ids)
.eq(StrUtil.isNotBlank(vo.getOrderStatus()),DishOrderDO::getOrderStatus,vo.getOrderStatus())
.eq(ObjUtil.isNotEmpty(vo.getBillingExist()),DishOrderDO::getBillingExist,vo.getBillingExist())
.orderByDesc(DishOrderDO::getCreateTime));
PageResult<AppOrderRespVO> appOrderRespVOPageResult = BeanUtils.toBean(dishOrderDOPageResult, AppOrderRespVO.class);
List<AppOrderRespVO> list = appOrderRespVOPageResult.getList();

View File

@ -33,4 +33,11 @@
</where>
</select>
<update id="updateByIdBillingExist">
update member_dish_order SET billing_exist = #{exist}
WHERE id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>

View File

@ -64,4 +64,12 @@
GROUP BY
a.carteen_id, a.carteen_name, a.space_capsule_id, b.space_name;
</select>
<update id="updateByIdBillingExist">
update t_order_space_capsule SET billing_exist = #{exist}
WHERE id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>

View File

@ -61,4 +61,11 @@
order by so.order_id DESC
</select>
<update id="updateByIdBillingExist">
update member_store_order SET billing_exist = #{exist}
WHERE order_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>