집행관리 목록조회 로직 수정.

집행관리 항목등록 모달 오류 수정.
master
강석 최 2023-07-26 17:27:31 +09:00
parent 31fcd9dd69
commit 94b9b3e3de
13 changed files with 434 additions and 281 deletions

View File

@ -33,7 +33,7 @@ public class BudgetController {
ModelAndView mav = new ModelAndView("budget/budgeting"); ModelAndView mav = new ModelAndView("budget/budgeting");
if (requestDto.getYear() == null || requestDto.getYear().equals("")) { if (requestDto.getYear() == null || requestDto.getYear().equals("")) {
LocalDate date = LocalDate.now(); LocalDate date = LocalDate.now();
requestDto.setYear(String.valueOf(date.getYear())); requestDto.setYear(date.getYear());
} }
System.out.println(requestDto.getYear()); System.out.println(requestDto.getYear());
List<BudgetingList> list = budgetService.selectBudgetingList(loginUser, requestDto); List<BudgetingList> list = budgetService.selectBudgetingList(loginUser, requestDto);
@ -215,7 +215,8 @@ public class BudgetController {
if (requestDto.getYear() != null) { if (requestDto.getYear() != null) {
userOrgCode = requestDto.getCode(); userOrgCode = requestDto.getCode();
List<ExpenseResult> list = budgetService.selectBudgetExpenseInfo(loginUser, requestDto); // List<ExpenseResult> list = budgetService.selectBudgetExpenseInfo(loginUser, requestDto);
List<ExpenseResult> list = budgetService.selectBudgetExpenseInfoList(loginUser, requestDto);
mav.addObject("list", list); mav.addObject("list", list);
} else { } else {
// 로그인된 해당청 기본선택 // 로그인된 해당청 기본선택
@ -226,13 +227,14 @@ public class BudgetController {
// 첫해 첫날 ~ 오늘날짜 기본세팅 // 첫해 첫날 ~ 오늘날짜 기본세팅
LocalDate date = LocalDate.now(); LocalDate date = LocalDate.now();
String CurrentYear = String.valueOf(date.getYear()) + "-01-01"; String CurrentYear = date.getYear() + "-01-01";
requestDto.setStDate(LocalDate.parse(CurrentYear)); requestDto.setStDate(LocalDate.parse(CurrentYear));
requestDto.setEdDate(date); requestDto.setEdDate(date);
} }
//하위청 리스트 //하위청 리스트
List<CodeResult> downOrgList = budgetService.selectDownOrg(userOrgCode); List<CodeResult> downOrgList = budgetService.selectDownOrg(userOrgCode);
mav.addObject("downOrgList", downOrgList); mav.addObject("downOrgList", downOrgList);
mav.addObject("loginOrgan", loginUser.getOgCd());
mav.addObject("searchParams", requestDto); mav.addObject("searchParams", requestDto);
@ -241,11 +243,10 @@ public class BudgetController {
@PostMapping("/expense") @PostMapping("/expense")
public ResultResponse<?> saveExpense(@AuthenticationPrincipal UserInfo loginUser, @RequestBody BudgetDto.ExpenseSaveReqeust requestDto) { public ResultResponse<?> saveExpense(@AuthenticationPrincipal UserInfo loginUser, @RequestBody BudgetDto.ExpenseSaveReqeust requestDto) {
budgetService.insertExpense(loginUser, requestDto); return new ResultResponse(budgetService.insertExpense(loginUser, requestDto));
return new ResultResponse().successResponse(ResultResponseCode.SUCCESS);
} }
/* 예산편성 - 팝업화면 */ /* 집행? - 팝업화면 */
@GetMapping("/expense/modal/view") @GetMapping("/expense/modal/view")
public ModelAndView viewExpenseModal(@AuthenticationPrincipal UserInfo loginUser, BudgetDto.ExpenseSearchReqeust requestDto, Pageable pageable) { public ModelAndView viewExpenseModal(@AuthenticationPrincipal UserInfo loginUser, BudgetDto.ExpenseSearchReqeust requestDto, Pageable pageable) {
ModelAndView mav = new ModelAndView("budget/expenseEditModal"); ModelAndView mav = new ModelAndView("budget/expenseEditModal");

View File

@ -15,8 +15,6 @@ public interface BudgetMapper {
UpdateResult callSpUpdateBudgetPlanCodeItem(BudgetParams param); UpdateResult callSpUpdateBudgetPlanCodeItem(BudgetParams param);
UpdateResult callSpDeleteBudgetPlan(BudgetParams param); UpdateResult callSpDeleteBudgetPlan(BudgetParams param);
List<AssignResult> callSpGetBudgetAssignInfo(BudgetParams param); List<AssignResult> callSpGetBudgetAssignInfo(BudgetParams param);
List<AssignResult> selectBudgetAssignInfoList(BudgetParams params);
List<AssignAmount> selectBudgetAssignAmountList(BudgetParams params);
List<CodeResult> callSpGetDownOrg(BudgetParams param); List<CodeResult> callSpGetDownOrg(BudgetParams param);
List<CodeResult> selectDownOrgList(BudgetParams params); List<CodeResult> selectDownOrgList(BudgetParams params);
List<CodeResult> callSpGetLowerOrgCodeByName(); List<CodeResult> callSpGetLowerOrgCodeByName();
@ -29,4 +27,8 @@ public interface BudgetMapper {
List<StatsItemResult> callSpGetbudgetStatDetail(BudgetParams params); List<StatsItemResult> callSpGetbudgetStatDetail(BudgetParams params);
List<L3CodeResult> callSpGetBudgetCodeL3(BudgetParams params); List<L3CodeResult> callSpGetBudgetCodeL3(BudgetParams params);
List<BudgetName> selectBudgetInfoList(BudgetParams params);
List<AssignAmount> selectBudgetAssignAmountList(BudgetParams params);
List<ExpenseAmount> selectBudgetExpenseAmountList(BudgetParams params);
} }

View File

@ -24,7 +24,7 @@ public class BudgetDto {
@AllArgsConstructor @AllArgsConstructor
@ToString @ToString
public static class BudgetingSearchReqeust { public static class BudgetingSearchReqeust {
private String year; private Integer year;
private Long sum; private Long sum;
} }
@ -90,7 +90,7 @@ public class BudgetDto {
@AllArgsConstructor @AllArgsConstructor
@ToString @ToString
public static class AssignSearchReqeust { public static class AssignSearchReqeust {
private String year; private Integer year;
private String code; private String code;
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate stDate; private LocalDate stDate;

View File

@ -5,13 +5,7 @@ import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class AssignResult { public class AssignResult extends BudgetName{
String orgCount;
String budgetNameL1;
String budgetNameL2;
String budgetNameL3;
String budgetCodeL3;
String planAmount = "0";
String totalAssignAmount = "0"; String totalAssignAmount = "0";
String periodAssignAmount1 = "0"; String periodAssignAmount1 = "0";
String sumAssignAmount1 = "0"; String sumAssignAmount1 = "0";

View File

@ -0,0 +1,15 @@
package com.dbnt.faisp.main.budget.model.result;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class BudgetName {
String orgCount;
String budgetNameL1;
String budgetNameL2;
String budgetNameL3;
String budgetCodeL3;
String planAmount = "0";
}

View File

@ -0,0 +1,14 @@
package com.dbnt.faisp.main.budget.model.result;
import lombok.Getter;
@Getter
public class ExpenseAmount {
Integer orderSeq;
String organCd;
String budgetCode;
Integer periodAssignAmount;
Integer expenseAssignAmount;
Integer balanceAmount;
Double expenseRate;
}

View File

@ -1,63 +1,60 @@
package com.dbnt.faisp.main.budget.model.result; package com.dbnt.faisp.main.budget.model.result;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
@Getter @Getter
public class ExpenseResult { @Setter
String orgCount; public class ExpenseResult extends BudgetName{
String budgetNameL1; Integer totalAssignAmount = 0;
String budgetNameL2; Integer expenseTAmount = 0;
String budgetNameL3; Integer balanceTAmount = 0;
String budgetCodeL3;
String planAmount;
String totalAssignAmount;
String expenseTAmount;
String balanceTAmount;
Integer periodAssignAmount1;
Integer expensePAmount1;
Integer blanceAmount1;
Integer expenseRate1;
String periodAssignAmount2; Integer periodAssignAmount1 = 0;
String expensePAmount2; Integer expensePAmount1 = 0;
String blanceAmount2; Integer balanceAmount1 = 0;
String expenseRate2; Double expenseRate1 = 0d;
String periodAssignAmount3; Integer periodAssignAmount2 = 0;
String expensePAmount3; Integer expensePAmount2 = 0;
String blanceAmount3; Integer balanceAmount2 = 0;
String expenseRate3; Double expenseRate2 = 0d;
Integer periodAssignAmount3 = 0;
Integer expensePAmount3 = 0;
Integer balanceAmount3 = 0;
Double expenseRate3 = 0d;
String periodAssignAmount4; Integer periodAssignAmount4 = 0;
String expensePAmount4; Integer expensePAmount4 = 0;
String blanceAmount4; Integer balanceAmount4 = 0;
String expenseRate4; Double expenseRate4 = 0d;
String periodAssignAmount5; Integer periodAssignAmount5 = 0;
String expensePAmount5; Integer expensePAmount5 = 0;
String blanceAmount5; Integer balanceAmount5 = 0;
String expenseRate5; Double expenseRate5 = 0d;
String periodAssignAmount6; Integer periodAssignAmount6 = 0;
String expensePAmount6; Integer expensePAmount6 = 0;
String blanceAmount6; Integer balanceAmount6 = 0;
String expenseRate6; Double expenseRate6 = 0d;
String periodAssignAmount7; Integer periodAssignAmount7 = 0;
String expensePAmount7; Integer expensePAmount7 = 0;
String blanceAmount7; Integer balanceAmount7 = 0;
String expenseRate7; Double expenseRate7 = 0d;
String periodAssignAmount8; Integer periodAssignAmount8 = 0;
String expensePAmount8; Integer expensePAmount8 = 0;
String blanceAmount8; Integer balanceAmount8 = 0;
String expenseRate8; Double expenseRate8 = 0d;
String periodAssignAmount9; Integer periodAssignAmount9 = 0;
String expensePAmount9; Integer expensePAmount9 = 0;
String blanceAmount9; Integer balanceAmount9 = 0;
String expenseRate9; Double expenseRate9 = 0d;
} }

View File

@ -4,5 +4,5 @@ import lombok.Getter;
@Getter @Getter
public class YearResult { public class YearResult {
String year; Integer year;
} }

View File

@ -37,7 +37,7 @@ public class BudgetService {
/*return budgetRepository.callSpGetBudgetPlanInfo(requestDto.getYear(), "OG001", "admin");*/ /*return budgetRepository.callSpGetBudgetPlanInfo(requestDto.getYear(), "OG001", "admin");*/
BudgetParams param = new BudgetParams(); BudgetParams param = new BudgetParams();
param.setCode1(requestDto.getYear()); param.setCode1(requestDto.getYear().toString());
param.setCode2("OG001"); param.setCode2("OG001");
param.setCode3("admin"); param.setCode3("admin");
return budgetMapper.callSpGetBudgetPlanInfo(param); return budgetMapper.callSpGetBudgetPlanInfo(param);
@ -276,7 +276,7 @@ public class BudgetService {
// 예산배정 // 예산배정
public List<AssignResult> selectBudgetAssignInfo(UserInfo loginUser, BudgetDto.AssignSearchReqeust requestDto){ public List<AssignResult> selectBudgetAssignInfo(UserInfo loginUser, BudgetDto.AssignSearchReqeust requestDto){
BudgetParams params = new BudgetParams(); BudgetParams params = new BudgetParams();
params.setYear(requestDto.getYear()); params.setYear(requestDto.getYear().toString());
params.setCode(requestDto.getCode()); params.setCode(requestDto.getCode());
params.setUser("admin"); params.setUser("admin");
params.setStDate(requestDto.getStDate()); params.setStDate(requestDto.getStDate());
@ -286,14 +286,21 @@ public class BudgetService {
public List<AssignResult> selectBudgetAssignInfoList(BudgetDto.AssignSearchReqeust requestDto){ public List<AssignResult> selectBudgetAssignInfoList(BudgetDto.AssignSearchReqeust requestDto){
BudgetParams params = new BudgetParams(); BudgetParams params = new BudgetParams();
params.setYear(requestDto.getYear()); params.setYear(requestDto.getYear().toString());
params.setCode(requestDto.getCode()); params.setCode(requestDto.getCode());
params.setUser("admin"); params.setUser("admin");
params.setStDate(requestDto.getStDate()); params.setStDate(requestDto.getStDate());
params.setEdDate(requestDto.getEdDate()); params.setEdDate(requestDto.getEdDate());
List<AssignResult> assignResultList = budgetMapper.selectBudgetAssignInfoList(params); List<AssignResult> assignResultList = new ArrayList<>();
List<BudgetName> budgetList = budgetMapper.selectBudgetInfoList(params);
List<AssignAmount> assignAmountList = budgetMapper.selectBudgetAssignAmountList(params); List<AssignAmount> assignAmountList = budgetMapper.selectBudgetAssignAmountList(params);
for(AssignResult result: assignResultList){ for(BudgetName budget: budgetList){
AssignResult result = new AssignResult();
result.setBudgetNameL1(budget.getBudgetNameL1());
result.setBudgetNameL2(budget.getBudgetNameL2());
result.setBudgetNameL3(budget.getBudgetNameL3());
result.setBudgetCodeL3(budget.getBudgetCodeL3());
result.setPlanAmount(budget.getPlanAmount());
for(AssignAmount amount: assignAmountList){ for(AssignAmount amount: assignAmountList){
if(result.getBudgetCodeL3().equals(amount.getBudgetCode())){ if(result.getBudgetCodeL3().equals(amount.getBudgetCode())){
int totalAssignAmount = result.getTotalAssignAmount()==null?0:Integer.parseInt(result.getTotalAssignAmount()); int totalAssignAmount = result.getTotalAssignAmount()==null?0:Integer.parseInt(result.getTotalAssignAmount());
@ -339,6 +346,7 @@ public class BudgetService {
} }
} }
} }
assignResultList.add(result);
} }
return assignResultList; return assignResultList;
@ -393,13 +401,8 @@ public class BudgetService {
//집행관리 //집행관리
public List<ExpenseResult> selectBudgetExpenseInfo(UserInfo loginUser, BudgetDto.AssignSearchReqeust requestDto){ public List<ExpenseResult> selectBudgetExpenseInfo(UserInfo loginUser, BudgetDto.AssignSearchReqeust requestDto){
// System.out.println(requestDto.getYear());
// System.out.println(requestDto.getCode());
// System.out.println(java.sql.Date.valueOf(requestDto.getStDate()));
// System.out.println(requestDto.getEdDate());
// return budgetRepository.callSpGetBudgetExpenseInfo(requestDto.getYear(), requestDto.getCode(), "admin", java.sql.Date.valueOf(requestDto.getStDate()),java.sql.Date.valueOf(requestDto.getEdDate()));
BudgetParams params = new BudgetParams(); BudgetParams params = new BudgetParams();
params.setYear(requestDto.getYear()); params.setYear(requestDto.getYear().toString());
params.setCode(requestDto.getCode()); params.setCode(requestDto.getCode());
params.setUser("admin"); params.setUser("admin");
params.setStDate(requestDto.getStDate()); params.setStDate(requestDto.getStDate());
@ -407,49 +410,120 @@ public class BudgetService {
return budgetMapper.callSpGetBudgetExpenseInfo(params); return budgetMapper.callSpGetBudgetExpenseInfo(params);
} }
public List<ExpenseResult> selectBudgetExpenseInfoList(UserInfo loginUser, BudgetDto.AssignSearchReqeust requestDto){
BudgetParams params = new BudgetParams();
params.setYear(requestDto.getYear().toString());
params.setCode(requestDto.getCode());
params.setUser("admin");
params.setStDate(requestDto.getStDate());
params.setEdDate(requestDto.getEdDate());
List<ExpenseResult> expenseList = new ArrayList<>();
List<BudgetName> budgetList = budgetMapper.selectBudgetInfoList(params);
List<ExpenseAmount> amountList = budgetMapper.selectBudgetExpenseAmountList(params);
for(BudgetName budget : budgetList){
ExpenseResult result = new ExpenseResult();
result.setBudgetNameL1(budget.getBudgetNameL1());
result.setBudgetNameL2(budget.getBudgetNameL2());
result.setBudgetNameL3(budget.getBudgetNameL3());
result.setBudgetCodeL3(budget.getBudgetCodeL3());
result.setPlanAmount(budget.getPlanAmount());
for(ExpenseAmount amount : amountList){
if(result.getBudgetCodeL3().equals(amount.getBudgetCode())){
result.setTotalAssignAmount(result.getTotalAssignAmount()+amount.getPeriodAssignAmount());
result.setExpenseTAmount(result.getExpenseTAmount()+amount.getExpenseAssignAmount());
result.setBalanceTAmount(result.getBalanceTAmount()+ amount.getBalanceAmount());
switch (amount.getOrderSeq()){
case 1:
result.setPeriodAssignAmount1(amount.getPeriodAssignAmount());
result.setExpensePAmount1(amount.getExpenseAssignAmount());
result.setBalanceAmount1(amount.getBalanceAmount());
result.setExpenseRate1(amount.getExpenseRate());
break;
case 2:
result.setPeriodAssignAmount2(amount.getPeriodAssignAmount());
result.setExpensePAmount2(amount.getExpenseAssignAmount());
result.setBalanceAmount2(amount.getBalanceAmount());
result.setExpenseRate2(amount.getExpenseRate());
break;
case 3:
result.setPeriodAssignAmount3(amount.getPeriodAssignAmount());
result.setExpensePAmount3(amount.getExpenseAssignAmount());
result.setBalanceAmount3(amount.getBalanceAmount());
result.setExpenseRate3(amount.getExpenseRate());
break;
case 4:
result.setPeriodAssignAmount4(amount.getPeriodAssignAmount());
result.setExpensePAmount4(amount.getExpenseAssignAmount());
result.setBalanceAmount4(amount.getBalanceAmount());
result.setExpenseRate4(amount.getExpenseRate());
break;
case 5:
result.setPeriodAssignAmount5(amount.getPeriodAssignAmount());
result.setExpensePAmount5(amount.getExpenseAssignAmount());
result.setBalanceAmount5(amount.getBalanceAmount());
result.setExpenseRate5(amount.getExpenseRate());
break;
case 6:
result.setPeriodAssignAmount6(amount.getPeriodAssignAmount());
result.setExpensePAmount6(amount.getExpenseAssignAmount());
result.setBalanceAmount6(amount.getBalanceAmount());
result.setExpenseRate6(amount.getExpenseRate());
break;
case 7:
result.setPeriodAssignAmount7(amount.getPeriodAssignAmount());
result.setExpensePAmount7(amount.getExpenseAssignAmount());
result.setBalanceAmount7(amount.getBalanceAmount());
result.setExpenseRate7(amount.getExpenseRate());
break;
case 8:
result.setPeriodAssignAmount8(amount.getPeriodAssignAmount());
result.setExpensePAmount8(amount.getExpenseAssignAmount());
result.setBalanceAmount8(amount.getBalanceAmount());
result.setExpenseRate8(amount.getExpenseRate());
break;
case 9:
result.setPeriodAssignAmount9(amount.getPeriodAssignAmount());
result.setExpensePAmount9(amount.getExpenseAssignAmount());
result.setBalanceAmount9(amount.getBalanceAmount());
result.setExpenseRate9(amount.getExpenseRate());
break;
}
}
}
expenseList.add(result);
}
return expenseList;
}
public List<ExpenseInfoResult> selectBudgetExpense(UserInfo loginUser, BudgetDto.ExpenseSearchReqeust requestDto){ public List<ExpenseInfoResult> selectBudgetExpense(UserInfo loginUser, BudgetDto.ExpenseSearchReqeust requestDto){
// System.out.println(requestDto.getYear());
// System.out.println(requestDto.getNameL1());
// System.out.println(requestDto.getNameL2());
// System.out.println(requestDto.getNameL3());
// return budgetRepository.callSpGetBudgetExpense(requestDto.getYear(), requestDto.getNameL1(), requestDto.getNameL2(), requestDto.getNameL3(), "본청");
BudgetParams params = new BudgetParams(); BudgetParams params = new BudgetParams();
params.setYear(requestDto.getYear()); params.setYear(requestDto.getYear());
params.setCode1(requestDto.getNameL1()); params.setCode1(requestDto.getNameL1());
params.setCode2(requestDto.getNameL2()); params.setCode2(requestDto.getNameL2());
params.setCode3(requestDto.getNameL3()); params.setCode3(requestDto.getNameL3());
params.setOrg("본청"); params.setOrg(loginUser.getOgCd());
return budgetMapper.callSpGetBudgetExpense(params); return budgetMapper.callSpGetBudgetExpense(params);
} }
@Transactional @Transactional
public void insertExpense(UserInfo loginUser, BudgetDto.ExpenseSaveReqeust requestDto){ public ResultResponseCode insertExpense(UserInfo loginUser, BudgetDto.ExpenseSaveReqeust requestDto){
// System.out.println(requestDto.getYear());
// System.out.println(requestDto.getNameL1());
// System.out.println(requestDto.getNameL2());
// System.out.println(requestDto.getNameL3());
// UpdateResult result = budgetRepository.callSpAddBudgetExpense(requestDto.getYear(),requestDto.getNameL1(),requestDto.getNameL2(),requestDto.getNameL3(), "본청", requestDto.getItem(), requestDto.getAmount(), java.sql.Date.valueOf(requestDto.getExpenseDate()));
BudgetParams params = new BudgetParams(); BudgetParams params = new BudgetParams();
params.setYear(requestDto.getYear()); params.setYear(requestDto.getYear());
params.setCode1(requestDto.getNameL1()); params.setCode1(requestDto.getNameL1());
params.setCode2(requestDto.getNameL2()); params.setCode2(requestDto.getNameL2());
params.setCode3(requestDto.getNameL3()); params.setCode3(requestDto.getNameL3());
params.setOrg("본청"); params.setOrg(loginUser.getOgCd());
params.setItem(requestDto.getItem()); params.setItem(requestDto.getItem());
params.setAmount(requestDto.getAmount()); params.setAmount(requestDto.getAmount());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
params.setDt(formatter.format(requestDto.getExpenseDate())); params.setDt(formatter.format(requestDto.getExpenseDate()));
UpdateResult result = budgetMapper.callSpAddBudgetExpense(params); UpdateResult result = budgetMapper.callSpAddBudgetExpense(params);
// System.out.println(result.getErrorMessage());
// System.out.println(result.getResultCode());
// System.out.println(result.getResultCount());
if(result.getResultCode().equals("100")) { if(result.getResultCode().equals("100")) {
return; return ResultResponseCode.SUCCESS;
}else if(result.getResultCode().equals("71")) { }else if(result.getResultCode().equals("71")) {
throw new BaseException(ResultResponseCode.EXPENSE_OVER_VALUE); return ResultResponseCode.EXPENSE_OVER_VALUE;
} else { } else {
throw new BaseException(ResultResponseCode.ERROR); return ResultResponseCode.ERROR;
} }
} }

View File

@ -36,58 +36,7 @@
select * select *
from sp_get_budget_assign_info(#{year}, #{code}, #{user} ,#{stDate}::date, #{edDate}::date) from sp_get_budget_assign_info(#{year}, #{code}, #{user} ,#{stDate}::date, #{edDate}::date)
</select> </select>
<select id="selectBudgetAssignInfoList" resultType="AssignResult" parameterType="BudgetParams">
SELECT d.budget_code as budgetCodeL3,
a.l1_name as budgetNameL1,
b.l2_name as budgetNameL2,
c.l3_name as budgetNameL3,
d.amount as plan_amount
FROM public.tbl_budget_code_l1 A
inner join public.tbl_budget_code_l2 B on a.l1_code = b.l1_code
inner join public.tbl_budget_code_l3 C on b.l2_code = c.l2_code and c.use_tag = 'Y'
inner join public.tbl_budget_plan D on c.l3_code = d.budget_code and d.org_code = #{code}
WHERE a.L1_YEAR = #{year}
ORDER BY d.budget_code ASC
</select>
<select id="selectBudgetAssignAmountList" resultType="AssignAmount" parameterType="BudgetParams">
select oc.order_seq,
oc.organ_cd,
total.budget_code,
coalesce(tba.period_assign_amount, 0) as period_assign_amount,
coalesce(total.sum_assign_amount, 0) as sum_assign_amount
from (
select l_org_code, budget_code, sum(amount) as sum_assign_amount
from tbl_budget_assign
where h_org_code = #{code}
and EXTRACT( year FROM assign_date ) = ${year}
group by l_org_code, budget_code
) total
left outer join
(
select h_org_code, l_org_code, budget_code, sum(amount) as period_assign_amount
from tbl_budget_assign
where h_org_code = #{code}
and assign_date >= #{stDate}::date
and assign_date &lt;= #{edDate}::date
group by h_org_code, l_org_code, budget_code
) tba on tba.l_org_code = total.l_org_code and tba.budget_code = total.budget_code
inner join (
select (ROW_NUMBER() OVER()) AS order_seq, *
from (
select organ_cd
from (
select #{code} as organ_cd
union all
select organ_cd
from organ_config
where parent_organ = #{code}
) a
inner join code_mgt b on a.organ_cd = b.item_cd
order by b.order_num
) a
) oc on total.l_org_code = oc.organ_cd
order by order_seq, organ_cd, budget_code
</select>
<select id="callSpGetDownOrg" resultType="CodeResult" parameterType="BudgetParams"> <select id="callSpGetDownOrg" resultType="CodeResult" parameterType="BudgetParams">
select org_code as orgCode, select org_code as orgCode,
org_name as orgName org_name as orgName
@ -140,4 +89,102 @@
select * select *
from sp_get_budget_code_l3(#{year},null,null,null) from sp_get_budget_code_l3(#{year},null,null,null)
</select> </select>
<select id="selectBudgetInfoList" resultType="BudgetName" parameterType="BudgetParams">
SELECT d.budget_code as budgetCodeL3,
a.l1_name as budgetNameL1,
b.l2_name as budgetNameL2,
c.l3_name as budgetNameL3,
d.amount as plan_amount
FROM public.tbl_budget_code_l1 A
inner join public.tbl_budget_code_l2 B on a.l1_code = b.l1_code
inner join public.tbl_budget_code_l3 C on b.l2_code = c.l2_code and c.use_tag = 'Y'
inner join public.tbl_budget_plan D on c.l3_code = d.budget_code and d.org_code = #{code}
WHERE a.L1_YEAR = #{year}
ORDER BY d.budget_code ASC
</select>
<select id="selectBudgetAssignAmountList" resultType="AssignAmount" parameterType="BudgetParams">
select oc.order_seq,
oc.organ_cd,
total.budget_code,
coalesce(tba.period_assign_amount, 0) as period_assign_amount,
coalesce(total.sum_assign_amount, 0) as sum_assign_amount
from (
select l_org_code, budget_code, sum(amount) as sum_assign_amount
from tbl_budget_assign
where h_org_code = #{code}
and EXTRACT( year FROM assign_date ) = ${year}
group by l_org_code, budget_code
) total
left outer join
(
select h_org_code, l_org_code, budget_code, sum(amount) as period_assign_amount
from tbl_budget_assign
where h_org_code = #{code}
and assign_date >= #{stDate}::date
and assign_date &lt;= #{edDate}::date
group by h_org_code, l_org_code, budget_code
) tba on tba.l_org_code = total.l_org_code and tba.budget_code = total.budget_code
inner join (
select (ROW_NUMBER() OVER()) AS order_seq, *
from (
select organ_cd
from (
select #{code} as organ_cd
union all
select organ_cd
from organ_config
where parent_organ = #{code}
) a
inner join code_mgt b on a.organ_cd = b.item_cd
order by b.order_num
) a
) oc on total.l_org_code = oc.organ_cd
order by order_seq, organ_cd, budget_code
</select>
<select id="selectBudgetExpenseAmountList" resultType="ExpenseAmount" parameterType="BudgetParams">
select order_seq,
organ_cd,
budget_code,
period_assign_amount,
expense_assign_amount,
period_assign_amount-expense_assign_amount as balance_amount,
round(expense_assign_amount/period_assign_amount*100 ,2) as expense_rate
from (
select oc.order_seq, oc.organ_cd, total.budget_code,
coalesce(total.sum_assign_amount, 0) as period_assign_amount,
coalesce(expn.expense_assign_amount, 0) as expense_assign_amount
from (
select l_org_code, budget_code, sum(amount) as sum_assign_amount
from tbl_budget_assign
where h_org_code = #{code}
and EXTRACT( year FROM assign_date ) = ${year}
and amount > 0
group by l_org_code, budget_code
) total
inner join (
select (ROW_NUMBER() OVER()) AS order_seq, *
from (
select organ_cd
from (
select #{code} as organ_cd
union all
select organ_cd
from organ_config
where parent_organ = #{code}
) a
inner join code_mgt b on a.organ_cd = b.item_cd
order by b.order_num
) a
) oc on total.l_org_code = oc.organ_cd
left outer join (
select org_code, budget_code, sum(amount) as expense_assign_amount
from tbl_budget_expense
where expense_date >= #{stDate}::date
and expense_date &lt;= #{edDate}::date
group by org_code, budget_code
) expn on total.l_org_code = expn.org_code and total.budget_code = expn.budget_code
order by order_seq, organ_cd, budget_code
) a
</select>
</mapper> </mapper>

View File

@ -30,9 +30,10 @@
<div class="row justify-content-end"> <div class="row justify-content-end">
<div class="col-auto"> <div class="col-auto">
<select class="form-select" name="year" id="searchYear"> <select class="form-select" name="year" id="searchYear">
<option th:each="info, i : ${yearList}" th:value="${info.year}" <th:block th:each="year, i : ${yearList}">
th:selected="${searchParams?.year eq info.year}" <option th:value="${year.year}" th:text="${year.year}"
th:text="${info.year}"></option> th:selected="${searchParams.year eq year.year}"></option>
</th:block>
</select> </select>
</div> </div>
<div class="col-auto"> <div class="col-auto">
@ -83,6 +84,7 @@
</table> </table>
</div> </div>
</div> </div>
<th:block th:if="${#temporals.year(#temporals.createNow())<= searchParams.year}">
<div class="row justify-content-between"> <div class="row justify-content-between">
<div class="col-auto"> <div class="col-auto">
<button class="btn btn-success" id="addBtn">항목추가</button> <button class="btn btn-success" id="addBtn">항목추가</button>
@ -97,7 +99,7 @@
<button class="btn btn-primary" id="budgetDeleteBtn">예산삭제</button> <button class="btn btn-primary" id="budgetDeleteBtn">예산삭제</button>
</div> </div>
</div> </div>
</th:block>
<div class="modal fade" id="editModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="faRptEditModalLabel" aria-hidden="true"> <div class="modal fade" id="editModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="faRptEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xxl modal-dialog-scrollable"> <div class="modal-dialog modal-xxl modal-dialog-scrollable">
<div class="modal-content" id="editModalContent"></div> <div class="modal-content" id="editModalContent"></div>

View File

@ -38,12 +38,17 @@
<div class="col-auto"> <div class="col-auto">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<th:block th:if="${loginOrgan eq 'OG001'}">
<select class="form-select form-select-sm" name="code" id="code"> <select class="form-select form-select-sm" name="code" id="code">
<option value="OG001" th:selected="${searchParams?.code eq '본청'}">본청</option> <option value="OG001">본청</option>
<option th:each="code, i : ${codeList}" th:value="${code?.orgCode}" <option th:each="code : ${downOrgList}" th:value="${code?.orgCode}"
th:text="${code?.orgName}" th:selected="${searchParams?.code eq code.orgCode}"> th:text="${code?.orgName}" th:selected="${searchParams?.code eq code.orgCode}">
</option> </option>
</select> </select>
</th:block>
<th:block th:unless="${loginOrgan eq 'OG001'}">
<input type="hidden" name="code" id="code" th:value="${loginOrgan}">
</th:block>
</div> </div>
<div class="col-auto"> <div class="col-auto">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv"> <div class="input-group w-auto input-daterange" id="dateSelectorDiv">
@ -69,12 +74,14 @@
<th rowspan="2">예산총액</th> <th rowspan="2">예산총액</th>
<th rowspan="2">예산총배정액<br>(누적)</th> <th rowspan="2">예산총배정액<br>(누적)</th>
<th colspan="2">집행액(총계)</th> <th colspan="2">집행액(총계)</th>
<th colspan="4" class="w-400px" th:each="orglist : ${downOrgList}" th:text="${orglist.orgName}"></th> <th:block th:each="org:${downOrgList}">
<th colspan="4" class="w-400px" th:text="${org.orgName}"></th>
</th:block>
</tr> </tr>
<tr class="table-secondary"> <tr class="table-secondary">
<th>지출총액</th> <th>지출총액</th>
<th>보유잔액</th> <th>보유잔액</th>
<th:block th:each="orglist : ${downOrgList}"> <th:block th:each="org : ${downOrgList}">
<th class="w-100px">배정액</th> <th class="w-100px">배정액</th>
<th class="w-100px">지출총액</th> <th class="w-100px">지출총액</th>
<th class="w-100px">잔액</th> <th class="w-100px">잔액</th>
@ -95,53 +102,53 @@
<td th:text="${#numbers.formatInteger(info.expenseTAmount,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseTAmount,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.balanceTAmount,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceTAmount,1,'COMMA')}" class="text-end"></td>
<th:block th:each="orglist, j : ${downOrgList}"> <th:block th:each="orglist, j : ${downOrgList}">
<th:block th:if="${j.index} == '0'"> <th:block th:if="${j.index} == '0'"><!--배정, 집행, 잔액, 률-->
<td th:text="${#numbers.formatInteger(info.periodAssignAmount1,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount1,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount1,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate1,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate1, '%')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '1'"> <th:block th:if="${j.index} == '1'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount2,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount2,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount2,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate2,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate2, '%')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '2'"> <th:block th:if="${j.index} == '2'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount3,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount3,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount3,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate3,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate3, '%')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '3'"> <th:block th:if="${j.index} == '3'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount4,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount4,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount4,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate4,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate4, '%')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '4'"> <th:block th:if="${j.index} == '4'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount5,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount5,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount5,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate5,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate5, '%')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '5'"> <th:block th:if="${j.index} == '5'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount6,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount6,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount6,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate6,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate6, '%')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '6'"> <th:block th:if="${j.index} == '6'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount7,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount7,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount7,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate7,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate7, '%')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '7'"> <th:block th:if="${j.index} == '7'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount8,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount8,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount8,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate8,1,'COMMA'), '%')}" class="text-end"></td> <td th:text="${#strings.concat(info.expenseRate8, '%')}" class="text-end"></td>
</th:block> </th:block>
</th:block> </th:block>
</tr> </tr>

View File

@ -115,49 +115,49 @@
<th:block th:if="${j.index} == '0'"> <th:block th:if="${j.index} == '0'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount1,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount1,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount1,1,'COMMA')}" class="text-end">11</td> <td th:text="${#numbers.formatInteger(info.balanceAmount1,1,'COMMA')}" class="text-end">11</td>
<td th:text="${#numbers.formatInteger(info.expenseRate1,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate1,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '1'"> <th:block th:if="${j.index} == '1'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount2,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount2,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount2,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate2,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate2,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '2'"> <th:block th:if="${j.index} == '2'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount3,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount3,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount3,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate3,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate3,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '3'"> <th:block th:if="${j.index} == '3'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount4,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount4,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount4,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate4,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate4,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '4'"> <th:block th:if="${j.index} == '4'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount5,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount5,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount5,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate5,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate5,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '5'"> <th:block th:if="${j.index} == '5'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount6,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount6,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount6,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate6,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate6,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '6'"> <th:block th:if="${j.index} == '6'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount7,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount7,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount7,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate7,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate7,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
<th:block th:if="${j.index} == '7'"> <th:block th:if="${j.index} == '7'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount8,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.periodAssignAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount8,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expensePAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount8,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.balanceAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate8,1,'COMMA')}" class="text-end"></td> <td th:text="${#numbers.formatInteger(info.expenseRate8,1,'COMMA')}" class="text-end"></td>
</th:block> </th:block>
</th:block> </th:block>