From 9d0e90ad80ebafd121ae24760bf1be97120e5a1e Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Mon, 4 Aug 2025 18:09:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E8=96=AA=E8=B5=84=E5=AE=98?= =?UTF-8?q?=E6=96=B9=E6=8F=90=E7=8E=B0=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GameUsdWithdrawRecordAdminService.java | 133 ++++++++++++++++++ .../GameUsdWithdrawExamineController.java | 88 ++++++++++++ .../guildgame/GameUsdWithdrawExamineVo.java | 96 +++++++++++++ .../GameUsdWithdrawRecordMapper.java | 9 ++ .../GameUsdWithdrawRecordMapper.xml | 32 +++++ 5 files changed, 358 insertions(+) create mode 100644 accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildgame/GameUsdWithdrawRecordAdminService.java create mode 100644 accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guildgame/GameUsdWithdrawExamineController.java create mode 100644 accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildgame/GameUsdWithdrawExamineVo.java diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildgame/GameUsdWithdrawRecordAdminService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildgame/GameUsdWithdrawRecordAdminService.java new file mode 100644 index 000000000..eec68c37c --- /dev/null +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildgame/GameUsdWithdrawRecordAdminService.java @@ -0,0 +1,133 @@ +package com.accompany.admin.service.guildgame; + +import com.accompany.business.constant.CountryEnum; +import com.accompany.business.constant.guild.GuildConstant; +import com.accompany.business.constant.guild.GuildWithdrawAccountTypeEnum; +import com.accompany.business.model.guildgame.GameUsdWithdrawRecord; +import com.accompany.business.param.BasePageParams; +import com.accompany.business.service.SendSysMsgService; +import com.accompany.business.service.account.AccountBlockService; +import com.accompany.business.service.guildgame.GameUsdOperateService; +import com.accompany.business.service.guildgame.GameUsdWithdrawRecordService; +import com.accompany.business.vo.guildgame.GameUsdWithdrawExamineVo; +import com.accompany.common.constant.Constant; +import com.accompany.core.enumeration.I18nAlertEnum; +import com.accompany.core.model.AccountBlock; +import com.accompany.core.model.PartitionInfo; +import com.accompany.core.service.partition.PartitionInfoService; +import com.accompany.core.util.I18NMessageSourceUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class GameUsdWithdrawRecordAdminService { + + @Autowired + private GameUsdWithdrawRecordService gameUsdWithdrawRecordService; + @Autowired + private AccountBlockService accountBlockService; + @Autowired + private SendSysMsgService sendSysMsgService; + @Autowired + private GameUsdOperateService gameUsdOperateService; + @Autowired + private PartitionInfoService partitionInfoService; + + public Page listPage(BasePageParams basePageParams, + Long agencyOwnerErbanNo, Integer status, + String accountType, String country) { + Page page = new Page<>(basePageParams.getPageNo(),basePageParams.getPageSize()); + Page agencyWithdrawExamineVoPage = gameUsdWithdrawRecordService.getBaseMapper() + .listPage(page, agencyOwnerErbanNo, basePageParams.getStartTime(), basePageParams.getEndTime(), + basePageParams.getPartitionId(), status, accountType, country); + + if (!CollectionUtils.isEmpty(agencyWithdrawExamineVoPage.getRecords())){ + List erbanNoList = agencyWithdrawExamineVoPage.getRecords().stream() + .map(GameUsdWithdrawExamineVo::getErbanNo).distinct() + .map(Object::toString) + .collect(Collectors.toList()); + Map accountBlockMap = accountBlockService.batchQueryAccountBlock(erbanNoList).stream() + .collect(Collectors.toMap(AccountBlock::getBlockValue, AccountBlock::getBlockStatus)); + + Map partitionDescMap = partitionInfoService.listAll().stream() + .collect(Collectors.toMap(PartitionInfo::getId, PartitionInfo::getDesc)); + + for (GameUsdWithdrawExamineVo vo: agencyWithdrawExamineVoPage.getRecords()){ + vo.setPartitionDesc(partitionDescMap.get(vo.getPartitionId())); + + vo.setRoleTypeDesc(GuildConstant.RoleType.OWNER.equals(vo.getRoleType())? + "会长": GuildConstant.RoleType.MANAGER.equals(vo.getRoleType())? "管理员": "成员"); + + String erbanNoStr = vo.getErbanNo().toString(); + vo.setBlocked(accountBlockMap.containsKey(erbanNoStr)); + + GuildWithdrawAccountTypeEnum typeEnum = GuildWithdrawAccountTypeEnum.valueOf(vo.getAccountType()); + vo.setAccountType(typeEnum.getType()); + + CountryEnum countryEnum = CountryEnum.valueOf(vo.getAccountCountry()); + vo.setAccountCountry(countryEnum.getName()); + } + } + + return agencyWithdrawExamineVoPage; + } + + public void settle(List ids, String adminUser) { + List dbList = gameUsdWithdrawRecordService.lambdaQuery() + .in(GameUsdWithdrawRecord::getId, ids) + .eq(GameUsdWithdrawRecord::getStatus, Constant.status.delete) + .list(); + if (CollectionUtils.isEmpty(dbList)){ + return; + } + + List idList = dbList.stream().map(GameUsdWithdrawRecord::getId).collect(Collectors.toList()); + gameUsdWithdrawRecordService.lambdaUpdate() + .set(GameUsdWithdrawRecord::getUpdateTime, new Date()) + .set(GameUsdWithdrawRecord::getOperator, adminUser) + .set(GameUsdWithdrawRecord::getStatus, Constant.status.valid) + .in(GameUsdWithdrawRecord::getId, idList) + .update(); + + List uidList = dbList.stream().map(GameUsdWithdrawRecord::getUid).distinct().collect(Collectors.toList()); + for (Long uid: uidList){ + String content = I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_USD_WITHDRAW_SUCCESS, new Object[]{}, uid); + sendSysMsgService.sendPersonTextMsg(uid, content); + } + } + + @Transactional(rollbackFor = Exception.class) + public void reject(List ids, String adminName, String remark) { + List dbList = gameUsdWithdrawRecordService.lambdaQuery() + .in(GameUsdWithdrawRecord::getId, ids) + .eq(GameUsdWithdrawRecord::getStatus, Constant.status.delete) + .list(); + if (CollectionUtils.isEmpty(dbList)){ + return; + } + + List idList = dbList.stream().map(GameUsdWithdrawRecord::getId).collect(Collectors.toList()); + gameUsdWithdrawRecordService.lambdaUpdate() + .set(GameUsdWithdrawRecord::getUpdateTime, new Date()) + .set(GameUsdWithdrawRecord::getOperator, adminName) + .set(GameUsdWithdrawRecord::getRemark, remark) + .set(GameUsdWithdrawRecord::getStatus, Constant.status.invalid) + .in(GameUsdWithdrawRecord::getId, idList) + .update(); + + for (GameUsdWithdrawRecord record: dbList){ + String content = I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_USD_WITHDRAW_FAIL, new Object[]{}, record.getUid()); + sendSysMsgService.sendPersonTextMsg(record.getUid(), content); + + gameUsdOperateService.withdrawReject(record.getGuildId(), record.getUid(), record.getGameUsdNum()); + } + } +} diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guildgame/GameUsdWithdrawExamineController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guildgame/GameUsdWithdrawExamineController.java new file mode 100644 index 000000000..f9bade2ae --- /dev/null +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guildgame/GameUsdWithdrawExamineController.java @@ -0,0 +1,88 @@ +package com.accompany.admin.controller.guildgame; + +import com.accompany.admin.controller.BaseController; +import com.accompany.admin.service.guildgame.GameUsdWithdrawRecordAdminService; +import com.accompany.admin.service.system.AdminUserService; +import com.accompany.business.param.BasePageParams; +import com.accompany.business.vo.guildgame.GameUsdWithdrawExamineVo; +import com.accompany.common.status.BusiStatus; +import com.accompany.core.exception.ServiceException; +import com.accompany.core.vo.BaseResponseVO; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.support.ExcelTypeEnum; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.ApiOperation; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/gameUsdWithdrawExamine") +public class GameUsdWithdrawExamineController extends BaseController { + @Autowired + private GameUsdWithdrawRecordAdminService gameUsdWithdrawRecordAdminService; + @Autowired + private AdminUserService adminUserService; + + @ApiOperation("列表") + @GetMapping("/list") + public BaseResponseVO> list(BasePageParams basePageParams, + Long agencyOwnerErbanNo, Integer status, + String accountType, String country) throws Exception { + Page iPage = gameUsdWithdrawRecordAdminService.listPage(basePageParams, + agencyOwnerErbanNo,status, accountType, country); + return new BaseResponseVO<>(iPage); + } + + @ApiOperation("批量结算") + @PostMapping("/batchSettle") + public BaseResponseVO batchSettle(String ids){ + if (!StringUtils.hasText(ids)){ + throw new ServiceException(BusiStatus.PARAMETERILLEGAL); + } + String adminName = adminUserService.getAdminName(getAdminId()); + List idList = Arrays.stream(ids.split(",")).map(Integer::parseInt).collect(Collectors.toList()); + gameUsdWithdrawRecordAdminService.settle(idList, adminName); + return new BaseResponseVO<>(BusiStatus.SUCCESS); + } + + @ApiOperation("批量驳回") + @PostMapping("/batchReject") + public BaseResponseVO batchReject(String ids, String remark){ + if (!StringUtils.hasText(ids)){ + throw new ServiceException(BusiStatus.PARAMETERILLEGAL); + } + String adminName = adminUserService.getAdminName(getAdminId()); + List idList = Arrays.stream(ids.split(",")).map(Integer::parseInt).collect(Collectors.toList()); + gameUsdWithdrawRecordAdminService.reject(idList, adminName, remark); + return new BaseResponseVO<>(BusiStatus.SUCCESS); + } + + @SneakyThrows + @ApiOperation("导出") + @PostMapping("/export") + public void export(HttpServletResponse response,BasePageParams basePageParams, + Long agencyOwnerErbanNo, Integer status, String accountType, String country) { + basePageParams.setPageSize(-1); + Page iPage = gameUsdWithdrawRecordAdminService.listPage(basePageParams, + agencyOwnerErbanNo,status, accountType, country); + + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + // 这里URLEncoder.encode可以防止中文乱码 + String excelName = URLEncoder.encode("游戏薪资官方提现记录", StandardCharsets.UTF_8); + response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue()); + EasyExcel.write(response.getOutputStream(), GameUsdWithdrawExamineVo.class).sheet("游戏薪资官方提现记录").doWrite(iPage.getRecords()); + } +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildgame/GameUsdWithdrawExamineVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildgame/GameUsdWithdrawExamineVo.java new file mode 100644 index 000000000..eb088a6cd --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildgame/GameUsdWithdrawExamineVo.java @@ -0,0 +1,96 @@ +package com.accompany.business.vo.guildgame; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + *

