package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.constant.AmountConstant; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.OrderNos; import com.ruoyi.system.dto.MakeOrderDto; import com.ruoyi.system.dto.MakeOrderResp; import com.ruoyi.system.mapper.TPayOrderMapper; import com.ruoyi.system.model.TBill; import com.ruoyi.system.model.TOrderBill; import com.ruoyi.system.model.TPayOrder; import com.ruoyi.system.model.TTenant; import com.ruoyi.system.service.TBillService; import com.ruoyi.system.service.TOrderBillService; import com.ruoyi.system.service.TPayOrderService; import com.ruoyi.system.service.TTenantService; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** *

* 支付订单表 服务实现类 *

* * @author xiaochen * @since 2025-02-07 */ @Service public class TPayOrderServiceImpl extends ServiceImpl implements TPayOrderService { @Autowired TBillService billService; @Autowired TTenantService tTenantService; @Autowired TOrderBillService tOrderBillService; public long caculateRentFee(TBill bill){ return bill.getOutstandingMoney() .longValue(); } public String createAppletUrl(String orderNo){ return ""+orderNo; } @Override public MakeOrderResp makeOrder(MakeOrderDto dto) { TTenant user = tTenantService.getById(dto.getUserId()); if (user==null){ throw new ServiceException("租户不存在"); } MakeOrderResp resp = new MakeOrderResp(); if (dto.getBillIds().size()==1){ TBill bill = billService.getById(dto.getBillIds().get(0)); if (bill == null) { throw new ServiceException("账单不存在"); } //欠费金额转成单位分比较 long rent = bill.getOutstandingMoney().multiply(AmountConstant.b100) .setScale(2,RoundingMode.HALF_DOWN).longValue(); if (rent==0){ throw new ServiceException("该账单已缴费"); } if (rent orderBills = new ArrayList<>(); String orderNo = OrderNos.getDid(32); List bills = dto.getBillIds().stream().map(id -> { TBill bill = billService.getById(id); if (bill == null) { throw new ServiceException("billId:" + id + "不存在"); } orderBills.add(new TOrderBill(orderNo,bill.getId())); return bill; }).collect(Collectors.toList()); //欠费金额转成单位分比较 long sumRent = bills.stream().mapToLong((bill) -> bill.getOutstandingMoney().multiply(AmountConstant.b100) .setScale(2,RoundingMode.HALF_DOWN).longValue()) .sum(); if (sumRent==0){ throw new ServiceException("账单已缴费"); } if (dto.getAmount()>sumRent){ throw new ServiceException("支付金额超过所选账单欠费金额"); } TPayOrder order = new TPayOrder(); order.setId(orderNo); order.setAmount(dto.getAmount()); order.setUserId(user.getId()); order.setPhone(user.getPhone()); order.setOpenId(dto.getOpenId()); order.setUserName(user.getResidentName()); save(order); tOrderBillService.saveBatch(orderBills); resp.setAmount(dto.getAmount()); resp.setOrderNo(orderNo); resp.setAppletUrl(createAppletUrl(orderNo)); return resp; } }