package com.ruoyi.account.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.account.api.dto.ChargingCardAllocateDTO; import com.ruoyi.account.api.dto.ChargingCardAuthDTO; import com.ruoyi.account.api.dto.ChargingCardDeductDTO; import com.ruoyi.account.api.dto.ChargingCardExcelDTO; import com.ruoyi.account.api.dto.ChargingCardQueryDTO; import com.ruoyi.account.api.dto.ChargingCardSaveDTO; import com.ruoyi.account.api.dto.ChargingCardStatusDTO; import com.ruoyi.account.api.model.TChargingCard; import com.ruoyi.account.api.vo.ChargingCardAllocateVO; import com.ruoyi.account.api.vo.ChargingCardDeductVO; import com.ruoyi.account.service.TChargingCardService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.security.annotation.Logical; import com.ruoyi.common.security.annotation.RequiresPermissions; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; @Api(tags = "卡片管理") @RestController @RequestMapping("/t-charging-card") public class TChargingCardController extends BaseController { @Autowired private TChargingCardService chargingCardService; @ApiOperation(value = "分页查询卡片列表") @RequiresPermissions(value = {"/chargingCard/list"}, logical = Logical.OR) @PostMapping("/page") public R> page(@RequestBody ChargingCardQueryDTO query) { return R.ok(chargingCardService.selectCardPage(query)); } @ApiOperation(value = "新增卡片") @RequiresPermissions(value = {"/chargingCard/add"}, logical = Logical.OR) @PostMapping public R add(@RequestBody ChargingCardSaveDTO dto) { return R.ok(chargingCardService.saveCard(dto)); } @ApiOperation(value = "编辑卡片") @RequiresPermissions(value = {"/chargingCard/edit"}, logical = Logical.OR) @PutMapping public R edit(@RequestBody ChargingCardSaveDTO dto) { return R.ok(chargingCardService.updateCard(dto)); } @ApiOperation(value = "删除卡片") @RequiresPermissions(value = {"/chargingCard/delete"}, logical = Logical.OR) @DeleteMapping public R delete(@RequestBody List ids) { return R.ok(chargingCardService.deleteCards(ids)); } @ApiOperation(value = "更新卡片启用状态") @RequiresPermissions(value = {"/chargingCard/status"}, logical = Logical.OR) @PutMapping("/status") public R status(@RequestBody ChargingCardStatusDTO dto) { return R.ok(chargingCardService.updateStatus(dto)); } @ApiOperation(value = "额度分配概览(公司总账户余额、可分配余额)") @RequiresPermissions(value = {"/chargingCard/allocate"}, logical = Logical.OR) @GetMapping("/allocate-overview") public R allocateOverview(@RequestParam("companyId") Integer companyId) { return R.ok(chargingCardService.getAllocateOverview(companyId)); } @ApiOperation(value = "卡片额度分配(公司可用余额划入卡片余额)") @RequiresPermissions(value = {"/chargingCard/allocate"}, logical = Logical.OR) @PostMapping("/allocate") public R allocate(@RequestBody ChargingCardAllocateDTO dto) { return R.ok(chargingCardService.allocateQuota(dto)); } @ApiOperation(value = "导出卡片") @RequiresPermissions(value = {"/chargingCard/export"}, logical = Logical.OR) @PutMapping("/export") public void export(HttpServletResponse response, @RequestBody ChargingCardQueryDTO query) { ExcelUtil util = new ExcelUtil<>(ChargingCardExcelDTO.class); util.exportExcel(response, chargingCardService.selectExportList(query), "卡片数据"); } @ApiOperation(value = "下载卡片导入模板") @RequiresPermissions(value = {"/chargingCard/import"}, logical = Logical.OR) @GetMapping("/import-template") public void importTemplate(HttpServletResponse response) { ExcelUtil util = new ExcelUtil<>(ChargingCardExcelDTO.class); util.importTemplateExcel(response, "卡片数据"); } @ApiOperation(value = "导入卡片") @RequiresPermissions(value = {"/chargingCard/import"}, logical = Logical.OR) @PostMapping("/import") public R importData(@RequestPart("file") MultipartFile file) throws Exception { ExcelUtil util = new ExcelUtil<>(ChargingCardExcelDTO.class); List cards = util.importExcel(file.getInputStream()); return R.ok(chargingCardService.importCards(cards)); } // ==================== 内部接口(刷卡充电链路,订单服务调用,V0.2 定稿) ==================== @ApiOperation(value = "刷卡启动鉴权(内部):卡片配置密码时才校验密码") @PostMapping("/inner/verify-charging") public R verifyCharging(@RequestBody ChargingCardAuthDTO dto) { return R.ok(chargingCardService.verifyCardForCharging(dto)); } @ApiOperation(value = "锁定卡片为充电中(内部):返回 false 表示同卡已有进行中订单") @PostMapping("/inner/lock-charging") public R lockForCharging(@RequestParam("cardId") Long cardId, @RequestParam("orderCode") String orderCode) { return R.ok(chargingCardService.lockCardForCharging(cardId, orderCode)); } @ApiOperation(value = "解锁卡片(内部):订单终态后调用,带订单号比对") @PostMapping("/inner/unlock-charging") public R unlockForCharging(@RequestParam("cardId") Long cardId, @RequestParam("orderCode") String orderCode) { return R.ok(chargingCardService.unlockCardForCharging(cardId, orderCode)); } @ApiOperation(value = "刷卡订单结算扣款(内部):订单号幂等、允许扣成负余额") @PostMapping("/inner/deduct-charging") public R deductForCharging(@RequestBody ChargingCardDeductDTO dto) { return R.ok(chargingCardService.deductBalanceForCharging(dto)); } @ApiOperation(value = "批量查询已存在充电扣款流水的订单号(内部)") @PostMapping("/inner/deducted-order-codes") public R> listDeductedOrderCodes(@RequestBody List orderCodes) { return R.ok(chargingCardService.listDeductedOrderCodes(orderCodes)); } }