公会-结算

This commit is contained in:
khalil
2025-07-25 18:36:24 +08:00
committed by hokli
parent 7855caf145
commit ea1471fec2
28 changed files with 435 additions and 514 deletions

View File

@@ -1,7 +1,6 @@
package com.accompany.admin.mapper.api;
import com.accompany.admin.service.api.BiamondNeedSendVo;
import com.accompany.business.model.guild.AgencyMonthSettleDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List;

View File

@@ -0,0 +1,51 @@
package com.accompany.admin.service.guild;
import com.accompany.business.model.guild.GuildDiamondSalary;
import com.accompany.business.service.guild.GuildDiamondSalaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
@Service
public class GuildDiamondSalaryAdminService {
@Autowired
private GuildDiamondSalaryService service;
public List<GuildDiamondSalary> list(int partitionId) {
return service.lambdaQuery()
.eq(GuildDiamondSalary::getPartitionId, partitionId)
.list();
}
public void add(BigDecimal diamondNum, int partitionId, String level, BigDecimal baseSalaryRatio,
Integer activeMemberCount, BigDecimal activeMemberBonusRatio) {
GuildDiamondSalary po = new GuildDiamondSalary();
po.setDiamondNum(diamondNum);
po.setPartitionId(partitionId);
po.setLevel(level);
GuildDiamondSalary db = service.lambdaQuery()
.eq(GuildDiamondSalary::getDiamondNum, diamondNum)
.one();
if (null != db){
po.setLevel(level);
po.setBaseSalaryRatio(baseSalaryRatio);
po.setActiveMemberCount(activeMemberCount);
po.setActiveMemberBonusRatio(activeMemberBonusRatio);
service.updateById(po);
return;
}
service.save(po);
}
public void delete(BigDecimal diamondNum, int partitionId) {
service.lambdaUpdate()
.eq(GuildDiamondSalary::getDiamondNum, diamondNum)
.eq(GuildDiamondSalary::getPartitionId, partitionId)
.remove();
}
}

View File

