package com.bb.api; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.reactive.function.client.WebClient; import com.bb.jwt.JwtManager; import com.bb.model.ApiResponse; import com.bb.model.CommonParamAdmin; import com.bb.model.PageFormVO; import com.bb.model.Site; import com.bb.model.SitePwdVO; import com.bb.model.SiteSearch; import com.bb.model.Vendor; import com.bb.service.CreditService; import com.bb.service.SiteService; import com.bb.service.StatService; import com.bb.util.IPKit; import com.bb.util.PagingUtil; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONObject; @Slf4j @Controller @RequiredArgsConstructor @RequestMapping(value = "/api/v1/agent") public class ApiAgentController { @Autowired SiteService siteService; @Autowired StatService statService; @Autowired CreditService creditService; @Autowired private final JwtManager jwtManager; @Autowired private WebClient webClient; // 싱글톤 WebClient 주입 @ResponseBody @PostMapping("/list") public ApiResponse list( @RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp() == null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0 ) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); apiResponse.setResultMessage("access denied IP"); return apiResponse; } // TO DO 토큰체크 Map data = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); final String LOG_PREFIX = "#-API::AGENT::list::"+tokenInfo.getSid()+"::::"; // POJO to JSON ObjectMapper objectMapper = new ObjectMapper(); String reqJsonStr = objectMapper.writeValueAsString(search); org.codehaus.jettison.json.JSONObject reqObj = new org.codehaus.jettison.json.JSONObject(reqJsonStr); log.info(LOG_PREFIX+ "Request {}", reqObj); // 여기서 부터 로직 PageFormVO pageVo= new PageFormVO(); if(search.getUpperSiteId() == null || search.getUpperSiteId().equals("")) { search.setUpperSiteId(tokenInfo.getSid()); } search.setTopId(tokenInfo.getSid()); //아이디 log.info(LOG_PREFIX+ "SiteSearch::"+search.toString()); int totalCount = siteService.getSiteListCntForApi(search); if (totalCount != 0) { PageFormVO commonForm = new PageFormVO(); commonForm.setFunction_name("goPage"); commonForm.setPage(search.getPage()); commonForm.setCount_per_page(20); if(search.getCount_per_list()==0) { commonForm.setCount_per_list(10); } else { commonForm.setCount_per_list(search.getCount_per_list()); } commonForm.setTatal_list_count(totalCount); pageVo = PagingUtil.setPageUtil(commonForm); search.setLimit(pageVo.getLimit()); search.setOffset(pageVo.getOffset()); search.setTatal_list_count(totalCount); data.put("pageInfo", pageVo); } List siteList = siteService.getSiteListForApi(search); data.put("siteList", siteList); List downSiteList = siteService.getMyDownSite(search); data.put("downSiteList", downSiteList); } catch(Exception e) { log.info(e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } apiResponse.setData(data); apiResponse.success(); } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } @ResponseBody @GetMapping("/detail/{siteIdx}") public ApiResponse detail( @RequestHeader String token, HttpServletRequest request, @PathVariable long siteIdx ) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { log.info(token.toString()); Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp() == null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0 ) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); apiResponse.setResultMessage("access denied IP"); return apiResponse; } // TO DO 토큰체크 Map data = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); log.info(tokenInfo.getSid()); // 여기서 부터 로직 SiteSearch search = new SiteSearch(); log.info("siteIdx {}" , site.getSiteIdx()); search.setUpperSiteId(""+site.getSiteId()); search.setSiteIdx(siteIdx); search.setTopId(tokenInfo.getSid()); Site targetSite = siteService.getSiteDetailForApi(search); data.put("targetSite", targetSite); data.put("uppersiteIdx", site.getSiteIdx()); boolean isMyAgent = false; List treeInfo = targetSite.getTreeInfo(); for(HashMap item : treeInfo) { if(tokenInfo.getSid().equals(item.get("upperSiteId").toString())) { isMyAgent = true; } } if(!isMyAgent) { apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } HashMap creditInfo = siteService.getCreditInfo(targetSite.getSiteId()); data.put("creditInfo", creditInfo); List vederRateList = siteService.getVenderRateList(targetSite); List vendorlist = siteService.getVendorListForApi(search); SiteSearch mySearch = new SiteSearch(); mySearch.setSiteIdx(site.getSiteIdx()); List myVendorlist = siteService.getVendorListForApi(mySearch); data.put("vederRateList", vederRateList); data.put("vendorlist", vendorlist); data.put("myVendorlist", myVendorlist); log.info("vederRateList {}", vederRateList.size()); log.info("vederRateList {}", vederRateList); // TODO : 에이전트 상세 베팅통계 데이터 HashMap ydayBetInfo = statService.getYdayBetInfoBySite(targetSite); log.info("ydayBetInfo {}", ydayBetInfo); HashMap monthBetInfo = statService.getMonthBetInfoBySite(targetSite); log.info("monthBetInfo {}", monthBetInfo); data.put("ydayBetInfo", ydayBetInfo); // 어제 배팅통계 data.put("monthBetInfo", monthBetInfo); // 이번달 배팅통계 }catch(Exception e) { log.info(e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } apiResponse.setData(data); apiResponse.success(); } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } @ResponseBody @GetMapping("/myInfo") public ApiResponse myInfo( @RequestHeader String token, HttpServletRequest request) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { log.info(token.toString()); Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp() == null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0 ) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); apiResponse.setResultMessage("access denied IP"); return apiResponse; } // TO DO 토큰체크 Map data = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); log.info(tokenInfo.getSid()); // 여기서 부터 로직 SiteSearch search = new SiteSearch(); log.info("siteIdx {}" , site.getSiteIdx()); search.setSiteIdx(site.getSiteIdx()); search.setTopId(tokenInfo.getSid()); Site targetSite = siteService.getSiteDetailForApi(search); data.put("targetSite", targetSite); data.put("uppersiteIdx", site.getSiteIdx()); HashMap creditInfo = siteService.getCreditInfo(targetSite.getSiteId()); data.put("creditInfo", creditInfo); List vederRateList = siteService.getVenderRateList(targetSite); List vendorlist = siteService.getVendorListForApi(search); SiteSearch mySearch = new SiteSearch(); mySearch.setSiteIdx(site.getSiteIdx()); List myVendorlist = siteService.getVendorListForApi(mySearch); data.put("vederRateList", vederRateList); data.put("vendorlist", vendorlist); data.put("myVendorlist", myVendorlist); log.info("vederRateList {}", vederRateList.size()); log.info("vederRateList {}", vederRateList); // TODO : 에이전트 상세 베팅통계 데이터 HashMap ydayBetInfo = statService.getYdayBetInfoBySite(targetSite); HashMap monthBetInfo = statService.getMonthBetInfoBySite(targetSite); data.put("ydayBetInfo", ydayBetInfo); // 어제 배팅통계 data.put("monthBetInfo", monthBetInfo); // 이번달 배팅통계 }catch(Exception e) { log.info(e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } apiResponse.setData(data); apiResponse.success(); } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } @ResponseBody @GetMapping("/tree") public ApiResponse tree( @RequestHeader String token, HttpServletRequest request ) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { log.info(token.toString()); Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp() == null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0 ) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); apiResponse.setResultMessage("access denied IP"); return apiResponse; } // TO DO 토큰체크 Map data = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); log.info(tokenInfo.getSid()); // 하위 사이트 여부체크 Map checkDown = new HashMap(); checkDown.put("me", site.getSiteId()); checkDown.put("target", site.getSiteId()); int downCnt = siteService.checkDownSite(checkDown); if(downCnt ==0) { apiResponse.setResultCode("99993"); apiResponse.setResultMessage("agent is not valid"); return apiResponse; } List treeList = siteService.getSiteTreeList(site.getSiteId()); data.put("list", treeList); }catch(Exception e) { log.info(e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } apiResponse.setData(data); apiResponse.success(); } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } @ResponseBody @GetMapping("/tree/{siteId}") public ApiResponse tree( @RequestHeader String token, HttpServletRequest request, @PathVariable String siteId ) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { log.info(token.toString()); Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp() == null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0 ) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); apiResponse.setResultMessage("access denied IP"); return apiResponse; } // TO DO 토큰체크 Map data = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); log.info(tokenInfo.getSid()); // 하위 사이트 여부체크 Map checkDown = new HashMap(); checkDown.put("me", site.getSiteId()); checkDown.put("target", siteId); int downCnt = siteService.checkDownSite(checkDown); if(downCnt ==0) { apiResponse.setResultCode("99993"); apiResponse.setResultMessage("agent is not valid"); return apiResponse; } List treeList = siteService.getSiteTreeList(siteId); data.put("list", treeList); }catch(Exception e) { log.info(e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } apiResponse.setData(data); apiResponse.success(); } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } @ResponseBody @RequestMapping("/update") public ApiResponse siteUpdate( @RequestHeader String token, HttpServletRequest request, ModelMap model, @RequestBody Site targetsite) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { log.info(token.toString()); Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp() == null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0 ) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); apiResponse.setResultMessage("access denied IP"); return apiResponse; } // TO DO 토큰체크 Map data = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); log.info(tokenInfo.getSid()); // 여기서 부터 로직 targetsite.setUpperSiteId(site.getSiteId()); targetsite.setUpperSiteIdx(site.getSiteIdx()); targetsite.setSiteId(targetsite.getSiteId()); int myDownSiteCheck = siteService.getMyDownSiteCheck(targetsite); if(myDownSiteCheck >0) { apiResponse.setResultCode("10009"); apiResponse.setResultMessage("not your bottom sites"); return apiResponse; } siteService.siteUpdateForAPI(targetsite) ; }catch(Exception e) { log.info(e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } apiResponse.setData(data); apiResponse.success(); } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } @ResponseBody @RequestMapping("/updateSitePwd") public ApiResponse updateSitePwd(HttpServletRequest request, @RequestHeader String token, @RequestBody SitePwdVO sitePwdVO) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp()==null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); return apiResponse; } // TO DO 토큰체크 Map responseData = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); final String LOG_PREFIX = "#-API::Agent::updateSitePwd::"+tokenInfo.getSid()+"::::"; sitePwdVO.setSiteId(tokenInfo.getSid()); // 여기서 부터 로직 log.info(LOG_PREFIX + "SitePwdVO::"+sitePwdVO); int result = siteService.updateSitePwd(sitePwdVO); log.info(LOG_PREFIX + "updateSitePwd result::"+result); if(result > 0) { log.info(LOG_PREFIX + "Site password update succ"); apiResponse.success(); } else { log.error(LOG_PREFIX + "Site password update fail"); apiResponse.fail(); } } catch(Exception e) { log.info(e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } @ResponseBody @RequestMapping("/add") public ApiResponse add(@RequestHeader String token, HttpServletRequest request, ModelMap model, @RequestBody Site addsite) throws Exception { ApiResponse apiResponse = new ApiResponse(); try { log.info(token.toString()); Site site = siteService.getSiteInfoAPI(request); if(site == null) { apiResponse.setResultCode("9999"); apiResponse.setResultMessage("Authorization apiKey check"); return apiResponse; } if( !( site.getSiteIp() == null || "".equals(site.getSiteIp()) || "3.3.3.3".equals(site.getSiteIp()) || site.getSiteIp().indexOf(IPKit.getIpAddressByRequest(request)) >= 0 ) ) { log.error("site.getSiteIp("+site.getSiteIp()+"), denied" + IPKit.getIpAddressByRequest(request)); apiResponse.setResultCode("10001"); apiResponse.setResultMessage("access denied IP"); return apiResponse; } // TO DO 토큰체크 Map data = new HashMap(); try { JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfoAdmin(token); final String LOG_PREFIX = "#-API::AGENT_ADD::"+tokenInfo.getSid()+"::"; // POJO to JSON ObjectMapper objectMapper = new ObjectMapper(); String reqJsonStr = objectMapper.writeValueAsString(addsite); org.codehaus.jettison.json.JSONObject reqObj = new org.codehaus.jettison.json.JSONObject(reqJsonStr); log.info(LOG_PREFIX+ "Request {}", reqObj); log.info(tokenInfo.getSid()); // 하부사이트 체크 Site targetsite = new Site(); targetsite.setUpperSiteId(site.getSiteId()); targetsite.setUpperSiteIdx(site.getSiteIdx()); targetsite.setSiteId(addsite.getUpperSiteId()); if(addsite.getIsTransfer() == null || "".equals(addsite.getIsTransfer())) { addsite.setIsTransfer("N"); } int myDownSiteCheck = siteService.getMyDownSiteCheck(targetsite); if(myDownSiteCheck >0) { apiResponse.setResultCode("10009"); apiResponse.setResultMessage("not your bottom sites"); return apiResponse; } addsite.setUpperSiteId(addsite.getUpperSiteId()); addsite.setUpperSiteIdx(addsite.getUpperSiteIdx()); addsite.setSiteKey(makeApiKey(addsite.getSiteId())); log.info(LOG_PREFIX+ "addsite {}", addsite); Site dupSite = siteService.getSite(addsite); log.info(LOG_PREFIX+ "dupSite []", dupSite); if(dupSite!=null) { apiResponse.setResultCode("99990"); apiResponse.setResultMessage("already siteId"); return apiResponse; } else { Site upperSite = new Site(); upperSite.setSiteId(addsite.getUpperSiteId()); upperSite = siteService.getSite(upperSite); addsite.setSiteLevel(upperSite.getSiteLevel()+1); siteService.addProcAPI(addsite); } } catch(Exception e) { log.error("#-API::AGENT_ADD::"+ e.toString()); apiResponse.setResultCode("99995"); apiResponse.setResultMessage("token is no valid"); return apiResponse; } apiResponse.setData(data); apiResponse.success(); } catch (Exception e) { e.printStackTrace(); apiResponse.fail(); } return apiResponse; } /** * 외부 API 호출 공통 프라이빗 메서드 (중복 코드 방지용) */ private void sendExternalRateChange(String url, String siteKey, String vendorName, Object vendorIdx, Object rate) { try { log.info("##### WebClient External Call Start ##### URL: {}", url); JSONObject paramBody = new JSONObject(); paramBody.put("siteApiKey", siteKey); paramBody.put("vendor", vendorName); paramBody.put("vendorIdx", vendorIdx); paramBody.put("gameRate", rate); String response = webClient.post() .uri(url) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36") .bodyValue(paramBody.toString()) .retrieve() .bodyToMono(String.class) .block(); // 동기 방식 log.info("##### WebClient Response: {}", response); } catch (Exception e) { log.error("##### WebClient Call Error: {}", e.getMessage()); } } @RequestMapping("/creditRateSave") public @ResponseBody JSONObject creditRateSave(HttpServletRequest request, ModelMap model, CommonParamAdmin commonParamAdmin) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site) authentication.getDetails(); Site site = siteService.getSiteInfoAPI(request); String siteUrl = site.getSiteCbUrl() + "/gameRateChange"; JSONObject obj = new JSONObject(); log.info("#-CREDIT_RATE_SAVE::: CommonParamAdmin: {}", commonParamAdmin.toString()); for (int i = 0; i < commonParamAdmin.getParamlist().length; i++) { JSONObject paramData = commonParamAdmin.getParamlist()[i]; paramData.put("siteIdx", commonParamAdmin.getParam().get("targetSiteIdx")); paramData.put("insureUpSiteIdX", loginSite.getSiteIdx()); ObjectMapper mapper = new ObjectMapper(); HashMap paramMap = mapper.readValue(paramData.toString(), new TypeReference() {}); if (paramMap.get("vendorIdx") != null) { int type = Integer.parseInt(paramMap.get("type").toString()); if (type == 0) { siteService.saveVendorRate(paramMap); } siteService.saveSvcr(paramMap, 1); // 1로 고정된 비즈니스 로직 유지 if (type == 0) { String siteKey = siteService.getSiteKey(paramMap); String vendorName = siteService.getVendorTitle(paramMap); sendExternalRateChange(siteUrl, siteKey, vendorName, paramMap.get("vendorIdx"), paramMap.get("rate")); } if (loginSite.getSiteLevel() < 1) { siteService.updateVendorUseYn(paramMap); } } } obj.put("RES", "SUCCESS"); return obj; } @RequestMapping("/saveSvcr") public @ResponseBody JSONObject saveSvcr(HttpServletRequest request, ModelMap model, CommonParamAdmin commonParamAdmin) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site) authentication.getDetails(); JSONObject obj = new JSONObject(); ObjectMapper mapper = new ObjectMapper(); HashMap paramMap = mapper.readValue(commonParamAdmin.getParam().toString(), new TypeReference() {}); String siteUrl = loginSite.getSiteCbUrl() + "/gameRateChange"; if (paramMap.get("vendorIdx") != null) { paramMap.put("siteIdx", commonParamAdmin.getParam().get("targetSiteIdx")); int type = Integer.parseInt(paramMap.get("type").toString()); if (type == 0) { siteService.saveVendorRate(paramMap); } siteService.saveSvcr(paramMap, type); if (type == 0) { String siteKey = siteService.getSiteKey(paramMap); String vendorName = siteService.getVendorTitle(paramMap); sendExternalRateChange(siteUrl, siteKey, vendorName, paramMap.get("vendorIdx"), paramMap.get("rate")); } if (loginSite.getSiteLevel() < 1) { siteService.updateVendorUseYn(paramMap); } } obj.put("RES", "SUCCESS"); return obj; } @RequestMapping("/saveSvcrAll") public @ResponseBody JSONObject saveSvcrAll(HttpServletRequest request, ModelMap model, CommonParamAdmin commonParamAdmin) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site) authentication.getDetails(); JSONObject obj = new JSONObject(); String siteUrl = loginSite.getSiteCbUrl() + "/gameRateChange"; for (int i = 0; i < commonParamAdmin.getParamlist().length; i++) { JSONObject paramData = commonParamAdmin.getParamlist()[i]; paramData.put("siteIdx", commonParamAdmin.getParam().get("targetSiteIdx")); ObjectMapper mapper = new ObjectMapper(); HashMap paramMap = mapper.readValue(paramData.toString(), new TypeReference() {}); if (paramMap.get("vendorIdx") != null) { int type = Integer.parseInt(paramMap.get("type").toString()); if (type == 0) { siteService.saveVendorRate(paramMap); } siteService.saveSvcr(paramMap, type); if (type == 0) { String siteKey = siteService.getSiteKey(paramMap); String vendorName = siteService.getVendorTitle(paramMap); sendExternalRateChange(siteUrl, siteKey, vendorName, paramMap.get("vendorIdx"), paramMap.get("rate")); } if (loginSite.getSiteLevel() < 1) { siteService.updateVendorUseYn(paramMap); } } } obj.put("RES", "SUCCESS"); return obj; } @RequestMapping("/siteVenderUpdate") public @ResponseBody JSONObject siteVenderUpdate(HttpServletRequest request, ModelMap model, Vendor vendor) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site) authentication.getDetails(); Site site = siteService.getSiteInfoAPI(request); String siteUrl = site.getSiteCbUrl() + "/gameRateChange"; JSONObject obj = new JSONObject(); vendor.setSiteIdx(loginSite.getSiteIdx()); try { siteService.siteVenderUpdate(vendor); String siteKey = loginSite.getSiteKey(); String vendorName = vendor.getVendorCode(); // 벤더 이름 가공 로직 if (vendorName.startsWith("gsoft_")) vendorName = "gsoft"; if (vendorName.startsWith("trump_")) vendorName = "trump"; if (vendorName.startsWith("ppk_")) vendorName = "ppk"; if (vendorName.startsWith("sg_")) vendorName = "sg"; String venderRate = siteService.siteVenderRate(vendor); // 공통 메서드 호출 sendExternalRateChange(siteUrl, siteKey, vendorName, vendor.getVendorIdx(), venderRate); obj.put("RES", "SUCCESS"); } catch (Exception e) { log.error("#-SITE_VENDOR_UPDATE Error: {}", e.toString()); obj.put("RES", "FAIL"); } return obj; } @RequestMapping("/insurePoinRateSave") public @ResponseBody JSONObject insurePointRateSave( HttpServletRequest request, ModelMap model, CommonParamAdmin commonParamAdmin ) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); JSONObject obj = new JSONObject(); log.info(commonParamAdmin.toString()); for(int i=0;i() {}); siteService.saveVendorInsurePointRate(paramMap); } obj.put("RES", "SUCCESS"); return obj; } @RequestMapping("/addProc") public @ResponseBody JSONObject addProc( HttpServletRequest request, ModelMap model, Site site) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); site.setUpperSiteId(loginSite.getSiteId()); site.setUpperSiteIdx(loginSite.getSiteIdx()); site.setSiteKey(makeApiKey(site.getSiteId())); JSONObject obj = new JSONObject(); log.info(site.toString()); siteService.addProcAPI(site); obj.put("RES", "SUCCESS"); return obj; } @GetMapping("/transaction") public String transaction( HttpServletRequest request , ModelMap model , @ModelAttribute("searchVO") SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); model.put("loginSite", loginSite); long siteCredit = siteService.getSiteCredit(loginSite.getSiteId()); long underSiteCredit = siteService.getUnderSiteCredit(loginSite.getSiteId()); long sitePoint = siteService.getSitePoint(loginSite.getSiteId()); model.put("sitePoint", sitePoint); model.put("siteCredit", siteCredit); model.put("underSiteCredit", underSiteCredit); HashMap creditWait = siteService.getCreditWait(loginSite.getSiteIdx()); model.put("creditWait", creditWait); long insureAmt = siteService.getInsureAmt(loginSite.getSiteId()); long insurePointAmt = siteService.getInsurePointAmt(loginSite.getSiteId()); model.put("insureAmt", insureAmt); model.put("insurePointAmt", insurePointAmt); String nowtime = new SimpleDateFormat("yyyy-MM-dd").format(new Date(System.currentTimeMillis())); if(search.getStartDate() == null || "".equals(search.getStartDate())) { search.setStartDate(nowtime); } if(search.getEndDate() == null || "".equals(search.getEndDate())) { search.setEndDate(nowtime); } if(search.getSearchSiteId() == null || "".equals(search.getSearchSiteId())) { search.setSearchSiteId(loginSite.getSiteId()); } PageFormVO pageVo= new PageFormVO(); search.setSiteId(loginSite.getSiteId()); search.setSiteIdx(loginSite.getSiteIdx()); int totalCount = creditService.getSiteTranListCnt(search); if (totalCount != 0) { PageFormVO commonForm = new PageFormVO(); commonForm.setFunction_name("goPage"); commonForm.setPage(search.getPage()); commonForm.setCount_per_page(20); if(search.getCount_per_list()==0) { commonForm.setCount_per_list(30); } else { commonForm.setCount_per_list(search.getCount_per_list()); } commonForm.setTatal_list_count(totalCount); pageVo = PagingUtil.setPageUtil(commonForm); search.setLimit(pageVo.getLimit()); search.setOffset(pageVo.getOffset()); search.setTatal_list_count(totalCount); model.put("pageInfo", pageVo); } List list = creditService.getSiteTranList(search); log.debug(""+list.size()); model.put("list", list); List downSiteList = siteService.getMyDownSite(search); model.put("downSiteList", downSiteList); return "admin/transaction"; } @GetMapping("/gamelink") public String gamelink( HttpServletRequest request , ModelMap model, @ModelAttribute("searchVO") SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); model.put("loginSite", loginSite); long siteCredit = siteService.getSiteCredit(loginSite.getSiteId()); long underSiteCredit = siteService.getUnderSiteCredit(loginSite.getSiteId()); long sitePoint = siteService.getSitePoint(loginSite.getSiteId()); model.put("sitePoint", sitePoint); model.put("siteCredit", siteCredit); model.put("underSiteCredit", underSiteCredit); HashMap creditWait = siteService.getCreditWait(loginSite.getSiteIdx()); model.put("creditWait", creditWait); long insureAmt = siteService.getInsureAmt(loginSite.getSiteId()); long insurePointAmt = siteService.getInsurePointAmt(loginSite.getSiteId()); model.put("insureAmt", insureAmt); model.put("insurePointAmt", insurePointAmt); search.setSiteIdx(loginSite.getSiteIdx()); List mylist = siteService.getSiteVendorListForApi(search); List vendorlist = siteService.getVendorListForApi(search); model.put("mylist", mylist); model.put("vendorlist", vendorlist); return "admin/gamelink"; } @GetMapping("/venderset") public String venderset( HttpServletRequest request , ModelMap model, @ModelAttribute("searchVO") SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); model.put("loginSite", loginSite); long siteCredit = siteService.getSiteCredit(loginSite.getSiteId()); long underSiteCredit = siteService.getUnderSiteCredit(loginSite.getSiteId()); long sitePoint = siteService.getSitePoint(loginSite.getSiteId()); model.put("sitePoint", sitePoint); model.put("siteCredit", siteCredit); model.put("underSiteCredit", underSiteCredit); HashMap creditWait = siteService.getCreditWait(loginSite.getSiteIdx()); model.put("creditWait", creditWait); long insureAmt = siteService.getInsureAmt(loginSite.getSiteId()); long insurePointAmt = siteService.getInsurePointAmt(loginSite.getSiteId()); model.put("insureAmt", insureAmt); model.put("insurePointAmt", insurePointAmt); search.setSiteIdx(loginSite.getSiteIdx()); List mylist = siteService.getSiteVendorListForApi(search); List vendorlist = siteService.getVendorListForApi(search); model.put("mylist", mylist); model.put("vendorlist", vendorlist); return "admin/venderset"; } @GetMapping("/gameCompanySet") public String gameCompanySet( HttpServletRequest request , ModelMap model, @ModelAttribute("searchVO") SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); model.put("loginSite", loginSite); long siteCredit = siteService.getSiteCredit(loginSite.getSiteId()); long underSiteCredit = siteService.getUnderSiteCredit(loginSite.getSiteId()); long sitePoint = siteService.getSitePoint(loginSite.getSiteId()); model.put("sitePoint", sitePoint); model.put("siteCredit", siteCredit); model.put("underSiteCredit", underSiteCredit); HashMap creditWait = siteService.getCreditWait(loginSite.getSiteIdx()); model.put("creditWait", creditWait); long insureAmt = siteService.getInsureAmt(loginSite.getSiteId()); long insurePointAmt = siteService.getInsurePointAmt(loginSite.getSiteId()); model.put("insureAmt", insureAmt); model.put("insurePointAmt", insurePointAmt); search.setSiteIdx(loginSite.getSiteIdx()); List mylist = siteService.getSiteVendorListForApi(search); List vendorlist = siteService.getVendorListForApi(search); model.put("mylist", mylist); model.put("vendorlist", vendorlist); return "admin/gameCompanySet"; } @GetMapping("/gameSet") public String gameSet( HttpServletRequest request , ModelMap model, @ModelAttribute("searchVO") SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); model.put("loginSite", loginSite); long siteCredit = siteService.getSiteCredit(loginSite.getSiteId()); long underSiteCredit = siteService.getUnderSiteCredit(loginSite.getSiteId()); long sitePoint = siteService.getSitePoint(loginSite.getSiteId()); model.put("sitePoint", sitePoint); model.put("siteCredit", siteCredit); model.put("underSiteCredit", underSiteCredit); HashMap creditWait = siteService.getCreditWait(loginSite.getSiteIdx()); model.put("creditWait", creditWait); long insureAmt = siteService.getInsureAmt(loginSite.getSiteId()); long insurePointAmt = siteService.getInsurePointAmt(loginSite.getSiteId()); model.put("insureAmt", insureAmt); model.put("insurePointAmt", insurePointAmt); search.setSiteIdx(loginSite.getSiteIdx()); List mylist = siteService.getSiteVendorListForApi(search); List vendorlist = siteService.getVendorListForApi(search); model.put("mylist", mylist); model.put("vendorlist", vendorlist); return "admin/gameSet"; } @GetMapping("/betlimit") public String betlimit( HttpServletRequest request , ModelMap model, @ModelAttribute("searchVO") SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); model.put("loginSite", loginSite); long siteCredit = siteService.getSiteCredit(loginSite.getSiteId()); long underSiteCredit = siteService.getUnderSiteCredit(loginSite.getSiteId()); long sitePoint = siteService.getSitePoint(loginSite.getSiteId()); model.put("sitePoint", sitePoint); model.put("siteCredit", siteCredit); model.put("underSiteCredit", underSiteCredit); HashMap creditWait = siteService.getCreditWait(loginSite.getSiteIdx()); model.put("creditWait", creditWait); long insureAmt = siteService.getInsureAmt(loginSite.getSiteId()); long insurePointAmt = siteService.getInsurePointAmt(loginSite.getSiteId()); model.put("insureAmt", insureAmt); model.put("insurePointAmt", insurePointAmt); search.setSiteIdx(loginSite.getSiteIdx()); List mylist = siteService.getSiteVendorListForApi(search); search.setSearchType("union"); search.setSiteIdx(loginSite.getSiteIdx()); List vendorMaplist = siteService.getVendorMapList(search); model.put("mylist", mylist); model.put("vendorlist", vendorMaplist); return "admin/betlimit"; } @RequestMapping("/betlimitUpdate") public @ResponseBody JSONObject betlimitUpdate( HttpServletRequest request, ModelMap model, Vendor vendor) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); JSONObject obj = new JSONObject(); vendor.setSiteIdx(loginSite.getSiteIdx()); try { siteService.siteVenderLobbyUpdate(vendor); obj.put("RES", "SUCCESS"); }catch(Exception e) { System.out.print(e.toString()); obj.put("RES", "FAIL"); } return obj; } @GetMapping("/gamemanage") public String gameManage( HttpServletRequest request , ModelMap model, @ModelAttribute("searchVO") SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); model.put("loginSite", loginSite); long siteCredit = siteService.getSiteCredit(loginSite.getSiteId()); long underSiteCredit = siteService.getUnderSiteCredit(loginSite.getSiteId()); long sitePoint = siteService.getSitePoint(loginSite.getSiteId()); model.put("sitePoint", sitePoint); model.put("siteCredit", siteCredit); model.put("underSiteCredit", underSiteCredit); HashMap creditWait = siteService.getCreditWait(loginSite.getSiteIdx()); model.put("creditWait", creditWait); long insureAmt = siteService.getInsureAmt(loginSite.getSiteId()); long insurePointAmt = siteService.getInsurePointAmt(loginSite.getSiteId()); model.put("insureAmt", insureAmt); model.put("insurePointAmt", insurePointAmt); search.setSiteIdx(loginSite.getSiteIdx()); List mylist = siteService.getSiteVendorListForApi(search); List vendorlist = siteService.getVendorListForApi(search); model.put("mylist", mylist); model.put("vendorlist", vendorlist); return "admin/gameManage"; } @RequestMapping("/getMyDownSite") public @ResponseBody JSONObject getMyDownSite( HttpServletRequest request, ModelMap model, SiteSearch search) throws Exception { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Site loginSite = (Site)authentication.getDetails(); JSONObject obj = new JSONObject(); search.setSiteId(loginSite.getSiteId()); try { List downSiteList = siteService.getMyDownSite(search); obj.put("downSiteList", downSiteList); obj.put("RES", "SUCCESS"); }catch(Exception e) { obj.put("RES", "FAIL"); } return obj; } private String makeApiKey(String param) { int n = 24; // n자리 쿠폰 char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ,'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; Random rd = new Random(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < n; i++) { char ch = chs[rd.nextInt(chs.length)]; sb.append(ch); } return sb.toString(); } }