From e940ce9a3cefe6dbf6026da65228a7631047d773 Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Wed, 13 Aug 2025 19:06:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E4=BC=9A=E8=96=AA=E8=B5=84=E6=B5=81?= =?UTF-8?q?=E6=B0=B4-=E6=B8=85=E9=92=BB=E7=9F=B3fixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 公会薪资流水-清钻石 --- .../GuildPolicy2AdminService.java | 4 ++ .../core/enumeration/BillDomainTypeEnum.java | 1 + .../core/enumeration/BillObjTypeEnum.java | 4 ++ .../GuildDiamondClearPolicy2.java | 47 +++++++++++++ .../GuildPolicy2ClearDiamondVo.java | 17 +++++ .../GuildPolicy2MemberAdminVo.java | 3 + .../GuildDiamondClearPolicy2Mapper.java | 14 ++++ .../GuildDiamondStatisticsPolicy2Mapper.java | 4 ++ .../GuildDiamondClearPolicy2Service.java | 18 +++++ .../GuildDiamondStatisticsPolicy2Service.java | 5 ++ .../guildpolicy2/GuildPolicy2Service.java | 70 +++++++++++++++++++ .../service/purse/UserPurseService.java | 61 +++++++++++++++- .../GuildDiamondClearPolicy2Mapper.xml | 5 ++ .../GuildDiamondStatisticsPolicy2Mapper.xml | 18 ++++- .../guildpolicy/GuildPolicy2Controller.java | 9 +++ .../guild/GuildPolicy2ClearDiamondTask.java | 41 +++++++++++ 16 files changed, 318 insertions(+), 3 deletions(-) create mode 100644 accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildpolicy2/GuildDiamondClearPolicy2.java create mode 100644 accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2ClearDiamondVo.java create mode 100644 accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondClearPolicy2Mapper.java create mode 100644 accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondClearPolicy2Service.java create mode 100644 accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondClearPolicy2Mapper.xml create mode 100644 accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildPolicy2ClearDiamondTask.java diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildpolicy2/GuildPolicy2AdminService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildpolicy2/GuildPolicy2AdminService.java index 5fd643eaf..1239d01ba 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildpolicy2/GuildPolicy2AdminService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guildpolicy2/GuildPolicy2AdminService.java @@ -17,6 +17,7 @@ import com.accompany.core.exception.AdminServiceException; import com.accompany.core.model.Users; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -42,6 +43,9 @@ public class GuildPolicy2AdminService { public PageResult queryMemberPage(Long ownerErbanNo, Integer guildId, Long erbanNo, Integer partitionId, String startDate, String endDate, Integer pageNo, Integer pageSize) { + if (StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)) { + throw new AdminServiceException("请选择周期"); + } Long uid = null; if (erbanNo != null) { Users user = usersService.getUserByErbanNo(erbanNo); diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java index b685561f3..bc2dd62df 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java @@ -30,6 +30,7 @@ public enum BillDomainTypeEnum { USER_EVENT(23, "用户活动"), FIRST_CHARGE(24, "首充"), GAME_USD(25, "游戏薪资"), + GUILD_POLICY2(25, "土耳其公会政策2"), ; private int value; diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java index dc71b6e57..1f2317933 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java @@ -267,6 +267,10 @@ public enum BillObjTypeEnum { PLUS_GAME_USD( 178, "官方增加游戏薪资", BillTypeEnum.IN, CurrencyEnum.GAME_USD, BillDomainTypeEnum.GAME_USD), MIUNS_GAME_USD( 179, "官方扣除游戏薪资", BillTypeEnum.OUT, CurrencyEnum.GAME_USD, BillDomainTypeEnum.GAME_USD), + + GUILD_POLICY2_SUB_GUILD_USD( 180, "土耳其公会结算扣除薪资", BillTypeEnum.OUT, CurrencyEnum.GUILD_USD, BillDomainTypeEnum.GUILD_POLICY2), + + GUILD_POLICY2_SUB_GOLDS( 181, "土耳其公会结算扣除钻石", BillTypeEnum.OUT, CurrencyEnum.GOLD, BillDomainTypeEnum.GUILD_POLICY2), ; BillObjTypeEnum(int value, String desc, BillTypeEnum type, CurrencyEnum currency, BillDomainTypeEnum domain) { diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildpolicy2/GuildDiamondClearPolicy2.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildpolicy2/GuildDiamondClearPolicy2.java new file mode 100644 index 000000000..4fe5ca825 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildpolicy2/GuildDiamondClearPolicy2.java @@ -0,0 +1,47 @@ +package com.accompany.business.model.guildpolicy2; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 公会钻石清理记录实体类 + * + * @author + * @since 2025-08-13 + */ +@Data +public class GuildDiamondClearPolicy2 implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 清理周期 + */ + private String cycleDate; + private Integer partitionId; + private Long guildMemberId; + private Long uid; + /** + * 公会id + */ + private Integer guildId; + /** + * 清理钻石 + */ + private BigDecimal diamondNum; + private BigDecimal guildUsd; + /** + * 清理时间 + */ + private Date createTime; + private Date updateTime; + + +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2ClearDiamondVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2ClearDiamondVo.java new file mode 100644 index 000000000..620fa948b --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2ClearDiamondVo.java @@ -0,0 +1,17 @@ +package com.accompany.business.vo.guildpolicy; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class GuildPolicy2ClearDiamondVo { + + private Long guildMemberId; + private Integer guildId; + private Long uid;//用户id + private Integer partitionId;//分区id + private BigDecimal purseGolds;//钱包钻石数量 + private BigDecimal guildUsd; + +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberAdminVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberAdminVo.java index 39ff96c1c..5ae7a2143 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberAdminVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberAdminVo.java @@ -16,6 +16,9 @@ public class GuildPolicy2MemberAdminVo { @ExcelProperty("公会id") @ApiModelProperty("公会id") private Integer guildId; + @ExcelProperty("公会名称") + @ApiModelProperty("公会名称") + private String guildName; @ExcelProperty("公会长id") @ApiModelProperty("公会长id") private Long ownerErbanNo; diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondClearPolicy2Mapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondClearPolicy2Mapper.java new file mode 100644 index 000000000..6d7547b60 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondClearPolicy2Mapper.java @@ -0,0 +1,14 @@ +package com.accompany.business.mybatismapper.guildpolicy2; + +import com.accompany.business.model.guildpolicy2.GuildDiamondClearPolicy2; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 公会钻石清理记录 Mapper 接口 + * + * @author + * @since 2025-08-13 + */ +public interface GuildDiamondClearPolicy2Mapper extends BaseMapper { + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondStatisticsPolicy2Mapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondStatisticsPolicy2Mapper.java index 2df61c209..f9abe71f9 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondStatisticsPolicy2Mapper.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildDiamondStatisticsPolicy2Mapper.java @@ -3,6 +3,7 @@ package com.accompany.business.mybatismapper.guildpolicy2; import com.accompany.business.model.guildpolicy2.GuildDiamondStatisticsPolicy2; import com.accompany.business.vo.guild.GuildDiamondStatisticsDayVo; import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsDayVo; +import com.accompany.business.vo.guildpolicy.GuildPolicy2ClearDiamondVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2MemberAdminVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2MemberVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo; @@ -51,4 +52,7 @@ public interface GuildDiamondStatisticsPolicy2Mapper extends BaseMapper listClearDaimondData(@Param("partitionId")Integer partitionId); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondClearPolicy2Service.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondClearPolicy2Service.java new file mode 100644 index 000000000..f90d936ab --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondClearPolicy2Service.java @@ -0,0 +1,18 @@ +package com.accompany.business.service.guildpolicy2; + +import com.accompany.business.model.guildpolicy2.GuildDiamondClearPolicy2; +import com.accompany.business.mybatismapper.guildpolicy2.GuildDiamondClearPolicy2Mapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 公会钻石清理记录 服务实现类 + * + * @author + * @since 2025-08-13 + */ +@Service +public class GuildDiamondClearPolicy2Service extends ServiceImpl { + + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondStatisticsPolicy2Service.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondStatisticsPolicy2Service.java index 64fa13fea..8a7292e70 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondStatisticsPolicy2Service.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondStatisticsPolicy2Service.java @@ -5,6 +5,7 @@ import com.accompany.business.model.guildpolicy2.GuildDiamondStatisticsPolicy2; import com.accompany.business.mybatismapper.guildpolicy2.GuildDiamondStatisticsPolicy2Mapper; import com.accompany.business.vo.guild.GuildDiamondStatisticsDayVo; import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsDayVo; +import com.accompany.business.vo.guildpolicy.GuildPolicy2ClearDiamondVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2MemberAdminVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2MemberVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo; @@ -66,4 +67,8 @@ public class GuildDiamondStatisticsPolicy2Service extends ServiceImpl listClearDaimondData(Integer partitionId) { + return baseMapper.listClearDaimondData(partitionId); + } + } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java index 6a091fba5..e1c0d5e23 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java @@ -3,29 +3,38 @@ package com.accompany.business.service.guildpolicy2; import cn.hutool.core.date.DateUtil; import com.accompany.business.constant.guild.GuildConstant; import com.accompany.business.model.guild.GuildMember; +import com.accompany.business.model.guildpolicy2.GuildDiamondClearPolicy2; import com.accompany.business.service.guild.GuildAuthService; import com.accompany.business.service.guild.GuildMemberService; +import com.accompany.business.service.purse.UserPurseService; import com.accompany.business.service.room.RoomMicService; import com.accompany.business.service.user.UsersService; import com.accompany.business.util.FullMonthCycleTimeUtil; import com.accompany.business.vo.guild.CycleDateVo; +import com.accompany.business.vo.guildpolicy.GuildPolicy2ClearDiamondVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2Vo; import com.accompany.common.result.BusiResult; import com.accompany.common.status.BusiStatus; import com.accompany.common.utils.DateTimeUtil; +import com.accompany.core.enumeration.BillObjTypeEnum; import com.accompany.core.enumeration.PartitionEnum; import com.accompany.core.exception.ServiceException; import com.accompany.core.model.Users; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.math.BigDecimal; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.*; +import java.util.concurrent.ThreadPoolExecutor; + +import static com.accompany.common.constant.Constant.ClanMode.GUILD_POLICY2; @Slf4j @Service @@ -42,6 +51,12 @@ public class GuildPolicy2Service { private GuildMicStatisticsPolicy2Service guildMicStatisticsPolicy2Service; @Autowired private UsersService usersService; + @Autowired + private GuildDiamondClearPolicy2Service guildDiamondClearPolicy2Service; + @Autowired + private UserPurseService userPurseService; + @Resource(name = "bizExecutor") + private ThreadPoolExecutor bizExecutor; public BusiResult getGuildPolicy2(Long uid, String cycleBeginDate) { GuildPolicy2Vo guildPolicy2Vo = new GuildPolicy2Vo(); @@ -132,4 +147,59 @@ public class GuildPolicy2Service { } } } + + + public void clearDiamond(PartitionEnum partitionEnum, Date lastMonthDate) { + if (!GUILD_POLICY2.equals(partitionEnum.getClanMode())) { + log.info("clearDiamond partitionEnum:{}, clanMode:{} lastMonthDate:{}", partitionEnum, partitionEnum.getClanMode(), lastMonthDate); + return; + } + List policy2ClearDiamondVos = guildDiamondStatisticsPolicy2Service.listClearDaimondData(partitionEnum.getId()); + if (CollectionUtils.isEmpty(policy2ClearDiamondVos)) { + log.info("clearDiamond partitionEnum:{}, clanMode:{} lastMonthDate:{} no data", partitionEnum, partitionEnum.getClanMode(), lastMonthDate); + return; + } + String cycleDate = DateUtil.formatDate(lastMonthDate); + Date date = new Date(); + List clearDiamondVos = new ArrayList<>(); + for (GuildPolicy2ClearDiamondVo policy2ClearDiamondVo : policy2ClearDiamondVos) { + GuildDiamondClearPolicy2 policy2 = new GuildDiamondClearPolicy2(); + policy2.setCycleDate(cycleDate); + policy2.setGuildId(policy2ClearDiamondVo.getGuildId()); + policy2.setGuildMemberId(policy2ClearDiamondVo.getGuildMemberId()); + policy2.setUid(policy2ClearDiamondVo.getUid()); + policy2.setPartitionId(partitionEnum.getId()); + if (policy2ClearDiamondVo.getPurseGolds() == null) { + policy2.setDiamondNum(BigDecimal.ZERO); + } else { + policy2.setDiamondNum(policy2ClearDiamondVo.getPurseGolds()); + } + if (policy2ClearDiamondVo.getGuildUsd() == null) { + policy2.setGuildUsd(BigDecimal.ZERO); + } else { + policy2.setGuildUsd(policy2ClearDiamondVo.getGuildUsd()); + } + policy2.setCreateTime(date); + policy2.setUpdateTime(date); + clearDiamondVos.add(policy2); + } + guildDiamondClearPolicy2Service.saveOrUpdateBatch(clearDiamondVos); + for (GuildDiamondClearPolicy2 clearDiamondVo : clearDiamondVos) { + bizExecutor.execute(() -> { + try { + log.info("clearDiamond partitionEnum:{}, clearDiamondVo:{}", partitionEnum, JSONObject.toJSONString(clearDiamondVo)); + if (clearDiamondVo.getDiamondNum().compareTo(BigDecimal.ZERO) > 0) { + userPurseService.clearGolds(clearDiamondVo.getUid(), clearDiamondVo.getDiamondNum().doubleValue(), + BillObjTypeEnum.GUILD_POLICY2_SUB_GOLDS); + } + if (clearDiamondVo.getGuildUsd().compareTo(BigDecimal.ZERO) > 0) { + userPurseService.clearGuildUsd(clearDiamondVo.getUid(), clearDiamondVo.getGuildUsd(), + BillObjTypeEnum.GUILD_POLICY2_SUB_GUILD_USD); + } + } catch (Exception e) { + log.error("clearDiamond partitionEnum:{}, clearDiamondVo:{} error:{}", partitionEnum, JSONObject.toJSONString(clearDiamondVo), e); + } + }); + } + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/purse/UserPurseService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/purse/UserPurseService.java index 40f54f9ba..5f812a189 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/purse/UserPurseService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/purse/UserPurseService.java @@ -44,7 +44,6 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; @@ -583,4 +582,64 @@ public class UserPurseService extends ServiceImpl { return purseInUids.stream().collect(Collectors.toMap(UserPurse::getUid,Function.identity())); } + + @Frozen + @Transactional(rollbackFor = Exception.class, transactionManager = "mybatisplusTransactionManager") + public UserPurse clearGolds(Long uid, Double goldNum, BillObjTypeEnum objTypeEnum) { + if (goldNum <= 0d) { + throw new ServiceException(BusiStatus.AMOUNT_PARAM_ERROR); + } + String desc = objTypeEnum.getDesc(); + UserPurse after = withLock(uid, RedisKey.lock_user_gold, userPurse -> { + double restGold = userPurse.getGolds() - goldNum; + double subGolds = goldNum; + if (restGold < 0d){ + subGolds = userPurse.getGolds(); + } + + log.info("subGold 操作前,buss:{},userPurse:{}", desc, gson.toJson(userPurse)); + int ret = baseMapper.updateMinusGolds(uid,subGolds); + boolean result = SqlHelper.retBool(ret); + if(!result) { + throw new ServiceException(BusiStatus.SERVERBUSY); + } + userPurse.setGolds(DoubleUtil.sub(userPurse.getGolds(), subGolds)); + userPurse.setUpdateTime(new Date()); + log.info("subGold 操作后,buss:{},userPurse:{}", desc, gson.toJson(userPurse)); + return userPurse; + }); + billRecordService.insertGeneralBillRecord(uid, objTypeEnum, goldNum, after); + return after; + } + + + @Frozen + @Transactional(rollbackFor = Exception.class, transactionManager = "mybatisplusTransactionManager") + public UserPurse clearGuildUsd(Long uid, BigDecimal guildUsdNum, BillObjTypeEnum objTypeEnum) { + if (BigDecimal.ZERO.compareTo(guildUsdNum) > 0) { + throw new ServiceException(BusiStatus.AMOUNT_PARAM_ERROR); + } + + String desc = objTypeEnum.getDesc(); + UserPurse after = withLock(uid, RedisKey.lock_user_guild_usd, userPurse -> { + BigDecimal purseGuildUsd = BigDecimal.valueOf(userPurse.getGuildUsd()); + BigDecimal subGuildUsd = guildUsdNum; + if (purseGuildUsd.compareTo(guildUsdNum) < 0){ + subGuildUsd = purseGuildUsd; + } + log.info("subGuildUsd 操作前,buss:{},userPurse:{}", desc, gson.toJson(userPurse)); + int ret = baseMapper.updateMinusGuildUsd(uid, subGuildUsd.doubleValue()); + boolean result = SqlHelper.retBool(ret); + if (!result){ + throw new ServiceException(BusiStatus.SERVERBUSY); + } + BigDecimal afterGuildUsd = purseGuildUsd.subtract(subGuildUsd); + userPurse.setGuildUsd(afterGuildUsd.doubleValue()); + userPurse.setUpdateTime(new Date()); + log.info("subGold 操作后,buss:{},userPurse:{}", desc, gson.toJson(userPurse)); + return userPurse; + }); + billRecordService.insertGeneralBillRecord(uid, objTypeEnum, guildUsdNum.doubleValue(), after); + return after; + } } diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondClearPolicy2Mapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondClearPolicy2Mapper.xml new file mode 100644 index 000000000..b47c80e21 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondClearPolicy2Mapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsPolicy2Mapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsPolicy2Mapper.xml index c9ed47670..23d840062 100644 --- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsPolicy2Mapper.xml +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsPolicy2Mapper.xml @@ -48,8 +48,8 @@ + diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java index 492fc9230..2a5f05034 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java @@ -1,11 +1,13 @@ package com.accompany.business.controller.guildpolicy; +import cn.hutool.core.date.DateUtil; import com.accompany.business.service.guildpolicy2.GuildPolicy2Service; import com.accompany.business.service.room.GuildMemberRoomMicRecordService; import com.accompany.business.vo.guild.CycleDateVo; import com.accompany.business.vo.guildpolicy.GuildPolicy2Vo; import com.accompany.common.annotation.Authorization; import com.accompany.common.result.BusiResult; +import com.accompany.core.enumeration.PartitionEnum; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -53,4 +55,11 @@ public class GuildPolicy2Controller { guildMemberRoomMicRecordService.statMicRecordTask4GuildPolicy2();; return guildPolicy2Service.getCycleDates(uid); } + + @Authorization + @GetMapping("/clearDiamond") + public BusiResult> clearDiamond(Integer partitionId, String date) { + guildPolicy2Service.clearDiamond(PartitionEnum.getByPartitionId(partitionId), DateUtil.parseDateTime(date)); + return BusiResult.success(); + } } diff --git a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildPolicy2ClearDiamondTask.java b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildPolicy2ClearDiamondTask.java new file mode 100644 index 000000000..994aba14e --- /dev/null +++ b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/guild/GuildPolicy2ClearDiamondTask.java @@ -0,0 +1,41 @@ +package com.accompany.scheduler.task.guild; + +import cn.hutool.core.date.DateUtil; +import com.accompany.business.service.guildpolicy2.GuildPolicy2Service; +import com.accompany.core.enumeration.PartitionEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; + +@Component +@Slf4j +public class GuildPolicy2ClearDiamondTask { + + @Autowired + private GuildPolicy2Service guildPolicy2Service; + + + /** + * 公户月结算,用户明细 + * 每月1号凌晨0点0分15秒执行 + */ + @Scheduled(cron = "15 0 0 1 * ?", zone = "Etc/GMT-3") + public void guildPolicy2ClearDiamond() { + Date date = new Date(); + List partitionEnumList = List.of(PartitionEnum.TURKEY); + for (PartitionEnum partitionEnum : partitionEnumList) { + try { + Date lastMonth = DateUtil.offsetMonth(date, -1); + log.info("=-=GuildPolicy2ClearDiamondTask=-=:begin"); + guildPolicy2Service.clearDiamond(partitionEnum, lastMonth); + log.info("=-=GuildPolicy2ClearDiamondTask=-= end"); + } catch (Exception e) { + log.error("[GuildPolicy2ClearDiamondTask] 异常", e); + } + } + } +}