@@ -1,6 +1,5 @@
package com.accompany.admin.service.guild;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.constant.guild.GuildUsdOperateTypeEnum;
import com.accompany.business.model.UserPurse;
@@ -20,7 +19,6 @@ import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.model.RegionInfo;
import com.accompany.core.model.Users;
import com.accompany.core.service.partition.PartitionInfoService;
import com.accompany.core.service.region.RegionInfoService;
@@ -58,7 +56,7 @@ public class GuildUsdBillRecordAdminService {
private UserPurseService userPurseService;
@Autowired
private AgencyMonthSettleService agencyMonthSettleService;
private GuildSettleService guildSettleService;
@Autowired
private GuildMemberDiamondStatisticsService guildMemberDiamondStatisticsService;

View File

@@ -1,7 +1,7 @@
package com.accompany.admin.controller.guild;
import com.accompany.business.param.BasePageParams;
import com.accompany.business.service.guild.AgencyMonthSettleService;
import com.accompany.business.service.guild.GuildSettleService;
import com.accompany.business.vo.guild.AgencyMonthSettleDetailVo;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.vo.BaseResponseVO;
@@ -27,12 +27,12 @@ import java.util.List;
public class AgencyMonthSettleController {
@Autowired
private AgencyMonthSettleService agencyMonthSettleService;
private GuildSettleService guildSettleService;
@ApiOperation("列表")
@GetMapping("/list")
public BaseResponseVO<Page<AgencyMonthSettleDetailVo>> list(BasePageParams basePageParams, Integer agencyId, Long agencyOwnerId) throws Exception {
Page<AgencyMonthSettleDetailVo> iPage = agencyMonthSettleService.listPage(basePageParams,agencyId,agencyOwnerId);
Page<AgencyMonthSettleDetailVo> iPage = guildSettleService.listPage(basePageParams,agencyId,agencyOwnerId);
return new BaseResponseVO<>(BusiStatus.SUCCESS,iPage);
}
@@ -45,7 +45,7 @@ public class AgencyMonthSettleController {
String excelName = URLEncoder.encode("公会钻石流水统计", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
basePageParams.setPageSize(5000);
Page<AgencyMonthSettleDetailVo> iPage = agencyMonthSettleService.listPage(basePageParams,agencyId,agencyOwnerId);
Page<AgencyMonthSettleDetailVo> iPage = guildSettleService.listPage(basePageParams,agencyId,agencyOwnerId);
List<AgencyMonthSettleDetailVo> agencyMonthSettleDetailVos = iPage.getRecords();
EasyExcel.write(response.getOutputStream(), AgencyMonthSettleDetailVo.class).sheet("公会钻石流水统计").doWrite(agencyMonthSettleDetailVos);
}

View File

@@ -0,0 +1,76 @@
package com.accompany.admin.controller.guild;
import com.accompany.admin.service.guild.GuildDiamondSalaryAdminService;
import com.accompany.business.model.guild.GuildDiamondSalary;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.AdminServiceException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
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 java.math.BigDecimal;
import java.util.List;
@Api(tags = "公会钻石工资")
@RestController
@RequestMapping("/admin/guild/salary")
public class GuildDiamondSalaryAdminController {
@Autowired
private GuildDiamondSalaryAdminService service;
@ApiOperation("创建")
@ApiImplicitParams({
@ApiImplicitParam(name = "diamondNum", value = "钻石数", required = true),
@ApiImplicitParam(name = "partitionId", value = "partitionId", required = true),
@ApiImplicitParam(name = "level", value = "等级", required = true),
@ApiImplicitParam(name = "baseSalaryRatio", value = "基础工资比例", required = true),
@ApiImplicitParam(name = "activeMemberCount", value = "活跃主播人数", required = true),
@ApiImplicitParam(name = "activeMemberBonusRatio", value = "活跃主播激励工资比例", required = true)
})
@PostMapping("/add")
public BusiResult<Void> add(BigDecimal diamondNum, int partitionId, String level,
BigDecimal baseSalaryRatio, int activeMemberCount, BigDecimal activeMemberBonusRatio){
if (null == diamondNum || BigDecimal.ZERO.compareTo(diamondNum) >= 0
|| !StringUtils.hasText(level)
|| null == baseSalaryRatio || BigDecimal.ZERO.compareTo(baseSalaryRatio)>= 0
|| null == activeMemberBonusRatio || BigDecimal.ZERO.compareTo(activeMemberBonusRatio)>= 0){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
service.add(diamondNum, partitionId, level, baseSalaryRatio, activeMemberCount, activeMemberBonusRatio);
return BusiResult.success();
}
@ApiOperation("删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "diamondNum", value = "diamondNum", required = true),
@ApiImplicitParam(name = "partitionId", value = "partitionId", required = true),
})
@PostMapping("/delete")
public BusiResult<Void> delete(BigDecimal diamondNum, int partitionId){
if (null == diamondNum){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
service.delete(diamondNum, partitionId);
return BusiResult.success();
}
@ApiOperation("列表")
@GetMapping("/list")
@ApiImplicitParams({
@ApiImplicitParam(name = "partitionId", value = "partitionId", required = true),
})
public BusiResult<List<GuildDiamondSalary>> list(int partitionId){
List<GuildDiamondSalary> list = service.list(partitionId);
return BusiResult.success(list);
}
}

View File

@@ -1,74 +0,0 @@
package com.accompany.business.model.guild;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 公会主播月政策结算明细表
* </p>
*
* @author wxf
* @since 2024-07-30
*/
@Builder
@Getter
@Setter
@TableName("agency_user_month_settle_detail")
@AllArgsConstructor
@NoArgsConstructor
public class AgencyUserMonthSettleDetail implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 结算时间
*/
@TableField("stat_date")
private String statDate;
/**
* 结算结束时间
*/
@TableField("end_date")
private String endDate;
/**
* 主播id
*/
@TableField("uid")
private Long uid;
/**
* 所属厅id
*/
@TableField("guild_id")
private Integer guildId;
/**
* 钻石流水
*/
@TableField("diamond_num")
private BigDecimal diamondNum;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
@TableField("update_time")
private Date updateTime;
}

View File

@@ -0,0 +1,16 @@
package com.accompany.business.model.guild;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class GuildDiamondSalary {
private BigDecimal diamondNum;
private Integer partitionId;
private String level;
private BigDecimal baseSalaryRatio;
private Integer activeMemberCount;
private BigDecimal activeMemberBonusRatio;
}

View File

@@ -21,9 +21,7 @@ import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AgencyMonthSettleDetail implements Serializable {
private static final long serialVersionUID = 1L;
public class GuildSettleRecord implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@@ -35,31 +33,34 @@ public class AgencyMonthSettleDetail implements Serializable {
* 结算结束时间
*/
private String endDate;
private Long uid;
/**
* 所属厅id
*/
private Integer guildId;
private Integer partitionId;
private Long guildOwnerUid;
private String diamondLevel;
private Integer hallMemberCount;
private Integer memberCount;
private Integer activeMemberCount;
/**
* 能量值
*/
private BigDecimal diamondNum;
/**
* 公会长工资
*/
private BigDecimal hallSalary;
private String salaryLevel;
/**
* 公会长薪资比例
*/
private Double salaryRate;
/**
* 区服
*/
//private Byte region;
private BigDecimal baseSalaryRatio;
/**
* 公会长工资
*/
private BigDecimal baseSalary;
private BigDecimal activeMemberBonusRatio;
private BigDecimal activeMemberBonus;
private BigDecimal totalSalary;
private String memberRecord;
/**
* 创建时间
*/

View File

@@ -6,6 +6,7 @@ import lombok.Data;
@Data
public class GuildMemberDiamondStatisticsVo extends GuildMemberDiamondStatistics {
private Integer hallMemberCount;
private Integer activeHallMemberCount;
private Long guildMemberId;
}

View File

@@ -1,28 +0,0 @@
package com.accompany.business.mybatismapper.guild;
import com.accompany.business.model.guild.AgencyUserMonthSettleDetail;
import com.accompany.business.vo.guild.AgencyOpenAdminVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 公会主播月政策结算明细表 Mapper 接口
* </p>
*
* @author wxf
* @since 2024-07-30
*/
@Mapper
public interface AgencyUserMonthSettleDetailMapper extends BaseMapper<AgencyUserMonthSettleDetail> {
List<AgencyUserMonthSettleDetail> agencySettleDetailVo(@Param("date") String date, @Param("uid") Long uid, @Param("hallId") Integer hallId);
Page<AgencyOpenAdminVo> excellentAnchorList(@Param("page") Page<AgencyOpenAdminVo> page, @Param("hallId") Long hallId, @Param("dateCycle") String dateCycle, @Param("excellentAnchorDiamondNum") Long excellentAnchorDiamondNum);
Page<AgencyOpenAdminVo> excellentAnchorDetailList(@Param("page") Page<AgencyOpenAdminVo> page, @Param("hallId") Long hallId, @Param("dateCycle") String dateCycle, @Param("excellentAnchorDiamondNum") Long excellentAnchorDiamondNum);
}

View File

@@ -0,0 +1,9 @@
package com.accompany.business.mybatismapper.guild;
import com.accompany.business.model.guild.GuildDiamondSalary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface GuildDiamondSalaryMapper extends BaseMapper<GuildDiamondSalary> {
}

View File

@@ -26,13 +26,10 @@ public interface GuildMemberDiamondStatisticsMapper extends BaseMapper<GuildMemb
List<GuildMemberIncomeVo> listMemberTotalDiamondBetweenDate(@Param("startDate")String startDate, @Param("endDate") String endDate,
@Param("guildId")Integer guildId, @Param("guildMemberIds")List<Long> guildMemberIds);
List<GuildMemberDiamondStatisticsVo> agencySettle(@Param("partitionId") Integer partitionId,
@Param("cycleDate") String cycleDate, @Param("guildId") Integer guildId);
List<GuildMemberDiamondStatisticsVo> listGuildMemberDiamondStat(@Param("partitionId") Integer partitionId,
@Param("cycleDate") String cycleDate,
@Param("guildId") Integer guildId);
List<GuildMemberDiamondStatisticsVo> agencySettleDetail(@Param("partitionId") Integer partitionId,
@Param("cycleDate") String cycleDate,
@Param("guildId") Integer guildId,
@Param("uid") Long uid);
List<AgencyMonthSettleDetailVo> getAgencyOwnerSettleDate(@Param("partitionId") Integer partitionId, @Param("regionId") Integer regionId,
@Param("cycleDate") String cycleDate, @Param("guildId") Integer guildId);

View File

@@ -1,6 +1,6 @@
package com.accompany.business.mybatismapper.guild;
import com.accompany.business.model.guild.AgencyMonthSettleDetail;
import com.accompany.business.model.guild.GuildSettleRecord;
import com.accompany.business.vo.guild.AgencyMonthSettleDetailVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -15,10 +15,10 @@ import java.util.List;
* @author
* @since 2024-07-01
*/
public interface AgencyMonthSettleDetailMapper extends BaseMapper<AgencyMonthSettleDetail> {
public interface GuildSettleRecordMapper extends BaseMapper<GuildSettleRecord> {
AgencyMonthSettleDetail totalSalaryData(@Param("beginDate") Date beginDate, @Param("guildId") Long guildId);
List<AgencyMonthSettleDetail> userSalaryData(@Param("beginDate") Date beginDate, @Param("guildId") Long diamondNum);
GuildSettleRecord totalSalaryData(@Param("beginDate") Date beginDate, @Param("guildId") Long guildId);
List<GuildSettleRecord> userSalaryData(@Param("beginDate") Date beginDate, @Param("guildId") Long diamondNum);
Page<AgencyMonthSettleDetailVo> agencySettleVo(@Param("page") Page<AgencyMonthSettleDetailVo> page, @Param("dateCycle") String dateCycle,
@Param("partitionId") Integer partitionId, @Param("regionId") Integer regionId, @Param("guildId") Integer guildId);

View File

@@ -1,26 +0,0 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.AgencyMonthSettleDetail;
import com.accompany.business.param.BasePageParams;
import com.accompany.business.vo.guild.AgencyMonthSettleDetailVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Date;
import java.util.List;
/**
* 公会月政策结算明细表 服务类
*
* @author
* @since 2024-07-01
*/
public interface AgencyMonthSettleDetailService extends IService<AgencyMonthSettleDetail> {
AgencyMonthSettleDetail totalSalaryData(Date beginDate, Long hallId);
List<AgencyMonthSettleDetail> userSalaryData(Date beginDate, Long hallId);
List<AgencyMonthSettleDetail> listPage(Long hallId, Integer page, Integer pageSize);
Page<AgencyMonthSettleDetailVo> agencySettleVo(BasePageParams basePageParams, String dateCycle, Integer hallId);
}

View File

@@ -1,24 +0,0 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.AgencyUserMonthSettleDetail;
import com.accompany.business.vo.guild.AgencyOpenAdminVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 公会主播月政策结算明细表 服务类
* </p>
*
* @author wxf
* @since 2024-07-30
*/
public interface AgencyUserMonthSettleDetailService extends IService<AgencyUserMonthSettleDetail> {
List<AgencyUserMonthSettleDetail> agencySettleDetailVo(String date, Long uid, Integer hallId);
Page<AgencyOpenAdminVo> excellentAnchorList(Page<AgencyOpenAdminVo> page, Long hallId, String dateCycle, Long excellentAnchorDiamondNum);
Page<AgencyOpenAdminVo> excellentAnchorDetailList(Page<AgencyOpenAdminVo> page, Long hallId, String dateCycle, Long excellentAnchorDiamondNum);
}

View File

@@ -1,37 +0,0 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.AgencyUserMonthSettleDetail;
import com.accompany.business.mybatismapper.guild.AgencyUserMonthSettleDetailMapper;
import com.accompany.business.vo.guild.AgencyOpenAdminVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 公会主播月政策结算明细表 服务实现类
* </p>
*
* @author wxf
* @since 2024-07-30
*/
@Service
public class AgencyUserMonthSettleDetailServiceImpl extends ServiceImpl<AgencyUserMonthSettleDetailMapper, AgencyUserMonthSettleDetail> implements AgencyUserMonthSettleDetailService {
@Override
public List<AgencyUserMonthSettleDetail> agencySettleDetailVo(String date, Long uid, Integer hallId) {
return this.baseMapper.agencySettleDetailVo(date,uid,hallId);
}
@Override
public Page<AgencyOpenAdminVo> excellentAnchorList(Page<AgencyOpenAdminVo> page, Long hallId, String dateCycle, Long excellentAnchorDiamondNum) {
return this.baseMapper.excellentAnchorList(page,hallId,dateCycle,excellentAnchorDiamondNum);
}
@Override
public Page<AgencyOpenAdminVo> excellentAnchorDetailList(Page<AgencyOpenAdminVo> page, Long hallId, String dateCycle, Long excellentAnchorDiamondNum) {
return this.baseMapper.excellentAnchorDetailList(page,hallId,dateCycle,excellentAnchorDiamondNum);
}
}

View File

@@ -0,0 +1,74 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.GuildDiamondSalary;
import com.accompany.business.mybatismapper.guild.GuildDiamondSalaryMapper;
import com.accompany.business.util.CycleTimeUtil;
import com.accompany.business.vo.guild.GuildCycleDiamondWageLevelVo;
import com.accompany.core.enumeration.PartitionEnum;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@Service
public class GuildDiamondSalaryService extends ServiceImpl<GuildDiamondSalaryMapper, GuildDiamondSalary> {
@Autowired
private GuildMemberDiamondStatisticsService guildMemberDiamondStatisticsService;
public GuildCycleDiamondWageLevelVo getCycleDiamondSalaryLevel(Integer guildId, Integer partitionId){
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
String cycleDate = CycleTimeUtil.getCurCycleDateByZoneId(partitionEnum.getZoneId());
BigDecimal cycleDiamond = guildMemberDiamondStatisticsService.getTotalDiamondInCycle(cycleDate, guildId);
TreeMap<BigDecimal, GuildDiamondSalary> diamondSalaryMap = getDiamondSalaryMap(partitionId);
Map.Entry<BigDecimal, GuildDiamondSalary> curDiamondLevel = diamondSalaryMap.headMap(cycleDiamond, true).lastEntry();
Map.Entry<BigDecimal, GuildDiamondSalary> nextDiamondLevel = diamondSalaryMap.tailMap(cycleDiamond, false).firstEntry();
GuildCycleDiamondWageLevelVo diamondSalaryVo = new GuildCycleDiamondWageLevelVo();
diamondSalaryVo.setCurDiamond(cycleDiamond);
diamondSalaryVo.setNextLevelGap(BigDecimal.ZERO);
diamondSalaryVo.setCurLevel(curDiamondLevel.getValue().getLevel());
diamondSalaryVo.setCurLevelWage(curDiamondLevel.getKey());
if (null != nextDiamondLevel) {
diamondSalaryVo.setNextLevel(nextDiamondLevel.getValue().getLevel());
BigDecimal nextLevelWage = nextDiamondLevel.getKey();
diamondSalaryVo.setNextLevelWage(nextLevelWage);
diamondSalaryVo.setNextLevelGap(nextLevelWage.subtract(cycleDiamond));
}
return diamondSalaryVo;
}
public GuildDiamondSalary calDiamondSalary(BigDecimal diamond, Integer partitionId){
TreeMap<BigDecimal, GuildDiamondSalary> diamondSalaryMap = getDiamondSalaryMap(partitionId);
Map.Entry<BigDecimal, GuildDiamondSalary> curDiamondLevel = diamondSalaryMap.headMap(diamond, true).lastEntry();
return curDiamondLevel.getValue();
}
public TreeMap<BigDecimal, GuildDiamondSalary> getDiamondSalaryMap(Integer partitionId) {
List<GuildDiamondSalary> salaryList = lambdaQuery()
.eq(GuildDiamondSalary::getPartitionId, partitionId).list();
return getMap(salaryList);
}
public TreeMap<BigDecimal, GuildDiamondSalary> getMap(List<GuildDiamondSalary> salaryList) {
TreeMap<BigDecimal, GuildDiamondSalary> map = new TreeMap<>();
if (CollectionUtils.isEmpty(salaryList)){
return map;
}
for (GuildDiamondSalary salary : salaryList) {
map.put(salary.getDiamondNum(), salary);
}
return map;
}
}

View File

@@ -1,6 +1,5 @@
package com.accompany.business.service.guild;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.constant.activity.ActivityType;
import com.accompany.business.model.guild.GuildDiamondWage;
import com.accompany.business.model.guild.GuildMember;
@@ -29,16 +28,16 @@ import java.util.stream.Collectors;
@Service
public class GuildMemberDiamondStatisticsService extends ServiceImpl<GuildMemberDiamondStatisticsMapper, GuildMemberDiamondStatistics> {
@Autowired
private GuildDiamondWageService guildDiamondWageService;
@Autowired
private ActivityH5LevelExpService activityH5LevelExpService;
@Autowired
private PartitionInfoService partitionInfoService;
@Autowired
private GuildMemberService guildMemberService;
@Autowired
private UsersService usersService;
@Autowired
private PartitionInfoService partitionInfoService;
@Autowired
private GuildDiamondWageService guildDiamondWageService;
public void update(String cycleDate, GuildMember guildMember, double diamond){
Date now = new Date();
@@ -81,48 +80,6 @@ public class GuildMemberDiamondStatisticsService extends ServiceImpl<GuildMember
.collect(Collectors.toList());
}
public List<UserHallEnergyLevelDataVo> agencySettle(Integer partitionId, String cycleDate, Integer guildId) {
List<UserHallEnergyLevelDataVo> resultList = new ArrayList<>();
List<GuildMemberDiamondStatisticsVo> guildMemberDiamondStatistics = baseMapper.agencySettle(partitionId, cycleDate, guildId);
if (CollectionUtils.isEmpty(guildMemberDiamondStatistics)) {
return resultList;
}
for (GuildMemberDiamondStatisticsVo levelDay : guildMemberDiamondStatistics) {
UserHallEnergyLevelDataVo vo = new UserHallEnergyLevelDataVo();
Long uid = levelDay.getUid();
vo.setUid(uid);
vo.setHallId(levelDay.getGuildId());
vo.setEnergyValue(levelDay.getDiamondNum());
BigDecimal diamond = BigDecimal.valueOf(levelDay.getDiamondNum());
GuildDiamondWage guildDiamondWage = guildDiamondWageService.calDiamondWage(diamond, partitionId);
vo.setEnergyLevel(guildDiamondWage.getLevel());
//vo.setHallSalary(diamond.multiply(guildDiamondWage.getWageRatio()).divide(guildDiamondWage.getWageDivisor(), 2, RoundingMode.HALF_UP));
vo.setHallSalary(diamond.multiply(guildDiamondWage.getWageRatio()));
vo.setCurrentLevelName(guildDiamondWage.getLevel());
vo.setSalaryRate(guildDiamondWage.getWageRatio().doubleValue());
vo.setHallMemberCount(levelDay.getHallMemberCount());
resultList.add(vo);
}
return resultList;
}
public List<UserHallEnergyLevelDataVo> agencySettleDetail(Integer partitionId, String beginDate, Integer guildId, Long uid) {
List<UserHallEnergyLevelDataVo> resultList = new ArrayList<>();
List<GuildMemberDiamondStatisticsVo> statisticsVos = baseMapper.agencySettleDetail(partitionId, beginDate, guildId, uid);
if (CollectionUtils.isEmpty(statisticsVos)) {
return resultList;
}
for (GuildMemberDiamondStatisticsVo levelDay : statisticsVos) {
UserHallEnergyLevelDataVo vo = new UserHallEnergyLevelDataVo();
Long hallUid = levelDay.getUid();
vo.setUid(hallUid);
vo.setHallId(levelDay.getGuildId());
vo.setEnergyValue(levelDay.getDiamondNum());
resultList.add(vo);
}
return resultList;
}
public List<AgencyMonthSettleDetailVo> agencySettleVo(Integer partitionId, Integer regionId, String beginDate, Integer guildId) {
List<AgencyMonthSettleDetailVo> levelMonths = baseMapper.getAgencyOwnerSettleDate(partitionId, regionId, beginDate, guildId);
if (CollectionUtils.isEmpty(levelMonths)) {

View File

@@ -1,7 +1,7 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.AgencyMonthSettleDetail;
import com.accompany.business.mybatismapper.guild.AgencyMonthSettleDetailMapper;
import com.accompany.business.model.guild.GuildSettleRecord;
import com.accompany.business.mybatismapper.guild.GuildSettleRecordMapper;
import com.accompany.business.param.BasePageParams;
import com.accompany.business.vo.guild.AgencyMonthSettleDetailVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -21,30 +21,24 @@ import java.util.List;
* @since 2024-07-01
*/
@Service
public class AgencyMonthSettleDetailServiceImpl extends ServiceImpl<AgencyMonthSettleDetailMapper, AgencyMonthSettleDetail> implements AgencyMonthSettleDetailService {
public class GuildSettleRecordService extends ServiceImpl<GuildSettleRecordMapper, GuildSettleRecord> {
@Override
public AgencyMonthSettleDetail totalSalaryData(Date beginDate, Long hallId) {
public GuildSettleRecord totalSalaryData(Date beginDate, Long hallId) {
return baseMapper.totalSalaryData(beginDate, hallId);
}
@Override
public List<AgencyMonthSettleDetail> userSalaryData(Date beginDate, Long hallId) {
public List<GuildSettleRecord> userSalaryData(Date beginDate, Long hallId) {
return baseMapper.userSalaryData(beginDate, hallId);
}
@Override
public List<AgencyMonthSettleDetail> listPage(Long hallId, Integer page, Integer pageSize) {
LambdaQueryWrapper<AgencyMonthSettleDetail> wrapper = Wrappers.lambdaQuery();
wrapper.eq(AgencyMonthSettleDetail::getGuildId, hallId);
wrapper.orderByDesc(AgencyMonthSettleDetail::getStatDate);
IPage<AgencyMonthSettleDetail> agencyMonthSettleDetailIPage = baseMapper.selectPage(new Page<>(page, pageSize, false), wrapper);
public List<GuildSettleRecord> listPage(Long hallId, Integer page, Integer pageSize) {
LambdaQueryWrapper<GuildSettleRecord> wrapper = Wrappers.lambdaQuery();
wrapper.eq(GuildSettleRecord::getGuildId, hallId);
wrapper.orderByDesc(GuildSettleRecord::getStatDate);
IPage<GuildSettleRecord> agencyMonthSettleDetailIPage = baseMapper.selectPage(new Page<>(page, pageSize, false), wrapper);
return agencyMonthSettleDetailIPage.getRecords();
}
@Override
public Page<AgencyMonthSettleDetailVo> agencySettleVo(BasePageParams basePageParams, String dateCycle, Integer guildId) {
Page<AgencyMonthSettleDetailVo> page = new Page<>(basePageParams.getPageNo(),basePageParams.getPageSize());

View File

@@ -1,17 +1,16 @@
package com.accompany.business.service.guild;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.model.guild.AgencyMonthSettleDetail;
import com.accompany.business.model.guild.AgencyUserMonthSettleDetail;
import com.accompany.business.model.guild.GuildDiamondSalary;
import com.accompany.business.model.guild.GuildSettleRecord;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.mybatismapper.guild.GuildMemberDiamondStatisticsMapper;
import com.accompany.business.param.BasePageParams;
import com.accompany.business.service.SendSysMsgService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.util.CycleTimeUtil;
import com.accompany.business.vo.guild.AgencyMonthSettleDetailVo;
import com.accompany.business.vo.guild.GuildDateCycleVo;
import com.accompany.business.vo.guild.UserHallEnergyLevelDataVo;
import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsVo;
import com.accompany.common.config.SystemConfig;
import com.accompany.common.config.WebSecurityConfig;
import com.accompany.common.constant.AppEnum;
@@ -27,6 +26,7 @@ import com.accompany.core.model.Users;
import com.accompany.core.service.message.MessageRobotPushService;
import com.accompany.core.service.partition.PartitionInfoService;
import com.accompany.core.util.I18NMessageSourceUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -38,14 +38,12 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors;
/**
* 公会月政策结算表 服务实现类
*
@@ -54,15 +52,17 @@ import java.util.stream.Collectors;
*/
@Slf4j
@Service
public class AgencyMonthSettleService {
public class GuildSettleService {
@Autowired
private AgencyMonthSettleDetailService agencyMonthSettleDetailService;
@Autowired
private AgencyUserMonthSettleDetailService agencyUserMonthSettleDetailService;
private GuildSettleRecordService guildSettleRecordService;
@Autowired
private GuildMemberDiamondStatisticsService guildMemberDiamondStatisticsService;
@Autowired
private GuildMemberDiamondStatisticsMapper guildMemberDiamondStatisticsMapper;
@Autowired
private GuildDiamondSalaryService guildDiamondSalaryService;
@Autowired
private GuildUsdOperateService guildUsdOperateService;
@Autowired
private GuildService guildService;
@@ -81,32 +81,86 @@ public class AgencyMonthSettleService {
@Autowired
private SendSysMsgService sendSysMsgService;
public void monthRankTaskAll(Integer partitionId, String beginDate, String endDate) {
List<UserHallEnergyLevelDataVo> userHallEnergyLevelDataVos = guildMemberDiamondStatisticsService.agencySettle(partitionId, beginDate, null);
if (CollectionUtils.isEmpty(userHallEnergyLevelDataVos)) {
return;
public List<GuildSettleRecord> cal(Integer partitionId, String beginDate, String endDate, Integer gId){
List<GuildMemberDiamondStatisticsVo> memberSettleList = guildMemberDiamondStatisticsMapper.listGuildMemberDiamondStat(partitionId, beginDate, gId);
if (CollectionUtils.isEmpty(memberSettleList)){
log.error("[guild settle] partitionId {} cycleDate {} 周期内无有效公会", partitionId, beginDate);
throw new ServiceException(BusiStatus.SERVERERROR);
}
List<AgencyMonthSettleDetail> agencyMonthSettleDetails = new ArrayList<>();
for (UserHallEnergyLevelDataVo dataVo : userHallEnergyLevelDataVos) {
AgencyMonthSettleDetail agencyMonthSettleDetail = AgencyMonthSettleDetail.builder().uid(dataVo.getUid()).guildId(dataVo.getHallId()).partitionId(partitionId)
.diamondLevel(dataVo.getEnergyLevel()).diamondNum(BigDecimal.valueOf(dataVo.getEnergyValue())).hallMemberCount(dataVo.getHallMemberCount())
.hallSalary(dataVo.getHallSalary()).salaryRate(dataVo.getSalaryRate()).createTime(new Date()).statDate(beginDate).endDate(endDate).build();
agencyMonthSettleDetails.add(agencyMonthSettleDetail);
}
agencyMonthSettleDetailService.saveBatch(agencyMonthSettleDetails);
Map<Integer, List<GuildMemberDiamondStatisticsVo>> groupByGuildIdMap = memberSettleList.stream().collect(Collectors.groupingBy(GuildMemberDiamondStatisticsVo::getGuildId));
sendMessage(agencyMonthSettleDetails);
List<Integer> guildIdList = groupByGuildIdMap.keySet().stream().toList();
Map<Integer, Guild> guildMap = guildService.mapGuildByIds(guildIdList);
for (UserHallEnergyLevelDataVo dataVo : userHallEnergyLevelDataVos) {
if (dataVo.getHallSalary().doubleValue() == 0) {
Double activeMemberStandard = 150000d;
Date now = new Date();
return groupByGuildIdMap.entrySet().stream().map(entry -> {
Integer guildId = entry.getKey();
List<GuildMemberDiamondStatisticsVo> memberDiamondList = entry.getValue();
GuildSettleRecord record = new GuildSettleRecord();
record.setGuildId(guildId);
record.setPartitionId(partitionId);
record.setStatDate(beginDate);
record.setEndDate(endDate);
Guild g = guildMap.get(guildId);
if (null != g){
record.setGuildOwnerUid(g.getOwnerUid());
}
record.setMemberCount(memberDiamondList.size());
int activeMemberCount = (int) memberDiamondList.stream().filter(ds->activeMemberStandard.compareTo(ds.getDiamondNum()) <= 0).count();
record.setActiveMemberCount(activeMemberCount);
BigDecimal totalDiamondNum = memberDiamondList.stream().map(GuildMemberDiamondStatisticsVo::getDiamondNum).map(BigDecimal::valueOf).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
record.setDiamondNum(totalDiamondNum);
GuildDiamondSalary guildDiamondSalary = guildDiamondSalaryService.calDiamondSalary(totalDiamondNum, partitionId);
if (null == guildDiamondSalary){
throw new ServiceException(BusiStatus.SERVERERROR);
}
record.setSalaryLevel(guildDiamondSalary.getLevel());
record.setBaseSalaryRatio(guildDiamondSalary.getBaseSalaryRatio());
BigDecimal baseSalary = totalDiamondNum.multiply(guildDiamondSalary.getBaseSalaryRatio());
record.setBaseSalary(baseSalary);
record.setActiveMemberBonusRatio(guildDiamondSalary.getActiveMemberBonusRatio());
BigDecimal activeMemberBonus = totalDiamondNum.multiply(guildDiamondSalary.getActiveMemberBonusRatio());
BigDecimal totalSalary = baseSalary.add(activeMemberBonus);
record.setTotalSalary(totalSalary);
record.setMemberRecord(JSON.toJSONString(memberDiamondList));
record.setCreateTime(now);
record.setUpdateTime(now);
return record;
}).toList();
}
public void settle(Integer partitionId, String beginDate, String endDate){
List<GuildSettleRecord> guildSettleRecords = cal(partitionId, beginDate, endDate, null);
guildSettleRecordService.saveBatch(guildSettleRecords);
sendMessage(guildSettleRecords);
// 发财
for (GuildSettleRecord record : guildSettleRecords) {
log.info("[guild settle] partitionId {} guildId {} salary {}", record.getPartitionId(), record.getGuildId(), JSON.toJSONString(record));
if (BigDecimal.ZERO.compareTo(record.getTotalSalary()) <= 0) {
continue;
}
guildUsdOperateService.settlementGold(dataVo.getHallId(), dataVo.getUid(), dataVo.getHallSalary());
guildUsdOperateService.settlementGold(record.getGuildId(), record.getGuildOwnerUid(), record.getTotalSalary());
}
Map<Long, BigDecimal> uidSalaryMap = agencyMonthSettleDetails.stream()
.filter(d->d.getHallSalary().compareTo(BigDecimal.ZERO) > 0)
.collect(Collectors.toMap(AgencyMonthSettleDetail::getUid, AgencyMonthSettleDetail::getHallSalary));
Map<Long, BigDecimal> uidSalaryMap = guildSettleRecords.stream()
.filter(d->d.getTotalSalary().compareTo(BigDecimal.ZERO) > 0)
.collect(Collectors.toMap(GuildSettleRecord::getGuildOwnerUid, GuildSettleRecord::getTotalSalary));
sendSecretMessage(partitionId, uidSalaryMap);
}
@@ -121,17 +175,17 @@ public class AgencyMonthSettleService {
}
}
public void sendMessage(List<AgencyMonthSettleDetail> agencyMonthSettleDetails) {
Map<Integer, List<AgencyMonthSettleDetail>> partitionMap = agencyMonthSettleDetails.stream()
.collect(Collectors.groupingBy(AgencyMonthSettleDetail::getPartitionId));
public void sendMessage(List<GuildSettleRecord> guildSettleRecords) {
Map<Integer, List<GuildSettleRecord>> partitionMap = guildSettleRecords.stream()
.collect(Collectors.groupingBy(GuildSettleRecord::getPartitionId));
for (Integer partitionId : partitionMap.keySet()){
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
List<AgencyMonthSettleDetail> detail = partitionMap.get(partitionId).stream()
.filter(d->d.getHallSalary().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
List<GuildSettleRecord> detail = partitionMap.get(partitionId).stream()
.filter(d->d.getTotalSalary().compareTo(BigDecimal.ZERO) > 0).toList();
String nowStr = DateTimeUtil.getCurrentDateTime();
int count = detail.size();
BigDecimal totalDiamondNum = detail.stream().map(AgencyMonthSettleDetail::getDiamondNum).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalSalaryNum = detail.stream().map(AgencyMonthSettleDetail::getHallSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalDiamondNum = detail.stream().map(GuildSettleRecord::getDiamondNum).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalSalaryNum = detail.stream().map(GuildSettleRecord::getTotalSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal rate = totalDiamondNum.compareTo(BigDecimal.ZERO) > 0?
totalSalaryNum.divide(totalDiamondNum, 2, RoundingMode.HALF_UP):
BigDecimal.ZERO;
@@ -149,24 +203,6 @@ public class AgencyMonthSettleService {
}
}
public void monthRankTaskDetail(Integer partitionId, String beginDate, String endDate) {
List<UserHallEnergyLevelDataVo> userHallEnergyLevelDataVos = guildMemberDiamondStatisticsService.agencySettleDetail(partitionId, beginDate, null, null);
if (CollectionUtils.isEmpty(userHallEnergyLevelDataVos)) {
return;
}
List<AgencyUserMonthSettleDetail> agencyUserMonthSettleDetails = new ArrayList<>();
for (UserHallEnergyLevelDataVo dataVo : userHallEnergyLevelDataVos) {
AgencyUserMonthSettleDetail agencyMonthSettleDetail = AgencyUserMonthSettleDetail.builder().uid(dataVo.getUid()).guildId(dataVo.getHallId())
.diamondNum(BigDecimal.valueOf(dataVo.getEnergyValue())).createTime(new Date()).statDate(beginDate).endDate(endDate).build();
agencyUserMonthSettleDetails.add(agencyMonthSettleDetail);
}
boolean saveBatch = agencyUserMonthSettleDetailService.saveBatch(agencyUserMonthSettleDetails);
if (!saveBatch) {
log.info("empty agencyUserMonthSettleDetails");
}
}
public Page<AgencyMonthSettleDetailVo> listPage(BasePageParams basePageParams, Integer agencyId, Long agencyOwnerId) {
if (null == basePageParams.getPartitionId()){
throw new ServiceException(BusiStatus.SERVERERROR,"请选择分区");
@@ -201,8 +237,7 @@ public class AgencyMonthSettleService {
String curCycleDate = CycleTimeUtil.getCurCycleDateByZoneId(ZoneId.systemDefault().getId());
if (curCycleDate.equals(basePageParams.getDateCycle())){
List<AgencyMonthSettleDetailVo> agencyMonthSettleDetailVos =
guildMemberDiamondStatisticsService.agencySettleVo(basePageParams.getPartitionId(), basePageParams.getRegionId(), basePageParams.getDateCycle(), hallId);
List<AgencyMonthSettleDetailVo> agencyMonthSettleDetailVos = guildMemberDiamondStatisticsService.agencySettleVo(basePageParams.getPartitionId(), basePageParams.getRegionId(), basePageParams.getDateCycle(), hallId);
List<AgencyMonthSettleDetailVo> records = PageUtil.page(agencyMonthSettleDetailVos, basePageParams.getPageNo(), basePageParams.getPageSize());
page.setRecords(records);
page.setTotal(agencyMonthSettleDetailVos.size());
@@ -213,7 +248,7 @@ public class AgencyMonthSettleService {
}
PartitionInfo partitionInfo = partitionInfoService.getById(basePageParams.getPartitionId());
Page<AgencyMonthSettleDetailVo> agencyMonthSettleDetailVoPage = agencyMonthSettleDetailService.agencySettleVo(basePageParams, basePageParams.getDateCycle(), hallId);
Page<AgencyMonthSettleDetailVo> agencyMonthSettleDetailVoPage = guildSettleRecordService.agencySettleVo(basePageParams, basePageParams.getDateCycle(), hallId);
for (AgencyMonthSettleDetailVo record : agencyMonthSettleDetailVoPage.getRecords()) {
record.setPartitionDesc(partitionInfo.getDesc());
record.setSalaryRate(record.getSalaryRate()*100);

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.accompany.business.mybatismapper.guild.AgencyUserMonthSettleDetailMapper">
<select id="agencySettleDetailVo"
resultType="com.accompany.business.model.guild.AgencyUserMonthSettleDetail">
select * from agency_user_month_settle_detail where stat_date = #{date}
<if test="hallId != null">
and guild_id = #{hallId}
</if>
<if test="uid != null">
and uid = #{uid}
</if>
</select>
<select id="excellentAnchorList" resultType="com.accompany.business.vo.guild.AgencyOpenAdminVo">
SELECT stat_date dateCycle,guild_id guildId,uid, SUM(IF(diamond_num > #{excellentAnchorDiamondNum},1,0)) effectAnchor ,count(DISTINCT uid) allAnchor
FROM agency_user_month_settle_detail
WHERE stat_date = #{dateCycle} AND guild_id = #{hallId}
GROUP BY guild_id
</select>
<select id="excellentAnchorDetailList"
resultType="com.accompany.business.vo.guild.AgencyOpenAdminVo">
SELECT guild_id hallId,uid uid,energy_value diamondFlow,IF(diamond_num > #{excellentAnchorDiamondNum},1,0) effect
FROM agency_user_month_settle_detail
WHERE stat_date = #{dateCycle} AND guild_id = #{hallId}
order by diamondFlow desc
</select>
</mapper>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.business.mybatismapper.guild.GuildDiamondSalaryMapper">
</mapper>

View File

@@ -35,45 +35,22 @@
group by s.guild_member_id
</select>
<select id="agencySettle" resultType="com.accompany.business.vo.guild.GuildMemberDiamondStatisticsVo">
select
hm.guild_id guildId,
h.owner_uid uid,
count(hm.uid) hallMemberCount,
sum(IFNULL(ed.diamond_num, 0)) diamondNum
from guild_member hm
left join guild_member_diamond_statistics ed on ed.guild_member_id = hm.id
and hm.guild_id = ed.guild_id
and ed.cycle_date = #{cycleDate}
left join guild h on hm.guild_id = h.id
where hm.partition_id = #{partitionId}
<if test="guildId != null">
and hm.guild_id = #{guildId}
</if>
and hm.`enable` = 1
group by hm.guild_id
</select>
<select id="agencySettleDetail" resultType="com.accompany.business.vo.guild.GuildMemberDiamondStatisticsVo">
<select id="listGuildMemberDiamondStat" resultType="com.accompany.business.vo.guild.GuildMemberDiamondStatisticsVo">
select
hm.id guildMemberId,
hm.guild_id guildId,
hm.uid uid,
sum(IFNULL(ed.diamond_num, 0)) diamondNum
ed.cycle_date cycleDate,
IFNULL(ed.diamond_num, 0) diamondNum
from guild_member hm
left join guild_member_diamond_statistics ed on ed.guild_member_id = hm.id
and hm.guild_id = ed.guild_id
and ed.cycle_date = #{cycleDate}
left join guild h on hm.guild_id = h.id
left join users u on hm.uid = u.uid
where hm.partition_id = #{partitionId}
<if test="guildId != null">
and hm.guild_id = #{guildId}
</if>
<if test="uid != null">
and hm.uid = #{uid}
</if>
left join guild_member_diamond_statistics ed
on ed.guild_member_id = hm.id and ed.cycle_date = #{cycleDate}
where 1=1
<if test="guildId != null">
and hm.guild_id = #{guildId}
</if>
and hm.partition_id = #{partitionId}
and hm.`enable` = 1
group by hm.guild_id, hm.uid
</select>
<select id="getAgencyOwnerSettleDate"

View File

@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.accompany.business.mybatismapper.guild.AgencyMonthSettleDetailMapper">
<mapper namespace="com.accompany.business.mybatismapper.guild.GuildSettleRecordMapper">
<select id="totalSalaryData" resultType="com.accompany.business.model.guild.AgencyMonthSettleDetail">
<select id="totalSalaryData" resultType="com.accompany.business.model.guild.GuildSettleRecord">
select ifnull(sum(anchor_salary), 0) anchorSalary,
ifnull(sum(diamond_salary), 0) diamondSalary,
ifnull(sum(hall_salary), 0) hallSalary,
@@ -13,7 +12,7 @@
and guild_id = #{guildId}
</select>
<select id="userSalaryData" resultType="com.accompany.business.model.guild.AgencyMonthSettleDetail">
<select id="userSalaryData" resultType="com.accompany.business.model.guild.GuildSettleRecord">
select guild_id guildId, uid, ifnull(sum(anchor_salary), 0) anchorSalary,
ifnull(sum(diamond_salary), 0) diamondSalary,
ifnull(sum(hall_salary), 0) hallSalary,

View File

@@ -1,13 +1,11 @@
package com.accompany.business.controller.guild;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.service.guild.AgencyMonthSettleService;
import com.accompany.business.service.guild.GuildSettleService;
import com.accompany.business.service.guild.GuildMessageService;
import com.accompany.business.service.room.RoomDayDiamondRewardRecordService;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.result.BusiResult;
import com.accompany.core.base.UidContextHolder;
import com.accompany.core.enumeration.PartitionEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +21,7 @@ public class GuildTestController {
@Autowired
private GuildMessageService guildMessageService;
@Autowired
private AgencyMonthSettleService agencyMonthSettleService;
private GuildSettleService guildSettleService;
@ApiOperation("测试小秘书消息")
@@ -35,22 +33,13 @@ public class GuildTestController {
return BusiResult.success();
}
@RequestMapping(value = "monthSettleTaskAll")
@RequestMapping(value = "settle")
@Authorization
public void monthSettleTaskAll(String beginDate, String endDate, String pwd, Integer partiionId) {
public void monthSettleTaskAll(Integer partitionId, String beginDate, String endDate, String pwd) {
if (!"fdsfast43532453".equals(pwd)) {
return;
}
agencyMonthSettleService.monthRankTaskAll(partiionId, beginDate, endDate);
}
@RequestMapping(value = "monthRankTaskDetailAll")
@Authorization
public void monthRankTaskDetail_(String beginDate, String endDate, String pwd, Integer partiionId) {
if (!"fdsfast43532453".equals(pwd)) {
return;
}
agencyMonthSettleService.monthRankTaskDetail(partiionId, beginDate, endDate);
guildSettleService.settle(partitionId, beginDate, endDate);
}
@Autowired

View File

@@ -19,7 +19,7 @@ public class RechargeAgentWeekStatTask extends BaseTask {
@Scheduled(cron = "5 0 0 ? * MON")
public void statWeekEn() {
List<PartitionEnum> partitionEnumList = List.of(PartitionEnum.ENGLISH2);
List<PartitionEnum> partitionEnumList = List.of(PartitionEnum.ENGLISH);
service.stat(partitionEnumList);
}

View File

@@ -1,75 +0,0 @@
package com.accompany.scheduler.task.guild;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.service.guild.AgencyMonthSettleService;
import com.accompany.business.service.guild.GuildSalaryBillDateCycleService;
import com.accompany.business.util.CycleTimeUtil;
import com.accompany.common.utils.DateTimeUtil;
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.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class GuildSettle4EnTask {
@Autowired
private AgencyMonthSettleService agencyMonthSettleService;
@Autowired
private GuildSalaryBillDateCycleService guildSalaryBillDateCycleService;
//zone = "Asia/Riyadh zone = "Etc/GMT-3" 两种方式都支持
/**
* 公户月结算,用户明细
* 每月1号凌晨0点10分执行
*/
@Scheduled(cron = "0 10 0 1 * ?")
public void monthRank4EnTaskAll2() {
Date date = new Date();
List<PartitionEnum> partitionEnumList = List.of(PartitionEnum.ENGLISH);
for (PartitionEnum partitionEnum : partitionEnumList) {
try {
ZonedDateTime lastDateZdt = CycleTimeUtil.getLastDateZdtByZoneId(partitionEnum.getZoneId());
ZonedDateTime lastEndDateZdt = CycleTimeUtil.getLastDateZdt(lastDateZdt);
String lastCycDate = lastDateZdt.format(DateTimeUtil.dateFormatter);
String lastCycEndDate = lastEndDateZdt.format(DateTimeUtil.dateFormatter);
log.info("=-=monthRank4EnTaskAll2=-=:beginTime:{},endTime:{}", lastCycDate, lastCycEndDate);
agencyMonthSettleService.monthRankTaskAll(partitionEnum.getId(), lastCycDate, lastCycEndDate);
log.info("=-=monthRank4EnTaskAll2=-= end");
log.info("=-=monthRankTaskDetail2=-=:beginTime:{},endTime:{}", lastCycDate, lastCycEndDate);
agencyMonthSettleService.monthRankTaskDetail(partitionEnum.getId(), lastCycDate, lastCycEndDate);
log.info("=-=monthRankTaskDetail2=-= end");
} catch (Exception e) {
log.error("[monthRank4EnTaskAll2] 异常", e);
}
}
}
/**
* 主播薪资操作记录结算
*/
@Scheduled(cron = "0 10 0 * * ?")
public void settleAnchorBill() {
List<PartitionEnum> partitionEnumList = List.of(PartitionEnum.ENGLISH);
for (PartitionEnum partitionEnum : partitionEnumList) {
try {
String today = DateTimeUtil.getZonedTodayStr(partitionEnum.getZoneId());
String cycleDate = CycleTimeUtil.getCurCycleDateByZoneId(partitionEnum.getZoneId());
if (today.equals(cycleDate)) {
String lastCycleDate = CycleTimeUtil.getLastDateByZoneId(partitionEnum.getZoneId());
guildSalaryBillDateCycleService.settleAnchorBill(lastCycleDate, partitionEnum.getId());
}
} catch (Exception e) {
log.error("[monthRankTask异常] {}", e.getMessage());
}
}
}
}

View File

@@ -1,8 +1,6 @@
package com.accompany.scheduler.task.guild;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.service.guild.AgencyMonthSettleService;
import com.accompany.business.service.guild.GuildSettleService;
import com.accompany.business.service.guild.GuildSalaryBillDateCycleService;
import com.accompany.business.util.CycleTimeUtil;
import com.accompany.common.utils.DateTimeUtil;
@@ -13,26 +11,46 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class GuildSettleTask {
@Autowired
private AgencyMonthSettleService agencyMonthSettleService;
private GuildSettleService guildSettleService;
@Autowired
private GuildSalaryBillDateCycleService guildSalaryBillDateCycleService ;
//zone = "Asia/Riyadh zone = "Etc/GMT-3" 两种方式都支持
/**
* 公户月结算,用户明细
* 每月1号凌晨0点10分执行
*/
@Scheduled(cron = "0 10 0 1 * ?")
public void settleEn() {
List<PartitionEnum> partitionEnumList = List.of(PartitionEnum.ENGLISH);
for (PartitionEnum partitionEnum : partitionEnumList) {
try {
ZonedDateTime lastDateZdt = CycleTimeUtil.getLastDateZdtByZoneId(partitionEnum.getZoneId());
ZonedDateTime lastEndDateZdt = CycleTimeUtil.getLastDateZdt(lastDateZdt);
String lastCycDate = lastDateZdt.format(DateTimeUtil.dateFormatter);
String lastCycEndDate = lastEndDateZdt.format(DateTimeUtil.dateFormatter);
log.info("=-=guild settle=-=:beginTime:{},endTime:{}", lastCycDate, lastCycEndDate);
guildSettleService.settle(partitionEnum.getId(), lastCycDate, lastCycEndDate);
log.info("=-=guild settle=-= end");
} catch (Exception e) {
log.error("[guild settle] 异常", e);
}
}
}
/**
* 公户月结算,用户明细
* 每月1号凌晨0点10分执行
*/
@Scheduled(cron = "0 10 0 1 * ?", zone = "Etc/GMT-3")
public void monthRankTaskAll2() {
Date date = new Date();
List<PartitionEnum> partitionEnumList = List.of(PartitionEnum.ARAB, PartitionEnum.TURKEY);
for (PartitionEnum partitionEnum : partitionEnumList) {
try {
@@ -40,14 +58,31 @@ public class GuildSettleTask {
ZonedDateTime lastEndDateZdt = CycleTimeUtil.getLastDateZdt(lastDateZdt);
String lastCycDate = lastDateZdt.format(DateTimeUtil.dateFormatter);
String lastCycEndDate = lastEndDateZdt.format(DateTimeUtil.dateFormatter);
log.info("=-=monthRankTaskAll2=-=:beginTime:{},endTime:{}", lastCycDate, lastCycEndDate);
agencyMonthSettleService.monthRankTaskAll(partitionEnum.getId(), lastCycDate, lastCycEndDate);
log.info("=-=monthRankTaskAll2=-= end");
log.info("=-=monthRankTaskDetail2=-=:beginTime:{},endTime:{}", lastCycDate, lastCycEndDate);
agencyMonthSettleService.monthRankTaskDetail(partitionEnum.getId(), lastCycDate, lastCycEndDate);
log.info("=-=monthRankTaskDetail2=-= end");
log.info("=-=guild settle=-=:beginTime:{},endTime:{}", lastCycDate, lastCycEndDate);
guildSettleService.settle(partitionEnum.getId(), lastCycDate, lastCycEndDate);
log.info("=-=guild settle=-= end");
} catch (Exception e) {
log.error("[monthRankTaskAll2] 异常", e);
log.error("[guild settle] 异常", e);
}
}
}
/**
* 主播薪资操作记录结算
*/
@Scheduled(cron = "0 10 0 * * ?")
public void settleEnAnchorBill() {
List<PartitionEnum> partitionEnumList = List.of(PartitionEnum.ENGLISH);
for (PartitionEnum partitionEnum : partitionEnumList) {
try {
String today = DateTimeUtil.getZonedTodayStr(partitionEnum.getZoneId());
String cycleDate = CycleTimeUtil.getCurCycleDateByZoneId(partitionEnum.getZoneId());
if (today.equals(cycleDate)) {
String lastCycleDate = CycleTimeUtil.getLastDateByZoneId(partitionEnum.getZoneId());
guildSalaryBillDateCycleService.settleAnchorBill(lastCycleDate, partitionEnum.getId());
}
} catch (Exception e) {
log.error("[monthRankTask异常] {}", e.getMessage());
}
}
}