家族-收入

This commit is contained in:
khalil
2024-09-23 16:23:43 +08:00
parent c3e8f9bead
commit f22316bc38
19 changed files with 341 additions and 132 deletions

View File

@@ -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()));

View File

@@ -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)) {

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<>();
}

View File

@@ -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<>();
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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());
}

View File

@@ -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;

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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());
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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)){