package com.ruoyi.web.controller.api; import cn.hutool.core.collection.CollectionUtil; import com.ruoyi.common.constant.AmountConstant; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.dto.MakeOrderDto; import com.ruoyi.system.dto.MakeOrderResp; import com.ruoyi.system.dto.OfflinePayDto; import com.ruoyi.system.model.TBill; import com.ruoyi.system.model.TBillConfirm; import com.ruoyi.system.service.TBillConfirmService; import com.ruoyi.system.service.TBillService; import com.ruoyi.system.service.TPayOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Collections; import java.util.List; @Api(value = "支付订单") @RestController @RequestMapping("/t-pay") public class PayController { @Autowired TPayOrderService tPayOrderService; @Autowired TBillService tBillService; @Autowired TBillConfirmService tBillConfirmService; @ApiOperation(value = "创建支付订单") @PostMapping("makeOrder") public R makeOrder(@Validated @RequestBody MakeOrderDto dto){ MakeOrderResp resp = tPayOrderService.makeOrder(dto); return R.ok(resp); } @ApiOperation(value = "线下支付") @PostMapping("offlinePay") @Transactional(rollbackFor = Exception.class) public R offlinePay(@Validated @RequestBody OfflinePayDto dto){ List tBills = tBillService.listByIds(dto.getBillIds()); TBillConfirm confirm = new TBillConfirm(); confirm.setBillId(CollectionUtil.join(dto.getBillIds(),",")); confirm.setVoucher(dto.getVoucher()); confirm.setPayFeesMoney(new BigDecimal(dto.getAmount()).divide(AmountConstant.b100).setScale(2, RoundingMode.HALF_DOWN).doubleValue()); confirm.setPayTime(dto.getPayTime()); tBillConfirmService.save(confirm); for (TBill tBill : tBills) { TBill save = new TBill(); save.setId(tBill.getId()); save.setPayFeesType(2); save.setVoucher(dto.getVoucher()); save.setPayFeesStatus("2"); save.setConfirmId(confirm.getId()); tBillService.lockAndUpdateInfo(save,1); } return R.ok(); } }