package com.ruoyi.account.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.dto.AppUserWhitelistAllocateDTO; import com.ruoyi.account.api.dto.AppUserWhitelistExcelDTO; import com.ruoyi.account.api.dto.AppUserWhitelistImportDTO; import com.ruoyi.account.api.dto.AppUserWhitelistQueryDTO; import com.ruoyi.account.api.dto.AppUserWhitelistSaveDTO; import com.ruoyi.account.api.dto.AppUserWhitelistStatusDTO; import com.ruoyi.account.api.model.TAppUserWhitelist; import com.ruoyi.account.api.vo.AppUserWhitelistAllocateVO; import com.ruoyi.account.api.vo.AppUserWhitelistMatchVO; import com.ruoyi.account.api.vo.AppUserWhitelistImportResultVO; import com.ruoyi.account.service.TAppUserWhitelistService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.OperatorType; 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.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; 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.RestController; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; /** * 白名单用户管理 */ @Api(tags = "白名单用户管理") @RestController @RequestMapping("/t-app-user-whitelist") public class TAppUserWhitelistController { @Resource private TAppUserWhitelistService whitelistService; @ApiOperation("分页查询白名单用户") @RequiresPermissions(value = {"/appUserWhitelist/list"}, logical = Logical.OR) @PostMapping("/page") public R> page(@RequestBody AppUserWhitelistQueryDTO queryDTO) { return R.ok(whitelistService.pageList(queryDTO)); } @ApiOperation("查询白名单用户详情") @RequiresPermissions(value = {"/appUserWhitelist/select"}, logical = Logical.OR) @GetMapping("/detail/{id}") public R detail(@PathVariable("id") Long id) { return R.ok(whitelistService.detail(id)); } @ApiOperation("判断用户当前站点是否命中白名单") @GetMapping("/match") public R match(@RequestParam("appUserId") Long appUserId, @RequestParam("siteId") Integer siteId) { return R.ok(whitelistService.matchWhitelist(appUserId, siteId)); } @ApiOperation("按公司查询白名单用户(内部):公司详情-充电用户信息聚合使用") @GetMapping("/inner/list-by-company") public R> listByCompany(@RequestParam("companyId") Integer companyId) { return R.ok(whitelistService.listByCompany(companyId)); } @ApiOperation("内部接口:锁定白名单账户余额(企业账户流程-分配模式,实扣冻结)") @PostMapping("/inner/lock-balance") public R lockBalance(@RequestParam("whitelistId") Long whitelistId, @RequestParam("amount") BigDecimal amount) { return R.ok(whitelistService.lockBalance(whitelistId, amount)); } @ApiOperation("内部接口:结算白名单账户余额(解锁锁定额并按实际消费扣减)") @PostMapping("/inner/settle-balance") public R settleBalance(@RequestParam("whitelistId") Long whitelistId, @RequestParam("lockedAmount") BigDecimal lockedAmount, @RequestParam("actualAmount") BigDecimal actualAmount) { return R.ok(whitelistService.settleBalance(whitelistId, lockedAmount, actualAmount)); } @ApiOperation("内部接口:释放白名单账户锁定金额") @PostMapping("/inner/unlock-balance") public R unlockBalance(@RequestParam("whitelistId") Long whitelistId, @RequestParam("amount") BigDecimal amount) { return R.ok(whitelistService.unlockBalance(whitelistId, amount)); } @ApiOperation("新增或修改白名单用户") @RequiresPermissions(value = {"/appUserWhitelist/add", "/appUserWhitelist/update"}, logical = Logical.OR) @Log(title = "【白名单用户】新增或修改", businessType = BusinessType.INSERT, operatorType = OperatorType.MANAGE) @PostMapping("/addOrUpdate") public R addOrUpdate(@RequestBody AppUserWhitelistSaveDTO saveDTO) { whitelistService.saveWhitelist(saveDTO); return R.ok(); } @ApiOperation("删除白名单用户") @RequiresPermissions(value = {"/appUserWhitelist/del"}, logical = Logical.OR) @Log(title = "【白名单用户】删除", businessType = BusinessType.DELETE, operatorType = OperatorType.MANAGE) @DeleteMapping("/delete") public R delete(@RequestParam("ids") String ids) { whitelistService.deleteByIds(ids); return R.ok(); } @ApiOperation("批量解绑车队(清空白名单用户车队归属,返回实际解绑数量)") @RequiresPermissions(value = {"/appUserWhitelist/unbind"}, logical = Logical.OR) @Log(title = "【白名单用户】批量解绑车队", businessType = BusinessType.UPDATE, operatorType = OperatorType.MANAGE) @PutMapping("/unbind-fleet") public R unbindFleet(@RequestBody List ids) { return R.ok(whitelistService.unbindFleet(ids)); } @ApiOperation("启用或停用白名单用户") @RequiresPermissions(value = {"/appUserWhitelist/status"}, logical = Logical.OR) @Log(title = "【白名单用户】启用或停用", businessType = BusinessType.UPDATE, operatorType = OperatorType.MANAGE) @PutMapping("/status") public R status(@RequestBody AppUserWhitelistStatusDTO statusDTO) { return R.ok(whitelistService.updateStatus(statusDTO)); } @ApiOperation("额度分配概览(公司总账户余额、可分配余额)") @RequiresPermissions(value = {"/appUserWhitelist/allocate"}, logical = Logical.OR) @GetMapping("/allocate-overview") public R allocateOverview(@RequestParam("companyId") Integer companyId) { return R.ok(whitelistService.getAllocateOverview(companyId)); } @ApiOperation("白名单额度分配(公司可用余额划入白名单用户余额)") @RequiresPermissions(value = {"/appUserWhitelist/allocate"}, logical = Logical.OR) @Log(title = "【白名单用户】额度分配", businessType = BusinessType.UPDATE, operatorType = OperatorType.MANAGE) @PostMapping("/allocate") public R allocate(@RequestBody AppUserWhitelistAllocateDTO allocateDTO) { return R.ok(whitelistService.allocateQuota(allocateDTO)); } @ApiOperation("导出白名单用户列表") @RequiresPermissions(value = {"/appUserWhitelist/export"}, logical = Logical.OR) @PutMapping("/export") public void export(HttpServletResponse response, @RequestBody(required = false) AppUserWhitelistQueryDTO queryDTO) { ExcelUtil util = new ExcelUtil<>(AppUserWhitelistExcelDTO.class); util.exportExcel(response, whitelistService.selectExportList(queryDTO), "白名单用户数据"); } @ApiOperation("下载白名单用户导入模板") @RequiresPermissions(value = {"/appUserWhitelist/import"}, logical = Logical.OR) @GetMapping("/importTemplate") public void importTemplate(HttpServletResponse response) { ExcelUtil util = new ExcelUtil<>(AppUserWhitelistImportDTO.class); util.importTemplateExcel(response, "白名单用户导入模板", "填写说明:用户手机号填写11位手机号,如:13800138000。导入后适用于全部电站。"); } @ApiOperation("导入白名单用户") @RequiresPermissions(value = {"/appUserWhitelist/import"}, logical = Logical.OR) @Log(title = "【白名单用户】导入", businessType = BusinessType.IMPORT, operatorType = OperatorType.MANAGE) @PostMapping("/import") public R importData(@RequestParam("file") MultipartFile file) throws Exception { AppUserWhitelistImportResultVO result = whitelistService.importWhitelist(file); if (result.getErrorCount() != null && result.getErrorCount() > 0) { if (result.getSuccessCount() != null && result.getSuccessCount() > 0) { return R.ok(result, "导入完成,部分数据导入失败"); } return R.fail(result, "导入失败,请检查错误数据"); } return R.ok(result, "导入成功"); } }