RtnOdrService.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. package com.oqpo.api.service.rtnmng;
  2. import com.oqpo.api.entity.oper.UserMngEntity;
  3. import com.oqpo.api.entity.pomng.PchOdrDtlPtclEntity;
  4. import com.oqpo.api.entity.rtnmng.RtnOdrBaseInfoEntity;
  5. import com.oqpo.api.entity.rtnmng.RtnOdrDtlPtclEntity;
  6. import com.oqpo.api.entity.rtnmng.RtnReqBaseInfoEntity;
  7. import com.oqpo.api.entity.rtnmng.RtnReqDtlPtclEntity;
  8. import com.oqpo.api.enums.SystemMessageCode;
  9. import com.oqpo.api.exception.GlobalException;
  10. import com.oqpo.api.mapper.inoutmng.ColOdrMapper;
  11. import com.oqpo.api.mapper.loanmng.LoanStateMapper;
  12. import com.oqpo.api.mapper.oper.UserMngMapper;
  13. import com.oqpo.api.mapper.rtnmng.RtnOdrMapper;
  14. import com.oqpo.api.mapper.rtnmng.RtnReqMapper;
  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.rtnmng.CancelRtnOrdDtlRequest;
  21. import com.oqpo.api.web.dto.request.rtnmng.RtnReqOrdInitRequest;
  22. import com.oqpo.api.web.dto.request.rtnmng.SaveRtnOrdRequest;
  23. import com.oqpo.api.web.dto.response.GridResponse;
  24. import com.oqpo.api.web.dto.response.pomng.pchOrd.PchOdrInfoResponse;
  25. import com.oqpo.api.web.dto.response.pomng.pchOrd.PchOdrSearchListResponse;
  26. import com.oqpo.api.web.dto.response.rtnmng.rtnOrd.RtnOdrInfoResponse;
  27. import com.oqpo.api.web.dto.response.rtnmng.rtnOrd.RtnOdrSearchListResponse;
  28. import com.oqpo.api.web.dto.response.rtnmng.rtnOrd.RtnOrdInitInfoResponse;
  29. import com.oqpo.api.web.dto.response.rtnmng.rtnOrd.RtnOrdNInitInfoResponse;
  30. import com.oqpo.api.web.dto.response.rtnmng.rtnReq.RtnReqInitInfoResponse;
  31. import lombok.extern.slf4j.Slf4j;
  32. import org.apache.ibatis.annotations.Param;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.stereotype.Service;
  35. import org.springframework.transaction.annotation.Transactional;
  36. import java.util.ArrayList;
  37. import java.util.List;
  38. import java.util.stream.Collectors;
  39. @Service
  40. @Slf4j
  41. public class RtnOdrService extends CommonService {
  42. @Autowired
  43. private RtnOdrMapper rtnOdrMapper;
  44. @Autowired
  45. private UserMngMapper userMngMapper;
  46. @Autowired
  47. private StockMngMapper stockMngMapper;
  48. @Autowired
  49. private RtnReqMapper rtnReqMapper;
  50. @Autowired
  51. private ColOdrMapper colOdrMapper;
  52. @Autowired
  53. private StoreBaseInfoMapper storeBaseInfoMapper;
  54. @Autowired
  55. private LoanStateMapper loanStateMapper;
  56. @Autowired
  57. private RtnReqService rtnReqService;
  58. /* 반품요청건 발주 가능 여부 체크 */
  59. public String chkRtnReqUseOrd(String userId, RtnReqOrdInitRequest rtnReqOrdInitRequest ) throws Exception {
  60. String usePassPoYn = "Y";
  61. // 초기 발주 head 정보 가져오기
  62. List<RtnOdrBaseInfoEntity> headList = null;
  63. List<RtnOdrDtlPtclEntity> itemList = null;
  64. // 품목 데이타 확인 필요
  65. List<RtnOdrDtlPtclEntity> gridUpdateData = rtnReqOrdInitRequest.toCodeEntities(rtnReqOrdInitRequest.getGridUpdateData());
  66. if (gridUpdateData.size() > 0) {
  67. headList = rtnOdrMapper.selectRecRtnInitInfo(rtnReqOrdInitRequest.getBrandId(),gridUpdateData);
  68. itemList = rtnOdrMapper.selectRecRtnDtlInitInfo(rtnReqOrdInitRequest.getBrandId(),gridUpdateData);
  69. }
  70. if (headList.size() > 1) {
  71. // 서로다른 수거장소로 인한 처리 불가 오류 메세지 출력 본사출력이면 매장수거장소,, 공급사수거면 본사수거장소
  72. usePassPoYn = "N";
  73. throw new GlobalException(SystemMessageCode.ERR_NEQRTNWHSID);
  74. }
  75. RtnOdrBaseInfoEntity headData = headList.get(0);
  76. String colReqDt = ""; // 수거요청일
  77. String spplyId = ""; // 공급업체
  78. //col_dvsn 본사수거 C001 , 공급사 수거 C002
  79. if ("C001".equals(headData.getColDvsn())) {
  80. // 본사수거
  81. if ("".equals(headData.getStoreId())) {
  82. usePassPoYn = "N";
  83. throw new GlobalException(SystemMessageCode.ERR_NONRTNSTORE);
  84. }
  85. } else if ("C002".equals(headData.getColDvsn())) {
  86. // 공급사 수거는 본사 창고입니다.
  87. for (int i = 0; i < itemList.size(); i++) {
  88. RtnOdrDtlPtclEntity itemInfo = itemList.get(i);
  89. if ("".equals(spplyId)) {
  90. spplyId = itemInfo.getSpplyId();
  91. } else {
  92. if (!spplyId.equals(itemInfo.getSpplyId())) {
  93. usePassPoYn = "N";
  94. throw new GlobalException(SystemMessageCode.ERR_NEQRTNSPPLY);
  95. }
  96. }
  97. if ("".equals(spplyId)) {
  98. usePassPoYn = "N";
  99. throw new GlobalException(SystemMessageCode.ERR_NONSPPLY);
  100. }
  101. }
  102. }
  103. return usePassPoYn;
  104. }
  105. /* 반품요청 발주 초기 정보
  106. *
  107. *
  108. * */
  109. public RtnOrdInitInfoResponse selectRecRtnInitInfo(String userId, RtnReqOrdInitRequest rtnReqOrdInitRequest ) throws Exception {
  110. // 로그인 정보 가져오기
  111. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  112. // 초기 발주 head 정보 가져오기
  113. List<RtnOdrBaseInfoEntity> headList = null;
  114. List<RtnOdrDtlPtclEntity> itemList = null;
  115. // 품목 데이타 확인 필요
  116. List<RtnOdrDtlPtclEntity> gridUpdateData = rtnReqOrdInitRequest.toCodeEntities(rtnReqOrdInitRequest.getGridUpdateData());
  117. if (gridUpdateData.size() > 0) {
  118. headList = rtnOdrMapper.selectRecRtnInitInfo(rtnReqOrdInitRequest.getBrandId(),gridUpdateData);
  119. itemList = rtnOdrMapper.selectRecRtnDtlInitInfo(rtnReqOrdInitRequest.getBrandId(),gridUpdateData);
  120. }
  121. if (headList.size() > 1) {
  122. // 서로다른 수거장소로 인한 처리 불가 오류 메세지 출력 본사출력이면 매장수거장소,, 공급사수거면 본사수거장소
  123. throw new GlobalException(SystemMessageCode.ERR_NEQRTNWHSID);
  124. }
  125. RtnOdrBaseInfoEntity headData = headList.get(0);
  126. long rtnTotalAmt = 0 ; // 총 반품금액
  127. String colReqDt = ""; // 수거요청일
  128. String spplyId = ""; // 공급업체
  129. String spplyNm = ""; //공급업체명
  130. //col_dvsn 본사수거 C001 , 공급사 수거 C002
  131. if ("C001".equals(headData.getColDvsn())) {
  132. if ("".equals(headData.getStoreId())) {
  133. throw new GlobalException(SystemMessageCode.ERR_NONRTNSTORE);
  134. }
  135. for (int j = 0 ; j < itemList.size() ; j++) {
  136. RtnOdrDtlPtclEntity itemInfo = itemList.get(j);
  137. rtnTotalAmt = rtnTotalAmt + (itemInfo.getUnitAmt() * itemInfo.getRtnQty());
  138. colReqDt = itemInfo.getColReqDt() ;
  139. }
  140. } else if ("C002".equals(headData.getColDvsn())) {
  141. // 공급사 수거는 본사 창고입니다.
  142. for (int i = 0; i < itemList.size(); i++) {
  143. RtnOdrDtlPtclEntity itemInfo = itemList.get(i);
  144. rtnTotalAmt = rtnTotalAmt + (itemInfo.getUnitAmt() * itemInfo.getRtnQty());
  145. colReqDt = itemInfo.getColReqDt() ;
  146. if ("".equals(spplyId)) {
  147. spplyId = itemInfo.getSpplyId();
  148. spplyNm = itemInfo.getSpplyNm();
  149. } else {
  150. if (!spplyId.equals(itemInfo.getSpplyId())) {
  151. throw new GlobalException(SystemMessageCode.ERR_NEQRTNSPPLY);
  152. }
  153. }
  154. if ("".equals(spplyId)) {
  155. throw new GlobalException(SystemMessageCode.ERR_NONSPPLY);
  156. }
  157. }
  158. }
  159. // System.out.println(" last==dlvReqDt===================>" + dlvReqDt);
  160. headData.setSpplyId(spplyId);
  161. headData.setSpplyNm(spplyNm);
  162. headData.setRtnDodrTotalAmt(rtnTotalAmt);
  163. headData.setRtnDodrItemQty(itemList.size());
  164. headData.setColReqDt(colReqDt);
  165. return RtnOrdInitInfoResponse.toDTO(uEntity, headData, itemList);
  166. }
  167. /*
  168. 반품 발주 신규생성 RtnOrdNInitInfoResponse
  169. */
  170. public RtnOrdNInitInfoResponse selectRtnInitInfo(String userId, String brandId) throws Exception {
  171. // 로그인 정보 가져오기
  172. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  173. // 초기 발주 head 정보 가져오기
  174. RtnOdrBaseInfoEntity headData = rtnOdrMapper.selectRtnInitInfo(brandId);
  175. return RtnOrdNInitInfoResponse.toDTO(uEntity, headData);
  176. }
  177. /*
  178. 발주 정보 저장
  179. */
  180. @Transactional
  181. public void saveRtnOdrInfo(String userId, SaveRtnOrdRequest saveRtnOrdRequest) throws Exception {
  182. try {
  183. // 로그인 정보 가져오기
  184. UserMngEntity uEntity = userMngMapper.selectGroupUserInfo(userId);
  185. uEntity.setTelNo(uEntity.getTelNo().replaceAll("-",""));
  186. // 전달받은 데이타와 전송발 데이타 세팅 후 저장
  187. String rtnPodrUnqNo = fnGetDealNo(19,"");
  188. RtnOdrBaseInfoEntity rtnOrdEntity = new RtnOdrBaseInfoEntity();
  189. rtnOrdEntity.setRtnPodrUnqNo(rtnPodrUnqNo);
  190. rtnOrdEntity.setBrandId(saveRtnOrdRequest.getBrandId());
  191. rtnOrdEntity.setRtnReqDvsn(saveRtnOrdRequest.getRtnReqDvsn());
  192. rtnOrdEntity.setRtnMgrNm(uEntity.getUserNm());
  193. rtnOrdEntity.setRtnMgrId(userId);
  194. rtnOrdEntity.setRtnMgrTelNo(uEntity.getTelNo());
  195. rtnOrdEntity.setSpplyId(saveRtnOrdRequest.getSpplyId());
  196. rtnOrdEntity.setWhsId(saveRtnOrdRequest.getWhsId());
  197. rtnOrdEntity.setLocation(saveRtnOrdRequest.getLocation());
  198. rtnOrdEntity.setColDvsn(saveRtnOrdRequest.getColDvsn());
  199. rtnOrdEntity.setColReqDt(saveRtnOrdRequest.getColReqDt().replaceAll("\\.",""));
  200. rtnOrdEntity.setStoreId(saveRtnOrdRequest.getStoreId());
  201. rtnOrdEntity.setRtnWhsId(saveRtnOrdRequest.getRtnWhsId());
  202. rtnOrdEntity.setRtnLocation(saveRtnOrdRequest.getRtnLocation());
  203. Integer dtlRow = 0 ;
  204. List<RtnOdrDtlPtclEntity> rtnOrdDtlList = new ArrayList<RtnOdrDtlPtclEntity>();
  205. List<RtnOdrDtlPtclEntity> gridUpdateData = saveRtnOrdRequest.toCodeEntities(saveRtnOrdRequest.getGridInsertData());
  206. // 헤더데이타 체크
  207. if (gridUpdateData.size() < 1) {
  208. throw new GlobalException(SystemMessageCode.ERR_NOTITEM);
  209. }
  210. List<RtnOdrBaseInfoEntity> headList = rtnOdrMapper.selectRecRtnInitInfo(saveRtnOrdRequest.getBrandId(),gridUpdateData);
  211. if (headList.size() > 1) {
  212. // 서로다른 수거장소로 인한 처리 불가 오류 메세지 출력 본사출력이면 매장수거장소,, 공급사수거면 본사수거장소
  213. throw new GlobalException(SystemMessageCode.ERR_NEQRTNWHSID);
  214. }
  215. //List<RtnReqBaseInfoEntity> rtnReqList = new ArrayList<RtnReqBaseInfoEntity>();
  216. List<RtnReqDtlPtclEntity> rtnReqDtlList = new ArrayList<RtnReqDtlPtclEntity>();
  217. if (gridUpdateData.size() > 0) {
  218. long rtnTotAmt = 0 ;
  219. int rtnItemCnt = 0 ;
  220. String diffSpplyYn = "N" ;
  221. //String diffStoreYn = "N";
  222. for (int i = 0 ; i < gridUpdateData.size() ;i++ ) {
  223. RtnOdrDtlPtclEntity rtnDtlEntity = gridUpdateData.get(i); // 전달받은값
  224. RtnOdrDtlPtclEntity rtnSaveDtlEntity = new RtnOdrDtlPtclEntity(); // 저장할 메인
  225. //RtnReqBaseInfoEntity rtnReqEntity = new RtnReqBaseInfoEntity(); // 반품요청상태
  226. RtnReqDtlPtclEntity rtnReqDtlEntity = new RtnReqDtlPtclEntity(); // 반품요청상세상태
  227. // 구매요청건에 대한 데이타 가져옴
  228. if ("R".equals(saveRtnOrdRequest.getJobCd())) { // 반품요청건
  229. // 구매요청번호와 항번으로 데이타 가져놈
  230. rtnSaveDtlEntity = rtnOdrMapper.selectPoRtnDtlSaveInfo(rtnDtlEntity.getRtnReqUnqNo(), rtnDtlEntity.getRtnReqDtlNo());
  231. //rtnReqEntity.setRtnReqUnqNo(rtnDtlEntity.getRtnReqUnqNo());
  232. //rtnReqEntity.setRtnReqStCd("RR30");
  233. rtnReqDtlEntity.setRtnReqUnqNo(rtnDtlEntity.getRtnReqUnqNo());
  234. rtnReqDtlEntity.setRtnReqDtlNo(rtnDtlEntity.getRtnReqDtlNo());
  235. rtnReqDtlEntity.setRtnReqDtlStCd("RRD30");
  236. //rtnReqList.add(rtnReqEntity);
  237. rtnReqDtlList.add(rtnReqDtlEntity);
  238. } else if ("P".equals(saveRtnOrdRequest.getJobCd())) { // 신규발주건
  239. // item id 로 데이타 가져옴 == 단가는 브랜드 단가로 처리함
  240. rtnSaveDtlEntity = rtnOdrMapper.selectRtnItemDtlSaveInfo(saveRtnOrdRequest.getBrandId(), rtnDtlEntity.getItemId(), rtnDtlEntity.getBrandUnitUnqNo());
  241. }
  242. if (!rtnOrdEntity.getSpplyId().equals(rtnSaveDtlEntity.getSpplyId())) {
  243. diffSpplyYn = "Y"; // 수거 공급사는 하나여야 합니다.
  244. }
  245. dtlRow = dtlRow + 10;
  246. rtnSaveDtlEntity.setRtnPodrUnqNo(rtnPodrUnqNo);
  247. String dtlNo = Integer.toString(dtlRow);
  248. rtnSaveDtlEntity.setRtnPodrDtlNo(dtlNo);
  249. rtnSaveDtlEntity.setRtnReqUnqNo(rtnDtlEntity.getRtnReqUnqNo());
  250. rtnSaveDtlEntity.setRtnReqDtlNo(rtnDtlEntity.getRtnReqDtlNo());
  251. rtnSaveDtlEntity.setRtnQty(rtnDtlEntity.getRtnReqQty());
  252. rtnSaveDtlEntity.setRtnAmt(Long.valueOf(rtnDtlEntity.getRtnQty()) * rtnSaveDtlEntity.getUnitAmt() );
  253. rtnSaveDtlEntity.setBrandUnitUnqNo(rtnDtlEntity.getBrandUnitUnqNo());
  254. rtnSaveDtlEntity.setStoreUnitUnqNo(rtnDtlEntity.getStoreUnitUnqNo());
  255. rtnSaveDtlEntity.setRtnDvsn(rtnDtlEntity.getRtnDvsn());
  256. rtnSaveDtlEntity.setRtnRsn(rtnDtlEntity.getRtnRsn());
  257. rtnSaveDtlEntity.setRtnRsnDvsn(rtnDtlEntity.getRtnRsnDvsn());
  258. rtnSaveDtlEntity.setRtnOdrQty(rtnDtlEntity.getRtnQty());
  259. rtnSaveDtlEntity.setRtnOdrAmt(Long.valueOf(rtnDtlEntity.getRtnQty()) * rtnSaveDtlEntity.getUnitAmt());
  260. rtnSaveDtlEntity.setRodrDtlStCd("ROD0");
  261. rtnTotAmt = rtnTotAmt + rtnSaveDtlEntity.getRtnOdrAmt();
  262. rtnItemCnt = rtnItemCnt + 1;
  263. rtnOrdDtlList.add(rtnSaveDtlEntity);
  264. }
  265. // 체크로직필요
  266. if ("C002".equals(rtnOrdEntity.getColDvsn())) {
  267. // 공급사 수거일경우
  268. // 공급사는 하나여야 함
  269. if("".equals(saveRtnOrdRequest.getSpplyId())) {
  270. throw new GlobalException(SystemMessageCode.ERR_NOTSPPLY);
  271. }
  272. if ("Y".equals(diffSpplyYn)) {
  273. // 공급사는 하나여야 합니다.
  274. throw new GlobalException(SystemMessageCode.ERR_NEQSPPLY);
  275. }
  276. } else {
  277. // 브랜드 수거 - 매장
  278. if ("".equals(rtnOrdEntity.getStoreId())) {
  279. // 매장정보가 없습니다.
  280. throw new GlobalException(SystemMessageCode.ERR_NONSTOREID);
  281. }
  282. //입고창고정보 존재여부 파악
  283. if ("".equals(rtnOrdEntity.getWhsId()) || "".equals(rtnOrdEntity.getLocation())) {
  284. throw new GlobalException(SystemMessageCode.ERR_INWHS);
  285. }
  286. }
  287. rtnOrdEntity.setRtnDodrTotalAmt(rtnTotAmt);
  288. rtnOrdEntity.setRtnDodrItemQty(rtnItemCnt);
  289. rtnOdrMapper.insertRtnOdrBaseInfo(userId, rtnOrdEntity);
  290. rtnOdrMapper.insertRtnOdrDtlPtcl(userId, rtnOrdDtlList);
  291. // 반품요청건에 대한 상태에 대한 처리상태 변경
  292. if ("R".equals(saveRtnOrdRequest.getJobCd())) { // 반품요청건
  293. rtnReqMapper.updateSelRtnReqDtlStCd(userId,rtnReqDtlList);
  294. String rtnReqUnqNo = "";
  295. List<RtnReqBaseInfoEntity> rtnReqList = new ArrayList<RtnReqBaseInfoEntity>();
  296. for (int k = 0; k < rtnReqDtlList.size(); k++) {
  297. if (!rtnReqUnqNo.equals(rtnReqDtlList.get(k).getRtnReqUnqNo())) {
  298. rtnReqUnqNo = rtnReqDtlList.get(k).getRtnReqUnqNo();
  299. String rtnReqStCd = rtnReqService.selectRtnReqDtlStatusList(rtnReqUnqNo);
  300. RtnReqBaseInfoEntity rtnReqEntity = new RtnReqBaseInfoEntity(); // 반품요청상태
  301. rtnReqEntity.setRtnReqUnqNo(rtnReqUnqNo);
  302. rtnReqEntity.setRtnReqStCd(rtnReqStCd);
  303. rtnReqList.add(rtnReqEntity);
  304. }
  305. }
  306. rtnReqMapper.updateRtnReqStCd(userId, rtnReqList);
  307. }
  308. }
  309. } catch (GlobalException e) {
  310. //e.getStackTrace();
  311. e.printStackTrace();
  312. throw new GlobalException(e.getSystemMessageCode());
  313. } catch (Exception e) {
  314. e.printStackTrace();
  315. throw new RuntimeException();
  316. }
  317. }
  318. /*
  319. 반품발주 그리드 리스트 조회
  320. */
  321. public GridResponse selectRtnOdrGridList(String sBrandId, String fromDt, String toDt, String sRtnOdrStCd, String sRtnWhsId, String sColDvsn, String sWhsId, String sSpplyId, String sItemNm, GridRequest gridRequest) throws Exception {
  322. int gridPage = gridRequest.getGridPage();
  323. int gridSize = gridRequest.getGridSize();
  324. //System.out.println(sBrandId + "==" + fromDt + "==" + toDt + "==" + srtnOdrStCd + "==" + sSpplyId + "==" + sWhsId + "==" + sItemNm);
  325. fromDt = fromDt == null ? null : fromDt.replace(".", "");
  326. toDt = toDt == null ? null : toDt.replace(".", "");
  327. int gridRecords = rtnOdrMapper.selectRtnOdrGridCnt(sBrandId, fromDt, toDt, sRtnOdrStCd,sRtnWhsId, sColDvsn, sWhsId, sSpplyId, sItemNm );
  328. int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
  329. List<RtnOdrBaseInfoEntity> entities = rtnOdrMapper.selectRtnOdrGridList(sBrandId, fromDt, toDt, sRtnOdrStCd,sRtnWhsId, sColDvsn, sWhsId, sSpplyId, sItemNm, gridRequest);
  330. List<Object> gridRows = entities.stream()
  331. .map(m -> RtnOdrSearchListResponse.builder()
  332. .viewCd("R")
  333. .rtnPodrUnqNo(m.getRtnPodrUnqNo() == null ? "" : m.getRtnPodrUnqNo())
  334. .brandId(m.getBrandId() == null ? "" : m.getBrandId())
  335. .brandNm(m.getBrandNm() == null ? "" : m.getBrandNm())
  336. .rtnOdrStCd(m.getRtnOdrStCd() == null ? "" : m.getRtnOdrStCd())
  337. .rtnOdrStNm(m.getRtnOdrStNm() == null ? "" : m.getRtnOdrStNm())
  338. .rtnOdrRegDt(m.getRtnOdrRegDt() == null ? "" : m.getRtnOdrRegDt())
  339. .rtnWhsId(m.getRtnWhsId() == null ? "" : m.getRtnWhsId())
  340. .rtnLocation(m.getRtnLocation() == null ? "" : m.getRtnLocation())
  341. .rtnWhsNm(m.getRtnWhsNm() == null ? "" : m.getRtnWhsNm())
  342. .rtnLocationNm(m.getRtnLocationNm() == null ? "" : m.getRtnLocationNm())
  343. .spplyId(m.getSpplyId() == null ? "" : m.getSpplyId())
  344. .spplyNm(m.getSpplyNm() == null ? "" : m.getSpplyNm())
  345. .whsId(m.getWhsId() == null ? "" : m.getWhsId())
  346. .location(m.getLocation() == null ? "" : m.getLocation())
  347. .whsNm(m.getWhsNm() == null ? "" : m.getWhsNm())
  348. .locationNm(m.getLocationNm() == null ? "" : m.getLocationNm())
  349. .rtnDodrTotalAmt(m.getRtnDodrTotalAmt() == null ? 0 : m.getRtnDodrTotalAmt())
  350. .rtnDodrItemQty(m.getRtnDodrItemQty() == null ? 0 : m.getRtnDodrItemQty())
  351. .colReqDt(m.getColReqDt() == null ? "" : m.getColReqDt())
  352. .colDvsn(m.getColDvsn() == null ? "" : m.getColDvsn())
  353. .colDvsnNm(m.getColDvsnNm() == null ? "" : m.getColDvsnNm())
  354. .build())
  355. .collect(Collectors.toList());
  356. return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
  357. }
  358. /* 반품발주 정보 */
  359. public RtnOdrInfoResponse selectrtnOdrInfo(String rtnPodrUnqNo) throws Exception {
  360. RtnOdrBaseInfoEntity entity = rtnOdrMapper.selectRtnOdrInfo(rtnPodrUnqNo);
  361. List<RtnOdrDtlPtclEntity> dtlEntity = rtnOdrMapper.selectROdrDtlList( rtnPodrUnqNo);
  362. return RtnOdrInfoResponse.toDTO(entity,dtlEntity);
  363. }
  364. /*
  365. 반품 발주 취소처리
  366. */
  367. @Transactional
  368. public void cancelRtnOrdDtl(String userId, CancelRtnOrdDtlRequest cancelRtnOrdDtlRequest) throws Exception {
  369. try {
  370. // 수거서 생성 여부 파악 (이미생성시 반품 취소 불가)
  371. int ingCnt = colOdrMapper.selectColRtnIngCnt(cancelRtnOrdDtlRequest.getBrandId(), cancelRtnOrdDtlRequest.getRtnPodrUnqNo());
  372. if (ingCnt > 0) {
  373. throw new GlobalException(SystemMessageCode.ERR_INGCOLCNT);
  374. }
  375. //반품요청 취소처리
  376. rtnOdrMapper.updateChgRodrStCd(userId, cancelRtnOrdDtlRequest.getRtnPodrUnqNo(),"RO99");
  377. rtnOdrMapper.updateChangeRodrDtlStCd(userId, cancelRtnOrdDtlRequest.getRtnPodrUnqNo(),"ROD4");
  378. RtnOdrBaseInfoEntity rtnOdrInfo = rtnOdrMapper.selectRtnOdrInfo(cancelRtnOrdDtlRequest.getRtnPodrUnqNo());
  379. // 반품요청건에 대한 상태에 대한 처리상태 변경 RR01
  380. if ("RR01".equals(rtnOdrInfo.getRtnReqDvsn())) { // 요청반품건은 반품요청건 상태 변경처리함
  381. List<RtnOdrDtlPtclEntity> rtnOrdList = rtnOdrMapper.selectROdrDtlList(cancelRtnOrdDtlRequest.getRtnPodrUnqNo());
  382. List<RtnReqDtlPtclEntity> rtnReqDtlList = new ArrayList<RtnReqDtlPtclEntity>();
  383. List<RtnReqBaseInfoEntity> rtnReqBaseList = new ArrayList<RtnReqBaseInfoEntity>();
  384. String rtnReqUnqNo = "";
  385. for (int i = 0 ; i < rtnOrdList.size() ;i++) {
  386. RtnOdrDtlPtclEntity rtnOdrEntity = rtnOrdList.get(i);
  387. RtnReqDtlPtclEntity rtnReqDtlEntity = new RtnReqDtlPtclEntity();
  388. RtnReqBaseInfoEntity rtnReqBaseEntity = new RtnReqBaseInfoEntity();
  389. rtnReqDtlEntity.setRtnReqUnqNo(rtnOdrEntity.getRtnReqUnqNo());
  390. rtnReqDtlEntity.setRtnReqDtlNo(rtnOdrEntity.getRtnReqDtlNo());
  391. rtnReqDtlEntity.setRtnReqDtlStCd("RRD99");
  392. rtnReqDtlList.add(rtnReqDtlEntity);
  393. if (!rtnReqUnqNo.equals(rtnOdrEntity.getRtnReqUnqNo())) {
  394. rtnReqUnqNo = rtnOdrEntity.getRtnReqUnqNo();
  395. rtnReqBaseEntity.setRtnReqUnqNo(rtnReqUnqNo);
  396. String rtnReqStcd = rtnReqService.selectRtnReqDtlStatusList(rtnReqUnqNo);
  397. rtnReqBaseEntity.setRtnReqStCd(rtnReqStcd);
  398. rtnReqBaseList.add(rtnReqBaseEntity);
  399. }
  400. }
  401. rtnReqMapper.updateRtnReqStCd(userId,rtnReqBaseList);
  402. }
  403. } catch (GlobalException e) {
  404. //e.getStackTrace();
  405. e.printStackTrace();
  406. throw new GlobalException(e.getSystemMessageCode());
  407. } catch (Exception e) {
  408. e.printStackTrace();
  409. throw new RuntimeException();
  410. }
  411. }
  412. public String selectRtnOdrDtlStatusList(String rtnPodrUnqNo) throws Exception {
  413. //PCH_ODR_ST_CD
  414. String rtnOdrStCd = "";
  415. List<RtnOdrDtlPtclEntity> dtlEntity = rtnOdrMapper.selectRtnOdrDtlStatusList( rtnPodrUnqNo);
  416. int rod0 = 0 ;
  417. int rod1 = 0 ;
  418. int rod2 = 0 ;
  419. int rod3 = 0 ;
  420. int rod4 = 0 ;
  421. for (int i = 0 ; i < dtlEntity.size() ; i++ ) {
  422. RtnOdrDtlPtclEntity entity = dtlEntity.get(i);
  423. if ( "ROD0".equals(entity.getRodrDtlStCd())) { // 임시저장
  424. rod0 = rod0 + entity.getRtnStatusCnt() ;
  425. } else if ( "ROD1".equals(entity.getRodrDtlStCd())) { // 요청
  426. rod1 = rod1 + entity.getRtnStatusCnt() ;
  427. } else if ( "ROD3".equals(entity.getRodrDtlStCd())) { //접수
  428. rod3 = rod3 + entity.getRtnStatusCnt() ;
  429. } else if ( "ROD4".equals(entity.getRodrDtlStCd())) { //취소
  430. rod4 = rod4 + entity.getRtnStatusCnt() ;
  431. }
  432. }
  433. if (rod0 > 0 ) {
  434. rtnOdrStCd = "RO00"; //임시저장
  435. } else if ( rod0 == 0 && rod1 > 0 ) {
  436. rtnOdrStCd = "RO20"; // 접수
  437. } else if ( rod0 == 0 && rod1 == 0 && rod3 > 0 ) {
  438. rtnOdrStCd = "RO30"; // 취소
  439. } else {
  440. rtnOdrStCd = "RO99"; // 취소
  441. }
  442. return rtnOdrStCd;
  443. }
  444. /*
  445. 공급사 수주현황 리스트
  446. public GridResponse selectSpplyPoGridList(String sBrandId, String fromDt, String toDt, String sSpplyId, String sWhsId, String srtnOdrStCd, String sItemNm, GridRequest gridRequest) throws Exception {
  447. int gridPage = gridRequest.getGridPage();
  448. int gridSize = gridRequest.getGridSize();
  449. fromDt = fromDt == null ? null : fromDt.replace(".", "");
  450. toDt = toDt == null ? null : toDt.replace(".", "");
  451. int gridRecords = pchOrdMapper.selectSpplyPoGridCnt(sBrandId, fromDt, toDt, sSpplyId, sWhsId, srtnOdrStCd, sItemNm);
  452. int gridTotal = fnCalculateGridTotal(gridSize, gridRecords);
  453. List<rtnOdrBaseInfoEntity> entities = pchOrdMapper.selectSpplyPoGridList(sBrandId, fromDt, toDt, sSpplyId, sWhsId, srtnOdrStCd, sItemNm, gridRequest);
  454. List<Object> gridRows = entities.stream()
  455. .map(m -> SpplyPoOdrSearchListResponse.builder()
  456. .viewCd("R")
  457. .brandId(m.getBrandId() == null ? "" : m.getBrandId())
  458. .brandNm(m.getBrandNm() == null ? "" : m.getBrandNm())
  459. .pchPodrUnqNo(m.getPchPodrUnqNo() == null ? "" : m.getPchPodrUnqNo())
  460. .rtnOdrStCd(m.getrtnOdrStCd() == null ? "" : m.getrtnOdrStCd())
  461. .rtnOdrStNm(m.getrtnOdrStNm() == null ? "" : m.getrtnOdrStNm())
  462. .podrDt(m.getPodrDt() == null ? "" : m.getPodrDt())
  463. .dlvReqDt(m.getDlvReqDt() == null ? "" : m.getDlvReqDt())
  464. .whsNm(m.getWhsNm() == null ? "" : m.getWhsNm() + "-" + m.getLocationNm())
  465. .podrTotalAmt(m.getPodrTotalAmt() == null ? 0 : m.getPodrTotalAmt())
  466. .podrItemQty(m.getPodrItemQty() == null ? 0 : m.getPodrItemQty())
  467. .podrMgrNm(m.getPodrMgrNm() == null ? "" : m.getPodrMgrNm())
  468. .build())
  469. .collect(Collectors.toList());
  470. return GridResponse.toDTO(gridPage, gridTotal, gridRecords, gridRows);
  471. }
  472. */
  473. /* 구매발주 정보
  474. public SpplyrtnOdrInfoResponse selectSpplyrtnOdrInfo(String brandId, String pchReqUnqNo, String spplyId) throws Exception {
  475. rtnOdrBaseInfoEntity entity = pchOrdMapper.selectSpplyrtnOdrInfo(brandId, pchReqUnqNo, spplyId);
  476. List<rtnOdrDtlPtclEntity> dtlEntity = pchOrdMapper.selectSpplyOdrDtlList(brandId, pchReqUnqNo, spplyId);
  477. return SpplyrtnOdrInfoResponse.toDTO(entity,dtlEntity);
  478. }
  479. */
  480. /* 구매발주에 대한 출고가능수량 정보
  481. public PchOrdWhsQtyResponse selectWhsPassQty(PchReqOrdPassQtyRequest pchReqOrdPassQtyRequest ) throws Exception {
  482. List<StckMgntBaseInfoEntity> gridItemData = pchReqOrdPassQtyRequest.toCodeEntities(pchReqOrdPassQtyRequest.getGridUpdateData());
  483. List<StckMgntBaseInfoEntity> stokList = stockMngMapper.selectWhsLocOutPassQty(pchReqOrdPassQtyRequest.getBrandId(), pchReqOrdPassQtyRequest.getWhsId(), pchReqOrdPassQtyRequest.getLocation(), gridItemData);
  484. return PchOrdWhsQtyResponse.toDTO(stokList);
  485. }
  486. */
  487. }