예산 배정 오류 수정.

master
강석 최 2023-07-24 18:02:08 +09:00
parent b2fccdd946
commit e52dbd5498
7 changed files with 442 additions and 493 deletions

View File

@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@ -205,9 +206,12 @@ public class BudgetController {
// 예산배정 - 등록(저장버튼)
@PostMapping("/assign/save")
public ResultResponse<?> saveAssign(@AuthenticationPrincipal UserInfo loginUser, @RequestBody BudgetDto.AssignSaveReqeust requestDto) {
budgetService.updateAssignList(loginUser, requestDto);
return new ResultResponse().successResponse(ResultResponseCode.SUCCESS);
public List<ResultResponse<?>> saveAssign(@AuthenticationPrincipal UserInfo loginUser, @RequestBody List<BudgetDto.AssignSaveReqeust> requestList) {
List<ResultResponse<?>> responseList = new ArrayList<>();
for(BudgetDto.AssignSaveReqeust requestDto : requestList){
responseList.add(new ResultResponse(budgetService.updateAssignList(loginUser, requestDto)));
}
return responseList;
}
// 집행관리

View File

@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -330,38 +331,25 @@ public class BudgetService {
// 예산배정 - 등록(저장버튼)
@Transactional
public void updateAssignList(UserInfo loginUser, BudgetDto.AssignSaveReqeust requestDto){
public ResultResponseCode updateAssignList(UserInfo loginUser, BudgetDto.AssignSaveReqeust requestDto){
// System.out.println(requestDto.getCode());
// System.out.println(requestDto.getOrg());
// System.out.println(requestDto.getYear());
// System.out.println(requestDto.getAmount());
// UpdateResult result = budgetRepository.callSpAddBudgetAssign(requestDto.getCode(),requestDto.getOrg(),requestDto.getOrg1(), requestDto.getAmount(), "2023-03-15");
BudgetParams params = new BudgetParams();
params.setCode(requestDto.getCode());
params.setOrg(requestDto.getOrg());
params.setOrg1(requestDto.getOrg1());
params.setAmount(requestDto.getAmount());
params.setDt("2023-03-15");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
params.setDt(LocalDate.now().format(formatter));
UpdateResult result = budgetMapper.callSpAddBudgetAssign(params);
// System.out.println(result.getErrorMessage());
// System.out.println(result.getResultCode());
// System.out.println(result.getResultCount());
if(result.getResultCode().equals("100")) {
return;
return ResultResponseCode.SUCCESS;
}else if(result.getResultCode().equals("72")) {
// System.out.println(result.getErrorMessage());
// System.out.println(result.getResultCode());
// System.out.println(result.getResultCount());
throw new BaseException(ResultResponseCode.EXPENSE_OVER_VALUE);
return ResultResponseCode.EXPENSE_OVER_VALUE;
} else {
// System.out.println(result.getErrorMessage());
// System.out.println(result.getResultCode());
// System.out.println(result.getResultCount());
throw new BaseException(ResultResponseCode.DUPLICATE_CODE);
return ResultResponseCode.DUPLICATE_CODE;
}
// return ResultResponseCode.ERROR;
}
//집행관리

View File

@ -51,7 +51,7 @@
from sp_get_high_org_code(#{org})
</select>
<select id="callSpAddBudgetAssign" resultType="UpdateResult" parameterType="BudgetParams">
call sp_add_budget_assign(#{code}, #{org}, #{org}1, #{amount}::int, #{dt}::date, 'admin', NULL,NULL,NULL)
call sp_add_budget_assign(#{code}, #{org}, #{org1}, #{amount}::int, #{dt}::date, 'admin', NULL,NULL,NULL)
</select>
<select id="callSpGetBudgetExpenseInfo" resultType="ExpenseResult" parameterType="BudgetParams">
select *

View File

@ -334,30 +334,31 @@ $(document).on('click', '#assignSaveBtn', function (){
if($("#assignCount").val()==0){
alert('저장할 내역이 없습니다.');
}
const paramList = [];
for(let i =0 ; i < $("#assignCount").val() ; i ++){
for(let j=0 ; j < $("#orgCount").val() ; j ++){
params = {}
params.year = $("#orgYear").val();
// console.dir($("#org"+j+"_amount"+i)[0].dataset.code);
params.code = $("#org"+j+"Amount"+i)[0].dataset.code;
params.amount = $("#org"+j+"Amount"+i).val() == "" ? 0 :$("#org"+j+"Amount"+i).val()
const amount = $("#org"+j+"Amount"+i)
if(amount.val() !== "" && amount.val() !== 0){
const params = {}
params.year = $("#assignYear").val();
params.code = amount[0].dataset.code;
params.amount = amount.val()
params.org = $("#code").val();
params.org1 = $("#orgSave"+j).text();
// console.dir(params.org);
paramList.push(params);
}
}
}
$.ajax({
type : 'POST',
data : JSON.stringify(params),
data : JSON.stringify(paramList),
url : "/budget/assign/save",
processData: false,
contentType: 'application/json',
async : false,
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(data) {
// console.log(data.code);
success : function(result) {
for(const data of result){
if(data.code == "200"){
success ++;
}else if(data.code == "911"){
@ -365,24 +366,17 @@ $(document).on('click', '#assignSaveBtn', function (){
}else{
fail++;
}
//location.reload();
},
error : function(xhr) {
//alert("저장에 실패하였습니다.");
fail++;
}
})
}
}
// console.dir("success: "+ success +", fail:" + fail+fail1);
if (fail1 > 0 || fail > 0) {
alert("저장에 성공하였습니다. \n일부는 저장에 실패 (금액 초과 [" + fail1 + "건], 에러 [" + fail + "건]) 하였습니다.");
} else {
alert("저장에 성공하였습니다.");
}
location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
})
});

View File

@ -4,8 +4,8 @@
<h4 class="modal-title" th:text="${info eq null?'예산항목 추가':'예산항목 수정'}"></h4>
<button type="button" class="btn btn-danger" data-bs-dismiss="modal" aria-hidden="true">x</button>
</div>
<div class="modal-body">
<form id="budgetForm" action="#">
<div class="modal-body">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" id="assignYear" name="assignYear" th:value="${searchParams.year}"/>
@ -133,13 +133,13 @@
</th:block>
</tr>
</tbody>
<!-- </table>-->
</table>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<a href="javascript:;" class="btn btn-primary" id="assignSaveBtn">저장</a>
<a href="javascript:;" class="btn btn-primary" id="modifyBtn" th:if="${cmd eq 'update'}">수정</a>
</div>
</form>
</html>

View File

@ -41,8 +41,7 @@
<select class="form-select form-select-sm" name="code" id="code">
<option value="OG001" th:selected="${searchParams?.code eq '본청'}">본청</option>
<option th:each="code, i : ${codeList}" 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>
</select>
</div>
@ -60,8 +59,8 @@
</div>
</form>
<div class="row">
<div class="table-responsive col-12">
<table class="table table-sm table-bordered table-hover">
<div class="col-12 overflow-auto">
<table class="table table-sm table-bordered table-hover text-nowrap">
<thead>
<tr class="table-secondary">
<th rowspan="2">사업명</th>
@ -73,8 +72,8 @@
<th colspan="4" class="w-400px" th:each="orglist : ${downOrgList}" th:text="${orglist.orgName}"></th>
</tr>
<tr class="table-secondary">
<td>지출총액</td>
<td>보유잔액</td>
<th>지출총액</th>
<th>보유잔액</th>
<th:block th:each="orglist : ${downOrgList}">
<th class="w-100px">배정액</th>
<th class="w-100px">지출총액</th>
@ -91,94 +90,58 @@
<td th:text="${info.budgetNameL1}"></td>
<td th:text="${info.budgetNameL2}"></td>
<td th:text="${info.budgetNameL3}"></td>
<td th:text="${#numbers.formatInteger(info.planAmount,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.totalAssignAmount,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.planAmount,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.totalAssignAmount,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>
<th:block th:each="orglist, j : ${downOrgList}">
<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.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.expenseRate1,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.blanceAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate1,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<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.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.expenseRate2,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.blanceAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate2,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<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.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.expenseRate3,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.blanceAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate3,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<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.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.expenseRate4,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.blanceAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate4,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<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.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.expenseRate5,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.blanceAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate5,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<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.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.expenseRate6,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.blanceAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate6,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<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.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.expenseRate7,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.blanceAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate7,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<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.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.expenseRate8,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.blanceAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate8,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
</th:block>
</tr>

View File

@ -78,11 +78,11 @@
</thead>
<tbody>
<tr class="odd gradeX reporterTr grid" th:each="info, i : ${list}">
<td th:text="${info.expenseDate}"></td>
<td th:text="${#strings.substringBefore(info.expenseDate, ' ')}"></td>
<td th:text="${info.expenseItem}"></td>
<td th:text="${info.amount}"></td>
<td th:text="${info.modiId}"></td>
<td th:text="${info.modiDate}"></td>
<td th:text="${#strings.substringBefore(info.modiDate, '.')}"></td>
</tr>
<th:block th:if="${#lists.isEmpty(list)}">