mirror of
https://git.hmsn.ink/kospo/svcm/api.git
synced 2026-03-20 03:02:19 +09:00
전표 생성 sap 결재 통합
전표 조회 상세 수정 화면 분리
This commit is contained in:
@@ -21,5 +21,51 @@ Content-Type: application/json
|
|||||||
"kostl": "12330",
|
"kostl": "12330",
|
||||||
"projk": "",
|
"projk": "",
|
||||||
"trtGubun": "11",
|
"trtGubun": "11",
|
||||||
"txBillSeq": "202503231"
|
"txBillSeq": "202503231",
|
||||||
|
"slipAtts": [
|
||||||
|
{
|
||||||
|
"logiFnm": "sapApprTest.pdf",
|
||||||
|
"data": "4paR4paS4paT4paI4pa6IFdpbmRvd3MgWC1MaXRlIOKXhOKWiOKWk+KWkuKWkQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K4oCiIEN1c3RvbSBXaW5kb3dzIEJ1aWxkcyBkZXNpZ25lZCB0byBCcmVhdGhlIE5ldyBMaWZlIGludG8geW91ciBQQyENCuKAoiBTbWFsbGVyLCBMaWdodGVyLCBGYXN0ZXIgYW5kIE1vcmUgUmVzcG9uc2l2ZS4NCuKAoiBFbmhhbmNlZCBQcml2YWN5LCBBY2Nlc3NpYmlsaXR5IGFuZCBDb250cm9sLg0K4oCiIDEwMCUgQ2xlYW4uIDEwMCUgU2FmZS4gMTAwJSBPcHRpbWl6ZWQuDQrigKIgQXJlIFlvdSBSZWFkeSBUbyBUYWtlIFlvdXIgV2luZG93cyBleHBlcmllbmNlIHRvIHRoZSBOZXh0IExldmVsIT8NCg0KICDimJEgQ09NRSBWSVNJVCBVUyEg4piRDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCuKeoe+4jyBodHRwczovL3dpbmRvd3N4bGl0ZS5jb20NCuKeoe+4jyBodHRwczovL3d3dy55b3V0dWJlLmNvbS9AV2luZG93c1gtTGl0ZQ0K4p6h77iPIGh0dHBzOi8va28tZmkuY29tL3dpbmRvd3N4bGl0ZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQrinaTvuI8gWW91IGNhbiBIZWxwIFN1cHBvcnQgVGhpcyBQcm9qZWN0IGJ5IERvbmF0aW5nIQ0K4p6h77iPIGh0dHBzOi8va28tZmkuY29tL3dpbmRvd3N4bGl0ZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQrinaTvuI8gWW91IENhbiBIZWxwIFN1cHBvcnQgVGhpcyBQcm9qZWN0IGJ5IERpc2FibGluZyBBZCBCbG9ja2Vycw0KYW5kIGNsaWNraW5nIGFkcyB0aGF0IGludGVyZXN0IHlvdSB3aGlsZSB2aXNpdGluZyBvdXIgV2Vic2l0ZSBhbmQgb3VyIFlvdVR1YmUgQ2hhbm5lbCENCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K4p6h77iPIFRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0LCBhbmQgZm9yIGJlaW5nIGEgcGFydCBvZiBvdXIgY29tbXVuaXR5IQ0K4p6h77iPIFlvdXJzIFRydWx5IC0gRkJDb25hbiAmIFRoZSBXaW5kb3dzIFgtTGl0ZSBUZWFtDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg=="
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"zwf0011t": {
|
||||||
|
"wkftx": "결재 테스트 11",
|
||||||
|
"apprs": [
|
||||||
|
{
|
||||||
|
"label": "결재",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"lineclsf": "Q",
|
||||||
|
"bname": "15000037",
|
||||||
|
"abscd": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lineclsf": "I",
|
||||||
|
"bname": "15000003",
|
||||||
|
"abscd": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lineclsf": "I",
|
||||||
|
"bname": "15000004",
|
||||||
|
"abscd": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lineclsf": "E",
|
||||||
|
"bname": "15000037",
|
||||||
|
"abscd": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lineclsf": "E",
|
||||||
|
"bname": "15000062",
|
||||||
|
"abscd": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lineclsf": "A",
|
||||||
|
"bname": "15000005",
|
||||||
|
"abscd": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -102,25 +102,25 @@ public class SapApprController {
|
|||||||
// return ResponseEntity.ok(sapService.getDetail(wfkid));
|
// return ResponseEntity.ok(sapService.getDetail(wfkid));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@Operation(summary = "SAP 결재 저장", description = "임시전표 + sap 결재 저장")
|
// @Operation(summary = "SAP 결재 저장", description = "임시전표 + sap 결재 저장")
|
||||||
@ApiResponses({
|
// @ApiResponses({
|
||||||
@ApiResponse(description = "Success", responseCode = "200",
|
// @ApiResponse(description = "Success", responseCode = "200",
|
||||||
content = @Content(mediaType = "application/json",
|
// content = @Content(mediaType = "application/json",
|
||||||
schema = @Schema(oneOf = {PageResponse.class})
|
// schema = @Schema(oneOf = {PageResponse.class})
|
||||||
)),
|
// )),
|
||||||
@ApiResponse(description = "Not found", responseCode = "404",
|
// @ApiResponse(description = "Not found", responseCode = "404",
|
||||||
content = @Content(mediaType = "text/plain", schema = @Schema(oneOf =
|
// content = @Content(mediaType = "text/plain", schema = @Schema(oneOf =
|
||||||
{String.class}))),
|
// {String.class}))),
|
||||||
@ApiResponse(description = "Internal Error", responseCode = "500",
|
// @ApiResponse(description = "Internal Error", responseCode = "500",
|
||||||
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
|
// content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
|
||||||
{CustomErrorResponse.class })))
|
// {CustomErrorResponse.class })))
|
||||||
})
|
// })
|
||||||
@PostMapping("/sap/appr")
|
// @PostMapping("/sap/appr")
|
||||||
public ResponseEntity save(
|
// public ResponseEntity save(
|
||||||
@RequestBody Zwf0011tSaveRequest zwf0011tSaveRequest
|
// @RequestBody Zwf0011tSaveRequest zwf0011tSaveRequest
|
||||||
) {
|
// ) {
|
||||||
return ResponseEntity.ok(sapService.save(zwf0011tSaveRequest));
|
// return ResponseEntity.ok(sapService.save(zwf0011tSaveRequest));
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Operation(summary = "SAP 결재상태 변경", description = "sap 결재상태 변경(결재승인 A, 결재반려 S")
|
@Operation(summary = "SAP 결재상태 변경", description = "sap 결재상태 변경(결재승인 A, 결재반려 S")
|
||||||
@ApiResponses({
|
@ApiResponses({
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class SlipController {
|
|||||||
private final SlipService slipService;
|
private final SlipService slipService;
|
||||||
|
|
||||||
|
|
||||||
@Operation(summary = "전표 상세 조회", description = "임시, 확정 전표 상세 조회")
|
@Operation(summary = "전표 상세 조회 상태(대금지급전)", description = "임시, 확정 전표 상세 조회")
|
||||||
@ApiResponses({
|
@ApiResponses({
|
||||||
@ApiResponse(description = "Success", responseCode = "200",
|
@ApiResponse(description = "Success", responseCode = "200",
|
||||||
content = @Content(mediaType = "application/json",
|
content = @Content(mediaType = "application/json",
|
||||||
@@ -47,7 +47,7 @@ public class SlipController {
|
|||||||
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
|
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
|
||||||
{CustomErrorResponse.class })))
|
{CustomErrorResponse.class })))
|
||||||
})
|
})
|
||||||
@GetMapping("/slip/page/{contNo}")
|
@GetMapping("/slip/{contNo}")
|
||||||
public ResponseEntity findByContNo(
|
public ResponseEntity findByContNo(
|
||||||
@Parameter(description = "계약번호") @PathVariable("contNo") String contNo,
|
@Parameter(description = "계약번호") @PathVariable("contNo") String contNo,
|
||||||
Principal principal
|
Principal principal
|
||||||
@@ -55,6 +55,28 @@ public class SlipController {
|
|||||||
return ResponseEntity.ok(slipService.findByContNo(contNo));
|
return ResponseEntity.ok(slipService.findByContNo(contNo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Operation(summary = "전표 상세 조회 상태(대금지급중)", description = "임시, 확정 전표 상세 조회")
|
||||||
|
@ApiResponses({
|
||||||
|
@ApiResponse(description = "Success", responseCode = "200",
|
||||||
|
content = @Content(mediaType = "application/json",
|
||||||
|
schema = @Schema(oneOf =
|
||||||
|
{Pageable.class}))),
|
||||||
|
@ApiResponse(description = "Not found", responseCode = "404",
|
||||||
|
content = @Content(mediaType = "text/plain", schema = @Schema(oneOf =
|
||||||
|
{String.class}))),
|
||||||
|
@ApiResponse(description = "Internal Error", responseCode = "500",
|
||||||
|
content = @Content(mediaType = "application/json", schema = @Schema(oneOf =
|
||||||
|
{CustomErrorResponse.class })))
|
||||||
|
})
|
||||||
|
@GetMapping("/slip/detail/{contNo}")
|
||||||
|
public ResponseEntity findByDetailContNo(
|
||||||
|
@Parameter(description = "계약번호") @PathVariable("contNo") String contNo,
|
||||||
|
Principal principal
|
||||||
|
) {
|
||||||
|
return ResponseEntity.ok(slipService.findByDetailContNo(contNo));
|
||||||
|
}
|
||||||
|
|
||||||
@Operation(summary = "임시전표 저장", description = "임시전표 (계약중 대상자) 저장")
|
@Operation(summary = "임시전표 저장", description = "임시전표 (계약중 대상자) 저장")
|
||||||
@ApiResponses({
|
@ApiResponses({
|
||||||
@ApiResponse(description = "Success", responseCode = "200",
|
@ApiResponse(description = "Success", responseCode = "200",
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public class SlipSaveRequest implements Serializable {
|
|||||||
@Schema(name = "txBillSeq", description = "전자세금계산서 일련번호")
|
@Schema(name = "txBillSeq", description = "전자세금계산서 일련번호")
|
||||||
String txBillSeq;
|
String txBillSeq;
|
||||||
List<SlipAttSaveRequest> slipAtts;
|
List<SlipAttSaveRequest> slipAtts;
|
||||||
|
Zwf0011tSaveRequest zwf0011t;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ public class SlipResponse implements Serializable {
|
|||||||
@Schema(name = "regDt", description = "등록일시")
|
@Schema(name = "regDt", description = "등록일시")
|
||||||
String regDt;
|
String regDt;
|
||||||
List<SlipAttResponse> slipAtts;
|
List<SlipAttResponse> slipAtts;
|
||||||
|
Zwf0011tResponse zwf0011t;
|
||||||
|
|
||||||
|
|
||||||
public static SlipResponse to(Slip slip) {
|
public static SlipResponse to(Slip slip) {
|
||||||
|
|||||||
@@ -17,12 +17,6 @@ public class SlipAtt {
|
|||||||
@EmbeddedId
|
@EmbeddedId
|
||||||
private SlipAttId id;
|
private SlipAttId id;
|
||||||
|
|
||||||
@MapsId("contNo")
|
|
||||||
@ManyToOne(fetch = FetchType.LAZY, optional = false)
|
|
||||||
@OnDelete(action = OnDeleteAction.CASCADE)
|
|
||||||
@JoinColumn(name = "cont_no", nullable = false)
|
|
||||||
private Cont contNo;
|
|
||||||
|
|
||||||
@Size(max = 100)
|
@Size(max = 100)
|
||||||
@Column(name = "logi_fnm", length = 100)
|
@Column(name = "logi_fnm", length = 100)
|
||||||
private String logiFnm;
|
private String logiFnm;
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public interface ApprReqRepository extends JpaRepository<ApprReq, ApprReqId> {
|
|||||||
" cte.appr_stat,\n" +
|
" cte.appr_stat,\n" +
|
||||||
" cte.num,\n" +
|
" cte.num,\n" +
|
||||||
" am.reg_dt as reg_dt,\n" +
|
" am.reg_dt as reg_dt,\n" +
|
||||||
" 'SAP' as gubun\n" +
|
" 'SVCM' as gubun\n" +
|
||||||
" from cte\n" +
|
" from cte\n" +
|
||||||
" inner join appr_mst am on cte.appr_no = am.appr_no\n" +
|
" inner join appr_mst am on cte.appr_no = am.appr_no\n" +
|
||||||
" and am.appr_stat_cd in ('0000', '0100')\n" +
|
" and am.appr_stat_cd in ('0000', '0100')\n" +
|
||||||
@@ -362,7 +362,7 @@ public interface ApprReqRepository extends JpaRepository<ApprReq, ApprReqId> {
|
|||||||
" z3.wkfsq1\n" +
|
" z3.wkfsq1\n" +
|
||||||
" FROM z3_data z3\n" +
|
" FROM z3_data z3\n" +
|
||||||
" inner join z2_counts z2c \n" +
|
" inner join z2_counts z2c \n" +
|
||||||
" WHERE z2c.z2_count = 1) aa\n" +
|
" on z2c.z2_count = 1) aa\n" +
|
||||||
" WHERE num = 1\n" +
|
" WHERE num = 1\n" +
|
||||||
" and bname = :sabun) cc\n" +
|
" and bname = :sabun) cc\n" +
|
||||||
" inner join zwf0011t z11 on cc.wkfid = z11.wkfid\n" +
|
" inner join zwf0011t z11 on cc.wkfid = z11.wkfid\n" +
|
||||||
@@ -519,4 +519,25 @@ public interface ApprReqRepository extends JpaRepository<ApprReq, ApprReqId> {
|
|||||||
"from cte",
|
"from cte",
|
||||||
nativeQuery = true)
|
nativeQuery = true)
|
||||||
Page<igtApprDto> igtFindByDeptCd(@Param("deptCd") String deptCd, @Param("title") String title, Pageable pageable);
|
Page<igtApprDto> igtFindByDeptCd(@Param("deptCd") String deptCd, @Param("title") String title, Pageable pageable);
|
||||||
|
|
||||||
|
|
||||||
|
interface ZwfApprDto {
|
||||||
|
String getWkfid();
|
||||||
|
int getWkfsq();
|
||||||
|
String getLIneclsf();
|
||||||
|
String getBname();
|
||||||
|
String getBtext();
|
||||||
|
String getPosit();
|
||||||
|
String getWkfst();
|
||||||
|
String getAbscd();
|
||||||
|
}
|
||||||
|
@Query(value = "with cte as (\n" +
|
||||||
|
" select wkfid, wkfsq, lineclsf, bname, btext, posit, wkfst, abscd\n" +
|
||||||
|
" from public.zwf0012t\n" +
|
||||||
|
" union \n" +
|
||||||
|
" select wkfid, wkfsq, lineclsf, bname, btext, posit, wkfst, abscd\n" +
|
||||||
|
" from public.zwf0013t\n" +
|
||||||
|
" order by lineclsf desc\n" +
|
||||||
|
") select * from cte where wkfid = :wkfid", nativeQuery = true)
|
||||||
|
List<ZwfApprDto> findByWkfid(@Param("wkfid") String wkfid);
|
||||||
}
|
}
|
||||||
@@ -28,4 +28,5 @@ public interface Zwf0011tRepository extends JpaRepository<Zwf0011t, Zwf0011tId>
|
|||||||
Page<Zwf0011t> findSearchBySabun(String sabun, String wkfst, String erSdat, String erEdat, Pageable pageable);
|
Page<Zwf0011t> findSearchBySabun(String sabun, String wkfst, String erSdat, String erEdat, Pageable pageable);
|
||||||
|
|
||||||
Zwf0011t findByIdWkfid(String wkfid);
|
Zwf0011t findByIdWkfid(String wkfid);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,5 @@ import java.util.List;
|
|||||||
public interface Zwf0013tRepository extends JpaRepository<Zwf0013t, Zwf0013tId> {
|
public interface Zwf0013tRepository extends JpaRepository<Zwf0013t, Zwf0013tId> {
|
||||||
List<Zwf0013t> findByIdWkfid(String WkfId);
|
List<Zwf0013t> findByIdWkfid(String WkfId);
|
||||||
|
|
||||||
|
|
||||||
Zwf0013t findByWkfsqAndIdWkfidAndIdBname(Integer wkfsq, String idWkfid, String idBname);
|
Zwf0013t findByWkfsqAndIdWkfidAndIdBname(Integer wkfsq, String idWkfid, String idBname);
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,9 @@ public interface SlipService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
SlipResponse findByContNo(String contNo);
|
SlipResponse findByContNo(String contNo);
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
SlipResponse findByDetailContNo(String contNo);
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
SlipResponse save(SlipSaveRequest slipSaveRequest);
|
SlipResponse save(SlipSaveRequest slipSaveRequest);
|
||||||
|
|
||||||
|
|||||||
@@ -3,17 +3,19 @@ package com.kospo.svcm.service.impl;
|
|||||||
import com.kospo.svcm.config.exception.ErrorCode;
|
import com.kospo.svcm.config.exception.ErrorCode;
|
||||||
import com.kospo.svcm.config.utils.CommonUtils;
|
import com.kospo.svcm.config.utils.CommonUtils;
|
||||||
import com.kospo.svcm.config.utils.FileUtils;
|
import com.kospo.svcm.config.utils.FileUtils;
|
||||||
|
import com.kospo.svcm.config.utils.SequenceUtils;
|
||||||
import com.kospo.svcm.dto.req.SlipSaveRequest;
|
import com.kospo.svcm.dto.req.SlipSaveRequest;
|
||||||
import com.kospo.svcm.dto.res.SlipAttResponse;
|
import com.kospo.svcm.dto.req.Zwf0011tSaveRequest;
|
||||||
import com.kospo.svcm.dto.res.SlipResponse;
|
import com.kospo.svcm.dto.res.SlipResponse;
|
||||||
|
import com.kospo.svcm.dto.res.Zwf0011tResponse;
|
||||||
|
import com.kospo.svcm.dto.res.ZwfApprGrpResponse;
|
||||||
import com.kospo.svcm.exception.CustomException;
|
import com.kospo.svcm.exception.CustomException;
|
||||||
import com.kospo.svcm.model.*;
|
import com.kospo.svcm.model.*;
|
||||||
import com.kospo.svcm.repository.ContRepository;
|
import com.kospo.svcm.repository.*;
|
||||||
import com.kospo.svcm.repository.SlipAttRepository;
|
|
||||||
import com.kospo.svcm.repository.SlipRepository;
|
|
||||||
import com.kospo.svcm.service.SlipService;
|
import com.kospo.svcm.service.SlipService;
|
||||||
import jakarta.transaction.Transactional;
|
import jakarta.transaction.Transactional;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.apache.poi.util.StringUtil;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -21,26 +23,75 @@ import org.springframework.stereotype.Service;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SlipServiceImpl implements SlipService {
|
public class SlipServiceImpl implements SlipService {
|
||||||
|
private final ApprReqRepository apprReqRepository;
|
||||||
@Value("${server.attach}")
|
@Value("${server.attach}")
|
||||||
private String filePath;
|
private String filePath;
|
||||||
|
private final UserRepository userRepository;
|
||||||
private final SlipRepository slipRepository;
|
private final SlipRepository slipRepository;
|
||||||
private final ContRepository contRepository;
|
private final ContRepository contRepository;
|
||||||
private final SlipAttRepository slipAttRepository;
|
private final SlipAttRepository slipAttRepository;
|
||||||
|
private final Zwf0011tRepository zwf0011tRepository;
|
||||||
|
private final Zwf0012tRepository zwf0012tRepository;
|
||||||
|
private final Zwf0013tRepository zwf0013tRepository;
|
||||||
private final FileUtils fileUtils;
|
private final FileUtils fileUtils;
|
||||||
|
private final SequenceUtils sequenceUtils;
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public SlipResponse findByContNo(String contNo) {
|
public SlipResponse findByContNo(String contNo) {
|
||||||
Optional<Slip> optionalSlip = slipRepository.findById(contNo);
|
Optional<Slip> optionalSlip = slipRepository.findById(contNo);
|
||||||
if(optionalSlip.isPresent()) {
|
if(optionalSlip.isPresent()) {
|
||||||
return SlipResponse.to(optionalSlip.get());
|
SlipResponse slipResponse = SlipResponse.to(optionalSlip.get());
|
||||||
|
String obkey = slipResponse.getBelnr() + slipResponse.getGjahr() + "1000";
|
||||||
|
Zwf0011t zwf0011t = zwf0011tRepository.findByObkey(obkey);
|
||||||
|
Zwf0011tResponse zwf0011tResponse = Zwf0011tResponse.to(zwf0011t);
|
||||||
|
List<ApprReqRepository.ZwfApprDto> zwfApprDtos = apprReqRepository.findByWkfid(zwf0011t.getId().getWkfid());
|
||||||
|
zwf0011tResponse.setApprs(List.of(ZwfApprGrpResponse.builder()
|
||||||
|
.label("결재")
|
||||||
|
.value(Collections.singletonList(zwfApprDtos))
|
||||||
|
.build()));
|
||||||
|
slipResponse.setZwf0011t(zwf0011tResponse);
|
||||||
|
return slipResponse;
|
||||||
|
} else {
|
||||||
|
throw new CustomException(ErrorCode.FIND_ERR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public SlipResponse findByDetailContNo(String contNo) {
|
||||||
|
Optional<Slip> optionalSlip = slipRepository.findById(contNo);
|
||||||
|
if(optionalSlip.isPresent()) {
|
||||||
|
SlipResponse slipResponse = SlipResponse.to(optionalSlip.get());
|
||||||
|
String obkey = slipResponse.getBelnr() + slipResponse.getGjahr() + "1000";
|
||||||
|
Zwf0011t zwf0011t = zwf0011tRepository.findByObkey(obkey);
|
||||||
|
Zwf0011tResponse zwf0011tResponse = Zwf0011tResponse.to(zwf0011t);
|
||||||
|
|
||||||
|
List<ZwfApprGrpResponse> grpResponseList = new ArrayList<>();
|
||||||
|
grpResponseList.add(ZwfApprGrpResponse.builder()
|
||||||
|
.label("결재")
|
||||||
|
.value(Collections.singletonList(zwf0012tRepository.findByIdWkfid((zwf0011t.getId().getWkfid()))))
|
||||||
|
.build());
|
||||||
|
List<Zwf0013t> zwf0013ts = zwf0013tRepository.findByIdWkfid(zwf0011t.getId().getWkfid());
|
||||||
|
int groupIdx = zwf0013ts.stream().mapToInt(z -> z.getGrpid()).max().orElse(0);
|
||||||
|
for(int i=1; i<=groupIdx; i++) {
|
||||||
|
int finalI = i;
|
||||||
|
grpResponseList.add(ZwfApprGrpResponse.builder()
|
||||||
|
.label("협조")
|
||||||
|
.value(Collections.singletonList(zwf0013ts.stream().filter(z -> z.getGrpid() == finalI).toList()))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
zwf0011tResponse.setApprs(grpResponseList);
|
||||||
|
slipResponse.setZwf0011t(zwf0011tResponse);
|
||||||
|
return slipResponse;
|
||||||
} else {
|
} else {
|
||||||
throw new CustomException(ErrorCode.FIND_ERR);
|
throw new CustomException(ErrorCode.FIND_ERR);
|
||||||
}
|
}
|
||||||
@@ -55,7 +106,7 @@ public class SlipServiceImpl implements SlipService {
|
|||||||
/* eai fi 전송 성공후 저장*/
|
/* eai fi 전송 성공후 저장*/
|
||||||
/*계약진행중인 대상자*/
|
/*계약진행중인 대상자*/
|
||||||
Cont cont = contRepository.findByContNoAndContStatCd(slipSaveRequest.getContNo(), "0200");
|
Cont cont = contRepository.findByContNoAndContStatCd(slipSaveRequest.getContNo(), "0200");
|
||||||
if(cont != null) {
|
if(cont == null) throw new CustomException(ErrorCode.SAVE_ERR);
|
||||||
Slip slip = slipRepository.save(Slip.builder()
|
Slip slip = slipRepository.save(Slip.builder()
|
||||||
.contNo(slipSaveRequest.getContNo())
|
.contNo(slipSaveRequest.getContNo())
|
||||||
.bldat(slipSaveRequest.getBldat())
|
.bldat(slipSaveRequest.getBldat())
|
||||||
@@ -111,16 +162,158 @@ public class SlipServiceImpl implements SlipService {
|
|||||||
slip.setSlipAtts(slipAtts);
|
slip.setSlipAtts(slipAtts);
|
||||||
|
|
||||||
/*임시 전표 생성 eai호출영역 start*/
|
/*임시 전표 생성 eai호출영역 start*/
|
||||||
|
String resultType = "S";
|
||||||
slip.setBukrs("1000");
|
slip.setBukrs("1000");
|
||||||
slip.setBelnr(CommonUtils.dateFormat("yyyyMMddHHmmss"));
|
slip.setBelnr(CommonUtils.dateFormat("MMddHHmmss"));
|
||||||
slip.setGjahr(CommonUtils.dateFormat("yyyy"));
|
slip.setGjahr(CommonUtils.dateFormat("yyyy"));
|
||||||
slip.setType("S");
|
slip.setType(resultType);
|
||||||
/*임시 전표 생성 eai호출영역 end*/
|
/*임시 전표 생성 eai호출영역 end*/
|
||||||
slipRepository.save(slip);
|
AtomicReference<Zwf0011tResponse> zwf0011tResponse = new AtomicReference<>();
|
||||||
return SlipResponse.to(slip);
|
if(resultType.equals("S")) {
|
||||||
|
Zwf0011tSaveRequest zwf0011tSaveRequest = slipSaveRequest.getZwf0011t();
|
||||||
|
AtomicReference<String> wkfid = new AtomicReference<>(CommonUtils.getSapNo(sequenceUtils.findSeqAfterUpdate("sap_appr")));
|
||||||
|
String ernam = user.getSabun();
|
||||||
|
String erdat = CommonUtils.dateFormat("yyyyMMdd");
|
||||||
|
String erzet = CommonUtils.dateFormat("HHmmss");
|
||||||
|
AtomicReference<String> label = new AtomicReference<>("");
|
||||||
|
|
||||||
|
if(StringUtil.isBlank(zwf0011tSaveRequest.getWkfid())) {
|
||||||
|
zwf0011tResponse.set(Zwf0011tResponse.to(zwf0011tRepository.save(Zwf0011t.builder()
|
||||||
|
.id(Zwf0011tId.builder()
|
||||||
|
.wkfid(wkfid.get())
|
||||||
|
.catag("095")
|
||||||
|
.build())
|
||||||
|
.obkey(CommonUtils.getEstNo(slip.getBelnr()))
|
||||||
|
.wkfst("Q")
|
||||||
|
.wkftx(zwf0011tSaveRequest.getWkftx())
|
||||||
|
.ernam(ernam)
|
||||||
|
.erdat(erdat)
|
||||||
|
.erzet(erzet)
|
||||||
|
.build())));
|
||||||
} else {
|
} else {
|
||||||
throw new CustomException(ErrorCode.SAVE_ERR);
|
zwf0011tResponse.set(Zwf0011tResponse.to(zwf0011tRepository.findById(Zwf0011tId.builder()
|
||||||
|
.catag("095")
|
||||||
|
.wkfid(zwf0011tSaveRequest.getWkfid())
|
||||||
|
.build()).get()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<Object> mergeList = new ArrayList<>();
|
||||||
|
|
||||||
|
AtomicInteger sq = new AtomicInteger(1);
|
||||||
|
zwf0011tSaveRequest.getApprs().stream().forEach(z -> {
|
||||||
|
label.set(z.getLabel());
|
||||||
|
if (z.getLabel().equals("결재")) {
|
||||||
|
AtomicInteger eSq = new AtomicInteger(1);
|
||||||
|
z.getValue().stream().forEach(zwfAppr -> {
|
||||||
|
Optional<User> userOptional = userRepository.findById(zwfAppr.getBname());
|
||||||
|
if (userOptional.isEmpty()) throw new CustomException(ErrorCode.AUTHENTICATION_NOT_SUPPORT);
|
||||||
|
|
||||||
|
if (zwfAppr.getLineclsf().equals("E")) {
|
||||||
|
mergeList.add(zwf0013tRepository.save(Zwf0013t.builder()
|
||||||
|
.id(Zwf0013tId.builder()
|
||||||
|
.wkfid(wkfid.get())
|
||||||
|
.gubun("I")
|
||||||
|
.bname(userOptional.get().getSabun())
|
||||||
|
.build())
|
||||||
|
.lineclsf(zwfAppr.getLineclsf())
|
||||||
|
.abscd(zwfAppr.getAbscd())
|
||||||
|
.btext(userOptional.get().getName())
|
||||||
|
.posit(userOptional.get().getGradeNm())
|
||||||
|
.deptn(userOptional.get().getPtsnNm())
|
||||||
|
.wkfst(zwfAppr.getLineclsf().equals("Q") ? "Q" : "I")
|
||||||
|
.wkfsq(eSq.get())
|
||||||
|
.ernam(ernam)
|
||||||
|
.erdat(erdat)
|
||||||
|
.erzet(erzet)
|
||||||
|
.wkfsq1(2)
|
||||||
|
.grpid(eSq.getAndIncrement())
|
||||||
|
.build()));
|
||||||
|
} else {
|
||||||
|
mergeList.add(zwf0012tRepository.save(Zwf0012t.builder()
|
||||||
|
.id(Zwf0012tId.builder()
|
||||||
|
.wkfid(wkfid.get())
|
||||||
|
.wkfsq(sq.getAndIncrement())
|
||||||
|
.build())
|
||||||
|
.lineclsf(zwfAppr.getLineclsf())
|
||||||
|
.abscd(zwfAppr.getAbscd())
|
||||||
|
.bname(userOptional.get().getSabun())
|
||||||
|
.btext(userOptional.get().getName())
|
||||||
|
.posit(userOptional.get().getGradeNm())
|
||||||
|
.deptn(userOptional.get().getPtsnNm())
|
||||||
|
.wkfst(zwfAppr.getLineclsf().equals("Q") ? "Q" : "I")
|
||||||
|
.ernam(ernam)
|
||||||
|
.erdat(erdat)
|
||||||
|
.erzet(erzet)
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if(z.getLabel().equals("협조")) {
|
||||||
|
wkfid.set(zwf0011tSaveRequest.getWkfid());
|
||||||
|
AtomicInteger eSq = new AtomicInteger(1);
|
||||||
|
|
||||||
|
z.getValue().stream().forEach(zwfAppr -> {
|
||||||
|
Optional<User> userOptional = userRepository.findById(zwfAppr.getBname());
|
||||||
|
if (userOptional.isEmpty()) throw new CustomException(ErrorCode.AUTHENTICATION_NOT_SUPPORT);
|
||||||
|
if(zwfAppr.getLineclsf().equals("Q")) {
|
||||||
|
/* 협조 결재자 -> 신규 결재 입안자로 변경 */
|
||||||
|
Optional<Zwf0013t> zwf0013tOptional = zwf0013tRepository.findById(Zwf0013tId.builder()
|
||||||
|
.wkfid(wkfid.get())
|
||||||
|
.gubun("I")
|
||||||
|
.bname(userOptional.get().getSabun())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
if(zwf0013tOptional.isEmpty()) throw new CustomException(ErrorCode.AUTHENTICATION_NOT_SUPPORT);
|
||||||
|
|
||||||
|
Zwf0013t zwf0013t = zwf0013tOptional.get();
|
||||||
|
zwf0013t.setLineclsf(zwfAppr.getLineclsf());
|
||||||
|
|
||||||
|
zwf0013t.setErnam(ernam);
|
||||||
|
zwf0013t.setErdat(erdat);
|
||||||
|
zwf0013t.setErzet(erzet);
|
||||||
|
|
||||||
|
zwf0013t.setAenam(ernam);
|
||||||
|
zwf0013t.setAedat(erdat);
|
||||||
|
zwf0013t.setAezet(erzet);
|
||||||
|
|
||||||
|
zwf0013t.setWkfst("A");
|
||||||
|
zwf0013t.setWkfsq(eSq.getAndIncrement());
|
||||||
|
mergeList.add(zwf0013tRepository.save(zwf0013t));
|
||||||
|
} else {
|
||||||
|
mergeList.add(zwf0013tRepository.save(Zwf0013t.builder()
|
||||||
|
.id(Zwf0013tId.builder()
|
||||||
|
.wkfid(wkfid.get())
|
||||||
|
.gubun("I")
|
||||||
|
.bname(userOptional.get().getSabun())
|
||||||
|
.build())
|
||||||
|
.lineclsf(zwfAppr.getLineclsf())
|
||||||
|
.abscd(zwfAppr.getAbscd())
|
||||||
|
.btext(userOptional.get().getName())
|
||||||
|
.posit(userOptional.get().getGradeNm())
|
||||||
|
.deptn(userOptional.get().getPtsnNm())
|
||||||
|
.wkfst(zwfAppr.getLineclsf().equals("Q") ? "A" : "I")
|
||||||
|
.wkfsq(eSq.getAndIncrement())
|
||||||
|
.ernam(ernam)
|
||||||
|
.erdat(erdat)
|
||||||
|
.erzet(erzet)
|
||||||
|
.wkfsq1(0)
|
||||||
|
.grpid(zwfAppr.getGrpid())
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
zwf0011tResponse.get().setApprs(Arrays.asList(ZwfApprGrpResponse.builder()
|
||||||
|
.label(label.get())
|
||||||
|
.value(mergeList)
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
slip = slipRepository.save(slip);
|
||||||
|
SlipResponse slipResponse = SlipResponse.to(slip);
|
||||||
|
slipResponse.setZwf0011t(zwf0011tResponse.get());
|
||||||
|
return slipResponse;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|||||||
89
src/main/resources/application-local.yml
Normal file
89
src/main/resources/application-local.yml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
jasypt:
|
||||||
|
encryptor:
|
||||||
|
key: kospo2025
|
||||||
|
bean: jasyptEncryptorAES
|
||||||
|
property:
|
||||||
|
prefix: ENC(
|
||||||
|
suffix: )
|
||||||
|
server:
|
||||||
|
address: 0.0.0.0
|
||||||
|
port: 8010
|
||||||
|
servlet:
|
||||||
|
encoding:
|
||||||
|
charset: UTF-8
|
||||||
|
enabled: true
|
||||||
|
force: true
|
||||||
|
session:
|
||||||
|
timeout: 1800s
|
||||||
|
attach: 'c:/appl/svcm/attach/'
|
||||||
|
jetty:
|
||||||
|
max-http-form-post-size: 100MB
|
||||||
|
spring:
|
||||||
|
application:
|
||||||
|
name: svcm
|
||||||
|
servlet:
|
||||||
|
multipart:
|
||||||
|
max-file-size: 100MB
|
||||||
|
max-request-size: 100MB
|
||||||
|
data:
|
||||||
|
rest:
|
||||||
|
detection-strategy: annotated
|
||||||
|
devtools:
|
||||||
|
livereload:
|
||||||
|
enabled: true
|
||||||
|
remote:
|
||||||
|
restart:
|
||||||
|
enabled: false
|
||||||
|
jpa:
|
||||||
|
show-sql: false
|
||||||
|
hibernate:
|
||||||
|
ddl-auto: validate
|
||||||
|
naming:
|
||||||
|
physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
|
||||||
|
open-in-view: false
|
||||||
|
mvc:
|
||||||
|
pathmatch:
|
||||||
|
matching-strategy: ant_path_matcher
|
||||||
|
mail:
|
||||||
|
host: smtp.kospo.co.kr
|
||||||
|
port: 587
|
||||||
|
username: psn14020
|
||||||
|
password: kospo2025!
|
||||||
|
properties:
|
||||||
|
smtp:
|
||||||
|
auth: true
|
||||||
|
timeout: 5000
|
||||||
|
starttls:
|
||||||
|
enable: true
|
||||||
|
datasource:
|
||||||
|
hikari:
|
||||||
|
username: ENC(gLQTvX57MBGvHAhEGckIJbVdgG5w1YPO+bZk5+xOvg6DhAIcGcyXib8T605t2Icd)
|
||||||
|
password: ENC(KpBRMJPNmBe/zi0mPo32beSSXteAaSEp/Kf7dVV3ss8Qi4mS2bJ+P0eFw2Qs15sV)
|
||||||
|
connection-timeout: 20000
|
||||||
|
maximum-pool-size: 30
|
||||||
|
data-source-properties:
|
||||||
|
cachePrepStmts: true
|
||||||
|
prepStmtCacheSize: 200
|
||||||
|
prepStmtCacheSqlLimit: 2048
|
||||||
|
useServerPrepStmts: true
|
||||||
|
url: jdbc:log4jdbc:postgresql://hmsn.ink:35432/svcm
|
||||||
|
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||||
|
jwt:
|
||||||
|
key: 5840f916c19111ee86fcf38ac250f21377907a8ac19111eebab6e7179f8e5c87
|
||||||
|
springdoc:
|
||||||
|
packages-to-scan: com.kospo.svcm
|
||||||
|
api-docs:
|
||||||
|
path: /api-docs
|
||||||
|
groups:
|
||||||
|
enabled: true
|
||||||
|
swagger-ui:
|
||||||
|
path: /swagger-ui.html
|
||||||
|
enabled: true
|
||||||
|
groups-order: ASC
|
||||||
|
tags-sorter: alpha
|
||||||
|
operations-sorter: alpha
|
||||||
|
display-request-duration: true
|
||||||
|
doc-expansion: none
|
||||||
|
cache:
|
||||||
|
disabled: true
|
||||||
|
model-and-view-allowed: true
|
||||||
Reference in New Issue
Block a user