+ * 主播提现表 + *

+ * + * @author wxf + * @since 2024-08-01 + */ +@Data +public class GameUsdWithdrawExamineVo { + + @ExcelProperty("id") + @ApiModelProperty("id") + private Long erbanNo; + @ExcelProperty("昵称") + @ApiModelProperty("昵称") + private String nick; + @ExcelIgnore + @ApiModelProperty("分区id") + private Integer partitionId; + @ExcelProperty("分区") + @ApiModelProperty("分区") + private String partitionDesc; + + @ExcelProperty("公会id") + @ApiModelProperty("公会id") + private Integer guildId; + @ExcelIgnore + @ApiModelProperty("公会角色") + private Byte roleType; + @ExcelProperty("公会角色") + @ApiModelProperty("公会角色") + private String roleTypeDesc; + @ExcelProperty("公会长id") + @ApiModelProperty("公会长id") + private Integer guildOwnerErbanNo; + + @ExcelProperty("是否封禁") + @ApiModelProperty("是否封禁状态") + private Boolean blocked; + + @ExcelProperty("记录id") + @ApiModelProperty("记录id") + private Long id; + @ExcelProperty("状态") + @ApiModelProperty("状态") + private Byte status; + @ExcelProperty("申请时间") + @ApiModelProperty("创建时间") + private String createTime; + @ExcelProperty("账户类型") + @ApiModelProperty("账户类型") + private String accountType; + @ExcelProperty("账户国家") + @ApiModelProperty("账户国家") + private String accountCountry; + @ExcelProperty("账户详细信息") + @ApiModelProperty("账户详细信息") + private String accountInfos; + @ExcelProperty("游戏薪资数量") + @ApiModelProperty("游戏薪资数量") + private BigDecimal gameUsdNum; + @ExcelProperty("货币") + @ApiModelProperty("货币") + private String currency; + @ExcelProperty("货币数") + @ApiModelProperty("货币数") + private BigDecimal currencyNum; + @ExcelProperty("手续费") + @ApiModelProperty("手续费") + private BigDecimal withdrawRate; + @ExcelProperty("实际提现货币数") + @ApiModelProperty("实际提现货币数") + private BigDecimal withdrawNum; + @ExcelProperty("备注") + @ApiModelProperty("备注") + private String remark; + + @ExcelProperty("更新时间") + @ApiModelProperty("更新时间") + private String updateTime; + @ExcelProperty("操作人") + @ApiModelProperty("操作人") + private String operator; + + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildgame/GameUsdWithdrawRecordMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildgame/GameUsdWithdrawRecordMapper.java index 8bf4af4b3..06097ccd5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildgame/GameUsdWithdrawRecordMapper.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildgame/GameUsdWithdrawRecordMapper.java @@ -1,7 +1,10 @@ package com.accompany.business.mybatismapper.guildgame; import com.accompany.business.model.guildgame.GameUsdWithdrawRecord; +import com.accompany.business.vo.guildgame.GameUsdWithdrawExamineVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; /** * Mapper 接口 @@ -11,4 +14,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface GameUsdWithdrawRecordMapper extends BaseMapper { + Page listPage(@Param("page") Page page, + @Param("agencyOwnerErbanNo") Long agencyOwnerErbanNo, + @Param("startTime") String startTime, @Param("endTime") String endTime, + @Param("partitionId") Integer partitionId, @Param("status") Integer status, + @Param("accountType") String accountType, @Param("country") String country); + } diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GameUsdWithdrawRecordMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GameUsdWithdrawRecordMapper.xml index 782206cce..b90752930 100644 --- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GameUsdWithdrawRecordMapper.xml +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GameUsdWithdrawRecordMapper.xml @@ -2,4 +2,36 @@ +