PchOrdService.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  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.PchOdrBaseInfoEntity;
  5. import com.oqpo.api.entity.pomng.PchOdrDtlPtclEntity;
  6. import com.oqpo.api.entity.pomng.PchReqBaseInfoEntity;
  7. import com.oqpo.api.entity.pomng.PchReqDtlPtclEntity;
  8. import com.oqpo.api.entity.stockmng.StckMgntBaseInfoEntity;
  9. import com.oqpo.api.enums.SystemMessageCode;
  10. import com.oqpo.api.exception.GlobalException;
  11. import com.oqpo.api.mapper.loanmng.LoanStateMapper;
  12. import com.oqpo.api.mapper.oper.UserMngMapper;
  13. import com.oqpo.api.mapper.pomng.PchOrdMapper;
  14. import com.oqpo.api.mapper.pomng.PchReqMapper;
  15. import com.oqpo.api.mapper.stinfo.StoreBaseInfoMapper;
  16. import com.oqpo.api.mapper.stockmng.StockMngMapper;
  17. import com.oqpo.api.service.CommonService;
  18. import com.oqpo.api.web.dto.request.GridRequest;
  19. import com.oqpo.api.web.dto.request.pomng.pchOrd.CancelPchOrdDtlRequest;
  20. import com.oqpo.api.web.dto.request.pomng.pchOrd.PchReqOrdInitRequest;
  21. import com.oqpo.api.web.dto.request.pomng.pchOrd.SavePchOrdRequest;
  22. import com.oqpo.api.web.dto.response.GridResponse;
  23. import com.oqpo.api.web.dto.response.pomng.pchOrd.*;
  24. import com.oqpo.api.web.dto.response.pomng.pchReq.PchReqInfoResponse;
  25. import com.oqpo.api.web.dto.response.pomng.pchReq.PchReqSearchListResponse;
  26. import lombok.extern.slf4j.Slf4j;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import java.util.ArrayList;
  31. import java.util.List;
  32. import java.util.stream.Collectors;
  33. @Service
  34. @Slf4j
  35. public class PchOrdService extends CommonService {
  36. @Autowired
  37. private PchOrdMapper pchOrdMapper;
  38. @Autowired
  39. private UserMngMapper userMngMapper;
  40. @Autowired
  41. private StockMngMapper stockMngMapper;
  42. @Autowired
  43. private PchReqMapper pchReqMapper;
  44. @Autowired
  45. private StoreBaseInfoMapper storeBaseInfoMapper;
  46. @Autowired
  47. private LoanStateMapper loanStateMapper;
  48. /* 구매요청건 발주 가능 여부 체크 */
  49. public String chkPchReqUseOrd(String userId, PchReqOrdInitRequest pchReqOrdInitRequest ) throws Exception {
  50. String usePassPoYn = "Y";
  51. // 초기 발주 head 정보 가져오기
  52. List<PchOdrBaseInfoEntity> headList = null;
  53. List<PchOdrDtlPtclEntity> itemList = null;
  54. // 품목 데이타 확인 필요
  55. List<PchOdrDtlPtclEntity> gridUpdateData = pchReqOrdInitRequest.toCodeEntities(pchReqOrdInitRequest.getGridUpdateData());
  56. if (gridUpdateData.size() > 0) {
  57. headList = pchOrdMapper.selectRecPchInitInfo(pchReqOrdInitRequest.getBrandId(),gridUpdateData);
  58. itemList = pchOrdMapper.selectRecPchDtlInitInfo(pchReqOrdInitRequest.getBrandId(),gridUpdateData);
  59. }
  60. if (headList.size() > 1) {
  61. // 서로다른 납품장소로 인한 처리 불가 오류 메세지 출력
  62. usePassPoYn = "N";
  63. throw new GlobalException(SystemMessageCode.ERR_NEQWHSID);
  64. }
  65. PchOdrBaseInfoEntity headData = headList.get(0);
  66. String dlvReqDt = ""; // 납품요청일
  67. String spplyId = ""; // 공급업체
  68. if ("DL01".equals(headData.getDlvDvsn())) {
  69. // 본사 배송은 매장으로의 배송이며, 납품장소는 매장이어야 함
  70. // 구매요청건이 같은 매장이어야 하며, 납품요청일 동일해야함
  71. if ("".equals(headData.getStoreId())) {
  72. usePassPoYn = "N";
  73. throw new GlobalException(SystemMessageCode.ERR_NONSTORE);
  74. }
  75. for (int j = 0 ; j < itemList.size() ; j++) {
  76. PchOdrDtlPtclEntity itemInfo = itemList.get(j);
  77. if ("".equals(dlvReqDt)) {
  78. dlvReqDt = itemInfo.getDlvReqDt();
  79. } else {
  80. if (!dlvReqDt.equals(itemInfo.getDlvReqDt())) {
  81. usePassPoYn = "N";
  82. throw new GlobalException(SystemMessageCode.ERR_NEQDLVDT);
  83. }
  84. }
  85. }
  86. } else if ("DL02".equals(headData.getDlvDvsn())) {
  87. // 납품매장으로 - 공급사 배송에서 본사로 배송
  88. for (int i = 0; i < itemList.size(); i++) {
  89. PchOdrDtlPtclEntity itemInfo = itemList.get(i);
  90. if ("".equals(spplyId)) {
  91. spplyId = itemInfo.getSpplyId();
  92. } else {
  93. if (!spplyId.equals(itemInfo.getSpplyId())) {
  94. usePassPoYn = "N";
  95. throw new GlobalException(SystemMessageCode.ERR_NEQSPPLY);
  96. }
  97. }
  98. if ("".equals(spplyId)) {
  99. usePassPoYn = "N";
  100. throw new GlobalException(SystemMessageCode.ERR_NONSPPLY);
  101. }
  102. }
  103. }
  104. return usePassPoYn;
  105. }
  106. /* 구매요청 발주 초기 정보
  107. *
  108. * 1. 구매요청에서 선택된 품목에 대해 발주 대상 품목 가능 여부 - 납품장소가 매장이면 납품요청일 + , 납품장소가 본사창고이면 납품요청일 + 납품공급사 ㅇ여부 체크하고 이상없을시
  109. * 발주생성화면으로 전환
  110. * 2. 발주 초기데이타에 대해 한번더 점검한후 발주생성 --
  111. * */
  112. public PchOrdInitInfoResponse selectRecPchInitInfo(String userId, PchReqOrdInitRequest pchReqOrdInitRequest ) throws Exception {
  113. // 로그인 정보 가져오기
  114. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  115. // 초기 발주 head 정보 가져오기
  116. List<PchOdrBaseInfoEntity> headList = null;
  117. List<PchOdrDtlPtclEntity> itemList = null;
  118. // 품목 데이타 확인 필요
  119. List<PchOdrDtlPtclEntity> gridUpdateData = pchReqOrdInitRequest.toCodeEntities(pchReqOrdInitRequest.getGridUpdateData());
  120. if (gridUpdateData.size() > 0) {
  121. headList = pchOrdMapper.selectRecPchInitInfo(pchReqOrdInitRequest.getBrandId(),gridUpdateData);
  122. itemList = pchOrdMapper.selectRecPchDtlInitInfo(pchReqOrdInitRequest.getBrandId(),gridUpdateData);
  123. }
  124. if (headList.size() > 1) {
  125. // 서로다른 납품장소로 인한 처리 불가 오류 메세지 출력
  126. throw new GlobalException(SystemMessageCode.ERR_NEQWHSID);
  127. }
  128. PchOdrBaseInfoEntity headData = headList.get(0);
  129. int podrTotalAmt = 0 ; // 총 발주금액
  130. String dlvReqDt = ""; // 납품요청일
  131. String spplyId = ""; // 공급업체
  132. String spplyNm = ""; //공급업체명
  133. if ("DL01".equals(headData.getDlvDvsn())) {
  134. // 본사에서 매장으로 배송처리
  135. if ("".equals(headData.getStoreId())) {
  136. throw new GlobalException(SystemMessageCode.ERR_NONSTORE);
  137. }
  138. for (int j = 0 ; j < itemList.size() ; j++) {
  139. PchOdrDtlPtclEntity itemInfo = itemList.get(j);
  140. podrTotalAmt = podrTotalAmt + (itemInfo.getUnitAmt() * itemInfo.getPchReqQty());
  141. if ("".equals(dlvReqDt)) {
  142. dlvReqDt = itemInfo.getDlvReqDt();
  143. } else {
  144. if (!dlvReqDt.equals(itemInfo.getDlvReqDt())) {
  145. throw new GlobalException(SystemMessageCode.ERR_NEQDLVDT);
  146. }
  147. }
  148. }
  149. } else if ("DL02".equals(headData.getDlvDvsn())) {
  150. // 매장으로 납품 (본사에서 발송할지 공급사에서 발송할지 여부 판단. 기본은 본사에서 발송처리되어지도록 함)
  151. for (int i = 0 ; i < itemList.size() ;i++) {
  152. PchOdrDtlPtclEntity itemInfo = itemList.get(i);
  153. podrTotalAmt = podrTotalAmt + (itemInfo.getUnitAmt() * itemInfo.getPchReqQty());
  154. if ("".equals(spplyId)) {
  155. spplyId = itemInfo.getSpplyId();
  156. spplyNm = itemInfo.getSpplyNm();
  157. } else {
  158. if (!spplyId.equals(itemInfo.getSpplyId())) {
  159. throw new GlobalException(SystemMessageCode.ERR_NEQSPPLY);
  160. }
  161. }
  162. if ("".equals(spplyId)) {
  163. throw new GlobalException(SystemMessageCode.ERR_NONSPPLY);
  164. }
  165. }
  166. }
  167. headData.setSpplyId(spplyId);
  168. headData.setSpplyNm(spplyNm);
  169. headData.setPodrTotalAmt(podrTotalAmt);
  170. return PchOrdInitInfoResponse.toDTO(uEntity, headData, itemList);
  171. }
  172. /*
  173. 발주 신규생성 초기데이타
  174. */
  175. public PoOrdInitInfoResponse selectPoInitInfo(String userId, String brandId) throws Exception {
  176. // 로그인 정보 가져오기
  177. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  178. // 초기 발주 head 정보 가져오기
  179. PchOdrBaseInfoEntity headData = pchOrdMapper.selectPoInitInfo(brandId);
  180. return PoOrdInitInfoResponse.toDTO(uEntity, headData);
  181. }
  182. /*
  183. 발주 정보 저장
  184. */
  185. @Transactional
  186. public void savePchOrdInfo(String userId, SavePchOrdRequest savePchOrdRequest) throws Exception {
  187. try {
  188. // 로그인 정보 가져오기
  189. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  190. uEntity.setTelNo(uEntity.getTelNo().replaceAll("-",""));
  191. // 전달받은 데이타와 전송발 데이타 세팅 후 저장
  192. String pchPodrUnqNo = fnGetDealNo(14,"");
  193. PchOdrBaseInfoEntity pchOrdEntity = new PchOdrBaseInfoEntity();
  194. pchOrdEntity.setPchPodrUnqNo(pchPodrUnqNo) ;
  195. pchOrdEntity.setBrandId(savePchOrdRequest.getBrandId());
  196. pchOrdEntity.setDlvDvsn(savePchOrdRequest.getDlvDvsn());
  197. pchOrdEntity.setDlvReqDt(savePchOrdRequest.getDlvReqDt().replaceAll("\\.",""));
  198. pchOrdEntity.setPodrMgrNm(uEntity.getUserNm());
  199. pchOrdEntity.setPodrDvsn("OD01");
  200. pchOrdEntity.setPchOdrStCd("PO001");
  201. pchOrdEntity.setSpplyId(savePchOrdRequest.getSpplyId());
  202. pchOrdEntity.setPodrMgrId(uEntity.getUserId());
  203. pchOrdEntity.setPodrMgrTelNo(uEntity.getTelNo());
  204. //
  205. if ("".equals(savePchOrdRequest.getStoreId())) { // 본사납품장소
  206. pchOrdEntity.setWhsDvsn("W01");
  207. } else { // 매장납품장소
  208. pchOrdEntity.setWhsDvsn("W02");
  209. }
  210. pchOrdEntity.setWhsId(savePchOrdRequest.getWhsId());
  211. pchOrdEntity.setLocation(savePchOrdRequest.getLocation());
  212. // 본사납품장소이면 아래 데이타는 null값 넘어옴
  213. pchOrdEntity.setShmtWhsId(savePchOrdRequest.getShmtWhsId());
  214. pchOrdEntity.setShmtLocation(savePchOrdRequest.getShmtLocation());
  215. pchOrdEntity.setStoreId(savePchOrdRequest.getStoreId());
  216. Integer dtlRow = 0 ;
  217. List<PchOdrDtlPtclEntity> pchOrdDtlList = new ArrayList<PchOdrDtlPtclEntity>();
  218. List<PchOdrDtlPtclEntity> gridUpdateData = savePchOrdRequest.toCodeEntities(savePchOrdRequest.getGridInsertData());
  219. List<PchReqBaseInfoEntity> pchReqList = new ArrayList<PchReqBaseInfoEntity>();
  220. if (gridUpdateData.size() > 0) {
  221. int poTotAmt = 0 ;
  222. int poItemCnt = 0 ;
  223. String diffSpplyYn = "N" ;
  224. for (int i = 0 ; i < gridUpdateData.size() ;i++ ) {
  225. PchOdrDtlPtclEntity poDtlEntity = gridUpdateData.get(i);
  226. PchOdrDtlPtclEntity poSaveDtlEntity = new PchOdrDtlPtclEntity();
  227. PchReqBaseInfoEntity pchReqEntity = new PchReqBaseInfoEntity();
  228. // 구매요청건에 대한 데이타 가져옴
  229. if ("R".equals(savePchOrdRequest.getJobCd())) { // 구매요청건
  230. // 구매요청번호와 항번으로 데이타 가져놈
  231. poSaveDtlEntity = pchOrdMapper.selectPoPchDtlSaveInfo(poDtlEntity.getPchReqUnqNo(), poDtlEntity.getPchReqDtlNo());
  232. pchReqEntity.setPchReqUnqNo(poDtlEntity.getPchReqUnqNo());
  233. pchReqEntity.setPchReqStCd("PR30");
  234. pchReqList.add(pchReqEntity);
  235. } else if ("P".equals(savePchOrdRequest.getJobCd())) { // 신규발주건
  236. // item id 로 데이타 가져옴 == 단가는 브랜드 단가로 처리함
  237. poSaveDtlEntity = pchOrdMapper.selectPoItemDtlSaveInfo(savePchOrdRequest.getBrandId(), poDtlEntity.getItemId(), poDtlEntity.getBrandUnitUnqNo());
  238. }
  239. if (!pchOrdEntity.getSpplyId().equals(poSaveDtlEntity.getSpplyId())) {
  240. diffSpplyYn = "Y";
  241. }
  242. dtlRow = dtlRow + 10;
  243. poSaveDtlEntity.setPchPodrUnqNo(pchPodrUnqNo);
  244. String dtlNo = Integer.toString(dtlRow);
  245. poSaveDtlEntity.setPchPodrDtlNo(dtlNo);
  246. poSaveDtlEntity.setPchReqUnqNo(poDtlEntity.getPchReqUnqNo());
  247. poSaveDtlEntity.setPchReqDtlNo(poDtlEntity.getPchReqDtlNo());
  248. poSaveDtlEntity.setPodrQty(poDtlEntity.getPodrQty());
  249. poSaveDtlEntity.setPodrAmt(poDtlEntity.getPodrQty() * poSaveDtlEntity.getUnitAmt() );
  250. poSaveDtlEntity.setCurr("KRW");
  251. poSaveDtlEntity.setPodrDtlStCd("POD0");
  252. poSaveDtlEntity.setBrandUnitUnqNo(poDtlEntity.getBrandUnitUnqNo());
  253. poSaveDtlEntity.setStoreUnitUnqNo(poDtlEntity.getStoreUnitUnqNo());
  254. poTotAmt = poTotAmt + poSaveDtlEntity.getPodrAmt();
  255. poItemCnt = poItemCnt + 1;
  256. pchOrdDtlList.add(poSaveDtlEntity);
  257. }
  258. // 체크로직필요
  259. if ("W01".equals(pchOrdEntity.getWhsDvsn())) {
  260. // 본사납품장소일경우 - 공급사는 하나여야만한다.
  261. if("DL02".equals(pchOrdEntity.getDlvDvsn())) {
  262. // 본사납품장소이면 배송구분은 공급사이여야 함
  263. throw new GlobalException(SystemMessageCode.ERR_DLV001);
  264. }
  265. // 공급사는 하나여야 함
  266. if ("Y".equals(diffSpplyYn)) {
  267. // 공급사는 하나여야 합니다.
  268. throw new GlobalException(SystemMessageCode.ERR_NEQSPPLY);
  269. }
  270. } else {
  271. // 매장납품장소일경우 - 배송구분이 공급사면 - 공급사 하나여야 하고, 본사이면 매장이 하나여야 한다.
  272. if ("DL01".equals(pchOrdEntity.getDlvDvsn())) { // 본사배송이면
  273. if ("".equals(pchOrdEntity.getStoreId())) {
  274. // 매장정보가 없습니다.
  275. throw new GlobalException(SystemMessageCode.ERR_NONSTOREID);
  276. }
  277. //출고창고정보 존재여부 파악
  278. if ("".equals(pchOrdEntity.getShmtWhsId()) || "".equals(pchOrdEntity.getShmtLocation())) {
  279. throw new GlobalException(SystemMessageCode.ERR_OUTWHS);
  280. }
  281. } else { // 공급사배송이면
  282. // 공급사는 하나여야 함
  283. if ("Y".equals(diffSpplyYn)) {
  284. // 공급사는 하나여야 합니다.
  285. throw new GlobalException(SystemMessageCode.ERR_NEQSPPLY);
  286. }
  287. }
  288. }
  289. pchOrdEntity.setPodrTotalAmt(poTotAmt);
  290. pchOrdEntity.setPodrItemQty(poItemCnt);
  291. pchOrdMapper.insertPchOdrBaseInfo(userId, pchOrdEntity);
  292. pchOrdMapper.insertPchOdrDtlPtcl(userId, pchOrdDtlList);
  293. if ("R".equals(savePchOrdRequest.getJobCd())) { // 구매요청건
  294. pchReqMapper.updatePchReqStCd(userId,pchReqList);
  295. }
  296. //출고가능수량을 줄여줘야함
  297. if ("DL01".equals(pchOrdEntity.getDlvDvsn())) { // 본사배송이면
  298. //출고창고 값 전달
  299. if (pchOrdDtlList.size() > 0) {
  300. List<StckMgntBaseInfoEntity> stckList = new ArrayList<StckMgntBaseInfoEntity>();
  301. for (int pj = 0 ; pj < pchOrdDtlList.size() ; pj++) {
  302. PchOdrDtlPtclEntity poData = pchOrdDtlList.get(pj);
  303. StckMgntBaseInfoEntity stckEntity = new StckMgntBaseInfoEntity();
  304. stckEntity.setItemId(poData.getItemId());
  305. stckEntity.setWaitQty(poData.getPodrQty());
  306. stckList.add(stckEntity);
  307. }
  308. stockMngMapper.updateStckPoUseQty(userId, pchOrdEntity.getBrandId(), pchOrdEntity.getShmtWhsId(), pchOrdEntity.getShmtLocation(), stckList );
  309. }
  310. }
  311. }
  312. } catch (GlobalException e) {
  313. //e.getStackTrace();
  314. e.printStackTrace();
  315. throw new GlobalException(e.getSystemMessageCode());
  316. } catch (Exception e) {
  317. e.printStackTrace();
  318. throw new RuntimeException();
  319. }
  320. }
  321. /*
  322. 구매요청 그리드 리스트 조회
  323. */
  324. public GridResponse selectPchOdrGridList(String sBrandId, String fromDt, String toDt, String sPchOdrStCd, String sSpplyId, String sWhsId, String sItemNm, GridRequest gridRequest) throws Exception {
  325. int gridPage = gridRequest.getGridPage();
  326. int gridSize = gridRequest.getGridSize();
  327. System.out.println(sBrandId + "==" + fromDt + "==" + toDt + "==" + sPchOdrStCd + "==" + sSpplyId + "==" + sWhsId + "==" + sItemNm);
  328. fromDt = fromDt == null ? null : fromDt.replace(".", "");
  329. toDt = toDt == null ? null : toDt.replace(".", "");
  330. int gridRecords = pchOrdMapper.selectPchOdrGridCnt(sBrandId, fromDt, toDt, sPchOdrStCd,sSpplyId,sWhsId, sItemNm );
  331. int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
  332. List<PchOdrBaseInfoEntity> entities = pchOrdMapper.selectPchOdrGridList(sBrandId, fromDt, toDt, sPchOdrStCd,sSpplyId,sWhsId, sItemNm, gridRequest);
  333. List<Object> gridRows = entities.stream()
  334. .map(m -> PchOdrSearchListResponse.builder()
  335. .viewCd("R")
  336. .pchPodrUnqNo(m.getPchPodrUnqNo())
  337. .brandId(m.getBrandId() == null ? "" : m.getBrandId())
  338. .brandNm(m.getBrandNm() == null ? "" : m.getBrandNm())
  339. .pchOdrStCd(m.getPchOdrStCd() == null ? "" : m.getPchOdrStCd())
  340. .pchOdrStNm(m.getPchOdrStNm() == null ? "" : m.getPchOdrStNm())
  341. .podrDt(m.getPodrDt() == null ? "" : m.getPodrDt())
  342. .whsNm(m.getWhsNm() == null ? "" : m.getWhsNm())
  343. .locationNm(m.getLocationNm() == null ? "" : m.getLocationNm())
  344. .spplyId(m.getSpplyId() == null ? "" : m.getSpplyId())
  345. .spplyNm(m.getSpplyNm() == null ? "" : m.getSpplyNm())
  346. .podrTotalAmt(m.getPodrTotalAmt() == null ? 0 : m.getPodrTotalAmt())
  347. .podrItemQty(m.getPodrItemQty() == null ? 0 : m.getPodrItemQty())
  348. .podrMgrNm(m.getPodrMgrNm() == null ? "" : m.getPodrMgrNm())
  349. .shmtWhsNm(m.getShmtWhsNm() == null ? "" : m.getShmtWhsNm())
  350. .shmtLocationNm(m.getShmtLocationNm() == null ? "" : m.getShmtLocationNm())
  351. .build())
  352. .collect(Collectors.toList());
  353. return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
  354. }
  355. /* 구매발주 정보 */
  356. public PchOdrInfoResponse selectPchOdrInfo(String pchReqUnqNo) throws Exception {
  357. PchOdrBaseInfoEntity entity = pchOrdMapper.selectPchOdrInfo(pchReqUnqNo);
  358. List<PchOdrDtlPtclEntity> dtlEntity = pchOrdMapper.selectOdrDtlList( pchReqUnqNo);
  359. return PchOdrInfoResponse.toDTO(entity,dtlEntity);
  360. }
  361. /*
  362. 발주 취소처리
  363. */
  364. @Transactional
  365. public void cancelPchOrdDtl(String userId, CancelPchOrdDtlRequest cancelPchOrdDtlRequest) throws Exception {
  366. try {
  367. // 품목 삭제 상태처리
  368. Integer podrAmt = 0 ;
  369. List<PchOdrDtlPtclEntity> gridUpdateData = cancelPchOrdDtlRequest.toCodeEntities(cancelPchOrdDtlRequest.getGridUpdateData());
  370. List<StckMgntBaseInfoEntity> stckList = new ArrayList<StckMgntBaseInfoEntity>();
  371. if (gridUpdateData.size() > 0) {
  372. pchOrdMapper.updateCancelPodrDtl(userId, gridUpdateData) ;
  373. for (int i = 0 ; i < gridUpdateData.size() ; i++) {
  374. PchOdrDtlPtclEntity delItem = gridUpdateData.get(i);
  375. podrAmt = podrAmt + delItem.getPodrAmt();
  376. if ("DL01".equals(cancelPchOrdDtlRequest.getDlvDvsn())) { // 본사배송이면
  377. StckMgntBaseInfoEntity stckEntity = new StckMgntBaseInfoEntity();
  378. stckEntity.setItemId(delItem.getItemId());
  379. stckEntity.setWaitQty(delItem.getPodrQty());
  380. stckList.add(stckEntity);
  381. }
  382. }
  383. }
  384. //발주취소로 인한 발주 head 상태값 변경처리 pchPodrUnqNo
  385. String pchOdrStCd = selectOdrDtlStatusList(cancelPchOrdDtlRequest.getPchPodrUnqNo());
  386. pchOrdMapper.updateChgPodrStCd(userId, pchOdrStCd, cancelPchOrdDtlRequest.getPchPodrUnqNo());
  387. // 매장 구매요청 발주일경우 사용금액 차감 처리함
  388. if (!"".equals(cancelPchOrdDtlRequest.getStoreId())) {
  389. String loanMgntUnqNo = storeBaseInfoMapper.selectStoreLoanMgntUnqNo(cancelPchOrdDtlRequest.getStoreId());
  390. if (loanMgntUnqNo != null) {
  391. loanStateMapper.updateloanMinusPchReqUseAmt(loanMgntUnqNo, cancelPchOrdDtlRequest.getStoreId(), podrAmt);
  392. }
  393. }
  394. //출고가능수량을 복구처리
  395. if ("DL01".equals(cancelPchOrdDtlRequest.getDlvDvsn())) { // 본사배송이면
  396. stockMngMapper.updateStckPoUseQty(userId, cancelPchOrdDtlRequest.getBrandId(), cancelPchOrdDtlRequest.getShmtWhsId(), cancelPchOrdDtlRequest.getShmtLocation(), stckList );
  397. }
  398. } catch (GlobalException e) {
  399. //e.getStackTrace();
  400. e.printStackTrace();
  401. throw new GlobalException(e.getSystemMessageCode());
  402. } catch (Exception e) {
  403. e.printStackTrace();
  404. throw new RuntimeException();
  405. }
  406. }
  407. public String selectOdrDtlStatusList(String pchReqUnqNo) throws Exception {
  408. //PCH_ODR_ST_CD
  409. String pchOdrStCd = "";
  410. List<PchOdrDtlPtclEntity> dtlEntity = pchOrdMapper.selectOdrDtlStatusList( pchReqUnqNo);
  411. int pod0 = 0 ;
  412. int pod1 = 0 ;
  413. int pod2 = 0 ;
  414. int pod4 = 0 ;
  415. for (int i = 0 ; i < dtlEntity.size() ; i++ ) {
  416. PchOdrDtlPtclEntity entity = dtlEntity.get(i);
  417. if ( "POD0".equals(entity.getPodrDtlStCd())) { // 요청
  418. pod0 = pod0 + entity.getPodrStatusCnt() ;
  419. } else if ( "POD1".equals(entity.getPodrDtlStCd()) || "POD3".equals(entity.getPodrDtlStCd())) { // 접수 ,출하
  420. pod1 = pod1 + entity.getPodrStatusCnt() ;
  421. } else if ( "POD2".equals(entity.getPodrDtlStCd())) { //발주취소
  422. pod2 = pod2 + entity.getPodrStatusCnt() ;
  423. } else if ( "POD4".equals(entity.getPodrDtlStCd())) { //입고완료
  424. pod4 = pod4 + entity.getPodrStatusCnt() ;
  425. }
  426. }
  427. if (pod0 > 0 ) {
  428. pchOdrStCd = "PO20"; //요청
  429. } else if ( pod0 == 0 && pod1 == 0 && pod4 == 0 ) {
  430. pchOdrStCd = "PO99"; // 취소
  431. } else {
  432. pchOdrStCd = "PO30"; // 접수
  433. }
  434. return pchOdrStCd;
  435. }
  436. /*
  437. 공급사 수주현황 리스트
  438. */
  439. public GridResponse selectSpplyPoGridList(String sBrandId, String fromDt, String toDt, String sSpplyId, String sWhsId, String sPchOdrStCd, String sItemNm, GridRequest gridRequest) throws Exception {
  440. int gridPage = gridRequest.getGridPage();
  441. int gridSize = gridRequest.getGridSize();
  442. fromDt = fromDt == null ? null : fromDt.replace(".", "");
  443. toDt = toDt == null ? null : toDt.replace(".", "");
  444. int gridRecords = pchOrdMapper.selectSpplyPoGridCnt(sBrandId, fromDt, toDt, sSpplyId, sWhsId, sPchOdrStCd, sItemNm);
  445. int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
  446. List<PchOdrBaseInfoEntity> entities = pchOrdMapper.selectSpplyPoGridList(sBrandId, fromDt, toDt, sSpplyId, sWhsId, sPchOdrStCd, sItemNm, gridRequest);
  447. List<Object> gridRows = entities.stream()
  448. .map(m -> SpplyPoOdrSearchListResponse.builder()
  449. .viewCd("R")
  450. .brandId(m.getBrandId() == null ? "" : m.getBrandId())
  451. .brandNm(m.getBrandNm() == null ? "" : m.getBrandNm())
  452. .pchPodrUnqNo(m.getPchPodrUnqNo() == null ? "" : m.getPchPodrUnqNo())
  453. .pchOdrStCd(m.getPchOdrStCd() == null ? "" : m.getPchOdrStCd())
  454. .pchOdrStNm(m.getPchOdrStNm() == null ? "" : m.getPchOdrStNm())
  455. .podrDt(m.getPodrDt() == null ? "" : m.getPodrDt())
  456. .dlvReqDt(m.getDlvReqDt() == null ? "" : m.getDlvReqDt())
  457. .whsNm(m.getWhsNm() == null ? "" : m.getWhsNm() + "-" + m.getLocationNm())
  458. .podrTotalAmt(m.getPodrTotalAmt() == null ? 0 : m.getPodrTotalAmt())
  459. .podrItemQty(m.getPodrItemQty() == null ? 0 : m.getPodrItemQty())
  460. .podrMgrNm(m.getPodrMgrNm() == null ? "" : m.getPodrMgrNm())
  461. .build())
  462. .collect(Collectors.toList());
  463. return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
  464. }
  465. /* 구매발주 정보 */
  466. public SpplyPchOdrInfoResponse selectSpplyPchOdrInfo(String brandId, String pchReqUnqNo, String spplyId) throws Exception {
  467. PchOdrBaseInfoEntity entity = pchOrdMapper.selectSpplyPchOdrInfo(brandId, pchReqUnqNo, spplyId);
  468. List<PchOdrDtlPtclEntity> dtlEntity = pchOrdMapper.selectSpplyOdrDtlList(brandId, pchReqUnqNo, spplyId);
  469. return SpplyPchOdrInfoResponse.toDTO(entity,dtlEntity);
  470. }
  471. }