家族-收入
This commit is contained in:
@@ -7,12 +7,11 @@ import com.accompany.business.model.UserPurse;
|
||||
import com.accompany.business.model.guild.AgencyUserMonthSettleDetail;
|
||||
import com.accompany.business.model.guild.Guild;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.model.guild.GuildUsdBillRecord;
|
||||
import com.accompany.business.param.BasePageParams;
|
||||
import com.accompany.business.service.guild.*;
|
||||
import com.accompany.business.service.purse.UserPurseService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.business.vo.guild.AgencyOwnerVo;
|
||||
import com.accompany.business.vo.guild.AnchorSalaryBillAdminVo;
|
||||
import com.accompany.business.vo.guild.GuildDateCycleVo;
|
||||
@@ -275,11 +274,11 @@ public class GuildUsdBillRecordAdminService {
|
||||
|
||||
|
||||
public BaseResponseVO<List<GuildDateCycleVo>> dateCycleList(Long month) {
|
||||
Date date = GuildTimeUtil.getAgencyCycleBeginDate(new Date());
|
||||
Date date = CycleTimeUtil.getAgencyCycleBeginDate(new Date());
|
||||
List<GuildDateCycleVo> agencyDateCycleVos = new ArrayList<>();
|
||||
for (int i = 0; i < month * 2; i++) {
|
||||
GuildDateCycleVo dateCycle = agencyMonthSettleService.getDateCycle(DateUtil.formatDate(date));
|
||||
date = GuildTimeUtil.getAgencyCycleBeginDate(DateTimeUtil.addDays(date, -1));
|
||||
date = CycleTimeUtil.getAgencyCycleBeginDate(DateTimeUtil.addDays(date, -1));
|
||||
dateCycle.setEndDate(DateTimeUtil.addSeconds(dateCycle.getEndDate(), -1));
|
||||
dateCycle.setStartDateStr(DateUtil.formatDate(dateCycle.getStartDate()));
|
||||
dateCycle.setEndDateStr(DateUtil.formatDate(dateCycle.getEndDate()));
|
||||
|
@@ -4,7 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.admin.service.guild.GuildUsdBillRecordAdminService;
|
||||
import com.accompany.business.param.BasePageParams;
|
||||
import com.accompany.business.service.guild.GuildSalaryBillDateCycleService;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.business.vo.guild.AnchorSalaryBillAdminVo;
|
||||
import com.accompany.business.vo.guild.GuildDateCycleVo;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
@@ -65,7 +65,7 @@ public class AnchorSalaryBillController {
|
||||
public BaseResponseVO<Void> settle(String dateStr) throws Exception {
|
||||
//发放奖励逻辑:每月1号/16号为结算日沙特时间00:10(次月1号结算上月16号-月结束的奖励,每月16号结算本月1-15号的奖励)
|
||||
Date date = DateUtil.parseDate(dateStr);
|
||||
Date agencyCycleBeginDate = GuildTimeUtil.getAgencyCycleBeginDate(date);
|
||||
Date agencyCycleBeginDate = CycleTimeUtil.getAgencyCycleBeginDate(date);
|
||||
String shortDate = DateUtil.formatDate(date);
|
||||
String cycleDate = DateUtil.formatDate(agencyCycleBeginDate);
|
||||
if (shortDate.equals(cycleDate)) {
|
||||
|
@@ -0,0 +1,22 @@
|
||||
package com.accompany.business.vo.family;
|
||||
|
||||
import com.accompany.business.vo.guild.CycleDateVo;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ApiModel
|
||||
@Data
|
||||
public class FamilyIncomeVo {
|
||||
|
||||
@ApiModelProperty("自己每日流水")
|
||||
private FamilyMemberDailyIncomeVo dailyIncome;
|
||||
@ApiModelProperty("成员流水")
|
||||
private FamilyMemberIncomeVo memberIncome;
|
||||
@ApiModelProperty("周期")
|
||||
private List<CycleDateVo> cycleDateList;
|
||||
|
||||
}
|
@@ -0,0 +1,14 @@
|
||||
package com.accompany.business.vo.family;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel
|
||||
@Data
|
||||
public class FamilyMemberDailyIncomeItemVo extends SimpleFamilyIncomeVo {
|
||||
|
||||
@ApiModelProperty("日期")
|
||||
private String date;
|
||||
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package com.accompany.business.vo.family;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ApiModel
|
||||
@Data
|
||||
public class FamilyMemberDailyIncomeVo {
|
||||
@ApiModelProperty("开始日期")
|
||||
private String startDate;
|
||||
@ApiModelProperty("结束日期")
|
||||
private String endDate;
|
||||
@ApiModelProperty("总金币收入")
|
||||
private Long totalGoldIncome = 0L;
|
||||
@ApiModelProperty("成员流水")
|
||||
private List<FamilyMemberDailyIncomeItemVo> dailyIncomeList = new ArrayList<>();
|
||||
}
|
@@ -10,10 +10,12 @@ import java.util.List;
|
||||
@ApiModel
|
||||
@Data
|
||||
public class FamilyMemberIncomeVo {
|
||||
|
||||
@ApiModelProperty("开始日期")
|
||||
private String startDate;
|
||||
@ApiModelProperty("结束日期")
|
||||
private String endDate;
|
||||
@ApiModelProperty("总金币收入")
|
||||
private Long totalGoldIncome = 0L;
|
||||
@ApiModelProperty("成员流水")
|
||||
private List<FamilyMemberIncomeItemVo> memberIncomeList = new ArrayList<>();
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.accompany.business.vo.guild;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel
|
||||
@Data
|
||||
public class CycleDateVo {
|
||||
|
||||
@ApiModelProperty("周期")
|
||||
private String cycleDate;
|
||||
@ApiModelProperty("周期范围格式化")
|
||||
private String intervalFormatter;
|
||||
@ApiModelProperty("开始时间")
|
||||
private String startDate;
|
||||
@ApiModelProperty("结束时间")
|
||||
private String endDate;
|
||||
|
||||
}
|
@@ -7,7 +7,7 @@ import com.accompany.business.service.guild.GuildMemberDiamondStatisticsService;
|
||||
import com.accompany.business.service.guild.GuildMemberService;
|
||||
import com.accompany.business.service.guild.GuildRankService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.common.constant.Constant;
|
||||
import com.accompany.core.model.PartitionInfo;
|
||||
import com.accompany.core.model.Users;
|
||||
@@ -53,7 +53,7 @@ public class SuperLuckyGiftDiamondIncomeListener implements ApplicationListener<
|
||||
|
||||
Date time = message.getCreateTime();
|
||||
Double totalDiamondNum = message.getTotalDiamondNum();
|
||||
String cycleDate = GuildTimeUtil.getCycleDateByZoneId(time, partitionInfo.getZoneId());
|
||||
String cycleDate = CycleTimeUtil.getCycleDateByZoneId(time, partitionInfo.getZoneId());
|
||||
guildMemberDiamondStatisticsService.update(cycleDate, guildMember, totalDiamondNum);
|
||||
|
||||
//todo 时区 zoneId
|
||||
|
@@ -3,18 +3,26 @@ package com.accompany.business.service.family;
|
||||
import com.accompany.business.constant.family.FamilyConstant;
|
||||
import com.accompany.business.model.family.FamilyGiftRecord;
|
||||
import com.accompany.business.model.family.FamilyMember;
|
||||
import com.accompany.business.model.family.FamilyMemberGoldRemainDayRecord;
|
||||
import com.accompany.business.service.room.FamilyMemberRoomMicRecordService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.business.vo.family.*;
|
||||
import com.accompany.business.vo.guild.CycleDateVo;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.Users;
|
||||
import com.accompany.sharding.model.FamilyMemberRoomMicRecord;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -32,7 +40,15 @@ public class FamilyIncomeService {
|
||||
@Autowired
|
||||
private UsersService usersService;
|
||||
|
||||
public FamilyMemberIncomeVo listMemberIncome(Long uid, String startDate, String endDate) {
|
||||
//时间问题,暂不考虑时区
|
||||
public FamilyIncomeVo listMemberIncome(Long uid, String startDate, String endDate) {
|
||||
//填充缺省时间
|
||||
if (!StringUtils.hasText(startDate) || !StringUtils.hasText(endDate)) {
|
||||
ZonedDateTime zdt = ZonedDateTime.now();
|
||||
startDate = CycleTimeUtil.getCycleDate(zdt);
|
||||
endDate = CycleTimeUtil.getCycleEndDate(zdt);
|
||||
}
|
||||
|
||||
Date startTime = DateTimeUtil.convertStrToDate(startDate, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
|
||||
if (startTime.after(endTime)){
|
||||
@@ -41,12 +57,6 @@ public class FamilyIncomeService {
|
||||
throw new ServiceException(BusiStatus.FAMILY_INCOME_DATE_OVER_90);
|
||||
}
|
||||
|
||||
Date now = DateTimeUtil.getBeginTimeOfDay(new Date());
|
||||
Date nextDay = DateTimeUtil.addDays(now, 1);
|
||||
if (endTime.compareTo(nextDay) >= 0){
|
||||
throw new ServiceException(BusiStatus.FAMILY_INCOME_START_DATE_OVER_END_DATE);
|
||||
}
|
||||
|
||||
FamilyMember familyMember = familyMemberService.getVaildFamilyMemberByUid(uid);
|
||||
if (null == familyMember){
|
||||
throw new ServiceException(BusiStatus.FAMILY_NOT_JOIN);
|
||||
@@ -56,7 +66,73 @@ public class FamilyIncomeService {
|
||||
|
||||
Integer familyId = familyMember.getFamilyId();
|
||||
|
||||
FamilyIncomeVo vo = new FamilyIncomeVo();
|
||||
|
||||
List<CycleDateVo> cycleDateVoList = CycleTimeUtil.listCycleDateVo(familyMember.getCreateTime(),
|
||||
ZoneId.systemDefault(), DateTimeUtil.DEFAULT_DATE_PATTERN_DOT);
|
||||
vo.setCycleDateList(cycleDateVoList);
|
||||
|
||||
FamilyMemberDailyIncomeVo dailyIncomeVo = getFamilyMemberDailyIncomeVo(familyId, uid, startDate, startTime, endDate, endTime);
|
||||
vo.setDailyIncome(dailyIncomeVo);
|
||||
|
||||
//没错,这是我的写的一坨
|
||||
if (FamilyConstant.RoleType.OWNER.equals(familyMember.getRoleType())) {
|
||||
FamilyMemberIncomeVo memberIncomeVo = getFamilyMemberIncomeVo(familyId, startDate, startTime, endDate, endTime);
|
||||
vo.setMemberIncome(memberIncomeVo);
|
||||
}
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
private FamilyMemberDailyIncomeVo getFamilyMemberDailyIncomeVo(Integer familyId, Long uid,
|
||||
String startDate, Date startTime,
|
||||
String endDate, Date endTime) {
|
||||
FamilyMemberDailyIncomeVo vo = new FamilyMemberDailyIncomeVo();
|
||||
vo.setStartDate(startDate);
|
||||
vo.setEndDate(endDate);
|
||||
|
||||
List<String> dateList = DateTimeUtil.getDateListBetweenTwoDates(startDate, endDate);
|
||||
|
||||
Map<String, Long> goldIncomeMap = new HashMap<>();
|
||||
List<FamilyUserIncomeItemVo> goldIncomeList = familyGiftRecordService.listTotalGoldGroupByDate(startTime, endTime,
|
||||
uid, familyId);
|
||||
for (FamilyUserIncomeItemVo item: goldIncomeList){
|
||||
goldIncomeMap.put(item.getDate(), item.getGoldIncome());
|
||||
}
|
||||
|
||||
Map<String, Long> micRemainTimeMap = familyMemberRoomMicRecordService.mapTotalRemainTimeGroupByDate(startTime, endTime,
|
||||
uid, familyId);
|
||||
|
||||
List<FamilyMemberDailyIncomeItemVo> dailyList = new ArrayList<>();
|
||||
vo.setDailyIncomeList(dailyList);
|
||||
|
||||
for (String date: dateList) {
|
||||
|
||||
FamilyMemberDailyIncomeItemVo itemVo = new FamilyMemberDailyIncomeItemVo();
|
||||
itemVo.setDate(date);
|
||||
|
||||
Long micRemainTime = micRemainTimeMap.getOrDefault(date, 0L);
|
||||
itemVo.setMicRemainTime(DateTimeUtil.getTimeFormat(micRemainTime.intValue()));
|
||||
|
||||
Long goldIncome = goldIncomeMap.getOrDefault(date, 0L);
|
||||
itemVo.setGoldIncome(goldIncome);
|
||||
|
||||
vo.setTotalGoldIncome(vo.getTotalGoldIncome() + goldIncome);
|
||||
|
||||
dailyList.add(itemVo);
|
||||
}
|
||||
|
||||
dailyList.sort(Comparator.comparing(FamilyMemberDailyIncomeItemVo::getDate).reversed());
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
private FamilyMemberIncomeVo getFamilyMemberIncomeVo(Integer familyId,
|
||||
String startDate, Date startTime,
|
||||
String endDate, Date endTime) {
|
||||
FamilyMemberIncomeVo vo = new FamilyMemberIncomeVo();
|
||||
vo.setStartDate(startDate);
|
||||
vo.setEndDate(endDate);
|
||||
|
||||
List<FamilyMember> familyMemberList = familyMemberService.listValidFamilyMemberByTime(familyId, startTime, endTime);
|
||||
if (CollectionUtils.isEmpty(familyMemberList)){
|
||||
@@ -72,14 +148,14 @@ public class FamilyIncomeService {
|
||||
|
||||
Map<Long, Long> goldIncomeMap = new HashMap<>();
|
||||
Map<Long, Long> giftUserNumMap = new HashMap<>();
|
||||
List<FamilyGiftRecord> goldIncomeList = familyGiftRecordService.listTotalGoldGroupByFamilyMember(startTimeStr, endTimeStr, uidList, familyMember.getFamilyId());
|
||||
List<FamilyGiftRecord> goldIncomeList = familyGiftRecordService.listTotalGoldGroupByFamilyMember(startTimeStr, endTimeStr, uidList, familyId);
|
||||
for (FamilyGiftRecord item: goldIncomeList){
|
||||
goldIncomeMap.put(item.getReceiverUid(), item.getTotalGoldNum());
|
||||
giftUserNumMap.put(item.getReceiverUid(), item.getGiftSendRecordId());
|
||||
}
|
||||
|
||||
Map<Long, Long> micRemainTimeMap = new HashMap<>();
|
||||
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startTimeStr, endTimeStr, uidList, familyMember.getFamilyId());
|
||||
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startTimeStr, endTimeStr, uidList, familyId);
|
||||
for (FamilyMemberRoomMicRecord item: micRemainTimeList){
|
||||
micRemainTimeMap.put(item.getUid(), item.getRemainTime());
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ import com.accompany.business.model.guild.Guild;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.param.BasePageParams;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
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;
|
||||
@@ -28,8 +28,6 @@ import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import static com.accompany.business.constant.guild.GuildUsdOperateTypeEnum.GUILD_USD_SETTLEMENT;
|
||||
|
||||
|
||||
/**
|
||||
* 公会月政策结算表 服务实现类
|
||||
@@ -164,9 +162,9 @@ public class AgencyMonthSettleService {
|
||||
|
||||
public GuildDateCycleVo getDateCycle(String dateCycle) {
|
||||
Date date = DateUtil.parseDate(dateCycle);
|
||||
Date agencyCycleBeginDate = GuildTimeUtil.getAgencyCycleBeginDate(date);
|
||||
Date agencyCycleEndDate = GuildTimeUtil.getAgencyCycleEndDate(agencyCycleBeginDate);
|
||||
Date currentBeginDate = GuildTimeUtil.getAgencyCycleBeginDate(new Date());
|
||||
Date agencyCycleBeginDate = CycleTimeUtil.getAgencyCycleBeginDate(date);
|
||||
Date agencyCycleEndDate = CycleTimeUtil.getAgencyCycleEndDate(agencyCycleBeginDate);
|
||||
Date currentBeginDate = CycleTimeUtil.getAgencyCycleBeginDate(new Date());
|
||||
boolean currentCycle = false;
|
||||
if (DateUtil.formatDate(agencyCycleBeginDate).equals(DateUtil.formatDate(currentBeginDate))) {
|
||||
currentCycle = true;
|
||||
|
@@ -2,7 +2,7 @@ package com.accompany.business.service.guild;
|
||||
|
||||
import com.accompany.business.model.guild.GuildDiamondWage;
|
||||
import com.accompany.business.mybatismapper.guild.GuildDiamondWageMapper;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.business.vo.guild.GuildCycleDiamondWageLevelVo;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -13,7 +13,6 @@ import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.NavigableMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
@Service
|
||||
@@ -23,7 +22,7 @@ public class GuildDiamondWageService extends ServiceImpl<GuildDiamondWageMapper,
|
||||
private GuildMemberDiamondStatisticsService guildMemberDiamondStatisticsService;
|
||||
|
||||
public GuildCycleDiamondWageLevelVo getCycleDiamondWageLevel(Integer guildId, String zoneId){
|
||||
String cycleDate = GuildTimeUtil.getCurCycleDateByZoneId(zoneId);
|
||||
String cycleDate = CycleTimeUtil.getCurCycleDateByZoneId(zoneId);
|
||||
BigDecimal cycleDiamond = guildMemberDiamondStatisticsService.getTotalDiamondInCycle(cycleDate, guildId);
|
||||
TreeMap<BigDecimal, GuildDiamondWage> diamondWageMap = getDiamondWageMap();
|
||||
Map.Entry<BigDecimal, GuildDiamondWage> curDiamondLevel = diamondWageMap.headMap(cycleDiamond, true).lastEntry();
|
||||
|
@@ -5,7 +5,7 @@ import com.accompany.business.model.guild.GuildGiftRecord;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.mybatismapper.guild.GuildGiftRecordMapper;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.PartitionInfo;
|
||||
@@ -16,9 +16,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class GuildGiftRecordService extends ServiceImpl<GuildGiftRecordMapper, GuildGiftRecord> {
|
||||
|
||||
@@ -61,7 +58,7 @@ public class GuildGiftRecordService extends ServiceImpl<GuildGiftRecordMapper, G
|
||||
return;
|
||||
}
|
||||
|
||||
String cycleDate = GuildTimeUtil.getCycleDateByZoneId(giftSendRecord.getCreateTime(), partitionInfo.getZoneId());
|
||||
String cycleDate = CycleTimeUtil.getCycleDateByZoneId(giftSendRecord.getCreateTime(), partitionInfo.getZoneId());
|
||||
guildMemberDiamondStatisticsService.update(cycleDate, guildMember, giftSendRecord.getTotalDiamondNum());
|
||||
|
||||
guildRankService.updateRank(guildGiftRecord);
|
||||
|
@@ -6,7 +6,7 @@ import com.accompany.business.model.guild.GuildDiamondWage;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.service.purse.UserPurseService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.business.vo.guild.*;
|
||||
import com.accompany.common.constant.Constant;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
@@ -75,19 +75,19 @@ public class GuildIncomeService {
|
||||
UserPurse userPurse = userPurseService.queryUserPurse(me.getUid());
|
||||
vo.setDiamondNum(BigDecimal.valueOf(userPurse.getGolds()));
|
||||
|
||||
List<String> cycleDateList = GuildTimeUtil.getCurAndLastCycleDateByZoneId(zoneId);
|
||||
List<String> cycleDateList = CycleTimeUtil.getCurAndLastCycleDateByZoneId(zoneId);
|
||||
List<GuildUsdAccountCycleUsdStatVo> cycleUsdStatVoList = guildUsdBillRecordService.getCycleUsdStatInCycleDateList(memberId, cycleDateList);
|
||||
Map<String, GuildUsdAccountCycleUsdStatVo> cycleUsdStatVoMap = !CollectionUtils.isEmpty(cycleUsdStatVoList)? cycleUsdStatVoList.stream()
|
||||
.collect(Collectors.toMap(GuildUsdAccountCycleUsdStatVo::getCycleDate, statVo->statVo)): Collections.emptyMap();
|
||||
|
||||
String curCycleDate = cycleDateList.get(0);
|
||||
GuildUsdAccountCycleUsdStatVo curCycle = cycleUsdStatVoMap.getOrDefault(curCycleDate, new GuildUsdAccountCycleUsdStatVo(curCycleDate));
|
||||
curCycle.setCycleDate(GuildTimeUtil.getCycleDateInterval(curCycleDate));
|
||||
curCycle.setCycleDate(CycleTimeUtil.getCycleDateInterval(curCycleDate));
|
||||
vo.setCurCycle(curCycle);
|
||||
|
||||
String lastCycleDate = cycleDateList.get(1);
|
||||
GuildUsdAccountCycleUsdStatVo lastCycle = cycleUsdStatVoMap.getOrDefault(lastCycleDate, new GuildUsdAccountCycleUsdStatVo(lastCycleDate));
|
||||
lastCycle.setCycleDate(GuildTimeUtil.getCycleDateInterval(lastCycleDate));
|
||||
lastCycle.setCycleDate(CycleTimeUtil.getCycleDateInterval(lastCycleDate));
|
||||
vo.setLastCycle(lastCycle);
|
||||
|
||||
return vo;
|
||||
@@ -98,8 +98,8 @@ public class GuildIncomeService {
|
||||
return null;
|
||||
}
|
||||
|
||||
String cycleDate = GuildTimeUtil.getCurCycleDateByZoneId(zoneId);
|
||||
String cycleDateInterval = GuildTimeUtil.getCycleDateInterval(cycleDate);
|
||||
String cycleDate = CycleTimeUtil.getCurCycleDateByZoneId(zoneId);
|
||||
String cycleDateInterval = CycleTimeUtil.getCycleDateInterval(cycleDate);
|
||||
GuildIncomeAgencyVo vo = new GuildIncomeAgencyVo();
|
||||
vo.setCurCycleInterval(cycleDateInterval);
|
||||
|
||||
|
@@ -7,7 +7,7 @@ import com.accompany.business.model.guild.GuildUsdBillRecord;
|
||||
import com.accompany.business.mybatismapper.guild.GuildUsdBillRecordMapper;
|
||||
import com.accompany.business.param.BasePageParams;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.business.vo.guild.AnchorSalaryBillAdminVo;
|
||||
import com.accompany.business.vo.guild.GuildUsdAccountCycleUsdStatVo;
|
||||
import com.accompany.business.vo.guild.GuildUsdBillRecordVo;
|
||||
@@ -60,7 +60,7 @@ public class GuildUsdBillRecordService extends ServiceImpl<GuildUsdBillRecordMap
|
||||
PartitionInfo partitionInfo = partitionInfoService.getById(u.getPartitionId());
|
||||
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(null != partitionInfo ? partitionInfo.getZoneId() : ZoneId.systemDefault().getId());
|
||||
|
||||
record.setCycleDate(GuildTimeUtil.getCycleDate(zdt));
|
||||
record.setCycleDate(CycleTimeUtil.getCycleDate(zdt));
|
||||
|
||||
boolean usdIsOutput = CurrencyEnum.GUILD_USD.equals(typeEnum.getOutputCurrency());
|
||||
|
||||
@@ -96,7 +96,7 @@ public class GuildUsdBillRecordService extends ServiceImpl<GuildUsdBillRecordMap
|
||||
}
|
||||
|
||||
public List<GuildUsdBillRecord> listRechargeUserOrderByUsdDesc(List<Long> rechargeUserUidList, String zoneId){
|
||||
String cycleDate = GuildTimeUtil.getCurCycleDateByZoneId(zoneId);
|
||||
String cycleDate = CycleTimeUtil.getCurCycleDateByZoneId(zoneId);
|
||||
return this.baseMapper.listRechargeUserOrderByUsdDesc(rechargeUserUidList, cycleDate, GuildUsdOperateTypeEnum.USD_TO_RECHARGE_USER.getType());
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,144 @@
|
||||
package com.accompany.business.util;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.business.vo.guild.CycleDateVo;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class CycleTimeUtil {
|
||||
|
||||
private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
|
||||
public static String getCurCycleDateByZoneId(String zoneId) {
|
||||
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(zoneId);
|
||||
return getCycleDate(zdt);
|
||||
}
|
||||
|
||||
public static String getCycleDateByZoneId(Date time, String zoneId) {
|
||||
ZonedDateTime zdt = DateTimeUtil.convertWithZoneId(time, zoneId);
|
||||
return getCycleDate(zdt);
|
||||
}
|
||||
|
||||
public static ZonedDateTime getCycleDateZdt(ZonedDateTime zdt) {
|
||||
if (zdt.getDayOfMonth() >= 16) {
|
||||
return zdt.withDayOfMonth(16);
|
||||
}
|
||||
return zdt.with(TemporalAdjusters.firstDayOfMonth());
|
||||
}
|
||||
|
||||
public static ZonedDateTime getCycleTimeZdt(ZonedDateTime zdt) {
|
||||
return getCycleDateZdt(zdt).withHour(0).withMinute(0).withSecond(0);
|
||||
}
|
||||
|
||||
public static String getCycleDate(ZonedDateTime zdt) {
|
||||
return getCycleDateZdt(zdt).format(dateFormatter);
|
||||
}
|
||||
|
||||
public static ZonedDateTime getCycleEndDateZdt(ZonedDateTime zdt) {
|
||||
if (zdt.getDayOfMonth() >= 16) {
|
||||
return zdt.with(TemporalAdjusters.lastDayOfMonth());
|
||||
}
|
||||
return zdt.withDayOfMonth(15);
|
||||
}
|
||||
|
||||
public static ZonedDateTime getCycleEndTimeZdt(ZonedDateTime zdt) {
|
||||
return getCycleEndDateZdt(zdt).withHour(23).withMinute(59).withSecond(59);
|
||||
}
|
||||
|
||||
public static String getCycleEndDate(ZonedDateTime zdt) {
|
||||
return getCycleEndDateZdt(zdt).format(dateFormatter);
|
||||
}
|
||||
|
||||
public static ZonedDateTime getLastDateZdt(ZonedDateTime zdt) {
|
||||
if (zdt.getDayOfMonth() >= 16) {
|
||||
return zdt.with(TemporalAdjusters.firstDayOfMonth());
|
||||
}
|
||||
return zdt.minusMonths(1L).withDayOfMonth(16);
|
||||
}
|
||||
|
||||
public static String getLastDate(ZonedDateTime zdt) {
|
||||
return getLastDateZdt(zdt).format(dateFormatter);
|
||||
}
|
||||
|
||||
public static List<String> getCurAndLastCycleDateByZoneId(String zoneId) {
|
||||
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(zoneId);
|
||||
String curCycle = getCycleDate(zdt);
|
||||
String lastCycle = getLastDate(zdt);
|
||||
return List.of(curCycle, lastCycle);
|
||||
}
|
||||
|
||||
public static String getCycleDateInterval(String cycleDate) {
|
||||
return getCycleDateInterval(cycleDate, DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN);
|
||||
}
|
||||
|
||||
public static String getCycleDateInterval(String cycleDate, String dateTimeFormatter) {
|
||||
Date cycleStartTime = DateTimeUtil.convertStrToDate(cycleDate, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
String cycleStartDate = DateTimeUtil.convertDate(cycleStartTime, dateTimeFormatter);
|
||||
Date monthStartTime = DateTimeUtil.getBeginTimeOfMonth(cycleStartTime);
|
||||
String cycleEndDate = cycleStartTime.compareTo(monthStartTime) > 0?
|
||||
DateTimeUtil.convertDate(DateTimeUtil.getEndTimeOfMonth(cycleStartTime), dateTimeFormatter):
|
||||
DateTimeUtil.convertDate(DateTimeUtil.addDays(cycleStartTime, 14), dateTimeFormatter);
|
||||
return String.format("%s-%s", cycleStartDate, cycleEndDate);
|
||||
}
|
||||
|
||||
public static List<CycleDateVo> listCycleDateVo(Date limit, ZoneId zoneId, String dateTimeFormatter) {
|
||||
List<CycleDateVo> list = new ArrayList<>();
|
||||
|
||||
ZonedDateTime limitZdt = ZonedDateTime.ofInstant(limit.toInstant(), zoneId);
|
||||
|
||||
Date date = new Date();
|
||||
ZonedDateTime zdt = ZonedDateTime.ofInstant(date.toInstant(), zoneId);
|
||||
ZonedDateTime startTime = getCycleTimeZdt(zdt);
|
||||
|
||||
while (startTime.isAfter(limitZdt)) {
|
||||
ZonedDateTime endTime = getCycleEndTimeZdt(zdt);
|
||||
|
||||
CycleDateVo vo = new CycleDateVo();
|
||||
String startDate = startTime.format(dateFormatter);
|
||||
vo.setCycleDate(startDate);
|
||||
vo.setStartDate(startDate);
|
||||
vo.setEndDate(endTime.format(dateFormatter));
|
||||
vo.setIntervalFormatter(getCycleDateInterval(startDate, dateTimeFormatter));
|
||||
|
||||
list.add(vo);
|
||||
|
||||
//
|
||||
zdt = getLastDateZdt(zdt);
|
||||
startTime = getCycleTimeZdt(zdt);
|
||||
}
|
||||
|
||||
list.sort(Comparator.comparing(CycleDateVo::getCycleDate));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public void a(List<CycleDateVo> list, ZonedDateTime zdt, String dateTimeFormatter) {
|
||||
|
||||
}
|
||||
|
||||
public static Date getAgencyCycleBeginDate(Date now) {
|
||||
Date beginOfMonth = cn.hutool.core.date.DateUtil.beginOfMonth(now);
|
||||
Date offsetDay = DateUtil.offsetDay(beginOfMonth, 15);
|
||||
if (now.getTime() >= offsetDay.getTime()){
|
||||
return offsetDay;
|
||||
}
|
||||
return beginOfMonth;
|
||||
}
|
||||
|
||||
public static Date getAgencyCycleEndDate(Date now) {
|
||||
Date beginOfMonth = cn.hutool.core.date.DateUtil.beginOfMonth(now);
|
||||
Date offsetDay = DateUtil.offsetDay(beginOfMonth, 15);
|
||||
if (now.before(offsetDay)) {
|
||||
return offsetDay;
|
||||
}
|
||||
return DateTimeUtil.addMonth(beginOfMonth,1);
|
||||
}
|
||||
}
|
@@ -1,74 +0,0 @@
|
||||
package com.accompany.business.util;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class GuildTimeUtil {
|
||||
|
||||
private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
|
||||
public static String getCurCycleDateByZoneId(String zoneId) {
|
||||
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(zoneId);
|
||||
return getCycleDate(zdt);
|
||||
}
|
||||
|
||||
public static String getCycleDateByZoneId(Date time, String zoneId) {
|
||||
ZonedDateTime zdt = DateTimeUtil.convertWithZoneId(time, zoneId);
|
||||
return getCycleDate(zdt);
|
||||
}
|
||||
|
||||
public static String getCycleDate(ZonedDateTime zdt) {
|
||||
if (zdt.getDayOfMonth() >= 16) {
|
||||
return zdt.withDayOfMonth(16).format(dateFormatter);
|
||||
}
|
||||
return zdt.with(TemporalAdjusters.firstDayOfMonth()).format(dateFormatter);
|
||||
}
|
||||
|
||||
public static String getLastDate(ZonedDateTime zdt) {
|
||||
if (zdt.getDayOfMonth() >= 16) {
|
||||
return zdt.with(TemporalAdjusters.firstDayOfMonth()).format(dateFormatter);
|
||||
}
|
||||
return zdt.minusMonths(1L).withDayOfMonth(16).format(dateFormatter);
|
||||
}
|
||||
|
||||
public static List<String> getCurAndLastCycleDateByZoneId(String zoneId) {
|
||||
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(zoneId);
|
||||
String curCycle = getCycleDate(zdt);
|
||||
String lastCycle = getLastDate(zdt);
|
||||
return List.of(curCycle, lastCycle);
|
||||
}
|
||||
|
||||
public static String getCycleDateInterval(String cycleDate) {
|
||||
Date cycleStartTime = DateTimeUtil.convertStrToDate(cycleDate, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
String cycleStartDate = DateTimeUtil.convertDate(cycleStartTime, DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN);
|
||||
Date monthStartTime = DateTimeUtil.getBeginTimeOfMonth(cycleStartTime);
|
||||
String cycleEndDate = cycleStartTime.compareTo(monthStartTime) > 0?
|
||||
DateTimeUtil.convertDate(DateTimeUtil.getEndTimeOfMonth(cycleStartTime), DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN):
|
||||
DateTimeUtil.convertDate(DateTimeUtil.addDays(cycleStartTime, 14), DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN);
|
||||
return String.format("%s-%s", cycleStartDate, cycleEndDate);
|
||||
}
|
||||
|
||||
public static Date getAgencyCycleBeginDate(Date now) {
|
||||
Date beginOfMonth = cn.hutool.core.date.DateUtil.beginOfMonth(now);
|
||||
Date offsetDay = DateUtil.offsetDay(beginOfMonth, 15);
|
||||
if (now.getTime() >= offsetDay.getTime()){
|
||||
return offsetDay;
|
||||
}
|
||||
return beginOfMonth;
|
||||
}
|
||||
|
||||
public static Date getAgencyCycleEndDate(Date now) {
|
||||
Date beginOfMonth = cn.hutool.core.date.DateUtil.beginOfMonth(now);
|
||||
Date offsetDay = DateUtil.offsetDay(beginOfMonth, 15);
|
||||
if (now.before(offsetDay)) {
|
||||
return offsetDay;
|
||||
}
|
||||
return DateTimeUtil.addMonth(beginOfMonth,1);
|
||||
}
|
||||
}
|
@@ -1,17 +1,14 @@
|
||||
package com.accompany.business.controller.family;
|
||||
|
||||
import com.accompany.business.service.family.FamilyIncomeService;
|
||||
import com.accompany.business.vo.family.FamilyMemberIncomeVo;
|
||||
import com.accompany.business.vo.family.FamilyIncomeVo;
|
||||
import com.accompany.common.annotation.Authorization;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.core.base.UidContextHolder;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@@ -25,20 +22,16 @@ public class FamilyIncomeController {
|
||||
@Autowired
|
||||
private FamilyIncomeService familyIncomeService;
|
||||
|
||||
@ApiOperation("成员收入")
|
||||
@ApiOperation("收入")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "startDate", value = "开始日期"),
|
||||
@ApiImplicitParam(name = "endDate", value = "结束日期"),
|
||||
})
|
||||
@Authorization
|
||||
@GetMapping("/memberIncome")
|
||||
public BusiResult<FamilyMemberIncomeVo> listMemberIncome(String startDate, String endDate){
|
||||
if (StringUtils.isBlank(startDate) && StringUtils.isBlank(endDate)){
|
||||
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
|
||||
}
|
||||
|
||||
@GetMapping("/income")
|
||||
public BusiResult<FamilyIncomeVo> listIncome(String startDate, String endDate){
|
||||
Long uid = UidContextHolder.get();
|
||||
FamilyMemberIncomeVo vo = familyIncomeService.listMemberIncome(uid, startDate, endDate);
|
||||
FamilyIncomeVo vo = familyIncomeService.listMemberIncome(uid, startDate, endDate);
|
||||
return BusiResult.success(vo);
|
||||
}
|
||||
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package com.accompany.business.controller.family;
|
||||
|
||||
import com.accompany.business.service.family.FamilyWageService;
|
||||
import com.accompany.business.vo.family.FamilyMemberIncomeVo;
|
||||
import com.accompany.business.vo.family.FamilyMemberWageVo;
|
||||
import com.accompany.business.vo.family.FamilyWageVo;
|
||||
import com.accompany.common.annotation.Authorization;
|
||||
|
@@ -4,7 +4,7 @@ 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.GuildTimeUtil;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.model.PartitionInfo;
|
||||
@@ -17,7 +17,6 @@ import org.springframework.stereotype.Component;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
@@ -80,7 +79,7 @@ public class GuildSettleTask {
|
||||
public void settleAnchorBill() {
|
||||
//发放奖励逻辑:每月1号/16号为结算日沙特时间00:10(次月1号结算上月16号-月结束的奖励,每月16号结算本月1-15号的奖励)
|
||||
Date date = new Date();
|
||||
Date agencyCycleBeginDate = GuildTimeUtil.getAgencyCycleBeginDate(date);
|
||||
Date agencyCycleBeginDate = CycleTimeUtil.getAgencyCycleBeginDate(date);
|
||||
String shortDate = DateUtil.formatDate(date);
|
||||
String cycleDate = DateUtil.formatDate(agencyCycleBeginDate);
|
||||
if (shortDate.equals(cycleDate)){
|
||||
|
Reference in New Issue
Block a user