bd修复
This commit is contained in:
parent
27ea713593
commit
d197793839
@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BD Leader 工资结算定时任务.
|
* BD Leader 工资结算定时任务.
|
||||||
@ -28,15 +29,18 @@ public class BdLeaderSalarySettlementTask {
|
|||||||
/**
|
/**
|
||||||
* 每月1号和16号 0点执行半月结算.
|
* 每月1号和16号 0点执行半月结算.
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 0 0 1,16 * ?", zone = "Asia/Riyadh")
|
@Scheduled(cron = "0 0 2 1,16 * ?", zone = "Asia/Riyadh")
|
||||||
@TaskCacheLock(key = "BD_LEADER_SALARY_SETTLEMENT", expireSecond = 86400)
|
@TaskCacheLock(key = "BD_LEADER_SALARY_SETTLEMENT", expireSecond = 86400)
|
||||||
public void processBdLeaderSalarySettlement() {
|
public void processBdLeaderSalarySettlement() {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
log.warn("========== BD Leader工资结算定时任务开始 ==========");
|
log.warn("========== BD Leader工资结算定时任务开始 ==========");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 判断是上半月还是下半月
|
// 获取当前日期的账期
|
||||||
Integer billBelong = TeamBillCycleUtils.getCalcBillBelong();
|
Integer currentBillBelong = TeamBillCycleUtils.getCalcBillBelong();
|
||||||
|
|
||||||
|
// 计算需要结算的账期(往前推一个账期)
|
||||||
|
Integer billBelong = calculateSettlementBillBelong(currentBillBelong);
|
||||||
String billTitle = TeamBillCycleUtils.parseBillBelongToDateRangeStr(billBelong);
|
String billTitle = TeamBillCycleUtils.parseBillBelongToDateRangeStr(billBelong);
|
||||||
|
|
||||||
log.warn("结算周期:{} - {}", billBelong, billTitle);
|
log.warn("结算周期:{} - {}", billBelong, billTitle);
|
||||||
@ -51,6 +55,31 @@ public class BdLeaderSalarySettlementTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算需要结算的账期
|
||||||
|
* 规则:
|
||||||
|
* - 如果当前账期是本月1号(如20250101),则结算上个月16号的账期(如20241216)
|
||||||
|
* - 如果当前账期是本月16号(如20250116),则结算本月1号的账期(如20250101)
|
||||||
|
*/
|
||||||
|
private Integer calculateSettlementBillBelong(Integer currentBillBelong) {
|
||||||
|
String billStr = String.valueOf(currentBillBelong);
|
||||||
|
int year = Integer.parseInt(billStr.substring(0, 4));
|
||||||
|
int month = Integer.parseInt(billStr.substring(4, 6));
|
||||||
|
int day = Integer.parseInt(billStr.substring(6, 8));
|
||||||
|
|
||||||
|
LocalDate settlementDate;
|
||||||
|
|
||||||
|
if (day == 1) {
|
||||||
|
// 当前是本月1号,结算上个月16号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1).minusMonths(1).withDayOfMonth(16);
|
||||||
|
} else {
|
||||||
|
// 当前是本月16号,结算本月1号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Integer.parseInt(settlementDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试方法(手动触发).
|
* 测试方法(手动触发).
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BD 工资结算定时任务.
|
* BD 工资结算定时任务.
|
||||||
@ -28,18 +29,21 @@ public class BdSalarySettlementTask {
|
|||||||
/**
|
/**
|
||||||
* 每月1号和16号 0点执行半月结算.
|
* 每月1号和16号 0点执行半月结算.
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 0 0 1,16 * ?", zone = "Asia/Riyadh")
|
@Scheduled(cron = "0 0 1 1,16 * ?", zone = "Asia/Riyadh")
|
||||||
@TaskCacheLock(key = "BD_SALARY_SETTLEMENT", expireSecond = 86400)
|
@TaskCacheLock(key = "BD_SALARY_SETTLEMENT", expireSecond = 86400)
|
||||||
public void processBdSalarySettlement() {
|
public void processBdSalarySettlement() {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
log.warn("========== BD工资结算定时任务开始 ==========");
|
log.warn("========== BD工资结算定时任务开始 ==========");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 判断是上半月还是下半月
|
// 获取当前日期的账期
|
||||||
Integer billBelong = TeamBillCycleUtils.getCalcBillBelong();
|
Integer currentBillBelong = TeamBillCycleUtils.getCalcBillBelong();
|
||||||
String billTitle = TeamBillCycleUtils.parseBillBelongToDateRangeStr(billBelong);
|
|
||||||
|
|
||||||
log.warn("结算周期:{} - {}", billBelong, billTitle);
|
// 计算需要结算的账期(往前推一个账期)
|
||||||
|
Integer billBelong = calculateSettlementBillBelong(currentBillBelong);
|
||||||
|
String billTitle = TeamBillCycleUtils.parseBillBelongToDateRangeStr(billBelong);
|
||||||
|
|
||||||
|
log.warn("当前账期:{},结算账期:{} - {}", currentBillBelong, billBelong, billTitle);
|
||||||
|
|
||||||
// 执行 BD 工资结算
|
// 执行 BD 工资结算
|
||||||
bdSalarySettlementService.processAllBdSettlement(billBelong, billTitle);
|
bdSalarySettlementService.processAllBdSettlement(billBelong, billTitle);
|
||||||
@ -51,6 +55,31 @@ public class BdSalarySettlementTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算需要结算的账期
|
||||||
|
* 规则:
|
||||||
|
* - 如果当前账期是本月1号(如20250101),则结算上个月16号的账期(如20241216)
|
||||||
|
* - 如果当前账期是本月16号(如20250116),则结算本月1号的账期(如20250101)
|
||||||
|
*/
|
||||||
|
private Integer calculateSettlementBillBelong(Integer currentBillBelong) {
|
||||||
|
String billStr = String.valueOf(currentBillBelong);
|
||||||
|
int year = Integer.parseInt(billStr.substring(0, 4));
|
||||||
|
int month = Integer.parseInt(billStr.substring(4, 6));
|
||||||
|
int day = Integer.parseInt(billStr.substring(6, 8));
|
||||||
|
|
||||||
|
LocalDate settlementDate;
|
||||||
|
|
||||||
|
if (day == 1) {
|
||||||
|
// 当前是本月1号,结算上个月16号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1).minusMonths(1).withDayOfMonth(16);
|
||||||
|
} else {
|
||||||
|
// 当前是本月16号,结算本月1号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Integer.parseInt(settlementDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试方法(手动触发).
|
* 测试方法(手动触发).
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import com.red.circle.tool.core.sequence.IdWorkerUtils;
|
|||||||
import com.red.circle.tool.core.text.StringUtils;
|
import com.red.circle.tool.core.text.StringUtils;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -459,11 +460,12 @@ public class TeamBillCycleServiceImpl implements TeamBillCycleService {
|
|||||||
public void billStatusPayOut() {
|
public void billStatusPayOut() {
|
||||||
// 计算当前账期的 billBelong
|
// 计算当前账期的 billBelong
|
||||||
Integer currentBillBelong = getCalcBillBelong();
|
Integer currentBillBelong = getCalcBillBelong();
|
||||||
|
Integer billBelong = calculateSettlementBillBelong(currentBillBelong);
|
||||||
|
|
||||||
// 将小于当前账期的 UNPAID 状态改为 PAY_OUT
|
// 将小于当前账期的 UNPAID 状态改为 PAY_OUT
|
||||||
mongoTemplate.updateMulti(
|
mongoTemplate.updateMulti(
|
||||||
Query.query(
|
Query.query(
|
||||||
Criteria.where("billBelong").lt(currentBillBelong)
|
Criteria.where("billBelong").lt(billBelong)
|
||||||
.and("status").is(TeamBillCycleStatus.UNPAID)),
|
.and("status").is(TeamBillCycleStatus.UNPAID)),
|
||||||
new Update()
|
new Update()
|
||||||
.set("updateTime", TimestampUtils.now())
|
.set("updateTime", TimestampUtils.now())
|
||||||
@ -471,6 +473,32 @@ public class TeamBillCycleServiceImpl implements TeamBillCycleService {
|
|||||||
TeamBillCycle.class);
|
TeamBillCycle.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算需要结算的账期
|
||||||
|
* 规则:
|
||||||
|
* - 如果当前账期是本月1号(如20250101),则结算上个月16号的账期(如20241216)
|
||||||
|
* - 如果当前账期是本月16号(如20250116),则结算本月1号的账期(如20250101)
|
||||||
|
*/
|
||||||
|
private Integer calculateSettlementBillBelong(Integer currentBillBelong) {
|
||||||
|
String billStr = String.valueOf(currentBillBelong);
|
||||||
|
int year = Integer.parseInt(billStr.substring(0, 4));
|
||||||
|
int month = Integer.parseInt(billStr.substring(4, 6));
|
||||||
|
int day = Integer.parseInt(billStr.substring(6, 8));
|
||||||
|
|
||||||
|
LocalDate settlementDate;
|
||||||
|
|
||||||
|
if (day == 1) {
|
||||||
|
// 当前是本月1号,结算上个月16号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1).minusMonths(1).withDayOfMonth(16);
|
||||||
|
} else {
|
||||||
|
// 当前是本月16号,结算本月1号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Integer.parseInt(settlementDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void scanPayOut(Consumer<List<TeamBillCycle>> execute, Integer limit) {
|
public void scanPayOut(Consumer<List<TeamBillCycle>> execute, Integer limit) {
|
||||||
scan(execute, TeamBillCycleStatus.PAY_OUT, limit);
|
scan(execute, TeamBillCycleStatus.PAY_OUT, limit);
|
||||||
|
|||||||
@ -4,6 +4,11 @@ import com.red.circle.tool.crypto.SecurityUtils;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
import static com.red.circle.other.infra.database.mongo.service.team.TeamBillCycleUtils.getCalcBillBelong;
|
||||||
|
|
||||||
public class ApiTest {
|
public class ApiTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -23,5 +28,38 @@ public class ApiTest {
|
|||||||
System.out.println(ZonedDateTimeAsiaRiyadhUtils.nowFormat("yyyyMMddHH"));
|
System.out.println(ZonedDateTimeAsiaRiyadhUtils.nowFormat("yyyyMMddHH"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test3() {
|
||||||
|
// 计算当前账期的 billBelong
|
||||||
|
Integer currentBillBelong = 20251101;
|
||||||
|
Integer billBelong = calculateSettlementBillBelong(currentBillBelong);
|
||||||
|
System.out.println(billBelong);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算需要结算的账期
|
||||||
|
* 规则:
|
||||||
|
* - 如果当前账期是本月1号(如20250101),则结算上个月16号的账期(如20241216)
|
||||||
|
* - 如果当前账期是本月16号(如20250116),则结算本月1号的账期(如20250101)
|
||||||
|
*/
|
||||||
|
private Integer calculateSettlementBillBelong(Integer currentBillBelong) {
|
||||||
|
String billStr = String.valueOf(currentBillBelong);
|
||||||
|
int year = Integer.parseInt(billStr.substring(0, 4));
|
||||||
|
int month = Integer.parseInt(billStr.substring(4, 6));
|
||||||
|
int day = Integer.parseInt(billStr.substring(6, 8));
|
||||||
|
|
||||||
|
LocalDate settlementDate;
|
||||||
|
|
||||||
|
if (day == 1) {
|
||||||
|
// 当前是本月1号,结算上个月16号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1).minusMonths(1).withDayOfMonth(16);
|
||||||
|
} else {
|
||||||
|
// 当前是本月16号,结算本月1号
|
||||||
|
settlementDate = LocalDate.of(year, month, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Integer.parseInt(settlementDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user