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;
}
}