123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- package com.oqpo.api.service.sttlmng;
- import com.oqpo.api.entity.loanmng.LoanMgntBaseInfoEntity;
- import com.oqpo.api.entity.loanmng.LoanMgntDtlHstEntity;
- import com.oqpo.api.entity.oper.UserMngEntity;
- import com.oqpo.api.entity.rtnmng.RtnProcInfoPtclEntity;
- import com.oqpo.api.entity.settmng.StlMgntBaseInfoEntity;
- import com.oqpo.api.entity.settmng.StlMgntDtlPtclEntity;
- import com.oqpo.api.entity.stinfo.StoreBaseInfoEntity;
- import com.oqpo.api.entity.stockmng.WhsProcInfoPtclEntity;
- import com.oqpo.api.enums.*;
- import com.oqpo.api.mapper.loanmng.DsptMngMapper;
- import com.oqpo.api.mapper.oper.UserMngMapper;
- import com.oqpo.api.mapper.stinfo.StoreBaseInfoMapper;
- import com.oqpo.api.mapper.sttlmng.SttlReqMapper;
- import com.oqpo.api.service.CommonService;
- import com.oqpo.api.util.DateUtil;
- import com.oqpo.api.util.StringUtil;
- import com.oqpo.api.web.dto.request.GridRequest;
- import com.oqpo.api.web.dto.request.loanmng.ApproveDsptRequest;
- import com.oqpo.api.web.dto.request.sttlmng.SttlReqData;
- import com.oqpo.api.web.dto.request.sttlmng.SttlReqProcData;
- import com.oqpo.api.web.dto.request.sttlmng.SttlReqProcRequest;
- import com.oqpo.api.web.dto.request.sttlmng.SttlReqRequest;
- import com.oqpo.api.web.dto.response.GridResponse;
- import com.oqpo.api.web.dto.response.loanmng.StlDtlListResponse;
- import com.oqpo.api.web.dto.response.sttlmng.SttlMngInfoResponse;
- import com.oqpo.api.web.dto.response.sttlmng.SttlReqResponse;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.List;
- import java.util.stream.Collectors;
- @Service
- @Slf4j
- public class SttlReqService extends CommonService {
- @Autowired
- private SttlReqMapper sttlReqMapper;
- @Autowired
- private UserMngMapper userMngMapper;
- @Autowired
- private StoreBaseInfoMapper storeBaseInfoMapper;
- @Autowired
- private DsptMngMapper dsptMngMapper;
- /*
- 정산요청 그리드 리스트 조회
- */
- public GridResponse selectSttlReqGridList(String sBrandId, String sStoreId, String sSpplyId, String sItemNm, String fromDt, String toDt, GridRequest gridRequest) throws Exception {
- int gridPage = gridRequest.getGridPage();
- int gridSize = gridRequest.getGridSize();
- fromDt = fromDt == null ? null : fromDt.replace(".", "");
- toDt = toDt == null ? null : toDt.replace(".", "");
- int gridRecords = sttlReqMapper.selectSttlReqGridCnt(sBrandId, sStoreId, sSpplyId, sItemNm, fromDt, toDt);
- int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
- List<StlMgntDtlPtclEntity> entities = sttlReqMapper.selectSttlReqGridList(sBrandId, sStoreId, sSpplyId, sItemNm, fromDt, toDt, gridRequest);
- List<Object> gridRows = entities.stream()
- .map(m -> StlDtlListResponse.builder()
- .viewCd("R")
- .sttlMgntUnqNo(m.getSttlMgntUnqNo()) /* 정산관리고유번호 */
- .sttlMgntDtlNo(m.getSttlMgntDtlNo()) /* 정산관리상세번호 */
- .brandId(m.getBrandId())
- .brandNm(m.getBrandNm())
- .storeId(m.getStoreId())
- .storeNm(m.getStoreNm())
- .spplyId(m.getSpplyId())
- .spplyNm(m.getSpplyNm())
- .loanDvsn(m.getLoanDvsn()) /* 여신구분 : 선불/후불/무정산 */
- .loanDvsnNm(m.getLoanDvsnNm())
- .sttlStCd(m.getSttlStCd()) /* 정산상태코드 */
- .sttlStNm(m.getSttlStNm()) /* 정산상태명 */
- .itemId(m.getItemId())
- .itemNm(m.getItemNm())
- .unit(m.getUnit())
- .unitAmt(m.getUnitAmt())
- .podrQty(m.getPodrQty()) /* 발주수량 */
- .dlvQty(m.getDlvQty()) /* 납품수량 */
- .whsColQty(m.getWhsColQty()) /* 입고/수거수량 */
- .whsColDt(m.getWhsColDt()) /* 입고/수거일자 */
- .whsColAmt(m.getWhsColAmt()) /* 입고/수거금액 */
- .sttlDvsn(m.getSttlDvsn()) /* 정산구분 : 수거/입고 */
- .sttlDvsnNm(m.getSttlDvsnNm()) /* 정산구분명 */
- .podrUnqNo(m.getPodrUnqNo()) /* 구매발주고유번호 */
- .podrDtlNo(m.getPodrDtlNo()) /* 구매발주상세번호 */
- .mgntUnqNo(m.getMgntUnqNo()) /* 입고/반품관리고유번호 */
- .build())
- .collect(Collectors.toList());
- return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
- }
- /* 정산요청 */
- @Transactional
- public SttlReqResponse requestSttl(String userId, SttlReqRequest sttlReqRequest) throws Exception {
- // 사용자 정보 조회
- UserMngEntity user = userMngMapper.selectUserInfo(userId);
- // 정산관리고유번호(STTL_MGNT_UNQ_NO) 채번
- String sttlMgntUnqNo = fnGetDealNo(37, "");
- List<SttlReqData> sttlReqDataList = sttlReqRequest.getSttlReqDataList();
- int idx = 1; // 정산관리상세번호
- long sttlReqAmt = 0; // 정산요청금액
- for (SttlReqData item : sttlReqDataList) {
- // 기존 정산 요청건인 경우 정산상태를 체크한다.
- if (!StringUtil.isEmpty(item.getSttlMgntUnqNo()) && !StringUtil.isEmpty(item.getSttlMgntDtlNo())) {
- StlMgntDtlPtclEntity dtlPtcl = sttlReqMapper.selectStlMgntDtlPtcl(item.getSttlMgntUnqNo(), item.getSttlMgntDtlNo());
- // 정산요청/정산확정된 경우 제외함
- if (SttlStCd.STTL_REQ.getCd().equals(dtlPtcl.getSttlStCd()) || SttlStCd.STTL_CONFIRM.getCd().equals(dtlPtcl.getSttlStCd())) {
- continue;
- }
- }
- // 입고/수거에 따라 데이터 조회
- if (SttlDvsn.WHS.getCd().equals(item.getSttlDvsn())) {
- WhsProcInfoPtclEntity procInfo = sttlReqMapper.selectWhsProcInfoPtcl(item.getMgntUnqNo());
- // 입고 데이터 업데이트
- procInfo.setSttlMgntUnqNo(sttlMgntUnqNo);
- procInfo.setSttlMgntDtlNo(idx + "");
- sttlReqMapper.updateWhsProcInfoPtcl4SttlReq(userId, procInfo);
- // 정산요청금액
- sttlReqAmt += procInfo.getWhsAmt(); // 입고금액
- // 정산관리상세내역 저장
- StlMgntDtlPtclEntity entity = new StlMgntDtlPtclEntity();
- entity.setSttlMgntUnqNo(sttlMgntUnqNo); // 정산관리고유번호
- entity.setSttlMgntDtlNo(idx + ""); // 정산관리상세번호
- entity.setBrandId(procInfo.getBrandId()); // 브랜드아이디
- entity.setWhsMgntUnqNo(procInfo.getWhsMgntUnqNo()); // 입고관리고유번호
- entity.setStoreId(procInfo.getStoreId()); // 매장아이디
- entity.setSpplyId(procInfo.getSpplyId()); // TODO 공급사아이디
- entity.setItemId(procInfo.getItemId()); // 품목아이디
- entity.setItemNm(procInfo.getItemNm()); // 품목명
- entity.setUnit(procInfo.getUnit()); // 단위
- entity.setUnitAmt(procInfo.getUnitAmt().longValue()); // 단가금액
- entity.setPodrQty(procInfo.getPodrQty()); // 발주수량
- entity.setDlvQty(procInfo.getDlvQty()); // 납품수량
- entity.setWhsQty(procInfo.getWhsQty()); // 입고수량
- entity.setDlvCmpltDt(procInfo.getDlvCmpltDt()); // 납품완료일자
- entity.setWhsAmt(procInfo.getWhsAmt().longValue()); // 입고금액
- entity.setSttlDvsn(SttlDvsn.WHS.getCd()); // 정산구분 - 입고
- entity.setPchPodrUnqNo(procInfo.getPchPodrUnqNo()); // 구매발주고유번호
- entity.setPchPodrDtlNo(procInfo.getPchPodrDtlNo()); // 구매발주상세번호
- entity.setPchReqUnqNo(procInfo.getPchReqUnqNo()); // 구매요청고유번호
- entity.setPchReqDtlNo(procInfo.getPchReqDtlNo()); // 구매요청상세번호
- sttlReqMapper.insertStlMgntDtlPtcl(userId, entity);
- } else if (SttlDvsn.RTN.getCd().equals(item.getSttlDvsn())) {
- RtnProcInfoPtclEntity procInfo = sttlReqMapper.selectRtnProcInfoPtcl(item.getMgntUnqNo());
- // 수거 데이터 업데이트
- procInfo.setSttlMgntUnqNo(sttlMgntUnqNo);
- procInfo.setSttlMgntDtlNo(idx + "");
- sttlReqMapper.updateRtnProcInfoPtcl4SttlReq(userId, procInfo);
- // 정산요청금액
- sttlReqAmt += procInfo.getColAmt(); // 수거금액
- // 정산관리상세내역 저장
- StlMgntDtlPtclEntity entity = new StlMgntDtlPtclEntity();
- entity.setSttlMgntUnqNo(sttlMgntUnqNo); // 정산관리고유번호
- entity.setSttlMgntDtlNo(idx + ""); // 정산관리상세번호
- entity.setBrandId(procInfo.getBrandId()); // 브랜드아이디
- entity.setRtnMgntUnqNo(procInfo.getRtnMgntUnqNo()); // 반품관리고유번호
- entity.setStoreId(procInfo.getStoreId()); // 매장아이디
- entity.setSpplyId(procInfo.getSpplyId()); // TODO 공급사아이디
- entity.setItemId(procInfo.getItemId()); // 품목아이디
- entity.setItemNm(procInfo.getItemNm()); // 품목명
- entity.setUnit(procInfo.getUnit()); // 단위
- entity.setUnitAmt(procInfo.getUnitAmt()); // 단가금액
- entity.setColQty(procInfo.getColQty()); // 수거수량
- entity.setColDt(procInfo.getColDt()); // 수거일자
- entity.setColAmt(procInfo.getColAmt()); // 수거금액
- entity.setSttlDvsn(SttlDvsn.RTN.getCd()); // 정산구분 - 수거
- entity.setRtnPodrUnqNo(procInfo.getRtnPodrUnqNo()); // 반품발주고유번호
- entity.setRtnPodrDtlNo(procInfo.getRtnPodrDtlNo()); // 반품발주상세번호
- entity.setRtnReqUnqNo(procInfo.getRtnReqUnqNo()); // 반품요청고유번호
- entity.setRtnReqDtlNo(procInfo.getRtnReqDtlNo()); // 반품요청상세번호
- sttlReqMapper.insertStlMgntDtlPtcl(userId, entity);
- }
- idx++;
- }
- // 정산관리기본정보 저장
- StlMgntBaseInfoEntity baseInfo = new StlMgntBaseInfoEntity();
- baseInfo.setSttlMgntUnqNo(sttlMgntUnqNo);
- baseInfo.setBrandId(sttlReqRequest.getBrandId());
- baseInfo.setStoreId(sttlReqRequest.getStoreId());
- baseInfo.setSpplyId(sttlReqRequest.getSpplyId()); // TODO 공급사아이디
- baseInfo.setSttlStCd(SttlStCd.TEMP_SAVE.getCd());
- baseInfo.setSttlReqAmt(sttlReqAmt);
- baseInfo.setSttlRegMgrId(userId);
- baseInfo.setSttlRegMgrNm(user.getUserNm());
- if (!StringUtil.isEmpty(sttlReqRequest.getStoreId())) {
- baseInfo.setSttlTargetCd(SttlTargetCd.STORE_STTL.getCd()); // 매장정산
- } else if (!StringUtil.isEmpty(sttlReqRequest.getSpplyId())) {
- baseInfo.setSttlTargetCd(SttlTargetCd.SUPPLY_STTL.getCd()); // 공급사정산
- }
- sttlReqMapper.insertStlMgntBaseInfo(userId, baseInfo);
- return SttlReqResponse.toDTO(baseInfo);
- }
- /* 정산요청 처리 */
- @Transactional
- public void procSttlRequest(String userId, SttlReqProcRequest sttlReqProcRequest) throws Exception {
- if (!StringUtil.isEmpty(sttlReqProcRequest.getStoreId())) { // 매장 정산
- procSttlRequest4Store(userId, sttlReqProcRequest);
- } else if (!StringUtil.isEmpty(sttlReqProcRequest.getSpplyId())) { // 공급사 정산
- // 공급사 정산은 후불로 조치한다.
- procSttlRequest4Spply(userId, sttlReqProcRequest);
- }
- }
- private void procSttlRequest4Spply(String userId, SttlReqProcRequest sttlReqProcRequest) throws Exception {
- StlMgntBaseInfoEntity baseInfo = new StlMgntBaseInfoEntity();
- baseInfo.setSttlMgntUnqNo(sttlReqProcRequest.getSttlMgntUnqNo());
- baseInfo.setSttlStCd(SttlStCd.STTL_REQ.getCd());
- baseInfo.setSttlReqDt(sttlReqProcRequest.getSttlReqDt().replace(".", ""));
- baseInfo.setSttlDt(null);
- baseInfo.setSttlAmt(null);
- sttlReqMapper.updateStlMgntBaseInfo4SttlReqProc(userId, baseInfo);
- }
- private void procSttlRequest4Store(String userId, SttlReqProcRequest sttlReqProcRequest) throws Exception {
- // 매장 정산타입 조회
- StoreBaseInfoEntity storeInfo = storeBaseInfoMapper.selectStoreInfo(sttlReqProcRequest.getBrandId(), sttlReqProcRequest.getStoreId());
- long sttlAmt = 0; // 정산금액
- // 정산타입에 따라
- if (LoanDvsn.PRE_PAYMENT.getCd().equals(storeInfo.getLoanDvsn())) {
- // 1. 선불
- // 정산관리상세내역 처리
- List<SttlReqProcData> list = sttlReqProcRequest.getSttlReqDataList();
- for (SttlReqProcData item : list) {
- // 정산관리상세내역 조회
- StlMgntDtlPtclEntity dtlPtcl = sttlReqMapper.selectStlMgntDtlPtcl(sttlReqProcRequest.getSttlMgntUnqNo(), item.getSttlMgntDtlNo());
- // 정산금액
- sttlAmt += dtlPtcl.getWhsColAmt();
- // 정산구분에 따라 처리 (STTL_DVSN)
- if (SttlDvsn.WHS.getCd().equals(dtlPtcl.getSttlDvsn())) { // 입고
- // 입고처리정보내역 업데이트
- sttlReqMapper.updateWhsProcInfoPtcl4SttlReqProc(userId, dtlPtcl);
- } else if (SttlDvsn.RTN.getCd().equals(dtlPtcl.getSttlDvsn())) { // 수거
- // 반품처리정보내역 업데이트
- sttlReqMapper.updateRtnProcInfoPtcl4SttlReqProc(userId, dtlPtcl);
- }
- }
- // 여신관리기본정보(매장) 차감 : loan_mgnt_base_info
- // 매장의 여신관리기본정보 조회 - 없으면 에러 처리
- LoanMgntBaseInfoEntity loanBase = dsptMngMapper.selectLoanMgntBaseInfo(sttlReqProcRequest.getBrandId(), sttlReqProcRequest.getStoreId());
- long trscBfBal = loanBase.getAcctBal();
- long trscAfBal = loanBase.getAcctBal() - sttlAmt; // 잔액에서 입고/수거금액 차감
- long useAmtTotal = loanBase.getUseAmtTotal() - sttlAmt; // 사용금액합계에서 입고/수거금액 차감
- loanBase.setAcctBal(trscAfBal);
- loanBase.setUseAmtTotal(useAmtTotal);
- sttlReqMapper.updateLoanMgntBaseInfo4SttlReqProc(userId, loanBase);
- // 여신관리상세이력 등록 (지급/대체/정산지급)
- // 여신관리상세이력 등록
- LoanMgntDtlHstEntity hstEntity = new LoanMgntDtlHstEntity();
- hstEntity.setLoanMgntUnqNo(storeInfo.getLoanMgntUnqNo());
- hstEntity.setLoanRegDt(DateUtil.getCurrentDate());
- hstEntity.setLoanRegTm(DateUtil.getCurrentTime());
- hstEntity.setDpstPayDvsn(DpstPayDvsn.PAYMENT.getCd());
- hstEntity.setMediaDvsn(MediaDvsn.SETTLMENT.getCd());
- hstEntity.setPayType(PayType.STTL_PAY.getCd());
- hstEntity.setTrscAmt(sttlAmt); // 거래금액
- hstEntity.setPaymAmt(sttlAmt); // 지급금액
- hstEntity.setTrscBfBal(trscBfBal);
- hstEntity.setTrscAfBal(trscAfBal);
- dsptMngMapper.insertLoanMgntDtlHst(userId, hstEntity);
- } else if (LoanDvsn.POST_PAYMENT.getCd().equals(storeInfo.getLoanDvsn())) {
- // 2. 후불
- // 정산상태코드만 변경하고 매장에서 정상확정시 여신처리를 한다.
- }
- // 정산관리기본정보 업데이트 (정산상태코드)
- // 정산타입에 따라
- if (LoanDvsn.PRE_PAYMENT.getCd().equals(storeInfo.getLoanDvsn())) {
- StlMgntBaseInfoEntity baseInfo = new StlMgntBaseInfoEntity();
- baseInfo.setSttlMgntUnqNo(sttlReqProcRequest.getSttlMgntUnqNo());
- baseInfo.setSttlStCd(SttlStCd.STTL_CONFIRM.getCd());
- baseInfo.setSttlReqDt(sttlReqProcRequest.getSttlReqDt().replace(".", ""));
- baseInfo.setSttlDt(DateUtil.getCurrentDate());
- baseInfo.setSttlAmt(sttlAmt);
- sttlReqMapper.updateStlMgntBaseInfo4SttlReqProc(userId, baseInfo);
- } else if (LoanDvsn.POST_PAYMENT.getCd().equals(storeInfo.getLoanDvsn())) {
- StlMgntBaseInfoEntity baseInfo = new StlMgntBaseInfoEntity();
- baseInfo.setSttlMgntUnqNo(sttlReqProcRequest.getSttlMgntUnqNo());
- baseInfo.setSttlStCd(SttlStCd.STTL_REQ.getCd());
- baseInfo.setSttlReqDt(sttlReqProcRequest.getSttlReqDt().replace(".", ""));
- baseInfo.setSttlDt(null);
- baseInfo.setSttlAmt(null);
- sttlReqMapper.updateStlMgntBaseInfo4SttlReqProc(userId, baseInfo);
- }
- }
- /* 정산요청 정보 조회 */
- public SttlMngInfoResponse selectSttlReqInfo(String sttlMgntUnqNo) throws Exception {
- StlMgntBaseInfoEntity entity = sttlReqMapper.selectStlMgntBaseInfo(sttlMgntUnqNo);
- return SttlMngInfoResponse.toDTO(entity);
- }
- /*
- 정산대상내역 그리드 리스트 조회
- */
- public GridResponse selectStlDtlGridList(String sttlMgntUnqNo, GridRequest gridRequest) throws Exception {
- int gridPage = gridRequest.getGridPage();
- int gridSize = gridRequest.getGridSize();
- List<StlMgntDtlPtclEntity> entities = sttlReqMapper.selectStlMgntDtlPtclList(sttlMgntUnqNo);
- int gridRecords = entities.size();
- int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
- List<Object> gridRows = entities.stream()
- .map(m -> StlDtlListResponse.builder()
- .viewCd("R")
- .sttlMgntUnqNo(m.getSttlMgntUnqNo())
- .sttlMgntDtlNo(m.getSttlMgntDtlNo())
- .brandId(m.getBrandId())
- .brandNm(m.getBrandNm())
- .whsMgntUnqNo(m.getWhsMgntUnqNo())
- .rtnMgntUnqNo(m.getRtnMgntUnqNo())
- .storeId(m.getStoreId())
- .storeNm(m.getStoreNm())
- .itemId(m.getItemId())
- .itemNm(m.getItemNm())
- .unit(m.getUnit())
- .unitAmt(m.getUnitAmt())
- .podrQty(m.getPodrQty())
- .dlvQty(m.getDlvQty())
- .whsQty(m.getWhsQty())
- .colQty(m.getColQty())
- .whsColQty(m.getWhsColQty()) /* 입고/수거수량 */
- .dlvCmpltDt(m.getDlvCmpltDt())
- .colDt(m.getColDt())
- .whsColDt(m.getWhsColDt()) /* 입고/수거일자 */
- .whsAmt(m.getWhsAmt())
- .colAmt(m.getColAmt())
- .whsColAmt(m.getWhsColAmt()) /* 입고/수거금액 */
- .sttlDvsn(m.getSttlDvsn())
- .sttlDvsnNm(m.getSttlDvsnNm())
- .podrUnqNo(m.getPodrUnqNo()) /* 발주번호 */
- .podrDtlNo(m.getPodrDtlNo()) /* 발주항번 */
- .pchReqUnqNo(m.getPchReqUnqNo())
- .pchReqDtlNo(m.getPchReqDtlNo())
- .rtnPodrUnqNo(m.getRtnPodrUnqNo())
- .rtnPodrDtlNo(m.getRtnPodrDtlNo())
- .rtnReqUnqNo(m.getRtnReqUnqNo())
- .rtnReqDtlNo(m.getRtnReqDtlNo())
- .sysRegDttm(m.getSysRegDttm())
- .sysRegId(m.getSysRegId())
- .sysChgDttm(m.getSysChgDttm())
- .sysChgId(m.getSysChgId())
- .build())
- .collect(Collectors.toList());
- return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
- }
- }
|