TsaGoodsController.java 105 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490
  1. package com.style24.admin.biz.web;
  2. import java.awt.Image;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.Collection;
  7. import javax.imageio.ImageIO;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.swing.ImageIcon;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.core.env.Environment;
  13. import org.springframework.core.io.InputStreamResource;
  14. import org.springframework.http.ResponseEntity;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.web.bind.annotation.GetMapping;
  17. import org.springframework.web.bind.annotation.PathVariable;
  18. import org.springframework.web.bind.annotation.PostMapping;
  19. import org.springframework.web.bind.annotation.RequestBody;
  20. import org.springframework.web.bind.annotation.RequestMapping;
  21. import org.springframework.web.bind.annotation.RequestMethod;
  22. import org.springframework.web.bind.annotation.ResponseBody;
  23. import org.springframework.web.servlet.ModelAndView;
  24. import com.fasterxml.jackson.core.type.TypeReference;
  25. import com.fasterxml.jackson.databind.ObjectMapper;
  26. import com.style24.admin.biz.service.TsaCommonService;
  27. import com.style24.admin.biz.service.TsaCustomerService;
  28. import com.style24.admin.biz.service.TsaGoodsService;
  29. import com.style24.admin.biz.service.TsaRendererService;
  30. import com.style24.admin.biz.service.TsaSystemService;
  31. import com.style24.admin.support.controller.TsaBaseController;
  32. import com.style24.admin.support.security.session.TsaSession;
  33. import com.style24.core.biz.service.TscKakaotalkService;
  34. import com.style24.core.support.message.TscMessageByLocale;
  35. import com.style24.persistence.TscPageRequest;
  36. import com.style24.persistence.domain.AdKeyword;
  37. import com.style24.persistence.domain.AdKeywordGoods;
  38. import com.style24.persistence.domain.Brand;
  39. import com.style24.persistence.domain.Color;
  40. import com.style24.persistence.domain.FreeGoods;
  41. import com.style24.persistence.domain.Goods;
  42. import com.style24.persistence.domain.GoodsCompose;
  43. import com.style24.persistence.domain.GoodsContents;
  44. import com.style24.persistence.domain.GoodsContentsData;
  45. import com.style24.persistence.domain.GoodsEpSkip;
  46. import com.style24.persistence.domain.GoodsHst;
  47. import com.style24.persistence.domain.GoodsImg;
  48. import com.style24.persistence.domain.GoodsMass;
  49. import com.style24.persistence.domain.GoodsNaverLowestPrice;
  50. import com.style24.persistence.domain.GoodsNotiInfo;
  51. import com.style24.persistence.domain.GoodsPriceRes;
  52. import com.style24.persistence.domain.GoodsResSell;
  53. import com.style24.persistence.domain.GoodsSafeNo;
  54. import com.style24.persistence.domain.GoodsSearch;
  55. import com.style24.persistence.domain.GoodsSupplyPrice;
  56. import com.style24.persistence.domain.GoodsTnmRes;
  57. import com.style24.persistence.domain.GoodsVideo;
  58. import com.style24.persistence.domain.IfIncomelot;
  59. import com.style24.persistence.domain.Itemkind;
  60. import com.style24.persistence.domain.NotiInfo;
  61. import com.style24.persistence.domain.Notice;
  62. import com.style24.persistence.domain.NoticeGoods;
  63. import com.style24.persistence.domain.Option;
  64. import com.style24.persistence.domain.ReinboundInform;
  65. import com.style24.persistence.domain.SizeInfo;
  66. import com.style24.persistence.domain.User;
  67. import com.style24.persistence.domain.WmsColorMapping;
  68. import com.style24.persistence.domain.WmsGoods;
  69. import com.style24.persistence.domain.WmsSeasonMapping;
  70. import com.style24.persistence.domain.WmsStyleYearMapping;
  71. import lombok.extern.slf4j.Slf4j;
  72. import com.gagaframework.excel.GagaExcelUtil;
  73. import com.gagaframework.web.parameter.GagaMap;
  74. import com.gagaframework.web.rest.server.GagaResponse;
  75. import com.gagaframework.web.rest.server.GagaResponseStatus;
  76. import com.gagaframework.web.util.GagaDateUtil;
  77. import com.gagaframework.web.util.GagaFileUtil;
  78. import com.gagaframework.web.util.GagaStringUtil;
  79. /**
  80. * 상품관리 Controller
  81. *
  82. * @author eskim
  83. * @since 2020. 10. 16
  84. */
  85. @Controller
  86. @RequestMapping("/goods")
  87. @Slf4j
  88. public class TsaGoodsController extends TsaBaseController {
  89. @Autowired
  90. private TscMessageByLocale message;
  91. @Autowired
  92. private Environment env;
  93. @Autowired
  94. private TsaGoodsService goodsService;
  95. @Autowired
  96. private TsaRendererService rendererService;
  97. @Autowired
  98. private TsaCommonService commonService;
  99. @Autowired
  100. private TsaSystemService systemService;
  101. @Autowired
  102. private TscKakaotalkService coreKakaotalkService;
  103. @Autowired
  104. private TsaCustomerService customerService;
  105. @Autowired
  106. private ObjectMapper mapper;
  107. private static final int EXCEL_ROW_COUNT = 500;
  108. /**
  109. * 품목관리 화면
  110. *
  111. * @return
  112. * @author eskim
  113. * @since 2020. 10. 16
  114. */
  115. @GetMapping("/itemkind/base/form")
  116. public ModelAndView itemkindBaseForm() {
  117. ModelAndView mav = new ModelAndView();
  118. // 정보고시 목록
  119. mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
  120. mav.setViewName("goods/ItemkindBaseForm");
  121. return mav;
  122. }
  123. /**
  124. * 품목관리 조회
  125. *
  126. * @return
  127. * @author eskim
  128. * @since 2020. 10. 16
  129. */
  130. @PostMapping("/itemkind/base/list")
  131. @ResponseBody
  132. public Collection<Itemkind> getItemkindList(@RequestBody Itemkind itemkind) {
  133. return goodsService.getItemkindList(itemkind);
  134. }
  135. /**
  136. * 품목 관리 저장/등록
  137. *
  138. * @param itemkindList
  139. * @return
  140. * @author eskim
  141. * @since 2020. 10. 16
  142. */
  143. @PostMapping("/itemkind/save")
  144. @ResponseBody
  145. public GagaResponse saveItemkindInfo(@RequestBody Collection<Itemkind> itemkindList) {
  146. goodsService.saveItemkindInfo(itemkindList);
  147. return super.ok(message.getMessage("SUCC_0001"));
  148. }
  149. /**
  150. * 품목관리 삭제
  151. *
  152. * @param itemkindList
  153. * @author eskim
  154. * @since 2020. 10. 16
  155. */
  156. @PostMapping("/itemkind/delete")
  157. @ResponseBody
  158. public GagaResponse deleteItemkindInfo(@RequestBody Collection<Itemkind> itemkindList) {
  159. goodsService.deleteItemkindInfo(itemkindList);
  160. return super.ok(message.getMessage("SUCC_0003"));
  161. }
  162. /**
  163. * 색상관리 화면
  164. *
  165. * @return
  166. * @author eskim
  167. * @since 2020. 10. 16
  168. */
  169. @GetMapping("/color/form")
  170. public ModelAndView colorForm() {
  171. ModelAndView mav = new ModelAndView();
  172. // 대표컬러목록
  173. mav.addObject("groupColorCodeList", rendererService.getColorGrpCdRgbList());
  174. // 대표컬러명목록
  175. mav.addObject("groupColorCodeNmList", rendererService.getCommonCodeList("G072"));
  176. mav.setViewName("goods/ColorForm");
  177. return mav;
  178. }
  179. /**
  180. * 색상 조회
  181. *
  182. * @param color
  183. * @return
  184. * @author eskim
  185. * @since 2020. 10. 16
  186. */
  187. @PostMapping("/color/list")
  188. @ResponseBody
  189. public Collection<Color> getColorList(@RequestBody Color color) {
  190. return goodsService.getColorList(color);
  191. }
  192. /**
  193. * 색상 저장
  194. *
  195. * @param color
  196. * @return
  197. * @author eskim
  198. * @since 2020. 10. 16
  199. */
  200. @PostMapping("/color/save")
  201. @ResponseBody
  202. public GagaResponse saveColor(@RequestBody Collection<Color> colorList) {
  203. goodsService.saveColor(colorList);
  204. return super.ok(message.getMessage("SUCC_0001"));
  205. }
  206. /**
  207. * WMS 시즌매핑 화면
  208. *
  209. * @return
  210. * @author eskim
  211. * @since 2020. 11. 13
  212. */
  213. @GetMapping("/wms/season/form")
  214. public ModelAndView seasonForm() {
  215. ModelAndView mav = new ModelAndView();
  216. // 시즌
  217. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  218. mav.setViewName("goods/WmsSeasonMappingForm");
  219. return mav;
  220. }
  221. /**
  222. * WMS 시즌 매핑 조회
  223. *
  224. * @param color
  225. * @return
  226. * @author eskim
  227. * @since 2020. 11. 13
  228. */
  229. @PostMapping("/wms/season/mapping/list")
  230. @ResponseBody
  231. public Collection<WmsSeasonMapping> getWmsSeasonMappingList(@RequestBody WmsSeasonMapping wmsSeasonMapping) {
  232. return goodsService.getWmsSeasonMappingList(wmsSeasonMapping);
  233. }
  234. /**
  235. * WMS 시즌 매핑 저장
  236. *
  237. * @param color
  238. * @return
  239. * @author eskim
  240. * @since 2020. 11. 13
  241. */
  242. @PostMapping("/wms/season/mapping/save")
  243. @ResponseBody
  244. public GagaResponse saveWmsSeasonMapping(@RequestBody Collection<WmsSeasonMapping> wmsSeasonMappingList) {
  245. goodsService.saveWmsSeasonMapping(wmsSeasonMappingList);
  246. return super.ok(message.getMessage("SUCC_0001"));
  247. }
  248. /**
  249. * 고시정보관리 화면
  250. *
  251. * @return
  252. * @author eskim
  253. * @since 2020. 10. 16
  254. */
  255. @GetMapping("/notiinfo/form")
  256. public ModelAndView notiinfoForm() {
  257. ModelAndView mav = new ModelAndView();
  258. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  259. // 정보고시 분류별 항목
  260. mav.addObject("niItemCdList", rendererService.getAvailCommonCodeList("G005"));
  261. mav.setViewName("goods/NotiinfoForm");
  262. return mav;
  263. }
  264. /**
  265. * 정보고시관리 조회
  266. *
  267. * @param notiInfo
  268. * @return
  269. * @author eskim
  270. * @since 2010. 10. 19
  271. */
  272. @PostMapping("/notiInfo/list")
  273. @ResponseBody
  274. public Collection<NotiInfo> getNotiInfoList(NotiInfo notiInfo) {
  275. return goodsService.getNotiInfoList(notiInfo);
  276. }
  277. /**
  278. * 정보고시 항목 목록
  279. *
  280. * @param notiInfo
  281. * @return
  282. * @author eskim
  283. * @since 2010. 10. 19
  284. */
  285. @PostMapping("/notiInfo/item/list")
  286. @ResponseBody
  287. public Collection<NotiInfo> getNotiInfoItemList(@RequestBody NotiInfo notiInfo) {
  288. return goodsService.getNotiInfoItemList(notiInfo);
  289. }
  290. /**
  291. * 정보고시 상세 저장
  292. *
  293. * @param notiInfoList
  294. * @return
  295. * @author eskim
  296. * @since 2010. 10. 19
  297. */
  298. @PostMapping("/notiInfo/item/save")
  299. @ResponseBody
  300. public GagaResponse saveNotiInfoItem(@RequestBody Collection<NotiInfo> notiInfoList) {
  301. goodsService.saveNotiInfoItem(notiInfoList);
  302. return super.ok(message.getMessage("SUCC_0001"));
  303. }
  304. /**
  305. * WMS 색상 매핑 화면
  306. *
  307. * @return
  308. * @author eskim
  309. * @since 2020. 11. 12
  310. */
  311. @GetMapping("/wms/color/form")
  312. public ModelAndView wmsColorForm() {
  313. ModelAndView mav = new ModelAndView();
  314. Color color = new Color();
  315. mav.addObject("colorList", rendererService.getColorList(color));
  316. mav.setViewName("goods/WmsColorMappingForm");
  317. return mav;
  318. }
  319. /**
  320. * WMS 색상 매핑 조회
  321. *
  322. * @param color
  323. * @return
  324. * @author eskim
  325. * @since 2020. 11. 12
  326. */
  327. @PostMapping("/wms/color/mapping/list")
  328. @ResponseBody
  329. public Collection<WmsColorMapping> getWmsColorMappingList(@RequestBody WmsColorMapping wmsColorMapping) {
  330. return goodsService.getWmsColorMappingList(wmsColorMapping);
  331. }
  332. /**
  333. * WMS 색상 매핑 저장
  334. *
  335. * @param color
  336. * @return
  337. * @author eskim
  338. * @since 2020. 11. 12
  339. */
  340. @PostMapping("/wms/color/mapping/save")
  341. @ResponseBody
  342. public GagaResponse saveWmsColorMapping(@RequestBody Collection<WmsColorMapping> wmsColorMappingList) {
  343. goodsService.saveWmsColorMapping(wmsColorMappingList);
  344. return super.ok(message.getMessage("SUCC_0001"));
  345. }
  346. /**
  347. * WMS 스타일년도 매핑 화면
  348. *
  349. * @return
  350. * @author eskim
  351. * @since 2020. 11. 12
  352. */
  353. @GetMapping("/wms/styleYear/form")
  354. public ModelAndView wmsStyleYearForm() {
  355. ModelAndView mav = new ModelAndView();
  356. // 년도
  357. int fromYear = Integer.parseInt("2008");
  358. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy"));
  359. mav.addObject("styleYearList", rendererService.getYearList(fromYear, 0, toYear - fromYear + 3));
  360. mav.setViewName("goods/WmsStyleYearMappingForm");
  361. return mav;
  362. }
  363. /**
  364. * WMS 스타일년도 매핑 조회
  365. *
  366. * @param color
  367. * @return
  368. * @author eskim
  369. * @since 2020. 11. 13
  370. */
  371. @PostMapping("/wms/styleYear/mapping/list")
  372. @ResponseBody
  373. public Collection<WmsStyleYearMapping> getWmsStyleYearMappingList(@RequestBody WmsStyleYearMapping wmsStyleYearMapping) {
  374. return goodsService.getWmsStyleYearMappingList(wmsStyleYearMapping);
  375. }
  376. /**
  377. * WMS 스타일년도 매핑 저장
  378. *
  379. * @param color
  380. * @return
  381. * @author eskim
  382. * @since 2020. 11. 13
  383. */
  384. @PostMapping("/wms/styleYear/mapping/save")
  385. @ResponseBody
  386. public GagaResponse saveWmsStyleYearMapping(@RequestBody Collection<WmsStyleYearMapping> wmsStyleYearMappingList) {
  387. goodsService.saveWmsStyleYearMapping(wmsStyleYearMappingList);
  388. return super.ok(message.getMessage("SUCC_0001"));
  389. }
  390. /**
  391. * 상품목록 화면
  392. *
  393. * @return
  394. * @author eskim
  395. * @since 2020. 10. 16
  396. */
  397. @GetMapping("/list/form")
  398. public ModelAndView listForm() {
  399. ModelAndView mav = new ModelAndView();
  400. // 공급업체
  401. // String supplyCompCd = "";
  402. // String selfYn = "Y";
  403. // if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  404. // supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  405. // selfYn = "N";
  406. // }
  407. // mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
  408. // 상품상태
  409. String[] exceptCds = {"G008_00"};
  410. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  411. // 정상이월
  412. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  413. // 성별
  414. mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
  415. // 시즌
  416. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  417. // 년도
  418. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  419. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  420. // 연령대
  421. mav.addObject("ageGrpCdList", rendererService.getAvailCommonCodeList("G023"));
  422. // 사용여부
  423. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  424. // 품목
  425. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  426. // 상품유형
  427. mav.addObject("goodsTypeList", rendererService.getAvailCommonCodeList("G056"));
  428. // MD
  429. mav.addObject("brandMdList", rendererService.getBrandMdList());
  430. mav.setViewName("goods/GoodsListForm");
  431. return mav;
  432. }
  433. /**
  434. * 상품목록 조회
  435. *
  436. * @return
  437. * @author eskim
  438. * @since 2020. 10. 20
  439. */
  440. @PostMapping("/list")
  441. @ResponseBody
  442. public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
  443. //log.info("[getGoodsList] goodsSearch = {}", goodsSearch);
  444. GagaMap result = new GagaMap();
  445. // 입점업체담당자는 업체코드 설정
  446. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  447. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  448. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  449. }
  450. // multi row 검색관련 처리
  451. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  452. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  453. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  454. goodsSearch.setSearchGb("EXTEND");
  455. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  456. goodsSearch.setSearchGb("MASTER");
  457. }
  458. }
  459. if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
  460. try {
  461. String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
  462. goodsSearch.setMultiBrand(arrBrandCd);
  463. } catch (Exception e) {
  464. e.printStackTrace();
  465. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  466. }
  467. }
  468. if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
  469. try {
  470. String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
  471. goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
  472. } catch (Exception e) {
  473. e.printStackTrace();
  474. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  475. }
  476. }
  477. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  478. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  479. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
  480. // 다다익선 업체+브랜드 상품조회시 사용
  481. if ("N".equals(goodsSearch.getPageingYn())) {
  482. goodsSearch.setPageable(null);
  483. }
  484. result.set("pageing", goodsSearch);
  485. result.set("goodsList", goodsService.getGoodsList(goodsSearch));
  486. return result;
  487. }
  488. /**
  489. * 상품목록 - 기본정보 엑셀다운로드
  490. *
  491. * @param goodsSearch
  492. * @return
  493. * @author eskim
  494. * @since 2020. 10. 21
  495. */
  496. @GetMapping("/info/excel/list")
  497. public ResponseEntity<InputStreamResource> downloadGoodsInfoExcelList(HttpServletRequest request, GoodsSearch goodsSearch) throws Exception {
  498. String excelfileName = "상품_기본정보_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
  499. String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
  500. // 입점업체담당자는 업체코드 설정
  501. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  502. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  503. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  504. }
  505. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  506. // multi row 검색관련 처리
  507. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  508. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  509. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  510. goodsSearch.setSearchGb("EXTEND");
  511. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  512. goodsSearch.setSearchGb("MASTER");
  513. }
  514. }
  515. if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
  516. try {
  517. String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
  518. goodsSearch.setMultiBrand(arrBrandCd);
  519. } catch (Exception e) {
  520. e.printStackTrace();
  521. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  522. }
  523. }
  524. if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
  525. try {
  526. String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
  527. goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
  528. } catch (Exception e) {
  529. e.printStackTrace();
  530. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  531. }
  532. }
  533. log.info("[goodsSearch] ={}", goodsSearch);
  534. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  535. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  536. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
  537. //log.info("[downloadGoodsInfoExcelList] goodsSearch = {}", goodsSearch);
  538. // 대용량엑셀파일다운로드는 이런 식으로 ...
  539. goodsService.getGoodsInfoExcelList(goodsSearch, excelFilenameWithPath);
  540. return GagaFileUtil.writeFile(request, excelFilenameWithPath);
  541. }
  542. /**
  543. * 상품 수정 항목 일괄변경
  544. *
  545. * @param goods
  546. * @return
  547. * @author eskim
  548. * @since 2020. 01. 17
  549. */
  550. @PostMapping("/state/update")
  551. @ResponseBody
  552. public GagaMap updateGoodsState(@RequestBody Goods goods) {
  553. GagaMap result = new GagaMap();
  554. result.set("status", GagaResponseStatus.SUCCESS.getCode()); // 200
  555. result.set("procJob", goods.getProcJob());
  556. String returnGoods = "";
  557. String resultFlag = "SUCC";
  558. if (!"G001_0000".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A000".equals(TsaSession.getInfo().getRoleCd())
  559. && !"G001_A001".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A100".equals(TsaSession.getInfo().getRoleCd())
  560. && !"G001_A101".equals(TsaSession.getInfo().getRoleCd())) {
  561. throw new IllegalStateException("권한이 없습니다.");
  562. }
  563. // 상품 상태 변경일 경우 체크
  564. if ("goodsStat".equals(goods.getProcJob()) && ("G008_40".equals(goods.getGoodsStat()) || "G008_90".equals(goods.getGoodsStat()))) {
  565. // 이미지
  566. Collection<Goods> goodsList = goodsService.getGoodsImgsYn(goods);
  567. for (Goods tmpGoods : goodsList) {
  568. if ("N".equals(tmpGoods.getGoodsImageYn())) {
  569. returnGoods += tmpGoods.getGoodsCd() + ",";
  570. } else {
  571. // 택가/판매가 입력 여부 확인
  572. Goods dataGoods = goodsService.getGoods(tmpGoods);
  573. if (dataGoods == null) {
  574. returnGoods += tmpGoods.getGoodsCd() + ",";
  575. continue;
  576. }
  577. if (dataGoods.getListPrice() <= 0 || dataGoods.getCurrPrice() <= 0) {
  578. returnGoods += tmpGoods.getGoodsCd() + ",";
  579. continue;
  580. }
  581. // 옵션 등록 여부 확인 - 일반상품만 확인
  582. if ("G056_N".equals(dataGoods.getGoodsType())) {
  583. Option stock = new Option();
  584. stock.setGoodsCd(tmpGoods.getGoodsCd());
  585. int stockCnt = goodsService.getGoodsOptionCount(stock);
  586. if (stockCnt <= 0) {
  587. returnGoods += tmpGoods.getGoodsCd() + ",";
  588. continue;
  589. }
  590. }
  591. //고시정보
  592. if ("G056_N".equals(dataGoods.getGoodsType())) {
  593. GoodsNotiInfo goodsNotiInfo = new GoodsNotiInfo();
  594. goodsNotiInfo.setGoodsCd(tmpGoods.getGoodsCd());
  595. goodsNotiInfo.setNiClsfCd(tmpGoods.getNiClsfCd());
  596. Collection<GoodsNotiInfo> goodsNotiInfoList = goodsService.getGoodsNotiInfoList(goodsNotiInfo);
  597. if (goodsNotiInfoList == null || goodsNotiInfoList.isEmpty()) {
  598. returnGoods += tmpGoods.getGoodsCd() + ",";
  599. } else {
  600. for (GoodsNotiInfo tmpGoodsNotiInfo : goodsNotiInfoList) {
  601. if (StringUtils.isBlank(tmpGoodsNotiInfo.getNiContent())) {
  602. returnGoods += tmpGoods.getGoodsCd() + ",";
  603. break;
  604. }
  605. }
  606. }
  607. }
  608. }
  609. }
  610. if (returnGoods.length() > 0) {
  611. returnGoods = returnGoods.substring(0, returnGoods.lastIndexOf(","));
  612. //returnGoods = returnGoods.replaceAll(",", ",\n");
  613. resultFlag = "FAIL";
  614. result.set("resultFlag", resultFlag);
  615. result.set("returnGoods", returnGoods);
  616. return result;
  617. }
  618. }
  619. goodsService.updateGoodsState(goods);
  620. result.set("resultFlag", resultFlag);
  621. result.set("returnGoods", returnGoods);
  622. return result;
  623. }
  624. /**
  625. * 엑셀조회용 상품 저장
  626. *
  627. * @param goods
  628. * @return
  629. * @throws Exception
  630. * @author eskim
  631. * @since 2020. 10. 20
  632. */
  633. @PostMapping("/search/excelupload/save")
  634. @ResponseBody
  635. public GagaResponse saveExceluploadGoods(@RequestBody Goods goods) throws Exception {
  636. int cnt = 0;
  637. ObjectMapper mapper = new ObjectMapper();
  638. String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
  639. // DB 처리 시 사용되는 파라미터명(셀명) 설정
  640. String[] cellName = {"goodsCd"};
  641. Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()), 0, cellName, 0);
  642. //건수
  643. if (ecxelGoodsList != null && ecxelGoodsList.size() > EXCEL_ROW_COUNT) {
  644. throw new IllegalStateException("엑셀 파일의 건수를 " + EXCEL_ROW_COUNT + "건 이하로 사용하세요.");
  645. }
  646. Collection<Goods> goodsList = new ArrayList<>();
  647. for (GagaMap map : ecxelGoodsList) {
  648. Goods tmpGoods = mapper.convertValue(map, Goods.class);
  649. tmpGoods.setRegNo(TsaSession.getInfo().getUserNo());
  650. tmpGoods.setProcJob(goods.getProcJob());
  651. goodsList.add(tmpGoods);
  652. cnt++;
  653. }
  654. goodsService.saveExceluploadGoods(goodsList, goods.getExcelFileNm());
  655. // 파일 삭제
  656. GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
  657. return super.ok("");
  658. }
  659. /**
  660. * 엑셀 업로드 상품 조회
  661. *
  662. * @param
  663. * @return GagaMap
  664. * @author eskim
  665. * @since 2020. 11. 02
  666. */
  667. @PostMapping("/excel/upload/goods/list")
  668. @ResponseBody
  669. public GagaMap getExcelUploadGoodsList() {
  670. GagaMap result = new GagaMap();
  671. GoodsSearch goodsSearch = new GoodsSearch();
  672. goodsSearch.setSearchGb("EXCEL");
  673. // 입점업체담당자는 업체코드 설정
  674. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  675. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  676. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  677. }
  678. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  679. result.set("goodsExcelList", goodsService.getGoodsList(goodsSearch));
  680. return result;
  681. }
  682. /**
  683. * 상품 상세 화면
  684. *
  685. * @param goodsCode - 상품코드
  686. * @return
  687. * @author eskim
  688. * @since 2020. 10. 23
  689. */
  690. @GetMapping("/detail/form")
  691. @ResponseBody
  692. public ModelAndView detailForm(Goods goods) {
  693. ModelAndView mav = new ModelAndView();
  694. // 공급업체
  695. String supplyCompCd = "";
  696. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd));
  697. // String selfYn = "Y";
  698. // if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  699. // supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  700. // selfYn = "N";
  701. // }
  702. // mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
  703. String[] goodsStatExceptCds = {"G008_00"};
  704. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", goodsStatExceptCds));
  705. // 정상이월
  706. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  707. // 성별
  708. mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
  709. // 시즌
  710. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  711. // 사용여부
  712. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  713. // 품목
  714. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  715. // 정보고시 분류
  716. mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
  717. // 사용자 브랜드 조회
  718. mav.addObject("authBrandList", rendererService.getAuthBrandList(TsaSession.getInfo().getUserNo()));
  719. // 상품타입
  720. mav.addObject("goodsTypeList", rendererService.getAvailCommonCodeList("G056"));
  721. // 상품구분
  722. mav.addObject("goodsGbList", rendererService.getAvailCommonCodeList("G073"));
  723. // 유통구분
  724. //String[] distributionGbExceptCds = {"G065_20"};
  725. //mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065", "Y", distributionGbExceptCds));
  726. mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065", "Y"));
  727. // 상품연령대
  728. mav.addObject("ageGrpCdList", rendererService.getAvailCommonCodeList("G023"));
  729. // kc인증타입
  730. mav.addObject("certTypeList", rendererService.getAvailCommonCodeList("G081"));
  731. // kc인증대상구분
  732. mav.addObject("certTargetGbList", rendererService.getAvailCommonCodeList("G083"));
  733. // kc인증형태구분
  734. mav.addObject("certFormGbList", rendererService.getAvailCommonCodeList("G084"));
  735. // 년도
  736. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  737. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  738. // 회원등급
  739. //mav.addObject("custGradeList", rendererService.getAvailCommonCodeList("G110"));
  740. mav.addObject("params", goods);
  741. mav.setViewName("goods/GoodsDetailForm");
  742. return mav;
  743. }
  744. /**
  745. * 상품 상세 조회
  746. *
  747. * @param goods
  748. * @return
  749. * @author eskim
  750. * @since 2020. 10. 23
  751. */
  752. @PostMapping("/detail")
  753. @ResponseBody
  754. public Goods getGoodsDetail(Goods goods) {
  755. return goodsService.getGoods(goods);
  756. }
  757. /**
  758. * 상품 이력 조회
  759. *
  760. * @param goods
  761. * @return
  762. * @author eskim
  763. * @since 2020. 10. 23
  764. */
  765. @GetMapping("/detail/hst/list")
  766. @ResponseBody
  767. public Collection<GoodsHst> getGoodsDetailHstList(Goods goods) {
  768. return goodsService.getGoodsHstList(goods);
  769. }
  770. /**
  771. * 컬러 옵셥 재고
  772. *
  773. * @param goods
  774. * @return
  775. * @author eskim
  776. * @since 2020. 10. 26
  777. */
  778. @PostMapping("/detail/sizeStock/form")
  779. public ModelAndView getGoodsDetailSizeStockForm(Goods goods) {
  780. ModelAndView mav = new ModelAndView();
  781. mav.addObject("goods", goodsService.getGoods(goods));
  782. mav.addObject("goodsSizeList", goodsService.getGoodsSizeList(goods));
  783. mav.addObject("goodsColorList", goodsService.getGoodsColorList(goods));
  784. // 사용여부
  785. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  786. mav.setViewName("goods/GoodsDetailSizeStockForm");
  787. return mav;
  788. }
  789. /**
  790. * 상품 정보고시 조회
  791. *
  792. * @param goods
  793. * @return
  794. * @author eskim
  795. * @since 2020. 10. 26
  796. */
  797. @PostMapping("/detail/notiInfo/list")
  798. @ResponseBody
  799. public Collection<GoodsNotiInfo> getGoodsDetailNotiInfoList(Goods goods) {
  800. GoodsNotiInfo goodsInfo = new GoodsNotiInfo();
  801. goodsInfo.setGoodsCd(goods.getGoodsCd());
  802. goodsInfo.setNiClsfCd(goods.getNiClsfCd());
  803. return goodsService.getGoodsNotiInfoList(goodsInfo);
  804. }
  805. /**
  806. * 상품의 정보고시 항목 목록
  807. *
  808. * @param notiInfo
  809. * @return
  810. * @author eskim
  811. * @since 2020. 10. 26
  812. */
  813. @PostMapping("/noti/goodsInfo/list")
  814. @ResponseBody
  815. public Collection<NotiInfo> getNotiGoodsInfoList(NotiInfo notiInfo) {
  816. return goodsService.getNotiGoodsInfoList(notiInfo);
  817. }
  818. /**
  819. * 상품 구매등급 조회
  820. *
  821. * @param goods
  822. * @return
  823. * @author eskim
  824. * @since 2020. 12. 11
  825. */
  826. @PostMapping("/detail/order/grade/list")
  827. @ResponseBody
  828. public Collection<Goods> getGoodsDetailOrderGradeList(Goods goods) {
  829. return goodsService.getGoodsDetailOrderGradeList(goods);
  830. }
  831. /**
  832. * 상품 안전인증 조회
  833. *
  834. * @param goods
  835. * @return
  836. * @author eskim
  837. * @since 2021. 05. 10
  838. */
  839. @PostMapping("/detail/safe")
  840. @ResponseBody
  841. public GoodsSafeNo getGoodsDetailSafe(Goods goods) {
  842. return goodsService.getGoodsDetailSafe(goods);
  843. }
  844. /**
  845. * 구성상품 목록
  846. *
  847. * @param goods
  848. * @return
  849. * @author eskim
  850. * @since 2020. 10. 27
  851. */
  852. @GetMapping("/detail/compose/list")
  853. @ResponseBody
  854. public Collection<GoodsCompose> getGoodsDetailComposeList(Goods goods) {
  855. return goodsService.getGoodsDetailComposeList(goods);
  856. }
  857. /**
  858. * 상품 안전인증번호 저장
  859. *
  860. * @param goods
  861. * @return
  862. * @author eskim
  863. * @since 2020. 12. 07
  864. */
  865. @PostMapping("/detail/certNum/save")
  866. @ResponseBody
  867. public GagaResponse saveGoodsDetailCertNum(@RequestBody GoodsSafeNo goodsSafeNo) {
  868. goodsService.saveGoodsDetailCertNum(goodsSafeNo);
  869. return super.ok(message.getMessage("SUCC_0001"));
  870. }
  871. /**
  872. * 상품 상세 저장
  873. *
  874. * @param goods
  875. * @return
  876. * @author eskim
  877. * @since 2020. 10. 27
  878. */
  879. @PostMapping("/detail/save")
  880. @ResponseBody
  881. public GagaResponse saveGoodsDetail(@RequestBody Goods goods) {
  882. // 상품상태에 따른 이미지 정보 확인 - 상품상태가 승인대기나 승인 완료일 경우
  883. if ("G008_40".equals(goods.getGoodsStat()) || "G008_90".equals(goods.getGoodsStat())) {
  884. Collection<Goods> goodsList = goodsService.getGoodsImgsYn(goods);
  885. String goodsImageYn = "N";
  886. for (Goods tmpGoods : goodsList) {
  887. goodsImageYn = tmpGoods.getGoodsImageYn();
  888. }
  889. if ("N".equals(goodsImageYn)) {
  890. throw new IllegalStateException("필수 이미지나 고시정보가 등록되지 않은 상품은 '승인대기'나 '승인완료' 상태로 변경할 수 없습니다.");
  891. }
  892. }
  893. Collection<GoodsNotiInfo> notiList = null;
  894. Collection<GoodsCompose> goodComposeList = null;
  895. ObjectMapper mapper = new ObjectMapper();
  896. try {
  897. if (goods.getNotiList() != null) {
  898. notiList = mapper.readValue(goods.getNotiList(), new TypeReference<Collection<GoodsNotiInfo>>() {
  899. });
  900. }
  901. } catch (Exception e) {
  902. e.printStackTrace();
  903. }
  904. try {
  905. if (goods.getGoodsComposeList() != null) {
  906. goodComposeList = mapper.readValue(goods.getGoodsComposeList(), new TypeReference<Collection<GoodsCompose>>() {
  907. });
  908. }
  909. } catch (Exception e) {
  910. e.printStackTrace();
  911. }
  912. goods.setNotiListNew(notiList);
  913. goods.setGoodsComposeListNew(goodComposeList);
  914. goodsService.saveGoodsDetail(goods);
  915. return super.ok(message.getMessage("SUCC_0001"));
  916. }
  917. /**
  918. * 상품 이미지 보기 화면
  919. *
  920. * @param goodsCode - 상품코드
  921. * @return
  922. * @author eskim
  923. * @since 2020. 11. 09
  924. */
  925. @GetMapping("/image/form")
  926. @ResponseBody
  927. public ModelAndView imageMassForm(GoodsImg goodsImg) {
  928. ModelAndView mav = new ModelAndView();
  929. Collection<GoodsImg> goodsImgList = goodsService.getGoodsImgList(goodsImg);
  930. if (goodsImgList != null && !goodsImgList.isEmpty()) {
  931. mav.addObject("goodsImgList", goodsImgList);
  932. for (GoodsImg goodsImgInfo : goodsImgList) {
  933. if (goodsImgInfo.getDefaultImgYn().equals("Y")) {
  934. mav.addObject("defaultImgOrd", goodsImgInfo.getDispOrd());
  935. }
  936. if (goodsImgInfo.getMouseoverImgYn().equals("Y")) {
  937. mav.addObject("mouseoverImgOrd", goodsImgInfo.getDispOrd());
  938. }
  939. }
  940. } else { // 대표이미지와 마우스오버이미지가 없으면
  941. mav.addObject("goodsImgList", new ArrayList<GoodsImg>());
  942. mav.addObject("defaultImgOrd", "1");
  943. mav.addObject("mouseoverImgOrd", "1");
  944. }
  945. GoodsImg goodsModelInfo = goodsService.getGoodsModelInfo(goodsImg);
  946. if (goodsModelInfo != null) {
  947. mav.addObject("modelInfo", goodsModelInfo.getModelInfo());
  948. } else {
  949. mav.addObject("modelInfo", "");
  950. }
  951. mav.addObject("goodsImg", goodsImg);
  952. mav.setViewName("goods/GoodsImageForm");
  953. return mav;
  954. }
  955. /**
  956. * 상품 썸네일 이미지 저장 처리
  957. * @param goodsImgList - 상품이미지 목록
  958. * @return
  959. * @throws Exception
  960. * @author eskim
  961. * @since 2020. 12. 21
  962. */
  963. @RequestMapping(value = "/thumbnail/image/save", method = RequestMethod.POST)
  964. @ResponseBody
  965. public GagaResponse saveGoodsThumbnailImageList(@RequestBody Collection<GoodsImg> goodsImgList) throws Exception {
  966. if (goodsImgList == null || goodsImgList.isEmpty()) {
  967. throw new IllegalStateException(message.getMessage("FAIL_1001"));
  968. }
  969. String dextUploadPath = env.getProperty("upload.dext.target.path");
  970. String goodsTargetPath = env.getProperty("upload.goods.target.path");
  971. int index = 1;
  972. String strBrandNo = "";
  973. GoodsImg goodsModelInfo = new GoodsImg();
  974. // 오류 파일 목록
  975. Collection<File> errorFileList = new ArrayList<File>();
  976. Collection<File> errorFileDextList = new ArrayList<File>();
  977. // 1.업로드된 파일 rename 및 순서 재정렬
  978. for (GoodsImg goodsImg : goodsImgList) {
  979. goodsModelInfo.setGoodsCd(goodsImg.getGoodsCd());
  980. goodsModelInfo.setModelInfo(goodsImg.getModelInfo());
  981. // dx5에서 삭제한 파일은 skip
  982. if (goodsImg.getMode().equals("D")) {
  983. continue;
  984. }
  985. // 상품의 브랜드 번호 추출
  986. if (strBrandNo.isEmpty()) {
  987. Goods goods = new Goods();
  988. goods.setGoodsCd(goodsImg.getGoodsCd());
  989. Goods goodsInfo = goodsService.getGoods(goods);
  990. if (goodsInfo == null || goodsInfo.getGoodsCd().isEmpty()) {
  991. deleteErrorFileList(errorFileList);
  992. deleteErrorFileList(errorFileDextList);
  993. throw new IllegalStateException(message.getMessage("FAIL_1001"));
  994. }
  995. strBrandNo = String.valueOf(goodsInfo.getBrandNo());
  996. }
  997. String brandDir = GagaStringUtil.getLPadding(strBrandNo, 10, "0");
  998. if (goodsImg.getMode().equals("C")) { // 업로드 된 파일 rename 처리
  999. // String newFilename = goodsImg.getGoodsCd()
  1000. // + "_" + goodsImg.getColorCd()
  1001. // + "_" + String.valueOf(index)
  1002. // + "(" + GagaDateUtil.getTodayTime() + ")"
  1003. // + "." + StringUtils.getFilenameExtension(goodsImg.getSysImgNm());
  1004. String newFilename = goodsImg.getSysImgNm();
  1005. //브랜드 폴더 확인
  1006. String goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsTargetPath, brandDir); // 브랜드 폴더
  1007. File brandPath = new File(goodsUploadPath);
  1008. if (!brandPath.exists()) {
  1009. brandPath.mkdir();
  1010. }
  1011. goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsUploadPath, GagaDateUtil.getToday()); //브랜드+/+YYYYMMDD(UPLOAD 일 )
  1012. String brandYmdDir = GagaFileUtil.getConcatenationPath(brandDir, GagaDateUtil.getToday()); //디비 저장용
  1013. File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, newFilename)));
  1014. File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, uniqueFile.getName()));
  1015. //log.info("newFile.getPath(): {}", newFile.getPath());
  1016. errorFileList.add(newFile);
  1017. File oldFile = new File(GagaFileUtil.getConcatenationPath(dextUploadPath, goodsImg.getSysImgNm()));
  1018. errorFileDextList.add(oldFile);
  1019. //log.info("oldFile.getPath(): {}", oldFile.getPath());
  1020. File path = new File(goodsUploadPath);
  1021. if (!path.exists()) {
  1022. //log.info("mkdir ={}", goodsUploadPath);
  1023. path.mkdir();
  1024. }
  1025. Image srcImg = getImageObject(oldFile);
  1026. int width = srcImg.getWidth(null);
  1027. int height = srcImg.getHeight(null);
  1028. if (newFile.getName().contains("_X1")) {
  1029. // if (width != height) {
  1030. if (width != 1000 || height != 1000) {
  1031. deleteErrorFileList(errorFileList);
  1032. deleteErrorFileList(errorFileDextList);
  1033. throw new IllegalStateException("외부몰용 상품이미지가 정사각형(1000x1000)이 아닙니다.");
  1034. }
  1035. // 외부몰연동용 이미지로 설정
  1036. goodsImg.setExtmallImgYn("Y");
  1037. }
  1038. boolean copyFlag = GagaFileUtil.copyFile(oldFile, newFile);
  1039. if (copyFlag) {
  1040. //기존이미지 삭제
  1041. GagaFileUtil.deleteFile(oldFile.getPath());
  1042. }
  1043. goodsImg.setDispOrd(index++);
  1044. goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
  1045. goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
  1046. } else {
  1047. goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
  1048. goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
  1049. goodsImg.setDispOrd(index++);
  1050. }
  1051. }
  1052. // 2.dx5에서 삭제한 파일 실제 삭제 처리
  1053. for (GoodsImg goodsImg : goodsImgList) {
  1054. if (goodsImg.getMode().equals("D")) {
  1055. //log.info("Original file to delete: {}", GagaFileUtil.getConcatenationPath(goodsTargetPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
  1056. // 상품이미지 삭제
  1057. GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(goodsTargetPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
  1058. }
  1059. }
  1060. // 상품이미지 저장 처리
  1061. goodsService.saveGoodsImageList(goodsImgList);
  1062. // 모델정보 처리
  1063. goodsModelInfo.setRegNo(TsaSession.getInfo().getUserNo());
  1064. goodsModelInfo.setUpdNo(TsaSession.getInfo().getUserNo());
  1065. goodsService.saveGoodsModelInfo(goodsModelInfo);
  1066. return super.ok(message.getMessage("SUCC_0007"));
  1067. }
  1068. /*
  1069. * 이미지 파일 확인
  1070. */
  1071. public static Image getImageObject(File f) throws IOException {
  1072. Image objImg = null;
  1073. String suffix = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase();
  1074. // if (suffix.equals("bmp") || suffix.equals("png") || suffix.equals("gif") || suffix.equals("jpg")) {
  1075. if (suffix.equals("png") || suffix.equals("gif") || suffix.equals("jpg")) {
  1076. objImg = ImageIO.read(f);
  1077. } else {
  1078. // ImageIcon을 활용해서 Image 생성
  1079. // 이렇게 하는 이유는 getScaledInstance를 통해 구한 이미지를
  1080. // PixelGrabber.grabPixels로 리사이즈 할 때 빠르게 처리하기 위함이다.
  1081. objImg = new ImageIcon(f.toURI().toURL()).getImage();
  1082. }
  1083. return objImg;
  1084. }
  1085. /**
  1086. * 파일 삭제
  1087. *
  1088. * @param errorFileList
  1089. * @author eskim
  1090. * @since 2021. 5. 16
  1091. */
  1092. private void deleteErrorFileList(Collection<File> errorFileList) {
  1093. // 파일 삭제
  1094. if (errorFileList != null && !errorFileList.isEmpty()) {
  1095. for (File errorFile : errorFileList) {
  1096. try {
  1097. GagaFileUtil.deleteFile(errorFile.getPath());
  1098. } catch (IOException e) {
  1099. // Nothing Do
  1100. }
  1101. }
  1102. }
  1103. }
  1104. /**
  1105. * 세트상품구성 화면
  1106. *
  1107. * @param
  1108. * @return
  1109. * @author eskim
  1110. * @since 2020. 05. 26
  1111. */
  1112. @GetMapping("/set/form")
  1113. @ResponseBody
  1114. public ModelAndView setForm(Goods goods) {
  1115. ModelAndView mav = new ModelAndView();
  1116. // 사용여부
  1117. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  1118. // 성별
  1119. mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
  1120. // 시즌
  1121. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  1122. // 스타일년도
  1123. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  1124. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  1125. // 상품상태
  1126. String[] exceptCds = {"G008_00"};
  1127. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  1128. // 원산지
  1129. mav.addObject("originCdList", rendererService.getAvailCommonCodeList("G076"));
  1130. mav.addObject("params", goods);
  1131. mav.setViewName("goods/GoodsSetForm");
  1132. return mav;
  1133. }
  1134. /**
  1135. * 세트 상품 등록
  1136. *
  1137. * @param goods
  1138. * @return
  1139. * @author eskim
  1140. * @since 2020. 11. 04
  1141. */
  1142. @PostMapping("/set/save")
  1143. @ResponseBody
  1144. public GagaResponse saveGoodsSet(@RequestBody Goods goods) {
  1145. goodsService.saveGoodsSet(goods);
  1146. return super.ok(message.getMessage("SUCC_0001"));
  1147. }
  1148. /**
  1149. * 딜상품구성 화면
  1150. *
  1151. * @param
  1152. * @return
  1153. * @author eskim
  1154. * @since 2020. 10. 29
  1155. */
  1156. @GetMapping("/deal/form")
  1157. @ResponseBody
  1158. public ModelAndView dealForm(Goods goods) {
  1159. ModelAndView mav = new ModelAndView();
  1160. // 사용여부
  1161. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  1162. // 정상이월
  1163. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  1164. // 성별
  1165. mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
  1166. // 시즌
  1167. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  1168. // 스타일년도
  1169. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  1170. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  1171. // 매입유형
  1172. mav.addObject("buyingTypeList", rendererService.getAvailCommonCodeList("G035"));
  1173. // 색상
  1174. // Color color = new Color();
  1175. // mav.addObject("colorCdList", rendererService.getColorList(color));
  1176. // 상품상태
  1177. // mav.addObject("goodsStatList",
  1178. // rendererService.getAvailCommonCodeList("G008"));
  1179. String[] exceptCds = {"G008_00"};
  1180. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  1181. // 원산지
  1182. mav.addObject("makOriginList", rendererService.getAvailCommonCodeList("G076"));
  1183. mav.addObject("params", goods);
  1184. mav.setViewName("goods/GoodsDealForm");
  1185. return mav;
  1186. }
  1187. /**
  1188. * 딜 상품 등록
  1189. *
  1190. * @param goods
  1191. * @return
  1192. * @author eskim
  1193. * @since 2020. 10. 30
  1194. */
  1195. @PostMapping("/deal/save")
  1196. @ResponseBody
  1197. public GagaResponse saveGoodsDeal(@RequestBody Goods goods) {
  1198. goodsService.saveGoodsDeal(goods);
  1199. return super.ok(message.getMessage("SUCC_0001"));
  1200. }
  1201. /**
  1202. * 상품 대량 등록 화면
  1203. *
  1204. * @return
  1205. * @author eskim
  1206. * @since 2020. 10. 16
  1207. */
  1208. @GetMapping("/mass/register/form")
  1209. public ModelAndView massRegisterForm() {
  1210. ModelAndView mav = new ModelAndView();
  1211. // 상품상태
  1212. mav.addObject("goodsStatList", rendererService.getAvailCommonCodeList("G008"));
  1213. // 사용여부
  1214. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  1215. // WMS 연동여부
  1216. mav.addObject("wmsSyncYn", commonService.getWmsSyncYn());
  1217. // 정보고시 목록
  1218. mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
  1219. // 사용자 업체
  1220. User loginInfo = systemService.getUser(TsaSession.getInfo().getUserNo());
  1221. String supplyCompCd = "NONE";
  1222. if (loginInfo != null) {
  1223. supplyCompCd = loginInfo.getSupplyCompCd();
  1224. }
  1225. mav.addObject("supplyCompCd", supplyCompCd);
  1226. mav.setViewName("goods/GoodsMassRegisterForm");
  1227. return mav;
  1228. }
  1229. /**
  1230. * WMS입고상품관리 화면
  1231. *
  1232. * @return
  1233. * @author eskim
  1234. * @since 2020. 10. 16
  1235. */
  1236. @GetMapping("/wms/incomelot/form")
  1237. public ModelAndView wmsInstockForm() {
  1238. ModelAndView mav = new ModelAndView();
  1239. // 공급업체
  1240. String supplyCompCd = "";
  1241. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  1242. // 상품상태
  1243. String[] exceptCds = {"G008_00"};
  1244. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  1245. // 품목
  1246. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  1247. mav.setViewName("goods/GoodsWmsIncomelotForm");
  1248. return mav;
  1249. }
  1250. /**
  1251. * WMS입고상품관리 목록 조회
  1252. *
  1253. * @return
  1254. * @author eskim
  1255. * @since 2021. 01. 04
  1256. */
  1257. @PostMapping("/wms/incomelot/list")
  1258. @ResponseBody
  1259. public GagaMap getGoodsWmsIncomelotList(@RequestBody WmsGoods wmsGoods) {
  1260. GagaMap result = new GagaMap();
  1261. wmsGoods.setPageable(new TscPageRequest(wmsGoods.getPageNo() - 1, wmsGoods.getPageSize()));
  1262. wmsGoods.getPageable().setTotalCount(goodsService.getGoodsWmsIncomelotListCount(wmsGoods));
  1263. result.set("pageing", wmsGoods);
  1264. result.set("goodsList", goodsService.getGoodsWmsIncomelotList(wmsGoods));
  1265. return result;
  1266. }
  1267. /**
  1268. * WMS 입고상품 사은품 등록
  1269. *
  1270. * @param goods
  1271. * @return
  1272. * @author eskim
  1273. * @since 2020. 10. 30
  1274. */
  1275. @PostMapping("/free/goods/save")
  1276. @ResponseBody
  1277. public GagaResponse saveFreeGoods(@RequestBody Collection<WmsGoods> wmsGoodsList) {
  1278. goodsService.saveFreeGoods(wmsGoodsList);
  1279. return super.ok(message.getMessage("SUCC_0001"));
  1280. }
  1281. /**
  1282. * 상품품목변경관리 화면
  1283. *
  1284. * @return
  1285. * @author eskim
  1286. * @since 2020. 10. 30
  1287. */
  1288. @GetMapping("/itemkind/form")
  1289. public ModelAndView itemkindForm() {
  1290. ModelAndView mav = new ModelAndView();
  1291. // 공급업체
  1292. String supplyCompCd = "";
  1293. String selfYn = "";
  1294. // if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  1295. // supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  1296. // selfYn = "N";
  1297. // }
  1298. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
  1299. // 시즌
  1300. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  1301. // 년도
  1302. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  1303. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  1304. // 품목
  1305. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  1306. // 카테고리 구분
  1307. mav.addObject("cateGbList", rendererService.getAvailCommonCodeList("G032"));
  1308. // MD
  1309. mav.addObject("brandMdList", rendererService.getBrandMdList());
  1310. // 정상이월
  1311. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  1312. mav.setViewName("goods/GoodsItemkindForm");
  1313. return mav;
  1314. }
  1315. /**
  1316. * 상품 품목 변경 저장
  1317. *
  1318. * @param goodsList
  1319. * @return
  1320. * @author eskim
  1321. * @since 2020. 10. 23
  1322. */
  1323. @PostMapping("/itemKind/change/save")
  1324. @ResponseBody
  1325. public GagaResponse saveItemKindChange(@RequestBody Collection<Goods> goodsList) {
  1326. goodsService.saveItemKindChange(goodsList);
  1327. return super.ok(message.getMessage("SUCC_0001"));
  1328. }
  1329. /**
  1330. * 입점 가격 관리 화면
  1331. *
  1332. * @return
  1333. * @author eskim
  1334. * @since 2020. 10. 16
  1335. */
  1336. @GetMapping("/supply/price/form")
  1337. public ModelAndView priceForm() {
  1338. ModelAndView mav = new ModelAndView();
  1339. // 공급업체
  1340. // String supplyCompCd = "";
  1341. // if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  1342. // supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  1343. // }
  1344. // mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "N"));
  1345. // 사용여부
  1346. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  1347. // 상품상태
  1348. String[] exceptCds = {"G008_00"};
  1349. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  1350. // 정상이월
  1351. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  1352. mav.setViewName("goods/GoodsSupplyPriceForm");
  1353. return mav;
  1354. }
  1355. /**
  1356. * 상품 가격승인관리 목록 조회
  1357. *
  1358. * @return
  1359. * @author eskim
  1360. * @since 2020. 11. 26
  1361. */
  1362. @PostMapping("/supply/price/list")
  1363. @ResponseBody
  1364. public Collection<GoodsSupplyPrice> getGoodsSupplyPriceList(@RequestBody GoodsSupplyPrice goodsSupplyPrice) {
  1365. // multi row 검색관련 처리
  1366. if (!StringUtils.isBlank(goodsSupplyPrice.getBrandList())) {
  1367. try {
  1368. String[] arrBrandCd = mapper.readValue(goodsSupplyPrice.getBrandList(), String[].class);
  1369. goodsSupplyPrice.setMultiBrand(arrBrandCd);
  1370. } catch (Exception e) {
  1371. e.printStackTrace();
  1372. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  1373. }
  1374. }
  1375. if (!StringUtils.isBlank(goodsSupplyPrice.getSupplyCompList())) {
  1376. try {
  1377. String[] arrSupplyComp = mapper.readValue(goodsSupplyPrice.getSupplyCompList(), String[].class);
  1378. goodsSupplyPrice.setMultiSupplyComp(arrSupplyComp);
  1379. } catch (Exception e) {
  1380. e.printStackTrace();
  1381. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  1382. }
  1383. }
  1384. return goodsService.getGoodsSupplyPriceList(goodsSupplyPrice);
  1385. }
  1386. /**
  1387. * 상품 가격승인관리 승인 처리
  1388. *
  1389. * @param itemkindList
  1390. * @return
  1391. * @author eskim
  1392. * @since 2020. 11. 26
  1393. */
  1394. @PostMapping("/supply/price/save")
  1395. @ResponseBody
  1396. public GagaResponse saveGoodsSupplyPrice(@RequestBody Collection<GoodsSupplyPrice> goodsSupplyPriceList) {
  1397. if (!"G001_0000".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A000".equals(TsaSession.getInfo().getRoleCd())
  1398. && !"G001_A001".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A100".equals(TsaSession.getInfo().getRoleCd())
  1399. && !"G001_A101".equals(TsaSession.getInfo().getRoleCd())) {
  1400. throw new IllegalStateException("권한이 없습니다.");
  1401. }
  1402. goodsService.saveGoodsSupplyPrice(goodsSupplyPriceList);
  1403. return super.ok(message.getMessage("SUCC_0001"));
  1404. }
  1405. /**
  1406. * 상품 타이틀예약관리 화면
  1407. *
  1408. * @return
  1409. * @author eskim
  1410. * @since 2020. 10. 30
  1411. */
  1412. @GetMapping("/title/reserve/form")
  1413. public ModelAndView titleReserveForm() {
  1414. ModelAndView mav = new ModelAndView();
  1415. // 사이트
  1416. String supplyCompCd = "";
  1417. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  1418. supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  1419. }
  1420. // 공급업체
  1421. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  1422. // 상품상태
  1423. // mav.addObject("goodsStatList",
  1424. // rendererService.getAvailCommonCodeList("G008"));
  1425. String[] exceptCds = {"G008_00"};
  1426. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  1427. // 정상이월
  1428. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  1429. // 시즌
  1430. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  1431. // 스타일년도
  1432. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  1433. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  1434. // 사용여부
  1435. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  1436. // 품목
  1437. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  1438. // MD
  1439. mav.addObject("brandMdList", rendererService.getBrandMdList());
  1440. mav.setViewName("goods/GoodsTitleReserveForm");
  1441. return mav;
  1442. }
  1443. /**
  1444. * 상품 타이틀 관리 조회
  1445. *
  1446. * @return
  1447. * @author eskim
  1448. * @since 2020. 10. 30
  1449. */
  1450. @PostMapping("/title/reserve/list")
  1451. @ResponseBody
  1452. public GagaMap goodsTitleReserveList(@RequestBody GoodsSearch goodsSearch) {
  1453. GagaMap result = new GagaMap();
  1454. // 입점업체담당자는 업체코드 설정
  1455. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  1456. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  1457. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  1458. }
  1459. // multi row 검색관련 처리
  1460. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  1461. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  1462. }
  1463. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  1464. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  1465. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsTitleReserveCount(goodsSearch));
  1466. result.set("pageing", goodsSearch);
  1467. result.set("goodsTnmList", goodsService.getGoodsTitleReserveList(goodsSearch));
  1468. return result;
  1469. }
  1470. /**
  1471. * 상품등록 타이틀 예약등록 화면
  1472. *
  1473. * @return
  1474. * @author eskim
  1475. * @since 2020. 11. 02
  1476. */
  1477. @GetMapping("/title/reserve/popup/form")
  1478. @ResponseBody
  1479. public ModelAndView goodsRsvtTnmListForm(GoodsTnmRes goodsTnmRes) {
  1480. ModelAndView mav = new ModelAndView();
  1481. mav.setViewName("goods/GoodsTitleReservePopupForm");
  1482. return mav;
  1483. }
  1484. /**
  1485. * 상품 타이틀 예약 저장
  1486. *
  1487. * @param goodsTnmRes
  1488. * @return
  1489. * @author eskim
  1490. * @since 2020. 11. 02
  1491. */
  1492. @PostMapping("/title/reserve/save")
  1493. @ResponseBody
  1494. public GagaResponse saveGoodsRsvtTnm(@RequestBody GoodsTnmRes goodsTnmRes) {
  1495. goodsService.saveGoodsRsvtTnm(goodsTnmRes);
  1496. return super.ok(message.getMessage("SUCC_0001"));
  1497. }
  1498. /**
  1499. * 상품 타이틀 예약 삭제
  1500. *
  1501. * @param goodsTnmRes
  1502. * @return
  1503. * @author eskim
  1504. * @since 2020. 11. 02
  1505. */
  1506. @PostMapping("/title/reserve/delete")
  1507. @ResponseBody
  1508. public GagaResponse deleteGoodsRsvtTnm(@RequestBody GoodsTnmRes goodsTnmRes) {
  1509. goodsService.deleteGoodsRsvtTnm(goodsTnmRes);
  1510. return super.ok(message.getMessage("SUCC_0003"));
  1511. }
  1512. /**
  1513. * 상품 동영상관리 화면
  1514. *
  1515. * @return
  1516. * @author eskim
  1517. * @since 2020. 11. 16
  1518. */
  1519. @GetMapping("/video/form")
  1520. public ModelAndView videoForm() {
  1521. ModelAndView mav = new ModelAndView();
  1522. mav.setViewName("goods/GoodsVideoForm");
  1523. return mav;
  1524. }
  1525. /**
  1526. * 상품 동영상 목록 조회
  1527. *
  1528. * @param goodsVideo
  1529. * @return
  1530. * @author eskim
  1531. * @since 2020. 11. 16
  1532. */
  1533. @PostMapping("/video/list")
  1534. @ResponseBody
  1535. public Collection<GoodsVideo> getGoodsVideoList(@RequestBody GoodsVideo goodsVideo) {
  1536. return goodsService.getGoodsVideoList(goodsVideo);
  1537. }
  1538. /**
  1539. * 상품 동영상 미노출 변경
  1540. *
  1541. * @return
  1542. * @author eskim
  1543. * @since 2020. 11. 16
  1544. */
  1545. @PostMapping("/video/update/notUse")
  1546. @ResponseBody
  1547. public GagaResponse updateNotUseGoodsVideo(@RequestBody Collection<GoodsVideo> goodsVideos) {
  1548. goodsService.updateNotUseGoodsVideo(goodsVideos);
  1549. return super.ok(message.getMessage("SUCC_0009"));
  1550. }
  1551. /**
  1552. * 상품동영상 수정/저장
  1553. *
  1554. * @return
  1555. * @author eskim
  1556. * @since 2020. 11. 16
  1557. */
  1558. @PostMapping("/video/save")
  1559. @ResponseBody
  1560. public GagaResponse saveGoodsVideo(@RequestBody GoodsVideo goodsVideo) {
  1561. goodsService.saveGoodsVideo(goodsVideo);
  1562. return super.ok(message.getMessage("SUCC_0001"));
  1563. }
  1564. /**
  1565. * 상품동영상 엑셀 저장
  1566. *
  1567. * @param goods
  1568. * @return
  1569. * @throws Exception
  1570. * @author eskim
  1571. * @since 2020. 11. 16
  1572. */
  1573. @PostMapping("/video/excel/save")
  1574. @ResponseBody
  1575. public GagaResponse saveExcelGoodsVideo(@RequestBody GoodsVideo goodsVideo) throws Exception {
  1576. String[] cellName = null;
  1577. // DB 처리 시 사용되는 파라미터명(셀명) 설정
  1578. cellName = new String[2];
  1579. cellName[0] = "goodsCd";
  1580. cellName[1] = "kmcKey";
  1581. String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
  1582. Collection<GagaMap> dataList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goodsVideo.getExcelFileNm()), 0, cellName);
  1583. int cnt = goodsService.saveExcelGoodsVideo(dataList);
  1584. GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, goodsVideo.getExcelFileNm()));
  1585. return super.ok(cnt + " 건 처리되었습니다.");
  1586. }
  1587. /**
  1588. * 상품 EP제외상품관리 화면
  1589. *
  1590. * @return
  1591. * @author eskim
  1592. * @since 2020. 11. 03
  1593. */
  1594. @GetMapping("/ep/skip/form")
  1595. public ModelAndView epSkipForm() {
  1596. ModelAndView mav = new ModelAndView();
  1597. // 공급업체
  1598. // String supplyCompCd = "";
  1599. // mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  1600. // 상품상태
  1601. String[] exceptCds = {"G001_00"};
  1602. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  1603. // 정상이월
  1604. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  1605. // 시즌
  1606. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  1607. // 년도
  1608. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  1609. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  1610. // 사용여부
  1611. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  1612. // 품목
  1613. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  1614. // MD
  1615. mav.addObject("brandMdList", rendererService.getBrandMdList());
  1616. mav.setViewName("goods/GoodsEpSkipForm");
  1617. return mav;
  1618. }
  1619. /**
  1620. * 네이버 EP 제외 상품 조회
  1621. *
  1622. * @return
  1623. * @author eskim
  1624. * @since 2020. 11. 03
  1625. */
  1626. @PostMapping("/ep/skip/list")
  1627. @ResponseBody
  1628. public GagaMap goodsEpSkipList(@RequestBody GoodsSearch goodsSearch) {
  1629. log.info("[goodsEpSkipList] goodsSearch = {}", goodsSearch);
  1630. GagaMap result = new GagaMap();
  1631. // 입점업체담당자는 업체코드 설정
  1632. if ("B000".equals(TsaSession.getInfo().getRoleCd())) {
  1633. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  1634. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  1635. }
  1636. // multi row 검색관련 처리
  1637. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  1638. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  1639. }
  1640. if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
  1641. try {
  1642. String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
  1643. goodsSearch.setMultiBrand(arrBrandCd);
  1644. } catch (Exception e) {
  1645. e.printStackTrace();
  1646. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  1647. }
  1648. }
  1649. if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
  1650. try {
  1651. String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
  1652. goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
  1653. } catch (Exception e) {
  1654. e.printStackTrace();
  1655. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  1656. }
  1657. }
  1658. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  1659. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  1660. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsEpSkipCount(goodsSearch));
  1661. log.info("[goodsEpSkipList] goodsSearch = {}", goodsSearch);
  1662. result.set("pageing", goodsSearch);
  1663. result.set("goodsEpSkipList", goodsService.getGoodsEpSkipList(goodsSearch));
  1664. return result;
  1665. }
  1666. /**
  1667. * 네이버 EP 제외 상품 예약등록 화면
  1668. *
  1669. * @return
  1670. * @author eskim
  1671. * @since 2020. 11. 03
  1672. */
  1673. @GetMapping("/ep/skip/popup/form")
  1674. @ResponseBody
  1675. public ModelAndView goodsEpSkipPopupForm(GoodsEpSkip goodsEpSkip) {
  1676. ModelAndView mav = new ModelAndView();
  1677. mav.setViewName("goods/GoodsEpSkipPopupForm");
  1678. return mav;
  1679. }
  1680. /**
  1681. * 네이버 EP 제외 상품 예약 저장
  1682. *
  1683. * @param goodsEpSkip
  1684. * @return GagaResponse
  1685. * @author eskim
  1686. * @since 2020. 11. 03
  1687. */
  1688. @PostMapping("/rsvt/ep/skip/save")
  1689. @ResponseBody
  1690. public GagaResponse saveGoodsRsvtEpSkip(@RequestBody GoodsEpSkip goodsEpSkip) {
  1691. goodsService.saveGoodsRsvtEpSkip(goodsEpSkip);
  1692. return super.ok(message.getMessage("SUCC_0001"));
  1693. }
  1694. /**
  1695. * 네이버 EP 제외 상품 예약 삭제
  1696. *
  1697. * @param goodsEpSkip
  1698. * @return GagaResponse
  1699. * @author eskim
  1700. * @since 2020. 11. 03
  1701. */
  1702. @PostMapping("/rsvt/ep/skip/delete")
  1703. @ResponseBody
  1704. public GagaResponse deleteGoodsEpSkip(@RequestBody GoodsEpSkip goodsEpSkip) {
  1705. goodsService.deleteGoodsEpSkip(goodsEpSkip);
  1706. return super.ok(message.getMessage("SUCC_0003"));
  1707. }
  1708. /**
  1709. * 상품 재입고알림관리 화면
  1710. *
  1711. * @return
  1712. * @author eskim
  1713. * @since 2020. 10. 16
  1714. */
  1715. @GetMapping("/reinbound/inform/form")
  1716. public ModelAndView reinboundInformForm() {
  1717. ModelAndView mav = new ModelAndView();
  1718. // 공급업체
  1719. String supplyCompCd = "";
  1720. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  1721. // 카테고리 구분
  1722. mav.addObject("cateGbList", rendererService.getAvailCommonCodeList("G032"));
  1723. // 상품상태
  1724. mav.addObject("goodsStatList", rendererService.getAvailCommonCodeList("G008"));
  1725. mav.setViewName("goods/GoodsReinboundInformForm");
  1726. return mav;
  1727. }
  1728. /**
  1729. * 재입고알림 목록 조회
  1730. *
  1731. * @param goodsSearch
  1732. * @return GagaMap
  1733. * @author daehyoung
  1734. * @since 2020. 07. 16
  1735. */
  1736. @PostMapping("/reinbound/inform/list")
  1737. @ResponseBody
  1738. public GagaMap getReinboundInformList(@RequestBody GoodsSearch goodsSearch) {
  1739. GagaMap result = new GagaMap();
  1740. // multi row 검색관련 처리
  1741. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  1742. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  1743. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  1744. goodsSearch.setSearchGb("EXTEND");
  1745. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  1746. goodsSearch.setSearchGb("MASTER");
  1747. }
  1748. }
  1749. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  1750. goodsSearch.getPageable().setTotalCount(goodsService.getReinboundInformCount(goodsSearch));
  1751. result.set("pageing", goodsSearch);
  1752. result.set("reinboundInformList", goodsService.getReinboundInformList(goodsSearch));
  1753. return result;
  1754. }
  1755. /**
  1756. * 재입고알림 발송 처리
  1757. *
  1758. * @param params
  1759. * @return GagaResponse
  1760. * @author eskim
  1761. * @since 2020. 12. 17
  1762. */
  1763. @PostMapping("/reinbound/inform/send")
  1764. @ResponseBody
  1765. public GagaResponse sendReinboundInform(@RequestBody ReinboundInform reinboundInform) {
  1766. if (reinboundInform.getArrRinbdInfoSq().length <= 0) {
  1767. throw new IllegalStateException(message.getMessage("FAIL_1001"));
  1768. }
  1769. int idx = 0;
  1770. for (String rinbdInfoSq : reinboundInform.getArrRinbdInfoSq()) {
  1771. GoodsSearch goodsSearch = new GoodsSearch();
  1772. goodsSearch.setRinbdInfoSq(Integer.parseInt(rinbdInfoSq));
  1773. Collection<ReinboundInform> list = goodsService.getReinboundInformList(goodsSearch);
  1774. ReinboundInform oneParam = list.iterator().next();
  1775. // 재고체크
  1776. if (oneParam.getCurrStockQty() < 1 || "Y".equals(oneParam.getSoldoutYn())) {
  1777. throw new IllegalStateException(oneParam.getGoodsCd() + "상품( 사이즈 : " + oneParam.getOptCd1() + " )은 가용재고가 없습니다.");
  1778. }
  1779. oneParam.setRegNo(TsaSession.getInfo().getUserNo());
  1780. oneParam.setUpdNo(TsaSession.getInfo().getUserNo());
  1781. // **** 알림톡 발송 start ****
  1782. try {
  1783. log.info("[카카오 알림톡 발송 정보] - 재입고알림 발송: " + oneParam.toString());
  1784. GagaMap goods = new GagaMap();
  1785. goods.set("custNo", oneParam.getCustNo());
  1786. goods.set("custNm", oneParam.getCustNm());
  1787. goods.set("goodsNm", oneParam.getGoodsNm());
  1788. goods.set("optCd1", oneParam.getOptCd1Nm());
  1789. goods.set("optCd2", oneParam.getOptCd2());
  1790. goods.set("cellPhnno", oneParam.getCellPhnno());
  1791. goods.set("goodsCd", oneParam.getGoodsCd());
  1792. goods.set("colorCd", oneParam.getOptCd1());
  1793. log.info("sendReinboundInform goods={}", goods);
  1794. coreKakaotalkService.goodsRestock(goods, TsaSession.getInfo().getUserNo());
  1795. } catch (Exception e) {
  1796. e.getStackTrace();
  1797. throw new IllegalStateException("재입고알림 알림톡 발송을 실패하였습니다.");
  1798. }
  1799. // **** 알림톡 발송 end ****
  1800. // 재입고알림 발송처리
  1801. // goodsService.sendReinboundInform(oneParam);
  1802. idx++;
  1803. }
  1804. return super.ok(message.getMessage("SUCC_0001"));
  1805. }
  1806. /**
  1807. * 상품 예약판매관리 화면
  1808. *
  1809. * @return
  1810. * @author eskim
  1811. * @since 2020. 10. 16
  1812. */
  1813. @GetMapping("/reserve/sell/form")
  1814. public ModelAndView reserveSellForm() {
  1815. ModelAndView mav = new ModelAndView();
  1816. // 공급업체
  1817. String supplyCompCd = "";
  1818. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  1819. // 상품상태
  1820. String[] exceptCds = {"G008_00"};
  1821. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  1822. // 정상이월
  1823. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  1824. // 시즌
  1825. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  1826. // 년도
  1827. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  1828. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  1829. // 사용여부
  1830. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  1831. // 품목
  1832. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  1833. // MD
  1834. mav.addObject("brandMdList", rendererService.getBrandMdList());
  1835. mav.setViewName("goods/GoodsReserveSellForm");
  1836. return mav;
  1837. }
  1838. /**
  1839. * 상품예약판매 목록 조회
  1840. *
  1841. * @param goodsSearch
  1842. * @return GagaMap
  1843. * @author eskim
  1844. * @since 2020. 11. 12
  1845. */
  1846. @PostMapping("/reserve/sell/list")
  1847. @ResponseBody
  1848. public GagaMap goodsReserveSellList(@RequestBody GoodsSearch goodsSearch) {
  1849. GagaMap result = new GagaMap();
  1850. // 입점업체담당자는 업체코드 설정
  1851. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  1852. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  1853. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  1854. }
  1855. // multi row 검색관련 처리
  1856. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  1857. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  1858. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  1859. goodsSearch.setSearchGb("EXTEND");
  1860. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  1861. goodsSearch.setSearchGb("MASTER");
  1862. }
  1863. }
  1864. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  1865. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  1866. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsResSellCount(goodsSearch));
  1867. result.set("pageing", goodsSearch);
  1868. result.set("goodsResSellList", goodsService.getGoodsResSellList(goodsSearch));
  1869. return result;
  1870. }
  1871. /**
  1872. * 상품예약판매 등록 화면
  1873. *
  1874. * @return
  1875. * @author eskim
  1876. * @since 2020. 11. 12
  1877. */
  1878. @GetMapping("/reserve/sell/popup/form")
  1879. @ResponseBody
  1880. public ModelAndView goodsReserveSellRegistForm() {
  1881. ModelAndView mav = new ModelAndView();
  1882. mav.setViewName("goods/GoodsReserveSellPopupForm");
  1883. return mav;
  1884. }
  1885. /**
  1886. * 상품예약판매 저장
  1887. *
  1888. * @param goodsResSell
  1889. * @return GagaResponse
  1890. * @author eskim
  1891. * @since 2020. 11. 12
  1892. */
  1893. @PostMapping("/reserve/sell/regist/save")
  1894. @ResponseBody
  1895. public GagaResponse saveGoodsResSell(@RequestBody GoodsResSell goodsResSell) {
  1896. goodsService.saveGoodsResSell(goodsResSell);
  1897. return super.ok(message.getMessage("SUCC_0001"));
  1898. }
  1899. /**
  1900. * 상품예약판매 삭제
  1901. *
  1902. * @param goodsResSell
  1903. * @return GagaResponse
  1904. * @author eskim
  1905. * @since 2020. 11. 12
  1906. */
  1907. @PostMapping("/reserve/sell/delete")
  1908. @ResponseBody
  1909. public GagaResponse deleteGoodsResSell(@RequestBody GoodsResSell goodsResSell) {
  1910. goodsService.deleteGoodsResSell(goodsResSell);
  1911. return super.ok(message.getMessage("SUCC_0003"));
  1912. }
  1913. /**
  1914. * 상품 상세공지 화면
  1915. *
  1916. * @return
  1917. * @author eskim
  1918. * @since 2020. 10. 16
  1919. */
  1920. @GetMapping("/notice/form")
  1921. public ModelAndView detailNoticeForm() {
  1922. ModelAndView mav = new ModelAndView();
  1923. // 공급업체
  1924. String supplyCompCd = "";
  1925. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  1926. mav.setViewName("goods/GoodsNoticeForm");
  1927. return mav;
  1928. }
  1929. /**
  1930. * 상품 상세공지 목록
  1931. * @param notice - 공지사항 정보
  1932. * @return
  1933. * @author eskim
  1934. * @since 2020. 11. 05
  1935. */
  1936. @PostMapping("/notice/list")
  1937. @ResponseBody
  1938. public Collection<Notice> getNoticeList(@RequestBody GoodsSearch goodsSearch) {
  1939. // 입점업체담당자는 업체코드 설정
  1940. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  1941. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  1942. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  1943. }
  1944. // multi row 검색관련 처리
  1945. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  1946. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  1947. }
  1948. return goodsService.getNoticeList(goodsSearch);
  1949. }
  1950. /**
  1951. * 상품 상세공지 상품목록
  1952. * @param notice - 공지사항 정보
  1953. * @return
  1954. * @author eskim
  1955. * @since 2020. 11. 06
  1956. */
  1957. @GetMapping("/notice/goods/list/{noticeSq}")
  1958. @ResponseBody
  1959. public Collection<NoticeGoods> getNoticeGoodsList(@PathVariable Integer noticeSq) {
  1960. Notice notice = new Notice();
  1961. notice.setNoticeSq(noticeSq);
  1962. return goodsService.getNoticeGoodsList(notice);
  1963. }
  1964. /**
  1965. * 상품 상세공지 저장/등록
  1966. *
  1967. * @param
  1968. * @return
  1969. * @author eskim
  1970. * @since 2020. 11. 05
  1971. */
  1972. @PostMapping("/notice/save")
  1973. @ResponseBody
  1974. public GagaResponse saveNotice(@RequestBody Notice notice) {
  1975. goodsService.saveNotice(notice);
  1976. return super.ok(message.getMessage("SUCC_0001"));
  1977. }
  1978. /**
  1979. * 상품 상세공지상품 삭제
  1980. *
  1981. * @param
  1982. * @return
  1983. * @author eskim
  1984. * @since 2020. 11. 09
  1985. */
  1986. @PostMapping("/notice/goods/delete")
  1987. @ResponseBody
  1988. public GagaResponse deleteNoticeGoods(@RequestBody NoticeGoods noticeGoods) {
  1989. goodsService.deleteNoticeGoods(noticeGoods);
  1990. return super.ok(message.getMessage("SUCC_0003"));
  1991. }
  1992. /**
  1993. * 상품조회 팝업
  1994. *
  1995. * @return
  1996. * @author eskim
  1997. * @since 2020. 10. 26
  1998. */
  1999. @GetMapping("/popup/list/form")
  2000. @ResponseBody
  2001. public ModelAndView relationListForm(GoodsSearch goodsSearch) {
  2002. ModelAndView mav = new ModelAndView();
  2003. // 공급업체
  2004. // String supplyCompCd = "";
  2005. // String selfYn = "Y";
  2006. // if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  2007. // supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  2008. // selfYn = "N";
  2009. // }
  2010. // mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
  2011. //mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
  2012. // 상품상태
  2013. String[] exceptCds = {"G008_00"};
  2014. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  2015. // 정상이월
  2016. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  2017. // 성별
  2018. mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
  2019. // 시즌
  2020. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  2021. // 연령대
  2022. mav.addObject("ageGrpCdList", rendererService.getAvailCommonCodeList("G023"));
  2023. // 사용여부
  2024. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  2025. // 품목
  2026. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  2027. // 상품유형
  2028. mav.addObject("goodsTypeList", rendererService.getAvailCommonCodeList("G056"));
  2029. // MD
  2030. mav.addObject("brandMdList", rendererService.getBrandMdList());
  2031. // 년도
  2032. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  2033. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  2034. mav.addObject("params", goodsSearch);
  2035. mav.setViewName("goods/GoodsPopupListForm");
  2036. return mav;
  2037. }
  2038. /**
  2039. * 상품조회 팝업 조회
  2040. *
  2041. * @return
  2042. * @author eskim
  2043. * @since 2020. 10. 26
  2044. */
  2045. @PostMapping("/popup/list")
  2046. @ResponseBody
  2047. public GagaMap getPopupGoodsList(@RequestBody GoodsSearch goodsSearch) {
  2048. GagaMap result = new GagaMap();
  2049. // 입점업체담당자는 업체코드 설정
  2050. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  2051. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  2052. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  2053. }
  2054. // multi row 검색관련 처리
  2055. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2056. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2057. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  2058. goodsSearch.setSearchGb("EXTEND");
  2059. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  2060. goodsSearch.setSearchGb("MASTER");
  2061. }
  2062. }
  2063. if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
  2064. try {
  2065. String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
  2066. goodsSearch.setMultiBrand(arrBrandCd);
  2067. } catch (Exception e) {
  2068. e.printStackTrace();
  2069. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  2070. }
  2071. }
  2072. if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
  2073. try {
  2074. String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
  2075. goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
  2076. } catch (Exception e) {
  2077. e.printStackTrace();
  2078. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  2079. }
  2080. }
  2081. //log.info("[getPopupGoodsList] goodsSearch=>{}", goodsSearch);
  2082. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  2083. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  2084. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
  2085. result.set("pageing", goodsSearch);
  2086. result.set("goodsList", goodsService.getGoodsList(goodsSearch));
  2087. return result;
  2088. }
  2089. /**
  2090. * 상품 가격예약관리 화면
  2091. *
  2092. * @return
  2093. * @author eskim
  2094. * @since 2020. 11. 13
  2095. */
  2096. @GetMapping("/price/reserve/form")
  2097. public ModelAndView priceReserveForm() {
  2098. ModelAndView mav = new ModelAndView();
  2099. // 공급업체
  2100. // String supplyCompCd = "";
  2101. // mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  2102. // 상품상태
  2103. String[] exceptCds = {"G008_00"};
  2104. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  2105. // 정상이월
  2106. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  2107. // 시즌
  2108. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  2109. // 년도
  2110. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  2111. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  2112. // 사용여부
  2113. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  2114. // 품목
  2115. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  2116. // MD
  2117. mav.addObject("brandMdList", rendererService.getBrandMdList());
  2118. mav.setViewName("goods/GoodsPriceReserveForm");
  2119. return mav;
  2120. }
  2121. /**
  2122. * 상품 가격예약 목록 조회
  2123. *
  2124. * @param goodsSearch
  2125. * @return GagaMap
  2126. * @author eskim
  2127. * @since 2020. 11. 13
  2128. */
  2129. @PostMapping("/price/reserve/list")
  2130. @ResponseBody
  2131. public GagaMap goodsPriceReserveList(@RequestBody GoodsSearch goodsSearch) {
  2132. GagaMap result = new GagaMap();
  2133. // 입점업체담당자는 업체코드 설정
  2134. if ("G001-B000".equals(TsaSession.getInfo().getRoleCd())) {
  2135. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  2136. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  2137. }
  2138. // multi row 검색관련 처리
  2139. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2140. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2141. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  2142. goodsSearch.setSearchGb("EXTEND");
  2143. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  2144. goodsSearch.setSearchGb("MASTER");
  2145. }
  2146. }
  2147. if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
  2148. try {
  2149. String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
  2150. goodsSearch.setMultiBrand(arrBrandCd);
  2151. } catch (Exception e) {
  2152. e.printStackTrace();
  2153. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  2154. }
  2155. }
  2156. if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
  2157. try {
  2158. String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
  2159. goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
  2160. } catch (Exception e) {
  2161. e.printStackTrace();
  2162. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  2163. }
  2164. }
  2165. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  2166. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  2167. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsPriceResCount(goodsSearch));
  2168. result.set("pageing", goodsSearch);
  2169. result.set("goodsPriceResList", goodsService.getGoodsPriceResList(goodsSearch));
  2170. return result;
  2171. }
  2172. /**
  2173. * 상품 가격예약 등록 화면
  2174. *
  2175. * @return
  2176. * @author eskim
  2177. * @since 2020. 11. 13
  2178. */
  2179. @GetMapping("/price/reserve/popup/form")
  2180. @ResponseBody
  2181. public ModelAndView goodsPriceReserveRegistForm() {
  2182. ModelAndView mav = new ModelAndView();
  2183. mav.setViewName("goods/GoodsPriceReservePopupForm");
  2184. return mav;
  2185. }
  2186. /**
  2187. * 상품 가격예약 저장
  2188. *
  2189. * @param goodsResSell
  2190. * @return GagaResponse
  2191. * @author eskim
  2192. * @since 2020. 11. 13
  2193. */
  2194. @PostMapping("/price/reserve/save")
  2195. @ResponseBody
  2196. public GagaResponse saveGoodsPriceRes(@RequestBody GoodsPriceRes goodsPriceRes) {
  2197. goodsService.createGoodPriceRes(goodsPriceRes);
  2198. return super.ok(message.getMessage("SUCC_0001"));
  2199. }
  2200. /**
  2201. * 상품 가격예약 삭제
  2202. *
  2203. * @param goodsResSell
  2204. * @return GagaResponse
  2205. * @author eskim
  2206. * @since 2020. 11. 13
  2207. */
  2208. @PostMapping("/price/reserve/delete")
  2209. @ResponseBody
  2210. public GagaResponse deleteGoodsPriceRes(@RequestBody GoodsPriceRes goodsPriceRes) {
  2211. goodsService.deleteGoodsPriceRes(goodsPriceRes);
  2212. return super.ok(message.getMessage("SUCC_0003"));
  2213. }
  2214. /**
  2215. * 상품 가격예약 변경
  2216. *
  2217. * @param goods
  2218. * @return
  2219. * @throws Exception
  2220. * @author eskim
  2221. * @since 2020. 02. 20
  2222. */
  2223. @PostMapping("/price/excelupload/save")
  2224. @ResponseBody
  2225. public GagaResponse saveGoodsPriceResvExcelupload(@RequestBody Goods goods) throws Exception {
  2226. ObjectMapper mapper = new ObjectMapper();
  2227. String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
  2228. // DB 처리 시 사용되는 파라미터명(셀명) 설정
  2229. String[] cellName = {"goodsCd", "resGoodsPrice", "applyStdt", "applyEddt"};
  2230. Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()), 0, cellName, 0);
  2231. //건수
  2232. if (ecxelGoodsList != null && ecxelGoodsList.size() > EXCEL_ROW_COUNT) {
  2233. throw new IllegalStateException("엑셀 파일의 건수를 " + EXCEL_ROW_COUNT + "건 이하로 사용하세요.");
  2234. }
  2235. Collection<GoodsPriceRes> goodsPriceList = new ArrayList<>();
  2236. for (GagaMap map : ecxelGoodsList) {
  2237. GoodsPriceRes goodsPriceRes = mapper.convertValue(map, GoodsPriceRes.class);
  2238. goodsPriceList.add(goodsPriceRes);
  2239. }
  2240. goodsService.saveGoodsPriceExcelupload(goodsPriceList, goods.getExcelFileNm());
  2241. // 파일 삭제
  2242. GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
  2243. return super.ok("");
  2244. }
  2245. /**
  2246. * 네이버 최저가 조회 화면
  2247. *
  2248. * @return
  2249. * @author eskim
  2250. * @since 2020. 12. 03
  2251. */
  2252. @GetMapping("/naver/price/form")
  2253. @ResponseBody
  2254. public ModelAndView goodsNaverPriceForm() {
  2255. ModelAndView mav = new ModelAndView();
  2256. // 공급업체
  2257. String supplyCompCd = "";
  2258. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  2259. // 시즌
  2260. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  2261. // 년도
  2262. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  2263. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  2264. mav.setViewName("goods/GoodsNaverPriceForm");
  2265. return mav;
  2266. }
  2267. /**
  2268. * 상품 네이버 최저가 조회
  2269. *
  2270. * @return
  2271. * @author eskim
  2272. * @since 2020. 12. 03
  2273. */
  2274. @PostMapping("/naver/price/list")
  2275. @ResponseBody
  2276. public Collection<GoodsNaverLowestPrice> getGoodsNaverPriceList(@RequestBody GoodsSearch goodsSearch) {
  2277. // 입점업체담당자는 업체코드 설정
  2278. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  2279. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  2280. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  2281. }
  2282. // multi row 검색관련 처리
  2283. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2284. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2285. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  2286. goodsSearch.setSearchGb("EXTEND");
  2287. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  2288. goodsSearch.setSearchGb("MASTER");
  2289. }
  2290. }
  2291. return goodsService.getGoodsNaverPriceList(goodsSearch);
  2292. }
  2293. /**
  2294. * 네이버 최저가 상품 정보 조회
  2295. *
  2296. * @return
  2297. * @author eskim
  2298. * @since 2020. 10. 03
  2299. */
  2300. @PostMapping("/naver/lowest/price/save")
  2301. @ResponseBody
  2302. public Collection<GoodsNaverLowestPrice> saveGoodsNaverPrice(@RequestBody GoodsSearch goodsSearch) {
  2303. // multi row 검색관련 처리
  2304. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2305. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2306. }
  2307. return goodsService.saveGoodsNaverPrice(goodsSearch);
  2308. }
  2309. /**
  2310. * 네이버 최저가 엑셀다운로드
  2311. *
  2312. * @param goodsSearch
  2313. * @return
  2314. * @author eskim
  2315. * @since 2021. 07. 09
  2316. */
  2317. @GetMapping("/naver/excel/list")
  2318. public ResponseEntity<InputStreamResource> downloadGoodsNaverExcelList(HttpServletRequest request, GoodsSearch goodsSearch) throws Exception {
  2319. String excelfileName = "상품_네이버_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
  2320. String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
  2321. // 입점업체담당자는 업체코드 설정
  2322. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  2323. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  2324. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  2325. }
  2326. // multi row 검색관련 처리
  2327. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2328. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2329. if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
  2330. goodsSearch.setSearchGb("EXTEND");
  2331. } else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
  2332. goodsSearch.setSearchGb("MASTER");
  2333. }
  2334. }
  2335. log.info("[goodsSearch] ={}", goodsSearch);
  2336. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  2337. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  2338. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
  2339. //log.info("[downloadGoodsInfoExcelList] goodsSearch = {}", goodsSearch);
  2340. // 대용량엑셀파일다운로드는 이런 식으로 ...
  2341. goodsService.getGoodsNaverExcelList(goodsSearch, excelFilenameWithPath);
  2342. return GagaFileUtil.writeFile(request, excelFilenameWithPath);
  2343. }
  2344. /**
  2345. * 광고 키워드 관리 화면
  2346. *
  2347. * @return
  2348. * @author eskim
  2349. * @since 2020. 12. 11
  2350. */
  2351. @GetMapping("/ad/keyword/form")
  2352. @ResponseBody
  2353. public ModelAndView goodsAdForm() {
  2354. ModelAndView mav = new ModelAndView();
  2355. mav.setViewName("goods/GoodsAdKeywordForm");
  2356. return mav;
  2357. }
  2358. /**
  2359. * 광고 키워드 목록
  2360. * @param adKeyword
  2361. * @return
  2362. * @author eskim
  2363. * @since 2020. 12. 15
  2364. */
  2365. @PostMapping("/ad/keyword/list")
  2366. @ResponseBody
  2367. public Collection<AdKeyword> getAdKeywordList(@RequestBody AdKeyword adKeyword) {
  2368. return goodsService.getAdKeywordList(adKeyword);
  2369. }
  2370. /**
  2371. * 광고 키워드 상품목록
  2372. * @param adKeywordSq
  2373. * @return
  2374. * @author eskim
  2375. * @since 2020. 12. 15
  2376. */
  2377. @GetMapping("/ad/keyword/goods/list/{adKeywordSq}")
  2378. @ResponseBody
  2379. public Collection<AdKeywordGoods> getAdKeywordGoodsList(@PathVariable Integer adKeywordSq) {
  2380. AdKeyword adKeyword = new AdKeyword();
  2381. adKeyword.setAdKeywordSq(adKeywordSq);
  2382. return goodsService.getAdKeywordGoodsList(adKeyword);
  2383. }
  2384. /**
  2385. * 광고 키워드 저장/등록
  2386. *
  2387. * @param adKeyword
  2388. * @return
  2389. * @author eskim
  2390. * @since 2020. 12. 15
  2391. */
  2392. @PostMapping("/ad/keyword/save")
  2393. @ResponseBody
  2394. public GagaResponse saveAdKeywordGoods(@RequestBody AdKeyword adKeyword) {
  2395. goodsService.saveAdKeywordGoods(adKeyword);
  2396. return super.ok(message.getMessage("SUCC_0001"));
  2397. }
  2398. /**
  2399. * 광고 키워드 상품 삭제
  2400. *
  2401. * @param adKeywordGoods
  2402. * @return
  2403. * @author eskim
  2404. * @since 2020. 12. 15
  2405. */
  2406. @PostMapping("/ad/keyword/goods/delete")
  2407. @ResponseBody
  2408. public GagaResponse deleteAdKeywordGoods(@RequestBody AdKeywordGoods adKeywordGoods) {
  2409. goodsService.deleteAdKeywordGoods(adKeywordGoods);
  2410. return super.ok(message.getMessage("SUCC_0003"));
  2411. }
  2412. /**
  2413. * 상품고시정보 화면
  2414. * @return
  2415. * @author gagamel
  2416. * @since 2020. 12. 8
  2417. */
  2418. @GetMapping("/noti/info/form")
  2419. public ModelAndView goodsNotiInfoForm() {
  2420. ModelAndView mav = new ModelAndView();
  2421. // 고시분류
  2422. mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
  2423. mav.setViewName("goods/GoodsNotiInfoForm");
  2424. return mav;
  2425. }
  2426. /**
  2427. * 고시분류별 상품고시정보 목록
  2428. * @param goodsNotiInfo - 상품고시정보
  2429. * @return
  2430. * @author gagamel
  2431. * @since 2021. 1. 21
  2432. */
  2433. @PostMapping("/noti/info/list")
  2434. @ResponseBody
  2435. public Collection<GoodsNotiInfo> getGoodsNotiInfoListByNotiClsf(@RequestBody GoodsNotiInfo goodsNotiInfo) {
  2436. // multi row 검색관련 처리
  2437. if (StringUtils.isNotBlank(goodsNotiInfo.getGoodsCd())) {
  2438. goodsNotiInfo.setGoodsCds(goodsNotiInfo.getGoodsCd().replaceAll("\r", "").trim().split("\n"));
  2439. }
  2440. return goodsService.getGoodsNotiInfoListByNotiClsf(goodsNotiInfo);
  2441. }
  2442. /**
  2443. * 고시분류의 칼럼 목록
  2444. * @param niClsfCd - 고시분류코드
  2445. * @return
  2446. * @author gagamel
  2447. * @since 2021. 1. 21
  2448. */
  2449. @GetMapping("/noti/info/column/{niClsfCd}")
  2450. @ResponseBody
  2451. public GoodsNotiInfo getNotiClsfColumnInfo(@PathVariable String niClsfCd) {
  2452. return goodsService.getNotiClsfColumnInfo(niClsfCd);
  2453. }
  2454. /**
  2455. * 사은품 상품 화면
  2456. * @return
  2457. * @author eskim
  2458. * @since 2020. 12. 28
  2459. */
  2460. @GetMapping("/freeGoods/form")
  2461. public ModelAndView goodsfreeGoodsForm() {
  2462. ModelAndView mav = new ModelAndView();
  2463. String supplyCompCd = "";
  2464. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  2465. supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  2466. }
  2467. // 공급업체
  2468. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  2469. // 상품상태
  2470. String[] exceptCds = {"G008_00"};
  2471. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  2472. mav.setViewName("goods/GoodsFreeGoodsForm");
  2473. return mav;
  2474. }
  2475. /**
  2476. * 사은품조회 팝업
  2477. * @return
  2478. * @author xodud1202
  2479. * @since 2021. 01. 10
  2480. */
  2481. @GetMapping("/freeGoods/popup/list/form")
  2482. @ResponseBody
  2483. public ModelAndView freeGoodsPopupListForm(FreeGoods freeGoodsSearch) {
  2484. ModelAndView mav = new ModelAndView();
  2485. mav.addObject("param", freeGoodsSearch);
  2486. mav.setViewName("goods/FreeGoodsSearchForm");
  2487. return mav;
  2488. }
  2489. /**
  2490. * 사은품 상품 목록
  2491. * @param adKeywordSq
  2492. * @return
  2493. * @author eskim
  2494. * @since 2020. 12. 28
  2495. */
  2496. @PostMapping("/freeGoods/list")
  2497. @ResponseBody
  2498. public Collection<FreeGoods> getFreeGoodsList(@RequestBody GoodsSearch goodsSearch) {
  2499. // multi row 검색관련 처리
  2500. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2501. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2502. }
  2503. return goodsService.getFreeGoodsList(goodsSearch);
  2504. }
  2505. /**
  2506. * 사은품 상품 저장
  2507. *
  2508. * @param freeGoods
  2509. * @return
  2510. * @author eskim
  2511. * @since 2020. 12. 28
  2512. */
  2513. @PostMapping("/freeGoods/update")
  2514. @ResponseBody
  2515. public GagaResponse updateFreeGoods(@RequestBody FreeGoods freeGoods) {
  2516. if (freeGoods.getNewSysImgNm() != null && !"".equals(freeGoods.getNewSysImgNm())) {
  2517. String sysImgNm = freeGoods.getProductNo() + "_" + GagaDateUtil.getTodayDateTime() + "." + org.springframework.util.StringUtils.getFilenameExtension(freeGoods.getNewSysImgNm());
  2518. String imgUploadPath = env.getProperty("upload.default.target.path");
  2519. imgUploadPath = GagaFileUtil.getConcatenationPath(imgUploadPath, "contents", "freegoods");
  2520. //기존이미지 삭제
  2521. try {
  2522. GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(imgUploadPath, freeGoods.getSysImgNm()));
  2523. } catch (IOException e) {
  2524. // nothing
  2525. log.info("[updateFreeGoods 기존 이미지 삭제중 error]");
  2526. //e.printStackTrace();
  2527. }
  2528. File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(imgUploadPath, sysImgNm)));
  2529. File file = new File(GagaFileUtil.getConcatenationPath(imgUploadPath, freeGoods.getNewSysImgNm()));
  2530. // Rename a file
  2531. file.renameTo(uniqueFile);
  2532. sysImgNm = "/contents/freegoods/" + sysImgNm;
  2533. freeGoods.setSysImgNm(sysImgNm);
  2534. }
  2535. goodsService.updateFreeGoods(freeGoods);
  2536. return super.ok(message.getMessage("SUCC_0001"));
  2537. }
  2538. /**
  2539. * 상품대량수정 엑셀 저장
  2540. *
  2541. * @param goodsMass
  2542. * @return
  2543. * @throws Exception
  2544. * @author eskim
  2545. * @since 2021. 1. 25
  2546. */
  2547. @PostMapping("/mass/excelupload/update")
  2548. @ResponseBody
  2549. public GagaResponse updateMassExceluploadGoods(@RequestBody GoodsMass goodsMass) throws Exception {
  2550. String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
  2551. Collection<GagaMap> ecxelGoodsList = new ArrayList<>();
  2552. // 상품수장
  2553. // DB 처리 시 사용되는 파라미터명(셀명) 설정 -
  2554. String[] goodsNames = {"goodsCd", "goodsNm", "goodsTnm", "goodsSnm1", "itemkindCd", "seasonCd",
  2555. "sexGb", "currPrice", "sellFeeRate", "goodsGb", "formalGb", "minOrdQty", "maxOrdQty", "dayMaxOrdQty",
  2556. "giftPackYn", "newCustOrdYn", "pntPrate", "prePpntUsableYn", "pntMrate", "preMpntUsableYn",
  2557. "returnableYn", "changeableYn", "taxGb", "ageGrpCd", "adultYn", "delvFeeCd", "optStr", "goodsContent",
  2558. "niClsfCd", "niContent1", "niContent2",
  2559. "niContent3", "niContent4", "niContent5", "niContent6", "niContent7", "niContent8", "niContent9",
  2560. "niContent10", "niContent11", "niContent12", "niContent13", "niContent14", "niContent15", "niContent16",
  2561. "niContent17", "niContent18", "niContent19", "niContent20", "niContent21", "niContent22", "niContent23",
  2562. "niContent24", "niContent25", "niContent26", "niContent27", "niContent28"};
  2563. ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goodsMass.getExcelFileNm()), 0, goodsNames, 0);
  2564. //건수
  2565. if (ecxelGoodsList != null && ecxelGoodsList.size() > EXCEL_ROW_COUNT) {
  2566. throw new IllegalStateException("엑셀 파일의 건수를 " + EXCEL_ROW_COUNT + "건 이하로 사용하세요.");
  2567. }
  2568. // 입점담당자, 촬영업체
  2569. if (!"G001_0000".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A000".equals(TsaSession.getInfo().getRoleCd()) &&
  2570. !"G001_A001".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A100".equals(TsaSession.getInfo().getRoleCd()) &&
  2571. !"G001_A101".equals(TsaSession.getInfo().getRoleCd())) {
  2572. throw new IllegalStateException("권한이 없습니다.");
  2573. }
  2574. for (GagaMap gagaMap : ecxelGoodsList) {
  2575. goodsService.updateMassExceluploadGoods(gagaMap, goodsMass.getProcJob());
  2576. }
  2577. // 파일 삭제
  2578. GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, goodsMass.getExcelFileNm()));
  2579. return super.ok("");
  2580. }
  2581. /**
  2582. * 상품 대량등록 결과 조회
  2583. *
  2584. * @param goodsSearch
  2585. * @return
  2586. * @author eskim
  2587. * @since 2020. 01. 25
  2588. */
  2589. @PostMapping("/reg/log/list")
  2590. @ResponseBody
  2591. public Collection<GoodsMass> getGoodsRegLogList(@RequestBody GoodsSearch goodsSearch) {
  2592. return goodsService.getGoodsRegLogList(goodsSearch);
  2593. }
  2594. /**
  2595. * 사이즈 정보관리
  2596. * @return
  2597. * @author eskim
  2598. * @since 2021. 01. 26
  2599. */
  2600. @GetMapping("/size/info/form")
  2601. @ResponseBody
  2602. public ModelAndView sizeInfoForm() {
  2603. ModelAndView mav = new ModelAndView();
  2604. //자사브랜드
  2605. Brand brand = new Brand();
  2606. brand.setSelfYn("Y");
  2607. mav.addObject("selfBrandList", rendererService.getBrandList(brand));
  2608. mav.setViewName("goods/GoodsSizeInfoForm");
  2609. return mav;
  2610. }
  2611. /**
  2612. * 사이즈 정보 목록
  2613. *
  2614. * @param goodsSearch
  2615. * @return
  2616. * @author eskim
  2617. * @since 2021. 01. 26
  2618. */
  2619. @PostMapping("/size/info/list")
  2620. @ResponseBody
  2621. public Collection<SizeInfo> getSizeInfoList(@RequestBody SizeInfo sizeInfo) {
  2622. return goodsService.getSizeInfoList(sizeInfo);
  2623. }
  2624. /**
  2625. * 사이즈 정보 저장
  2626. *
  2627. * @param sizeInfo
  2628. * @return
  2629. * @author eskim
  2630. * @since 2021. 01. 27
  2631. */
  2632. @PostMapping("/size/info/save")
  2633. @ResponseBody
  2634. public GagaResponse saveSizeInfo(@RequestBody SizeInfo sizeInfo) {
  2635. goodsService.saveSizeInfo(sizeInfo);
  2636. return super.ok(message.getMessage("SUCC_0001"));
  2637. }
  2638. /**
  2639. * 총알배송 제외상품 관리
  2640. * @return
  2641. * @author eskim
  2642. * @since 2021. 02. 25
  2643. */
  2644. @GetMapping("/quik/delivery/skip/form")
  2645. @ResponseBody
  2646. public ModelAndView quikDeliveryForm() {
  2647. ModelAndView mav = new ModelAndView();
  2648. // 시즌
  2649. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  2650. // 년도
  2651. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  2652. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  2653. // 상품상태
  2654. String[] exceptCds = {"G008_00"};
  2655. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  2656. mav.setViewName("goods/GoodsQuikDeliverySkipForm");
  2657. return mav;
  2658. }
  2659. /**
  2660. * 총알배송 제외상품 조회
  2661. *
  2662. * @return
  2663. * @author eskim
  2664. * @since 2021. 02. 25
  2665. */
  2666. @PostMapping("/quik/delivery/list")
  2667. @ResponseBody
  2668. public GagaMap goodsQuikDeliveryList(@RequestBody GoodsSearch goodsSearch) {
  2669. GagaMap result = new GagaMap();
  2670. // multi row 검색관련 처리
  2671. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2672. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2673. }
  2674. if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
  2675. try {
  2676. String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
  2677. goodsSearch.setMultiBrand(arrBrandCd);
  2678. } catch (Exception e) {
  2679. e.printStackTrace();
  2680. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  2681. }
  2682. }
  2683. if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
  2684. try {
  2685. String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
  2686. goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
  2687. } catch (Exception e) {
  2688. e.printStackTrace();
  2689. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  2690. }
  2691. }
  2692. goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
  2693. goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
  2694. goodsSearch.getPageable().setTotalCount(goodsService.getGoodsQuikDeleverySkipCount(goodsSearch));
  2695. result.set("pageing", goodsSearch);
  2696. result.set("goodsList", goodsService.getGoodsQuikDeleverySkipList(goodsSearch));
  2697. return result;
  2698. }
  2699. /**
  2700. * 총알배송 제외상품 저장
  2701. *
  2702. * @param goods
  2703. * @return
  2704. * @author eskim
  2705. * @since 2021. 02. 25
  2706. */
  2707. @PostMapping("/quik/delivery/create")
  2708. @ResponseBody
  2709. public GagaResponse createGoodsQuikDeleverySkip(@RequestBody GoodsSearch goodsSearch) {
  2710. Goods goods = new Goods();
  2711. // multi row 검색관련 처리
  2712. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2713. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2714. goods.setArrGoodsCd(goodsSearch.getConditionList());
  2715. }
  2716. goodsService.createGoodsQuikDeleverySkip(goods);
  2717. return super.ok(message.getMessage("SUCC_0001"));
  2718. }
  2719. /**
  2720. * 총알배송 제외상품 삭제
  2721. *
  2722. * @param goods
  2723. * @return
  2724. * @author eskim
  2725. * @since 2021. 02. 25
  2726. */
  2727. @PostMapping("/quik/delivery/delete")
  2728. @ResponseBody
  2729. public GagaResponse deleteGoodsQuikDeleverySkip(@RequestBody Goods goods) {
  2730. goodsService.deleteGoodsQuikDeleverySkip(goods);
  2731. return super.ok(message.getMessage("SUCC_0003"));
  2732. }
  2733. /**
  2734. * 총알배송 제외상품 엑셀 적용
  2735. *
  2736. * @param goods
  2737. * @return
  2738. * @throws Exception
  2739. * @author eskim
  2740. * @since 2020. 02. 20
  2741. */
  2742. @PostMapping("/quik/delivery/excelupload/save")
  2743. @ResponseBody
  2744. public GagaResponse saveGoodsSizeSoldoutExcelupload(@RequestBody Goods goods) throws Exception {
  2745. ObjectMapper mapper = new ObjectMapper();
  2746. String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
  2747. // DB 처리 시 사용되는 파라미터명(셀명) 설정
  2748. String[] cellName = {"goodsCd"};
  2749. Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()), 0, cellName, 0);
  2750. //건수
  2751. if (ecxelGoodsList != null && ecxelGoodsList.size() > EXCEL_ROW_COUNT) {
  2752. throw new IllegalStateException("엑셀 파일의 건수를 " + EXCEL_ROW_COUNT + "건 이하로 사용하세요.");
  2753. }
  2754. Collection<Goods> goodsList = new ArrayList<>();
  2755. for (GagaMap map : ecxelGoodsList) {
  2756. Goods tmpGoods = mapper.convertValue(map, Goods.class);
  2757. goodsList.add(tmpGoods);
  2758. }
  2759. goodsService.saveGoodsSizeSoldoutExcelupload(goodsList, goods.getExcelFileNm());
  2760. // 파일 삭제
  2761. GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
  2762. return super.ok("");
  2763. }
  2764. /**
  2765. * 입점 상품 화면
  2766. *
  2767. * @return
  2768. * @author eskim
  2769. * @since 2021. 04. 21
  2770. */
  2771. @GetMapping("/register/form")
  2772. public ModelAndView registerForm() {
  2773. ModelAndView mav = new ModelAndView();
  2774. // // 상품상태
  2775. // mav.addObject("goodsStatList", rendererService.getAvailCommonCodeList("G008"));
  2776. // // 사용여부
  2777. // mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  2778. // // WMS 연동여부
  2779. // mav.addObject("wmsSyncYn", commonService.getWmsSyncYn());
  2780. // // 정보고시 목록
  2781. // mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
  2782. // // 사용자 업체
  2783. // User loginInfo = systemService.getUser(TsaSession.getInfo().getUserNo());
  2784. // String supplyCompCd = "NONE";
  2785. // if (loginInfo != null) {
  2786. // supplyCompCd = loginInfo.getSupplyCompCd();
  2787. // }
  2788. // mav.addObject("supplyCompCd", supplyCompCd);
  2789. mav.setViewName("goods/GoodsRegisterForm");
  2790. return mav;
  2791. }
  2792. /**
  2793. * 품목 목록 - 단건 조회
  2794. *
  2795. * @param itemkind
  2796. * @return
  2797. * @author eskim
  2798. * @since 2021. 06. 27
  2799. */
  2800. @PostMapping("/itemkind/list")
  2801. @ResponseBody
  2802. public Collection<Itemkind> getItemkind(Itemkind itemkind) {
  2803. return goodsService.getItemkindList(itemkind);
  2804. }
  2805. /**
  2806. * WMS입고단품목록 화면
  2807. *
  2808. * @return
  2809. * @author eskim
  2810. * @since 2021. 06. 28
  2811. */
  2812. @GetMapping("/wms/incomelot/sku/form")
  2813. public ModelAndView wmsInstockSkuForm() {
  2814. ModelAndView mav = new ModelAndView();
  2815. // 공급업체
  2816. String supplyCompCd = "";
  2817. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
  2818. // 상품상태
  2819. String[] exceptCds = {"G008_00"};
  2820. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
  2821. // 품목
  2822. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  2823. mav.setViewName("goods/GoodsWmsIncomelotSkuForm");
  2824. return mav;
  2825. }
  2826. /**
  2827. * WMS입고단품목록 조회
  2828. *
  2829. * @return
  2830. * @author eskim
  2831. * @since 2021. 06. 28
  2832. */
  2833. @PostMapping("/wms/incomelot/sku/list")
  2834. @ResponseBody
  2835. public GagaMap getWmsIncomelotSkuList(@RequestBody IfIncomelot ifIncomelot) {
  2836. GagaMap result = new GagaMap();
  2837. ifIncomelot.setPageable(new TscPageRequest(ifIncomelot.getPageNo() - 1, ifIncomelot.getPageSize()));
  2838. ifIncomelot.getPageable().setTotalCount(goodsService.getGoodsWmsIncomelotSkuListCount(ifIncomelot));
  2839. result.set("pageing", ifIncomelot);
  2840. result.set("goodsList", goodsService.getGoodsWmsIncomelotSkuList(ifIncomelot));
  2841. return result;
  2842. }
  2843. /**
  2844. * 자사 상품 화면
  2845. *
  2846. * @return
  2847. * @author eskim
  2848. * @since 2021. 07. 04
  2849. */
  2850. @GetMapping("/salf/register/form")
  2851. public ModelAndView salfRegisterForm() {
  2852. ModelAndView mav = new ModelAndView();
  2853. // 공급업체
  2854. String selfYn = "Y";
  2855. String supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
  2856. mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
  2857. // 배송비정보
  2858. mav.addObject("delvFeeCdList", rendererService.getSupplyDeliveryFeePolicyList(supplyCompCd));
  2859. String[] goodsStatExceptCds = {"G008_00"};
  2860. mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", goodsStatExceptCds));
  2861. // 정상이월
  2862. mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
  2863. // 성별
  2864. mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
  2865. // 시즌
  2866. mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
  2867. // 사용여부
  2868. mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
  2869. // 품목
  2870. mav.addObject("itemkindList", rendererService.getAllItemkindList());
  2871. // 정보고시 분류
  2872. mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
  2873. // 사용자 브랜드 조회
  2874. mav.addObject("authBrandList", rendererService.getSupplyCompanyBrandList(supplyCompCd));
  2875. // 상품타입
  2876. mav.addObject("goodsTypeList", rendererService.getAvailCommonCodeList("G056"));
  2877. // 상품구분
  2878. mav.addObject("goodsGbList", rendererService.getAvailCommonCodeList("G073"));
  2879. // 유통구분
  2880. String[] distributionGbExceptCds = {"G065_20"};
  2881. mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065", "Y", distributionGbExceptCds));
  2882. // 상품연령대
  2883. mav.addObject("ageGrpCdList", rendererService.getAvailCommonCodeList("G023"));
  2884. // 원산지
  2885. mav.addObject("originCdList", rendererService.getAvailCommonCodeList("G076"));
  2886. // kc인증타입
  2887. mav.addObject("certTypeList", rendererService.getAvailCommonCodeList("G081"));
  2888. // kc인증대상구분
  2889. mav.addObject("certTargetGbList", rendererService.getAvailCommonCodeList("G083"));
  2890. // kc인증형태구분
  2891. mav.addObject("certFormGbList", rendererService.getAvailCommonCodeList("G084"));
  2892. // 년도
  2893. int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
  2894. mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
  2895. // 회원등급
  2896. //mav.addObject("custGradeList", rendererService.getAvailCommonCodeList("G110"));
  2897. // 출고처
  2898. mav.addObject("delvLocCdList", rendererService.getSupplyDeliveryLocList(supplyCompCd));
  2899. //mav.addObject("params", goods);
  2900. mav.setViewName("goods/GoodsSalfRegisterForm");
  2901. return mav;
  2902. }
  2903. /**
  2904. * 자사 상품 등록
  2905. *
  2906. * @param goods
  2907. * @return
  2908. * @author eskim
  2909. * @since 2021. 07. 04
  2910. */
  2911. @PostMapping("/salf/detail/create")
  2912. @ResponseBody
  2913. public GagaMap createSalfGoodsDetail(@RequestBody Goods goods) {
  2914. GagaMap result = new GagaMap();
  2915. Collection<GoodsNotiInfo> notiList = null;
  2916. ObjectMapper mapper = new ObjectMapper();
  2917. try {
  2918. if (goods.getNotiList() != null) {
  2919. notiList = mapper.readValue(goods.getNotiList(), new TypeReference<Collection<GoodsNotiInfo>>() {
  2920. });
  2921. }
  2922. } catch (Exception e) {
  2923. e.printStackTrace();
  2924. }
  2925. goods.setNotiListNew(notiList);
  2926. goodsService.createSalfGoodsDetail(goods);
  2927. result.set("goodsCd", goods.getGoodsCd());
  2928. return result;
  2929. }
  2930. /**
  2931. * 상품 상세 컨텐츠 화면
  2932. *
  2933. * @return
  2934. * @author eskim
  2935. * @since 2021. 07. 14
  2936. */
  2937. @GetMapping("/contents/form")
  2938. public ModelAndView detailContentsForm() {
  2939. ModelAndView mav = new ModelAndView();
  2940. // 상품상세노출컨텐츠유형
  2941. mav.addObject("goodsContentsTypeList", rendererService.getAvailCommonCodeList("G086"));
  2942. mav.setViewName("goods/GoodsContentsForm");
  2943. return mav;
  2944. }
  2945. /**
  2946. * 상품 상세 컨텐츠 목록
  2947. * @param notice - 공지사항 정보
  2948. * @return
  2949. * @author eskim
  2950. * @since 2021. 07. 14
  2951. */
  2952. @PostMapping("/contents/list")
  2953. @ResponseBody
  2954. public Collection<GoodsContents> getGoodsContentsList(@RequestBody GoodsSearch goodsSearch) {
  2955. // 입점업체담당자는 업체코드 설정
  2956. if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
  2957. goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
  2958. goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
  2959. }
  2960. // multi row 검색관련 처리
  2961. if (!StringUtils.isBlank(goodsSearch.getCondition())) {
  2962. goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
  2963. }
  2964. if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
  2965. try {
  2966. String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
  2967. goodsSearch.setMultiBrand(arrBrandCd);
  2968. } catch (Exception e) {
  2969. e.printStackTrace();
  2970. throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
  2971. }
  2972. }
  2973. if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
  2974. try {
  2975. String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
  2976. goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
  2977. } catch (Exception e) {
  2978. e.printStackTrace();
  2979. throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
  2980. }
  2981. }
  2982. return goodsService.getGoodsContentsList(goodsSearch);
  2983. }
  2984. /**
  2985. * 상품 상세 컨텐츠 상품목록
  2986. * @param notice - 공지사항 정보
  2987. * @return
  2988. * @author eskim
  2989. * @since 2021. 07. 14
  2990. */
  2991. @GetMapping("/contents/goods/list/{goodsContentsSq}")
  2992. @ResponseBody
  2993. public Collection<GoodsContentsData> getContentsGoodsList(@PathVariable Integer goodsContentsSq) {
  2994. GoodsContents goodsContents = new GoodsContents();
  2995. goodsContents.setGoodsContentsSq(goodsContentsSq);
  2996. return goodsService.getGoodsContentsDataList(goodsContents);
  2997. }
  2998. /**
  2999. * 상품 상세 컨텐츠 저장/등록
  3000. *
  3001. * @param
  3002. * @return
  3003. * @author eskim
  3004. * @since 2021. 07. 14
  3005. */
  3006. @PostMapping("/contents/save")
  3007. @ResponseBody
  3008. public GagaResponse saveContents(@RequestBody GoodsContents goodsContents) {
  3009. goodsService.saveGoodsContent(goodsContents);
  3010. return super.ok(message.getMessage("SUCC_0001"));
  3011. }
  3012. /**
  3013. * 상품 상세 컨텐츠 상품 삭제
  3014. *
  3015. * @param
  3016. * @return
  3017. * @author eskim
  3018. * @since 2021. 07. 14
  3019. */
  3020. @PostMapping("/contents/goods/delete")
  3021. @ResponseBody
  3022. public GagaResponse deleteContentsGoods(@RequestBody GoodsContentsData goodsContentsData) {
  3023. goodsService.deleteGoodsContentGoods(goodsContentsData);
  3024. return super.ok(message.getMessage("SUCC_0003"));
  3025. }
  3026. }