PchReqService.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. package com.oqpo.api.service.pomng;
  2. import com.oqpo.api.entity.loanmng.LoanMgntBaseInfoEntity;
  3. import com.oqpo.api.entity.oper.UserMngEntity;
  4. import com.oqpo.api.entity.pomng.PchReqBaseInfoEntity;
  5. import com.oqpo.api.entity.pomng.PchReqDtlPtclEntity;
  6. import com.oqpo.api.entity.stinfo.BrandEntity;
  7. import com.oqpo.api.entity.stockmng.WhsMgntBaseInfoEntity;
  8. import com.oqpo.api.enums.SystemMessageCode;
  9. import com.oqpo.api.exception.GlobalException;
  10. import com.oqpo.api.mapper.loanmng.LoanStateMapper;
  11. import com.oqpo.api.mapper.oper.UserMngMapper;
  12. import com.oqpo.api.mapper.pomng.PchReqMapper;
  13. import com.oqpo.api.mapper.stinfo.BrandMapper;
  14. import com.oqpo.api.mapper.stockmng.WhsMngMapper;
  15. import com.oqpo.api.service.CommonService;
  16. import com.oqpo.api.util.DateUtil;
  17. import com.oqpo.api.web.dto.request.GridRequest;
  18. import com.oqpo.api.web.dto.request.pomng.pchReq.PchReqInitInfoRequest;
  19. import com.oqpo.api.web.dto.request.pomng.pchReq.SavePchReqlRequest;
  20. import com.oqpo.api.web.dto.response.GridResponse;
  21. import com.oqpo.api.web.dto.response.pomng.pchReq.*;
  22. import lombok.extern.slf4j.Slf4j;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import java.util.ArrayList;
  27. import java.util.List;
  28. import java.util.stream.Collectors;
  29. @Service
  30. @Slf4j
  31. public class PchReqService extends CommonService {
  32. @Autowired
  33. private PchReqMapper pchReqMapper;
  34. @Autowired
  35. private UserMngMapper userMngMapper;
  36. @Autowired
  37. private LoanStateMapper loanStateMapper;
  38. @Autowired
  39. private BrandMapper brandMapper;
  40. @Autowired
  41. private WhsMngMapper whsMngMapper;
  42. /* 구매요청 초기 정보 */
  43. public PchReqInitInfoResponse selectPchReqInitInfo(String userId, PchReqInitInfoRequest pchReqInitInfoRequest) throws Exception {
  44. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  45. BrandEntity brandEntity = new BrandEntity();
  46. LoanMgntBaseInfoEntity loanEntity = new LoanMgntBaseInfoEntity();
  47. List<WhsMgntBaseInfoEntity> whsMgntList = new ArrayList<WhsMgntBaseInfoEntity>();
  48. WhsMgntBaseInfoEntity whsEntity = new WhsMgntBaseInfoEntity();
  49. if ("30".equals(uEntity.getAuthTpCd())) { // 가맹점
  50. // 브랜드 정보 request 로 받아서 브랜드정보 가져와 넣어줌
  51. brandEntity = brandMapper.selectBrandNmInfo(pchReqInitInfoRequest.getBrandId());
  52. uEntity.setBrandId(pchReqInitInfoRequest.getBrandId());
  53. uEntity.setBrandNm(brandEntity.getBrandNm());
  54. } else if ("40".equals(uEntity.getAuthTpCd())) { // 브랜드
  55. // 무시
  56. } else if ("50".equals(uEntity.getAuthTpCd())) { // 매장
  57. // 여신정보 와 창고정보를 가져와 넣어줌
  58. loanEntity = loanStateMapper.selectLoanJobDataInfo(uEntity.getStoreId());
  59. //납품창고 정보 가져오기 selectStoreWhsLocList
  60. whsMgntList = whsMngMapper.selectStoreWhsLocList(uEntity.getBrandId(), uEntity.getStoreId());
  61. if (whsMgntList.size() == 1) {
  62. whsEntity = whsMgntList.get(0);
  63. }
  64. } else {
  65. // 브랜드 정보 request 로 받아서 브랜드정보 가져와 넣어줌
  66. brandEntity = brandMapper.selectBrandNmInfo(pchReqInitInfoRequest.getBrandId());
  67. uEntity.setBrandId(pchReqInitInfoRequest.getBrandId());
  68. uEntity.setBrandNm(brandEntity.getBrandNm());
  69. }
  70. return PchReqInitInfoResponse.toDTO(uEntity,loanEntity,whsEntity);
  71. }
  72. /*
  73. 구매요청 그리드 리스트 조회
  74. */
  75. public GridResponse selectPchReqGridList(String userId, String sBrandId, String sStoreId, String fromDt, String toDt, String sWhsId, String sPchReqStCd, String sItemNm, GridRequest gridRequest) throws Exception {
  76. int gridPage = gridRequest.getGridPage();
  77. int gridSize = gridRequest.getGridSize();
  78. // 로그인자 권한이 50 이면 매장 아이디 필수로 넘어와야함
  79. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  80. if ("50".equals(uEntity.getAuthTpCd())) {
  81. if ("".equals(sStoreId)) {
  82. throw new GlobalException(SystemMessageCode.ERR_NONSTOREID);
  83. }
  84. if (!sBrandId.equals(uEntity.getBrandId())) {
  85. throw new GlobalException(SystemMessageCode.ERR_NOTBRANDBELONG);
  86. }
  87. if (!sStoreId.equals(uEntity.getStoreId())) {
  88. throw new GlobalException(SystemMessageCode.ERR_NOTSTOREBELONG);
  89. }
  90. } else if ("40".equals(uEntity.getAuthTpCd())){
  91. if (!sBrandId.equals(uEntity.getBrandId())) {
  92. throw new GlobalException(SystemMessageCode.ERR_NOTBRANDBELONG);
  93. }
  94. }
  95. fromDt = fromDt == null ? null : fromDt.replace(".", "");
  96. toDt = toDt == null ? null : toDt.replace(".", "");
  97. int gridRecords = pchReqMapper.selectPchReqGridCnt( sBrandId,sStoreId, fromDt, toDt, sWhsId,sPchReqStCd, sItemNm );
  98. int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
  99. List<PchReqBaseInfoEntity> entities = pchReqMapper.selectPchReqGridList( sBrandId, sStoreId, fromDt, toDt, sWhsId,sPchReqStCd, sItemNm, gridRequest);
  100. List<Object> gridRows = entities.stream()
  101. .map(m -> PchReqSearchListResponse.builder()
  102. .viewCd("R")
  103. .pchReqUnqNo(m.getPchReqUnqNo())
  104. .brandId(m.getBrandId())
  105. .brandNm(m.getBrandNm())
  106. .storeId(m.getStoreId() == null ? "" : m.getStoreId())
  107. .pchReqNm(m.getPchReqNm() == null ? "" :m.getPchReqNm() )
  108. .pchReqStCd(m.getPchReqStCd() == null ? "" : m.getPchReqStCd())
  109. .pchReqStNm(m.getPchReqStNm() == null ? "" : m.getPchReqStNm())
  110. .pchReqDt(m.getPchReqDt() == null ? "" : m.getPchReqDt())
  111. .pchReqItemQty(m.getPchReqItemQty() == null ? 0 : m.getPchReqItemQty())
  112. .pchReqTotalAmt(m.getPchReqTotalAmt() == null ? 0 : m.getPchReqTotalAmt())
  113. .pchReqRjctDt(m.getPchReqRjctDt() == null ? "" :m.getPchReqRjctDt() )
  114. .pchReqRjctNm(m.getPchReqRjctNm() == null ? "" : m.getPchReqRjctNm())
  115. .pchReqMgrNm(m.getPchReqMgrNm() == null ? "" :m.getPchReqMgrNm() )
  116. .dlvReqDt(m.getDlvReqDt() == null ? "" :m.getDlvReqDt() )
  117. .whsLocationNm(m.getWhsNm() == null ? "" : m.getWhsNm() + "-" + m.getLocationNm())
  118. .build())
  119. .collect(Collectors.toList());
  120. return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
  121. }
  122. /* 구매요청 정보 */
  123. public PchReqInfoResponse selectPchReqInfo(String userId, String brandId, String pchReqUnqNo) throws Exception {
  124. // 로그인자 권한이 50 이면 매장 아이디 필수로 넘어와야함
  125. String storeId = "";
  126. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  127. if ("50".equals(uEntity.getAuthTpCd())) {
  128. if (!brandId.equals(uEntity.getBrandId())) {
  129. throw new GlobalException(SystemMessageCode.ERR_NOTBRANDBELONG);
  130. }
  131. storeId = uEntity.getStoreId();
  132. } else if ("40".equals(uEntity.getAuthTpCd())){
  133. if (!brandId.equals(uEntity.getBrandId())) {
  134. throw new GlobalException(SystemMessageCode.ERR_NOTBRANDBELONG);
  135. }
  136. }
  137. PchReqBaseInfoEntity entity = pchReqMapper.selectPchReqInfo(brandId, storeId, pchReqUnqNo);
  138. List<PchReqDtlPtclEntity> dtlEntity = pchReqMapper.selectPchReqDtlPtcl(brandId, pchReqUnqNo);
  139. //구매요청 기본정보
  140. UserMngEntity uiEntity = userMngMapper.selectGroupUserInfo(entity.getPchReqMgrId());
  141. LoanMgntBaseInfoEntity loanEntity = new LoanMgntBaseInfoEntity();
  142. if ("50".equals(uiEntity.getAuthTpCd())) {
  143. loanEntity = loanStateMapper.selectLoanJobDataInfo(entity.getPchReqMgrId());
  144. }
  145. return PchReqInfoResponse.toDTO(entity,uiEntity,loanEntity, dtlEntity );
  146. }
  147. /* 구매요청 저장 */
  148. @Transactional
  149. public void savePchReqInfo(String userId, SavePchReqlRequest savePchReqlRequest) throws Exception {
  150. try {
  151. // 로그인자 권한이 50 이면 매장 아이디 필수로 넘어와야함
  152. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  153. String userNm = uEntity.getUserNm();
  154. // 로그인자 권한이 50 이면 매장 아이디 필수로 넘어와야함
  155. if ("50".equals(uEntity.getAuthTpCd())) {
  156. if ("".equals(savePchReqlRequest.getStoreId())) {
  157. throw new GlobalException(SystemMessageCode.ERR_NONSTOREID);
  158. }
  159. if (!savePchReqlRequest.getBrandId().equals(uEntity.getBrandId())) {
  160. throw new GlobalException(SystemMessageCode.ERR_NOTBRANDBELONG);
  161. }
  162. if (!savePchReqlRequest.getStoreId().equals(uEntity.getStoreId())) {
  163. throw new GlobalException(SystemMessageCode.ERR_NOTSTOREBELONG);
  164. }
  165. } else if ("40".equals(uEntity.getAuthTpCd())){
  166. if (!savePchReqlRequest.getBrandId().equals(uEntity.getBrandId())) {
  167. throw new GlobalException(SystemMessageCode.ERR_NOTBRANDBELONG);
  168. }
  169. }
  170. PchReqBaseInfoEntity entity = new PchReqBaseInfoEntity();
  171. entity.setPchReqUnqNo(savePchReqlRequest.getPchReqUnqNo());
  172. entity.setBrandId(savePchReqlRequest.getBrandId());
  173. entity.setStoreId(savePchReqlRequest.getStoreId());
  174. entity.setPchReqNm(savePchReqlRequest.getPchReqNm());
  175. entity.setNote(savePchReqlRequest.getNote());
  176. entity.setDlvReqDt(savePchReqlRequest.getDlvReqDt().replaceAll("\\.",""));
  177. entity.setWhsId(savePchReqlRequest.getWhsId());
  178. entity.setPchReqStCd(savePchReqlRequest.getPchReqStCd());
  179. entity.setLocation(savePchReqlRequest.getLocation());
  180. entity.setPchReqDvsn(savePchReqlRequest.getPchReqDvsn());
  181. entity.setPchReqMgrNm(uEntity.getUserNm());
  182. if (savePchReqlRequest.getStoreId() == null || "".equals(savePchReqlRequest.getStoreId())) {
  183. entity.setPchReqDept(savePchReqlRequest.getBrandId());
  184. } else {
  185. entity.setPchReqDept(savePchReqlRequest.getStoreId());
  186. }
  187. if ("C".equals(savePchReqlRequest.getViewCd())) {
  188. // 구매요청 아이디 부여
  189. entity.setPchReqUnqNo(fnGetDealNo(13,"")); // 구매요청번호 생성
  190. }
  191. // 품목 삭제 처리
  192. List<PchReqDtlPtclEntity> gridDeleteData = savePchReqlRequest.toCodeEntities(savePchReqlRequest.getGridDeleteData());
  193. if (gridDeleteData.size() > 0) {
  194. pchReqMapper.deletePchReqDtlPtcl(entity.getPchReqUnqNo(), gridDeleteData) ;
  195. }
  196. // 품목 수정 처리
  197. List<PchReqDtlPtclEntity> gridUpdateData = savePchReqlRequest.toCodeEntities(savePchReqlRequest.getGridUpdateData());
  198. if (gridUpdateData.size() > 0) {
  199. pchReqMapper.updatePchReqDtlPtcl(userId, entity.getPchReqUnqNo(), gridUpdateData) ;
  200. }
  201. // 품목 등록 처리
  202. List<PchReqDtlPtclEntity> gridInsertData = savePchReqlRequest.toCodeEntities(savePchReqlRequest.getGridInsertData());
  203. if (gridInsertData.size() > 0) {
  204. int maxDtlNo = pchReqMapper.selectMaxPchReqDtlNo(entity.getPchReqUnqNo());
  205. for (int i = 0 ; i < gridInsertData.size() ; i++) {
  206. maxDtlNo = maxDtlNo + 10 ;
  207. gridInsertData.get(i).setPchReqUnqNo(entity.getPchReqUnqNo());
  208. gridInsertData.get(i).setPchReqDtlNo( Integer.toString(maxDtlNo ));
  209. }
  210. pchReqMapper.insertPchReqDtlPtcl(userId, gridInsertData) ;
  211. }
  212. PchReqBaseInfoEntity sumData = pchReqMapper.selectSumReqAmt(entity.getPchReqUnqNo());
  213. // 구매요청(PR20)일경우 여신의 사용금액에 추가처리함 비교로직도 필요함
  214. if ("PD01".equals(entity.getPchReqDvsn()) && "PR20".equals(entity.getPchReqStCd())) {
  215. LoanMgntBaseInfoEntity loanMgnInfo = loanStateMapper.selectLoanJobDataInfo(entity.getStoreId());
  216. if (loanMgnInfo.getOrdUseAmt() < sumData.getPchReqTotalAmt()) {
  217. throw new GlobalException(SystemMessageCode.ERR_PCHREQAMTOVER);
  218. }
  219. loanStateMapper.updateloanPchReqUseAmt(savePchReqlRequest.getLoanMgntUnqNo(), entity.getStoreId(), sumData.getPchReqTotalAmt());
  220. if ("LD01".equals(loanMgnInfo.getLoanDvsn())) { // 선불일경우 선결재금액 입력
  221. entity.setPchApprAmt(sumData.getPchReqTotalAmt());
  222. }
  223. }
  224. entity.setPchReqItemQty(sumData.getPchReqItemQty());
  225. entity.setPchReqTotalAmt(sumData.getPchReqTotalAmt());
  226. if ("C".equals(savePchReqlRequest.getViewCd())) {
  227. if ("".equals(entity.getPchReqNm())) {
  228. entity.setPchReqNm(userNm + " " + DateUtil.getCurrentDate() + DateUtil.getCurrentTime() + " " + gridInsertData.size());
  229. }
  230. entity.setPchReqMgrId(userId);
  231. entity.setPchReqMgrNm(userNm);
  232. pchReqMapper.insertPchReqBaseInfo(userId, userNm, entity);
  233. } else if ("U".equals(savePchReqlRequest.getViewCd())) {
  234. pchReqMapper.updateOrdPchReqBaseInfo(userId, userNm, entity);
  235. }
  236. } catch (GlobalException e) {
  237. e.getStackTrace();
  238. throw new GlobalException(e.getSystemMessageCode());
  239. } catch (Exception e) {
  240. e.getStackTrace();
  241. throw new RuntimeException();
  242. }
  243. }
  244. /*
  245. 구매요청 그리드 리스트 조회
  246. */
  247. public GridResponse selectPchReqPoTargetGridList(String sBrandId, String fromDt, String toDt, String sSpplyId, String sWhsId, String sItemNm, GridRequest gridRequest) throws Exception {
  248. int gridPage = gridRequest.getGridPage();
  249. int gridSize = gridRequest.getGridSize();
  250. fromDt = fromDt == null ? null : fromDt.replace(".", "");
  251. toDt = toDt == null ? null : toDt.replace(".", "");
  252. int gridRecords = pchReqMapper.selectPchReqPoTargetGridCnt( sBrandId,fromDt, toDt, sSpplyId, sWhsId, sItemNm );
  253. int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
  254. List<PchReqBaseInfoEntity> entities = pchReqMapper.selectPchReqPoTargetGridList( sBrandId,fromDt, toDt, sSpplyId, sWhsId, sItemNm, gridRequest);
  255. List<Object> gridRows = entities.stream()
  256. .map(m -> PchReqPoTargetSearchListResponse.builder()
  257. .viewCd("R")
  258. .pchReqUnqNo(m.getPchReqUnqNo())
  259. .pchReqDtlNo(m.getPchReqDtlInfo() == null ? "" : m.getPchReqDtlInfo().getPchReqDtlNo() == null ? "" : m.getPchReqDtlInfo().getPchReqDtlNo() )
  260. .brandId(m.getBrandId() == null ? "" : m.getBrandId())
  261. .brandNm(m.getBrandNm() == null ? "" : m.getBrandNm())
  262. .storeId(m.getStoreId() == null ? "" : m.getStoreId())
  263. .storeNm(m.getStoreNm() == null ? "" : m.getStoreNm())
  264. .spplyId(m.getItemUnitInfo() == null ? "" : m.getItemUnitInfo().getSpplyId() == null ? "" : m.getItemUnitInfo().getSpplyId())
  265. .spplyNm(m.getItemUnitInfo() == null ? "" : m.getItemUnitInfo().getSpplyNm() == null ? "" : m.getItemUnitInfo().getSpplyNm())
  266. .whsId(m.getWhsId() == null ? "" : m.getWhsId())
  267. .whsNm(m.getWhsNm() == null ? "" : m.getWhsNm())
  268. .location(m.getLocation() == null ? "" : m.getLocation())
  269. .locationNm(m.getLocationNm() == null ? "" : m.getLocationNm())
  270. .itemId(m.getPchReqDtlInfo() == null ? "" : m.getPchReqDtlInfo().getItemId() == null ? "" : m.getPchReqDtlInfo().getItemId())
  271. .itemNm(m.getPchReqDtlInfo() == null ? "" : m.getPchReqDtlInfo().getItemNm() == null ? "" : m.getPchReqDtlInfo().getItemNm())
  272. .unitAmt(m.getPchReqDtlInfo() == null ? 0 : m.getPchReqDtlInfo().getUnitAmt() == null ? 0 : m.getPchReqDtlInfo().getUnitAmt())
  273. .poUnitAmt(m.getItemUnitInfo() == null ? 0 : m.getItemUnitInfo().getUnitAmt() == null ? 0 : m.getItemUnitInfo().getUnitAmt())
  274. .pchReqQty(m.getPchReqDtlInfo() == null ? 0 : m.getPchReqDtlInfo().getPchReqQty() == null ? 0 : m.getPchReqDtlInfo().getPchReqQty())
  275. .dlvReqDt(m.getDlvReqDt() == null ? "" : m.getDlvReqDt())
  276. .pchReqAmt(m.getPchReqDtlInfo() == null ? 0 : m.getPchReqDtlInfo().getPchReqAmt() == null ? 0 : m.getPchReqDtlInfo().getPchReqAmt())
  277. .pchOrdAmt(m.getPchReqDtlInfo() == null ? 0 : m.getPchReqDtlInfo().getPchOrdAmt() == null ? 0 : m.getPchReqDtlInfo().getPchOrdAmt())
  278. .leadTime(m.getItemUnitInfo() == null ? 0 : m.getItemUnitInfo().getLeadTime() == null ? 0 : m.getItemUnitInfo().getLeadTime())
  279. .build())
  280. .collect(Collectors.toList());
  281. return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
  282. }
  283. public PchReqRejectTargetResponse selectPchRejectPrTargetList(String pchReqUnqNo) throws Exception {
  284. return PchReqRejectTargetResponse.toDTO(pchReqMapper.selectPchRejectPrTargetList(pchReqUnqNo));
  285. }
  286. /* 구매요청 반려 처리 */
  287. @Transactional
  288. public void saveRejectPchReqInfo(String userId, String storeId, String pchReqUnqNo, String pchReqRjctRsn) throws Exception {
  289. try {
  290. //
  291. // 로그인자 권한이 50 이면 매장 아이디 필수로 넘어와야함
  292. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  293. String pchReqRjctNm = uEntity.getUserNm();
  294. pchReqMapper.updateRejPchReqBaseInfo(userId, pchReqUnqNo, pchReqRjctNm,pchReqRjctRsn);
  295. // 여신 사용금액 정리
  296. if (!"".equals(storeId)) {
  297. LoanMgntBaseInfoEntity loanMgnInfo = loanStateMapper.selectLoanJobDataInfo(storeId);
  298. PchReqBaseInfoEntity sumData = pchReqMapper.selectSumReqAmt(pchReqUnqNo);
  299. loanStateMapper.updateloanMinusPchReqUseAmt(loanMgnInfo.getLoanMgntUnqNo(), storeId, sumData.getPchReqTotalAmt());
  300. }
  301. } catch (GlobalException e) {
  302. e.getStackTrace();
  303. throw new GlobalException(e.getSystemMessageCode());
  304. } catch (Exception e) {
  305. e.getStackTrace();
  306. throw new RuntimeException();
  307. }
  308. }
  309. }